From 8a94a6ba96b2c19c110b3e175ccb016d04273ca8 Mon Sep 17 00:00:00 2001 From: Prasanna S R Date: Mon, 19 Feb 2024 14:41:19 +0530 Subject: [PATCH] Moving services to auxillary repo --- Makefile | 7 +- deps/Readme.md | 1 + .../.mvn/wrapper/MavenWrapperDownloader.java | 117 - .../.mvn/wrapper/maven-wrapper.jar | Bin 50710 -> 0 bytes .../.mvn/wrapper/maven-wrapper.properties | 2 - .../keycloak-mobile-number-login-spi/Makefile | 7 - .../README.md | 21 - .../keycloak-mobile-number-login-spi/build.sh | 2 - deps/keycloak-mobile-number-login-spi/mvnw | 310 - .../keycloak-mobile-number-login-spi/mvnw.cmd | 182 - deps/keycloak-mobile-number-login-spi/pom.xml | 64 - .../in/divoc/api/authenticator/Constants.java | 16 - .../divoc/api/authenticator/IValidation.java | 5 - .../MobileNumberAuthenticator.java | 186 - .../MobileNumberAuthenticatorFactory.java | 81 - .../api/authenticator/MockOTPServiceImpl.java | 11 - .../api/authenticator/NotifyService.java | 59 - .../divoc/api/authenticator/OTPService.java | 5 - .../api/authenticator/OTPServiceImpl.java | 14 - .../api/authenticator/ValidationService.java | 9 - .../api/authenticator/models/UserDetails.java | 47 - .../api/authenticator/models/UserGroup.java | 19 - ...ycloak.authentication.AuthenticatorFactory | 18 - deps/keycloak/Dockerfile | 7 - deps/keycloak/Makefile | 23 - deps/keycloak/README.md | 7 - deps/keycloak/apple-silicon/Dockerfile | 34 - deps/keycloak/apple-silicon/README.md | 3 - deps/keycloak/apple-silicon/tools/autorun.sh | 21 - .../apple-silicon/tools/build-keycloak.sh | 105 - .../cli/databases/h2/change-database.cli | 9 - .../databases/h2/standalone-configuration.cli | 3 - .../h2/standalone-ha-configuration.cli | 3 - .../cli/databases/mariadb/change-database.cli | 9 - .../mariadb/standalone-configuration.cli | 3 - .../mariadb/standalone-ha-configuration.cli | 3 - .../cli/databases/mssql/change-database.cli | 11 - .../mssql/standalone-configuration.cli | 3 - .../mssql/standalone-ha-configuration.cli | 3 - .../cli/databases/mysql/change-database.cli | 9 - .../mysql/standalone-configuration.cli | 3 - .../mysql/standalone-ha-configuration.cli | 3 - .../cli/databases/oracle/change-database.cli | 9 - .../oracle/standalone-configuration.cli | 3 - .../oracle/standalone-ha-configuration.cli | 3 - .../databases/postgres/change-database.cli | 11 - .../postgres/standalone-configuration.cli | 3 - .../postgres/standalone-ha-configuration.cli | 3 - .../tools/cli/files-plaintext-vault.cli | 7 - .../apple-silicon/tools/cli/hostname.cli | 2 - .../tools/cli/infinispan/cache-owners.cli | 11 - .../tools/cli/jgroups/discovery/JDBC_PING.cli | 11 - .../tools/cli/jgroups/discovery/default.cli | 11 - .../apple-silicon/tools/cli/loglevel.cli | 9 - .../apple-silicon/tools/cli/metrics/db.cli | 5 - .../apple-silicon/tools/cli/metrics/http.cli | 5 - .../tools/cli/metrics/jgroups.cli | 5 - .../apple-silicon/tools/cli/proxy.cli | 2 - .../tools/cli/standalone-configuration.cli | 6 - .../tools/cli/standalone-ha-configuration.cli | 6 - .../apple-silicon/tools/cli/theme.cli | 2 - .../apple-silicon/tools/cli/x509-keystore.cli | 9 - .../tools/cli/x509-truststore.cli | 25 - .../tools/databases/change-database.sh | 11 - .../tools/databases/mariadb/module.xml | 31 - .../tools/databases/mssql/module.xml | 13 - .../tools/databases/mysql/module.xml | 31 - .../tools/databases/oracle/module.xml | 31 - .../tools/databases/postgres/module.xml | 31 - .../apple-silicon/tools/docker-entrypoint.sh | 257 - .../apple-silicon/tools/infinispan.sh | 14 - deps/keycloak/apple-silicon/tools/jgroups.sh | 30 - .../apple-silicon/tools/statistics.sh | 12 - deps/keycloak/apple-silicon/tools/vault.sh | 13 - deps/keycloak/apple-silicon/tools/x509.sh | 115 - deps/keycloak/docker-compose.yml | 29 - deps/keycloak/themes/base/account/account.ftl | 70 - .../themes/base/account/applications.ftl | 76 - .../themes/base/account/federatedIdentity.ftl | 42 - deps/keycloak/themes/base/account/log.ftl | 35 - .../account/messages/messages_ca.properties | 147 - .../account/messages/messages_cs.properties | 171 - .../account/messages/messages_da.properties | 346 - .../account/messages/messages_de.properties | 355 - .../account/messages/messages_en.properties | 389 - .../account/messages/messages_es.properties | 147 - .../account/messages/messages_fr.properties | 180 - .../account/messages/messages_hu.properties | 341 - .../account/messages/messages_it.properties | 343 - .../account/messages/messages_ja.properties | 342 - .../account/messages/messages_lt.properties | 154 - .../account/messages/messages_nl.properties | 133 - .../account/messages/messages_no.properties | 152 - .../account/messages/messages_pl.properties | 248 - .../messages/messages_pt_BR.properties | 356 - .../account/messages/messages_ru.properties | 155 - .../account/messages/messages_sk.properties | 196 - .../account/messages/messages_sv.properties | 150 - .../account/messages/messages_tr.properties | 322 - .../messages/messages_zh_CN.properties | 153 - .../keycloak/themes/base/account/password.ftl | 59 - .../themes/base/account/resource-detail.ftl | 277 - .../themes/base/account/resources.ftl | 403 - .../keycloak/themes/base/account/sessions.ftl | 44 - .../keycloak/themes/base/account/template.ftl | 88 - .../themes/base/account/theme.properties | 1 - deps/keycloak/themes/base/account/totp.ftl | 141 - deps/keycloak/themes/base/admin/index.ftl | 101 - .../messages/admin-messages_ca.properties | 477 - .../messages/admin-messages_de.properties | 1627 -- .../messages/admin-messages_en.properties | 1905 -- .../messages/admin-messages_es.properties | 479 - .../messages/admin-messages_fr.properties | 155 - .../messages/admin-messages_it.properties | 0 .../messages/admin-messages_ja.properties | 1639 -- .../messages/admin-messages_lt.properties | 1219 - .../messages/admin-messages_nl.properties | 0 .../messages/admin-messages_no.properties | 1127 - .../messages/admin-messages_pl.properties | 1 - .../messages/admin-messages_pt_BR.properties | 1097 - .../messages/admin-messages_ru.properties | 1277 -- .../messages/admin-messages_zh_CN.properties | 1228 - .../admin/messages/messages_ca.properties | 8 - .../admin/messages/messages_de.properties | 29 - .../admin/messages/messages_en.properties | 57 - .../admin/messages/messages_es.properties | 8 - .../admin/messages/messages_fr.properties | 8 - .../admin/messages/messages_it.properties | 0 .../admin/messages/messages_ja.properties | 30 - .../admin/messages/messages_lt.properties | 25 - .../admin/messages/messages_nl.properties | 27 - .../admin/messages/messages_no.properties | 14 - .../admin/messages/messages_pl.properties | 1 - .../admin/messages/messages_pt_BR.properties | 18 - .../admin/messages/messages_ru.properties | 26 - .../admin/messages/messages_zh_CN.properties | 26 - .../themes/base/admin/resources/js/app.js | 3689 --- .../admin/resources/js/authz/authz-app.js | 549 - .../resources/js/authz/authz-controller.js | 3013 --- .../resources/js/authz/authz-services.js | 218 - .../admin/resources/js/controllers/clients.js | 3730 --- .../admin/resources/js/controllers/groups.js | 625 - .../admin/resources/js/controllers/realm.js | 4219 ---- .../admin/resources/js/controllers/roles.js | 48 - .../admin/resources/js/controllers/users.js | 2044 -- .../themes/base/admin/resources/js/loaders.js | 587 - .../base/admin/resources/js/services.js | 2256 -- .../authentication-flow-bindings.html | 83 - .../partials/authentication-flows.html | 72 - .../partials/authenticator-config.html | 52 - .../authz/mgmt/broker-permissions.html | 40 - .../authz/mgmt/client-permissions.html | 39 - .../authz/mgmt/client-role-permissions.html | 40 - .../authz/mgmt/group-permissions.html | 39 - .../authz/mgmt/realm-role-permissions.html | 39 - .../authz/mgmt/users-permissions.html | 35 - ...esource-server-policy-resource-detail.html | 131 - .../resource-server-policy-scope-detail.html | 134 - .../resource-server-permission-list.html | 118 - ...source-server-policy-aggregate-detail.html | 123 - .../resource-server-policy-client-detail.html | 93 - ...rce-server-policy-client-scope-detail.html | 126 - .../resource-server-policy-group-detail.html | 126 - .../resource-server-policy-js-detail.html | 69 - .../resource-server-policy-role-detail.html | 169 - .../resource-server-policy-time-detail.html | 119 - .../resource-server-policy-user-detail.html | 93 - ...esource-server-policy-evaluate-result.html | 72 - .../resource-server-policy-evaluate.html | 267 - .../policy/resource-server-policy-list.html | 117 - .../authz/resource-server-detail.html | 77 - .../resource-server-export-settings.html | 35 - .../partials/authz/resource-server-list.html | 49 - .../resource-server-resource-detail.html | 126 - .../authz/resource-server-resource-list.html | 169 - .../authz/resource-server-scope-detail.html | 50 - .../authz/resource-server-scope-list.html | 102 - .../admin/resources/partials/brute-force.html | 114 - .../admin/resources/partials/ciba-policy.html | 62 - .../base/admin/resources/partials/claims.html | 62 - .../partials/client-clustering-node.html | 37 - .../resources/partials/client-clustering.html | 76 - .../partials/client-credentials-generic.html | 14 - .../partials/client-credentials-jwt.html | 26 - .../client-credentials-secret-jwt.html | 39 - .../partials/client-credentials-secret.html | 17 - .../partials/client-credentials-x509.html | 21 - .../partials/client-credentials.html | 38 - .../resources/partials/client-detail.html | 823 - .../resources/partials/client-import.html | 46 - .../client-initial-access-create.html | 63 - .../partials/client-initial-access.html | 55 - .../partials/client-installation.html | 36 - .../admin/resources/partials/client-keys.html | 146 - .../admin/resources/partials/client-list.html | 68 - .../partials/client-mappers-add.html | 53 - .../resources/partials/client-mappers.html | 55 - .../partials/client-offline-sessions.html | 59 - .../partials/client-oidc-key-export.html | 57 - .../partials/client-oidc-key-import.html | 62 - .../resources/partials/client-oidc-keys.html | 90 - .../partials/client-policies-json.html | 60 - .../partials/client-policies-list.html | 74 - ...client-policies-policy-edit-condition.html | 65 - .../partials/client-policies-policy-edit.html | 140 - ...lient-policies-profiles-edit-executor.html | 65 - .../client-policies-profiles-edit.html | 97 - .../client-policies-profiles-json.html | 60 - .../client-policies-profiles-list.html | 80 - .../client-protocol-mapper-detail.html | 13 - .../partials/client-reg-policies.html | 106 - .../partials/client-reg-policy-detail.html | 68 - .../client-reg-trusted-host-create.html | 55 - .../client-reg-trusted-host-detail.html | 64 - .../client-registration-access-token.html | 18 - .../resources/partials/client-revocation.html | 30 - .../partials/client-role-attributes.html | 45 - .../partials/client-role-detail.html | 140 - .../resources/partials/client-role-list.html | 64 - .../resources/partials/client-role-users.html | 52 - .../partials/client-saml-key-export.html | 63 - .../partials/client-saml-key-import.html | 62 - .../resources/partials/client-saml-keys.html | 66 - .../partials/client-scope-detail.html | 84 - .../resources/partials/client-scope-list.html | 60 - .../partials/client-scope-mappers-add.html | 53 - .../partials/client-scope-mappers.html | 55 - .../partials/client-scope-mappings.html | 127 - .../client-scope-protocol-mapper-detail.html | 13 - .../partials/client-scope-scope-mappings.html | 116 - .../partials/client-scopes-evaluate.html | 268 - .../partials/client-scopes-realm-default.html | 99 - .../partials/client-scopes-setup.html | 123 - .../client-service-account-roles.html | 127 - .../resources/partials/client-sessions.html | 57 - .../partials/client-storage-generic.html | 207 - .../partials/client-storage-list.html | 67 - .../resources/partials/create-client.html | 72 - .../resources/partials/create-execution.html | 31 - .../partials/create-flow-execution.html | 55 - .../admin/resources/partials/create-flow.html | 43 - .../resources/partials/create-group.html | 25 - .../resources/partials/default-groups.html | 91 - .../resources/partials/defense-headers.html | 71 - .../admin/resources/partials/forbidden.html | 7 - .../resources/partials/group-attributes.html | 41 - .../resources/partials/group-detail.html | 28 - .../admin/resources/partials/group-list.html | 50 - .../resources/partials/group-members.html | 48 - .../partials/group-role-mappings.html | 111 - .../base/admin/resources/partials/home.html | 4 - .../identity-provider-mapper-detail.html | 84 - .../partials/identity-provider-mappers.html | 49 - .../base/admin/resources/partials/menu.html | 26 - .../modal/realm-events-admin-auth.html | 8 - .../realm-events-admin-representation.html | 3 - .../partials/modal/role-selector.html | 39 - ...unregistered-required-action-selector.html | 21 - .../partials/modal/user-credential-data.html | 8 - .../resources/partials/modal/view-key.html | 18 - .../resources/partials/modal/view-object.html | 3 - .../admin/resources/partials/notfound.html | 7 - .../admin/resources/partials/otp-policy.html | 88 - .../resources/partials/pagenotfound.html | 7 - .../resources/partials/partial-export.html | 34 - .../resources/partials/partial-import.html | 130 - .../resources/partials/password-policy.html | 51 - .../partials/protocol-mapper-detail.html | 64 - .../partials/realm-cache-settings.html | 30 - .../resources/partials/realm-create.html | 45 - .../partials/realm-default-roles.html | 88 - .../resources/partials/realm-detail.html | 82 - .../partials/realm-events-admin.html | 134 - .../partials/realm-events-config.html | 106 - .../resources/partials/realm-events.html | 124 - .../realm-identity-provider-bitbucket.html | 142 - .../realm-identity-provider-facebook-ext.html | 7 - .../realm-identity-provider-facebook.html | 1 - .../realm-identity-provider-github-ext.html | 0 .../realm-identity-provider-github.html | 1 - .../realm-identity-provider-gitlab.html | 142 - .../realm-identity-provider-google-ext.html | 21 - .../realm-identity-provider-google.html | 1 - ...realm-identity-provider-instagram-ext.html | 0 .../realm-identity-provider-instagram.html | 1 - ...realm-identity-provider-keycloak-oidc.html | 1 - .../realm-identity-provider-linkedin-ext.html | 0 .../realm-identity-provider-linkedin.html | 1 - ...realm-identity-provider-microsoft-ext.html | 0 .../realm-identity-provider-microsoft.html | 1 - .../realm-identity-provider-oidc.html | 388 - ...lm-identity-provider-openshift-v3-ext.html | 7 - .../realm-identity-provider-openshift-v3.html | 164 - ...lm-identity-provider-openshift-v4-ext.html | 7 - .../realm-identity-provider-openshift-v4.html | 164 - .../realm-identity-provider-paypal-ext.html | 7 - .../realm-identity-provider-paypal.html | 1 - .../realm-identity-provider-saml.html | 414 - .../realm-identity-provider-social.html | 157 - ...m-identity-provider-stackoverflow-ext.html | 7 - ...realm-identity-provider-stackoverflow.html | 1 - .../realm-identity-provider-twitter-ext.html | 0 .../realm-identity-provider-twitter.html | 1 - .../partials/realm-identity-provider.html | 81 - .../partials/realm-keys-disabled.html | 70 - .../partials/realm-keys-generic.html | 69 - .../partials/realm-keys-passive.html | 70 - .../partials/realm-keys-providers.html | 75 - .../admin/resources/partials/realm-keys.html | 71 - .../admin/resources/partials/realm-list.html | 20 - .../partials/realm-localization-detail.html | 50 - .../partials/realm-localization-upload.html | 37 - .../partials/realm-localization.html | 61 - .../partials/realm-login-settings.html | 87 - .../resources/partials/realm-role-users.html | 50 - .../admin/resources/partials/realm-smtp.html | 96 - .../partials/realm-theme-settings.html | 97 - .../resources/partials/realm-tokens.html | 385 - .../partials/realm-user-profile.html | 209 - .../resources/partials/required-actions.html | 38 - .../resources/partials/role-attributes.html | 41 - .../admin/resources/partials/role-detail.html | 135 - .../admin/resources/partials/role-list.html | 63 - .../resources/partials/role-mappings.html | 119 - .../partials/server-info-providers.html | 55 - .../admin/resources/partials/server-info.html | 135 - .../resources/partials/session-realm.html | 34 - .../partials/session-revocation.html | 30 - .../resources/partials/user-attributes.html | 41 - .../resources/partials/user-consents.html | 41 - .../resources/partials/user-credentials.html | 173 - .../admin/resources/partials/user-detail.html | 186 - .../user-federated-identity-detail.html | 53 - .../user-federated-identity-list.html | 41 - .../resources/partials/user-federation.html | 69 - .../partials/user-group-membership.html | 114 - .../admin/resources/partials/user-list.html | 69 - .../partials/user-offline-sessions.html | 35 - .../resources/partials/user-sessions.html | 43 - .../partials/user-storage-generic.html | 246 - .../partials/user-storage-kerberos.html | 264 - .../user-storage-ldap-mapper-detail.html | 64 - .../partials/user-storage-ldap-mappers.html | 46 - .../resources/partials/user-storage-ldap.html | 567 - .../resources/partials/user-storage.html | 45 - .../webauthn-policy-passwordless.html | 177 - .../resources/partials/webauthn-policy.html | 159 - .../templates/authz/kc-authz-modal.html | 11 - .../authz/kc-tabs-resource-server.html | 14 - .../templates/kc-component-config.html | 67 - .../admin/resources/templates/kc-copy.html | 18 - .../resources/templates/kc-dropdown.html | 12 - .../admin/resources/templates/kc-edit.html | 22 - .../admin/resources/templates/kc-menu.html | 65 - .../resources/templates/kc-modal-message.html | 10 - .../admin/resources/templates/kc-modal.html | 11 - .../admin/resources/templates/kc-paging.html | 25 - .../templates/kc-provider-config.html | 94 - .../admin/resources/templates/kc-switch.html | 12 - .../templates/kc-tabs-authentication.html | 16 - .../templates/kc-tabs-client-role.html | 17 - .../templates/kc-tabs-client-scope.html | 20 - .../resources/templates/kc-tabs-client.html | 65 - .../resources/templates/kc-tabs-clients.html | 16 - .../templates/kc-tabs-group-list.html | 11 - .../resources/templates/kc-tabs-group.html | 17 - .../templates/kc-tabs-identity-provider.html | 16 - .../resources/templates/kc-tabs-ldap.html | 12 - .../resources/templates/kc-tabs-realm.html | 24 - .../resources/templates/kc-tabs-role.html | 16 - .../templates/kc-tabs-user-storage.html | 11 - .../resources/templates/kc-tabs-user.html | 18 - .../resources/templates/kc-tabs-users.html | 11 - .../themes/base/admin/theme.properties | 1 - .../themes/base/email/html/email-test.ftl | 5 - .../html/email-verification-with-code.ftl | 5 - .../base/email/html/email-verification.ftl | 5 - .../base/email/html/event-login_error.ftl | 5 - .../base/email/html/event-remove_totp.ftl | 5 - .../base/email/html/event-update_password.ftl | 5 - .../base/email/html/event-update_totp.ftl | 5 - .../themes/base/email/html/executeActions.ftl | 9 - .../email/html/identity-provider-link.ftl | 5 - .../themes/base/email/html/password-reset.ftl | 5 - .../email/messages/messages_ca.properties | 21 - .../email/messages/messages_cs.properties | 56 - .../email/messages/messages_da.properties | 47 - .../email/messages/messages_de.properties | 43 - .../email/messages/messages_en.properties | 51 - .../email/messages/messages_es.properties | 21 - .../email/messages/messages_fr.properties | 37 - .../email/messages/messages_hu.properties | 47 - .../email/messages/messages_it.properties | 50 - .../email/messages/messages_ja.properties | 52 - .../email/messages/messages_lt.properties | 25 - .../email/messages/messages_nl.properties | 38 - .../email/messages/messages_no.properties | 24 - .../email/messages/messages_pl.properties | 56 - .../email/messages/messages_pt_BR.properties | 51 - .../email/messages/messages_ru.properties | 25 - .../email/messages/messages_sk.properties | 48 - .../email/messages/messages_sv.properties | 25 - .../email/messages/messages_tr.properties | 51 - .../email/messages/messages_zh_CN.properties | 25 - .../themes/base/email/text/email-test.ftl | 2 - .../text/email-verification-with-code.ftl | 2 - .../base/email/text/email-verification.ftl | 2 - .../base/email/text/event-login_error.ftl | 2 - .../base/email/text/event-remove_totp.ftl | 2 - .../base/email/text/event-update_password.ftl | 2 - .../base/email/text/event-update_totp.ftl | 2 - .../themes/base/email/text/executeActions.ftl | 4 - .../email/text/identity-provider-link.ftl | 2 - .../themes/base/email/text/password-reset.ftl | 2 - .../themes/base/email/theme.properties | 1 - .../keycloak/themes/base/login/cli_splash.ftl | 7 - deps/keycloak/themes/base/login/code.ftl | 19 - .../base/login/delete-account-confirm.ftl | 33 - deps/keycloak/themes/base/login/error.ftl | 13 - deps/keycloak/themes/base/login/info.ftl | 24 - .../base/login/login-config-totp-text.ftl | 31 - .../themes/base/login/login-config-totp.ftl | 108 - .../base/login/login-idp-link-confirm.ftl | 13 - .../base/login/login-idp-link-email.ftl | 16 - .../themes/base/login/login-oauth-grant.ftl | 41 - .../login-oauth2-device-verify-user-code.ftl | 31 - deps/keycloak/themes/base/login/login-otp.ftl | 58 - .../themes/base/login/login-page-expired.ftl | 11 - .../themes/base/login/login-password.ftl | 43 - .../base/login/login-reset-password.ftl | 40 - .../base/login/login-update-password.ftl | 71 - .../base/login/login-update-profile.ftl | 97 - .../themes/base/login/login-username.ftl | 92 - .../login/login-verify-email-code-text.ftl | 2 - .../themes/base/login/login-verify-email.ftl | 14 - .../themes/base/login/login-x509-info.ftl | 55 - deps/keycloak/themes/base/login/login.ftl | 99 - .../login/messages/messages_ca.properties | 200 - .../login/messages/messages_cs.properties | 259 - .../login/messages/messages_da.properties | 361 - .../login/messages/messages_de.properties | 378 - .../login/messages/messages_en.properties | 429 - .../login/messages/messages_es.properties | 200 - .../login/messages/messages_fr.properties | 276 - .../login/messages/messages_hu.properties | 352 - .../login/messages/messages_it.properties | 352 - .../login/messages/messages_ja.properties | 353 - .../login/messages/messages_lt.properties | 216 - .../login/messages/messages_nl.properties | 294 - .../login/messages/messages_no.properties | 214 - .../login/messages/messages_pl.properties | 316 - .../login/messages/messages_pt_BR.properties | 380 - .../login/messages/messages_ru.properties | 217 - .../login/messages/messages_sk.properties | 262 - .../login/messages/messages_sv.properties | 213 - .../login/messages/messages_tr.properties | 294 - .../login/messages/messages_zh_CN.properties | 216 - deps/keycloak/themes/base/login/register.ftl | 141 - .../base/login/resources/js/base64url.js | 114 - .../themes/base/login/saml-post-form.ftl | 25 - .../base/login/select-authenticator.ftl | 43 - deps/keycloak/themes/base/login/template.ftl | 152 - deps/keycloak/themes/base/login/terms.ftl | 15 - .../themes/base/login/theme.properties | 1 - .../themes/base/login/verify-profile.ftl | 47 - .../base/login/webauthn-authenticate.ftl | 123 - .../themes/base/login/webauthn-error.ftl | 55 - .../themes/base/login/webauthn-register.ftl | 170 - .../themes/keycloak.v2/account/index.ftl | 279 - .../account/messages/messages_ca.properties | 1 - .../account/messages/messages_cs.properties | 1 - .../account/messages/messages_da.properties | 1 - .../account/messages/messages_de.properties | 122 - .../account/messages/messages_en.properties | 134 - .../account/messages/messages_es.properties | 1 - .../account/messages/messages_fr.properties | 32 - .../account/messages/messages_hu.properties | 1 - .../account/messages/messages_it.properties | 1 - .../account/messages/messages_ja.properties | 1 - .../account/messages/messages_lt.properties | 1 - .../account/messages/messages_nl.properties | 1 - .../account/messages/messages_no.properties | 1 - .../account/messages/messages_pl.properties | 1 - .../messages/messages_pt_BR.properties | 121 - .../account/messages/messages_ru.properties | 1 - .../account/messages/messages_sk.properties | 1 - .../account/messages/messages_sv.properties | 1 - .../account/messages/messages_tr.properties | 1 - .../messages/messages_zh_CN.properties | 1 - .../keycloak.v2/account/resources/App.js | 80 - .../keycloak.v2/account/resources/App.js.map | 1 - .../account/resources/ContentPages.js | 157 - .../account/resources/ContentPages.js.map | 1 - .../keycloak.v2/account/resources/Main.js | 97 - .../keycloak.v2/account/resources/Main.js.map | 1 - .../keycloak.v2/account/resources/PageNav.js | 51 - .../account/resources/PageNav.js.map | 1 - .../account/resources/PageToolbar.js | 78 - .../account/resources/PageToolbar.js.map | 1 - .../account-service/AccountServiceContext.js | 3 - .../AccountServiceContext.js.map | 1 - .../account-service/account.service.js | 149 - .../account-service/account.service.js.map | 1 - .../account/resources/content.json | 60 - .../account/resources/content/ContentAlert.js | 113 - .../resources/content/ContentAlert.js.map | 1 - .../account/resources/content/ContentPage.js | 65 - .../resources/content/ContentPage.js.map | 1 - .../content/account-page/AccountPage.js | 273 - .../content/account-page/AccountPage.js.map | 1 - .../aia-page/AppInitiatedActionPage.js | 70 - .../aia-page/AppInitiatedActionPage.js.map | 1 - .../applications-page/ApplicationsPage.js | 182 - .../applications-page/ApplicationsPage.js.map | 1 - .../authenticator-page/AuthenticatorPage.js | 28 - .../AuthenticatorPage.js.map | 1 - .../DeviceActivityPage.js | 264 - .../DeviceActivityPage.js.map | 1 - .../content/forbidden-page/ForbiddenPage.js | 36 - .../forbidden-page/ForbiddenPage.js.map | 1 - .../LinkedAccountsPage.js | 272 - .../LinkedAccountsPage.js.map | 1 - .../AbstractResourceTable.js | 40 - .../AbstractResourceTable.js.map | 1 - .../my-resources-page/EditTheResource.js | 120 - .../my-resources-page/EditTheResource.js.map | 1 - .../my-resources-page/MyResourcesPage.js | 282 - .../my-resources-page/MyResourcesPage.js.map | 1 - .../my-resources-page/PermissionRequest.js | 151 - .../PermissionRequest.js.map | 1 - .../my-resources-page/PermissionSelect.js | 100 - .../my-resources-page/PermissionSelect.js.map | 1 - .../my-resources-page/ResourcesTable.js | 309 - .../my-resources-page/ResourcesTable.js.map | 1 - .../my-resources-page/ShareTheResource.js | 227 - .../my-resources-page/ShareTheResource.js.map | 1 - .../my-resources-page/SharedResourcesTable.js | 103 - .../SharedResourcesTable.js.map | 1 - .../my-resources-page/resource-model.js | 16 - .../my-resources-page/resource-model.js.map | 1 - .../content/page-not-found/PageNotFound.js | 31 - .../page-not-found/PageNotFound.js.map | 1 - .../content/signingin-page/SigningInPage.js | 331 - .../signingin-page/SigningInPage.js.map | 1 - .../keycloak-service/KeycloakContext.js | 3 - .../keycloak-service/KeycloakContext.js.map | 1 - .../keycloak-service/keycloak.service.js | 77 - .../keycloak-service/keycloak.service.js.map | 1 - .../account/resources/public/favicon.ico | Bin 627 -> 0 bytes .../account/resources/public/layout.css | 16 - .../account/resources/public/logo.svg | 1 - .../account/resources/util/AIACommand.js | 33 - .../account/resources/util/AIACommand.js.map | 1 - .../account/resources/util/ParseLink.js | 19 - .../account/resources/util/ParseLink.js.map | 1 - .../account/resources/util/RedirectUri.js | 39 - .../account/resources/util/RedirectUri.js.map | 1 - .../account/resources/util/TimeUtil.js | 50 - .../account/resources/util/TimeUtil.js.map | 1 - .../account/resources/welcome-page-scripts.js | 89 - .../resources/widgets/ContinueCancelModal.js | 103 - .../widgets/ContinueCancelModal.js.map | 1 - .../resources/widgets/EmptyMessageState.js | 38 - .../widgets/EmptyMessageState.js.map | 1 - .../resources/widgets/LocaleSelectors.js | 41 - .../resources/widgets/LocaleSelectors.js.map | 1 - .../account/resources/widgets/Logout.js | 46 - .../account/resources/widgets/Logout.js.map | 1 - .../account/resources/widgets/Msg.js | 69 - .../account/resources/widgets/Msg.js.map | 1 - .../resources/widgets/ReferrerDropdownItem.js | 38 - .../widgets/ReferrerDropdownItem.js.map | 1 - .../account/resources/widgets/ReferrerLink.js | 44 - .../resources/widgets/ReferrerLink.js.map | 1 - .../account/resources/widgets/features.js | 2 - .../account/resources/widgets/features.js.map | 1 - .../keycloak.v2/account/theme.properties | 16 - .../account/resources/css/account.css | 277 - .../resources/img/icon-sidebar-active.png | Bin 202 -> 0 bytes .../account/resources/img/keycloak-logo.png | Bin 5213 -> 0 bytes .../keycloak/account/resources/img/logo.png | Bin 4156 -> 0 bytes .../themes/keycloak/account/theme.properties | 14 - .../keycloak/admin/resources/css/styles.css | 501 - .../admin/resources/img/keyclok-logo.png | Bin 5268 -> 0 bytes .../admin/resources/img/keyclok-logo.svg | 194 - .../admin/resources/img/select-arrow.png | Bin 1154 -> 0 bytes .../themes/keycloak/admin/theme.properties | 5 - .../keycloak/common/resources/img/favicon.ico | Bin 627 -> 0 bytes .../common/resources/lib/angular/errors.json | 1 - .../resources/lib/angular/treeview/LICENSE | 20 - .../lib/angular/treeview/angular.treeview.js | 97 - .../angular/treeview/angular.treeview.min.js | 9 - .../angular/treeview/css/angular.treeview.css | 99 - .../lib/angular/treeview/img/file.png | Bin 263 -> 0 bytes .../angular/treeview/img/folder-closed.png | Bin 281 -> 0 bytes .../lib/angular/treeview/img/folder.png | Bin 289 -> 0 bytes .../lib/angular/ui-bootstrap-tpls-0.11.0.js | 4116 ---- .../common/resources/lib/angular/version.json | 1 - .../resources/lib/filesaver/FileSaver.js | 188 - .../resources/lib/fileupload/FileAPI.min.js | 72 - .../angular-file-upload-html5-shim.js | 25 - .../angular-file-upload-html5-shim.min.js | 2 - .../fileupload/angular-file-upload-shim.js | 215 - .../angular-file-upload-shim.min.js | 2 - .../lib/fileupload/angular-file-upload.js | 156 - .../lib/fileupload/angular-file-upload.min.js | 2 - .../common/resources/lib/pficon/pficon.css | 21 - .../common/resources/lib/pficon/pficon.woff | Bin 19456 -> 0 bytes .../common/resources/lib/pficon/pficon.woff2 | Bin 16296 -> 0 bytes .../common/resources/lib/ui-ace/ace.js | 18673 ---------------- .../common/resources/lib/ui-ace/min/ace.js | 11 - .../lib/ui-ace/min/mode-javascript.js | 1 - .../resources/lib/ui-ace/min/theme-github.js | 1 - .../lib/ui-ace/min/worker-javascript.js | 1 - .../resources/lib/ui-ace/mode-javascript.js | 1140 - .../resources/lib/ui-ace/theme-github.js | 103 - .../common/resources/lib/ui-ace/ui-ace.js | 328 - .../common/resources/lib/ui-ace/ui-ace.min.js | 7 - .../resources/lib/ui-ace/worker-javascript.js | 12530 ----------- .../lib/zocial/zocial-regular-webfont.eot | Bin 25722 -> 0 bytes .../lib/zocial/zocial-regular-webfont.svg | 1107 - .../lib/zocial/zocial-regular-webfont.ttf | Bin 25552 -> 0 bytes .../lib/zocial/zocial-regular-webfont.woff | Bin 17736 -> 0 bytes .../common/resources/lib/zocial/zocial.css | 505 - .../web_modules/@patternfly/react-core.js | 48 - .../web_modules/@patternfly/react-core.js.map | 1 - .../react-core/dist/styles/app.css | 9690 -------- .../overpass-bold-italic.woff2 | Bin 37252 -> 0 bytes .../overpass-webfont/overpass-bold.woff2 | Bin 34752 -> 0 bytes .../overpass-extrabold-italic.woff2 | Bin 36660 -> 0 bytes .../overpass-webfont/overpass-extrabold.woff2 | Bin 33808 -> 0 bytes .../overpass-extralight-italic.woff2 | Bin 36800 -> 0 bytes .../overpass-extralight.woff2 | Bin 35056 -> 0 bytes .../overpass-heavy-italic.woff2 | Bin 37972 -> 0 bytes .../overpass-webfont/overpass-heavy.woff2 | Bin 35640 -> 0 bytes .../overpass-webfont/overpass-italic.woff2 | Bin 37368 -> 0 bytes .../overpass-light-italic.woff2 | Bin 36580 -> 0 bytes .../overpass-webfont/overpass-light.woff2 | Bin 34472 -> 0 bytes .../overpass-webfont/overpass-regular.woff2 | Bin 35128 -> 0 bytes .../overpass-semibold-italic.woff2 | Bin 36904 -> 0 bytes .../overpass-webfont/overpass-semibold.woff2 | Bin 33416 -> 0 bytes .../overpass-thin-italic.woff2 | Bin 35900 -> 0 bytes .../overpass-webfont/overpass-thin.woff2 | Bin 33696 -> 0 bytes .../dist/styles/assets/pficon/pficon.woff2 | Bin 16324 -> 0 bytes .../react-core/dist/styles/base.css | 1293 -- .../web_modules/@patternfly/react-icons.js | 2 - .../@patternfly/react-icons.js.map | 1 - .../web_modules/@patternfly/react-styles.js | 2 - .../@patternfly/react-styles.js.map | 1 - .../web_modules/common/StyleSheet-4762b333.js | 2 - .../common/StyleSheet-4762b333.js.map | 1 - .../common/_commonjsHelpers-89bea96a.js | 2 - .../common/_commonjsHelpers-89bea96a.js.map | 1 - .../web_modules/common/index-1a6834d2.js | 2 - .../web_modules/common/index-1a6834d2.js.map | 1 - .../resources/web_modules/import-map.json | 10 - .../common/resources/web_modules/react-dom.js | 10 - .../resources/web_modules/react-dom.js.map | 1 - .../resources/web_modules/react-router-dom.js | 2 - .../web_modules/react-router-dom.js.map | 1 - .../common/resources/web_modules/react.js | 10 - .../common/resources/web_modules/react.js.map | 1 - .../themes/keycloak/email/theme.properties | 1 - .../keycloak/login/resources/css/login.css | 688 - .../keycloak/login/resources/css/tile.css | 207 - .../img/feedback-error-arrow-down.png | Bin 513 -> 0 bytes .../resources/img/feedback-error-sign.png | Bin 343 -> 0 bytes .../img/feedback-success-arrow-down.png | Bin 678 -> 0 bytes .../resources/img/feedback-success-sign.png | Bin 410 -> 0 bytes .../img/feedback-warning-arrow-down.png | Bin 513 -> 0 bytes .../resources/img/feedback-warning-sign.png | Bin 646 -> 0 bytes .../login/resources/img/keycloak-bg.png | Bin 81862 -> 0 bytes .../resources/img/keycloak-logo-text.png | Bin 19994 -> 0 bytes .../login/resources/img/keycloak-logo.png | Bin 5281 -> 0 bytes .../themes/keycloak/login/theme.properties | 130 - .../themes/keycloak/welcome/index.ftl | 137 - .../welcome/resources/admin-console.png | Bin 712 -> 0 bytes .../keycloak/welcome/resources/alert.png | Bin 6189 -> 0 bytes .../themes/keycloak/welcome/resources/bg.png | Bin 72796 -> 0 bytes .../themes/keycloak/welcome/resources/bug.png | Bin 1397 -> 0 bytes .../welcome/resources/css/welcome.css | 140 - .../welcome/resources/jboss_community.png | Bin 3204 -> 0 bytes .../welcome/resources/keycloak-project.png | Bin 1611 -> 0 bytes .../welcome/resources/keycloak_logo.png | Bin 7539 -> 0 bytes .../keycloak/welcome/resources/logo.png | Bin 7539 -> 0 bytes .../keycloak/welcome/resources/mail.png | Bin 1037 -> 0 bytes .../keycloak/welcome/resources/user.png | Bin 2423 -> 0 bytes .../themes/keycloak/welcome/theme.properties | 7 - deps/keycloak/themes/ndear/login/error.ftl | 11 - .../themes/ndear/login/login-oauth-grant.ftl | 41 - deps/keycloak/themes/ndear/login/login.ftl | 99 - .../login/messages/messages_de.properties | 284 - .../login/messages/messages_en.properties | 284 - .../login/messages/messages_es.properties | 284 - .../login/messages/messages_fr.properties | 284 - .../login/messages/messages_it.properties | 284 - .../login/messages/messages_ja.properties | 284 - .../login/messages/messages_nb.properties | 284 - .../login/messages/messages_nl.properties | 284 - .../login/messages/messages_pt_BR.properties | 284 - .../login/messages/messages_ru.properties | 284 - .../login/messages/messages_zh_CN.properties | 284 - .../themes/ndear/login/mobile-login.ftl | 53 - .../ndear/login/resources/css/login.css | 191 - .../themes/ndear/login/resources/css/main.css | 116 - .../ndear/login/resources/img/ndearLogo.svg | 21 - deps/keycloak/themes/ndear/login/template.ftl | 67 - .../themes/ndear/login/theme.properties | 11 - .../themes/ndear/login/verify-otp.ftl | 58 - .../themes/sunbird-rc/login/error.ftl | 11 - .../sunbird-rc/login/login-oauth-grant.ftl | 41 - .../login/login-update-password.ftl | 92 - .../sunbird-rc/login/login-update-profile.ftl | 121 - .../themes/sunbird-rc/login/login.ftl | 123 - .../login/messages/messages_de.properties | 284 - .../login/messages/messages_en.properties | 284 - .../login/messages/messages_es.properties | 284 - .../login/messages/messages_fr.properties | 284 - .../login/messages/messages_it.properties | 284 - .../login/messages/messages_ja.properties | 284 - .../login/messages/messages_nb.properties | 284 - .../login/messages/messages_nl.properties | 284 - .../login/messages/messages_pt_BR.properties | 284 - .../login/messages/messages_ru.properties | 284 - .../login/messages/messages_zh_CN.properties | 284 - .../themes/sunbird-rc/login/mobile-login.ftl | 53 - .../sunbird-rc/login/resources/css/login.css | 252 - .../sunbird-rc/login/resources/css/main.css | 149 - .../sunbird-rc/login/resources/img/bg.svg | 858 - .../login/resources/img/facebook.svg | 3 - .../login/resources/img/ndearLogo.svg | 21 - .../login/resources/img/next-btn.svg | 3 - .../login/resources/img/theme-icon.svg | 3 - .../login/resources/img/twitter.svg | 3 - .../login/resources/img/youtube.svg | 3 - .../themes/sunbird-rc/login/template.ftl | 94 - .../themes/sunbird-rc/login/theme.properties | 26 - .../themes/sunbird-rc/login/verify-otp.ftl | 85 - .../keycloak/themes/sys-admin/login/error.ftl | 11 - .../sys-admin/login/login-oauth-grant.ftl | 41 - .../keycloak/themes/sys-admin/login/login.ftl | 99 - .../login/messages/messages_de.properties | 284 - .../login/messages/messages_en.properties | 284 - .../login/messages/messages_es.properties | 284 - .../login/messages/messages_fr.properties | 284 - .../login/messages/messages_it.properties | 284 - .../login/messages/messages_ja.properties | 284 - .../login/messages/messages_nb.properties | 284 - .../login/messages/messages_nl.properties | 284 - .../login/messages/messages_pt_BR.properties | 284 - .../login/messages/messages_ru.properties | 284 - .../login/messages/messages_zh_CN.properties | 284 - .../themes/sys-admin/login/mobile-login.ftl | 47 - .../sys-admin/login/resources/css/login.css | 165 - .../sys-admin/login/resources/css/main.css | 117 - .../sys-admin/login/resources/img/di.png | Bin 9153 -> 0 bytes .../login/resources/img/login-arrow.png | Bin 250 -> 0 bytes .../login/resources/img/login-bg.png | Bin 135904 -> 0 bytes .../sys-admin/login/resources/img/meit.png | Bin 10845 -> 0 bytes .../sys-admin/login/resources/img/mhfw.png | Bin 10735 -> 0 bytes .../login/resources/img/nav-logo.png | Bin 7633 -> 0 bytes .../themes/sys-admin/login/template.ftl | 99 - .../themes/sys-admin/login/theme.properties | 10 - .../themes/sys-admin/login/verify-otp.ftl | 49 - infra/README.md | 135 - infra/helm_charts/.helmignore | 23 - infra/helm_charts/Chart.yaml | 24 - .../charts/certificate-api/.helmignore | 23 - .../charts/certificate-api/Chart.yaml | 24 - .../certificate-api/templates/NOTES.txt | 22 - .../certificate-api/templates/_helpers.tpl | 62 - .../certificate-api/templates/deployment.yaml | 74 - .../charts/certificate-api/templates/hpa.yaml | 33 - .../certificate-api/templates/ingress.yaml | 62 - .../certificate-api/templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - .../charts/certificate-api/values.yaml | 71 - .../charts/certificate-signer/.helmignore | 23 - .../charts/certificate-signer/Chart.yaml | 24 - .../certificate-signer/keys/config.json | 11 - .../certificate-signer/templates/NOTES.txt | 22 - .../certificate-signer/templates/_helpers.tpl | 62 - .../templates/configmap.yaml | 10 - .../templates/deployment.yaml | 81 - .../certificate-signer/templates/hpa.yaml | 33 - .../certificate-signer/templates/ingress.yaml | 62 - .../certificate-signer/templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - .../charts/certificate-signer/values.yaml | 71 - infra/helm_charts/charts/claim-ms/.helmignore | 23 - infra/helm_charts/charts/claim-ms/Chart.yaml | 24 - .../charts/claim-ms/templates/NOTES.txt | 22 - .../charts/claim-ms/templates/_helpers.tpl | 62 - .../charts/claim-ms/templates/deployment.yaml | 77 - .../charts/claim-ms/templates/hpa.yaml | 33 - .../charts/claim-ms/templates/ingress.yaml | 62 - .../charts/claim-ms/templates/service.yaml | 16 - .../claim-ms/templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 16 - infra/helm_charts/charts/claim-ms/values.yaml | 75 - infra/helm_charts/charts/config/.helmignore | 23 - infra/helm_charts/charts/config/Chart.yaml | 24 - .../charts/config/templates/configmap.yaml | 48 - infra/helm_charts/charts/config/values.yaml | 1 - .../charts/context-proxy-service/.helmignore | 23 - .../charts/context-proxy-service/Chart.yaml | 24 - .../context-proxy-service/templates/NOTES.txt | 22 - .../templates/_helpers.tpl | 62 - .../templates/deployment.yaml | 71 - .../context-proxy-service/templates/hpa.yaml | 33 - .../templates/ingress.yaml | 62 - .../templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - .../charts/context-proxy-service/values.yaml | 75 - .../charts/keycloak-service/.helmignore | 23 - .../charts/keycloak-service/Chart.yaml | 24 - .../keycloak-service/templates/NOTES.txt | 22 - .../keycloak-service/templates/_helpers.tpl | 62 - .../templates/deployment.yaml | 82 - .../keycloak-service/templates/hpa.yaml | 33 - .../keycloak-service/templates/ingress.yaml | 62 - .../keycloak-service/templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../charts/keycloak-service/values.yaml | 74 - .../charts/notification-ms/.helmignore | 23 - .../charts/notification-ms/Chart.yaml | 24 - .../notification-ms/templates/NOTES.txt | 22 - .../notification-ms/templates/_helpers.tpl | 62 - .../notification-ms/templates/deployment.yaml | 71 - .../charts/notification-ms/templates/hpa.yaml | 33 - .../notification-ms/templates/ingress.yaml | 62 - .../notification-ms/templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - .../charts/notification-ms/values.yaml | 74 - .../charts/public-key-service/.helmignore | 23 - .../charts/public-key-service/Chart.yaml | 24 - .../public-key-service/keys/config.json | 10 - .../public-key-service/templates/NOTES.txt | 22 - .../public-key-service/templates/_helpers.tpl | 62 - .../templates/configmap.yaml | 10 - .../templates/deployment.yaml | 81 - .../public-key-service/templates/hpa.yaml | 33 - .../public-key-service/templates/ingress.yaml | 62 - .../public-key-service/templates/service.yaml | 16 - .../templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - .../charts/public-key-service/values.yaml | 74 - infra/helm_charts/charts/registry/.helmignore | 23 - infra/helm_charts/charts/registry/Chart.yaml | 24 - .../charts/registry/templates/NOTES.txt | 22 - .../charts/registry/templates/_helpers.tpl | 62 - .../charts/registry/templates/configmap.yaml | 10 - .../charts/registry/templates/deployment.yaml | 104 - .../charts/registry/templates/hpa.yaml | 33 - .../charts/registry/templates/ingress.yaml | 62 - .../charts/registry/templates/service.yaml | 16 - .../registry/templates/serviceaccount.yaml | 13 - .../templates/tests/test-connection.yaml | 15 - infra/helm_charts/charts/registry/values.yaml | 75 - infra/helm_charts/charts/secrets/.helmignore | 23 - infra/helm_charts/charts/secrets/Chart.yaml | 24 - .../charts/secrets/templates/secrets.yaml | 13 - infra/helm_charts/charts/secrets/values.yaml | 82 - infra/helm_charts/values.yaml | 49 - 868 files changed, 5 insertions(+), 141425 deletions(-) create mode 100644 deps/Readme.md delete mode 100644 deps/keycloak-mobile-number-login-spi/.mvn/wrapper/MavenWrapperDownloader.java delete mode 100644 deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.jar delete mode 100644 deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.properties delete mode 100644 deps/keycloak-mobile-number-login-spi/Makefile delete mode 100644 deps/keycloak-mobile-number-login-spi/README.md delete mode 100755 deps/keycloak-mobile-number-login-spi/build.sh delete mode 100755 deps/keycloak-mobile-number-login-spi/mvnw delete mode 100644 deps/keycloak-mobile-number-login-spi/mvnw.cmd delete mode 100644 deps/keycloak-mobile-number-login-spi/pom.xml delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/Constants.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/IValidation.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticator.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticatorFactory.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MockOTPServiceImpl.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/NotifyService.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPService.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPServiceImpl.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/ValidationService.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserDetails.java delete mode 100644 deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserGroup.java delete mode 100755 deps/keycloak-mobile-number-login-spi/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory delete mode 100644 deps/keycloak/Dockerfile delete mode 100644 deps/keycloak/Makefile delete mode 100644 deps/keycloak/README.md delete mode 100644 deps/keycloak/apple-silicon/Dockerfile delete mode 100644 deps/keycloak/apple-silicon/README.md delete mode 100755 deps/keycloak/apple-silicon/tools/autorun.sh delete mode 100755 deps/keycloak/apple-silicon/tools/build-keycloak.sh delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/h2/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mariadb/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mssql/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mysql/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/oracle/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/postgres/change-database.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/files-plaintext-vault.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/hostname.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/infinispan/cache-owners.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/JDBC_PING.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/default.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/loglevel.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/metrics/db.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/metrics/http.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/metrics/jgroups.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/proxy.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/standalone-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/standalone-ha-configuration.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/theme.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/x509-keystore.cli delete mode 100644 deps/keycloak/apple-silicon/tools/cli/x509-truststore.cli delete mode 100644 deps/keycloak/apple-silicon/tools/databases/change-database.sh delete mode 100644 deps/keycloak/apple-silicon/tools/databases/mariadb/module.xml delete mode 100644 deps/keycloak/apple-silicon/tools/databases/mssql/module.xml delete mode 100644 deps/keycloak/apple-silicon/tools/databases/mysql/module.xml delete mode 100644 deps/keycloak/apple-silicon/tools/databases/oracle/module.xml delete mode 100644 deps/keycloak/apple-silicon/tools/databases/postgres/module.xml delete mode 100755 deps/keycloak/apple-silicon/tools/docker-entrypoint.sh delete mode 100755 deps/keycloak/apple-silicon/tools/infinispan.sh delete mode 100755 deps/keycloak/apple-silicon/tools/jgroups.sh delete mode 100755 deps/keycloak/apple-silicon/tools/statistics.sh delete mode 100755 deps/keycloak/apple-silicon/tools/vault.sh delete mode 100755 deps/keycloak/apple-silicon/tools/x509.sh delete mode 100644 deps/keycloak/docker-compose.yml delete mode 100644 deps/keycloak/themes/base/account/account.ftl delete mode 100644 deps/keycloak/themes/base/account/applications.ftl delete mode 100644 deps/keycloak/themes/base/account/federatedIdentity.ftl delete mode 100644 deps/keycloak/themes/base/account/log.ftl delete mode 100644 deps/keycloak/themes/base/account/messages/messages_ca.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_cs.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_da.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_hu.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_lt.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_no.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_pl.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_sk.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_sv.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_tr.properties delete mode 100644 deps/keycloak/themes/base/account/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/base/account/password.ftl delete mode 100644 deps/keycloak/themes/base/account/resource-detail.ftl delete mode 100644 deps/keycloak/themes/base/account/resources.ftl delete mode 100644 deps/keycloak/themes/base/account/sessions.ftl delete mode 100644 deps/keycloak/themes/base/account/template.ftl delete mode 100644 deps/keycloak/themes/base/account/theme.properties delete mode 100644 deps/keycloak/themes/base/account/totp.ftl delete mode 100644 deps/keycloak/themes/base/admin/index.ftl delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_ca.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_de.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_en.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_es.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_fr.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_it.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_ja.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_lt.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_nl.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_no.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_pl.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_ru.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_ca.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_lt.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_no.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_pl.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/base/admin/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/base/admin/resources/js/app.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/authz/authz-app.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/authz/authz-controller.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/authz/authz-services.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/controllers/clients.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/controllers/groups.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/controllers/realm.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/controllers/roles.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/controllers/users.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/loaders.js delete mode 100644 deps/keycloak/themes/base/admin/resources/js/services.js delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authentication-flows.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authenticator-config.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/brute-force.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/ciba-policy.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/claims.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-clustering-node.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-clustering.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-credentials.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-import.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-initial-access.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-installation.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-keys.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-mappers-add.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-mappers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-json.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-reg-policies.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-revocation.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-role-attributes.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-role-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-role-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-role-users.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-saml-keys.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-sessions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-storage-generic.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/client-storage-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/create-client.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/create-execution.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/create-flow-execution.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/create-flow.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/create-group.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/default-groups.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/defense-headers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/forbidden.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/group-attributes.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/group-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/group-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/group-members.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/group-role-mappings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/home.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/menu.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/role-selector.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/view-key.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/modal/view-object.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/notfound.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/otp-policy.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/pagenotfound.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/partial-export.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/partial-import.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/password-policy.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-create.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-default-roles.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-events-admin.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-events-config.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-events.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter-ext.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-keys.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-localization.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-login-settings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-role-users.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-smtp.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-tokens.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/realm-user-profile.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/required-actions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/role-attributes.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/role-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/role-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/role-mappings.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/server-info-providers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/server-info.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/session-realm.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/session-revocation.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-attributes.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-consents.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-credentials.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-federation.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-group-membership.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-sessions.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage-generic.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/user-storage.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html delete mode 100644 deps/keycloak/themes/base/admin/resources/partials/webauthn-policy.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-component-config.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-copy.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-dropdown.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-edit.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-menu.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-modal-message.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-modal.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-paging.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-provider-config.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-switch.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html delete mode 100644 deps/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html delete mode 100644 deps/keycloak/themes/base/admin/theme.properties delete mode 100644 deps/keycloak/themes/base/email/html/email-test.ftl delete mode 100644 deps/keycloak/themes/base/email/html/email-verification-with-code.ftl delete mode 100644 deps/keycloak/themes/base/email/html/email-verification.ftl delete mode 100644 deps/keycloak/themes/base/email/html/event-login_error.ftl delete mode 100644 deps/keycloak/themes/base/email/html/event-remove_totp.ftl delete mode 100644 deps/keycloak/themes/base/email/html/event-update_password.ftl delete mode 100644 deps/keycloak/themes/base/email/html/event-update_totp.ftl delete mode 100644 deps/keycloak/themes/base/email/html/executeActions.ftl delete mode 100644 deps/keycloak/themes/base/email/html/identity-provider-link.ftl delete mode 100644 deps/keycloak/themes/base/email/html/password-reset.ftl delete mode 100644 deps/keycloak/themes/base/email/messages/messages_ca.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_cs.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_da.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_hu.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_lt.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_no.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_pl.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_sk.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_sv.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_tr.properties delete mode 100644 deps/keycloak/themes/base/email/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/base/email/text/email-test.ftl delete mode 100644 deps/keycloak/themes/base/email/text/email-verification-with-code.ftl delete mode 100644 deps/keycloak/themes/base/email/text/email-verification.ftl delete mode 100644 deps/keycloak/themes/base/email/text/event-login_error.ftl delete mode 100644 deps/keycloak/themes/base/email/text/event-remove_totp.ftl delete mode 100644 deps/keycloak/themes/base/email/text/event-update_password.ftl delete mode 100644 deps/keycloak/themes/base/email/text/event-update_totp.ftl delete mode 100644 deps/keycloak/themes/base/email/text/executeActions.ftl delete mode 100644 deps/keycloak/themes/base/email/text/identity-provider-link.ftl delete mode 100644 deps/keycloak/themes/base/email/text/password-reset.ftl delete mode 100644 deps/keycloak/themes/base/email/theme.properties delete mode 100644 deps/keycloak/themes/base/login/cli_splash.ftl delete mode 100644 deps/keycloak/themes/base/login/code.ftl delete mode 100644 deps/keycloak/themes/base/login/delete-account-confirm.ftl delete mode 100644 deps/keycloak/themes/base/login/error.ftl delete mode 100644 deps/keycloak/themes/base/login/info.ftl delete mode 100644 deps/keycloak/themes/base/login/login-config-totp-text.ftl delete mode 100644 deps/keycloak/themes/base/login/login-config-totp.ftl delete mode 100644 deps/keycloak/themes/base/login/login-idp-link-confirm.ftl delete mode 100644 deps/keycloak/themes/base/login/login-idp-link-email.ftl delete mode 100644 deps/keycloak/themes/base/login/login-oauth-grant.ftl delete mode 100644 deps/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl delete mode 100644 deps/keycloak/themes/base/login/login-otp.ftl delete mode 100644 deps/keycloak/themes/base/login/login-page-expired.ftl delete mode 100644 deps/keycloak/themes/base/login/login-password.ftl delete mode 100644 deps/keycloak/themes/base/login/login-reset-password.ftl delete mode 100644 deps/keycloak/themes/base/login/login-update-password.ftl delete mode 100644 deps/keycloak/themes/base/login/login-update-profile.ftl delete mode 100644 deps/keycloak/themes/base/login/login-username.ftl delete mode 100644 deps/keycloak/themes/base/login/login-verify-email-code-text.ftl delete mode 100644 deps/keycloak/themes/base/login/login-verify-email.ftl delete mode 100644 deps/keycloak/themes/base/login/login-x509-info.ftl delete mode 100644 deps/keycloak/themes/base/login/login.ftl delete mode 100644 deps/keycloak/themes/base/login/messages/messages_ca.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_cs.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_da.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_hu.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_lt.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_no.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_pl.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_sk.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_sv.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_tr.properties delete mode 100644 deps/keycloak/themes/base/login/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/base/login/register.ftl delete mode 100644 deps/keycloak/themes/base/login/resources/js/base64url.js delete mode 100644 deps/keycloak/themes/base/login/saml-post-form.ftl delete mode 100644 deps/keycloak/themes/base/login/select-authenticator.ftl delete mode 100644 deps/keycloak/themes/base/login/template.ftl delete mode 100644 deps/keycloak/themes/base/login/terms.ftl delete mode 100644 deps/keycloak/themes/base/login/theme.properties delete mode 100644 deps/keycloak/themes/base/login/verify-profile.ftl delete mode 100644 deps/keycloak/themes/base/login/webauthn-authenticate.ftl delete mode 100644 deps/keycloak/themes/base/login/webauthn-error.ftl delete mode 100644 deps/keycloak/themes/base/login/webauthn-register.ftl delete mode 100644 deps/keycloak/themes/keycloak.v2/account/index.ftl delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_da.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_no.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/App.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/App.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/Main.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/Main.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content.json delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/public/favicon.ico delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/public/layout.css delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/public/logo.svg delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js delete mode 100644 deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map delete mode 100644 deps/keycloak/themes/keycloak.v2/account/theme.properties delete mode 100644 deps/keycloak/themes/keycloak/account/resources/css/account.css delete mode 100644 deps/keycloak/themes/keycloak/account/resources/img/icon-sidebar-active.png delete mode 100644 deps/keycloak/themes/keycloak/account/resources/img/keycloak-logo.png delete mode 100644 deps/keycloak/themes/keycloak/account/resources/img/logo.png delete mode 100644 deps/keycloak/themes/keycloak/account/theme.properties delete mode 100644 deps/keycloak/themes/keycloak/admin/resources/css/styles.css delete mode 100644 deps/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.png delete mode 100644 deps/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.svg delete mode 100644 deps/keycloak/themes/keycloak/admin/resources/img/select-arrow.png delete mode 100644 deps/keycloak/themes/keycloak/admin/theme.properties delete mode 100644 deps/keycloak/themes/keycloak/common/resources/img/favicon.ico delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/errors.json delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/css/angular.treeview.css delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/file.png delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder-closed.png delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/img/folder.png delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/angular/version.json delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.css delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/pficon/pficon.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ace.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/ace.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/mode-javascript.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/theme-github.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/worker-javascript.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/mode-javascript.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/theme-github.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.min.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/worker-javascript.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.eot delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.svg delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.ttf delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.woff delete mode 100644 deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial.css delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/app.css delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-bold-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-bold.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-extrabold-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-extrabold.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-extralight-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-extralight.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-heavy-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-heavy.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-light-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-light.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-regular.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-semibold-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-semibold.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-thin-italic.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/fonts/overpass-webfont/overpass-thin.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/assets/pficon/pficon.woff2 delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core/dist/styles/base.css delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-icons.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-icons.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-styles.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-styles.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/StyleSheet-4762b333.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/StyleSheet-4762b333.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/_commonjsHelpers-89bea96a.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/_commonjsHelpers-89bea96a.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/index-1a6834d2.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/common/index-1a6834d2.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/import-map.json delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react-dom.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react-dom.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react-router-dom.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react-router-dom.js.map delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react.js delete mode 100644 deps/keycloak/themes/keycloak/common/resources/web_modules/react.js.map delete mode 100644 deps/keycloak/themes/keycloak/email/theme.properties delete mode 100644 deps/keycloak/themes/keycloak/login/resources/css/login.css delete mode 100644 deps/keycloak/themes/keycloak/login/resources/css/tile.css delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-error-arrow-down.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-error-sign.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-success-arrow-down.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-success-sign.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-warning-arrow-down.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/feedback-warning-sign.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/keycloak-bg.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/keycloak-logo-text.png delete mode 100644 deps/keycloak/themes/keycloak/login/resources/img/keycloak-logo.png delete mode 100644 deps/keycloak/themes/keycloak/login/theme.properties delete mode 100644 deps/keycloak/themes/keycloak/welcome/index.ftl delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/admin-console.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/alert.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/bg.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/bug.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/css/welcome.css delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/jboss_community.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/keycloak-project.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/keycloak_logo.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/logo.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/mail.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/resources/user.png delete mode 100644 deps/keycloak/themes/keycloak/welcome/theme.properties delete mode 100644 deps/keycloak/themes/ndear/login/error.ftl delete mode 100644 deps/keycloak/themes/ndear/login/login-oauth-grant.ftl delete mode 100644 deps/keycloak/themes/ndear/login/login.ftl delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_nb.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/ndear/login/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/ndear/login/mobile-login.ftl delete mode 100644 deps/keycloak/themes/ndear/login/resources/css/login.css delete mode 100644 deps/keycloak/themes/ndear/login/resources/css/main.css delete mode 100644 deps/keycloak/themes/ndear/login/resources/img/ndearLogo.svg delete mode 100644 deps/keycloak/themes/ndear/login/template.ftl delete mode 100644 deps/keycloak/themes/ndear/login/theme.properties delete mode 100644 deps/keycloak/themes/ndear/login/verify-otp.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/error.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/login-oauth-grant.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/login-update-password.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/login-update-profile.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/login.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_nb.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/mobile-login.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/css/login.css delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/css/main.css delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/bg.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/facebook.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/ndearLogo.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/next-btn.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/theme-icon.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/twitter.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/resources/img/youtube.svg delete mode 100644 deps/keycloak/themes/sunbird-rc/login/template.ftl delete mode 100644 deps/keycloak/themes/sunbird-rc/login/theme.properties delete mode 100644 deps/keycloak/themes/sunbird-rc/login/verify-otp.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/error.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/login-oauth-grant.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/login.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_de.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_en.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_es.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_fr.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_it.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_ja.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_nb.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_nl.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_pt_BR.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_ru.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/messages/messages_zh_CN.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/mobile-login.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/css/login.css delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/css/main.css delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/di.png delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/login-arrow.png delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/login-bg.png delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/meit.png delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/mhfw.png delete mode 100644 deps/keycloak/themes/sys-admin/login/resources/img/nav-logo.png delete mode 100644 deps/keycloak/themes/sys-admin/login/template.ftl delete mode 100644 deps/keycloak/themes/sys-admin/login/theme.properties delete mode 100644 deps/keycloak/themes/sys-admin/login/verify-otp.ftl delete mode 100644 infra/README.md delete mode 100644 infra/helm_charts/.helmignore delete mode 100644 infra/helm_charts/Chart.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/.helmignore delete mode 100644 infra/helm_charts/charts/certificate-api/Chart.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/certificate-api/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/certificate-api/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/service.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/certificate-api/values.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/.helmignore delete mode 100644 infra/helm_charts/charts/certificate-signer/Chart.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/keys/config.json delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/configmap.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/service.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/certificate-signer/values.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/.helmignore delete mode 100644 infra/helm_charts/charts/claim-ms/Chart.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/claim-ms/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/claim-ms/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/service.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/claim-ms/values.yaml delete mode 100644 infra/helm_charts/charts/config/.helmignore delete mode 100644 infra/helm_charts/charts/config/Chart.yaml delete mode 100644 infra/helm_charts/charts/config/templates/configmap.yaml delete mode 100644 infra/helm_charts/charts/config/values.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/.helmignore delete mode 100644 infra/helm_charts/charts/context-proxy-service/Chart.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/service.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/context-proxy-service/values.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/.helmignore delete mode 100644 infra/helm_charts/charts/keycloak-service/Chart.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/service.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/keycloak-service/values.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/.helmignore delete mode 100644 infra/helm_charts/charts/notification-ms/Chart.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/notification-ms/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/notification-ms/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/service.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/notification-ms/values.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/.helmignore delete mode 100644 infra/helm_charts/charts/public-key-service/Chart.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/keys/config.json delete mode 100644 infra/helm_charts/charts/public-key-service/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/public-key-service/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/public-key-service/templates/configmap.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/service.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/public-key-service/values.yaml delete mode 100644 infra/helm_charts/charts/registry/.helmignore delete mode 100644 infra/helm_charts/charts/registry/Chart.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/NOTES.txt delete mode 100644 infra/helm_charts/charts/registry/templates/_helpers.tpl delete mode 100644 infra/helm_charts/charts/registry/templates/configmap.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/deployment.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/hpa.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/ingress.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/service.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/serviceaccount.yaml delete mode 100644 infra/helm_charts/charts/registry/templates/tests/test-connection.yaml delete mode 100644 infra/helm_charts/charts/registry/values.yaml delete mode 100644 infra/helm_charts/charts/secrets/.helmignore delete mode 100644 infra/helm_charts/charts/secrets/Chart.yaml delete mode 100644 infra/helm_charts/charts/secrets/templates/secrets.yaml delete mode 100644 infra/helm_charts/charts/secrets/values.yaml delete mode 100644 infra/helm_charts/values.yaml diff --git a/Makefile b/Makefile index c5259b439..21c593739 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,8 @@ IMAGES := ghcr.io/sunbird-rc/sunbird-rc-core ghcr.io/sunbird-rc/sunbird-rc-nginx ghcr.io/sunbird-rc/sunbird-rc-public-key-service ghcr.io/sunbird-rc/sunbird-rc-keycloak ghcr.io/sunbird-rc/sunbird-rc-certificate-api \ ghcr.io/sunbird-rc/sunbird-rc-certificate-signer ghcr.io/sunbird-rc/sunbird-rc-notification-service ghcr.io/sunbird-rc/sunbird-rc-claim-ms \ ghcr.io/sunbird-rc/sunbird-rc-digilocker-certificate-api ghcr.io/sunbird-rc/sunbird-rc-bulk-issuance ghcr.io/sunbird-rc/sunbird-rc-metrics \ - ghcr.io/sunbird-rc/id-gen-service ghcr.io/sunbird-rc/encryption-service + ghcr.io/sunbird-rc/id-gen-service ghcr.io/sunbird-rc/encryption-service ghcr.io/sunbird-rc/sunbird-rc-identity-service ghcr.io/sunbird-rc/sunbird-rc-credential-schema \ + ghcr.io/sunbird-rc/sunbird-rc-credentials-service build: java/registry/target/registry.jar echo ${SOURCES} rm -rf java/claim/target/*.jar @@ -23,11 +24,11 @@ build: java/registry/target/registry.jar make -C services/bulk_issuance docker make -C services/id-gen-service docker make -C services/encryption-service docker - docker build -t ghcr.io/sunbird-rc/sunbird-rc-nginx . - docker build -t dockerhub/sunbird-rc-nginx . make -C services/identity-service/ docker make -C services/credential-schema docker make -C services/credentials-service/ docker + docker build -t ghcr.io/sunbird-rc/sunbird-rc-nginx . + docker build -t dockerhub/sunbird-rc-nginx . java/registry/target/registry.jar: $(SOURCES) diff --git a/deps/Readme.md b/deps/Readme.md new file mode 100644 index 000000000..f69096afb --- /dev/null +++ b/deps/Readme.md @@ -0,0 +1 @@ +Keycloak moved to https://github.com/Sunbird-RC/sunbird-rc-keycloak \ No newline at end of file diff --git a/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/MavenWrapperDownloader.java b/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/MavenWrapperDownloader.java deleted file mode 100644 index b901097f2..000000000 --- a/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/MavenWrapperDownloader.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2007-present the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import java.net.*; -import java.io.*; -import java.nio.channels.*; -import java.util.Properties; - -public class MavenWrapperDownloader { - - private static final String WRAPPER_VERSION = "0.5.6"; - /** - * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided. - */ - private static final String DEFAULT_DOWNLOAD_URL = "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/" - + WRAPPER_VERSION + "/maven-wrapper-" + WRAPPER_VERSION + ".jar"; - - /** - * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to - * use instead of the default one. - */ - private static final String MAVEN_WRAPPER_PROPERTIES_PATH = - ".mvn/wrapper/maven-wrapper.properties"; - - /** - * Path where the maven-wrapper.jar will be saved to. - */ - private static final String MAVEN_WRAPPER_JAR_PATH = - ".mvn/wrapper/maven-wrapper.jar"; - - /** - * Name of the property which should be used to override the default download url for the wrapper. - */ - private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl"; - - public static void main(String args[]) { - System.out.println("- Downloader started"); - File baseDirectory = new File(args[0]); - System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath()); - - // If the maven-wrapper.properties exists, read it and check if it contains a custom - // wrapperUrl parameter. - File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH); - String url = DEFAULT_DOWNLOAD_URL; - if(mavenWrapperPropertyFile.exists()) { - FileInputStream mavenWrapperPropertyFileInputStream = null; - try { - mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile); - Properties mavenWrapperProperties = new Properties(); - mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream); - url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url); - } catch (IOException e) { - System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'"); - } finally { - try { - if(mavenWrapperPropertyFileInputStream != null) { - mavenWrapperPropertyFileInputStream.close(); - } - } catch (IOException e) { - // Ignore ... - } - } - } - System.out.println("- Downloading from: " + url); - - File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH); - if(!outputFile.getParentFile().exists()) { - if(!outputFile.getParentFile().mkdirs()) { - System.out.println( - "- ERROR creating output directory '" + outputFile.getParentFile().getAbsolutePath() + "'"); - } - } - System.out.println("- Downloading to: " + outputFile.getAbsolutePath()); - try { - downloadFileFromURL(url, outputFile); - System.out.println("Done"); - System.exit(0); - } catch (Throwable e) { - System.out.println("- Error downloading"); - e.printStackTrace(); - System.exit(1); - } - } - - private static void downloadFileFromURL(String urlString, File destination) throws Exception { - if (System.getenv("MVNW_USERNAME") != null && System.getenv("MVNW_PASSWORD") != null) { - String username = System.getenv("MVNW_USERNAME"); - char[] password = System.getenv("MVNW_PASSWORD").toCharArray(); - Authenticator.setDefault(new Authenticator() { - @Override - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(username, password); - } - }); - } - URL website = new URL(urlString); - ReadableByteChannel rbc; - rbc = Channels.newChannel(website.openStream()); - FileOutputStream fos = new FileOutputStream(destination); - fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE); - fos.close(); - rbc.close(); - } - -} diff --git a/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.jar b/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.jar deleted file mode 100644 index 2cc7d4a55c0cd0092912bf49ae38b3a9e3fd0054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50710 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 EfAhh=DF6Tf diff --git a/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.properties b/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.properties deleted file mode 100644 index 642d572ce..000000000 --- a/deps/keycloak-mobile-number-login-spi/.mvn/wrapper/maven-wrapper.properties +++ /dev/null @@ -1,2 +0,0 @@ -distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.3/apache-maven-3.6.3-bin.zip -wrapperUrl=https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar diff --git a/deps/keycloak-mobile-number-login-spi/Makefile b/deps/keycloak-mobile-number-login-spi/Makefile deleted file mode 100644 index 1c98f7fa7..000000000 --- a/deps/keycloak-mobile-number-login-spi/Makefile +++ /dev/null @@ -1,7 +0,0 @@ - - -.PHONY: -build: target/keycloak-mobile-number-login-spi-1.0-SNAPSHOT.jar - echo "Building .." - @./mvnw clean install - @sh -c "mkdir -p ../keycloak/providers && cp target/keycloak-mobile-number-login-spi-1.0-SNAPSHOT.jar ../keycloak/providers" diff --git a/deps/keycloak-mobile-number-login-spi/README.md b/deps/keycloak-mobile-number-login-spi/README.md deleted file mode 100644 index 3b9c34b05..000000000 --- a/deps/keycloak-mobile-number-login-spi/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# keycloak-mobile-number-login - -Setup: -* Build the app - * `$ ./mvnw clean install` -* Add the jar to the Keycloak server: - * `$ cp target/keycloak-mobile-number-login-spi-1.0-SNAPSHOT.jar _KEYCLOAK_HOME_/providers/` - -* Add custom theme to the Keycloak server: - * `$ cp themes/* _KEYCLOAK_HOME_/themes/divoc` - -Configure your REALM to use the provider. -First create a new REALM (or select a previously created REALM). - -Under Authentication > Flows: -* Copy 'Browse' flow to 'Mobile Number Login' flow -* Click on 'Actions > Add execution on the 'Mobile Number Login Forms' line and add the 'Mobile OTP Login' -* Set 'Mobile OTP Login' to 'REQUIRED' - -Under Authentication > Bindings: -* Select 'Mobile Number Login' as the 'Browser Flow' for the REALM. diff --git a/deps/keycloak-mobile-number-login-spi/build.sh b/deps/keycloak-mobile-number-login-spi/build.sh deleted file mode 100755 index ac011cdee..000000000 --- a/deps/keycloak-mobile-number-login-spi/build.sh +++ /dev/null @@ -1,2 +0,0 @@ -./mvnw clean install -mkdir -p ../keycloak/providers && cp target/keycloak-mobile-number-login-spi-1.0-SNAPSHOT.jar ../keycloak/providers diff --git a/deps/keycloak-mobile-number-login-spi/mvnw b/deps/keycloak-mobile-number-login-spi/mvnw deleted file mode 100755 index 41c0f0c23..000000000 --- a/deps/keycloak-mobile-number-login-spi/mvnw +++ /dev/null @@ -1,310 +0,0 @@ -#!/bin/sh -# ---------------------------------------------------------------------------- -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# ---------------------------------------------------------------------------- - -# ---------------------------------------------------------------------------- -# Maven Start Up Batch script -# -# Required ENV vars: -# ------------------ -# JAVA_HOME - location of a JDK home dir -# -# Optional ENV vars -# ----------------- -# M2_HOME - location of maven2's installed home dir -# MAVEN_OPTS - parameters passed to the Java VM when running Maven -# e.g. to debug Maven itself, use -# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -# MAVEN_SKIP_RC - flag to disable loading of mavenrc files -# ---------------------------------------------------------------------------- - -if [ -z "$MAVEN_SKIP_RC" ] ; then - - if [ -f /etc/mavenrc ] ; then - . /etc/mavenrc - fi - - if [ -f "$HOME/.mavenrc" ] ; then - . "$HOME/.mavenrc" - fi - -fi - -# OS specific support. $var _must_ be set to either true or false. -cygwin=false; -darwin=false; -mingw=false -case "`uname`" in - CYGWIN*) cygwin=true ;; - MINGW*) mingw=true;; - Darwin*) darwin=true - # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home - # See https://developer.apple.com/library/mac/qa/qa1170/_index.html - if [ -z "$JAVA_HOME" ]; then - if [ -x "/usr/libexec/java_home" ]; then - export JAVA_HOME="`/usr/libexec/java_home`" - else - export JAVA_HOME="/Library/Java/Home" - fi - fi - ;; -esac - -if [ -z "$JAVA_HOME" ] ; then - if [ -r /etc/gentoo-release ] ; then - JAVA_HOME=`java-config --jre-home` - fi -fi - -if [ -z "$M2_HOME" ] ; then - ## resolve links - $0 may be a link to maven's home - PRG="$0" - - # need this for relative symlinks - while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG="`dirname "$PRG"`/$link" - fi - done - - saveddir=`pwd` - - M2_HOME=`dirname "$PRG"`/.. - - # make it fully qualified - M2_HOME=`cd "$M2_HOME" && pwd` - - cd "$saveddir" - # echo Using m2 at $M2_HOME -fi - -# For Cygwin, ensure paths are in UNIX format before anything is touched -if $cygwin ; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --unix "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --unix "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --unix "$CLASSPATH"` -fi - -# For Mingw, ensure paths are in UNIX format before anything is touched -if $mingw ; then - [ -n "$M2_HOME" ] && - M2_HOME="`(cd "$M2_HOME"; pwd)`" - [ -n "$JAVA_HOME" ] && - JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" -fi - -if [ -z "$JAVA_HOME" ]; then - javaExecutable="`which javac`" - if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then - # readlink(1) is not available as standard on Solaris 10. - readLink=`which readlink` - if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then - if $darwin ; then - javaHome="`dirname \"$javaExecutable\"`" - javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" - else - javaExecutable="`readlink -f \"$javaExecutable\"`" - fi - javaHome="`dirname \"$javaExecutable\"`" - javaHome=`expr "$javaHome" : '\(.*\)/bin'` - JAVA_HOME="$javaHome" - export JAVA_HOME - fi - fi -fi - -if [ -z "$JAVACMD" ] ; then - if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - else - JAVACMD="`which java`" - fi -fi - -if [ ! -x "$JAVACMD" ] ; then - echo "Error: JAVA_HOME is not defined correctly." >&2 - echo " We cannot execute $JAVACMD" >&2 - exit 1 -fi - -if [ -z "$JAVA_HOME" ] ; then - echo "Warning: JAVA_HOME environment variable is not set." -fi - -CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher - -# traverses directory structure from process work directory to filesystem root -# first directory with .mvn subdirectory is considered project base directory -find_maven_basedir() { - - if [ -z "$1" ] - then - echo "Path not specified to find_maven_basedir" - return 1 - fi - - basedir="$1" - wdir="$1" - while [ "$wdir" != '/' ] ; do - if [ -d "$wdir"/.mvn ] ; then - basedir=$wdir - break - fi - # workaround for JBEAP-8937 (on Solaris 10/Sparc) - if [ -d "${wdir}" ]; then - wdir=`cd "$wdir/.."; pwd` - fi - # end of workaround - done - echo "${basedir}" -} - -# concatenates all lines of a file -concat_lines() { - if [ -f "$1" ]; then - echo "$(tr -s '\n' ' ' < "$1")" - fi -} - -BASE_DIR=`find_maven_basedir "$(pwd)"` -if [ -z "$BASE_DIR" ]; then - exit 1; -fi - -########################################################################################## -# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -# This allows using the maven wrapper in projects that prohibit checking in binary data. -########################################################################################## -if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found .mvn/wrapper/maven-wrapper.jar" - fi -else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." - fi - if [ -n "$MVNW_REPOURL" ]; then - jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - else - jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - fi - while IFS="=" read key value; do - case "$key" in (wrapperUrl) jarUrl="$value"; break ;; - esac - done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" - if [ "$MVNW_VERBOSE" = true ]; then - echo "Downloading from: $jarUrl" - fi - wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" - if $cygwin; then - wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` - fi - - if command -v wget > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found wget ... using wget" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - wget "$jarUrl" -O "$wrapperJarPath" - else - wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" - fi - elif command -v curl > /dev/null; then - if [ "$MVNW_VERBOSE" = true ]; then - echo "Found curl ... using curl" - fi - if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then - curl -o "$wrapperJarPath" "$jarUrl" -f - else - curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f - fi - - else - if [ "$MVNW_VERBOSE" = true ]; then - echo "Falling back to using Java to download" - fi - javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" - # For Cygwin, switch paths to Windows format before running javac - if $cygwin; then - javaClass=`cygpath --path --windows "$javaClass"` - fi - if [ -e "$javaClass" ]; then - if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Compiling MavenWrapperDownloader.java ..." - fi - # Compiling the Java class - ("$JAVA_HOME/bin/javac" "$javaClass") - fi - if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then - # Running the downloader - if [ "$MVNW_VERBOSE" = true ]; then - echo " - Running MavenWrapperDownloader.java ..." - fi - ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") - fi - fi - fi -fi -########################################################################################## -# End of extension -########################################################################################## - -export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} -if [ "$MVNW_VERBOSE" = true ]; then - echo $MAVEN_PROJECTBASEDIR -fi -MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" - -# For Cygwin, switch paths to Windows format before running java -if $cygwin; then - [ -n "$M2_HOME" ] && - M2_HOME=`cygpath --path --windows "$M2_HOME"` - [ -n "$JAVA_HOME" ] && - JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` - [ -n "$CLASSPATH" ] && - CLASSPATH=`cygpath --path --windows "$CLASSPATH"` - [ -n "$MAVEN_PROJECTBASEDIR" ] && - MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` -fi - -# Provide a "standardized" way to retrieve the CLI args that will -# work with both Windows and non-Windows executions. -MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" -export MAVEN_CMD_LINE_ARGS - -WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -exec "$JAVACMD" \ - $MAVEN_OPTS \ - -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ - "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ - ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/deps/keycloak-mobile-number-login-spi/mvnw.cmd b/deps/keycloak-mobile-number-login-spi/mvnw.cmd deleted file mode 100644 index 86115719e..000000000 --- a/deps/keycloak-mobile-number-login-spi/mvnw.cmd +++ /dev/null @@ -1,182 +0,0 @@ -@REM ---------------------------------------------------------------------------- -@REM Licensed to the Apache Software Foundation (ASF) under one -@REM or more contributor license agreements. See the NOTICE file -@REM distributed with this work for additional information -@REM regarding copyright ownership. The ASF licenses this file -@REM to you under the Apache License, Version 2.0 (the -@REM "License"); you may not use this file except in compliance -@REM with the License. You may obtain a copy of the License at -@REM -@REM http://www.apache.org/licenses/LICENSE-2.0 -@REM -@REM Unless required by applicable law or agreed to in writing, -@REM software distributed under the License is distributed on an -@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -@REM KIND, either express or implied. See the License for the -@REM specific language governing permissions and limitations -@REM under the License. -@REM ---------------------------------------------------------------------------- - -@REM ---------------------------------------------------------------------------- -@REM Maven Start Up Batch script -@REM -@REM Required ENV vars: -@REM JAVA_HOME - location of a JDK home dir -@REM -@REM Optional ENV vars -@REM M2_HOME - location of maven2's installed home dir -@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands -@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending -@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven -@REM e.g. to debug Maven itself, use -@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files -@REM ---------------------------------------------------------------------------- - -@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' -@echo off -@REM set title of command window -title %0 -@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' -@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% - -@REM set %HOME% to equivalent of $HOME -if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") - -@REM Execute a user defined script before this one -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre -@REM check for pre script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" -if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" -:skipRcPre - -@setlocal - -set ERROR_CODE=0 - -@REM To isolate internal variables from possible post scripts, we use another setlocal -@setlocal - -@REM ==== START VALIDATION ==== -if not "%JAVA_HOME%" == "" goto OkJHome - -echo. -echo Error: JAVA_HOME not found in your environment. >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -:OkJHome -if exist "%JAVA_HOME%\bin\java.exe" goto init - -echo. -echo Error: JAVA_HOME is set to an invalid directory. >&2 -echo JAVA_HOME = "%JAVA_HOME%" >&2 -echo Please set the JAVA_HOME variable in your environment to match the >&2 -echo location of your Java installation. >&2 -echo. -goto error - -@REM ==== END VALIDATION ==== - -:init - -@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". -@REM Fallback to current working directory if not found. - -set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% -IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir - -set EXEC_DIR=%CD% -set WDIR=%EXEC_DIR% -:findBaseDir -IF EXIST "%WDIR%"\.mvn goto baseDirFound -cd .. -IF "%WDIR%"=="%CD%" goto baseDirNotFound -set WDIR=%CD% -goto findBaseDir - -:baseDirFound -set MAVEN_PROJECTBASEDIR=%WDIR% -cd "%EXEC_DIR%" -goto endDetectBaseDir - -:baseDirNotFound -set MAVEN_PROJECTBASEDIR=%EXEC_DIR% -cd "%EXEC_DIR%" - -:endDetectBaseDir - -IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig - -@setlocal EnableExtensions EnableDelayedExpansion -for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a -@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% - -:endReadAdditionalConfig - -SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" -set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" -set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain - -set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - -FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( - IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B -) - -@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central -@REM This allows using the maven wrapper in projects that prohibit checking in binary data. -if exist %WRAPPER_JAR% ( - if "%MVNW_VERBOSE%" == "true" ( - echo Found %WRAPPER_JAR% - ) -) else ( - if not "%MVNW_REPOURL%" == "" ( - SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" - ) - if "%MVNW_VERBOSE%" == "true" ( - echo Couldn't find %WRAPPER_JAR%, downloading it ... - echo Downloading from: %DOWNLOAD_URL% - ) - - powershell -Command "&{"^ - "$webclient = new-object System.Net.WebClient;"^ - "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ - "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ - "}"^ - "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ - "}" - if "%MVNW_VERBOSE%" == "true" ( - echo Finished downloading %WRAPPER_JAR% - ) -) -@REM End of extension - -@REM Provide a "standardized" way to retrieve the CLI args that will -@REM work with both Windows and non-Windows executions. -set MAVEN_CMD_LINE_ARGS=%* - -%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* -if ERRORLEVEL 1 goto error -goto end - -:error -set ERROR_CODE=1 - -:end -@endlocal & set ERROR_CODE=%ERROR_CODE% - -if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost -@REM check for post script, once with legacy .bat ending and once with .cmd ending -if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" -if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" -:skipRcPost - -@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' -if "%MAVEN_BATCH_PAUSE%" == "on" pause - -if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% - -exit /B %ERROR_CODE% diff --git a/deps/keycloak-mobile-number-login-spi/pom.xml b/deps/keycloak-mobile-number-login-spi/pom.xml deleted file mode 100644 index 4557ef24a..000000000 --- a/deps/keycloak-mobile-number-login-spi/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - 4.0.0 - - in.divoc.api - keycloak-mobile-number-login-spi - 1.0-SNAPSHOT - - keycloak-mobile-number-login-spi - - - UTF-8 - 1.7 - 1.7 - - - - - org.keycloak - keycloak-core - 14.0.0 - - - org.keycloak - keycloak-server-spi - 14.0.0 - provided - - - org.keycloak - keycloak-server-spi-private - 14.0.0 - provided - - - org.keycloak - keycloak-services - 14.0.0 - provided - - - org.jboss.logging - jboss-logging - 3.4.1.Final - - - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - - - - diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/Constants.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/Constants.java deleted file mode 100644 index f3d7f8461..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/Constants.java +++ /dev/null @@ -1,16 +0,0 @@ -package in.divoc.api.authenticator; - -class Constants { - static final String FORM_TYPE = "form_type"; - static final String LOGIN_FORM = "login"; - static final String VERIFY_OTP_FORM = "verify_otp"; - static final String MOBILE_NUMBER = "mobile_number"; - static final String EMAIL = "email_id"; - static final String OTP = "otp"; - - static final String MOBILE_LOGIN_UI = "mobile-login.ftl"; - static final String VERIFY_OTP_UI = "verify-otp.ftl"; - - static final String PROVIDER_DISPLAY_TEXT = "Mobile OTP Login"; - public static final String PROVIDER_ID = "mobile-otp-login"; -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/IValidation.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/IValidation.java deleted file mode 100644 index a5136fdbd..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/IValidation.java +++ /dev/null @@ -1,5 +0,0 @@ -package in.divoc.api.authenticator; - -public interface IValidation { - boolean validate(String mobileNumber); -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticator.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticator.java deleted file mode 100644 index 7bf6edf29..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticator.java +++ /dev/null @@ -1,186 +0,0 @@ -package in.divoc.api.authenticator; - -import org.jboss.logging.Logger; -import org.keycloak.authentication.AuthenticationFlowContext; -import org.keycloak.authentication.AuthenticationFlowError; -import org.keycloak.authentication.Authenticator; -import org.keycloak.authentication.authenticators.browser.AbstractUsernameFormAuthenticator; -import org.keycloak.models.KeycloakSession; -import org.keycloak.models.RealmModel; -import org.keycloak.models.UserModel; -import org.keycloak.representations.idm.ErrorRepresentation; - -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.MediaType; -import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; - -import static in.divoc.api.authenticator.Constants.*; - -public class MobileNumberAuthenticator extends AbstractUsernameFormAuthenticator implements Authenticator { - private static final Logger logger = Logger.getLogger(MobileNumberAuthenticator.class); - private final OTPService mockOTPService; - private final OTPService otpService; - private final NotifyService notifyService; - private final IValidation iValidation; - - - private static final String mockOtp = System.getenv().getOrDefault("MOCK_OTP", "true"); - - public MobileNumberAuthenticator() { - this.mockOTPService = new MockOTPServiceImpl(); - this.otpService = new OTPServiceImpl(); - this.notifyService = new NotifyService(); - this.iValidation = new ValidationService(); - } - - @Override - public void action(AuthenticationFlowContext context) { - System.err.println("action request "); - MultivaluedMap formData = context.getHttpRequest().getDecodedFormParameters(); - String type = formData.getFirst(FORM_TYPE); - System.err.println("action request " + type); - if (type.equals(LOGIN_FORM)) { - //TODO: rename form id - String INVALID_REGISTRATION = "INVALID_REGISTRATION"; - String INVALID_USERNAME = "INVALID_USERNAME"; - String mobileNumber = formData.getFirst(MOBILE_NUMBER); - if(iValidation.validate(mobileNumber)) { - List users = context.getSession().users() - .searchForUserByUserAttributeStream(context.getSession().getContext().getRealm(), MOBILE_NUMBER, mobileNumber).collect(Collectors.toList()); - if (users.size() > 0) { - if (checkIfMaxResendOtpLimitReached(context)) return; - generateOTPAndNotify(context, mobileNumber, users); - } else { - users = context.getSession().users() - .searchForUserByUserAttributeStream(context.getSession().getContext().getRealm(), EMAIL, mobileNumber).collect(Collectors.toList()); - if (users.size() > 0) { - generateOTPAndNotify(context, mobileNumber, users); - } else { - Response response = context.form().setError(System.getenv().getOrDefault(INVALID_REGISTRATION, "No user found with this username")).createForm(MOBILE_LOGIN_UI); - context.failure(AuthenticationFlowError.INVALID_USER, response); - } - } - } - else { - Response response = context.form().setError(System.getenv().getOrDefault(INVALID_USERNAME, "Please enter correct Username")).createForm(MOBILE_LOGIN_UI); - context.failure(AuthenticationFlowError.INVALID_USER, response); - } - } else if (type.equals(VERIFY_OTP_FORM)) { - String sessionKey = context.getAuthenticationSession().getAuthNote(OTP); - if (sessionKey != null) { - String secret = formData.getFirst(OTP); - String VALID_OTP = "VALID_OTP"; - if (secret != null) { - if (secret.equals(sessionKey)) { - context.success(); - } else { - Response response = context.form().setError(System.getenv().getOrDefault(VALID_OTP, "Please enter correct OTP")).createForm(VERIFY_OTP_UI); - if(checkIfMaxOtpTriesReached(context)) { - return; - } - context.failure(AuthenticationFlowError.INVALID_CREDENTIALS, response); - } - } else { - Response response = context.form().setError(System.getenv().getOrDefault(VALID_OTP, "Please enter correct OTP")).createForm(VERIFY_OTP_UI); - if(checkIfMaxOtpTriesReached(context)) { - return; - } - context.failure(AuthenticationFlowError.INVALID_CREDENTIALS, response); - } - } else { - context.challenge(context.form().createForm(MOBILE_LOGIN_UI)); - } - } - } - - private static boolean checkIfMaxResendOtpLimitReached(AuthenticationFlowContext context) { - String MAX_RESEND_TRIES = "MAX_RESEND_TRIES"; - String RESEND_OTP_TRY_COUNT = "RESEND_OTP_TRY_COUNT"; - String resendTries = context.getAuthenticationSession().getAuthNote(RESEND_OTP_TRY_COUNT); - System.out.println("RESEND RETRIES : " + resendTries); - int count = resendTries == null ? 0 : Integer.parseInt(resendTries); - count++; - if(count == Integer.parseInt(System.getenv().getOrDefault(MAX_RESEND_TRIES, "3")) + 1) { - context.getAuthenticationSession().setAuthNote(RESEND_OTP_TRY_COUNT, null); - context.failure(AuthenticationFlowError.INTERNAL_ERROR); - return true; - } - context.getAuthenticationSession().setAuthNote(RESEND_OTP_TRY_COUNT, count + "" ); - return false; - } - - private boolean checkIfMaxOtpTriesReached(AuthenticationFlowContext context) { - String OTP_TRIES = "OTP_TRIES"; - String OTP_MAX_RETRY_LIMIT = "OTP_MAX_RETRY_LIMIT"; - String otpTries = context.getAuthenticationSession().getAuthNote(OTP_TRIES); - System.out.println("OTP TRIES : " + otpTries); - int count = (otpTries == null ? 0 : Integer.parseInt(otpTries)); - count++; - int maxLimit = Integer.parseInt(System.getenv().getOrDefault(OTP_MAX_RETRY_LIMIT, "3")); - if(count == maxLimit) { - context.getAuthenticationSession().setAuthNote(OTP_TRIES, null); - String MAX_RETRIES_LIMIT_MESSAGE = "MAX_RETRIES_LIMIT_MESSAGE"; - Response response = context.form().setError(System.getenv().getOrDefault(MAX_RETRIES_LIMIT_MESSAGE, "Max failed login limit reached")).createForm(MOBILE_LOGIN_UI); - context.failure(AuthenticationFlowError.INVALID_CREDENTIALS, response); - return true; - } - context.getAuthenticationSession().setAuthNote(OTP_TRIES, "" + count); - return false; - } - - private void generateOTPAndNotify(AuthenticationFlowContext context, String mobileNumber, List users) { - UserModel user = users.get(0); - String otp; - if (Boolean.parseBoolean(mockOtp)) { - otp = mockOTPService.generateOTP(); - } else { - otp = otpService.generateOTP(); - } - new Thread(() -> { - callNotify(user, otp, EMAIL, "mailto:"); - callNotify(user, otp, MOBILE_NUMBER, "tel:"); - }).start(); - context.getAuthenticationSession().setAuthNote(OTP, otp); - context.setUser(user); - context.challenge(context.form().createForm(VERIFY_OTP_UI)); - } - - private void callNotify(UserModel user, String otp, String key, String prefix) { - List mobileNumberNodes = user.getAttributes().getOrDefault(key, Collections.emptyList()); - if (mobileNumberNodes.size() > 0) { - try { - notifyService.notify(prefix + mobileNumberNodes.get(0), otp); - } catch (IOException e) { - logger.error("Failed to send notification to " + mobileNumberNodes.get(0)); - } - } - } - - @Override - public void authenticate(AuthenticationFlowContext context) { - context.challenge(context.form().createForm(MOBILE_LOGIN_UI)); - } - - @Override - public boolean requiresUser() { - return false; - } - - @Override - public boolean configuredFor(KeycloakSession session, RealmModel realm, UserModel user) { - return true; - } - - @Override - public void setRequiredActions(KeycloakSession session, RealmModel realm, UserModel user) { - } - - @Override - public void close() { - } - -} \ No newline at end of file diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticatorFactory.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticatorFactory.java deleted file mode 100644 index cd21dfbf8..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MobileNumberAuthenticatorFactory.java +++ /dev/null @@ -1,81 +0,0 @@ -package in.divoc.api.authenticator; - -import org.keycloak.Config; -import org.keycloak.authentication.Authenticator; -import org.keycloak.authentication.AuthenticatorFactory; -import org.keycloak.models.AuthenticationExecutionModel; -import org.keycloak.models.KeycloakSession; -import org.keycloak.models.KeycloakSessionFactory; -import org.keycloak.provider.ProviderConfigProperty; - -import java.util.List; - -import static in.divoc.api.authenticator.Constants.PROVIDER_DISPLAY_TEXT; -import static in.divoc.api.authenticator.Constants.PROVIDER_ID; - -public class MobileNumberAuthenticatorFactory implements AuthenticatorFactory { - - private static final AuthenticationExecutionModel.Requirement[] REQUIREMENT_CHOICES = { - AuthenticationExecutionModel.Requirement.REQUIRED, - AuthenticationExecutionModel.Requirement.CONDITIONAL, - AuthenticationExecutionModel.Requirement.DISABLED - }; - - @Override - public Authenticator create(KeycloakSession session) { - return new MobileNumberAuthenticator(); - } - - @Override - public String getId() { - return PROVIDER_ID; - } - - @Override - public String getReferenceCategory() { - return PROVIDER_ID; - } - - @Override - public boolean isConfigurable() { - return false; - } - - @Override - public boolean isUserSetupAllowed() { - return true; - } - - @Override - public AuthenticationExecutionModel.Requirement[] getRequirementChoices() { - return REQUIREMENT_CHOICES; - } - - @Override - public String getDisplayType() { - return PROVIDER_DISPLAY_TEXT; - } - - @Override - public String getHelpText() { - return PROVIDER_DISPLAY_TEXT; - } - - @Override - public List getConfigProperties() { - return null; - } - - @Override - public void init(Config.Scope config) { - } - - @Override - public void postInit(KeycloakSessionFactory factory) { - } - - @Override - public void close() { - } - -} \ No newline at end of file diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MockOTPServiceImpl.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MockOTPServiceImpl.java deleted file mode 100644 index a1164959c..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/MockOTPServiceImpl.java +++ /dev/null @@ -1,11 +0,0 @@ -package in.divoc.api.authenticator; - -import org.jboss.logging.Logger; - -class MockOTPServiceImpl implements OTPService { - private static final Logger logger = Logger.getLogger(MockOTPServiceImpl.class); - - public String generateOTP() { - return System.getenv().getOrDefault("MOCK_OTP_VALUE", "1234"); - } -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/NotifyService.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/NotifyService.java deleted file mode 100644 index 901dd18f8..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/NotifyService.java +++ /dev/null @@ -1,59 +0,0 @@ -package in.divoc.api.authenticator; - - -import org.apache.commons.lang.exception.ExceptionUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.nio.charset.StandardCharsets; - -public class NotifyService { - private static final Logger logger = LoggerFactory.getLogger(NotifyService.class); - private static final String notificationURL = System.getenv().getOrDefault("NOTIFICATION_SERVICE_URL", "http://localhost:8765/notification-service/v1/notification"); - private static final String messageTemplate = System.getenv().getOrDefault("MESSAGE_TEMPLATE", "Your OTP to access SunbirdRC portal is %s. Please dont share this with anyone."); - - public void notify(String to, String otp) throws IOException { - - try { - URL url = new URL(notificationURL); - HttpURLConnection con = (HttpURLConnection) url.openConnection(); - con.setRequestMethod("POST"); - con.setRequestProperty("content-type", "application/json"); - con.setRequestProperty("accept", "application/json"); - con.setDoOutput(true); - String jsonInputString = "{\n" + - " \"recipient\": \"" + to + "\",\n" + - " \"message\": \"" + getMessage(otp) + "\",\n" + - " \"subject\": \"" + "Sunbird-RC OTP" + "\"\n" + - "}"; - try (OutputStream os = con.getOutputStream()) { - byte[] input = jsonInputString.getBytes(StandardCharsets.UTF_8); - os.write(input, 0, input.length); - } - try(BufferedReader br = new BufferedReader( - new InputStreamReader(con.getInputStream(), "utf-8"))) { - StringBuilder response = new StringBuilder(); - String responseLine = null; - while ((responseLine = br.readLine()) != null) { - response.append(responseLine.trim()); - } - System.out.println(response.toString()); - } - } catch (IOException e) { - logger.error("Exception occurred while notifying: {}", ExceptionUtils.getStackTrace(e)); - throw e; - } - - } - - private String getMessage(String... args) { - return String.format(messageTemplate, args); - } - -} \ No newline at end of file diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPService.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPService.java deleted file mode 100644 index 4390a4af9..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPService.java +++ /dev/null @@ -1,5 +0,0 @@ -package in.divoc.api.authenticator; - -public interface OTPService { - String generateOTP(); -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPServiceImpl.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPServiceImpl.java deleted file mode 100644 index 315c76470..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/OTPServiceImpl.java +++ /dev/null @@ -1,14 +0,0 @@ -package in.divoc.api.authenticator; - -import org.jboss.logging.Logger; - -import java.util.Random; - -class OTPServiceImpl implements OTPService { - private static final Logger logger = Logger.getLogger(OTPServiceImpl.class); - - public String generateOTP() { - Random rand = new Random(); - return String.format("%04d", rand.nextInt(10000)); - } -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/ValidationService.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/ValidationService.java deleted file mode 100644 index 582f17c46..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/ValidationService.java +++ /dev/null @@ -1,9 +0,0 @@ -package in.divoc.api.authenticator; - -public class ValidationService implements IValidation { - @Override - public boolean validate(String mobileNumber) { - final String MOBILE_NUMBER_LENGTH = "MOBILE_NUMBER_LENGTH"; - return mobileNumber.length() == Integer.parseInt(System.getenv().getOrDefault(MOBILE_NUMBER_LENGTH, "10")); - } -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserDetails.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserDetails.java deleted file mode 100644 index dc3745f9e..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserDetails.java +++ /dev/null @@ -1,47 +0,0 @@ -package in.divoc.api.authenticator.models; - -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class UserDetails { - private String id; - private String userName; - private String firstName; - private String lastName; - private Map> attributes; - private List groups; - - public UserDetails(String id, String userName, String firstName, String lastName, Map> attributes, List groups) { - this.id = id; - this.userName = userName; - this.firstName = firstName; - this.lastName = lastName; - this.attributes = attributes; - this.groups = groups; - } - - public String getId() { - return id; - } - - public String getFirstName() { - return firstName; - } - - public String getUserName() { - return userName; - } - - public String getLastName() { - return lastName; - } - - public Map> getAttributes() { - return attributes; - } - - public List getGroups() { - return groups; - } -} \ No newline at end of file diff --git a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserGroup.java b/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserGroup.java deleted file mode 100644 index 7ad27d4db..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/java/in/divoc/api/authenticator/models/UserGroup.java +++ /dev/null @@ -1,19 +0,0 @@ -package in.divoc.api.authenticator.models; - -public class UserGroup { - private String id; - private String name; - - public UserGroup(String id, String name) { - this.id = id; - this.name = name; - } - - public String getId() { - return id; - } - - public String getName() { - return name; - } -} diff --git a/deps/keycloak-mobile-number-login-spi/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory b/deps/keycloak-mobile-number-login-spi/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory deleted file mode 100755 index f427545d3..000000000 --- a/deps/keycloak-mobile-number-login-spi/src/main/resources/META-INF/services/org.keycloak.authentication.AuthenticatorFactory +++ /dev/null @@ -1,18 +0,0 @@ -# -# Copyright 2016 Red Hat, Inc. and/or its affiliates -# and other contributors as indicated by the @author tags. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -in.divoc.api.authenticator.MobileNumberAuthenticatorFactory \ No newline at end of file diff --git a/deps/keycloak/Dockerfile b/deps/keycloak/Dockerfile deleted file mode 100644 index 6d2de53fc..000000000 --- a/deps/keycloak/Dockerfile +++ /dev/null @@ -1,7 +0,0 @@ -ARG KEYCLOAK_BASE_IMAGE=sunbirdrc/keycloak -FROM $KEYCLOAK_BASE_IMAGE - -ADD themes /opt/jboss/keycloak/themes -ADD providers /opt/jboss/keycloak/providers - -ENTRYPOINT ["/opt/jboss/tools/docker-entrypoint.sh"] diff --git a/deps/keycloak/Makefile b/deps/keycloak/Makefile deleted file mode 100644 index 430f906de..000000000 --- a/deps/keycloak/Makefile +++ /dev/null @@ -1,23 +0,0 @@ -IMAGE_DESTINATION=ghcr.io/sunbird-rc/sunbird-rc-keycloak -RELEASE_VERSION=v1.0.1 -build: - echo "Building docker image" - @cd ../keycloak-mobile-number-login-spi/ && sh ./build.sh - @docker build -t $(IMAGE_DESTINATION) . - -push: - @docker tag $(IMAGE_DESTINATION) $(IMAGE_DESTINATION):$(RELEASE_VERSION) - @docker push $(IMAGE_DESTINATION) - @docker push $(IMAGE_DESTINATION):$(RELEASE_VERSION) - -build-silicon-base: - @docker build -t ghcr.io/sunbird-rc/keycloak:$(RELEASE_VERSION)-apple-silicon -f apple-silicon/Dockerfile apple-silicon - -build-silicon: - echo "Building docker image" - @cd ../keycloak-mobile-number-login-spi/ && sh ./build.sh - @docker build -t $(IMAGE_DESTINATION):$(RELEASE_VERSION)-apple-silicon --build-arg KEYCLOAK_BASE_IMAGE=ghcr.io/sunbird-rc/keycloak:1.0.0-apple-silicon . - -push-silicon: - @docker push $(IMAGE_DESTINATION):$(RELEASE_VERSION)-apple-silicon - \ No newline at end of file diff --git a/deps/keycloak/README.md b/deps/keycloak/README.md deleted file mode 100644 index 1d39b213e..000000000 --- a/deps/keycloak/README.md +++ /dev/null @@ -1,7 +0,0 @@ - -## Running keycloak in docker compose mode. - -* run `./build.sh` from keycloak-mobile-number-login-spi -* it will add keycloak/providers and keycloak/themes -* copy divoc-realm.json to keycloack directory -* run `docker-compose up` \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/Dockerfile b/deps/keycloak/apple-silicon/Dockerfile deleted file mode 100644 index e1f263830..000000000 --- a/deps/keycloak/apple-silicon/Dockerfile +++ /dev/null @@ -1,34 +0,0 @@ -FROM arm64v8/rockylinux:8-minimal - -#registry.access.redhat.com/ubi8-minimal - -ENV KEYCLOAK_VERSION 14.0.0 -ENV JDBC_POSTGRES_VERSION 42.3.3 -ENV JDBC_MYSQL_VERSION 8.0.22 -ENV JDBC_MARIADB_VERSION 2.5.4 -ENV JDBC_MSSQL_VERSION 10.2.1.jre11 - -ENV LAUNCH_JBOSS_IN_BACKGROUND 1 -ENV PROXY_ADDRESS_FORWARDING false -ENV JBOSS_HOME /opt/jboss/keycloak -ENV LANG en_US.UTF-8 - -ARG GIT_REPO -ARG GIT_BRANCH -ARG KEYCLOAK_DIST=https://github.com/keycloak/keycloak/releases/download/$KEYCLOAK_VERSION/keycloak-$KEYCLOAK_VERSION.tar.gz - -USER root - -RUN microdnf update -y && microdnf install -y glibc-langpack-en gzip hostname java-11-openjdk-headless openssl tar which && microdnf clean all - -ADD tools /opt/jboss/tools -RUN /opt/jboss/tools/build-keycloak.sh - -USER 1000 - -EXPOSE 8080 -EXPOSE 8443 - -ENTRYPOINT [ "/opt/jboss/tools/docker-entrypoint.sh" ] - -CMD ["-b", "0.0.0.0"] diff --git a/deps/keycloak/apple-silicon/README.md b/deps/keycloak/apple-silicon/README.md deleted file mode 100644 index a2ad8a43e..000000000 --- a/deps/keycloak/apple-silicon/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Keycloak for apple silicon - -This build is for keycloak to run on apple M1/M2... diff --git a/deps/keycloak/apple-silicon/tools/autorun.sh b/deps/keycloak/apple-silicon/tools/autorun.sh deleted file mode 100755 index c3282b119..000000000 --- a/deps/keycloak/apple-silicon/tools/autorun.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/bash -e -cd /opt/jboss/keycloak - -ENTRYPOINT_DIR=/opt/jboss/startup-scripts - -if [[ -d "$ENTRYPOINT_DIR" ]]; then - # First run cli autoruns - for f in "$ENTRYPOINT_DIR"/*; do - if [[ "$f" == *.cli ]]; then - echo "Executing cli script: $f" - bin/jboss-cli.sh --file="$f" - elif [[ -d "$f" ]]; then - echo "Skipping execution of directory: $f" - elif [[ -x "$f" ]]; then - echo "Executing: $f" - "$f" - else - echo "Ignoring file in $ENTRYPOINT_DIR (not *.cli or executable): $f" - fi - done -fi diff --git a/deps/keycloak/apple-silicon/tools/build-keycloak.sh b/deps/keycloak/apple-silicon/tools/build-keycloak.sh deleted file mode 100755 index 6d7be6d22..000000000 --- a/deps/keycloak/apple-silicon/tools/build-keycloak.sh +++ /dev/null @@ -1,105 +0,0 @@ -#!/bin/bash -e - -########################### -# Build/download Keycloak # -########################### - -if [ "$GIT_REPO" != "" ]; then - if [ "$GIT_BRANCH" == "" ]; then - GIT_BRANCH="main" - fi - - # Install Git - microdnf install -y git - - # Install Maven - cd /opt/jboss - curl -s https://apache.uib.no/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz | tar xz - mv apache-maven-3.5.4 /opt/jboss/maven - export M2_HOME=/opt/jboss/maven - - # Clone repository - git clone --depth 1 https://github.com/$GIT_REPO.git -b $GIT_BRANCH /opt/jboss/keycloak-source - - # Build - cd /opt/jboss/keycloak-source - - MAIN_HEAD=`git log -n1 --format="%H"` - echo "Keycloak from [build]: $GIT_REPO/$GIT_BRANCH/commit/$MAIN_HEAD" - - $M2_HOME/bin/mvn -Pdistribution -pl distribution/server-dist -am -Dmaven.test.skip clean install - - cd /opt/jboss - - tar xfz /opt/jboss/keycloak-source/distribution/server-dist/target/keycloak-*.tar.gz - - # Remove temporary files - rm -rf /opt/jboss/maven - rm -rf /opt/jboss/keycloak-source - rm -rf $HOME/.m2/repository - - mv /opt/jboss/keycloak-* /opt/jboss/keycloak -else - echo "Keycloak from [download]: $KEYCLOAK_DIST" - - cd /opt/jboss/ - curl -L $KEYCLOAK_DIST | tar zx - mv /opt/jboss/keycloak-* /opt/jboss/keycloak -fi - -##################### -# Create DB modules # -##################### - -mkdir -p /opt/jboss/keycloak/modules/system/layers/base/com/mysql/jdbc/main -cd /opt/jboss/keycloak/modules/system/layers/base/com/mysql/jdbc/main -curl -O https://repo1.maven.org/maven2/mysql/mysql-connector-java/$JDBC_MYSQL_VERSION/mysql-connector-java-$JDBC_MYSQL_VERSION.jar -cp /opt/jboss/tools/databases/mysql/module.xml . -sed "s/JDBC_MYSQL_VERSION/$JDBC_MYSQL_VERSION/" /opt/jboss/tools/databases/mysql/module.xml > module.xml - -mkdir -p /opt/jboss/keycloak/modules/system/layers/base/org/postgresql/jdbc/main -cd /opt/jboss/keycloak/modules/system/layers/base/org/postgresql/jdbc/main -curl -L https://repo1.maven.org/maven2/org/postgresql/postgresql/$JDBC_POSTGRES_VERSION/postgresql-$JDBC_POSTGRES_VERSION.jar > postgres-jdbc.jar -cp /opt/jboss/tools/databases/postgres/module.xml . - -mkdir -p /opt/jboss/keycloak/modules/system/layers/base/org/mariadb/jdbc/main -cd /opt/jboss/keycloak/modules/system/layers/base/org/mariadb/jdbc/main -curl -L https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/$JDBC_MARIADB_VERSION/mariadb-java-client-$JDBC_MARIADB_VERSION.jar > mariadb-jdbc.jar -cp /opt/jboss/tools/databases/mariadb/module.xml . - -mkdir -p /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main -cd /opt/jboss/keycloak/modules/system/layers/base/com/oracle/jdbc/main -cp /opt/jboss/tools/databases/oracle/module.xml . - -mkdir -p /opt/jboss/keycloak/modules/system/layers/keycloak/com/microsoft/sqlserver/jdbc/main -cd /opt/jboss/keycloak/modules/system/layers/keycloak/com/microsoft/sqlserver/jdbc/main -curl -L https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/$JDBC_MSSQL_VERSION/mssql-jdbc-$JDBC_MSSQL_VERSION.jar > mssql-jdbc.jar -cp /opt/jboss/tools/databases/mssql/module.xml . - -###################### -# Configure Keycloak # -###################### - -cd /opt/jboss/keycloak - -bin/jboss-cli.sh --file=/opt/jboss/tools/cli/standalone-configuration.cli -rm -rf /opt/jboss/keycloak/standalone/configuration/standalone_xml_history - -bin/jboss-cli.sh --file=/opt/jboss/tools/cli/standalone-ha-configuration.cli -rm -rf /opt/jboss/keycloak/standalone/configuration/standalone_xml_history - -########### -# Garbage # -########### - -rm -rf /opt/jboss/keycloak/standalone/tmp/auth -rm -rf /opt/jboss/keycloak/domain/tmp/auth - -################### -# Set permissions # -################### - -echo "jboss:x:0:root" >> /etc/group -echo "jboss:x:1000:0:JBoss user:/opt/jboss:/sbin/nologin" >> /etc/passwd -chown -R jboss:root /opt/jboss -chmod -R g+rwX /opt/jboss diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/h2/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/h2/change-database.cli deleted file mode 100644 index 21809d7c7..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/h2/change-database.cli +++ /dev/null @@ -1,9 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:h2:tcp://${env.DB_ADDR:h2}:${env.DB_PORT:9092}/${env.DB_DATABASE:keycloak};schema\=${env.DB_SCHEMA:public}${env.JDBC_PARAMS:}, driver-name=h2tcp) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=h2tcp:add(driver-name=h2tcp, driver-module-name=com.h2database.h2, driver-xa-datasource-class-name=org.h2.jdbcx.JdbcDataSource) diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-configuration.cli deleted file mode 100644 index d47881c72..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/h2/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-ha-configuration.cli deleted file mode 100644 index 55ea4e237..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/h2/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/h2/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/change-database.cli deleted file mode 100644 index 2f099f2ef..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/change-database.cli +++ /dev/null @@ -1,9 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:mariadb://${env.DB_ADDR:mariadb}:${env.DB_PORT:3306}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}, driver-name=mariadb) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=mariadb:add(driver-name=mariadb, driver-module-name=org.mariadb.jdbc, driver-xa-datasource-class-name=org.mariadb.jdbc.MySQLDataSource) diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-configuration.cli deleted file mode 100644 index 60c045345..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mariadb/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-ha-configuration.cli deleted file mode 100644 index de5913612..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mariadb/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mariadb/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mssql/change-database.cli deleted file mode 100644 index bdb87fc50..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/change-database.cli +++ /dev/null @@ -1,11 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url="jdbc:sqlserver://${env.DB_ADDR:mssql}:${env.DB_PORT:1433};databaseName=${env.DB_DATABASE:keycloak};sendStringParametersAsUnicode=false;${env.JDBC_PARAMS:}", driver-name=sqlserver) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=sqlserver:add(driver-name=sqlserver,driver-module-name=com.microsoft.sqlserver.jdbc,driver-xa-datasource-class-name=com.microsoft.sqlserver.jdbc.SQLServerXADataSource) - -/subsystem=keycloak-server/spi=connectionsJpa/provider=default:write-attribute(name=properties.schema,value=${env.DB_SCHEMA:dbo}) \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-configuration.cli deleted file mode 100644 index 8a616cab6..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mssql/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-ha-configuration.cli deleted file mode 100644 index 5057630f6..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mssql/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mssql/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mysql/change-database.cli deleted file mode 100644 index e70969737..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/change-database.cli +++ /dev/null @@ -1,9 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:mysql://${env.DB_ADDR:mysql}:${env.DB_PORT:3306}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}, driver-name=mysql) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=mysql:add(driver-name=mysql, driver-module-name=com.mysql.jdbc, driver-xa-datasource-class-name=com.mysql.cj.jdbc.MysqlXADataSource) diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-configuration.cli deleted file mode 100644 index 00370f68f..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mysql/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-ha-configuration.cli deleted file mode 100644 index 5787e8a53..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/mysql/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/mysql/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/oracle/change-database.cli deleted file mode 100644 index 3ea85bf08..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/change-database.cli +++ /dev/null @@ -1,9 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:oracle:thin:@${env.DB_ADDR:oracle}:${env.DB_PORT:1521}:${env.DB_DATABASE:XE}${env.JDBC_PARAMS:}, driver-name=oracle) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:SYSTEM}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:oracle}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1 FROM dual") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=oracle:add(driver-name=oracle, driver-module-name=com.oracle.jdbc, driver-xa-datasource-class-name=oracle.jdbc.xa.client.OracleXADataSource) diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-configuration.cli deleted file mode 100644 index 4f1f3dcd0..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/oracle/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-ha-configuration.cli deleted file mode 100644 index 57762b819..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/oracle/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/oracle/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/change-database.cli b/deps/keycloak/apple-silicon/tools/cli/databases/postgres/change-database.cli deleted file mode 100644 index f6b70425f..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/change-database.cli +++ /dev/null @@ -1,11 +0,0 @@ -/subsystem=datasources/data-source=KeycloakDS: remove() -/subsystem=datasources/data-source=KeycloakDS: add(jndi-name=java:jboss/datasources/KeycloakDS,enabled=true,use-java-context=true,use-ccm=true, connection-url=jdbc:postgresql://${env.DB_ADDR:postgres}/${env.DB_DATABASE:keycloak}${env.JDBC_PARAMS:}, driver-name=postgresql) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=user-name, value=${env.DB_USER:keycloak}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=password, value=${env.DB_PASSWORD:password}) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=check-valid-connection-sql, value="SELECT 1") -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation, value=true) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=background-validation-millis, value=60000) -/subsystem=datasources/data-source=KeycloakDS: write-attribute(name=flush-strategy, value=IdleConnections) -/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql.jdbc, driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource) - -/subsystem=keycloak-server/spi=connectionsJpa/provider=default:write-attribute(name=properties.schema,value=${env.DB_SCHEMA:public}) diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-configuration.cli deleted file mode 100644 index e10ff84b9..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/postgres/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-ha-configuration.cli deleted file mode 100644 index e95f34448..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/databases/postgres/standalone-ha-configuration.cli +++ /dev/null @@ -1,3 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/databases/postgres/change-database.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/files-plaintext-vault.cli b/deps/keycloak/apple-silicon/tools/cli/files-plaintext-vault.cli deleted file mode 100644 index 1b076c2e1..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/files-plaintext-vault.cli +++ /dev/null @@ -1,7 +0,0 @@ -embed-server --server-config=$configuration_file --std-out=discard -echo ** Adding vault spi ** -/subsystem=keycloak-server/spi=vault/:add -/subsystem=keycloak-server/spi=vault/provider=files-plaintext/:add(enabled=true,properties={dir => $plaintext_vault_provider_dir}) -/subsystem=keycloak-server/spi=vault:write-attribute(name=default-provider,value=files-plaintext) -stop-embedded-server - diff --git a/deps/keycloak/apple-silicon/tools/cli/hostname.cli b/deps/keycloak/apple-silicon/tools/cli/hostname.cli deleted file mode 100644 index c9e82e125..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/hostname.cli +++ /dev/null @@ -1,2 +0,0 @@ -/subsystem=keycloak-server/spi=hostname:write-attribute(name=default-provider, value="${keycloak.hostname.provider:default}") -/subsystem=keycloak-server/spi=hostname/provider=fixed/:add(properties={hostname => "${keycloak.hostname.fixed.hostname:localhost}",httpPort => "${keycloak.hostname.fixed.httpPort:-1}",httpsPort => "${keycloak.hostname.fixed.httpsPort:-1}",alwaysHttps => "${keycloak.hostname.fixed.alwaysHttps:false}"},enabled=true) diff --git a/deps/keycloak/apple-silicon/tools/cli/infinispan/cache-owners.cli b/deps/keycloak/apple-silicon/tools/cli/infinispan/cache-owners.cli deleted file mode 100644 index dc207e762..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/infinispan/cache-owners.cli +++ /dev/null @@ -1,11 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=infinispan/cache-container=keycloak/distributed-cache=sessions: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineSessions: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=loginFailures: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=clientSessions: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=offlineClientSessions: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=actionTokens: write-attribute(name=owners, value=${env.CACHE_OWNERS_COUNT:1}) -/subsystem=infinispan/cache-container=keycloak/distributed-cache=authenticationSessions: write-attribute(name=owners, value=${env.CACHE_OWNERS_AUTH_SESSIONS_COUNT:1}) -run-batch -stop-embedded-server \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/JDBC_PING.cli b/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/JDBC_PING.cli deleted file mode 100644 index bd4c8ee7e..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/JDBC_PING.cli +++ /dev/null @@ -1,11 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=jgroups/stack=udp/protocol=PING:remove() -/subsystem=jgroups/stack=udp/protocol=JDBC_PING:add(add-index=0, data-source=KeycloakDS, properties=$keycloak_jgroups_discovery_protocol_properties) - -/subsystem=jgroups/stack=tcp/protocol=MPING:remove() -/subsystem=jgroups/stack=tcp/protocol=JDBC_PING:add(add-index=0, data-source=KeycloakDS, properties=$keycloak_jgroups_discovery_protocol_properties) - -/subsystem=jgroups/channel=ee:write-attribute(name="stack", value=$keycloak_jgroups_transport_stack) -run-batch -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/default.cli b/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/default.cli deleted file mode 100644 index 68da05a1c..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/jgroups/discovery/default.cli +++ /dev/null @@ -1,11 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=jgroups/stack=udp/protocol=PING:remove() -/subsystem=jgroups/stack=udp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties) - -/subsystem=jgroups/stack=tcp/protocol=MPING:remove() -/subsystem=jgroups/stack=tcp/protocol=$keycloak_jgroups_discovery_protocol:add(add-index=0, properties=$keycloak_jgroups_discovery_protocol_properties) - -/subsystem=jgroups/channel=ee:write-attribute(name="stack", value=$keycloak_jgroups_transport_stack) -run-batch -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/loglevel.cli b/deps/keycloak/apple-silicon/tools/cli/loglevel.cli deleted file mode 100644 index c6adb8826..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/loglevel.cli +++ /dev/null @@ -1,9 +0,0 @@ -/subsystem=logging/logger=org.keycloak:add -/subsystem=logging/logger=org.keycloak:write-attribute(name=level,value=${env.KEYCLOAK_LOGLEVEL:INFO}) - -/subsystem=logging/root-logger=ROOT:change-root-log-level(level=${env.ROOT_LOGLEVEL:INFO}) - -/subsystem=logging/root-logger=ROOT:remove-handler(name="FILE") -/subsystem=logging/periodic-rotating-file-handler=FILE:remove - -/subsystem=logging/console-handler=CONSOLE:undefine-attribute(name=level) diff --git a/deps/keycloak/apple-silicon/tools/cli/metrics/db.cli b/deps/keycloak/apple-silicon/tools/cli/metrics/db.cli deleted file mode 100644 index 752465717..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/metrics/db.cli +++ /dev/null @@ -1,5 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=datasources/data-source=KeycloakDS:write-attribute(name=statistics-enabled, value=true) -run-batch -stop-embedded-server \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/cli/metrics/http.cli b/deps/keycloak/apple-silicon/tools/cli/metrics/http.cli deleted file mode 100644 index 322c7db9b..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/metrics/http.cli +++ /dev/null @@ -1,5 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=undertow:write-attribute(name=statistics-enabled,value=true) -run-batch -stop-embedded-server \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/cli/metrics/jgroups.cli b/deps/keycloak/apple-silicon/tools/cli/metrics/jgroups.cli deleted file mode 100644 index dac4cb55d..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/metrics/jgroups.cli +++ /dev/null @@ -1,5 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -batch -/subsystem=jgroups/channel=ee:write-attribute(name=statistics-enabled, value=true) -run-batch -stop-embedded-server \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/cli/proxy.cli b/deps/keycloak/apple-silicon/tools/cli/proxy.cli deleted file mode 100644 index 3c1984b1b..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/proxy.cli +++ /dev/null @@ -1,2 +0,0 @@ -/subsystem=undertow/server=default-server/http-listener=default: write-attribute(name=proxy-address-forwarding, value=${env.PROXY_ADDRESS_FORWARDING:false}) -/subsystem=undertow/server=default-server/https-listener=https: write-attribute(name=proxy-address-forwarding, value=${env.PROXY_ADDRESS_FORWARDING:false}) diff --git a/deps/keycloak/apple-silicon/tools/cli/standalone-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/standalone-configuration.cli deleted file mode 100644 index 6e47c46ca..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/standalone-configuration.cli +++ /dev/null @@ -1,6 +0,0 @@ -embed-server --server-config=standalone.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/loglevel.cli -run-batch --file=/opt/jboss/tools/cli/proxy.cli -run-batch --file=/opt/jboss/tools/cli/hostname.cli -run-batch --file=/opt/jboss/tools/cli/theme.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/standalone-ha-configuration.cli b/deps/keycloak/apple-silicon/tools/cli/standalone-ha-configuration.cli deleted file mode 100644 index 33e1440f3..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/standalone-ha-configuration.cli +++ /dev/null @@ -1,6 +0,0 @@ -embed-server --server-config=standalone-ha.xml --std-out=echo -run-batch --file=/opt/jboss/tools/cli/loglevel.cli -run-batch --file=/opt/jboss/tools/cli/proxy.cli -run-batch --file=/opt/jboss/tools/cli/hostname.cli -run-batch --file=/opt/jboss/tools/cli/theme.cli -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/theme.cli b/deps/keycloak/apple-silicon/tools/cli/theme.cli deleted file mode 100644 index dba1937d7..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/theme.cli +++ /dev/null @@ -1,2 +0,0 @@ -/subsystem=keycloak-server/theme=defaults:write-attribute(name=welcomeTheme,value=${env.KEYCLOAK_WELCOME_THEME:keycloak}) -/subsystem=keycloak-server/theme=defaults:write-attribute(name=default,value=${env.KEYCLOAK_DEFAULT_THEME:keycloak}) diff --git a/deps/keycloak/apple-silicon/tools/cli/x509-keystore.cli b/deps/keycloak/apple-silicon/tools/cli/x509-keystore.cli deleted file mode 100644 index 270a70065..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/x509-keystore.cli +++ /dev/null @@ -1,9 +0,0 @@ -embed-server --server-config=$configuration_file --std-out=discard -/subsystem=elytron/key-store=kcKeyStore:add(path=$keycloak_tls_keystore_file,type=JKS,credential-reference={clear-text=$keycloak_tls_keystore_password}) -/subsystem=elytron/key-manager=kcKeyManager:add(key-store=kcKeyStore,credential-reference={clear-text=$keycloak_tls_keystore_password}) -/subsystem=elytron/server-ssl-context=kcSSLContext:add(key-manager=kcKeyManager) -batch -/subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) -/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context,value=kcSSLContext) -run-batch -stop-embedded-server diff --git a/deps/keycloak/apple-silicon/tools/cli/x509-truststore.cli b/deps/keycloak/apple-silicon/tools/cli/x509-truststore.cli deleted file mode 100644 index 79f94db09..000000000 --- a/deps/keycloak/apple-silicon/tools/cli/x509-truststore.cli +++ /dev/null @@ -1,25 +0,0 @@ -embed-server --server-config=$configuration_file --std-out=discard -/subsystem=elytron/key-store=kcTrustStore:add(path=$keycloak_tls_truststore_file,type=JKS,credential-reference={clear-text=$keycloak_tls_truststore_password}) -/subsystem=elytron/trust-manager=kcTrustManager:add(key-store=kcTrustStore) -if (outcome != success) of /subsystem=elytron/server-ssl-context=kcSSLContext:read-resource - # Since WF requires a Key Manager for creating /subsystem=elytron/server-ssl-context, there's nothing we can do at this point. - # We can not automatically generate a self-signed key (Elytron doesn't support this, see https://docs.wildfly.org/13/WildFly_Elytron_Security.html#configure-ssltls), - # and we don't have anything else at hand. - # However, there is no big harm here - the Trust Store is more needed by Keycloak Truststore SPI. - echo "WARNING! There is no Key Manager (No Key Store specified). Skipping HTTPS Listener configuration..." -else - # The SSL Context has been added by keystore, not much to do - just append trust store and we are done. - /subsystem=elytron/server-ssl-context=kcSSLContext:write-attribute(name=trust-manager, value=kcTrustManager) - /subsystem=elytron/server-ssl-context=kcSSLContext:write-attribute(name=want-client-auth, value=true) -end-if - -if (outcome != success) of /subsystem=keycloak-server/spi=truststore:read-resource - /subsystem=keycloak-server/spi=truststore/:add -end-if -/subsystem=keycloak-server/spi=truststore/provider=file/:add(enabled=true,properties={ \ - file => $keycloak_tls_truststore_file, \ - password => $keycloak_tls_truststore_password, \ - hostname-verification-policy => "WILDCARD", \ -disabled => "false"}) - -stop-embedded-server \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/databases/change-database.sh b/deps/keycloak/apple-silicon/tools/databases/change-database.sh deleted file mode 100644 index 55a4a8e82..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/change-database.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/bash -e - -DB_VENDOR=$1 - -cd /opt/jboss/keycloak - -bin/jboss-cli.sh --file=/opt/jboss/tools/cli/databases/$DB_VENDOR/standalone-configuration.cli -rm -rf /opt/jboss/keycloak/standalone/configuration/standalone_xml_history - -bin/jboss-cli.sh --file=/opt/jboss/tools/cli/databases/$DB_VENDOR/standalone-ha-configuration.cli -rm -rf standalone/configuration/standalone_xml_history/current/* \ No newline at end of file diff --git a/deps/keycloak/apple-silicon/tools/databases/mariadb/module.xml b/deps/keycloak/apple-silicon/tools/databases/mariadb/module.xml deleted file mode 100644 index a3f6f962d..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/mariadb/module.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/deps/keycloak/apple-silicon/tools/databases/mssql/module.xml b/deps/keycloak/apple-silicon/tools/databases/mssql/module.xml deleted file mode 100644 index 23574b804..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/mssql/module.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/deps/keycloak/apple-silicon/tools/databases/mysql/module.xml b/deps/keycloak/apple-silicon/tools/databases/mysql/module.xml deleted file mode 100644 index 600bdedbf..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/mysql/module.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/deps/keycloak/apple-silicon/tools/databases/oracle/module.xml b/deps/keycloak/apple-silicon/tools/databases/oracle/module.xml deleted file mode 100644 index 8720a08f9..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/oracle/module.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/deps/keycloak/apple-silicon/tools/databases/postgres/module.xml b/deps/keycloak/apple-silicon/tools/databases/postgres/module.xml deleted file mode 100644 index 2180e59ea..000000000 --- a/deps/keycloak/apple-silicon/tools/databases/postgres/module.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - diff --git a/deps/keycloak/apple-silicon/tools/docker-entrypoint.sh b/deps/keycloak/apple-silicon/tools/docker-entrypoint.sh deleted file mode 100755 index 663374305..000000000 --- a/deps/keycloak/apple-silicon/tools/docker-entrypoint.sh +++ /dev/null @@ -1,257 +0,0 @@ -#!/bin/bash -set -eou pipefail - -# usage: file_env VAR [DEFAULT] -# ie: file_env 'XYZ_DB_PASSWORD' 'example' -# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of -# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) -file_env() { - local var="$1" - local fileVar="${var}_FILE" - local def="${2:-}" - if [[ ${!var:-} && ${!fileVar:-} ]]; then - echo >&2 "error: both $var and $fileVar are set (but are exclusive)" - exit 1 - fi - local val="$def" - if [[ ${!var:-} ]]; then - val="${!var}" - elif [[ ${!fileVar:-} ]]; then - val="$(< "${!fileVar}")" - fi - - if [[ -n $val ]]; then - export "$var"="$val" - fi - - unset "$fileVar" -} - -SYS_PROPS="" - -################## -# Add admin user # -################## - -file_env 'KEYCLOAK_USER' -file_env 'KEYCLOAK_PASSWORD' - -if [[ -n ${KEYCLOAK_USER:-} && -n ${KEYCLOAK_PASSWORD:-} ]]; then - /opt/jboss/keycloak/bin/add-user-keycloak.sh --user "$KEYCLOAK_USER" --password "$KEYCLOAK_PASSWORD" -fi - -############ -# Hostname # -############ - -if [[ -n ${KEYCLOAK_FRONTEND_URL:-} ]]; then - SYS_PROPS+="-Dkeycloak.frontendUrl=$KEYCLOAK_FRONTEND_URL" -fi - -if [[ -n ${KEYCLOAK_HOSTNAME:-} ]]; then - SYS_PROPS+=" -Dkeycloak.hostname.provider=fixed -Dkeycloak.hostname.fixed.hostname=$KEYCLOAK_HOSTNAME" - - if [[ -n ${KEYCLOAK_HTTP_PORT:-} ]]; then - SYS_PROPS+=" -Dkeycloak.hostname.fixed.httpPort=$KEYCLOAK_HTTP_PORT" - fi - - if [[ -n ${KEYCLOAK_HTTPS_PORT:-} ]]; then - SYS_PROPS+=" -Dkeycloak.hostname.fixed.httpsPort=$KEYCLOAK_HTTPS_PORT" - fi - - if [[ -n ${KEYCLOAK_ALWAYS_HTTPS:-} ]]; then - SYS_PROPS+=" -Dkeycloak.hostname.fixed.alwaysHttps=$KEYCLOAK_ALWAYS_HTTPS" - fi -fi - -################ -# Realm import # -################ - -if [[ -n ${KEYCLOAK_IMPORT:-} ]]; then - SYS_PROPS+=" -Dkeycloak.import=$KEYCLOAK_IMPORT" -fi - -######################## -# JGroups bind options # -######################## - -if [[ -z ${BIND:-} ]]; then - BIND=$(hostname --all-ip-addresses) -fi -if [[ -z ${BIND_OPTS:-} ]]; then - for BIND_IP in $BIND - do - BIND_OPTS+=" -Djboss.bind.address=$BIND_IP -Djboss.bind.address.private=$BIND_IP " - done -fi -SYS_PROPS+=" $BIND_OPTS" - -######################################### -# Expose management console for metrics # -######################################### - -if [[ -n ${KEYCLOAK_STATISTICS:-} ]] ; then - SYS_PROPS+=" -Djboss.bind.address.management=0.0.0.0" -fi - -################# -# Configuration # -################# - -# If the server configuration parameter is not present, append the HA profile. -if echo "$@" | grep -E -v -- '-c |-c=|--server-config |--server-config='; then - SYS_PROPS+=" -c=standalone-ha.xml" -fi - -# Adding support for JAVA_OPTS_APPEND -sed -i '$a\\n# Append to JAVA_OPTS. Necessary to prevent some values being omitted if JAVA_OPTS is defined directly\nJAVA_OPTS=\"\$JAVA_OPTS \$JAVA_OPTS_APPEND\"' /opt/jboss/keycloak/bin/standalone.conf - -############ -# DB setup # -############ - -file_env 'DB_USER' -file_env 'DB_PASSWORD' -# Lower case DB_VENDOR -if [[ -n ${DB_VENDOR:-} ]]; then - DB_VENDOR=$(echo "$DB_VENDOR" | tr "[:upper:]" "[:lower:]") -fi - -# Detect DB vendor from default host names -if [[ -z ${DB_VENDOR:-} ]]; then - if (getent hosts postgres &>/dev/null); then - export DB_VENDOR="postgres" - elif (getent hosts mysql &>/dev/null); then - export DB_VENDOR="mysql" - elif (getent hosts mariadb &>/dev/null); then - export DB_VENDOR="mariadb" - elif (getent hosts oracle &>/dev/null); then - export DB_VENDOR="oracle" - elif (getent hosts mssql &>/dev/null); then - export DB_VENDOR="mssql" - elif (getent hosts h2 &>/dev/null); then - export DB_VENDOR="h2" - export DB_ADDR="h2" - fi -fi - -# Detect DB vendor from legacy `*_ADDR` environment variables -if [[ -z ${DB_VENDOR:-} ]]; then - if (printenv | grep '^POSTGRES_ADDR=' &>/dev/null); then - export DB_VENDOR="postgres" - elif (printenv | grep '^MYSQL_ADDR=' &>/dev/null); then - export DB_VENDOR="mysql" - elif (printenv | grep '^MARIADB_ADDR=' &>/dev/null); then - export DB_VENDOR="mariadb" - elif (printenv | grep '^ORACLE_ADDR=' &>/dev/null); then - export DB_VENDOR="oracle" - elif (printenv | grep '^MSSQL_ADDR=' &>/dev/null); then - export DB_VENDOR="mssql" - elif (printenv | grep '^H2_ADDR=' &>/dev/null); then - export DB_VENDOR="h2" - export DB_ADDR="h2" - fi -fi - -# Default to H2 if DB type not detected -if [[ -z ${DB_VENDOR:-} ]]; then - export DB_VENDOR="h2" -fi - -# if the DB_VENDOR is postgres then append port to the DB_ADDR -function append_port_db_addr() { - local db_host_regex='^[a-zA-Z0-9]([a-zA-Z0-9]|-|.)*:[0-9]{4,5}$' - IFS=',' read -ra addresses <<< "$DB_ADDR" - DB_ADDR="" - for i in "${addresses[@]}"; do - if [[ $i =~ $db_host_regex ]]; then - DB_ADDR+=$i; - else - DB_ADDR+="${i}:${DB_PORT}"; - fi - DB_ADDR+="," - done - DB_ADDR=$(echo $DB_ADDR | sed 's/.$//') # remove the last comma -} -# Set DB name -case "$DB_VENDOR" in - postgres) - DB_NAME="PostgreSQL" - if [[ -z ${DB_PORT:-} ]] ; then - DB_PORT="5432" - fi - append_port_db_addr - ;; - mysql) - DB_NAME="MySQL";; - mariadb) - DB_NAME="MariaDB";; - mssql) - DB_NAME="Microsoft SQL Server";; - oracle) - DB_NAME="Oracle";; - h2) - if [[ -z ${DB_ADDR:-} ]] ; then - DB_NAME="Embedded H2" - else - DB_NAME="H2" - fi;; - *) - echo "Unknown DB vendor $DB_VENDOR" - exit 1 -esac - -if [ "$DB_VENDOR" != "mssql" ] && [ "$DB_VENDOR" != "h2" ]; then - # Append '?' in the beginning of the string if JDBC_PARAMS value isn't empty - JDBC_PARAMS=$(echo "${JDBC_PARAMS:-}" | sed '/^$/! s/^/?/') -else - JDBC_PARAMS=${JDBC_PARAMS:-} -fi - -export JDBC_PARAMS - -# Convert deprecated DB specific variables -function set_legacy_vars() { - local suffixes=(ADDR DATABASE USER PASSWORD PORT) - for suffix in "${suffixes[@]}"; do - local varname="$1_$suffix" - if [[ -n ${!varname:-} ]]; then - echo WARNING: "$varname" variable name is DEPRECATED replace with DB_"$suffix" - export DB_"$suffix=${!varname}" - fi - done -} -set_legacy_vars "$(echo "$DB_VENDOR" | tr "[:upper:]" "[:lower:]")" - -# Configure DB - -echo "=========================================================================" -echo "" -echo " Using $DB_NAME database" -echo "" -echo "=========================================================================" -echo "" - -configured_file="/opt/jboss/configured" -if [ ! -e "$configured_file" ]; then - touch "$configured_file" - - if [ "$DB_NAME" != "Embedded H2" ]; then - /bin/sh /opt/jboss/tools/databases/change-database.sh $DB_VENDOR - fi - - /opt/jboss/tools/x509.sh - /opt/jboss/tools/jgroups.sh - /opt/jboss/tools/infinispan.sh - /opt/jboss/tools/statistics.sh - /opt/jboss/tools/vault.sh - /opt/jboss/tools/autorun.sh -fi - -################## -# Start Keycloak # -################## - -exec /opt/jboss/keycloak/bin/standalone.sh $SYS_PROPS $@ -exit $? diff --git a/deps/keycloak/apple-silicon/tools/infinispan.sh b/deps/keycloak/apple-silicon/tools/infinispan.sh deleted file mode 100755 index be15edfa5..000000000 --- a/deps/keycloak/apple-silicon/tools/infinispan.sh +++ /dev/null @@ -1,14 +0,0 @@ -# How many owners / replicas should our distributed caches have. If <2 any node that is removed from the cluster will cause a data-loss! -# As it is only sensible to replicate AuthenticationSessions for certain cases, their replication factor can be configured independently - -if [ -n "$CACHE_OWNERS_COUNT" ]; then - echo "Setting cache owners to $CACHE_OWNERS_COUNT replicas" - - # Check and log the replication factor of AuthenticationSessions, otherwise this is set to 1 by default - if [ -n "$CACHE_OWNERS_AUTH_SESSIONS_COUNT" ]; then - echo "Enabling replication of AuthenticationSessions with ${CACHE_OWNERS_AUTH_SESSIONS_COUNT} replicas" - else - echo "AuthenticationSessions will NOT be replicated, set CACHE_OWNERS_AUTH_SESSIONS_COUNT to configure this" - fi -$JBOSS_HOME/bin/jboss-cli.sh --file="/opt/jboss/tools/cli/infinispan/cache-owners.cli" >& /dev/null -fi diff --git a/deps/keycloak/apple-silicon/tools/jgroups.sh b/deps/keycloak/apple-silicon/tools/jgroups.sh deleted file mode 100755 index 36f34a56a..000000000 --- a/deps/keycloak/apple-silicon/tools/jgroups.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# If JGROUPS_DISCOVERY_PROPERTIES is set, it must be in the following format: PROP1=FOO,PROP2=BAR -# If JGROUPS_DISCOVERY_PROPERTIES_DIRECT is set, it must be in the following format: {PROP1=>FOO,PROP2=>BAR} -# It's a configuration error to set both of these variables - -if [ -n "$JGROUPS_DISCOVERY_PROTOCOL" ]; then - if [ -n "$JGROUPS_DISCOVERY_PROPERTIES" ] && [ -n "$JGROUPS_DISCOVERY_PROPERTIES_DIRECT" ]; then - echo >&2 "error: both JGROUPS_DISCOVERY_PROPERTIES and JGROUPS_DISCOVERY_PROPERTIES_DIRECT are set (but are exclusive)" - exit 1 - fi - - if [ -n "$JGROUPS_DISCOVERY_PROPERTIES_DIRECT" ]; then - JGROUPS_DISCOVERY_PROPERTIES_PARSED="$JGROUPS_DISCOVERY_PROPERTIES_DIRECT" - else - JGROUPS_DISCOVERY_PROPERTIES_PARSED=`echo $JGROUPS_DISCOVERY_PROPERTIES | sed "s/=/=>/g"` - JGROUPS_DISCOVERY_PROPERTIES_PARSED="{$JGROUPS_DISCOVERY_PROPERTIES_PARSED}" - fi - - echo "Setting JGroups discovery to $JGROUPS_DISCOVERY_PROTOCOL with properties $JGROUPS_DISCOVERY_PROPERTIES_PARSED" - echo "set keycloak_jgroups_discovery_protocol=${JGROUPS_DISCOVERY_PROTOCOL}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set keycloak_jgroups_discovery_protocol_properties=${JGROUPS_DISCOVERY_PROPERTIES_PARSED}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set keycloak_jgroups_transport_stack=${JGROUPS_TRANSPORT_STACK:-tcp}" >> "$JBOSS_HOME/bin/.jbossclirc" - # If there's a specific CLI file for given protocol - execute it. If not, we should be good with the default one. - if [ -f "/opt/jboss/tools/cli/jgroups/discovery/$JGROUPS_DISCOVERY_PROTOCOL.cli" ]; then - $JBOSS_HOME/bin/jboss-cli.sh --file="/opt/jboss/tools/cli/jgroups/discovery/$JGROUPS_DISCOVERY_PROTOCOL.cli" >& /dev/null - else - $JBOSS_HOME/bin/jboss-cli.sh --file="/opt/jboss/tools/cli/jgroups/discovery/default.cli" >& /dev/null - fi -fi diff --git a/deps/keycloak/apple-silicon/tools/statistics.sh b/deps/keycloak/apple-silicon/tools/statistics.sh deleted file mode 100755 index 5c90f00ad..000000000 --- a/deps/keycloak/apple-silicon/tools/statistics.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -if [ -n "$KEYCLOAK_STATISTICS" ]; then - IFS=',' read -ra metrics <<< "$KEYCLOAK_STATISTICS" - for file in /opt/jboss/tools/cli/metrics/*.cli; do - name=${file##*/} - base=${name%.cli} - if [[ $KEYCLOAK_STATISTICS == *"$base"* ]] || [[ $KEYCLOAK_STATISTICS == *"all"* ]]; then - $JBOSS_HOME/bin/jboss-cli.sh --file="$file" >& /dev/null - fi - done -fi diff --git a/deps/keycloak/apple-silicon/tools/vault.sh b/deps/keycloak/apple-silicon/tools/vault.sh deleted file mode 100755 index 77e86ee3b..000000000 --- a/deps/keycloak/apple-silicon/tools/vault.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash - -if [ -d "$JBOSS_HOME/secrets" ]; then - echo "set plaintext_vault_provider_dir=${JBOSS_HOME}/secrets" >> "$JBOSS_HOME/bin/.jbossclirc" - - echo "set configuration_file=standalone.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/files-plaintext-vault.cli - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" - - echo "set configuration_file=standalone-ha.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/files-plaintext-vault.cli - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" -fi diff --git a/deps/keycloak/apple-silicon/tools/x509.sh b/deps/keycloak/apple-silicon/tools/x509.sh deleted file mode 100755 index e4dfde889..000000000 --- a/deps/keycloak/apple-silicon/tools/x509.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash - -function autogenerate_keystores() { - # Keystore infix notation as used in templates to keystore name mapping - declare -A KEYSTORES=( ["https"]="HTTPS" ) - - local KEYSTORES_STORAGE="${JBOSS_HOME}/standalone/configuration/keystores" - if [ ! -d "${KEYSTORES_STORAGE}" ]; then - mkdir -p "${KEYSTORES_STORAGE}" - fi - - # Auto-generate the HTTPS keystore if volumes for OpenShift's - # serving x509 certificate secrets service were properly mounted - for KEYSTORE_TYPE in "${!KEYSTORES[@]}"; do - - local X509_KEYSTORE_DIR="/etc/x509/${KEYSTORE_TYPE}" - local X509_CRT="tls.crt" - local X509_KEY="tls.key" - local NAME="keycloak-${KEYSTORE_TYPE}-key" - local PASSWORD=$(openssl rand -base64 32 2>/dev/null) - local JKS_KEYSTORE_FILE="${KEYSTORE_TYPE}-keystore.jks" - local PKCS12_KEYSTORE_FILE="${KEYSTORE_TYPE}-keystore.pk12" - - if [ -f "${X509_KEYSTORE_DIR}/${X509_KEY}" ] && [ -f "${X509_KEYSTORE_DIR}/${X509_CRT}" ]; then - - echo "Creating ${KEYSTORES[$KEYSTORE_TYPE]} keystore via OpenShift's service serving x509 certificate secrets.." - - openssl pkcs12 -export \ - -name "${NAME}" \ - -inkey "${X509_KEYSTORE_DIR}/${X509_KEY}" \ - -in "${X509_KEYSTORE_DIR}/${X509_CRT}" \ - -out "${KEYSTORES_STORAGE}/${PKCS12_KEYSTORE_FILE}" \ - -password pass:"${PASSWORD}" >& /dev/null - - keytool -importkeystore -noprompt \ - -srcalias "${NAME}" -destalias "${NAME}" \ - -srckeystore "${KEYSTORES_STORAGE}/${PKCS12_KEYSTORE_FILE}" \ - -srcstoretype pkcs12 \ - -destkeystore "${KEYSTORES_STORAGE}/${JKS_KEYSTORE_FILE}" \ - -storepass "${PASSWORD}" -srcstorepass "${PASSWORD}" >& /dev/null - - if [ -f "${KEYSTORES_STORAGE}/${JKS_KEYSTORE_FILE}" ]; then - echo "${KEYSTORES[$KEYSTORE_TYPE]} keystore successfully created at: ${KEYSTORES_STORAGE}/${JKS_KEYSTORE_FILE}" - else - echo "${KEYSTORES[$KEYSTORE_TYPE]} keystore not created at: ${KEYSTORES_STORAGE}/${JKS_KEYSTORE_FILE} (check permissions?)" - fi - - echo "set keycloak_tls_keystore_password=${PASSWORD}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set keycloak_tls_keystore_file=${KEYSTORES_STORAGE}/${JKS_KEYSTORE_FILE}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set configuration_file=standalone.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/x509-keystore.cli >& /dev/null - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" - echo "set configuration_file=standalone-ha.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/x509-keystore.cli >& /dev/null - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" - fi - - done - - # Auto-generate the Keycloak truststore if X509_CA_BUNDLE was provided - local -r X509_CRT_DELIMITER="/-----BEGIN CERTIFICATE-----/" - local JKS_TRUSTSTORE_FILE="truststore.jks" - local JKS_TRUSTSTORE_PATH="${KEYSTORES_STORAGE}/${JKS_TRUSTSTORE_FILE}" - local PASSWORD=$(openssl rand -base64 32 2>/dev/null) - local TEMPORARY_CERTIFICATE="temporary_ca.crt" - if [ -n "${X509_CA_BUNDLE}" ]; then - pushd /tmp >& /dev/null - echo "Creating Keycloak truststore.." - # We use cat here, so that users could specify multiple CA Bundles using space or even wildcard: - # X509_CA_BUNDLE=/var/run/secrets/kubernetes.io/serviceaccount/*.crt - # Note, that there is no quotes here, that's intentional. Once can use spaces in the $X509_CA_BUNDLE like this: - # X509_CA_BUNDLE=/ca.crt /ca2.crt - cat ${X509_CA_BUNDLE} > ${TEMPORARY_CERTIFICATE} - csplit -s -z -f crt- "${TEMPORARY_CERTIFICATE}" "${X509_CRT_DELIMITER}" '{*}' - for CERT_FILE in crt-*; do - keytool -import -noprompt -keystore "${JKS_TRUSTSTORE_PATH}" -file "${CERT_FILE}" \ - -storepass "${PASSWORD}" -alias "service-${CERT_FILE}" >& /dev/null - done - - if [ -f "${JKS_TRUSTSTORE_PATH}" ]; then - echo "Keycloak truststore successfully created at: ${JKS_TRUSTSTORE_PATH}" - else - echo "Keycloak truststore not created at: ${JKS_TRUSTSTORE_PATH}" - fi - - # Import existing system CA certificates into the newly generated truststore - local SYSTEM_CACERTS=$(readlink -e $(dirname $(readlink -e $(which keytool)))"/../lib/security/cacerts") - if keytool -v -list -keystore "${SYSTEM_CACERTS}" -storepass "changeit" > /dev/null; then - echo "Importing certificates from system's Java CA certificate bundle into Keycloak truststore.." - keytool -importkeystore -noprompt \ - -srckeystore "${SYSTEM_CACERTS}" \ - -destkeystore "${JKS_TRUSTSTORE_PATH}" \ - -srcstoretype jks -deststoretype jks \ - -storepass "${PASSWORD}" -srcstorepass "changeit" >& /dev/null - if [ "$?" -eq "0" ]; then - echo "Successfully imported certificates from system's Java CA certificate bundle into Keycloak truststore at: ${JKS_TRUSTSTORE_PATH}" - else - echo "Failed to import certificates from system's Java CA certificate bundle into Keycloak truststore!" - fi - fi - - echo "set keycloak_tls_truststore_password=${PASSWORD}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set keycloak_tls_truststore_file=${KEYSTORES_STORAGE}/${JKS_TRUSTSTORE_FILE}" >> "$JBOSS_HOME/bin/.jbossclirc" - echo "set configuration_file=standalone.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/x509-truststore.cli >& /dev/null - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" - echo "set configuration_file=standalone-ha.xml" >> "$JBOSS_HOME/bin/.jbossclirc" - $JBOSS_HOME/bin/jboss-cli.sh --file=/opt/jboss/tools/cli/x509-truststore.cli >& /dev/null - sed -i '$ d' "$JBOSS_HOME/bin/.jbossclirc" - - popd >& /dev/null - fi -} - -autogenerate_keystores diff --git a/deps/keycloak/docker-compose.yml b/deps/keycloak/docker-compose.yml deleted file mode 100644 index 11f233bfd..000000000 --- a/deps/keycloak/docker-compose.yml +++ /dev/null @@ -1,29 +0,0 @@ -version: "3" - -services: - db: - image: postgres - environment: - - POSTGRES_DB=keycloak - - POSTGRES_USER=keycloak - - POSTGRES_PASSWORD=keycloak - keycloak: - image: ghcr.io/sunbird-rc/keycloak -# build: -# . - environment: - - DB_VENDOR=postgres - - DB_ADDR=db - - DB_PORT=5432 - - DB_DATABASE=keycloak - - DB_USER=keycloak - - DB_PASSWORD=keycloak - - KEYCLOAK_USER=admin - - KEYCLOAK_PASSWORD=admin - - KEYCLOAK_IMPORT=/config/divoc-realm.json - volumes: - - .:/config - ports: - - "8080:8080" - depends_on: - - db \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/account.ftl b/deps/keycloak/themes/base/account/account.ftl deleted file mode 100644 index 9254b9668..000000000 --- a/deps/keycloak/themes/base/account/account.ftl +++ /dev/null @@ -1,70 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='account' bodyClass='user'; section> - -
-
-

${msg("editAccountHtmlTitle")}

-
-
- * ${msg("requiredFields")} -
-
- -
- - - - <#if !realm.registrationEmailAsUsername> -
-
- <#if realm.editUsernameAllowed>* -
- -
- disabled="disabled" value="${(account.username!'')}"/> -
-
- - -
-
- * -
- -
- -
-
- -
-
- * -
- -
- -
-
- -
-
- * -
- -
- -
-
- -
-
-
- <#if url.referrerURI??>${kcSanitize(msg("backToApplication")?no_esc)} - - -
-
-
-
- - diff --git a/deps/keycloak/themes/base/account/applications.ftl b/deps/keycloak/themes/base/account/applications.ftl deleted file mode 100644 index a8edc3844..000000000 --- a/deps/keycloak/themes/base/account/applications.ftl +++ /dev/null @@ -1,76 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='applications' bodyClass='applications'; section> - -
-
-

${msg("applicationsHtmlTitle")}

-
-
- -
- - - - - - - - - - - - - - - - <#list applications.applications as application> - - - - - - - - - - - - - -
${msg("application")}${msg("availableRoles")}${msg("grantedPermissions")}${msg("additionalGrants")}${msg("action")}
- <#if application.effectiveUrl?has_content> - <#if application.client.name?has_content>${advancedMsg(application.client.name)}<#else>${application.client.clientId} - <#if application.effectiveUrl?has_content> - - <#list application.realmRolesAvailable as role> - <#if role.description??>${advancedMsg(role.description)}<#else>${advancedMsg(role.name)} - <#if role_has_next>, - - <#list application.resourceRolesAvailable?keys as resource> - <#if application.realmRolesAvailable?has_content>, - <#list application.resourceRolesAvailable[resource] as clientRole> - <#if clientRole.roleDescription??>${advancedMsg(clientRole.roleDescription)}<#else>${advancedMsg(clientRole.roleName)} - ${msg("inResource")} <#if clientRole.clientName??>${advancedMsg(clientRole.clientName)}<#else>${clientRole.clientId} - <#if clientRole_has_next>, - - - - <#if application.client.consentRequired> - <#list application.clientScopesGranted as claim> - ${advancedMsg(claim)}<#if claim_has_next>, - - <#else> - ${msg("fullAccess")} - - - <#list application.additionalGrants as grant> - ${advancedMsg(grant)}<#if grant_has_next>, - - - <#if (application.client.consentRequired && application.clientScopesGranted?has_content) || application.additionalGrants?has_content> - - -
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/federatedIdentity.ftl b/deps/keycloak/themes/base/account/federatedIdentity.ftl deleted file mode 100644 index c2eb76985..000000000 --- a/deps/keycloak/themes/base/account/federatedIdentity.ftl +++ /dev/null @@ -1,42 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='social' bodyClass='social'; section> - -
-
-

${msg("federatedIdentitiesHtmlTitle")}

-
-
- -
- <#list federatedIdentity.identities as identity> -
-
- -
-
- -
-
- <#if identity.connected> - <#if federatedIdentity.removeLinkPossible> -
- - - - -
- - <#else> -
- - - - -
- -
-
- -
- - diff --git a/deps/keycloak/themes/base/account/log.ftl b/deps/keycloak/themes/base/account/log.ftl deleted file mode 100644 index 29046cf0d..000000000 --- a/deps/keycloak/themes/base/account/log.ftl +++ /dev/null @@ -1,35 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='log' bodyClass='log'; section> - -
-
-

${msg("accountLogHtmlTitle")}

-
-
- - - - - - - - - - - - - - <#list log.events as event> - - - - - - - - - - -
${msg("date")}${msg("event")}${msg("ip")}${msg("client")}${msg("details")}
${event.date?datetime}${event.event}${event.ipAddress}${event.client!}<#list event.details as detail>${detail.key} = ${detail.value} <#if detail_has_next>,
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_ca.properties b/deps/keycloak/themes/base/account/messages/messages_ca.properties deleted file mode 100644 index a1b8f91e4..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_ca.properties +++ /dev/null @@ -1,147 +0,0 @@ -doSave=Desa -doCancel=Cancel\u00B7la -doLogOutAllSessions=Desconnecta de totes les sessions -doRemove=Elimina -doAdd=Afegeix -doSignOut=Desconnectar - -editAccountHtmlTitle=Edita compte -federatedIdentitiesHtmlTitle=Identitats federades -accountLogHtmlTitle=Registre del compte -changePasswordHtmlTitle=Canvia contrasenya -sessionsHtmlTitle=Sessions -accountManagementTitle=Gesti\u00F3 de Compte Keycloak -authenticatorTitle=Autenticador -applicationsHtmlTitle=Aplicacions - -authenticatorCode=Codi d''un sol \u00FAs -email=Email -firstName=Nom -givenName=Nom de pila -fullName=Nom complet -lastName=Cognoms -familyName=Cognom -password=Contrasenya -passwordConfirm=Confirma la contrasenya -passwordNew=Nova contrasenya -username=Usuari -address=Adre\u00E7a -street=Carrer -locality=Ciutat o Municipi -region=Estat, Prov\u00EDncia, o Regi\u00F3 -postal_code=Postal code -country=Pa\u00EDs -emailVerified=Email verificat -gssDelegationCredential=GSS Delegation Credential - -role_admin=Administrador -role_realm-admin=Administrador del domini -role_create-realm=Crear domini -role_view-realm=Veure domini -role_view-users=Veure usuaris -role_view-applications=Veure aplicacions -role_view-clients=Veure clients -role_view-events=Veure events -role_view-identity-providers=Veure prove\u00EFdors d''identitat -role_manage-realm=Gestionar domini -role_manage-users=Gestinar usuaris -role_manage-applications=Gestionar aplicacions -role_manage-identity-providers=Gestionar prove\u00EFdors d''identitat -role_manage-clients=Gestionar clients -role_manage-events=Gestionar events -role_view-profile=Veure perfil -role_manage-account=Gestionar compte -role_read-token=Llegir token -role_offline-access=Acc\u00E9s sense connexi\u00F3 -client_account=Compte -client_security-admin-console=Consola d''Administraci\u00F3 de Seguretat -client_realm-management=Gesti\u00F3 de domini -client_broker=Broker - - -requiredFields=Camps obligatoris -allFieldsRequired=Tots els camps obligatoris - -backToApplication=« Torna a l''aplicaci\u00F3 -backTo=Torna a {0} - -date=Data -event=Event -ip=IP -client=Client -clients=Clients -details=Detalls -started=Iniciat -lastAccess=\u00DAltim acc\u00E9s -expires=Expira -applications=Aplicacions - -account=Compte -federatedIdentity=Identitat federada -authenticator=Autenticador -sessions=Sessions -log=Registre - -application=Aplicaci\u00F3 -availablePermissions=Permisos disponibles -grantedPermissions=Permisos concedits -grantedPersonalInfo=Informaci\u00F3 personal concedida -additionalGrants=Permisos addicionals -action=Acci\u00F3 -inResource=a -fullAccess=Acc\u00E9s total -offlineToken=Codi d''autoritzaci\u00F3 offline -revoke=Revocar perm\u00EDs - -configureAuthenticators=Autenticadors configurats -mobile=M\u00F2bil -totpStep1=Instal\u00B7la FreeOTP o Google Authenticator al teu tel\u00E8fon m\u00F2bil. Les dues aplicacions estan disponibles a Google Play i en l''App Store d''Apple. -totpStep2=Obre l''aplicaci\u00F3 i escaneja el codi o introdueix la clau. -totpStep3=Introdueix el codi \u00FAnic que et mostra l''aplicaci\u00F3 d''autenticaci\u00F3 i fes clic a Envia per finalitzar la configuraci\u00F3 - -missingUsernameMessage=Si us plau indica el teu usuari. -missingFirstNameMessage=Si us plau indica el nom. -invalidEmailMessage=Email no v\u00E0lid -missingLastNameMessage=Si us plau indica els teus cognoms. -missingEmailMessage=Si us plau indica l''email. -missingPasswordMessage=Si us plau indica la contrasenya. -notMatchPasswordMessage=Les contrasenyes no coincideixen. - -missingTotpMessage=Si us plau indica el teu codi d''autenticaci\u00F3 -invalidPasswordExistingMessage=La contrasenya actual no \u00E9s correcta. -invalidPasswordConfirmMessage=La confirmaci\u00F3 de contrasenya no coincideix. -invalidTotpMessage=El c\u00F3digo de autenticaci\u00F3n no es v\u00E1lido. - -usernameExistsMessage=L''usuari ja existeix -emailExistsMessage=L''email ja existeix - -readOnlyUserMessage=No pots actualitzar el teu usuari perqu\u00E8 el teu compte \u00E9s de nom\u00E9s lectura. -readOnlyPasswordMessage=No pots actualitzar la contrasenya perqu\u00E8 el teu compte \u00E9s de nom\u00E9s lectura. - -successTotpMessage=Aplicaci\u00F3 d''autenticaci\u00F3 m\u00F2bil configurada. -successTotpRemovedMessage=Aplicaci\u00F3 d''autenticaci\u00F3 m\u00F2bil eliminada. - -successGrantRevokedMessage=Perm\u00EDs revocat correctament - -accountUpdatedMessage=El teu compte s''ha actualitzat. -accountPasswordUpdatedMessage=La contrasenya s''ha actualitzat. - -missingIdentityProviderMessage=Prove\u00EFdor d''identitat no indicat. -invalidFederatedIdentityActionMessage=Acci\u00F3 no v\u00E0lida o no indicada. -identityProviderNotFoundMessage=No s''ha trobat un prove\u00EFdor d''identitat. -federatedIdentityLinkNotActiveMessage=Aquesta identitat ja no est\u00E0 activa -federatedIdentityRemovingLastProviderMessage=No pots eliminar l''\u00FAltima identitat federada perqu\u00E8 no tens fixada una contrasenya. -identityProviderRedirectErrorMessage=Error en la redirecci\u00F3 al prove\u00EFdor d''identitat -identityProviderRemovedMessage=Prove\u00EFdor d''identitat esborrat correctament. - -accountDisabledMessage=El compte est\u00E0 desactivada, contacteu amb l''administrador. - -accountTemporarilyDisabledMessage=El compte est\u00E0 temporalment desactivat, contacta amb l''administrador o intenta-ho de nou m\u00E9s tard. -invalidPasswordMinLengthMessage=Contrasenya incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinLowerCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres min\u00FAscules. -invalidPasswordMinDigitsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres num\u00E9ricos. -invalidPasswordMinUpperCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres maj\u00FAscules. -invalidPasswordMinSpecialCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} car\u00E0cters especials. -invalidPasswordNotUsernameMessage=Contrasenya incorrecta: no pot ser igual al nom d''usuari. -invalidPasswordRegexPatternMessage=Contrasenya incorrecta: no compleix l''expressi\u00F3 regular. -invalidPasswordHistoryMessage=Contrasenya incorrecta: no pot ser igual a cap de les \u00FAltimes {0} contrasenyes. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_cs.properties b/deps/keycloak/themes/base/account/messages/messages_cs.properties deleted file mode 100644 index a68303225..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_cs.properties +++ /dev/null @@ -1,171 +0,0 @@ -# encoding: utf-8 -doSave=Uložit -doCancel=ZruÅ¡it -doLogOutAllSessions=Odhlásit vÅ¡echny relace -doRemove=Odstranit -doAdd=PÅ™idat -doSignOut=Odhlásit se - -editAccountHtmlTitle=Upravit úÄet -federatedIdentitiesHtmlTitle=Propojené identity -accountLogHtmlTitle=Log úÄtu -changePasswordHtmlTitle=ZmÄ›nit heslo -sessionsHtmlTitle=Relace -accountManagementTitle=Správa úÄtů Keycloak -authenticatorTitle=Autentizátor -applicationsHtmlTitle=Aplikace - -authenticatorCode=Jednorázový kód -email=E-mail -firstName=První kÅ™estní jméno -givenName=KÅ™estní jména -fullName=Celé jméno -lastName=Příjmení -familyName=Rodinné jméno -password=Heslo -passwordConfirm=Nové heslo (znovu) -passwordNew=Nové heslo -username=Uživatelské jméno -address=Adresa -street=Ulice -locality=MÄ›sto nebo lokalita -region=Kraj -postal_code=PSÄŒ -country=Stát -emailVerified=E-mail ověřen -gssDelegationCredential=GSS delegované oprávnÄ›ní - -role_admin=Správce -role_realm-admin=Správce realmu -role_create-realm=VytvoÅ™it realm -role_view-realm=Zobrazit realm -role_view-users=Zobrazit uživatele -role_view-applications=Zobrazit aplikace -role_view-clients=Zobrazit klienty -role_view-events=Zobrazit události -role_view-identity-providers=Zobrazit poskytovatele identity -role_manage-realm=Spravovat realm -role_manage-users=Spravovat uživatele -role_manage-applications=Spravovat aplikace -role_manage-identity-providers=Spravovat poskytovatele identity -role_manage-clients=Spravovat klienty -role_manage-events=Spravovat události -role_view-profile=Zobrazit profil -role_manage-account=Spravovat úÄet -role_manage-account-links=Spravovat odkazy na úÄet -role_read-token=Číst token -role_offline-access=Přístup offline -role_uma_authorization=Získání oprávnÄ›ní -client_account=ÚÄet -client_security-admin-console=Administrátorská bezpeÄnostní konzole -client_admin-cli=Administrátorské CLI -client_realm-management=Správa realmů -client_broker=Broker - - -requiredFields=Požadovaná pole -allFieldsRequired=VÅ¡echna pole vyžadovaná - -backToApplication=« ZpÄ›t na aplikaci -backTo=ZpÄ›t na {0} - -date=Datum -event=Událost -ip=IP -client=Klient -clients=Klienti -details=Podrobnosti -started=Zahájeno -lastAccess=Poslední přístup -expires=Vyprší -applications=Aplikace - -account=ÚÄet -federatedIdentity=Propojená identita -authenticator=Autentizátor -sessions=Relace -log=Log - -application=Aplikace -availablePermissions=Dostupná oprávnÄ›ní -grantedPermissions=UdÄ›lené oprávnÄ›ní -grantedPersonalInfo=Poskytnuté osobní informace -additionalGrants=DodateÄné oprávnÄ›ní -action=Akce -inResource=v -fullAccess=Úplný přístup -offlineToken=Offline Token -revoke=ZruÅ¡it oprávnÄ›ní - -configureAuthenticators=Konfigurované autentizátory -mobile=Mobilní -totpStep1=Nainstalujte jednu z následujících aplikací -totpStep2=OtevÅ™ete aplikaci a naskenujte Äárový kód -totpStep3=Zadejte jednorázový kód poskytnutý aplikací a klepnutím na tlaÄítko Uložit dokonÄete nastavení. - -totpManualStep2=OtevÅ™ete aplikaci a zadejte klÃ­Ä -totpManualStep3=Použijte následující hodnoty konfigurace, pokud aplikace umožňuje jejich nastavení -totpUnableToScan=Nelze skenovat? -totpScanBarcode=Skenovat Äárový kód? - -totp.totp=Založeno na Äase -totp.hotp=Založeno na ÄítaÄi - -totpType=Typ -totpAlgorithm=Algoritmus -totpDigits=Číslice -totpInterval=Interval -totpCounter=ČítaÄ - -missingUsernameMessage=Zadejte uživatelské jméno. -missingFirstNameMessage=Zadejte prosím kÅ™estní jméno. -invalidEmailMessage=Neplatná e-mailová adresa. -missingLastNameMessage=Zadejte prosím příjmení. -missingEmailMessage=Zadejte prosím e-mail. -missingPasswordMessage=Zadejte prosím heslo. -notMatchPasswordMessage=Hesla se neshodují. - -missingTotpMessage=Zadejte prosím kód autentizátoru. -invalidPasswordExistingMessage=Neplatné stávající heslo. -invalidPasswordConfirmMessage=Nová hesla se neshodují. -invalidTotpMessage=Neplatný kód autentizátoru. - -usernameExistsMessage=Uživatelské jméno již existuje. -emailExistsMessage=E-mail již existuje. - -readOnlyUserMessage=Nemůžete svůj úÄet aktualizovat, protože je pouze pro Ätení. -readOnlyUsernameMessage=Nemůžete aktualizovat své uživatelské jméno, protože je pouze pro Ätení. -readOnlyPasswordMessage=Nemůžete aktualizovat své heslo, protože váš úÄet je jen pro Ätení. - -successTotpMessage=Ověření pomocí OTP úspěšnÄ› konfigurováno. -successTotpRemovedMessage=Ověření pomocí OTP úspěšnÄ› odstranÄ›no. - -successGrantRevokedMessage=OprávnÄ›ní bylo úspěšnÄ› zruÅ¡eno. - -accountUpdatedMessage=Váš úÄet byl aktualizován. -accountPasswordUpdatedMessage=VaÅ¡e heslo bylo aktualizováno. - -missingIdentityProviderMessage=ChybÄ›jící poskytovatel identity. -invalidFederatedIdentityActionMessage=Neplatná nebo chybÄ›jící akce. -identityProviderNotFoundMessage=Poskytovatel identity nenalezen. -federatedIdentityLinkNotActiveMessage=Tato identita již není aktivní. -federatedIdentityRemovingLastProviderMessage=Nemůžete odstranit poslední propojenou identitu, protože nemáte heslo. -identityProviderRedirectErrorMessage=NepodaÅ™ilo se pÅ™esmÄ›rovat na poskytovatele identity. -identityProviderRemovedMessage=Poskytovatel identity byl úspěšnÄ› odstranÄ›n. -identityProviderAlreadyLinkedMessage=Propojená identita vrácená uživatelem {0} je již propojena s jiným uživatelem. -staleCodeAccountMessage=Platnost vyprÅ¡ela. Zkuste to jeÅ¡tÄ› jednou. -consentDenied=Souhlas byl zamítnut. - -accountDisabledMessage=ÚÄet je zakázán, kontaktujte správce. - -accountTemporarilyDisabledMessage=ÚÄet je doÄasnÄ› zakázán, kontaktujte správce nebo zkuste to pozdÄ›ji. -invalidPasswordMinLengthMessage=Neplatné heslo: musí obsahovat minimálnÄ› {0} malých znaků. -invalidPasswordMinLowerCaseCharsMessage=Neplatné heslo: musí obsahovat minimálnÄ› {0} malé znaky. -invalidPasswordMinDigitsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} Äíslic. -invalidPasswordMinUpperCaseCharsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} velkých písmenen. -invalidPasswordMinSpecialCharsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} speciálních znaků. -invalidPasswordNotUsernameMessage=Neplatné heslo: nesmí být totožné s uživatelským jménem. -invalidPasswordRegexPatternMessage=Neplatné heslo: neshoduje se zadaným regulárním výrazem. -invalidPasswordHistoryMessage=Neplatné heslo: Nesmí se opakovat žádné z posledních {0} hesel. -invalidPasswordBlacklistedMessage=Neplatné heslo: heslo je na Äerné listinÄ›. -invalidPasswordGenericMessage=Neplatné heslo: nové heslo neodpovídá pravidlům hesla. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_da.properties b/deps/keycloak/themes/base/account/messages/messages_da.properties deleted file mode 100644 index 2ed56521f..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_da.properties +++ /dev/null @@ -1,346 +0,0 @@ -# encoding: UTF-8 -doSave=Gem -doCancel=Annuller -doLogOutAllSessions=Log alle sessioner ud -doRemove=Fjern -doAdd=Tilføj -doSignOut=Log Ud -doLogIn=Log Ind -doLink=Link - -editAccountHtmlTitle=Ændre Konto -personalInfoHtmlTitle=Personlig information -federatedIdentitiesHtmlTitle=Forbundne identiter -accountLogHtmlTitle=Konto Log -changePasswordHtmlTitle=Skift Adgangskode -deviceActivityHtmlTitle=Enheds aktivitet -sessionsHtmlTitle=Sessioner -accountManagementTitle=Keycloak Account Management -authenticatorTitle=Authenticator -applicationsHtmlTitle=Applikationer -linkedAccountsHtmlTitle=Linkede konti - -accountManagementWelcomeMessage=Velkommen til Keycloak Account Management -personalInfoIntroMessage=Administrer dine informationer -accountSecurityTitle=Kontosikkerhed -accountSecurityIntroMessage=Kontroller din adgangskode og kontoadgang. -applicationsIntroMessage=Spor og administrer dine app tilladelser for at tilgÃ¥ din konto -resourceIntroMessage=Del dine ressourcer med team medlemmer -passwordLastUpdateMessage=Din adgangskode blev opdateret -updatePasswordTitle=Opdater Adgangskode -updatePasswordMessageTitle=Sørg for at vælge en stærk adgangskode -updatePasswordMessage=En stærk adgangskode indeholder en blanding af tal, bogstaver og symboler. Det er svært at gætte, ligner ikke et rigtigt ord og bør kun bruges til denne konto. -personalSubTitle=Dine Personlige Informationer -personalSubMessage=Administrer disse grundinformationer; dit fornavn, efternavn og email adresse - -authenticatorCode=Engangskode -email=Email -firstName=Fornavn -givenName=Fornavn -fullName=Fulde navn -lastName=Efternavn -familyName=Efternavn -password=Adgangskode -currentPassword=Nuværende Adgangskode -passwordConfirm=Bekræft ny adgangskode -passwordNew=Ny adgangskode -username=Brugernavn -address=Adresse -street=Vejnavn -locality=By -region=Region -postal_code=Postnummer -country=Land -emailVerified=Email verificeret -gssDelegationCredential=GSS Delegation Credential - -profileScopeConsentText=Brugerprofil -emailScopeConsentText=Email adresse -addressScopeConsentText=Adresse -phoneScopeConsentText=Telefonnummer -offlineAccessScopeConsentText=Offline Adgang -samlRoleListScopeConsentText=Mine Roller - -role_admin=Admin -role_realm-admin=Rige Admin -role_create-realm=Opret rige -role_create-client=Opret klient -role_view-realm=Se rige -role_view-users=Se brugere -role_view-applications=Se applikationer -role_view-clients=Se klienter -role_view-events=Se hændelser -role_view-identity-providers=Se identitetsudbydere -role_manage-realm=Administrer rige -role_manage-users=Administrer brugere -role_manage-applications=Administrer applikationer -role_manage-identity-providers=Administrer identitetsudbydere -role_manage-clients=Administrer klienter -role_manage-events=Administrer hændelser -role_view-profile=Se profil -role_manage-account=Administrer konto -role_manage-account-links=Administrer konto links -role_read-token=Se token -role_offline-access=Offline adgang -client_account=Konto -client_security-admin-console=Sikkerheds Admin Konsol -client_admin-cli=Admin CLI -client_realm-management=Rige administration -client_broker=Broker - - -requiredFields=PÃ¥krævede felter -allFieldsRequired=Alle felter er pÃ¥krævede - -backToApplication=« Tilbage til applikation -backTo=Tilbage til {0} - -date=Dato -event=Hændelse -ip=IP -client=Klient -clients=Klienter -details=Detaljer -started=PÃ¥begyndt -lastAccess=Seneste Adgang -expires=Udløber -applications=Applikationer - -account=Konto -federatedIdentity=Federated Identity -authenticator=Authenticator -device-activity=Enheds aktivitet -sessions=Sessioner -log=Log - -application=Applikation -availableRoles=Tilgængelige Roller -grantedPermissions=Tildelte Rettigheder -grantedPersonalInfo=Tildelt Personlig Info -additionalGrants=Yderligere Tildelinger -action=Action -inResource=i -fullAccess=Fuld adgang -offlineToken=Offline Token -revoke=Tilbagekald tildeling - -configureAuthenticators=Konfigurerede Authenticators -mobile=Mobil -totpStep1=Installer en af følgende applikationer pÃ¥ din mobil -totpStep2=Ã…ben applikationen og skan stregkoden -totpStep3=Indtast engangskoden fra applikationen og tryk Indsend for at gennemføre opsætningen - -totpManualStep2=Ã…ben applikationen og indtast nøglen -totpManualStep3=Brug følgende konfigurations værdier hvis applikationen tillader det - -totpUnableToScan=Kan du ikke skanne? -totpScanBarcode=Skan stregkode? - -totp.totp=Tidsbaseret -totp.hotp=Tællerbaseret - -totpType=Type -totpAlgorithm=Algoritme -totpDigits=Tal -totpInterval=Interval -totpCounter=Tæller - -missingUsernameMessage=Angiv brugernavn -missingFirstNameMessage=Angiv fornavn. -invalidEmailMessage=Ugyldig email adresse. -missingLastNameMessage=Angiv efternavn -missingEmailMessage=Angiv email adresse. -missingPasswordMessage=Angiv adgangskode -notMatchPasswordMessage=Adgangskoderne er ikke ens -invalidUserMessage=Ugyldig bruger - -missingTotpMessage=Angiv autentificerings kode. -invalidPasswordExistingMessage=Ugyldig eksisterende adgangskode. -invalidPasswordConfirmMessage=Adgangskoderne er ikke ens -invalidTotpMessage=Ugyldig autentificerings kode. - -usernameExistsMessage=Brugernavnet eksisterer allerede. -emailExistsMessage=Email adressen eksisterer allerede. - -readOnlyUserMessage=Du kan ikke opdatere din konto da den er read-only. -readOnlyUsernameMessage=Du kan ikke opdatere dit brugernavn da det er read-only. -readOnlyPasswordMessage=Du kan ikke opdatere din adgangskode da den er read-only. - -successTotpMessage=Mobil authenticator konfigureret. -successTotpRemovedMessage=Mobil authenticator fjernet. - -successGrantRevokedMessage=Tildeling tilbagekaldt. - -accountUpdatedMessage=Din konto er blevet opdateret. -accountPasswordUpdatedMessage=Din adgangskode er blevet opdateret. - -missingIdentityProviderMessage=Identitetsudbyder ikke specificeret. -invalidFederatedIdentityActionMessage=Ugyldig eller manglende handling. -identityProviderNotFoundMessage=Den angivede identitetsudbyder kunne ikke findes. -federatedIdentityLinkNotActiveMessage=Denne identiet er ikke aktiv længere. -identityProviderRedirectErrorMessage=Kunne ikke redirecte til identitetsudbyder. -identityProviderRemovedMessage=Identitetsudbyder fjernet. -identityProviderAlreadyLinkedMessage=Forbundsidentitet returneret af {} er allerede forbundet til en anden bruger. -staleCodeAccountMessage=Siden er udløbet. Prøv igen. -consentDenied=Samtykke afslÃ¥et. - -accountDisabledMessage=Kontoen er deaktiveret, kontakt en administrator. - -accountTemporarilyDisabledMessage=Kontoen er midlertidigt deaktiveret, kontakt en administrator eller prøv igen senere. -invalidPasswordMinLengthMessage=Ugyldig adgangskode: minimum længde {0}. -invalidPasswordMinLowerCaseCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} smÃ¥ bogstaver. -invalidPasswordMinDigitsMessage=Ugyldig adgangskode: skal minimum indeholde {0} tal. -invalidPasswordMinUpperCaseCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} store bogstaver. -invalidPasswordMinSpecialCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} specialtegn. -invalidPasswordNotUsernameMessage=Ugyldig adgangskode: mÃ¥ ikke være identisk med brugernavnet. -invalidPasswordRegexPatternMessage=Ugyldig adgangskode: Ikke i stand til at matche regex mønstre. -invalidPasswordHistoryMessage=Ugyldig adgangskode: mÃ¥ ikke være identisk med nogle af de seneste {0} adgangskoder. -invalidPasswordBlacklistedMessage=Ugyldig adgangskode: adgangskoden er sortlisted. -invalidPasswordGenericMessage=Ugyldig adgangskode: ny adgangskode matcher ikke vores adgangskode politikker. - -# Authorization -myResources=Mine Ressourcer -myResourcesSub=Mine ressourcer -doDeny=AfslÃ¥ -doRevoke=Tilbagekald -doApprove=Godkend -doRemoveSharing=Fjern Deling -doRemoveRequest=Fjern Forespørgsel -peopleAccessResource=Folk med adgang til denne ressource -resourceManagedPolicies=Tilladelsen som giver adgang til denne ressource -resourceNoPermissionsGrantingAccess=Ingen tilladelser giver adgang til denne ressource -anyAction=Enhver handling -description=Beskrivelse -name=Navn -scopes=Scopes -resource=Ressource -user=Bruger -peopleSharingThisResource=Folk som deler denne ressource -shareWithOthers=Del med andre -needMyApproval=Mangler min godkendelse -requestsWaitingApproval=Din forespørgsel afventer godkendelse -icon=Ikon -requestor=Forespørger -owner=Ejer -resourcesSharedWithMe=Ressourcer delt med mig -permissionRequestion=Rettigsheds forespørgsel -permission=Tilladelse -shares=share(s) - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italian -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_lt=Lietuvi\u0173 -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_sk=Sloven\u010dina -locale_sv=Svenska -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 - -# Applications -applicationName=Navn -applicationType=Applikationstype -applicationInUse=In-use app only -clearAllFilter=Ryd alle filtre -activeFilters=Aktive filtre -filterByName=Filtrer PÃ¥ Navn... -allApps=Alle applikationer -internalApps=Interne applikationer -thirdpartyApps=Tredje-parts applikationer -appResults=Resultater - -# Linked account -authorizedProvider=Autoriseret Udbyder -authorizedProviderMessage=Autoriserede udbydere forbundet med din konto - -identityProvider=Identitetsudbyder -identityProviderMessage=For at forbinde din konto med de identitetsudbydere du har konfigureret -socialLogin=Social Log ind -userDefined=Brugerdefineret -removeAccess=Fjern Adgang -removeAccessMessage=Du skal give adgang igen, hvis du vil bruge denne app konto. - -#Authenticator -authenticatorStatusMessage=To-faktor godkendelse er -authenticatorFinishSetUpTitle=Din to-faktor godkendelse -authenticatorFinishSetUpMessage=Hver gang du logger ind pÃ¥ din Keycloak konto, vil du blive bedt om at give din to-faktor godkendelses kode. -authenticatorSubTitle=Opsæt to-faktor godkendelse -authenticatorSubMessage=For at forbedre sikkerheden pÃ¥ din konto, aktiver mindst en af de tilgængelige to-faktor godkendelses metoder. -authenticatorMobileTitle=Mobile Authenticator -authenticatorMobileMessage=Brug Mobile Authenticator for at fÃ¥ godkendelses koder som to-faktor godkendelse. -authenticatorMobileFinishSetUpMessage=Authenticatoren er blevet bundet til din telefon. -authenticatorActionSetup=Opsæt -authenticatorSMSTitle=SMS Kode -authenticatorSMSMessage=Keycloak vil sende godkendelses koden til din telefon som to-faktor godkendelse. - -authenticatorSMSFinishSetUpMessage=Tekst beskeder er sendt til -authenticatorDefaultStatus=Standard -authenticatorChangePhone=Ændre Telefonnummer -authenticatorBackupCodesTitle=Backup Koder -authenticatorBackupCodesMessage=FÃ¥ dine 8-cifre backup koder -authenticatorBackupCodesFinishSetUpMessage=12 backup koder blev genereret denne gang. Alle kan bruges. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Mobile Authenticator Opsætning -smscodeIntroMessage=Indtast dit mobil nummer og en verifikationskode vil blive sendt til din telefon. -mobileSetupStep1=Installer en authenticator applikation pÃ¥ din telefon. De understøttede applikationer er listed her. -mobileSetupStep2=Ã…ben applikationen og skan stregkoden. -mobileSetupStep3=Indtast engangskoden fra authenticator applikationen og tryk Gem for at færdiggøre opsætningen. -scanBarCode=Vil du skanne stregkoden? -enterBarCode=Indtast engangskoden -doCopy=Kopier -doFinish=Afslut - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMS Kode Opsætning -chooseYourCountry=Vælg dit land -enterYourPhoneNumber=Indtast dit telefonnummer -sendVerficationCode=Send Verifikationskode -enterYourVerficationCode=Indtast din verifikationskode - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Backup Kode Opsætning -backupcodesIntroMessage=Hvis du mister adgangen til din telefon, kan du stadig logge ind pÃ¥ konto ved at bruge backup koder. Opbevar dem sikkert og tilgængeligt. -realmName=Rige -doDownload=Download -doPrint=Print -doCopy=Kopier -backupCodesTips-1=Hver backup kode kan kun bruges en gang. -backupCodesTips-2=Disse koder blev generet d. -generateNewBackupCodes=Generer Nye Backup Koder -backupCodesTips-3=NÃ¥r du genererer nye backup koder, vil de gamle ikke længere virke. -backtoAuthenticatorPage=Tilbage til Authenticator siden - - -#Resources -resources=Ressourcer -myResources=Mine Ressourcer -sharedwithMe=Delt med mig -share=Del -resource=Ressource -application=Applikation -date=Dato -sharedwith=Delt med -owner=Ejer -accessPermissions=Adgangstilladelser -permissionRequests=Rettigheds forespørgsler -approve=Godkend -approveAll=Godkend alle -sharedwith=Delt med -people=Folk -perPage=per side -currentPage=Nuværende Side -sharetheResource=Del Ressourcen -user=Bruger -group=Gruppe -selectPermission=Vælg tilladelse -addPeople=Tilføj folk at dele ressourcen med -addTeam=Tilføj hold at dele ressourcen med -myPermissions=Mine Tilladelser -waitingforApproval=Afventer godkendelse diff --git a/deps/keycloak/themes/base/account/messages/messages_de.properties b/deps/keycloak/themes/base/account/messages/messages_de.properties deleted file mode 100644 index 6802912ec..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_de.properties +++ /dev/null @@ -1,355 +0,0 @@ -doSave=Speichern -doCancel=Abbrechen -doLogOutAllSessions=Alle Sitzungen abmelden -doRemove=Entfernen -doAdd=Hinzuf\u00FCgen -doSignOut=Abmelden -doLogIn=Anmelden -doLink=Verkn\u00FCpfen -noAccessMessage=Zugriff verweigert - - -editAccountHtmlTitle=Benutzerkonto bearbeiten -personalInfoHtmlTitle=Pers\u00F6nliche Informationen -federatedIdentitiesHtmlTitle=F\u00F6derierte Identit\u00E4ten -accountLogHtmlTitle=Benutzerkonto Log -changePasswordHtmlTitle=Passwort \u00C4ndern -deviceActivityHtmlTitle=Ger\u00E4teaktivit\u00E4t -sessionsHtmlTitle=Sitzungen -accountManagementTitle=Keycloak Benutzerkontoverwaltung -authenticatorTitle=Mehrfachauthentifizierung -applicationsHtmlTitle=Applikationen -linkedAccountsHtmlTitle=Verkn\u00FCpfte Konten - -accountManagementWelcomeMessage=Willkommen bei der Keycloak Kontoverwaltung -personalInfoIntroMessage=Grundlegende Informationen verwalten -accountSecurityTitle=Kontosicherheit -accountSecurityIntroMessage=Passwort und Kontozugriff verwalten -applicationsIntroMessage=App-Berechtigung f\u00FCr den Zugriff auf ihr Konto verwalten -resourceIntroMessage=Ressourcen mit Teammitgliedern teilen -passwordLastUpdateMessage=Ihr Passwort wurde aktualisiert am -updatePasswordTitle=Passwort aktualisieren -updatePasswordMessageTitle=W\u00C4hlen Sie ein sicheres Passwort -updatePasswordMessage=Ein sicheres Passwort besteht aus einer Kombination aus Zahlen, Buchstaben und Sonderzeichen. Es ist schwer zu erraten, hat keine \u00C4hnlichkeit mit einem echten Wort, und wird nur f\u00FCr dieses Konto verwendet. -personalSubTitle=Ihre pers\u00F6nlichen Informationen -personalSubMessage=Verwalten Sie folgende Informationen: Vorname, Nachname und E-Mail-Adresse - -authenticatorCode=One-time Code -email=E-Mail -firstName=Vorname -givenName=Vorname -fullName=Voller Name -lastName=Nachname -familyName=Nachname -password=Passwort -currentPassword=Aktuelles Passwort -passwordConfirm=Passwort best\u00E4tigen -passwordNew=Neues Passwort -username=Benutzername -address=Adresse -street=Stra\u00DFe -region=Staat, Provinz, Region -postal_code=PLZ -locality=Stadt oder Ortschaft -country=Land -emailVerified=E-Mail verifiziert -website=Website -phoneNumber=Telefonnummer -phoneNumberVerified=Telefonnummer verifiziert -gender=Geschlecht -birthday=Geburtsdatum -zoneinfo=Zeitzone -gssDelegationCredential=GSS delegierte Berechtigung - -profileScopeConsentText=Nutzerkonto -emailScopeConsentText=E-Mail Adresse -addressScopeConsentText=Adresse -phoneScopeConsentText=Telefonnummer -offlineAccessScopeConsentText=Offline Zugriff -samlRoleListScopeConsentText=Meine Rollen -rolesScopeConsentText=Nutzerrollen - -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Realm erstellen -role_view-realm=Realm ansehen -role_view-users=Benutzer ansehen -role_view-applications=Applikationen ansehen -role_view-clients=Clients ansehen -role_view-events=Events ansehen -role_view-identity-providers=Identity Provider ansehen -role_view-consent=Zustimmungen anzeigen -role_manage-realm=Realm verwalten -role_manage-users=Benutzer verwalten -role_manage-applications=Applikationen verwalten -role_manage-identity-providers=Identity Provider verwalten -role_manage-clients=Clients verwalten -role_manage-events=Events verwalten -role_view-profile=Profile ansehen -role_manage-account=Profile verwalten -role_manage-account-links=Profil-Links verwalten -role_manage-consent=Zustimmungen verwalten -role_read-token=Token lesen -role_offline-access=Offline-Zugriff -role_uma_authorization=Berechtigungen einholen -client_account=Clientkonto -client_account-console=Accountkonsole -client_security-admin-console=Security Adminkonsole -client_admin-cli=Admin CLI -client_realm-management=Realm-Management -client_broker=Broker - - -requiredFields=Erforderliche Felder -allFieldsRequired=Alle Felder sind erforderlich - -backToApplication=« Zur\u00FCck zur Applikation -backTo=Zur\u00FCck zu {0} - -date=Datum -event=Ereignis -ip=IP -client=Client -clients=Clients -details=Details -started=Startdatum -lastAccess=Letzter Zugriff -expires=Ablaufdatum -applications=Applikationen - -account=Benutzerkonto -federatedIdentity=F\u00F6derierte Identit\u00E4t -authenticator=Mehrfachauthentifizierung -device-activity=Ger\u00E4teaktivit\u00E4t -sessions=Sitzungen -log=Log - -application=Applikation -availablePermissions=verf\u00FCgbare Berechtigungen -grantedPermissions=gew\u00E4hrte Berechtigungen -grantedPersonalInfo=gew\u00E4hrte pers\u00F6nliche Informationen -additionalGrants=zus\u00E4tzliche Berechtigungen -action=Aktion -inResource=in -fullAccess=Vollzugriff -offlineToken=Offline-Token -revoke=Berechtigung widerrufen - -configureAuthenticators=Mehrfachauthentifizierung konfigurieren -mobile=Mobil -totpStep1=Installieren Sie eine der folgenden Applikationen auf Ihrem Smartphone: -totpStep2=\u00D6ffnen Sie die Applikation und scannen Sie den Barcode. -totpStep3=Geben Sie den von der Applikation generierten One-time Code ein und klicken Sie auf Speichern. -totpStep3DeviceName=Geben Sie einen Ger\u00E4tenamen an, um die Verwaltung Ihrer OTP-Ger\u00E4te zu erleichtern. - -totpManualStep2=\u00D6ffnen Sie die Applikation und geben Sie den folgenden Schl\u00FCssel ein. -totpManualStep3=Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese f\u00FCr die Applikation anpassen k\u00F6nnen: -totpUnableToScan=Sie k\u00F6nnen den Barcode nicht scannen? -totpScanBarcode=Barcode scannen? - -totp.totp=zeitbasiert (time-based) -totp.hotp=z\u00E4hlerbasiert (counter-based) - -totpType=Typ -totpAlgorithm=Algorithmus -totpDigits=Ziffern -totpInterval=Intervall -totpCounter=Z\u00E4hler -totpDeviceName=Ger\u00E4tename - -irreversibleAction=Diese Aktion ist unwiderruflich -deletingImplies=Die L\u00F6schung Ihres Kontos bedeutet: -errasingData=L\u00F6schen aller Ihrer Daten -loggingOutImmediately=Sofortige Abmeldung -accountUnusable=Eine sp\u00E4tere Nutzung der Anwendung ist mit diesem Konto nicht mehr m\u00F6glich - -missingUsernameMessage=Bitte geben Sie einen Benutzernamen ein. -missingFirstNameMessage=Bitte geben Sie einen Vornamen ein. -invalidEmailMessage=Ung\u00FCltige E-Mail Adresse. -missingLastNameMessage=Bitte geben Sie einen Nachnamen ein. -missingEmailMessage=Bitte geben Sie eine E-Mail Adresse ein. -missingPasswordMessage=Bitte geben Sie ein Passwort ein. -notMatchPasswordMessage=Die Passw\u00F6rter sind nicht identisch. -invalidUserMessage=Ung\u00FCltiger Nutzer - -missingTotpMessage=Bitte geben Sie den One-time Code ein. -missingTotpDeviceNameMessage=Bitte geben Sie einen Ger\u00E4tenamen an. -invalidPasswordExistingMessage=Das aktuelle Passwort ist ung\u00FCltig. -invalidPasswordConfirmMessage=Die Passwortbest\u00E4tigung ist nicht identisch. -invalidTotpMessage=Ung\u00FCltiger One-time Code. - -usernameExistsMessage=Der Benutzername existiert bereits. -emailExistsMessage=Die E-Mail-Adresse existiert bereits. - -readOnlyUserMessage=Sie k\u00F6nnen Ihr Benutzerkonto nicht \u00E4ndern, da es schreibgesch\u00FCtzt ist. -readOnlyUsernameMessage=Sie k\u00F6nnen Ihren Benutzernamen nicht \u00E4ndern, da er schreibgesch\u00FCtzt ist. -readOnlyPasswordMessage=Sie k\u00F6nnen Ihr Passwort nicht \u00E4ndern, da es schreibgesch\u00FCtzt ist. - -successTotpMessage=Mehrfachauthentifizierung erfolgreich konfiguriert. -successTotpRemovedMessage=Mehrfachauthentifizierung erfolgreich entfernt. - -successGrantRevokedMessage=Berechtigung erfolgreich widerrufen. - -accountUpdatedMessage=Ihr Benutzerkonto wurde aktualisiert. -accountPasswordUpdatedMessage=Ihr Passwort wurde aktualisiert. - -missingIdentityProviderMessage=Identity Provider nicht angegeben. -invalidFederatedIdentityActionMessage=Ung\u00FCltige oder fehlende Aktion. -identityProviderNotFoundMessage=Angegebener Identity Provider nicht gefunden. -federatedIdentityLinkNotActiveMessage=Diese Identit\u00E4t ist nicht mehr aktiv. -federatedIdentityRemovingLastProviderMessage=Sie k\u00F6nnen den letzten Eintrag nicht entfernen, da Sie kein Passwort haben. -identityProviderRedirectErrorMessage=Fehler bei der Weiterleitung zum Identity Provider. -identityProviderRemovedMessage=Identity Provider erfolgreich entfernt. -identityProviderAlreadyLinkedMessage=Die f\u00F6derierte Identit\u00E4t von {0} ist bereits einem anderen Benutzer zugewiesen. -staleCodeAccountMessage=Diese Seite ist nicht mehr g\u00FCltig, bitte versuchen Sie es noch einmal. -consentDenied=Einverst\u00E4ndnis verweigert. - -accountDisabledMessage=Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin. - -accountTemporarilyDisabledMessage=Ihr Benutzerkonto ist tempor\u00E4r gesperrt, bitte kontaktieren Sie den Admin oder versuchen Sie es sp\u00E4ter noch einmal. -invalidPasswordMinLengthMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Zeichen lang sein. -invalidPasswordMinLowerCaseCharsMessage=Ung\u00FCltiges Passwort\: Es muss mindestens {0} Kleinbuchstaben beinhalten. -invalidPasswordMinDigitsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten. -invalidPasswordMinUpperCaseCharsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Gro\u00DFbuchstaben beinhalten. -invalidPasswordMinSpecialCharsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten. -invalidPasswordNotUsernameMessage=Ung\u00FCltiges Passwort: Es darf nicht gleich sein wie der Benutzername. -invalidPasswordNotEmailMessage=Ung\u00FCltiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein. -invalidPasswordRegexPatternMessage=Ung\u00FCltiges Passwort: Es entspricht nicht dem Regex-Muster. -invalidPasswordHistoryMessage=Ung\u00FCltiges Passwort: Es darf nicht einem der letzten {0} Passw\u00F6rter entsprechen. -invalidPasswordBlacklistedMessage=Ung\u00FCltiges Passwort: Das Passwort steht auf der Blocklist (schwarzen Liste). -invalidPasswordGenericMessge=Ung\u00FCltiges Passwort: Das neue Passwort verletzt die Passwort-Richtlinien. - -# Authorization -myResources=Meine Ressourcen -myResourcesSub=Meine Ressourcen -doDeny=Ablehnen -doRevoke=Widerrufen -doApprove=Genehmigen -doRemoveSharing=Freigabe entfernen -doRemoveRequest=Anfrage entfernen -peopleAccessResource=Personen mit Zugriff auf diese Ressource -resourceManagedPolicies=Berechtigungen, die Zugriff auf diese Ressource gew\u00E4hren -resourceNoPermissionsGrantingAccess=Keine Berechtigungen, die Zugriff auf diese Ressource gew\u00E4hren -anyAction=Jede Aktion -description=Beschreibung -name=Name -scopes=Geltungsbereiche -resource=Ressource -user=Nutzer -peopleSharingThisResource=Personen, die diese Ressource teilen -shareWithOthers=Mit anderen teilen -needMyApproval=Braucht meine Zustimmung -requestsWaitingApproval=Ihre Anfragen, die auf Genehmigung warten -icon=Icon -requestor=Antragstellender -owner=Besitzender -resourcesSharedWithMe=Mit mir geteilte Ressourcen -permissionRequestion=Genehmigungsanfrage -permission=Genehmigung -shares=teilt(en) -notBeingShared=Diese Ressource wird nicht freigegeben. -notHaveAnyResource=Sie haben keine Ressourcen -noResourcesSharedWithYou=Es werden keine Ressourcen mit Ihnen geteilt -havePermissionRequestsWaitingForApproval=Sie haben {0} Genehmigungsanfrage(n), die auf die Genehmigung warten. -clickHereForDetails=Klicken Sie hier f\u00FCr Details. -resourceIsNotBeingShared=Die Ressource wird nicht freigegeben - -# Applications -applicationName=Anwendungsname -applicationType=Anwendungstyp -applicationInUse=Nur verwendete Anwendungen -clearAllFilter=Alle Filter entfernen -activeFilters=Aktive Filter -filterByName=Nach Namen filtern ... -allApps=Alle Anwendungen -internalApps=Interne Anwendungen -thirdpartyApps=Anwendungen von Drittanbietern -appResults=Ergebnisse -clientNotFoundMessage=Client nicht gefunden. - -# Linked account -authorizedProvider=Autorisierter Provider -authorizedProviderMessage=Autorisierte Provider, die mit Ihrem Konto verkn\u00FCpft sind -identityProvider=Identit\u00E4tsprovider -identityProviderMessage=Verkn\u00FCpfen Sie Ihr Konto mit Identit\u00E4tsprovidern, die Sie konfiguriert haben -socialLogin=Social Login -userDefined=Benutzerdefiniert -removeAccess=Zugriff entfernen -removeAccessMessage=Sie m\u00FCssen den Zugriff erneut gew\u00E4hren, wenn Sie diese Anwendung verwenden m\u00F6chten. - -#Authenticator -authenticatorStatusMessage=Zwei-Faktor-Authentifizierung ist zurzeit -authenticatorFinishSetUpTitle=Ihre Zwei-Faktor-Authentifizierung -authenticatorFinishSetUpMessage=Jedes Mal, wenn Sie sich bei Ihrem Keycloak-Konto anmelden, werden Sie aufgefordert, einen Zwei-Faktor-Authentifizierungscode einzugeben. -authenticatorSubTitle=Zwei-Faktor-Authentifizierung einrichten -authenticatorSubMessage=Um die Sicherheit Ihres Kontos zu erh\u00F6hen, aktivieren Sie mindestens eine der verf\u00FCgbaren Zwei-Faktor-Authentifizierungsmethoden. -authenticatorMobileTitle=Handy-Authentifikator -authenticatorMobileMessage=Verwenden Sie Authenticator-Anwendungen auf Ihrem Telefon, um Verifizierungscodes als Zwei-Faktor-Authentifizierung zu erhalten. -authenticatorMobileFinishSetUpMessage=Die Authenticator-Anwendung wurde an Ihr Telefon gebunden. -authenticatorActionSetup=Einrichten -authenticatorSMSTitle=SMS-Code -authenticatorSMSMessage=Keycloak sendet den Verifizierungscode an Ihr Telefon als Zwei-Faktor-Authentifizierung. -authenticatorSMSFinishSetUpMessage=Textnachrichten werden gesendet an -authenticatorDefaultStatus=Standard -authenticatorChangePhone=Telefonnummer \u00E4ndern -authenticatorBackupCodesTitle=Backup-Codes -authenticatorBackupCodesMessage=Abfrage der 8-stelligen Backup-Codes -authenticatorBackupCodesFinishSetUpMessage=Zu diesem Zeitpunkt wurden 12 Backup-Codes erzeugt. Jeder davon kann einmal verwendet werden. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Handy-Authenticator-Setup -smscodeIntroMessage=Geben Sie Ihre Rufnummer ein und ein Verifizierungscode wird an Ihr Telefon gesendet. -mobileSetupStep1=Installieren Sie eine Authenticator-Anwendung auf Ihrem Telefon. Die hier aufgef\u00FChrten Anwendungen werden unterst\u00FCtzt. -mobileSetupStep2=\u00D6ffnen Sie die Anwendung und scannen Sie den Barcode: -mobileSetupStep3=Geben Sie den von der Anwendung bereitgestellten Einmalcode ein und klicken Sie auf Speichern, um die Einrichtung abzuschlie\u00DFen. -scanBarCode=Wollen Sie den Barcode scannen? -enterBarCode=Geben Sie den Einmalcode ein -doCopy=Kopieren -doFinish=Fertigstellen - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMS-Code-Einrichtung -chooseYourCountry=W\u00E4hlen Sie Ihr Land -enterYourPhoneNumber=Geben Sie Ihre Telefonnummer ein -sendVerficationCode=Verifizierungscode senden -enterYourVerficationCode=Geben Sie Ihren Verifizierungscode ein - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Backup-Codes einrichten -backupcodesIntroMessage=Wenn Sie den Zugriff auf Ihr Telefon verlieren, k\u00F6nnen Sie sich immer noch \u00FCber Backup-Codes bei Ihrem Konto anmelden. Bewahren Sie diese an einem sicheren und zug\u00E4nglichen Ort auf. -realmName=Realm -doDownload=Herunterladen -doPrint=Drucken -backupCodesTips-1=Jeder Backup-Code kann nur einmal verwendet werden. -backupCodesTips-2=Diese Codes wurden generiert am -generateNewBackupCodes=Neue Backup-Codes generieren -backupCodesTips-3=Wenn Sie neue Backup-Codes generieren, werden die aktuellen Codes nicht mehr funktionieren. -backtoAuthenticatorPage=Zur\u00FCck zur Authenticator-Seite - - -#Resources -resources=Ressourcen -sharedwithMe=Mit mir geteilt -share=Teilen -sharedwith=Geteilt mit -accessPermissions=Zugriffsberechtigungen -permissionRequests=Berechtigungsanfragen -approve=Genehmigen -approveAll=Alle genehmigen -people=Personen -perPage=Pro Seite -currentPage=Aktuelle Seite -sharetheResource=Die Ressource teilen -group=Gruppe -selectPermission=Berechtigung ausw\u00E4hlen -addPeople=Personen hinzuf\u00FCgen, mit denen die Ressource geteilt werden soll -addTeam=Team hinzuf\u00FCgen, mit dem die Ressource geteilt werden soll -myPermissions=Meine Berechtigungen -waitingforApproval=Warten auf Genehmigung -anyPermission=Jede Berechtigung - -# Openshift messages -openshift.scope.user_info=Nutzerinformation -openshift.scope.user_check-access=Benutzerzugriffsinformationen -openshift.scope.user_full=Voller Zugriff -openshift.scope.list-projects=Projekte auflisten diff --git a/deps/keycloak/themes/base/account/messages/messages_en.properties b/deps/keycloak/themes/base/account/messages/messages_en.properties deleted file mode 100644 index af40c073e..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_en.properties +++ /dev/null @@ -1,389 +0,0 @@ -doSave=Save -doCancel=Cancel -doLogOutAllSessions=Log out all sessions -doRemove=Remove -doAdd=Add -doSignOut=Sign Out -doLogIn=Log In -doLink=Link -noAccessMessage=Access not allowed - - -editAccountHtmlTitle=Edit Account -personalInfoHtmlTitle=Personal Info -federatedIdentitiesHtmlTitle=Federated Identities -accountLogHtmlTitle=Account Log -changePasswordHtmlTitle=Change Password -deviceActivityHtmlTitle=Device Activity -sessionsHtmlTitle=Sessions -accountManagementTitle=Keycloak Account Management -authenticatorTitle=Authenticator -applicationsHtmlTitle=Applications -linkedAccountsHtmlTitle=Linked Accounts - -accountManagementWelcomeMessage=Welcome to Keycloak Account Management -personalInfoIntroMessage=Manage your basic information -accountSecurityTitle=Account Security -accountSecurityIntroMessage=Control your password and account access -applicationsIntroMessage=Track and manage your app permission to access your account -resourceIntroMessage=Share your resources among team members -passwordLastUpdateMessage=Your password was updated at -updatePasswordTitle=Update Password -updatePasswordMessageTitle=Make sure you choose a strong password -updatePasswordMessage=A strong password contains a mix of numbers, letters, and symbols. It is hard to guess, does not resemble a real word, and is only used for this account. -personalSubTitle=Your Personal Info -personalSubMessage=Manage this basic information: your first name, last name and email - -authenticatorCode=One-time code -email=Email -firstName=First name -givenName=Given name -fullName=Full name -lastName=Last name -familyName=Family name -password=Password -currentPassword=Current Password -passwordConfirm=Confirmation -passwordNew=New Password -username=Username -address=Address -street=Street -locality=City or Locality -region=State, Province, or Region -postal_code=Zip or Postal code -country=Country -emailVerified=Email verified -website=Web page -phoneNumber=Phone number -phoneNumberVerified=Phone number verified -gender=Gender -birthday=Birthdate -zoneinfo=Time zone -gssDelegationCredential=GSS Delegation Credential - -profileScopeConsentText=User profile -emailScopeConsentText=Email address -addressScopeConsentText=Address -phoneScopeConsentText=Phone number -offlineAccessScopeConsentText=Offline Access -samlRoleListScopeConsentText=My Roles -rolesScopeConsentText=User roles - -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Create realm -role_view-realm=View realm -role_view-users=View users -role_view-applications=View applications -role_view-clients=View clients -role_view-events=View events -role_view-identity-providers=View identity providers -role_view-consent=View consents -role_manage-realm=Manage realm -role_manage-users=Manage users -role_manage-applications=Manage applications -role_manage-identity-providers=Manage identity providers -role_manage-clients=Manage clients -role_manage-events=Manage events -role_view-profile=View profile -role_manage-account=Manage account -role_manage-account-links=Manage account links -role_manage-consent=Manage consents -role_read-token=Read token -role_offline-access=Offline access -role_uma_authorization=Obtain permissions -client_account=Account -client_account-console=Account Console -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm Management -client_broker=Broker - - -requiredFields=Required fields -allFieldsRequired=All fields required - -backToApplication=« Back to application -backTo=Back to {0} - -date=Date -event=Event -ip=IP -client=Client -clients=Clients -details=Details -started=Started -lastAccess=Last Access -expires=Expires -applications=Applications - -account=Account -federatedIdentity=Federated Identity -authenticator=Authenticator -device-activity=Device Activity -sessions=Sessions -log=Log - -application=Application -availableRoles=Available Roles -grantedPermissions=Granted Permissions -grantedPersonalInfo=Granted Personal Info -additionalGrants=Additional Grants -action=Action -inResource=in -fullAccess=Full Access -offlineToken=Offline Token -revoke=Revoke Grant - -configureAuthenticators=Configured Authenticators -mobile=Mobile -totpStep1=Install one of the following applications on your mobile: -totpStep2=Open the application and scan the barcode: -totpStep3=Enter the one-time code provided by the application and click Save to finish the setup. -totpStep3DeviceName=Provide a Device Name to help you manage your OTP devices. - -totpManualStep2=Open the application and enter the key: -totpManualStep3=Use the following configuration values if the application allows setting them: -totpUnableToScan=Unable to scan? -totpScanBarcode=Scan barcode? - -totp.totp=Time-based -totp.hotp=Counter-based - -totpType=Type -totpAlgorithm=Algorithm -totpDigits=Digits -totpInterval=Interval -totpCounter=Counter -totpDeviceName=Device Name - -irreversibleAction=This action is irreversible -deletingImplies=Deleting your account implies: -errasingData=Erasing all your data -loggingOutImmediately=Logging you out immediately -accountUnusable=Any subsequent use of the application will not be possible with this account - -missingUsernameMessage=Please specify username. -missingFirstNameMessage=Please specify first name. -invalidEmailMessage=Invalid email address. -missingLastNameMessage=Please specify last name. -missingEmailMessage=Please specify email. -missingPasswordMessage=Please specify password. -notMatchPasswordMessage=Passwords don''t match. -invalidUserMessage=Invalid user -updateReadOnlyAttributesRejectedMessage=Update of read-only attribute rejected - -missingTotpMessage=Please specify authenticator code. -missingTotpDeviceNameMessage=Please specify device name. -invalidPasswordExistingMessage=Invalid existing password. -invalidPasswordConfirmMessage=Password confirmation doesn''t match. -invalidTotpMessage=Invalid authenticator code. - -usernameExistsMessage=Username already exists. -emailExistsMessage=Email already exists. - -readOnlyUserMessage=You can''t update your account as it is read-only. -readOnlyUsernameMessage=You can''t update your username as it is read-only. -readOnlyPasswordMessage=You can''t update your password as your account is read-only. - -successTotpMessage=Mobile authenticator configured. -successTotpRemovedMessage=Mobile authenticator removed. - -successGrantRevokedMessage=Grant revoked successfully. - -accountUpdatedMessage=Your account has been updated. -accountPasswordUpdatedMessage=Your password has been updated. - -missingIdentityProviderMessage=Identity provider not specified. -invalidFederatedIdentityActionMessage=Invalid or missing action. -identityProviderNotFoundMessage=Specified identity provider not found. -federatedIdentityLinkNotActiveMessage=This identity is not active anymore. -federatedIdentityRemovingLastProviderMessage=You can''t remove last federated identity as you don''t have a password. -identityProviderRedirectErrorMessage=Failed to redirect to identity provider. -identityProviderRemovedMessage=Identity provider removed successfully. -identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user. -staleCodeAccountMessage=The page expired. Please try one more time. -consentDenied=Consent denied. - -accountDisabledMessage=Account is disabled, contact your administrator. - -accountTemporarilyDisabledMessage=Account is temporarily disabled, contact your administrator or try again later. -invalidPasswordMinLengthMessage=Invalid password: minimum length {0}. -invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters. -invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits. -invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters. -invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters. -invalidPasswordNotUsernameMessage=Invalid password: must not be equal to the username. -invalidPasswordNotEmailMessage=Invalid password: must not be equal to the email. -invalidPasswordRegexPatternMessage=Invalid password: fails to match regex pattern(s). -invalidPasswordHistoryMessage=Invalid password: must not be equal to any of last {0} passwords. -invalidPasswordBlacklistedMessage=Invalid password: password is blacklisted. -invalidPasswordGenericMessage=Invalid password: new password doesn''t match password policies. - -# Authorization -myResources=My Resources -myResourcesSub=My resources -doDeny=Deny -doRevoke=Revoke -doApprove=Approve -doRemoveSharing=Remove Sharing -doRemoveRequest=Remove Request -peopleAccessResource=People with access to this resource -resourceManagedPolicies=Permissions granting access to this resource -resourceNoPermissionsGrantingAccess=No permissions granting access to this resource -anyAction=Any action -description=Description -name=Name -scopes=Scopes -resource=Resource -user=User -peopleSharingThisResource=People sharing this resource -shareWithOthers=Share with others -needMyApproval=Need my approval -requestsWaitingApproval=Your requests waiting approval -icon=Icon -requestor=Requestor -owner=Owner -resourcesSharedWithMe=Resources shared with me -permissionRequestion=Permission Requestion -permission=Permission -shares=share(s) -notBeingShared=This resource is not being shared. -notHaveAnyResource=You don't have any resources -noResourcesSharedWithYou=There are no resources shared with you -havePermissionRequestsWaitingForApproval=You have {0} permission request(s) waiting for approval. -clickHereForDetails=Click here for details. -resourceIsNotBeingShared=The resource is not being shared - -locale_ca=Catal\u00e0 -locale_cs=\u010Ce\u0161tina -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_hu=Magyar -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_lt=Lietuvi\u0173 -locale_nl=Nederlands -locale_no=Norsk -locale_pl=Polski -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_sk=Sloven\u010dina -locale_sv=Svenska -locale_tr=T\u00FCrk\u00E7e -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 - -# Applications -applicationName=Name -applicationType=Application Type -applicationInUse=In-use app only -clearAllFilter=Clear all filters -activeFilters=Active filters -filterByName=Filter By Name ... -allApps=All applications -internalApps=Internal applications -thirdpartyApps=Third-Party applications -appResults=Results -clientNotFoundMessage=Client not found. - -# Linked account -authorizedProvider=Authorized Provider -authorizedProviderMessage=Authorized Providers linked with your account -identityProvider=Identity Provider -identityProviderMessage=To link your account with identity providers you have configured -socialLogin=Social Login -userDefined=User Defined -removeAccess=Remove Access -removeAccessMessage=You will need to grant access again, if you want to use this app account. - -#Authenticator -authenticatorStatusMessage=Two-factor authentication is currently -authenticatorFinishSetUpTitle=Your Two-Factor Authentication -authenticatorFinishSetUpMessage=Each time you sign in to your Keycloak account, you will be asked to provide a two-factor authentication code. -authenticatorSubTitle=Set Up Two-Factor Authentication -authenticatorSubMessage=To enhance the security of your account, enable at least one of the available two-factor authentication methods. -authenticatorMobileTitle=Mobile Authenticator -authenticatorMobileMessage=Use mobile Authenticator to get Verification codes as the two-factor authentication. -authenticatorMobileFinishSetUpMessage=The authenticator has been bound to your phone. -authenticatorActionSetup=Set up -authenticatorSMSTitle=SMS Code -authenticatorSMSMessage=Keycloak will send the Verification code to your phone as the two-factor authentication. -authenticatorSMSFinishSetUpMessage=Text messages are sent to -authenticatorDefaultStatus=Default -authenticatorChangePhone=Change Phone Number -authenticatorBackupCodesTitle=Backup Codes -authenticatorBackupCodesMessage=Get your 8-digit backup codes -authenticatorBackupCodesFinishSetUpMessage=12 backup codes were generated at this time. Each one can be used once. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Mobile Authenticator Setup -smscodeIntroMessage=Enter your phone number and a verification code will be sent to your phone. -mobileSetupStep1=Install an authenticator application on your phone. The applications listed here are supported. -mobileSetupStep2=Open the application and scan the barcode: -mobileSetupStep3=Enter the one-time code provided by the application and click Save to finish the setup. -scanBarCode=Want to scan the barcode? -enterBarCode=Enter the one-time code -doCopy=Copy -doFinish=Finish - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMS Code Setup -chooseYourCountry=Choose your country -enterYourPhoneNumber=Enter your phone number -sendVerficationCode=Send Verification Code -enterYourVerficationCode=Enter your verification code - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Backup Codes Setup -backupcodesIntroMessage=If you lose access to your phone, you can still log into your account through backup codes. Keep them somewhere safe and accessible. -realmName=Realm -doDownload=Download -doPrint=Print -backupCodesTips-1=Each backup code can be used once. -backupCodesTips-2=These codes were generated on -generateNewBackupCodes=Generate New Backup Codes -backupCodesTips-3=When you generate new backup codes, the current codes will not work anymore. -backtoAuthenticatorPage=Back to Authenticator Page - - -#Resources -resources=Resources -sharedwithMe=Shared with Me -share=Share -sharedwith=Shared with -accessPermissions=Access Permissions -permissionRequests=Permission Requests -approve=Approve -approveAll=Approve all -people=people -perPage=per page -currentPage=Current Page -sharetheResource=Share the resource -group=Group -selectPermission=Select Permission -addPeople=Add people to share your resource with -addTeam=Add team to share your resource with -myPermissions=My Permissions -waitingforApproval=Waiting for approval -anyPermission=Any Permission - -# Openshift messages -openshift.scope.user_info=User information -openshift.scope.user_check-access=User access information -openshift.scope.user_full=Full Access -openshift.scope.list-projects=List projects - -error-invalid-value=Invalid value. -error-invalid-blank=Please specify value. -error-empty=Please specify value. -error-invalid-length=Attribute {0} must have a length between {1} and {2}. -error-invalid-email=Invalid email address. -error-invalid-number=Invalid number. -error-number-out-of-range=Attribute {0} must be a number between {1} and {2}. -error-pattern-no-match=Invalid value. -error-invalid-uri=Invalid URL. -error-invalid-uri-scheme=Invalid URL scheme. -error-invalid-uri-fragment=Invalid URL fragment. -error-user-attribute-required=Please specify attribute {0}. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_es.properties b/deps/keycloak/themes/base/account/messages/messages_es.properties deleted file mode 100644 index fd36e598c..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_es.properties +++ /dev/null @@ -1,147 +0,0 @@ -doSave=Guardar -doCancel=Cancelar -doLogOutAllSessions=Desconectar de todas las sesiones -doRemove=Eliminar -doAdd=A\u00F1adir -doSignOut=Desconectar - -editAccountHtmlTitle=Editar cuenta -federatedIdentitiesHtmlTitle=Identidades federadas -accountLogHtmlTitle=Registro de la cuenta -changePasswordHtmlTitle=Cambiar contrase\u00F1a -sessionsHtmlTitle=Sesiones -accountManagementTitle=Gesti\u00F3n de Cuenta Keycloak -authenticatorTitle=Autenticador -applicationsHtmlTitle=Aplicaciones - -authenticatorCode=C\u00F3digo de un solo uso -email=Email -firstName=Nombre -givenName=Nombre de pila -fullName=Nombre completo -lastName=Apellidos -familyName=Apellido -password=Contrase\u00F1a -passwordConfirm=Confirma la contrase\u00F1a -passwordNew=Nueva contrase\u00F1a -username=Usuario -address=Direcci\u00F3n -street=Calle -locality=Ciudad o Municipio -region=Estado, Provincia, o Regi\u00F3n -postal_code=C\u00F3digo Postal -country=Pa\u00EDs -emailVerified=Email verificado -gssDelegationCredential=GSS Delegation Credential - -role_admin=Administrador -role_realm-admin=Administrador del dominio -role_create-realm=Crear dominio -role_view-realm=Ver dominio -role_view-users=Ver usuarios -role_view-applications=Ver aplicaciones -role_view-clients=Ver clientes -role_view-events=Ver eventos -role_view-identity-providers=Ver proveedores de identidad -role_manage-realm=Gestionar dominio -role_manage-users=Gestionar usuarios -role_manage-applications=Gestionar aplicaciones -role_manage-identity-providers=Gestionar proveedores de identidad -role_manage-clients=Gestionar clientes -role_manage-events=Gestionar eventos -role_view-profile=Ver perfil -role_manage-account=Gestionar cuenta -role_read-token=Leer token -role_offline-access=Acceso sin conexi\u00F3n -client_account=Cuenta -client_security-admin-console=Consola de Administraci\u00F3n de Seguridad -client_realm-management=Gesti\u00F3n de dominio -client_broker=Broker - - -requiredFields=Campos obligatorios -allFieldsRequired=Todos los campos obligatorios - -backToApplication=« Volver a la aplicaci\u00F3n -backTo=Volver a {0} - -date=Fecha -event=Evento -ip=IP -client=Cliente -clients=Clientes -details=Detalles -started=Iniciado -lastAccess=\u00DAltimo acceso -expires=Expira -applications=Aplicaciones - -account=Cuenta -federatedIdentity=Identidad federada -authenticator=Autenticador -sessions=Sesiones -log=Regisro - -application=Aplicaci\u00F3n -availablePermissions=Permisos disponibles -grantedPermissions=Permisos concedidos -grantedPersonalInfo=Informaci\u00F3n personal concedida -additionalGrants=Permisos adicionales -action=Acci\u00F3n -inResource=en -fullAccess=Acceso total -offlineToken=C\u00F3digo de autorizaci\u00F3n offline -revoke=Revocar permiso - -configureAuthenticators=Autenticadores configurados -mobile=M\u00F3vil -totpStep1=Instala FreeOTP o Google Authenticator en tu tel\u00E9fono m\u00F3vil. Ambas aplicaciones est\u00E1n disponibles en Google Play y en la App Store de Apple. -totpStep2=Abre la aplicaci\u00F3n y escanea el c\u00F3digo o introduce la clave. -totpStep3=Introduce el c\u00F3digo \u00FAnico que te muestra la aplicaci\u00F3n de autenticaci\u00F3n y haz clic en Enviar para finalizar la configuraci\u00F3n - -missingUsernameMessage=Por favor indica tu usuario. -missingFirstNameMessage=Por favor indica el nombre. -invalidEmailMessage=Email no v\u00E1lido -missingLastNameMessage=Por favor indica tus apellidos. -missingEmailMessage=Por favor indica el email. -missingPasswordMessage=Por favor indica tu contrase\u00F1a. -notMatchPasswordMessage=Las contrase\u00F1as no coinciden. - -missingTotpMessage=Por favor indica tu c\u00F3digo de autenticaci\u00F3n -invalidPasswordExistingMessage=La contrase\u00F1a actual no es correcta. -invalidPasswordConfirmMessage=La confirmaci\u00F3n de contrase\u00F1a no coincide. -invalidTotpMessage=El c\u00F3digo de autenticaci\u00F3n no es v\u00E1lido. - -usernameExistsMessage=El usuario ya existe -emailExistsMessage=El email ya existe - -readOnlyUserMessage=No puedes actualizar tu usuario porque tu cuenta es de solo lectura. -readOnlyPasswordMessage=No puedes actualizar tu contrase\u00F1a porque tu cuenta es de solo lectura. - -successTotpMessage=Aplicaci\u00F3n de autenticaci\u00F3n m\u00F3vil configurada. -successTotpRemovedMessage=Aplicaci\u00F3n de autenticaci\u00F3n m\u00F3vil eliminada. - -successGrantRevokedMessage=Permiso revocado correctamente - -accountUpdatedMessage=Tu cuenta se ha actualizado. -accountPasswordUpdatedMessage=Tu contrase\u00F1a se ha actualizado. - -missingIdentityProviderMessage=Proveedor de identidad no indicado. -invalidFederatedIdentityActionMessage=Acci\u00F3n no v\u00E1lida o no indicada. -identityProviderNotFoundMessage=No se encontr\u00F3 un proveedor de identidad. -federatedIdentityLinkNotActiveMessage=Esta identidad ya no est\u00E1 activa -federatedIdentityRemovingLastProviderMessage=No puedes eliminar la \u00FAltima identidad federada porque no tienes fijada una contrase\u00F1a. -identityProviderRedirectErrorMessage=Error en la redirecci\u00F3n al proveedor de identidad -identityProviderRemovedMessage=Proveedor de identidad borrado correctamente. - -accountDisabledMessage=La cuenta est\u00E1 desactivada, contacta con el administrador. - -accountTemporarilyDisabledMessage=La cuenta est\u00E1 temporalmente desactivada, contacta con el administrador o int\u00E9ntalo de nuevo m\u00E1s tarde. -invalidPasswordMinLengthMessage=Contrase\u00F1a incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinLowerCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras min\u00FAsculas. -invalidPasswordMinDigitsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres num\u00E9ricos. -invalidPasswordMinUpperCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras may\u00FAsculas. -invalidPasswordMinSpecialCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres especiales. -invalidPasswordNotUsernameMessage=Contrase\u00F1a incorrecta: no puede ser igual al nombre de usuario. -invalidPasswordRegexPatternMessage=Contrase\u00F1a incorrecta: no cumple la expresi\u00F3n regular. -invalidPasswordHistoryMessage=Contrase\u00F1a incorrecta: no puede ser igual a ninguna de las \u00FAltimas {0} contrase\u00F1as. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_fr.properties b/deps/keycloak/themes/base/account/messages/messages_fr.properties deleted file mode 100644 index d0b7b1f3d..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_fr.properties +++ /dev/null @@ -1,180 +0,0 @@ -# TIPS to encode UTF-8 to ISO -# native2ascii -encoding ISO8859_1 srcFile > dstFile - -doSave=Sauvegarder -doCancel=Annuler -doLogOutAllSessions=D\u00e9connexion de toutes les sessions -doRemove=Supprimer -doAdd=Ajouter -doSignOut=D\u00e9connexion - -editAccountHtmlTitle=\u00c9dition du compte -federatedIdentitiesHtmlTitle=Identit\u00e9s f\u00e9d\u00e9r\u00e9es -accountLogHtmlTitle=Acc\u00e8s au compte -changePasswordHtmlTitle=Changer de mot de passe -sessionsHtmlTitle=Sessions -accountManagementTitle=Gestion du compte Keycloak -authenticatorTitle=Authentification -applicationsHtmlTitle=Applications - -authenticatorCode=Mot de passe unique -email=Courriel -firstName=Pr\u00e9nom -givenName=Pr\u00e9nom -fullName=Nom complet -lastName=Nom -familyName=Nom de famille -password=Mot de passe -passwordConfirm=Confirmation -passwordNew=Nouveau mot de passe -username=Compte -address=Adresse -street=Rue -locality=Ville ou Localit\u00e9 -region=\u00c9tat, Province ou R\u00e9gion -postal_code=Code Postal -country=Pays -emailVerified=Courriel v\u00e9rifi\u00e9 -gssDelegationCredential=Accr\u00e9ditation de d\u00e9l\u00e9gation GSS - -role_admin=Administrateur -role_realm-admin=Administrateur du domaine -role_create-realm=Cr\u00e9er un domaine -role_view-realm=Voir un domaine -role_view-users=Voir les utilisateurs -role_view-applications=Voir les applications -role_view-clients=Voir les clients -role_view-events=Voir les \u00e9v\u00e9nements -role_view-identity-providers=Voir les fournisseurs d''identit\u00e9s -role_manage-realm=G\u00e9rer le domaine -role_manage-users=G\u00e9rer les utilisateurs -role_manage-applications=G\u00e9rer les applications -role_manage-identity-providers=G\u00e9rer les fournisseurs d''identit\u00e9s -role_manage-clients=G\u00e9rer les clients -role_manage-events=G\u00e9rer les \u00e9v\u00e9nements -role_view-profile=Voir le profil -role_manage-account=G\u00e9rer le compte -role_read-token=Lire le jeton d''authentification -role_offline-access=Acc\u00e8s hors-ligne -client_account=Compte -client_security-admin-console=Console d''administration de la s\u00e9curit\u00e9 -client_admin-cli=Admin CLI -client_realm-management=Gestion du domaine -client_broker=Broker - - -requiredFields=Champs obligatoires -allFieldsRequired=Tous les champs sont obligatoires - -backToApplication=« Revenir \u00e0 l''application -backTo=Revenir \u00e0 {0} - -date=Date -event=Ev\u00e9nement -ip=IP -client=Client -clients=Clients -details=D\u00e9tails -started=D\u00e9but -lastAccess=Dernier acc\u00e8s -expires=Expiration -applications=Applications - -account=Compte -federatedIdentity=Identit\u00e9 f\u00e9d\u00e9r\u00e9e -authenticator=Authentification -sessions=Sessions -log=Connexion - -application=Application -availablePermissions=Permissions disponibles -grantedPermissions=Permissions accord\u00e9es -grantedPersonalInfo=Informations personnelles accord\u00e9es -additionalGrants=Droits additionnels -action=Action -inResource=dans -fullAccess=Acc\u00e8s complet -offlineToken=Jeton d''authentification hors-ligne -revoke=R\u00e9voquer un droit - -configureAuthenticators=Authentifications configur\u00e9es. -mobile=T\u00e9l\u00e9phone mobile -totpStep1=Installez une des applications suivantes sur votre mobile -totpStep2=Ouvrez l''application et scannez le code-barres ou entrez la clef. -totpStep3=Entrez le code \u00e0 usage unique fourni par l''application et cliquez sur Sauvegarder pour terminer. - -totpManualStep2=Ouvrez l''application et entrez la clef -totpManualStep3=Utilisez les valeurs de configuration suivante si l''application les autorise -totpUnableToScan=Impossible de scanner ? -totpScanBarcode=Scanner le code-barres ? - -totp.totp=Bas\u00e9 sur le temps -totp.hotp=Bas\u00e9 sur un compteur - -totpType=Type -totpAlgorithm=Algorithme -totpDigits=Chiffres -totpInterval=Intervalle -totpCounter=Compteur - -missingUsernameMessage=Veuillez entrer votre nom d''utilisateur. -missingFirstNameMessage=Veuillez entrer votre pr\u00e9nom. -invalidEmailMessage=Courriel invalide. -missingLastNameMessage=Veuillez entrer votre nom. -missingEmailMessage=Veuillez entrer votre courriel. -missingPasswordMessage=Veuillez entrer votre mot de passe. -notMatchPasswordMessage=Les mots de passe ne sont pas identiques - -missingTotpMessage=Veuillez entrer le code d''authentification. -invalidPasswordExistingMessage=Mot de passe existant invalide. -invalidPasswordConfirmMessage=Le mot de passe de confirmation ne correspond pas. -invalidTotpMessage=Le code d''authentification est invalide. - -usernameExistsMessage=Le nom d''utilisateur existe d\u00e9j\u00e0. -emailExistsMessage=Le courriel existe d\u00e9j\u00e0. - -readOnlyUserMessage=Vous ne pouvez pas mettre \u00e0 jour votre compte car il est en lecture seule. -readOnlyPasswordMessage=Vous ne pouvez pas mettre \u00e0 jour votre mot de passe car votre compte est en lecture seule. - -successTotpMessage=L''authentification via t\u00e9l\u00e9phone mobile est configur\u00e9e. -successTotpRemovedMessage=L''authentification via t\u00e9l\u00e9phone mobile est supprim\u00e9e. - -successGrantRevokedMessage=Droit r\u00e9voqu\u00e9 avec succ\u00e8s. - -accountUpdatedMessage=Votre compte a \u00e9t\u00e9 mis \u00e0 jour. -accountPasswordUpdatedMessage=Votre mot de passe a \u00e9t\u00e9 mis \u00e0 jour. - -missingIdentityProviderMessage=Le fournisseur d''identit\u00e9 n''est pas sp\u00e9cifi\u00e9. -invalidFederatedIdentityActionMessage=Action manquante ou invalide. -identityProviderNotFoundMessage=Le fournisseur d''identit\u00e9 sp\u00e9cifi\u00e9 n''est pas trouv\u00e9. -federatedIdentityLinkNotActiveMessage=Cette identit\u00e9 n''est plus active dor\u00e9navant. -federatedIdentityRemovingLastProviderMessage=Vous ne pouvez pas supprimer votre derni\u00e8re f\u00e9d\u00e9ration d''identit\u00e9 sans avoir de mot de passe sp\u00e9cifi\u00e9. -identityProviderRedirectErrorMessage=Erreur de redirection vers le fournisseur d''identit\u00e9. -identityProviderRemovedMessage=Le fournisseur d''identit\u00e9 a \u00e9t\u00e9 supprim\u00e9 correctement. -identityProviderAlreadyLinkedMessage=Le fournisseur d''identit\u00e9 retourn\u00e9 par {0} est d\u00e9j\u00e0 li\u00e9 \u00e0 un autre utilisateur. - -accountDisabledMessage=Ce compte est d\u00e9sactiv\u00e9, veuillez contacter votre administrateur. - -accountTemporarilyDisabledMessage=Ce compte est temporairement d\u00e9sactiv\u00e9, veuillez contacter votre administrateur ou r\u00e9essayez plus tard. -invalidPasswordMinLengthMessage=Mot de passe invalide: longueur minimale {0}. -invalidPasswordMinLowerCaseCharsMessage=Mot de passe invalide: doit contenir au moins {0} lettre(s) en minuscule. -invalidPasswordMinDigitsMessage=Mot de passe invalide: doit contenir au moins {0} chiffre(s). -invalidPasswordMinUpperCaseCharsMessage=Mot de passe invalide: doit contenir au moins {0} lettre(s) en majuscule. -invalidPasswordMinSpecialCharsMessage=Mot de passe invalide: doit contenir au moins {0} caract\u00e8re(s) sp\u00e9ciaux. -invalidPasswordNotUsernameMessage=Mot de passe invalide: ne doit pas \u00eatre identique au nom d''utilisateur. -invalidPasswordRegexPatternMessage=Mot de passe invalide: ne valide pas l''expression rationnelle. -invalidPasswordHistoryMessage=Mot de passe invalide: ne doit pas \u00eatre \u00e9gal aux {0} derniers mots de passe. - -applicationName=Nom de l''application -update=Mettre \u00e0 jour -status=Statut -authenticatorActionSetup=Configurer -device-activity=Activit\u00e9 des Appareils -accountSecurityTitle=S\u00e9curit\u00e9 du Compte -accountManagementWelcomeMessage=Bienvenue dans la Gestion de Compte Keycloak -personalInfoHtmlTitle=Informations Personnelles -personalInfoIntroMessage=G\u00e9rez vos informations de base -personalSubMessage=G\u00e9rez ces informations de base: votre pr\u00e9nom, nom de famille et email -accountSecurityIntroMessage=G\u00e9rez votre mot de passe et l''acc\u00e8s \u00e0 votre compte -applicationsIntroMessage=Auditez et g\u00e9rez les permissions d''acc\u00e8s des applications aux donn\u00e9es de votre compte -applicationType=Type d''application diff --git a/deps/keycloak/themes/base/account/messages/messages_hu.properties b/deps/keycloak/themes/base/account/messages/messages_hu.properties deleted file mode 100644 index 18950c909..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_hu.properties +++ /dev/null @@ -1,341 +0,0 @@ -# encoding: utf-8 -doSave=Mentés -doCancel=Mégsem -doLogOutAllSessions=Minden munkamenet kiléptetése -doRemove=Törlés -doAdd=Hozzáadás -doSignOut=Kilépés -doLogIn=Belépés -doLink=Összekötés - -editAccountHtmlTitle=Fiók szerkesztése -personalInfoHtmlTitle=Személyes adatok -federatedIdentitiesHtmlTitle=Összekapcsolt személyazonosságok -accountLogHtmlTitle=Fiók napló -changePasswordHtmlTitle=Jelszó csere -deviceActivityHtmlTitle=Eszköz történet -sessionsHtmlTitle=Munkamenetek -accountManagementTitle=Keycloak Fiók KezelÅ‘ -authenticatorTitle=HitelesítÅ‘ -applicationsHtmlTitle=Alkalmazások -linkedAccountsHtmlTitle=Összekötött fiókok - -accountManagementWelcomeMessage=Ãœdvözöljük a Keycloak Fiók KezelÅ‘ben -personalInfoIntroMessage=Kezelje az alap személyes adatait -accountSecurityTitle=Fiók biztonság -accountSecurityIntroMessage=Szabályozza jelszó és fiók hozzáféréseit -applicationsIntroMessage=Kezelje alkalmazás jogosultságait, hogy hozzáférjen a fiókjához -resourceIntroMessage=Ossza meg az erÅ‘forrásait csapattagjai között -passwordLastUpdateMessage=A jelszava ekkor módosult -updatePasswordTitle=Módosítsa jelszavát -updatePasswordMessageTitle=Kérem válasszon erÅ‘s jelszót -updatePasswordMessage=Egy erÅ‘s jelszó számok, betűk és speciális karakterek keveréke, nehéz kitalálni, nem hasonlít valódi (szótári) szóra és csak ehhez a fiókhoz tartozik. -personalSubTitle=Személyes adatai -personalSubMessage=Kezelje alapvetÅ‘ személyes adatait: vezetéknév, keresztnév, email cím - -authenticatorCode=Egyszer használatos kód -email=Email cím -firstName=Keresztnév -givenName=Keresztnév -fullName=Teljes név -lastName=Vezetéknév -familyName=Vezetéknév -password=Jelszó -currentPassword=Jelenlegi jelszó -passwordConfirm=MegerÅ‘sítés -passwordNew=Új jelszó -username=Felhasználó név -address=Cím -street=Közterület -locality=Település -region=Ãllam, Tartomány, Megye, Régió -postal_code=Irányítószám -country=Ország -emailVerified=EllenÅ‘rzött email cím -gssDelegationCredential=GSS Delegation Credential - -profileScopeConsentText=Felhasználói fiók -emailScopeConsentText=Email cím -addressScopeConsentText=Cím -phoneScopeConsentText=Telefonszám -offlineAccessScopeConsentText=Offline hozzáférés -samlRoleListScopeConsentText=Szerepköreim -rolesScopeConsentText=Felhasználói szerepkörök - -role_admin=Adminisztrátor -role_realm-admin=Tartomány Adminisztrátor -role_create-realm=Tartomány létrehozása -role_view-realm=Tartományok megtekintése -role_view-users=Felhasználók megtekintése -role_view-applications=Alkalmazások megtekintése -role_view-clients=Kliensek megtekintése -role_view-events=Események megtekintése -role_view-identity-providers=Személyazonosság-kezelÅ‘k megtekintése -role_view-consent=Jóváhagyó nyilatkozatok megtekintése -role_manage-realm=Tartományok kezelése -role_manage-users=Felhasználók kezelése -role_manage-applications=Alkalmazások kezelése -role_manage-identity-providers=Személyazonosság-kezelÅ‘k karbantartása -role_manage-clients=Kliensek kezelése -role_manage-events=Események kezelése -role_view-profile=Fiók megtekintése -role_manage-account=Fiók kezelése -role_manage-account-links=Fiók összekötések kezelése -role_manage-consent=Jóváhagyó nyilatkozatok kezelése -role_read-token=Olvasási token -role_offline-access=Offline hozzáférés -role_uma_authorization=Hozzáférés jogosultságokhoz (UMA) -client_account=Fiók -client_account-console=Fiók kezelés -client_security-admin-console=Biztonsági, adminisztrátor fiók kezelés -client_admin-cli=Admin CLI -client_realm-management=Tartomány kezelés -client_broker=Ãœgynök - - -requiredFields=KötelezÅ‘en kitöltendÅ‘ mezÅ‘k -allFieldsRequired=Minden mezÅ‘ kitöltése kötelezÅ‘ - -backToApplication=« Vissza az alkalmazásba -backTo=Vissza a {0}-ba/be - -date=Dátum -event=Esemény -ip=IP cím -client=Kliens -clients=Kliensek -details=Részletek -started=Kezdete -lastAccess=Utolsó hozzáférés -expires=Lejárat -applications=Alkalmazások - -account=Fiók -federatedIdentity=Összekapcsolt személyazonosság -authenticator=HitelesítÅ‘ -device-activity=Eszköz történet -sessions=Munkamentek -log=Napló - -application=Alkalmazás -availableRoles=ElérhetÅ‘ szerepkörök -grantedPermissions=Engedélyezett jogosultságok -grantedPersonalInfo=Engedélyezett személyes adatok -additionalGrants=További engedélyek -action=Művelet -inResource=itt: -fullAccess=Teljes hozzáférés -offlineToken=Offline Token -revoke=Engedély visszavonása - -configureAuthenticators=Beállított HitelesítÅ‘k -mobile=Mobil eszköz -totpStep1=Kérem telepítse az itt felsorolt alkalmazások egyikét a mobil eszközére: -totpStep2=Indítsa el az alkalmazást a mobil eszközén és olvassa be ezt a (QR) kódot: -totpStep3=Adja meg az alkalmazás által generált egyszer használatos kódot majd kattintson a Mentés gombra a beállítás befejezéséhez. -totpStep3DeviceName=Adja meg a mobil eszköz nevét. Ez a késÅ‘bbiekben segíthet az eszköz azonosításában. - -totpManualStep2=Indítsa el az alkalmazás és adja meg a következÅ‘ kulcsot: -totpManualStep3=Használja a következÅ‘ beállításokat, ha az alkalmazása támogatja ezeket: -totpUnableToScan=Nem tud (QR) kódot beolvasni? -totpScanBarcode=Inkább (QR) kódot olvasna be? - -totp.totp=IdÅ‘ alapú -totp.hotp=Számláló alapú - -totpType=Típus -totpAlgorithm=Algoritmus -totpDigits=Számjegyek -totpInterval=Intervallum -totpCounter=Számláló -totpDeviceName=Eszköz neve - -missingUsernameMessage=Kérem adja meg a felhasználó nevét. -missingFirstNameMessage=Kérem adja meg a keresztnevet. -invalidEmailMessage=Érvénytelen email cím. -missingLastNameMessage=Kérem adja meg a vezetéknevet. -missingEmailMessage=Kérem adja meg az email címet. -missingPasswordMessage=Kérem adja meg a jelszót. -notMatchPasswordMessage=A jelszavak nem egyeznek meg. -invalidUserMessage=Érvénytelen felhasználó - -missingTotpMessage=Kérem adja meg a hitelesítÅ‘ kódot. -missingTotpDeviceNameMessage=Kérem adja meg az eszköz nevét. -invalidPasswordExistingMessage=Érvénytelen jelenlegi jelszó. -invalidPasswordConfirmMessage=A jelszavak nem egyeznek meg. -invalidTotpMessage=Érvénytelen hitelesítÅ‘ kód. - -usernameExistsMessage=Ez a felhasználó név már foglalt. -emailExistsMessage=Ez az email cím már foglalt. - -readOnlyUserMessage=A felhasználói fiókja csak olvasható, módosítás nem lehetséges. -readOnlyUsernameMessage=A felhasználó név nem módosítható. -readOnlyPasswordMessage=A felhasználói fiókja csak olvasható, így jelszó módosítás nem lehetséges. - -successTotpMessage=A mobil hitelesítÅ‘t beállítottuk. -successTotpRemovedMessage=A mobil hitelesítÅ‘t eltávolítottuk. - -successGrantRevokedMessage=Az engedélyt visszavontuk. - -accountUpdatedMessage=Felhasználói fiókját módosítottuk. -accountPasswordUpdatedMessage=Jelszavát módosítottuk. - -missingIdentityProviderMessage=Nincs megadva személyazonosság-kezelÅ‘. -invalidFederatedIdentityActionMessage=Érvénytelen, vagy nem létezÅ‘ művelet. -identityProviderNotFoundMessage=A megadott személyazonosság-kezelÅ‘ nem található. -federatedIdentityLinkNotActiveMessage=Ez a személyazonosság összekötés már nem érvényes. -federatedIdentityRemovingLastProviderMessage=Az utolsó összekapcsolt személyazonosság nem törölhetÅ‘, mert Ön nem rendelkezik érvényes jelszóval. -identityProviderRedirectErrorMessage=Nem sikerült az átirányítás a személyazonosság-kezelÅ‘re. -identityProviderRemovedMessage=A személyazonosság-kezelÅ‘ összekötést töröltük. -identityProviderAlreadyLinkedMessage=Az összekapcsolt személyazonosság-kezelÅ‘ által bizotsított személyazonosság már össze van kötve egy másik felhasználói fiókkal. -staleCodeAccountMessage=Az oldal érvényességi ideje lejárt. Kérem próbálja meg újra a kérést. -consentDenied=Jóváhagyó nyilatkozat elutasítva. - -accountDisabledMessage=Felhasználói fiókja inaktív, kérem vegye fel a kapcsolatot az alkalmazás adminisztrátorral. - -accountTemporarilyDisabledMessage=Felhasználói fiókja átmenetileg inaktív, kérem vegye fel a kapcsolatot az alkalmazás adminisztrátorral, vagy próbálkozzon késÅ‘bb. -invalidPasswordMinLengthMessage=Érvénytelen jelszó: minimum hossz {0}. -invalidPasswordMinLowerCaseCharsMessage=Érvénytelen jelszó: legalább {0} darab kisbetűt kell tartalmaznia. -invalidPasswordMinDigitsMessage=Érvénytelen jelszó: legalább {0} darab számjegyet kell tartalmaznia. -invalidPasswordMinUpperCaseCharsMessage=Érvénytelen jelszó: legalább {0} darab nagybetűt kell tartalmaznia. -invalidPasswordMinSpecialCharsMessage=Érvénytelen jelszó: legalább {0} darab speciális karaktert (pl. #!$@ stb.) kell tartalmaznia. -invalidPasswordNotUsernameMessage=Érvénytelen jelszó: nem lehet azonos a felhasználó névvel. -invalidPasswordRegexPatternMessage=Érvénytelen jelszó: a jelszó nem illeszkedik a megadott reguláris kifejezés mintára. -invalidPasswordHistoryMessage=Érvénytelen jelszó: nem lehet azonos az utolsó {0} darab, korábban alkalmazott jelszóval. -invalidPasswordBlacklistedMessage=Érvénytelen jelszó: a jelszó tiltó listán szerepel. -invalidPasswordGenericMessage=Érvénytelen jelszó: az új jelszó nem felel meg a jelszó házirendnek. - -# Authorization -myResources=ErÅ‘forrásaim -myResourcesSub=ErÅ‘forrásaim -doDeny=Tiltás -doRevoke=Visszavonás -doApprove=Jóváhagyás -doRemoveSharing=Megosztás törlése -doRemoveRequest=Kérelem törlése -peopleAccessResource=Az erÅ‘forráshoz hozzáférÅ‘ felhasználók -resourceManagedPolicies=Az erÅ‘forrás hozzáféréshez szükséges jogosultságok -resourceNoPermissionsGrantingAccess=Az erÅ‘forrás hozzáféréshez nem szükségesek jogosultságok -anyAction=Bármelyik művelet -description=Leírás -name=Név -scopes=Hatókör -resource=ErÅ‘forrás -user=Felhasználó -peopleSharingThisResource=Az erÅ‘forrást megosztó felhasználók -shareWithOthers=Megosztás más felhasználókkal -needMyApproval=A jóváhagyásom szükséges -requestsWaitingApproval=A kérése jóváhagyásra vár -icon=Ikon -requestor=KérelmezÅ‘ -owner=Tulajdonos -resourcesSharedWithMe=Velem megosztott erÅ‘források -permissionRequestion=Jogosultság kérelem -permission=Jogosultság -shares=megosztás(ok) -notBeingShared=Az erÅ‘forrás nincs megosztva -notHaveAnyResource=Nincsen erÅ‘forrása -noResourcesSharedWithYou=Nincsenek Önnel megosztott erÅ‘forrásai -havePermissionRequestsWaitingForApproval=Önnek {0} darab várakozó, jóváhagyandó jogosultság kérése van. -clickHereForDetails=Kattintson ide a részletekért. -resourceIsNotBeingShared=Az erÅ‘forrás nincs megosztva - -# Applications -applicationName=Név -applicationType=Alkalmazás típus -#applicationInUse=In-use app only -clearAllFilter=SzűrÅ‘ mezÅ‘k törlése -activeFilters=Aktív szűrÅ‘k -filterByName=Név alapú keresés -allApps=Minden alkalmazás -internalApps=BelsÅ‘ alkalmazások -thirdpartyApps=Harmadik féltÅ‘l származó alkalmazások -appResults=Eredmény -clientNotFoundMessage=A kliens nem található. - -# Linked account -authorizedProvider=Meghatalmazott szolgáltató -authorizedProviderMessage=A felhasználói fiókjához kötött meghatalmazott szolgáltatók -identityProvider=Személyazonosság-kezelÅ‘ -identityProviderMessage=Fiókja személyazonosság-kezelÅ‘khöz kötéséhez eddig ezeket a beállításokat adta meg -#socialLogin=Social Login -userDefined=Felhasználó által meghatározott -removeAccess=Hozzáférés törlése -removeAccessMessage=Újra engedélyeznie kell a hozzáférést az alkalmazás ismételt használatához. - -#Authenticator -authenticatorStatusMessage=A kétszintű hitelesítés jelenleg -authenticatorFinishSetUpTitle=Kétszintű hitelesítés -authenticatorFinishSetUpMessage=Minden Keycloak fiók bejelentkezéskor kérni fogunk ÖntÅ‘l egy második szintű hitelesítÅ‘ kódot. -authenticatorSubTitle=Ãllítsa be a második szintű hitelesítést -authenticatorSubMessage=Felhasználói fiókjának biztonsági szintjét növelheti, ha legalább egy második szintű hitelesítést is bekapcsol az elérhetÅ‘ eljárások közül. -authenticatorMobileTitle=Mobil eszköz alapú hitelesítés -authenticatorMobileMessage=Mobil eszközön generált ellenÅ‘rzÅ‘ kód, mint második szintű hitelesítés. -authenticatorMobileFinishSetUpMessage=A hitelesítés a mobil eszközéhez kötÅ‘dik. -authenticatorActionSetup=Beállítás -authenticatorSMSTitle=SMS kód -authenticatorSMSMessage=A Keycloak SMS ellenÅ‘rzÅ‘ kódot küld a telefonjára (második szintű hitelesítÅ‘ kód). -authenticatorSMSFinishSetUpMessage=A következÅ‘ telefonszámokra SMS-t küldünk -authenticatorDefaultStatus=Alapértelmezett -authenticatorChangePhone=Módosítsa telefonszámát -authenticatorBackupCodesTitle=Tartalék kódok -authenticatorBackupCodesMessage=8 számjegyű tartalék kódok igénylése -authenticatorBackupCodesFinishSetUpMessage=12 darab tartalék kódot generáltunk, mindegyiket csak egyszer használhatja fel. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Mobil hitelesítÅ‘ eszköz beállítása -smscodeIntroMessage=Adja meg a telefonszámát, melyre egy ellenÅ‘rzÅ‘ kódot küldünk. -mobileSetupStep1=Telepítsen egy hitelesítÅ‘ alkalmazást mobil eszközére az itt felsorolt, támogatott, alkalmazások közül. -mobileSetupStep2=Indítsa el az alkalmazást és olvassa be a következÅ‘ (QR) kódot: -mobileSetupStep3=Adja meg a mobil alkalmazás által generált egyszer használatos kódot, majd kattintson a Mentés gombra a beállításhoz. -scanBarCode=Inkább (QR) kódot olvasna be? -enterBarCode=Adja meg az egyszer használatos kódot -doCopy=Másolás -doFinish=Befejezés - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMS kód beállítása -chooseYourCountry=Válassza ki az országot -enterYourPhoneNumber=Adja meg a telefonszámát -sendVerficationCode=EllenÅ‘rzÅ‘ kód küldése -enterYourVerficationCode=Adja meg az ellenÅ‘rzÅ‘ kódot - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Tartalék kódok beállítása -backupcodesIntroMessage=Ha elveszíti telefonját, még mindig hozzáférhet a felhasználói fiókjához tartalék kódok segítségével. A tartalék kódokat tartsa egy biztonságos, de könnyen hozzáférhetÅ‘ helyen. -realmName=Tartomány -doDownload=Letöltés -doPrint=Nyomtatás -backupCodesTips-1=Minden tartalék kód csak egyszer használható fel. -backupCodesTips-2=Ezeket a kódokat ekkor generálta -generateNewBackupCodes=Új tartalék kódok generálása -backupCodesTips-3=Új tartalék kódok generálásakor a korábban generált kódok érvénytelenné válnak. -backtoAuthenticatorPage=Vissza a hitelesítÅ‘ lapra - - -#Resources -resources=ErÅ‘források -sharedwithMe=Velem megosztott erÅ‘források -share=Megosztás -sharedwith=Megosztva -accessPermissions=Hozzáférési jogosultságok -permissionRequests=Jogosultság kérések -approve=Jóváhagyás -approveAll=Mindet jóváhagyja -people=felhasználó -perPage=oldalanként -currentPage=Aktuális oldal -sharetheResource=ErÅ‘forrás megosztása -group=Csoport -selectPermission=Jogosultság választás -addPeople=Adjon hozzá felhasználókat az erÅ‘forrás megosztáshoz -addTeam=Adjon meg csoportot az erÅ‘forrás megosztáshoz -myPermissions=Jogosultságaim -waitingforApproval=Jóváhagyásra vár -anyPermission=Bármilyen jogosultság - -# Openshift messages -openshift.scope.user_info=Felhasználó adatok -openshift.scope.user_check-access=Felhasználó hozzáférés adatok -openshift.scope.user_full=Teljes hozzáférés -openshift.scope.list-projects=Projektek listája diff --git a/deps/keycloak/themes/base/account/messages/messages_it.properties b/deps/keycloak/themes/base/account/messages/messages_it.properties deleted file mode 100644 index 40e2c06f8..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_it.properties +++ /dev/null @@ -1,343 +0,0 @@ -doSave=Salva -doCancel=Annulla -doLogOutAllSessions=Effettua il logout da tutte le sessioni -doRemove=Elimina -doAdd=Aggiungi -doSignOut=Esci -doLogIn=Log In -doLink=Link - - -editAccountHtmlTitle=Modifica Account -personalInfoHtmlTitle=Informazioni personali -federatedIdentitiesHtmlTitle=Identit\u00e0 federate -accountLogHtmlTitle=Log dell''account -changePasswordHtmlTitle=Cambia password -deviceActivityHtmlTitle=Attivit\u00e0 dei dispositivi -sessionsHtmlTitle=Sessioni -accountManagementTitle=Gestione degli account di Keycloak -authenticatorTitle=Autenticatore -applicationsHtmlTitle=Applicazioni -linkedAccountsHtmlTitle=Account collegati - -accountManagementWelcomeMessage=Benvenuto nella gestione degli account di Keycloak -personalInfoIntroMessage=Gestisci le tue informazioni di base -accountSecurityTitle=Sicurezza dell''account -accountSecurityIntroMessage=Controlla la tua password e gli accessi dell''account -applicationsIntroMessage=Traccia e gestisci i permessi delle applicazioni nell''accesso al tuo account -resourceIntroMessage=Condividi le tue risorse tra i membri del team -passwordLastUpdateMessage=La tua password \u00e8 stata aggiornata il -updatePasswordTitle=Aggiornamento password -updatePasswordMessageTitle=Assicurati di scegliere una password robusta -updatePasswordMessage=Una password robusta contiene un misto di numeri, lettere, e simboli. \u00c8 difficile da indovinare, non assomiglia a una parola reale, ed \u00e8 utilizzata solo per questo account. -personalSubTitle=Le tue informazioni personali -personalSubMessage=Gestisce queste informazioni di base: il tuo nome, cognome, e indirizzo email - -authenticatorCode=Codice monouso - -email=Email -firstName=Nome -givenName=Nome -fullName=Nome completo -lastName=Cognome -familyName=Cognome -password=Password -currentPassword=Password attuale -passwordConfirm=Conferma password -passwordNew=Nuova password -username=Username -address=Indirizzo -street=Via -locality=Citt\u00e0 o localit\u00e0 -region=Stato, Provincia, o Regione -postal_code=CAP -country=Paese -emailVerified=Email verificata -gssDelegationCredential=Credenziali delega GSS - -profileScopeConsentText=Profilo utente -emailScopeConsentText=Indirizzo email -addressScopeConsentText=Indirizzo -phoneScopeConsentText=Numero di telefono -offlineAccessScopeConsentText=Accesso offline -samlRoleListScopeConsentText=I miei ruoli -rolesScopeConsentText=Ruoli utente -role_admin=Admin -role_realm-admin=Realm admin -role_create-realm=Crea realm -role_view-realm=Visualizza realm -role_view-users=Visualizza utenti -role_view-applications=Visualizza applicazioni -role_view-clients=Visualizza client -role_view-events=Visualizza eventi -role_view-identity-providers=Visualizza identity provider -role_view-consent=Visualizza consensi -role_manage-realm=Gestisci realm -role_manage-users=Gestisci utenti -role_manage-applications=Gestisci applicazioni -role_manage-identity-providers=Gestisci identity provider -role_manage-clients=Gestisci client -role_manage-events=Gestisci eventi -role_view-profile=Visualizza profilo -role_manage-account=Gestisci account -role_manage-account-links=Gestisci i link dell''account -role_manage-consent=Gestisci consensi -role_read-token=Leggi token -role_offline-access=Accesso offline -role_uma_authorization=Ottieni permessi -client_account=Account -client_account-console=Console account -client_security-admin-console=Console di amministrazione di sicurezza -client_admin-cli=Admin CLI -client_realm-management=Gestione realm -client_broker=Broker - - -requiredFields=Campi obbligatori -allFieldsRequired=Tutti campi obbligatori - -backToApplication=« Torna all''applicazione -backTo=Torna a {0} - -date=Data -event=Evento -ip=IP -client=Client -clients=Client -details=Dettagli -started=Iniziato -lastAccess=Ultimo accesso -expires=Scade -applications=Applicazioni - -account=Account -federatedIdentity=Identit\u00e0 federate -authenticator=Autenticatore -device-activity=Attivit\u00e0 dei dispositivi -sessions=Sessioni -log=Log - -application=Applicazione -availablePermissions=Autorizzazioni disponibili -grantedPermissions=Autorizzazioni concesse -grantedPersonalInfo=Informazioni personali concesse -additionalGrants=Ulteriori concessioni -action=Azione -inResource=in -fullAccess=Accesso completo -offlineToken=Token offline -revoke=Revoca concessione - -configureAuthenticators=Autenticatori configurati -mobile=Dispositivo mobile -totpStep1=Installa una delle seguenti applicazioni sul tuo dispositivo mobile -totpStep2=Apri l''applicazione e scansiona il codice QR -totpStep3=Scrivi il codice monouso fornito dall''applicazione e clicca Salva per completare il setup. -totpStep3DeviceName=Fornisci il nome del dispositivo per aiutarti a gestire i dispositivi di autenticazione. - -totpManualStep2=Apri l''applicazione e scrivi la chiave -totpManualStep3=Usa le seguenti impostazioni se l''applicazione lo consente -totpUnableToScan=Non riesci a scansionare il codice QR? -totpScanBarcode=Vuoi scansionare il codice QR? - -totp.totp=Basato sull''ora -totp.hotp=Basato sul contatore - -totpType=Tipo -totpAlgorithm=Algoritmo -totpDigits=Cifre -totpInterval=Intervallo -totpCounter=Contatore -totpDeviceName=Nome dispositivo - -missingUsernameMessage=Inserisci lo username. -missingFirstNameMessage=Inserisci il nome. -invalidEmailMessage=Indirizzo email non valido. -missingLastNameMessage=Inserisci il cognome. -missingEmailMessage=Inserisci l''indirizzo email. -missingPasswordMessage=Inserisci la password. -notMatchPasswordMessage=Le password non coincidono. -invalidUserMessage=Utente non valido - -missingTotpMessage=Inserisci il codice di autenticazione. -missingTotpDeviceNameMessage=Inserisci il nome del dispositivo di autenticazione. -invalidPasswordExistingMessage=Password esistente non valida. -invalidPasswordConfirmMessage=La password di conferma non coincide. -invalidTotpMessage=Codice di autenticazione non valido. - -usernameExistsMessage=Username gi\u00e0 esistente. -emailExistsMessage=Email gi\u00e0 esistente. - -readOnlyUserMessage=Non puoi aggiornare il tuo account poich\u00E9 \u00e8 in modalit\u00e0 sola lettura. -readOnlyUsernameMessage=Non puoi aggiornare il tuo nome utente poich\u00E9 \u00e8 in modalit\u00e0 sola lettura. -readOnlyPasswordMessage=Non puoi aggiornare il tuo account poich\u00E9 \u00e8 in modalit\u00e0 sola lettura. - -successTotpMessage=Autenticatore mobile configurato. -successTotpRemovedMessage=Autenticatore mobile eliminato. - -successGrantRevokedMessage=Concessione revocata con successo. - -accountUpdatedMessage=Il tuo account \u00e8 stato aggiornato. -accountPasswordUpdatedMessage=La tua password \u00e8 stata aggiornata. - -missingIdentityProviderMessage=Identity provider non specificato. -invalidFederatedIdentityActionMessage=Azione non valida o mancante. -identityProviderNotFoundMessage=L''identity provider specificato non \u00e8 stato trovato. -federatedIdentityLinkNotActiveMessage=Questo identity non \u00e8 pi\u00f9 attivo. -federatedIdentityRemovingLastProviderMessage=Non puoi rimuovere l''ultima identit\u00e0 federata poich\u00E9 non hai pi\u00f9 la password. -identityProviderRedirectErrorMessage=Il reindirizzamento all''identity provider \u00e8 fallito. -identityProviderRemovedMessage=Identity provider eliminato correttamente. -identityProviderAlreadyLinkedMessage=L''identit\u00e0 federata restituita da {0} \u00e8 gi\u00e0 collegata ad un altro utente. -staleCodeAccountMessage=La pagina \u00e8 scaduta. Prova di nuovo. -consentDenied=Consenso negato. - -accountDisabledMessage=Account disabilitato, contatta l''amministratore. - -accountTemporarilyDisabledMessage=L''account \u00e8 temporaneamente disabilitato, contatta l''amministratore o riprova pi\u00f9 tardi. -invalidPasswordMinLengthMessage=Password non valida: lunghezza minima {0}. -invalidPasswordMinLowerCaseCharsMessage=Password non valida: deve contenere almeno {0} caratteri minuscoli. -invalidPasswordMinDigitsMessage=Password non valida: deve contenere almeno {0} numeri. -invalidPasswordMinUpperCaseCharsMessage=Password non valida: deve contenere almeno {0} caratteri maiuscoli. -invalidPasswordMinSpecialCharsMessage=Password non valida: deve contenere almeno {0} caratteri speciali. -invalidPasswordNotUsernameMessage=Password non valida: non deve essere uguale allo username. -invalidPasswordRegexPatternMessage=Password non valida: fallito il match con una o pi\u00f9 espressioni regolari. -invalidPasswordHistoryMessage=Password non valida: non deve essere uguale a una delle ultime {0} password. -invalidPasswordBlacklistedMessage=Password non valida: la password non \u00e8 consentita. -invalidPasswordGenericMessage=Password non valida: la nuova password non rispetta le indicazioni previste. - -# Authorization -myResources=Le mie risorse -myResourcesSub=Le mie risorse -doDeny=Nega -doRevoke=Revoca -doApprove=Approva -doRemoveSharing=Rimuovi condivisione -doRemoveRequest=Rimuovi richiesta -peopleAccessResource=Persone che hanno accesso a questa risorsa -resourceManagedPolicies=Permessi che danno accesso a questa risorsa -resourceNoPermissionsGrantingAccess=Nessun permesso d\u00E0 accesso a questa risorsa -anyAction=Qualsiasi azione -description=Descrizione -name=Nome -scopes=Ambito -resource=Risorsa -user=Utente -peopleSharingThisResource=Persone che condividono questa risorsa -shareWithOthers=Condividi con altri -needMyApproval=Richiede la mia approvazione -requestsWaitingApproval=La tua richiesta è in attesa di approvazione -icon=Icona -requestor=Richiedente -owner=Proprietario -resourcesSharedWithMe=Risorse condivise con me -permissionRequestion=Richiesta di permesso -permission=Permesso -shares=condivisioni -notBeingShared=Questa risorsa non \u00e8 in condivisione. -notHaveAnyResource=Non hai nessuna risorsa -noResourcesSharedWithYou=Non ci sono risorse condivise con te -havePermissionRequestsWaitingForApproval=Hai {0} richiesta(e) di permesso in attesa di approvazione. -clickHereForDetails=Clicca qui per i dettagli. -resourceIsNotBeingShared=La risorsa non \u00e8 in condivisione - -locale_it=Italiano - -# Applications -applicationName=Nome -applicationType=Tipo applicazione -applicationInUse=In-use app only -clearAllFilter=Azzera tutti i filtri -activeFilters=Filtri attivi -filterByName=Filtra per nome ... -allApps=Tutte le applicazioni -internalApps=Applicazioni interne -thirdpartyApps=Applicazioni di terze parti -appResults=Risultati -clientNotFoundMessage=Client non trovato. - -# Linked account -authorizedProvider=Provider autorizzato -authorizedProviderMessage=Provider autorizzati collegati al tuo account -identityProvider=Identity provider -identityProviderMessage=Collegare il tuo account con gli identity provider che hai configurato -socialLogin=Social Login -userDefined=Definito dall''utente -removeAccess=Rimuovi accesso -removeAccessMessage=Devi concedere di nuovo l''accesso, se vuoi utilizzare l''account di questa applicazione. - -#Authenticator -authenticatorStatusMessage=L''autenticazione a due fattori \u00e8 attualmente -authenticatorFinishSetUpTitle=La tua autenticazione a due fattori -authenticatorFinishSetUpMessage=Ogni volta che effettui l''accesso al tuo account Keycloak, ti verr\u00E0 richiesto di fornire il tuo codice di autenticazione a due fattori. -authenticatorSubTitle=Imposta l''autenticazione a due fattori -authenticatorSubMessage=Per incrementare la sicurezza del tuo account, attiva almeno uno dei metodi disponibili per l''autenticazione a due fattori. -authenticatorMobileTitle=Autenticatore mobile -authenticatorMobileMessage=Utilizza l''autenticatore mobile per ottenere i codici di verifica per l''autenticazione a due fattori. -authenticatorMobileFinishSetUpMessage=L''autenticatore \u00e8 stato collegato al tuo telefono. -authenticatorActionSetup=Set up -authenticatorSMSTitle=Codice SMS -authenticatorSMSMessage=Keycloak invier\u00E0 il codice di verifica al tuo telefono per l''autenticazione a due fattori. -authenticatorSMSFinishSetUpMessage=I messaggi di testo vengono inviati a -authenticatorDefaultStatus=Default -authenticatorChangePhone=Cambia numero di telefono -authenticatorBackupCodesTitle=Codici di backup -authenticatorBackupCodesMessage=Ottieni i tuoi codici di backup a otto cifre -authenticatorBackupCodesFinishSetUpMessage=Sono stati generati dodici codici di backup. Ognuno pu\u00f2 essere usato una sola volta. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Setup autenticatore mobile -smscodeIntroMessage=Inserisci il tuo numero di telefono e ti verr\u00E0 inviato un codice di verifica. -mobileSetupStep1=Installa un''applicazione di autenticazione sul tuo telefono. Sono supportate le applicazioni qui elencate. -mobileSetupStep2=Apri l''applicazione e scansiona il codice QR: -mobileSetupStep3=Inserisci il codice monouso fornito dall''applicazione e clicca Salva per completare il setup. -scanBarCode=Vuoi scansionare il codice QR? -enterBarCode=Inserisci il codice monouso -doCopy=Copia -doFinish=Termina - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=Setup codice SMS -chooseYourCountry=Scegli la tua nazione -enterYourPhoneNumber=Inserisci il tuo numero di telefono -sendVerficationCode=Invia il codice di verifica -enterYourVerficationCode=Inserisci il codice di verifica - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Setup backup codici -backupcodesIntroMessage=Se non disponi pi\u00f9 del tuo telefono, puoi comunque accedere al tuo account attraverso i codici di backup. Conservali in un posto sicuro e accessibile. -realmName=Realm -doDownload=Download -doPrint=Stampa -backupCodesTips-1=Ogni codice di backup pu\u00f2 essere usato una sola volta. -backupCodesTips-2=Questi codici sono stati generati il -generateNewBackupCodes=Genera dei nuovi codici di backup -backupCodesTips-3=Quando generi dei nuovi codici di backup, quelli attuali non funzioneranno pi\u00f9. -backtoAuthenticatorPage=Torna alla pagina dell''autenticatore - - -#Resources -resources=Risorse -sharedwithMe=Condiviso con me -share=Condiviso -sharedwith=Condiviso con -accessPermissions=Permessi di accesso -permissionRequests=Richieste di permesso -approve=Approva -approveAll=Approva tutti -people=persone -perPage=per pagina -currentPage=Pagina corrente -sharetheResource=Condividi la risorsa -group=Gruppo -selectPermission=Seleziona permessi -addPeople=Aggiungi persone con le quali condividere la tua risorsa -addTeam=Aggiungi gruppi con i quali condividere la tua risorsa -myPermissions=Miei permessi -waitingforApproval=Attesa dell''approvazione -anyPermission=Qualsiasi permesso - -# Openshift messages -openshift.scope.user_info=Informazioni utente -openshift.scope.user_check-access=Informazioni per l''accesso dell''utente -openshift.scope.user_full=Accesso completo -openshift.scope.list-projects=Elenca progetti diff --git a/deps/keycloak/themes/base/account/messages/messages_ja.properties b/deps/keycloak/themes/base/account/messages/messages_ja.properties deleted file mode 100644 index d40914ffa..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_ja.properties +++ /dev/null @@ -1,342 +0,0 @@ -# encoding: utf-8 -doSave=ä¿å­˜ -doCancel=キャンセル -doLogOutAllSessions=全セッションã‹ã‚‰ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ -doRemove=削除 -doAdd=追加 -doSignOut=サインアウト -doLogIn=ログイン -doLink=リンク - - -editAccountHtmlTitle=アカウントã®ç·¨é›† -personalInfoHtmlTitle=個人情報 -federatedIdentitiesHtmlTitle=連æºæ¸ˆã¿ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ -accountLogHtmlTitle=アカウントログ -changePasswordHtmlTitle=パスワード変更 -deviceActivityHtmlTitle=デãƒã‚¤ã‚¹ãƒ»ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティー -sessionsHtmlTitle=セッション -accountManagementTitle=Keycloakã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç† -authenticatorTitle=オーセンティケーター -applicationsHtmlTitle=アプリケーション -linkedAccountsHtmlTitle=リンクã•ã‚ŒãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆ - -accountManagementWelcomeMessage=Keycloakアカウント管ç†ã¸ã‚ˆã†ã“ã -personalInfoIntroMessage=基本情報を管ç†ã™ã‚‹ -accountSecurityTitle=アカウント・セキュリティー -accountSecurityIntroMessage=パスワードã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ»ã‚¢ã‚¯ã‚»ã‚¹ã‚’制御ã™ã‚‹ -applicationsIntroMessage=アカウントã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ã‚¢ãƒ—リã®ãƒ‘ーミッションを追跡ã—ã¦ç®¡ç†ã™ã‚‹ -resourceIntroMessage=ãƒãƒ¼ãƒ ãƒ¡ãƒ³ãƒãƒ¼é–“ã§ãƒªã‚½ãƒ¼ã‚¹ã‚’共有ã™ã‚‹ -passwordLastUpdateMessage=パスワードã¯æ›´æ–°ã•ã‚Œã¾ã—㟠-updatePasswordTitle=パスワードã®æ›´æ–° -updatePasswordMessageTitle=強力ãªãƒ‘スワードをé¸æŠžã—ã¦ãã ã•ã„ -updatePasswordMessage=強力ãªãƒ‘スワードã¯ã€æ•°å­—ã€æ–‡å­—ã€è¨˜å·ã‚’å«ã¿ã¾ã™ã€‚推測ãŒé›£ã—ãã€å®Ÿåœ¨ã™ã‚‹è¨€è‘‰ã«ä¼¼ã¦ãŠã‚‰ãšã€ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã ã‘ã§ä½¿ç”¨ã•ã‚Œã¦ã„ã¾ã™ã€‚ -personalSubTitle=個人情報 -personalSubMessage=ã“ã®åŸºæœ¬æƒ…報を管ç†ã—ã¦ãã ã•ã„:åã€å§“ã€ãƒ¡ãƒ¼ãƒ« - -authenticatorCode=ワンタイムコード -email=Eメール -firstName=å -givenName=å -fullName=æ°å -lastName=姓 -familyName=姓 -password=パスワード -currentPassword=ç¾åœ¨ã®ãƒ‘スワード -passwordConfirm=æ–°ã—ã„パスワード(確èªï¼‰ -passwordNew=æ–°ã—ã„パスワード -username=ユーザーå -address=ä½æ‰€ -street=番地 -locality=å¸‚åŒºç”ºæ‘ -region=都é“府県 -postal_code=éƒµä¾¿ç•ªå· -country=国 -emailVerified=確èªæ¸ˆã¿Eメール -gssDelegationCredential=GSS委譲クレデンシャル - -profileScopeConsentText=ユーザー・プロファイル -emailScopeConsentText=メールアドレス -addressScopeConsentText=アドレス -phoneScopeConsentText=é›»è©±ç•ªå· -offlineAccessScopeConsentText=オフライン・アクセス -samlRoleListScopeConsentText=ロール -rolesScopeConsentText=ユーザーロール - -role_admin=管ç†è€… -role_realm-admin=レルム管ç†è€… -role_create-realm=レルムã®ä½œæˆ -role_view-realm=レルムã®å‚ç…§ -role_view-users=ユーザーã®å‚ç…§ -role_view-applications=アプリケーションã®å‚ç…§ -role_view-clients=クライアントã®å‚ç…§ -role_view-events=イベントã®å‚ç…§ -role_view-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®å‚ç…§ -role_view-consent=åŒæ„ã®å‚ç…§ -role_manage-realm=レルムã®ç®¡ç† -role_manage-users=ユーザーã®ç®¡ç† -role_manage-applications=アプリケーションã®ç®¡ç† -role_manage-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ç®¡ç† -role_manage-clients=クライアントã®ç®¡ç† -role_manage-events=イベントã®ç®¡ç† -role_view-profile=プロファイルã®å‚ç…§ -role_manage-account=アカウントã®ç®¡ç† -role_manage-account-links=アカウントリンクã®ç®¡ç† -role_manage-consent=åŒæ„ã®ç®¡ç† -role_read-token=トークンã®å‚ç…§ -role_offline-access=オフライン・アクセス -role_uma_authorization=パーミッションã®å–å¾— -client_account=アカウント -client_account-console=アカウント・コンソール -client_security-admin-console=セキュリティー管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ« -client_admin-cli=管ç†CLI -client_realm-management=ãƒ¬ãƒ«ãƒ ç®¡ç† -client_broker=ブローカー - - -requiredFields=å¿…é ˆ -allFieldsRequired=å…¨ã¦ã®å…¥åŠ›é …ç›®ãŒå¿…é ˆ - -backToApplication=« アプリケーションã«æˆ»ã‚‹ -backTo={0}ã«æˆ»ã‚‹ - -date=日付 -event=イベント -ip=IP -client=クライアント -clients=クライアント -details=詳細 -started=開始 -lastAccess=最終アクセス -expires=æœ‰åŠ¹æœŸé™ -applications=アプリケーション - -account=アカウント -federatedIdentity=連æºæ¸ˆã¿ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ -authenticator=オーセンティケーター -device-activity=デãƒã‚¤ã‚¹ãƒ»ã‚¢ã‚¯ãƒ†ã‚£ãƒ“ティー -sessions=セッション -log=ログ - -application=アプリケーション -availableRoles=利用å¯èƒ½ãªãƒ­ãƒ¼ãƒ« -grantedPermissions=許å¯ã•ã‚ŒãŸãƒ‘ーミッション -grantedPersonalInfo=許å¯ã•ã‚ŒãŸå€‹äººæƒ…å ± -additionalGrants=追加ã®è¨±å¯ -action=アクション -inResource=in -fullAccess=フルアクセス -offlineToken=オフライン・トークン -revoke=許å¯ã®å–り消㗠- -configureAuthenticators=設定済ã¿ã®ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ -mobile=モãƒã‚¤ãƒ« -totpStep1=モãƒã‚¤ãƒ«ã«ä»¥ä¸‹ã®ã‚¢ãƒ—リケーションã®ã„ãšã‚Œã‹ã‚’インストールã—ã¦ãã ã•ã„。 -totpStep2=アプリケーションを開ãã€ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¦ãã ã•ã„。 -totpStep3=アプリケーションã§æä¾›ã•ã‚ŒãŸãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ä¿å­˜ã‚’クリックã—ã€ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を完了ã—ã¦ãã ã•ã„。 -totpStep3DeviceName=OTPデãƒã‚¤ã‚¹ã®ç®¡ç†ã«å½¹ç«‹ã¤ã‚ˆã†ãªãƒ‡ãƒã‚¤ã‚¹åを指定ã—ã¦ãã ã•ã„。 - -totpManualStep2=アプリケーションを開ãã€ã‚­ãƒ¼ã‚’入力ã—ã¦ãã ã•ã„。 -totpManualStep3=アプリケーションãŒè¨­å®šã§ãã‚‹å ´åˆã¯ã€æ¬¡ã®è¨­å®šå€¤ã‚’使用ã—ã¦ãã ã•ã„。 -totpUnableToScan=スキャンã§ãã¾ã›ã‚“ã‹ï¼Ÿ -totpScanBarcode=ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¾ã™ã‹ï¼Ÿ - -totp.totp=時間ベース -totp.hotp=カウンターベース - -totpType=タイプ -totpAlgorithm=アルゴリズム -totpDigits=æ•°å­— -totpInterval=é–“éš” -totpCounter=カウンター -totpDeviceName=デãƒã‚¤ã‚¹å - -missingUsernameMessage=ユーザーåを入力ã—ã¦ãã ã•ã„。 -missingFirstNameMessage=åを入力ã—ã¦ãã ã•ã„。 -invalidEmailMessage=無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚ -missingLastNameMessage=姓を入力ã—ã¦ãã ã•ã„。 -missingEmailMessage=Eメールを入力ã—ã¦ãã ã•ã„。 -missingPasswordMessage=パスワードを入力ã—ã¦ãã ã•ã„。 -notMatchPasswordMessage=パスワードãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 -invalidUserMessage=無効ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã€‚ - -missingTotpMessage=オーセンティケーター・コードを入力ã—ã¦ãã ã•ã„。 -missingTotpDeviceNameMessage=デãƒã‚¤ã‚¹åを指定ã—ã¦ãã ã•ã„。 -invalidPasswordExistingMessage=既存ã®ãƒ‘スワードãŒä¸æ­£ã§ã™ã€‚ -invalidPasswordConfirmMessage=æ–°ã—ã„パスワード(確èªï¼‰ã¨ä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 -invalidTotpMessage=無効ãªã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ãƒ»ã‚³ãƒ¼ãƒ‰ã§ã™ã€‚ - -usernameExistsMessage=æ—¢ã«å­˜åœ¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ã€‚ -emailExistsMessage=æ—¢ã«å­˜åœ¨ã™ã‚‹Eメールã§ã™ã€‚ - -readOnlyUserMessage=読ã¿å–り専用ã®ãŸã‚ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -readOnlyUsernameMessage=読ã¿å–り専用ã®ãŸã‚ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -readOnlyPasswordMessage=読ã¿å–り専用ã®ãŸã‚ã€ãƒ‘スワードを更新ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -successTotpMessage=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ãŒè¨­å®šã•ã‚Œã¾ã—ãŸã€‚ -successTotpRemovedMessage=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚ - -successGrantRevokedMessage=許å¯ãŒæ­£å¸¸ã«å–り消ã—ã•ã‚Œã¾ã—ãŸã€‚ - -accountUpdatedMessage=アカウントãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ -accountPasswordUpdatedMessage=パスワードãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ - -missingIdentityProviderMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãŒæŒ‡å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。 -invalidFederatedIdentityActionMessage=無効ã¾ãŸã¯å­˜åœ¨ã—ãªã„アクションã§ã™ã€‚ -identityProviderNotFoundMessage=指定ã•ã‚ŒãŸã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -federatedIdentityLinkNotActiveMessage=ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 -federatedIdentityRemovingLastProviderMessage=パスワードãŒãªã„ãŸã‚ã€æœ€å¾Œã®é€£æºæ¸ˆã¿ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãŒå‰Šé™¤ã§ãã¾ã›ã‚“。 -identityProviderRedirectErrorMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã«å¤±æ•—ã—ã¾ã—ãŸã€‚ -identityProviderRemovedMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãŒæ­£å¸¸ã«å‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚ -identityProviderAlreadyLinkedMessage={0}ã‹ã‚‰è¿”ã•ã‚ŒãŸé€£æºæ¸ˆã¿ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã¯æ—¢ã«ä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢é€£ä»˜ã‘ã•ã‚Œã¦ã„ã¾ã™ã€‚ -staleCodeAccountMessage=有効期é™åˆ‡ã‚Œã§ã™ã€‚å†åº¦ãŠè©¦ã—ãã ã•ã„。 -consentDenied=åŒæ„ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ - -accountDisabledMessage=アカウントãŒç„¡åŠ¹ã§ã™ã€‚管ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 - -accountTemporarilyDisabledMessage=アカウントãŒä¸€æ™‚çš„ã«ç„¡åŠ¹ã§ã™ã€‚管ç†è€…ã«é€£çµ¡ã™ã‚‹ã‹ã€ã—ã°ã‚‰ã時間をãŠã„ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 -invalidPasswordMinLengthMessage=無効ãªãƒ‘スワード: 最å°{0}ã®é•·ã•ãŒå¿…è¦ã§ã™ã€‚ -invalidPasswordMinLowerCaseCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®å°æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinDigitsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®æ•°å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinUpperCaseCharsMessage=無効ãªãƒ‘スワード:å°‘ãªãã¨ã‚‚{0}文字ã®å¤§æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinSpecialCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordNotUsernameMessage=無効ãªãƒ‘スワード: ユーザーåã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordRegexPatternMessage=無効ãªãƒ‘スワード: æ­£è¦è¡¨ç¾ãƒ‘ターンã¨ä¸€è‡´ã—ã¾ã›ã‚“。 -invalidPasswordHistoryMessage=無効ãªãƒ‘スワード: 最近ã®{0}パスワードã®ã„ãšã‚Œã‹ã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordBlacklistedMessage=無効ãªãƒ‘スワード: パスワードãŒãƒ–ラックリストã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordGenericMessage=無効ãªãƒ‘スワード: æ–°ã—ã„パスワードã¯ãƒ‘スワード・ãƒãƒªã‚·ãƒ¼ã¨ä¸€è‡´ã—ã¾ã›ã‚“。 - -# Authorization -myResources=マイリソース -myResourcesSub=マイリソース -doDeny=æ‹’å¦ -doRevoke=å–り消㗠-doApprove=æ‰¿èª -doRemoveSharing=共有ã®å‰Šé™¤ -doRemoveRequest=è¦æ±‚ã®å‰Šé™¤ -peopleAccessResource=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãる人 -resourceManagedPolicies=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãƒ‘ーミッション -resourceNoPermissionsGrantingAccess=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹æ¨©é™ã¯ã‚ã‚Šã¾ã›ã‚“ -anyAction=ä»»æ„ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ -description=説明 -name=åå‰ -scopes=スコープ -resource=リソース -user=ユーザー -peopleSharingThisResource=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’共有ã—ã¦ã„る人 -shareWithOthers=他人ã¨å…±æœ‰ -needMyApproval=承èªãŒå¿…è¦ -requestsWaitingApproval=承èªå¾…ã¡ã®è¦æ±‚ -icon=アイコン -requestor=è¦æ±‚者 -owner=オーナー -resourcesSharedWithMe=共有ã—ã¦ã„るリソース -permissionRequestion=パーミッションã®è¦æ±‚ -permission=パーミッション -shares=共有(複数) -notBeingShared=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¯å…±æœ‰ã•ã‚Œã¦ã„ã¾ã›ã‚“。 -notHaveAnyResource=リソースãŒã‚ã‚Šã¾ã›ã‚“。 -noResourcesSharedWithYou=共有ã—ã¦ã„るリソースã¯ã‚ã‚Šã¾ã›ã‚“ -havePermissionRequestsWaitingForApproval=承èªã‚’å¾…ã£ã¦ã„ã‚‹{0}個ã®ãƒ‘ーミッションã®è¦æ±‚ãŒã‚ã‚Šã¾ã™ã€‚ -clickHereForDetails=詳細ã¯ã“ã¡ã‚‰ã‚’クリックã—ã¦ãã ã•ã„。 -resourceIsNotBeingShared=リソースã¯å…±æœ‰ã•ã‚Œã¦ã„ã¾ã›ã‚“。 - -# Applications -applicationName=åå‰ -applicationType=アプリケーション・タイプ -applicationInUse=使用中ã®ã‚¢ãƒ—リケーションã®ã¿ -clearAllFilter=ã™ã¹ã¦ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ã‚’クリア -activeFilters=アクティブãªãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ -filterByName=åå‰ã§ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°... -allApps=ã™ã¹ã¦ã®ã‚¢ãƒ—リケーション -internalApps=内部アプリケーション -thirdpartyApps=サードパーティーã®ã‚¢ãƒ—リケーション -appResults=çµæžœ -clientNotFoundMessage=クライアントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 - -# Linked account -authorizedProvider=èªå¯æ¸ˆã¿ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ -authorizedProviderMessage=アカウントã«ãƒªãƒ³ã‚¯ã•ã‚ŒãŸèªå¯æ¸ˆã¿ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ -identityProvider=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ -identityProviderMessage=アカウントã¨è¨­å®šã—ãŸã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’リンクã™ã‚‹ã«ã¯ -socialLogin=ソーシャル・ログイン -userDefined=ユーザー定義 -removeAccess=アクセス権ã®å‰Šé™¤ -removeAccessMessage=ã“ã®ã‚¢ãƒ—リ・アカウントを使用ã™ã‚‹å ´åˆã¯ã€ã‚¢ã‚¯ã‚»ã‚¹æ¨©ã‚’å†åº¦ä»˜ä¸Žã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ - -#Authenticator -authenticatorStatusMessage=2è¦ç´ èªè¨¼ã¯ç¾åœ¨ -authenticatorFinishSetUpTitle=ã‚ãªãŸã®2è¦ç´ èªè¨¼ -authenticatorFinishSetUpMessage=Keycloakアカウントã«ã‚µã‚¤ãƒ³ã‚¤ãƒ³ã™ã‚‹ãŸã³ã«ã€2è¦ç´ èªè¨¼ã‚³ãƒ¼ãƒ‰ã‚’入力ã™ã‚‹ã‚ˆã†ã«æ±‚ã‚られã¾ã™ã€‚ -authenticatorSubTitle=2è¦ç´ èªè¨¼ã‚’設定ã™ã‚‹ -authenticatorSubMessage=アカウントã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚’強化ã™ã‚‹ã«ã¯ã€åˆ©ç”¨å¯èƒ½ãª2è¦ç´ èªè¨¼ã®æ–¹å¼ã®ã†ã¡å°‘ãªãã¨ã‚‚1ã¤ã‚’有効ã«ã—ã¾ã™ã€‚ -authenticatorMobileTitle=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ -authenticatorMobileMessage=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã‚’使用ã—ã¦ã€2è¦ç´ èªè¨¼ã¨ã—ã¦ç¢ºèªã‚³ãƒ¼ãƒ‰ã‚’å–å¾—ã—ã¾ã™ã€‚ -authenticatorMobileFinishSetUpMessage=オーセンティケーターã¯ã‚ãªãŸã®æºå¸¯é›»è©±ã«ãƒã‚¤ãƒ³ãƒ‰ã•ã‚Œã¦ã„ã¾ã™ã€‚ -authenticatorActionSetup=セットアップ -authenticatorSMSTitle=SMSコード -authenticatorSMSMessage=Keycloakã¯ã€2è¦ç´ èªè¨¼ã¨ã—ã¦ç¢ºèªã‚³ãƒ¼ãƒ‰ã‚’æºå¸¯é›»è©±ã«é€ä¿¡ã—ã¾ã™ã€‚ -authenticatorSMSFinishSetUpMessage=テキスト・メッセージãŒæ¬¡ã®é›»è©±ç•ªå·å®›ã«é€ä¿¡ã•ã‚Œã¾ã™ï¼š -authenticatorDefaultStatus=デフォルト -authenticatorChangePhone=電話番å·ã®å¤‰æ›´ -authenticatorBackupCodesTitle=ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コード -authenticatorBackupCodesMessage=8æ¡ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードã®å…¥æ‰‹ -authenticatorBackupCodesFinishSetUpMessage=ã“ã®æ™‚点ã§12個ã®ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードãŒç”Ÿæˆã•ã‚Œã¾ã—ãŸã€‚ãã‚Œãžã‚Œä¸€åº¦ã ã‘使用ã§ãã¾ã™ã€‚ - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— -smscodeIntroMessage=電話番å·ã‚’入力ã™ã‚‹ã¨ã€ç¢ºèªã‚³ãƒ¼ãƒ‰ãŒã‚ãªãŸã®é›»è©±ã«é€ä¿¡ã•ã‚Œã¾ã™ã€‚ -mobileSetupStep1=æºå¸¯é›»è©±ã«ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ãƒ»ã‚¢ãƒ—リケーションをインストールã—ã¾ã™ã€‚ã“ã“ã«ãƒªã‚¹ãƒˆã•ã‚Œã¦ã„るアプリケーションãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã™ã€‚ -mobileSetupStep2=アプリケーションを開ãã€ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¦ãã ã•ã„。 -mobileSetupStep3=アプリケーションã‹ã‚‰æä¾›ã•ã‚ŒãŸãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã€ä¿å­˜ã‚’クリックã—ã¦ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を終了ã—ã¾ã™ã€‚ -scanBarCode=ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¾ã™ã‹ï¼Ÿ -enterBarCode=ワンタイムコードを入力ã—ã¦ãã ã•ã„ -doCopy=コピー -doFinish=終了 - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMSコードã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— -chooseYourCountry=国をé¸ã‚“ã§ãã ã•ã„ -enterYourPhoneNumber=電話番å·ã‚’入力ã—ã¦ãã ã•ã„ -sendVerficationCode=確èªã‚³ãƒ¼ãƒ‰ã®é€ä¿¡ -enterYourVerficationCode=確èªã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„ - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— -backupcodesIntroMessage=æºå¸¯é›»è©±ã«ã‚¢ã‚¯ã‚»ã‚¹ã§ããªã„å ´åˆã§ã‚‚ã€ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードを使用ã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã™ã€‚ã©ã“ã‹å®‰å…¨ã§ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ãªå ´æ‰€ã«ä¿ç®¡ã—ã¦ãã ã•ã„。 -realmName=レルム -doDownload=ダウンロード -doPrint=å°åˆ· -backupCodesTips-1=å„ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードã¯1回使用ã§ãã¾ã™ã€‚ -backupCodesTips-2=ã“れらã®ã‚³ãƒ¼ãƒ‰ã¯ã“ã®æ—¥ã«ç”Ÿæˆã•ã‚Œã¾ã—ãŸï¼š -generateNewBackupCodes=æ–°ã—ã„ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードを生æˆã™ã‚‹ -backupCodesTips-3=æ–°ã—ã„ãƒãƒƒã‚¯ã‚¢ãƒƒãƒ—・コードを生æˆã™ã‚‹ã¨ã€ç¾åœ¨ã®ã‚³ãƒ¼ãƒ‰ã¯æ©Ÿèƒ½ã—ãªããªã‚Šã¾ã™ã€‚ -backtoAuthenticatorPage=オーセンティケーター・ページã«æˆ»ã‚‹ - - -#Resources -resources=リソース -sharedwithMe=ç§ã¨å…±æœ‰ -share=共有 -sharedwith=共有 -accessPermissions=アクセス・パーミッション -permissionRequests=パーミッションã®è¦æ±‚ -approve=æ‰¿èª -approveAll=ã™ã¹ã¦æ‰¿èª -people=人 -perPage=1ページã‚ãŸã‚Š -currentPage=ç¾åœ¨ã®ãƒšãƒ¼ã‚¸ -sharetheResource=リソースã®å…±æœ‰ -group=グループ -selectPermission=パーミッションをé¸æŠž -addPeople=ã‚ãªãŸã®ãƒªã‚½ãƒ¼ã‚¹ã‚’共有ã™ã‚‹äººã‚’追加 -addTeam=ã‚ãªãŸã®ãƒªã‚½ãƒ¼ã‚¹ã‚’共有ã™ã‚‹ãƒãƒ¼ãƒ ã‚’追加 -myPermissions=ç§ã®ãƒ‘ーミッション -waitingforApproval=承èªå¾…ã¡ -anyPermission=ä»»æ„ã®ãƒ‘ーミッション - -# Openshift messages -openshift.scope.user_info=ユーザー情報 -openshift.scope.user_check-access=ユーザーアクセス情報 -openshift.scope.user_full=フルアクセス -openshift.scope.list-projects=プロジェクトã®ä¸€è¦§è¡¨ç¤º \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_lt.properties b/deps/keycloak/themes/base/account/messages/messages_lt.properties deleted file mode 100644 index d6e40169d..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_lt.properties +++ /dev/null @@ -1,154 +0,0 @@ -# encoding: utf-8 -doSave=Saugoti -doCancel=AtÅ¡aukti - -doLogOutAllSessions=Atjungti visas sesijas -doRemove=Å alinti -doAdd=PridÄ—ti -doSignOut=Atsijungti - -editAccountHtmlTitle=Redaguoti paskyrÄ… -federatedIdentitiesHtmlTitle=Susietos paskyros -accountLogHtmlTitle=Paskyros žurnalas -changePasswordHtmlTitle=Keisti slaptažodį -sessionsHtmlTitle=Prisijungimo sesijos -accountManagementTitle=Keycloak Naudotojų Administravimas -authenticatorTitle=Autentifikatorius -applicationsHtmlTitle=Programos - -authenticatorCode=Vienkartinis kodas -email=El. paÅ¡tas -firstName=Vardas -givenName=PavardÄ— -fullName=Pilnas vardas -lastName=PavardÄ— -familyName=PavardÄ— -password=Slaptažodis -passwordConfirm=Pakartotas slaptažodis -passwordNew=Naujas slaptažodis -username=Naudotojo vardas -address=Adresas -street=GatvÄ— -locality=Miestas arba vietovÄ— -region=Rajonas -postal_code=PaÅ¡to kodas -country=Å alis -emailVerified=El. paÅ¡to adresas patvirtintas -gssDelegationCredential=GSS prisijungimo duomenų delegavimas - -role_admin=Administratorius -role_realm-admin=Srities administravimas -role_create-realm=Kurti sritį -role_view-realm=PeržiÅ«rÄ—ti sritį -role_view-users=PeržiÅ«rÄ—ti naudotojus -role_view-applications=PeržiÅ«rÄ—ti programas -role_view-clients=PeržiÅ«rÄ—ti klientines programas -role_view-events=PeržiÅ«rÄ—ti įvykių žurnalÄ… -role_view-identity-providers=PeržiÅ«rÄ—ti tapatybÄ—s teikÄ—jus -role_manage-realm=Valdyti sritis -role_manage-users=Valdyti naudotojus -role_manage-applications=Valdyti programas -role_manage-identity-providers=Valdyti tapatybÄ—s teikÄ—jus -role_manage-clients=Valdyti programas -role_manage-events=Valdyti įvykius -role_view-profile=PeržiÅ«rÄ—ti paskyrÄ… -role_manage-account=Valdyti paskyrÄ… -role_read-token=Skaityti prieigos rakÅ¡Ä… -role_offline-access=Darbas neprisijungus -role_uma_authorization=Ä®gauti UMA autorizavimo teises -client_account=Paskyra -client_security-admin-console=Saugumo administravimo konsolÄ— -client_admin-cli=Administravimo CLI -client_realm-management=Srities valdymas -client_broker=Tarpininkas - - -requiredFields=Privalomi laukai -allFieldsRequired=Visi laukai yra privalomi - -backToApplication=« Grįžti į programÄ… -backTo=Atgal į {0} - -date=Data -event=Ä®vykis -ip=IP -client=Klientas -clients=Klientai -details=Detaliau -started=SukÅ«rimo laikas -lastAccess=VÄ—liausia prieiga -expires=Galioja iki -applications=Programos - -account=Paskyra -federatedIdentity=Susieta tapatybÄ— -authenticator=Autentifikatorius -sessions=Sesijos -log=Ä®vykiai - -application=Programa -availablePermissions=Galimos teisÄ—s -grantedPermissions=Ä®galintos teisÄ—s -grantedPersonalInfo=Ä®galinta asmeninÄ— informacija -additionalGrants=Papildomi įgaliojimai -action=Veiksmas -inResource=yra -fullAccess=Pilna prieiga -offlineToken=Režimo neprisijungus raktas (token) -revoke=AtÅ¡aukti įgaliojimÄ… - -configureAuthenticators=SukonfigÅ«ruotas autentifikatorius -mobile=Mobilus -totpStep1=Ä®diekite FreeOTP arba Google Authenticator savo įrenginyje. ProgramÄ—lÄ—s prieinamos Google Play ir Apple App Store. -totpStep2=Atidarykite programÄ—lÄ™ ir nuskenuokite barkodÄ… arba įveskite kodÄ…. -totpStep3=Ä®veskite programÄ—lÄ—je sugeneruotÄ… vienÄ… kartÄ… galiojantį kodÄ… ir paspauskite Saugoti norÄ—dami prisijungti. - -missingUsernameMessage=PraÅ¡ome įvesti naudotojo vardÄ…. -missingFirstNameMessage=PraÅ¡ome įvesti vardÄ…. -invalidEmailMessage=Neteisingas el. paÅ¡to adresas. -missingLastNameMessage=PraÅ¡ome įvesti pavardÄ™. -missingEmailMessage=PraÅ¡ome įvesti el. paÅ¡to adresÄ…. -missingPasswordMessage=PraÅ¡ome įvesti slaptažodį. -notMatchPasswordMessage=Slaptažodžiai nesutampa. - -missingTotpMessage=PraÅ¡ome įvesti autentifikacijos kodÄ…. -invalidPasswordExistingMessage=Neteisingas dabartinis slaptažodis. -invalidPasswordConfirmMessage=Pakartotas slaptažodis nesutampa. -invalidTotpMessage=Neteisingas autentifikacijos kodas. - -usernameExistsMessage=Toks naudotojas jau egzistuoja. -emailExistsMessage=El. paÅ¡to adresas jau egzistuoja. - -readOnlyUserMessage=Tik skaitymui sukonfigÅ«ruotos paskyros duomenų atnaujinti neleidžiama. -readOnlyPasswordMessage=Tik skaitymui sukonfigÅ«ruotos paskyros slaptažodžio atnaujinti neleidžiama. - -successTotpMessage=Mobilus autentifikatorius sukonfigÅ«ruotas. -successTotpRemovedMessage=Mobilus autentifikatorius paÅ¡alintas. - -successGrantRevokedMessage=Ä®galinimas paÅ¡alintas sÄ—kmingai. - -accountUpdatedMessage=JÅ«sų paskyros duomenys sÄ—kmingai atnaujinti. -accountPasswordUpdatedMessage=JÅ«sų paskyros slaptažodis pakeistas. - -missingIdentityProviderMessage=Nenurodytas tapatybÄ—s teikÄ—jas. -invalidFederatedIdentityActionMessage=Neteisingas arba nežinomas veiksmas. -identityProviderNotFoundMessage=Nurodytas tapatybÄ—s teikÄ—jas nerastas. -federatedIdentityLinkNotActiveMessage=Nurodyta susieta tapatybÄ— neaktyvi. -federatedIdentityRemovingLastProviderMessage=JÅ«s negalite paÅ¡alinti paskutinio tapatybÄ—s teikÄ—jo sÄ…sajos, nes JÅ«s neturite nusistatÄ™ paskyros slaptažodžio. -identityProviderRedirectErrorMessage=Klaida nukreipiant į tapatybÄ—s teikÄ—jo puslapį. -identityProviderRemovedMessage=TapatybÄ—s teikÄ—jas sÄ—kmingai paÅ¡alintas. -identityProviderAlreadyLinkedMessage=Susieta tapatybÄ— iÅ¡ {0} jau susieta su kita paskyra. -staleCodeAccountMessage=Puslapio galiojimas baigÄ—si. Bandykite dar kartÄ…. -consentDenied=Prieiga draudžiama. - -accountDisabledMessage=Paskyros galiojimas sustabdytas, kreipkitÄ—s į administratorių. - -accountTemporarilyDisabledMessage=Paskyros galiojimas laikinai sustabdytas. KreipkitÄ—s į administratorių arba pabandykite vÄ—liau. -invalidPasswordMinLengthMessage=Per trumpas slaptažodis: mažiausias ilgis {0}. -invalidPasswordMinLowerCaseCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} mažąjÄ… raidÄ™. -invalidPasswordMinDigitsMessage=Neteisingas slaptažodis: privaloma įvesti {0} skaitmenį. -invalidPasswordMinUpperCaseCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} didžiÄ…jÄ… raidÄ™. -invalidPasswordMinSpecialCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} specialų simbolį. -invalidPasswordNotUsernameMessage=Neteisingas slaptažodis: slaptažodis negali sutapti su naudotojo vardu. -invalidPasswordRegexPatternMessage=Neteisingas slaptažodis: slaptažodis netenkina regex taisyklÄ—s(ių). -invalidPasswordHistoryMessage=Neteisingas slaptažodis: slaptažodis negali sutapti su prieÅ¡ tai buvusiais {0} slaptažodžiais. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_nl.properties b/deps/keycloak/themes/base/account/messages/messages_nl.properties deleted file mode 100644 index 80e5503c7..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_nl.properties +++ /dev/null @@ -1,133 +0,0 @@ -doSave=Opslaan -doCancel=Annuleer -doLogOutAllSessions=Alle sessies uitloggen -doRemove=Verwijder -doAdd=Voeg toe -doSignOut=Afmelden -editAccountHtmlTitle=Bewerk account -federatedIdentitiesHtmlTitle=Federated Identities -accountLogHtmlTitle=Account log -changePasswordHtmlTitle=Verander wachtwoord -sessionsHtmlTitle=Sessies -accountManagementTitle=Keycloak Accountbeheer -authenticatorTitle=Authenticator -applicationsHtmlTitle=Toepassingen -authenticatorCode=Eenmalige code -email=E-mailadres -firstName=Voornaam -givenName=Voornaam -fullName=Volledige naam -lastName=Achternaam -familyName=Achternaam -password=Wachtwoord -passwordConfirm=Bevestiging -passwordNew=Nieuw Wachtwoord -username=Gebruikersnaam -address=Adres -street=Straat -locality=Stad of plaats -region=Staat, provincie of regio -postal_code=Postcode -country=Land -emailVerified=E-mailadres geverifieerd -gssDelegationCredential=GSS gedelegeerde aanmeldgegevens -role_admin=Beheer -role_realm-admin=Realmbeheer -role_create-realm=Creëer realm -role_view-realm=Bekijk realm -role_view-users=Bekijk gebruikers -role_view-applications=Bekijk toepassingen -role_view-clients=Bekijk clients -role_view-events=Bekijk gebeurtenissen -role_view-identity-providers=Bekijk identity providers -role_manage-realm=Beheer realm -role_manage-users=Beheer gebruikers -role_manage-applications=Beheer toepassingen -role_manage-identity-providers=Beheer identity providers -role_manage-clients=Beheer clients -role_manage-events=Beheer gebeurtenissen -role_view-profile=Bekijk profiel -role_manage-account=Beheer account -role_manage-account-links=Beheer accountkoppelingen -role_read-token=Lees token -role_offline-access=Offline toegang -role_uma_authorization=Verkrijg UMA rechten -client_account=Account -client_security-admin-console=Console Veligheidsbeheer -client_admin-cli=Beheer CLI -client_realm-management=Realmbeheer -client_broker=Broker -requiredFields=Verplichte velden -allFieldsRequired=Alle velden verplicht -backToApplication=« Terug naar toepassing -backTo=Terug naar {0} -date=Datum -event=Gebeurtenis -ip=IP -client=Client -clients=Clients -details=Details -started=Gestart -lastAccess=Laatste toegang -expires=Vervalt -applications=Toepassingen -account=Account -federatedIdentity=Federated Identity -authenticator=Authenticator -sessions=Sessies -log=Log -application=Toepassing -availablePermissions=Beschikbare rechten -grantedPermissions=Gegunde rechten -grantedPersonalInfo=Gegunde Persoonsgegevens -additionalGrants=Verdere vergunningen -action=Actie -inResource=in -fullAccess=Volledige toegang -offlineToken=Offline Token -revoke=Vergunning intrekken -configureAuthenticators=Ingestelde authenticators -mobile=Mobiel nummer -totpStep1=Installeer een van de onderstaande applicaties op uw mobiele apparaat: -totpStep2=Open de toepassing en scan de QR-code of voer de sleutel in. -totpStep3=Voer de door de toepassing gegeven eenmalige code in en klik op Opslaan om de configuratie af te ronden. -missingUsernameMessage=Gebruikersnaam ontbreekt. -missingFirstNameMessage=Voornaam onbreekt. -invalidEmailMessage=Ongeldig e-mailadres. -missingLastNameMessage=Achternaam ontbreekt. -missingEmailMessage=E-mailadres ontbreekt. -missingPasswordMessage=Wachtwoord ontbreekt. -notMatchPasswordMessage=Wachtwoorden komen niet overeen. -missingTotpMessage=Authenticatiecode ontbreekt. -invalidPasswordExistingMessage=Ongeldig bestaand wachtwoord. -invalidPasswordConfirmMessage=Wachtwoordbevestiging komt niet overeen. -invalidTotpMessage=Ongeldige authenticatiecode. -emailExistsMessage=E-mailadres bestaat reeds. -readOnlyUserMessage=U kunt uw account niet bijwerken aangezien het account alleen-lezen is. -readOnlyPasswordMessage=U kunt uw wachtwoord niet wijzigen omdat uw account alleen-lezen is. -successTotpMessage=Mobiele authenticator geconfigureerd. -successTotpRemovedMessage=Mobiele authenticator verwijderd. -successGrantRevokedMessage=Vergunning succesvol ingetrokken -accountUpdatedMessage=Uw account is gewijzigd. -accountPasswordUpdatedMessage=Uw wachtwoord is gewijzigd. -missingIdentityProviderMessage=Geen identity provider aangegeven. -invalidFederatedIdentityActionMessage=Ongeldige of ontbrekende actie op federated identity. -identityProviderNotFoundMessage=Gespecificeerde identity provider niet gevonden. -federatedIdentityLinkNotActiveMessage=Deze federated identity is niet langer geldig. -federatedIdentityRemovingLastProviderMessage=U kunt de laatste federated identity provider niet verwijderen aangezien u dan niet langer zou kunnen inloggen. -identityProviderRedirectErrorMessage=Kon niet herverwijzen naar identity provider. -identityProviderRemovedMessage=Identity provider met succes verwijderd. -identityProviderAlreadyLinkedMessage=Door {0} teruggegeven federated identity is al gekoppeld aan een andere gebruiker. -staleCodeAccountMessage=De pagina is verlopen. Probeer het nogmaals. -consentDenied=Toestemming geweigerd -accountDisabledMessage=Account is gedeactiveerd. Contacteer de beheerder. -accountTemporarilyDisabledMessage=Account is tijdelijk deactiveerd, neem contact op met de beheerder of probeer het later opnieuw. -invalidPasswordMinLengthMessage=Ongeldig wachtwoord: de minimale lengte is {0} karakters. -invalidPasswordMinLowerCaseCharsMessage=Ongeldig wachtwoord: het moet minstens {0} kleine letters bevatten. -invalidPasswordMinDigitsMessage=Ongeldig wachtwoord: het moet minstens {0} getallen bevatten. -invalidPasswordMinUpperCaseCharsMessage=Ongeldig wachtwoord: het moet minstens {0} hoofdletters bevatten. -invalidPasswordMinSpecialCharsMessage=Ongeldig wachtwoord: het moet minstens {0} speciale karakters bevatten. -invalidPasswordNotUsernameMessage=Ongeldig wachtwoord: het mag niet overeenkomen met de gebruikersnaam. -invalidPasswordRegexPatternMessage=Ongeldig wachtwoord: het voldoet niet aan het door de beheerder ingestelde patroon. -invalidPasswordHistoryMessage=Ongeldig wachtwoord: het mag niet overeen komen met een van de laatste {0} wachtwoorden. -invalidPasswordGenericMessage=Ongeldig wachtwoord: het nieuwe wachtwoord voldoet niet aan het wachtwoordbeleid. diff --git a/deps/keycloak/themes/base/account/messages/messages_no.properties b/deps/keycloak/themes/base/account/messages/messages_no.properties deleted file mode 100644 index 49b7b5818..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_no.properties +++ /dev/null @@ -1,152 +0,0 @@ -doSave=Lagre -doCancel=Avbryt -doLogOutAllSessions=Logg ut av alle sesjoner -doRemove=Fjern -doAdd=Legg til -doSignOut=Logg ut - -editAccountHtmlTitle=Rediger konto -federatedIdentitiesHtmlTitle=Federerte identiteter -accountLogHtmlTitle=Kontologg -changePasswordHtmlTitle=Endre passord -sessionsHtmlTitle=Sesjoner -accountManagementTitle=Keycloak kontoadministrasjon -authenticatorTitle=Autentikator -applicationsHtmlTitle=Applikasjoner - -authenticatorCode=Engangskode -email=E-post -firstName=Fornavn -givenName=Fornavn -fullName=Fullt navn -lastName=Etternavn -familyName=Etternavn -password=Passord -passwordConfirm=Bekreftelse -passwordNew=Nytt passord -username=Brukernavn -address=Adresse -street=Gate-/veinavn + husnummer -locality=By -region=Fylke -postal_code=Postnummer -country=Land -emailVerified=E-post bekreftet -gssDelegationCredential=GSS legitimasjonsdelegering - -role_admin=Administrator -role_realm-admin=Administrator for sikkerhetsdomene -role_create-realm=Opprette sikkerhetsdomene -role_view-realm=Se sikkerhetsdomene -role_view-users=Se brukere -role_view-applications=Se applikasjoner -role_view-clients=Se klienter -role_view-events=Se hendelser -role_view-identity-providers=Se identitetsleverand\u00F8rer -role_manage-realm=Administrere sikkerhetsdomene -role_manage-users=Administrere brukere -role_manage-applications=Administrere applikasjoner -role_manage-identity-providers=Administrere identitetsleverand\u00F8rer -role_manage-clients=Administrere klienter -role_manage-events=Administrere hendelser -role_view-profile=Se profil -role_manage-account=Administrere konto -role_read-token=Lese token -role_offline-access=Frakoblet tilgang -role_uma_authorization=Skaffe tillatelser -client_account=Konto -client_security-admin-console=Sikkerhetsadministrasjonskonsoll -client_admin-cli=Kommandolinje-grensesnitt for administrator -client_realm-management=Sikkerhetsdomene-administrasjon -client_broker=Broker - - -requiredFields=Obligatoriske felt -allFieldsRequired=Alle felt m\u00E5 fylles ut - -backToApplication=« Tilbake til applikasjonen -backTo=Tilbake til {0} - -date=Dato -event=Hendelse -ip=IP -client=Klient -clients=Klienter -details=Detaljer -started=Startet -lastAccess=Sist benyttet -expires=Utl\u00F8per -applications=Applikasjoner - -account=Konto -federatedIdentity=Federert identitet -authenticator=Autentikator -sessions=Sesjoner -log=Logg - -application=Applikasjon -availablePermissions=Tilgjengelige rettigheter -grantedPermissions=Innvilgede rettigheter -grantedPersonalInfo=Innvilget personlig informasjon -additionalGrants=Ekstra rettigheter -action=Handling -inResource=i -fullAccess=Full tilgang -offlineToken=Offline token -revoke=Opphev rettighet - -configureAuthenticators=Konfigurerte autentikatorer -mobile=Mobiltelefon -totpStep1=Installer ett av f\u00F8lgende programmer p\u00E5 mobilen din. -totpStep2=\u00C5pne applikasjonen og skann strekkoden eller skriv inn koden. -totpStep3=Skriv inn engangskoden gitt av applikasjonen og klikk Lagre for \u00E5 fullf\u00F8re. - -missingUsernameMessage=Vennligst oppgi brukernavn. -missingFirstNameMessage=Vennligst oppgi fornavn. -invalidEmailMessage=Ugyldig e-postadresse. -missingLastNameMessage=Vennligst oppgi etternavn. -missingEmailMessage=Vennligst oppgi e-postadresse. -missingPasswordMessage=Vennligst oppgi passord. -notMatchPasswordMessage=Passordene er ikke like. - -missingTotpMessage=Vennligst oppgi engangskode. -invalidPasswordExistingMessage=Ugyldig eksisterende passord. -invalidPasswordConfirmMessage=Passordene er ikke like. -invalidTotpMessage=Ugyldig engangskode. - -usernameExistsMessage=Brukernavnet finnes allerede. -emailExistsMessage=E-postadressen finnes allerede. - -readOnlyUserMessage=Du kan ikke oppdatere kontoen din ettersom den er skrivebeskyttet. -readOnlyPasswordMessage=Du kan ikke oppdatere passordet ditt ettersom kontoen din er skrivebeskyttet. - -successTotpMessage=Autentikator for mobiltelefon er konfigurert. -successTotpRemovedMessage=Autentikator for mobiltelefon er fjernet. - -successGrantRevokedMessage=Vellykket oppheving av rettighet. - -accountUpdatedMessage=Kontoen din har blitt oppdatert. -accountPasswordUpdatedMessage=Ditt passord har blitt oppdatert. - -missingIdentityProviderMessage=Identitetsleverand\u00F8r er ikke spesifisert. -invalidFederatedIdentityActionMessage=Ugyldig eller manglende handling. -identityProviderNotFoundMessage=Spesifisert identitetsleverand\u00F8r ikke funnet. -federatedIdentityLinkNotActiveMessage=Denne identiteten er ikke lenger aktiv. -federatedIdentityRemovingLastProviderMessage=Du kan ikke fjerne siste federerte identitet ettersom du ikke har et passord. -identityProviderRedirectErrorMessage=Redirect til identitetsleverand\u00F8r feilet. -identityProviderRemovedMessage=Fjerning av identitetsleverand\u00F8r var vellykket. -identityProviderAlreadyLinkedMessage=Federert identitet returnert av {0} er allerede koblet til en annen bruker. -staleCodeAccountMessage=Siden har utl\u00F8pt. Vennligst pr\u00F8v en gang til. -consentDenied=Samtykke avsl\u00E5tt. - -accountDisabledMessage=Konto er deaktivert, kontakt administrator. - -accountTemporarilyDisabledMessage=Konto er midlertidig deaktivert, kontakt administrator eller pr\u00F8v igjen senere. -invalidPasswordMinLengthMessage=Ugyldig passord: minimum lengde {0}. -invalidPasswordMinLowerCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} sm\u00E5 bokstaver. -invalidPasswordMinDigitsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} sifre. -invalidPasswordMinUpperCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} store bokstaver. -invalidPasswordMinSpecialCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} spesialtegn. -invalidPasswordNotUsernameMessage=Ugyldig passord: kan ikke v\u00E6re likt brukernavn. -invalidPasswordRegexPatternMessage=Ugyldig passord: tilfredsstiller ikke kravene for passord-m\u00F8nster. -invalidPasswordHistoryMessage=Ugyldig passord: kan ikke v\u00E6re likt noen av de {0} foreg\u00E5ende passordene. diff --git a/deps/keycloak/themes/base/account/messages/messages_pl.properties b/deps/keycloak/themes/base/account/messages/messages_pl.properties deleted file mode 100644 index 3d6d9b483..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_pl.properties +++ /dev/null @@ -1,248 +0,0 @@ -# encoding: UTF-8 -doSave=Zapisz -doCancel=Anuluj -doLogOutAllSessions=Wyloguj wszystkie sesje -doRemove=UsuÅ„ -doAdd=Dodaj -doSignOut=Wyloguj -doLogIn=Logowanie -doLink=Link - - -editAccountHtmlTitle=Edycja konta -personalInfoHtmlTitle=Dane osobiste -federatedIdentitiesHtmlTitle=PoÅ‚Ä…czone tożsamoÅ›ci -accountLogHtmlTitle=Dziennik konta -changePasswordHtmlTitle=ZmieÅ„ hasÅ‚o -deviceActivityHtmlTitle=Aktywność urzÄ…dzeÅ„ -sessionsHtmlTitle=Sesje -accountManagementTitle=ZarzÄ…dzanie kontem -authenticatorTitle=Uwierzytelnienie dwuetapowe -applicationsHtmlTitle=Aplikacje -linkedAccountsHtmlTitle=PoÅ‚Ä…czone konta - -accountManagementWelcomeMessage=Witamy w zarzÄ…dzaniu kontem -personalInfoIntroMessage=ZarzÄ…dzaj informacjami podstawowymi o sobie -accountSecurityTitle=BezpieczeÅ„stwo Konta -accountSecurityIntroMessage=Kontroluj swoje hasÅ‚o i dostÄ™p -applicationsIntroMessage=Åšledź i zarzÄ…dzaj uprawnieniami aplikacji do twojego konta -resourceIntroMessage=UdostÄ™pnij swoje zasoby czÅ‚onkom zespoÅ‚u -passwordLastUpdateMessage=Twoje hasÅ‚o zostaÅ‚o zaktualizowane -updatePasswordTitle=Aktualizuj hasÅ‚o -updatePasswordMessageTitle=Miej pewność, że wybraÅ‚eÅ› silne hasÅ‚o -updatePasswordMessage=Silne hasÅ‚o zawiera mieszaninÄ™ cyfr, liter i symboli. Nie używaj zwykÅ‚ych słów oraz haseÅ‚ używanych na innych kontach. -personalSubTitle=Twoje dane osobiste -personalSubMessage=ZarzÄ…dzaj informacjami podstawowymi: twoim imieniem, nazwiskiem oraz emailem - -authenticatorCode=Kod jednorazowy -email=Email -firstName=ImiÄ™ -givenName=ImiÄ™ -fullName=PeÅ‚na nazwa -lastName=Nazwisko -familyName=Nazwisko rodowe -password=HasÅ‚o -currentPassword=Aktualne hasÅ‚o -passwordConfirm=Potwierdzenie -passwordNew=Nowe hasÅ‚o -username=Nazwa użytkownika -address=Adres -street=Ulica -locality=Miejscowość -region=Stan, województwo, region -postal_code=Kod pocztowy -country=Kraj -emailVerified=Email zweryfikowany -website=Strona internetowa -phoneNumber=Nr telefonu -phoneNumberVerified=Nr telefonu zweryfikowany -gender=PÅ‚eć -birthday=Data urodzenia -zoneinfo=Strefa czasowa -gssDelegationCredential=PoÅ›wiadczenia delegowane GSS - -profileScopeConsentText=Profil użytkownika -emailScopeConsentText=Adres email -addressScopeConsentText=Adres -phoneScopeConsentText=Telefon -offlineAccessScopeConsentText=DostÄ™p offline -samlRoleListScopeConsentText=Moje role -rolesScopeConsentText=Role użytkownika - -role_admin=Admin -role_realm-admin=Strefa Admin -role_create-realm=Utwórz strefÄ™ -role_view-realm=PrzeglÄ…daj strefy -role_view-users=PrzeglÄ…daj użytkowników -role_view-applications=PrzeglÄ…daj aplikacje -role_view-clients=PrzeglÄ…daj klientów -role_view-events=PrzeglÄ…daj zdarzenia -role_view-identity-providers=PrzeglÄ…daj dostawców tożsamoÅ›ci -role_view-consent=PrzeglÄ…daj zgody -role_manage-realm=ZarzÄ…dzaj strefami -role_manage-users=ZarzÄ…dzaj użytkownikami -role_manage-applications=ZarzÄ…dzaj aplikacjami -role_manage-identity-providers=ZarzÄ…dzaj dostawcami tożsamoÅ›ci -role_manage-clients=ZarzÄ…dzaj klientami -role_manage-events=ZarzÄ…dzaj zdarzeniami -role_view-profile=PrzeglÄ…daj profil -role_manage-account=ZarzÄ…dzaj kontem -role_manage-account-links=ZarzÄ…dzaj linkami konta -role_manage-consent=ZarzÄ…dzaj zgodami -role_read-token=Odczytaj token -role_offline-access=DostÄ™p offline -role_uma_authorization=Uzyskaj uprawnienia -client_account=Konto -client_account-console=Konsola konta -client_security-admin-console=Konsola administratora bezpieczeÅ„stwa -client_admin-cli=Admin CLI -client_realm-management=ZarzÄ…dzanie strefÄ… -client_broker=Broker - - -requiredFields=Wymagane pola -allFieldsRequired=Wszystkie pola sÄ… wymagane - -backToApplication=« Powrót do aplikacji -backTo=Wróć do: {0} - -date=Data -event=Zdarzenie -ip=IP -client=Klient -clients=Aplikacje klienckie -details=Szczegóły -started=RozpoczÄ™ta -lastAccess=Ostatni dostÄ™p -expires=Data ważnoÅ›ci -applications=Aplikacje - -account=Konto -federatedIdentity=PoÅ‚Ä…czone tożsamoÅ›ci -authenticator=Uwierzytelnienie dwuetapowe -device-activity=Aktywność urzÄ…dzenia -sessions=Sesje -log=Dziennik - -application=Aplikacja -availableRoles=DostÄ™pne role -grantedPermissions=Przydzielone uprawnienia -grantedPersonalInfo=Przydzielone dane osobiste -additionalGrants=Dodatkowe przydziaÅ‚y -action=Akcje -inResource=w -fullAccess=PeÅ‚ny dostÄ™p -offlineToken=Token offline -revoke=Odbierz uprawnienia - -configureAuthenticators=Skonfigurowane autentykatory -mobile=Mobilne -totpStep1=Zainstaluj jednÄ… z nastÄ™pujÄ…cych aplikacji na telefonie komórkowym: -totpStep2=Otwórz aplikacjÄ™ i zeskanuj kod kreskowy: -totpStep3=Wprowadź jednorazowy kod podany przez aplikacjÄ™ i kliknij Zapisz aby zakoÅ„czyć konfiguracjÄ™. -totpStep3DeviceName=Podaj nazwÄ™ urzÄ…dzenia aby lepiej zarzÄ…dzać swoimi urzÄ…dzeniami haseÅ‚ jednorazowych. - -totpManualStep2=Otwórz aplikacjÄ™ i wprowadź klucz: -totpManualStep3=Użyj poniższych wartoÅ›ci konfiguracji, jeÅ›li aplikacja pozwala na ich ustawienie: -totpUnableToScan=Nie można skanować? -totpScanBarcode=Zeskanować kod paskowy? - -totp.totp=Oparte o czas -totp.hotp=Oparte o licznik - -totpType=Typ -totpAlgorithm=Algorytm -totpDigits=Cyfry -totpInterval=InterwaÅ‚ -totpCounter=Licznik -totpDeviceName=Nazwa urzÄ…dzenia - -missingUsernameMessage=ProszÄ™ podać nazwÄ™ użytkownika. -missingFirstNameMessage=ProszÄ™ podać imiÄ™. -invalidEmailMessage=NieprawidÅ‚owy adres email. -missingLastNameMessage=ProszÄ™ podać nazwisko. -missingEmailMessage=ProszÄ™ podać e-mail. -missingPasswordMessage=ProszÄ™ podać hasÅ‚o. -notMatchPasswordMessage=HasÅ‚a nie sÄ… zgodne. -invalidUserMessage=NieprawidÅ‚owy użytkownik - -missingTotpMessage=ProszÄ™ podać kod uwierzytelniajÄ…cy. -missingTotpDeviceNameMessage=ProszÄ™ podać nazwÄ™ urzÄ…dzenia. -invalidPasswordExistingMessage=NieprawidÅ‚owe aktualne hasÅ‚o. -invalidPasswordConfirmMessage=Potwierdzenie hasÅ‚a nie jest zgodne. -invalidTotpMessage=NieprawidÅ‚owy kod uwierzytelniajÄ…cy. - -usernameExistsMessage=Nazwa użytkownika już jest wykorzystana. -emailExistsMessage=Email już istnieje. - -readOnlyUserMessage=Zmiana nie jest możliwa, ponieważ edycja konta jest zablokowana. -readOnlyUsernameMessage=Zmiana nazwy użytkownika nie jest możliwa, ponieważ edycja konta jest zablokowana. -readOnlyPasswordMessage=Zmiana hasÅ‚a nie jest możliwa, ponieważ edycja konta jest zablokowana. - -successTotpMessage=Mobilny autentykator skonfigurowany. -successTotpRemovedMessage=Mobilny autentykator usuniÄ™ty. - -successGrantRevokedMessage=CofniÄ™to uprawnienia. - -accountUpdatedMessage=Twoje konto zostaÅ‚o zaktualizowane. -accountPasswordUpdatedMessage=Twoje hasÅ‚o zostaÅ‚o zmienione. - -missingIdentityProviderMessage=Dostawca tożsamoÅ›ci nie zostaÅ‚ wybrany. -invalidFederatedIdentityActionMessage=NieprawidÅ‚owa akcja. -identityProviderNotFoundMessage=Podany dostawca tożsamoÅ›ci nie istnieje. -federatedIdentityLinkNotActiveMessage=Podana tożsamość nie jest już aktywna. -federatedIdentityRemovingLastProviderMessage=Nie można usunąć ostatniej poÅ‚Ä…czonej tożsamoÅ›ci, jeżeli nie ustawiÅ‚eÅ› hasÅ‚a. -identityProviderRedirectErrorMessage=Nieudane przekierowanie do zewnÄ™trznego dostawcy tożsamoÅ›ci. -identityProviderRemovedMessage=Dostawca tożsamoÅ›ci zostaÅ‚ usuniÄ™ty. -identityProviderAlreadyLinkedMessage=PoÅ‚Ä…czona tożsamość {0} jest już przypisana do innego użytkownika. -staleCodeAccountMessage=Strona wygasÅ‚a. Prosimy spróbować ponownie. -consentDenied=Zgoda wycofana. - -accountDisabledMessage=Konto jest zablokowane, skontaktuj siÄ™ z administratorem. - -accountTemporarilyDisabledMessage=Konto jest tymczasowo zablokowane, skontaktuj siÄ™ z administratorem lub spróbuj później. -invalidPasswordMinLengthMessage=NieprawidÅ‚owe hasÅ‚o: minimalna dÅ‚ugość {0}. -invalidPasswordMinLowerCaseCharsMessage=NieprawidÅ‚owe hasÅ‚o: brak maÅ‚ych liter (co najmniej {0}). -invalidPasswordMinDigitsMessage=NieprawidÅ‚owe hasÅ‚o: brak cyfr (co najmniej {0}). -invalidPasswordMinUpperCaseCharsMessage=NieprawidÅ‚owe hasÅ‚o: brak dużych liter (co najmniej {0}). -invalidPasswordMinSpecialCharsMessage=NieprawidÅ‚owe hasÅ‚o: brak znaków specjalnych (co najmniej {0}). -invalidPasswordNotUsernameMessage=NieprawidÅ‚owe hasÅ‚o: nie może być zgodne z nazwÄ… użytkownika. -invalidPasswordRegexPatternMessage=NieprawidÅ‚owe hasÅ‚o: nie speÅ‚nia przyjÄ™tych reguÅ‚. -invalidPasswordHistoryMessage=NieprawidÅ‚owe hasÅ‚o: jest identyczne jak jedno z ostatnich ({0}) haseÅ‚. -invalidPasswordBlacklistedMessage=NieprawidÅ‚owe hasÅ‚o: jest na liÅ›cie haseÅ‚ zabronionych. -invalidPasswordGenericMessage=NieprawidÅ‚owe hasÅ‚o: nowe hasÅ‚o nie speÅ‚nia polityki haseÅ‚. - -# Authorization -myResources=Moje zasoby -myResourcesSub=Moje zasoby -doDeny=ZabroÅ„ -doRevoke=Cofnij -doApprove=Akceptuj -doRemoveSharing=UsuÅ„ udostÄ™pnianie -doRemoveRequest=UsuÅ„ żądanie -peopleAccessResource=Osoby z dostÄ™pem do tego zasobu -resourceManagedPolicies=Uprawnienia dajÄ…ce dostÄ™p do tego zasobu -resourceNoPermissionsGrantingAccess=Brak uprawnieÅ„ dajÄ…cych dostÄ™p do tego zasobu -anyAction=Dowolna akcja -description=Opis -name=Nazwa -scopes=Zakres -resource=Zasób -user=Użytkownik -peopleSharingThisResource=Osoby współdzielÄ…ce ten zasób -shareWithOthers=UdostÄ™pnij innym -needMyApproval=Wymagana moja akceptacja -requestsWaitingApproval=Twoje żądanie czeka na akceptacjÄ™ -icon=Ikona -requestor=ŻądajÄ…cy -owner=WÅ‚aÅ›ciciel -resourcesSharedWithMe=Zasoby współdzielone ze mnÄ… -permissionRequestion=Żądania uprawnieÅ„ -permission=Uprawnienia -shares=udostÄ™pnienia -notBeingShared=Ten zasób nie jest współdzielony. -notHaveAnyResource=Nie masz żadnych zasobów -noResourcesSharedWithYou=Brak zasobów udostÄ™pnionych dla Ciebie -havePermissionRequestsWaitingForApproval=Masz {0} żądaÅ„ uprawnieÅ„ oczekujÄ…cych na akceptacjÄ™. -clickHereForDetails=WiÄ™cej szczegółów... -resourceIsNotBeingShared=Zasób nie jest współdzielony diff --git a/deps/keycloak/themes/base/account/messages/messages_pt_BR.properties b/deps/keycloak/themes/base/account/messages/messages_pt_BR.properties deleted file mode 100644 index 1ab2b4ef6..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_pt_BR.properties +++ /dev/null @@ -1,356 +0,0 @@ -doSave=Salvar -doCancel=Cancelar -doLogOutAllSessions=Sair de todas as sess\u00F5es -doRemove=Remover -doAdd=Adicionar -doSignOut=Sair -doLogIn=Entrar -doLink=Vincular -noAccessMessage=Acesso n\u00e3o permitido - - -editAccountHtmlTitle=Editar Conta -personalInfoHtmlTitle=Informa\u00e7\u00f5es Pessoais -federatedIdentitiesHtmlTitle=Identidades Federadas -accountLogHtmlTitle=Hist\u00f3rico da conta -changePasswordHtmlTitle=Alterar senha -deviceActivityHtmlTitle=Atividade de Dispositivos -sessionsHtmlTitle=Sess\u00F5es -accountManagementTitle=Gerenciamento de Conta -authenticatorTitle=Autenticator -applicationsHtmlTitle=Aplicativos -linkedAccountsHtmlTitle=Contas Vinculadas - -accountManagementWelcomeMessage=Bem-vindo ao Gerenciamento de Conta -personalInfoIntroMessage=Gerenciar informa\u00e7\u00f5es b\u00e1sicas -accountSecurityTitle=Seguran\u00e7a da Conta -accountSecurityIntroMessage=Gerencie sua senha e acesso da conta -applicationsIntroMessage=Acompanhe e gerencie as permiss\u00f5es de app para acesso \u00e0 sua conta -resourceIntroMessage=Compartilhe seus recursos com membros de equipe -passwordLastUpdateMessage=Sua senha foi atualizada em -updatePasswordTitle=Atualizar Senha -updatePasswordMessageTitle=Certifique-se de que a nova senha \u00e9 segura -updatePasswordMessage=Uma senha segura cont\u00e9m uma combina\u00e7\u00e3o de n\u00famero, letras e caracteres especiais. Ela deve ser dif\u00edcil de adivinhar, n\u00e3o pode se assemelhar a uma palavra real e n\u00e3o \u00e9 utilizada em outros lugares. -personalSubTitle=Suas Informa\u00e7\u00f5es Pessoais -personalSubMessage=Gerencie as informa\u00e7\u00f5es b\u00e1sicas: seu primeiro nome, seu sobrenome e seu endere\u00e7o de e-mail - -authenticatorCode=C\u00F3digo autenticador -email=E-mail -firstName=Primeiro nome -givenName=Primeiro nome -fullName=Nome completo -lastName=Sobrenome -familyName=Sobrenome -password=Senha -currentPassword=Senha Atual -passwordConfirm=Confirma\u00E7\u00E3o -passwordNew=Nova senha -username=Nome de us\u00FAario -address=Endere\u00E7o -street=Logradouro -locality=Cidade ou Localidade -region=Estado -postal_code=CEP -country=Pa\u00EDs -emailVerified=E-mail verificado -website=P\u00e1gina da web -phoneNumber=N\u00famero de telefone -phoneNumberVerified=N\u00famero de telefone verificado -gender=G\u00eanero -birthday=Data de nascimento -zoneinfo=Zona hor\u00e1ria -gssDelegationCredential=Delega\u00E7\u00E3o de Credenciais GSS - -profileScopeConsentText=Perfil de usu\u00e1rio -emailScopeConsentText=Endere\u00e7o de e-mail -addressScopeConsentText=Endere\u00e7o -phoneScopeConsentText=N\u00famero de telefone -offlineAccessScopeConsentText=Acesso Offline -samlRoleListScopeConsentText=Meus Perfis de Acesso -rolesScopeConsentText=Perfis de acesso de usu\u00e1rio - -role_admin=Administrador -role_realm-admin=Administrador de dom\u00ednio -role_create-realm=Criar dom\u00ednio -role_view-realm=Visualizar dom\u00ednio -role_view-users=Visualizar usu\u00E1rios -role_view-applications=Visualizar aplicativos -role_view-clients=Visualizar clientes -role_view-events=Visualizar eventos -role_view-identity-providers=Visualizar provedores de identidade -role_view-consent=Visualizar consentimentos -role_manage-realm=Gerenciar dom\u00ednio -role_manage-users=Gerenciar usu\u00E1rios -role_manage-applications=Gerenciar aplicativos -role_manage-identity-providers=Gerenciar provedores de identidade -role_manage-clients=Gerenciar clientes -role_manage-events=Gerenciar eventos -role_view-profile=Visualizar perfil -role_manage-account=Gerenciar conta -role_manage-account-links=Gerenciar vincula\u00e7\u00f5es de conta -role_manage-consent=Gerenciar consentimentos -role_read-token=Ler token -role_offline-access=Acesso offline -role_uma_authorization=Obter permiss\u00F5es -client_account=Conta -client_account-console=Console de Conta -client_security-admin-console=Console de Administra\u00E7\u00E3o de Seguran\u00E7a -client_admin-cli=CLI de Administra\u00e7\u00e3o -client_realm-management=Gerenciamento de Dom\u00ednio -client_broker=Provedor de Identidade - - -requiredFields=Campos obrigat\u00F3rios -allFieldsRequired=Todos os campos s\u00E3o obrigat\u00F3rios - -backToApplication=« Voltar para aplica\u00E7\u00E3o -backTo=Voltar para {0} - -date=Data -event=Evento -ip=IP -client=Cliente -clients=Clientes -details=Detalhes -started=In\u00edcio em -lastAccess=\u00DAltimo acesso -expires=Expira em -applications=Aplicativos - -account=Conta -federatedIdentity=Identidade Federada -authenticator=Autenticador -device-activity=Atividade de Dispositivos -sessions=Sess\u00F5es -log=Hist\u00f3rico - -application=Aplicativo -availableRoles=Perfis de Acesso Dispon\u00EDveis -grantedPermissions=Permiss\u00F5es Concedidas -grantedPersonalInfo=Informa\u00E7\u00F5es Pessoais Concedidas -additionalGrants=Concess\u00F5es Adicionais -action=A\u00E7\u00E3o -inResource=em -fullAccess=Acesso Completo -offlineToken=Token Offline -revoke=Revogar Concess\u00e3o - -configureAuthenticators=Autenticadores Configurados -mobile=M\u00f3vel -totpStep1=Instale uma das seguintes aplica\u00e7\u00f5es no seu celular: -totpStep2=Abra a aplica\u00e7\u00e3o e escaneie o c\u00f3digo QR: -totpStep3=Insira o c\u00f3digo de uso \u00fanico exibido pela aplica\u00e7\u00e3o e clique em Salvar para finalizar a configura\u00e7\u00e3o. -totpStep3DeviceName=Forne\u00e7a um nome de dispositivo para ajud\u00e1-lo a gerenciar seus dipositivos de autentica\u00e7\u00e3o de dois fatores. - -totpManualStep2=Abra a aplica\u00e7\u00e3o e insira a chave: -totpManualStep3=Use as seguintes configura\u00e7\u00f5es se a aplica\u00e7\u00e3o permitir: -totpUnableToScan=N\u00e3o consegue escanear? -totpScanBarcode=Escanear c\u00f3digo QR? - -totp.totp=Baseada em tempo -totp.hotp=Baseada em contador - -totpType=Tipo -totpAlgorithm=Algoritmo -totpDigits=D\u00edgitos -totpInterval=Intervalo -totpCounter=Contador -totpDeviceName=Nome do Dispositivo - -irreversibleAction=Esta a\u00e7\u00e3o \u00e9 irrevers\u00edvel -deletingImplies=Apagar a sua conta implica em: -errasingData=Remover todos os dados -loggingOutImmediately=Finalizar a sess\u00e3o imediatamente -accountUnusable=Qualquer uso subsquente da aplica\u00e7\u00e3o n\u00e3o ser\u00e1 mais poss\u00edvel com esta conta - -missingUsernameMessage=Por favor, especifique o nome de usu\u00E1rio. -missingFirstNameMessage=Por favor, informe o primeiro nome. -invalidEmailMessage=E-mail inv\u00E1lido. -missingLastNameMessage=Por favor, informe o sobrenome. -missingEmailMessage=Por favor, informe o e-mail. -missingPasswordMessage=Por favor, informe a senha. -notMatchPasswordMessage=As senhas n\u00E3o coincidem. -invalidUserMessage=Usu\u00e1rio inv\u00e1lido -updateReadOnlyAttributesRejectedMessage=Atualiza\u00e7\u00e3o de atributo de apenas leitura n\u00e3o permitida - -missingTotpMessage=Por favor, informe o c\u00F3digo de uso \u00fanico. -missingTotpDeviceNameMessage=Por favor, informe o nome do dispositivo. -invalidPasswordExistingMessage=A senha atual \u00e9 inv\u00E1lida. -invalidPasswordConfirmMessage=A senha de confirma\u00E7\u00E3o n\u00E3o coincide. -invalidTotpMessage=C\u00F3digo de uso \u00fanico inv\u00E1lido. - -usernameExistsMessage=Este nome de usu\u00E1rio j\u00E1 existe. -emailExistsMessage=Este endere\u00e7o de e-mail j\u00E1 existe. - -readOnlyUserMessage=Voc\u00EA n\u00E3o pode atualizar sua conta, uma vez que \u00E9 apenas de leitura. -readOnlyUsernameMessage=Voc\u00ea^n\u00e3o pode atualizar o seu nome de usu\u00e1rio, uma vez que \u00e9 apenas de leitura. -readOnlyPasswordMessage=Voc\u00EA n\u00E3o pode atualizar sua senha, uma vez que sua conta \u00E9 apenas de leitura. - -successTotpMessage=Autenticador m\u00f3vel configurado. -successTotpRemovedMessage=Autenticador m\u00f3vel removido. - -successGrantRevokedMessage=Concess\u00e3o revogada com sucesso. - -accountUpdatedMessage=Sua conta foi atualizada. -accountPasswordUpdatedMessage=Sua senha foi atualizada. - -missingIdentityProviderMessage=Provedor de identidade n\u00E3o especificado. -invalidFederatedIdentityActionMessage=A\u00E7\u00E3o inv\u00E1lida ou ausente. -identityProviderNotFoundMessage=O provedor de identidade especificado n\u00E3o foi encontrado. -federatedIdentityLinkNotActiveMessage=Esta identidade n\u00E3o est\u00E1 mais em atividade. -federatedIdentityRemovingLastProviderMessage=Voc\u00EA n\u00E3o pode remover a \u00FAltima identidade federada, porque voc\u00EA n\u00E3o tem uma senha. -identityProviderRedirectErrorMessage=Falha ao redirecionar para o provedor de identidade. -identityProviderRemovedMessage=Provedor de identidade removido com sucesso. -identityProviderAlreadyLinkedMessage=Identidade federada retornada por {0} j\u00E1 est\u00E1 ligada a outro usu\u00E1rio. -staleCodeAccountMessage=A p\u00e1gina expirou. Por favor, tente novamente. -consentDenied=Consentimento negado. - -accountDisabledMessage=Conta desativada, por favor, contate um administrador. - -accountTemporarilyDisabledMessage=A conta est\u00E1 temporariamente indispon\u00EDvel, contate um administrador ou tente novamente mais tarde. -invalidPasswordMinLengthMessage=Senha inv\u00E1lida\: deve ter pelo menos {0} caracteres. -invalidPasswordMinLowerCaseCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} letra(s) min\u00FAscula(s). -invalidPasswordMinDigitsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} n\u00FAmero(s). -invalidPasswordMinUpperCaseCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} letra(s) mai\u00FAscula(s). -invalidPasswordMinSpecialCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} caractere(s) especial(is). -invalidPasswordNotUsernameMessage=Senha inv\u00E1lida\: n\u00E3o pode ser igual ao nome de usu\u00E1rio. -invalidPasswordNotEmailMessage=Senha inv\u00e1lida: n\u00e3o pode ser igual ao endere\u00e7o de e-mail. -invalidPasswordRegexPatternMessage=Senha inv\u00E1lida\: n\u00E3o corresponde ao(s) padr\u00E3o(\u00f5es) da express\u00E3o regular. -invalidPasswordHistoryMessage=Senha inv\u00E1lida\: n\u00E3o pode ser igual a qualquer uma da(s) \u00FAltima(s) {0} senha(s). -invalidPasswordBlacklistedMessage=Senha inv\u00e1lida: esta senha est\u00e1 na lista de exclus\u00e3o. -invalidPasswordGenericMessage=Senha inv\u00e1lida: a nova senha n\u00e3o cumpre as pol\u00edticas de senha. - -# Authorization -myResources=Meus Recursos -myResourcesSub=Meus recursos -doDeny=Negar -doRevoke=Revogar -doApprove=Permitir -doRemoveSharing=Remover Compartilhamento -doRemoveRequest=Remover Solicita\u00e7\u00e3o -peopleAccessResource=Pessoas com acesso a este recurso -resourceManagedPolicies=Permiss\u00f5es dando acesso a este recurso -resourceNoPermissionsGrantingAccess=Sem permiss\u00f5es dando acesso a este recurso -anyAction=Qualquer a\u00e7\u00e3o -description=Descri\u00e7\u00e3o -name=Nome -scopes=Escopo -resource=Recurso -user=Usu\u00e1rio -peopleSharingThisResource=Pessoas compartilhando este recurso -shareWithOthers=Compartilhar com outros -needMyApproval=Requer minha aprova\u00e7\u00e3o -requestsWaitingApproval=Solicita\u00e7\u00f5es suas aguardando aprova\u00e7\u00e3o -icon=\u00cdcone -requestor=Requerente -owner=Dono -resourcesSharedWithMe=Recursos compartilhados comigo -permissionRequestion=Solicita\u00e7\u00e3o de Permiss\u00e3o -permission=Permiss\u00e3o -shares=compartilha(m) -notBeingShared=Este recurso n\u00e3o est\u00e1 sendo compartilhado. -notHaveAnyResource=Voc\u00ea n\u00e3o possui recursos -noResourcesSharedWithYou=N\u00e3o h\u00e1 recursos compartilhados com voc\u00ea -havePermissionRequestsWaitingForApproval=Voc\u00ea tem {0} solicita\u00e7\u00e3o(\u00f5es) de permiss\u00e3o aguardando aprova\u00e7\u00e3o. -clickHereForDetails=Clique aqui para mais detalhes. -resourceIsNotBeingShared=O recurso n\u00e3o \u00e9 compartilhado - -# Applications -applicationName=Nome -applicationType=Tipo de aplica\u00e7\u00e3o -applicationInUse=Uso apenas em aplica\u00e7\u00e3o -clearAllFilter=Limpar todos os filtros -activeFilters=Filtros ativos -filterByName=Filtrar Por Nome ... -allApps=Todas as aplica\u00e7\u00f5es -internalApps=Aplica\u00e7\u00f5es internas -thirdpartyApps=Aplica\u00e7\u00f5es de terceiros -appResults=Resultados -clientNotFoundMessage=Cliente n\u00e3o encontrado. - -# Linked account -authorizedProvider=Provedor Autorizado -authorizedProviderMessage=Provedores Autorizados vinculados \u00e0 sua conta -identityProvider=Provedor de Identidade -identityProviderMessage=Para vincular a sua conta aos provedores de identidade configurados -socialLogin=Login Social -userDefined=Definido por Usu\u00e1rio -removeAccess=Remover Acesso -removeAccessMessage=Voc\u00ea dever\u00e1 conceder acesso novamente se quiser usar esta conta de app. - -#Authenticator -authenticatorStatusMessage=A autentica\u00e7\u00e3o de dois fatores est\u00e1 -authenticatorFinishSetUpTitle=Sua Autentica\u00e7\u00e3o de Dois Fatores -authenticatorFinishSetUpMessage=Sempre que entrar na sua conta, voc\u00ea dever\u00e1 fornecer um c\u00f3digo de autentica\u00e7\u00e3o de dois fatores. -authenticatorSubTitle=Configurar Autentica\u00e7\u00e3o de Dois Fatores -authenticatorSubMessage=Para aumentar a seguran\u00e7a da sua conta, habilite pelo menos um m\u00e9todo de autentica\u00e7\u00e3o de dois fatores dispon\u00edvel. -authenticatorMobileTitle=Autenticador M\u00f3vel -authenticatorMobileMessage=Use um autenticador m\u00f3vel para obter c\u00f3digos de verifica\u00e7\u00e3o para autentica\u00e7\u00e3o de dois fatores. -authenticatorMobileFinishSetUpMessage=O autenticador foi vinculado ao seu celular. -authenticatorActionSetup=Configurar -authenticatorSMSTitle=C\u00f3digo SMS -authenticatorSMSMessage=A aplica\u00e7\u00e3o ir\u00e1 enviar o c\u00f3digo de verifica\u00e7\u00e3o para o seu celular como autentica\u00e7\u00e3o de dois fatores. -authenticatorSMSFinishSetUpMessage=As mensagens de texto ser\u00e3o enviadas para -authenticatorDefaultStatus=Padr\u00e3o -authenticatorChangePhone=Mudar N\u00famero de Celular -authenticatorBackupCodesTitle=C\u00f3digos de Emerg\u00eancia -authenticatorBackupCodesMessage=Veja seus c\u00f3digos de emerg\u00eancia de 8 d\u00edgitos -authenticatorBackupCodesFinishSetUpMessage=12 c\u00f3digos de emerg\u00eancia foram gerados. Cada um pode ser utilizado apenas uma vez. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Configura\u00e7\u00e3o do Autenticador M\u00f3vel -smscodeIntroMessage=Insira seu n\u00famero de celular e o c\u00f3digo de verifica\u00e7\u00e3o ser\u00e1 enviado para o seu dispositivo. -mobileSetupStep1=Instale um app autenticador no seu celular. As seguintes aplica\u00e7\u00f5es s\u00e3o suportadas. -mobileSetupStep2=Abra a aplica\u00e7\u00e3o e escaneie o c\u00f3digo QR: -mobileSetupStep3=Insira o c\u00f3digo autenticador exibido pela aplica\u00e7\u00e3o e clique em Salvar para finalizar a configura\u00e7\u00e3o. -scanBarCode=Escanear c\u00f3digo QR? -enterBarCode=Insira o c\u00f3digo autenticador -doCopy=Copiar -doFinish=Finalizar - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=Configura\u00e7\u00e3o de C\u00f3digo SMS -chooseYourCountry=Selecione seu pa\u00eds -enterYourPhoneNumber=Insira seu n\u00famero de telefone -sendVerficationCode=Enviar C\u00f3digo de Verifica\u00e7\u00e3o -enterYourVerficationCode=Insira o seu c\u00f3digo de verifica\u00e7\u00e3o - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Configura\u00e7\u00e3o de C\u00f3digos de Emerg\u00eancia -backupcodesIntroMessage=Se perder o acesso ao seu telefone, voc\u00ea ainda poder\u00e1 acessar a sua conta com c\u00f3digos de emerg\u00eancia. Guarde-os em um lugar seguro e acess\u00edvel. -realmName=Dom\u00ednio -doDownload=Baixar -doPrint=Imprimir -backupCodesTips-1=Cada c\u00f3digo de emerg\u00eancia s\u00f3 pode ser usado uma vez. -backupCodesTips-2=Estes c\u00f3digos foram gerados em -generateNewBackupCodes=Gerar Novos C\u00f3digos de Emerg\u00eancia -backupCodesTips-3=Ao gerar novos c\u00f3digos de emerg\u00eancia, quaisquer c\u00f3digos antigos deixar\u00e3o de funcionar. -backtoAuthenticatorPage=Voltar \u00e0 P\u00e1gina de Autenticador - - -#Resources -resources=Recursos -sharedwithMe=Compartilhados Comigo -share=Compartilhar -sharedwith=Compartilhado com -accessPermissions=Permiss\u00f5es de Acesso -permissionRequests=Pedidos de Acesso -approve=Aprovar -approveAll=Aprovar todos -people=pessoas -perPage=por p\u00e1gina -currentPage=P\u00e1gina Atual -sharetheResource=Compartilhar recurso -group=Grupo -selectPermission=Selecionar Permiss\u00e3o -addPeople=Adicionar pessoas que compartilhem o recurso -addTeam=Adicionar equipe que compartilhe o recurso -myPermissions=Minhas Permiss\u00f5es -waitingforApproval=Aguardando aprova\u00e7\u00e3o -anyPermission=Qualquer Permiss\u00e3o - -# Openshift messages -openshift.scope.user_info=Informa\u00e7\u00f5es do usu\u00e1rio -openshift.scope.user_check-access=Informa\u00e7\u00f5es de acesso do usu\u00e1rio -openshift.scope.user_full=Acesso Completo -openshift.scope.list-projects=Listar projetos diff --git a/deps/keycloak/themes/base/account/messages/messages_ru.properties b/deps/keycloak/themes/base/account/messages/messages_ru.properties deleted file mode 100644 index a9716b835..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_ru.properties +++ /dev/null @@ -1,155 +0,0 @@ -# encoding: utf-8 -doSave=Сохранить -doCancel=Отмена -doLogOutAllSessions=Выйти из вÑех ÑеÑÑий -doRemove=Удалить -doAdd=Добавить -doSignOut=Выход - -editAccountHtmlTitle=Изменение учетной запиÑи -federatedIdentitiesHtmlTitle=Федеративные идентификаторы -accountLogHtmlTitle=Лог учетной запиÑи -changePasswordHtmlTitle=Смена Ð¿Ð°Ñ€Ð¾Ð»Ñ -sessionsHtmlTitle=СеÑÑии -accountManagementTitle=Управление учетной запиÑью -authenticatorTitle=Ðутентификатор -applicationsHtmlTitle=ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - -authenticatorCode=Одноразовый код -email=E-mail -firstName=Ð˜Ð¼Ñ -givenName=Ð˜Ð¼Ñ -fullName=Полное Ð¸Ð¼Ñ -lastName=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ -familyName=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ -password=Пароль -passwordConfirm=Подтверждение Ð¿Ð°Ñ€Ð¾Ð»Ñ -passwordNew=Ðовый пароль -username=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -address=ÐÐ´Ñ€ÐµÑ -street=Улица -locality=Город -region=Регион -postal_code=Почтовый Ð¸Ð½Ð´ÐµÐºÑ -country=Страна -emailVerified=E-mail подтвержден -gssDelegationCredential=Делегирование учетных данных через GSS - -role_admin=ÐдминиÑтратор -role_realm-admin=ÐдминиÑтратор realm -role_create-realm=Создать realm -role_view-realm=ПроÑмотр realm -role_view-users=ПроÑмотр пользователей -role_view-applications=ПроÑмотр приложений -role_view-clients=ПроÑмотр клиентов -role_view-events=ПроÑмотр Ñобытий -role_view-identity-providers=ПроÑмотр провайдеров учетных запиÑей -role_manage-realm=Управление realm -role_manage-users=Управление пользователÑми -role_manage-applications=Управление приложениÑми -role_manage-identity-providers=Управление провайдерами учетных запиÑей -role_manage-clients=Управление клиентами -role_manage-events=Управление ÑобытиÑми -role_view-profile=ПроÑмотр Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ -role_manage-account=Управление учетной запиÑью -role_read-token=Чтение токена -role_offline-access=ДоÑтуп оффлайн -role_uma_authorization=Получение разрешений -client_account=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ -client_security-admin-console=КонÑоль админиÑтратора безопаÑноÑти -client_admin-cli=Командный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора -client_realm-management=Управление Realm -client_broker=Брокер - - -requiredFields=ОбÑзательные Ð¿Ð¾Ð»Ñ -allFieldsRequired=Ð’Ñе Ð¿Ð¾Ð»Ñ Ð¾Ð±Ñзательны - -backToApplication=« Ðазад в приложение -backTo=Ðазад в {0} - -date=Дата -event=Событие -ip=IP -client=Клиент -clients=Клиенты -details=Детали -started=Ðачата -lastAccess=ПоÑледний доÑтуп -expires=ИÑтекает -applications=ÐŸÑ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ - -account=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ -federatedIdentity=Федеративный идентификатор -authenticator=Ðутентификатор -sessions=СеÑÑии -log=Журнал - -application=Приложение -availablePermissions=ДоÑтупные Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -grantedPermissions=СоглаÑованные Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -grantedPersonalInfo=СоглаÑÐ¾Ð²Ð°Ð½Ð½Ð°Ñ Ð¿ÐµÑ€ÑÐ¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ -additionalGrants=Дополнительные ÑоглаÑÐ¾Ð²Ð°Ð½Ð¸Ñ -action=ДейÑтвие -inResource=в -fullAccess=Полный доÑтуп -offlineToken=Оффлайн токен -revoke=Отозвать ÑоглаÑование - -configureAuthenticators=Сконфигурированные аутентификаторы -mobile=Мобильное приложение -totpStep1=УÑтановите FreeOTP или Google Authenticator. Оба Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупны на Google Play и в Apple App Store. -totpStep2=Откройте приложение и проÑканируйте баркод, либо введите ключ. -totpStep3=Введите одноразовый код, выданный приложением, и нажмите Ñохранить Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÑтановки. - -missingUsernameMessage=Введите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. -missingFirstNameMessage=Введите имÑ. -invalidEmailMessage=Введите корректный E-mail. -missingLastNameMessage=Введите фамилию. -missingEmailMessage=Введите E-mail. -missingPasswordMessage=Введите пароль. -notMatchPasswordMessage=Пароли не Ñовпадают. - -missingTotpMessage=Введите код аутентификатора. -invalidPasswordExistingMessage=СущеÑтвующий пароль неверный. -invalidPasswordConfirmMessage=Подтверждение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ Ñовпадает. -invalidTotpMessage=Ðеверный код аутентификатора. - -usernameExistsMessage=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ ÑущеÑтвует. -emailExistsMessage=E-mail уже ÑущеÑтвует. - -readOnlyUserMessage=Ð’Ñ‹ не можете обновить информацию вашей учетной запиÑи, Ñ‚.к. она доÑтупна только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. -readOnlyPasswordMessage=Ð’Ñ‹ не можете обновить пароль вашей учетной запиÑи, Ñ‚.к. он доÑтупен только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. - -successTotpMessage=Ðутентификатор в мобильном приложении Ñконфигурирован. -successTotpRemovedMessage=Ðутентификатор в мобильном приложении удален. - -successGrantRevokedMessage=СоглаÑование отозвано уÑпешно. - -accountUpdatedMessage=Ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ обновлена. -accountPasswordUpdatedMessage=Ваш пароль обновлен. - -missingIdentityProviderMessage=Провайдер учетных запиÑей не задан. -invalidFederatedIdentityActionMessage=Ðекорректное или недопуÑтимое дейÑтвие. -identityProviderNotFoundMessage=Заданный провайдер учетных запиÑей не найден. -federatedIdentityLinkNotActiveMessage=Идентификатор больше не активен. -federatedIdentityRemovingLastProviderMessage=Ð’Ñ‹ не можете удалить поÑледний федеративный идентификатор, Ñ‚.к. Ð’Ñ‹ не имеете паролÑ. -identityProviderRedirectErrorMessage=Ошибка Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² провайдер учетных запиÑей. -identityProviderRemovedMessage=Провайдер учетных запиÑей уÑпешно удален. -identityProviderAlreadyLinkedMessage=Федеративный идентификатор, возвращенный {0} уже иÑпользуетÑÑ Ð´Ñ€ÑƒÐ³Ð¸Ð¼ пользователем. -staleCodeAccountMessage=Страница уÑтарела. Попробуйте еще раз. -consentDenied=Ð’ ÑоглаÑовании отказано. - -accountDisabledMessage=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ заблокирована, обратитеÑÑŒ к админиÑтратору. - -accountTemporarilyDisabledMessage=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ временно заблокирована, обратитеÑÑŒ к админиÑтратору или попробуйте позже. -invalidPasswordMinLengthMessage=Ðекорректный пароль: длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть не менее {0} Ñимвола(ов). -invalidPasswordMinLowerCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимвола(ов) в нижнем региÑтре. -invalidPasswordMinDigitsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} цифр(Ñ‹). -invalidPasswordMinUpperCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимвола(ов) в верхнем региÑтре. -invalidPasswordMinSpecialCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} ÑпецÑимвола(ов). -invalidPasswordNotUsernameMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пользователÑ. -invalidPasswordRegexPatternMessage=Ðекорректный пароль: пароль не удовлетворÑет регулÑрному выражению. -invalidPasswordHistoryMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¿Ð¾Ñледним(и) {0} паролÑми. -invalidPasswordGenericMessage=Ðекорректный пароль: новый пароль не ÑоответÑтвует правилам паролÑ. - diff --git a/deps/keycloak/themes/base/account/messages/messages_sk.properties b/deps/keycloak/themes/base/account/messages/messages_sk.properties deleted file mode 100644 index 32cafc6cf..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_sk.properties +++ /dev/null @@ -1,196 +0,0 @@ -# encoding: utf-8 -doSave=UložiÅ¥ -doCancel=ZruÅ¡iÅ¥ -doLogOutAllSessions=Odhlásenie vÅ¡etkých relácií -doRemove=OdstrániÅ¥ -doAdd=PridaÅ¥ -doSignOut=OdhlásiÅ¥ - -editAccountHtmlTitle=UpraviÅ¥ úÄet -federatedIdentitiesHtmlTitle=Prepojená identita -accountLogHtmlTitle=Denník zmien užívateľských úÄtov -changePasswordHtmlTitle=Zmena hesla -sessionsHtmlTitle=Relácie -accountManagementTitle=Správa úÄtu Keycloak -authenticatorTitle=Autentifikátor -applicationsHtmlTitle=Aplikácie - -authenticatorCode=Jednorázový kód -email=E-mail -firstName=Meno -givenName=Meno pri narodení -fullName=Celé meno -lastName=Priezvisko -familyName=Rodné meno -password=Heslo -passwordConfirm=Potrvrdenie hesla -passwordNew=Nové heslo -username=Meno používateľa -address=Adresa -street=Ulica -locality=Mesto alebo lokalita -region=Kraj -postal_code=PSÄŒ -country=Å tát -emailVerified=E-mail overený -gssDelegationCredential=GSS delegované oprávnenie - -role_admin=Administrátor -role_realm-admin=Administrátor realmu -role_create-realm=VytvoriÅ¥ realm -role_view-realm=ZobraziÅ¥ realm -role_view-users=ZobraziÅ¥ používateľov -role_view-applications=ZobraziÅ¥ aplikácie -role_view-clients=ZobraziÅ¥ klientov -role_view-events=ZobraziÅ¥ udalosti -role_view-identity-providers=ZobraziÅ¥ klientov poskytovateľov identity -role_manage-realm=SpravovaÅ¥ realm -role_manage-users=SpravovaÅ¥ používateľov -role_manage-applications=SpravovaÅ¥ aplikácie -role_manage-identity-providers=SpravovaÅ¥ poskytovateľov identity -role_manage-clients=SpravovaÅ¥ klientov -role_manage-events=SpravovaÅ¥ udalosti -role_view-profile=ZobraziÅ¥ profil -role_manage-account=SpravovaÅ¥ úÄet -role_manage-account-links=SpravovaÅ¥ odkazy na úÄet -role_read-token=ČítaÅ¥ token -role_offline-access=Offline prístup -role_uma_authorization=Autorizácia používateľom riadeného prístupu -client_account=ÚÄet klienta -client_security-admin-console=BezpeÄnostná administrátorská konzola -client_admin-cli=SpravovaÅ¥ CLI klienta -client_realm-management=SpravovaÅ¥ realmy klienta -client_broker=Broker - - -requiredFields=Povinné polia -allFieldsRequired=VÅ¡etky požadované polia - -backToApplication=« Späť na aplikáciu -backTo=Späť na {0} - -date=Dátum -event=UdalosÅ¥ -ip=IP -client=Klient -clients=Klienti -details=Podrobnosti -started=ZaÄíname -lastAccess=Posledný prístup -expires=Vyprší -applications=Aplikácie - -account=ÚÄet -federatedIdentity=Prepojená identita -authenticator=Autentifikátor -sessions=Relácie -log=Denník - -application=Aplikácia -availablePermissions=Dostupné oprávnenia -grantedPermissions=Pridelené oprávnenia -grantedPersonalInfo=Poskytnuté osobné informácie -additionalGrants=DodatoÄné oprávnenia -action=Akcia -inResource=v -fullAccess=Úplný prístup -offlineToken=Offline token -revoke=ZruÅ¡iÅ¥ oprávnenie - -configureAuthenticators=Nakonfigurované autentifikátory -mobile=Mobilný -totpStep1=NainÅ¡talujte vo svojom zariadení FreeOTP alebo Google Authenticator. Obidve aplikácie sú k dispozícii v Google Play a Apple App Store. -totpStep2=Otvorte aplikáciu a naskenujte Äiarový kód alebo zadajte kľúÄ. -totpStep3=Zadajte jednorazový kód poskytnutý aplikáciou a kliknutím na tlaÄidlo UložiÅ¥ dokonÄíte nastavenie. - -totpManualStep2=Otvorte aplikáciu a zadajte kÄ¾ÃºÄ -totpManualStep3=Použite nasledujúce hodnoty konfigurácie, ak aplikácia umožňuje ich nastavenie -totpUnableToScan=Nemožno skenovaÅ¥? -totpScanBarcode=Skenovanie Äiarového kódu? - -totp.totp=Založené na Äase -totp.hotp=Založené na poÄítadle - -totpType=Typ -totpAlgorithm=Algoritmus -totpDigits=Číslica -totpInterval=Interval -totpCounter=PoÄítadlo - -missingUsernameMessage=Zadajte používateľské meno. -missingFirstNameMessage=Zadajte meno. -invalidEmailMessage=Neplatná e-mailová adresa. -missingLastNameMessage=Zadajte priezvisko. -missingEmailMessage=Zadajte e-mail. -missingPasswordMessage=Zadajte heslo, prosím. -notMatchPasswordMessage=Heslá sa nezhodujú. - -missingTotpMessage=Zadajte jednorazový kód, prosím -invalidPasswordExistingMessage=Neplatné existujúce heslo. -invalidPasswordConfirmMessage=Potvrdenie hesla sa nezhoduje. -invalidTotpMessage=Neplatný jednorazový kód. - -usernameExistsMessage=Užívateľské meno už existuje. -emailExistsMessage=E-mail už existuje. - -readOnlyUserMessage=Váš úÄet nemôžete aktualizovaÅ¥, pretože je iba na Äítanie. -readOnlyUsernameMessage=Nemôžete aktualizovaÅ¥ svoje používateľské meno, pretože je iba na Äítanie. -readOnlyPasswordMessage=Heslo nemôžete aktualizovaÅ¥, pretože váš úÄet je iba na Äítanie. - -successTotpMessage=Konfigurácia mobilného autentifikátora. -successTotpRemovedMessage=Mobilný autentifikátor bol odstránený. - -successGrantRevokedMessage=Oprávnenie bolo úspeÅ¡ne zruÅ¡ené. - -accountUpdatedMessage=Váš úÄet bol aktualizovaný. -accountPasswordUpdatedMessage=VaÅ¡e heslo bolo aktualizované. - -missingIdentityProviderMessage=Poskytovateľ identity nie je zadaný. -invalidFederatedIdentityActionMessage=Neplatná alebo chýbajúca akcia. -identityProviderNotFoundMessage=Zadaný poskytovateľ identity nenájdený. -federatedIdentityLinkNotActiveMessage=Identita už nie je aktívna. -federatedIdentityRemovingLastProviderMessage=Nemôžete odstrániÅ¥ poslednú spojenú identitu, pretože nemáte heslo. -identityProviderRedirectErrorMessage=Nepodarilo sa presmerovaÅ¥ na poskytovateľa identity. -identityProviderRemovedMessage=Poskytovateľ identity bol úspeÅ¡ne odstránený. -identityProviderAlreadyLinkedMessage=Spojená identita vrátená {0} je už prepojená s iným používateľom. -staleCodeAccountMessage=PlatnosÅ¥ vyprÅ¡ala. Skúste eÅ¡te raz. -consentDenied=Súhlas bol zamietnutý. - -accountDisabledMessage=ÚÄet je zakázaný, kontaktujte správcu. - -accountTemporarilyDisabledMessage=ÚÄet je doÄasne zakázaný, kontaktujte administrátora alebo skúste neskôr. -invalidPasswordMinLengthMessage=Neplatné heslo: minimálna dĺžka {0}. -invalidPasswordMinLowerCaseCharsMessage=Neplatné heslo: musí obsahovaÅ¥ minimálne {0} malé písmená. -invalidPasswordMinDigitsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} Äíslic. -invalidPasswordMinUpperCaseCharsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} veľké písmená. -invalidPasswordMinSpecialCharsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} Å¡peciálne znaky. -invalidPasswordNotUsernameMessage=Neplatné heslo: nesmie byÅ¥ rovnaké ako používateľské meno. -invalidPasswordRegexPatternMessage=Neplatné heslo: nezodpovedá regulárnemu výrazu. -invalidPasswordHistoryMessage=Neplatné heslo: nesmie sa rovnaÅ¥ žiadnemu z posledných {0} hesiel. -invalidPasswordBlacklistedMessage=Neplatné heslo: heslo je na Äiernej listine. -invalidPasswordGenericMessage=Neplatné heslo: nové heslo nezodpovedá pravidlám hesiel. - -# Authorization -myResources=Moje Zdroje -myResourcesSub=Moje zdroje -doDeny=ZakázaÅ¥ -doRevoke=OdvolaÅ¥ -doApprove=SchváliÅ¥ -doRemoveSharing=Odstránenie zdieľania -doRemoveRequest=OdstrániÅ¥ požiadavku -peopleAccessResource=Ľudia s prístupom k tomuto zdroju -name=Názov -scopes=Rozsahy -resource=Zdroj -user=Používateľ -peopleSharingThisResource=Ľudia zdieľajúci tento zdroj -shareWithOthers=ZdieľaÅ¥ s ostatnými -needMyApproval=Potrebuje môj súhlas -requestsWaitingApproval=VaÅ¡e požiadavky Äakajú na schválenie -icon=Ikona -requestor=Žiadateľ -owner=Vlastník -resourcesSharedWithMe=Zdroje zdieľané so mnou -permissionRequestion=Žiadosti o povolenie -permission=Oprávnenie -shares=podiel (y) diff --git a/deps/keycloak/themes/base/account/messages/messages_sv.properties b/deps/keycloak/themes/base/account/messages/messages_sv.properties deleted file mode 100644 index cc134cdeb..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_sv.properties +++ /dev/null @@ -1,150 +0,0 @@ -# encoding: utf-8 -doSave=Spara -doCancel=Avbryt -doLogOutAllSessions=Logga ut frÃ¥n samtliga sessioner -doRemove=Ta bort -doAdd=Lägg till -doSignOut=Logga ut - -editAccountHtmlTitle=Redigera konto -federatedIdentitiesHtmlTitle=Federerade identiteter -accountLogHtmlTitle=Kontologg -changePasswordHtmlTitle=Byt lösenord -sessionsHtmlTitle=Sessioner -accountManagementTitle=Kontohantering för Keycloak -authenticatorTitle=Autentiserare -applicationsHtmlTitle=Applikationer - -authenticatorCode=EngÃ¥ngskod -email=E-post -firstName=Förnamn -lastName=Efternamn -password=Lösenord -passwordConfirm=Bekräftelse -passwordNew=Nytt lösenord -username=Användarnamn -address=Adress -street=Gata -locality=Postort -region=Stat, Provins eller Region -postal_code=Postnummer -country=Land -emailVerified=E-post verifierad -gssDelegationCredential=GSS Delegation Credential - -role_admin=Administratör -role_realm-admin=Realm-administratör -role_create-realm=Skapa realm -role_view-realm=Visa realm -role_view-users=Visa användare -role_view-applications=Visa applikationer -role_view-clients=Visa klienter -role_view-events=Visa event -role_view-identity-providers=Visa identitetsleverantörer -role_manage-realm=Hantera realm -role_manage-users=Hantera användare -role_manage-applications=Hantera applikationer -role_manage-identity-providers=Hantera identitetsleverantörer -role_manage-clients=Hantera klienter -role_manage-events=Hantera event -role_view-profile=Visa profil -role_manage-account=Hantera konto -role_read-token=Läs element -role_offline-access=Ã…tkomst offline -role_uma_authorization=ErhÃ¥ll tillstÃ¥nd -client_account=Konto -client_security-admin-console=Säkerhetsadministratörskonsol -client_admin-cli=Administratörs-CLI -client_realm-management=Realmhantering - - -requiredFields=Obligatoriska fält -allFieldsRequired=Samtliga fält krävs - -backToApplication=« Tillbaka till applikationen -backTo=Tillbaka till {0} - -date=Datum -event=Event -ip=IP -client=Klient -clients=Klienter -details=Detaljer -started=Startade -lastAccess=Senast Ã¥tkomst -expires=Upphör -applications=Applikationer - -account=Konto -federatedIdentity=Federerad identitet -authenticator=Autentiserare -sessions=Sessioner -log=Logg - -application=Applikation -availablePermissions=Tillgängliga rättigheter -grantedPermissions=Beviljade rättigheter -grantedPersonalInfo=Medgiven personlig information -additionalGrants=Ytterligare medgivanden -action=Ã…tgärd -inResource=i -fullAccess=Fullständig Ã¥tkomst -offlineToken=Offline token -revoke=Upphäv rättighet - -configureAuthenticators=Konfigurerade autentiserare -mobile=Mobil -totpStep1=Installera FreeOTP eller Google Authenticator pÃ¥ din enhet. BÃ¥da applikationerna finns tillgängliga pÃ¥ Google Play och Apple App Store. -totpStep2=Öppna applikationen och skanna streckkoden eller skriv i nyckeln. -totpStep3=Fyll i engÃ¥ngskoden som tillhandahÃ¥lls av applikationen och klicka pÃ¥ Spara för att avsluta inställningarna. - -missingUsernameMessage=Vänligen ange användarnamn. -missingFirstNameMessage=Vänligen ange förnamn. -invalidEmailMessage=Ogiltig e-postadress. -missingLastNameMessage=Vänligen ange efternamn. -missingEmailMessage=Vänligen ange e-post. -missingPasswordMessage=Vänligen ange lösenord. -notMatchPasswordMessage=Lösenorden matchar inte. - -missingTotpMessage=Vänligen ange autentiseringskoden. -invalidPasswordExistingMessage=Det nuvarande lösenordet är ogiltigt. -invalidPasswordConfirmMessage=Lösenordsbekräftelsen matchar inte. -invalidTotpMessage=Autentiseringskoden är ogiltig. - -usernameExistsMessage=Användarnamnet finns redan. -emailExistsMessage=E-posten finns redan. - -readOnlyUserMessage=Du kan inte uppdatera ditt konto eftersom det är skrivskyddat. -readOnlyPasswordMessage=Du kan inte uppdatera ditt lösenord eftersom ditt konto är skrivskyddat. - -successTotpMessage=Mobilautentiseraren är inställd. -successTotpRemovedMessage=Mobilautentiseraren är borttagen. - -successGrantRevokedMessage=Upphävandet av rättigheten lyckades. - -accountUpdatedMessage=Ditt konto har uppdaterats. -accountPasswordUpdatedMessage=Ditt lösenord har uppdaterats. - -missingIdentityProviderMessage=Identitetsleverantör är inte angiven. -invalidFederatedIdentityActionMessage=Ã…tgärden är ogiltig eller saknas. -identityProviderNotFoundMessage=Angiven identitetsleverantör hittas inte. -federatedIdentityLinkNotActiveMessage=Den här identiteten är inte längre aktiv. -federatedIdentityRemovingLastProviderMessage=Du kan inte ta bort senaste federerade identiteten eftersom du inte har ett lösenord. -identityProviderRedirectErrorMessage=Misslyckades med att omdirigera till identitetsleverantör. -identityProviderRemovedMessage=Borttagningen av identitetsleverantören lyckades. -identityProviderAlreadyLinkedMessage=Den federerade identiteten som returnerades av {0} är redan länkad till en annan användare. -staleCodeAccountMessage=Sidan har upphört att gälla. Vänligen försök igen. -consentDenied=Samtycket förnekades. - -accountDisabledMessage=Kontot är inaktiverat, kontakta administratör. - -accountTemporarilyDisabledMessage=Kontot är tillfälligt inaktiverat, kontakta administratör eller försök igen senare. -invalidPasswordMinLengthMessage=Ogiltigt lösenord. Minsta längd är {0}. -invalidPasswordMinLowerCaseCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} smÃ¥ bokstäver. -invalidPasswordMinDigitsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} siffror. -invalidPasswordMinUpperCaseCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} stora bokstäver. -invalidPasswordMinSpecialCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} specialtecken. -invalidPasswordNotUsernameMessage=Ogiltigt lösenord: FÃ¥r inte vara samma som användarnamnet. -invalidPasswordRegexPatternMessage=Ogiltigt lösenord: matchar inte kravet för lösenordsmönster. -invalidPasswordHistoryMessage=Ogiltigt lösenord: FÃ¥r inte vara samma som de senaste {0} lösenorden. -invalidPasswordGenericMessage=Ogiltigt lösenord: Det nya lösenordet stämmer inte med lösenordspolicyn. \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/messages/messages_tr.properties b/deps/keycloak/themes/base/account/messages/messages_tr.properties deleted file mode 100644 index 3ec4f11a7..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_tr.properties +++ /dev/null @@ -1,322 +0,0 @@ -doSave=Kaydet -doCancel=\u0130ptal -doLogOutAllSessions=T\u00FCm Oturumlar\u0131 Kapat -doRemove=Sil -doAdd=Ekle -doSignOut=\u00C7\u0131k\u0131\u015F -doLogIn=Oturum a\u00E7 -doLink=Ba\u011Flant\u0131 - - -editAccountHtmlTitle=Hesab\u0131m -personalInfoHtmlTitle=Ki\u015Fisel bilgi -federatedIdentitiesHtmlTitle=De\u011Fi\u015Ftirilen Kimlikler -accountLogHtmlTitle=Kullan\u0131c\u0131 Loglar\u0131 -changePasswordHtmlTitle=\u015Eifre De\u011Fi\u015Ftirme -deviceActivityHtmlTitle=Cihaz Etkinli\u011Fi -sessionsHtmlTitle=Oturum -accountManagementTitle=Keycloak Kullan\u0131c\u0131 Hesab\u0131 Y\u00F6netimi -authenticatorTitle=Kimlik Do\u011Frulama -applicationsHtmlTitle=Uygulama -linkedAccountsHtmlTitle=Ba\u011Flant\u0131l\u0131 Hesaplar - -accountManagementWelcomeMessage=Keycloak Hesap Y\u00F6netimine Ho\u015F Geldiniz -personalInfoIntroMessage=Temel bilgilerinizi y\u00F6netin -accountSecurityTitle=Hesap G\u00FCvenli\u011Fi -accountSecurityIntroMessage=\u015Eifrenizi ve hesap eri\u015Fiminizi kontrol edin -applicationsIntroMessage=Hesab\u0131n\u0131za eri\u015Fmek i\u00E7in uygulama izninizi takip edin ve y\u00F6netin -resourceIntroMessage=Kaynaklar\u0131n\u0131z\u0131 ekip \u00FCyeleri aras\u0131nda payla\u015F\u0131n -passwordLastUpdateMessage=\u015Eifreniz g\u00FCncellendi -updatePasswordTitle=\u015Eifre g\u00FCncelle -updatePasswordMessageTitle=G\u00FC\u00E7l\u00FC bir \u015Fifre se\u00E7ti\u011Finizden emin olun -updatePasswordMessage=G\u00FC\u00E7l\u00FC bir \u015Fifre, say\u0131lar, harfler ve sembollerin kar\u0131\u015F\u0131m\u0131ndan olu\u015Fmal\u0131d\u0131r. Tahmin etmesi zor ve ger\u00E7ek bir kelimeye benzemeyen \u015Fifre sadece bu hesap i\u00E7in kullan\u0131l\u0131r. -personalSubTitle=Ki\u015Fisel Bilgileriniz -personalSubMessage=Bu temel bilgileri y\u00F6netin: ad\u0131n\u0131z, soyad\u0131n\u0131z ve e-posta adresiniz - -authenticatorCode=Kimlik Do\u011Frulama Kodu -email=E-Mail -firstName=Ad -givenName=Ad -fullName=Ad Soyad -lastName=Soyad -familyName=Soyad -password=\u015Eifre -currentPassword=\u015Eimdiki \u015Eifre -passwordConfirm=\u015Eifre Do\u011Frulama -passwordNew=Yeni \u015Eifre -username=Kullan\u0131c\u0131 Ad\u0131 -address=Adres -street=Cadde -region=B\u00F6lge -postal_code=Posta Kodu -locality=\u015Eehir -country=\u00DClke -emailVerified=E-Mail Do\u011Fruland\u0131 -gssDelegationCredential=GSS Yetki Bilgisi - -profileScopeConsentText=Kullan\u0131c\u0131 profili -emailScopeConsentText=Email adresi -addressScopeConsentText=Adres -phoneScopeConsentText=Telefon numaras\u0131 -offlineAccessScopeConsentText=\u00C7evrimd\u0131\u015F\u0131 Eri\u015Fim -samlRoleListScopeConsentText=Rollerim -rolesScopeConsentText=Kullan\u0131c\u0131 rolleri - -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Realm Olu\u015Ftur -role_view-realm=Realm g\u00F6r\u00FCnt\u00FCle -role_view-users=Kullan\u0131c\u0131lar\u0131 g\u00F6r\u00FCnt\u00FCle -role_view-applications=Uygulamalar\u0131 g\u00F6r\u00FCnt\u00FCle -role_view-clients=\u0130stemci g\u00F6r\u00FCnt\u00FCle -role_view-events=Olay g\u00F6r\u00FCnt\u00FCle -role_view-identity-providers=Kimlik Sa\u011Flay\u0131c\u0131lar -role_manage-realm=Realm y\u00F6net -role_manage-users=Kullan\u0131c\u0131lar\u0131 y\u00F6net -role_manage-applications=Uygulamalar\u0131 y\u00F6net -role_manage-identity-providers=Kimlik Sa\u011Flay\u0131c\u0131lar\u0131 Y\u00F6net -role_manage-clients=\u0130stemci y\u00F6net -role_manage-events=Olay y\u00F6net -role_view-profile=Profilleri g\u00F6r\u00FCnt\u00FCle -role_manage-account=Profilleri Y\u00F6net -role_manage-account-links=Profil ba\u011Flant\u0131lar\u0131n\u0131 y\u00F6net -role_read-token=Token oku -role_offline-access=\u00C7evirimd\u0131\u015F\u0131 Yetki -role_uma_authorization=\u0130zinleri Al -client_account=M\u00FC\u015Fteri Hesab\u0131 -client_security-admin-console=G\u00FCvenlik Y\u00F6netici Konsolu -client_admin-cli=Admin CLI -client_realm-management=Realm-Management -client_broker=Broker - -requiredFields=Zorunlu Alanlar -allFieldsRequired=T\u00FCm Alanlar Zorunlu - -backToApplication=« Uygulamaya D\u00F6n -backTo=Geri D\u00F6n {0} - -date=G\u00FCn -event=Olay -ip=IP -client=\u0130stemci -clients=\u0130stemciler -details=Detaylar -started=Ba\u015Flang\u0131\u00E7 Tarihi -lastAccess=Son Eri\u015Fim Tarihi -expires=Son Kullanma Tarihi -applications=Uygulama - -account=Hesap -federatedIdentity=Federal Kimlik -authenticator=Kimlik Do\u011Frulama -device-activity=Cihaz Etkinli\u011Fi -sessions=Oturum -log=Log - -application=Uygulama -availablePermissions=Kullan\u0131labilir \u0130zinler -availableRoles=Kullan\u0131labilir Roller -grantedPermissions=Verilen \u0130zinler -grantedPersonalInfo=\u0130zin Verilen Ki\u015Fisel Bilgiler -additionalGrants=Ek \u0130zinler -action=Aksiyon -inResource=Kaynak -fullAccess=Tam Yetki -offlineToken=\u00C7evirimd\u0131\u015F\u0131-Token -revoke=\u0130zni \u0130ptal et - -configureAuthenticators=\u00C7oklu Kimlik Do\u011Frulama -mobile=Mobil -totpStep1=Ak\u0131ll\u0131 Telefonunuza a\u015Fa\u011F\u0131daki uygulamalardan birini y\u00FCkleyin: -totpStep2=Uygulamay\u0131 a\u00E7\u0131n ve barkodu okutun. -totpStep3=Uygulama taraf\u0131ndan olu\u015Fturulan tek seferlik kodu girin ve Kaydet''i t\u0131klay\u0131n. - -totpManualStep2=Uygulamay\u0131 a\u00E7\u0131n ve a\u015Fa\u011F\u0131daki anahtar\u0131 girin. -totpManualStep3=Bunlar\u0131 uygulama i\u00E7in \u00F6zelle\u015Ftirebilirseniz a\u015Fa\u011F\u0131daki yap\u0131land\u0131rma de\u011Ferlerini kullan\u0131n: -totpUnableToScan=Barkodu tarayam\u0131yor musunuz? -totpScanBarcode=Barkod Tara? - -totp.totp=Zaman bazl\u0131 (time-based) -totp.hotp=Saya\u00E7 tabanl\u0131 (counter-based) - -totpType=Tip -totpAlgorithm=Algoritma -totpDigits=Basamak -totpInterval=Aral\u0131k -totpCounter=Saya\u00E7 - -missingUsernameMessage=L\u00FCtfen bir kullan\u0131c\u0131 ad\u0131 giriniz. -missingFirstNameMessage=L\u00FCtfen bir ad girin. -invalidEmailMessage=Ge\u00E7ersiz e-posta adresi. -missingLastNameMessage=L\u00FCtfen bir soyad\u0131 giriniz. -missingEmailMessage=L\u00FCtfen bir e-mail adresi giriniz. -missingPasswordMessage=L\u00FCtfen bir \u015Fifre giriniz. -notMatchPasswordMessage=\u015Eifreler ayn\u0131 de\u011Fil. - -missingTotpMessage=L\u00FCtfen tek seferlik kodu girin. -invalidPasswordExistingMessage=Mevcut \u015Fifre ge\u00E7ersiz. -invalidPasswordConfirmMessage=\u015Eifre onay\u0131 ayn\u0131 de\u011Fil. -invalidTotpMessage=Ge\u00E7ersiz tek seferlik kod. - -usernameExistsMessage=Kullan\u0131c\u0131 ad\u0131 zaten mevcut. -emailExistsMessage=E-posta adresi zaten mevcut. - -readOnlyUserMessage=Yazma korumal\u0131 oldu\u011Fundan kullan\u0131c\u0131 hesab\u0131n\u0131z\u0131 de\u011Fi\u015Ftiremezsiniz. -readOnlyUsernameMessage=Yazma korumal\u0131 oldu\u011Fundan kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 de\u011Fi\u015Ftiremezsiniz. -readOnlyPasswordMessage=Yazma korumal\u0131 oldu\u011Fundan \u015Fifrenizi de\u011Fi\u015Ftiremezsiniz. - -successTotpMessage=\u00C7oklu kimlik do\u011Frulamas\u0131 ba\u015Far\u0131yla yap\u0131land\u0131r\u0131ld\u0131. -successTotpRemovedMessage=\u00C7oklu kimlik do\u011Frulama ba\u015Far\u0131yla kald\u0131r\u0131ld\u0131. - -successGrantRevokedMessage=\u0130zin ba\u015Far\u0131yla iptal edildi. - -accountUpdatedMessage=Kullan\u0131c\u0131 hesab\u0131n\u0131z g\u00FCncellendi. -accountPasswordUpdatedMessage=\u015Eifreniz g\u00FCncellendi. - -missingIdentityProviderMessage=Kimlik Sa\u011Flay\u0131c\u0131s\u0131 belirtilmemi\u015F. -invalidFederatedIdentityActionMessage=Ge\u00E7ersiz veya eksik eylem. -identityProviderNotFoundMessage=Belirtilen Kimlik Sa\u011Flay\u0131c\u0131 bulunamad\u0131. -federatedIdentityLinkNotActiveMessage=Bu kimlik art\u0131k aktif de\u011Fil. -federatedIdentityRemovingLastProviderMessage=\u015Eifreniz olmad\u0131\u011F\u0131 i\u00E7in son giri\u015Fi kald\u0131ramazs\u0131n\u0131z. -identityProviderRedirectErrorMessage=Kimlik sa\u011Flay\u0131c\u0131ya iletilirken hata olu\u015Ftu. -identityProviderRemovedMessage=Kimlik Sa\u011Flay\u0131c\u0131s\u0131 ba\u015Far\u0131yla kald\u0131r\u0131ld\u0131. -identityProviderAlreadyLinkedMessage=De\u011Fi\u015Ftirilmi\u015F {0} kimli\u011Fi ba\u015Fka bir kullan\u0131c\u0131ya atanm\u0131\u015F. -staleCodeAccountMessage=Bu sayfa art\u0131k ge\u00E7erli de\u011Fil, l\u00FCtfen tekrar deneyin. -consentDenied=Onay reddedildi. - -accountDisabledMessage=Hesab\u0131n\u0131z kilitlendi, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. - -accountTemporarilyDisabledMessage=Hesab\u0131n\u0131z ge\u00E7ici olarak kilitlendi, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in veya daha sonra tekrar deneyin. -invalidPasswordMinLengthMessage=Ge\u00E7ersiz \u015Eifre: En az {0} karakter uzunlu\u011Funda olmal\u0131. -invalidPasswordMinLowerCaseCharsMessage=Ge\u00E7ersiz \u015Eifre \: En az {0} k\u00FC\u00E7\u00FCk harf i\u00E7ermelidir. -invalidPasswordMinDigitsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} say\u0131(lar) i\u00E7ermelidir. -invalidPasswordMinUpperCaseCharsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} b\u00FCy\u00FCk harf i\u00E7ermelidir. -invalidPasswordMinSpecialCharsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} \u00F6zel karakter i\u00E7ermelidir. -invalidPasswordNotUsernameMessage=Ge\u00E7ersiz \u015Eifre: Kullan\u0131c\u0131 ad\u0131yla ayn\u0131 olamaz. -invalidPasswordRegexPatternMessage=Ge\u00E7ersiz \u015Eifre: Regex Patternine uygun de\u011Fil. -invalidPasswordHistoryMessage=Ge\u00E7ersiz \u015Eifre: Son {0} \u015Fifreden biri olamaz. -invalidPasswordBlacklistedMessage=Ge\u00E7ersiz \u015Eifre: \u015Eifre bloklanm\u0131\u015F \u015Fifreler listesindedir (kara liste). -invalidPasswordGenericMessge=Ge\u00E7ersiz \u015Eifre: Yeni \u015Fifre, \u015Fifre kurallar\u0131n\u0131 ihlal ediyor. - - - -# Authorization -myResources=Kaynaklar\u0131m -myResourcesSub=Kaynaklar\u0131m -doDeny=Reddet -doRevoke=Geri al -doApprove=Onayla -doRemoveSharing=Payla\u015F\u0131m\u0131 Kald\u0131r -doRemoveRequest=\u0130ste\u011Fi Kald\u0131r -peopleAccessResource=Bu kayna\u011Fa eri\u015Fimi olan ki\u015Filer -resourceManagedPolicies=Bu kayna\u011Fa eri\u015Fim izni veren izinler -resourceNoPermissionsGrantingAccess=Bu kayna\u011Fa eri\u015Fim izni verilmeyen izin yok -anyAction=Herhangi bir eylem -description=A\u00E7\u0131klama -name=\u0130sim -scopes=Kapsam -resource=Kaynak -user=Kullan\u0131c\u0131 -peopleSharingThisResource=Bu kayna\u011F\u0131 payla\u015Fan kullan\u0131c\u0131lar -shareWithOthers=Ba\u015Fkalar\u0131yla payla\u015F -needMyApproval=Onay\u0131m gerekli -requestsWaitingApproval=Talepleriniz onay bekliyor -icon=Icon -requestor=Talep eden -owner=Sahip -resourcesSharedWithMe=Kaynaklar benimle payla\u015F\u0131ld\u0131 -permissionRequestion=\u0130zin Talepleri -permission=\u0130zin -shares=Payla\u015F\u0131m(lar) - -# Applications -applicationName=\u0130sim -applicationType=Uygulama Tipi -applicationInUse=Yaln\u0131zca uygulama i\u00E7i kullan\u0131m -clearAllFilter=T\u00FCm filtreleri temizle -activeFilters=Aktif filtreler -filterByName=\u0130sme G\u00F6re Filtrele ... -allApps=B\u00FCt\u00FCn uygulamalar -internalApps=\u0130\u00E7 uygulamalar -thirdpartyApps=\u00DC\u00E7\u00FCnc\u00FC parti uygulamalar -appResults=Sonu\u00E7lar - -# Linked account -authorizedProvider=Yetkili Tedarik\u00E7i -authorizedProviderMessage=Yetkili Sa\u011Flay\u0131c\u0131lar hesab\u0131n\u0131zla ba\u011Flant\u0131l\u0131 -identityProvider=Kimlik Sa\u011Flay\u0131c\u0131s\u0131 -identityProviderMessage=Hesab\u0131n\u0131z\u0131 yap\u0131land\u0131rd\u0131\u011F\u0131n\u0131z kimlik sa\u011Flay\u0131c\u0131lar\u0131yla ba\u011Flamak i\u00E7in -socialLogin=Sosyal Giri\u015F -userDefined=Kullan\u0131c\u0131 tan\u0131ml\u0131 -removeAccess=Eri\u015Fimi Kald\u0131r -removeAccessMessage=Bu uygulama hesab\u0131n\u0131 kullanmak istiyorsan\u0131z tekrar eri\u015Fim vermeniz gerekir. - -#Authenticator -authenticatorStatusMessage=\u0130ki fakt\u00F6rl\u00FC kimlik do\u011Frulama aktif -authenticatorFinishSetUpTitle=\u0130ki Fakt\u00F6rl\u00FC Do\u011Frulama -authenticatorFinishSetUpMessage=Keycloak hesab\u0131n\u0131zda her oturum a\u00E7t\u0131\u011F\u0131n\u0131zda, iki fakt\u00F6rl\u00FC bir do\u011Frulama kodu girmeniz istenecektir. -authenticatorSubTitle=\u0130ki Fakt\u00F6rl\u00FC Kimlik Do\u011Frulamay\u0131 Ayarlama -authenticatorSubMessage=Hesab\u0131n\u0131z\u0131n g\u00FCvenli\u011Fini art\u0131rmak i\u00E7in mevcut iki fakt\u00F6rl\u00FC kimlik do\u011Frulama y\u00F6ntemlerinden en az birini etkinle\u015Ftirin. -authenticatorMobileTitle=Mobil Kimlik Do\u011Frulay\u0131c\u0131 -authenticatorMobileMessage=Do\u011Frulama kodlar\u0131n\u0131 iki fakt\u00F6rl\u00FC kimlik do\u011Frulama olarak almak i\u00E7in mobil Do\u011Frulay\u0131c\u0131''y\u0131 kullan\u0131n. -authenticatorMobileFinishSetUpMessage=Do\u011Frulay\u0131c\u0131, telefonunuza ba\u011Fl\u0131. -authenticatorActionSetup=Kur -authenticatorSMSTitle=SMS Kodu -authenticatorSMSMessage=Keycloak, do\u011Frulama kodunu telefonunuza iki fakt\u00F6rl\u00FC kimlik do\u011Frulamas\u0131 olarak g\u00F6nderecektir. -authenticatorSMSFinishSetUpMessage=K\u0131sa mesajlar g\u00F6nderilir -authenticatorDefaultStatus=Varsay\u0131lan -authenticatorChangePhone=Telefon Numaras\u0131n\u0131 De\u011Fi\u015Ftir -authenticatorBackupCodesTitle=Yedekleme Kodlar\u0131 -authenticatorBackupCodesMessage=8 haneli yedek kodlar\u0131n\u0131z\u0131 al\u0131n -authenticatorBackupCodesFinishSetUpMessage=\u015Eu anda 12 haneli yedek kod olu\u015Fturuldu. Her biri bir kez kullan\u0131labilir. - -#Authenticator - Mobile Authenticator setup -authenticatorMobileSetupTitle=Mobil Kimlik Do\u011Frulama Kurulumu -smscodeIntroMessage=Telefon numaran\u0131z\u0131 girin ve telefonunuza bir do\u011Frulama kodu g\u00F6nderilecektir. -mobileSetupStep1=Telefonunuza bir kimlik do\u011Frulama uygulamas\u0131 y\u00FCkleyin. Burada listelenen uygulamalar desteklenmektedir. -mobileSetupStep2=Uygulamay\u0131 a\u00E7\u0131n ve barkodu taray\u0131n. -mobileSetupStep3=Uygulama taraf\u0131ndan sa\u011Flanan tek seferlik kodu girin ve kurulumu tamamlamak i\u00E7in Kaydet''e t\u0131klay\u0131n. -scanBarCode=Barkodu taramak ister misiniz? -enterBarCode=Tek seferlik kodu girin -doCopy=Kopyala -doFinish=Bitir - -#Authenticator - SMS Code setup -authenticatorSMSCodeSetupTitle=SMS Kodu Kurulumu -chooseYourCountry=\u00DClkenizi se\u00E7in -enterYourPhoneNumber=Telefon numaran\u0131z\u0131 girin -sendVerficationCode=Do\u011Frulama kodu G\u00F6nder -enterYourVerficationCode=Onaylama kodunu girin - -#Authenticator - backup Code setup -authenticatorBackupCodesSetupTitle=Yedekleme Kodlar\u0131 Kurulumu -backupcodesIntroMessage=Telefonunuza eri\u015Fimi kaybederseniz, yine de yedek kodlar arac\u0131l\u0131\u011F\u0131yla hesab\u0131n\u0131za giri\u015F yapabilirsiniz. Onlar\u0131 g\u00FCvenli ve eri\u015Filebilir bir yerde saklay\u0131n. -realmName=Realm -doDownload=\u0130ndir -doPrint=Yazd\u0131r -backupCodesTips-1=Her yedek kod bir kez kullan\u0131labilir. -backupCodesTips-2=Bu kodlar \u00FCzerinde olu\u015Fturuldu -generateNewBackupCodes=Yeni Yedekleme Kodlar\u0131 Olu\u015Ftur -backupCodesTips-3=Yeni yedek kodlar olu\u015Fturdu\u011Funuzda, mevcut kodlar art\u0131k \u00E7al\u0131\u015Fmayacakt\u0131r. -backtoAuthenticatorPage=Kimlik Do\u011Frulay\u0131c\u0131 Sayfas\u0131na Geri D\u00F6n - -#Resources -resources=Kaynaklar -sharedwithMe=Benimle payla\u015Ft\u0131 -share=Payla\u015F\u0131m -sharedwith=\u0130le payla\u015Ft\u0131 -accessPermissions=Eri\u015Fim \u0130zinleri -permissionRequests=\u0130zin \u0130stekleri -approve=Onayla -approveAll=T\u00FCm\u00FCn\u00FC onayla -people=\u0130nsanlar -perPage=Sayfa ba\u015F\u0131na -currentPage=Ge\u00E7erli sayfa -sharetheResource=Kayna\u011F\u0131 payla\u015F -group=Grup -selectPermission=\u0130zin Se\u00E7 -addPeople=Kayna\u011F\u0131n\u0131z\u0131 payla\u015Fmak i\u00E7in kullan\u0131c\u0131 ekleyin -addTeam=Kayna\u011F\u0131n\u0131z\u0131 payla\u015Fmak i\u00E7in ekip ekleyin -myPermissions=\u0130zinlerim -waitingforApproval=Onay bekleniyor -anyPermission=Herhangi bir izin diff --git a/deps/keycloak/themes/base/account/messages/messages_zh_CN.properties b/deps/keycloak/themes/base/account/messages/messages_zh_CN.properties deleted file mode 100644 index bbef84e45..000000000 --- a/deps/keycloak/themes/base/account/messages/messages_zh_CN.properties +++ /dev/null @@ -1,153 +0,0 @@ -# encoding: utf-8 -doSave=ä¿å­˜ -doCancel=å–消 -doLogOutAllSessions=ç™»å‡ºæ‰€æœ‰ä¼šè¯ -doRemove=删除 -doAdd=添加 -doSignOut=登出 - -editAccountHtmlTitle=编辑账户 -federatedIdentitiesHtmlTitle=链接的身份 -accountLogHtmlTitle=账户日志 -changePasswordHtmlTitle=æ›´æ”¹å¯†ç  -sessionsHtmlTitle=ä¼šè¯ -accountManagementTitle=Keycloakè´¦æˆ·ç®¡ç† -authenticatorTitle=认è¯è€… -applicationsHtmlTitle=应用 - -authenticatorCode=一次性认è¯ç  -email=电å­é‚®ä»¶ -firstName=å -givenName=姓 -fullName=å…¨å -lastName=姓 -familyName=姓 -password=å¯†ç  -passwordConfirm=确认 -passwordNew=æ–°å¯†ç  -username=用户å -address=åœ°å€ -street=è¡—é“ -locality=城市ä½æ‰€ -region=çœï¼Œè‡ªæ²»åŒºï¼Œç›´è¾–市 -postal_code=é‚®æ”¿ç¼–ç  -country=国家 -emailVerified=验è¯è¿‡çš„Email -gssDelegationCredential=GSS Delegation Credential - -role_admin=管ç†å‘˜ -role_realm-admin=域管ç†å‘˜ -role_create-realm=创建域 -role_view-realm=查看域 -role_view-users=查看用户 -role_view-applications=查看应用 -role_view-clients=查看客户 -role_view-events=查看事件 -role_view-identity-providers=查看身份æ供者 -role_manage-realm=管ç†åŸŸ -role_manage-users=管ç†ç”¨æˆ· -role_manage-applications=管ç†åº”用 -role_manage-identity-providers=管ç†èº«ä»½æ供者 -role_manage-clients=管ç†å®¢æˆ· -role_manage-events=管ç†äº‹ä»¶ -role_view-profile=æŸ¥çœ‹ç”¨æˆ·ä¿¡æ¯ -role_manage-account=管ç†è´¦æˆ· -role_read-token=è¯»å– token -role_offline-access=离线访问 -role_uma_authorization=获å–æŽˆæƒ -client_account=账户 -client_security-admin-console=安全管ç†ç»ˆç«¯ -client_admin-cli=管ç†å‘½ä»¤è¡Œ -client_realm-management=åŸŸç®¡ç† -client_broker=ä»£ç† - - -requiredFields=必填项 -allFieldsRequired=所有项必填 - -backToApplication=« 回到应用 -backTo=回到 {0} - -date=日期 -event=事件 -ip=IP -client=客户端 -clients=客户端 -details=详情 -started=开始 -lastAccess=最åŽä¸€æ¬¡è®¿é—® -expires=过期时间 -applications=应用 - -account=账户 -federatedIdentity=å…³è”身份 -authenticator=认è¯æ–¹ -sessions=ä¼šè¯ -log=日志 - -application=应用 -availablePermissions=å¯ç”¨æƒé™ -grantedPermissions=授予æƒé™ -grantedPersonalInfo=授æƒçš„ä¸ªäººä¿¡æ¯ -additionalGrants=å¯æŽˆäºˆçš„æƒé™ -action=æ“作 -inResource=in -fullAccess=所有æƒé™ -offlineToken=离线 token -revoke=æ”¶å›žæŽˆæƒ - -configureAuthenticators=é…置的认è¯è€… -mobile=手机 -totpStep1=在你的设备上安装 FreeOTP 或者 Google Authenticator.两个应用å¯ä»¥ä»Ž Google Play å’Œ Apple App Store下载。 -totpStep2=打开应用扫æ二维ç è¾“入验è¯ç  -totpStep3=输入应用æ供的一次性验è¯ç å•å‡»ä¿å­˜ - -missingUsernameMessage=请指定用户å -missingFirstNameMessage=请指定å -invalidEmailMessage=无效的电å­é‚®ç®±åœ°å€ -missingLastNameMessage=请指定姓 -missingEmailMessage=è¯·æŒ‡å®šé‚®ä»¶åœ°å€ -missingPasswordMessage=è¯·è¾“å…¥å¯†ç  -notMatchPasswordMessage=密ç ä¸åŒ¹é… - -missingTotpMessage=请指定认è¯è€…ä»£ç  -invalidPasswordExistingMessage=æ— æ•ˆçš„æ—§å¯†ç  -invalidPasswordConfirmMessage=确认密ç ä¸ç›¸ç¬¦ -invalidTotpMessage=无效的认è¯ç  - -usernameExistsMessage=用户åå·²ç»å­˜åœ¨ -emailExistsMessage=电å­é‚®ç®±å·²ç»å­˜åœ¨ - -readOnlyUserMessage=无法修改账户,因为它是åªè¯»çš„。 -readOnlyPasswordMessage=ä¸å¯ä»¥æ›´è¯¥è´¦æˆ·å› ä¸ºå®ƒæ˜¯åªè¯»çš„。 - -successTotpMessage=手机认è¯è€…é…置完毕 -successTotpRemovedMessage=手机认è¯è€…已删除 - -successGrantRevokedMessage=授æƒæˆåŠŸå›žæ”¶ - -accountUpdatedMessage=您的账户已ç»æ›´æ–° -accountPasswordUpdatedMessage=您的密ç å·²ç»ä¿®æ”¹ - -missingIdentityProviderMessage=身份æ供者未指定 -invalidFederatedIdentityActionMessage=无效或者缺少æ“作 -identityProviderNotFoundMessage=指定的身份æ供者未找到 -federatedIdentityLinkNotActiveMessage=这个身份ä¸å†ä½¿ç”¨äº†ã€‚ -federatedIdentityRemovingLastProviderMessage=ä½ ä¸å¯ä»¥ç§»é™¤æœ€åŽä¸€ä¸ªèº«ä»½æä¾›è€…å› ä¸ºä½ æ²¡æœ‰è®¾ç½®å¯†ç  -identityProviderRedirectErrorMessage=å°è¯•é‡å®šå‘到身份æ供商失败 -identityProviderRemovedMessage=身份æ供商æˆåŠŸåˆ é™¤ -identityProviderAlreadyLinkedMessage=链接的身份 {0} å·²ç»è¿žæŽ¥åˆ°å·²æœ‰ç”¨æˆ·ã€‚ -staleCodeAccountMessage=页é¢è¿‡æœŸã€‚请å†è¯•ä¸€æ¬¡ã€‚ -consentDenied=ä¸åŒæ„ - -accountDisabledMessage=账户已ç»å…³é—­ï¼Œè¯·è”系管ç†å‘˜ - -accountTemporarilyDisabledMessage=账户暂时关闭,请è”系管ç†å‘˜æˆ–ç¨åŽå†è¯•ã€‚ -invalidPasswordMinLengthMessage=无效的密ç :最短长度 {0}. -invalidPasswordMinLowerCaseCharsMessage=无效的密ç : è‡³å°‘åŒ…å« {0} å°å†™å­—æ¯ã€‚ -invalidPasswordMinDigitsMessage=无效的密ç : è‡³å°‘åŒ…å« {0} 数字。 -invalidPasswordMinUpperCaseCharsMessage=无效的密ç : è‡³å°‘åŒ…å« {0} å¤§å†™å­—æ¯ -invalidPasswordMinSpecialCharsMessage=无效的密ç : è‡³å°‘åŒ…å« {0} 个特殊字符 -invalidPasswordNotUsernameMessage=无效的密ç : ä¸èƒ½ä¸Žç”¨æˆ·åç›¸åŒ -invalidPasswordRegexPatternMessage=无效的密ç : 无法与正则表达å¼åŒ¹é… -invalidPasswordHistoryMessage=无效的密ç : ä¸èƒ½ä¸Žä¹‹å‰çš„{0} 个旧密ç ç›¸åŒ diff --git a/deps/keycloak/themes/base/account/password.ftl b/deps/keycloak/themes/base/account/password.ftl deleted file mode 100644 index 4a043f28b..000000000 --- a/deps/keycloak/themes/base/account/password.ftl +++ /dev/null @@ -1,59 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='password' bodyClass='password'; section> - -
-
-

${msg("changePasswordHtmlTitle")}

-
-
- ${msg("allFieldsRequired")} -
-
- -
- - - <#if password.passwordSet> -
-
- -
- -
- -
-
- - - - -
-
- -
- -
- -
-
- -
-
- -
- -
- -
-
- -
-
-
- -
-
-
-
- - diff --git a/deps/keycloak/themes/base/account/resource-detail.ftl b/deps/keycloak/themes/base/account/resource-detail.ftl deleted file mode 100644 index 2c963d773..000000000 --- a/deps/keycloak/themes/base/account/resource-detail.ftl +++ /dev/null @@ -1,277 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='authorization' bodyClass='authorization'; section> - - - - -
-
-

- ${msg("myResources")} <#if authorization.resource.displayName??>${authorization.resource.displayName}<#else>${authorization.resource.name} -

-
-
- - <#if authorization.resource.iconUri??> - -
- - -
-
-

- ${msg("peopleAccessResource")} -

-
-
-
-
- - - - - - - - - - - <#if authorization.resource.shares?size != 0> - <#list authorization.resource.shares as permission> - - - - - - - - - - - - - <#else> - - - - - -
${msg("user")}${msg("permission")}${msg("date")}${msg("action")}
- <#if permission.requester.email??>${permission.requester.email}<#else>${permission.requester.username} - - <#if permission.scopes?size != 0> - <#list permission.scopes as scope> - <#if scope.granted && scope.scope??> - - <#else> - ${msg("anyPermission")} - - - <#else> - Any action - - - ${permission.createdDate?datetime} - - ${msg("doRevoke")} -
${msg("resourceIsNotBeingShared")}
- -
-
-
-
-

- ${msg("resourceManagedPolicies")} -

-
-
-
-
- - - - - - - - - - <#if authorization.resource.policies?size != 0> - <#list authorization.resource.policies as permission> - - - - - - - - - - - - <#else> - - - - - -
${msg("description")}${msg("permission")}${msg("action")}
- <#if permission.description??> - ${permission.description} - - - <#if permission.scopes?size != 0> - <#list permission.scopes as scope> - - - <#else> - ${msg("anyAction")} - - - ${msg("doRevoke")} -
- ${msg("resourceNoPermissionsGrantingAccess")} -
- -
-
-
-
-

- ${msg("shareWithOthers")} -

-
-
-
-
-
- -
- * -
-
-
-
- -
-
-
- <#list authorization.resource.scopes as scope> - - -
- -
-
-
-
-
-
- diff --git a/deps/keycloak/themes/base/account/resources.ftl b/deps/keycloak/themes/base/account/resources.ftl deleted file mode 100644 index d86e8bc32..000000000 --- a/deps/keycloak/themes/base/account/resources.ftl +++ /dev/null @@ -1,403 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='authorization' bodyClass='authorization'; section> - - -
-
-

- ${msg("myResources")} -

-
-
- - <#if authorization.resourcesWaitingApproval?size != 0> -
-
-

- ${msg("needMyApproval")} -

-
-
-
-
- - - - - - - - - - - <#list authorization.resourcesWaitingApproval as resource> - <#list resource.permissions as permission> - - - - - - - - - - - - - - -
${msg("resource")}${msg("requestor")}${msg("permissionRequestion")}${msg("action")}
- <#if resource.displayName??>${resource.displayName}<#else>${resource.name} - - <#if permission.requester.email??>${permission.requester.email}<#else>${permission.requester.username} - - <#list permission.scopes as scope> - <#if scope.scope??> - - <#else> - ${msg("anyPermission")} - - - - ${msg("doApprove")} - ${msg("doDeny")} -
-
-
- - -
-
-

- ${msg("myResourcesSub")} -

-
-
-
-
- - - - - - - - - - - <#if authorization.resources?size != 0> - <#list authorization.resources as resource> - - - - - - - <#else> - - - - - -
${msg("resource")}${msg("application")}${msg("peopleSharingThisResource")}
- - <#if resource.displayName??>${resource.displayName}<#else>${resource.name} - - - <#if resource.resourceServer.baseUri??> - ${resource.resourceServer.name} - <#else> - ${resource.resourceServer.name} - - - <#if resource.shares?size != 0> - ${resource.shares?size} - <#else> - ${msg("notBeingShared")} - -
${msg("notHaveAnyResource")}
-
-
- -
-
-

- ${msg("resourcesSharedWithMe")} -

-
-
-
-
-
- - - - - - - - - - - - - - <#if authorization.sharedResources?size != 0> - <#list authorization.sharedResources as resource> - - - - - - - - - - <#else> - - - - - -
disabled="true" - ${msg("resource")}${msg("owner")}${msg("application")}${msg("permission")}${msg("date")}
- - - <#if resource.displayName??>${resource.displayName}<#else>${resource.name} - - ${resource.ownerName} - - <#if resource.resourceServer.baseUri??> - ${resource.resourceServer.name} - <#else> - ${resource.resourceServer.name} - - - <#if resource.permissions?size != 0> -
    - <#list resource.permissions as permission> - <#list permission.scopes as scope> - <#if scope.granted && scope.scope??> -
  • - <#if scope.scope.displayName??> - ${scope.scope.displayName} - <#else> - ${scope.scope.name} - -
  • - <#else> - ${msg("anyPermission")} - - - -
- <#else> - Any action - -
- ${resource.permissions[0].grantedDate?datetime} -
${msg("noResourcesSharedWithYou")}
-
-
- <#if authorization.sharedResources?size != 0> - - -
- - <#if authorization.resourcesWaitingOthersApproval?size != 0> -
-
-
-

- ${msg("requestsWaitingApproval")} -

-
-
-
-
- ${msg("havePermissionRequestsWaitingForApproval",authorization.resourcesWaitingOthersApproval?size)} - ${msg("clickHereForDetails")} -
-
-
-
-
-
-
-
-
- -
-
- - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/sessions.ftl b/deps/keycloak/themes/base/account/sessions.ftl deleted file mode 100644 index 89dbf6548..000000000 --- a/deps/keycloak/themes/base/account/sessions.ftl +++ /dev/null @@ -1,44 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='sessions' bodyClass='sessions'; section> - -
-
-

${msg("sessionsHtmlTitle")}

-
-
- - - - - - - - - - - - - - <#list sessions.sessions as session> - - - - - - - - - - -
${msg("ip")}${msg("started")}${msg("lastAccess")}${msg("expires")}${msg("clients")}
${session.ipAddress}${session.started?datetime}${session.lastAccess?datetime}${session.expires?datetime} - <#list session.clients as client> - ${client}
- -
- -
- - -
- - diff --git a/deps/keycloak/themes/base/account/template.ftl b/deps/keycloak/themes/base/account/template.ftl deleted file mode 100644 index 6f08eefc5..000000000 --- a/deps/keycloak/themes/base/account/template.ftl +++ /dev/null @@ -1,88 +0,0 @@ -<#macro mainLayout active bodyClass> - - - - - - - - ${msg("accountManagementTitle")} - - <#if properties.stylesCommon?has_content> - <#list properties.stylesCommon?split(' ') as style> - - - - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - <#if properties.scripts?has_content> - <#list properties.scripts?split(' ') as script> - - - - - - - - -
-
- -
- -
- <#if message?has_content> -
- <#if message.type=='success' > - <#if message.type=='error' > - -
- - - <#nested "content"> -
-
- - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/account/theme.properties b/deps/keycloak/themes/base/account/theme.properties deleted file mode 100644 index d537a8bf4..000000000 --- a/deps/keycloak/themes/base/account/theme.properties +++ /dev/null @@ -1 +0,0 @@ -locales=ca,cs,da,de,en,es,fr,hu,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN diff --git a/deps/keycloak/themes/base/account/totp.ftl b/deps/keycloak/themes/base/account/totp.ftl deleted file mode 100644 index 987fe2473..000000000 --- a/deps/keycloak/themes/base/account/totp.ftl +++ /dev/null @@ -1,141 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.mainLayout active='totp' bodyClass='totp'; section> - -
-
-

${msg("authenticatorTitle")}

-
- <#if totp.otpCredentials?size == 0> -
- * ${msg("requiredFields")} -
- -
- - <#if totp.enabled> - - - <#if totp.otpCredentials?size gt 1> - - - - <#else> - - - - - - - <#list totp.otpCredentials as credential> - - - <#if totp.otpCredentials?size gt 1> - - - - - - - -
${msg("configureAuthenticators")}
${msg("configureAuthenticators")}
${msg("mobile")}${credential.id}${credential.userLabel!} -
- - - - -
-
- <#else> - -
- -
    -
  1. -

    ${msg("totpStep1")}

    - -
      - <#list totp.policy.supportedApplications as app> -
    • ${app}
    • - -
    -
  2. - - <#if mode?? && mode = "manual"> -
  3. -

    ${msg("totpManualStep2")}

    -

    ${totp.totpSecretEncoded}

    -

    ${msg("totpScanBarcode")}

    -
  4. -
  5. -

    ${msg("totpManualStep3")}

    -
      -
    • ${msg("totpType")}: ${msg("totp." + totp.policy.type)}
    • -
    • ${msg("totpAlgorithm")}: ${totp.policy.getAlgorithmKey()}
    • -
    • ${msg("totpDigits")}: ${totp.policy.digits}
    • - <#if totp.policy.type = "totp"> -
    • ${msg("totpInterval")}: ${totp.policy.period}
    • - <#elseif totp.policy.type = "hotp"> -
    • ${msg("totpCounter")}: ${totp.policy.initialCounter}
    • - -
    -
  6. - <#else> -
  7. -

    ${msg("totpStep2")}

    -

    Figure: Barcode

    -

    ${msg("totpUnableToScan")}

    -
  8. - -
  9. -

    ${msg("totpStep3")}

    -

    ${msg("totpStep3DeviceName")}

    -
  10. -
- -
- -
- -
-
- * -
- -
- - -
- - -
- -
-
- <#if totp.otpCredentials?size gte 1>* -
- -
- -
-
- -
-
-
- - -
-
-
-
- - - diff --git a/deps/keycloak/themes/base/admin/index.ftl b/deps/keycloak/themes/base/admin/index.ftl deleted file mode 100644 index ec858db8f..000000000 --- a/deps/keycloak/themes/base/admin/index.ftl +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - <#if properties.stylesCommon?has_content> - <#list properties.stylesCommon?split(' ') as style> - - - <#list properties.styles?split(' ') as style> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <#if properties.scripts?has_content> - <#list properties.scripts?split(' ') as script> - - - - - - - - -
-
-
-
-
- - - -
Loading...
- - - diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_ca.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_ca.properties deleted file mode 100644 index 1e5b080a8..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_ca.properties +++ /dev/null @@ -1,477 +0,0 @@ -# Common messages -enabled=Habilitat -name=Nom -save=Desar -cancel=Cancel\u00B7la -onText=SI -offText=NO -client=Client -clients=Clients -clear=Neteja -selectOne=Selecciona un... - -true=S\u00ED -false=No - - -# Realm settings -realm-detail.enabled.tooltip=Els usuaris i clients nom\u00E9s poden accedir a un domini si est\u00E0 habilitat -registrationAllowed=Registre d''usuari -registrationAllowed.tooltip=Habilitar/deshabilitar la p\u00E0gina de registre. Un enlla\u00E7 per al registre es mostrar\u00E0 tamb\u00E9 a la p\u00E0gina d''inici de sessi\u00F3. -registrationEmailAsUsername=Email com a nom d''usuari -registrationEmailAsUsername.tooltip=Si est\u00E0 habilitat el nom d''usuari queda ocult del formulari de registre i l''email es fa servir com a nom d''usuari per als nous usuaris. -editUsernameAllowed=Edita el nom d''usuari -editUsernameAllowed.tooltip=Si est\u00E0 habilitat, el nom d''usuari \u00E9s editable, altrament \u00E9s de nom\u00E9s lectura. -resetPasswordAllowed=Oblit contrasenya -resetPasswordAllowed.tooltip=Mostra un enlla\u00E7 a la p\u00E0gina d''inici de sessi\u00F3 perqu\u00E8 l''usuari faci clic quan ha oblidat les seves credencials. -rememberMe=Mantenir connectat -rememberMe.tooltip=Mostra la casella de selecci\u00F3 en la p\u00E0gina d''inici de sessi\u00F3 per a permetre a l''usuari estar connectat entre reinicis del navegador fins que la sessi\u00F3 expiri. -verifyEmail=Verificar email -verifyEmail.tooltip=For\u00E7ar l''usuari a verificar la seva adre\u00E7a de correu electr\u00F2nic la primera vegada que inici\u00EF sessi\u00F3. -sslRequired=Sol\u00B7licitar SSL -sslRequired.option.all=totes les peticions -sslRequired.option.external=peticions externes -sslRequired.option.none=cap -sslRequired.tooltip=\u00C9s HTTP obligatori? ''cap'' significa que HTTPS no \u00E9s obligatori per cap direcic\u00F3n IP de client, ''peticions externes'' indica que localhost i les adreces IP privades poden accedir sense HTTPS, ''totes les peticions'' vol dir que HTTPS \u00E9s obligatori per a totes les adreces IP. -publicKey=Clau p\u00FAblica -gen-new-keys=Generar noves claus -certificate=Certificat -host=Host -smtp-host=Host SMTP -port=Port -smtp-port=Port SMTP (per defecte 25) -from=Des de -sender-email-addr=Email del emissor -enable-ssl=Habilitar SSL -enable-start-tls=Habilitar StartTLS -enable-auth=Habilitar autenticaci\u00F3 -username=Usuari -login-username=Usuari -password=Contrasenya -login-password=Contrasenya -login-theme=Tema d''inici de sessi\u00F3 -select-one=Selecciona un... -login-theme.tooltip=Selecciona el tema per a les p\u00E0gines d''inici de sessi\u00F3, OTP, permisos, registre i recordatori de contrasenya. -account-theme=Tema de compte -account-theme.tooltip=Selecciona el tema per a les p\u00E0gines de gesti\u00F3 del compte d''usuari. -admin-console-theme=Tema de consola d''administraci\u00F3 -select-theme-admin-console=Selecciona el tema per a la consola d''administraci\u00F3. -email-theme=Tema d''email -select-theme-email=Selecciona el tema per als correus electr\u00F2nics que s\u00F3n enviats pel servidor. -i18n-enabled=Internacionalitzaci\u00F3 activa -supported-locales=Idiomes suportats -supported-locales.placeholder=Indica l''idioma i prem Intro -default-locale=Idioma per defecte -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-enabled=Cach\u00E9 de domini habilitada -realm-cache-enabled.tooltip=Activar/desactivar la cach\u00E9 per al domini, client i dades de rols. -user-cache-enabled=Cach\u00E9 d''usuari habilitada -user-cache-enabled.tooltip=Habilitar/deshabilitar la cach\u00E9 d''usuaris i d''assignacions d''usuaris a rols. -revoke-refresh-token=Revocar el token d''actualitzaci\u00F3 -revoke-refresh-token.tooltip=Si est\u00E0 activat els tokens d''actualitzaci\u00F3 nom\u00E9s poden usar-se una vegada. En un altre cas els tokens d''actualitzaci\u00F3 no es revoquen quan s''utilitzen i poden ser usat m\u00FAltiples vegades. -sso-session-idle=Sessions SSO inactives -seconds=Segons -minutes=Minuts -hours=Hores -days=Dies -sso-session-max=Temps m\u00E0xim sessi\u00F3 SSO -sso-session-idle.tooltip=Temps m\u00E0xim que una sessi\u00F3 pot estar inactiva abans que expiri. Els tokens i sessions de navegador s\u00F3n invalidades quan la sessi\u00F3 expira. -sso-session-max.tooltip=Temps m\u00E0xim abans que una sessi\u00F3 expiri. Els tokens i sessions de navegador s\u00F3n invalidats quan una sessi\u00F3 expira. -offline-session-idle=Inactivitat de sessi\u00F3 sense connexi\u00F3 -offline-session-idle.tooltip=Temps m\u00E0xim inactiu d''una sessi\u00F3 sense connexi\u00F3 abans que expiri. Necessites fer servi un token sense connexi\u00F3 per refrescar almenys una vegada dins d'aquest per\u00EDode, en un altre cas la sessi\u00F3 sense connexi\u00F3 expirar\u00E0. -access-token-lifespan=Durada del token d''acc\u00E9s -access-token-lifespan.tooltip=Temps m\u00E0xim abans que un token d''acc\u00E9s expiri. Es recomana que aquest valor sigui curt en relaci\u00F3 al temps m\u00E0xim de SSO -client-login-timeout=Temps m\u00E0xim d''autenticaci\u00F3 -client-login-timeout.tooltip=Temps m\u00E0xim que un client t\u00E9 per finalitzar el protocol d''obtenci\u00F3 del token d''acc\u00E9s. Hauria de ser normalment de l''ordre d''1 minut. -login-timeout=Temps m\u00E0xim de desconnexi\u00F3 -login-timeout.tooltip=Temps m\u00E0xim que un usuari t\u00E9 per completar l''inici de sessi\u00F3. Es recomana que sigui relativament alt. 30 minuts o m\u00E9s. -login-action-timeout=Temps m\u00E0xim d''acci\u00F3 en l''inici de sessi\u00F3 -login-action-timeout.tooltip=Temps m\u00E0xim que un usuari t\u00E9 per completar accions relacionades amb l''inici de sessi\u00F3, com l''actualitzaci\u00F3 de contrasenya o configuraci\u00F3 de OTP. \u00C9s recomanat que sigui relativament alt. 5 minuts o m\u00E9s. -headers=Cap\u00E7aleres -brute-force-detection=Detecci\u00F3 d''atacs per for\u00E7a bruta -x-frame-options=X-Frame-Options -click-label-for-info=Fes clic a l''enlla\u00E7 de l''etiqueta per obtenir m\u00E9s informaci\u00F3. El valor per defecte evita que les p\u00E0gines siguin incloses des d'iframes externs. -content-sec-policy=Content-Security-Policy -max-login-failures=Nombre m\u00E0xim d''errors d''inici de sessi\u00F3 -max-login-failures.tooltip=Indica quants errors es permeten abans que es dispari una espera. -wait-increment=Increment d''espera -wait-increment.tooltip=Quan s''ha arribat al llindar d''error, quant de temps ha d''estar un usuari bloquejat? -quick-login-check-millis=Temps en mil\u00B7lisegons entre inicis de sessi\u00F3 r\u00E0pids -quick-login-check-millis.tooltip=Si ocorren errors de forma concurrent i molt r\u00E0pida, bloquejar a l''usuari. -min-quick-login-wait=Temps m\u00EDnim entre errors de connexi\u00F3 r\u00E0pids -min-quick-login-wait.tooltip=Quant de temps s''ha d''esperar despr\u00E9s d''un error en un intent r\u00E0pid d''identificaci\u00F3 -max-wait=Espera m\u00E0xima -max-wait.tooltip=Temps m\u00E0xim que un usuari queda bloquejat. -failure-reset-time=Reinici del comptador d''errors -failure-reset-time.tooltip=Quan s''ha de reiniciar el comptador d''errors? -realm-tab-login=Inici de sessi\u00F3 -realm-tab-keys=Claus -realm-tab-email=Email -realm-tab-themes=Temes -#realm-tab-localization=Localization -realm-tab-cache=Cach\u00E9 -realm-tab-tokens=Tokens -realm-tab-security-defenses=Defenses de seguretat -realm-tab-general=General -add-realm=Afegir domini - -#Session settings -realm-sessions=Sessions de domini -revocation=Revocaci\u00F3 -logout-all=Desconnectar tot -active-sessions=Sessions actives -sessions=Sessions -not-before=No abans de -not-before.tooltip=Revocar qualsevol token em\u00E8s abans d''aquesta data. -set-to-now=Fixar a ara -push=Push -push.tooltip=Per a cada client que t\u00E9 un URL d''administraci\u00F3, notificar les noves pol\u00EDtiques de revocaci\u00F3. - -#Protocol Mapper -usermodel.prop.label=Propietat -usermodel.prop.tooltip=Nom del m\u00E8tode de propietat en la interf\u00EDcie UserModel. Per exemple, un valor de ''email'' faria refer\u00E8ncia al m\u00E8tode UserModel.getEmail(). -usermodel.attr.label=Atribut d''usuari -usermodel.attr.tooltip=Nom de l''atribut d''usuari emmagatzemat que \u00E9s el nom de l''atribut dins el map UserModel.attribute. -userSession.modelNote.label=Nota sessi\u00F3 usuari -userSession.modelNote.tooltip=Nom de la nota emmagatzemada en la sessi\u00F3 d''usuari dins del mapa UserSessionModel.note -multivalued.label=Valors m\u00FAltiples -multivalued.tooltip=Indica si l''atribut suporta m\u00FAltiples valors. Si est\u00E0 habilitat, la llista de tots els valors d''aquest atribut es fixar\u00E0 com a reclamaci\u00F3. Si est\u00E0 deshabilitat, nom\u00E9s el primer valor ser\u00E0 fixat com a reclamaci\u00F3. -selectRole.label=Selecciona rol -selectRole.tooltip=Introdueix el rol a la caixa de text de l''esquerra, o fes clic a aquest bot\u00F3 per navegar i buscar el rol que vols. -tokenClaimName.label=Nom de reclam del token -tokenClaimName.tooltip=Nom del reclam a inserir en el testimoni. Pot ser un nom complet com ''address.street''. En aquest cas, es crear\u00E0 un objecte JSON niat. -jsonType.label=Tipus JSON de reclamaci\u00F3 -jsonType.tooltip=El tipus de JSON que hauria de fer-se servir per omplir la petici\u00F3 de JSON en el token. long, int, boolean i String s\u00F3n valors v\u00E0lids -includeInIdToken.label=Afegir al token d''ID -includeInAccessToken.label=Afegir al token d''acc\u00E9s -includeInAccessToken.tooltip=S''hauria d'afegir la identitat reclamada al token d''acc\u00E9s? - - -# client details -clients.tooltip=Els clients s\u00F3n aplicacions de navegador de confian\u00E7a i serveis web d''un domini. Aquests clients poden sol\u00B7licitar un inici de sessi\u00F3. Tamb\u00E9 pots definir rols espec\u00EDfics de client. -search.placeholder=Cercar... -create=Crea -import=Importar -client-id=ID Client -base-url=URL Base -actions=Accions -not-defined=No definit -edit=Edita -delete=Esborra -no-results=Sense resultats -no-clients-available=No hi ha clients disponibles -add-client=Afegir Client -select-file=Selecciona arxiu -view-details=Veure detalls -clear-import=Neteja importaci\u00F3 -client-id.tooltip=Indica l''identificador (ID) referenciat en URIs i tokens. Per exemple ''my-client'' -client.name.tooltip=Indica el nom visible del client. Per exemple ''My Client''. Tamb\u00E9 suporta claus per valors localitzats. Per exemple: ${my_client} -client.enabled.tooltip=Els clients deshabilitats no poden iniciar una identificaci\u00F3 o obtenir codis d''acc\u00E9s. -consent-required=Consentiment necessari -consent-required.tooltip=Si est\u00E0 habilitat, els usuaris han de consentir l''acc\u00E9s del client. -direct-grants-only=Nom\u00E9s permisos directes -direct-grants-only.tooltip=Quan est\u00E0 habilitat, el client nom\u00E9s pot obtenir permisos de l''API REST. -client-protocol=Protocol del Client -client-protocol.tooltip=''OpenID connect'' permet als clients verificar la identitat de l''usuari final basat en l''autenticaci\u00F3 realitzada per un servidor d''autoritzaci\u00F3. ''SAML'' habilita l''autenticaci\u00F3 i autoritzaci\u00F3 d''escenaris basats en web incloent cross-domain i single sign-on (SSO) i utilitza tokens de seguretat que contenen afirmacions per passar informaci\u00F3. -access-type=Tipus d''acc\u00E9s -access-type.tooltip=Els clients ''Confidential'' necessiten un secret per iniciar el protocol d''identificaci\u00F3. Els clients ''Public'' no requereixen un secret. Els clients 'Bearer-only' s\u00F3n serveis web que mai inicien un login. -service-accounts-enabled=Comptes de servei habilitades -service-accounts-enabled.tooltip=Permetre autenticar aquest client contra Keycloak i rebre un token d''acc\u00E9s dedicat per a aquest client. -include-authnstatement=Incloure AuthnStatement -include-authnstatement.tooltip=Hauria d''incloure''s una declaraci\u00F3 especificant el m\u00E8tode i la marca de temps en la resposta d''inici de sessi\u00F3? -sign-documents=Signar documents -sign-documents.tooltip=Hauria el domini de signar els documents SAML? -sign-assertions=Signar assercions -sign-assertions.tooltip=Haurien de signar-se les assercions en documents SAML? Aquest ajust no \u00E9s necessari si el document ja s''est\u00E0 signant. -signature-algorithm=Algorisme de signatura -signature-algorithm.tooltip=L''algorisme de signatura usat per signar els documents. -canonicalization-method=M\u00E8tode de canonicalitzaci\u00F3 -canonicalization-method.tooltip=M\u00E8tode de canonicalitzaci\u00F3 per a les signatures XML -encrypt-assertions=Xifrar afirmacions -encrypt-assertions.tooltip=Haurien de xifrar-se les afirmacions SAML amb la clau p\u00FAblica del client fent servir AES? -client-signature-required=Signatura de Client requerida -client-signature-required.tooltip=Signar\u00E0 el client les seves peticions i respostes SAML? I haurien de ser validades? -force-post-binding=For\u00E7ar enlla\u00E7os POST -force-post-binding.tooltip=Fer servir sempre POST per a les respostes -front-channel-logout=Desconnexi\u00F3 en primer pla (Front Channel) -front-channel-logout.tooltip=Quan est\u00E0 activat, la desconnexi\u00F3 requereix una redirecci\u00F3 del navegador cap al client. Quan no est\u00E0 activat, el servidor realitza una invovaci\u00F3n de desconnexi\u00F3 en segon pla. -force-name-id-format=For\u00E7ar format NameID -force-name-id-format.tooltip=Ignorar la petici\u00F3 de subjecte NameID i fer servir la configurada a la consola d''administraci\u00F3. -name-id-format=Format de NameID -name-id-format.tooltip=El format de NameID que es far\u00E0 servir per al t\u00EDtol -root-url=URL arrel -root-url.tooltip=URL arrel afegida a les URL relatives -valid-redirect-uris=URIs de redirecci\u00F3 v\u00E0lides -valid-redirect-uris.tooltip=Patr\u00F3 d''URI v\u00E0lida per a la qual un navegador pot sol\u00B7licitar la redirecci\u00F3 despr\u00E9s d''un inici o tancament de sessi\u00F3 completat. Es permeten comodins simples p.ex. ''http://example.com/*''. Tamb\u00E9 es poden indicar rutes relatives p.ex. ''/my/relative/path/*''. Les rutes relatives generaran un URI de redirecci\u00F3 fent servir el host i port de la petici\u00F3. Per SAML, s''han de fixar patrons d''URI v\u00E0lids si vols confiar en l''URL del servei del consumidor indicada en la petici\u00F3 d''inici de sessi\u00F3. -base-url.tooltip=URL per defecte per utilitzar quan el servidor d''autoritzaci\u00F3 necessita redirigir o enviar de tornada al client. -admin-url=URL d''administraci\u00F3 -admin-url.tooltip=URL a la interf\u00EDcie d''administraci\u00F3 del client. Fixa aquest valor si el client suporta l''adaptador de REST. Aquesta API REST permet al servidor d''autenticaci\u00F3 enviar al client pol\u00EDtiques de revocaci\u00F3 i altres tasques administratives. Normalment es fixa a l''URL base del client. -master-saml-processing-url=URL principal de processament SAML -master-saml-processing-url.tooltip=Si est\u00E0 configurada, aquesta URL es fara servir per a cada enlla\u00E7 al prove\u00EFdor del servei del consumidor d''assercions i serveis de desconnexi\u00F3 \u00FAnics. Pot ser sobreescrit de forma individual per a cada enlla\u00E7 i servei en el punt final de configuraci\u00F3 fina de SAML. -idp-sso-url-ref=Nom de la URL d''un SSO iniciat per l''IDP -idp-sso-url-ref.tooltip=Nom del fragment de l''URL per referenciar al client quan vols un SSO iniciat per l''IDP. Deixant aix\u00F2 buit desactiva els SSO iniciats per l''IDP. L''URL referenciada des del navegador ser\u00E0: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state=Estat de retransmissi\u00F3 d''un SSO iniciat per l''IDP -idp-sso-relay-state.tooltip=Estat de retransmissi\u00F3 que vols enviar amb una petici\u00F3 SAML quan s''inicia un SSO iniciat per l''IDP -web-origins=Or\u00EDgens web -web-origins.tooltip=Or\u00EDgens CORS permesos. Per permetre tots els or\u00EDgens d''URIs de redirecci\u00F3 v\u00E0lides afegeix ''+''. Per permetre tots els or\u00EDgens afegeix ''*''. -fine-saml-endpoint-conf=Fine Grain SAML Endpoint Configuration -fine-saml-endpoint-conf.tooltip=Expandeix aquesta secci\u00F3 per configurar les URL exactes per Assertion Consumer i Single Logout Service. -assertion-consumer-post-binding-url=Assertion Consumer Service POST Binding URL -assertion-consumer-post-binding-url.tooltip=SAML POST Binding URL for the client''s assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -assertion-consumer-redirect-binding-url=Assertion Consumer Service Redirect Binding URL -assertion-consumer-redirect-binding-url.tooltip=Assertion Consumer Service Redirect Binding URL -logout-service-post-binding-url=URL d''enlla\u00E7 SAML POST per a la desconnexi\u00F3 -logout-service-post-binding-url.tooltip=URL d''enlla\u00E7 SAML POST per a la desconnexi\u00F3 \u00FAnica del client. Pots deixar-ho en blanc si est\u00E0s fent servir un enlla\u00E7 diferent. -logout-service-redir-binding-url=URL d''enlla\u00E7 SAML de redirecci\u00F3 per a la desconnexi\u00F3 -logout-service-redir-binding-url.tooltip=URL d''enlla\u00E7 SAML de redirecci\u00F3 per a la desconnexi\u00F3 \u00FAnica del client. Pots deixar-ho en blanc si est\u00E0s fent servir un enlla\u00E7 diferent. - -# client import -import-client=Importar Client -format-option=Format -select-format=Selecciona un format -import-file=Arxiu d''Importaci\u00F3 - -# client tabs -settings=Ajustos -credentials=Credencials -roles=Rols -mappers=Assignadors -mappers.tooltip=Els assignadors de protocols realitzen transformacions en tokens i documents. Poden fer coses com assignar dades d''usuari en peticions de protocol, o simplement transformar qualsevol petici\u00F3 entre el client i el servidor d''autenticaci\u00F3. -scope=\u00C0mbit -scope.tooltip=Les assignacions d''\u00E0mbit et permeten restringir que assignacions de rols d''usuari s''inclouen en el testimoni d''acc\u00E9s sol\u00B7licitat pel client. -sessions.tooltip=Veure sessions actives per a aquest client. Permet veure quins usuaris estan actius i quan es van identificar. -offline-access=Acc\u00E9s sense connexi\u00F3 -offline-access.tooltip=Veure sessions sense connexi\u00F3 per aquest client. Et permet veure que usuaris han sol\u00B7licitat tokens sense connexi\u00F3 i quan els van sol\u00B7licitar. Per revocar tots els tokens del client, accedeix a la pestanya de Revocaci\u00F3 i fixa el valor \"No abans de\" a \"now\". -clustering=Clustering -installation=Instal\u00B7laci\u00F3 -installation.tooltip=Eina d''ajuda per generar la configuraci\u00F3 de diversos formats d''adaptadors de client que pots descarregar o copiar i enganxar per configurar teus clients. -service-account-roles=Rols de compte de servei -service-account-roles.tooltip=Permetre autenticar assignacions de rol per el compte de servei dedicat a aquest client. - -# client credentials -client-authenticator=Client autenticador -client-authenticator.tooltip=Client autenticador usat per autenticar aquest client contra el servidor Keycloak -certificate.tooltip=Certificat de client per validar els JWT emesos per aquest client i signats amb la clau privada del client del teu magatzem de claus. -no-client-certificate-configured=No s''ha configurat el certificat de client -gen-new-keys-and-cert=Generar noves claus i certificat -import-certificate=Importar Certificat -gen-client-private-key=Generar clau privada de client -generate-private-key=Generar clau privada -archive-format=Format d''Arxiu -archive-format.tooltip=Format d''arxiu Java keystore o PKCS12 -key-alias=\u00C0lies de clau -key-alias.tooltip=\u00C0lies de l''arxiu de la teva clau privada i certificat. -key-password=Contrasenya de la clau -key-password.tooltip=Contrasenya per accedir a la clau privada continguda en l''arxiu -store-password=Contrasenya del magatzem -store-password.tooltip=Contrasenya per accedir a l''arxiu -generate-and-download=Generar i descarregar -client-certificate-import=Importaci\u00F3 de certificat de client -import-client-certificate=Importar Certificat de Client -jwt-import.key-alias.tooltip=\u00C0lies de l''arxiu del teu certificat. -secret=Secret -regenerate-secret=Regenerar secret -add-role=Afegir rol -role-name=Nom de rol -composite=Compost -description=Descripci\u00F3 -no-client-roles-available=No hi ha rols de client disponibles -scope-param-required=Par\u00E0metre d''\u00E0mbit obligatori -scope-param-required.tooltip=Aquest rol nom\u00E9s ser\u00E0 concedit si el par\u00E0metre d''\u00E0mbit amb el nom del rol \u00E9s usat durant la petici\u00F3 d''autoritzaci\u00F3/obtenci\u00F3 de token. -composite-roles=Rols compostos -composite-roles.tooltip=Quan aquest paper \u00E9s assignat/desassignat a un usuari qualsevol rol associat amb ell ser\u00E0 assignat/desassignat de forma impl\u00EDcita. -realm-roles=Rols de domini -available-roles=Rols Disponibles -add-selected=Afegeix seleccionat -associated-roles=Rols Associats -composite.associated-realm-roles.tooltip=Rols a nivell de domini associats amb aquest rol compost. -composite.available-realm-roles.tooltip=Rols a nivell de domini disponibles en aquest paper compost. -remove-selected=Esborrar seleccionats -client-roles=Rols de Client -select-client-to-view-roles=Selecciona el client per veure els seus rols -available-roles.tooltip=Rols d''aquest client que pots associar a aquest rol compost. -client.associated-roles.tooltip=Rols de client associats amb aquest rol compost. -add-builtin=Afegeix Builtin -category=Categoria -type=Tipus -no-mappers-available=No hi ha assignadors disponibles -add-builtin-protocol-mappers=Afegeix Builtin Protocol Mappers -add-builtin-protocol-mapper=Afegeix Builtin Protocol Mapper -scope-mappings=Assignacions d''\u00E0mbit -full-scope-allowed=Permet tots els \u00E0mbits -full-scope-allowed.tooltip=Permet deshabilitar totes les restriccions. -scope.available-roles.tooltip=Rols de domini que poden ser assignats a l''\u00E0mbit -assigned-roles=Rols Assignats -assigned-roles.tooltip=Rols a nivell de domini assignats a aquest \u00E0mbit. -effective-roles=Rols efectius -realm.effective-roles.tooltip=Rols de domini assignats que poden haver estat heretats d''un rol compost. -select-client-roles.tooltip=Selecciona el client per veure els seus rols -assign.available-roles.tooltip=Rols de clients disponibles per ser assignats. -client.assigned-roles.tooltip=Rols de client assignats -client.effective-roles.tooltip=Rols de client assignats que poden haver estat heretats des d''un rol compost. -basic-configuration=Configuraci\u00F3 b\u00E0sica -node-reregistration-timeout=Temps d''espera de re-registre de node -node-reregistration-timeout.tooltip=Indica el m\u00E0xim interval de temps perqu\u00E8 els nodes del cl\u00FAster registrats es tornin a registrar. Si el node del cl\u00FAster no envia una petici\u00F3 de re-registre a Keycloak dins d''aquest interval, ser\u00E0 desregistrat de Keycloak -registered-cluster-nodes=Registrar nodes de cl\u00FAster -register-node-manually=Registrar node manualment -test-cluster-availability=Provar disponibilitat del cl\u00FAster -last-registration=\u00DAltim registre -node-host=Host del node -no-registered-cluster-nodes=No hi ha nodes de cl\u00FAster registrats disponibles -cluster-nodes=Nodes de cl\u00FAster -add-node=Afegir Node -active-sessions.tooltip=Nombre total de sessions actives per a aquest client. -show-sessions=Mostrar sessions -show-sessions.tooltip=Advert\u00E8ncia, aquesta \u00E9s una operaci\u00F3 potencialment costosa depenent del nombre de sessions actives. -user=Usuari -from-ip=Des de IP -session-start=Inici de sessi\u00F3 -first-page=Primera p\u00E0gina -previous-page=P\u00E0gina Anterior -next-page=P\u00E0gina seg\u00FCent -client-revoke.not-before.tooltip=Revocar tots els tokens emesos abans d''aquesta data per a aquest client. -client-revoke.push.tooltip=Si l''URL d''administraci\u00F3 est\u00E0 configurada per a aquest client, envia aquesta pol\u00EDtica a aquest client. -select-a-format=Selecciona un format -download=Descarrega -offline-tokens=Tokens sense connexi\u00F3 -offline-tokens.tooltip=Nombre total de tokens sense connexi\u00F3 d''aquest client. -show-offline-tokens=Mostrar tokens sense connexi\u00F3 -show-offline-tokens.tooltip=Advert\u00E8ncia, aquesta \u00E9s una operaci\u00F3 potencialment costosa depenent del nombre de tokens sense connexi\u00F3. -token-issued=Token expedit -last-access=\u00DAltim Acc\u00E9s -last-refresh=\u00DAltima actualitzaci\u00F3 -key-export=Exportar clau -key-import=Importar clau -export-saml-key=Exporta clau SAML -import-saml-key=Importar clau SAML -realm-certificate-alias=\u00C0lies del certificat del domini -realm-certificate-alias.tooltip=El certificat del domini \u00E9s emmagatzemat en arxiu. Aquest \u00E9s l''\u00E0lies a aquest. -signing-key=Clau de firma -saml-signing-key=Clau de firma SAML. -private-key=Clau Privada -generate-new-keys=Generar noves claus -export=Exporta -encryption-key=Clau de xifrat -saml-encryption-key.tooltip=Clau de xifrat de SAML -service-accounts=Comptes de servei -service-account.available-roles.tooltip=Rols de domini que poden ser assignats al compte del servei. -service-account.assigned-roles.tooltip=Rols de domini assignats al compte del servei. -service-account-is-not-enabled-for=El compte del servei no est\u00E0 habilitada per {{client}} -create-protocol-mappers=Crea assignadors de protocol -create-protocol-mapper=Crea assignador de protocol -protocol=Protocol -protocol.tooltip=Protocol. -id=ID -mapper.name.tooltip=Nom de l''assignador. -mapper.consent-required.tooltip=Quan es concedeix acc\u00E9s temporal, \u00E9s necessari el consentiment de l''usuari per a proporcinar aquestes dades al client? -consent-text=Text del consentiment -consent-text.tooltip=Text per mostrar a la p\u00E0gina de consentiment. -mapper-type=Tipus d''assignador - -# realm identity providers -identity-providers=Prove\u00EFdors d''identitat -table-of-identity-providers=Taula de prove\u00EFdors d''identitat -add-provider.placeholder=Afegir prove\u00EFdor... -provider=Prove\u00EFdor -gui-order=Ordre en la interf\u00EDcie gr\u00E0fica (GUI) -redirect-uri=URI de redirecci\u00F3 -redirect-uri.tooltip=L''URI de redirecci\u00F3 usada per configurar el prove\u00EFdor d''identitat. -alias=\u00C0lies -identity-provider.alias.tooltip=L''\u00E0lies que identifica de forma \u00FAnica un prove\u00EFdor d''identitat, es far servir tamb\u00E9 per construir la URI de redirecci\u00F3. -identity-provider.enabled.tooltip=Habilita/deshabilita aquest prove\u00EFdor d''identitat. -authenticate-by-default=Autenticar per defecte -identity-provider.authenticate-by-default.tooltip=Indica si aquest prove\u00EFdor hauria de ser provat per defecte per autenticacaci\u00F3n fins i tot abans de mostrar la p\u00E0gina d''inici de sessi\u00F3. -store-tokens=Emmagatzemar tokens -identity-provider.store-tokens.tooltip=Habilitar/deshabilitar si els tokens han de ser emmagatzemats despr\u00E9s d''autenticar als usuaris. -stored-tokens-readable=Tokens emmagatzemats llegibles -identity-provider.stored-tokens-readable.tooltip=Habilitar/deshabilitar si els nous usuaris poden llegir els tokens emmagatzemats. Aix\u00F2 assigna el rol ''broker.read-token''. -update-profile-on-first-login=Actualitzar perfil al primer inici de sessi\u00F3 -on=Activat -on-missing-info=Si falta informaci\u00F3 -off=Desactivat -update-profile-on-first-login.tooltip=Defineix condicions sota les quals un usuari ha de actualitzar el seu perfil durant el primer inici de sessi\u00F3. -trust-email=Confiar en l''email -trust-email.tooltip=Si est\u00E0 habilitat, l''email rebut d''aquest prove\u00EFdor no es verificar\u00E0 encara que la verificaci\u00F3 estigui habilitada per al domini. -gui-order.tooltip=N\u00FAmero que defineix l''ordre del prove\u00EFdor en la interf\u00EDcie gr\u00E0fica (GUI) (ex. a la p\u00E0gina d''inici de sessi\u00F3) -openid-connect-config=Configuraci\u00F3 d''OpenID Connect -openid-connect-config.tooltip=Configuraci\u00F3 d''OIDC SP i IDP externs -authorization-url=URL d''autoritzaci\u00F3 -authorization-url.tooltip=La URL d''autoritzaci\u00F3. -token-url=Token URL -token-url.tooltip=L''URL del token. -logout-url=URL de desconnexi\u00F3 -identity-provider.logout-url.tooltip=Punt de tancament de sessi\u00F3 per utilitzar en la desconnexi\u00F3 d''usuaris des d''un prove\u00EFdor d''identitat (IDP) extern. -backchannel-logout=Backchannel Logout -backchannel-logout.tooltip=Does the external IDP support backchannel logout? -user-info-url=URL d''informaci\u00F3 d''usuari -user-info-url.tooltip=L''URL d''informaci\u00F3 d''usuari. Opcional. -identity-provider.client-id.tooltip=El client o identificador de client registrat en el prove\u00EFdor d''identitat. -client-secret=Secret de Client -show-secret=Mostrar secret -hide-secret=Amaga secret -client-secret.tooltip=El client o el secret de client registrat en el prove\u00EFdor d''identitat. -issuer=Emissor -issuer.tooltip=L''identificador de l''emissor per a l''emissor de la resposta. Si no s''indica, no es realitzar\u00E0 cap validaci\u00F3. -default-scopes=\u00C0mbits per defecte -identity-provider.default-scopes.tooltip=Els \u00E0mbits que s''enviaran quan es sol\u00B7liciti autoritzaci\u00F3. Pot ser una llista d''\u00E0mbits separats per espais. El valor per defecte \u00E9s ''openid''. -prompt=Prompt -unspecified.option=no especificat -none.option=cap -consent.option=consentiment -login.option=login -select-account.option=select_account -prompt.tooltip=Indica si el servidor d''autoritzaci\u00F3 sol\u00B7licita a l''usuari final per reautenticaci\u00F3n i consentiment. -validate-signatures=Validar signatures -identity-provider.validate-signatures.tooltip=Habilitar/deshabilitar la validaci\u00F3 de signatures de prove\u00EFdors d''identitat (IDP) externs -validating-public-key=Validant clau p\u00FAblica -identity-provider.validating-public-key.tooltip=La clau p\u00FAblica en format PEM que ha de fer-se servir per verificar les signatures de prove\u00EFdors d''identitat (IDP) externs. -import-external-idp-config=Importar configuraci\u00F3 externa d''IDP -import-external-idp-config.tooltip=Et permet carregar metadades d''un prove\u00EFdor d''identitat (IDP) extern d''un arxiu de coniguraci\u00F3n o descarregar des d''una URL. -import-from-url=Importar des d''URL -identity-provider.import-from-url.tooltip=Importa metadades des d''un descriptor d''un prove\u00EFdor d''identitat (IDP) remot. -import-from-file=Importa des d''arxiu -identity-provider.import-from-file.tooltip=Importa metadades des d''un descriptor d''un prove\u00EFdor d''identitat (IDP) descarregat. -saml-config=Configuraci\u00F3 SAML -identity-provider.saml-config.tooltip=Configuraci\u00F3 de prove\u00EFdor SAML i IDP extern -single-signon-service-url=URL de servei de connexi\u00F3 \u00FAnic (SSO) -saml.single-signon-service-url.tooltip=L''URL que s''ha de fer servir per enviar peticions d''autenticaci\u00F3 (SAML AuthnRequest). -single-logout-service-url=URL de servei de desconnexi\u00F3 \u00FAnic -saml.single-logout-service-url.tooltip=L''URL que ha de fer-se servir per enviar peticions de desconnexi\u00F3. -nameid-policy-format=Format de pol\u00EDtica NameID -nameid-policy-format.tooltip=Indica la refer\u00E8ncia a la URI corresponent a un format de NameID. El valor per defecte \u00E9s urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -http-post-binding-response=HTTP-POST enlla\u00E7 de resposta -http-post-binding-response.tooltip=Indica si es respon a les peticions fent servir HTTP-POST. Si no est\u00E0 activat, es far servir HTTP-REDIRECT. -http-post-binding-for-authn-request=HTTP-POST per AuthnRequest -http-post-binding-for-authn-request.tooltip=Indica si AuthnRequest ha de ser enviat usant HTTP-POST. Si no est\u00E0 activat es fa HTTP-REDIRECT. -want-authn-requests-signed=Signar AuthnRequests -want-authn-requests-signed.tooltip=Indica si el prove\u00EFdor d''identitat espera rebre signades les AuthnRequest. -force-authentication=For\u00E7ar autenticaci\u00F3 -identity-provider.force-authentication.tooltip=Indica si el prove\u00EFdor d''identitat ha d'autenticar en presentar directament les credencials en lloc de dependre d''un context de seguretat previ. -validate-signature=Validar signatura -saml.validate-signature.tooltip=Habilitar/deshabilitar la validaci\u00F3 de signatura en respostes SAML. -validating-x509-certificate=Validant certificat X509 -validating-x509-certificate.tooltip=El certificat en format PEM que ha de fer-se servir per comprovar les signatures. -saml.import-from-url.tooltip=Importar metadades des d''un descriptor d'entitat remot d''un IDP de SAML -social.client-id.tooltip=L''identificador del client registrat amb el prove\u00EFdor d''identitat. -social.client-secret.tooltip=El secret del client registrat amb el prove\u00EFdor d''identitat. -social.default-scopes.tooltip=\u00C0mbits que s''enviaran quan es sol\u00B7liciti autoritzaci\u00F3. Veure la documentaci\u00F3 per als possibles valors, separador i valor per defecte. -key=Clau -stackoverflow.key.tooltip=La clau obtinguda en el registre del client de Stack Overflow. - -realms=Dominis -realm=Domini - -identity-provider-mappers=Assignadors de prove\u00EFdors d''identitat (IDP) -create-identity-provider-mapper=Crea assignador de prove\u00EFdor d''identitat (IDP) -add-identity-provider-mapper=Afegeix assignador de prove\u00EFdor d''identitat -client.description.tooltip=Indica la descripci\u00F3 del client. Per exemple ''My Client for TimeSheets''. Tamb\u00E9 suporta claus per a valors localitzats. Per exemple: ${my_client_description} diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_de.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_de.properties deleted file mode 100644 index 809afe9e1..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_de.properties +++ /dev/null @@ -1,1627 +0,0 @@ -consoleTitle=Keycloak Admin Konsole - -# Common messages -enabled=Aktiv -hidden=Versteckt -link-only-column=Nur Link -name=Name -displayName=Anzeigename -displayNameHtml=HTML-Anzeigename -save=Speichern -cancel=Abbrechen -onText=EIN -offText=AUS -client=Client -clients=Clients -clear=Zur\u00FCcksetzen -selectOne=Bitte w\u00E4hlen... - -true=Ja -false=Nein - -endpoints=Endpoints - -dateFormat=dd.MM.yyyy -timeFormat=HH:mm:ss - -# Realm settings -realm-detail.enabled.tooltip=Benutzer und Clients k\u00F6nnen das Realm nur verwenden, wenn es aktiviert ist -#realm-detail.oidc-endpoints.tooltip=Shows the configuration of the OpenID Connect endpoints -#realm-detail.userManagedAccess.tooltip=If enabled, users are allowed to manage their resources and permissions using the Account Management Console. -#userManagedAccess=User-Managed Access -registrationAllowed=Benutzerregistrierung -registrationAllowed.tooltip=Aktiviere/deaktiviere die Seite zur Benutzerregistrierung. Auf der Loginseite wird ein entsprechender Link angezeigt. -registrationEmailAsUsername=E-Mail-Adresse als Benutzername -registrationEmailAsUsername.tooltip=Wenn aktiviert, wird das Feld "Benutzername" auf der Registrierungsformular nicht angezeigt und als Benutzername wird stattdessen die E-Mail verwendet. -editUsernameAllowed=Benutzername editierbar -editUsernameAllowed.tooltip=Wenn aktiv, kann der Benutzername editiert werden. -resetPasswordAllowed=Passwort-Vergessen -resetPasswordAllowed.tooltip=Zeigt einen Link auf der Loginseite, auf den die Benutzer klicken k\u00F6nnen, wenn sie ihr Passwort vergessen haben. -rememberMe=Angemeldet bleiben -rememberMe.tooltip=Zeigt eine Auswahlbox auf der Loginseite, die es dem Benutzer erlaubt, zwischen Browser-Neustarts eingeloggt zu bleiben, bis die Session abl\u00E4uft. -#loginWithEmailAllowed=Login with email -#loginWithEmailAllowed.tooltip=Allow users to log in with their email address. -#duplicateEmailsAllowed=Duplicate emails -#duplicateEmailsAllowed.tooltip=Allow multiple users to have the same email address. Changing this setting will also clear the users cache. It is recommended to manually update email constraints of existing users in the database after switching off support for duplicate email addresses. -verifyEmail=E-Mail verifizieren -#verifyEmail.tooltip=Require users to verify their email address after initial login or after address changes are submitted. -#sslRequired=Require SSL -#sslRequired.option.all=all requests -#sslRequired.option.external=external requests -#sslRequired.option.none=none -#sslRequired.tooltip=Is HTTPS required? 'None' means HTTPS is not required for any client IP address. 'External requests' means localhost and private IP addresses can access without HTTPS. 'All requests' means HTTPS is required for all IP addresses. -#publicKeys=Public keys -#publicKey=Public key -#privateKey=Private key -#gen-new-keys=Generate new keys -certificate=Zertifikat -host=Host -smtp-host=SMTP Host -port=Port -smtp-port=SMTP Port (Standardwert ist 25) -from=Von -#fromDisplayName=From Display Name -#fromDisplayName.tooltip=A user-friendly name for the 'From' address (optional). -#replyTo=Reply To -#replyToDisplayName=Reply To Display Name -#replyToDisplayName.tooltip=A user-friendly name for the 'Reply-To' address (optional). -#envelopeFrom=Envelope From -#envelopeFrom.tooltip=An email address used for bounces (optional). -sender-email-addr=E-Mail-Adresse des Absenders -#sender-email-addr-display=Display Name for Sender Email Address -#reply-to-email-addr=Reply To Email Address -#reply-to-email-addr-display=Display Name for Reply To Email Address -#sender-envelope-email-addr=Sender Envelope Email Address -enable-ssl=SSL aktivieren -#enable-start-tls=Enable StartTLS -#enable-auth=Enable Authentication -username=Benutzername -login-username=Login Benutzername -password=Passwort -login-password=Login Passwort -#login-theme=Login Theme -#login-theme.tooltip=Select theme for login, OTP, grant, registration, and forgot password pages. -#account-theme=Account Theme -#account-theme.tooltip=Select theme for user account management pages. -#admin-console-theme=Admin Console Theme -#select-theme-admin-console=Select theme for admin console. -#email-theme=Email Theme -#select-theme-email=Select theme for emails that are sent by the server. -i18n-enabled=Internationalisierung aktiv -supported-locales=Unterst\u00FCtzte Sprachen -#supported-locales.placeholder=Type a locale and enter -#default-locale=Default Locale -localization-upload-file=Hochladen einer JSON Datei mit Lokalisierungstexten -missing-locale=Locale fehlt. -missing-file=Datei fehlt. Bitte eine Datei f\u00FCr den Upload ausw\u00E4hlen. -localization-file.upload.success=Die Internationalisierungstexte wurden importiert. -localization-file.upload.error=Die Datei konnte nicht hochgeladen werden. Bitte \u00FCberpr\u00FCfen Sie die Datei. -localization-show=Realm-spezifische Lokalisierungstexte -no-localizations-configured=Es sind zur Zeit keine realm-spezifischen Lokalisierungstexte vorhanden. -add-localization-text=Lokalisierungstext hinzuf\u00FCgen -locale.create.success=Die Locale wurde ertellt. -localization-text.create.success=Der Lokalisierungstext wurde erstellt. -localization-text.update.success=Der Lokalisierungstext wurde aktualisiert. -localization-text.remove.success=Der Lokalisierungstext wurde gel\u00F6scht. -#realm-cache-clear=Realm Cache -#realm-cache-clear.tooltip=Clears all entries from the realm cache (this will clear entries for all realms) -#user-cache-clear=User Cache -#user-cache-clear.tooltip=Clears all entries from the user cache (this will clear entries for all realms) -#keys-cache-clear=Keys Cache -#keys-cache-clear.tooltip=Clears all entries from the cache of external public keys. These are keys of external clients or identity providers. (this will clear entries for all realms) -#revoke-refresh-token=Revoke Refresh Token -#revoke-refresh-token.tooltip=If enabled a refresh token can only be used up to 'Refresh Token Max Reuse' and is revoked when a different token is used. Otherwise refresh tokens are not revoked when used and can be used multiple times. -#refresh-token-max-reuse=Refresh Token Max Reuse -#refresh-token-max-reuse.tooltip=Maximum number of times a refresh token can be reused. When a different token is used, revocation is immediate. -#sso-session-idle=SSO Session Idle -seconds=Sekunden -minutes=Minuten -hours=Stunden -days=Tage -#sso-session-max=SSO Session Max -#sso-session-idle.tooltip=Time a session is allowed to be idle before it expires. Tokens and browser sessions are invalidated when a session is expired. -#sso-session-max.tooltip=Max time before a session is expired. Tokens and browser sessions are invalidated when a session is expired. -#offline-session-idle=Offline Session Idle -#offline-session-idle.tooltip=Time an offline session is allowed to be idle before it expires. You need to use offline token to refresh at least once within this period, otherwise offline session will expire. -#realm-detail.hostname=Hostname -#realm-detail.hostname.tooltip=Set the hostname for the realm. Use in combination with the fixed hostname provider to override the server hostname for a specific realm. - -## KEYCLOAK-7688 Offline Session Max for Offline Token -#offline-session-max-limited=Offline Session Max Limited -#offline-session-max-limited.tooltip=Enable Offline Session Max. -#offline-session-max=Offline Session Max -#offline-session-max.tooltip=Max time before an offline session is expired regardless of activity. - -#access-token-lifespan=Access Token Lifespan -#access-token-lifespan.tooltip=Max time before an access token is expired. This value is recommended to be short relative to the SSO timeout. -#access-token-lifespan-for-implicit-flow=Access Token Lifespan For Implicit Flow -#access-token-lifespan-for-implicit-flow.tooltip=Max time before an access token issued during OpenID Connect Implicit Flow is expired. This value is recommended to be shorter than SSO timeout. There is no possibility to refresh token during implicit flow, that's why there is separate timeout different to 'Access Token Lifespan'. -#action-token-generated-by-admin-lifespan=Default Admin-Initiated Action Lifespan -#action-token-generated-by-admin-lifespan.tooltip=Maximum time before an action permit sent to a user by admin is expired. This value is recommended to be long to allow admins send e-mails for users that are currently offline. The default timeout can be overridden right before issuing the token. -#action-token-generated-by-user-lifespan=User-Initiated Action Lifespan -#action-token-generated-by-user-lifespan.tooltip=Maximum time before an action permit sent by a user (e.g. forgot password e-mail) is expired. This value is recommended to be short because it is expected that the user would react to self-created action quickly. - -#action-token-generated-by-user.execute-actions=Execute Actions -#action-token-generated-by-user.idp-verify-account-via-email=IdP Account E-mail Verification -#action-token-generated-by-user.reset-credentials=Forgot Password -#action-token-generated-by-user.verify-email=E-mail Verification -#action-token-generated-by-user.tooltip=Override default settings of maximum time before an action permit sent by a user (e.g. forgot password e-mail) is expired for specific action. This value is recommended to be short because it is expected that the user would react to self-created action quickly. -#action-token-generated-by-user.reset=Reset -#action-token-generated-by-user.operation=Override User-Initiated Action Lifespan - -#client-login-timeout=Client login timeout -#client-login-timeout.tooltip=Max time a client has to finish the access token protocol. This should normally be 1 minute. -#login-timeout=Login timeout -#login-timeout.tooltip=Max time a user has to complete a login. This is recommended to be relatively long. 30 minutes or more. -#login-action-timeout=Login action timeout -#login-action-timeout.tooltip=Max time a user has to complete login related actions like update password or configure totp. This is recommended to be relatively long. 5 minutes or more. -#headers=Headers -#brute-force-detection=Brute Force Detection -#x-frame-options=X-Frame-Options -#x-frame-options-tooltip=Default value prevents pages from being included via non-origin iframes (click label for more information) -#content-sec-policy=Content-Security-Policy -#content-sec-policy-tooltip=Default value prevents pages from being included via non-origin iframes (click label for more information) -#content-type-options=X-Content-Type-Options -#content-type-options-tooltip=Default value prevents Internet Explorer and Google Chrome from MIME-sniffing a response away from the declared content-type (click label for more information) -#robots-tag=X-Robots-Tag -#robots-tag-tooltip=Prevent pages from appearing in search engines (click label for more information) -#x-xss-protection=X-XSS-Protection -#x-xss-protection-tooltip=This header configures the Cross-site scripting (XSS) filter in your browser. Using the default behavior, the browser will prevent rendering of the page when a XSS attack is detected (click label for more information) -#strict-transport-security=HTTP Strict Transport Security (HSTS) -#strict-transport-security-tooltip=The Strict-Transport-Security HTTP header tells browsers to always use HTTPS. Once a browser sees this header, it will only visit the site over HTTPS for the time specified (1 year) at max-age, including the subdomains. -#permanent-lockout=Permanent Lockout -#permanent-lockout.tooltip=Lock the user permanently when the user exceeds the maximum login failures. -#max-login-failures=Max Login Failures -#max-login-failures.tooltip=How many failures before wait is triggered. -#wait-increment=Wait Increment -#wait-increment.tooltip=When failure threshold has been met, how much time should the user be locked out? -#quick-login-check-millis=Quick Login Check Milli Seconds -#quick-login-check-millis.tooltip=If a failure happens concurrently too quickly, lock out the user. -#min-quick-login-wait=Minimum Quick Login Wait -#min-quick-login-wait.tooltip=How long to wait after a quick login failure. -#max-wait=Max Wait -#max-wait.tooltip=Max time a user will be locked out. -#failure-reset-time=Failure Reset Time -#failure-reset-time.tooltip=When will failure count be reset? -#realm-tab-login=Login -#realm-tab-keys=Keys -#realm-tab-email=Email -#realm-tab-themes=Themes -realm-tab-localization=Internationalisierung -#realm-tab-cache=Cache -#realm-tab-tokens=Tokens -#realm-tab-client-registration=Client Registration -#realm-tab-security-defenses=Security Defenses -#realm-tab-general=General -#add-realm=Add realm - -#Session settings -realm-sessions=Realm-Sessions -#revocation=Revocation -logout-all=Alle ausloggen -active-sessions=Aktive Sessions -offline-sessions=Offline-Sessions -sessions=Sessions -#not-before=Not Before -#not-before.tooltip=Revoke any tokens issued before this date. -#set-to-now=Set to now -#push=Push -#push.tooltip=For every client that has an admin URL, notify them of the new revocation policy. - -#Protocol Mapper -#usermodel.prop.label=Property -#usermodel.prop.tooltip=Name of the property method in the UserModel interface. For example, a value of 'email' would reference the UserModel.getEmail() method. -#usermodel.attr.label=User Attribute -#usermodel.attr.tooltip=Name of stored user attribute which is the name of an attribute within the UserModel.attribute map. -#userSession.modelNote.label=User Session Note -#userSession.modelNote.tooltip=Name of stored user session note within the UserSessionModel.note map. -#multivalued.label=Multivalued -#multivalued.tooltip=Indicates if attribute supports multiple values. If true, then the list of all values of this attribute will be set as claim. If false, then just first value will be set as claim -#selectRole.label=Select Role -#selectRole.tooltip=Enter role in the textbox to the left, or click this button to browse and select the role you want. -#tokenClaimName.label=Token Claim Name -#tokenClaimName.tooltip=Name of the claim to insert into the token. This can be a fully qualified name like 'address.street'. In this case, a nested json object will be created. To prevent nesting and use dot literally, escape the dot with backslash (\\.). -#jsonType.label=Claim JSON Type -#jsonType.tooltip=JSON type that should be used to populate the json claim in the token. long, int, boolean, and String are valid values. -#includeInIdToken.label=Add to ID token -#includeInIdToken.tooltip=Should the claim be added to the ID token? -#includeInAccessToken.label=Add to access token -#includeInAccessToken.tooltip=Should the claim be added to the access token? -#includeInUserInfo.label=Add to userinfo -#includeInUserInfo.tooltip=Should the claim be added to the userinfo? -#usermodel.clientRoleMapping.clientId.label=Client ID -#usermodel.clientRoleMapping.clientId.tooltip=Client ID for role mappings -#usermodel.clientRoleMapping.rolePrefix.label=Client Role prefix -#usermodel.clientRoleMapping.rolePrefix.tooltip=A prefix for each client role (optional). -#usermodel.realmRoleMapping.rolePrefix.label=Realm Role prefix -#usermodel.realmRoleMapping.rolePrefix.tooltip=A prefix for each Realm Role (optional). -#sectorIdentifierUri.label=Sector Identifier URI -#sectorIdentifierUri.tooltip=Providers that use pairwise sub values and support Dynamic Client Registration SHOULD use the sector_identifier_uri parameter. It provides a way for a group of websites under common administrative control to have consistent pairwise sub values independent of the individual domain names. It also provides a way for Clients to change redirect_uri domains without having to reregister all of their users. -#pairwiseSubAlgorithmSalt.label=Salt -#pairwiseSubAlgorithmSalt.tooltip=Salt used when calculating the pairwise subject identifier. If left blank, a salt will be generated. -#addressClaim.street.label=User Attribute Name for Street -#addressClaim.street.tooltip=Name of User Attribute, which will be used to map to 'street_address' subclaim inside 'address' token claim. Defaults to 'street' . -#addressClaim.locality.label=User Attribute Name for Locality -#addressClaim.locality.tooltip=Name of User Attribute, which will be used to map to 'locality' subclaim inside 'address' token claim. Defaults to 'locality' . -#addressClaim.region.label=User Attribute Name for Region -#addressClaim.region.tooltip=Name of User Attribute, which will be used to map to 'region' subclaim inside 'address' token claim. Defaults to 'region' . -#addressClaim.postal_code.label=User Attribute Name for Postal Code -#addressClaim.postal_code.tooltip=Name of User Attribute, which will be used to map to 'postal_code' subclaim inside 'address' token claim. Defaults to 'postal_code' . -#addressClaim.country.label=User Attribute Name for Country -#addressClaim.country.tooltip=Name of User Attribute, which will be used to map to 'country' subclaim inside 'address' token claim. Defaults to 'country' . -#addressClaim.formatted.label=User Attribute Name for Formatted Address -#addressClaim.formatted.tooltip=Name of User Attribute, which will be used to map to 'formatted' subclaim inside 'address' token claim. Defaults to 'formatted' . - -# client details -#clients.tooltip=Clients are trusted browser apps and web services in a realm. These clients can request a login. You can also define client specific roles. -search.placeholder=Suchen... -create=Erstellen -import=Importieren -client-id=Client-ID -base-url=Basis-URL -actions=Aktionen -not-defined=Nicht definiert -edit=Bearbeiten -delete=L\u00F6schen -no-results=Keine Resultate -no-clients-available=Keine Clients verf\u00FCgbar -add-client=Client hinzuf\u00FCgen -#select-file=Select file -#view-details=View details -#clear-import=Clear import -#client-id.tooltip=Specifies ID referenced in URI and tokens. For example 'my-client'. For SAML this is also the expected issuer value from authn requests -#client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\: ${my_client} -#client.enabled.tooltip=Disabled clients cannot initiate a login or have obtain access tokens. -#consent-required=Consent Required -#consent-required.tooltip=If enabled users have to consent to client access. -#client.display-on-consent-screen=Display Client On Consent Screen -#client.display-on-consent-screen.tooltip=Applicable just if Consent Required is on. If this switch is off, then consent screen will contain just the consents corresponding to configured client scopes. If on, then there will be also one item on consent screen about this client itself -#client.consent-screen-text=Client Consent Screen Text -#client.consent-screen-text.tooltip=Applicable just if 'Display Client On Consent Screen' is on for this client. Contains the text, which will be on consent screen about permissions specific just for this client -#client-protocol=Client Protocol -#client-protocol.tooltip='OpenID connect' allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server.'SAML' enables web-based authentication and authorization scenarios including cross-domain single sign-on (SSO) and uses security tokens containing assertions to pass information. -#access-type=Access Type -#access-type.tooltip='Confidential' clients require a secret to initiate login protocol. 'Public' clients do not require a secret. 'Bearer-only' clients are web services that never initiate a login. -#standard-flow-enabled=Standard Flow Enabled -#standard-flow-enabled.tooltip=This enables standard OpenID Connect redirect based authentication with authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Authorization Code Flow' for this client. -#implicit-flow-enabled=Implicit Flow Enabled -#implicit-flow-enabled.tooltip=This enables support for OpenID Connect redirect based authentication without authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Implicit Flow' for this client. -#direct-access-grants-enabled=Direct Access Grants Enabled -#direct-access-grants-enabled.tooltip=This enables support for Direct Access Grants, which means that client has access to username/password of user and exchange it directly with Keycloak server for access token. In terms of OAuth2 specification, this enables support of 'Resource Owner Password Credentials Grant' for this client. -#service-accounts-enabled=Service Accounts Enabled -#service-accounts-enabled.tooltip=Allows you to authenticate this client to Keycloak and retrieve access token dedicated to this client. In terms of OAuth2 specification, this enables support of 'Client Credentials Grant' for this client. -#include-authnstatement=Include AuthnStatement -#include-authnstatement.tooltip=Should a statement specifying the method and timestamp be included in login responses? -#include-onetimeuse-condition=Include OneTimeUse Condition -#include-onetimeuse-condition.tooltip=Should a OneTimeUse Condition be included in login responses? -#sign-documents=Sign Documents -#sign-documents.tooltip=Should SAML documents be signed by the realm? -#sign-documents-redirect-enable-key-info-ext=Optimize REDIRECT signing key lookup -#sign-documents-redirect-enable-key-info-ext.tooltip=When signing SAML documents in REDIRECT binding for SP that is secured by Keycloak adapter, should the ID of the signing key be included in SAML protocol message in element? This optimizes validation of the signature as the validating party uses a single key instead of trying every known key for validation. -#sign-assertions=Sign Assertions -#sign-assertions.tooltip=Should assertions inside SAML documents be signed? This setting isn't needed if document is already being signed. -#signature-algorithm=Signature Algorithm -#signature-algorithm.tooltip=The signature algorithm to use to sign documents. -#canonicalization-method=Canonicalization Method -#canonicalization-method.tooltip=Canonicalization Method for XML signatures. -#encrypt-assertions=Encrypt Assertions -#encrypt-assertions.tooltip=Should SAML assertions be encrypted with client's public key using AES? -#client-signature-required=Client Signature Required -#client-signature-required.tooltip=Will the client sign their saml requests and responses? And should they be validated? -#force-post-binding=Force POST Binding -#force-post-binding.tooltip=Always use POST binding for responses. -#front-channel-logout=Front Channel Logout -#front-channel-logout.tooltip=When true, logout requires a browser redirect to client. When false, server performs a background invocation for logout. -#force-name-id-format=Force Name ID Format -#force-name-id-format.tooltip=Ignore requested NameID subject format and use admin console configured one. -#name-id-format=Name ID Format -#name-id-format.tooltip=The name ID format to use for the subject. -#root-url=Root URL -#root-url.tooltip=Root URL appended to relative URLs -#valid-redirect-uris=Valid Redirect URIs -#valid-redirect-uris.tooltip=Valid URI pattern a browser can redirect to after a successful login or logout. Simple wildcards are allowed i.e. 'http://example.com/*'. Relative path can be specified too i.e. /my/relative/path/*. Relative paths are relative to the client root URL, or if none is specified the auth server root URL is used. For SAML, you must set valid URI patterns if you are relying on the consumer service URL embedded with the login request. -#base-url.tooltip=Default URL to use when the auth server needs to redirect or link back to the client. -#admin-url=Admin URL -#admin-url.tooltip=URL to the admin interface of the client. Set this if the client supports the adapter REST API. This REST API allows the auth server to push revocation policies and other administrative tasks. Usually this is set to the base URL of the client. -#master-saml-processing-url=Master SAML Processing URL -#master-saml-processing-url.tooltip=If configured, this URL will be used for every binding to both the SP's Assertion Consumer and Single Logout Services. This can be individually overiden for each binding and service in the Fine Grain SAML Endpoint Configuration. -#idp-sso-url-ref=IDP Initiated SSO URL Name -#idp-sso-url-ref.tooltip=URL fragment name to reference client when you want to do IDP Initiated SSO. Leaving this empty will disable IDP Initiated SSO. The URL you will reference from your browser will be: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -#idp-sso-url-ref.urlhint=Target IDP initiated SSO URL: -#idp-sso-relay-state=IDP Initiated SSO Relay State -#idp-sso-relay-state.tooltip=Relay state you want to send with SAML request when you want to do IDP Initiated SSO. -web-origins=Web Origins -web-origins.tooltip=Erlaubte CORS Origins. Um alle Origins der Valid Redirect URIs zu erlauben, f\u00FCgen Sie ein '+' hinzu. Dabei wird der '*' Platzhalter nicht mit \u00FCbernommen. Um alle Origins zu erlauben, geben Sie explizit einen Eintrag mit '*' an. -#fine-oidc-endpoint-conf=Fine Grain OpenID Connect Configuration -#fine-oidc-endpoint-conf.tooltip=Expand this section to configure advanced settings of this client related to OpenID Connect protocol -#user-info-signed-response-alg=User Info Signed Response Algorithm -#user-info-signed-response-alg.tooltip=JWA algorithm used for signed User Info Endpoint response. If set to 'unsigned', then User Info Response won't be signed and will be returned in application/json format. -#request-object-signature-alg=Request Object Signature Algorithm -#request-object-signature-alg.tooltip=JWA algorithm, which client needs to use when sending OIDC request object specified by 'request' or 'request_uri' parameters. If set to 'any', then Request object can be signed by any algorithm (including 'none' ). -#request-object-required=Request Object Required -#request-object-required-alg.tooltip=Specifies if the client needs to provide a request object with their authorization requests, and what method they can use for this. If set to "not required", providing a request object is optional. In all other cases providing a request object is mandatory. If set to "request", the request object must be provided by value. If set to "request_uri", the request object must be provided by reference. If set to "request or request_uri", either method can be used. -#fine-saml-endpoint-conf=Fine Grain SAML Endpoint Configuration -#fine-saml-endpoint-conf.tooltip=Expand this section to configure exact URLs for Assertion Consumer and Single Logout Service. -#assertion-consumer-post-binding-url=Assertion Consumer Service POST Binding URL -#assertion-consumer-post-binding-url.tooltip=SAML POST Binding URL for the client's assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -#assertion-consumer-redirect-binding-url=Assertion Consumer Service Redirect Binding URL -#assertion-consumer-redirect-binding-url.tooltip=SAML Redirect Binding URL for the client's assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -#logout-service-post-binding-url=Logout Service POST Binding URL -#logout-service-post-binding-url.tooltip=SAML POST Binding URL for the client's single logout service. You can leave this blank if you are using a different binding -#logout-service-redir-binding-url=Logout Service Redirect Binding URL -#logout-service-redir-binding-url.tooltip=SAML Redirect Binding URL for the client's single logout service. You can leave this blank if you are using a different binding. -#saml-signature-keyName-transformer=SAML Signature Key Name -#saml-signature-keyName-transformer.tooltip=Signed SAML documents contain identification of signing key in KeyName element. For Keycloak / RH-SSO counterparty, use KEY_ID, for MS AD FS use CERT_SUBJECT, for others check and use NONE if no other option works. -#oidc-compatibility-modes=OpenID Connect Compatibility Modes -#oidc-compatibility-modes.tooltip=Expand this section to configure settings for backwards compatibility with older OpenID Connect / OAuth2 adapters. It is useful especially if your client uses older version of Keycloak / RH-SSO adapter. -#exclude-session-state-from-auth-response=Exclude Session State From Authentication Response -#exclude-session-state-from-auth-response.tooltip=If this is on, the parameter 'session_state' will not be included in OpenID Connect Authentication Response. It is useful if your client uses older OIDC / OAuth2 adapter, which does not support 'session_state' parameter. - -# client import -#import-client=Import Client -#format-option=Format Option -#select-format=Select a Format -#import-file=Import File - -# client tabs -settings=Einstellungen -credentials=Passw\u00F6rter -roles=Rollen -#mappers=Mappers -#mappers.tooltip=Protocol mappers perform transformation on tokens and documents. They can do things like map user data into protocol claims, or just transform any requests going between the client and auth server. -#scope=Scope -#scope.tooltip=Scope mappings allow you to restrict which user role mappings are included within the access token requested by the client. -#sessions.tooltip=View active sessions for this client. Allows you to see which users are active and when they logged in. -#offline-access=Offline Access -#offline-access.tooltip=View offline sessions for this client. Allows you to see which users retrieve offline token and when they retrieve it. To revoke all tokens for the client, go to Revocation tab and set not before value to now. -#clustering=Clustering -#installation=Installation -#installation.tooltip=Helper utility for generating various client adapter configuration formats which you can download or cut and paste to configure your clients. -#service-account-roles=Service Account Roles -#service-account-roles.tooltip=Allows you to authenticate role mappings for the service account dedicated to this client. - -# client credentials -#client-authenticator=Client Authenticator -#client-authenticator.tooltip=Client Authenticator used for authentication this client against Keycloak server -#certificate.tooltip=Client Certificate for validate JWT issued by client and signed by Client private key from your keystore. -#publicKey.tooltip=Public Key for validate JWT issued by client and signed by Client private key. -#no-client-certificate-configured=No client certificate configured -#gen-new-keys-and-cert=Generate new keys and certificate -#import-certificate=Import Certificate -#gen-client-private-key=Generate Client Private Key -#generate-private-key=Generate Private Key -#kid=Kid -#kid.tooltip=KID (Key ID) of the client public key from imported JWKS. -#use-jwks-url=Use JWKS URL -#use-jwks-url.tooltip=If the switch is on, then client public keys will be downloaded from given JWKS URL. This allows great flexibility because new keys will be always re-downloaded again when client generates new keypair. If the switch is off, then public key (or certificate) from the Keycloak DB is used, so when client keypair changes, you always need to import new key (or certificate) to the Keycloak DB as well. -#jwks-url=JWKS URL -#jwks-url.tooltip=URL where client keys in JWK format are stored. See JWK specification for more details. If you use Keycloak client adapter with "jwt" credential, then you can use URL of your app with '/k_jwks' suffix. For example 'http://www.myhost.com/myapp/k_jwks' . -#archive-format=Archive Format -#archive-format.tooltip=Java keystore or PKCS12 archive format. -#key-alias=Key Alias -#key-alias.tooltip=Archive alias for your private key and certificate. -#key-password=Key Password -#key-password.tooltip=Password to access the private key in the archive -#store-password=Store Password -#store-password.tooltip=Password to access the archive itself -#generate-and-download=Generate and Download -#client-certificate-import=Client Certificate Import -#import-client-certificate=Import Client Certificate -#jwt-import.key-alias.tooltip=Archive alias for your certificate. -#secret=Secret -#regenerate-secret=Regenerate Secret -#registrationAccessToken=Registration access token -#registrationAccessToken.regenerate=Regenerate registration access token -#registrationAccessToken.tooltip=The registration access token provides access for clients to the client registration service. -add-role=Rolle hinzuf\u00FCgen -role-name=Rollenname -#composite=Composite -description=Beschreibung -no-client-roles-available=Keine Client-Rollen verf\u00FCgbar -#composite-roles=Composite Roles -#composite-roles.tooltip=When this role is (un)assigned to a user any role associated with it will be (un)assigned implicitly. -realm-roles=Realm-Rollen -available-roles=Verf\u00FCgbare Rollen -add-selected=Ausgew\u00E4hlte hinzuf\u00FCgen -#associated-roles=Associated Roles -#composite.associated-realm-roles.tooltip=Realm level roles associated with this composite role. -#composite.available-realm-roles.tooltip=Realm level roles that you can associate to this composite role. -remove-selected=Ausgew\u00E4hlte entfernen -client-roles=Client-Rollen -select-client-to-view-roles=W\u00E4hlen Sie einen Client um die Rollen daf\u00FCr zu sehen -#available-roles.tooltip=Roles from this client that you can associate to this composite role. -#client.associated-roles.tooltip=Client roles associated with this composite role. -#add-builtin=Add Builtin -category=Kategorie -type=Typ -#no-mappers-available=No mappers available -#add-builtin-protocol-mappers=Add Builtin Protocol Mappers -#add-builtin-protocol-mapper=Add Builtin Protocol Mapper -#scope-mappings=Scope Mappings -#full-scope-allowed=Full Scope Allowed -#full-scope-allowed.tooltip=Allows you to disable all restrictions. -#scope.available-roles.tooltip=Realm level roles that can be assigned to scope. -assigned-roles=Zugewiesene Rollen -#assigned-roles.tooltip=Realm level roles assigned to scope. -effective-roles=Effektive Rollen -#realm.effective-roles.tooltip=Assigned realm level roles that may have been inherited from a composite role. -#select-client-roles.tooltip=Select client to view roles for client -#assign.available-roles.tooltip=Client roles available to be assigned. -#client.assigned-roles.tooltip=Assigned client roles. -#client.effective-roles.tooltip=Assigned client roles that may have been inherited from a composite role. -#basic-configuration=Basic configuration -#node-reregistration-timeout=Node Re-registration Timeout -#node-reregistration-timeout.tooltip=Interval to specify max time for registered clients cluster nodes to re-register. If cluster node won't send re-registration request to Keycloak within this time, it will be unregistered from Keycloak -#registered-cluster-nodes=Registered cluster nodes -#register-node-manually=Register node manually -#test-cluster-availability=Test cluster availability -#last-registration=Last registration -#node-host=Node host -#no-registered-cluster-nodes=No registered cluster nodes available -#cluster-nodes=Cluster Nodes -#add-node=Add Node -#active-sessions.tooltip=Total number of active user sessions for this client. -#show-sessions=Show Sessions -#show-sessions.tooltip=Warning, this is a potentially expensive operation depending on number of active sessions. -user=Benutzer -#from-ip=From IP -#session-start=Session Start -first-page=Erste Seite -previous-page=Vorherige Seite -next-page=N\u00E4chste Seite -#client-revoke.not-before.tooltip=Revoke any tokens issued before this date for this client. -#client-revoke.push.tooltip=If admin URL is configured for this client, push this policy to that client. -#select-a-format=Select a Format -#download=Download -#offline-tokens=Offline Tokens -#offline-tokens.tooltip=Total number of offline tokens for this client. -#show-offline-tokens=Show Offline Tokens -#show-offline-tokens.tooltip=Warning, this is a potentially expensive operation depending on number of offline tokens. -#token-issued=Token Issued -last-access=Letzter Zugriff -last-refresh=Letzte Aktualisierung -#key-export=Key Export -#key-import=Key Import -#export-saml-key=Export SAML Key -#import-saml-key=Import SAML Key -#realm-certificate-alias=Realm Certificate Alias -#realm-certificate-alias.tooltip=Realm certificate is stored in archive too. This is the alias to it. -#signing-key=Signing Key -#saml-signing-key=SAML Signing Key. -#private-key=Private Key -#generate-new-keys=Generate new keys -#export=Export -#encryption-key=Encryption Key -#saml-encryption-key.tooltip=SAML Encryption Key. -#service-accounts=Service Accounts -#service-account.available-roles.tooltip=Realm level roles that can be assigned to service account. -#service-account.assigned-roles.tooltip=Realm level roles assigned to service account. -#service-account-is-not-enabled-for=Service account is not enabled for {{client}} -#create-protocol-mappers=Create Protocol Mappers -#create-protocol-mapper=Create Protocol Mapper -#protocol=Protocol -#protocol.tooltip=Protocol... -#id=ID -#mapper.name.tooltip=Name of the mapper. -#mapper.consent-required.tooltip=When granting temporary access, must the user consent to providing this data to the client? -#consent-text=Consent Text -#consent-text.tooltip=Text to display on consent page. -#mapper-type=Mapper Type -#mapper-type.tooltip=Type of the mapper -# realm identity providers -#identity-providers=Identity Providers -#table-of-identity-providers=Table of identity providers -#add-provider.placeholder=Add provider... -#provider=Provider -#gui-order=GUI order -#first-broker-login-flow=First Login Flow -#post-broker-login-flow=Post Login Flow -sync-mode=Synchronisationsmodus -sync-mode.tooltip=Standardsyncmodus f\u00FCr alle Mapper. M\u00F6gliche Werte sind: 'Legacy' um das alte Verhalten beizubehalten, 'Importieren' um den Nutzer einmalig zu importieren, 'Erzwingen' um den Nutzer immer zu importieren. -sync-mode.inherit=Standard erben -sync-mode.legacy=Legacy -sync-mode.import=Importieren -sync-mode.force=Erzwingen -sync-mode-override=\u00DCberschriebene Synchronisation -sync-mode-override.tooltip=\u00DCberschreibt den normalen Synchronisationsmodus des IDP f\u00FCr diesen Mapper. Were sind 'Legacy' um das alte Verhalten beizubehalten, 'Importieren' um den Nutzer einmalig zu importieren, 'Erzwingen' um den Nutzer immer zu updaten. -#redirect-uri=Redirect URI -#redirect-uri.tooltip=The redirect uri to use when configuring the identity provider. -#alias=Alias -#display-name=Display Name -#identity-provider.alias.tooltip=The alias uniquely identifies an identity provider and it is also used to build the redirect uri. -#identity-provider.display-name.tooltip=Friendly name for Identity Providers. -#identity-provider.enabled.tooltip=Enable/disable this identity provider. -#authenticate-by-default=Authenticate by Default -#identity-provider.authenticate-by-default.tooltip=Indicates if this provider should be tried by default for authentication even before displaying login screen. -#store-tokens=Store Tokens -#identity-provider.store-tokens.tooltip=Enable/disable if tokens must be stored after authenticating users. -#stored-tokens-readable=Stored Tokens Readable -#identity-provider.stored-tokens-readable.tooltip=Enable/disable if new users can read any stored tokens. This assigns the broker.read-token role. -#disableUserInfo=Disable User Info -#identity-provider.disableUserInfo.tooltip=Disable usage of User Info service to obtain additional user information? Default is to use this OIDC service. -#userIp=Use userIp Param -#identity-provider.google-userIp.tooltip=Set 'userIp' query parameter when invoking on Google's User Info service. This will use the user's ip address. Useful if Google is throttling access to the User Info service. -#hostedDomain=Hosted Domain -#identity-provider.google-hostedDomain.tooltip=Set 'hd' query parameter when logging in with Google. Google will only list accounts for this domain. Keycloak validates that the returned identity token has a claim for this domain. When '*' is entered any hosted account can be used. -#sandbox=Target Sandbox -#identity-provider.paypal-sandbox.tooltip=Target PayPal's sandbox environment -#update-profile-on-first-login=Update Profile on First Login -#on=On -#on-missing-info=On missing info -#off=Off -#update-profile-on-first-login.tooltip=Define conditions under which a user has to update their profile during first-time login. -#trust-email=Trust Email -#trust-email.tooltip=If enabled then email provided by this provider is not verified even if verification is enabled for the realm. -#link-only=Account Linking Only -#link-only.tooltip=If true, users cannot log in through this provider. They can only link to this provider. This is useful if you don't want to allow login from the provider, but want to integrate with a provider -#hide-on-login-page=Hide on Login Page -#hide-on-login-page.tooltip=If hidden, then login with this provider is possible only if requested explicitly, e.g. using the 'kc_idp_hint' parameter. -#gui-order.tooltip=Number defining order of the provider in GUI (eg. on Login page). -#first-broker-login-flow.tooltip=Alias of authentication flow, which is triggered after first login with this identity provider. Term 'First Login' means that there is not yet existing Keycloak account linked with the authenticated identity provider account. -#post-broker-login-flow.tooltip=Alias of authentication flow, which is triggered after each login with this identity provider. Useful if you want additional verification of each user authenticated with this identity provider (for example OTP). Leave this empty if you don't want any additional authenticators to be triggered after login with this identity provider. Also note, that authenticator implementations must assume that user is already set in ClientSession as identity provider already set it. -#openid-connect-config=OpenID Connect Config -#openid-connect-config.tooltip=OIDC SP and external IDP configuration. -#authorization-url=Authorization URL -#authorization-url.tooltip=The Authorization Url. -#token-url=Token URL -#token-url.tooltip=The Token URL. -#loginHint=Pass login_hint -#loginHint.tooltip=Pass login_hint to identity provider. -logout-url=Logout-URL -#identity-provider.logout-url.tooltip=End session endpoint to use to logout user from external IDP. -#backchannel-logout=Backchannel Logout -#backchannel-logout.tooltip=Does the external IDP support backchannel logout? -#user-info-url=User Info URL -#user-info-url.tooltip=The User Info Url. This is optional. -#identity-provider.client-id.tooltip=The client or client identifier registered within the identity provider. -#client-secret=Client Secret -#show-secret=Show secret -#hide-secret=Hide secret -#client-secret.tooltip=The client or client secret registered within the identity provider. -#issuer=Issuer -#issuer.tooltip=The issuer identifier for the issuer of the response. If not provided, no validation will be performed. -#default-scopes=Default Scopes -#identity-provider.default-scopes.tooltip=The scopes to be sent when asking for authorization. It can be a space-separated list of scopes. Defaults to 'openid'. -#prompt=Prompt -#unspecified.option=unspecified -#none.option=none -#consent.option=consent -#login.option=login -#select-account.option=select_account -#prompt.tooltip=Specifies whether the Authorization Server prompts the End-User for reauthentication and consent. -#validate-signatures=Validate Signatures -#identity-provider.validate-signatures.tooltip=Enable/disable signature validation of external IDP signatures. -#identity-provider.use-jwks-url.tooltip=If the switch is on, then identity provider public keys will be downloaded from given JWKS URL. This allows great flexibility because new keys will be always re-downloaded again when identity provider generates new keypair. If the switch is off, then public key (or certificate) from the Keycloak DB is used, so when identity provider keypair changes, you always need to import new key to the Keycloak DB as well. -#identity-provider.jwks-url.tooltip=URL where identity provider keys in JWK format are stored. See JWK specification for more details. If you use external Keycloak identity provider, then you can use URL like 'http://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certs' assuming your brokered Keycloak is running on 'http://broker-keycloak:8180' and its realm is 'test' . -#validating-public-key=Validating Public Key -#identity-provider.validating-public-key.tooltip=The public key in PEM format that must be used to verify external IDP signatures. -#validating-public-key-id=Validating Public Key Id -#identity-provider.validating-public-key-id.tooltip=Explicit ID of the validating public key given above if the key ID. Leave blank if the key above should be used always, regardless of key ID specified by external IDP; set it if the key should only be used for verifying if key ID from external IDP matches. -#allowed-clock-skew=Allowed clock skew -#identity-provider.allowed-clock-skew.tooltip=Clock skew in seconds that is tolerated when validating identity provider tokens. Default value is zero. -#forwarded-query-parameters=Forwarded Query Parameters -#identity-provider.forwarded-query-parameters.tooltip=Non OpenID Connect/OAuth standard query parameters to be forwarded to external IDP from the initial application request to Authorization Endpoint. Multiple parameters can be entered, separated by comma (,). -#import-external-idp-config=Import External IDP Config -#import-external-idp-config.tooltip=Allows you to load external IDP metadata from a config file or to download it from a URL. -#import-from-url=Import from URL -#identity-provider.import-from-url.tooltip=Import metadata from a remote IDP discovery descriptor. -#import-from-file=Import from file -#identity-provider.import-from-file.tooltip=Import metadata from a downloaded IDP discovery descriptor. -#saml-config=SAML Config -#identity-provider.saml-config.tooltip=SAML SP and external IDP configuration. -#single-signon-service-url=Single Sign-On Service URL -#saml.single-signon-service-url.tooltip=The Url that must be used to send authentication requests (SAML AuthnRequest). -#single-logout-service-url=Single Logout Service URL -#saml.single-logout-service-url.tooltip=The Url that must be used to send logout requests. -#nameid-policy-format=NameID Policy Format -#nameid-policy-format.tooltip=Specifies the URI reference corresponding to a name identifier format. Defaults to urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -#http-post-binding-response=HTTP-POST Binding Response -#http-post-binding-response.tooltip=Indicates whether to respond to requests using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -#http-post-binding-for-authn-request=HTTP-POST Binding for AuthnRequest -#http-post-binding-for-authn-request.tooltip=Indicates whether the AuthnRequest must be sent using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -#http-post-binding-logout=HTTP-POST Binding Logout -#http-post-binding-logout.tooltip=Indicates whether to respond to requests using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -#want-authn-requests-signed=Want AuthnRequests Signed -#want-authn-requests-signed.tooltip=Indicates whether the identity provider expects a signed AuthnRequest. -#want-assertions-signed=Want Assertions Signed -#want-assertions-signed.tooltip=Indicates whether this service provider expects a signed Assertion. -#want-assertions-encrypted=Want Assertions Encrypted -#want-assertions-encrypted.tooltip=Indicates whether this service provider expects an encrypted Assertion. -#force-authentication=Force Authentication -#identity-provider.force-authentication.tooltip=Indicates whether the identity provider must authenticate the presenter directly rather than rely on a previous security context. -#validate-signature=Validate Signature -#saml.validate-signature.tooltip=Enable/disable signature validation of SAML responses. -#validating-x509-certificate=Validating X509 Certificates -#validating-x509-certificate.tooltip=The certificate in PEM format that must be used to check for signatures. Multiple certificates can be entered, separated by comma (,). -#saml.import-from-url.tooltip=Import metadata from a remote IDP SAML entity descriptor. -#social.client-id.tooltip=The client identifier registered with the identity provider. -#social.client-secret.tooltip=The client secret registered with the identity provider. -#social.default-scopes.tooltip=The scopes to be sent when asking for authorization. See documentation for possible values, separator and default value'. -key=Key -#stackoverflow.key.tooltip=The Key obtained from Stack Overflow client registration. -#openshift.base-url=Base Url -#openshift.base-url.tooltip=Base Url to OpenShift Online API -#openshift4.base-url=Base Url -#openshift4.base-url.tooltip=Base Url to OpenShift Online API -#gitlab-application-id=Application Id -#gitlab-application-secret=Application Secret -#gitlab.application-id.tooltip=Application Id for the application you created in your GitLab Applications account menu -#gitlab.application-secret.tooltip=Secret for the application that you created in your GitLab Applications account menu -#gitlab.default-scopes.tooltip=Scopes to ask for on login. Will always ask for openid. Additionally adds read_user if you do not specify anything. -#bitbucket-consumer-key=Consumer Key -#bitbucket-consumer-secret=Consumer Secret -#bitbucket.key.tooltip=Bitbucket OAuth Consumer Key -#bitbucket.secret.tooltip=Bitbucket OAuth Consumer Secret -#bitbucket.default-scopes.tooltip=Scopes to ask for on login. If you do not specify anything, scope defaults to 'email'. -# User federation -#sync-ldap-roles-to-keycloak=Sync LDAP Roles To Keycloak -#sync-keycloak-roles-to-ldap=Sync Keycloak Roles To LDAP -#sync-ldap-groups-to-keycloak=Sync LDAP Groups To Keycloak -#sync-keycloak-groups-to-ldap=Sync Keycloak Groups To LDAP -realms=Realms -#realm=Realm -#identity-provider-mappers=Identity Provider Mappers -#create-identity-provider-mapper=Create Identity Provider Mapper -#add-identity-provider-mapper=Add Identity Provider Mapper -#client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description} -#expires=Expires -#expiration=Expiration -#expiration.tooltip=Specifies how long the token should be valid -#count=Count -#count.tooltip=Specifies how many clients can be created using the token -#remainingCount=Remaining Count -#created=Created -#back=Back -#initial-access-tokens=Initial Access Tokens -#add-initial-access-tokens=Add Initial Access Token -#initial-access-token=Initial Access Token -#initial-access.copyPaste.tooltip=Copy/paste the initial access token before navigating away from this page as it's not possible to retrieve later -#continue=Continue -#initial-access-token.confirm.title=Copy Initial Access Token -#initial-access-token.confirm.text=Please copy and paste the initial access token before confirming as it can't be retrieved later -#no-initial-access-available=No Initial Access Tokens available -#client-reg-policies=Client Registration Policies -#client-reg-policy.name.tooltip=Display Name of the policy -#anonymous-policies=Anonymous Access Policies -#anonymous-policies.tooltip=Those Policies are used when Client Registration Service is invoked by unauthenticated request. This means request doesn't contain Initial Access Token nor Bearer Token. -#auth-policies=Authenticated Access Policies -#auth-policies.tooltip=Those Policies are used when Client Registration Service is invoked by authenticated request. This means request contains Initial Access Token or Bearer Token. -#policy-name=Policy Name -#no-client-reg-policies-configured=No Client Registration Policies -#trusted-hosts.label=Trusted Hosts -#trusted-hosts.tooltip=List of Hosts, which are trusted and are allowed to invoke Client Registration Service and/or be used as values of Client URIs. You can use hostnames or IP addresses. If you use star at the beginning (for example '*.example.com' ) then whole domain example.com will be trusted. -#host-sending-registration-request-must-match.label=Host Sending Client Registration Request Must Match -#host-sending-registration-request-must-match.tooltip=If on, then any request to Client Registration Service is allowed just if it was sent from some trusted host or domain. -#client-uris-must-match.label=Client URIs Must Match -#client-uris-must-match.tooltip=If on, then all Client URIs (Redirect URIs and others) are allowed just if they match some trusted host or domain. -#allowed-protocol-mappers.label=Allowed Protocol Mappers -#allowed-protocol-mappers.tooltip=Whitelist of allowed protocol mapper providers. If there is an attempt to register client, which contains some protocol mappers, which were not whitelisted, then registration request will be rejected. -#consent-required-for-all-mappers.label=Consent Required For Mappers -#consent-required-for-all-mappers.tooltip=If on, then all newly registered protocol mappers will automatically have consentRequired switch on. This means that user will need to approve consent screen. NOTE: Consent screen is shown just if client has consentRequired switch on. So it's usually good to use this switch together with consent-required policy. -#allowed-client-scopes.label=Allowed Client Scopes -#allowed-client-scopes.tooltip=Whitelist of the client scopes, which can be used on newly registered client. Attempt to register client with some client scope, which is not whitelisted, will be rejected. By default, the whitelist is either empty or contains just realm default client scopes (based on 'Allow Default Scopes' configuration property) -#allow-default-scopes.label=Allow Default Scopes -#allow-default-scopes.tooltip=If on, then newly registered clients will be allowed to have client scopes mentioned in realm default client scopes or realm optional client scopes -#max-clients.label=Max Clients Per Realm -#max-clients.tooltip=It won't be allowed to register new client if count of existing clients in realm is same or bigger than configured limit. - -#client-scopes=Client Scopes -#client-scopes.tooltip=Client scopes allow you to define common set of protocol mappers and roles, that are shared between multiple clients - -groups=Gruppen - -group.add-selected.tooltip=Realm-Rollen die zu der Gruppen hinzugef\u00FCgt werden k\u00F6nnen. -group.assigned-roles.tooltip=Realm-Rollen die zur Gruppe zugeordnet sind -#group.effective-roles.tooltip=All realm role mappings. Some roles here might be inherited from a mapped composite role. -#group.available-roles.tooltip=Assignable roles from this client. -#group.assigned-roles-client.tooltip=Role mappings for this client. -#group.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role. - -group.move.success=Gruppe verschoben. -group.remove.confirm.title=Gruppe l\u00F6schen -group.remove.confirm.message=Sind Sie sicher, dass Sie die Gruppe \u201E{{name}}\u201C l\u00F6schen m\u00F6chten? -group.remove.success=Die Gruppe wurde gel\u00F6scht. -group.fetch.fail=Fehler beim Laden: {{params}} -group.create.success=Gruppe erstellt. -group.edit.success=Die \u00C4nderungen wurde gespeichert. -group.roles.add.success=Rollenzuweisung hinzugef\u00FCgt. -group.roles.remove.success=Rollenzuweisung entfernt. -group.default.add.error=Bitte eine Gruppe ausw\u00E4hlen. -group.default.add.success=Standardgruppe hinzugef\u00FCgt. -group.default.remove.success=Standardgruppe entfernt. - -default-roles=Standardrollen -no-realm-roles-available=Keine Realm-Rollen verf\u00FCgbar - -users=Benutzer -user.add-selected.tooltip=Realm-Rollen, die dem Benutzer zugewiesen werden k\u00F6nnen. -user.assigned-roles.tooltip=Realm-Rollen, die dem Benutzer zugewiesen sind. -user.effective-roles.tooltip=Alle Realm-Rollen-Zuweisungen. Einige Rollen hier k\u00F6nnen von zusammengesetzten Rollen geerbt sein. -#user.available-roles.tooltip=Assignable roles from this client. -#user.assigned-roles-client.tooltip=Role mappings for this client. -#user.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role. - -user.roles.add.success=Rollenzuweisung hinzugef\u00FCgt. -user.roles.remove.success=Rollenzuweisung entfernt. -user.logout.all.success=Benutzer von allen Sitzungen abgemeldet. -user.logout.session.success=Benutzer von Sitzung abgemeldet. -user.fedid.link.remove.confirm.title=Verkn\u00FCpfung mit Identity Provider entfernen -user.fedid.link.remove.confirm.message=Sind Sie sicher, dass Sie die Verkn\u00FCpfung mit dem Identity Provider \u201E{{name}}\u201C entfernen m\u00F6chten? -user.fedid.link.remove.success=Verkn\u00FCpfung mit Identity Provider entfernt. -user.fedid.link.add.success=Verkn\u00FCpfung mit Identity Provider angelegt. -user.consent.revoke.success=Einwilligung widerrufen. -user.consent.revoke.error=Einwilligung konnte nicht widerrufen werden. -user.unlock.success=Alle vor\u00FCbergehend gesperrten Benutzer wurden entsperrt. -user.remove.confirm.title=Benutzer l\u00F6schen -user.remove.confirm.message=Sind Sie sicher, dass Sie den Benutzer \u201E{{name}}\u201C l\u00F6schen m\u00F6chten? -user.remove.success=Der Benutzer wurde gel\u00F6scht. -user.remove.error=Der Benutzer konnte nicht gel\u00F6scht werden. -user.create.success=Der Benutzer wurde angelegt. -user.edit.success=Die \u00C4nderungen wurden gespeichert. -user.credential.update.success=Die Zugangsdaten wurdern gespeichert. -user.credential.update.error=Beim Speichern der Zugangsdaten ist ein Fehler aufgetreten. -user.credential.remove.confirm.title=Zugangsdaten l\u00F6schen -user.credential.remove.confirm.message=Sind Sie sicher, dass Sie die Zugangsdaten l\u00F6schen m\u00F6chten? -user.credential.remove.success=Die Zugangsdaten wurden gel\u00F6scht. -user.credential.remove.error=Beim L\u00F6schen der Zugangsdaten ist ein Fehler aufgetreten. -user.credential.move-top.error=Beim Verschieben der Zugangsdaten ist ein Fehler aufgetreten. -user.credential.move-up.error=Beim Verschieben der Zugangsdaten ist ein Fehler aufgetreten. -user.credential.move-down.error=Beim Verschieben der Zugangsdaten ist ein Fehler aufgetreten. -user.credential.fetch.error=Beim Laden der Zugangsdaten ist ein Fehler aufgetreten. -#user.credential.storage.fetch.error=Error while loading user storage credentials. See console for more information. -user.password.error.not-matching=Die Passw\u00F6rter stimmen nicht \u00FCberein. -user.password.reset.confirm.title=Passwort zur\u00FCcksetzen -user.password.reset.confirm.message=Sind Sie sicher, dass Sie das Passwort f\u00FCr diesen Benutzer zur\u00FCcksetzen m\u00F6chten? -user.password.reset.success=Das Passwort wurde zur\u00FCckgesetzt. -user.password.set.confirm.title=Passwort setzen -user.password.set.confirm.message=Sind Sie sicher, dass Sie ein Passwort f\u00FCr diesen Benutzer setzen m\u00F6chten? -user.password.set.success=Das Passwort wurde gesetzt. -user.credential.disable.confirm.title=Zugangsdaten deaktivieren -user.credential.disable.confirm.message=Sind Sie sicher, dass Sie diese Zugangsdaten deaktivieren m\u00F6chten? -user.credential.disable.confirm.success=Zugangsdaten deaktiviert. -user.credential.disable.confirm.error=Fehler beim Deaktivieren der Zugangsdaten -user.actions-email.send.pending-changes.title=E-Mail kann nicht gesendet werden. -user.actions-email.send.pending-changes.message=Bitte speichern Sie Ihre \u00C4nderungen bevor Sie die E-Mail senden. -user.actions-email.send.confirm.title=E-Mail senden -user.actions-email.send.confirm.message=Sind Sie sicher, dass Sie die E-Mail an den Benutzer senden m\u00F6chten? -user.actions-email.send.confirm.success=E-Mail an Benutzer gesendet. -user.actions-email.send.confirm.error=Fehler beim Senden der E-Mail -#user.storage.remove.confirm.title=Delete User storage provider -#user.storage.remove.confirm.message=Are you sure you want to permanently delete the user storage provider {{name}}? -#user.storage.remove.success=The provider has been deleted. -#user.storage.create.success=The provider has been created. -#user.storage.edit.success=The provider has been updated. -#user.storage.sync.success=Sync of users finished successfully. {{status}} -#user.storage.sync.error=Error during sync of users -#user.storage.remove-users.success=Remove imported users finished successfully. -#user.storage.remove-users.error=Error during remove -#user.storage.unlink.success=Unlink of users finished successfully. -#user.storage.unlink.error=Error during unlink -user.groups.fetch.all.error=Fehler beim Laden alle Gruppen: {{params}} -user.groups.fetch.error=Fehler beim Laden: {{params}} -user.groups.join.error.no-group-selected=Bitte w\u00E4hlen Sie eine Gruppe aus! -user.groups.join.error.already-added=Benutzer geh\u00F6rt der Gruppe bereits an. -user.groups.join.success=Zur Gruppe hinzugef\u00FCgt. -user.groups.leave.error.no-group-selected=Bitte w\u00E4hlen Sie eine Gruppe aus! -user.groups.leave.success=Aus Gruppe entfernt. - -#default.available-roles.tooltip=Realm level roles that can be assigned. -#realm-default-roles=Realm Default Roles -#realm-default-roles.tooltip=Realm level roles assigned to new users. -#default.available-roles-client.tooltip=Roles from this client that are assignable as a default. -#client-default-roles=Client Default Roles -#client-default-roles.tooltip=Roles from this client assigned as a default role. -#composite.available-roles.tooltip=Realm level roles that you can associate to this composite role. -#composite.associated-roles.tooltip=Realm level roles associated with this composite role. -#composite.available-roles-client.tooltip=Roles from this client that you can associate to this composite role. -#composite.associated-roles-client.tooltip=Client roles associated with this composite role. -#partial-import=Partial Import -#partial-import.tooltip=Partial import allows you to import users, clients, and other resources from a previously exported json file. - -#file=File -#exported-json-file=Exported json file -#import-from-realm=Import from realm -#import-users=Import users -#import-groups=Import groups -#import-clients=Import clients -#import-identity-providers=Import identity providers -#import-realm-roles=Import realm roles -#import-client-roles=Import client roles -#if-resource-exists=If a resource exists -#fail=Fail -#skip=Skip -#overwrite=Overwrite -#if-resource-exists.tooltip=Specify what should be done if you try to import a resource that already exists. - -#partial-export=Partial Export -#partial-export.tooltip=Partial export allows you to export realm configuration, and other associated resources into a json file. -#export-groups-and-roles=Export groups and roles -#export-clients=Export clients - -action=Aktion -#role-selector=Role Selector -#realm-roles.tooltip=Realm roles that can be selected. - -#select-a-role=Select a role -#select-realm-role=Select realm role -#client-roles.tooltip=Client roles that can be selected. -#select-client-role=Select client role - -#client-saml-endpoint=Client SAML Endpoint -#add-client-scope=Add client scope - -#default-client-scopes=Default Client Scopes -#default-client-scopes.tooltip=Client Scopes, which will be added automatically to each created client -#default-client-scopes.default=Default Client Scopes -#default-client-scopes.default.tooltip=Allow to define client scopes, which will be added as default scopes to each created client -#default-client-scopes.default.available=Available Client Scopes -#default-client-scopes.default.available.tooltip=Client scopes, which are not yet assigned as realm default scopes or realm optional scopes -#default-client-scopes.default.assigned=Assigned Default Client Scopes -#default-client-scopes.default.assigned.tooltip=Client scopes, which will be added as default scopes to each created client -#default-client-scopes.optional=Optional Client Scopes -#default-client-scopes.optional.tooltip=Allow to define client scopes, which will be added as optional scopes to each created client -#default-client-scopes.optional.available=Available Client Scopes -#default-client-scopes.optional.available.tooltip=Client scopes, which are not yet assigned as realm default scopes or realm optional scopes -#default-client-scopes.optional.assigned=Assigned Optional Client Scopes -#default-client-scopes.optional.assigned.tooltip=Client scopes, which will be added as optional scopes to each created client - -#client-scopes.setup=Setup -#client-scopes.setup.tooltip=Allow to setup client scopes linked to this client -#client-scopes.default=Default Client Scopes -#client-scopes.default.tooltip=Default client scopes are always applied when issuing tokens for this client. Protocol mappers and role scope mappings are always applied regardless of value of used scope parameter in OIDC Authorization request -#client-scopes.default.available=Available Client Scopes -#client-scopes.default.available.tooltip=Client scopes, which are not yet assigned as default scopes or optional scopes -#client-scopes.default.assigned=Assigned Default Client Scopes -#client-scopes.default.assigned.tooltip=Client scopes, which will be used as default scopes when generating tokens for this client -#client-scopes.optional=Optional Client Scopes -#client-scopes.optional.tooltip=Optional client scopes are applied when issuing tokens for this client, however just in case when they are requested by scope parameter in OIDC Authorization request -#client-scopes.optional.available=Available Client Scopes -#client-scopes.optional.available.tooltip=Client scopes, which are not yet assigned as default scopes or optional scopes -#client-scopes.optional.assigned=Assigned Optional Client Scopes -#client-scopes.optional.assigned.tooltip=Client scopes, which may be used as optional scopes when generating tokens for this client - -#client-scopes.evaluate=Evaluate -#client-scopes.evaluate.tooltip=Allow to see all protocol mappers and role scope mappings, which will be used in the tokens issued to this client. Also allow to generate example access token based on provided scope parameter -#scope-parameter=Scope Parameter -#scope-parameter.tooltip=You can copy/paste this value of scope parameter and use it in initial OpenID Connect Authentication Request sent from this client adapter. Default client scopes and selected optional client scopes will be used when generating token issued for this client -#client-scopes.evaluate.scopes=Client Scopes -#client-scopes.evaluate.scopes.tooltip=Allow to select optional client scopes, which may be used when generating token issued for this client -#client-scopes.evaluate.scopes.available=Available Optional Client Scopes -#client-scopes.evaluate.scopes.available.tooltip=This contains Optional Client Scopes, which can be optionally used when issuing access token for this client -#client-scopes.evaluate.scopes.assigned=Selected Optional Client Scopes -#client-scopes.evaluate.scopes.assigned.tooltip=Selected Optional Client Scopes, which will be used when issuing access token for this client. You can see above what value of OAuth Scope Parameter need to be used when you want to have these optional client scopes applied when the initial OpenID Connect Authentication request will be sent from your client adapter -#client-scopes.evaluate.scopes.effective=Effective Client Scopes -#client-scopes.evaluate.scopes.effective.tooltip=Contains all default client scopes and selected optional scopes. All protocol mappers and role scope mappings of all those client scopes will be used when generating access token issued for your client -#client-scopes.evaluate.user.tooltip=Optionally select user, for whom the example access token will be generated. If you don't select any user, then example access token won't be generated during evaluation -#send-evaluation-request=Evaluate -#send-evaluation-request.tooltip=Click this to see all protocol mappers and role scope mappings, which will be used when issuing access token for this client. It will also optionally generate example access token in case that some user was selected - -#evaluated-protocol-mappers=Effective Protocol Mappers -#evaluated-protocol-mappers.tooltip=Allow you to see all effective protocol mappers, which will be used when issuing token for this client. Contains also protocol mappers of selected optional client scopes. For each protocol mapper, you can see from which client scope it is inherited from -#evaluated-roles=Effective Role Scope Mappings -#evaluated-roles.tooltip=Allow you to see all effective roles scope mappings, which will be used when issuing token for this client. Contains also role scope mappings of selected optional client scopes -#parent-client-scope=Parent Client Scope -#client-scopes.evaluate.not-granted-roles=Not Granted Roles -#client-scopes.evaluate.not-granted-roles.tooltip=Client doesn't have scope mappings for these roles. Those roles won't be in the access token issued to this client even if authenticated user is member of them -#client-scopes.evaluate.granted-realm-effective-roles=Granted Effective Realm Roles -#client-scopes.evaluate.granted-realm-effective-roles.tooltip=Client has scope mappings for these roles. Those roles will be in the access token issued to this client if authenticated user is member of them -#client-scopes.evaluate.granted-client-effective-roles=Granted Effective Client Roles -#generated-access-token=Generated Access Token -#generated-access-token.tooltip=See the example token, which will be generated and sent to the client when selected user is authenticated. You can see claims and roles, which the token will contain based on the effective protocol mappers and role scope mappings and also based on the claims/roles assigned to user himself - -manage=Verwalten -authentication=Authentifizierung -#user-federation=User Federation -#user-storage=User Storage -events=Ereignisse -realm-settings=Realm-Einstellungen -configure=Konfigurieren -select-realm=Realm ausw\u00E4hlen -add=Hinzuf\u00FCgen - -#client-storage=Client Storage -#no-client-storage-providers-configured=No client storage providers configured -#client-stores.tooltip=Keycloak can retrieve clients and their details from external stores. - -#client-scope.name.tooltip=Name of the client scope. Must be unique in the realm. Name shouldn't contain space characters as it's used as value of scope parameter -#client-scope.description.tooltip=Description of the client scope -#client-scope.protocol.tooltip=Which SSO protocol configuration is being supplied by this client scope -#client-scope.display-on-consent-screen=Display On Consent Screen -#client-scope.display-on-consent-screen.tooltip=If on, and this client scope is added to some client with consent required, then the text specified by 'Consent Screen Text' will be displayed on consent screen. If off, then this client scope won't be displayed on consent screen -#client-scope.consent-screen-text=Consent Screen Text -#client-scope.consent-screen-text.tooltip=Text, which will be shown on consent screen when this client scope is added to some client with consent required. Defaults to name of client scope if it's not filled - -#add-user-federation-provider=Add user federation provider -#add-user-storage-provider=Add user storage provider -#required-settings=Required Settings -#provider-id=Provider ID -#console-display-name=Console Display Name -#console-display-name.tooltip=Display name of provider when linked in admin console. -#priority=Priority -#priority.tooltip=Priority of provider when doing a user lookup. Lowest first. -#user-storage.enabled.tooltip=If provider is disabled it will not be considered for queries and imported users will be disabled and read-only until the provider is enabled again. -#sync-settings=Sync Settings -#periodic-full-sync=Periodic Full Sync -#periodic-full-sync.tooltip=Does periodic full synchronization of provider users to Keycloak should be enabled or not -#full-sync-period=Full Sync Period -#full-sync-period.tooltip=Period for full synchronization in seconds -#periodic-changed-users-sync=Periodic Changed Users Sync -#periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created provider users to Keycloak should be enabled or not -#changed-users-sync-period=Changed Users Sync Period -#changed-users-sync-period.tooltip=Period for synchronization of changed or newly created provider users in seconds -#synchronize-changed-users=Synchronize changed users -#synchronize-all-users=Synchronize all users -#remove-imported-users=Remove imported -unlink-users=Benutzer entsperren -#kerberos-realm=Kerberos Realm -#kerberos-realm.tooltip=Name of kerberos realm. For example FOO.ORG -#server-principal=Server Principal -#server-principal.tooltip=Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG -#keytab=KeyTab -#keytab.tooltip=Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab -#debug=Debug -#debug.tooltip=Enable/disable debug logging to standard output for Krb5LoginModule. -#allow-password-authentication=Allow Password Authentication -#allow-password-authentication.tooltip=Enable/disable possibility of username/password authentication against Kerberos database -#edit-mode=Edit Mode -#edit-mode.tooltip=READ_ONLY means that password updates are not allowed and user always authenticates with Kerberos password. UNSYNCED means user can change his password in Keycloak database and this one will be used instead of Kerberos password then -#ldap.edit-mode.tooltip=READ_ONLY is a read-only LDAP store. WRITABLE means data will be synced back to LDAP on demand. UNSYNCED means user data will be imported, but not synced back to LDAP. -#update-profile-first-login=Update Profile First Login -#update-profile-first-login.tooltip=Update profile on first login -#sync-registrations=Sync Registrations -#ldap.sync-registrations.tooltip=Should newly created users be created within LDAP store? Priority effects which provider is chose to sync the new user. -#import-enabled=Import Users -#ldap.import-enabled.tooltip=If true, LDAP users will be imported into Keycloak DB and synced via the configured sync policies. -#vendor=Vendor -#ldap.vendor.tooltip=LDAP vendor (provider) -#username-ldap-attribute=Username LDAP attribute -#ldap-attribute-name-for-username=LDAP attribute name for username -#username-ldap-attribute.tooltip=Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'. For Active directory it can be 'sAMAccountName' or 'cn'. The attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak. -#rdn-ldap-attribute=RDN LDAP attribute -#ldap-attribute-name-for-user-rdn=LDAP attribute name for user RDN -#rdn-ldap-attribute.tooltip=Name of LDAP attribute, which is used as RDN (top attribute) of typical user DN. Usually it's the same as Username LDAP attribute, however it's not required. For example for Active directory it's common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'. -#uuid-ldap-attribute=UUID LDAP attribute -#ldap-attribute-name-for-uuid=LDAP attribute name for UUID -#uuid-ldap-attribute.tooltip=Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors it's 'entryUUID' however some are different. For example for Active directory it should be 'objectGUID'. If your LDAP server really doesn't support the notion of UUID, you can use any other attribute, which is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN'. -#user-object-classes=User Object Classes -#ldap-user-object-classes.placeholder=LDAP User Object Classes (div. by comma) -#ldap-connection-url=LDAP connection URL -#ldap-users-dn=LDAP Users DN -#ldap-bind-dn=LDAP Bind DN -#ldap-bind-credentials=LDAP Bind Credentials -#ldap-filter=LDAP Filter -#ldap.user-object-classes.tooltip=All values of LDAP objectClass attribute for users in LDAP divided by comma. For example: 'inetOrgPerson, organizationalPerson' . Newly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes. -#connection-url=Connection URL -#ldap.connection-url.tooltip=Connection URL to your LDAP server -#test-connection=Test connection -#users-dn=Users DN -#ldap.users-dn.tooltip=Full DN of LDAP tree where your users are. This DN is parent of LDAP users. It could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com' -#authentication-type=Authentication Type -#ldap.authentication-type.tooltip=LDAP Authentication type. Right now just 'none' (anonymous LDAP authentication) or 'simple' (Bind credential + Bind password authentication) mechanisms are available -#bind-dn=Bind DN -#ldap.bind-dn.tooltip=DN of LDAP admin, which will be used by Keycloak to access LDAP server -#bind-credential=Bind Credential -#ldap.bind-credential.tooltip=Password of LDAP admin -#test-authentication=Test authentication -#custom-user-ldap-filter=Custom User LDAP Filter -#ldap.custom-user-ldap-filter.tooltip=Additional LDAP Filter for filtering searched users. Leave this empty if you don't need additional filter. Make sure that it starts with '(' and ends with ')' -#search-scope=Search Scope -#ldap.search-scope.tooltip=For one level, we search for users just in DNs specified by User DNs. For subtree, we search in whole of their subtree. See LDAP documentation for more details -#use-truststore-spi=Use Truststore SPI -#ldap.use-truststore-spi.tooltip=Specifies whether LDAP connection will use the truststore SPI with the truststore configured in standalone.xml/domain.xml. 'Always' means that it will always use it. 'Never' means that it won't use it. 'Only for ldaps' means that it will use if your connection URL use ldaps. Note even if standalone.xml/domain.xml is not configured, the default Java cacerts or certificate specified by 'javax.net.ssl.trustStore' property will be used. -#validate-password-policy=Validate Password Policy -#connection-pooling=Connection Pooling -#connection-pooling-settings=Connection Pooling Settings -#connection-pooling-authentication=Connection Pooling Authentication -#connection-pooling-authentication-default=none simple -#connection-pooling-debug=Connection Pool Debug Level -#connection-pooling-debug-default=off -#connection-pooling-initsize=Connection Pool Initial Size -#connection-pooling-initsize-default=1 -#connection-pooling-maxsize=Connection Pool Maximum Size -#connection-pooling-maxsize-default=1000 -#connection-pooling-prefsize=Connection Pool Preferred Size -#connection-pooling-prefsize-default=5 -#connection-pooling-protocol=Connection Pool Protocol -#connection-pooling-protocol-default=plain ssl -#connection-pooling-timeout=Connection Pool Timeout -#connection-pooling-timeout-default=300000 -#ldap-connection-timeout=Connection Timeout -#ldap.connection-timeout.tooltip=LDAP Connection Timeout in milliseconds -#ldap-read-timeout=Read Timeout -#ldap.read-timeout.tooltip=LDAP Read Timeout in milliseconds. This timeout applies for LDAP read operations -#ldap.validate-password-policy.tooltip=Does Keycloak should validate the password with the realm password policy before updating it -#ldap.connection-pooling.tooltip=Does Keycloak should use connection pooling for accessing LDAP server -#ldap.connection-pooling.authentication.tooltip=A list of space-separated authentication types of connections that may be pooled. Valid types are "none", "simple", and "DIGEST-MD5". -#ldap.connection-pooling.debug.tooltip=A string that indicates the level of debug output to produce. Valid values are "fine" (trace connection creation and removal) and "all" (all debugging information). -#ldap.connection-pooling.initsize.tooltip=The string representation of an integer that represents the number of connections per connection identity to create when initially creating a connection for the identity. -#ldap.connection-pooling.maxsize.tooltip=The string representation of an integer that represents the maximum number of connections per connection identity that can be maintained concurrently. -#ldap.connection-pooling.prefsize.tooltip=The string representation of an integer that represents the preferred number of connections per connection identity that should be maintained concurrently. -#ldap.connection-pooling.protocol.tooltip=A list of space-separated protocol types of connections that may be pooled. Valid types are "plain" and "ssl". -#ldap.connection-pooling.timeout.tooltip=The string representation of an integer that represents the number of milliseconds that an idle connection may remain in the pool without being closed and removed from the pool. -#ldap.pagination.tooltip=Does the LDAP server support pagination. -#kerberos-integration=Kerberos Integration -#allow-kerberos-authentication=Allow Kerberos authentication -#ldap.allow-kerberos-authentication.tooltip=Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server -#use-kerberos-for-password-authentication=Use Kerberos For Password Authentication -#ldap.use-kerberos-for-password-authentication.tooltip=Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API -#batch-size=Batch Size -#ldap.batch-size.tooltip=Count of LDAP users to be imported from LDAP to Keycloak within single transaction. -#ldap.periodic-full-sync.tooltip=Does periodic full synchronization of LDAP users to Keycloak should be enabled or not -#ldap.periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not -#ldap.changed-users-sync-period.tooltip=Period for synchronization of changed or newly created LDAP users in seconds -#user-federation-mappers=User Federation Mappers -#create-user-federation-mapper=Create user federation mapper -#add-user-federation-mapper=Add user federation mapper -#provider-name=Provider Name -#no-user-federation-providers-configured=No user federation providers configured -#no-user-storage-providers-configured=No user storage providers configured -#add-identity-provider=Add identity provider -#add-identity-provider-link=Add identity provider link -#identity-provider=Identity Provider -#identity-provider-user-id=Identity Provider User ID -#identity-provider-user-id.tooltip=Unique ID of the user on the Identity Provider side -#identity-provider-username=Identity Provider Username -#identity-provider-username.tooltip=Username on the Identity Provider side -#pagination=Pagination -#browser-flow=Browser Flow -#browser-flow.tooltip=Select the flow you want to use for browser authentication. -#registration-flow=Registration Flow -#registration-flow.tooltip=Select the flow you want to use for registration. -#direct-grant-flow=Direct Grant Flow -#direct-grant-flow.tooltip=Select the flow you want to use for direct grant authentication. -#reset-credentials=Reset Credentials -#reset-credentials.tooltip=Select the flow you want to use when the user has forgotten their credentials. -#client-authentication=Client Authentication -#client-authentication.tooltip=Select the flow you want to use for authentication of clients. -#docker-auth=Docker Authentication -#docker-auth.tooltip=Select the flow you want to use for authentication against a docker client. -new=Neu -copy=Kopieren -#add-execution=Add execution -#add-flow=Add flow -#auth-type=Auth Type -#requirement=Requirement -#config=Config -#no-executions-available=No executions available -#authentication-flows=Authentication Flows -#create-authenticator-config=Create authenticator config -#authenticator.alias.tooltip=Name of the configuration -#otp-type=OTP Type -#time-based=Time Based -#counter-based=Counter Based -#otp-type.tooltip=totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against. -#otp-hash-algorithm=OTP Hash Algorithm -#otp-hash-algorithm.tooltip=What hashing algorithm should be used to generate the OTP. -#number-of-digits=Number of Digits -#otp.number-of-digits.tooltip=How many digits should the OTP have? -#look-ahead-window=Look Ahead Window -#otp.look-ahead-window.tooltip=How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? -#initial-counter=Initial Counter -#otp.initial-counter.tooltip=What should the initial counter value be? -#otp-token-period=OTP Token Period -#otp-token-period.tooltip=How many seconds should an OTP token be valid? Defaults to 30 seconds. -#otp-supported-applications=Supported Applications -#otp-supported-applications.tooltip=Applications that are known to work with the current OTP policy -#table-of-password-policies=Table of Password Policies -#add-policy.placeholder=Add policy... -#policy-type=Policy Type -#policy-value=Policy Value -#admin-events=Admin Events -#admin-events.tooltip=Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config. -#login-events=Login Events -#filter=Filter -#update=Update -#reset=Reset -#operation-types=Operation Types -#resource-types=Resource Types -#select-operations.placeholder=Select operations... -#select-resource-types.placeholder=Select resource types... -#resource-path=Resource Path -#resource-path.tooltip=Filter by resource path. Supports wildcard '*' (for example 'users/*'). -#date-(from)=Date (From) -#date-(to)=Date (To) -#authentication-details=Authentication Details -ip-address=IP-Adresse -time=Zeit -#operation-type=Operation Type -#resource-type=Resource Type -#auth=Auth -#representation=Representation -register=Registrieren -#required-action=Required Action -#default-action=Default Action -#auth.default-action.tooltip=If enabled, any new user will have this required action assigned to it. -#no-required-actions-configured=No required actions configured -#defaults-to-id=Defaults to id -#flows=Flows -#bindings=Bindings -#client-flow-bindings=Authentication Flow Overrides -#client-flow-bindings.tooltip=Override realm authentication flow bindings. -#required-actions=Required Actions -#password-policy=Password Policy -#otp-policy=OTP Policy -user-groups=Benutzergruppen -default-groups=Standardgruppen -#groups.default-groups.tooltip=Set of groups that new users will automatically join. -cut=Ausschneiden -paste=Einf\u00FCgen -create-group=Gruppe erstellen -#create-authenticator-execution=Create Authenticator Execution -#create-form-action-execution=Create Form Action Execution -#create-top-level-form=Create Top Level Form -#flow.alias.tooltip=Specifies display name for the flow. -#top-level-flow-type=Top Level Flow Type -#flow.generic=generic -#flow.client=client -#top-level-flow-type.tooltip=What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else -#create-execution-flow=Create Execution Flow -#flow-type=Flow Type -#flow.form.type=form -#flow.generic.type=generic -#flow-type.tooltip=What kind of form is it -#form-provider=Form Provider -#default-groups.tooltip=Newly created or registered users will automatically be added to these groups -select-a-type.placeholder=Typ ausw\u00E4hlen -available-groups=Verf\u00FCgbare Gruppen -#available-groups.tooltip=Select a group you want to add as a default. -value=Wert -#table-of-group-members=Table of group members -#table-of-role-members=Table of role members -last-name=Nachname -first-name=Vorname -email=Email -toggle-navigation=Navigation ein-/ausschalten -manage-account=Konto verwalten -sign-out=Abmelden -server-info=Server-Info -#resource-not-found=Resource not found... -#resource-not-found.instruction=We could not find the resource you are looking for. Please make sure the URL you entered is correct. -#go-to-the-home-page=Go to the home page » -#page-not-found=Page not found... -#page-not-found.instruction=We could not find the page you are looking for. Please make sure the URL you entered is correct. -#events.tooltip=Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config. -#select-event-types.placeholder=Select event types... -#events-config.tooltip=Displays configuration options to enable persistence of user and admin events. -select-an-action.placeholder=Aktion w\u00E4hlen... -#event-listeners.tooltip=Configure what listeners receive events for the realm. -#login.save-events.tooltip=If enabled login events are saved to the database which makes events available to the admin and account management consoles. -#clear-events.tooltip=Deletes all events in the database. -#events.expiration.tooltip=Sets the expiration for events. Expired events are periodically deleted from the database. -#admin-events-settings=Admin Events Settings -#save-events=Save Events -#admin.save-events.tooltip=If enabled admin events are saved to the database which makes events available to the admin console. -#saved-types.tooltip=Configure what event types are saved. -#include-representation=Include Representation -#include-representation.tooltip=Include JSON representation for create and update requests. -#clear-admin-events.tooltip=Deletes all admin events in the database. -#server-version=Server Version -#server-profile=Server Profile -#server-disabled=Server Disabled Features -#info=Info -#providers=Providers -#server-time=Server Time -#server-uptime=Server Uptime -#memory=Memory -#total-memory=Total Memory -#free-memory=Free Memory -#used-memory=Used Memory -#system=System -#current-working-directory=Current Working Directory -#java-version=Java Version -#java-vendor=Java Vendor -#java-runtime=Java Runtime -#java-vm=Java VM -#java-vm-version=Java VM Version -#java-home=Java Home -#user-name=User Name -#user-timezone=User Timezone -#user-locale=User Locale -#system-encoding=System Encoding -#operating-system=Operating System -#os-architecture=OS Architecture -#spi=SPI -granted-client-scopes=Gew\u00E4hrte Client-Scopes -additional-grants=Zus\u00E4tzliche Befugnisse -consent-created-date=Erstellt -consent-last-updated-date=Zuletzt aktualisiert -revoke=Widerrufen -new-password=Neues Passwort -password-confirmation=Passwort best\u00E4tigen -reset-password=Passwort zur\u00FCcksetzen -credentials.temporary.tooltip=Wenn eingeschaltet, ist der Benutzer beim n\u00E4chsten Login aufgefordert, dass Passwort zu \u00E4ndern. -#remove-totp=Remove OTP -#credentials.remove-totp.tooltip=Remove one time password generator for user. -reset-actions=Zur\u00FCcksetz-Aktionen -credentials.reset-actions.tooltip=Liste von Aktionen, die der Benutzer ausf\u00FChren soll, wenn er eine E-Mail zum Zur\u00FCcksetzen des Passworts erh\u00E4lt. 'Verify email' sendet bem Benutzer eine E-Mail um seine E-Mail-Adresse zu verifizieren. 'Update profile' verlangt vom Benutzer, dass er seine Profil-Informationen eingibt. 'Update password' verlangt vom Benutzer, dass er ein neues Passwort definiert. 'Configure OTP' verlangt vom Benutzer, dass er einen mobilen Passwort-Generator aufsetzt. -reset-actions-email=E-Mail zum Zur\u00FCcksetzen des Passworts senden -send-email=E-Mail senden -credentials.reset-actions-email.tooltip=Sendet eine E-Mail an den Benutzer mit einem eingebetteten Link. Wenn der Benutzer auf den Link klickt, kann er die Zur\u00FCcksetz-Aktion auszuf\u00FChren. Vorher muss sich der Benutzer nicht einloggen. Z.B. kann die Aktion 'update password' ausgew\u00E4hlt werden und dieser Button geklickt werden. Der Benutzer kann dann sein Passwort \u00E4ndern, ohne sich einzuloggen. -add-user=Benutzer hinzuf\u00FCgen -created-at=Erstellt am -user-enabled=Benutzer aktiv -user-enabled.tooltip=Ein deaktivierter Benutzer kann sich nicht einloggen -user-temporarily-locked=Benutzer tempor\u00E4r gesperrt -user-temporarily-locked.tooltip=Der Benutzer wurde vor\u00FCbergehend wegen zuvieler ung\u00FCltiger Loginversuche gesperrt. -unlock-user=Benutzer entsperren -#federation-link=Federation Link -email-verified=E-Mail verifiziert -email-verified.tooltip=Wurde die E-Mail des Benutzers verifiziert? -required-user-actions=Verlangte Benutzeraktionen -required-user-actions.tooltip=Verlangt eine Aktion wenn sich der Benutzer einloggt. 'E-Mail Verifizieren' sendet eine E-Mail an den Benutzer, um die G\u00FCltigkeit seiner E-Mailadresse zu pr\u00FCfen. 'Profil aktualisieren' verlangt, dass Benutzer ihre pers\u00F6nlichen Angaben eingeben. 'Passwort aktualisieren' zwingt Benutzer ein neues Passwort zu setzen. 'OTP konfigurieren' zwingt Benutzer einen mobilen Passwort-Generator einzurichten (i.e. Google Authenticator) -locale=Locale -#select-one.placeholder=Select one... -#impersonate=Impersonate -#impersonate-user=Impersonate user -#impersonate-user.tooltip=Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user. -#identity-provider-alias=Identity Provider Alias -#provider-user-id=Provider User ID -#provider-username=Provider Username -#no-identity-provider-links-available=No identity provider links available -group-membership=Gruppen-Mitglied -leave=Verlassen -#group-membership.tooltip=Groups user is a member of. Select a listed group and click the Leave button to leave the group. -#membership.available-groups.tooltip=Groups a user can join. Select a group and click the join button. -#table-of-realm-users=Table of Realm Users -view-all-users=Zeige alle Benutzer -view-all-groups=Zeige alle Rollen -unlock-users=Benutzer entsperren -no-users-available=Keine Benutzer verf\u00FCgbar -#users.instruction=Please enter a search, or click on view all users -consents=Einwilligungen -started=Gestartet -logout-all-sessions=Alle Sessions ausloggen -logout=Ausloggen -new-name=Neuer Name -ok=Ok -attributes=Attribute -role-mappings=Rollenzuweisungen -members=Mitglieder -details=Details -#identity-provider-links=Identity Provider Links -#register-required-action=Register required action -gender=Geschlecht -address=Adresse -phone=Telefon -#profile-url=Profile URL -#picture-url=Picture URL -#website=Website -#import-keys-and-cert=Import keys and cert -#import-keys-and-cert.tooltip=Upload the client's key pair and cert. -#upload-keys=Upload Keys -#download-keys-and-cert=Download keys and cert -#no-value-assigned.placeholder=No value assigned -remove=Entfernen -#no-group-members=No group members -#no-role-members=No role members -temporary=Tempor\u00E4r -join=Beitreten -#event-type=Event Type -#events-config=Events Config -#event-listeners=Event Listeners -#login-events-settings=Login Events Settings -#clear-events=Clear events -#saved-types=Saved Types -#clear-admin-events=Clear admin events -#clear-changes=Clear changes -#error=Error -# Authz -# Authz Common -#authz-authorization=Authorization -#authz-owner=Owner -#authz-uri=URI -#authz-uris=URIS -#authz-scopes=Scopes -#authz-resource=Resource -#authz-resource-type=Resource Type -#authz-resources=Resources -#authz-scope=Scope -#authz-authz-scopes=Authorization Scopes -#authz-policies=Policies -#authz-policy=Policy -#authz-permissions=Permissions -#authz-users=Users in Role -#authz-evaluate=Evaluate -#authz-icon-uri=Icon URI -#authz-icon-uri.tooltip=An URI pointing to an icon. -#authz-select-scope=Select a scope -#authz-select-resource=Select a resource -#authz-associated-policies=Associated Policies -#authz-any-resource=Any resource -#authz-any-scope=Any scope -#authz-any-role=Any role -#authz-policy-evaluation=Policy Evaluation -#authz-select-client=Select a client -#authz-select-user=Select a user -#authz-entitlements=Entitlements -#authz-no-resources=No resources -#authz-result=Result -#authz-authorization-services-enabled=Authorization Enabled -#authz-authorization-services-enabled.tooltip=Enable/Disable fine-grained authorization support for a client -#authz-required=Required -#authz-show-details=Show Details -#authz-hide-details=Hide Details -#authz-associated-permissions=Associated Permissions -#authz-no-permission-associated=No permissions associated -# Authz Settings -#authz-import-config.tooltip=Import a JSON file containing authorization settings for this resource server. -#authz-policy-enforcement-mode=Policy Enforcement Mode -#authz-policy-enforcement-mode.tooltip=The policy enforcement mode dictates how policies are enforced when evaluating authorization requests. 'Enforcing' means requests are denied by default even when there is no policy associated with a given resource. 'Permissive' means requests are allowed even when there is no policy associated with a given resource. 'Disabled' completely disables the evaluation of policies and allows access to any resource. -#authz-policy-enforcement-mode-enforcing=Enforcing -#authz-policy-enforcement-mode-permissive=Permissive -#authz-policy-enforcement-mode-disabled=Disabled -#authz-remote-resource-management=Remote Resource Management -#authz-remote-resource-management.tooltip=Should resources be managed remotely by the resource server? If false, resources can be managed only from this admin console. -#authz-export-settings=Export Settings -#authz-export-settings.tooltip=Export and download all authorization settings for this resource server. -# Authz Resource List -#authz-no-resources-available=No resources available. -#authz-no-scopes-assigned=No scopes assigned. -#authz-no-type-defined=No type defined. -#authz-no-uri-defined=No URI defined. -#authz-no-permission-assigned=No permission assigned. -#authz-no-policy-assigned=No policy assigned. -#authz-create-permission=Create Permission -# Authz Resource Detail -#authz-add-resource=Add Resource -#authz-resource-name.tooltip=A unique name for this resource. The name can be used to uniquely identify a resource, useful when querying for a specific resource. -#authz-resource-owner.tooltip=The owner of this resource. -#authz-resource-type.tooltip=The type of this resource. It can be used to group different resource instances with the same type. -#authz-resource-uri.tooltip=Set of URIs which are protected by resource. -#authz-resource-scopes.tooltip=The scopes associated with this resource. -#authz-resource-attributes=Resource Attributes -#authz-resource-attributes.tooltip=The attributes associated wth the resource. -#authz-resource-user-managed-access-enabled=User-Managed Access Enabled -#authz-resource-user-managed-access-enabled.tooltip=If enabled this access to this resource can be managed by the resource owner. - -# Authz Scope List -#authz-add-scope=Add Scope -#authz-no-scopes-available=No scopes available. -# Authz Scope Detail -#authz-scope-name.tooltip=A unique name for this scope. The name can be used to uniquely identify a scope, useful when querying for a specific scope. -# Authz Policy List -#authz-all-types=All types -#authz-create-policy=Create Policy -#authz-no-policies-available=No policies available. -# Authz Policy Detail -#authz-policy-name.tooltip=The name of this policy. -#authz-policy-description.tooltip=A description for this policy. -#authz-policy-logic=Logic -#authz-policy-logic-positive=Positive -#authz-policy-logic-negative=Negative -#authz-policy-logic.tooltip=The logic dictates how the policy decision should be made. If 'Positive', the resulting effect (permit or deny) obtained during the evaluation of this policy will be used to perform a decision. If 'Negative', the resulting effect will be negated, in other words, a permit becomes a deny and vice-versa. -#authz-policy-apply-policy=Apply Policy -#authz-policy-apply-policy.tooltip=Specifies all the policies that must be applied to the scopes defined by this policy or permission. -#authz-policy-decision-strategy=Decision Strategy -#authz-policy-decision-strategy.tooltip=The decision strategy dictates how the policies associated with a given permission are evaluated and how a final decision is obtained. 'Affirmative' means that at least one policy must evaluate to a positive decision in order for the final decision to be also positive. 'Unanimous' means that all policies must evaluate to a positive decision in order for the final decision to be also positive. 'Consensus' means that the number of positive decisions must be greater than the number of negative decisions. If the number of positive and negative is the same, the final decision will be negative. -#authz-policy-decision-strategy-affirmative=Affirmative -#authz-policy-decision-strategy-unanimous=Unanimous -#authz-policy-decision-strategy-consensus=Consensus -#authz-select-a-policy=Select existing policy -#authz-no-policies-assigned=No policies assigned. -# Authz Role Policy Detail -#authz-add-role-policy=Add Role Policy -#authz-no-roles-assigned=No roles assigned. -#authz-policy-role-realm-roles.tooltip=Specifies the *realm* roles allowed by this policy. -#authz-policy-role-clients.tooltip=Selects a client in order to filter the client roles that can be applied to this policy. -#authz-policy-role-client-roles.tooltip=Specifies the client roles allowed by this policy. -# Authz User Policy Detail -#authz-add-user-policy=Add User Policy -#authz-no-users-assigned=No users assigned. -#authz-policy-user-users.tooltip=Specifies which user(s) are allowed by this policy. -# Authz Client Policy Detail -#authz-add-client-policy=Add Client Policy -#authz-no-clients-assigned=No clients assigned. -#authz-policy-client-clients.tooltip=Specifies which client(s) are allowed by this policy. -# Authz Time Policy Detail -#authz-add-time-policy=Add Time Policy -#authz-policy-time-not-before.tooltip=Defines the time before which the policy MUST NOT be granted. Only granted if current date/time is after or equal to this value. -#authz-policy-time-not-on-after=Not On or After -#authz-policy-time-not-on-after.tooltip=Defines the time after which the policy MUST NOT be granted. Only granted if current date/time is before or equal to this value. -#authz-policy-time-day-month=Day of Month -#authz-policy-time-day-month.tooltip=Defines the day of month which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current day of month is between or equal to the two values you provided. -#authz-policy-time-month=Month -#authz-policy-time-month.tooltip=Defines the month which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current month is between or equal to the two values you provided. -#authz-policy-time-year=Year -#authz-policy-time-year.tooltip=Defines the year which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current year is between or equal to the two values you provided. -#authz-policy-time-hour=Hour -#authz-policy-time-hour.tooltip=Defines the hour which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current hour is between or equal to the two values you provided. -#authz-policy-time-minute=Minute -#authz-policy-time-minute.tooltip=Defines the minute which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current minute is between or equal to the two values you provided. -# Authz Drools Policy Detail -#authz-add-drools-policy=Add Rules Policy -#authz-policy-drools-maven-artifact-resolve=Resolve -#authz-policy-drools-maven-artifact=Policy Maven Artifact -#authz-policy-drools-maven-artifact.tooltip=A Maven GAV pointing to an artifact from where the rules would be loaded from. Once you have provided the GAV, you can click *Resolve* to load both *Module* and *Session* fields. -#authz-policy-drools-module=Module -#authz-policy-drools-module.tooltip=The module used by this policy. You must provide a module in order to select a specific session from where rules will be loaded from. -#authz-policy-drools-session=Session -#authz-policy-drools-session.tooltip=The session used by this policy. The session provides all the rules to evaluate when processing the policy. -#authz-policy-drools-update-period=Update Period -#authz-policy-drools-update-period.tooltip=Specifies an interval for scanning for artifact updates. -# Authz JS Policy Detail -#authz-add-js-policy=Add JavaScript Policy -#authz-policy-js-code=Code -#authz-policy-js-code.tooltip=The JavaScript code providing the conditions for this policy. -# Authz Aggregated Policy Detail -#authz-aggregated=Aggregated -#authz-add-aggregated-policy=Add Aggregated Policy -# Authz Group Policy Detail -#authz-add-group-policy=Add Group Policy -#authz-no-groups-assigned=No groups assigned. -#authz-policy-group-claim=Groups Claim -#authz-policy-group-claim.tooltip=If defined, the policy will fetch user's groups from the given claim within an access token or ID token representing the identity asking permissions. If not defined, user's groups are obtained from your realm configuration. -#authz-policy-group-groups.tooltip=Specifies the groups allowed by this policy. - -# Authz Permission List -#authz-no-permissions-available=No permissions available. - -# Authz Permission Detail -#authz-permission-name.tooltip=The name of this permission. -#authz-permission-description.tooltip=A description for this permission. - -# Authz Resource Permission Detail -#authz-add-resource-permission=Add Resource Permission -#authz-permission-resource-apply-to-resource-type=Apply to Resource Type -#authz-permission-resource-apply-to-resource-type.tooltip=Specifies if this permission would be applied to all resources with a given type. In this case, this permission will be evaluated for all instances of a given resource type. -#authz-permission-resource-resource.tooltip=Specifies that this permission must be applied to a specific resource instance. -#authz-permission-resource-type.tooltip=Specifies that this permission must be applied to all resources instances of a given type. - -# Authz Scope Permission Detail -#authz-add-scope-permission=Add Scope Permission -#authz-permission-scope-resource.tooltip=Restrict the scopes to those associated with the selected resource. If not selected all scopes would be available. -#authz-permission-scope-scope.tooltip=Specifies that this permission must be applied to one or more scopes. - -# Authz Evaluation -#authz-evaluation-identity-information=Identity Information -#authz-evaluation-identity-information.tooltip=The available options to configure the identity information that will be used when evaluating policies. -#authz-evaluation-client.tooltip=Select the client making this authorization request. If not provided, authorization requests would be done based on the client you are in. -#authz-evaluation-user.tooltip=Select a user whose identity is going to be used to query permissions from the server. -#authz-evaluation-role.tooltip=Select the roles you want to associate with the selected user. -#authz-evaluation-new=New Evaluation -#authz-evaluation-re-evaluate=Re-Evaluate -#authz-evaluation-previous=Previous Evaluation -#authz-evaluation-contextual-info=Contextual Information -#authz-evaluation-contextual-info.tooltip=The available options to configure any contextual information that will be used when evaluating policies. -#authz-evaluation-contextual-attributes=Contextual Attributes -#authz-evaluation-contextual-attributes.tooltip=Any attribute provided by a running environment or execution context. -#authz-evaluation-permissions.tooltip=The available options to configure the permissions to which policies will be applied. -#authz-evaluation-evaluate=Evaluate -#authz-evaluation-any-resource-with-scopes=Any resource with scope(s) -#authz-evaluation-no-result=Could not obtain any result for the given authorization request. Check if the provided resource(s) or scope(s) are associated with any policy. -#authz-evaluation-no-policies-resource=No policies were found for this resource. -#authz-evaluation-result.tooltip=The overall result for this permission request. -#authz-evaluation-scopes.tooltip=The list of allowed scopes. -#authz-evaluation-policies.tooltip=Details about which policies were evaluated and their decisions. -#authz-evaluation-authorization-data=Response -#authz-evaluation-authorization-data.tooltip=Represents a token carrying authorization data as a result of the processing of an authorization request. This representation is basically what Keycloak issues to clients asking for permissions. Check the 'authorization' claim for the permissions that were granted based on the current authorization request. -#authz-show-authorization-data=Show Authorization Data - -keys=Keys -status=Status -#keystore=Keystore -#keystores=Keystores -#add-keystore=Add Keystore -#add-keystore.placeholder=Add keystore... -#view=View -active=Aktiv -#passive=Passive -#disabled=Disabled -#algorithms=Algorithms -#providerHelpText=Provider description - -Sunday=Sonntag -Monday=Montag -Tuesday=Dienstag -Wednesday=Mittwoch -Thursday=Donnerstag -Friday=Freitag -Saturday=Samstag - -#user-storage-cache-policy=Cache Settings -#userStorage.cachePolicy=Cache Policy -#userStorage.cachePolicy.option.DEFAULT=DEFAULT -#userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -#userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -#userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -#userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -#userStorage.cachePolicy.tooltip=Cache Policy for this storage provider. 'DEFAULT' is whatever the default settings are for the global cache. 'EVICT_DAILY' is a time of day every day that the cache will be invalidated. 'EVICT_WEEKLY' is a day of the week and time the cache will be invalidated. 'MAX-LIFESPAN' is the time in milliseconds that will be the lifespan of a cache entry. -#userStorage.cachePolicy.evictionDay=Eviction Day -#userStorage.cachePolicy.evictionDay.tooltip=Day of the week the entry will become invalid on -#userStorage.cachePolicy.evictionHour=Eviction Hour -#userStorage.cachePolicy.evictionHour.tooltip=Hour of day the entry will become invalid on. -#userStorage.cachePolicy.evictionMinute=Eviction Minute -#userStorage.cachePolicy.evictionMinute.tooltip=Minute of day the entry will become invalid on. -#userStorage.cachePolicy.maxLifespan=Max Lifespan -#userStorage.cachePolicy.maxLifespan.tooltip=Max lifespan of cache entry in milliseconds. -#user-origin-link=Storage Origin -#user-origin.tooltip=UserStorageProvider the user was loaded from -#user-link.tooltip=UserStorageProvider this locally stored user was imported from. -#client-origin-link=Storage Origin -#client-origin.tooltip=Provider the client was loaded from - -#client-storage-cache-policy=Cache Settings -#clientStorage.cachePolicy=Cache Policy -#clientStorage.cachePolicy.option.DEFAULT=DEFAULT -#clientStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -#clientStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -#clientStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -#clientStorage.cachePolicy.option.NO_CACHE=NO_CACHE -#clientStorage.cachePolicy.tooltip=Cache Policy for this storage provider. 'DEFAULT' is whatever the default settings are for the global cache. 'EVICT_DAILY' is a time of day every day that the cache will be invalidated. 'EVICT_WEEKLY' is a day of the week and time the cache will be invalidated. 'MAX-LIFESPAN' is the time in milliseconds that will be the lifespan of a cache entry. -#clientStorage.cachePolicy.evictionDay=Eviction Day -#clientStorage.cachePolicy.evictionDay.tooltip=Day of the week the entry will become invalid on -#clientStorage.cachePolicy.evictionHour=Eviction Hour -#clientStorage.cachePolicy.evictionHour.tooltip=Hour of day the entry will become invalid on. -#clientStorage.cachePolicy.evictionMinute=Eviction Minute -#clientStorage.cachePolicy.evictionMinute.tooltip=Minute of day the entry will become invalid on. -#clientStorage.cachePolicy.maxLifespan=Max Lifespan -#clientStorage.cachePolicy.maxLifespan.tooltip=Max lifespan of cache entry in milliseconds. - -#client-storage-list-no-entries=Keycloak can federate external client databases. Out of the box we have support for Openshift OAuth clients and service accounts. To get started select a provider from the dropdown below: - - -disable=Deaktivieren -disableable-credential-types=Deaktivierbare Typen -credentials.disableable.tooltip=Liste von Zugangstypen, die deaktiviert werden k\u00F6nnen. -disable-credential-types=Zugangstypen deaktivieren -credentials.disable.tooltip=Dr\u00FCcken Sie den Button, um die ausgew\u00E4hlten Zugangstypen zu sperren. -credential-types=Zugangstypen -manage-user-password=Zugang verwalten -disable-credentials=Zugang deaktivieren -credential-reset-actions=Zugang zur\u00FCcksetzen -credential-reset-actions-timeout=L\u00E4uft ab in -credential-reset-actions-timeout.tooltip=Maximale Zeit in der die Aktion zugelassen ist. -#ldap-mappers=LDAP Mappers -#create-ldap-mapper=Create LDAP mapper -#map-role-mgmt-scope-description=Policies that decide if an admin can map this role to a user or group -#manage-authz-users-scope-description=Policies that decide if an admin can manage all users in the realm -#view-authz-users-scope-description=Policies that decide if an admin can view all users in realm -permissions-enabled-role=Berechtigungen aktiv -permissions-enabled-role.tooltip=Legt fest, ob feingranulare Berechtigungen f\u00FCr diese Rolle aktiv sein sollen. Wird diese Option deaktiviert, werden alle aktuell aufgesetzten Berechtigungen gel\u00F6scht. -manage-permissions-role.tooltip=Feingranulare Berechtigungen f\u00FCr Rollen. Zum Beispiel k\u00F6nnen Berechtigungen eingerichtet werden, die festlegen, wer berechtigt, ist eine Rolle zuzuweisen. -lookup=Suche -manage-permissions-users.tooltip=Feingranulare Berechtigungen f\u00FCr alle Benutzer in diesem Realm. Es k\u00F6nnen verschiedene Einstellungen definiert werden, wer in diesem Realm berechtigt ist, Benutzer zu verwalten. -permissions-enabled-users=Berechtigungen aktiv -permissions-enabled-users.tooltip=Legt fest, ob feingranulare Berechtigungen f\u00FCr Benutzer aktiv sein sollen. Wird diese Option deaktiviert, werden alle aktuell aufgesetzten Berechtigungen gel\u00F6scht. -#manage-permissions-client.tooltip=Fine grain permissions for admins that want to manage this client or apply roles defined by this client. -#manage-permissions-group.tooltip=Fine grain permissions for admins that want to manage this group or the members of this group. -#manage-authz-group-scope-description=Policies that decide if an admin can manage this group -#view-authz-group-scope-description=Policies that decide if an admin can view this group -#view-members-authz-group-scope-description=Policies that decide if an admin can view the members of this group -#token-exchange-authz-client-scope-description=Policies that decide which clients are allowed exchange tokens for a token that is targeted to this client. -#token-exchange-authz-idp-scope-description=Policies that decide which clients are allowed exchange tokens for an external token minted by this identity provider. -#manage-authz-client-scope-description=Policies that decide if an admin can manage this client -#configure-authz-client-scope-description=Reduced management permissions for admin. Cannot set scope, template, or protocol mappers. -#view-authz-client-scope-description=Policies that decide if an admin can view this client -#map-roles-authz-client-scope-description=Policies that decide if an admin can map roles defined by this client -#map-roles-client-scope-authz-client-scope-description=Policies that decide if an admin can apply roles defined by this client to the client scope of another client -#map-roles-composite-authz-client-scope-description=Policies that decide if an admin can apply roles defined by this client as a composite to another role -#map-role-authz-role-scope-description=Policies that decide if an admin can map this role to a user or group -#map-role-client-scope-authz-role-scope-description=Policies that decide if an admin can apply this role to the client scope of a client -#map-role-composite-authz-role-scope-description=Policies that decide if an admin can apply this role as a composite to another role -#manage-group-membership-authz-users-scope-description=Policies that decide if an admin can manage group membership for all users in the realm. This is used in conjunction with specific group policy -#impersonate-authz-users-scope-description=Policies that decide if admin can impersonate other users -#map-roles-authz-users-scope-description=Policies that decide if admin can map roles for all users -#user-impersonated-authz-users-scope-description=Policies that decide which users can be impersonated. These policies are applied to the user being impersonated. -#manage-membership-authz-group-scope-description=Policies that decide if an admin can add or remove users from this group -#manage-members-authz-group-scope-description=Policies that decide if an admin can manage the members of this group - -# KEYCLOAK-6771 Certificate Bound Token -# https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3 -#advanced-client-settings=Advanced Settings -#advanced-client-settings.tooltip=Expand this section to configure advanced settings of this client -#tls-client-certificate-bound-access-tokens=OAuth 2.0 Mutual TLS Certificate Bound Access Tokens Enabled -#tls-client-certificate-bound-access-tokens.tooltip=This enables support for OAuth 2.0 Mutual TLS Certificate Bound Access Tokens, which means that keycloak bind an access token and a refresh token with a X.509 certificate of a token requesting client exchanged in mutual TLS between keycloak's Token Endpoint and this client. These tokens can be treated as Holder-of-Key tokens instead of bearer tokens. -#subjectdn=Subject DN -#subjectdn-tooltip=A regular expression for validating Subject DN in the Client Certificate. Use "(.*?)(?:$)" to match all kind of expressions. - -notifications.info.header=Information! -notifications.success.header=Erfolg! -notifications.error.header=Fehler! -notifications.warn.header=Warnung! - -dialogs.delete.title={{type}} l\u00F6schen -dialogs.delete.message=Sind Sie sicher, dass Sie {{type}} {{name}} l\u00F6schen m\u00F6chten? -dialogs.delete.confirm=L\u00F6schen -dialogs.cancel=Abbrechen -dialogs.ok=OK diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_en.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_en.properties deleted file mode 100644 index e8b8daf1a..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_en.properties +++ /dev/null @@ -1,1905 +0,0 @@ -consoleTitle=Keycloak Admin Console - -# Common messages -enabled=Enabled -hidden=Hidden -link-only-column=Link only -name=Name -displayName=Display name -displayNameHtml=HTML Display name -save=Save -cancel=Cancel -next=Next -onText=ON -offText=OFF -client=Client -clients=Clients -clear=Clear -selectOne=Select One... - -true=True -false=False - -endpoints=Endpoints - -# Angular date filter format strings: https://docs.angularjs.org/api/ng/filter/date -dateFormat=shortDate -timeFormat=mediumTime - -# Realm settings -realm-detail.enabled.tooltip=Users and clients can only access a realm if it's enabled -realm-detail.protocol-endpoints.tooltip=Shows the configuration of the protocol endpoints -realm-detail.protocol-endpoints.oidc=OpenID Endpoint Configuration -realm-detail.protocol-endpoints.saml=SAML 2.0 Identity Provider Metadata -realm-detail.userManagedAccess.tooltip=If enabled, users are allowed to manage their resources and permissions using the Account Management Console. -userManagedAccess=User-Managed Access -registrationAllowed=User registration -registrationAllowed.tooltip=Enable/disable the registration page. A link for registration will show on login page too. -registrationEmailAsUsername=Email as username -registrationEmailAsUsername.tooltip=If enabled then username field is hidden from registration form and email is used as username for new user. -editUsernameAllowed=Edit username -editUsernameAllowed.tooltip=If enabled, the username field is editable, readonly otherwise. -resetPasswordAllowed=Forgot password -resetPasswordAllowed.tooltip=Show a link on login page for user to click on when they have forgotten their credentials. -rememberMe=Remember Me -rememberMe.tooltip=Show checkbox on login page to allow user to remain logged in between browser restarts until session expires. -loginWithEmailAllowed=Login with email -loginWithEmailAllowed.tooltip=Allow users to log in with their email address. -duplicateEmailsAllowed=Duplicate emails -duplicateEmailsAllowed.tooltip=Allow multiple users to have the same email address. Changing this setting will also clear the user's cache. It is recommended to manually update email constraints of existing users in the database after switching off support for duplicate email addresses. -verifyEmail=Verify email -verifyEmail.tooltip=Require users to verify their email address after initial login or after address changes are submitted. -sslRequired=Require SSL -sslRequired.option.all=all requests -sslRequired.option.external=external requests -sslRequired.option.none=none -sslRequired.tooltip=Is HTTPS required? 'None' means HTTPS is not required for any client IP address. 'External requests' means localhost and private IP addresses can access without HTTPS. 'All requests' means HTTPS is required for all IP addresses. -publicKeys=Public keys -publicKey=Public key -privateKey=Private key -gen-new-keys=Generate new keys -certificate=Certificate -host=Host -smtp-host=SMTP Host -port=Port -smtp-port=SMTP Port (defaults to 25) -smtp-password.tooltip=SMTP password. This field is able to obtain its value from vault, use ${vault.ID} format. -from=From -fromDisplayName=From Display Name -fromDisplayName.tooltip=A user-friendly name for the 'From' address (optional). -replyTo=Reply To -replyToDisplayName=Reply To Display Name -replyToDisplayName.tooltip=A user-friendly name for the 'Reply-To' address (optional). -envelopeFrom=Envelope From -envelopeFrom.tooltip=An email address used for bounces (optional). -sender-email-addr=Sender Email Address -sender-email-addr-display=Display Name for Sender Email Address -reply-to-email-addr=Reply To Email Address -reply-to-email-addr-display=Display Name for Reply To Email Address -sender-envelope-email-addr=Sender Envelope Email Address -enable-ssl=Enable SSL -enable-start-tls=Enable StartTLS -enable-auth=Enable Authentication -username=Username -login-username=Login Username -password=Password -login-password=Login Password -login-theme=Login Theme -login-theme.tooltip=Select theme for login, OTP, grant, registration, and forgot password pages. -account-theme=Account Theme -account-theme.tooltip=Select theme for user account management pages. -admin-console-theme=Admin Console Theme -select-theme-admin-console=Select theme for admin console. -email-theme=Email Theme -select-theme-email=Select theme for emails that are sent by the server. -i18n-enabled=Internationalization Enabled -supported-locales=Supported Locales -supported-locales.placeholder=Type a locale and enter -default-locale=Default Locale -localization-upload-file=Upload localization JSON file -missing-locale=Missing locale. -missing-file=Missing file. Please select a file to upload. -localization-file.upload.success=The localization data has been loaded from file. -localization-file.upload.error=The file can not be uploaded. Please verify the file. -localization-show=Show realm specific localizations -no-localizations-configured=No realm specific localizations configured -add-localization-text=Add localization text -localization-text.create.success=The localization text has been created. -localization-text.update.success=The localization text has been updated. -localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=Realm Cache -realm-cache-clear.tooltip=Clears all entries from the realm cache (this will clear entries for all realms) -user-cache-clear=User Cache -user-cache-clear.tooltip=Clears all entries from the user cache (this will clear entries for all realms) -keys-cache-clear=Keys Cache -keys-cache-clear.tooltip=Clears all entries from the cache of external public keys. These are keys of external clients or identity providers. (this will clear entries for all realms) -default-signature-algorithm=Default Signature Algorithm -default-signature-algorithm.tooltip=Default algorithm used to sign tokens for the realm -revoke-refresh-token=Revoke Refresh Token -revoke-refresh-token.tooltip=If enabled a refresh token can only be used up to 'Refresh Token Max Reuse' and is revoked when a different token is used. Otherwise refresh tokens are not revoked when used and can be used multiple times. -refresh-token-max-reuse=Refresh Token Max Reuse -refresh-token-max-reuse.tooltip=Maximum number of times a refresh token can be reused. When a different token is used, revocation is immediate. -sso-session-idle=SSO Session Idle -seconds=Seconds -minutes=Minutes -hours=Hours -days=Days -sso-session-max=SSO Session Max -sso-session-idle.tooltip=Time a session is allowed to be idle before it expires. Tokens and browser sessions are invalidated when a session is expired. -sso-session-max.tooltip=Max time before a session is expired. Tokens and browser sessions are invalidated when a session is expired. -sso-session-idle-remember-me=SSO Session Idle Remember Me -sso-session-idle-remember-me.tooltip=Time a remember me session is allowed to be idle before it expires. Tokens and browser sessions are invalidated when a session is expired. If not set it uses the standard SSO Session Idle value. -sso-session-max-remember-me=SSO Session Max Remember Me -sso-session-max-remember-me.tooltip=Max time before a session is expired when the user has set the remember me option. Tokens and browser sessions are invalidated when a session is expired. If not set, it uses the standard SSO Session Max value. -offline-session-idle=Offline Session Idle -offline-session-idle.tooltip=Time an offline session is allowed to be idle before it expires. You need to use offline token to refresh at least once within this period; otherwise offline session will expire. -realm-detail.hostname=Hostname -realm-detail.hostname.tooltip=Set the hostname for the realm. Use in combination with the fixed hostname provider to override the server hostname for a specific realm. -realm-detail.frontendUrl=Frontend URL -realm-detail.frontendUrl.tooltip=Set the frontend URL for the realm. Use in combination with the default hostname provider to override the base URL for frontend requests for a specific realm. - -## KEYCLOAK-7688 Offline Session Max for Offline Token -offline-session-max-limited=Offline Session Max Limited -offline-session-max-limited.tooltip=Enable Offline Session Max. -offline-session-max=Offline Session Max -offline-session-max.tooltip=Max time before an offline session is expired regardless of activity. -client-session-idle=Client Session Idle -client-session-idle.tooltip=Time a client session is allowed to be idle before it expires. Tokens are invalidated when a client session is expired. If not set it uses the standard SSO Session Idle value. -client-session-max=Client Session Max -client-session-max.tooltip=Max time before a client session is expired. Tokens are invalidated when a client session is expired. If not set, it uses the standard SSO Session Max value. -client-offline-session-idle=Client Offline Session Idle -client-offline-session-idle.tooltip=Time a client offline session is allowed to be idle before it expires. Offline tokens are invalidated when a client offline session is expired. If not set it uses the Offline Session Idle value. -client-offline-session-max=Client Offline Session Max -client-offline-session-max.tooltip=Max time before a client offline session is expired. Offline tokens are invalidated when a client offline session is expired. If not set, it uses the Offline Session Max value. -access-token-lifespan=Access Token Lifespan -access-token-lifespan.tooltip=Max time before an access token is expired. This value is recommended to be short relative to the SSO timeout. -access-token-lifespan-for-implicit-flow=Access Token Lifespan For Implicit Flow -access-token-lifespan-for-implicit-flow.tooltip=Max time before an access token issued during OpenID Connect Implicit Flow is expired. This value is recommended to be shorter than SSO timeout. There is no possibility to refresh token during implicit flow, that's why there is a separate timeout different to 'Access Token Lifespan'. -action-token-generated-by-admin-lifespan=Default Admin-Initiated Action Lifespan -action-token-generated-by-admin-lifespan.tooltip=Maximum time before an action permit sent to a user by administrator is expired. This value is recommended to be long to allow administrators send e-mails for users that are currently offline. The default timeout can be overridden immediately before issuing the token. -action-token-generated-by-user-lifespan=User-Initiated Action Lifespan -action-token-generated-by-user-lifespan.tooltip=Maximum time before an action permit sent by a user (such as a forgot password e-mail) is expired. This value is recommended to be short because it is expected that the user would react to self-created action quickly. -saml-assertion-lifespan=Assertion Lifespan -saml-assertion-lifespan.tooltip=Lifespan set in the SAML assertion conditions. After that time the assertion will be invalid. The "SessionNotOnOrAfter" attribute is not modified and continue using the "SSO Session Max" time defined at realm level. - -action-token-generated-by-user.execute-actions=Execute Actions -action-token-generated-by-user.idp-verify-account-via-email=IdP Account E-mail Verification -action-token-generated-by-user.reset-credentials=Forgot Password -action-token-generated-by-user.verify-email=E-mail Verification -action-token-generated-by-user.tooltip=Override default settings of maximum time before an action permit sent by a user (such as a forgot password e-mail) is expired for specific action. This value is recommended to be short because it is expected that the user would react to self-created action quickly. -action-token-generated-by-user.reset=Reset -action-token-generated-by-user.operation=Override User-Initiated Action Lifespan - -client-login-timeout=Client login timeout -client-login-timeout.tooltip=Max time a client has to finish the access token protocol. This should normally be 1 minute. -login-timeout=Login timeout -login-timeout.tooltip=Max time a user has to complete a login. This is recommended to be relatively long, such as 30 minutes or more. -login-action-timeout=Login action timeout -login-action-timeout.tooltip=Max time a user has to complete login related actions like update password or configure totp. This is recommended to be relatively long, such as 5 minutes or more. - -oauth2-device-code-lifespan=OAuth 2.0 Device Code Lifespan -oauth2-device-code-lifespan.tooltip=Max time before the device code and user code are expired. This value needs to be a long enough lifetime to be usable (allowing the user to retrieve their secondary device, navigate to the verification URI, login, etc.), but should be sufficiently short to limit the usability of a code obtained for phishing. -oauth2-device-polling-interval=OAuth 2.0 Device Polling Interval -oauth2-device-polling-interval.tooltip=The minimum amount of time in seconds that the client should wait between polling requests to the token endpoint. - -headers=Headers -brute-force-detection=Brute Force Detection -x-frame-options=X-Frame-Options -x-frame-options-tooltip=Default value prevents pages from being included by non-origin iframes (click label for more information) -content-sec-policy=Content-Security-Policy -content-sec-policy-tooltip=Default value prevents pages from being included by non-origin iframes (click label for more information) -content-sec-policy-report-only=Content-Security-Policy-Report-Only -content-sec-policy-report-only-tooltip=For testing Content Security Policies -content-type-options=X-Content-Type-Options -content-type-options-tooltip=Default value prevents Internet Explorer and Google Chrome from MIME-sniffing a response away from the declared content-type (click label for more information) -robots-tag=X-Robots-Tag -robots-tag-tooltip=Prevent pages from appearing in search engines (click label for more information) -x-xss-protection=X-XSS-Protection -x-xss-protection-tooltip=This header configures the Cross-site scripting (XSS) filter in your browser. Using the default behavior, the browser will prevent rendering of the page when a XSS attack is detected (click label for more information) -strict-transport-security=HTTP Strict Transport Security (HSTS) -strict-transport-security-tooltip=The Strict-Transport-Security HTTP header tells browsers to always use HTTPS. Once a browser sees this header, it will only visit the site over HTTPS for the time specified (1 year) at max-age, including the subdomains. -permanent-lockout=Permanent Lockout -permanent-lockout.tooltip=Lock the user permanently when the user exceeds the maximum login failures. -max-login-failures=Max Login Failures -max-login-failures.tooltip=How many failures before wait is triggered. -wait-increment=Wait Increment -wait-increment.tooltip=When failure threshold has been met, how much time should the user be locked out? -quick-login-check-millis=Quick Login Check Milli Seconds -quick-login-check-millis.tooltip=If a failure happens concurrently too quickly, lock out the user. -min-quick-login-wait=Minimum Quick Login Wait -min-quick-login-wait.tooltip=How long to wait after a quick login failure. -max-wait=Max Wait -max-wait.tooltip=Max time a user will be locked out. -failure-reset-time=Failure Reset Time -failure-reset-time.tooltip=When will failure count be reset? -realm-tab-login=Login -realm-tab-keys=Keys -realm-tab-email=Email -realm-tab-themes=Themes -realm-tab-localization=Localization -realm-tab-cache=Cache -realm-tab-tokens=Tokens -realm-tab-client-registration=Client Registration -realm-tab-security-defenses=Security Defenses -realm-tab-user-profile=User Profile -realm-tab-general=General -add-realm=Add realm - -#Session settings -realm-sessions=Realm Sessions -revocation=Revocation -logout-all=Logout all -active-sessions=Active Sessions -offline-sessions=Offline Sessions -sessions=Sessions -not-before=Not Before -not-before.tooltip=Revoke any tokens issued before this date. -set-to-now=Set to now -push=Push -push.tooltip=For every client that has an admin URL, notify them of the new revocation policy. - -#Protocol Mapper -usermodel.prop.label=Property -usermodel.prop.tooltip=Name of the property method in the UserModel interface. For example, a value of 'email' would reference the UserModel.getEmail() method. -usermodel.attr.label=User Attribute -usermodel.attr.tooltip=Name of stored user attribute which is the name of an attribute within the UserModel.attribute map. -userSession.modelNote.label=User Session Note -userSession.modelNote.tooltip=Name of stored user session note within the UserSessionModel.note map. -multivalued.label=Multivalued -multivalued.tooltip=Indicates if attribute supports multiple values. If true, the list of all values of this attribute will be set as claim. If false, just first value will be set as claim -aggregate.attrs.label=Aggregate attribute values -aggregate.attrs.tooltip=Indicates if attribute values should be aggregated with the group attributes. If using OpenID Connect mapper the multivalued option needs to be enabled too in order to get all the values. Duplicated values are discarded and the order of values is not guaranteed with this option. -selectRole.label=Select Role -selectRole.tooltip=Enter role in the textbox to the left, or click this button to browse and select the role you want. -tokenClaimName.label=Token Claim Name -tokenClaimName.tooltip=Name of the claim to insert into the token. This can be a fully qualified name like 'address.street'. In this case, a nested json object will be created. To prevent nesting and use dot literally, escape the dot with backslash (\\.). -jsonType.label=Claim JSON Type -jsonType.tooltip=JSON type that should be used to populate the json claim in the token. long, int, boolean, String and JSON are valid values. -includeInIdToken.label=Add to ID token -includeInIdToken.tooltip=Should the claim be added to the ID token? -includeInAccessToken.label=Add to access token -includeInAccessToken.tooltip=Should the claim be added to the access token? -includeInUserInfo.label=Add to userinfo -includeInUserInfo.tooltip=Should the claim be added to the userinfo? -usermodel.clientRoleMapping.clientId.label=Client ID -usermodel.clientRoleMapping.clientId.tooltip=Client ID for role mappings. Just client roles of this client will be added to the token. If this is unset, client roles of all clients will be added to the token. -usermodel.clientRoleMapping.rolePrefix.label=Client Role prefix -usermodel.clientRoleMapping.rolePrefix.tooltip=A prefix for each client role (optional). -usermodel.clientRoleMapping.tokenClaimName.tooltip=Name of the claim to insert into the token. This can be a fully qualified name like 'address.street'. In this case, a nested json object will be created. To prevent nesting and use dot literally, escape the dot with backslash (\\.). The special token ${client_id} can be used and this will be replaced by the actual client ID. Example usage is 'resource_access.${client_id}.roles'. This is useful especially when you are adding roles from all the clients (Hence 'Client ID' switch is unset) and you want client roles of each client stored separately. -usermodel.realmRoleMapping.rolePrefix.label=Realm Role prefix -usermodel.realmRoleMapping.rolePrefix.tooltip=A prefix for each Realm Role (optional). -sectorIdentifierUri.label=Sector Identifier URI -sectorIdentifierUri.tooltip=Providers that use pairwise sub values and support Dynamic Client Registration SHOULD use the sector_identifier_uri parameter. It provides a way for a group of websites under common administrative control to have consistent pairwise sub values independent of the individual domain names. It also provides a way for Clients to change redirect_uri domains without having to reregister all their users. -pairwiseSubAlgorithmSalt.label=Salt -pairwiseSubAlgorithmSalt.tooltip=Salt used when calculating the pairwise subject identifier. If left blank, a salt will be generated. -addressClaim.street.label=User Attribute Name for Street -addressClaim.street.tooltip=Name of User Attribute, which will be used to map to 'street_address' subclaim inside 'address' token claim. Defaults to 'street' . -addressClaim.locality.label=User Attribute Name for Locality -addressClaim.locality.tooltip=Name of User Attribute, which will be used to map to 'locality' subclaim inside 'address' token claim. Defaults to 'locality' . -addressClaim.region.label=User Attribute Name for Region -addressClaim.region.tooltip=Name of User Attribute, which will be used to map to 'region' subclaim inside 'address' token claim. Defaults to 'region' . -addressClaim.postal_code.label=User Attribute Name for Postal Code -addressClaim.postal_code.tooltip=Name of User Attribute, which will be used to map to 'postal_code' subclaim inside 'address' token claim. Defaults to 'postal_code' . -addressClaim.country.label=User Attribute Name for Country -addressClaim.country.tooltip=Name of User Attribute, which will be used to map to 'country' subclaim inside 'address' token claim. Defaults to 'country' . -addressClaim.formatted.label=User Attribute Name for Formatted Address -addressClaim.formatted.tooltip=Name of User Attribute, which will be used to map to 'formatted' subclaim inside 'address' token claim. Defaults to 'formatted' . -included.client.audience.label=Included Client Audience -included.client.audience.tooltip=The Client ID of the specified audience client will be included in audience (aud) field of the token. If there are existing audiences in the token, the specified value is just added to them. It won't override existing audiences. -included.custom.audience.label=Included Custom Audience -included.custom.audience.tooltip=This is used just if 'Included Client Audience' is not filled. The specified value will be included in audience (aud) field of the token. If there are existing audiences in the token, the specified value is just added to them. It won't override existing audiences. - -# client details -clients.tooltip=Clients are trusted browser apps and web services in a realm. These clients can request a login. You can also define client specific roles. -search.placeholder=Search... -search.loading=Searching... -create=Create -import=Import -client-id=Client ID -base-url=Base URL -actions=Actions -not-defined=Not defined -edit=Edit -delete=Delete -no-results=No results -no-clients-available=No clients available -add-client=Add Client -select-file=Select file -view-details=View details -clear-import=Clear import -client-id.tooltip=Specifies ID referenced in URI and tokens. For example 'my-client'. For SAML this is also the expected issuer value from authn requests -client.name.tooltip=Specifies display name of the client. For example 'My Client'. Supports keys for localized values as well. For example\: ${my_client} -client.enabled.tooltip=Disabled clients cannot initiate a login or have obtain access tokens. -alwaysDisplayInConsole=Always Display in Console -alwaysDisplayInConsole.tooltip=Always list this client in the Account Console, even if the user does not have an active session. -consent-required=Consent Required -consent-required.tooltip=If enabled, users have to consent to client access. -client.display-on-consent-screen=Display Client On Consent Screen -client.display-on-consent-screen.tooltip=Applicable just if Consent Required is on. If this switch is off, consent screen will contain just the consents corresponding to configured client scopes. If on, there will be also one item on consent screen about this client itself -client.consent-screen-text=Client Consent Screen Text -client.consent-screen-text.tooltip=Applicable just if 'Display Client On Consent Screen' is on for this client. Contains the text, which will be on consent screen about permissions specific just for this client -client-protocol=Client Protocol -client-protocol.tooltip='OpenID connect' allows Clients to verify the identity of the End-User based on the authentication performed by an Authorization Server.'SAML' enables web-based authentication and authorization scenarios including cross-domain single sign-on (SSO) and uses security tokens containing assertions to pass information. -access-type=Access Type -access-type.tooltip='Confidential' clients require a secret to initiate login protocol. 'Public' clients do not require a secret. 'Bearer-only' clients are web services that never initiate a login. -standard-flow-enabled=Standard Flow Enabled -standard-flow-enabled.tooltip=This enables standard OpenID Connect redirect based authentication with authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Authorization Code Flow' for this client. -implicit-flow-enabled=Implicit Flow Enabled -implicit-flow-enabled.tooltip=This enables support for OpenID Connect redirect based authentication without authorization code. In terms of OpenID Connect or OAuth2 specifications, this enables support of 'Implicit Flow' for this client. -direct-access-grants-enabled=Direct Access Grants Enabled -direct-access-grants-enabled.tooltip=This enables support for Direct Access Grants, which means that client has access to username/password of user and exchange it directly with Keycloak server for access token. In terms of OAuth2 specification, this enables support of 'Resource Owner Password Credentials Grant' for this client. -service-accounts-enabled=Service Accounts Enabled -service-accounts-enabled.tooltip=Allows you to authenticate this client to Keycloak and retrieve access token dedicated to this client. In terms of OAuth2 specification, this enables support of 'Client Credentials Grant' for this client. -oauth2-device-authorization-grant-enabled=OAuth 2.0 Device Authorization Grant Enabled -oauth2-device-authorization-grant-enabled.tooltip=This enables support for OAuth 2.0 Device Authorization Grant, which means that client is an application on device that has limited input capabilities or lack a suitable browser. -oidc-ciba-grant-enabled=OIDC CIBA Grant Enabled -oidc-ciba-grant-enabled.tooltip=This enables support for OIDC CIBA Grant, which means that the user is authenticated via some external authentication device instead of the user's browser. -include-authnstatement=Include AuthnStatement -include-authnstatement.tooltip=Should a statement specifying the method and timestamp be included in login responses? -include-onetimeuse-condition=Include OneTimeUse Condition -include-onetimeuse-condition.tooltip=Should a OneTimeUse Condition be included in login responses? -artifact-binding = Force Artifact Binding -artifact-binding.tooltip = Should response messages be returned to the client through the SAML ARTIFACT binding system? -sign-documents=Sign Documents -sign-documents.tooltip=Should SAML documents be signed by the realm? -sign-documents-redirect-enable-key-info-ext=Optimize REDIRECT signing key lookup -sign-documents-redirect-enable-key-info-ext.tooltip=When signing SAML documents in REDIRECT binding for SP that is secured by Keycloak adapter, should the ID of the signing key be included in SAML protocol message in element? This optimizes validation of the signature as the validating party uses a single key instead of trying every known key for validation. -sign-assertions=Sign Assertions -sign-assertions.tooltip=Should assertions inside SAML documents be signed? This setting is not needed if document is already being signed. -signature-algorithm=Signature Algorithm -signature-algorithm.tooltip=The signature algorithm to use to sign documents. -canonicalization-method=Canonicalization Method -canonicalization-method.tooltip=Canonicalization Method for XML signatures. -encrypt-assertions=Encrypt Assertions -encrypt-assertions.tooltip=Should SAML assertions be encrypted with client's public key using AES? -client-signature-required=Client Signature Required -client-signature-required.tooltip=Will the client sign their saml requests and responses? And should they be validated? -force-post-binding=Force POST Binding -force-post-binding.tooltip=Always use POST binding for responses. -front-channel-logout=Front Channel Logout -front-channel-logout.tooltip=When true, logout requires a browser redirect to client. When false, server performs a background invocation for logout. -force-name-id-format=Force Name ID Format -force-name-id-format.tooltip=Ignore requested NameID subject format and use admin console configured one. -name-id-format=Name ID Format -name-id-format.tooltip=The name ID format to use for the subject. -mapper.nameid.format.tooltip=Name ID Format using Mapper -root-url=Root URL -root-url.tooltip=Root URL appended to relative URLs -valid-redirect-uris=Valid Redirect URIs -valid-redirect-uris.tooltip=Valid URI pattern a browser can redirect to after a successful login or logout. Simple wildcards are allowed such as 'http://example.com/*'. Relative path can be specified too such as /my/relative/path/*. Relative paths are relative to the client root URL, or if none is specified the auth server root URL is used. For SAML, you must set valid URI patterns if you are relying on the consumer service URL embedded with the login request. -base-url.tooltip=Default URL to use when the auth server needs to redirect or link back to the client. -admin-url=Admin URL -admin-url.tooltip=URL to the admin interface of the client. Set this if the client supports the adapter REST API. This REST API allows the auth server to push revocation policies and other administrative tasks. Usually this is set to the base URL of the client. -master-saml-processing-url=Master SAML Processing URL -master-saml-processing-url.tooltip=If configured, this URL will be used for every binding to both the SP's Assertion Consumer and Single Logout Services. This can be individually overriden for each binding and service in the Fine Grain SAML Endpoint Configuration. -idp-sso-url-ref=IDP Initiated SSO URL Name -idp-sso-url-ref.tooltip=URL fragment name to reference client when you want to do IDP Initiated SSO. Leaving this empty will disable IDP Initiated SSO. The URL you will reference from your browser will be: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-url-ref.urlhint=Target IDP initiated SSO URL: -idp-sso-relay-state=IDP Initiated SSO Relay State -idp-sso-relay-state.tooltip=Relay state you want to send with SAML request when you want to do IDP Initiated SSO. -web-origins=Web Origins -web-origins.tooltip=Allowed CORS origins. To permit all origins of Valid Redirect URIs, add '+'. This does not include the '*' wildcard though. To permit all origins, explicitly add '*'. -backchannel-logout-url=Backchannel Logout URL -backchannel-logout-url.tooltip=URL that will cause the client to log itself out when a logout request is sent to this realm (via end_session_endpoint). If omitted, no logout request will be sent to the client is this case. -backchannel-logout-session-required=Backchannel Logout Session Required -backchannel-logout-session-required.tooltip=Specifying whether a sid (session ID) Claim is included in the Logout Token when the Backchannel Logout URL is used. -backchannel-logout-revoke-offline-sessions=Backchannel Logout Revoke Offline Sessions -backchannel-logout-revoke-offline-sessions.tooltip=Specifying whether a "revoke_offline_access" event is included in the Logout Token when the Backchannel Logout URL is used. Keycloak will revoke offline sessions when receiving a Logout Token with this event. -fine-oidc-endpoint-conf=Fine Grain OpenID Connect Configuration -fine-oidc-endpoint-conf.tooltip=Expand this section to configure advanced settings of this client related to OpenID Connect protocol -access-token-signed-response-alg=Access Token Signature Algorithm -access-token-signed-response-alg.tooltip=JWA algorithm used for signing access tokens. -id-token-signed-response-alg=ID Token Signature Algorithm -id-token-signed-response-alg.tooltip=JWA algorithm used for signing ID tokens. -id-token-encrypted-response-alg=ID Token Encryption Key Management Algorithm -id-token-encrypted-response-alg.tooltip=JWA Algorithm used for key management in encrypting ID tokens. This option is needed if you want encrypted ID tokens. If left empty, ID Tokens are just signed, but not encrypted. -id-token-encrypted-response-enc=ID Token Encryption Content Encryption Algorithm -id-token-encrypted-response-enc.tooltip=JWA Algorithm used for content encryption in encrypting ID tokens. This option is needed just if you want encrypted ID tokens. If left empty, ID Tokens are just signed, but not encrypted. -user-info-signed-response-alg=User Info Signed Response Algorithm -user-info-signed-response-alg.tooltip=JWA algorithm used for signed User Info Endpoint response. If set to 'unsigned', User Info Response won't be signed and will be returned in application/json format. -request-object-signature-alg=Request Object Signature Algorithm -request-object-signature-alg.tooltip=JWA algorithm, which client needs to use when sending OIDC request object specified by 'request' or 'request_uri' parameters. If set to 'any', Request object can be signed by any algorithm (including 'none' ). -request-object-required=Request Object Required -request-object-required.tooltip=Specifies if the client needs to provide a request object with their authorization requests, and what method they can use for this. If set to "not required", providing a request object is optional. In all other cases, providing a request object is mandatory. If set to "request", the request object must be provided by value. If set to "request_uri", the request object must be provided by reference. If set to "request or request_uri", either method can be used. -request-uris=Valid Request URIs -request-uris.tooltip=List of valid URIs, which can be used as values of 'request_uri' parameter during OpenID Connect authentication request. There is support for the same capabilities like for Valid Redirect URIs. For example wildcards or relative paths. -fine-saml-endpoint-conf=Fine Grain SAML Endpoint Configuration -fine-saml-endpoint-conf.tooltip=Expand this section to configure exact URLs for Assertion Consumer and Single Logout Service. -assertion-consumer-post-binding-url=Assertion Consumer Service POST Binding URL -assertion-consumer-post-binding-url.tooltip=SAML POST Binding URL for the client's assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -assertion-consumer-redirect-binding-url=Assertion Consumer Service Redirect Binding URL -assertion-consumer-redirect-binding-url.tooltip=SAML Redirect Binding URL for the client's assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -logout-service-post-binding-url=Logout Service POST Binding URL -logout-service-post-binding-url.tooltip=SAML POST Binding URL for the client's single logout service. You can leave this blank if you are using a different binding -logout-service-redir-binding-url=Logout Service Redirect Binding URL -logout-service-redir-binding-url.tooltip=SAML Redirect Binding URL for the client's single logout service. You can leave this blank if you are using a different binding. -logout-service-artifact-binding-url=Logout Service ARTIFACT Binding URL -logout-service-artifact-binding-url.tooltip=SAML ARTIFACT Binding URL for the client's single logout service. You can leave this blank if you are using a different binding. -artifact-binding-url= Artifact Binding URL -artifact-binding-url.tooltip=URL to send the HTTP ARTIFACT messages to. You can leave this blank if you are using a different binding. This value should be set when forcing ARTIFACT binding together with IdP initiated login. -artifact-resolution-service-url= Artifact Resolution Service -artifact-resolution-service-url.tooltip= SAML Artifact resolution service for the client. This is the endpoint to which Keycloak will send a SOAP ArtifactResolve mesasge. You can leave this blank if you do not have a URL for this binding. -saml-signature-keyName-transformer=SAML Signature Key Name -saml-signature-keyName-transformer.tooltip=Signed SAML documents contain identification of signing key in KeyName element. For Keycloak / RH-SSO counterparty, use KEY_ID, for MS AD FS use CERT_SUBJECT, for others check and use NONE if no other option works. -oidc-compatibility-modes=OpenID Connect Compatibility Modes -oidc-compatibility-modes.tooltip=Expand this section to configure settings for backwards compatibility with older OpenID Connect / OAuth2 adapters. It is useful especially if your client uses older version of Keycloak / RH-SSO adapter. -exclude-session-state-from-auth-response=Exclude Session State From Authentication Response -exclude-session-state-from-auth-response.tooltip=If this is on, the parameter 'session_state' will not be included in OpenID Connect Authentication Response. It is useful if your client uses older OIDC / OAuth2 adapter, which does not support 'session_state' parameter. -use-refresh-tokens=Use Refresh Tokens -use-refresh-tokens.tooltip=If this is on, a refresh_token will be created and added to the token response. If this is off then no refresh_token will be generated. -use-refresh-token-for-client-credentials-grant=Use Refresh Tokens For Client Credentials Grant -use-refresh-token-for-client-credentials-grant.tooltip=If this is on, a refresh_token will be created and added to the token response if the client_credentials grant is used. The OAuth 2.0 RFC6749 Section 4.4.3 states that a refresh_token should not be generated when client_credentials grant is used. If this is off then no refresh_token will be generated and the associated user session will be removed. - -# client import -import-client=Import Client -format-option=Format Option -select-format=Select a Format -import-file=Import File - -# client tabs -settings=Settings -credentials=Credentials -roles=Roles -mappers=Mappers -mappers.tooltip=Protocol mappers perform transformation on tokens and documents. They can do things like map user data into protocol claims, or just transform any requests going between the client and auth server. -scope=Scope -scope.tooltip=Scope mappings allow you to restrict which user role mappings are included within the access token requested by the client. -sessions.tooltip=View active sessions for this client. Allows you to see which users are active and when they logged in. -offline-access=Offline Access -offline-access.tooltip=View offline sessions for this client. Allows you to see which users retrieve offline token and when they retrieve it. To revoke all tokens for the client, go to the Revocation tab and set Not Before to Now. -clustering=Clustering -installation=Installation -installation.tooltip=Helper utility for generating various client adapter configuration formats which you can download or cut and paste to configure your clients. -service-account-roles=Service Account Roles -service-account-roles.tooltip=Allows you to authenticate role mappings for the service account dedicated to this client. - -# client credentials -client-authenticator=Client Authenticator -client-authenticator.tooltip=Client Authenticator used for authentication of this client against Keycloak server -certificate.tooltip=Client Certificate for validate JWT issued by client and signed by Client private key from your keystore. -publicKey.tooltip=Public Key for validate JWT issued by client and signed by Client private key. -no-client-certificate-configured=No client certificate configured -need-to-configure-keys=Configure JWKS URL or Signing key in the Keys tab -gen-new-keys-and-cert=Generate new keys and certificate -import-certificate=Import Certificate -gen-client-private-key=Generate Client Private Key -generate-private-key=Generate Private Key -kid=Kid -kid.tooltip=KID (Key ID) of the client public key from imported JWKS. -token-endpoint-auth-signing-alg=Signature Algorithm -token-endpoint-auth-signing-alg.tooltip=JWA algorithm, which the client needs to use when signing a JWT for authentication. If left blank, the client is allowed to use any algorithm. -use-jwks-url=Use JWKS URL -use-jwks-url.tooltip=If the switch is on, client public keys will be downloaded from given JWKS URL. This allows great flexibility because new keys will be always re-downloaded again when client generates new keypair. If the switch is off, public key (or certificate) from the Keycloak DB is used, so when client keypair changes, you always need to import new key (or certificate) to the Keycloak DB as well. -jwks-url=JWKS URL -jwks-url.tooltip=URL where client keys in JWK format are stored. See JWK specification for more details. If you use Keycloak client adapter with "jwt" credential, you can use URL of your app with '/k_jwks' suffix. For example 'http://www.myhost.com/myapp/k_jwks' . -pkce-enabled=Use PKCE -pkce-enabled.tooltip=Use PKCE (Proof of Key-code exchange) for IdP Brokering -pkce-method=PKCE Method -pkce-method.tooltip=PKCE Method to use -pkce.plain.option=Plain -pkce.s256.option=S256 -archive-format=Archive Format -archive-format.tooltip=Java keystore or PKCS12 archive format. -key-alias=Key Alias -key-alias.tooltip=Archive alias for your private key and certificate. -key-password=Key Password -key-password.tooltip=Password to access the private key in the archive -store-password=Store Password -store-password.tooltip=Password to access the archive itself -generate-and-download=Generate and Download -client-certificate-import=Client Certificate Import -import-client-certificate=Import Client Certificate -jwt-import.key-alias.tooltip=Archive alias for your certificate. -secret=Secret -regenerate-secret=Regenerate Secret -registrationAccessToken=Registration access token -registrationAccessToken.regenerate=Regenerate registration access token -registrationAccessToken.tooltip=The registration access token provides access for clients to the client registration service. -add-role=Add Role -role-name=Role Name -composite=Composite -description=Description -no-client-roles-available=No client roles available -composite-roles=Composite Roles -composite-roles.tooltip=When this role is (un)assigned to a user any role associated with it will be (un)assigned implicitly. -realm-roles=Realm Roles -available-roles=Available Roles -add-selected=Add selected -associated-roles=Associated Roles -composite.associated-realm-roles.tooltip=Realm level roles associated with this composite role. -composite.available-realm-roles.tooltip=Realm level roles that you can associate to this composite role. -remove-selected=Remove selected -client-roles=Client Roles -select-client-to-view-roles=Select client to view roles for client -available-roles.tooltip=Roles from this client that you can associate to this composite role. -client.associated-roles.tooltip=Client roles associated with this composite role. -add-builtin=Add Builtin -category=Category -type=Type -priority-order=Priority Order -no-mappers-available=No mappers available -add-builtin-protocol-mappers=Add Builtin Protocol Mappers -add-builtin-protocol-mapper=Add Builtin Protocol Mapper -scope-mappings=Scope Mappings -full-scope-allowed=Full Scope Allowed -full-scope-allowed.tooltip=Allows you to disable all restrictions. -scope.available-roles.tooltip=Realm level roles that can be assigned to scope. -assigned-roles=Assigned Roles -assigned-roles.tooltip=Realm level roles assigned to scope. -effective-roles=Effective Roles -realm.effective-roles.tooltip=Assigned realm level roles that may have been inherited from a composite role. -select-client-roles.tooltip=Select client to view roles for client -assign.available-roles.tooltip=Client roles available to be assigned. -client.assigned-roles.tooltip=Assigned client roles. -client.effective-roles.tooltip=Assigned client roles that may have been inherited from a composite role. -basic-configuration=Basic configuration -node-reregistration-timeout=Node Re-registration Timeout -node-reregistration-timeout.tooltip=Interval to specify max time for registered clients cluster nodes to re-register. If cluster node will not send re-registration request to Keycloak within this time, it will be unregistered from Keycloak -registered-cluster-nodes=Registered cluster nodes -register-node-manually=Register node manually -test-cluster-availability=Test cluster availability -last-registration=Last registration -node-host=Node host -no-registered-cluster-nodes=No registered cluster nodes available -cluster-nodes=Cluster Nodes -add-node=Add Node -active-sessions.tooltip=Total number of active user sessions for this client. -show-sessions=Show Sessions -show-sessions.tooltip=Warning, this is a potentially expensive operation depending on the number of active sessions. -user=User -from-ip=From IP -session-start=Session Start -first-page=First Page -previous-page=Previous Page -next-page=Next Page -client-revoke.not-before.tooltip=Revoke any tokens issued before this date for this client. -client-revoke.push.tooltip=If the admin URL is configured for this client, push this policy to that client. -select-a-format=Select a Format -download=Download -offline-tokens=Offline Tokens -offline-tokens.tooltip=Total number of offline tokens for this client. -show-offline-tokens=Show Offline Tokens -show-offline-tokens.tooltip=Warning, this is a potentially expensive operation depending on the number of offline tokens. -token-issued=Token Issued -last-access=Last Access -last-refresh=Last Refresh -key-export=Key Export -key-import=Key Import -export-saml-key=Export SAML Key -import-saml-key=Import SAML Key -realm-certificate-alias=Realm Certificate Alias -realm-certificate-alias.tooltip=Realm certificate is stored in archive too. This is the alias to it. -signing-key=Signing Key -saml-signing-key=SAML Signing Key. -private-key=Private Key -generate-new-keys=Generate new keys -export=Export -encryption-key=Encryption Key -saml-encryption-key.tooltip=SAML Encryption Key. -service-accounts=Service Accounts -service-account.available-roles.tooltip=Realm level roles that can be assigned to service account. -service-account.assigned-roles.tooltip=Realm level roles assigned to service account. -service-account-is-not-enabled-for=Service account is not enabled for {{client}} -create-protocol-mappers=Create Protocol Mappers -create-protocol-mapper=Create Protocol Mapper -protocol=Protocol -protocol.tooltip=Protocol... -id=ID -mapper.name.tooltip=Name of the mapper. -mapper.consent-required.tooltip=When granting temporary access, must the user consent to providing this data to the client? -consent-text=Consent Text -consent-text.tooltip=Text to display on consent page. -mapper-type=Mapper Type -mapper-type.tooltip=Type of the mapper -user-label=User Label -data=Data -show-data=Show data... -position=Position -# realm identity providers -identity-providers=Identity Providers -table-of-identity-providers=Table of identity providers -add-provider.placeholder=Add provider... -provider=Provider -gui-order=GUI order -first-broker-login-flow=First Login Flow -post-broker-login-flow=Post Login Flow -sync-mode=Sync Mode -sync-mode.tooltip=Default sync mode for all mappers. The sync mode determines when user data will be synced using the mappers. Possible values are: 'legacy' to keep the behaviour before this option was introduced, 'import' to only import the user once during first login of the user with this identity provider, 'force' to always update the user during every login with this identity provider. -sync-mode.inherit=inherit -sync-mode.legacy=legacy -sync-mode.import=import -sync-mode.force=force -sync-mode-override=Sync Mode Override -sync-mode-override.tooltip=Overrides the default sync mode of the IDP for this mapper. Values are: 'legacy' to keep the behaviour before this option was introduced, 'import' to only import the user once during first login of the user with this identity provider, 'force' to always update the user during every login with this identity provider and 'inherit' to use the sync mode defined in the identity provider for this mapper. -redirect-uri=Redirect URI -redirect-uri.tooltip=The redirect uri to use when configuring the identity provider. -alias=Alias -display-name=Display Name -identity-provider.alias.tooltip=The alias uniquely identifies an identity provider and it is also used to build the redirect uri. -identity-provider.display-name.tooltip=Friendly name for Identity Providers. -identity-provider.enabled.tooltip=Enable/disable this identity provider. -authenticate-by-default=Authenticate by Default -identity-provider.authenticate-by-default.tooltip=Indicates if this provider should be tried by default for authentication even before displaying login screen. -store-tokens=Store Tokens -identity-provider.store-tokens.tooltip=Enable/disable if tokens must be stored after authenticating users. -stored-tokens-readable=Stored Tokens Readable -identity-provider.stored-tokens-readable.tooltip=Enable/disable if new users can read any stored tokens. This assigns the broker.read-token role. -disableUserInfo=Disable User Info -identity-provider.disableUserInfo.tooltip=Disable usage of User Info service to obtain additional user information? Default is to use this OIDC service. -userIp=Use userIp Param -identity-provider.google-userIp.tooltip=Set 'userIp' query parameter when invoking on Google's User Info service. This will use the user's ip address. Useful if Google is throttling access to the User Info service. -offlineAccess=Request refresh token -identity-provider.google-offlineAccess.tooltip=Set 'access_type' query parameter to 'offline' when redirecting to google authorization endpoint, to get a refresh token back. Useful if planning to use Token Exchange to retrieve Google token to access Google APIs when the user is not at the browser. -hostedDomain=Hosted Domain -identity-provider.google-hostedDomain.tooltip=Set 'hd' query parameter when logging in with Google. Google will list accounts only for this domain. Keycloak validates that the returned identity token has a claim for this domain. When '*' is entered, any hosted account can be used. -identity-provider.facebook-fetchedFields.label=Additional user's profile fields -identity-provider.facebook-fetchedFields.tooltip=Provide additional fields which would be fetched using the profile request. This will be appended to the default set of 'id,name,email,first_name,last_name'. -sandbox=Target Sandbox -identity-provider.paypal-sandbox.tooltip=Target PayPal's sandbox environment -update-profile-on-first-login=Update Profile on First Login -on=On -on-missing-info=On missing info -off=Off -update-profile-on-first-login.tooltip=Define conditions under which a user has to update their profile during first-time login. -trust-email=Trust Email -trust-email.tooltip=If enabled, email provided by this provider is not verified even if verification is enabled for the realm. -link-only=Account Linking Only -link-only.tooltip=If true, users cannot log in through this provider. They can only link to this provider. This is useful if you don't want to allow login from the provider, but want to integrate with a provider -hide-on-login-page=Hide on Login Page -hide-on-login-page.tooltip=If hidden, login with this provider is possible only if requested explicitly, for example using the 'kc_idp_hint' parameter. -gui-order.tooltip=Number defining order of the provider in GUI (for example, on Login page). -first-broker-login-flow.tooltip=Alias of authentication flow, which is triggered after first login with this identity provider. Term 'First Login' means that no Keycloak account is currently linked to the authenticated identity provider account. -post-broker-login-flow.tooltip=Alias of authentication flow, which is triggered after each login with this identity provider. Useful if you want additional verification of each user authenticated with this identity provider (for example OTP). Leave this empty if you need no any additional authenticators to be triggered after login with this identity provider. Also note that authenticator implementations must assume that user is already set in ClientSession as identity provider already set it. -openid-connect-config=OpenID Connect Config -openid-connect-config.tooltip=OIDC SP and external IDP configuration. -authorization-url=Authorization URL -authorization-url.tooltip=The Authorization Url. -token-url=Token URL -token-url.tooltip=The Token URL. -loginHint=Pass login_hint -loginHint.tooltip=Pass login_hint to identity provider. -uiLocales=Pass current locale -uiLocales.tooltip=Pass the current locale to the identity provider as a ui_locales parameter. -logout-url=Logout URL -identity-provider.logout-url.tooltip=End session endpoint to use to logout user from external IDP. -backchannel-logout=Backchannel Logout -backchannel-logout.tooltip=Does the external IDP support backchannel logout? -user-info-url=User Info URL -user-info-url.tooltip=The User Info Url. This is optional. -client-auth=Client Authentication -client-auth.tooltip=The client authentication method (cfr. https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication). In case of JWT signed with private key, the realm private key is used. -client-auth.client_secret_post=Client secret sent as post -client-auth.client_secret_basic=Client secret sent as basic auth -client-auth.client_secret_jwt=Client secret as jwt -client-auth.private_key_jwt=JWT signed with private key -identity-provider.client-id.tooltip=The client or client identifier registered within the identity provider. -client-secret=Client Secret -client-assertion-signing-algorithm=Client Assertion Signature Algorithm -client-assertion-signing-algorithm.tooltip=Signature algorithm to create JWT assertion as client authentication. In the case of JWT signed with private key or Client secret as jwt, it is required. If no algorithm is specified, the following algorithm is adapted. RS256 is adapted in the case of JWT signed with private key. HS256 is adapted in the case of Client secret as jwt. -show-secret=Show secret -hide-secret=Hide secret -client-secret.tooltip=The client or client secret registered within the identity provider. This field is able to obtain its value from vault, use ${vault.ID} format. -issuer=Issuer -issuer.tooltip=The issuer identifier for the issuer of the response. If not provided, no validation will be performed. -default-scopes=Default Scopes -identity-provider.default-scopes.tooltip=The scopes to be sent when asking for authorization. It can be a space-separated list of scopes. Defaults to 'openid'. -prompt=Prompt -unspecified.option=unspecified -none.option=none -consent.option=consent -login.option=login -select-account.option=select_account -prompt.tooltip=Specifies whether the Authorization Server prompts the End-User for reauthentication and consent. -accepts-prompt-none-forward-from-client=Accepts prompt=none forward from client -accepts-prompt-none-forward-from-client.tooltip=This is just used together with Identity Provider Authenticator or when kc_idp_hint points to this identity provider. In case that client sends a request with prompt=none and user is not yet authenticated, the error will not be directly returned to client, but the request with prompt=none will be forwarded to this identity provider. -validate-signatures=Validate Signatures -identity-provider.validate-signatures.tooltip=Enable/disable signature validation of external IDP signatures. -identity-provider.use-jwks-url.tooltip=If the switch is on, identity provider public keys will be downloaded from given JWKS URL. This allows great flexibility because new keys will be always re-downloaded again when identity provider generates new keypair. If the switch is off, public key (or certificate) from the Keycloak DB is used, so when the identity provider keypair changes, you always need to import the new key to the Keycloak DB as well. -identity-provider.jwks-url.tooltip=URL where identity provider keys in JWK format are stored. See JWK specification for more details. If you use external Keycloak identity provider, you can use URL like 'http://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certs' assuming your brokered Keycloak is running on 'http://broker-keycloak:8180' and its realm is 'test' . -validating-public-key=Validating Public Key -identity-provider.validating-public-key.tooltip=The public key in PEM format that must be used to verify external IDP signatures. -validating-public-key-id=Validating Public Key Id -identity-provider.validating-public-key-id.tooltip=Explicit ID of the validating public key given above if the key ID. Leave blank if the key above should be used always, regardless of key ID specified by external IDP; set it if the key should only be used for verifying if the key ID from external IDP matches. -allowed-clock-skew=Allowed clock skew -identity-provider.allowed-clock-skew.tooltip=Clock skew in seconds that is tolerated when validating identity provider tokens. Default value is zero. -forwarded-query-parameters=Forwarded Query Parameters -identity-provider.forwarded-query-parameters.tooltip=Non OpenID Connect/OAuth standard query parameters to be forwarded to external IDP from the initial application request to Authorization Endpoint. Multiple parameters can be entered, separated by comma (,). -import-external-idp-config=Import External IDP Config -import-external-idp-config.tooltip=Allows you to load external IDP metadata from a config file or to download it from a URL. -import-from-url=Import from URL -identity-provider.import-from-url.tooltip=Import metadata from a remote IDP discovery descriptor. -import-from-file=Import from file -identity-provider.import-from-file.tooltip=Import metadata from a downloaded IDP discovery descriptor. -identity-provider.saml.entity-id=Service Provider Entity ID -identity-provider.saml.entity-id.tooltip=The Entity ID that will be used to uniquely identify this SAML Service Provider -identity-provider.saml.protocol-endpoints.saml=SAML 2.0 Service Provider Metadata -identity-provider.saml.protocol-endpoints.saml.tooltip=Shows the configuration of the Service Provider endpoint -saml-config=SAML Config -identity-provider.saml-config.tooltip=SAML SP and external IDP configuration. -single-signon-service-url=Single Sign-On Service URL -saml.single-signon-service-url.tooltip=The Url that must be used to send authentication requests (SAML AuthnRequest). -single-logout-service-url=Single Logout Service URL -saml.single-logout-service-url.tooltip=The Url that must be used to send logout requests. -nameid-policy-format=NameID Policy Format -nameid-policy-format.tooltip=Specifies the URI reference corresponding to a name identifier format. Defaults to urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -saml.principal-type=Principal Type -saml.principal-type.tooltip=Way to identify and track external users from the assertion. Default is using Subject NameID, alternatively you can set up identifying attribute. -saml.principal-attribute=Principal Attribute -saml.principal-attribute.tooltip=Name or Friendly Name of the attribute used to identify external users. -saml.allow-create=Allow create -saml.allow-create.tooltip=Allow the external identity provider to create a new identifier to represent the principal -http-post-binding-response=HTTP-POST Binding Response -http-post-binding-response.tooltip=Indicates whether to respond to requests using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -http-post-binding-for-authn-request=HTTP-POST Binding for AuthnRequest -http-post-binding-for-authn-request.tooltip=Indicates whether the AuthnRequest must be sent using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -http-post-binding-logout=HTTP-POST Binding Logout -http-post-binding-logout.tooltip=Indicates whether to respond to requests using HTTP-POST binding. If false, HTTP-REDIRECT binding will be used. -want-authn-requests-signed=Want AuthnRequests Signed -want-authn-requests-signed.tooltip=Indicates whether the identity provider expects a signed AuthnRequest. -want-assertions-signed=Want Assertions Signed -want-assertions-signed.tooltip=Indicates whether this service provider expects a signed Assertion. -want-assertions-encrypted=Want Assertions Encrypted -want-assertions-encrypted.tooltip=Indicates whether this service provider expects an encrypted Assertion. -force-authentication=Force Authentication -identity-provider.force-authentication.tooltip=Indicates whether the identity provider must authenticate the presenter directly rather than rely on a previous security context. -validate-signature=Validate Signature -saml.validate-signature.tooltip=Enable/disable signature validation of SAML responses. -validating-x509-certificate=Validating X509 Certificates -validating-x509-certificate.tooltip=The certificate in PEM format that must be used to check for signatures. Multiple certificates can be entered, separated by comma (,). -saml.loginHint=Pass subject -saml.loginHint.tooltip=During login phase, forward an optional login_hint query parameter to SAML AuthnRequest's Subject. -saml.import-from-url.tooltip=Import metadata from a remote IDP SAML entity descriptor. -identity-provider.saml.sign-sp-metadata=Sign Service Provider Metadata -identity-provider.saml.sign-sp-metadata.tooltip=Enable/disable signature of the provider SAML metadata -identity-provider.saml.requested-authncontext=Requested AuthnContext Constraints -identity-provider.saml.requested-authncontext.tooltip=Allows the SP to specify the authentication context requirements of authentication statements returned. -identity-provider.saml.authncontext-comparison-type=Comparison -identity-provider.saml.authncontext-comparison-type.tooltip=Specifies the comparison method used to evaluate the requested context classes or statements. The default is "Exact". -identity-provider.saml.authncontext-comparison-type.exact=Exact -identity-provider.saml.authncontext-comparison-type.minimum=Minimum -identity-provider.saml.authncontext-comparison-type.maximum=Maximum -identity-provider.saml.authncontext-comparison-type.better=Better -identity-provider.saml.authncontext-class-ref=AuthnContext ClassRefs -identity-provider.saml.authncontext-class-ref.tooltip=Ordered list of requested AuthnContext ClassRefs. -identity-provider.saml.authncontext-decl-ref=AuthnContext DeclRefs -identity-provider.saml.authncontext-decl-ref.tooltip=Ordered list of requested AuthnContext DeclRefs. -social.client-id.tooltip=The client identifier registered with the identity provider. -social.client-secret.tooltip=The client secret registered with the identity provider. This field is able to obtain its value from vault, use ${vault.ID} format. -social.default-scopes.tooltip=The scopes to be sent when asking for authorization. See the documentation for possible values, separator and default value'. -key=Key -stackoverflow.key.tooltip=The Key obtained from Stack Overflow client registration. -openshift.base-url=Base Url -openshift.base-url.tooltip=Base Url to OpenShift Online API -openshift4.base-url=Base Url -openshift4.base-url.tooltip=Base Url to OpenShift Online API -gitlab-application-id=Application Id -gitlab-application-secret=Application Secret -gitlab.application-id.tooltip=Application Id for the application you created in your GitLab Applications account menu -gitlab.application-secret.tooltip=Secret for the application that you created in your GitLab Applications account menu -gitlab.default-scopes.tooltip=Scopes to ask for on login. Will always ask for openid. Additionally adds read_user if you do not specify anything. -bitbucket-consumer-key=Consumer Key -bitbucket-consumer-secret=Consumer Secret -bitbucket.key.tooltip=Bitbucket OAuth Consumer Key -bitbucket.secret.tooltip=Bitbucket OAuth Consumer Secret -bitbucket.default-scopes.tooltip=Scopes to ask for on login. If you do not specify anything, scope defaults to 'email'. -# User federation -sync-ldap-roles-to-keycloak=Sync LDAP Roles To Keycloak -sync-keycloak-roles-to-ldap=Sync Keycloak Roles To LDAP -sync-ldap-groups-to-keycloak=Sync LDAP Groups To Keycloak -sync-keycloak-groups-to-ldap=Sync Keycloak Groups To LDAP -realms=Realms -realm=Realm -identity-provider-mappers=Identity Provider Mappers -create-identity-provider-mapper=Create Identity Provider Mapper -add-identity-provider-mapper=Add Identity Provider Mapper -client.description.tooltip=Specifies description of the client. For example 'My Client for TimeSheets'. Supports keys for localized values as well. For example\: ${my_client_description} -expires=Expires -expiration=Expiration -expiration.tooltip=Specifies how long the token should be valid -count=Count -count.tooltip=Specifies how many clients can be created using the token -remainingCount=Remaining Count -created=Created -back=Back -initial-access-tokens=Initial Access Tokens -add-initial-access-tokens=Add Initial Access Token -initial-access-token=Initial Access Token -initial-access.copyPaste.tooltip=Copy/paste the initial access token before navigating away from this page as it is not possible to retrieve later -continue=Continue -initial-access-token.confirm.title=Copy Initial Access Token -initial-access-token.confirm.text=Please copy and paste the initial access token before confirming as it cannot be retrieved later -no-initial-access-available=No Initial Access Tokens available -client-reg-policies=Client Registration Policies -client-reg-policy.name.tooltip=Display Name of the policy -anonymous-policies=Anonymous Access Policies -anonymous-policies.tooltip=Those Policies are used when the Client Registration Service is invoked by unauthenticated request. This means that the request does not contain Initial Access Token nor Bearer Token. -auth-policies=Authenticated Access Policies -auth-policies.tooltip=Those Policies are used when Client Registration Service is invoked by authenticated request. This means that the request contains Initial Access Token or Bearer Token. -policy-name=Policy Name -no-client-reg-policies-configured=No Client Registration Policies -trusted-hosts.label=Trusted Hosts -trusted-hosts.tooltip=List of Hosts, which are trusted and are allowed to invoke Client Registration Service and/or be used as values of Client URIs. You can use hostnames or IP addresses. If you use star at the beginning (for example '*.example.com' ) then whole domain example.com will be trusted. -host-sending-registration-request-must-match.label=Host Sending Client Registration Request Must Match -host-sending-registration-request-must-match.tooltip=If on, any request to Client Registration Service is allowed just if it was sent from some trusted host or domain. -client-uris-must-match.label=Client URIs Must Match -client-uris-must-match.tooltip=If on, all Client URIs (Redirect URIs and others) are allowed just if they match some trusted host or domain. -consent-required-for-all-mappers.label=Consent Required For Mappers -consent-required-for-all-mappers.tooltip=If on, all newly registered protocol mappers will automatically have consentRequired switch on. This means that user will need to approve consent screen. NOTE: Consent screen is shown just if client has consentRequired switch on. So it is usually good to use this switch together with consent-required policy. -allowed-client-scopes.label=Allowed Client Scopes -allowed-client-scopes.tooltip=Whitelist of the client scopes, which can be used on a newly registered client. Attempt to register client with some client scope, which is not whitelisted, will be rejected. By default, the whitelist is either empty or contains just realm default client scopes (based on 'Allow Default Scopes' configuration property) -allow-default-scopes.label=Allow Default Scopes -allow-default-scopes.tooltip=If on, newly registered clients will be allowed to have client scopes mentioned in realm default client scopes or realm optional client scopes - -# Client Registration Policies providers -allowed-protocol-mappers.label=Allowed Protocol Mappers -allowed-protocol-mappers.tooltip=Whitelist of allowed protocol mapper providers. If there is an attempt to register client, which contains some protocol mappers, which were not whitelisted, registration request will be rejected. - -allowed-client-templates.label=Allowed Client Templates -client-disabled.label=Client Disabled -scope.label=Scope -consent-required.label=Consent Required - -max-clients.label=Max Clients Per Realm -max-clients.tooltip=It will not be allowed to register a new client if count of existing clients in realm is same or bigger than the configured limit. - -client-scopes=Client Scopes -client-scopes.tooltip=Client scopes allow you to define a common set of protocol mappers and roles, which are shared between multiple clients - -# Client Policies -realm-tab-client-policies=Client Policies -client-policies-profiles=Profiles -client-policies-profiles.tooltip=Client Profile allows to setup set of executors, which are enforced for various actions done with the client. Actions can be admin actions like creating or updating client, or user actions like authentication to the client. -client-policies-policies=Policies -client-policies-policies.tooltip=Client Policy allows to bind client profiles with various conditions to specify when exactly is enforced behaviour specified by executors of the particular client profile. -client-profiles-form-view=Form View -client-profiles-json-editor=JSON Editor -global=Global -executors=Executors -client-profile-name.tooltip=Name of the client profile. Must be unique within the realm -client-profile-executors.tooltip=Executors, which will be applied for this client profile -no-executors-available=No Executors Available -push-profile-to-json=Push Profile to JSON -executor-type=Executor Type -create-executor=Create Executor -client-policy-name.tooltip=Name of the client policy. Must be unique within the realm. -client-policy-enabled.tooltip=Specifies if client policy is enabled. Disabled policies are not considered at all during evaluation of client requests. -conditions=Conditions -client-policy-conditions.tooltip=Conditions, which will be evaluated to determine if client policy should be applied during particular action or not. -no-conditions-available=No Conditions Available -condition-type=Condition Type -create-condition=Create Condition -client-profiles=Client Profiles -client-policies=Client Policies -client-profiles.tooltip=Client Profiles applied on this policy -add-profile.placeholder=Add client profile ... -no-client-profiles-configured=No client profiles configured -create-client-profile=Create Client Profile -create-client-policy=Create Client Policy - -client-scopes-condition.label=Expected Scopes -client-scopes-condition.tooltip=The list of expected client scopes. Condition evaluates to true if specified client request matches some of the client scopes. It depends also whether it should be default or optional client scope based on the 'Scope Type' configured. -client-accesstype.label=Client Access Type -client-accesstype.tooltip=Access Type of the client, for which the condition will be applied. -client-roles.label=Client Roles -client-roles-condition.tooltip=Client roles, which will be checked during this condition evaluation. Condition evaluates to true if client has at least one client role with the name as the client roles specified in the configuration. -client-updater-source-groups.label=Groups -client-updater-source-groups.tooltip=Name of groups to check. Condition evaluates to true if the entity, who creates/updates client is member of some of the specified groups. Configured groups are specified by their simple name, which must match to the name of the Keycloak group. No support for group hierarchy is used here. -client-updater-trusted-hosts.label=Trusted hosts -client-updater-trusted-hosts.tooltip=List of Hosts, which are trusted. In case that client registration/update request comes from the host/domain specified in this configuration, condition evaluates to true. You can use hostnames or IP addresses. If you use star at the beginning (for example '*.example.com' ) then whole domain example.com will be trusted. -client-updater-source-roles.label=Updating entity role -client-updater-source-roles.tooltip=The condition is checked during client registration/update requests and it evaluates to true if the entity (usually user), who is creating/updating client is member of the specified role. For reference the realm role, you can use the realm role name like 'my_realm_role' . For reference client role, you can use the client_id.role_name for example 'my_client.my_client_role' will refer to client role 'my_client_role' of client 'my_client'. - -groups=Groups - -group.add-selected.tooltip=Realm roles that can be assigned to the group. -group.assigned-roles.tooltip=Realm roles mapped to the group -group.effective-roles.tooltip=All realm role mappings. Some roles here might be inherited from a mapped composite role. -group.available-roles.tooltip=Assignable roles from this client. -group.assigned-roles-client.tooltip=Role mappings for this client. -group.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role. - -group.move.success=Group moved. -group.remove.confirm.title=Delete Group -group.remove.confirm.message=Are you sure you want to permanently delete the group {{name}}? -group.remove.success=The group has been deleted. -group.fetch.fail=Unable to fetch {{params}} -group.create.success=Group Created. -group.edit.success=Your changes have been saved to the group. -group.roles.add.success=Role mappings updated. -group.roles.remove.success=Role mappings updated. -group.default.add.error=Please select a group to add -group.default.add.success=Added default group -group.default.remove.success=Removed default group - -default-roles=Default Roles -no-realm-roles-available=No realm roles available - -users=Users -user.add-selected.tooltip=Realm roles that can be assigned to the user. -user.assigned-roles.tooltip=Realm roles mapped to the user -user.effective-roles.tooltip=All realm role mappings. Some roles here might be inherited from a mapped composite role. -user.available-roles.tooltip=Assignable roles from this client. -user.assigned-roles-client.tooltip=Role mappings for this client. -user.effective-roles-client.tooltip=Role mappings for this client. Some roles here might be inherited from a mapped composite role. - -user.roles.add.success=Role mappings updated. -user.roles.remove.success=Role mappings updated. -user.logout.all.success=Logged out user in all clients -user.logout.session.success=Logged out session -user.fedid.link.remove.confirm.title=Delete Identity Provider Link -user.fedid.link.remove.confirm.message=Are you sure you want to permanently delete the Identity Provider Link {{name}}? -user.fedid.link.remove.success=The provider link has been deleted. -user.fedid.link.add.success=Provider link has been created. -user.consent.revoke.success=Grant revoked successfully -user.consent.revoke.error=Grant couldn't be revoked -user.remove.confirm.title=Delete User -user.remove.confirm.message=Are you sure you want to permanently delete the user {{name}}? -user.unlock.success=Any temporarily locked users are now unlocked. -user.remove.success=The user has been deleted. -user.remove.error=User couldn't be deleted -user.create.success=The user has been created. -user.edit.success=Your changes have been saved to the user. -user.credential.update.success=Credentials saved! -user.credential.update.error=Error while updating the credential. See console for more information. -user.credential.remove.confirm.title=Delete credentials -user.credential.remove.confirm.message=Are you sure you want to delete these users credentials? -user.credential.remove.success=Credentials deleted! -user.credential.remove.error=Error while deleting the credential. See console for more information. -user.credential.move-top.error=Error while moving the credential to top. See console for more information. -user.credential.move-up.error=Error while moving the credential up. See console for more information. -user.credential.move-down.error=Error while moving the credential down. See console for more information. -user.credential.fetch.error=Error while loading user credentials. See console for more information. -user.credential.storage.fetch.error=Error while loading user storage credentials. See console for more information. -user.password.error.not-matching=Password and confirmation does not match. -user.password.reset.confirm.title=Reset password -user.password.reset.confirm.message=Are you sure you want to reset the password for the user? -user.password.reset.success=The password has been reset. -user.password.set.confirm.title=Set password -user.password.set.confirm.message=Are you sure you want to set a password for the user? -user.password.set.success=The password has been set. -user.credential.disable.confirm.title=Disable credentials -user.credential.disable.confirm.message=Are you sure you want to disable these users credentials? -user.credential.disable.confirm.success=Credentials disabled -user.credential.disable.confirm.error=Failed to disable credentials -user.actions-email.send.pending-changes.title=Cannot send email -user.actions-email.send.pending-changes.message=You must save your current changes before you can send an email -user.actions-email.send.confirm.title=Send Email -user.actions-email.send.confirm.message=Are you sure you want to send email to user? -user.actions-email.send.confirm.success=Email sent to user -user.actions-email.send.confirm.error=Failed to send email to user -user.storage.remove.confirm.title=Delete User storage provider -user.storage.remove.confirm.message=Are you sure you want to permanently delete the user storage provider {{name}}? -user.storage.remove.success=The provider has been deleted. -user.storage.create.success=The provider has been created. -user.storage.edit.success=The provider has been updated. -user.storage.sync.success=Sync of users finished successfully. {{status}} -user.storage.sync.error=Error during sync of users -user.storage.remove-users.success=Remove imported users finished successfully. -user.storage.remove-users.error=Error during remove -user.storage.unlink.success=Unlink of users finished successfully. -user.storage.unlink.error=Error during unlink -user.groups.fetch.all.error=Unable to fetch all group memberships {{params}} -user.groups.fetch.error=Unable to fetch {{params}} -user.groups.join.error.no-group-selected=Please select a group to add -user.groups.join.error.already-added=Group already added -user.groups.join.success=Added group membership -user.groups.leave.error.no-group-selected=Please select a group to remove -user.groups.leave.success=Removed group membership - -default.available-roles.tooltip=Realm level roles that can be assigned. -realm-default-roles=Realm Default Roles -realm-default-roles.tooltip=Realm level roles assigned to new users. -default.available-roles-client.tooltip=Roles from this client that are assignable as a default. -client-default-roles=Client Default Roles -client-default-roles.tooltip=Roles from this client assigned as a default role. -composite.available-roles.tooltip=Realm level roles that you can associate to this composite role. -composite.associated-roles.tooltip=Realm level roles associated with this composite role. -composite.available-roles-client.tooltip=Roles from this client that you can associate to this composite role. -composite.associated-roles-client.tooltip=Client roles associated with this composite role. -partial-import=Partial Import -partial-import.tooltip=Partial import allows you to import users, clients, and other resources from a previously exported json file. - -file=File -exported-json-file=Exported json file -import-from-realm=Import from realm -import-users=Import users -import-groups=Import groups -import-clients=Import clients -import-identity-providers=Import identity providers -import-realm-roles=Import realm roles -import-client-roles=Import client roles -if-resource-exists=If a resource exists -fail=Fail -skip=Skip -overwrite=Overwrite -if-resource-exists.tooltip=Specify what should be done if you try to import a resource that already exists. - -partial-export=Partial Export -partial-export.tooltip=Partial export allows you to export realm configuration, and other associated resources into a json file. -export-groups-and-roles=Export groups and roles -export-clients=Export clients - -action=Action -role-selector=Role Selector -realm-roles.tooltip=Realm roles that can be selected. - -select-a-role=Select a role -select-realm-role=Select realm role -client-roles.tooltip=Client roles that can be selected. -select-client-role=Select client role - -client-saml-endpoint=Client SAML Endpoint -add-client-scope=Add client scope - -default-client-scopes=Default Client Scopes -default-client-scopes.tooltip=Client Scopes, which will be added automatically to each created client -default-client-scopes.default=Default Client Scopes -default-client-scopes.default.tooltip=Allow to define client scopes, which will be added as default scopes to each created client -default-client-scopes.default.available=Available Client Scopes -default-client-scopes.default.available.tooltip=Client scopes, which are not yet assigned as realm default scopes or realm optional scopes -default-client-scopes.default.assigned=Assigned Default Client Scopes -default-client-scopes.default.assigned.tooltip=Client scopes, which will be added as default scopes to each created client -default-client-scopes.optional=Optional Client Scopes -default-client-scopes.optional.tooltip=Allow to define client scopes, which will be added as optional scopes to each created client -default-client-scopes.optional.available=Available Client Scopes -default-client-scopes.optional.available.tooltip=Client scopes, which are not yet assigned as realm default scopes or realm optional scopes -default-client-scopes.optional.assigned=Assigned Optional Client Scopes -default-client-scopes.optional.assigned.tooltip=Client scopes, which will be added as optional scopes to each created client - -client-scopes.setup=Setup -client-scopes.setup.tooltip=Allow to setup client scopes linked to this client -client-scopes.default=Default Client Scopes -client-scopes.default.tooltip=Default client scopes are always applied when issuing tokens for this client. Protocol mappers and role scope mappings are always applied regardless of value of used scope parameter in OIDC Authorization request -client-scopes.default.available=Available Client Scopes -client-scopes.default.available.tooltip=Client scopes, which are not yet assigned as default scopes or optional scopes -client-scopes.default.assigned=Assigned Default Client Scopes -client-scopes.default.assigned.tooltip=Client scopes, which will be used as default scopes when generating tokens for this client -client-scopes.optional=Optional Client Scopes -client-scopes.optional.tooltip=Optional client scopes are applied when issuing tokens for this client, however just in case when they are requested by scope parameter in OIDC Authorization request -client-scopes.optional.available=Available Client Scopes -client-scopes.optional.available.tooltip=Client scopes, which are not yet assigned as default scopes or optional scopes -client-scopes.optional.assigned=Assigned Optional Client Scopes -client-scopes.optional.assigned.tooltip=Client scopes, which may be used as optional scopes when generating tokens for this client - -client-scopes.evaluate=Evaluate -client-scopes.evaluate.tooltip=Allow to see all protocol mappers and role scope mapping that will be used in the tokens issued to this client. Also allow to generate example access token based on provided scope parameter -scope-parameter=Scope Parameter -scope-parameter.tooltip=You can copy/paste this value of scope parameter and use it in initial OpenID Connect Authentication Request sent from this client adapter. Default client scopes and selected optional client scopes will be used when generating token issued for this client -client-scopes.evaluate.scopes=Client Scopes -client-scopes.evaluate.scopes.tooltip=Allow to select optional client scopes, which may be used when generating token issued for this client -client-scopes.evaluate.scopes.available=Available Optional Client Scopes -client-scopes.evaluate.scopes.available.tooltip=This contains Optional Client Scopes, which can be optionally used when issuing access token for this client -client-scopes.evaluate.scopes.assigned=Selected Optional Client Scopes -client-scopes.evaluate.scopes.assigned.tooltip=Selected Optional Client Scopes, which will be used when issuing access token for this client. You can see above what value of OAuth Scope Parameter needs to be used when you want to have these optional client scopes applied when the initial OpenID Connect Authentication request will be sent from your client adapter -client-scopes.evaluate.scopes.effective=Effective Client Scopes -client-scopes.evaluate.scopes.effective.tooltip=Contains all default client scopes and selected optional scopes. All protocol mappers and role scope mappings of all those client scopes will be used when generating access token issued for your client -client-scopes.evaluate.user.tooltip=Optionally select user, for whom the example access token will be generated. If you do not select a user, example access token will not be generated during evaluation -send-evaluation-request=Evaluate -send-evaluation-request.tooltip=Click this to see all protocol mappers and role scope mappings that will be used when issuing an access token for this client. It will also optionally generate example access token in case that some user was selected - -evaluated-protocol-mappers=Effective Protocol Mappers -evaluated-protocol-mappers.tooltip=Shows all effective protocol mappers that will be used when issuing token for this client. Also contains protocol mappers of selected optional client scopes. For each protocol mapper, you can see from which client scope it is inherited from -evaluated-roles=Effective Role Scope Mappings -evaluated-roles.tooltip=Shows all effective roles scope mappings that will be used when issuing token for this client. Also contains role scope mappings of selected optional client scopes -parent-client-scope=Parent Client Scope -client-scopes.evaluate.not-granted-roles=Not Granted Roles -client-scopes.evaluate.not-granted-roles.tooltip=Client does not have scope mappings for these roles. Those roles will not be in the access token issued to this client even if the authenticated user is a member of them -client-scopes.evaluate.granted-realm-effective-roles=Granted Effective Realm Roles -client-scopes.evaluate.granted-realm-effective-roles.tooltip=Client has scope mappings for these roles. Those roles will be in the access token issued to this client if the authenticated user is a member of them -client-scopes.evaluate.granted-client-effective-roles=Granted Effective Client Roles -generated-access-token=Generated Access Token -generated-access-token.tooltip=See the example access token, which will be generated and sent to the client when selected user is authenticated. You can see claims and roles that the token will contain based on the effective protocol mappers and role scope mappings and also based on the claims/roles assigned to user himself -generated-id-token=Generated ID Token -generated-id-token.tooltip=See the example ID Token, which will be generated and sent to the client when selected user is authenticated. You can see claims and roles that the token will contain based on the effective protocol mappers and role scope mappings and also based on the claims/roles assigned to user himself -generated-user-info=Generated User Info -generated-user-info.tooltip=See the example User Info, which will be provided by the User Info Endpoint - -manage=Manage -authentication=Authentication -user-federation=User Federation -user-storage=User Storage -events=Events -realm-settings=Realm Settings -configure=Configure -select-realm=Select realm -add=Add - -client-storage=Client Storage -no-client-storage-providers-configured=No client storage providers configured -client-stores.tooltip=Keycloak can retrieve clients and their details from external stores. - -client-scope.name.tooltip=Name of the client scope. Must be unique in the realm. Name should not contain space characters as it is used as value of scope parameter -client-scope.description.tooltip=Description of the client scope -client-scope.protocol.tooltip=Which SSO protocol configuration is being supplied by this client scope -client-scope.display-on-consent-screen=Display On Consent Screen -client-scope.display-on-consent-screen.tooltip=If on, and this client scope is added to some client with consent required, the text specified by 'Consent Screen Text' will be displayed on consent screen. If off, this client scope will not be displayed on the consent screen -client-scope.consent-screen-text=Consent Screen Text -client-scope.consent-screen-text.tooltip=Text that will be shown on the consent screen when this client scope is added to some client with consent required. Defaults to name of client scope if it is not filled -client-scope.gui-order=GUI order -client-scope.gui-order.tooltip=Specify order of the provider in GUI (such as in Consent page) as integer -client-scope.include-in-token-scope=Include In Token Scope -client-scope.include-in-token-scope.tooltip=If on, the name of this client scope will be added to the access token property 'scope' as well as to the Token Introspection Endpoint response. If off, this client scope will be omitted from the token and from the Token Introspection Endpoint response. - -add-user-federation-provider=Add user federation provider -add-user-storage-provider=Add user storage provider -required-settings=Required Settings -provider-id=Provider ID -console-display-name=Console Display Name -console-display-name.tooltip=Display name of provider when linked in admin console. -priority=Priority -priority.tooltip=Priority of provider when doing a user lookup. Lowest first. -user-storage.enabled.tooltip=If provider is disabled, it will not be considered for queries and imported users will be disabled and read-only until the provider is enabled again. -sync-settings=Sync Settings -periodic-full-sync=Periodic Full Sync -periodic-full-sync.tooltip=Does periodic full synchronization of provider users to Keycloak should be enabled or not -full-sync-period=Full Sync Period -full-sync-period.tooltip=Period for full synchronization in seconds -periodic-changed-users-sync=Periodic Changed Users Sync -periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created provider users to Keycloak should be enabled or not -changed-users-sync-period=Changed Users Sync Period -changed-users-sync-period.tooltip=Period for synchronization of changed or newly created provider users in seconds -synchronize-changed-users=Synchronize changed users -synchronize-all-users=Synchronize all users -remove-imported-users=Remove imported -unlink-users=Unlink users -kerberos-realm=Kerberos Realm -kerberos-realm.tooltip=Name of kerberos realm. For example FOO.ORG -server-principal=Server Principal -server-principal.tooltip=Full name of server principal for HTTP service including server and domain name. For example HTTP/host.foo.org@FOO.ORG -keytab=KeyTab -keytab.tooltip=Location of Kerberos KeyTab file containing the credentials of server principal. For example /etc/krb5.keytab -debug=Debug -debug.tooltip=Enable/disable debug logging to standard output for Krb5LoginModule. -allow-password-authentication=Allow Password Authentication -allow-password-authentication.tooltip=Enable/disable possibility of username/password authentication against Kerberos database -edit-mode=Edit Mode -edit-mode.tooltip=READ_ONLY means that password updates are not allowed and user always authenticates with Kerberos password. UNSYNCED means that the user can change the password in the Keycloak database and this one will be used instead of the Kerberos password -ldap.edit-mode.tooltip=READ_ONLY is a read-only LDAP store. WRITABLE means data will be synced back to LDAP on demand. UNSYNCED means user data will be imported, but not synced back to LDAP. -update-profile-first-login=Update Profile First Login -update-profile-first-login.tooltip=Update profile on first login -sync-registrations=Sync Registrations -ldap.sync-registrations.tooltip=Should newly created users be created within LDAP store? Priority effects which provider is chosen to sync the new user. -import-enabled=Import Users -ldap.import-enabled.tooltip=If true, LDAP users will be imported into Keycloak DB and synced by the configured sync policies. -vendor=Vendor -ldap.vendor.tooltip=LDAP vendor (provider) -enable-usePasswordModifyExtendedOp=Enable the LDAPv3 Password Modify Extended Operation -ldap.usePasswordModifyExtendedOp.tooltip=Use the LDAPv3 Password Modify Extended Operation (RFC-3062). The password modify extended operation usually requires that LDAP user already has password in the LDAP server. So when this is used with 'Sync Registrations', it can be good to add also 'Hardcoded LDAP attribute mapper' with randomly generated initial password. -username-ldap-attribute=Username LDAP attribute -ldap-attribute-name-for-username=LDAP attribute name for username -username-ldap-attribute.tooltip=Name of LDAP attribute, which is mapped as Keycloak username. For many LDAP server vendors it can be 'uid'. For Active directory it can be 'sAMAccountName' or 'cn'. The attribute should be filled for all LDAP user records you want to import from LDAP to Keycloak. -rdn-ldap-attribute=RDN LDAP attribute -ldap-attribute-name-for-user-rdn=LDAP attribute name for user RDN -rdn-ldap-attribute.tooltip=Name of LDAP attribute, which is used as RDN (top attribute) of typical user DN. Usually it's the same as Username LDAP attribute, however it is not required. For example for Active directory, it is common to use 'cn' as RDN attribute when username attribute might be 'sAMAccountName'. -uuid-ldap-attribute=UUID LDAP attribute -ldap-attribute-name-for-uuid=LDAP attribute name for UUID -uuid-ldap-attribute.tooltip=Name of LDAP attribute, which is used as unique object identifier (UUID) for objects in LDAP. For many LDAP server vendors, it is 'entryUUID'; however some are different. For example for Active directory it should be 'objectGUID'. If your LDAP server does not support the notion of UUID, you can use any other attribute that is supposed to be unique among LDAP users in tree. For example 'uid' or 'entryDN'. -user-object-classes=User Object Classes -ldap-user-object-classes.placeholder=LDAP User Object Classes (div. by comma) -ldap-connection-url=LDAP connection URL -ldap-users-dn=LDAP Users DN -ldap-bind-dn=LDAP Bind DN -ldap-bind-credentials=LDAP Bind Credentials -ldap-filter=LDAP Filter -ldap.user-object-classes.tooltip=All values of LDAP objectClass attribute for users in LDAP divided by comma. For example: 'inetOrgPerson, organizationalPerson' . Newly created Keycloak users will be written to LDAP with all those object classes and existing LDAP user records are found just if they contain all those object classes. -connection-url=Connection URL -ldap.connection-url.tooltip=Connection URL to your LDAP server -test-connection=Test connection -users-dn=Users DN -ldap.users-dn.tooltip=Full DN of LDAP tree where your users are. This DN is the parent of LDAP users. It could be for example 'ou=users,dc=example,dc=com' assuming that your typical user will have DN like 'uid=john,ou=users,dc=example,dc=com' -authentication-type=Bind Type -ldap.authentication-type.tooltip=Type of the Authentication method used during LDAP Bind operation. It is used in most of the requests sent to the LDAP server. Currently only 'none' (anonymous LDAP authentication) or 'simple' (Bind credential + Bind password authentication) mechanisms are available -bind-dn=Bind DN -ldap.bind-dn.tooltip=DN of LDAP admin, which will be used by Keycloak to access LDAP server -bind-credential=Bind Credential -ldap.bind-credential.tooltip=Password of LDAP admin. This field is able to obtain its value from vault, use ${vault.ID} format. -test-authentication=Test authentication -custom-user-ldap-filter=Custom User LDAP Filter -ldap.custom-user-ldap-filter.tooltip=Additional LDAP Filter for filtering searched users. Leave this empty if you don't need additional filter. Make sure that it starts with '(' and ends with ')' -search-scope=Search Scope -ldap.search-scope.tooltip=For one level, the search applies only for users in the DNs specified by User DNs. For subtree, the search applies to the whole subtree. See LDAP documentation for more details -use-truststore-spi=Use Truststore SPI -ldap.use-truststore-spi.tooltip=Specifies whether LDAP connection will use the truststore SPI with the truststore configured in standalone.xml/domain.xml. 'Always' means that it will always use it. 'Never' means that it will not use it. 'Only for ldaps' means that it will use if your connection URL use ldaps. Note even if standalone.xml/domain.xml is not configured, the default Java cacerts or certificate specified by 'javax.net.ssl.trustStore' property will be used. -validate-password-policy=Validate Password Policy -connection-pooling=Connection Pooling -connection-pooling-settings=Connection Pooling Settings -connection-pooling-authentication=Connection Pooling Authentication -connection-pooling-authentication-default=none simple -connection-pooling-debug=Connection Pool Debug Level -connection-pooling-debug-default=off -connection-pooling-initsize=Connection Pool Initial Size -connection-pooling-initsize-default=1 -connection-pooling-maxsize=Connection Pool Maximum Size -connection-pooling-maxsize-default=1000 -connection-pooling-prefsize=Connection Pool Preferred Size -connection-pooling-prefsize-default=5 -connection-pooling-protocol=Connection Pool Protocol -connection-pooling-protocol-default=plain ssl -connection-pooling-timeout=Connection Pool Timeout -connection-pooling-timeout-default=300000 -ldap-connection-timeout=Connection Timeout -ldap.connection-timeout.tooltip=LDAP Connection Timeout in milliseconds -ldap-read-timeout=Read Timeout -ldap.read-timeout.tooltip=LDAP Read Timeout in milliseconds. This timeout applies for LDAP read operations -ldap.validate-password-policy.tooltip=Determines if Keycloak should validate the password with the realm password policy before updating it -ldap.connection-pooling.tooltip=Determines if Keycloak should use connection pooling for accessing LDAP server -ldap.connection-pooling.authentication.tooltip=A list of space-separated authentication types of connections that may be pooled. Valid types are "none", "simple", and "DIGEST-MD5". -ldap.connection-pooling.debug.tooltip=A string that indicates the level of debug output to produce. Valid values are "fine" (trace connection creation and removal) and "all" (all debugging information). -ldap.connection-pooling.initsize.tooltip=The string representation of an integer that represents the number of connections per connection identity to create when initially creating a connection for the identity. -ldap.connection-pooling.maxsize.tooltip=The string representation of an integer that represents the maximum number of connections per connection identity that can be maintained concurrently. -ldap.connection-pooling.prefsize.tooltip=The string representation of an integer that represents the preferred number of connections per connection identity that should be maintained concurrently. -ldap.connection-pooling.protocol.tooltip=A list of space-separated protocol types of connections that may be pooled. Valid types are "plain" and "ssl". -ldap.connection-pooling.timeout.tooltip=The string representation of an integer that represents the number of milliseconds that an idle connection may remain in the pool without being closed and removed from the pool. -ldap.pagination.tooltip=Does the LDAP server support pagination. -ldap.startTls.tooltip=Encrypts the connection to LDAP using STARTTLS, which will disable connection pooling. -kerberos-integration=Kerberos Integration -allow-kerberos-authentication=Allow Kerberos authentication -ldap.allow-kerberos-authentication.tooltip=Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server -use-kerberos-for-password-authentication=Use Kerberos For Password Authentication -ldap.use-kerberos-for-password-authentication.tooltip=Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API -batch-size=Batch Size -ldap.batch-size.tooltip=Count of LDAP users to be imported from LDAP to Keycloak within a single transaction. -ldap.periodic-full-sync.tooltip=Does periodic full synchronization of LDAP users to Keycloak should be enabled or not -ldap.periodic-changed-users-sync.tooltip=Does periodic synchronization of changed or newly created LDAP users to Keycloak should be enabled or not -ldap.changed-users-sync-period.tooltip=Period for synchronization of changed or newly created LDAP users in seconds -user-federation-mappers=User Federation Mappers -create-user-federation-mapper=Create user federation mapper -add-user-federation-mapper=Add user federation mapper -provider-name=Provider Name -no-user-federation-providers-configured=No user federation providers configured -no-user-storage-providers-configured=No user storage providers configured -add-identity-provider=Add identity provider -add-identity-provider-link=Add identity provider link -identity-provider=Identity Provider -identity-provider-user-id=Identity Provider User ID -identity-provider-user-id.tooltip=Unique ID of the user on the Identity Provider side -identity-provider-username=Identity Provider Username -identity-provider-username.tooltip=Username on the Identity Provider side -pagination=Pagination -browser-flow=Browser Flow -browser-flow.tooltip=Select the flow you want to use for browser authentication. -registration-flow=Registration Flow -registration-flow.tooltip=Select the flow you want to use for registration. -direct-grant-flow=Direct Grant Flow -direct-grant-flow.tooltip=Select the flow you want to use for direct grant authentication. -reset-credentials=Reset Credentials -reset-credentials.tooltip=Select the flow you want to use when the user has forgotten their credentials. -client-authentication=Client Authentication -client-authentication.tooltip=Select the flow you want to use for authentication of clients. -docker-auth=Docker Authentication -docker-auth.tooltip=Select the flow you want to use for authentication against a docker client. -new=New -copy=Copy -add-execution=Add execution -add-flow=Add flow -auth-type=Auth Type -requirement=Requirement -config=Config -no-executions-available=No executions available -authentication-flows=Authentication Flows -create-authenticator-config=Create authenticator config -authenticator.alias.tooltip=Name of the configuration -otp-type=OTP Type -time-based=Time Based -counter-based=Counter Based -otp-type.tooltip=totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against. -otp-hash-algorithm=OTP Hash Algorithm -otp-hash-algorithm.tooltip=What hashing algorithm should be used to generate the OTP. -number-of-digits=Number of Digits -otp.number-of-digits.tooltip=How many digits should the OTP have? -look-ahead-window=Look Ahead Window -otp.look-ahead-window.tooltip=How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? -initial-counter=Initial Counter -otp.initial-counter.tooltip=What should the initial counter value be? -otp-token-period=OTP Token Period -otp-token-period.tooltip=How many seconds should an OTP token be valid? Defaults to 30 seconds. -otp-supported-applications=Supported Applications -otp-supported-applications.tooltip=Applications that are known to work with the current OTP policy -table-of-password-policies=Table of Password Policies -add-policy.placeholder=Add policy... -policy-type=Policy Type -policy-value=Policy Value -webauthn-policy=WebAuthn Policy -webauthn-policy.tooltip=Policy for WebAuthn authentication. This one will be used by 'WebAuthn Register' required action and 'WebAuthn Authenticator' authenticator. Typical usage is, when WebAuthn will be used for the two-factor authentication. -webauthn-policy-passwordless=WebAuthn Passwordless Policy -webauthn-policy-passwordless.tooltip=Policy for passwordless WebAuthn authentication. This one will be used by 'Webauthn Register Passwordless' required action and 'WebAuthn Passwordless Authenticator' authenticator. Typical usage is, when WebAuthn will be used as first-factor authentication. Having both 'WebAuthn Policy' and 'WebAuthn Passwordless Policy' allows to use WebAuthn as both first factor and second factor authenticator in the same realm. -webauthn-rp-entity-name=Relying Party Entity Name -webauthn-rp-entity-name.tooltip=Human-readable server name as WebAuthn Relying Party -webauthn-signature-algorithms=Signature Algorithms -webauthn-signature-algorithms.tooltip=What signature algorithms should be used for Authentication Assertion. -webauthn-rp-id=Relying Party ID -webauthn-rp-id.tooltip=This is ID as WebAuthn Relying Party. It must be origin's effective domain. -webauthn-attestation-conveyance-preference=Attestation Conveyance Preference -webauthn-attestation-conveyance-preference.tooltip=Communicates to an authenticator the preference of how to generate an attestation statement. -webauthn-authenticator-attachment=Authenticator Attachment -webauthn-authenticator-attachment.tooltip=Communicates to an authenticator an acceptable attachment pattern. -webauthn-require-resident-key=Require Resident Key -webauthn-require-resident-key.tooltip=It tells an authenticator create a public key credential as Resident Key or not. -webauthn-user-verification-requirement=User Verification Requirement -webauthn-user-verification-requirement.tooltip=Communicates to an authenticator to confirm actually verifying a user. -webauthn-create-timeout=Timeout -webauthn-create-timeout.tooltip=Timeout value for creating user's public key credential in seconds. if set to 0, this timeout option is not adapted. -webauthn-avoid-same-authenticator-register=Avoid Same Authenticator Registration -webauthn-avoid-same-authenticator-register.tooltip=avoid registering the authenticator that has already been registered. -webauthn-acceptable-aaguids=Acceptable AAGUIDs -webauthn-acceptable-aaguids.tooltip=The list of AAGUID of which an authenticator can be registered. -manage-webauthn-authenticator=Manage WebAuthn Authenticator -public-key-credential-id=Public Key Credential ID -public-key-credential-aaguid=Public Key Credential AAGUID -public-key-credential-label=Public Key Credential Label -ciba-policy=CIBA Policy -ciba-backchannel-tokendelivery-mode=Backchannel Token Delivery Mode -ciba-backchannel-tokendelivery-mode.tooltip=Specifies how the CD(Consumption Device) gets the authentication result and related tokens. -ciba-expires-in=Expires In -ciba-expires-in.tooltip=The expiration time of the "auth_req_id" in seconds since the authentication request was received. -ciba-interval=Interval -ciba-interval.tooltip=The minimum amount of time in seconds that the CD(Consumption Device) must wait between polling requests to the token endpoint. -ciba-auth-requested-user-hint=Authentication Requested User Hint -ciba-auth-requested-user-hint.tooltip=The way of identifying the end-user for whom authentication is being requested. -admin-events=Admin Events -admin-events.tooltip=Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config. -login-events=Login Events -filter=Filter -update=Update -reset=Reset -operation-types=Operation Types -resource-types=Resource Types -select-operations.placeholder=Select operations... -select-resource-types.placeholder=Select resource types... -resource-path=Resource Path -resource-path.tooltip=Filter by resource path. Supports wildcard '*' (for example 'users/*'). -date-(from)=Date (From) -date-(to)=Date (To) -authentication-details=Authentication Details -ip-address=IP Address -time=Time -operation-type=Operation Type -resource-type=Resource Type -auth=Auth -representation=Representation -register=Register -required-action=Required Action -default-action=Default Action -auth.default-action.tooltip=If enabled, any new user will have this required action assigned to it. -no-required-actions-configured=No required actions configured -defaults-to-id=Defaults to id -flows=Flows -bindings=Bindings -client-flow-bindings=Authentication Flow Overrides -client-flow-bindings.tooltip=Override realm authentication flow bindings. -required-actions=Required Actions -password-policy=Password Policy -otp-policy=OTP Policy -user-groups=User Groups -default-groups=Default Groups -groups.default-groups.tooltip=Set of groups that new users will automatically join. -cut=Cut -paste=Paste -create-group=Create group -create-authenticator-execution=Create Authenticator Execution -edit-flow=Edit Flow -create-form-action-execution=Create Form Action Execution -create-top-level-form=Create Top Level Form -flow.alias.tooltip=Specifies display name for the flow. -top-level-flow-type=Top Level Flow Type -flow.generic=generic -flow.client=client -top-level-flow-type.tooltip=What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else -create-execution-flow=Create Execution Flow -flow-type=Flow Type -flow.form.type=form -flow.generic.type=generic -flow-type.tooltip=What kind of form is it -form-provider=Form Provider -default-groups.tooltip=Newly created or registered users will automatically be added to these groups -select-a-type.placeholder=select a type -available-groups=Available Groups -available-groups.tooltip=Select a group you want to add as a default. -value=Value -table-of-group-members=Table of group members -table-of-role-members=Table of role members -last-name=Last Name -first-name=First Name -email=Email -toggle-navigation=Toggle navigation -manage-account=Manage account -sign-out=Sign Out -server-info=Server Info -resource-not-found=Resource not found... -resource-not-found.instruction=We could not find the resource you are looking for. Please make sure the URL you entered is correct. -go-to-the-home-page=Go to the home page » -page-not-found=Page not found... -page-not-found.instruction=We could not find the page you are looking for. Please make sure the URL you entered is correct. -events.tooltip=Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config. -select-event-types.placeholder=Select event types... -events-config.tooltip=Displays configuration options to enable persistence of user and admin events. -select-an-action.placeholder=Select an action... -event-listeners.tooltip=Configure what listeners receive events for the realm. -login.save-events.tooltip=If enabled, login events are saved to the database, which makes events available to the admin and account management consoles. -clear-events.tooltip=Deletes all events in the database. -events.expiration.tooltip=Sets the expiration for events. Expired events are periodically deleted from the database. -admin-events-settings=Admin Events Settings -save-events=Save Events -admin.save-events.tooltip=If enabled, admin events are saved to the database, which makes events available to the admin console. -saved-types.tooltip=Configure what event types are saved. -include-representation=Include Representation -include-representation.tooltip=Include JSON representation for create and update requests. -clear-admin-events.tooltip=Deletes all admin events in the database. -server-version=Server Version -server-profile=Server Profile -server-disabled=Disabled Features -server-disabled.tooltip=Features that are not currently enabled. Some features are not enabled by default. This applies to all preview and experimental features. -server-preview=Preview Features -server-preview.tooltip=Preview features are not supported in production use and may be significantly changed or removed in the future. -server-experimental=Experimental Features -server-experimental.tooltip=Experimental features, which may not be fully functional. Never use experimental features in production. -info=Info -providers=Providers -server-time=Server Time -server-uptime=Server Uptime -profile=Profile -memory=Memory -total-memory=Total Memory -free-memory=Free Memory -used-memory=Used Memory -system=System -current-working-directory=Current Working Directory -java-version=Java Version -java-vendor=Java Vendor -java-runtime=Java Runtime -java-vm=Java VM -java-vm-version=Java VM Version -java-home=Java Home -user-name=User Name -user-timezone=User Timezone -user-locale=User Locale -system-encoding=System Encoding -operating-system=Operating System -os-architecture=OS Architecture -spi=SPI -granted-client-scopes=Granted Client Scopes -additional-grants=Additional Grants -consent-created-date=Created -consent-last-updated-date=Last updated -revoke=Revoke -new-password=New Password -password-confirmation=Password Confirmation -reset-password=Reset Password -set-password=Set Password -credentials.temporary.tooltip=If enabled, the user must change the password on next login -remove-totp=Remove OTP -credentials.remove-totp.tooltip=Remove one time password generator for user. -reset-actions=Reset Actions -credentials.reset-actions.tooltip=Set of actions to execute when sending the user a Reset Actions Email. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure OTP' requires setup of a mobile password generator. -reset-actions-email=Reset Actions Email -send-email=Send email -credentials.reset-actions-email.tooltip=Sends an email to user with an embedded link. Clicking the link enables the user to execute the reset actions without first logging in. For example, set the action to update password, click this button, and the user can change the password without logging in. -add-user=Add user -created-at=Created At -user-enabled=User Enabled -user-enabled.tooltip=A disabled user cannot login. -user-temporarily-locked=User Temporarily Locked -user-temporarily-locked.tooltip=The user may be locked due to multiple failed attempts to log in. -unlock-user=Unlock user -federation-link=Federation Link -email-verified=Email Verified -email-verified.tooltip=Has the user's email been verified? -groups-joining=Groups -groups-joining.tooltip=Groups the user will be joining. To add a group, search for any existing one and select it. -groups-joining-select.placeholder=Select existing group -groups-joining-no-selected=No group selected -groups-joining-path=Path -required-user-actions=Required User Actions -required-user-actions.tooltip=Require an action when the user logs in. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure OTP' requires setup of a mobile password generator. -locale=Locale -select-one.placeholder=Select one... -impersonate=Impersonate -impersonate-user=Impersonate user -impersonate-user.tooltip=Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user. -identity-provider-alias=Identity Provider Alias -provider-user-id=Provider User ID -provider-username=Provider Username -no-identity-provider-links-available=No identity provider links available -group-membership=Group Membership -leave=Leave -group-membership.tooltip=Groups where the user has membership. To leave a group, select it and click Leave. -membership.available-groups.tooltip=Groups a user can join. Select a group and click Join. -table-of-realm-users=Table of Realm Users -view-all-users=View all users -view-all-groups=View all groups -view-all-roles=View all roles -unlock-users=Unlock users -no-users-available=No users available -users.instruction=Please enter a search, or click on view all users -clients.instruction=Please enter a search -consents=Consents -started=Started -logout-all-sessions=Log out all sessions -logout=Logout -new-name=New Name -new-description=New Description -ok=Ok -attributes=Attributes -role-mappings=Role Mappings -members=Members -details=Details -identity-provider-links=Identity Provider Links -register-required-action=Register required action -gender=Gender -address=Address -phone=Phone -profile-url=Profile URL -picture-url=Picture URL -website=Website -import-keys-and-cert=Import keys and cert -import-keys-and-cert.tooltip=Upload the client's key pair and cert. -upload-keys=Upload Keys -download-keys-and-cert=Download keys and cert -no-value-assigned.placeholder=No value assigned -remove=Remove -no-group-members=No group members -no-role-members=No role members -temporary=Temporary -join=Join -event-type=Event Type -events-config=Events Config -event-listeners=Event Listeners -login-events-settings=Login Events Settings -clear-events=Clear events -saved-types=Saved Types -clear-admin-events=Clear admin events -clear-changes=Clear changes -error=Error -# Authz -# Authz Common -authz-authorization=Authorization -authz-owner=Owner -authz-uri=URI -authz-uris=URIS -authz-scopes=Scopes -authz-resource=Resource -authz-resource-type=Resource Type -authz-resources=Resources -authz-scope=Scope -authz-authz-scopes=Authorization Scopes -authz-policies=Policies -authz-policy=Policy -authz-permissions=Permissions -authz-users=Users in Role -authz-evaluate=Evaluate -authz-icon-uri=Icon URI -authz-icon-uri.tooltip=An URI pointing to an icon. -authz-select-scope=Select a scope -authz-select-resource=Select a resource -authz-associated-policies=Associated Policies -authz-any-resource=Any resource -authz-any-scope=Any scope -authz-any-role=Any role -authz-policy-evaluation=Policy Evaluation -authz-select-user=Select a user -authz-select-client=Select a client -authz-entitlements=Entitlements -authz-no-resources=No resources -authz-result=Result -authz-authorization-services-enabled=Authorization Enabled -authz-authorization-services-enabled.tooltip=Enable/Disable fine-grained authorization support for a client -authz-required=Required -authz-show-details=Show Details -authz-hide-details=Hide Details -authz-associated-permissions=Associated Permissions -authz-no-permission-associated=No permissions associated -# Authz Settings -authz-import-config.tooltip=Import a JSON file containing authorization settings for this resource server. -authz-policy-enforcement-mode=Policy Enforcement Mode -authz-policy-enforcement-mode.tooltip=The policy enforcement mode dictates how policies are enforced when evaluating authorization requests. 'Enforcing' means requests are denied by default even when there is no policy associated with a given resource. 'Permissive' means requests are allowed even when there is no policy associated with a given resource. 'Disabled' completely disables the evaluation of policies and allows access to any resource. -authz-policy-enforcement-mode-enforcing=Enforcing -authz-policy-enforcement-mode-permissive=Permissive -authz-policy-enforcement-mode-disabled=Disabled -authz-remote-resource-management=Remote Resource Management -authz-remote-resource-management.tooltip=Should resources be managed remotely by the resource server? If false, resources can be managed only from this admin console. -authz-export-settings=Export Settings -authz-export-settings.tooltip=Export and download all authorization settings for this resource server. -authz-server-decision-strategy.tooltip=The decision strategy dictates how permissions are evaluated and how a final decision is obtained. 'Affirmative' means that at least one permission must evaluate to a positive decision in order to grant access to a resource and its scopes. 'Unanimous' means that all permissions must evaluate to a positive decision in order for the final decision to be also positive. -# Authz Resource List -authz-no-resources-available=No resources available. -authz-no-scopes-assigned=No scopes assigned. -authz-no-type-defined=No type defined. -authz-no-uri-defined=No URI defined. -authz-no-permission-assigned=No permission assigned. -authz-no-policy-assigned=No policy assigned. -authz-create-permission=Create Permission -# Authz Resource Detail -authz-add-resource=Add Resource -authz-resource-name.tooltip=A unique name for this resource. The name can be used to uniquely identify a resource, useful when querying for a specific resource. -authz-resource-owner.tooltip=The owner of this resource. -authz-resource-type.tooltip=The type of this resource. It can be used to group different resource instances with the same type. -authz-resource-uri.tooltip=Set of URIs which are protected by resource. -authz-resource-scopes.tooltip=The scopes associated with this resource. -authz-resource-attributes=Resource Attributes -authz-resource-attributes.tooltip=The attributes associated wth the resource. -authz-resource-user-managed-access-enabled=User-Managed Access Enabled -authz-resource-user-managed-access-enabled.tooltip=If enabled, the access to this resource can be managed by the resource owner. - -# Authz Scope List -authz-add-scope=Add Scope -authz-no-scopes-available=No scopes available. -# Authz Scope Detail -authz-scope-name.tooltip=A unique name for this scope. The name can be used to uniquely identify a scope, useful when querying for a specific scope. -# Authz Policy List -authz-all-types=All types -authz-create-policy=Create Policy -authz-no-policies-available=No policies available. -# Authz Policy Detail -authz-policy-name.tooltip=The name of this policy. -authz-policy-description.tooltip=A description for this policy. -authz-policy-logic=Logic -authz-policy-logic-positive=Positive -authz-policy-logic-negative=Negative -authz-policy-logic.tooltip=The logic dictates how the policy decision should be made. If 'Positive', the resulting effect (permit or deny) obtained during the evaluation of this policy will be used to perform a decision. If 'Negative', the resulting effect will be negated, in other words, a permit becomes a deny and vice-versa. -authz-policy-apply-policy=Apply Policy -authz-policy-apply-policy.tooltip=Specifies all the policies that must be applied to the scopes defined by this policy or permission. -authz-policy-decision-strategy=Decision Strategy -authz-policy-decision-strategy.tooltip=The decision strategy dictates how the policies associated with a given permission are evaluated and how a final decision is obtained. 'Affirmative' means that at least one policy must evaluate to a positive decision in order for the final decision to be also positive. 'Unanimous' means that all policies must evaluate to a positive decision in order for the final decision to be also positive. 'Consensus' means that the number of positive decisions must be greater than the number of negative decisions. If the number of positive and negative is the same, the final decision will be negative. -authz-policy-decision-strategy-affirmative=Affirmative -authz-policy-decision-strategy-unanimous=Unanimous -authz-policy-decision-strategy-consensus=Consensus -authz-select-a-policy=Select existing policy -authz-no-policies-assigned=No policies assigned. -# Authz Role Policy Detail -authz-add-role-policy=Add Role Policy -authz-no-roles-assigned=No roles assigned. -authz-policy-role-realm-roles.tooltip=Specifies the *realm* roles allowed by this policy. -authz-policy-role-clients.tooltip=Selects a client in order to filter the client roles that can be applied to this policy. -authz-policy-role-client-roles.tooltip=Specifies the client roles allowed by this policy. -# Authz User Policy Detail -authz-add-user-policy=Add User Policy -authz-no-users-assigned=No users assigned. -authz-policy-user-users.tooltip=Specifies which user(s) are allowed by this policy. -# Authz Client Policy Detail -authz-add-client-policy=Add Client Policy -authz-no-clients-assigned=No clients assigned. -authz-policy-client-clients.tooltip=Specifies which client(s) are allowed by this policy. -# Authz Time Policy Detail -authz-add-time-policy=Add Time Policy -authz-policy-time-not-before.tooltip=Defines the time before which the policy MUST NOT be granted. Only granted if current date/time is after or equal to this value. -authz-policy-time-not-on-after=Not On or After -authz-policy-time-not-on-after.tooltip=Defines the time after which the policy MUST NOT be granted. Only granted if current date/time is before or equal to this value. -authz-policy-time-day-month=Day of Month -authz-policy-time-day-month.tooltip=Defines the day of month when the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current day of month is between or equal to the two values you provided. -authz-policy-time-month=Month -authz-policy-time-month.tooltip=Defines the month which the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current month is between or equal to the two values you provided. -authz-policy-time-year=Year -authz-policy-time-year.tooltip=Defines the year when the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current year is between or equal to the two values you provided. -authz-policy-time-hour=Hour -authz-policy-time-hour.tooltip=Defines the hour when the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current hour is between or equal to the two values you provided. -authz-policy-time-minute=Minute -authz-policy-time-minute.tooltip=Defines the minute when the policy MUST be granted. You can also provide a range by filling the second field. In this case, permission is granted only if current minute is between or equal to the two values you provided. -# Authz JS Policy Detail -authz-add-js-policy=Add JavaScript Policy -authz-policy-js-code=Code -authz-policy-js-code.tooltip=The JavaScript code providing the conditions for this policy. -# Authz Aggregated Policy Detail -authz-aggregated=Aggregated -authz-add-aggregated-policy=Add Aggregated Policy -# Authz Group Policy Detail -authz-add-group-policy=Add Group Policy -authz-no-groups-assigned=No groups assigned. -authz-policy-group-claim=Groups Claim -authz-policy-group-claim.tooltip=If defined, the policy will fetch user's groups from the given claim within an access token or ID token representing the identity asking permissions. If not defined, user's groups are obtained from your realm configuration. -authz-policy-group-groups.tooltip=Specifies the groups allowed by this policy. -# Authz Client Scope Policy Detail -authz-add-client-scope-policy=Add Client Scope Policy -authz-no-client-scopes-assigned=No client scopes assigned. -authz-policy-client-scope-client-scopes.tooltip=Specifies which client scope(s) are allowed by this policy. -select-a-client-scope=Select a client scope - -# Authz Permission List -authz-no-permissions-available=No permissions available. - -# Authz Permission Detail -authz-permission-name.tooltip=The name of this permission. -authz-permission-description.tooltip=A description for this permission. - -# Authz Resource Permission Detail -authz-add-resource-permission=Add Resource Permission -authz-permission-resource-apply-to-resource-type=Apply to Resource Type -authz-permission-resource-apply-to-resource-type.tooltip=Specifies if this permission should be applied to all resources with a given type. In this case, this permission will be evaluated for all instances of a given resource type. -authz-permission-resource-resource.tooltip=Specifies that this permission must be applied to a specific resource instance. -authz-permission-resource-type.tooltip=Specifies that this permission must be applied to all resources instances of a given type. - -# Authz Scope Permission Detail -authz-add-scope-permission=Add Scope Permission -authz-permission-scope-resource.tooltip=Restrict the scopes to those associated with the selected resource. If not selected all scopes would be available. -authz-permission-scope-scope.tooltip=Specifies that this permission must be applied to one or more scopes. - -# Authz Evaluation -authz-evaluation-identity-information=Identity Information -authz-evaluation-identity-information.tooltip=The available options to configure the identity information that will be used when evaluating policies. -authz-evaluation-client.tooltip=Select the client making this authorization request. If not provided, authorization requests would be done based on the client you are in. -authz-evaluation-user.tooltip=Select a user whose identity is going to be used to query permissions from the server. -authz-evaluation-role.tooltip=Select the roles you want to associate with the selected user. -authz-evaluation-new=New Evaluation -authz-evaluation-re-evaluate=Re-Evaluate -authz-evaluation-previous=Previous Evaluation -authz-evaluation-contextual-info=Contextual Information -authz-evaluation-contextual-info.tooltip=The available options to configure any contextual information that will be used when evaluating policies. -authz-evaluation-contextual-attributes=Contextual Attributes -authz-evaluation-contextual-attributes.tooltip=Any attribute provided by a running environment or execution context. -authz-evaluation-permissions.tooltip=The available options to configure the permissions to which policies will be applied. -authz-evaluation-evaluate=Evaluate -authz-evaluation-any-resource-with-scopes=Any resource with scope(s) -authz-evaluation-no-result=Could not obtain any result for the given authorization request. Check if the provided resource(s) or scope(s) are associated with any policy. -authz-evaluation-no-policies-resource=No policies were found for this resource. -authz-evaluation-result.tooltip=The overall result for this permission request. -authz-evaluation-scopes.tooltip=The list of allowed scopes. -authz-evaluation-policies.tooltip=Details about which policies were evaluated and their decisions. -authz-evaluation-authorization-data=Response -authz-evaluation-authorization-data.tooltip=Represents a token carrying authorization data as a result of the processing of an authorization request. This representation is basically what Keycloak issues to clients asking for permissions. Check the 'authorization' claim for the permissions that were granted based on the current authorization request. -authz-show-authorization-data=Show Authorization Data - -keys=Keys -status=Status -keystore=Keystore -keystores=Keystores -add-keystore=Add Keystore -add-keystore.placeholder=Add keystore... -view=View -active=Active -passive=Passive -disabled=Disabled -algorithm=Algorithm -providerHelpText=Provider description - -Sunday=Sunday -Monday=Monday -Tuesday=Tuesday -Wednesday=Wednesday -Thursday=Thursday -Friday=Friday -Saturday=Saturday - -user-storage-cache-policy=Cache Settings -userStorage.cachePolicy=Cache Policy -userStorage.cachePolicy.option.DEFAULT=DEFAULT -userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -userStorage.cachePolicy.tooltip=Cache Policy for this storage provider. 'DEFAULT' is whatever the default settings are for the global cache. 'EVICT_DAILY' is a time of day every day that the cache will be invalidated. 'EVICT_WEEKLY' is a day of the week and time the cache will be invalidated. 'MAX-LIFESPAN' is the time in milliseconds that will be the lifespan of a cache entry. -userStorage.cachePolicy.evictionDay=Eviction Day -userStorage.cachePolicy.evictionDay.tooltip=Day of the week the entry will become invalid on -userStorage.cachePolicy.evictionHour=Eviction Hour -userStorage.cachePolicy.evictionHour.tooltip=Hour of day the entry will become invalid on. -userStorage.cachePolicy.evictionMinute=Eviction Minute -userStorage.cachePolicy.evictionMinute.tooltip=Minute of day the entry will become invalid on. -userStorage.cachePolicy.maxLifespan=Max Lifespan -userStorage.cachePolicy.maxLifespan.tooltip=Max lifespan of cache entry in milliseconds. -user-origin-link=Storage Origin -user-origin.tooltip=UserStorageProvider the user was loaded from -user-link.tooltip=UserStorageProvider this locally stored user was imported from. -client-origin-link=Storage Origin -client-origin.tooltip=Provider the client was loaded from - -client-storage-cache-policy=Cache Settings -clientStorage.cachePolicy=Cache Policy -clientStorage.cachePolicy.option.DEFAULT=DEFAULT -clientStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -clientStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -clientStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -clientStorage.cachePolicy.option.NO_CACHE=NO_CACHE -clientStorage.cachePolicy.tooltip=Cache Policy for this storage provider. 'DEFAULT' is whatever the default settings are for the global cache. 'EVICT_DAILY' is a time of day every day that the cache will be invalidated. 'EVICT_WEEKLY' is a day of the week and time the cache will be invalidated. 'MAX-LIFESPAN' is the time in milliseconds that will be the lifespan of a cache entry. -clientStorage.cachePolicy.evictionDay=Eviction Day -clientStorage.cachePolicy.evictionDay.tooltip=Day of the week the entry will become invalid on -clientStorage.cachePolicy.evictionHour=Eviction Hour -clientStorage.cachePolicy.evictionHour.tooltip=Hour of day the entry will become invalid on. -clientStorage.cachePolicy.evictionMinute=Eviction Minute -clientStorage.cachePolicy.evictionMinute.tooltip=Minute of day the entry will become invalid on. -clientStorage.cachePolicy.maxLifespan=Max Lifespan -clientStorage.cachePolicy.maxLifespan.tooltip=Max lifespan of cache entry in milliseconds. - -client-storage-list-no-entries=Keycloak can federate external client databases. By default, we support Openshift OAuth clients and service accounts. To get started, select a provider from the dropdown below: - - -disable=Disable -disableable-credential-types=Disableable Types -credentials.disableable.tooltip=List of credential types that you can disable -disable-credential-types=Disable Credential Types -credentials.disable.tooltip=Click button to disable selected credential types -credential-types=Credential Types -manage-user-password=Manage Password -supported-user-storage-credential-types=Supported User Storage Credential Types -supported-user-storage-credential-types.tooltip=Credential types, which are provided by User Storage Provider and which are configured for this user. Validation and eventually update of the credentials of those types can be delegated to the User Storage Provider based on the configuration and implementation of the particular provider. -provided-by=Provided By -manage-credentials=Manage Credentials -manage-credentials.tooltip=Credentials, which are not provided by the user storage. They are saved in the local database. -disable-credentials=Disable Credentials -credential-reset-actions=Credential Reset -credential-reset-actions-timeout=Expires In -credential-reset-actions-timeout.tooltip=Maximum time before the action permit expires. -ldap-mappers=LDAP Mappers -create-ldap-mapper=Create LDAP mapper -map-role-mgmt-scope-description=Policies that decide if an administrator can map this role to a user or group -manage-authz-users-scope-description=Policies that decide if an administrator can manage all users in the realm -view-authz-users-scope-description=Policies that decide if an administrator can view all users in realm -permissions-enabled-role=Permissions Enabled -permissions-enabled-role.tooltip=Determines if fine grained permissions are enabled for managing this role. Disabling will delete all current permissions that have been set up. -manage-permissions-role.tooltip=Fine grained permissions for managing roles. For example, you can define different policies for who is allowed to map a role. -lookup=Lookup -manage-permissions-users.tooltip=Fine grained permissions for managing all users in realm. You can define different policies for who is allowed to manage users in the realm. -permissions-enabled-users=Permissions Enabled -permissions-enabled-users.tooltip=Determines if fined grain permissions are enabled for managing users. Disabling will delete all current permissions that have been set up. -manage-permissions-client.tooltip=Fine grained permissions for administrators that want to manage this client or apply roles defined by this client. -manage-permissions-group.tooltip=Fine grained permissions for administrators that want to manage this group or the members of this group. -manage-authz-group-scope-description=Policies that decide if an administrator can manage this group -view-authz-group-scope-description=Policies that decide if an administrator can view this group -view-members-authz-group-scope-description=Policies that decide if an administrator can view the members of this group -token-exchange-authz-client-scope-description=Policies that decide which clients are allowed exchange tokens for a token that is targeted to this client. -token-exchange-authz-idp-scope-description=Policies that decide which clients are allowed exchange tokens for an external token minted by this identity provider. -manage-authz-client-scope-description=Policies that decide if an administrator can manage this client -configure-authz-client-scope-description=Reduced management permissions for administrator. Cannot set scope, template, or protocol mappers. -view-authz-client-scope-description=Policies that decide if an administrator can view this client -map-roles-authz-client-scope-description=Policies that decide if an administrator can map roles defined by this client -map-roles-client-scope-authz-client-scope-description=Policies that decide if an administrator can apply roles defined by this client to the client scope of another client -map-roles-composite-authz-client-scope-description=Policies that decide if an administrator can apply roles defined by this client as a composite to another role -map-role-authz-role-scope-description=Policies that decide if an administrator can map this role to a user or group -map-role-client-scope-authz-role-scope-description=Policies that decide if an administrator can apply this role to the client scope of a client -map-role-composite-authz-role-scope-description=Policies that decide if an administrator can apply this role as a composite to another role -manage-group-membership-authz-users-scope-description=Policies that decide if an administrator can manage group membership for all users in the realm. This is used in conjunction with specific group policy -impersonate-authz-users-scope-description=Policies that decide if administrator can impersonate other users -map-roles-authz-users-scope-description=Policies that decide if administrator can map roles for all users -user-impersonated-authz-users-scope-description=Policies that decide which users can be impersonated. These policies are applied to the user being impersonated. -manage-membership-authz-group-scope-description=Policies that decide if an administrator can add or remove users from this group -manage-members-authz-group-scope-description=Policies that decide if an administrator can manage the members of this group - -# KEYCLOAK-6771 Certificate Bound Token -# https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3 -advanced-client-settings=Advanced Settings -advanced-client-settings.tooltip=Expand this section to configure advanced settings of this client -tls-client-certificate-bound-access-tokens=OAuth 2.0 Mutual TLS Certificate Bound Access Tokens Enabled -tls-client-certificate-bound-access-tokens.tooltip=This enables support for OAuth 2.0 Mutual TLS Certificate Bound Access Tokens, which means that keycloak bind an access token and a refresh token with a X.509 certificate of a token requesting client exchanged in mutual TLS between keycloak's Token Endpoint and this client. These tokens can be treated as Holder-of-Key tokens instead of bearer tokens. -subjectdn=Subject DN -subjectdn-tooltip=A regular expression for validating Subject DN in the Client Certificate. Use "(.*?)(?:$)" to match all kind of expressions. - -pkce-code-challenge-method=Proof Key for Code Exchange Code Challenge Method -pkce-code-challenge-method.tooltip=Choose which code challenge method for PKCE is used. If not specified, keycloak does not applies PKCE to a client unless the client sends an authorization request with appropriate code challenge and code exchange method. - -use-idtoken-as-detached-signature=Use ID Token as a Detached Signature -use-idtoken-as-detached-signature.tooltip=This makes ID token returned from Authorization Endpoint in OIDC Hybrid flow use as a detached signature defined in FAPI 1.0 Advanced Security Profile. Therefore, this ID token does not include an authenticated user's information. - -key-not-allowed-here=Key '{{character}}' is not allowed here. - -# KEYCLOAK-10927 Implement LDAPv3 Password Modify Extended Operation -advanced-ldap-settings=Advanced Settings -ldap-query-supported-extensions=Query Supported Extensions -ldap-query-supported-extensions.tooltip=This will query LDAP server for supported extensions, controls and features. Some advanced settings of the LDAP provider will be then automatically configured based on the capabilities/extensions/features supported by LDAP server. For example if LDAPv3 Password Modify extension is supported by LDAP server, corresponding switch will be enabled for LDAP provider. - -notifications.info.header=Info! -notifications.success.header=Success! -notifications.error.header=Error! -notifications.warn.header=Warning! - -dialogs.delete.title=Delete {{type}} -dialogs.delete.message=Are you sure you want to permanently delete the {{type}} {{name}}? -dialogs.delete.confirm=Delete -dialogs.cancel=Cancel -dialogs.ok=Ok - -user.profile.attribute=Attribute -user.profile.attribute.name=Name -user.profile.attribute.name.tooltip=The name of the attribute. -user.profile.attribute.required=Required -user.profile.attribute.required.tooltip=Set the attribute as required. If enabled, the attribute must be set by users and administrators. Otherwise, the attribute is optional. -user.profile.attribute.permission=Permission -user.profile.attribute.canUserView=Can user view? -user.profile.attribute.canUserView.tooltip=If enabled, users can view the attribute. Otherwise, users don't have access to the attribute. -user.profile.attribute.canUserEdit=Can user edit? -user.profile.attribute.canUserEdit.tooltip=If enabled, users can view and edit the attribute. Otherwise, users don't have access to write to the attribute. -user.profile.attribute.canAdminView=Can admin view? -user.profile.attribute.canAdminView.tooltip=If enabled, administrators can view the attribute. Otherwise, administrators don't have access to the attribute. -user.profile.attribute.canAdminEdit=Can admin edit? -user.profile.attribute.canAdminEdit.tooltip=If enabled, administrators can view and edit the attribute. Otherwise, administrators don't have access to write to the attribute. -user.profile.attribute.validation=Validation -user.profile.attribute.validation.add.validator=Add Validator -user.profile.attribute.validation.add.validator.tooltip=Select a validator to enforce specific constraints to the attribute value. -user.profile.attribute.validation.no.validators=No validators. -user.profile.attribute.annotation=Annotation \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_es.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_es.properties deleted file mode 100644 index 3f67a039c..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_es.properties +++ /dev/null @@ -1,479 +0,0 @@ -# Common messages -enabled=Habilitado -name=Nombre -save=Guardar -cancel=Cancelar -onText=SI -offText=NO -client=Cliente -clients=Clientes -clear=Limpiar -selectOne=Selecciona uno... - -true=S\u00ED -false=No - - -# Realm settings -realm-detail.enabled.tooltip=Los usuarios y clientes solo pueden acceder a un dominio si est\u00E1 habilitado -registrationAllowed=Registro de usuario -registrationAllowed.tooltip=Habilitar/deshabilitar la p\u00E1gina de registro. Un enlace para el registro se mostrar\u00E1 tambi\u00E9n en la p\u00E1gina de inicio de sesi\u00F3n. -registrationEmailAsUsername=Email como nombre de usuario -registrationEmailAsUsername.tooltip=Si est\u00E1 habilitado el nombre de usuario queda oculto del formulario de registro y el email se usa como nombre de usuario para los nuevos usuarios. -editUsernameAllowed=Editar nombre de usuario -editUsernameAllowed.tooltip=Si est\u00E1 habilitado, el nombre de usuario es editable, en otro caso es de solo lectura. -resetPasswordAllowed=Olvido contrase\u00F1a -resetPasswordAllowed.tooltip=Muestra un enlace en la p\u00E1gina de inicio de sesi\u00F3n para que el usuario haga clic cuando ha olvidado sus credenciales. -rememberMe=Seguir conectado -rememberMe.tooltip=Muestra la casilla de selecci\u00F3n en la p\u00E1gina de inicio de sesi\u00F3n para permitir al usuario permanecer conectado entre reinicios del navegador hasta que la sesi\u00F3n expire. -verifyEmail=Verificar email -verifyEmail.tooltip=Forzar al usuario a verificar su direcci\u00F3n de email la primera vez que inicie sesi\u00F3n. -sslRequired=Solicitar SSL -sslRequired.option.all=todas las peticiones -sslRequired.option.external=peticiones externas -sslRequired.option.none=ninguna -sslRequired.tooltip=\u00BFEs HTTP obligatorio? ''ninguna'' significa que HTTPS no es obligatorio para ninguna direcic\u00F3n IP de cliente, ''peticiones externas'' indica que localhost y las direcciones IP privadas pueden acceder sin HTTPS, ''todas las peticiones'' significa que HTTPS es obligatorio para todas las direcciones IP. -publicKey=Clave p\u00FAblica -gen-new-keys=Generar nuevas claves -certificate=Certificado -host=Host -smtp-host=Host SMTP -port=Puerto -smtp-port=Puerto SMTP (por defecto 25) -from=De -sender-email-addr=Email del emisor -enable-ssl=Habilitar SSL -enable-start-tls=Habilitar StartTLS -enable-auth=Habilitar autenticaci\u00F3n -username=Usuario -login-username=Usuario -password=Contrase\u00F1a -login-password=Contrase\u00F1a -login-theme=Tema de inicio de sesi\u00F3n -select-one=Selecciona uno... -login-theme.tooltip=Selecciona el tema para las p\u00E1ginas de inicio de sesi\u00F3n, OTP, permisos, registro y recordatorio de contrase\u00F1a. -account-theme=Tema de cuenta -account-theme.tooltip=Selecciona el tema para las p\u00E1ginas de gesti\u00F3n de la cuenta de usuario. -admin-console-theme=Tema de consola de administraci\u00F3n -select-theme-admin-console=Selecciona el tema para la consola de administraci\u00F3n. -email-theme=Tema de email -select-theme-email=Selecciona el tema para los emails que son enviados por el servidor. -i18n-enabled=Internacionalizaci\u00F3n activa -supported-locales=Idiomas soportados -supported-locales.placeholder=Indica el idioma y pulsa Intro -default-locale=Idioma por defecto -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-enabled=Cach\u00E9 de dominio habilitada -realm-cache-enabled.tooltip=Activar/desactivar la cach\u00E9 para el dominio, cliente y datos de roles. -user-cache-enabled=Cach\u00E9 de usuario habilitada -user-cache-enabled.tooltip=Habilitar/deshabilitar la cach\u00E9 de usuarios y de asignaciones de usuarios a roles. -revoke-refresh-token=Revocar el token de actualizaci\u00F3n -revoke-refresh-token.tooltip=Si est\u00E1 activado los tokens de actualizaci\u00F3n solo pueden usarse una vez. En otro caso los tokens de actualizaci\u00F3n no se revocan cuando se utilizan y pueden ser usado m\u00FAltiples veces. -sso-session-idle=Sesiones SSO inactivas -seconds=Segundos -minutes=Minutos -hours=Horas -days=D\u00EDas -sso-session-max=Tiempo m\u00E1ximo sesi\u00F3n SSO -sso-session-idle.tooltip=Tiempo m\u00E1ximo que una sesi\u00F3n puede estar inactiva antes de que expire. Los tokens y sesiones de navegador son invalidadas cuando la sesi\u00F3n expira. -sso-session-max.tooltip=Tiempo m\u00E1ximo antes de que una sesi\u00F3n expire. Los tokens y sesiones de navegador son invalidados cuando una sesi\u00F3n expira. -offline-session-idle=Inactividad de sesi\u00F3n sin conexi\u00F3n -offline-session-idle.tooltip=Tiempo m\u00E1ximo inactivo de una sesi\u00F3n sin conexi\u00F3n antes de que expire. Necesitas usar un token sin conexi\u00F3n para refrescar al menos una vez dentro de este periodo, en otro caso la sesi\u00F3n sin conexi\u00F3n expirar\u00E1. -access-token-lifespan=Duraci\u00F3n del token de acceso -access-token-lifespan.tooltip=Tiempo m\u00E1ximo antes de que un token de acceso expire. Se recomienda que este valor sea corto en relaci\u00F3n al tiempo m\u00E1ximo de SSO -client-login-timeout=Tiempo m\u00E1ximo de autenticaci\u00F3n -client-login-timeout.tooltip=Tiempo m\u00E1ximo que un cliente tiene para finalizar el protocolo de obtenci\u00F3n del token de acceso. Deber\u00EDa ser normalmente del orden de 1 minuto. -login-timeout=Tiempo m\u00E1ximo de desconexi\u00F3n -login-timeout.tooltip=Tiempo m\u00E1ximo que un usuario tiene para completar el inicio de sesi\u00F3n. Se recomienda que sea relativamente alto. 30 minutos o m\u00E1s. -login-action-timeout=Tiempo m\u00E1ximo de acci\u00F3n en el inicio de sesi\u00F3n -login-action-timeout.tooltip=Tiempo m\u00E1ximo que un usuario tiene para completar acciones relacionadas con el inicio de sesi\u00F3n, como la actualizaci\u00F3n de contrase\u00F1a o configuraci\u00F3n de OTP. Es recomendado que sea relativamente alto. 5 minutos o m\u00E1s. -headers=Cabeceras -brute-force-detection=Detecci\u00F3n de ataques por fuerza bruta -x-frame-options=X-Frame-Options -click-label-for-info=Haz clic en el enlace de la etiqueta para obtener m\u00E1s informaci\u00F3n. El valor por defecto evita que las p\u00E1ginas sean incluidas desde iframes externos. -content-sec-policy=Content-Security-Policy -max-login-failures=N\u00FAmero m\u00E1ximo de fallos de inicio de sesi\u00F3n -max-login-failures.tooltip=Indica cuantos fallos se permiten antes de que se dispare una espera. -wait-increment=Incremento de espera -wait-increment.tooltip=Cuando se ha alcanzado el umbral de fallo, \u00BFcuanto tiempo debe estar un usuario bloqueado? -quick-login-check-millis=Tiempo en milisegundos entre inicios de sesi\u00F3n r\u00E1pidos -quick-login-check-millis.tooltip=Si ocurren errores de forma concurrente y muy r\u00E1pida, bloquear al usuario. -min-quick-login-wait=Tiempo m\u00EDnimo entre fallos de conexi\u00F3n r\u00E1pidos -min-quick-login-wait.tooltip=Cuanto tiempo se debe esperar tras un fallo en un intento r\u00E1pido de identificaci\u00F3n -max-wait=Espera m\u00E1xima -max-wait.tooltip=Tiempo m\u00E1ximo que un usuario quedar\u00E1 bloqueado. -failure-reset-time=Reinicio del contador de errores -failure-reset-time.tooltip=\u00BFCuando se debe reiniciar el contador de errores? -realm-tab-login=Inicio de sesi\u00F3n -realm-tab-keys=Claves -realm-tab-email=Email -realm-tab-themes=Temas -#realm-tab-localization=Localization -realm-tab-cache=Cach\u00E9 -realm-tab-tokens=Tokens -realm-tab-security-defenses=Defensas de seguridad -realm-tab-general=General -add-realm=A\u00F1adir dominio - -#Session settings -realm-sessions=Sesiones de dominio -revocation=Revocaci\u00F3n -logout-all=Desconectar todo -active-sessions=Sesiones activas -sessions=Sesiones -not-before=No antes de -not-before.tooltip=Revocar cualquier token emitido antes de esta fecha. -set-to-now=Fijar a ahora -push=Push -push.tooltip=Para cada cliente que tiene una URL de administraci\u00F3n, notificarlos las nuevas pol\u00EDticas de revocaci\u00F3n. - -#Protocol Mapper -usermodel.prop.label=Propiedad -usermodel.prop.tooltip=Nombre del m\u00E9todo de propiedad en la interfaz UserModel. Por ejemplo, un valor de ''email'' referenciar\u00EDa al m\u00E9todo UserModel.getEmail(). -usermodel.attr.label=Atributo de usuario -usermodel.attr.tooltip=Nombre del atributo de usuario almacenado que es el nombre del atributo dentro del map UserModel.attribute. -userSession.modelNote.label=Nota sesi\u00F3n usuario -userSession.modelNote.tooltip=Nombre de la nota almacenada en la sesi\u00F3n de usuario dentro del mapa UserSessionModel.note -multivalued.label=Valores m\u00FAltiples -multivalued.tooltip=Indica si el atributo soporta m\u00FAltiples valores. Si est\u00E1 habilitado, la lista de todos los valores de este atributo se fijar\u00E1 como reclamaci\u00F3n. Si est\u00E1 deshabilitado, solo el primer valor ser\u00E1 fijado como reclamaci\u00F3n. -selectRole.label=Selecciona rol -selectRole.tooltip=Introduce el rol en la caja de texto de la izquierda, o haz clic en este bot\u00F3n para navegar y buscar el rol que quieres. -tokenClaimName.label=Nombre de reclamo del token -tokenClaimName.tooltip=Nombre del reclamo a insertar en el token. Puede ser un nombre completo como ''address.street''. En este caso, se crear\u00E1 un objeto JSON anidado. -jsonType.label=Tipo JSON de reclamaci\u00F3n -jsonType.tooltip=El tipo de JSON que deber\u00EDa ser usado para rellenar la petici\u00F3n de JSON en el token. long, int, boolean y String son valores v\u00E1lidos -includeInIdToken.label=A\u00F1adir al token de ID -includeInAccessToken.label=A\u00F1adir al token de acceso -includeInAccessToken.tooltip=\u00BFDeber\u00EDa a\u00F1adirse la identidad reclamada al token de acceso? - - -# client details -clients.tooltip=Los clientes son aplicaciones de navegador de confianza y servicios web de un dominio. Estos clientes pueden solicitar un inicio de sesi\u00F3n. Tambi\u00E9n puedes definir roles espec\u00EDficos de cliente. -search.placeholder=Buscar... -create=Crear -import=Importar -client-id=ID Cliente -base-url=URL Base -actions=Acciones -not-defined=No definido -edit=Editar -delete=Borrar -no-results=Sin resultados -no-clients-available=No hay clientes disponibles -add-client=A\u00F1adir Cliente -select-file=Selecciona archivo -view-details=Ver detalles -clear-import=Limpiar importaci\u00F3n -client-id.tooltip=Indica el identificador (ID) referenciado en URIs y tokens. Por ejemplo ''my-client'' -client.name.tooltip=Indica el nombre visible del cliente. Por ejemplo ''My Client''. Tambi\u00E9n soporta claves para valores localizados. Por ejemplo: ${my_client} -client.enabled.tooltip=Los clientes deshabilitados no pueden iniciar una identificaci\u00F3n u obtener c\u00F3digos de acceso. -consent-required=Consentimiento necesario -consent-required.tooltip=Si est\u00E1 habilitado, los usuarios tienen que consentir el acceso del cliente. -direct-grants-only=Solo permisos directos -direct-grants-only.tooltip=Cuando est\u00E1 habilitado, el cliente solo puede obtener permisos de la API REST. -client-protocol=Protocolo del Cliente -client-protocol.tooltip=''OpenID connect'' permite a los clientes verificar la identidad del usuario final basado en la autenticaci\u00F3n realizada por un servidor de autorizaci\u00F3n. ''SAML'' habilita la autenticaci\u00F3n y autorizaci\u00F3n de escenarios basados en web incluyendo cross-domain y single sign-on (SSO) y utiliza tokens de seguridad que contienen afirmaciones para pasar informaci\u00F3n. -access-type=Tipo de acceso -access-type.tooltip=Los clientes ''Confidential'' necesitan un secreto para iniciar el protocolo de identificaci\u00F3n. Los clientes ''Public'' no requieren un secreto. Los clientes ''Bearer-only'' son servicios web que nunca inician un login. -service-accounts-enabled=Cuentas de servicio habilitadas -service-accounts-enabled.tooltip=Permitir autenticar este cliente contra Keycloak y recibir un token de acceso dedicado para este cliente. -include-authnstatement=Incluir AuthnStatement -include-authnstatement.tooltip=\u00BFDeber\u00EDa incluirse una declaraci\u00F3n especificando el m\u00E9todo y la marca de tiempo en la respuesta de inicio de sesi\u00F3n? -sign-documents=Firmar documentos -sign-documents.tooltip=\u00BFDeber\u00EDa el dominio firmar los documentos SAML? -sign-assertions=Firmar aserciones -sign-assertions.tooltip=\u00BFDeber\u00EDan firmarse las aserciones en documentos SAML? Este ajuste no es necesario si el documento ya est\u00E1 siendo firmado. -signature-algorithm=Algoritmo de firma -signature-algorithm.tooltip=El algoritmo de firma usado para firmar los documentos. -canonicalization-method=M\u00E9todo de canonicalizaci\u00F3n -canonicalization-method.tooltip=M\u00E9todo de canonicalizaci\u00F3n para las firmas XML -encrypt-assertions=Cifrar afirmaciones -encrypt-assertions.tooltip=\u00BFDeber\u00EDan cifrarse las afirmaciones SAML con la clave p\u00FAblica del cliente usando AES? -client-signature-required=Firma de Cliente requerida -client-signature-required.tooltip=\u00BFFirmar\u00E1 el cliente sus peticiones y respuestas SAML? \u00BFY deber\u00EDan ser validadas? -force-post-binding=Forzar enlaces POST -force-post-binding.tooltip=Usar siempre POST para las respuestas -front-channel-logout=Desonexi\u00F3n en primer plano (Front Channel) -front-channel-logout.tooltip=Cuando est\u00E1 activado, la desconexi\u00F3n require una redirecci\u00F3n del navegador hacia el cliente. Cuando no est\u00E1 activado, el servidor realiza una invovaci\u00F3n de desconexi\u00F3n en segundo plano. -force-name-id-format=Forzar formato NameID -force-name-id-format.tooltip=Ignorar la petici\u00F3n de sujeto NameID y usar la configurada en la consola de administraci\u00F3n. -name-id-format=Formato de NameID -name-id-format.tooltip=El formato de NameID que se usar\u00E1 para el t\u00EDtulo -root-url=URL ra\u00EDz -root-url.tooltip=URL ra\u00EDz a\u00F1adida a las URLs relativas -valid-redirect-uris=URIs de redirecci\u00F3n v\u00E1lidas -valid-redirect-uris.tooltip=Patr\u00F3n de URI v\u00E1lida para la cual un navegador puede solicitar la redirecci\u00F3n tras un inicio o cierre de sesi\u00F3n completado. Se permiten comodines simples p.ej. ''http://example.com/*''. Tambi\u00E9n se pueden indicar rutas relativas p.ej. ''/my/relative/path/*''. Las rutas relativas generar\u00E1n una URI de redirecci\u00F3n usando el host y puerto de la petici\u00F3n. Para SAML, se deben fijar patrones de URI v\u00E1lidos si quieres confiar en la URL del servicio del consumidor indicada en la petici\u00F3n de inicio de sesi\u00F3n. -base-url.tooltip=URL por defecto para usar cuando el servidor de autorizaci\u00F3n necesita redirigir o enviar de vuelta al cliente. -admin-url=URL de administraci\u00F3n -admin-url.tooltip=URL a la interfaz de administraci\u00F3n del cliente. Fija este valor si el cliente soporta el adaptador de REST. Esta API REST permite al servidor de autenticaci\u00F3n enviar al cliente pol\u00EDticas de revocaci\u00F3n y otras tareas administrativas. Normalment se fija a la URL base del cliente. -master-saml-processing-url=URL principal de procesamiento SAML -master-saml-processing-url.tooltip=Si est\u00E1 configurada, esta URL se usar\u00E1 para cada enlace al proveedor del servicio del consumidor de aserciones y servicios de desconexi\u00F3n \u00FAnicos. Puede ser sobreescrito de forma individual para cada enlace y servicio en el punto final de configuraci\u00F3n fina de SAML. -idp-sso-url-ref=Nombre de la URL de un SSO iniciado por el IDP -idp-sso-url-ref.tooltip=Nombre del fragmento de la URL para referenciar al cliente cuando quieres un SSO iniciado por el IDP. Dejando esto vac\u00EDo deshabilita los SSO iniciados por el IDP. La URL referenciada desde el navegador ser\u00E1: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state=Estado de retransmisi\u00F3n de un SSO iniciado por el IDP -idp-sso-relay-state.tooltip=Estado de retransmisi\u00F3n que quieres enviar con una petici\u00F3n SAML cuando se inicia un SSO iniciado por el IDP -web-origins=Or\u00EDgenes web -web-origins.tooltip=Or\u00EDgenes CORS permitidos. Para permitir todos los or\u00EDgenes de URIs de redirecci\u00F3n v\u00E1lidas a\u00F1ade ''+''. Para permitir todos los or\u00EDgenes a\u00F1ade ''*''. -fine-saml-endpoint-conf=Fine Grain SAML Endpoint Configuration -fine-saml-endpoint-conf.tooltip=Expande esta secci\u00F3n para configurar las URL exactas para Assertion Consumer y Single Logout Service. -assertion-consumer-post-binding-url=Assertion Consumer Service POST Binding URL -assertion-consumer-post-binding-url.tooltip=SAML POST Binding URL for the client''s assertion consumer service (login responses). You can leave this blank if you do not have a URL for this binding. -assertion-consumer-redirect-binding-url=Assertion Consumer Service Redirect Binding URL -assertion-consumer-redirect-binding-url.tooltip=Assertion Consumer Service Redirect Binding URL -logout-service-post-binding-url=URL de enlace SAML POST para la desconexi\u00F3n -logout-service-post-binding-url.tooltip=URL de enlace SAML POST para la desconexi\u00F3n \u00FAnica del cliente. Puedes dejar esto en blanco si est\u00E1s usando un enlace distinto. -logout-service-redir-binding-url=URL de enlace SAML de redirecci\u00F3n para la desconexi\u00F3n -logout-service-redir-binding-url.tooltip=URL de enlace SAML de redirecci\u00F3n para la desconexi\u00F3n \u00FAnica del cliente. Puedes dejar esto en blanco si est\u00E1s usando un enlace distinto. - -# client import -import-client=Importar Cliente -format-option=Formato -select-format=Selecciona un formato -import-file=Archivo de Importaci\u00F3n - -# client tabs -settings=Ajustes -credentials=Credenciales -roles=Roles -mappers=Asignadores -mappers.tooltip=Los asignadores de protocolos realizan transformaciones en tokens y documentos. Pueden hacer cosas como asignar datos de usuario en peticiones de protocolo, o simplemente transformar cualquier petici\u00F3n entre el cliente y el servidor de autenticaci\u00F3n. -scope=\u00C1mbito -scope.tooltip=Las asignaciones de \u00E1mbito te permiten restringir que asignaciones de roles de usuario se incluyen en el token de acceso solicitado por el cliente. -sessions.tooltip=Ver sesiones activas para este cliente. Permite ver qu\u00E9 usuarios est\u00E1n activos y cuando se identificaron. -offline-access=Acceso sin conexi\u00F3n -offline-access.tooltip=Ver sesiones sin conexi\u00F3n para este cliente. Te permite ver que usuarios han solicitado tokens sin conexi\u00F3n y cuando los solicitaron. Para revocar todos los tokens del cliente, accede a la pesta\u00F1a de Revocaci\u00F3n y fija el valor \"No antes de\" a \"now\". -clustering=Clustering -installation=Instalaci\u00F3n -installation.tooltip=Herramienta de ayuda para generar la configuraci\u00F3n de varios formatos de adaptadores de cliente que puedes descargar o copiar y pegar para configurar tus clientes. -service-account-roles=Roles de cuenta de servicio -service-account-roles.tooltip=Permitir autenticar asignaciones de rol para la cuenta de servicio dedicada a este cliente. - -# client credentials -client-authenticator=Cliente autenticador -client-authenticator.tooltip=Cliente autenticador usado para autenticar este cliente contra el servidor Keycloak -certificate.tooltip=Certificado de cliente para validar los JWT emitidos por este cliente y firmados con la clave privada del cliente de tu almac\u00E9n de claves. -no-client-certificate-configured=No se ha configurado el certificado de cliente -gen-new-keys-and-cert=Generar nuevas claves y certificado -import-certificate=Importar Certificado -gen-client-private-key=Generar clave privada de cliente -generate-private-key=Generar clave privada -archive-format=Formato de Archivo -archive-format.tooltip=Formato de archivo Java keystore o PKCS12 -key-alias=Alias de clave -key-alias.tooltip=Alias del archivo de tu clave privada y certificado. -key-password=Contrase\u00F1a de la clave -key-password.tooltip=Contrase\u00F1a para acceder a la clave privada contenida en el archivo -store-password=Contrase\u00F1a del almac\u00E9n -store-password.tooltip=Contrase\u00F1a para acceder al archivo -generate-and-download=Generar y descargar -client-certificate-import=Importaci\u00F3n de certificado de cliente -import-client-certificate=Importar Certificado de Cliente -jwt-import.key-alias.tooltip=Alias del archivo de tu certificado. -secret=Secreto -regenerate-secret=Regenerar secreto -add-role=A\u00F1adir rol -role-name=Nombre de rol -composite=Compuesto -description=Descripci\u00F3n -no-client-roles-available=No hay roles de cliente disponibles -scope-param-required=Par\u00E1metro de \u00E1mbito obligatorio -scope-param-required.tooltip=Este rol solo ser\u00E1 concedido si el par\u00E1metro de \u00E1mbito con el nombre del rol es usado durante la petici\u00F3n de autorizaci\u00F3n/obtenci\u00F3n de token. -composite-roles=Roles compuestos -composite-roles.tooltip=Cuando este rol es asignado/desasignado a un usuario cualquier rol asociado con \u00E9l ser\u00E1 asignado/desasignado de forma impl\u00EDcita. -realm-roles=Roles de dominio -available-roles=Roles Disponibles -add-selected=A\u00F1adir seleccionado -associated-roles=Roles Asociados -composite.associated-realm-roles.tooltip=Roles a nivel de dominio asociados con este rol compuesto. -composite.available-realm-roles.tooltip=Roles a nivel de dominio disponibles en este rol compuesto. -remove-selected=Borrar seleccionados -client-roles=Roles de Cliente -select-client-to-view-roles=Selecciona el cliente para ver sus roles -available-roles.tooltip=Roles de este cliente que puedes asociar a este rol compuesto. -client.associated-roles.tooltip=Roles de cliente asociados con este rol compuesto. -add-builtin=A\u00F1adir Builtin -category=Categor\u00EDa -type=Tipo -no-mappers-available=No hay asignadores disponibles -add-builtin-protocol-mappers=A\u00F1adir Builtin Protocol Mappers -add-builtin-protocol-mapper=A\u00F1adir Builtin Protocol Mapper -scope-mappings=Asignaciones de \u00E1mbito -full-scope-allowed=Permitir todos los \u00E1mbitos -full-scope-allowed.tooltip=Permite deshabilitar todas las restricciones. -scope.available-roles.tooltip=Roles de dominio que pueden ser asignados al \u00E1mbito -assigned-roles=Roles Asignados -assigned-roles.tooltip=Roles a nivel de dominio asignados a este \u00E1mbito. -effective-roles=Roles Efectivos -realm.effective-roles.tooltip=Roles de dominio asignados que pueden haber sido heredados de un rol compuesto. -select-client-roles.tooltip=Selecciona el cliente para ver sus roles -assign.available-roles.tooltip=Roles de clientes disponibles para ser asignados. -client.assigned-roles.tooltip=Roles de cliente asignados -client.effective-roles.tooltip=Roles de cliente asignados que pueden haber sido heredados desde un rol compuesto. -basic-configuration=Configuraci\u00F3n b\u00E1sica -node-reregistration-timeout=Tiempo de espera de re-registro de nodo -node-reregistration-timeout.tooltip=Indica el m\u00E1ximo intervalo de tiempo para que los nodos del cluster registrados se vuelvan a registrar. Si el nodo del cluster no env\u00EDa una petici\u00F3n de re-registro a Keycloak dentro de este intervalo, ser\u00E1 desregistrado de Keycloak -registered-cluster-nodes=Registrar nodos de cluster -register-node-manually=Registrar nodo manualmente -test-cluster-availability=Probar disponibilidad del cluster -last-registration=\u00DAltimo registro -node-host=Host del nodo -no-registered-cluster-nodes=No hay nodos de cluster registrados disponibles -cluster-nodes=Nodos de cl\u00FAster -add-node=A\u00F1adir Nodo -active-sessions.tooltip=N\u00FAmero total de sesiones activas para este cliente. -show-sessions=Mostrar sesiones -show-sessions.tooltip=Advertencia, esta es una operaci\u00F3n potencialmente costosa dependiendo del n\u00FAmero de sesiones activas. -user=Usuario -from-ip=Desde IP -session-start=Inicio de sesi\u00F3n -first-page=Primera p\u00E1gina -previous-page=P\u00E1gina Anterior -next-page=P\u00E1gina siguiente -client-revoke.not-before.tooltip=Revocar todos los tokens emitidos antes de esta fecha para este cliente. -client-revoke.push.tooltip=Si la URL de administraci\u00F3n est\u00E1 configurada para este cliente, env\u00EDa esta pol\u00EDtica a este cliente. -select-a-format=Selecciona un formato -download=Descargar -offline-tokens=Tokens sin conexi\u00F3n -offline-tokens.tooltip=N\u00FAmero total de tokens sin conexi\u00F3n de este cliente. -show-offline-tokens=Mostrar tokens sin conexi\u00F3n -show-offline-tokens.tooltip=Advertencia, esta es una operaci\u00F3n potencialmente costosa dependiendo del n\u00FAmero de tokens sin conexi\u00F3n. -token-issued=Token expedido -last-access=\u00DAltimo Acceso -last-refresh=\u00DAltima actualizaci\u00F3n -key-export=Exportar clave -key-import=Importar clave -export-saml-key=Exportar clave SAML -import-saml-key=Importar clave SAML -realm-certificate-alias=Alias del certificado del dominio -realm-certificate-alias.tooltip=El certificado del dominio es almacenado en archivo. Este es el alias al mismo. -signing-key=Clave de firma -saml-signing-key=Clave de firma SAML. -private-key=Clave Privada -generate-new-keys=Generar nuevas claves -export=Exportar -encryption-key=Clave de cifrado -saml-encryption-key.tooltip=Clave de cifrado de SAML -service-accounts=Cuentas de servicio -service-account.available-roles.tooltip=Roles de dominio que pueden ser asignados a la cuenta del servicio. -service-account.assigned-roles.tooltip=Roles de dominio asignados a la cuenta del servicio. -service-account-is-not-enabled-for=La cuenta del servicio no est\u00E1 habilitada para {{client}} -create-protocol-mappers=Crear asignadores de protocolo -create-protocol-mapper=Crear asignador de protocolo -protocol=Protocolo -protocol.tooltip=Protocolo. -id=ID -mapper.name.tooltip=Nombre del asignador. -mapper.consent-required.tooltip=Cuando se concede acceso temporal, \u00BFes necesario el consentimiento del usuario para proporcionar estos datos al cliente? -consent-text=Texto del consentimiento -consent-text.tooltip=Texto para mostrar en la p\u00E1gina de consentimiento. -mapper-type=Tipo de asignador - -# realm identity providers -identity-providers=Proveedores de identidad -table-of-identity-providers=Tabla de proveedores de identidad -add-provider.placeholder=A\u00F1adir proveedor... -provider=Proveedor -gui-order=Orden en la interfaz gr\u00E1fica (GUI) -redirect-uri=URI de redirecci\u00F3n -redirect-uri.tooltip=La URI de redirecci\u00F3n usada para configurar el proveedor de identidad. -alias=Alias -identity-provider.alias.tooltip=El alias que identifica de forma \u00FAnica un proveedor de identidad, se usa tambi\u00E9n para construir la URI de redirecci\u00F3n. -identity-provider.enabled.tooltip=Habilita/deshabilita este proveedor de identidad. -authenticate-by-default=Autenticar por defecto -identity-provider.authenticate-by-default.tooltip=Indica si este proveedor deber\u00EDa ser probado por defecto para autenticacaci\u00F3n incluso antes de mostrar la p\u00E1gina de inicio de sesi\u00F3n. -store-tokens=Almacenar tokens -identity-provider.store-tokens.tooltip=Habilitar/deshabilitar si los tokens deben ser almacenados despu\u00E9s de autenticar a los usuarios. -stored-tokens-readable=Tokens almacenados legibles -identity-provider.stored-tokens-readable.tooltip=Habilitar/deshabilitar si los nuevos usuarios pueden leer los tokens almacenados. Esto asigna el rol ''broker.read-token''. -update-profile-on-first-login=Actualizar perfil en el primer inicio de sesi\u00F3n -on=Activado -on-missing-info=Si falta informaci\u00F3n -off=Desactivado -update-profile-on-first-login.tooltip=Define condiciones bajo las cuales un usuario tiene que actualizar su perfil durante el primer inicio de sesi\u00F3n. -trust-email=Confiar en el email -trust-email.tooltip=Si est\u00E1 habilitado, el email recibido de este proveedor no se verificar\u00E1 aunque la verificaci\u00F3n est\u00E9 habilitada para el dominio. -gui-order.tooltip=N\u00FAmero que define el orden del proveedor en la interfaz gr\u00E1fica (GUI) (ej. en la p\u00E1gina de inicio de sesi\u00F3n) -openid-connect-config=Configuraci\u00F3n de OpenID Connect -openid-connect-config.tooltip=Configuraci\u00F3n de OIDC SP e IDP externos -authorization-url=URL de autorizaci\u00F3n -authorization-url.tooltip=La URL de autorizaci\u00F3n. -token-url=Token URL -token-url.tooltip=La URL del token. -logout-url=URL de desconexi\u00F3n -identity-provider.logout-url.tooltip=Punto de cierre de sesi\u00F3n para usar en la desconexi\u00F3n de usuarios desde un proveedor de identidad (IDP) externo. -backchannel-logout=Backchannel Logout -backchannel-logout.tooltip=Does the external IDP support backchannel logout? -user-info-url=URL de informaci\u00F3n de usuario -user-info-url.tooltip=La URL de informaci\u00F3n de usuario. Opcional. -identity-provider.client-id.tooltip=El cliente o identificador de cliente registrado en el proveedor de identidad. -client-secret=Secreto de Cliente -show-secret=Mostrar secreto -hide-secret=Ocultar secreto -client-secret.tooltip=El cliente o el secreto de cliente registrado en el proveedor de identidad. -issuer=Emisor -issuer.tooltip=El identificador del emisor para el emisor de la respuesta. Si no se indica, no se realizar\u00E1 ninguna validaci\u00F3n. -default-scopes=\u00C1mbitos por defecto -identity-provider.default-scopes.tooltip=Los \u00E1mbitos que se enviar\u00E1n cuando se solicite autorizaci\u00F3n. Puede ser una lista de \u00E1mbitos separados por espacios. El valor por defecto es ''openid''. -prompt=Prompt -unspecified.option=no especificado -none.option=ninguno -consent.option=consentimiento -login.option=login -select-account.option=select_account -prompt.tooltip=Indica si el servidor de autorizaci\u00F3n solicita al usuario final para reautenticaci\u00F3n y consentimiento. -validate-signatures=Validar firmas -identity-provider.validate-signatures.tooltip=Habilitar/deshabilitar la validaci\u00F3n de firmas de proveedores de identidad (IDP) externos -validating-public-key=Validando clave p\u00FAblica -identity-provider.validating-public-key.tooltip=La clave p\u00FAblica en formato PEM que debe usarse para verificar las firmas de proveedores de identidad (IDP) externos. -import-external-idp-config=Importar configuraci\u00F3n externa de IDP -import-external-idp-config.tooltip=Te permite cargar metadatos de un proveedor de identidad (IDP) externo de un archivo de coniguraci\u00F3n o descargarlo desde una URL. -import-from-url=Importar desde URL -identity-provider.import-from-url.tooltip=Importar metadatos desde un descriptor de un proveedor de identidad (IDP) remoto. -import-from-file=Importar desde archivo -identity-provider.import-from-file.tooltip=Importar metadatos desde un descriptor de un proveedor de identidad (IDP) descargado. -saml-config=Configuraci\u00F3n SAML -identity-provider.saml-config.tooltip=Configuraci\u00F3n de proveedor SAML e IDP externo -single-signon-service-url=URL de servicio de conexi\u00F3n \u00FAnico (SSO) -saml.single-signon-service-url.tooltip=La URL que debe ser usada para enviar peticiones de autenticaci\u00F3n (SAML AuthnRequest). -single-logout-service-url=URL de servicio de desconexi\u00F3n \u00FAnico -saml.single-logout-service-url.tooltip=La URL que debe usarse para enviar peticiones de desconexi\u00F3n. -nameid-policy-format=Formato de pol\u00EDtica NameID -nameid-policy-format.tooltip=Indica la referencia a la URI correspondiente a un formato de NameID. El valor por defecto es urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -http-post-binding-response=HTTP-POST enlace de respuesta -http-post-binding-response.tooltip=Indica si se responde a las peticiones usando HTTP-POST. Si no est\u00E1 activado, se usa HTTP-REDIRECT. -http-post-binding-for-authn-request=HTTP-POST para AuthnRequest -http-post-binding-for-authn-request.tooltip=Indica si AuthnRequest debe ser enviada usando HTTP-POST. Si no est\u00E1 activado se hace HTTP-REDIRECT. -want-authn-requests-signed=Firmar AuthnRequests -want-authn-requests-signed.tooltip=Indica si el proveedor de identidad espera recibir firmadas las AuthnRequest. -force-authentication=Forzar autenticaci\u00F3n -identity-provider.force-authentication.tooltip=Indica si el proveedor de identidad debe autenticar al presentar directamente las credenciales en lugar de depender de un contexto de seguridad previo. -validate-signature=Validar firma -saml.validate-signature.tooltip=Habilitar/deshabilitar la validaci\u00F3n de firma en respuestas SAML. -validating-x509-certificate=Validando certificado X509 -validating-x509-certificate.tooltip=El certificado en formato PEM que debe usarse para comprobar las firmas. -saml.import-from-url.tooltip=Importar metadatos desde un descriptor de entidad remoto de un IDP de SAML -social.client-id.tooltip=El identificador del cliente registrado con el proveedor de identidad. -social.client-secret.tooltip=El secreto del cliente registrado con el proveedor de identidad. -social.default-scopes.tooltip=\u00C1mbitos que se enviar\u00E1n cuando se solicite autorizaci\u00F3n. Ver la documentaci\u00F3n para los posibles valores, separador y valor por defecto. -key=Clave -stackoverflow.key.tooltip=La clave obtenida en el registro del cliente de Stack Overflow. - -realms=Dominios -realm=Dominio - -identity-provider-mappers=Asignadores de proveedores de identidad (IDP) -create-identity-provider-mapper=Crear asignador de proveedor de identidad (IDP) -add-identity-provider-mapper=A\u00F1adir asignador de proveedor de identidad -client.description.tooltip=Indica la descripci\u00F3n del cliente. Por ejemplo ''My Client for TimeSheets''. Tambi\u00E9n soporta claves para valores localizados. Por ejemplo: ${my_client_description} -content-type-options= diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_fr.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_fr.properties deleted file mode 100644 index c627e9349..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_fr.properties +++ /dev/null @@ -1,155 +0,0 @@ -consoleTitle=Keycloak Admin Console - -# Common messages -enabled=Actif -name=Nom -displayName=Display name -displayNameHtml=HTML Display name -save=Sauver -cancel=Annuler -onText=Oui -offText=Non -client=Client -clients=Clients -clear=Effacer -selectOne=Select One... - -manage=G\u00e9rer -authentication=Authentification -user-federation=Regroupement Utilisateur -user-storage=Stockage Utilisateur -events=\u00c9v\u00e8nements -realm-settings=Configurations du domaine -configure=Configurer -select-realm=Choisir un domaine -add=Ajouter - -true=Vrai -false=Faux - -endpoints=Endpoints - -# Realm settings -realm-detail.enabled.tooltip=Les utilisateurs et les clients peuvent acc\u00e9der au domaine si celui-ci est actif -realm-detail.oidc-endpoints.tooltip=Affiche les configurations de l''endpoint OpenID Connect -registrationAllowed=Enregistrement d''utilisateur -registrationAllowed.tooltip=Activer/d\u00e9sactiver la page d''enregistrement. Un lien pour l''enregistrement sera visible sur la page de connexion. -registrationEmailAsUsername=Courriel comme nom d''utilisateur -registrationEmailAsUsername.tooltip=Si actif, le champ du nom de l''utilisateur est cach\u00e9 pendant l''enregistrement ; le courriel est utilis\u00e9 comme nom d''utilisateur. -editUsernameAllowed=\u00c9ditez le nom de l''utilisateur -editUsernameAllowed.tooltip=Si actif, le champ du nom de l''utilisateur est modifiable. -resetPasswordAllowed=Mot de passe oubli\u00e9 -resetPasswordAllowed.tooltip=Affiche un lien sur la page de connexion pour les utilisateurs ayant oubli\u00e9 leurs accr\u00e9ditations. -rememberMe=Se souvenir de moi -rememberMe.tooltip=Affiche une case \u00e0 cocher sur la page de connexion pour permettre aux utilisateurs de rester connect\u00e9s entre deux red\u00e9marrages de leur navigateur, jusqu''\u00e0 expiration de la session. -verifyEmail=V\u00e9rification du courriel -verifyEmail.tooltip=Force l''utilisateur \u00e0 v\u00e9rifier son courriel lors de la premi\u00e8re connexion. -loginWithEmailAllowed=Authentification avec courriel -loginWithEmailAllowed.tooltip=Autorise l''utilisateur \u00e0 s''authentifier avec son adresse de courriel. -duplicateEmailsAllowed=Doublon courriel -duplicateEmailsAllowed.tooltip=Autorise plusieurs utilisateurs \u00e0 avoir la m\u00eame adresse de courriel. Changer cette configuration va vider le cache. Il est recommand\u00e9 de mettre \u00e0 jour manuellement les contraintes sur le courriel dans la base de donn\u00e9es apr\u00e8s la d\u00e9sactivation du support des doublons. -sslRequired=SSL requis -sslRequired.option.all=toutes les requ\u00eates -sslRequired.option.external=les requ\u00eates externes -sslRequired.option.none=aucun -sslRequired.tooltip=Niveau d''exigence HTTPS \: ''aucun'' signifie que le HTTPS n''est requis pour aucune adresse IP cliente. ''les requ\u00eates externes'' signifie que localhost et les adresses IP priv\u00e9es peuvent acc\u00e9der sans HTTPS. ''toutes les requ\u00eates'' signifie que le protocole HTTPS est obligatoire pour toutes les adresses IP. -publicKey=Clef publique -gen-new-keys=Cr\u00e9ation de nouvelle clef -certificate=Certificat -host=H\u00f4te -smtp-host=H\u00f4te SMTP -port=Port -smtp-port=Port SMTP (25 par d\u00e9faut) -from=De -sender-email-addr=Courriel de l''exp\u00e9diteur -enable-ssl=Activer SSL/TLS -enable-start-tls=Activer StartTLS -enable-auth=Activer l''authentification -username=Nom de l''utilisateur -login-username=Connexion de l''utilisateur -password=Mot de passe -login-password=Mot de passe -login-theme=Th\u00e8me de connexion -select-one=S\u00e9lectionnez-en un... -login-theme.tooltip=S\u00e9lectionnez le th\u00e8me pour les pages de connexion, de mot de passe \u00e0 usage unique bas\u00e9 sur le temps, des droits, de l''enregistrement, et du mot passe oubli\u00e9. -account-theme=Th\u00e8me du compte -account-theme.tooltip=S\u00e9lectionnez le th\u00e8me pour la gestion des comptes. -admin-console-theme=Th\u00e8me de la console d''administration -select-theme-admin-console=S\u00e9lectionnez le th\u00e8me de la console d''administration. -email-theme=Th\u00e8me pour le courriel -select-theme-email=S\u00e9lectionnez le th\u00e8me pour les courriels envoy\u00e9es par le serveur. -i18n-enabled=Internationalisation activ\u00e9e -supported-locales=Locales support\u00e9es -supported-locales.placeholder=Entrez la locale et validez -default-locale=Locale par d\u00e9faut -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-enabled=Cache du domaine activ\u00e9 -realm-cache-enabled.tooltip=Activer/D\u00e9sactiver le cache pour le domaine, client et donn\u00e9es. -user-cache-enabled=Cache utilisateur activ\u00e9 -user-cache-enabled.tooltip=Activer/D\u00e9sactiver le cache utilisateur, et le cache de relation entre utilisateurs et r\u00f4les. -sso-session-idle=Sessions SSO inactives -seconds=Secondes -minutes=Minutes -hours=Heures -days=Jours -sso-session-max=Maximum de sessions SSO -sso-session-idle.tooltip=Temps d''inactivit\u00e9 autoris\u00e9 avant expiration de la session. Les jetons et les sessions navigateurs sont invalid\u00e9es quand la session expire. -sso-session-max.tooltip=Dur\u00e9e maximale avant que la session n''expire. Les jetons et les sessions navigateurs sont invalid\u00e9es quand la session expire. -access-token-lifespan=Dur\u00e9e de vie du jeton d''acc\u00e8s -access-token-lifespan.tooltip=Dur\u00e9e maximale avant que le jeton d''acc\u00e8s n''expire. Cette valeur devrait \u00eatre relativement plus petite que la dur\u00e9e d''inactivit\u00e9 (timeout) du SSO. -client-login-timeout=Dur\u00e9e d''inactivit\u00e9 de connexion (timeout) -client-login-timeout.tooltip=Dur\u00e9e maximale qu''a un client pour finir le protocole du jeton d''acc\u00e8s. Devrait \u00eatre de l''ordre de la minute (1 min). -login-timeout=Dur\u00e9e d''inactivit\u00e9 de connexion -login-timeout.tooltip=Dur\u00e9e maximale autoris\u00e9e pour finaliser la connexion. Devrait \u00eatre relativement long \: 30 minutes, voire plus. -login-action-timeout=Dur\u00e9e d''inactivit\u00e9 des actions de connexions -login-action-timeout.tooltip=Dur\u00e9e maximale qu''a un utilisateur pour finir ses actions concernant la mise \u00e0 jour de son mot de passe ou bien de la configuration du mot de passe \u00e0 usage unique (OTP). Devrait \u00eatre relativement long \: 5 minutes, voire plus. -headers=En-t\u00eates -brute-force-detection=D\u00e9tection des attaques par force brute -x-frame-options=X-Frame-Options -click-label-for-info=Cliquer sur le label pour plus d''information. Les valeurs par d\u00e9faut \u00e9vitent que les pages soient incluses dans des iframes \u00e9trang\u00e8res. -content-sec-policy=Content-Security-Policy -max-login-failures=Nombre maximal d''erreurs de connexion -max-login-failures.tooltip=Nombre d''erreurs avant de d\u00e9clencher le temps d''attente. -wait-increment=Temps d''attente -wait-increment.tooltip=Quand le seuil des erreurs est atteint, combien de temps l''utilisateur est-il bloqu\u00e9 ? -quick-login-check-millis=Nombre de millisecondes entre deux connexions -quick-login-check-millis.tooltip=Si une erreur apparait trop rapidement, bloquer le compte utilisateur. -min-quick-login-wait=Dur\u00e9e minimale d''attente entre deux connexions -min-quick-login-wait.tooltip=Dur\u00e9e d''attente demand\u00e9e apr\u00e8s une erreur entre deux connexions. -max-wait=Dur\u00e9e maximale d''attente -max-wait.tooltip=Dur\u00e9e maximale de blocage du compte utilisateur -failure-reset-time=Dur\u00e9e de remise \u00e0 z\u00e9ro des erreurs -failure-reset-time.tooltip=Quand les erreurs sont-elles remises \u00e0 z\u00e9ro ? -realm-tab-login=Connexion -realm-tab-keys=Clefs -realm-tab-email=Courriels -realm-tab-themes=Th\u00e8mes -#realm-tab-localization=Localization -realm-tab-cache=Cache -realm-tab-tokens=Jetons -realm-tab-security-defenses=Mesures de s\u00e9curit\u00e9 -realm-tab-general=G\u00e9n\u00e9ral -add-realm=Ajouter un domaine - -#Session settings -realm-sessions=Sessions du domaine -revocation=R\u00e9vocation -logout-all=D\u00e9connexion globale -active-sessions=Sessions actives -sessions=Sessions -not-before=Pas avant -not-before.tooltip=R\u00e9voquer tous les jetons demand\u00e9s avant cette date. -set-to-now=Mettre \u00e0 maintenant -push=Appuyer -push.tooltip=Pour tous les clients ayant une URL d''administration, les notifier de la politique de r\u00e9vocation. diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_it.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_it.properties deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_ja.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_ja.properties deleted file mode 100644 index ca3cc1a15..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_ja.properties +++ /dev/null @@ -1,1639 +0,0 @@ -# encoding: utf-8 -consoleTitle=Keycloak管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ« - -# Common messages -enabled=有効 -hidden=éžè¡¨ç¤º -link-only-column=リンクã®ã¿ -name=åå‰ -displayName=表示å -displayNameHtml=HTML表示å -save=ä¿å­˜ -cancel=キャンセル -next=次㸠-onText=オン -offText=オフ -client=クライアント -clients=クライアント -clear=クリア -selectOne=1ã¤é¸æŠž... - -true=ã¯ã„ -false=ã„ã„㈠- -endpoints=エンドãƒã‚¤ãƒ³ãƒˆ - -# Realm settings -realm-detail.enabled.tooltip=有効ã®å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã“ã®ãƒ¬ãƒ«ãƒ ã®ã¿ã‚¢ã‚¯ã‚»ã‚¹å¯èƒ½ã«ãªã‚Šã¾ã™ -realm-detail.protocol-endpoints.tooltip=プロトコル・エンドãƒã‚¤ãƒ³ãƒˆã®è¨­å®šã‚’表示ã—ã¾ã™ã€‚ -realm-detail.protocol-endpoints.oidc=OpenIDエンドãƒã‚¤ãƒ³ãƒˆã®è¨­å®š -realm-detail.protocol-endpoints.saml=SAML 2.0アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ -realm-detail.userManagedAccess.tooltip=有効ã«ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã‚’使用ã—ã¦ãƒªã‚½ãƒ¼ã‚¹ã¨ãƒ‘ーミッションを管ç†ã§ãã¾ã™ã€‚ -userManagedAccess=User-Managed Access -registrationAllowed=ユーザー登録 -registrationAllowed.tooltip=登録ページã®æœ‰åŠ¹/無効。ログインページã«ç™»éŒ²ã®ãƒªãƒ³ã‚¯ã‚‚表示ã•ã‚Œã‚‹ã‚ˆã†ã«ãªã‚Šã¾ã™ã€‚ -registrationEmailAsUsername=Eメールをユーザーåã¨ã™ã‚‹ -registrationEmailAsUsername.tooltip=有効ã®å ´åˆã¯ã€ç™»éŒ²ãƒ•ã‚©ãƒ¼ãƒ ã«ãŠã„ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼åフィールドãŒéžè¡¨ç¤ºã¨ãªã‚Šã€EメールãŒæ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã¨ã—ã¦ä½¿ã‚ã‚Œã¾ã™ã€‚ -editUsernameAllowed=ユーザーåã®ç·¨é›† -editUsernameAllowed.tooltip=有効ã®å ´åˆã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼åフィールドãŒç·¨é›†å¯èƒ½ã«ãªã‚Šã€ãã†ã§ãªã„å ´åˆã¯èª­ã¿å–り専用ã«ãªã‚Šã¾ã™ã€‚ -resetPasswordAllowed=パスワード忘れ -resetPasswordAllowed.tooltip=パスワードを忘れã¦ã—ã¾ã£ãŸå ´åˆã«ã‚¯ãƒªãƒƒã‚¯ã™ã‚‹ãƒªãƒ³ã‚¯ã‚’ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ã«è¡¨ç¤ºã—ã¾ã™ã€‚ -rememberMe=ログイン状態ã®ä¿å­˜ -rememberMe.tooltip=セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã¯ãƒ–ラウザーã®å†èµ·å‹•ã§ã‚‚ログイン状態をä¿å­˜ã™ã‚‹ãƒã‚§ãƒƒã‚¯ãƒœãƒƒã‚¯ã‚¹ã‚’ログインページã«è¡¨ç¤ºã—ã¾ã™ã€‚ -loginWithEmailAllowed=Eメールã§ãƒ­ã‚°ã‚¤ãƒ³ -loginWithEmailAllowed.tooltip=ユーザーãŒEメールアドレスã§ãƒ­ã‚°ã‚¤ãƒ³ã§ãるよã†ã«ã—ã¾ã™ã€‚ -duplicateEmailsAllowed=メールã®é‡è¤‡ -duplicateEmailsAllowed.tooltip=複数ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåŒã˜EメールアドレスをæŒã¤ã“ã¨ã‚’許å¯ã—ã¾ã™ã€‚ã“ã®è¨­å®šã‚’変更ã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‚‚クリアã•ã‚Œã¾ã™ã€‚é‡è¤‡ã™ã‚‹Eメールアドレスã®ã‚µãƒãƒ¼ãƒˆã‚’無効ã«ã—ãŸå¾Œã§ã€ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹å†…ã®æ—¢å­˜ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Eメールã®åˆ¶ç´„を手動ã§æ›´æ–°ã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -verifyEmail=Eメールã®ç¢ºèª -verifyEmail.tooltip=åˆå›žãƒ­ã‚°ã‚¤ãƒ³å¾Œã¾ãŸã¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã®å¤‰æ›´ãŒé€ä¿¡ã•ã‚ŒãŸå¾Œã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«è‡ªåˆ†ã®é›»å­ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’確èªã™ã‚‹ã‚ˆã†ã«è¦æ±‚ã—ã¾ã™ã€‚ -sslRequired=SSLã®è¦æ±‚ -sslRequired.option.all=å…¨ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆ -sslRequired.option.external=外部リクエスト -sslRequired.option.none=ãªã— -sslRequired.tooltip=HTTPSãŒå¿…é ˆã‹ã©ã†ã‹ã€‚「ãªã—ã€ã¯ã€HTTPSãŒã©ã®IPアドレスã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚‚è¦æ±‚ã•ã‚Œãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「外部リクエストã€ã¯ã€ãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆã¨ãƒ—ライベートIPアドレスã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒHTTPSãªã—ã§ã‚¢ã‚¯ã‚»ã‚¹ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「ã™ã¹ã¦ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã€ã¯ã€HTTPSãŒã™ã¹ã¦ã®IPアドレスã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¦æ±‚ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -publicKeys=å…¬é–‹éµ -publicKey=å…¬é–‹éµ -privateKey=ç§˜å¯†éµ -gen-new-keys=æ–°ã—ã„éµã‚’生æˆã™ã‚‹ -certificate=証明書 -host=ホスト -smtp-host=SMTPホスト -port=ãƒãƒ¼ãƒˆ -smtp-port=SMTPãƒãƒ¼ãƒˆï¼ˆãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¯25) -smtp-password.tooltip=SMTPパスワード。ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€ãƒœãƒ¼ãƒ«ãƒˆã‹ã‚‰å€¤ã‚’å–å¾—ã§ãã¾ã™ã€‚${vault.ID}å½¢å¼ã‚’使用ã—ã¾ã™ã€‚ -from=差出人 -fromDisplayName=差出人ã®è¡¨ç¤ºå -fromDisplayName.tooltip=差出人ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ãƒ•ãƒ¬ãƒ³ãƒ‰ãƒªãƒ¼ãªåå‰ã§ã™ï¼ˆã‚ªãƒ—ション)。 -replyTo=返信先 -replyToDisplayName=返信先ã®è¡¨ç¤ºå -replyToDisplayName.tooltip=返信先ã®ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ãƒ•ãƒ¬ãƒ³ãƒ‰ãƒªãƒ¼ãªåå‰ã§ã™ï¼ˆã‚ªãƒ—ション)。 -envelopeFrom=Envelope From -envelopeFrom.tooltip=ãƒã‚¦ãƒ³ã‚¹ã«ä½¿ç”¨ã•ã‚Œã‚‹Eメールアドレス(オプション)。 -sender-email-addr=é€ä¿¡è€…ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ -sender-email-addr-display=é€ä¿¡è€…Eメールアドレスã®è¡¨ç¤ºå -reply-to-email-addr=返信先ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ -reply-to-email-addr-display=返信先メールアドレスã®è¡¨ç¤ºå -sender-envelope-email-addr=é€ä¿¡è€…ã®Envelope Eメールアドレス -enable-ssl=SSLã®æœ‰åŠ¹ -enable-start-tls=StartTLSã®æœ‰åŠ¹ -enable-auth=èªè¨¼ã®æœ‰åŠ¹ -username=ユーザーå -login-username=ログインユーザーå -password=パスワード -login-password=ログイン・パスワード -login-theme=ログインテーマ -login-theme.tooltip=ログインã€OTPã€ã‚°ãƒ©ãƒ³ãƒˆã€ç™»éŒ²ã€ãŠã‚ˆã³ãƒ‘スワード忘れã«ä½¿ç”¨ã™ã‚‹ãƒšãƒ¼ã‚¸ã®ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã—ã¾ã™ã€‚ -account-theme=アカウントテーマ -account-theme.tooltip=ユーザー・アカウント管ç†ç”»é¢ã®ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã—ã¾ã™ã€‚ -admin-console-theme=管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ†ãƒ¼ãƒž -select-theme-admin-console=管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã®ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã—ã¾ã™ã€‚ -email-theme=Eメールテーマ -select-theme-email=サーãƒãƒ¼ã‹ã‚‰é€ä¿¡ã•ã‚Œã‚‹Eメールã®ãƒ†ãƒ¼ãƒžã‚’é¸æŠžã—ã¾ã™ã€‚ -i18n-enabled=国際化ã®æœ‰åŠ¹ -supported-locales=サãƒãƒ¼ãƒˆã•ã‚Œã‚‹ãƒ­ã‚±ãƒ¼ãƒ« -supported-locales.placeholder=ロケールを入力ã—ã€Enterキーを押ã—ã¦ãã ã•ã„ -default-locale=デフォルト・ロケール -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=レルムキャッシュ -realm-cache-clear.tooltip=レルムキャッシュã‹ã‚‰ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’クリアã™ã‚‹ï¼ˆã“ã‚Œã«ã‚ˆã‚Šã€ã™ã¹ã¦ã®ãƒ¬ãƒ«ãƒ ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒã‚¯ãƒªã‚¢ã•ã‚Œã¾ã™ï¼‰ã€‚ -user-cache-clear=ユーザー・キャッシュ -user-cache-clear.tooltip=ユーザー・キャッシュã‹ã‚‰ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’削除ã—ã¾ã™ï¼ˆã“ã‚Œã«ã‚ˆã‚Šã€ã™ã¹ã¦ã®ãƒ¬ãƒ«ãƒ ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒã‚¯ãƒªã‚¢ã•ã‚Œã¾ã™ï¼‰ã€‚ -keys-cache-clear=キーキャッシュ -keys-cache-clear.tooltip=外部公開éµã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã‹ã‚‰ã™ã¹ã¦ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’消去ã—ã¾ã™ã€‚ã“れらã¯ã€å¤–部ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¾ãŸã¯ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®éµã§ã™ï¼ˆã“ã‚Œã«ã‚ˆã‚Šã€ã™ã¹ã¦ã®ãƒ¬ãƒ«ãƒ ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ãŒã‚¯ãƒªã‚¢ã•ã‚Œã¾ã™ï¼‰ã€‚ -default-signature-algorithm=デフォルトã®ç½²åアルゴリズム -default-signature-algorithm.tooltip=ã“ã®ãƒ¬ãƒ«ãƒ ã§ãƒˆãƒ¼ã‚¯ãƒ³ã®ç½²åã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  -revoke-refresh-token=リフレッシュ・トークンã®ç„¡åŠ¹åŒ– -revoke-refresh-token.tooltip=有効ã«ã™ã‚‹ã¨ã€ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã¯ã€Œãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã®æœ€å¤§å†åˆ©ç”¨å›žæ•°ã€ã¾ã§ã—ã‹ä½¿ç”¨ã§ããšã€åˆ¥ã®ãƒˆãƒ¼ã‚¯ãƒ³ãŒä½¿ç”¨ã•ã‚Œã‚‹ã¨ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™ã€‚無効ã«ã™ã‚‹ã¨ã€ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã¯ä½¿ç”¨å¾Œã«ç„¡åŠ¹åŒ–ã•ã‚Œãšã€è¤‡æ•°å›žä½¿ç”¨ã§ãã¾ã™ã€‚ -refresh-token-max-reuse=リフレッシュ・トークンã®æœ€å¤§å†åˆ©ç”¨å›žæ•° -refresh-token-max-reuse.tooltip=リフレッシュ・トークンをå†åˆ©ç”¨ã§ãる最大回数。別ã®ãƒˆãƒ¼ã‚¯ãƒ³ãŒä½¿ç”¨ã•ã‚ŒãŸå ´åˆã€å³æ™‚ã«ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™ã€‚ -sso-session-idle=SSOセッション・アイドル -seconds=秒 -minutes=分 -hours=時 -days=æ—¥ -sso-session-max=SSOセッション最大 -sso-session-idle.tooltip=セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®ã‚¢ã‚¤ãƒ‰ãƒ«æ™‚é–“ã§ã™ã€‚セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãƒˆãƒ¼ã‚¯ãƒ³ã¨ãƒ–ラウザー・セッションã¯ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™ã€‚ -sso-session-max.tooltip=セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®æœ€å¤§æ™‚é–“ã§ã™ã€‚セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¨ã€ãƒˆãƒ¼ã‚¯ãƒ³ã¨ãƒ–ラウザー・セッションã¯ç„¡åŠ¹åŒ–ã•ã‚Œã¾ã™ã€‚ -sso-session-idle-remember-me=SSOセッション・アイドル・リメンãƒãƒ¼ãƒŸãƒ¼ -sso-session-idle-remember-me.tooltip=リメンãƒãƒ¼ãƒŸãƒ¼ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®ã‚¢ã‚¤ãƒ‰ãƒ«æ™‚é–“ã§ã™ã€‚セッションãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¨ã€ãƒˆãƒ¼ã‚¯ãƒ³ãŠã‚ˆã³ãƒ–ラウザー・セッションã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚設定ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€æ¨™æº–ã®SSOセッション・アイドル値ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -sso-session-max-remember-me=SSOセッション最大リメンãƒãƒ¼ãƒŸãƒ¼ -sso-session-max-remember-me.tooltip=ユーザーãŒãƒªãƒ¡ãƒ³ãƒãƒ¼ãƒŸãƒ¼ãƒ»ã‚ªãƒ—ションを設定ã—ãŸã¨ãã«ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。セッションãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¨ã€ãƒˆãƒ¼ã‚¯ãƒ³ãŠã‚ˆã³ãƒ–ラウザー・セッションã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚設定ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€æ¨™æº–ã®SSOセッション最大ã®å€¤ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -offline-session-idle=オフライン・セッション・アイドル -offline-session-idle.tooltip=セッションã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®ã‚ªãƒ•ãƒ©ã‚¤ãƒ³æ™‚é–“ã§ã™ã€‚ã“ã®æœŸé™å†…ã«å°‘ãªãã¨ã‚‚1回ã¯ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’使用ã—ã¦ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ã—ãªã„ã¨ã€ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã¯æœ‰åŠ¹æœŸé™åˆ‡ã‚Œã¨ãªã‚Šã¾ã™ã€‚ -realm-detail.hostname=ホストå -realm-detail.hostname.tooltip=レルムã«å¯¾ã—ã¦ãƒ›ã‚¹ãƒˆåを設定ã—ã¾ã™ã€‚特定ã®ãƒ¬ãƒ«ãƒ ã®ã‚µãƒ¼ãƒãƒ¼ãƒ›ã‚¹ãƒˆåを上書ãã™ã‚‹ãŸã‚ã«ã€å›ºå®šãƒ›ã‚¹ãƒˆåプロãƒã‚¤ãƒ€ãƒ¼ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨??ã—ã¾ã™ã€‚ -realm-detail.frontendUrl=フロントエンドURL -realm-detail.frontendUrl.tooltip=レルムã®ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰URLを設定ã—ã¾ã™ã€‚デフォルトã®ãƒ›ã‚¹ãƒˆåプロãƒã‚¤ãƒ€ãƒ¼ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨ã—ã€ç‰¹å®šã®ãƒ¬ãƒ«ãƒ ã®ãƒ•ãƒ­ãƒ³ãƒˆã‚¨ãƒ³ãƒ‰ãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ãƒ™ãƒ¼ã‚¹URLをオーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ - -## KEYCLOAK-7688 Offline Session Max for Offline Token -offline-session-max-limited=ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³æœ€å¤§åˆ¶é™ -offline-session-max-limited.tooltip=オフライン・セッションã®æœ€å¤§æ™‚間制é™ã‚’有効ã«ã—ã¾ã™ã€‚ -offline-session-max=オフライン・セッション最大 -offline-session-max.tooltip=アクティビティーã«é–¢ä¿‚ãªãã€ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。 -client-session-idle=クライアント・セッション・アイドル -client-session-idle.tooltip=クライアント・セッションãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ã‚¢ã‚¤ãƒ‰ãƒ«çŠ¶æ…‹ã«ã§ãる時間。トークンã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¨ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚設定ã—ãªã„å ´åˆã€æ¨™æº–ã®SSOセッション・アイドルã®å€¤ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -client-session-max=クライアント・セッション最大 -client-session-max.tooltip=クライアント・セッションãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。トークンã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒæœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¨ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚設定ã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€æ¨™æº–ã®SSOセッション最大ã®å€¤ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -access-token-lifespan=アクセストークン生存期間 -access-token-lifespan.tooltip=アクセストークンãŒæœ‰åŠ¹æœŸé™åˆ‡ã‚Œã¨ãªã‚‹æœ€å¤§æ™‚é–“ã§ã™ã€‚ã“ã®å€¤ã¯SSOタイムアウトã¨æ¯”ã¹ã¦çŸ­ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -access-token-lifespan-for-implicit-flow=インプリシット・フローã«ãŠã‘るアクセストークン生存期間 -access-token-lifespan-for-implicit-flow.tooltip=OpenID Connect インプリシット・フローã§ç™ºè¡Œã•ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŒæœ‰åŠ¹æœŸé™åˆ‡ã‚Œã¨ãªã‚‹æœ€å¤§æ™‚é–“ã§ã™ã€‚ã“ã®å€¤ã¯SSOタイムアウトより短ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚インプリシット・フローã§ã¯ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æ›´æ–°ã™ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“ã®ã§ã€ã€Œã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ç”Ÿå­˜æœŸé–“ã€ã¨ã¯ç•°ãªã‚‹åˆ¥ã€…ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆè¨­å®šã‚’設ã‘ã¦ã„ã¾ã™ã€‚ -action-token-generated-by-admin-lifespan=デフォルトã®ç®¡ç†è€…起動アクションã®æœ‰åŠ¹æœŸé–“ -action-token-generated-by-admin-lifespan.tooltip=管ç†è€…ã«ã‚ˆã£ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é€ä¿¡ã•ã‚ŒãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³è¨±å¯ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。ã“ã®å€¤ã¯ã€ç®¡ç†è€…ãŒç¾åœ¨ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ã«ãªã£ã¦ã„るユーザーã«å¯¾ã—ã¦Eメールをé€ä¿¡ã§ãるよã†ã«ã€é•·ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚デフォルトã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯ã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹ç›´å‰ã«ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -action-token-generated-by-user-lifespan=ユーザー起動アクションã®æœ‰åŠ¹æœŸé–“ -action-token-generated-by-user-lifespan.tooltip=ユーザーãŒé€ä¿¡ã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³è¨±å¯ï¼ˆãƒ‘スワード忘れã®Eメールãªã©ï¼‰ã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。ユーザーãŒè‡ªåˆ†ã§ä½œæˆã—ãŸæ“作ã«ã™ã°ã‚„ãåå¿œã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•ã‚Œã‚‹ãŸã‚ã€ã“ã®å€¤ã¯çŸ­ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -saml-assertion-lifespan=アサーションã®æœ‰åŠ¹æœŸé™ -saml-assertion-lifespan.tooltip=SAMLアサーションæ¡ä»¶ã«è¨­å®šã•ã‚ŒãŸæœ‰åŠ¹æœŸé™ã€‚ãã®å¾Œã€ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚「SessionNotOnOrAfterã€å±žæ€§ã¯å¤‰æ›´ã•ã‚Œãšã€ãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã§å®šç¾©ã•ã‚ŒãŸã€ŒSSOセッション最大ã€æ™‚間を引ã続ã使用ã—ã¾ã™ã€‚ - -action-token-generated-by-user.execute-actions=アクションã®å®Ÿè¡Œ -action-token-generated-by-user.idp-verify-account-via-email=IdPアカウントã®Eメール検証 -action-token-generated-by-user.reset-credentials=パスワード忘れ -action-token-generated-by-user.verify-email=Eメールã§ã®ç¢ºèª -action-token-generated-by-user.tooltip=ユーザーãŒé€ä¿¡ã—ãŸã‚¢ã‚¯ã‚·ãƒ§ãƒ³è¨±å¯ï¼ˆãƒ‘スワード忘れã®Eメールãªã©ï¼‰ãŒç‰¹å®šã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§æœŸé™åˆ‡ã‚Œã«ãªã‚‹ã¾ã§ã®ã€æœ€å¤§æ™‚é–“ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ユーザーãŒè‡ªåˆ†ã§ä½œæˆã—ãŸæ“作ã«ã™ã°ã‚„ãåå¿œã™ã‚‹ã“ã¨ãŒæœŸå¾…ã•ã‚Œã‚‹ãŸã‚ã€ã“ã®å€¤ã¯çŸ­ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -action-token-generated-by-user.reset=リセット -action-token-generated-by-user.operation=ユーザー起動アクションã®æœ‰åŠ¹æœŸé–“ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ - -client-login-timeout=クライアントã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ -client-login-timeout.tooltip=クライアントãŒã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãƒ»ãƒ—ロトコルを終了ã™ã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。ã“ã‚Œã¯é€šå¸¸1分ã§ã™ã€‚ -login-timeout=ログイン・タイムアウト -login-timeout.tooltip=ユーザーãŒãƒ­ã‚°ã‚¤ãƒ³ã‚’完了ã™ã‚‹ã¾ã§ã®æœ€å¤§æ™‚é–“ã§ã™ã€‚ã“ã‚Œã¯30分以上ã®ã‚ˆã†ã«æ¯”較的長ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -login-action-timeout=ログイン・アクション・タイムアウト -login-action-timeout.tooltip=ユーザーãŒãƒ‘スワードã®æ›´æ–°ã‚„OTPã®è¨­å®šã®ã‚ˆã†ãªãƒ­ã‚°ã‚¤ãƒ³ã«é–¢ä¿‚ã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’完了ã™ã‚‹ã¾ã§ã®æœ€å¤§æ™‚é–“ã§ã™ã€‚ã“ã‚Œã¯5分以上ã¨æ¯”較的長ãã™ã‚‹ã“ã¨ã‚’ãŠå‹§ã‚ã—ã¾ã™ã€‚ -headers=ヘッダー -brute-force-detection=ブルートフォースã®æ¤œå‡º -x-frame-options=X-Frame-Options -x-frame-options-tooltip=デフォルト値ã§ã¯åˆ¥ã®ã‚ªãƒªã‚¸ãƒ³ã®IFrameã‹ã‚‰ã®èª­ã¿è¾¼ã¿ã‚’防ãŽã¾ã™ï¼ˆè©³ç´°ã¯ãƒ©ãƒ™ãƒ«ã‚’クリックã—ã¦ãã ã•ã„) -content-sec-policy=Content-Security-Policy -content-sec-policy-tooltip=デフォルト値ã§ã¯åˆ¥ã®ã‚ªãƒªã‚¸ãƒ³ã®IFrameã‹ã‚‰ã®èª­ã¿è¾¼ã¿ã‚’防ãŽã¾ã™ï¼ˆè©³ç´°ã¯ãƒ©ãƒ™ãƒ«ã‚’クリックã—ã¦ãã ã•ã„) -content-sec-policy-report-only=Content-Security-Policy-Report-Only -content-sec-policy-report-only-tooltip=コンテンツ・セキュリティー・ãƒãƒªã‚·ãƒ¼ã®ãƒ†ã‚¹ãƒˆç”¨ -content-type-options=X-Content-Type-Options -content-type-options-tooltip=デフォルト値ã§ã¯Internet Explorerã¨Google Chromeã«å¯¾ã—ã¦ã€å®£è¨€ã•ã‚ŒãŸcontent-typeã‚’é¿ã‘ã¦ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã®MIME-sniffingã‚’è¡Œã†ã“ã¨ã‚’防ãŽã¾ã™ï¼ˆè©³ç´°ã¯ãƒ©ãƒ™ãƒ«ã‚’クリックã—ã¦ãã ã•ã„) -robots-tag=X-Robots-Tag -robots-tag-tooltip=検索エンジンã«ãƒšãƒ¼ã‚¸ãŒè¡¨ç¤ºã•ã‚Œãªã„よã†ã«ã™ã‚‹ï¼ˆè©³ç´°ã«ã¤ã„ã¦ã¯ã€ãƒ©ãƒ™ãƒ«ã‚’クリックã—ã¦ãã ã•ã„)。 -x-xss-protection=X-XSS-Protection -x-xss-protection-tooltip=ã“ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã¯ã€ãƒ–ラウザーã«ã‚¯ãƒ­ã‚¹ãƒ»ã‚µã‚¤ãƒˆãƒ»ã‚¹ã‚¯ãƒªãƒ—ティング(XSS)フィルターを設定ã—ã¾ã™ã€‚デフォルトã®å‹•ä½œã‚’使用ã™ã‚‹ã¨ã€ãƒ–ラウザーã¯XSS攻撃ãŒæ¤œå‡ºã•ã‚ŒãŸã¨ãã«ãƒšãƒ¼ã‚¸ã®ãƒ¬ãƒ³ãƒ€ãƒªãƒ³ã‚°ã‚’防止ã—ã¾ã™ï¼ˆè©³ç´°ã«ã¤ã„ã¦ã¯ã€ãƒ©ãƒ™ãƒ«ã‚’クリックã—ã¦ãã ã•ã„) -strict-transport-security=HTTP Strict Transport Security(HSTS) -strict-transport-security-tooltip=Strict-Transport-Security HTTPヘッダーã¯ã€å¸¸ã«HTTPSを使用ã™ã‚‹ã‚ˆã†ã«ãƒ–ラウザーã«æŒ‡ç¤ºã—ã¾ã™ã€‚ブラウザーã¯ã“ã®ãƒ˜ãƒƒãƒ€ãƒ¼ã‚’確èªã™ã‚‹ã¨ã€max-ageã§æŒ‡å®šã•ã‚ŒãŸæœŸé–“(1年間)ã€HTTPS経由ã§ã®ã¿ã‚µã‚¤ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ï¼ˆã‚µãƒ–ドメインをå«ã‚€ï¼‰ã€‚ -permanent-lockout=永久ロックアウト -permanent-lockout.tooltip=最大ログイン失敗回数を超ãˆãŸã¨ãã«ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’永久ã«ãƒ­ãƒƒã‚¯ã—ã¾ã™ã€‚ -max-login-failures=最大ログイン失敗回数 -max-login-failures.tooltip=検出ã™ã‚‹ã¾ã§ã®å¤±æ•—回数ã§ã™ã€‚ -wait-increment=連続失敗時ã®å¾…機時間 -wait-increment.tooltip=失敗回数ãŒé–¾å€¤ã«é”ã—ãŸå ´åˆã€ã©ã‚Œãらã„ã®æ™‚間ユーザーã¯ãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -quick-login-check-millis=クイックログイン試行間ã®ãƒŸãƒªç§’æ•°ãƒã‚§ãƒƒã‚¯ -quick-login-check-millis.tooltip=クイックログイン失敗ãŒã‚ã¾ã‚Šã«ã‚‚é »ç¹ã«ç™ºç”Ÿã—ãŸå ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’ロックアウトã—ã¾ã™ã€‚ -min-quick-login-wait=クイックログイン失敗時ã®æœ€å°å¾…機時間 -min-quick-login-wait.tooltip=クイックログイン失敗後ã«ã©ã‚Œãらã„ã®æ™‚é–“å¾…æ©Ÿã™ã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -max-wait=最大待機時間 -max-wait.tooltip=ユーザーãŒãƒ­ãƒƒã‚¯ã‚¢ã‚¦ãƒˆã•ã‚Œã‚‹æœ€å¤§å¾…機時間を設定ã—ã¾ã™ã€‚ -failure-reset-time=ログイン失敗回数ã®ãƒªã‚»ãƒƒãƒˆæ™‚é–“ -failure-reset-time.tooltip=ã„ã¤å¤±æ•—回数ãŒãƒªã‚»ãƒƒãƒˆã•ã‚Œã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -realm-tab-login=ログイン -realm-tab-keys=éµ -realm-tab-email=Eメール -realm-tab-themes=テーマ -#realm-tab-localization=Localization -realm-tab-cache=キャッシュ -realm-tab-tokens=トークン -realm-tab-client-registration=クライアント登録 -realm-tab-security-defenses=セキュリティー防御 -realm-tab-general=一般 -add-realm=レルムã®è¿½åŠ  - -#Session settings -realm-sessions=レルムセッション -revocation=無効化 -logout-all=ã™ã¹ã¦ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã™ã‚‹ -active-sessions=有効ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ -offline-sessions=オフライン・セッション -sessions=セッション -not-before=ã“ã®æ—¥æ™‚ã‚ˆã‚Šå‰ -not-before.tooltip=ã“ã®æ—¥æ™‚よりå‰ã«ç™ºè¡Œã•ã‚ŒãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’無効化ã—ã¾ã™ã€‚ -set-to-now=ç¾åœ¨æ—¥æ™‚を設定 -push=プッシュ -push.tooltip=管ç†URLã‚’æŒã¤ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã—ã¦ã€æ–°ã—ã„無効化ãƒãƒªã‚·ãƒ¼ã‚’通知ã—ã¾ã™ã€‚ - -#Protocol Mapper -usermodel.prop.label=プロパティー -usermodel.prop.tooltip=UserModelインターフェイスã®ãƒ—ロパティー・メソッドã®åå‰ã§ã™ã€‚例ãˆã°ã€ã€Œemailã€ã®å€¤ã¯UserModel.getEmail()メソッドをå‚ç…§ã—ã¦ã„ã¾ã™ã€‚ -usermodel.attr.label=ユーザー属性 -usermodel.attr.tooltip=æ ¼ç´ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§åã€UserMode.attributeマップ内ã®å±žæ€§åã§ã™ã€‚ -userSession.modelNote.label=ユーザー・セッション・ノート -userSession.modelNote.tooltip=UserSessionModel.noteマップ内ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ãƒ»ãƒŽãƒ¼ãƒˆåã§ã™ã€‚ -multivalued.label=マルãƒãƒãƒªãƒ¥ãƒ¼ -multivalued.tooltip=属性ãŒãƒžãƒ«ãƒãƒãƒªãƒ¥ãƒ¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚サãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å ´åˆã¯ã€ã“ã®å±žæ€§ã®ã™ã¹ã¦ã®å€¤ãƒªã‚¹ãƒˆãŒã‚¯ãƒ¬ãƒ¼ãƒ ã¨ã—ã¦è¨­å®šã•ã‚Œã¾ã™ã€‚サãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å ´åˆã¯ã€æœ€åˆã®å€¤ã ã‘ãŒã‚¯ãƒ¬ãƒ¼ãƒ ã¨ã—ã¦è¨­å®šã•ã‚Œã¾ã™ã€‚ -aggregate.attrs.label=属性値ã®é›†ç´„ -aggregate.attrs.tooltip=属性値をグループ属性ã¨é›†ç´„ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’示ã—ã¾ã™ã€‚OpenID Connectマッパーを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã™ã¹ã¦ã®å€¤ã‚’å–å¾—ã™ã‚‹ãŸã‚ã«ãƒžãƒ«ãƒãƒãƒªãƒ¥ãƒ¼ã®ã‚ªãƒ—ションも有効ã«ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚é‡è¤‡ã—ãŸå€¤ã¯ç ´æ£„ã•ã‚Œã€å€¤ã®é †åºã¯ã“ã®ã‚ªãƒ—ションã§ã¯ä¿è¨¼ã•ã‚Œã¾ã›ã‚“。 -selectRole.label=ロールã®é¸æŠž -selectRole.tooltip=å·¦å´ã«ã‚るテキストボックスã«ãƒ­ãƒ¼ãƒ«ã‚’入力ã™ã‚‹ã‹ã€ãƒ–ラウズã—ã¦å¿…è¦ãªãƒ­ãƒ¼ãƒ«ã‚’é¸æŠžã™ã‚‹ãŸã‚ã«ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。 -tokenClaimName.label=トークンクレームå -tokenClaimName.tooltip=トークン内ã«æŒ¿å…¥ã™ã‚‹ã‚¯ãƒ¬ãƒ¼ãƒ ã®åå‰ã‚’設定ã—ã¾ã™ã€‚「address.streetã€ã®ã‚ˆã†ã«å®Œå…¨ä¿®é£¾åã§è¨­å®šã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒã‚¹ãƒˆã•ã‚ŒãŸJSONオブジェクトãŒä½œæˆã•ã‚Œã¾ã™ã€‚ãƒã‚¹ãƒ†ã‚£ãƒ³ã‚°ã‚’防ãŽã€ãƒ‰ãƒƒãƒˆã‚’文字通りã«ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ãƒ‰ãƒƒãƒˆã‚’ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ï¼ˆ\\.)ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã—ã¾ã™ã€‚ -jsonType.label=クレームJSONタイプ -jsonType.tooltip=トークンã¸ã®JSONクレームã®è¿½åŠ ã§ä½¿ç”¨ã•ã‚Œã‚‹JSONタイプを設定ã—ã¾ã™ã€‚longã€intã€booleanã€Stringã€JSONãŒæœ‰åŠ¹ãªå€¤ã§ã™ã€‚ -includeInIdToken.label=IDトークンã«è¿½åŠ  -includeInIdToken.tooltip=クレームをIDトークンã«è¿½åŠ ã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -includeInAccessToken.label=アクセストークンã«è¿½åŠ  -includeInAccessToken.tooltip=クレームをアクセストークンã«è¿½åŠ ã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -includeInUserInfo.label=UserInfoã«è¿½åŠ  -includeInUserInfo.tooltip=クレームをUserInfoã«è¿½åŠ ã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -usermodel.clientRoleMapping.clientId.label=クライアントID -usermodel.clientRoleMapping.clientId.tooltip=ロールマッピング用ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆID。ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã ã‘ãŒãƒˆãƒ¼ã‚¯ãƒ³ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚ã“ã‚ŒãŒè¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ãŒãƒˆãƒ¼ã‚¯ãƒ³ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚ -usermodel.clientRoleMapping.rolePrefix.label=クライアント・ロールã®ãƒ—レフィックス -usermodel.clientRoleMapping.rolePrefix.tooltip=å„クライアント・ロールã®ãƒ—レフィックスを設定ã—ã¾ã™ï¼ˆã‚ªãƒ—ション)。 -usermodel.clientRoleMapping.tokenClaimName.tooltip=トークン内ã«æŒ¿å…¥ã™ã‚‹ã‚¯ãƒ¬ãƒ¼ãƒ ã®åå‰ã‚’設定ã—ã¾ã™ã€‚「address.streetã€ã®ã‚ˆã†ã«å®Œå…¨ä¿®é£¾åã§è¨­å®šã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒã‚¹ãƒˆã•ã‚ŒãŸJSONオブジェクトãŒä½œæˆã•ã‚Œã¾ã™ã€‚ãƒã‚¹ãƒ†ã‚£ãƒ³ã‚°ã‚’防ãŽã€ãƒ‰ãƒƒãƒˆã‚’文字通りã«ä½¿ç”¨ã™ã‚‹ã«ã¯ã€ãƒ‰ãƒƒãƒˆã‚’ãƒãƒƒã‚¯ã‚¹ãƒ©ãƒƒã‚·ãƒ¥ï¼ˆ\\.)ã§ã‚¨ã‚¹ã‚±ãƒ¼ãƒ—ã—ã¾ã™ã€‚特別ãªãƒˆãƒ¼ã‚¯ãƒ³${client_id}を使ã†ã“ã¨ãŒã§ãã€ã“ã‚Œã¯å®Ÿéš›ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIDã«ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚使用例ã¯ã€Œresource_access.${client_id}.rolesã€ã§ã™ã€‚ã“ã‚Œã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‹ã‚‰ãƒ­ãƒ¼ãƒ«ã‚’追加ã™ã‚‹å ´åˆï¼ˆç‰¹ã«ã€ŒClient IDã€ã‚¹ã‚¤ãƒƒãƒãŒè¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆï¼‰ã‚„ã€å„クライアントã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã‚’別々ã®å ´æ‰€ã«ä¿å­˜ã™ã‚‹å ´åˆã«ã€ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚ -usermodel.realmRoleMapping.rolePrefix.label=レルムロールã®ãƒ—レフィックス -usermodel.realmRoleMapping.rolePrefix.tooltip=å„レルムロールã®ãƒ—レフィックスを設定ã—ã¾ã™ï¼ˆã‚ªãƒ—ション)。 -sectorIdentifierUri.label=セクター識別å­URI -sectorIdentifierUri.tooltip=pairwise sub値を使用ã—ã€ã‹ã¤å‹•çš„クライアント登録をサãƒãƒ¼ãƒˆã™ã‚‹ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã¯ã€sector_identifier_uriパラメーターを使用ã™ã¹ãã§ã™ï¼ˆSHOULD)。ã“ã‚Œã¯ã€å…±é€šã®ç®¡ç†ä¸‹ã«ã‚ã‚‹Webサイト群ã«å¯¾ã—ã€å€‹ã€…ã®ãƒ‰ãƒ¡ã‚¤ãƒ³åã¨ã¯ç‹¬ç«‹ã—ã¦parwise sub値ã®ä¸€è²«æ€§ã‚’ä¿æŒã™ã‚‹æ–¹æ³•ã‚’æä¾›ã—ã¾ã™ã€‚ã¾ãŸã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã—ã€ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å†ç™»éŒ²ã•ã›ã‚‹ã“ã¨ãªã—ã«redirect_uriを変更ã™ã‚‹æ–¹æ³•ã‚‚æä¾›ã—ã¾ã™ã€‚ -pairwiseSubAlgorithmSalt.label=ソルト -pairwiseSubAlgorithmSalt.tooltip=ペアワイズ対象識別å­ã‚’計算ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ã‚½ãƒ«ãƒˆã‚’設定ã—ã¾ã™ã€‚空白ã®ã¾ã¾ã«ã™ã‚‹ã¨ã‚½ãƒ«ãƒˆã¯ç”Ÿæˆã•ã‚Œã¾ã™ã€‚ -addressClaim.street.label=ãã®ä»–ä½æ‰€ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.street.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œstreet_addressã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œstreetã€ã§ã™ã€‚ -addressClaim.locality.label=市区町æ‘ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.locality.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œlocalityã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œlocalityã€ã§ã™ã€‚ -addressClaim.region.label=都é“府県ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.region.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œregionã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œregionã€ã§ã™ã€‚ -addressClaim.postal_code.label=郵便番å·ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.postal_code.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œpostal_codeã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œpostal_codeã€ã§ã™ã€‚ -addressClaim.country.label=国ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.country.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œcountryã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œcountryã€ã§ã™ã€‚ -addressClaim.formatted.label=æ•´å½¢ã•ã‚ŒãŸä½æ‰€ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§å -addressClaim.formatted.tooltip=「addressã€ãƒˆãƒ¼ã‚¯ãƒ³ã‚¯ãƒ¬ãƒ¼ãƒ å†…ã®ã€Œformattedã€ã‚µãƒ–クレームã«ãƒžãƒƒãƒ—ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å±žæ€§ã®åå‰ã€‚デフォルトã¯ã€Œformattedã€ã§ã™ã€‚ -included.client.audience.label=å«ã¾ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ -included.client.audience.tooltip=指定ã•ã‚ŒãŸã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ãƒ»ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIDãŒã€ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ï¼ˆaud)フィールドã«å«ã¾ã‚Œã¾ã™ã€‚トークンã«æ—¢å­˜ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€æŒ‡å®šã•ã‚ŒãŸå€¤ãŒå˜ã«ãれらã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚既存ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ã‚’上書ãã™ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。 -included.custom.audience.label=å«ã¾ã‚Œã‚‹ã‚«ã‚¹ã‚¿ãƒ ãƒ»ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ -included.custom.audience.tooltip=ã“ã‚Œã¯ã€Œå«ã¾ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ã€ãŒå…¥åŠ›ã•ã‚Œã¦ã„ãªã„å ´åˆã«ã®ã¿ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚指定ã•ã‚ŒãŸå€¤ãŒã€ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ï¼ˆaud)フィールドã«å«ã¾ã‚Œã¾ã™ã€‚トークンã«æ—¢å­˜ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ãŒå­˜åœ¨ã™ã‚‹å ´åˆã¯ã€æŒ‡å®šã•ã‚ŒãŸå€¤ãŒå˜ã«ãれらã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚既存ã®ã‚ªãƒ¼ãƒ‡ã‚£ã‚¨ãƒ³ã‚¹ã‚’上書ãã™ã‚‹ã“ã¨ã¯ã‚ã‚Šã¾ã›ã‚“。 - -# client details -clients.tooltip=クライアントã¨ã¯ãƒ¬ãƒ«ãƒ å†…ã®ä¿¡é ¼ã•ã‚ŒãŸãƒ–ラウザー・アプリケーションやWebサービスã§ã™ã€‚ã“れらã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ­ã‚°ã‚¤ãƒ³ã‚’è¦æ±‚ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ã¾ãŸã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå›ºæœ‰ã®ãƒ­ãƒ¼ãƒ«ã‚’定義ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -search.placeholder=検索... -search.loading=検索ã—ã¦ã„ã¾ã™... -create=ä½œæˆ -import=インãƒãƒ¼ãƒˆ -client-id=クライアントID -base-url=ベースURL -actions=アクション -not-defined=未定義 -edit=編集 -delete=削除 -no-results=çµæžœãŒã‚ã‚Šã¾ã›ã‚“ -no-clients-available=使用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã‚ã‚Šã¾ã›ã‚“ -add-client=クライアントã®è¿½åŠ  -select-file=ファイルをé¸æŠž -view-details=詳細をå‚ç…§ -clear-import=インãƒãƒ¼ãƒˆã‚’クリア -client-id.tooltip=URIã¨ãƒˆãƒ¼ã‚¯ãƒ³ã§å‚ç…§ã•ã‚Œã‚‹IDを指定ã—ã¾ã™ã€‚例ãˆã°ã€Œmy-clientã€ã§ã™ã€‚SAMLã«ãŠã„ã¦ã¯æœŸå¾…ã•ã‚Œã‚‹AuthnRequestã®Issuerã®å€¤ã«ãªã‚Šã¾ã™ã€‚ -client.name.tooltip=クライアントã®è¡¨ç¤ºåを指定ã—ã¾ã™ã€‚例ãˆã°ã€ã€ŒMy Clientã€ã§ã™ã€‚ローカライズ用ã®ã‚­ãƒ¼ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚例\: ${my_client} -client.enabled.tooltip=無効ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ­ã‚°ã‚¤ãƒ³ã‚’開始ã—ãŸã‚Šã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã—ãŸã‚Šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -alwaysDisplayInConsole=常ã«ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«è¡¨ç¤º -alwaysDisplayInConsole.tooltip=ユーザーã®ã‚¢ã‚¯ãƒ†ã‚£ãƒ–ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãªã„å ´åˆã§ã‚‚ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’常ã«ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ»ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã«ä¸€è¦§è¡¨ç¤ºã—ã¾ã™ã€‚ -consent-required=åŒæ„ãŒå¿…è¦ -consent-required.tooltip=有効ã®å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¢ã‚¯ã‚»ã‚¹ã«åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -client.display-on-consent-screen=åŒæ„ç”»é¢ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’表示 -client.display-on-consent-screen.tooltip=åŒæ„ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã«ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã®ã‚¹ã‚¤ãƒƒãƒãŒã‚ªãƒ•ã®å ´åˆã€åŒæ„ç”»é¢ã«ã¯è¨­å®šã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã«å¯¾å¿œã™ã‚‹åŒæ„ã®ã¿ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚オンã®å ´åˆã€åŒæ„ç”»é¢ã«ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè‡ªä½“ã«é–¢ã™ã‚‹é …目も1ã¤è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ -client.consent-screen-text=クライアントã®åŒæ„ç”»é¢ã®ãƒ†ã‚­ã‚¹ãƒˆ -client.consent-screen-text.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã—ã¦ã€ã€ŒåŒæ„ç”»é¢ã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’表示ã€ãŒã‚ªãƒ³ã®å ´åˆã«ã®ã¿é©ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã™ã‚‹ç‰¹å®šã®ã‚¢ã‚¯ã‚»ã‚¹è¨±å¯ã«ã¤ã„ã¦ã€åŒæ„ç”»é¢ã«è¡¨ç¤ºã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚ -client-protocol=クライアント・プロトコル -client-protocol.tooltip=「OpenID Connectã€ã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯èªå¯ã‚µãƒ¼ãƒãƒ¼ã«ã‚ˆã£ã¦å®Ÿè¡Œã•ã‚Œã‚‹èªè¨¼ã«åŸºã¥ã„ã¦ã‚¨ãƒ³ãƒ‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã‚’検証ã§ãã¾ã™ã€‚「SAMLã€ã¯ã€ã‚¯ãƒ­ã‚¹ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã‚·ãƒ³ã‚°ãƒ«ãƒ»ã‚µã‚¤ãƒ³ã‚ªãƒ³ï¼ˆSSO)をå«ã‚€Webベースã®èªè¨¼ãŠã‚ˆã³èªå¯ã®ã‚·ãƒŠãƒªã‚ªã‚’å¯èƒ½ã«ã—ã€ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã‚’å«ã‚€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’使用ã—ã¦æƒ…報を渡ã—ã¾ã™ã€‚ -access-type=アクセスタイプ -access-type.tooltip=「Confidentialã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ãƒ—ロトコルを開始ã™ã‚‹ãŸã‚ã«ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’å¿…è¦ã¨ã—ã¾ã™ã€‚「Publicã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’å¿…è¦ã¨ã—ã¾ã›ã‚“。「Bearer-onlyã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ­ã‚°ã‚¤ãƒ³ã‚’開始ã™ã‚‹ã“ã¨ã¯ãªã„Webサービスã§ã™ã€‚ -standard-flow-enabled=標準フローã®æœ‰åŠ¹ -standard-flow-enabled.tooltip=OpenID Connectã®æ¨™æº–çš„ãªã€èªå¯ã‚³ãƒ¼ãƒ‰ã«ã‚ˆã‚‹ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ»ãƒ™ãƒ¼ã‚¹ã®èªè¨¼ã‚’有効ã«ã—ã¾ã™ã€‚OpenID Connectã¾ãŸã¯OAuth2ã®ä»•æ§˜ã«ãŠã‘る「èªå¯ã‚³ãƒ¼ãƒ‰ãƒ•ãƒ­ãƒ¼ã€ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚ -implicit-flow-enabled=インプリシット・フローã®æœ‰åŠ¹ -implicit-flow-enabled.tooltip=OpenID Connectã®èªå¯ã‚³ãƒ¼ãƒ‰ãªã—ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆãƒ»ãƒ™ãƒ¼ã‚¹èªè¨¼ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚OpenID Connectã¾ãŸã¯OAuth2ã®ä»•æ§˜ã«ãŠã‘る「インプリシット・フローã€ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚ -direct-access-grants-enabled=ダイレクト・アクセス・グラントã®æœ‰åŠ¹ -direct-access-grants-enabled.tooltip=ダイレクト・アクセス・グラントã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚ã“ã‚Œã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã®å–å¾—ã®ãŸã‚ã«Keycloakサーãƒãƒ¼ã¨ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードã§ç›´æŽ¥ã‚¢ã‚¯ã‚»ã‚¹ã‚’è¡Œã„ã¾ã™ã€‚OAuth2ã®ä»•æ§˜ã«ãŠã‘る「リソース・オーナー・パスワード・クレデンシャル・グラントã€ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚ -service-accounts-enabled=サービス・アカウントã®æœ‰åŠ¹ -service-accounts-enabled.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’Keycloakã§èªè¨¼ã—ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå°‚用ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã®å–å¾—ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚OAuth2ã®ä»•æ§˜ã«ãŠã‘る「クライアント・クレデンシャル・グラントã€ã®ã‚µãƒãƒ¼ãƒˆã‚’有効ã«ã—ã¾ã™ã€‚ -include-authnstatement=AuthnStatementã‚’å«ã‚ã‚‹ -include-authnstatement.tooltip=èªè¨¼æ–¹å¼ã¨ã‚¿ã‚¤ãƒ ã‚¹ã‚¿ãƒ³ãƒ—ã‚’å«ã‚ãŸã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã‚’ログイン・レスãƒãƒ³ã‚¹ã«å«ã‚ã‚‹ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ -include-onetimeuse-condition=OneTimeUseæ¡ä»¶ã‚’å«ã‚ã‚‹ -include-onetimeuse-condition.tooltip=OneTimeUseæ¡ä»¶ã‚’ログイン・レスãƒãƒ³ã‚¹ã«å«ã‚ã‚‹ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ -sign-documents=ドキュメントを署åã™ã‚‹ -sign-documents.tooltip=SAMLドキュメントをレルムã§ç½²åã™ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ -sign-documents-redirect-enable-key-info-ext=REDIRECTç½²åéµæ¤œç´¢ã®æœ€é©åŒ– -sign-documents-redirect-enable-key-info-ext.tooltip=Keycloakアダプターã«ã‚ˆã£ã¦ä¿è­·ã•ã‚ŒãŸSPã®REDIRECTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã§SAMLドキュメントã«ç½²åã™ã‚‹éš›ã€ç½²åéµã®IDã‚’è¦ç´ ã®SAMLプロトコルメッセージã«å«ã‚ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€æ¤œè¨¼ã®ãŸã‚ã«æ—¢çŸ¥ã®ã™ã¹ã¦ã®ã‚­ãƒ¼ã‚’試行ã™ã‚‹ä»£ã‚ã‚Šã«å˜ä¸€ã®ã‚­ãƒ¼ã‚’使用ã™ã‚‹ãŸã‚ã€ç½²åã®æ¤œè¨¼ãŒæœ€é©åŒ–ã•ã‚Œã¾ã™ã€‚ -sign-assertions=アサーションを署åã™ã‚‹ -sign-assertions.tooltip=SAMLドキュメント内ã®ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã‚’ç½²åã™ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ã‚‚ã—ドキュメントãŒæ—¢ã«ç½²å済ã¿ã®å ´åˆã¯ã€ã“ã®è¨­å®šã¯ä¸è¦ã§ã™ã€‚ -signature-algorithm=ç½²åアルゴリズム -signature-algorithm.tooltip=ドキュメントã®ç½²åã«ä½¿ç”¨ã™ã‚‹ç½²åアルゴリズムã§ã™ã€‚ -canonicalization-method=æ­£è¦åŒ–æ–¹å¼ -canonicalization-method.tooltip=XMLç½²åã®æ­£è¦åŒ–æ–¹å¼ï¼ˆCanonicalization Method)を設定ã—ã¾ã™ã€‚ -encrypt-assertions=アサーションを暗å·åŒ–ã™ã‚‹ -encrypt-assertions.tooltip=SAMLアサーションをクライアントã®å…¬é–‹éµã§AESを使ã„æš—å·åŒ–ã™ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ -client-signature-required=クライアント署åãŒå¿…é ˆ -client-signature-required.tooltip=クライアントãŒSAMLリクエストã¨ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’ç½²åã™ã‚‹ã‹ã€ãã—ã¦ãれらを検証ã™ã¹ãã©ã†ã‹ã‹è¨­å®šã—ã¾ã™ã€‚ -force-post-binding=POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’強制 -force-post-binding.tooltip=レスãƒãƒ³ã‚¹ã«å¸¸ã«POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’使用ã—ã¾ã™ã€‚ -front-channel-logout=フロントãƒãƒ£ãƒ³ãƒãƒ«ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ -front-channel-logout.tooltip=有効ã®å ´åˆã¯ã€ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸ã®ãƒ–ラウザー・リダイレクトãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚無効ã®å ´åˆã¯ã€ã‚µãƒ¼ãƒãƒ¼ã¯ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã®ãƒãƒƒã‚¯ã‚°ãƒ©ã‚¦ãƒ³ãƒ‰å‘¼ã³å‡ºã—ã‚’è¡Œã„ã¾ã™ã€‚ -force-name-id-format=Name IDフォーマットを強制 -force-name-id-format.tooltip=è¦æ±‚ã•ã‚ŒãŸNameIDサブジェクト・フォーマットを無視ã—ã€ç®¡ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã§è¨­å®šã•ã‚ŒãŸç‰©ã‚’使用ã—ã¾ã™ã€‚ -name-id-format=Name IDフォーマット -name-id-format.tooltip=サブジェクトã«ä½¿ç”¨ã™ã‚‹Name IDフォーマットを設定ã—ã¾ã™ã€‚ -mapper.nameid.format.tooltip=マッパーをé©ç”¨ã™ã‚‹Name IDフォーマット -root-url=ルートURL -root-url.tooltip=相対URLã«è¿½åŠ ã™ã‚‹ãƒ«ãƒ¼ãƒˆURLを設定ã—ã¾ã™ã€‚ -valid-redirect-uris=有効ãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURI -valid-redirect-uris.tooltip=ログインã¾ãŸã¯ãƒ­ã‚°ã‚¤ãƒ³ã®æˆåŠŸå¾Œã«ãƒ–ラウザーãŒãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆå¯èƒ½ã¨ã™ã‚‹ã€æœ‰åŠ¹ãªURIパターンを設定ã—ã¾ã™ã€‚「http://example.com/*ã€ã®ã‚ˆã†ãªå˜ç´”ãªãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ãŒä½¿ç”¨å¯èƒ½ã§ã™ã€‚相対パスã€ã¤ã¾ã‚Šã€Œ/my/relative/path/*ã€ã‚‚指定å¯èƒ½ã§ã™ã€‚相対パスã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ«ãƒ¼ãƒˆURLを基準ã¨ã—ã¾ã™ã€‚ã¾ãŸã¯ã€æœªæŒ‡å®šã®å ´åˆã¯èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã®ãƒ«ãƒ¼ãƒˆURLãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚SAMLã§ã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«åŸ‹ã‚è¾¼ã¾ã‚ŒãŸã‚³ãƒ³ã‚·ãƒ¥ãƒ¼ãƒžãƒ¼ãƒ»ã‚µãƒ¼ãƒ“スã®URLã«ä¾å­˜ã—ã¦ã„ã‚‹å ´åˆã¯ã€æœ‰åŠ¹ãªURIパターンを設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -base-url.tooltip=èªè¨¼ã‚µãƒ¼ãƒãƒ¼ãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸ã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã¾ãŸã¯æˆ»ã‚‹ãƒªãƒ³ã‚¯ã‚’å¿…è¦ã¨ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆURLを設定ã—ã¾ã™ã€‚ -admin-url=管ç†URL -admin-url.tooltip=クライアントã®ç®¡ç†ã‚¤ãƒ³ã‚¿ãƒ¼ãƒ•ã‚§ã‚¤ã‚¹ã®URLを設定ã—ã¾ã™ã€‚クライアントãŒã‚¢ãƒ€ãƒ—ターã®REST APIをサãƒãƒ¼ãƒˆã—ã¦ã„ã‚‹å ´åˆã«è¨­å®šã—ã¦ãã ã•ã„。ã“ã®REST APIã«ã‚ˆã‚Šã€èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã¯ç„¡åŠ¹åŒ–ãƒãƒªã‚·ãƒ¼ã‚„ä»–ã®ç®¡ç†ã‚¿ã‚¹ã‚¯ã‚’プッシュã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚通常ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ™ãƒ¼ã‚¹URLを設定ã—ã¾ã™ã€‚ -master-saml-processing-url=SAMLを処ç†ã™ã‚‹ãƒžã‚¹ã‚¿ãƒ¼URL -master-saml-processing-url.tooltip=設定ã•ã‚ŒãŸå ´åˆã¯ã€ã“ã®URLãŒSPã®ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ãƒ»ã‚³ãƒ³ã‚·ãƒ¥ãƒ¼ãƒžãƒ¼ãŠã‚ˆã³ã‚·ãƒ³ã‚°ãƒ«ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆãƒ»ã‚µãƒ¼ãƒ“スã®ä¸¡æ–¹ã®Bindingã«ä½¿ã‚ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€SAMLエンドãƒã‚¤ãƒ³ãƒˆã®è©³ç´°è¨­å®šã«ã‚ã‚‹å„Bindingやサービスã®è¨­å®šã«ã¦å€‹åˆ¥ã«ä¸Šæ›¸ãã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -idp-sso-url-ref=IDP Initiated SSOã®URLå -idp-sso-url-ref.tooltip=IDP Initiated SSOã‚’è¡Œã†éš›ã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’å‚ç…§ã™ã‚‹ãŸã‚ã®URLフラグメントåを設定ã—ã¾ã™ã€‚空ã«ã™ã‚‹ã¨IDP Initiated SSOã¯ç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚ブラウザーã‹ã‚‰å‚ç…§ã™ã‚‹URLã¯ã€Œ{server-root}/realms/{realm}/protocol/saml/clients/{client-url-name}ã€ã«ãªã‚Šã¾ã™ã€‚ -idp-sso-url-ref.urlhint=対象ã®IDP initiated SSOã®URL: -idp-sso-relay-state=IDP Initiated SSOã®RelayState -idp-sso-relay-state.tooltip=IDP Initiated SSOã‚’è¡Œã†éš›ã®SAMLリクエストã§é€ä¿¡ã—ãŸã„RelayStateを設定ã—ã¾ã™ã€‚ -web-origins=Webオリジン -web-origins.tooltip=許å¯ã•ã‚Œã‚‹CORSオリジンを設定ã—ã¾ã™ã€‚有効ãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã®ã™ã¹ã¦ã®ã‚ªãƒªã‚¸ãƒ³ã‚’許å¯ã™ã‚‹ã«ã¯ã€Œ+ã€ã‚’追加ã—ã¦ãã ã•ã„。ãŸã ã—ã€ã“ã‚Œã«ã¯ã€Œ*ã€ãƒ¯ã‚¤ãƒ«ãƒ‰ã‚«ãƒ¼ãƒ‰ã¯å«ã¾ã‚Œã¾ã›ã‚“。ã™ã¹ã¦ã®ã‚ªãƒªã‚¸ãƒ³ã‚’許å¯ã™ã‚‹ã«ã¯ã€æ˜Žç¤ºçš„ã«ã€Œ*ã€ã‚’追加ã—ã¦ãã ã•ã„。 -fine-oidc-endpoint-conf=OpenID Connectã®è©³ç´°è¨­å®š -fine-oidc-endpoint-conf.tooltip=ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’展開ã—ã¦ã€OpenID Connectプロトコルã«é–¢é€£ã™ã‚‹ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®é«˜åº¦ãªè¨­å®šã‚’è¡Œã„ã¾ã™ã€‚ -access-token-signed-response-alg=アクセストークン署åアルゴリズム -access-token-signed-response-alg.tooltip=アクセストークンã®ç½²åã«ä½¿ç”¨ã•ã‚Œã‚‹JWAアルゴリズム。 -id-token-signed-response-alg=IDトークン署åアルゴリズム -id-token-signed-response-alg.tooltip=IDトークンã®ç½²åã«ä½¿ç”¨ã•ã‚Œã‚‹JWAアルゴリズム。 -id-token-encrypted-response-alg=IDトークン暗å·åŒ–éµç®¡ç†ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  -id-token-encrypted-response-alg.tooltip=IDトークンã®æš—å·åŒ–éµã®ç®¡ç†ã«ä½¿ç”¨ã•ã‚Œã‚‹JWAアルゴリズム。ã“ã®ã‚ªãƒ—ションã¯ã€æš—å·åŒ–ã•ã‚ŒãŸIDトークンãŒå¿…è¦ãªå ´åˆã«å¿…é ˆã§ã™ã€‚空ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€IDトークンã¯ç½²åã•ã‚Œã¾ã™ãŒã€æš—å·åŒ–ã•ã‚Œã¾ã›ã‚“。 -id-token-encrypted-response-enc=IDトークン暗å·åŒ–コンテンツã®æš—å·åŒ–アルゴリズム -id-token-encrypted-response-enc.tooltip=IDトークンã®æš—å·åŒ–ã®éš›ã«ã€ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã®æš—å·åŒ–ã«ä½¿ç”¨ã•ã‚Œã‚‹JWAアルゴリズム。ã“ã®ã‚ªãƒ—ションã¯ã€æš—å·åŒ–ã•ã‚ŒãŸIDトークンãŒå¿…è¦ãªå ´åˆã«ã®ã¿å¿…é ˆã§ã™ã€‚空ã®ã¾ã¾ã«ã™ã‚‹ã¨ã€IDトークンã¯ç½²åã•ã‚Œã¾ã™ãŒã€æš—å·åŒ–ã•ã‚Œã¾ã›ã‚“。 -user-info-signed-response-alg=ç½²å付ãUserInfoレスãƒãƒ³ã‚¹ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  -user-info-signed-response-alg.tooltip=ç½²å付ãUserInfoエンドãƒã‚¤ãƒ³ãƒˆã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã«ä½¿ç”¨ã™ã‚‹JWAアルゴリズムを設定ã—ã¾ã™ã€‚「unsignedã€ã«è¨­å®šã—ãŸå ´åˆã¯ã€UserInfoレスãƒãƒ³ã‚¹ã¯ç½²åã•ã‚Œãšã€application/jsonå½¢å¼ã§è¿”ã•ã‚Œã¾ã™ã€‚ -request-object-signature-alg=リクエスト・オブジェクトã®ç½²åアルゴリズム -request-object-signature-alg.tooltip=クライアントãŒã€Œrequestã€ã¾ãŸã¯ã€Œrequest_uriã€ãƒ‘ラメーターã§æŒ‡å®šã•ã‚ŒãŸOIDCリクエスト・オブジェクトをé€ä¿¡ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€JWAアルゴリズムを設定ã—ã¾ã™ã€‚「anyã€ã«è¨­å®šã—ãŸå ´åˆã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトã¯ä»»æ„ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ï¼ˆã€Œnoneã€ã‚’å«ã‚€ï¼‰ã§ç½²åã•ã‚Œã¾ã™ã€‚ -request-object-required=リクエスト・オブジェクトãŒå¿…è¦ -request-object-required.tooltip=クライアントãŒèªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¨ã¨ã‚‚ã«ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトをæä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã€ãŠã‚ˆã³ãã®ãŸã‚ã«ã©ã®æ–¹æ³•ã‚’使用ã§ãã‚‹ã‹ã‚’指定ã—ã¾ã™ã€‚「not requiredã€ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトã®æä¾›ã¯ã‚ªãƒ—ションã§ã™ã€‚ãれ以外ã®ã‚±ãƒ¼ã‚¹ã§ã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトをæä¾›ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「requestã€ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトã¯å€¤ã§æä¾›ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「request_uriã€ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆãƒ»ã‚ªãƒ–ジェクトã¯å‚ç…§ã«ã‚ˆã£ã¦æä¾›ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「requestã¾ãŸã¯request_uriã€ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã€ã„ãšã‚Œã®æ–¹æ³•ã‚‚使用ã§ãã¾ã™ã€‚ -fine-saml-endpoint-conf=SAMLエンドãƒã‚¤ãƒ³ãƒˆã®è©³ç´°è¨­å®š -fine-saml-endpoint-conf.tooltip=アサーション・コンシューマーãŠã‚ˆã³ã‚·ãƒ³ã‚°ãƒ«ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆãƒ»ã‚µãƒ¼ãƒ“スã®æ­£ç¢ºãªURLを設定ã™ã‚‹ã«ã¯ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’é–‹ãã¾ã™ã€‚ -assertion-consumer-post-binding-url=アサーション・コンシューマー・サービスã®POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URL -assertion-consumer-post-binding-url.tooltip=アサーション・コンシューマー・サービス(ログイン・レスãƒãƒ³ã‚¹ï¼‰ã®SAML POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URLを設定ã—ã¾ã™ã€‚ã“ã®Bindingã®ãŸã‚ã®URLãŒãªã„å ´åˆã¯ç©ºã§ã‚ˆã„ã§ã™ã€‚ -assertion-consumer-redirect-binding-url=アサーション・コンシューマー・サービスã®Redirectãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URL -assertion-consumer-redirect-binding-url.tooltip=アサーション・コンシューマー・サービス(ログイン・レスãƒãƒ³ã‚¹ï¼‰ã®SAML Redirectãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URLを設定ã—ã¾ã™ã€‚ã“ã®Bindingã®ãŸã‚ã®URLãŒãªã„å ´åˆã¯ç©ºã§ã‚ˆã„ã§ã™ã€‚ -logout-service-post-binding-url=ログアウト・サービスã®POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URL -logout-service-post-binding-url.tooltip=シングル・ログアウト・サービスã®SAMLPOSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URLを設定ã—ã¾ã™ã€‚ç•°ãªã‚‹Bindingを使用ã—ã¦ã„ã‚‹å ´åˆã¯ç©ºã§ã‚ˆã„ã§ã™ã€‚ -logout-service-redir-binding-url=ログアウト・サービスã®Redirectãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URL -logout-service-redir-binding-url.tooltip=シングル・ログアウト・サービスã®SAMLRedirectãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°URLを設定ã—ã¾ã™ã€‚ç•°ãªã‚‹Bindingを使用ã—ã¦ã„ã‚‹å ´åˆã¯ç©ºã§ã‚ˆã„ã§ã™ã€‚ -saml-signature-keyName-transformer=SAMLç½²åéµå -saml-signature-keyName-transformer.tooltip=ç½²åã•ã‚ŒãŸSAML文書ã«ã¯ã€KeyNameè¦ç´ ã®ç½²åéµã®è­˜åˆ¥æƒ…å ±ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚Keycloak / RH-SSOカウンター・パーティーã®å ´åˆã¯ã€KEY_IDを使用ã—ã€MS AD FSã®å ´åˆã¯CERT_SUBJECTを使用ã—ã¾ã™ã€‚ä»–ã®ã‚ªãƒ—ションãŒå‹•ä½œã—ãªã„å ´åˆã¯NONEã‚’ãƒã‚§ãƒƒã‚¯ã—ã¦ä½¿ç”¨ã—ã¾ã™ã€‚ -oidc-compatibility-modes=OpenID Connect互æ›ãƒ¢ãƒ¼ãƒ‰ -oidc-compatibility-modes.tooltip=ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’展開ã—ã¦ã€å¤ã„OpenID Connect / OAuth2アダプターã¨ã®ä¸‹ä½äº’æ›æ€§ã®è¨­å®šã‚’è¡Œã„ã¾ã™ã€‚ã“ã‚Œã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒå¤ã„ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®Keycloak / RH-SSOアダプターを使用ã—ã¦ã„ã‚‹å ´åˆã«ç‰¹ã«ä¾¿åˆ©ã§ã™ã€‚ -exclude-session-state-from-auth-response=èªè¨¼ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‹ã‚‰ã‚»ãƒƒã‚·ãƒ§ãƒ³çŠ¶æ…‹ã‚’除外 -exclude-session-state-from-auth-response.tooltip=ã“ã‚ŒãŒã‚ªãƒ³ã®å ´åˆã€ãƒ‘ラメーター「session_stateã€ã¯OpenID Connectèªè¨¼ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã«å«ã¾ã‚Œã¾ã›ã‚“。クライアントãŒã€Œsession_stateã€ãƒ‘ラメーターをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å¤ã„OIDC / OAuth2アダプターを使用ã—ã¦ã„ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚ - -# client import -import-client=クライアントã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -format-option=フォーマット・オプション -select-format=フォーマットをé¸æŠž -import-file=ファイルをインãƒãƒ¼ãƒˆ - -# client tabs -settings=設定 -credentials=クレデンシャル -roles=ロール -mappers=マッパー -mappers.tooltip=プロトコル・マッパーã¯ãƒˆãƒ¼ã‚¯ãƒ³ã‚„ドキュメントã®å¤‰æ›ã‚’è¡Œã„ã¾ã™ã€‚ユーザーデータをプロトコルã®ã‚¯ãƒ¬ãƒ¼ãƒ ã«ãƒžãƒƒãƒ”ングã—ãŸã‚Šã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨èªè¨¼ã‚µãƒ¼ãƒãƒ¼é–“ã®ä»»æ„ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’å˜ã«å¤‰æ›ã—ãŸã‚Šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -scope=スコープ -scope.tooltip=スコープ・マッピングã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¦æ±‚ã•ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³å†…ã«å«ã¾ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ­ãƒ¼ãƒ«ãƒžãƒƒãƒ”ングを制é™ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -sessions.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æœ‰åŠ¹ãªã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¾ã™ã€‚ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¢ã‚¯ãƒ†ã‚£ãƒ–ã§ã„ã¤ãƒ­ã‚°ã‚¤ãƒ³ã—ãŸã‹ã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚ -offline-access=オフライン・アクセス -offline-access.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’å‚ç…§ã—ã¾ã™ã€‚オフライン・トークンをã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã„ã¤å–å¾—ã—ãŸã‹ã‚’見るã“ã¨ãŒã§ãã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã™ã¹ã¦ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–り消ã™ã«ã¯ã€ç„¡åŠ¹åŒ–タブを開ãã€ã€Œã“ã®æ—¥æ™‚よりå‰ã€ã«ç¾åœ¨æ—¥æ™‚を設定ã—ã¦ãã ã•ã„。 -clustering=クラスタリング -installation=インストール -installation.tooltip=様々ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¢ãƒ€ãƒ—ターã®è¨­å®šãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆã‚’生æˆã™ã‚‹ãƒ˜ãƒ«ãƒ‘ー・ユーティリティーã§ã™ã€‚生æˆã—ãŸã‚‚ã®ã‚’ダウンロードã¾ãŸã¯ã‚«ãƒƒãƒˆãƒ»ã‚¢ãƒ³ãƒ‰ãƒ»ãƒšãƒ¼ã‚¹ãƒˆã—ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¨­å®šã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -service-account-roles=サービス・アカウント・ロール -service-account-roles.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆå°‚用ã®ã‚µãƒ¼ãƒ“ス・アカウントã®ãƒ­ãƒ¼ãƒ«ãƒžãƒƒãƒ”ングをèªè¨¼ã§ãるよã†ã«ã—ã¾ã™ã€‚ - -# client credentials -client-authenticator=クライアントèªè¨¼ -client-authenticator.tooltip=Keycloakサーãƒãƒ¼ã«å¯¾ã—ã¦ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆèªè¨¼æ–¹å¼ã‚’設定ã—ã¾ã™ã€‚ -certificate.tooltip=クライアントã§ç™ºè¡Œã•ã‚Œã€ã‚­ãƒ¼ã‚¹ãƒˆã‚¢ã®ç§˜å¯†éµã§ç½²åã•ã‚ŒãŸJWTを検証ã™ã‚‹ãŸã‚ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè¨¼æ˜Žæ›¸ã§ã™ã€‚ -publicKey.tooltip=クライアントã§ç™ºè¡Œã•ã‚Œã€ç§˜å¯†éµã§ç½²åã•ã‚ŒãŸJWTを検証ã™ã‚‹ãŸã‚ã®å…¬é–‹éµã§ã™ã€‚ -no-client-certificate-configured=クライアント証明書ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ -gen-new-keys-and-cert=æ–°ã—ã„éµã¨è¨¼æ˜Žæ›¸ã‚’ç”Ÿæˆ -import-certificate=証明書をインãƒãƒ¼ãƒˆ -gen-client-private-key=クライアントã®ç§˜å¯†éµã®ç”Ÿæˆ -generate-private-key=秘密éµã®ç”Ÿæˆ -kid=Kid -kid.tooltip=インãƒãƒ¼ãƒˆã•ã‚ŒãŸJWKSã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®å…¬é–‹éµã®KID(Key ID)を設定ã—ã¾ã™ã€‚ -use-jwks-url=JWKS URLã®ä½¿ç”¨ -use-jwks-url.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®å…¬é–‹éµãŒæŒ‡å®šã®JWKS URLã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒæ–°ã—ã„éµãƒšã‚¢ã‚’生æˆã—ãŸéš›ã«ã€æ–°ã—ã„éµãŒå¸¸ã«å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã‚‹ãŸã‚ã€æŸ”軟性ãŒå‘上ã—ã¾ã™ã€‚無効ã¨ã—ãŸå ´åˆã¯ã€Keycloak DBã®å…¬é–‹éµï¼ˆã¾ãŸã¯è¨¼æ˜Žæ›¸ï¼‰ãŒä½¿ç”¨ã•ã‚Œã‚‹ãŸã‚ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®éµãƒšã‚¢ãŒå¤‰æ›´ã•ã‚ŒãŸéš›ã«ã¯ã€å¸¸ã«æ–°ã—ã„éµï¼ˆã¾ãŸã¯è¨¼æ˜Žæ›¸ï¼‰ã‚’Keycloak DBã«ã‚‚インãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -jwks-url=JWKS URL -jwks-url.tooltip=JWKå½¢å¼ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆéµãŒæ ¼ç´ã•ã‚Œã¦ã„ã‚‹URLを設定ã—ã¾ã™ã€‚詳細ã¯JWKã®ä»•æ§˜ã‚’å‚ç…§ã—ã¦ãã ã•ã„。「jwtã€ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã‚’æŒã¤Keycloakクライアント・アダプターを使用ã—ã¦ã„ã‚‹å ´åˆã¯ã€ã‚¢ãƒ—リケーションã«ã€Œ/k_jwksã€ã¨ã„ã†æŽ¥å°¾è¾žã‚’付ã‘ãŸURLを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚例ãˆã°ã€ã€Œhttp://www.myhost.com/myapp/k_jwksã€ã§ã™ã€‚ -archive-format=ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–å½¢å¼ -archive-format.tooltip=Javaキーストアã¾ãŸã¯PKCS12ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–å½¢å¼ -key-alias=キーエイリアス -key-alias.tooltip=秘密éµã¨è¨¼æ˜Žæ›¸ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–・エイリアスã§ã™ã€‚ -key-password=éµã®ãƒ‘スワード -key-password.tooltip=アーカイブ内ã®ç§˜å¯†éµã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ‘スワード -store-password=ストアã®ãƒ‘スワード -store-password.tooltip=アーカイブ自身ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ãƒ‘スワード -generate-and-download=生æˆ&ダウンロード -client-certificate-import=クライアント証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -import-client-certificate=クライアント証明書ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -jwt-import.key-alias.tooltip=証明書ã®ã‚¢ãƒ¼ã‚«ã‚¤ãƒ–・エイリアスã§ã™ã€‚ -secret=シークレット -regenerate-secret=シークレットã®å†ç”Ÿæˆ -registrationAccessToken=登録用アクセストークン -registrationAccessToken.regenerate=登録用アクセストークンã®å†ç”Ÿæˆ -registrationAccessToken.tooltip=登録用アクセストークンã«ã‚ˆã‚Šã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã‚µãƒ¼ãƒ“スã«ã‚¢ã‚¯ã‚»ã‚¹ã§ãã¾ã™ã€‚ -add-role=ロールã®è¿½åŠ  -role-name=ロールå -composite=è¤‡åˆ -description=説明 -no-client-roles-available=使用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“。 -composite-roles=複åˆãƒ­ãƒ¼ãƒ« -composite-roles.tooltip=ã“ã®ãƒ­ãƒ¼ãƒ«ãŒãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã‚¢ã‚µã‚¤ãƒ³ï¼ˆã‚¢ã‚µã‚¤ãƒ³è§£é™¤ï¼‰ã•ã‚ŒãŸéš›ã«ã€é–¢é€£ã™ã‚‹ãƒ­ãƒ¼ãƒ«ãŒæš—黙的ã«ã‚¢ã‚µã‚¤ãƒ³ï¼ˆã‚¢ã‚µã‚¤ãƒ³è§£é™¤ï¼‰ã•ã‚Œã¾ã™ã€‚ -realm-roles=レルムロール -available-roles=使用å¯èƒ½ãªãƒ­ãƒ¼ãƒ« -add-selected=é¸æŠžã—ãŸã‚‚ã®ã‚’追加 -associated-roles=関連ロール -composite.associated-realm-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘ã•ã‚Œã¦ã„るレルムレベルã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -composite.available-realm-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -remove-selected=é¸æŠžã•ã‚ŒãŸã‚‚ã®ã‚’削除 -client-roles=クライアント・ロール -select-client-to-view-roles=ロールをå‚ç…§ã™ã‚‹ã«ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„ -available-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘å¯èƒ½ãªã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -client.associated-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘ã•ã‚Œã¦ã„るクライアント・ロールã§ã™ã€‚ -add-builtin=ビルトインを追加 -category=カテゴリー -type=タイプ -priority-order=å„ªå…ˆé †ä½ -no-mappers-available=使用å¯èƒ½ãªãƒžãƒƒãƒ‘ーã¯ã‚ã‚Šã¾ã›ã‚“ -add-builtin-protocol-mappers=ビルトイン・プロトコル・マッパーを追加 -add-builtin-protocol-mapper=ビルトイン・プロトコル・マッパーを追加 -scope-mappings=スコープ・マッピング -full-scope-allowed=ãƒ•ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã‚’è¨±å¯ -full-scope-allowed.tooltip=å…¨ã¦ã®åˆ¶é™ã®ç„¡åŠ¹ã‚’許å¯ã—ã¾ã™ã€‚ -scope.available-roles.tooltip=スコープã«ã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -assigned-roles=アサイン済ã¿ãƒ­ãƒ¼ãƒ« -assigned-roles.tooltip=スコープã«ã‚¢ã‚µã‚¤ãƒ³æ¸ˆã¿ã®ãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -effective-roles=有効ãªãƒ­ãƒ¼ãƒ« -realm.effective-roles.tooltip=複åˆãƒ­ãƒ¼ãƒ«ã®ç¶™æ‰¿ã‚‚å«ã‚ãŸã‚¢ã‚µã‚¤ãƒ³æ¸ˆã¿ã®ãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -select-client-roles.tooltip=ロールをå‚ç…§ã™ã‚‹ã«ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„ -assign.available-roles.tooltip=アサインå¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -client.assigned-roles.tooltip=アサイン済ã¿ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -client.effective-roles.tooltip=複åˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šå¼•ã継ã„ã§ã„るロールもå«ã‚ãŸã‚¢ã‚µã‚¤ãƒ³æ¸ˆã¿ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -basic-configuration=基本設定 -node-reregistration-timeout=ノードå†ç™»éŒ²ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ -node-reregistration-timeout.tooltip=登録ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’クラスターノードã¸å†ç™»éŒ²ã™ã‚‹éš›ã®æœ€å¤§æ™‚間間隔を設定ã—ã¾ã™ã€‚クラスターノードãŒã“ã®æ™‚間内ã«Keycloakã«å†ç™»éŒ²ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ãªã„å ´åˆã¯ã€Keycloakã‹ã‚‰ç™»éŒ²è§£é™¤ã•ã‚Œã¾ã™ã€‚ -registered-cluster-nodes=登録済ã¿ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãƒŽãƒ¼ãƒ‰ -register-node-manually=ノードを手動ã§ç™»éŒ² -test-cluster-availability=クラスターã®å¯ç”¨æ€§ã‚’テスト -last-registration=最終登録 -node-host=ノードホスト -no-registered-cluster-nodes=使用å¯èƒ½ãªç™»éŒ²æ¸ˆã¿ã‚¯ãƒ©ã‚¹ã‚¿ãƒ¼ãƒŽãƒ¼ãƒ‰ãŒã‚ã‚Šã¾ã›ã‚“ -cluster-nodes=クラスターノード -add-node=ノードを追加 -active-sessions.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ãƒ³ãƒˆã®æœ‰åŠ¹ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ã®åˆè¨ˆæ•°ã§ã™ã€‚ -show-sessions=セッションを表示 -show-sessions.tooltip=有効ãªã‚»ãƒƒã‚·ãƒ§ãƒ³æ•°ã«å¿œã˜ã¦é«˜è² è·ãªã‚ªãƒšãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«ãªã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。 -user=ユーザー -from-ip=From IP -session-start=セッション開始 -first-page=最åˆã®ãƒšãƒ¼ã‚¸ -previous-page=å‰ã®ãƒšãƒ¼ã‚¸ -next-page=次ã®ãƒšãƒ¼ã‚¸ -client-revoke.not-before.tooltip=ã“ã®æ—¥æ™‚よりå‰ã«ç™ºè¡Œã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç”¨ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’無効化ã—ã¾ã™ã€‚ -client-revoke.push.tooltip=管ç†URLãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¨­å®šã•ã‚Œã¦ã„ã‚‹å ´åˆã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒãƒªã‚·ãƒ¼ã‚’プッシュã—ã¾ã™ã€‚ -select-a-format=フォーマットをé¸æŠž -download=ダウンロード -offline-tokens=オフライン・トークン -offline-tokens.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚ªãƒ•ãƒ©ã‚¤ãƒ³ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã®åˆè¨ˆæ•°ã§ã™ã€‚ -show-offline-tokens=オフライン・トークンを表示 -show-offline-tokens.tooltip=オフライン・トークン数ã«å¿œã˜ã¦é«˜è² è·ãªã‚ªãƒšãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«ãªã‚‹æã‚ŒãŒã‚ã‚Šã¾ã™ã®ã§æ³¨æ„ã—ã¦ãã ã•ã„。 -token-issued=発行済ã¿ãƒˆãƒ¼ã‚¯ãƒ³ -last-access=最終アクセス -last-refresh=最終リフレッシュ -key-export=éµã‚’エクスãƒãƒ¼ãƒˆ -key-import=éµã‚’インãƒãƒ¼ãƒˆ -export-saml-key=SAMLéµã‚’エクスãƒãƒ¼ãƒˆ -import-saml-key=SAMLéµã‚’インãƒãƒ¼ãƒˆ -realm-certificate-alias=レルム証明書エイリアス -realm-certificate-alias.tooltip=レルム証明書もアーカイブã«æ ¼ç´ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ãã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã¨ãªã‚Šã¾ã™ã€‚ -signing-key=ç½²åéµ -saml-signing-key=SAMLç½²åéµã§ã™ã€‚ -private-key=ç§˜å¯†éµ -generate-new-keys=æ–°ã—ã„éµã‚’ç”Ÿæˆ -export=エクスãƒãƒ¼ãƒˆ -encryption-key=æš—å·åŒ–éµ -saml-encryption-key.tooltip=SAMLæš—å·åŒ–éµã§ã™ã€‚ -service-accounts=サービス・アカウント -service-account.available-roles.tooltip=サービス・アカウントã«ã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -service-account.assigned-roles.tooltip=サービス・アカウントã«ã‚¢ã‚µã‚¤ãƒ³æ¸ˆã¿ã®ãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -service-account-is-not-enabled-for={{client}}ã®ã‚µãƒ¼ãƒ“ス・アカウントã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“ -create-protocol-mappers=ãƒ—ãƒ­ãƒˆã‚³ãƒ«ãƒ»ãƒžãƒƒãƒ‘ãƒ¼ã‚’ä½œæˆ -create-protocol-mapper=ãƒ—ãƒ­ãƒˆã‚³ãƒ«ãƒ»ãƒžãƒƒãƒ‘ãƒ¼ã‚’ä½œæˆ -protocol=プロトコル -protocol.tooltip=プロトコルã§ã™ã€‚ -id=ID -mapper.name.tooltip=マッパーã®åå‰ã§ã™ã€‚ -mapper.consent-required.tooltip=一時的ãªã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹éš›ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¸ã®æ供データã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åŒæ„ã‚’å¿…è¦ã¨ã™ã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -consent-text=åŒæ„ã®ãƒ†ã‚­ã‚¹ãƒˆ -consent-text.tooltip=åŒæ„ページã«è¡¨ç¤ºã™ã‚‹ãƒ†ã‚­ã‚¹ãƒˆã§ã™ã€‚ -mapper-type=マッパータイプ -mapper-type.tooltip=マッパーã®ã‚¿ã‚¤ãƒ—ã§ã™ã€‚ -user-label=ユーザーラベル -data=データ -show-data=データを表示... -position=ä½ç½® -# realm identity providers -identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ -table-of-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ä¸€è¦§è¡¨ -add-provider.placeholder=プロãƒã‚¤ãƒ€ãƒ¼ã‚’追加... -provider=プロãƒã‚¤ãƒ€ãƒ¼ -gui-order=GUIé †åº -first-broker-login-flow=åˆå›žãƒ­ã‚°ã‚¤ãƒ³ãƒ•ãƒ­ãƒ¼ -post-broker-login-flow=ログイン後ã®ãƒ•ãƒ­ãƒ¼ -sync-mode=åŒæœŸãƒ¢ãƒ¼ãƒ‰ -sync-mode.tooltip=ã™ã¹ã¦ã®ãƒžãƒƒãƒ‘ーã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®åŒæœŸãƒ¢ãƒ¼ãƒ‰ã€‚åŒæœŸãƒ¢ãƒ¼ãƒ‰ã¯ã€ãƒžãƒƒãƒ‘ーを使用ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’åŒæœŸã™ã‚‹ã‚¿ã‚¤ãƒŸãƒ³ã‚°ã‚’決定ã—ã¾ã™ã€‚å¯èƒ½ãªå€¤ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ã“ã®ã‚ªãƒ—ションãŒå°Žå…¥ã•ã‚Œã‚‹å‰ã®å‹•ä½œã‚’維æŒã™ã‚‹ã€Œãƒ¬ã‚¬ã‚·ãƒ¼ã€ã€ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’使用ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ä¸€åº¦ã ã‘ユーザーをインãƒãƒ¼ãƒˆã™ã‚‹ã€Œã‚¤ãƒ³ãƒãƒ¼ãƒˆã€ã€ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã³ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’常ã«æ›´æ–°ã™ã‚‹ã€Œå¼·åˆ¶ã€ã€‚ -sync-mode.inherit=継承 -sync-mode.legacy=レガシー -sync-mode.import=インãƒãƒ¼ãƒˆ -sync-mode.force=強制 -sync-mode-override=åŒæœŸãƒ¢ãƒ¼ãƒ‰ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ -sync-mode-override.tooltip=ã“ã®ãƒžãƒƒãƒ‘ーã®IDPã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®åŒæœŸãƒ¢ãƒ¼ãƒ‰ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚値ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ã“ã®ã‚ªãƒ—ションãŒå°Žå…¥ã•ã‚Œã‚‹å‰ã®å‹•ä½œã‚’維æŒã™ã‚‹ã€Œãƒ¬ã‚¬ã‚·ãƒ¼ã€ã€ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’使用ã—ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ä¸€åº¦ã ã‘ユーザーをインãƒãƒ¼ãƒˆã™ã‚‹ã€Œã‚¤ãƒ³ãƒãƒ¼ãƒˆã€ã€ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ãŸã³ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’常ã«æ›´æ–°ã™ã‚‹ã€Œå¼·åˆ¶ã€ã€ã“ã®ãƒžãƒƒãƒ‘ーã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§å®šç¾©ã•ã‚ŒãŸåŒæœŸãƒ¢ãƒ¼ãƒ‰ã‚’使用ã™ã‚‹ã€Œç¶™æ‰¿ã€ã€‚ -redirect-uri=リダイレクトURI -redirect-uri.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®è¨­å®šã§ä½¿ç”¨ã™ã‚‹ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã§ã™ã€‚ -alias=エイリアス -display-name=表示å -identity-provider.alias.tooltip=エイリアスã¯ä¸€æ„ã«ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’識別ã™ã‚‹ã‚‚ã®ã§ã€ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã®æ§‹ç¯‰ã«ã‚‚使用ã•ã‚Œã¾ã™ã€‚ -identity-provider.display-name.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®åˆ†ã‹ã‚Šã‚„ã™ã„åå‰ã‚’設定ã—ã¾ã™ã€‚ -identity-provider.enabled.tooltip=ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -authenticate-by-default=デフォルトã§èªè¨¼ -identity-provider.authenticate-by-default.tooltip=ログイン画é¢ã®è¡¨ç¤ºå‰ã«ã€ã“ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§èªè¨¼è©¦è¡Œã™ã¹ãã‹ã©ã†ã‹ã‚’示ã—ã¦ã„ã¾ã™ã€‚ -store-tokens=トークンã®æ ¼ç´ -identity-provider.store-tokens.tooltip=ユーザーèªè¨¼å¾Œã®ãƒˆãƒ¼ã‚¯ãƒ³æ ¼ç´ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -stored-tokens-readable=読ã¿å–ã‚Šå¯èƒ½ãªãƒˆãƒ¼ã‚¯ãƒ³ã‚’æ ¼ç´ -identity-provider.stored-tokens-readable.tooltip=æ–°ã—ã„ユーザーãŒæ ¼ç´ã•ã‚ŒãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’読ã¿å–ã‚Šå¯èƒ½ã‹ã©ã†ã‹ã®æœ‰åŠ¹/無効設定ã§ã™ã€‚broker.read-tokenロールをアサインã—ã¾ã™ã€‚ -disableUserInfo=UserInfoã®ç„¡åŠ¹ -identity-provider.disableUserInfo.tooltip=追加ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼æƒ…報をå–å¾—ã™ã‚‹UserInfoサービスã®ä½¿ç”¨ã‚’無効ã«ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚デフォルトã§ã¯ã“ã®OIDCサービスを使用ã—ã¾ã™ã€‚ -userIp=userIpパラメーターã®ä½¿ç”¨ -identity-provider.google-userIp.tooltip=Googleã®UserInfoサービスã®å‘¼ã³å‡ºã—時ã«ã€ŒuserIpã€ã‚¯ã‚¨ãƒªãƒ¼ãƒ»ãƒ‘ラメーターを設定ã—ã¾ã™ã€‚ã“ã‚Œã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®IPアドレスを使用ã—ã¾ã™ã€‚GoogleãŒUserInfoサービスã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’制é™ã—ã¦ã„ã‚‹å ´åˆã«å½¹ç«‹ã¡ã¾ã™ã€‚ -offlineAccess=リフレッシュ・トークンをè¦æ±‚ã™ã‚‹ -identity-provider.google-offlineAccess.tooltip=リフレッシュ・トークンをå–å¾—ã™ã‚‹ã«ã¯ã€Googleèªå¯ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã«ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã™ã‚‹ã¨ãã«ã€Œaccess_typeã€ã‚¯ã‚¨ãƒªãƒ¼ãƒ»ãƒ‘ラメーターを「offlineã€ã«è¨­å®šã—ã¾ã™ã€‚ユーザーãŒãƒ–ラウザーを利用ã—ã¦ã„ãªã„ã¨ãã«ã€Google APIã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®Googleトークンをå–å¾—ã™ã‚‹ãŸã‚ã«ã€ãƒˆãƒ¼ã‚¯ãƒ³äº¤æ›ã®ä½¿ç”¨ã‚’計画ã—ã¦ã„ã‚‹å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚ -hostedDomain=ホストã•ã‚ŒãŸãƒ‰ãƒ¡ã‚¤ãƒ³ -identity-provider.google-hostedDomain.tooltip=Googleã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãã«ã€Œhdã€ã‚¯ã‚¨ãƒªãƒ¼ãƒ»ãƒ‘ラメーターを設定ã—ã¾ã™ã€‚Googleã¯ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã®ã¿ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’一覧表示ã—ã¾ã™ã€‚Keycloakã¯ã€è¿”ã•ã‚ŒãŸIDトークンã«ã“ã®ãƒ‰ãƒ¡ã‚¤ãƒ³ã«å¯¾ã™ã‚‹ã‚¯ãƒ¬ãƒ¼ãƒ ãŒã‚ã‚‹ã“ã¨ã‚’検証ã—ã¾ã™ã€‚「*ã€ã‚’入力ã™ã‚‹ã¨ã€ä»»æ„ã®ãƒ›ã‚¹ãƒˆã•ã‚ŒãŸã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’使用ã§ãã¾ã™ã€‚ -sandbox=対象ã®ã‚µãƒ³ãƒ‰ãƒœãƒƒã‚¯ã‚¹ -identity-provider.paypal-sandbox.tooltip=対象ã®PayPalサンドボックス環境 -update-profile-on-first-login=åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ãƒ—ロファイルを更新 -on=オン -on-missing-info=情報ä¸è¶³ã®å ´åˆ -off=オフ -update-profile-on-first-login.tooltip=åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãƒ—ロファイルã®æ›´æ–°ã‚’å¿…è¦ã¨ã™ã‚‹ã‹æ¡ä»¶ã‚’定義ã—ã¾ã™ã€‚ -trust-email=Eメールを信頼 -trust-email.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€ã“ã®ãƒ¬ãƒ«ãƒ ã§Eメールã®ç¢ºèªãŒæœ‰åŠ¹ã¨ãªã£ã¦ã„ã‚‹å ´åˆã§ã‚‚ã€ã“ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒæä¾›ã™ã‚‹Eメールã¯ç¢ºèªã•ã‚Œãªããªã‚Šã¾ã™ã€‚ -link-only=アカウントã®ãƒªãƒ³ã‚¯ã®ã¿ -link-only.tooltip=オンã®å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã“ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ãƒ­ã‚°ã‚¤ãƒ³ã§ãã¾ã›ã‚“。ã“ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ãƒªãƒ³ã‚¯ã™ã‚‹ã“ã¨ã®ã¿ã§ãã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ã®ãƒ­ã‚°ã‚¤ãƒ³ã‚’許å¯ã—ãŸããªã„ãŒã€ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã¨çµ±åˆã—ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ -hide-on-login-page=ログインページã§éžè¡¨ç¤º -hide-on-login-page.tooltip=éžè¡¨ç¤ºã®å ´åˆã€æ˜Žç¤ºçš„ã«è¦æ±‚ã•ã‚Œã¦ã„ã‚Œã°ï¼ˆä¾‹ãˆã°ã€ã€Œkc_idp_hintã€ãƒ‘ラメーターを使用ã—ã¦ã„ã‚Œã°ï¼‰ã€ã“ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã‚‹ãƒ­ã‚°ã‚¤ãƒ³ãŒå¯èƒ½ã§ã™ã€‚ -gui-order.tooltip=GUI(例ãˆã°ã€ãƒ­ã‚°ã‚¤ãƒ³ãƒšãƒ¼ã‚¸ä¸Šï¼‰ã§ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®è¡¨ç¤ºé †åºã‚’決ã‚る番å·ã‚’設定ã—ã¾ã™ã€‚ -first-broker-login-flow.tooltip=ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ã®åˆå›žãƒ­ã‚°ã‚¤ãƒ³å¾Œã«èµ·å‹•ã•ã›ã‚‹èªè¨¼ãƒ•ãƒ­ãƒ¼ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚「åˆå›žãƒ­ã‚°ã‚¤ãƒ³ã€ã¨ã„ã†ç”¨èªžã¯ã€èªè¨¼ã—ãŸã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ»ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ç¾åœ¨é–¢é€£ä»˜ã‘られã¦ã„ã‚‹KeycloakアカウントãŒãªã„状態ã§ã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -post-broker-login-flow.tooltip=ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§ã®å„ログイン後ã«èµ·å‹•ã•ã›ã‚‹èªè¨¼ãƒ•ãƒ­ãƒ¼ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã§èªè¨¼ã•ã‚ŒãŸå„ユーザーã®è¿½åŠ ã®ç¢ºèªï¼ˆä¾‹ãˆã°OTP)を行ã„ãŸã„å ´åˆã«ä¾¿åˆ©ã§ã™ã€‚ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã‚‹ãƒ­ã‚°ã‚¤ãƒ³å¾Œã«è¿½åŠ ã®ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã‚’èµ·å‹•ã™ã‚‹å¿…è¦ãŒãªã„å ´åˆã¯ã€ç©ºã®ã¾ã¾ã¨ã—ã¦ãã ã•ã„。ã¾ãŸã€ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®å®Ÿè£…ã§ã¯ã€ClientSessionã«ã¯ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã‚Šãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ—¢ã«è¨­å®šã•ã‚Œã¦ã„ã‚‹ã“ã¨ã«æ³¨æ„ã—ã¦ãã ã•ã„。 -openid-connect-config=OpenID Connectã®è¨­å®š -openid-connect-config.tooltip=OIDC SPã¨å¤–部IDPã®è¨­å®šã§ã™ã€‚ -authorization-url=èªå¯URL -authorization-url.tooltip=èªå¯URLを設定ã—ã¾ã™ã€‚ -token-url=トークンURL -token-url.tooltip=トークンURLを設定ã—ã¾ã™ã€‚ -loginHint=login_hintを渡㙠-loginHint.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã«login_hintを渡ã—ã¾ã™ã€‚ -uiLocales=ç¾åœ¨ã®ãƒ­ã‚±ãƒ¼ãƒ«ã‚’渡㙠-uiLocales.tooltip=ç¾åœ¨ã®ãƒ­ã‚±ãƒ¼ãƒ«ã‚’ui_localesパラメーターã¨ã—ã¦ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«æ¸¡ã—ã¾ã™ã€‚ -logout-url=ログアウトURL -identity-provider.logout-url.tooltip=外部IDPã‹ã‚‰ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã«ä½¿ç”¨ã™ã‚‹ã‚»ãƒƒã‚·ãƒ§ãƒ³çµ‚了エンドãƒã‚¤ãƒ³ãƒˆã‚’設定ã—ã¾ã™ã€‚ -backchannel-logout=ãƒãƒƒã‚¯ãƒãƒ£ãƒ³ãƒãƒ«ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ -backchannel-logout.tooltip=外部IDPãŒãƒãƒƒã‚¯ãƒãƒ£ãƒ³ãƒãƒ«ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -user-info-url=UserInfo URL -user-info-url.tooltip=UserInfoã®URLを設定ã—ã¾ã™ã€‚ã“ã‚Œã¯ã‚ªãƒ—ションã§ã™ã€‚ -client-auth=クライアントèªè¨¼ -client-auth.tooltip=クライアントèªè¨¼æ–¹æ³•ï¼ˆå‚照:https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication)。秘密éµã§ç½²åã•ã‚ŒãŸJWTã®å ´åˆã€ãƒ¬ãƒ«ãƒ ç§˜å¯†éµãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -client-auth.client_secret_post=POSTã§é€ä¿¡ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ -client-auth.client_secret_basic=基本èªè¨¼ã§é€ä¿¡ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ -client-auth.client_secret_jwt=JWTã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ -client-auth.private_key_jwt=秘密éµã§ç½²åã•ã‚ŒãŸJWT -identity-provider.client-id.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã§ç™»éŒ²ã•ã‚Œã¦ã„るクライアントã¾ãŸã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆè­˜åˆ¥å­ã‚’設定ã—ã¾ã™ã€‚ -client-secret=クライアント・シークレット -show-secret=シークレットを表示ã™ã‚‹ -hide-secret=シークレットを隠㙠-client-secret.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã§ç™»éŒ²ã•ã‚Œã¦ã„るクライアントã¾ãŸã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆã‚’設定ã—ã¾ã™ã€‚ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€ãƒœãƒ¼ãƒ«ãƒˆã‹ã‚‰å€¤ã‚’å–å¾—ã§ãã¾ã™ã€‚${vault.ID}å½¢å¼ã‚’使用ã—ã¾ã™ã€‚ -client-assertion-signing-algorithm=クライアントアサーション署åアルゴリズム -client-assertion-signing-algorithm.tooltip=クライアントèªè¨¼ã§JWTアサーションを利用ã™ã‚‹ã¨ãã®ç½²åアルゴリズム。クライアントèªè¨¼ãŒ 秘密éµã§ç½²åã•ã‚ŒãŸJWT ã‚‚ã—ã㯠JWTã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ ã®å ´åˆã«è¨­å®šã—ã¾ã™ã€‚アルゴリズムã®æŒ‡å®šã‚’ã—ãªã‹ã£ãŸå ´åˆã€ 秘密éµã§ç½²åã•ã‚ŒãŸJWT ã§ã¯RS256 JWTã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ ã§ã¯HS256ã®ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -issuer=発行者(Issuer) -issuer.tooltip=レスãƒãƒ³ã‚¹å†…ã®ç™ºè¡Œè€…ã®è­˜åˆ¥å­ï¼ˆIssuer Identifier)を設定ã—ã¾ã™ã€‚未設定ã®å ´åˆã¯ã€æ¤œè¨¼ã¯å®Ÿè¡Œã•ã‚Œã¾ã›ã‚“。 -default-scopes=デフォルト・スコープ -identity-provider.default-scopes.tooltip=èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®éš›ã«é€ä¿¡ã•ã‚Œã‚‹ã‚¹ã‚³ãƒ¼ãƒ—ã§ã™ã€‚スペース区切りã§ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚デフォルトã¯ã€Œopenidã€ã§ã™ã€‚ -prompt=プロンプト(prompt) -unspecified.option=未定義 -none.option=none -consent.option=consent -login.option=login -select-account.option=select_account -prompt.tooltip=èªè¨¼ã‚µãƒ¼ãƒãƒ¼ã¯å†èªè¨¼ã‚„åŒæ„をエンドユーザーã«ä¿ƒã™ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ -accepts-prompt-none-forward-from-client=クライアントã‹ã‚‰è»¢é€ã•ã‚Œã‚‹prompt=noneã‚’å—ã‘入れる -accepts-prompt-none-forward-from-client.tooltip=ã“ã‚Œã¯ã€ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã¨ã¨ã‚‚ã«ä½¿ç”¨ã•ã‚Œã‚‹ã‹ã€ã¾ãŸã¯kc_idp_hintãŒã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’指ã™å ´åˆã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚クライアントãŒprompt=noneã§ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã¾ã èªè¨¼ã•ã‚Œã¦ã„ãªã„å ´åˆã€ã‚¨ãƒ©ãƒ¼ã¯ç›´æŽ¥ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¿”ã•ã‚Œã¾ã›ã‚“ãŒã€prompt=noneã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã«è»¢é€ã•ã‚Œã¾ã™ã€‚ -validate-signatures=ç½²å検証 -identity-provider.validate-signatures.tooltip=外部IDPã®ç½²å検証ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -identity-provider.use-jwks-url.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®å…¬é–‹éµãŒæŒ‡å®šã•ã‚ŒãŸJWKS URLã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã¾ã™ã€‚アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãŒæ–°ã—ã„éµãƒšã‚¢ã‚’生æˆã™ã‚‹éš›ã«ã€æ–°ã—ã„éµãŒå¸¸ã«å†ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã•ã‚Œã‚‹ãŸã‚ã€æŸ”軟性ãŒå¤§å¹…ã«å‘上ã—ã¾ã™ã€‚無効ã¨ã—ãŸå ´åˆã¯ã€Keycloak DBã®å…¬é–‹éµï¼ˆã¾ãŸã¯è¨¼æ˜Žæ›¸ï¼‰ãŒä½¿ç”¨ã•ã‚Œã‚‹ãŸã‚ã€ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®éµãƒšã‚¢ãŒå¤‰æ›´ã•ã‚ŒãŸéš›ã«ã¯ã€å¸¸ã«Keycloak DBã«æ–°ã—ã„éµã‚’インãƒãƒ¼ãƒˆã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -identity-provider.jwks-url.tooltip=JWKå½¢å¼ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®éµãŒæ ¼ç´ã•ã‚Œã¦ã„ã‚‹URLを設定ã—ã¾ã™ã€‚詳細ã¯JWKã®ä»•æ§˜ã‚’å‚ç…§ã—ã¦ãã ã•ã„。外部ã®Keycloakアイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‚’使用ã™ã‚‹å ´åˆã¯ã€ãƒ–ローカーã®KeycloakãŒã€Œhttp://broker-keycloak:8180ã€ã§å®Ÿè¡Œã•ã‚Œã¦ãŠã‚Šãƒ¬ãƒ«ãƒ ãŒã€Œtestã€ã¨ä»®å®šã™ã‚‹ã¨ã€ã€Œhttp://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certsã€ã®ã‚ˆã†ãªURLを使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -validating-public-key=検証用ã®å…¬é–‹éµ -identity-provider.validating-public-key.tooltip=外部IDPã®ç½²å検証ã«ä½¿ç”¨ã™ã‚‹PEMå½¢å¼ã®å…¬é–‹éµã‚’設定ã—ã¾ã™ã€‚ -validating-public-key-id=検証用ã®å…¬é–‹éµID -identity-provider.validating-public-key-id.tooltip=éµIDã®å ´åˆã€ä¸Šè¨˜ã®æ¤œè¨¼ç”¨ã®å…¬é–‹éµã®æ˜Žç¤ºçš„ãªID。外部IDPã§æŒ‡å®šã•ã‚ŒãŸéµIDã«é–¢ä¿‚ãªãã€ä¸Šè¨˜ã®éµã‚’常ã«ä½¿ç”¨ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã¯ç©ºç™½ã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。éµã‚’使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹å ´åˆã€å¤–部IDPã‹ã‚‰ã®éµIDãŒä¸€è‡´ã™ã‚‹ã‹ã©ã†ã‹ã‚’確èªã™ã‚‹ãŸã‚ã«ã®ã¿è¨­å®šã—ã¾ã™ã€‚ -allowed-clock-skew=許容ã•ã‚Œã‚‹ã‚¯ãƒ­ãƒƒã‚¯ã‚¹ã‚­ãƒ¥ãƒ¼ -identity-provider.allowed-clock-skew.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒˆãƒ¼ã‚¯ãƒ³ã®æ¤œè¨¼æ™‚ã«è¨±å®¹ã•ã‚Œã‚‹ã‚¯ãƒ­ãƒƒã‚¯ã‚¹ã‚­ãƒ¥ãƒ¼ï¼ˆç§’å˜ä½ï¼‰ã€‚デフォルト値ã¯0ã§ã™ã€‚ -forwarded-query-parameters=転é€ã•ã‚Œã‚‹ã‚¯ã‚¨ãƒªãƒ¼ãƒ»ãƒ‘ラメーター -identity-provider.forwarded-query-parameters.tooltip=最åˆã®ã‚¢ãƒ—リケーションã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‹ã‚‰å–å¾—ã—ã€å¤–部IDPã®èªå¯ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã¸è»¢é€ã•ã‚Œã‚‹OpenID Connect/OAuth標準以外ã®ã‚¯ã‚¨ãƒªãƒ¼ãƒ»ãƒ‘ラメーター。複数ã®ãƒ‘ラメーターをカンマ(,)ã§åŒºåˆ‡ã£ã¦å…¥åŠ›ã§ãã¾ã™ã€‚ -import-external-idp-config=外部IDP設定ã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -import-external-idp-config.tooltip=外部IDPメタデータを設定ファイルよりロードã€ã¾ãŸã¯URLよりダウンロードã—ã¦è¨­å®šã—ã¾ã™ã€‚ -import-from-url=URLよりインãƒãƒ¼ãƒˆ -identity-provider.import-from-url.tooltip=リモートIDPディスカãƒãƒªãƒ¼ãƒ»ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターよりメタデータをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ -import-from-file=ファイルよりインãƒãƒ¼ãƒˆ -identity-provider.import-from-file.tooltip=ダウンロードã—ãŸIDPディスカãƒãƒªãƒ¼ãƒ»ãƒ‡ã‚£ã‚¹ã‚¯ãƒªãƒ—ターよりメタデータをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ -saml-config=SAML設定 -identity-provider.saml-config.tooltip=SAML SPã¨å¤–部IDPã®è¨­å®šã§ã™ã€‚ -single-signon-service-url=シングル・サインオン・サービスã®URL -saml.single-signon-service-url.tooltip=èªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆï¼ˆSAML AuthnRequest)ã®é€ä¿¡ã«ä½¿ç”¨ã™ã‚‹URLを設定ã—ã¾ã™ã€‚ -single-logout-service-url=シングル・ログアウト・サービスã®URL -saml.single-logout-service-url.tooltip=ログアウト・リクエストã®é€ä¿¡ã«ä½¿ç”¨ã™ã‚‹URLを設定ã—ã¾ã™ã€‚ -nameid-policy-format=Name IDãƒãƒªã‚·ãƒ¼ãƒ»ãƒ•ã‚©ãƒ¼ãƒžãƒƒãƒˆ -nameid-policy-format.tooltip=Name IDフォーマットã«å¯¾å¿œã™ã‚‹URIリファレンスを指定ã—ã¾ã™ã€‚デフォルトã¯urn:oasis:names:tc:SAML:2.0:nameid-format:persistentã«ãªã‚Šã¾ã™ã€‚ -saml.principal-type=プリンシパル・タイプ -saml.principal-type.tooltip=アサーションã‹ã‚‰å¤–部ユーザーを識別ã—ã€è¿½è·¡ã™ã‚‹æ–¹æ³•ã€‚デフォルトã§ã¯Subject NameIDを使用ã—ã¾ã™ãŒã€è­˜åˆ¥å±žæ€§ã‚’設定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ -saml.principal-attribute=プリンシパル属性 -saml.principal-attribute.tooltip=外部ユーザーを識別ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã•ã‚Œã‚‹å±žæ€§ã®åå‰ã¾ãŸã¯ãƒ•ãƒ¬ãƒ³ãƒ‰ãƒªãƒ¼å。 -http-post-binding-response=HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒ»ãƒ¬ã‚¹ãƒãƒ³ã‚¹ -http-post-binding-response.tooltip=HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’使用ã—ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç­”ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚オフã®å ´åˆã¯ã€HTTP-REDIRECTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -http-post-binding-for-authn-request=AuthnRequestã®HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚° -http-post-binding-for-authn-request.tooltip=HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’使用ã—ã¦AuthnRequestã‚’é€ä¿¡ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚オフã®å ´åˆã¯ã€HTTP-REDIRECTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -http-post-binding-logout=HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãƒ»ãƒ­ã‚°ã‚¢ã‚¦ãƒˆ -http-post-binding-logout.tooltip=HTTP-POSTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’使用ã—ã¦ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«å¿œç­”ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚オフã®å ´åˆã¯ã€HTTP-REDIRECTãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ãŒä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ -want-authn-requests-signed=AuthnRequestã®ç½²åãŒå¿…è¦ -want-authn-requests-signed.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãŒç½²å付ãAuthnRequestã‚’è¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -want-assertions-signed=アサーションã®ç½²åãŒå¿…è¦ -want-assertions-signed.tooltip=ã“ã®ã‚µãƒ¼ãƒ“ス・プロãƒã‚¤ãƒ€ãƒ¼ãŒç½²å付ãアサーションをè¦æ±‚ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -want-assertions-encrypted=アサーションã®æš—å·åŒ–ãŒå¿…è¦ -want-assertions-encrypted.tooltip=ã“ã®ã‚µãƒ¼ãƒ“ス・プロãƒã‚¤ãƒ€ãƒ¼ãŒæš—å·åŒ–ã•ã‚ŒãŸã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã‚’期待ã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -force-authentication=èªè¨¼ã‚’強制 -identity-provider.force-authentication.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãŒä»¥å‰ã®ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ãƒ»ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆã«é ¼ã‚‹ã®ã§ã¯ãªãã€ãƒ—レゼンターを直接èªè¨¼ã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -validate-signature=ç½²å検証 -saml.validate-signature.tooltip=SAMLレスãƒãƒ³ã‚¹ã®ç½²å検証ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -validating-x509-certificate=検証用ã®X509証明書 -validating-x509-certificate.tooltip=ç½²åã®ç¢ºèªã«ä½¿ç”¨ã™ã‚‹PEMå½¢å¼ã®è¨¼æ˜Žæ›¸ã‚’設定ã—ã¾ã™ã€‚ -saml.import-from-url.tooltip=リモートIDPã®SAMLエンティティー・ディスクリプターã‹ã‚‰ãƒ¡ã‚¿ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ -social.client-id.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã§ç™»éŒ²ã•ã‚Œã¦ã„るクライアント識別å­ã‚’設定ã—ã¾ã™ã€‚ -social.client-secret.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã§ç™»éŒ²ã•ã‚Œã¦ã„るクライアント・シークレットを設定ã—ã¾ã™ã€‚ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€ãƒœãƒ¼ãƒ«ãƒˆã‹ã‚‰å€¤ã‚’å–å¾—ã§ãã¾ã™ã€‚${vault.ID}å½¢å¼ã‚’使用ã—ã¾ã™ã€‚ -social.default-scopes.tooltip=èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®éš›ã«é€ä¿¡ã•ã‚Œã‚‹ã‚¹ã‚³ãƒ¼ãƒ—を設定ã—ã¾ã™ã€‚設定å¯èƒ½ãªå€¤ã€åŒºåˆ‡ã‚Šæ–‡å­—ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ã¯ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。 -key=キー -stackoverflow.key.tooltip=Stack Overflowã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã§å–å¾—ã—ãŸKeyを設定ã—ã¾ã™ã€‚ -openshift.base-url=ベースURL -openshift.base-url.tooltip=OpenShift Online APIã®ãƒ™ãƒ¼ã‚¹URL -openshift4.base-url=ベースURL -openshift4.base-url.tooltip=OpenShift Online APIã®ãƒ™ãƒ¼ã‚¹URL -gitlab-application-id=アプリケーションID -gitlab-application-secret=アプリケーション・シークレット -gitlab.application-id.tooltip=GitLabアプリケーションã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ»ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ä½œæˆã—ãŸã‚¢ãƒ—リケーションã®ã‚¢ãƒ—リケーションID -gitlab.application-secret.tooltip=GitLabアプリケーションã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆãƒ»ãƒ¡ãƒ‹ãƒ¥ãƒ¼ã§ä½œæˆã—ãŸã‚¢ãƒ—リケーションã®ã‚·ãƒ¼ã‚¯ãƒ¬ãƒƒãƒˆ -gitlab.default-scopes.tooltip=ログイン時ã«è¦æ±‚ã™ã‚‹ã‚¹ã‚³ãƒ¼ãƒ—。openidã¯å¸¸ã«è¦æ±‚ã•ã‚Œã¾ã™ã€‚何も指定ã—ãªã„å ´åˆã¯ã€ã•ã‚‰ã«apiを追加ã—ã¾ã™ã€‚ -bitbucket-consumer-key=コンシューマー・キー -bitbucket-consumer-secret=コンシューマー・シークレット -bitbucket.key.tooltip=Bitbucket OAuthコンシューマー・キー -bitbucket.secret.tooltip=Bitbucket OAuthコンシューマー・シークレット -bitbucket.default-scopes.tooltip=ログイン時ã«è¦æ±‚ã™ã‚‹ã‚¹ã‚³ãƒ¼ãƒ—。何も指定ã—ãªã‘ã‚Œã°ã€scopeã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã€Œemailã€ã«ãªã‚Šã¾ã™ã€‚ -# User federation -sync-ldap-roles-to-keycloak=LDAPロールをKeycloakã«åŒæœŸ -sync-keycloak-roles-to-ldap=KeycloakロールをLDAPã«åŒæœŸ -sync-ldap-groups-to-keycloak=LDAPグループをKeycloakã«åŒæœŸ -sync-keycloak-groups-to-ldap=KeycloakグループをLDAPã«åŒæœŸ -realms=レルム -realm=レルム -identity-provider-mappers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒžãƒƒãƒ‘ー -create-identity-provider-mapper=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒžãƒƒãƒ‘ãƒ¼ã‚’ä½œæˆ -add-identity-provider-mapper=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒžãƒƒãƒ‘ーを追加 -client.description.tooltip=クライアントã®èª¬æ˜Žã‚’指定ã—ã¾ã™ã€‚例ãˆã°ã€Œã‚¿ã‚¤ãƒ ã‚·ãƒ¼ãƒˆç”¨ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã€ã§ã™ã€‚ローカライズ用ã®ã‚­ãƒ¼ã‚‚サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚例\: ${my_client_description} -expires=æœ‰åŠ¹æœŸé™ -expiration=æœ‰åŠ¹æœŸé™ -expiration.tooltip=トークンã®æœ‰åŠ¹æœŸé–“を指定ã—ã¾ã™ã€‚ -count=カウント -count.tooltip=ã“ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’利用ã—ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’ã„ãã¤ä½œæˆå¯èƒ½ã‹æŒ‡å®šã—ã¾ã™ã€‚ -remainingCount=残りã®ã‚«ã‚¦ãƒ³ãƒˆ -created=作æˆæ—¥æ™‚ -back=戻る -initial-access-tokens=åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ -add-initial-access-tokens=åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’追加 -initial-access-token=åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ -initial-access.copyPaste.tooltip=ã“ã®ãƒšãƒ¼ã‚¸ã‹ã‚‰ç§»å‹•ã™ã‚‹å‰ã«åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’コピー/ペーストã—ã¾ã™ã€‚後ã§æ¤œç´¢ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -continue=続ã‘ã‚‹ -initial-access-token.confirm.title=åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚³ãƒ”ー -initial-access-token.confirm.text=後ã‹ã‚‰ã¯å–å¾—ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“ã®ã§ã€åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚³ãƒ”ー&ペーストを行ã£ã¦ãã ã•ã„ -no-initial-access-available=使用å¯èƒ½ãªåˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã¯ã‚ã‚Šã¾ã›ã‚“ -client-reg-policies=クライアント登録ãƒãƒªã‚·ãƒ¼ -client-reg-policy.name.tooltip=ãƒãƒªã‚·ãƒ¼ã®è¡¨ç¤ºåを設定ã—ã¾ã™ã€‚ -anonymous-policies=匿åアクセスã®ãƒãƒªã‚·ãƒ¼ -anonymous-policies.tooltip=ã“れらã®ãƒãƒªã‚·ãƒ¼ã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã‚µãƒ¼ãƒ“スãŒæœªèªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚ˆã£ã¦å‘¼ã³å‡ºã•ã‚ŒãŸéš›ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã¯åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚‚ベアラートークンもå«ã¾ã‚Œãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -auth-policies=èªè¨¼æ¸ˆã¿ã‚¢ã‚¯ã‚»ã‚¹ã®ãƒãƒªã‚·ãƒ¼ -auth-policies.tooltip=ã“れらã®ãƒãƒªã‚·ãƒ¼ã¯èªè¨¼ã•ã‚ŒãŸãƒªã‚¯ã‚¨ã‚¹ãƒˆã«ã‚ˆã£ã¦ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã‚µãƒ¼ãƒ“スãŒå‘¼ã³å‡ºã•ã‚ŒãŸéš›ã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã«åˆæœŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã¾ãŸã¯ãƒ™ã‚¢ãƒ©ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -policy-name=ãƒãƒªã‚·ãƒ¼å -no-client-reg-policies-configured=クライアント登録ãƒãƒªã‚·ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“。 -trusted-hosts.label=ä¿¡é ¼ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆ -trusted-hosts.tooltip=ä¿¡é ¼ã•ã‚Œã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã‚µãƒ¼ãƒ“スを呼ã³å‡ºã™ã“ã¨ãŒè¨±å¯ã•ã‚Œã¦ã„ã‚‹ã€ãŠã‚ˆã³/ã¾ãŸã¯ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆURIã®å€¤ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã¦ã„るホストã®ãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚ホストåã¾ãŸã¯IPアドレスを使用ã—ã¦è¨­å®šã—ã¾ã™ã€‚アスタリスク(例ãˆã°ã€Œ*.example.comã€ï¼‰ã‚’使用ã™ã‚‹ã¨ã€example.comã®ãƒ‰ãƒ¡ã‚¤ãƒ³å…¨ä½“ãŒä¿¡é ¼ã•ã‚Œã¾ã™ã€‚ -host-sending-registration-request-must-match.label=クライアント登録リクエストをé€ä¿¡ã™ã‚‹ãƒ›ã‚¹ãƒˆã®ä¸€è‡´ãŒå¿…é ˆ -host-sending-registration-request-must-match.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€ä¿¡é ¼ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã‹ã‚‰é€ä¿¡ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆç™»éŒ²ã‚µãƒ¼ãƒ“スã¸ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯è¨±å¯ã•ã‚Œã¾ã™ã€‚ -client-uris-must-match.label=クライアントURIã®ä¸€è‡´ãŒå¿…é ˆ -client-uris-must-match.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆURI(リダイレクトURIãªã©ï¼‰ã¯ã€ä¿¡é ¼ã•ã‚ŒãŸãƒ›ã‚¹ãƒˆã¾ãŸã¯ãƒ‰ãƒ¡ã‚¤ãƒ³ã¨ä¸€è‡´ã™ã‚‹å ´åˆã«ã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -allowed-protocol-mappers.label=許å¯ã•ã‚ŒãŸãƒ—ロトコル・マッパー -allowed-protocol-mappers.tooltip=許å¯ã•ã‚ŒãŸãƒ—ロトコル・マッパー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚ホワイトリストã«ç™»éŒ²ã•ã‚Œã¦ã„ãªã„プロトコル・マッパーをå«ã‚€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’登録ã—よã†ã¨ã™ã‚‹ã¨ã€ç™»éŒ²ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯æ‹’å¦ã•ã‚Œã¾ã™ã€‚ -consent-required-for-all-mappers.label=マッパーã®åŒæ„ãŒå¿…è¦ -consent-required-for-all-mappers.tooltip=有効ã¨ã—ãŸå ´åˆã¯ã€æ–°ãŸã«ç™»éŒ²ã•ã‚ŒãŸã™ã¹ã¦ã®ãƒ—ロトコル・マッパーã¯è‡ªå‹•çš„ã«ã€ŒåŒæ„ãŒå¿…è¦ã€ãŒæœ‰åŠ¹ã¨ãªã‚Šã¾ã™ã€‚ã“ã‚Œã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒåŒæ„ç”»é¢ã§æ‰¿èªã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚注記: åŒæ„ç”»é¢ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒã€ŒåŒæ„ãŒå¿…è¦ã€ã‚’有効ã«ã—ã¦ã„ã‚‹å ´åˆã«ã®ã¿è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ãã®ãŸã‚ã€é€šå¸¸ã¯åŒæ„ãŒå¿…è¦ãªãƒãƒªã‚·ãƒ¼ã¨ã¨ã‚‚ã«ä½¿ç”¨ã—ã¾ã™ã€‚ -allowed-client-scopes.label=許å¯ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -allowed-client-scopes.tooltip=クライアント・スコープã®ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã€‚æ–°ã—ã登録ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§ä½¿ç”¨ã§ãã¾ã™ã€‚ホワイトリストã«ç™»éŒ²ã•ã‚Œã¦ã„ãªã„クライアント・スコープをクライアントã«ç™»éŒ²ã—よã†ã¨ã™ã‚‹ã¨ã€æ‹’å¦ã•ã‚Œã¾ã™ã€‚デフォルトã§ã¯ã€ãƒ›ãƒ¯ã‚¤ãƒˆãƒªã‚¹ãƒˆã¯ç©ºã‹ãƒ¬ãƒ«ãƒ ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒå«ã¾ã‚Œã¦ã„ã‚‹ã‹ã®ã„ãšã‚Œã‹ã§ã™ï¼ˆã€Œãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®è¨±å¯ã€è¨­å®šãƒ—ロパティーã«åŸºã¥ã„ã¦ã„ã¾ã™ï¼‰ã€‚ -allow-default-scopes.label=デフォルト・スコープã®è¨±å¯ -allow-default-scopes.tooltip=オンã®å ´åˆã€æ–°è¦ã«ç™»éŒ²ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã€ãƒ¬ãƒ«ãƒ ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã‹ã€ãƒ¬ãƒ«ãƒ ã®ã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã«è¨˜è¿°ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã‚’æŒã¤ã“ã¨ãŒè¨±å¯ã•ã‚Œã¾ã™ã€‚ -max-clients.label=レルムã‚ãŸã‚Šã®æœ€å¤§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆæ•° -max-clients.tooltip=レルム内ã®æ—¢å­˜ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®æ•°ãŒè¨­å®šã•ã‚ŒãŸåˆ¶é™ã¨åŒã˜ã‹ãれ以上ã®å ´åˆã¯ã€æ–°ã—ã„クライアントを登録ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -client-scopes=クライアント・スコープ -client-scopes.tooltip=クライアント・スコープを使用ã™ã‚‹ã¨ã€è¤‡æ•°ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆé–“ã§å…±æœ‰ã•ã‚Œã‚‹ãƒ—ロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã®å…±é€šã‚»ãƒƒãƒˆã‚’定義ã§ãã¾ã™ - -groups=グループ - -group.add-selected.tooltip=グループã«ã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -group.assigned-roles.tooltip=グループã«ãƒžãƒƒãƒ”ングã•ã‚ŒãŸãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -group.effective-roles.tooltip=マッピングã•ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚複åˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šå¼•ã継ã„ã§ã„るロールもå«ã¿ã¾ã™ã€‚ -group.available-roles.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚ˆã‚Šã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -group.assigned-roles-client.tooltip=マッピングã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -group.effective-roles-client.tooltip=マッピングã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚複åˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šå¼•ã継ã„ã§ã„るロールもå«ã¿ã¾ã™ã€‚ - -default-roles=デフォルトロール -no-realm-roles-available=使用å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“ - -users=ユーザー -user.add-selected.tooltip=ユーザーã«ã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -user.assigned-roles.tooltip=ユーザーã«ãƒžãƒƒãƒ”ングã•ã‚ŒãŸãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -user.effective-roles.tooltip=マッピングã•ã‚Œã¦ã„ã‚‹ã™ã¹ã¦ã®ãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚複åˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šå¼•ã継ã„ã§ã„るロールもå«ã¿ã¾ã™ã€‚ -user.available-roles.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚ˆã‚Šã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -user.assigned-roles-client.tooltip=マッピングã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -user.effective-roles-client.tooltip=マッピングã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚複åˆãƒ­ãƒ¼ãƒ«ã‚ˆã‚Šå¼•ã継ã„ã§ã„るロールもå«ã¿ã¾ã™ã€‚ -default.available-roles.tooltip=アサインå¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -realm-default-roles=レルムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ­ãƒ¼ãƒ« -realm-default-roles.tooltip=ユーザーã«ã‚¢ã‚µã‚¤ãƒ³ã•ã‚ŒãŸãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -default.available-roles-client.tooltip=デフォルトã§ã‚¢ã‚µã‚¤ãƒ³å¯èƒ½ãªã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -client-default-roles=クライアントã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ­ãƒ¼ãƒ« -client-default-roles.tooltip=デフォルトロールã¨ã—ã¦ã‚¢ã‚µã‚¤ãƒ³ã•ã‚ŒãŸã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -composite.available-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘å¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ¬ãƒ™ãƒ«ã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -composite.associated-roles.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘ã•ã‚Œã¦ã„るレルムレベルã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -composite.available-roles-client.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘å¯èƒ½ãªã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -composite.associated-roles-client.tooltip=ã“ã®è¤‡åˆãƒ­ãƒ¼ãƒ«ã«é–¢é€£ä»˜ã‘ã•ã‚Œã¦ã„るクライアント・ロールã§ã™ã€‚ -partial-import=部分インãƒãƒ¼ãƒˆ -partial-import.tooltip=部分インãƒãƒ¼ãƒˆã§ã¯ã€ä»¥å‰ã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã—ãŸJSONファイルよりユーザーã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã€ãŠã‚ˆã³ãã®ä»–ã®ãƒªã‚½ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -file=ファイル -exported-json-file=エクスãƒãƒ¼ãƒˆã•ã‚ŒãŸJSONファイル -import-from-realm=レルムã‹ã‚‰ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -import-users=ユーザーをインãƒãƒ¼ãƒˆ -import-groups=グループをインãƒãƒ¼ãƒˆ -import-clients=クライアントをインãƒãƒ¼ãƒˆ -import-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‚’インãƒãƒ¼ãƒˆ -import-realm-roles=レルムロールをインãƒãƒ¼ãƒˆ -import-client-roles=クライアント・ロールをインãƒãƒ¼ãƒˆ -if-resource-exists=リソースãŒå­˜åœ¨ã™ã‚‹å ´åˆ -fail=失敗 -skip=スキップ -overwrite=上書ã -if-resource-exists.tooltip=æ—¢ã«å­˜åœ¨ã™ã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚’インãƒãƒ¼ãƒˆã—よã†ã¨ã—ãŸå ´åˆã«ã©ã†ã™ã¹ãã‹ã‚’指定ã—ã¾ã™ã€‚ - -partial-export=部分エクスãƒãƒ¼ãƒˆ -partial-export.tooltip=部分エクスãƒãƒ¼ãƒˆã§ã¯ã€ãƒ¬ãƒ«ãƒ è¨­å®šã‚„ãã®ä»–ã®é–¢é€£ãƒªã‚½ãƒ¼ã‚¹ã‚’jsonファイルã«ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆã§ãã¾ã™ã€‚ -export-groups-and-roles=グループã¨ãƒ­ãƒ¼ãƒ«ã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ -export-clients=クライアントã®ã‚¨ã‚¯ã‚¹ãƒãƒ¼ãƒˆ - -action=アクション -role-selector=ロールã®é¸æŠž -realm-roles.tooltip=é¸æŠžå¯èƒ½ãªãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ - -select-a-role=ロールをé¸æŠžã—ã¦ãã ã•ã„ -select-realm-role=レルムロールをé¸æŠž -client-roles.tooltip=é¸æŠžå¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã§ã™ã€‚ -select-client-role=クライアント・ロールをé¸æŠž - -client-saml-endpoint=クライアントSAMLエンドãƒã‚¤ãƒ³ãƒˆ -add-client-scope=クライアント・スコープã®è¿½åŠ  - -default-client-scopes=デフォルトã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.tooltip=作æˆã•ã‚ŒãŸå„クライアントã«è‡ªå‹•çš„ã«è¿½åŠ ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.default=デフォルトã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.default.tooltip=作æˆã•ã‚ŒãŸå„クライアントã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦è¿½åŠ ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®å®šç¾©ã‚’許å¯ã™ã‚‹ -default-client-scopes.default.available=利用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.default.available.tooltip=レルムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¾ãŸã¯ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„クライアント・スコープ -default-client-scopes.default.assigned=割り当ã¦ã‚‰ã‚ŒãŸãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.default.assigned.tooltip=作æˆã•ã‚ŒãŸå„クライアントã«ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦è¿½åŠ ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.optional=オプションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.optional.tooltip=作æˆã•ã‚ŒãŸå„クライアントã«ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦è¿½åŠ ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®å®šç¾©ã‚’許å¯ã™ã‚‹ -default-client-scopes.optional.available=利用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.optional.available.tooltip=レルムã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã¾ãŸã¯ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„クライアント・スコープ -default-client-scopes.optional.assigned=割り当ã¦ã‚‰ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -default-client-scopes.optional.assigned.tooltip=作æˆã•ã‚ŒãŸå„クライアントã«ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦è¿½åŠ ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— - -client-scopes.setup=セットアップ -client-scopes.setup.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒªãƒ³ã‚¯ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—を設定ã§ãるよã†ã«ã—ã¾ã™ -client-scopes.default=デフォルトã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.default.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹éš›ã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒå¸¸ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚プロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒžãƒƒãƒ”ングã¯ã€OIDCèªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä½¿ç”¨ã•ã‚Œã¦ã„るスコープ・パラメーターã®å€¤ã«é–¢ä¿‚ãªã常ã«é©ç”¨ã•ã‚Œã¾ã™ -client-scopes.default.available=利用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.default.available.tooltip=デフォルトã¾ãŸã¯ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„クライアント・スコープ -client-scopes.default.assigned=割り当ã¦ã‚‰ã‚ŒãŸãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.default.assigned.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹éš›ã«ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.optional=オプションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.optional.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹éš›ã«ã€é©ç”¨ã•ã‚Œã‚‹ã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—。ãŸã ã—ã€OIDCèªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®ã‚¹ã‚³ãƒ¼ãƒ—・パラメーターã«ã‚ˆã£ã¦è¦æ±‚ã•ã‚ŒãŸå ´åˆã®ã¿ -client-scopes.optional.available=利用å¯èƒ½ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.optional.available.tooltip=デフォルトã¾ãŸã¯ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦å‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ãªã„クライアント・スコープ -client-scopes.optional.assigned=割り当ã¦ã‚‰ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.optional.assigned.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹éš›ã«ã€ã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ã¨ã—ã¦ä½¿ç”¨ã§ãるクライアント・スコープ - -client-scopes.evaluate=評価 -client-scopes.evaluate.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ç™ºè¡Œã•ã‚ŒãŸãƒˆãƒ¼ã‚¯ãƒ³ã§ä½¿ç”¨ã•ã‚Œã‚‹ã™ã¹ã¦ã®ãƒ—ロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒžãƒƒãƒ”ングを表示ã™ã‚‹ã“ã¨ã‚’許å¯ã—ã¾ã™ã€‚ã¾ãŸã€æä¾›ã•ã‚ŒãŸã‚¹ã‚³ãƒ¼ãƒ—・パラメーターã«åŸºã¥ã„ã¦ã‚µãƒ³ãƒ—ル・アクセストークンを生æˆã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ -scope-parameter=スコープ・パラメーター -scope-parameter.tooltip=ã“ã®ã‚¹ã‚³ãƒ¼ãƒ—・パラメーターã®å€¤ã‚’コピー/ペーストã—ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¢ãƒ€ãƒ—ターã‹ã‚‰é€ä¿¡ã•ã‚ŒãŸæœ€åˆã®OpenID Connectèªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä½¿ç”¨ã§ãã¾ã™ã€‚ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ç™ºè¡Œã•ã‚ŒãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹ã¨ãã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¨é¸æŠžã•ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒä½¿ç”¨ã•ã‚Œã¾ã™ -client-scopes.evaluate.scopes=クライアント・スコープ -client-scopes.evaluate.scopes.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ç™ºè¡Œã•ã‚ŒãŸãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹éš›ã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã‚’é¸æŠžã™ã‚‹ã“ã¨ã‚’許å¯ã—ã¾ã™ -client-scopes.evaluate.scopes.available=利用å¯èƒ½ãªã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.evaluate.scopes.available.tooltip=ã“ã‚Œã«ã¯ã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒå«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ã“ã®ã‚¹ã‚³ãƒ¼ãƒ—ã¯ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹ã¨ãã«ã‚ªãƒ—ションã§ä½¿ç”¨ã§ãã¾ã™ -client-scopes.evaluate.scopes.assigned=é¸æŠžã•ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.evaluate.scopes.assigned.tooltip=é¸æŠžã•ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¯ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹ã¨ãã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ã“れらã®ã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—を最åˆã®OpenID Connectèªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆãŒã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¢ãƒ€ãƒ—ターã‹ã‚‰é€ä¿¡ã•ã‚ŒãŸã¨ãã«é©ç”¨ã™ã‚‹å ´åˆã€OAuthスコープ・パラメーターã®ã©ã®å€¤ã‚’使用ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã‚’上ã§è¦‹ã‚‹ã“ã¨ãŒã§ãã¾ã™ -client-scopes.evaluate.scopes.effective=有効ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -client-scopes.evaluate.scopes.effective.tooltip=ã™ã¹ã¦ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¨é¸æŠžã•ã‚ŒãŸã‚ªãƒ—ションã®ã‚¹ã‚³ãƒ¼ãƒ—ãŒå«ã¾ã‚Œã¾ã™ã€‚クライアントã«ç™ºè¡Œã•ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹ã¨ãã«ã€ã™ã¹ã¦ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®ã™ã¹ã¦ã®ãƒ—ロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒžãƒƒãƒ”ングãŒä½¿ç”¨ã•ã‚Œã¾ã™ -client-scopes.evaluate.user.tooltip=å¿…è¦ã«å¿œã˜ã¦ã€ã‚µãƒ³ãƒ—ルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’生æˆã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’é¸æŠžã—ã¾ã™ã€‚ユーザーをé¸æŠžã—ãªã„ã¨ã€è©•ä¾¡ä¸­ã«ã‚µãƒ³ãƒ—ルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã¯ç”Ÿæˆã•ã‚Œã¾ã›ã‚“ -send-evaluation-request=評価 -send-evaluation-request.tooltip=ã“れをクリックã™ã‚‹ã¨ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹ã¨ãã«ä½¿ç”¨ã•ã‚Œã‚‹ã™ã¹ã¦ã®ãƒ—ロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒžãƒƒãƒ”ングãŒè¡¨ç¤ºã•ã‚Œã¾ã™ã€‚ã„ãã¤ã‹ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒé¸æŠžã•ã‚ŒãŸå ´åˆã«ã¯ã€ã‚ªãƒ—ションã§ã‚µãƒ³ãƒ—ルã®ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã‚‚生æˆã•ã‚Œã¾ã™ - -evaluated-protocol-mappers=有効ãªãƒ—ロトコル・マッパー -evaluated-protocol-mappers.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹éš›ã«ä½¿ç”¨ã•ã‚Œã‚‹ã™ã¹ã¦ã®æœ‰åŠ¹ãªãƒ—ロトコル・マッパーを表示ã—ã¾ã™ã€‚é¸æŠžã•ã‚ŒãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒ—ロトコル・マッパーもå«ã¾ã‚Œã¾ã™ã€‚プロトコル・マッパーã”ã¨ã«ã€ã©ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã‹ã‚‰ç¶™æ‰¿ã•ã‚Œã¦ã„ã‚‹ã‹ã‚’見るã“ã¨ãŒã§ãã¾ã™ -evaluated-roles=有効ãªãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—・マッピング -evaluated-roles.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ãƒˆãƒ¼ã‚¯ãƒ³ã‚’発行ã™ã‚‹ã¨ãã«ä½¿ç”¨ã•ã‚Œã‚‹ã™ã¹ã¦ã®æœ‰åŠ¹ãªãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—・マッピングを表示ã—ã¾ã™ã€‚é¸æŠžã—ãŸã‚ªãƒ—ションã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—・マッピングもå«ã¾ã‚Œã¾ã™ã€‚ -parent-client-scope=親クライアント・スコープ -client-scopes.evaluate.not-granted-roles=許å¯ã•ã‚Œã¦ã„ãªã„ロール -client-scopes.evaluate.not-granted-roles.tooltip=クライアントã«ã¯ã€ã“れらã®ãƒ­ãƒ¼ãƒ«ã®ã‚¹ã‚³ãƒ¼ãƒ—・マッピングãŒã‚ã‚Šã¾ã›ã‚“。ã“れらã®ãƒ­ãƒ¼ãƒ«ã¯ã€èªè¨¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãれらã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã£ã¦ã‚‚ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ç™ºè¡Œã•ã‚Œã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã«ã¯å«ã¾ã‚Œã¾ã›ã‚“ -client-scopes.evaluate.granted-realm-effective-roles=付与ã•ã‚ŒãŸæœ‰åŠ¹ãªãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ« -client-scopes.evaluate.granted-realm-effective-roles.tooltip=クライアントã«ã¯ã€ã“れらã®ãƒ­ãƒ¼ãƒ«ã®ã‚¹ã‚³ãƒ¼ãƒ—・マッピングãŒã‚ã‚Šã¾ã™ã€‚èªè¨¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒãれらã®ãƒ¡ãƒ³ãƒãƒ¼ã§ã‚ã‚‹å ´åˆã€ã“れらã®ãƒ­ãƒ¼ãƒ«ã¯ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ç™ºè¡Œã•ã‚Œã‚‹ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã«å«ã¾ã‚Œã¾ã™ -client-scopes.evaluate.granted-client-effective-roles=付与ã•ã‚ŒãŸæœ‰åŠ¹ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ« -generated-access-token=生æˆã•ã‚ŒãŸã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ -generated-access-token.tooltip=é¸æŠžã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒèªè¨¼ã•ã‚Œã‚‹ã¨ç”Ÿæˆã•ã‚Œã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«é€ä¿¡ã•ã‚Œã‚‹ãƒˆãƒ¼ã‚¯ãƒ³ã®ã‚µãƒ³ãƒ—ルをå‚ç…§ã—ã¦ãã ã•ã„。トークンã«ã¯ã€æœ‰åŠ¹ãªãƒ—ロトコル・マッパーã¨ãƒ­ãƒ¼ãƒ«ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒžãƒƒãƒ”ングã«åŸºã¥ã„ã¦ã€ã¾ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼è‡ªèº«ã«å‰²ã‚Šå½“ã¦ã‚‰ã‚ŒãŸã‚¯ãƒ¬ãƒ¼ãƒ /ロールã«åŸºã¥ã„ãŸã€ã‚¯ãƒ¬ãƒ¼ãƒ ã¨ãƒ­ãƒ¼ãƒ«ãŒè¡¨ç¤ºã•ã‚Œã¾ã™ - -manage=ç®¡ç† -authentication=èªè¨¼ -user-federation=ユーザー・フェデレーション -user-storage=ユーザー・ストレージ -events=イベント -realm-settings=レルムã®è¨­å®š -configure=設定 -select-realm=レルムã®é¸æŠž -add=追加 - -client-storage=クライアント・ストレージ -no-client-storage-providers-configured=クライアント・ストレージ・プロãƒã‚¤ãƒ€ãƒ¼ãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ -client-stores.tooltip=Keycloakã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¨ãã®è©³ç´°ã‚’外部ストアã‹ã‚‰å–å¾—ã§ãã¾ã™ã€‚ - -client-scope.name.tooltip=クライアント・スコープã®åå‰ã€‚レルム内ã§ãƒ¦ãƒ‹ãƒ¼ã‚¯ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。スコープ・パラメーターã®å€¤ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹ãŸã‚ã€åå‰ã«ã¯ç©ºç™½æ–‡å­—ã‚’å«ã‚ãªã„ã§ãã ã•ã„ -client-scope.description.tooltip=クライアント・スコープã®èª¬æ˜Ž -client-scope.protocol.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã«ã‚ˆã£ã¦æä¾›ã•ã‚Œã¦ã„ã‚‹SSOプロトコル設定ãŒã©ã‚Œã‹ -client-scope.display-on-consent-screen=åŒæ„ç”»é¢ã§è¡¨ç¤ºã™ã‚‹ -client-scope.display-on-consent-screen.tooltip=オンã§ã€åŒæ„ãŒå¿…è¦ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒè¿½åŠ ã•ã‚ŒãŸå ´åˆã€ã€ŒåŒæ„ç”»é¢ã®ãƒ†ã‚­ã‚¹ãƒˆã€ã§æŒ‡å®šã•ã‚ŒãŸãƒ†ã‚­ã‚¹ãƒˆãŒåŒæ„ç”»é¢ã«è¡¨ç¤ºã•ã‚Œã¾ã™ã€‚オフã®å ´åˆã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¯åŒæ„ç”»é¢ã«è¡¨ç¤ºã•ã‚Œã¾ã›ã‚“ -client-scope.consent-screen-text=åŒæ„ç”»é¢ã®ãƒ†ã‚­ã‚¹ãƒˆ -client-scope.consent-screen-text.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ãŒåŒæ„ãŒå¿…è¦ãªã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«è¿½åŠ ã•ã‚ŒãŸå ´åˆã«ã€åŒæ„ç”»é¢ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒ†ã‚­ã‚¹ãƒˆã€‚指定ã—ãªã„å ´åˆã¯ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®åå‰ã«ãªã‚Šã¾ã™ -client-scope.gui-order=GUIé †åº -client-scope.gui-order.tooltip=GUI(åŒæ„ページã®ã‚ˆã†ãªï¼‰ã§ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®é †åºã‚’æ•´æ•°ã§æŒ‡å®šã—ã¾ã™ã€‚ -client-scope.include-in-token-scope=トークンスコープã«å«ã‚ã‚‹ -client-scope.include-in-token-scope.tooltip=オンã®å ´åˆã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã®åå‰ãŒã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãƒ»ãƒ—ロパティーã®ã€Œscopeã€ã¨åŒæ§˜ã«ãƒˆãƒ¼ã‚¯ãƒ³ãƒ»ã‚¤ãƒ³ãƒˆãƒ­ã‚¹ãƒšã‚¯ã‚·ãƒ§ãƒ³ãƒ»ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚オフã®å ´åˆã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã¯ãƒˆãƒ¼ã‚¯ãƒ³ã¨ãƒˆãƒ¼ã‚¯ãƒ³ãƒ»ã‚¤ãƒ³ãƒˆãƒ­ã‚¹ãƒšã‚¯ã‚·ãƒ§ãƒ³ãƒ»ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‹ã‚‰é™¤å¤–ã•ã‚Œã¾ã™ã€‚ - -add-user-federation-provider=ユーザー・フェデレーション・プロãƒã‚¤ãƒ€ãƒ¼ã®è¿½åŠ  -add-user-storage-provider=ユーザー・ストレージ・プロãƒã‚¤ãƒ€ãƒ¼ã®è¿½åŠ  -required-settings=å¿…è¦ãªè¨­å®š -provider-id=プロãƒã‚¤ãƒ€ãƒ¼ID -console-display-name=コンソール表示å -console-display-name.tooltip=管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«å†…ã§ã®ãƒªãƒ³ã‚¯è¡¨ç¤ºåを設定ã—ã¾ã™ã€‚ -priority=優先度 -priority.tooltip=ユーザーを検索ã™ã‚‹éš›ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®å„ªå…ˆåº¦ã‚’設定ã—ã¾ã™ã€‚低ã„é †ã¨ãªã‚Šã¾ã™ã€‚ -user-storage.enabled.tooltip=プロãƒã‚¤ãƒ€ãƒ¼ãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã‚‹å ´åˆã€ã‚¯ã‚¨ãƒªãƒ¼ã¯è€ƒæ…®ã•ã‚Œãšã€ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒå†åº¦æœ‰åŠ¹ã«ãªã‚‹ã¾ã§ã€ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ç„¡åŠ¹ã‹ã¤èª­ã¿å–り専用ã«ãªã‚Šã¾ã™ã€‚ -sync-settings=åŒæœŸã®è¨­å®š -periodic-full-sync=定期的ãªãƒ•ãƒ«åŒæœŸ -periodic-full-sync.tooltip=プロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Keycloakã¸ã®å®šæœŸçš„ãªãƒ•ãƒ«åŒæœŸã‚’有効ã¾ãŸã¯ç„¡åŠ¹ã¨ã™ã¹ãã‹ã‚’設定ã—ã¾ã™ã€‚ -full-sync-period=フルåŒæœŸã®å‘¨æœŸ -full-sync-period.tooltip=フルåŒæœŸã®å‘¨æœŸã‚’秒ã§è¨­å®šã—ã¾ã™ã€‚ -periodic-changed-users-sync=定期的ãªå¤‰æ›´ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åŒæœŸ -periodic-changed-users-sync.tooltip=変更ã¾ãŸã¯æ–°è¦ä½œæˆã•ã‚ŒãŸãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®Keycloakã¸ã®å®šæœŸçš„ãªåŒæœŸã‚’有効ã¾ãŸã¯ç„¡åŠ¹ã¨ã™ã¹ãã‹è¨­å®šã—ã¾ã™ã€‚ -changed-users-sync-period=変更ユーザーã®åŒæœŸå‘¨æœŸ -changed-users-sync-period.tooltip=変更ã¾ãŸã¯æ–°è¦ä½œæˆã•ã‚ŒãŸãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®åŒæœŸå‘¨æœŸã‚’秒ã§è¨­å®šã—ã¾ã™ã€‚ -synchronize-changed-users=変更ユーザーをåŒæœŸ -synchronize-all-users=ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’åŒæœŸ -remove-imported-users=インãƒãƒ¼ãƒˆã‚’削除 -unlink-users=ユーザーã®ãƒªãƒ³ã‚¯ã‚’解除ã™ã‚‹ -kerberos-realm=Kerberosレルム -kerberos-realm.tooltip=Kerberosレルムã®åå‰ã‚’設定ã—ã¾ã™ã€‚例ãˆã°ã€FOO.ORGã§ã™ã€‚ -server-principal=サーãƒãƒ¼ãƒ»ãƒ—リンシパル -server-principal.tooltip=サーãƒãƒ¼ã€ãƒ‰ãƒ¡ã‚¤ãƒ³åã‚’å«ã‚€HTTPサービスã®ã‚µãƒ¼ãƒ“ス・プリンシパルã®ãƒ•ãƒ«ãƒãƒ¼ãƒ ã‚’設定ã—ã¾ã™ã€‚例ãˆã°ã€HTTP/host.foo.org@FOO.ORGã§ã™ã€‚ -keytab=KeyTab -keytab.tooltip=サーãƒãƒ¼ãƒ»ãƒ—リンシパルã®ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã‚’å«ã‚€Kerberosã®KeyTabファイルを設定ã—ã¾ã™ã€‚例ãˆã°ã€/etc/krb5.keytabã§ã™ã€‚ -debug=デãƒãƒƒã‚° -debug.tooltip=Krb5LoginModuleã®æ¨™æº–出力ã¸ã®ãƒ‡ãƒãƒƒã‚°ãƒ­ã‚®ãƒ³ã‚°ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -allow-password-authentication=パスワードèªè¨¼ã‚’è¨±å¯ -allow-password-authentication.tooltip=Kerberosデータベースã«å¯¾ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードèªè¨¼ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -edit-mode=編集モード -edit-mode.tooltip=READ_ONLYã¯ã€ãƒ‘スワード更新ãŒè¨±å¯ã•ã‚Œãšã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒå¸¸ã«Kerberosパスワードã§èªè¨¼ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚UNSYNCEDã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒKeycloakデータベースã§ãƒ‘スワードを変更ã§ãã‚‹ã“ã¨ã‚’æ„味ã—ã€ã“ã®ãƒ‘スワードã¯Kerberosパスワードã®ä»£ã‚ã‚Šã«ä½¿ç”¨ã•ã‚Œã¾ã™ -ldap.edit-mode.tooltip=READ_ONLYã®å ´åˆã€LDAPストアã«èª­ã¿å–り専用ã§ã‚¢ã‚¯ã‚»ã‚¹ã—ã¾ã™ã€‚WRITABLEã¯ã€å¿…è¦ã«å¿œã˜ã¦ãƒ‡ãƒ¼ã‚¿ã‚’LDAPã«åŒæœŸã•ã›ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚UNSYNCEDã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ãŒã€LDAPã«åŒæœŸã—ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -update-profile-first-login=åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ãƒ—ロファイルを更新 -update-profile-first-login.tooltip=åˆå›žãƒ­ã‚°ã‚¤ãƒ³æ™‚ã®ãƒ—ロファイル更新ã®æœ‰åŠ¹/無効を設定ã—ã¾ã™ã€‚ -sync-registrations=登録ã®åŒæœŸ -ldap.sync-registrations.tooltip=LDAPストア内ã«æ–°è¦ä½œæˆãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’作æˆã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ã©ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒæ–°ã—ã„ユーザーã®åŒæœŸå…ˆã«é¸æŠžã•ã‚Œã‚‹ã‹ã¯ã€å„ªå…ˆåº¦ãŒå½±éŸ¿ã—ã¾ã™ã€‚ -import-enabled=ユーザーã®ã‚¤ãƒ³ãƒãƒ¼ãƒˆ -ldap.import-enabled.tooltip=オンã®å ´åˆã€LDAPユーザーã¯Keycloak DBã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚Œã€è¨­å®šã•ã‚ŒãŸåŒæœŸãƒãƒªã‚·ãƒ¼ã«ã‚ˆã£ã¦åŒæœŸã•ã‚Œã¾ã™ã€‚ -vendor=ベンダー -ldap.vendor.tooltip=LDAPベンダー(プロãƒã‚¤ãƒ€ãƒ¼ï¼‰ -username-ldap-attribute=ユーザーåã®LDAP属性 -ldap-attribute-name-for-username=ユーザーåã®LDAP属性å -username-ldap-attribute.tooltip=Keycloakユーザーåã«ãƒžãƒƒãƒ”ングã•ã‚Œã‚‹LDAP属性åを設定ã—ã¾ã™ã€‚多ãã®LDAPサーãƒãƒ¼ãƒ™ãƒ³ãƒ€ãƒ¼ã§ã¯ã€Œuidã€ã¨ãªã‚Šã¾ã™ã€‚Active Directoryã§ã¯ã€ŒsAMAccountNameã€ã¾ãŸã¯ã€Œcnã€ã¨ãªã‚Šã¾ã™ã€‚LDAPã‹ã‚‰Keycloakã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã™ã‚‹ã™ã¹ã¦ã®LDAPユーザーã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã§ã€å±žæ€§ã¯å…¥åŠ›ã•ã‚Œã¦ã„ã‚‹ã¯ãšã§ã™ã€‚ -rdn-ldap-attribute=RDN LDAP属性 -ldap-attribute-name-for-user-rdn=ユーザーRDNã®LDAP属性å -rdn-ldap-attribute.tooltip=一般的ãªãƒ¦ãƒ¼ã‚¶ãƒ¼DNã®RDN(top属性)ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹LDAP属性åを設定ã—ã¾ã™ã€‚通常ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åã®LDAP属性ã¨åŒã˜ã§ã™ãŒã€å¿…é ˆã§ã¯ã‚ã‚Šã¾ã›ã‚“。例ãˆã°Active Directoryã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼åãŒã€ŒsAMAccountNameã€ã ã¨RDN属性ã¨ã—ã¦ã€Œcnã€ã‚’使用ã™ã‚‹ã®ãŒä¸€èˆ¬çš„ã§ã™ã€‚ -uuid-ldap-attribute=UUID LDAP属性 -ldap-attribute-name-for-uuid=UUIDã®LDAP属性å -uuid-ldap-attribute.tooltip=LDAP内ã§ã‚ªãƒ–ジェクトã®ãƒ¦ãƒ‹ãƒ¼ã‚¯ãªã‚ªãƒ–ジェクト識別å­ï¼ˆUUID)ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹LDAP属性åを設定ã—ã¾ã™ã€‚多ãã®LDAPサーãƒãƒ¼ãƒ™ãƒ³ãƒ€ãƒ¼ã§ã¯ã€ŒentryUUIDã€ã¨ãªã‚Šã¾ã™ãŒã€ç•°ãªã‚‹å ´åˆã‚‚ã‚ã‚Šã¾ã™ã€‚例ãˆã°Active Directoryã§ã¯ã€ã€ŒobjectGUIDã€ã¨ãªã‚Šã¾ã™ã€‚LDAPサーãƒãƒ¼ãŒUUIDをサãƒãƒ¼ãƒˆã—ã¦ã„ãªã„å ´åˆã¯ã€ãƒ„リー内ã®LDAPユーザーã®ä¸­ã§ãƒ¦ãƒ‹ãƒ¼ã‚¯ã¨ãªã‚‹ä»–ã®å±žæ€§ã‚’使用ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚例ãˆã°ã€ã€Œuidã€ã‚„「entryDNã€ã§ã™ã€‚ -user-object-classes=ユーザー・オブジェクト・クラス -ldap-user-object-classes.placeholder=LDAPã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚ªãƒ–ジェクト・クラス(カンマ区切り) -ldap-connection-url=LDAP接続URL -ldap-users-dn=LDAPユーザーDN -ldap-bind-dn=LDAPãƒã‚¤ãƒ³ãƒ‰DN -ldap-bind-credentials=LDAPãƒã‚¤ãƒ³ãƒ‰ãƒ»ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ« -ldap-filter=LDAPフィルター -ldap.user-object-classes.tooltip=LDAPユーザー用ã®ã™ã¹ã¦ã®LDAPオブジェクト・クラスをカンマ区切りã§è¨­å®šã—ã¾ã™ã€‚例:「inetOrgPerson, organizationalPersonã€ã€‚æ–°è¦ä½œæˆã•ã‚ŒãŸKeycloakユーザーã¯ã€ã“れらã™ã¹ã¦ã®ã‚ªãƒ–ジェクト・クラスを使用ã—ã¦LDAPã«æ›¸ãè¾¼ã¾ã‚Œã¾ã™ã€‚ã¾ãŸã€æ—¢å­˜ã®LDAPユーザーã®ãƒ¬ã‚³ãƒ¼ãƒ‰ã¯ã€ã“れらã™ã¹ã¦ã®ã‚ªãƒ–ジェクト・クラスをå«ã‚€å ´åˆã ã‘発見ã•ã‚Œã¾ã™ã€‚ -connection-url=接続URL -ldap.connection-url.tooltip=LDAPサーãƒãƒ¼ã¸ã®æŽ¥ç¶šURL -test-connection=接続テスト -users-dn=ユーザーDN -ldap.users-dn.tooltip=ユーザーãŒã„ã‚‹LDAPツリーã®å®Œå…¨DNを設定ã—ã¾ã™ã€‚ã“ã®DNã¯LDAPユーザーã®è¦ªã«ãªã‚Šã¾ã™ã€‚例ãˆã°ã€å…¸åž‹çš„ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€Œuid=john,ou=users,dc=example,dc=comã€ã®ã‚ˆã†ãªDNã¨ãªã‚Šã¾ã™ãŒã€ã“ã®å ´åˆã¯ã€Œou=users,dc=example,dc=comã€ã¨ãªã‚Šã¾ã™ã€‚ -authentication-type=ãƒã‚¤ãƒ³ãƒ‰ã‚¿ã‚¤ãƒ— -ldap.authentication-type.tooltip=LDAPãƒã‚¤ãƒ³ãƒ‰æ“作中ã«ä½¿ç”¨ã•ã‚Œã‚‹èªè¨¼æ–¹å¼ã®ã‚¿ã‚¤ãƒ—。LDAPサーãƒãƒ¼ã«é€ä¿¡ã•ã‚Œã‚‹ã»ã¨ã‚“ã©ã®ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚ç¾æ™‚点ã§ã¯ã€Œnoneã€ï¼ˆåŒ¿åLDAPèªè¨¼ï¼‰ã¾ãŸã¯ã€Œsimpleã€ï¼ˆã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ãƒ»ãƒã‚¤ãƒ³ãƒ‰ + パスワード・ãƒã‚¤ãƒ³ãƒ‰ã®èªè¨¼ï¼‰ã®ãƒ¡ã‚«ãƒ‹ã‚ºãƒ ã®ã¿åˆ©ç”¨ã§ãã¾ã™ã€‚ -bind-dn=ãƒã‚¤ãƒ³ãƒ‰DN -ldap.bind-dn.tooltip=KeycloakãŒLDAPサーãƒãƒ¼ã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã™ã‚‹LDAP管ç†è€…ã®DNを設定ã—ã¾ã™ã€‚ -bind-credential=ãƒã‚¤ãƒ³ãƒ‰ãƒ»ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ« -ldap.bind-credential.tooltip=LDAP管ç†è€…ã®ãƒ‘スワードを設定ã—ã¾ã™ã€‚ã“ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¯ã€ãƒœãƒ¼ãƒ«ãƒˆã‹ã‚‰å€¤ã‚’å–å¾—ã§ãã¾ã™ã€‚${vault.ID}å½¢å¼ã‚’使用ã—ã¾ã™ã€‚ -test-authentication=èªè¨¼ãƒ†ã‚¹ãƒˆ -custom-user-ldap-filter=カスタムユーザーLDAPフィルター -ldap.custom-user-ldap-filter.tooltip=ユーザー検索ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã‚’è¡Œã†LDAPフィルターを設定ã—ã¾ã™ã€‚追加ã®ãƒ•ã‚£ãƒ«ã‚¿ãƒ¼ãŒå¿…è¦ãªã„å ´åˆã¯ç©ºã®ã¾ã¾ã«ã—ã¦ãã ã•ã„。設定ã¯ã€ã€Œ(ã€ã‹ã‚‰å§‹ã¾ã‚Šã€Œ)ã€ã§çµ‚ã‚ã‚‹ã“ã¨ã‚’確èªã—ã¦ãã ã•ã„。 -search-scope=検索スコープ -ldap.search-scope.tooltip=One Levelã§ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼DNã§æŒ‡å®šã•ã‚ŒãŸDNã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã¿ãŒæ¤œç´¢ã•ã‚Œã¾ã™ã€‚Subtreeã§ã¯ã€ã‚µãƒ–ツリー全体を検索ã—ã¾ã™ã€‚より詳細ã«ã¤ã„ã¦ã¯LDAPã®ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆã‚’å‚ç…§ã—ã¦ãã ã•ã„。 -use-truststore-spi=トラストストアSPIを使用 -ldap.use-truststore-spi.tooltip=LDAP接続ã§ã€standalone.xml/domain.xmlã§è¨­å®šã•ã‚ŒãŸãƒˆãƒ©ã‚¹ãƒˆã‚¹ãƒˆã‚¢ã®ãƒˆãƒ©ã‚¹ãƒˆã‚¹ãƒˆã‚¢SPIを使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚「Alwaysã€ã¯å¸¸ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Neverã€ã¯ä½¿ç”¨ã—ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Only for ldapsã€ã¯ã€æŽ¥ç¶šURLãŒldapsã®å ´åˆã«ä½¿ç”¨ã™ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚standalone.xml/domain.xmlã§è¨­å®šã•ã‚Œã¦ã„ãªã„å ´åˆã§ã‚‚ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®Java CA証明書(cacerts)や「javax.net.ssl.trustStoreã€ãƒ—ロパティーã§æŒ‡å®šã•ã‚ŒãŸè¨¼æ˜Žæ›¸ãŒä½¿ç”¨ã•ã‚Œã‚‹ç‚¹ã«æ³¨æ„ã—ã¦ãã ã•ã„。 -validate-password-policy=パスワード・ãƒãƒªã‚·ãƒ¼ã®æ¤œè¨¼ -connection-pooling=接続プーリング -connection-pooling-settings=接続プーリングã®è¨­å®š -connection-pooling-authentication=接続プーリングèªè¨¼ -connection-pooling-authentication-default=none simple -connection-pooling-debug=接続プールã®ãƒ‡ãƒãƒƒã‚°ãƒ¬ãƒ™ãƒ« -connection-pooling-debug-default=オフ -connection-pooling-initsize=接続プールã®åˆæœŸã‚µã‚¤ã‚º -connection-pooling-initsize-default=1 -connection-pooling-maxsize=接続プールã®æœ€å¤§ã‚µã‚¤ã‚º -connection-pooling-maxsize-default=1000 -connection-pooling-prefsize=接続プールã®æŽ¨å¥¨ã‚µã‚¤ã‚º -connection-pooling-prefsize-default=5 -connection-pooling-protocol=接続プールã®ãƒ—ロトコル -connection-pooling-protocol-default=plain ssl -connection-pooling-timeout=接続プールã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆ -connection-pooling-timeout-default=300000 -ldap-connection-timeout=接続タイムアウト -ldap.connection-timeout.tooltip=LDAP接続タイムアウト(ミリ秒å˜ä½ï¼‰ -ldap-read-timeout=読ã¿å–りタイムアウト -ldap.read-timeout.tooltip=LDAP読ã¿å–りタイムアウト(ミリ秒å˜ä½ï¼‰ã€‚ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã¯LDAP読ã¿å–ã‚Šæ“作ã«é©ç”¨ã•ã‚Œã¾ã™ -ldap.validate-password-policy.tooltip=パスワードを更新ã™ã‚‹å‰ã«ã€KeycloakãŒãƒ‘スワード・ãƒãƒªã‚·ãƒ¼ã§ãƒ‘スワードを検証ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ -ldap.connection-pooling.tooltip=KeycloakãŒLDAPサーãƒãƒ¼ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã§æŽ¥ç¶šãƒ—ールを使用ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ -ldap.connection-pooling.authentication.tooltip=プールå¯èƒ½ãªæŽ¥ç¶šã®èªè¨¼ã‚¿ã‚¤ãƒ—ã®ãƒªã‚¹ãƒˆï¼ˆã‚¹ãƒšãƒ¼ã‚¹åŒºåˆ‡ã‚Šï¼‰ã€‚有効ãªã‚¿ã‚¤ãƒ—ã¯ã€Œnoneã€ã€ã€Œsimpleã€ã€ã€ŒDIGEST-MD5ã€ã§ã™ã€‚ -ldap.connection-pooling.debug.tooltip=生æˆã™ã‚‹ãƒ‡ãƒãƒƒã‚°å‡ºåŠ›ã®ãƒ¬ãƒ™ãƒ«ã‚’示ã™æ–‡å­—列。有効ãªå€¤ã¯ã€ã€Œfineã€ï¼ˆæŽ¥ç¶šã®ä½œæˆã¨å‰Šé™¤ã®ãƒˆãƒ¬ãƒ¼ã‚¹ï¼‰ã¨ã€Œallã€ï¼ˆã™ã¹ã¦ã®ãƒ‡ãƒãƒƒã‚°æƒ…報)ã§ã™ã€‚ -ldap.connection-pooling.initsize.tooltip=アイデンティティー用ã«æœ€åˆã«æŽ¥ç¶šã‚’作æˆã™ã‚‹ã¨ãã«ä½œæˆã™ã‚‹æŽ¥ç¶šã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã”ã¨ã®æŽ¥ç¶šæ•°ã‚’表ã™æ•´æ•°ã®æ–‡å­—列表ç¾ã€‚ -ldap.connection-pooling.maxsize.tooltip=接続アイデンティティーã”ã¨ã«åŒæ™‚ã«ç¶­æŒã§ãる接続ã®æœ€å¤§æ•°ã‚’表ã™æ•´æ•°ã®æ–‡å­—列表ç¾ã€‚ -ldap.connection-pooling.prefsize.tooltip=åŒæ™‚ã«ç¶­æŒã™ã‚‹å¿…è¦ãŒã‚る接続アイデンティティーã”ã¨ã®å„ªå…ˆæŽ¥ç¶šæ•°ã‚’表ã™æ•´æ•°ã®æ–‡å­—列表ç¾ã€‚ -ldap.connection-pooling.protocol.tooltip=プールå¯èƒ½ãªæŽ¥ç¶šã®ãƒ—ロトコルタイプã®ãƒªã‚¹ãƒˆï¼ˆã‚¹ãƒšãƒ¼ã‚¹åŒºåˆ‡ã‚Šï¼‰ã€‚有効ãªã‚¿ã‚¤ãƒ—ã¯ã€Œplainã€ã¨ã€Œsslã€ã§ã™ã€‚ -ldap.connection-pooling.timeout.tooltip=アイドル状態ã®æŽ¥ç¶šãŒã‚¯ãƒ­ãƒ¼ã‚ºã•ã‚Œãšã€ãƒ—ールã‹ã‚‰ã‚‚削除ã•ã‚Œãªã„ã¾ã¾ãƒ—ールã«æ®‹ã‚‹æ™‚間(ミリ秒)を表ã™æ•´æ•°ã®æ–‡å­—列表ç¾ã€‚ -ldap.pagination.tooltip=LDAPサーãƒãƒ¼ã¯ãƒšãƒ¼ã‚¸ãƒãƒ¼ã‚·ãƒ§ãƒ³ã‚’サãƒãƒ¼ãƒˆã™ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -ldap.startTls.tooltip=STARTTLSを使用ã—ã¦LDAPã¸ã®æŽ¥ç¶šã‚’æš—å·åŒ–ã—ã¾ã™ã€‚ã“ã‚Œã«ã‚ˆã‚ŠæŽ¥ç¶šãƒ—ールãŒç„¡åŠ¹ã«ãªã‚Šã¾ã™ã€‚ -kerberos-integration=Kerberosã¨çµ±åˆ -allow-kerberos-authentication=Kerberosèªè¨¼ã‚’è¨±å¯ -ldap.allow-kerberos-authentication.tooltip=SPNEGO/Kerberosã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æŒã¤ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®HTTPèªè¨¼ã‚’有効/無効ã«ã—ã¾ã™ã€‚èªè¨¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢ã™ã‚‹ãƒ‡ãƒ¼ã‚¿ã¯ã“ã®LDAPサーãƒãƒ¼ã‚ˆã‚Šãƒ—ロビジョニングã•ã‚Œã¾ã™ã€‚ -use-kerberos-for-password-authentication=パスワードèªè¨¼ã«Kerberosを使用 -ldap.use-kerberos-for-password-authentication.tooltip=LDAPサーãƒãƒ¼ã«å¯¾ã—ã¦ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ãƒ»ã‚µãƒ¼ãƒ“スã®APIã§èªè¨¼ã™ã‚‹ä»£ã‚ã‚Šã«ã€Kerberosã«å¯¾ã—ã¦ãƒ¦ãƒ¼ã‚¶ãƒ¼å/パスワードèªè¨¼ã™ã‚‹Kerberosログイン・モジュールを使用ã—ã¾ã™ã€‚ -batch-size=ãƒãƒƒãƒã‚µã‚¤ã‚º -ldap.batch-size.tooltip=1トランザクションã§LDAPã‹ã‚‰Keycloakã«ã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚Œã‚‹LDAPユーザー数を設定ã—ã¾ã™ã€‚ -ldap.periodic-full-sync.tooltip=Keycloakã¸ã®LDAPユーザーã®å®šæœŸçš„ãªãƒ•ãƒ«åŒæœŸã‚’有効/無効ã«ã—ã¾ã™ã€‚ -ldap.periodic-changed-users-sync.tooltip=Keycloakã¸ã®å¤‰æ›´ã¾ãŸã¯æ–°è¦ä½œæˆã•ã‚ŒãŸLDAPユーザーã®å®šæœŸçš„ãªåŒæœŸã‚’有効/無効ã«ã—ã¾ã™ã€‚ -ldap.changed-users-sync-period.tooltip=変更ã¾ãŸã¯æ–°è¦ä½œæˆã•ã‚ŒãŸLDAPユーザーã®åŒæœŸå‘¨æœŸã‚’秒ã§è¨­å®šã—ã¾ã™ã€‚ -user-federation-mappers=ユーザー・フェデレーションã®ãƒžãƒƒãƒ‘ー -create-user-federation-mapper=ユーザー・フェデレーション・マッパーã®ä½œæˆ -add-user-federation-mapper=ユーザー・フェデレーション・マッパーã®è¿½åŠ  -provider-name=プロãƒã‚¤ãƒ€ãƒ¼å -no-user-federation-providers-configured=設定ã•ã‚Œã¦ã„るユーザー・フェデレーション・プロãƒã‚¤ãƒ€ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“ -no-user-storage-providers-configured=設定ã•ã‚Œã¦ã„るユーザー・ストレージ・プロãƒã‚¤ãƒ€ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“ -add-identity-provider=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ç™»éŒ² -add-identity-provider-link=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒªãƒ³ã‚¯ç™»éŒ² -identity-provider=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ -identity-provider-user-id=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ID -identity-provider-user-id.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼å´ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ¦ãƒ‹ãƒ¼ã‚¯IDã§ã™ã€‚ -identity-provider-username=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å -identity-provider-username.tooltip=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼å´ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ã€‚ -pagination=ページãƒãƒ¼ã‚·ãƒ§ãƒ³ -browser-flow=ブラウザーフロー -browser-flow.tooltip=ブラウザーèªè¨¼ã§ä½¿ç”¨ã—ãŸã„フローをé¸æŠžã—ã¦ãã ã•ã„。 -registration-flow=登録フロー -registration-flow.tooltip=登録ã§ä½¿ç”¨ã—ãŸã„フローをé¸æŠžã—ã¦ãã ã•ã„。 -direct-grant-flow=ダイレクト・グラント・フロー -direct-grant-flow.tooltip=ダイレクト・グラントèªè¨¼ã§ä½¿ç”¨ã—ãŸã„フローをé¸æŠžã—ã¦ãã ã•ã„。 -reset-credentials=クレデンシャルã®ãƒªã‚»ãƒƒãƒˆ -reset-credentials.tooltip=ユーザーãŒã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã‚’忘れãŸéš›ã«ä½¿ç”¨ã—ãŸã„フローをé¸æŠžã—ã¦ãã ã•ã„。 -client-authentication=クライアントèªè¨¼ -client-authentication.tooltip=クライアントèªè¨¼ã§ä½¿ç”¨ã—ãŸã„フローをé¸æŠžã—ã¦ãã ã•ã„。 -docker-auth=Dockerèªè¨¼ -docker-auth.tooltip=Dockerクライアントã«å¯¾ã™ã‚‹èªè¨¼ã«ä½¿ç”¨ã™ã‚‹ãƒ•ãƒ­ãƒ¼ã‚’é¸æŠžã—ã¾ã™ã€‚ -new=æ–°è¦ä½œæˆ -copy=コピー -add-execution=エグゼキューションを追加 -add-flow=フローを追加 -auth-type=èªè¨¼ã‚¿ã‚¤ãƒ— -requirement=å¿…è¦æ¡ä»¶ -config=設定 -no-executions-available=使用å¯èƒ½ãªã‚¨ã‚°ã‚¼ã‚­ãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ãŒã‚ã‚Šã¾ã›ã‚“ -authentication-flows=èªè¨¼ãƒ•ãƒ­ãƒ¼ -create-authenticator-config=èªè¨¼è¨­å®šã®ä½œæˆ -authenticator.alias.tooltip=ã“ã®è¨­å®šã®åå‰ã‚’設定ã—ã¾ã™ã€‚ -otp-type=OTPタイプ -time-based=タイムベース -counter-based=カウンターベース -otp-type.tooltip=「totpã€ã¯ã‚¿ã‚¤ãƒ ãƒ™ãƒ¼ã‚¹ã®ãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ãƒ»ãƒ‘スワードã§ã™ã€‚「hotpã€ã¯ã€ã‚µãƒ¼ãƒãƒ¼ã§ãƒãƒƒã‚·ãƒ¥ã«å¯¾ã—ã¦ã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ã‚’ä¿æŒã™ã‚‹ã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ãƒ™ãƒ¼ã‚¹ã®ãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ãƒ»ãƒ‘スワードã§ã™ã€‚ -otp-hash-algorithm=OTPãƒãƒƒã‚·ãƒ¥ãƒ»ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ  -otp-hash-algorithm.tooltip=OTPを生æˆã™ã‚‹ã®ã«ã©ã®ãƒãƒƒã‚·ãƒ¥ãƒ»ã‚¢ãƒ«ã‚´ãƒªã‚ºãƒ ã‚’使用ã™ã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -number-of-digits=æ¡æ•° -otp.number-of-digits.tooltip=OTPã®æ¡æ•°ã‚’設定ã—ã¾ã™ã€‚ -look-ahead-window=先読ã¿ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ -otp.look-ahead-window.tooltip=トークン・ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã¨ã‚µãƒ¼ãƒãƒ¼ãŒæ™‚刻åŒæœŸã¾ãŸã¯ã‚«ã‚¦ãƒ³ã‚¿ãƒ¼åŒæœŸã—ã¦ã„ãªã„ã“ã¨ã‚’考慮ã—ã¦ã©ã‚Œãらã„先読ã¿ã‚’è¡Œã†ã‹è¨­å®šã—ã¾ã™ã€‚ -initial-counter=åˆæœŸã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ -otp.initial-counter.tooltip=åˆæœŸã‚«ã‚¦ãƒ³ã‚¿ãƒ¼ã®å€¤ã‚’設定ã—ã¾ã™ã€‚ -otp-token-period=OTPトークンã®æœŸé–“ -otp-token-period.tooltip=OTPトークンãŒæœ‰åŠ¹ãªç§’数を設定ã—ã¾ã™ã€‚デフォルトã¯30秒ã§ã™ã€‚ -otp-supported-applications=サãƒãƒ¼ãƒˆã•ã‚Œã‚‹ã‚¢ãƒ—リケーション -otp-supported-applications.tooltip=ç¾åœ¨ã®OTPãƒãƒªã‚·ãƒ¼ã§å‹•ä½œã™ã‚‹ã“ã¨ãŒåˆ†ã‹ã£ã¦ã„るアプリケーション -table-of-password-policies=パスワード・ãƒãƒªã‚·ãƒ¼ã®ä¸€è¦§è¡¨ -add-policy.placeholder=ãƒãƒªã‚·ãƒ¼ã‚’追加... -policy-type=ãƒãƒªã‚·ãƒ¼ã®ã‚¿ã‚¤ãƒ— -policy-value=ãƒãƒªã‚·ãƒ¼ã®å€¤ -webauthn-policy=WebAuthnãƒãƒªã‚·ãƒ¼ -webauthn-policy.tooltip=WebAuthnèªè¨¼ã®ãƒãƒªã‚·ãƒ¼ã€‚ã“ã‚Œã¯ã€ã€ŒWebAuthn Registerã€å¿…須アクションã¨ã€ŒWebAuthn Authenticatorã€ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã§ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚一般的ãªç”¨é€”ã¯ã€2è¦ç´ èªè¨¼ã«WebAuthnを使用ã™ã‚‹å ´åˆã§ã™ã€‚ -webauthn-policy-passwordless=WebAuthnパスワードレス・ãƒãƒªã‚·ãƒ¼ -webauthn-policy-passwordless.tooltip=パスワードレスWebAuthnèªè¨¼ã®ãƒãƒªã‚·ãƒ¼ã€‚ã“ã‚Œã¯ã€ã€ŒWebauthn Register Passwordlessã€å¿…須アクションãŠã‚ˆã³ã€ŒWebAuthn Passwordless Authenticatorã€ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã«ã‚ˆã£ã¦ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚一般的ãªä½¿ç”¨æ³•ã¯ã€WebAuthnãŒä¸€è¦ç´ èªè¨¼ã¨ã—ã¦ä½¿ç”¨ã•ã‚Œã‚‹å ´åˆã§ã™ã€‚「WebAuthnãƒãƒªã‚·ãƒ¼ã€ã¨ã€ŒWebAuthnパスワードレス・ãƒãƒªã‚·ãƒ¼ã€ã®ä¸¡æ–¹ã‚’使用ã™ã‚‹ã¨ã€WebAuthnã‚’åŒã˜ãƒ¬ãƒ«ãƒ ã®ç¬¬1è¦ç´ ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã¨ç¬¬2è¦ç´ ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®ä¸¡æ–¹ã¨ã—ã¦ä½¿ç”¨ã§ãã¾ã™ã€‚ -webauthn-rp-entity-name=リライング・パーティー・エンティティーå -webauthn-rp-entity-name.tooltip=WebAuthnリライング・パーティーã¨ã—ã¦ã®äººé–“ãŒèª­ã¿å–れるサーãƒãƒ¼å -webauthn-signature-algorithms=ç½²åアルゴリズム -webauthn-signature-algorithms.tooltip=èªè¨¼ã‚¢ã‚µãƒ¼ã‚·ãƒ§ãƒ³ã«ä½¿ç”¨ã™ã‚‹ç½²åアルゴリズム。 -webauthn-rp-id=リライング・パーティー・エンティティーID -webauthn-rp-id.tooltip=ã“ã‚Œã¯ã€WebAuthnリライング・パーティーã¨ã—ã¦ã®IDã§ã™ã€‚オリジンã®æœ‰åŠ¹ãªãƒ‰ãƒ¡ã‚¤ãƒ³ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。 -webauthn-attestation-conveyance-preference=期待ã™ã‚‹æ§‹æˆè¨¼æ˜Žä¼é” -webauthn-attestation-conveyance-preference.tooltip=èªè¨¼ã‚¹ãƒ†ãƒ¼ãƒˆãƒ¡ãƒ³ãƒˆã‚’生æˆã™ã‚‹æ–¹æ³•ã®å„ªå…ˆæ¨©ã‚’オーセンティケーターã«é€šçŸ¥ã—ã¾ã™ã€‚ -webauthn-authenticator-attachment=オーセンティケーター・アタッãƒãƒ¡ãƒ³ãƒˆ -webauthn-authenticator-attachment.tooltip=å—ã‘入れå¯èƒ½ãªã‚¢ã‚¿ãƒƒãƒãƒ¡ãƒ³ãƒˆãƒ»ãƒ‘ターンã§ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã¨é€šä¿¡ã—ã¾ã™ã€‚ -webauthn-require-resident-key=常é§éµãŒå¿…è¦ -webauthn-require-resident-key.tooltip=ã“ã‚Œã¯ã€ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã«å…¬é–‹éµã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã‚’常é§éµã¨ã—ã¦ä½œæˆã™ã‚‹ã‹ã©ã†ã‹ã‚’指示ã—ã¾ã™ã€‚ -webauthn-user-verification-requirement=ユーザー検証è¦ä»¶ -webauthn-user-verification-requirement.tooltip=ユーザーを実際ã«æ¤œè¨¼ã™ã‚‹ã“ã¨ã‚’確èªã™ã‚‹ãŸã‚ã«ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã¨é€šä¿¡ã—ã¾ã™ã€‚ -webauthn-create-timeout=タイムアウト -webauthn-create-timeout.tooltip=ユーザーã®å…¬é–‹éµã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã®ä½œæˆã«å¯¾ã™ã‚‹ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆå€¤ï¼ˆç§’å˜ä½ï¼‰ã€‚0ã«è¨­å®šã™ã‚‹ã¨ã€ã“ã®ã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆãƒ»ã‚ªãƒ—ションã¯é©å¿œã•ã‚Œã¾ã›ã‚“。 -webauthn-avoid-same-authenticator-register=オーセンティケーターã®é‡è¤‡ç™»éŒ²å›žé¿ -webauthn-avoid-same-authenticator-register.tooltip=ã™ã§ã«ç™»éŒ²ã•ã‚Œã¦ã„るオーセンティケーターã®ç™»éŒ²ã‚’é¿ã‘ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -webauthn-acceptable-aaguids=許容å¯èƒ½ãªAAGUID -webauthn-acceptable-aaguids.tooltip=登録å¯èƒ½ãªã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®AAGUIDã®ãƒªã‚¹ãƒˆã€‚ -manage-webauthn-authenticator=WebAuthnオーセンティケーターã®ç®¡ç† -public-key-credential-id=公開éµã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ID -public-key-credential-aaguid=公開éµã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«AAGUID -public-key-credential-label=公開éµã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ãƒ»ãƒ©ãƒ™ãƒ« -admin-events=管ç†ã‚¤ãƒ™ãƒ³ãƒˆ -admin-events.tooltip=ä¿å­˜ã•ã‚ŒãŸãƒ¬ãƒ«ãƒ ã®ç®¡ç†ã‚¤ãƒ™ãƒ³ãƒˆã‚’表示ã—ã¾ã™ã€‚管ç†ã‚¤ãƒ™ãƒ³ãƒˆã¯ã€ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†ã«é–¢é€£ã—ãŸã‚¤ãƒ™ãƒ³ãƒˆã€ä¾‹ãˆã°ãƒ¬ãƒ«ãƒ ã®ä½œæˆãªã©ã§ã™ã€‚イベントã®ä¿å­˜ã‚’有効ã«ã™ã‚‹ã«ã¯è¨­å®šã¸ç§»å‹•ã—ã¦ãã ã•ã„。 -login-events=ログインイベント -filter=フィルター -update=æ›´æ–° -reset=リセット -operation-types=æ“作タイプ -resource-types=リソースタイプ -select-operations.placeholder=æ“作をé¸æŠž... -select-resource-types.placeholder=リソースタイプをé¸æŠž... -resource-path=リソースパス -resource-path.tooltip=リソースパスã§ãƒ•ã‚£ãƒ«ã‚¿ãƒªãƒ³ã‚°ã—ã¾ã™ã€‚ワイルドカード「*ã€ã‚’サãƒãƒ¼ãƒˆã—ã¾ã™ï¼ˆä¾‹ï¼šã€Œusers/*ã€ï¼‰ã€‚ -date-(from)=日付(From) -date-(to)=日付(To) -authentication-details=èªè¨¼ã®è©³ç´° -ip-address=IPアドレス -time=日時 -operation-type=æ“作タイプ -resource-type=リソースタイプ -auth=èªè¨¼ -representation=Representation -register=登録 -required-action=必須アクション -default-action=デフォルト・アクション -auth.default-action.tooltip=有効ã®å ´åˆã¯ã€æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ã¯ã“ã®å¿…須アクションãŒã‚¢ã‚µã‚¤ãƒ³ã•ã‚Œã¾ã™ã€‚ -no-required-actions-configured=設定ã•ã‚ŒãŸå¿…須アクションã¯ã‚ã‚Šã¾ã›ã‚“ -defaults-to-id=IDãŒãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã«ãªã‚Šã¾ã™ -flows=フロー -bindings=ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚° -client-flow-bindings=èªè¨¼ãƒ•ãƒ­ãƒ¼ã®ã‚ªãƒ¼ãƒãƒ¼ãƒ©ã‚¤ãƒ‰ -client-flow-bindings.tooltip=レルムèªè¨¼ãƒ•ãƒ­ãƒ¼ãƒ»ãƒã‚¤ãƒ³ãƒ‡ã‚£ãƒ³ã‚°ã‚’オーãƒãƒ¼ãƒ©ã‚¤ãƒ‰ã—ã¾ã™ã€‚ -required-actions=必須アクション -password-policy=パスワード・ãƒãƒªã‚·ãƒ¼ -otp-policy=OTPãƒãƒªã‚·ãƒ¼ -user-groups=ユーザーグループ -default-groups=デフォルト・グループ -groups.default-groups.tooltip=æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒè‡ªå‹•çš„ã«å‚加ã™ã‚‹ã‚°ãƒ«ãƒ¼ãƒ—ã®ã‚»ãƒƒãƒˆã‚’設定ã—ã¾ã™ã€‚ -cut=カット -paste=ペースト -create-group=グループã®ä½œæˆ -create-authenticator-execution=èªè¨¼ã‚¨ã‚°ã‚¼ã‚­ãƒ¥ãƒ¼ã‚·ãƒ§ãƒ³ã®ä½œæˆ -create-form-action-execution=フォーム・アクション・エグゼキューションã®ä½œæˆ -create-top-level-form=トップレベル・フォームã®ä½œæˆ -flow.alias.tooltip=フローã®è¡¨ç¤ºåを指定ã—ã¾ã™ã€‚ -top-level-flow-type=トップレベル・フロー・タイプ -flow.generic=generic -flow.client=client -top-level-flow-type.tooltip=ã©ã®ç¨®é¡žã®ãƒˆãƒƒãƒ—レベル・フローを作æˆã™ã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚「clientã€ã‚¿ã‚¤ãƒ—ã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆï¼ˆã‚¢ãƒ—リケーション)ã®èªè¨¼ã§ä½¿ç”¨ã—ã¾ã™ã€‚「genericã€ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ä»–ã®ã™ã¹ã¦ã§ä½¿ç”¨ã—ã¾ã™ã€‚ -create-execution-flow=エグゼキューション・フローã®ä½œæˆ -flow-type=フロータイプ -flow.form.type=form -flow.generic.type=generic -flow-type.tooltip=ã©ã®ç¨®é¡žã®ãƒ•ã‚©ãƒ¼ãƒ ã‹ã‚’設定ã—ã¾ã™ã€‚ -form-provider=フォーム・プロãƒã‚¤ãƒ€ãƒ¼ -default-groups.tooltip=æ–°è¦ä½œæˆã¾ãŸã¯ç™»éŒ²ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯è‡ªå‹•çš„ã«ã“れらã®ã‚°ãƒ«ãƒ¼ãƒ—ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚ -select-a-type.placeholder=タイプをé¸æŠžã—ã¦ãã ã•ã„ -available-groups=使用å¯èƒ½ãªã‚°ãƒ«ãƒ¼ãƒ— -available-groups.tooltip=デフォルトã¨ã—ã¦è¿½åŠ ã—ãŸã„グループをé¸æŠžã—ã¦ãã ã•ã„。 -value=値 -table-of-group-members=グループメンãƒãƒ¼ã®ä¸€è¦§è¡¨ -table-of-role-members=ロールメンãƒãƒ¼ã®ä¸€è¦§è¡¨ -last-name=姓 -first-name=å -email=Eメール -toggle-navigation=ナビゲーションã®åˆ‡ã‚Šæ›¿ãˆ -manage-account=アカウントã®ç®¡ç† -sign-out=サインアウト -server-info=サーãƒãƒ¼æƒ…å ± -resource-not-found=リソースãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“... -resource-not-found.instruction=ãŠæŽ¢ã—ã®ãƒªã‚½ãƒ¼ã‚¹ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚入力ã•ã‚ŒãŸURLãŒæ­£ã—ã„ã‹ã”確èªãã ã•ã„。 -go-to-the-home-page=ホームページã¸ç§»å‹• » -page-not-found=ページãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“... -page-not-found.instruction=ãŠæŽ¢ã—ã®ãƒšãƒ¼ã‚¸ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚入力ã•ã‚ŒãŸURLãŒæ­£ã—ã„ã‹ã”確èªãã ã•ã„。 -events.tooltip=ä¿å­˜ã•ã‚ŒãŸãƒ¬ãƒ«ãƒ ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’表示ã—ã¾ã™ã€‚イベントã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«é–¢é€£ã—ãŸã‚¤ãƒ™ãƒ³ãƒˆã€ä¾‹ãˆã°ãƒ­ã‚°ã‚¤ãƒ³ãªã©ã§ã™ã€‚イベントã®ä¿å­˜ã‚’有効ã«ã™ã‚‹ã«ã¯è¨­å®šã¸ç§»å‹•ã—ã¦ãã ã•ã„。 -select-event-types.placeholder=イベントタイプをé¸æŠž... -events-config.tooltip=ユーザーイベントã¨ç®¡ç†ã‚¤ãƒ™ãƒ³ãƒˆã®ä¿å­˜ã‚’有効ã«ã™ã‚‹è¨­å®šã‚ªãƒ—ションを表示ã—ã¾ã™ã€‚ -select-an-action.placeholder=アクションをé¸æŠž... -event-listeners.tooltip=ã©ã®ãƒªã‚¹ãƒŠãƒ¼ãŒãƒ¬ãƒ«ãƒ ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’å—ã‘å–ã‚‹ã‹è¨­å®šã—ã¾ã™ã€‚ -login.save-events.tooltip=有効ã®å ´åˆã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã‚¤ãƒ™ãƒ³ãƒˆãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å­˜ã•ã‚Œã€ç®¡ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã¨ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†ã§ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -clear-events.tooltip=データベース内ã®ã™ã¹ã¦ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚’削除ã—ã¾ã™ã€‚ -events.expiration.tooltip=イベントã®æœ‰åŠ¹æœŸé™ã‚’設定ã—ã¾ã™ã€‚期é™åˆ‡ã‚Œã®ã‚¤ãƒ™ãƒ³ãƒˆã¯ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã‹ã‚‰å®šæœŸçš„ã«å‰Šé™¤ã•ã‚Œã¾ã™ã€‚ -admin-events-settings=管ç†ã‚¤ãƒ™ãƒ³ãƒˆã®è¨­å®š -save-events=イベントã®ä¿å­˜ -admin.save-events.tooltip=有効ã®å ´åˆã¯ã€ç®¡ç†ã‚¤ãƒ™ãƒ³ãƒˆãŒãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å­˜ã•ã‚Œã€ç®¡ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã§ä½¿ç”¨å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ -saved-types.tooltip=ã©ã®ã‚¤ãƒ™ãƒ³ãƒˆã‚¿ã‚¤ãƒ—ãŒä¿å­˜ã•ã‚Œã‚‹ã‹ã‚’設定ã—ã¾ã™ã€‚ -include-representation=Representationã‚’å«ã‚ã‚‹ -include-representation.tooltip=作æˆã¾ãŸã¯æ›´æ–°ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®JSON Representationã‚’å«ã‚ã‚‹ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -clear-admin-events.tooltip=データベース内ã®ã™ã¹ã¦ã®ç®¡ç†ã‚¤ãƒ™ãƒ³ãƒˆã‚’削除ã—ã¾ã™ã€‚ -server-version=サーãƒãƒ¼ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ -server-profile=サーãƒãƒ¼ãƒ»ãƒ—ロファイル -server-disabled=使用ã§ããªã„機能 -server-disabled.tooltip=ç¾åœ¨æœ‰åŠ¹ã«ãªã£ã¦ã„ãªã„機能。一部ã®æ©Ÿèƒ½ã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§ã¯æœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã›ã‚“。ã“ã‚Œã¯ã™ã¹ã¦ã®ãƒ—レビュー機能ã¨å®Ÿé¨“的機能ã«é©ç”¨ã•ã‚Œã¾ã™ã€‚ -server-preview=プレビュー機能 -server-preview.tooltip=プレビュー機能ã¯æœ¬ç•ªç’°å¢ƒã§ã¯ã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ãŠã‚‰ãšã€å°†æ¥å¤§å¹…ã«å¤‰æ›´ã¾ãŸã¯å‰Šé™¤ã•ã‚Œã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ -server-experimental=実験的機能 -server-experimental.tooltip=実験的機能ã¯å®Œå…¨ã«æ©Ÿèƒ½ã—ãªã„å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚本番環境ã§ã¯å®Ÿé¨“的機能を使用ã—ãªã„ã§ãã ã•ã„。 -info=情報 -providers=プロãƒã‚¤ãƒ€ãƒ¼ -server-time=サーãƒãƒ¼ã®æ™‚刻 -server-uptime=サーãƒãƒ¼ã®ç¨¼åƒæ™‚é–“ -profile=プロファイル -memory=メモリー -total-memory=メモリーã®ç·å®¹é‡ -free-memory=空ãメモリー -used-memory=使用メモリー -system=システム -current-working-directory=ç¾åœ¨ã®ä½œæ¥­ãƒ‡ã‚£ãƒ¬ã‚¯ãƒˆãƒªãƒ¼ -java-version=Javaãƒãƒ¼ã‚¸ãƒ§ãƒ³ -java-vendor=Javaベンダー -java-runtime=Javaランタイム -java-vm=Java VM -java-vm-version=Java VMãƒãƒ¼ã‚¸ãƒ§ãƒ³ -java-home=Javaホーム -user-name=ユーザーå -user-timezone=ユーザー・タイムゾーン -user-locale=ユーザーロケール -system-encoding=システム・エンコーディング -operating-system=オペレーティング・システム -os-architecture=OSアーキテクãƒãƒ£ãƒ¼ -spi=SPI -granted-client-scopes=付与ã•ã‚ŒãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ— -additional-grants=追加ã®è¨±å¯ -consent-created-date=作æˆæ—¥ -consent-last-updated-date=最終更新日 -revoke=無効化 -new-password=æ–°ã—ã„パスワード -password-confirmation=æ–°ã—ã„パスワード(確èªï¼‰ -reset-password=パスワードをリセット -set-password=パスワードを設定 -credentials.temporary.tooltip=有効ã®å ´åˆã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ¬¡ã®ãƒ­ã‚°ã‚¤ãƒ³æ™‚ã«ãƒ‘スワードã®å¤‰æ›´ãŒå¿…è¦ã¨ãªã‚Šã¾ã™ã€‚ -remove-totp=OTPã®å‰Šé™¤ -credentials.remove-totp.tooltip=ユーザーã®ãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ãƒ»ãƒ‘スワード・ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’削除ã—ã¾ã™ã€‚ -reset-actions=リセット・アクション -credentials.reset-actions.tooltip=ユーザーã«ãƒªã‚»ãƒƒãƒˆãƒ»ã‚¢ã‚¯ã‚·ãƒ§ãƒ³Eメールをé€ä¿¡ã™ã‚‹ã¨ãã«å®Ÿè¡Œã™ã‚‹ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã®ã‚»ãƒƒãƒˆã€‚「Verify Emailã€ã¯ã€Eメールアドレスを確èªã™ã‚‹ãŸã‚ã®Eメールをユーザーã«é€ä¿¡ã—ã¾ã™ã€‚「Update Profileã€ã¯ã€æ–°ã—ã„個人情報を入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「Update Passwordã€ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ–°ã—ã„パスワードを入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「Configure OTPã€ã¯ã€ãƒ¢ãƒã‚¤ãƒ«ãƒ»ãƒ‘スワード・ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã®è¨­å®šãŒå¿…è¦ã§ã™ã€‚ -reset-actions-email=リセット・アクションEメール -send-email=Eメールをé€ä¿¡ -credentials.reset-actions-email.tooltip=リンクを記載ã—ãŸEメールをユーザーã«é€ä¿¡ã—ã¾ã™ã€‚リンクをクリックã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æœ€åˆã«ãƒ­ã‚°ã‚¤ãƒ³ã›ãšã«ãƒªã‚»ãƒƒãƒˆãƒ»ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã§ãã¾ã™ã€‚ãŸã¨ãˆã°ã€ã€ŒUpdate Passwordã€ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’設定ã—ã¦ã“ã®ãƒœã‚¿ãƒ³ã‚’クリックã™ã‚‹ã¨ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒ­ã‚°ã‚¤ãƒ³ã›ãšã«ãƒ‘スワードを変更ã§ãã¾ã™ã€‚ -add-user=ユーザーã®è¿½åŠ  -created-at=作æˆæ—¥ -user-enabled=ユーザーã®æœ‰åŠ¹ -user-enabled.tooltip=無効ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“。 -user-temporarily-locked=ユーザーã®ä¸€æ™‚çš„ãªãƒ­ãƒƒã‚¯ -user-temporarily-locked.tooltip=ユーザーã¯ã€ãƒ­ã‚°ã‚¤ãƒ³ã«è¤‡æ•°å›žå¤±æ•—ã—ãŸãŸã‚ã€ãƒ­ãƒƒã‚¯ã•ã‚Œã¦ã„ã‚‹å¯èƒ½æ€§ãŒã‚ã‚Šã¾ã™ã€‚ -unlock-user=ユーザーをアンロック -federation-link=フェデレーション・リンク -email-verified=EメールãŒç¢ºèªæ¸ˆã¿ -email-verified.tooltip=ユーザーã®EメールãŒç¢ºèªæ¸ˆã¿ã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚ -required-user-actions=å¿…è¦ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ -required-user-actions.tooltip=ユーザーãŒãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã¨ãã«å¿…è¦ãªã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã§ã™ã€‚「Verify emailã€ã¯ã€Eメールアドレスを確èªã™ã‚‹ãŸã‚ã®Eメールをユーザーã«é€ä¿¡ã—ã¾ã™ã€‚「Update profileã€ã¯ã€æ–°ã—ã„個人情報を入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「Update passwordã€ã¯ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒæ–°ã—ã„パスワードを入力ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚「Configure OTPã€ã¯ã€ãƒ¢ãƒã‚¤ãƒ«ãƒ»ãƒ‘スワード・ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã®è¨­å®šãŒå¿…è¦ã§ã™ã€‚ -locale=ロケール -select-one.placeholder=1ã¤é¸æŠž... -impersonate=代ç†ãƒ­ã‚°ã‚¤ãƒ³ -impersonate-user=ユーザーã®ä»£ç† -impersonate-user.tooltip=ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚åŒã˜ãƒ¬ãƒ«ãƒ å†…ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®å ´åˆã¯ã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹å‰ã«ã€ç¾åœ¨ã®ãƒ­ã‚°ã‚¤ãƒ³ãƒ»ã‚»ãƒƒã‚·ãƒ§ãƒ³ãŒãƒ­ã‚°ã‚¢ã‚¦ãƒˆã•ã‚Œã¾ã™ã€‚ -identity-provider-alias=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ -provider-user-id=プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ID -provider-username=プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼å -no-identity-provider-links-available=使用å¯èƒ½ãªã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®ãƒªãƒ³ã‚¯ã¯ã‚ã‚Šã¾ã›ã‚“ -group-membership=グループ・メンãƒãƒ¼ã‚·ãƒƒãƒ— -leave=外㙠-group-membership.tooltip=メンãƒãƒ¼ã§ã‚るグループã§ã™ã€‚グループã‹ã‚‰å¤–ã™ã«ã¯ã€ã‚°ãƒ«ãƒ¼ãƒ—ã‚’é¸æŠžã—ã¦ã€Œå¤–ã™ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。 -membership.available-groups.tooltip=ユーザーãŒå‚加å¯èƒ½ãªã‚°ãƒ«ãƒ¼ãƒ—ã§ã™ã€‚グループをé¸æŠžã—ã¦ã€Œå‚加ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。 -table-of-realm-users=レルムユーザーã®ä¸€è¦§è¡¨ -view-all-users=ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å‚ç…§ -view-all-groups=ã™ã¹ã¦ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å‚ç…§ -view-all-rolesã™ã¹ã¦ã®ãƒ­ãƒ¼ãƒ«ã‚’å‚ç…§ -unlock-users=ユーザーã®ã‚¢ãƒ³ãƒ­ãƒƒã‚¯ -no-users-available=使用å¯èƒ½ãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã„ã¾ã›ã‚“ -users.instruction=検索を入力ã™ã‚‹ã‹ã€ã€Œã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å‚ç…§ã€ã‚’クリックã—ã¦ãã ã•ã„ -clients.instruction=検索を入力ã—ã¦ãã ã•ã„ -consents=åŒæ„ -started=開始 -logout-all-sessions=ã™ã¹ã¦ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã‚’ログアウト -logout=ログアウト -new-name=æ–°ã—ã„åå‰ -ok=OK -attributes=属性 -role-mappings=ロールマッピング -members=メンãƒãƒ¼ -details=詳細 -identity-provider-links=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ãƒªãƒ³ã‚¯ -register-required-action=必須アクションã®ç™»éŒ² -gender=性別 -address=ä½æ‰€ -phone=é›»è©±ç•ªå· -profile-url=プロファイルURL -picture-url=ç”»åƒURL -website=Webサイト -import-keys-and-cert=éµã¨è¨¼æ˜Žæ›¸ã‚’インãƒãƒ¼ãƒˆ -import-keys-and-cert.tooltip=クライアントã®éµãƒšã‚¢ã¨è¨¼æ˜Žæ›¸ã‚’アップロードã—ã¾ã™ã€‚ -upload-keys=éµã‚’アップロード -download-keys-and-cert=éµã¨è¨¼æ˜Žæ›¸ã‚’ダウンロード -no-value-assigned.placeholder=アサイン済ã¿ã®å€¤ã¯ã‚ã‚Šã¾ã›ã‚“ -remove=削除 -no-group-members=グループメンãƒãƒ¼ã¯ã„ã¾ã›ã‚“ -no-role-members=ロールメンãƒãƒ¼ã¯ã„ã¾ã›ã‚“ -temporary=一時的 -join=å‚加 -event-type=イベントタイプ -events-config=イベント設定 -event-listeners=イベントリスナー -login-events-settings=ログインイベントã®è¨­å®š -clear-events=イベントã®ã‚¯ãƒªã‚¢ -saved-types=ä¿å­˜ã‚¿ã‚¤ãƒ— -clear-admin-events=管ç†ã‚¤ãƒ™ãƒ³ãƒˆã®ã‚¯ãƒªã‚¢ -clear-changes=変更をクリア -error=エラー -# Authz -# Authz Common -authz-authorization=èªå¯ -authz-owner=オーナー -authz-uri=URI -authz-uris=URI -authz-scopes=スコープ -authz-resource=リソース -authz-resource-type=リソースタイプ -authz-resources=リソース -authz-scope=スコープ -authz-authz-scopes=èªå¯ã‚¹ã‚³ãƒ¼ãƒ— -authz-policies=ãƒãƒªã‚·ãƒ¼ -authz-policy=ãƒãƒªã‚·ãƒ¼ -authz-permissions=パーミッション -authz-users=ロールã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ -authz-evaluate=評価 -authz-icon-uri=アイコンURI -authz-icon-uri.tooltip=アイコンを指ã™URIを設定ã—ã¾ã™ã€‚ -authz-select-scope=スコープをé¸æŠž -authz-select-resource=リソースをé¸æŠž -authz-associated-policies=関連ãƒãƒªã‚·ãƒ¼ -authz-any-resource=ä»»æ„ã®ãƒªã‚½ãƒ¼ã‚¹ -authz-any-scope=ä»»æ„ã®ã‚¹ã‚³ãƒ¼ãƒ— -authz-any-role=ä»»æ„ã®ãƒ­ãƒ¼ãƒ« -authz-policy-evaluation=ãƒãƒªã‚·ãƒ¼è©•ä¾¡ -authz-select-user=ユーザーをé¸æŠž -authz-select-client=クライアントをé¸æŠž -authz-entitlements=エンタイトルメント -authz-no-resources=リソースã¯ã‚ã‚Šã¾ã›ã‚“ -authz-result=çµæžœ -authz-authorization-services-enabled=èªå¯ã®æœ‰åŠ¹ -authz-authorization-services-enabled.tooltip=ãã‚ç´°ã‹ã„èªå¯ã®ã‚µãƒãƒ¼ãƒˆã‚’有効/無効ã«ã—ã¾ã™ã€‚ -authz-required=å¿…é ˆ -authz-show-details=詳細を表示ã™ã‚‹ -authz-hide-details=詳細をéžè¡¨ç¤ºã«ã™ã‚‹ -authz-associated-permissions=関連付ã‘られãŸãƒ‘ーミッション -authz-no-permission-associated=パーミッションãŒé–¢é€£ä»˜ã‘られã¦ã„ã¾ã›ã‚“ -# Authz Settings -authz-import-config.tooltip=リソースサーãƒãƒ¼ã®èªå¯è¨­å®šã‚’å«ã‚€JSONファイルをインãƒãƒ¼ãƒˆã—ã¾ã™ã€‚ -authz-policy-enforcement-mode=ãƒãƒªã‚·ãƒ¼æ–½è¡Œãƒ¢ãƒ¼ãƒ‰ -authz-policy-enforcement-mode.tooltip=ãƒãƒªã‚·ãƒ¼æ–½è¡Œãƒ¢ãƒ¼ãƒ‰ã¯ã€èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’評価ã™ã‚‹éš›ã«é©ç”¨ã•ã‚Œã‚‹æ–¹æ³•ã‚’決定ã—ã¾ã™ã€‚「Enforcingã€ã¯ã€ä¸Žãˆã‚‰ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ã«é–¢é€£ã™ã‚‹ãƒãƒªã‚·ãƒ¼ãŒå­˜åœ¨ã—ãªã„å ´åˆã§ã‚‚ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã§æ‹’å¦ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Permissiveã€ã¯ã€ä¸Žãˆã‚‰ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ã«é–¢é€£ã™ã‚‹ãƒãƒªã‚·ãƒ¼ãŒå­˜åœ¨ã—ãªã„å ´åˆã§ã‚‚ã€ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯è¨±å¯ã•ã‚Œã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Disabledã€ã¯ã€å®Œå…¨ã«ãƒãƒªã‚·ãƒ¼ã®è©•ä¾¡ã‚’無効ã«ã—ã€ä»»æ„ã®ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã—ã¾ã™ã€‚ -authz-policy-enforcement-mode-enforcing=実施 -authz-policy-enforcement-mode-permissive=許容 -authz-policy-enforcement-mode-disabled=無効 -authz-remote-resource-management=ãƒªãƒ¢ãƒ¼ãƒˆãƒªã‚½ãƒ¼ã‚¹ç®¡ç† -authz-remote-resource-management.tooltip=リソースã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã«ã‚ˆã‚Šãƒªãƒ¢ãƒ¼ãƒˆã§ç®¡ç†ã™ã¹ãã‹ã©ã†ã‹ã‚’設定ã—ã¾ã™ã€‚オフã®å ´åˆã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã¯ã“ã®ç®¡ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ã ã‘ã§ç®¡ç†ã•ã‚Œã¾ã™ã€‚ -authz-export-settings=エクスãƒãƒ¼ãƒˆè¨­å®š -authz-export-settings.tooltip=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã‚µãƒ¼ãƒãƒ¼ã®ã™ã¹ã¦ã®èªå¯è¨­å®šã‚’エクスãƒãƒ¼ãƒˆã—ダウンロードã—ã¾ã™ã€‚ -authz-server-decision-strategy.tooltip=決定戦略ã¯ã€ãƒ‘ーミッションã®è©•ä¾¡æ–¹æ³•ã¨æœ€çµ‚çš„ãªåˆ¤å®šã®å–得方法を決定ã—ã¾ã™ã€‚「Affirmativeã€ã¨ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ãŠã‚ˆã³ãã®ã‚¹ã‚³ãƒ¼ãƒ—ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’許å¯ã™ã‚‹ãŸã‚ã«ã€å°‘ãªãã¨ã‚‚1ã¤ã®ãƒ‘ーミッションãŒè‚¯å®šçš„ãªåˆ¤å®šã«è©•ä¾¡ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Unanimousã€ã¨ã¯ã€æœ€çµ‚çš„ãªåˆ¤å®šã‚‚肯定的ã§ã‚ã‚‹ãŸã‚ã«ã€ã™ã¹ã¦ã®ãƒ‘ーミッションãŒè‚¯å®šçš„ãªåˆ¤å®šã«è©•ä¾¡ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚‹ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚ -# Authz Resource List -authz-no-resources-available=使用å¯èƒ½ãªãƒªã‚½ãƒ¼ã‚¹ã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-no-scopes-assigned=アサイン済ã¿ã®ã‚¹ã‚³ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-no-type-defined=定義ã•ã‚ŒãŸã‚¿ã‚¤ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-no-uri-defined=URIãŒå®šç¾©ã•ã‚Œã¦ã„ã¾ã›ã‚“。 -authz-no-permission-assigned=アサイン済ã¿ã®ãƒ‘ーミッションã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-no-policy-assigned=アサイン済ã¿ã®ãƒãƒªã‚·ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-create-permission=ãƒ‘ãƒ¼ãƒŸãƒƒã‚·ãƒ§ãƒ³ã‚’ä½œæˆ -# Authz Resource Detail -authz-add-resource=リソースã®è¿½åŠ  -authz-resource-name.tooltip=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã®ä¸€æ„ãªåå‰ã€‚ã“ã®åå‰ã¯ã€ãƒªã‚½ãƒ¼ã‚¹ã‚’一æ„ã«è­˜åˆ¥ã™ã‚‹ãŸã‚ã«ä½¿ç”¨ã§ãã€ç‰¹å®šã®ãƒªã‚½ãƒ¼ã‚¹ã‚’照会ã™ã‚‹ã¨ãã«ä¾¿åˆ©ã§ã™ã€‚ -authz-resource-owner.tooltip=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã®ã‚ªãƒ¼ãƒŠãƒ¼ã§ã™ã€‚ -authz-resource-type.tooltip=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã®ã‚¿ã‚¤ãƒ—を設定ã—ã¾ã™ã€‚ç•°ãªã‚‹ãƒªã‚½ãƒ¼ã‚¹ãƒ»ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’åŒã˜ã‚¿ã‚¤ãƒ—ã«ã‚°ãƒ«ãƒ¼ãƒ”ングã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -authz-resource-uri.tooltip=リソースã«ã‚ˆã£ã¦ä¿è­·ã•ã‚Œã¦ã„ã‚‹URIã®ã‚»ãƒƒãƒˆã€‚ -authz-resource-scopes.tooltip=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã«é–¢é€£ä»˜ã‘るスコープを設定ã—ã¾ã™ã€‚ -authz-resource-attributes=リソース属性 -authz-resource-attributes.tooltip=リソースã«é–¢é€£ä»˜ã‘られãŸå±žæ€§ã€‚ -authz-resource-user-managed-access-enabled=User-Managed Accessã®æœ‰åŠ¹ -authz-resource-user-managed-access-enabled.tooltip=有効ã«ã™ã‚‹ã¨ã€ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’リソースオーナーãŒç®¡ç†ã§ãã¾ã™ã€‚ - -# Authz Scope List -authz-add-scope=スコープã®è¿½åŠ  -authz-no-scopes-available=使用å¯èƒ½ãªã‚¹ã‚³ãƒ¼ãƒ—ã¯ã‚ã‚Šã¾ã›ã‚“。 -# Authz Scope Detail -authz-scope-name.tooltip=ã“ã®ã‚¹ã‚³ãƒ¼ãƒ—ã®ãƒ¦ãƒ‹ãƒ¼ã‚¯ãªåå‰ã‚’設定ã—ã¾ã™ã€‚åå‰ã¯ã‚¹ã‚³ãƒ¼ãƒ—ã®ä¸€æ„ãªè­˜åˆ¥ã«ä½¿ç”¨ã•ã‚Œã€ç‰¹å®šã®ã‚¹ã‚³ãƒ¼ãƒ—を照会ã™ã‚‹éš›ã«ä½¿ç”¨ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -# Authz Policy List -authz-all-types=ã™ã¹ã¦ã®ã‚¿ã‚¤ãƒ— -authz-create-policy=ãƒãƒªã‚·ãƒ¼ã‚’ä½œæˆ -authz-no-policies-available=使用å¯èƒ½ãªãƒãƒªã‚·ãƒ¼ã¯ã‚ã‚Šã¾ã›ã‚“。 -# Authz Policy Detail -authz-policy-name.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã®åå‰ã‚’設定ã—ã¾ã™ã€‚ -authz-policy-description.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã®èª¬æ˜Žã‚’設定ã—ã¾ã™ã€‚ -authz-policy-logic=ロジック -authz-policy-logic-positive=Positive -authz-policy-logic-negative=Negative -authz-policy-logic.tooltip=ロジックã¯ã€ãƒãƒªã‚·ãƒ¼ã®åˆ¤å®šæ–¹æ³•ã‚’決定ã—ã¾ã™ã€‚「Positiveã€ã®å ´åˆã¯ã€ã“ã®ãƒãƒªã‚·ãƒ¼ã®è©•ä¾¡ä¸­ã«å¾—られãŸçµæžœï¼ˆè¨±å¯ã¾ãŸã¯æ‹’å¦ï¼‰ãŒåˆ¤å®šã®å®Ÿè¡Œã«ä½¿ç”¨ã•ã‚Œã¾ã™ã€‚「Negativeã€ã®å ´åˆã¯ã€çµæžœã¯å転ã•ã‚Œã¾ã™ã€‚ã¤ã¾ã‚Šã€è¨±å¯ã¯æ‹’å¦ã«ãªã‚Šã€æ‹’å¦ã¯è¨±å¯ã«ãªã‚Šã¾ã™ã€‚ -authz-policy-apply-policy=ãƒãƒªã‚·ãƒ¼ã®é©ç”¨ -authz-policy-apply-policy.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã‚„パーミッションã§å®šç¾©ã•ã‚ŒãŸã‚¹ã‚³ãƒ¼ãƒ—ã«é©ç”¨ã™ã‚‹ã™ã¹ã¦ã®ãƒãƒªã‚·ãƒ¼ã‚’設定ã—ã¾ã™ã€‚ -authz-policy-decision-strategy=決定戦略 -authz-policy-decision-strategy.tooltip=決定戦略ã¯ã€ãƒãƒªã‚·ãƒ¼ã®è©•ä¾¡æ–¹æ³•ã¨æœ€çµ‚çš„ãªåˆ¤å®šæ–¹æ³•ã‚’決定ã—ã¾ã™ã€‚「Affirmativeã€ã¯ã€æœ€çµ‚判定ãŒpositiveã¨ãªã‚‹ãŸã‚ã«ã¯ã€å°‘ãªãã¨ã‚‚1ã¤ã®ãƒãƒªã‚·ãƒ¼ãŒpositiveã¨è©•ä¾¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¨ã„ã†ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Unanimousã€ã¯ã€å…¨ä½“ã®åˆ¤å®šãŒpositiveã¨ãªã‚‹ãŸã‚ã«ã¯ã€ã™ã¹ã¦ã®ãƒãƒªã‚·ãƒ¼ãŒpositiveã¨è©•ä¾¡ã™ã‚‹å¿…è¦ãŒã‚ã‚‹ã€ã¨ã„ã†ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚「Consensusã€ã¯ã€positiveã®æ•°ãŒnegativeã®æ•°ã‚ˆã‚Šå¤šããªã‘ã‚Œã°ãªã‚‰ãªã„ã“ã¨ã‚’æ„味ã—ã¾ã™ã€‚positiveã¨negativeã®æ•°ãŒåŒã˜å ´åˆã¯ã€æœ€çµ‚çš„ãªåˆ¤å®šã¯negativeã«ãªã‚Šã¾ã™ã€‚ -authz-policy-decision-strategy-affirmative=Affirmative -authz-policy-decision-strategy-unanimous=Unanimous -authz-policy-decision-strategy-consensus=Consensus -authz-select-a-policy=既存ã®ãƒãƒªã‚·ãƒ¼ã‚’é¸æŠžã™ã‚‹ -authz-no-policies-assigned=ãƒãƒªã‚·ãƒ¼ãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。 -# Authz Role Policy Detail -authz-add-role-policy=ロールãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -authz-no-roles-assigned=アサイン済ã¿ã®ãƒ­ãƒ¼ãƒ«ã¯ã‚ã‚Šã¾ã›ã‚“。 -authz-policy-role-realm-roles.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã§è¨±å¯ã•ã‚Œã‚‹ãƒ¬ãƒ«ãƒ ãƒ­ãƒ¼ãƒ«ã‚’指定ã—ã¦ãã ã•ã„。 -authz-policy-role-clients.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã«é©ç”¨ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã‚’フィルタリングã™ã‚‹ãŸã‚ã«ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。 -authz-policy-role-client-roles.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã§è¨±å¯ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ãƒ­ãƒ¼ãƒ«ã‚’指定ã—ã¦ãã ã•ã„。 -# Authz User Policy Detail -authz-add-user-policy=ユーザーãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -authz-no-users-assigned=アサイン済ã¿ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã„ã¾ã›ã‚“。 -authz-policy-user-users.tooltip=ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã“ã®ãƒãƒªã‚·ãƒ¼ã§è¨±å¯ã•ã‚Œã‚‹ã‹æŒ‡å®šã—ã¦ãã ã•ã„。 -# Authz Client Policy Detail -authz-add-client-policy=クライアント・ãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -authz-no-clients-assigned=クライアントãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。 -authz-policy-client-clients.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã§è¨±å¯ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’指定ã—ã¾ã™ã€‚ -# Authz Time Policy Detail -authz-add-time-policy=タイムãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -authz-policy-time-not-before.tooltip=ãƒãƒªã‚·ãƒ¼ã‚’許å¯ã—ãªã„日時を定義ã—ã¾ã™ã€‚ç¾åœ¨æ—¥æ™‚ãŒã“ã®å€¤ã‚ˆã‚Šå¾Œã‹ã€ç­‰ã—ã„å ´åˆã«ã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-not-on-after=ã“ã®æ—¥æ™‚より後 -authz-policy-time-not-on-after.tooltip=ãƒãƒªã‚·ãƒ¼ã‚’許å¯ã—ãªã„日時を定義ã—ã¾ã™ã€‚ç¾åœ¨æ—¥æ™‚ãŒã“ã®å€¤ã‚ˆã‚Šå‰ã‹ã€ç­‰ã—ã„å ´åˆã«ã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-day-month=æ—¥ -authz-policy-time-day-month.tooltip=ãƒãƒªã‚·ãƒ¼ãŒè¨±å¯ã•ã‚Œã‚‹æ—¥ã‚’定義ã—ã¾ã™ã€‚2番目ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã—ã¦ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ç¾åœ¨ã®æ—¥ãŒæŒ‡å®šã—ãŸ2ã¤ã®å€¤ã®é–“ã«ã‚ã‚‹ã‹ã€ç­‰ã—ã„å ´åˆã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-month=月 -authz-policy-time-month.tooltip=ãƒãƒªã‚·ãƒ¼ãŒè¨±å¯ã•ã‚Œã‚‹æœˆã‚’定義ã—ã¾ã™ã€‚2番目ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã—ã¦ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ç¾åœ¨ã®æœˆãŒæŒ‡å®šã—ãŸ2ã¤ã®å€¤ã®é–“ã«ã‚ã‚‹ã‹ã€ç­‰ã—ã„å ´åˆã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-year=å¹´ -authz-policy-time-year.tooltip=ãƒãƒªã‚·ãƒ¼ãŒè¨±å¯ã•ã‚Œã‚‹å¹´ã‚’定義ã—ã¾ã™ã€‚2番目ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã—ã¦ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ç¾åœ¨ã®å¹´ãŒæŒ‡å®šã—ãŸ2ã¤ã®å€¤ã®é–“ã«ã‚ã‚‹ã‹ã€ç­‰ã—ã„å ´åˆã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-hour=時 -authz-policy-time-hour.tooltip=ãƒãƒªã‚·ãƒ¼ãŒè¨±å¯ã•ã‚Œã‚‹æ™‚を定義ã—ã¾ã™ã€‚2番目ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã—ã¦ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ç¾åœ¨ã®æ™‚ãŒæŒ‡å®šã—ãŸ2ã¤ã®å€¤ã®é–“ã«ã‚ã‚‹ã‹ã€ç­‰ã—ã„å ´åˆã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -authz-policy-time-minute=分 -authz-policy-time-minute.tooltip=ãƒãƒªã‚·ãƒ¼ãŒè¨±å¯ã•ã‚Œã‚‹åˆ†ã‚’定義ã—ã¾ã™ã€‚2番目ã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã«å€¤ã‚’入力ã—ã¦ç¯„囲を指定ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ã“ã®å ´åˆã€ç¾åœ¨ã®åˆ†ãŒæŒ‡å®šã—ãŸ2ã¤ã®å€¤ã®é–“ã«ã‚ã‚‹ã‹ã€ç­‰ã—ã„å ´åˆã®ã¿è¨±å¯ã•ã‚Œã¾ã™ã€‚ -# Authz JS Policy Detail -authz-add-js-policy=JavaScriptãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -authz-policy-js-code=コード -authz-policy-js-code.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã«å¯¾ã™ã‚‹æ¡ä»¶ã‚’æä¾›ã™ã‚‹JavaScriptコード。 -# Authz Aggregated Policy Detail -authz-aggregated=集約 -authz-add-aggregated-policy=集約ãƒãƒªã‚·ãƒ¼ã®è¿½åŠ  -# Authz Group Policy Detail -authz-add-group-policy=グループãƒãƒªã‚·ãƒ¼ã‚’追加ã™ã‚‹ -authz-no-groups-assigned=グループãŒå‰²ã‚Šå½“ã¦ã‚‰ã‚Œã¦ã„ã¾ã›ã‚“。 -authz-policy-group-claim=グループクレーム -authz-policy-group-claim.tooltip=定義ã•ã‚Œã¦ã„ã‚‹å ´åˆã€ãƒãƒªã‚·ãƒ¼ã¯ã€ãƒ‘ーミッションをè¦æ±‚ã™ã‚‹ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã‚’表ã™ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ã¾ãŸã¯IDトークン内ã®ç‰¹å®šã®ã‚¯ãƒ¬ãƒ¼ãƒ ã‹ã‚‰ã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å–å¾—ã—ã¾ã™ã€‚定義ã•ã‚Œã¦ã„ãªã„å ´åˆã€ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¯ãƒ¬ãƒ«ãƒ è¨­å®šã‹ã‚‰å–å¾—ã•ã‚Œã¾ã™ã€‚ -authz-policy-group-groups.tooltip=ã“ã®ãƒãƒªã‚·ãƒ¼ã§è¨±å¯ã•ã‚Œã‚‹ã‚°ãƒ«ãƒ¼ãƒ—を指定ã—ã¾ã™ã€‚ - -# Authz Permission List -authz-no-permissions-available=使用å¯èƒ½ãªãƒ‘ーミッションã¯ã‚ã‚Šã¾ã›ã‚“。 - -# Authz Permission Detail -authz-permission-name.tooltip=ã“ã®ãƒ‘ーミッションã®åå‰ã‚’設定ã—ã¾ã™ã€‚ -authz-permission-description.tooltip=ã“ã®ãƒ‘ーミッションã®èª¬æ˜Žã‚’設定ã—ã¾ã™ã€‚ - -# Authz Resource Permission Detail -authz-add-resource-permission=リソースパーミッションã®è¿½åŠ  -authz-permission-resource-apply-to-resource-type=リソースタイプã«é©ç”¨ -authz-permission-resource-apply-to-resource-type.tooltip=ã“ã®ãƒ‘ーミッションãŒã€ç‰¹å®šã‚¿ã‚¤ãƒ—ã®å…¨ãƒªã‚½ãƒ¼ã‚¹ã«é©ç”¨ã•ã‚Œã‚‹ã¹ãã‹ã©ã†ã‹ã‚’指定ã—ã¾ã™ã€‚ã“ã®å ´åˆã€ãƒ‘ーミッションã¯ç‰¹å®šãƒªã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—ã®å…¨ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã«å¯¾ã—ã¦è©•ä¾¡ã•ã‚Œã¾ã™ã€‚ -authz-permission-resource-resource.tooltip=ã“ã®ãƒ‘ーミッションãŒé©ç”¨ã•ã‚Œã‚‹ãƒªã‚½ãƒ¼ã‚¹ãƒ»ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’指定ã—ã¾ã™ã€‚ -authz-permission-resource-type.tooltip=ã“ã®ãƒ‘ーミッションãŒé©ç”¨ã•ã‚Œã‚‹ãƒªã‚½ãƒ¼ã‚¹ã‚¿ã‚¤ãƒ—を指定ã—ã¾ã™ã€‚ - -# Authz Scope Permission Detail -authz-add-scope-permission=スコープパーミッションã®è¿½åŠ  -authz-permission-scope-resource.tooltip=é¸æŠžã•ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ã«é–¢é€£ã™ã‚‹ã‚¹ã‚³ãƒ¼ãƒ—ã«åˆ¶é™ã—ã¾ã™ã€‚é¸æŠžã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ã™ã¹ã¦ã®ã‚¹ã‚³ãƒ¼ãƒ—ãŒä½¿ç”¨å¯èƒ½ã«ãªã‚Šã¾ã™ã€‚ -authz-permission-scope-scope.tooltip=ã“ã®ãƒ‘ーミッションã¯1ã¤ã¾ãŸã¯è¤‡æ•°ã®ã‚¹ã‚³ãƒ¼ãƒ—ã«é©ç”¨ã•ã‚Œã‚‹ã‚ˆã†ã«æŒ‡å®šã—ã¦ãã ã•ã„。 - -# Authz Evaluation -authz-evaluation-identity-information=アイデンティティー情報 -authz-evaluation-identity-information.tooltip=ãƒãƒªã‚·ãƒ¼ã®è©•ä¾¡ã®éš›ã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼æƒ…å ±ã®è¨­å®šã‚ªãƒ—ションã§ã™ã€‚ -authz-evaluation-client.tooltip=èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’作æˆã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’é¸æŠžã—ã¦ãã ã•ã„。æä¾›ã•ã‚Œãªã„å ´åˆã¯ã€èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã¯ä»Šã„るページã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã§è¡Œã‚れるã“ã¨ã«ãªã‚Šã¾ã™ã€‚ -authz-evaluation-user.tooltip=サーãƒãƒ¼ã‹ã‚‰ãƒ‘ーミッションを検索ã™ã‚‹ãŸã‚ã«IDãŒä½¿ç”¨ã•ã‚Œã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’é¸æŠžã—ã¾ã™ã€‚ -authz-evaluation-role.tooltip=é¸æŠžã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã«é–¢é€£ä»˜ã‘ãŸã„ロールをé¸æŠžã—ã¦ãã ã•ã„。 -authz-evaluation-new=æ–°è¦ã«è©•ä¾¡ -authz-evaluation-re-evaluate=å†è©•ä¾¡ -authz-evaluation-previous=å‰ã®è©•ä¾¡ -authz-evaluation-contextual-info=コンテキスト情報 -authz-evaluation-contextual-info.tooltip=ãƒãƒªã‚·ãƒ¼ã®è©•ä¾¡ã®éš›ã«ä½¿ç”¨ã•ã‚Œã‚‹ã‚³ãƒ³ãƒ†ã‚­ã‚¹ãƒˆæƒ…å ±ã®è¨­å®šã‚ªãƒ—ションã§ã™ã€‚ -authz-evaluation-contextual-attributes=コンテキスト属性 -authz-evaluation-contextual-attributes.tooltip=実行環境や実行コンテキストã«ã‚ˆã£ã¦æä¾›ã•ã‚Œã‚‹ä»»æ„ã®å±žæ€§ã‚’設定ã—ã¾ã™ã€‚ -authz-evaluation-permissions.tooltip=ãƒãƒªã‚·ãƒ¼ãŒé©ç”¨ã•ã‚Œã‚‹ã‚ˆã†ã«ãƒ‘ーミッションを設定ã™ã‚‹ã‚ªãƒ—ションã§ã™ã€‚ -authz-evaluation-evaluate=評価 -authz-evaluation-any-resource-with-scopes=スコープをæŒã¤ä»»æ„ã®ãƒªã‚½ãƒ¼ã‚¹ -authz-evaluation-no-result=èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‹ã‚‰çµæžœã‚’å¾—ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚æä¾›ã•ã‚ŒãŸãƒªã‚½ãƒ¼ã‚¹ã¾ãŸã¯ã‚¹ã‚³ãƒ¼ãƒ—ãŒã€ãƒãƒªã‚·ãƒ¼ã¨é–¢é€£ä»˜ã‘られã¦ã„ã‚‹ã‹ã©ã†ã‹ã‚’確èªã—ã¦ãã ã•ã„。 -authz-evaluation-no-policies-resource=ã“ã®ãƒªã‚½ãƒ¼ã‚¹ã®ãƒãƒªã‚·ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ -authz-evaluation-result.tooltip=ã“ã®ãƒ‘ーミッションã®è¦æ±‚ã®å…¨ä½“çš„ãªçµæžœã§ã™ã€‚ -authz-evaluation-scopes.tooltip=許å¯ã•ã‚ŒãŸã‚¹ã‚³ãƒ¼ãƒ—リストã§ã™ã€‚ -authz-evaluation-policies.tooltip=ã©ã®ãƒãƒªã‚·ãƒ¼ãŒè©•ä¾¡ã•ã‚Œåˆ¤å®šã•ã‚ŒãŸã‹è©³ç´°ã‚’表示ã—ã¦ã„ã¾ã™ã€‚ -authz-evaluation-authorization-data=レスãƒãƒ³ã‚¹ -authz-evaluation-authorization-data.tooltip=èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã®å‡¦ç†ã®çµæžœã¨ã—ã¦é€ä¿¡ã•ã‚ŒãŸèªå¯ãƒ‡ãƒ¼ã‚¿ã®ãƒˆãƒ¼ã‚¯ãƒ³ã‚’表示ã—ã¾ã™ã€‚ã“ã‚Œã¯ã€è¨±å¯ã‚’求ã‚ãŸã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«å¯¾ã—ã¦KeycloakãŒç™ºè¡Œã™ã‚‹åŸºæœ¬çš„ãªã‚‚ã®ã§ã™ã€‚ç¾åœ¨ã®èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ä»˜ä¸Žã•ã‚ŒãŸãƒ‘ーミッションã«ã¤ã„ã¦ã¯ã€Œauthorizationã€ã‚¯ãƒ¬ãƒ¼ãƒ ã‚’確èªã—ã¦ãã ã•ã„。 -authz-show-authorization-data=èªå¯ãƒ‡ãƒ¼ã‚¿ã‚’表示 - -keys=éµ -status=ステータス -keystore=キーストア -keystores=キーストア -add-keystore=キーストアã®è¿½åŠ  -add-keystore.placeholder=キーストアã®è¿½åŠ ... -view=ビュー -active=アクティブ -passive=å—å‹•çš„ -disabled=無効 -algorithm=アルゴリズム -providerHelpText=プロãƒã‚¤ãƒ€ãƒ¼ã®èª¬æ˜Ž - -Sunday=æ—¥ -Monday=月 -Tuesday=ç« -Wednesday=æ°´ -Thursday=木 -Friday=金 -Saturday=土 - -user-storage-cache-policy=キャッシュ設定 -userStorage.cachePolicy=キャッシュ・ãƒãƒªã‚·ãƒ¼ -userStorage.cachePolicy.option.DEFAULT=DEFAULT -userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -userStorage.cachePolicy.tooltip=ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ»ãƒãƒªã‚·ãƒ¼ã€‚「DEFAULTã€ã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ»ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã§ã™ã€‚「EVICT_DAILYã€ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒç„¡åŠ¹ã«ãªã‚‹æ¯Žæ—¥ã®æ™‚刻ã§ã™ã€‚「EVICT_WEEKLYã€ã¯æ›œæ—¥ã§ã‚ã‚Šã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒç„¡åŠ¹ã«ãªã‚‹æ™‚刻ã§ã™ã€‚「MAX-LIFESPANã€ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ»ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®å­˜ç¶šæœŸé–“ã¨ãªã‚‹ãƒŸãƒªç§’å˜ä½ã®æ™‚é–“ã§ã™ã€‚ -userStorage.cachePolicy.evictionDay=エビクションã®æ—¥ -userStorage.cachePolicy.evictionDay.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®æ›œæ—¥ã‚’設定ã—ã¾ã™ã€‚ -userStorage.cachePolicy.evictionHour=エビクションã®æ™‚ -userStorage.cachePolicy.evictionHour.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®æ™‚を設定ã—ã¾ã™ã€‚ -userStorage.cachePolicy.evictionMinute=エビクションã®åˆ† -userStorage.cachePolicy.evictionMinute.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®åˆ†ã‚’設定ã—ã¾ã™ã€‚ -userStorage.cachePolicy.maxLifespan=最大生存期間 -userStorage.cachePolicy.maxLifespan.tooltip=キャッシュ・エントリーã®æœ€å¤§ç”Ÿå­˜æœŸé–“(ミリ秒)。 -user-origin-link=ストレージ・オリジン -user-origin.tooltip=ユーザーãŒèª­ã¿è¾¼ã¾ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ -user-link.tooltip=ã“ã®ãƒ­ãƒ¼ã‚«ãƒ«ã«æ ¼ç´ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãŒã‚¤ãƒ³ãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã€‚ -client-origin-link=ストレージ・オリジン -client-origin.tooltip=クライアントãŒãƒ­ãƒ¼ãƒ‰ã•ã‚ŒãŸãƒ—ロãƒã‚¤ãƒ€ãƒ¼ - -client-storage-cache-policy=キャッシュ設定 -clientStorage.cachePolicy=キャッシュ・ãƒãƒªã‚·ãƒ¼ -clientStorage.cachePolicy.option.DEFAULT=DEFAULT -clientStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -clientStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -clientStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -clientStorage.cachePolicy.option.NO_CACHE=NO_CACHE -clientStorage.cachePolicy.tooltip=ã“ã®ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ»ãƒãƒªã‚·ãƒ¼ã€‚「DEFAULTã€ã¯ã€ã‚°ãƒ­ãƒ¼ãƒãƒ«ãƒ»ã‚­ãƒ£ãƒƒã‚·ãƒ¥ã®ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆè¨­å®šã§ã™ã€‚「EVICT_DAILYã€ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒç„¡åŠ¹ã«ãªã‚‹æ¯Žæ—¥ã®æ™‚刻ã§ã™ã€‚「EVICT_WEEKLYã€ã¯æ›œæ—¥ã§ã‚ã‚Šã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãŒç„¡åŠ¹ã«ãªã‚‹æ™‚刻ã§ã™ã€‚「MAX-LIFESPANã€ã¯ã€ã‚­ãƒ£ãƒƒã‚·ãƒ¥ãƒ»ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®å­˜ç¶šæœŸé–“ã¨ãªã‚‹ãƒŸãƒªç§’å˜ä½ã®æ™‚é–“ã§ã™ã€‚ -clientStorage.cachePolicy.evictionDay=エビクションã®æ—¥ -clientStorage.cachePolicy.evictionDay.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®æ›œæ—¥ã‚’設定ã—ã¾ã™ã€‚ -clientStorage.cachePolicy.evictionHour=エビクションã®æ™‚ -clientStorage.cachePolicy.evictionHour.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®æ™‚を設定ã—ã¾ã™ã€‚ -clientStorage.cachePolicy.evictionMinute=エビクションã®åˆ† -clientStorage.cachePolicy.evictionMinute.tooltip=エントリーãŒç„¡åŠ¹ã«ãªã‚‹æ—¥ã®åˆ†ã‚’設定ã—ã¾ã™ã€‚ -clientStorage.cachePolicy.maxLifespan=最大生存期間 -clientStorage.cachePolicy.maxLifespan.tooltip=キャッシュ・エントリーã®æœ€å¤§ç”Ÿå­˜æœŸé–“(ミリ秒)。 - -client-storage-list-no-entries=Keycloakã¯å¤–部クライアント・データベースã¨é€£æºã§ãã¾ã™ã€‚デフォルトã§ã¯ã€OpenShiftã®OAuthクライアントã¨ã‚µãƒ¼ãƒ“ス・アカウントをサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚開始ã™ã‚‹ã«ã¯ã€ä»¥ä¸‹ã®ãƒ‰ãƒ­ãƒƒãƒ—ダウンã‹ã‚‰ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’é¸æŠžã—ã¾ã™ã€‚ - - -disable=無効 -disableable-credential-types=無効化å¯èƒ½ãªã‚¿ã‚¤ãƒ— -credentials.disableable.tooltip=無効ã«ã§ãるクレデンシャル・タイプã®ãƒªã‚¹ãƒˆã‚’設定ã—ã¾ã™ã€‚ -disable-credential-types=クレデンシャル・タイプを無効化 -credentials.disable.tooltip=é¸æŠžã—ãŸã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ãƒ»ã‚¿ã‚¤ãƒ—を無効ã«ã™ã‚‹ã«ã¯ã€ãƒœã‚¿ãƒ³ã‚’クリックã—ã¾ã™ã€‚ -credential-types=クレデンシャル・タイプ -manage-user-password=パスワードã®ç®¡ç† -supported-user-storage-credential-types=サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„るユーザー・ストレージ・クレデンシャル・タイプ -supported-user-storage-credential-types.tooltip=ユーザー・ストレージ・プロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã£ã¦æä¾›ã•ã‚Œã€ã“ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ç”¨ã«è¨­å®šã•ã‚Œã¦ã„るクレデンシャルã®ç¨®é¡žã€‚特定ã®ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã®è¨­å®šã¨å®Ÿè£…ã«åŸºã¥ã„ã¦ã€ã“れらã®ã‚¿ã‚¤ãƒ—ã®ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ã®æ¤œè¨¼ã¨æœ€çµ‚çš„ãªæ›´æ–°ã‚’ユーザー・ストレージ・プロãƒã‚¤ãƒ€ãƒ¼ã«å§”ä»»ã§ãã¾ã™ã€‚ -provided-by=プロãƒã‚¤ãƒ€ãƒ¼ -manage-credentials=クレデンシャルã®ç®¡ç† -manage-credentials.tooltip=ユーザー・ストレージã«ã‚ˆã£ã¦æä¾›ã•ã‚Œãªã„クレデンシャル。ãれらã¯ãƒ­ãƒ¼ã‚«ãƒ«ãƒ»ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã«ä¿å­˜ã•ã‚Œã¾ã™ã€‚ -disable-credentials=クレデンシャルã®ç„¡åŠ¹åŒ– -credential-reset-actions=クレデンシャルã®ãƒªã‚»ãƒƒãƒˆ -credential-reset-actions-timeout=æœ‰åŠ¹æœŸé™ -credential-reset-actions-timeout.tooltip=アクション許å¯ãŒå¤±åŠ¹ã™ã‚‹ã¾ã§ã®æœ€å¤§æ™‚間。 -ldap-mappers=LDAPマッパー -create-ldap-mapper=LDAPマッパーã®ä½œæˆ -map-role-mgmt-scope-description=管ç†è€…ãŒã“ã®ãƒ­ãƒ¼ãƒ«ã‚’ユーザーã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒžãƒƒãƒ”ングã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -manage-authz-users-scope-description=管ç†è€…ãŒãƒ¬ãƒ«ãƒ å†…ã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -view-authz-users-scope-description=管ç†è€…ãŒãƒ¬ãƒ«ãƒ å†…ã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’表示ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -permissions-enabled-role=パーミッションãŒæœ‰åŠ¹ã«ãªã£ã¦ã„ã¾ã™ -permissions-enabled-role.tooltip=ã“ã®ãƒ­ãƒ¼ãƒ«ã‚’管ç†ã™ã‚‹ãŸã‚ã«ã€ãã‚ç´°ã‹ã„パーミッションを有効ã«ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚無効ã«ã™ã‚‹ã¨ã€è¨­å®šã•ã‚Œã¦ã„ã‚‹ç¾åœ¨ã®ãƒ‘ーミッションãŒã™ã¹ã¦å‰Šé™¤ã•ã‚Œã¾ã™ã€‚ -manage-permissions-role.tooltip=ロールを管ç†ã™ã‚‹ãŸã‚ã®ãã‚ç´°ã‹ãªãƒ‘ーミッション。ãŸã¨ãˆã°ã€ãƒ­ãƒ¼ãƒ«ã®å‰²ã‚Šå½“ã¦ã‚’許å¯ã•ã‚Œã¦ã„るユーザーã«å¯¾ã—ã¦ã€ã•ã¾ã–ã¾ãªãƒãƒªã‚·ãƒ¼ã‚’定義ã§ãã¾ã™ã€‚ -lookup=ルックアップ -manage-permissions-users.tooltip=レルム内ã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’管ç†ã™ã‚‹ãã‚ç´°ã‹ã„パーミッション。レルム内ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’管ç†ã§ãるユーザーã«ã¯ã€ã•ã¾ã–ã¾ãªãƒãƒªã‚·ãƒ¼ã‚’定義ã§ãã¾ã™ã€‚ -permissions-enabled-users=パーミッションãŒæœ‰åŠ¹ -permissions-enabled-users.tooltip=ユーザーを管ç†ã™ã‚‹ãŸã‚ã«ã€ãã‚ç´°ã‹ã„パーミッションを有効ã«ã™ã‚‹ã‹ã©ã†ã‹ã‚’決定ã—ã¾ã™ã€‚無効ã«ã™ã‚‹ã¨ã€è¨­å®šã•ã‚Œã¦ã„ã‚‹ç¾åœ¨ã®ãƒ‘ーミッションãŒã™ã¹ã¦å‰Šé™¤ã•ã‚Œã¾ã™ã€‚ -manage-permissions-client.tooltip=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’管ç†ã—ãŸã‚Šã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã£ã¦å®šç¾©ã•ã‚ŒãŸãƒ­ãƒ¼ãƒ«ã‚’é©ç”¨ã—ãŸã‚Šã™ã‚‹ç®¡ç†è€…ã®ãã‚ç´°ã‹ã„パーミッションã§ã™ã€‚ -manage-permissions-group.tooltip=ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã¾ãŸã¯ã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’管ç†ã—ãŸã„管ç†è€…ã®ãã‚ç´°ã‹ã„パーミッション。 -manage-authz-group-scope-description=管ç†è€…ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -view-authz-group-scope-description=管ç†è€…ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—を表示ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -view-members-authz-group-scope-description=管ç†è€…ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -token-exchange-authz-client-scope-description=ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’対象ã¨ã™ã‚‹ãƒˆãƒ¼ã‚¯ãƒ³ã®ãƒˆãƒ¼ã‚¯ãƒ³äº¤æ›ã‚’許å¯ã™ã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã€‚ -token-exchange-authz-idp-scope-description=ã“ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒç™ºè¡Œã—ãŸå¤–部トークンã«å¯¾ã—ã¦ã€ã©ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒãƒˆãƒ¼ã‚¯ãƒ³ã‚’交æ›ã§ãã‚‹ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã€‚ -manage-authz-client-scope-description=管ç†è€…ãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -configure-authz-client-scope-description=管ç†è€…ã®ç®¡ç†æ¨©é™ã‚’削減ã—ã¾ã—ãŸã€‚スコープã€ãƒ†ãƒ³ãƒ—レートã€ã¾ãŸã¯ãƒ—ロトコル・マッパーを設定ã§ãã¾ã›ã‚“。 -view-authz-client-scope-description=管ç†è€…ãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã‚’表示ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-roles-authz-client-scope-description=管ç†è€…ãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã£ã¦å®šç¾©ã•ã‚ŒãŸãƒ­ãƒ¼ãƒ«ã‚’マップã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-roles-client-scope-authz-client-scope-description=管ç†è€…ãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã£ã¦å®šç¾©ã•ã‚ŒãŸãƒ­ãƒ¼ãƒ«ã‚’別ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã«é©ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-roles-composite-authz-client-scope-description=管ç†è€…ãŒã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«ã‚ˆã£ã¦å®šç¾©ã•ã‚ŒãŸãƒ­ãƒ¼ãƒ«ã‚’コンãƒã‚¸ãƒƒãƒˆã¨ã—ã¦åˆ¥ã®ãƒ­ãƒ¼ãƒ«ã«é©ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-role-authz-role-scope-description=管ç†è€…ãŒã“ã®ãƒ­ãƒ¼ãƒ«ã‚’ユーザーã¾ãŸã¯ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒžãƒƒãƒ—ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-role-client-scope-authz-role-scope-description=管ç†è€…ãŒã“ã®ãƒ­ãƒ¼ãƒ«ã‚’クライアントã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãƒ»ã‚¹ã‚³ãƒ¼ãƒ—ã«é©ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-role-composite-authz-role-scope-description=管ç†è€…ãŒã“ã®ãƒ­ãƒ¼ãƒ«ã‚’コンãƒã‚¸ãƒƒãƒˆã¨ã—ã¦åˆ¥ã®ãƒ­ãƒ¼ãƒ«ã«é©ç”¨ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -manage-group-membership-authz-users-scope-description=管ç†è€…ãŒãƒ¬ãƒ«ãƒ å†…ã®ã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ã‚°ãƒ«ãƒ¼ãƒ—・メンãƒãƒ¼ã‚·ãƒƒãƒ—を管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã€‚ã“ã‚Œã¯ã€ç‰¹å®šã®ã‚°ãƒ«ãƒ¼ãƒ—ãƒãƒªã‚·ãƒ¼ã¨çµ„ã¿åˆã‚ã›ã¦ä½¿ç”¨??ã•ã‚Œã¾ã™ -impersonate-authz-users-scope-description=管ç†è€…ãŒä»–ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å½è£…ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -map-roles-authz-users-scope-description=管ç†è€…ãŒã™ã¹ã¦ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã®ãƒ­ãƒ¼ãƒ«ã‚’マップã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -user-impersonated-authz-users-scope-description=ã©ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’å½è£…ã™ã‚‹ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ã€‚ã“れらã®ãƒãƒªã‚·ãƒ¼ã¯ã€å½è£…ã•ã‚Œã¦ã„るユーザーã«é©ç”¨ã•ã‚Œã¾ã™ã€‚ -manage-membership-authz-group-scope-description=管ç†è€…ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã«ãƒ¦ãƒ¼ã‚¶ãƒ¼ã‚’追加ã¾ãŸã¯å‰Šé™¤ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ -manage-members-authz-group-scope-description=管ç†è€…ãŒã“ã®ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒ¡ãƒ³ãƒãƒ¼ã‚’管ç†ã§ãã‚‹ã‹ã©ã†ã‹ã‚’決定ã™ã‚‹ãƒãƒªã‚·ãƒ¼ - -# KEYCLOAK-6771 Certificate Bound Token -# https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3 -advanced-client-settings=詳細設定 -advanced-client-settings.tooltip=ã“ã®ã‚»ã‚¯ã‚·ãƒ§ãƒ³ã‚’展開ã—ã¦ã€ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®è©³ç´°è¨­å®šã‚’設定ã—ã¾ã™ -tls-client-certificate-bound-access-tokens=OAuth 2.0相互TLS証明書ãƒã‚¤ãƒ³ãƒ‰ãƒ»ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŒæœ‰åŠ¹ -tls-client-certificate-bound-access-tokens.tooltip=ã“ã‚Œã«ã‚ˆã‚Šã€OAuth 2.0相互TLS証明書ãƒã‚¤ãƒ³ãƒ‰ãƒ»ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¾ã™ã€‚ã¤ã¾ã‚Šã€Keycloakã¯ã€Keycloakã®ãƒˆãƒ¼ã‚¯ãƒ³ãƒ»ã‚¨ãƒ³ãƒ‰ãƒã‚¤ãƒ³ãƒˆã¨ã“ã®ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®é–“ã§ç›¸äº’TLSã«ã‚ˆã‚Šäº¤æ›ã•ã‚Œã‚‹ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®X.509証明書ã¨ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒˆãƒ¼ã‚¯ãƒ³ãŠã‚ˆã³ãƒªãƒ•ãƒ¬ãƒƒã‚·ãƒ¥ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’ãƒã‚¤ãƒ³ãƒ‰ã—ã¾ã™ã€‚ã“れらã®ãƒˆãƒ¼ã‚¯ãƒ³ã¯ã€ãƒ™ã‚¢ãƒ©ãƒ¼ãƒˆãƒ¼ã‚¯ãƒ³ã®ä»£ã‚ã‚Šã«Holder-of-Keyトークンã¨ã—ã¦æ‰±ã†ã“ã¨ãŒã§ãã¾ã™ã€‚ -subjectdn=サブジェクトDN -subjectdn-tooltip=クライアント証明書内ã®ã‚µãƒ–ジェクトDNを検証ã™ã‚‹ãŸã‚ã®æ­£è¦è¡¨ç¾ã€‚ã‚らゆる種類ã®å¼ã«ä¸€è‡´ã•ã›ã‚‹ã«ã¯ã€"(.*?)(?:$)"を使用ã—ã¾ã™ã€‚ - -pkce-code-challenge-method=Proof Key for Code Exchangeã®ã‚³ãƒ¼ãƒ‰ãƒãƒ£ãƒ¬ãƒ³ã‚¸æ–¹å¼ -pkce-code-challenge-method.tooltip=PKCEã®ã©ã®ã‚³ãƒ¼ãƒ‰ãƒãƒ£ãƒ¬ãƒ³ã‚¸æ–¹å¼ã‚’使用ã™ã‚‹ã‹ã‚’é¸æŠžã—ã¾ã™ã€‚指定ã—ãªã„å ´åˆã€Keycloakã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒé©åˆ‡ãªã‚³ãƒ¼ãƒ‰ãƒãƒ£ãƒ¬ãƒ³ã‚¸ã¨ã‚³ãƒ¼ãƒ‰äº¤æ›ã®æ–¹å¼ã§èªå¯ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã—ãªã„é™ã‚Šã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã«PKCEã‚’é©ç”¨ã—ã¾ã›ã‚“。 - -key-not-allowed-here=キー'{{character}}'ã¯ã“ã“ã§ã¯ä½¿ç”¨ã§ãã¾ã›ã‚“。 diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_lt.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_lt.properties deleted file mode 100644 index 5fe9e6347..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_lt.properties +++ /dev/null @@ -1,1219 +0,0 @@ -# encoding: utf-8 -consoleTitle=Keycloak administravimo konsolÄ— - -# Common messages -enabled=Ä®galintas -name=Pavadinimas -displayName=Rodomas pavadinimas -displayNameHtml=Rodomas pavadinimas HTML formatu -save=Saugoti -cancel=AtÅ¡aukti -onText=ON -offText=OFF -client=Klientas -clients=Klientai -clear=IÅ¡valyti -selectOne=Pasirinkite vienÄ…... - -true=Taip -false=Ne - -endpoints=Prieigos adresai - -# Realm settings -realm-detail.enabled.tooltip=Naudotojai ir programos prie srities gali prieiti tik tuomet, kai ji įgalinta -realm-detail.oidc-endpoints.tooltip=Atidaromas langas su OpenID Connect prieigos URL adresais -registrationAllowed=Naudotojų registracija -registrationAllowed.tooltip=Ä®galina naudotojų registravimosi sÄ…sajÄ…. Prisijungimo lange rodoma nuoroda į registravimosi puslapį. -registrationEmailAsUsername=El. paÅ¡tas kaip naudojo vardas -registrationEmailAsUsername.tooltip=Jei įgalintas tuomet naudotojo vardo laukas registravimosi lange yra slepiamas ir naujai besiregistruojantiems naudotojams el. paÅ¡to adresas naudojamas kaip naudotojo vardas. -editUsernameAllowed=Naudotojo vardo redagavimas -editUsernameAllowed.tooltip=Jei įgalintas, tuomet naudotojas gali keisti savo naudotojo vardÄ…. -resetPasswordAllowed=Slaptažodžio priminimas -resetPasswordAllowed.tooltip=Prisijungimo lange rodoma nuoroda pamirÅ¡to slaptažodžio atkÅ«rimui. -rememberMe=Prisiminti mane -rememberMe.tooltip=Prisijungimo lange rodyti pasirinkimÄ… leidžiantį naudotojui likti prisijungus netgi tuomet, kai narÅ¡yklÄ— yra iÅ¡jungiama/įjungiama tol, kol nepasibaigia prisijungimo sesija. -verifyEmail=El. paÅ¡to patvirtinimas -verifyEmail.tooltip=Reikalauti naudotojo patvirtinti el. paÅ¡to adresÄ… pirmojo prisijungimo metu. -sslRequired=Reikalauti SSL -sslRequired.option.all=visoms užklausoms -sslRequired.option.external=iÅ¡orinÄ—ms užklausoms -sslRequired.option.none=niekada -sslRequired.tooltip=Ar HTTPS privalomas? 'niekada' - HTTPS nereikalaujamas. 'iÅ¡orinÄ—ms užklausoms' - jungiantis iÅ¡ localhost ar serverio IP adresų galima prieiti ir per HTTP. 'visoms užklausoms' - HTTPS reikalaujamas jungiantis iÅ¡ visų IP adresų. -publicKey=VieÅ¡as raktas -privateKey=Privatus raktas -gen-new-keys=Generuoti naujus raktus -certificate=Sertifikatas -host=Serveris -smtp-host=SMTP serveris -port=Prievadas -smtp-port=SMTP prievadas (numatyta reikÅ¡mÄ— 25) -from=Nuo -sender-email-addr=SiuntÄ—jo el. paÅ¡to adresas -enable-ssl=Ä®galinti SSL -enable-start-tls=Ä®galinti StartTLS -enable-auth=Ä®galinti autentifikacijÄ… -username=Naudotojo vardas -login-username=Prisijungimui naudojamas naudotojo vardas -password=Slaptažodis -login-password=Prisijungimui naudojamas slaptažodis -login-theme=Prisijungimo lango tema -login-theme.tooltip=Pasirinkite kaip atrodys JÅ«sų prisijungimo, OTP, teisių suteikimo, naudotojų registracijos ir slaptažodžių priminimo langai. -account-theme=Naudotojo profilio tema -account-theme.tooltip=Pasirinkite kaip atrodys naudotojo profilio valdymo langai. -admin-console-theme=Administravimo konsolÄ—s tema -select-theme-admin-console=Pasirinkite kaip atrodys administravimo konsolÄ—s langai. -email-theme=El. paÅ¡to tema -select-theme-email=Pasirinkite kaip atrodys siunÄiami el. paÅ¡to laiÅ¡kai. -i18n-enabled=DaugiakalbystÄ—s palaikymas -supported-locales=Palaikomos kalbos -supported-locales.placeholder=Pasirinkite arba įraÅ¡ykite kalbos pavadinimÄ… -default-locale=Numatyta kalba -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=Srities podÄ—lis -realm-cache-clear.tooltip=IÅ¡ visų sriÄių paÅ¡alinama visa podÄ—lyje (cache) esanti informacija -user-cache-clear=Naudotojų podÄ—lis -user-cache-clear.tooltip=IÅ¡ visų sriÄių paÅ¡alinama visa naudotojų podÄ—lyje (cache) esanti informacija -revoke-refresh-token=Prieigos raktÄ… naudoti tik kartÄ… -revoke-refresh-token.tooltip=Jei įgalintas, tuomet atnaujinimo raktai (Refresh Token) gali bÅ«ti naudojami tik vienÄ… kartÄ…. Kitu atveju - atnaujinimo raktai gali bÅ«ti pernaudojami daugelį kartų. -sso-session-idle=SSO sesijos neveikimo laikas -seconds=SekundÄ—s -minutes=MinutÄ—s -hours=Valandos -days=Dienos -sso-session-max=SSO sesijos maksimalus laikas -sso-session-idle.tooltip=Laikas, po kurio neaktyvi sesija bus užbaigta. Sesijos pasibaigimo metu visi raktai (Tokens) ir narÅ¡yklių sesijos sunaikinamos. -sso-session-max.tooltip=Laikas, po kurio prisijungimo sesija yra sunaikinama. Sesijos pasibaigimo metu visi raktai (Tokens) ir narÅ¡yklių sesijos sunaikinamos. -offline-session-idle=Neprisijungusios sesijos neveikimo laikas -offline-session-idle.tooltip=Darbo neprisijungus sesijos neveikimo laikas, po kurio neaktyvi sesija bus užbaigta. Darbo neprisijungus metu, prisijungimo raktai turi bÅ«ti atnaujinami bent kartÄ… per nurodytÄ… periodÄ…. Kitu atveju sesijos galiojmas bus sustabdytas. -access-token-lifespan=Prisijungimo rakto galiojimo laikas -access-token-lifespan.tooltip=Laikas, po kurio prisijungimui naudojamas raktas (Access Token) nustoja galioti. Rekomenduojama, kad Å¡ios reikÅ¡mÄ—s galiojimas bÅ«tų reliatyviai trumpas palyginus su SSO galiojimo laiku. -access-token-lifespan-for-implicit-flow=Prisijungimo rakto galiojimo laikas (Implicit Flow) -access-token-lifespan-for-implicit-flow.tooltip=Laikas, po kurio prisijungimui naudojamas OpenID Connect Implicit Flow raktas nustoja galioti. Rekomenduojama, kad Å¡ios reikÅ¡mÄ—s galiojimas bÅ«tų reliatyviai trumpas palyginus su SSO galiojimo laiku. Å is parametras skiriasi nuo 'Prisijungimo rakto galiojimo laikas', nes nÄ—ra galimybÄ—s atnaujinti prieigos rakto naudojant OpenID Connect Implicit Flow. -client-login-timeout=Kliento prisijungimui skirtas laikas -client-login-timeout.tooltip=Laikas, per kurį klientas turi užbaigti prisijungimo procesÄ…. Normaliu atveju reikÅ¡mÄ— turÄ—tų bÅ«ti 1 minutÄ—. -login-timeout=Naudotojo prisijungimui skirtas laikas -login-timeout.tooltip=Laikas, per kurį naudotojas turi užbaigti prisijungimo procesÄ…. Rekomenduojamas pakankamai ilgas laiko tarpas. Pvz. 30 minuÄių ar daugiau. -login-action-timeout=Naudotojo prisijungimo veiksmui skirtas laikas -login-action-timeout.tooltip=Laikas, per kurį naudotojas turi užbaigti su prisijungimu susijusį veiksmÄ…. Pavyzdžiui atnaujinti slaptažodį ar sukonfigÅ«ruoti OTP. Rekomenduojamas laikas - 5 minutÄ—s ar daugiau. -headers=AntraÅ¡tÄ—s -brute-force-detection=Grubios jÄ—gos ataka -x-frame-options=X-Frame-Options -x-frame-options-tooltip=Numatyta reikÅ¡mÄ— draudžia puslapius naudoti kitose svetainÄ—se per iframe (paspauskite antraÅ¡tÄ™ norÄ—dami gauti daugiau informacijos) -content-sec-policy=Content-Security-Policy -content-sec-policy-tooltip=Numatyta reikÅ¡mÄ— draudžia puslapius naudoti kitose svetainÄ—se per iframe (paspauskite antraÅ¡tÄ™ norÄ—dami gauti daugiau informacijos) -content-type-options=X-Content-Type-Options -content-type-options-tooltip=Numatyta reikÅ¡mÄ— draudžia Internet Explorer ir Google Chrome atlikti priimti kitokias MIME reikÅ¡mes (MIME-sniffing) nei deklaruotas turinio tipas (content-type) (paspauskite antraÅ¡tÄ™ norÄ—dami gauti daugiau informacijos) -max-login-failures=Maksimalus bandymų prisijungimų skaiÄius -max-login-failures.tooltip=Pasiekus maksimalų nesÄ—kmingų bandymų prisijungti skaiÄių įjungiamas specialus rėžimas, kuomet laukimo intervalas yra didinamas po kiekvieno sekanÄio neteisingo bandymo. -wait-increment=Laukimo laiko didinimas po -wait-increment.tooltip=Laikas, kurį naudotojo prisijungimai yra draudžiami, kai nÄ—sÄ—kmingų bandymų skaiÄius pasiekia nustatytÄ… ribÄ… -quick-login-check-millis=Per greito bandymo prisijungti laikas milisekundÄ—mis -quick-login-check-millis.tooltip=Jei nÄ—sÄ—kmingi bandymai prisijungti seka vienas kitÄ… per greitai, tuomet naudotojo paskyra yra užrakinama. -min-quick-login-wait=Per greito bandymo prisijungti užrakinimo laikas -min-quick-login-wait.tooltip=Laikas, kurį naudotojo prisijungimai yra draudžiami, kai nÄ—sÄ—kmingi bandymai prisijungti seka vienas kitÄ… per greitai. -max-wait=Maksimalus užrakinimo laikas -max-wait.tooltip=Maksimalus laikas, kuomet naudotojo paskyra yra užrakinama po nesÄ—kmingų bandymų prisijungti. -failure-reset-time=PamirÅ¡ti nepavykusius prisijungimus po -failure-reset-time.tooltip=Laikas, po kurio nepavykÄ™ prisijungimai bus pamirÅ¡ti -realm-tab-login=Prisijungimas -realm-tab-keys=Raktai -realm-tab-email=El. paÅ¡tas -realm-tab-themes=Temos -#realm-tab-localization=Localization -realm-tab-cache=PodÄ—lis -realm-tab-tokens=Raktai -realm-tab-client-registration=Klientų registracija -realm-tab-security-defenses=Saugos priemonÄ—s -realm-tab-general=Bendra informacija -add-realm=PridÄ—ti sritį - -#Session settings -realm-sessions=Srities sesijos -revocation=AtÅ¡aukimai -logout-all=Atjungti visus -active-sessions=Aktyvios sesijos -sessions=Sesijos -not-before=Ne anksÄiau -not-before.tooltip=AtÅ¡aukti visus raktus iÅ¡duotus prieÅ¡ nurodytÄ… datÄ…. -set-to-now=Parinkti dabartinÄ™ datÄ… -push=Informuoti apie atÅ¡aukimÄ… -push.tooltip=Visus klientus, kurie turi administravimo URL, informuoti apie naujÄ… raktų atÅ¡aukimo taisyklÄ™. - -#Protocol Mapper -usermodel.prop.label=Atributas -usermodel.prop.tooltip=SÄ…sajos UserModel atributo metodo pavadinimas. Pavyzdžiui reikÅ¡mÄ— 'email' atitinka UserMode.getEmail() metodÄ…. -usermodel.attr.label=Naudotojo atributas -usermodel.attr.tooltip=IÅ¡saugoto naudotojo atributo pavadinimas kuris naudojamas UserModel.attribute rinkinyje. -userSession.modelNote.label=Naudotojo sesijos pastaba -userSession.modelNote.tooltip=IÅ¡saugotos naudotojo sesijos pastaba, kuri saugoma UserSessionModel.note rinkinyje. -multivalued.label=DaugiareikÅ¡mis -multivalued.tooltip=Nurodo, kad atributas gali turÄ—ti daugiau nei vienÄ… reikÅ¡mÄ™. Jei pažymÄ—tas, tuomet visos reikÅ¡mÄ—s nustatomos kaip privalomos. Kitu atveju privaloma tik pirmoji reikÅ¡mÄ—. -selectRole.label=Parinkite rolÄ™ -selectRole.tooltip=KairÄ—je pusÄ—je esanÄiame laukelyje įveskite rolÄ—s pavadinimÄ… arba paspauskite Rinktis norÄ—dami nurodyti pageidaujamÄ… rolÄ™. -tokenClaimName.label=Reikalaujamo rakto pavadinimas -tokenClaimName.tooltip=Ä® raktÄ… įterpiamas privalomas atributas. Galite nurodyte pilnÄ… keliÄ… iki atributo, pavyzdžiui 'address.street'. Pateiktu atveju bus sukuriamas sudÄ—tinis (nested) JSON objektas. -jsonType.label=Privalomo atributo JSON tipas -jsonType.tooltip=Naudojamas JSON lauko tipas, kuris turi bÅ«ti užpildomas rakto privalomoje JSON informacijoje. Galimi tipai: long, int, boolean ir String. -includeInIdToken.label=PridÄ—ti prie ID rakto -includeInIdToken.tooltip=Ar privaloma informacija turi bÅ«ti pridedama prie ID rakto? -includeInAccessToken.label=PridÄ—ti prie prieigos rakto -includeInAccessToken.tooltip=Ar privaloma informacija turi bÅ«ti pridedama prie prieigos rakto? -includeInUserInfo.label=PridÄ—ti prie naudotojo informacijos -includeInUserInfo.tooltip=Ar privaloma informacija turi bÅ«ti pridedama prie naudotojo informacijos? -usermodel.clientRoleMapping.clientId.label=Kliento ID -usermodel.clientRoleMapping.clientId.tooltip=Kliento ID naudojamas rolių atributų susiejime -usermodel.clientRoleMapping.rolePrefix.label=Kliento rolÄ—s prefiksas -usermodel.clientRoleMapping.rolePrefix.tooltip=Prefiksas, pridedamas prieÅ¡ kiekvienÄ… kliento rolÄ™ (neprivalomas) -usermodel.realmRoleMapping.rolePrefix.label=Srities rolÄ—s prefiksas -usermodel.realmRoleMapping.rolePrefix.tooltip=Prefiksas, pridedamas prieÅ¡ kiekvienÄ… srities rolÄ™ (neprivalomas) -sectorIdentifierUri.label=Sektoriaus identifikatoriaus URI -sectorIdentifierUri.tooltip=Paslaugų teikÄ—jai, kurie naudoja porines subreikÅ¡mes ir palaiko dinaminÄ™ klientų registracijÄ… (Dynamic Client Registration) turÄ—tų naudoti sector_identifier_uri parametrÄ…. Teikiamas funkcionalumas leidžia svetainių grupÄ—ms, valdomoms centralizuotos administravimo panelÄ—s, turÄ—ti pastovias porines subreikÅ¡mes nepriklausomas nuo domeno vardų. Tokiu bÅ«du klientai gali keisti domenų redirect_uri neperregistruojant visų naudotojų. -pairwiseSubAlgorithmSalt.label=Druska -pairwiseSubAlgorithmSalt.tooltip=Druska naudojama porinio objekto identifikatoriaus skaiÄiavimo metu. Jei paliekama tuÅ¡Äia reikÅ¡mÄ—, tuomet druskos reikÅ¡mÄ— bus automatikÅ¡ai sugeneruota. - -# client details -clients.tooltip=Klientai - tai srities narÅ¡yklÄ—s programÄ—lÄ—s arba tinklinÄ—s paslaugos, kuriomis pasitikima. Klientai gali jungtis prie sistemos. Klientams galima nurodyti specifines roles. -search.placeholder=IeÅ¡koti... -create=Sukurti -import=Importuoti -client-id=Kliento ID -base-url=Pagrindinis URL -actions=Veiksmai -not-defined=Nenurodyta -edit=Redaguoti -delete=Trinti -no-results=Rezultatų nÄ—ra -no-clients-available=NÄ—ra sukonfigÅ«ruotų klientų -add-client=PridÄ—ti klientÄ… -select-file=Parinkti rinkmenÄ… -view-details=PeržiÅ«rÄ—ti detaliau -clear-import=IÅ¡valyti importuojamas rinkmenas -client-id.tooltip=Identifikatorius, naudojamas URI adresuose ir prieigos raktuose. Pavyzdžiui 'my-client'. SAML protokolo atveju, Å¡iÄ… reikÅ¡mÄ™ tikimasi gauti kaip authn užklausos siuntÄ—jÄ… -client.name.tooltip=ReikÅ¡mÄ—, kuri rodoma naudotojams. Pavyzdžiui 'My Client'. Galimos lokalizuotos reikÅ¡mÄ—s - pavyzdžiui\: ${my_client} -client.enabled.tooltip=Klientai, kurie nÄ—ra įgalinti, negali inicijuoti prisijungimo arba gauti prieigos raktus. -consent-required=Reikalingas patvirtinimas -consent-required.tooltip=Jei įgalinta, tuomet naudotojai privalo patvirtinti, kad pageidauja prisijungti prie kliento (programos). -client-protocol=Kliento protokolas -client-protocol.tooltip='OpenID connect' leidžia klientams tikrinti galutinio naudotojo tapatybÄ™ remiantis autorizacijos serverio atlikta autentifikacija. 'SAML' įgalina žiniatinklio, įskaitant skirtingų domenų atvejus, vieningos autentifikacijos ir autorizacijos scenarijus perduodant informacijÄ… saugiose žinutÄ—se. -access-type=Prieigos tipas -access-type.tooltip='Konfidencialus' klientai norÄ—dami inicijuoti prisijungimo protokolÄ… privalo perduoti slaptÄ… kodÄ…. 'VieÅ¡as' klientai neprivalo perduoti slapto kodo. 'Tik neÅ¡Ä—jas' klientai - tai tinklinÄ—s paslaugos, kurios niekada neinicijuoja prisijungimo. -standard-flow-enabled=Ä®galinta standartinÄ— seka -standard-flow-enabled.tooltip=Ä®galina standartinį OpenID Connect nukreipimÄ…, kuomet autentifikacijos metu yra perduodamas autorizacijos kodas. OpenID Connect arba OAuth2 specifikacijos terminais tai reiÅ¡kia 'Authorization Code Flow' įgalinimÄ… Å¡iam klientui. -implicit-flow-enabled=Ä®galinta iÅ¡reikÅ¡tinÄ— seka -implicit-flow-enabled.tooltip=Ä®galina OpenID Connect nukreipimÄ…, kuomet autentifikacijos metu nÄ—ra perduodamas autorizacijos kodas. OpenID Connect arba OAuth2 specifikacijos terminais tai reiÅ¡kia 'Implicit Flow' įgalinimÄ… Å¡iam klientui. -direct-access-grants-enabled=Ä®galintas tiesioginÄ—s prieigos suteikimas -direct-access-grants-enabled.tooltip=Ä®galina tiesioginį prieigos suteikimÄ…, kuomet klientas turi prieigÄ… prie naudotojo vardo ir slaptažodžio ir prieigos raktų gavimui Å¡iais duomenimis gali tiesiogiai apsikeisti su Keycloak serveriu. OAuth2 specifikacijos terminais, Å¡iam klientui įgalinimas 'Resource Owner Password Credentials Grant'. -service-accounts-enabled=Ä®galintas paslaugos naudotojas -service-accounts-enabled.tooltip=Ä®galina klientÄ… autentifikuotis su Keycloak serveriu ir gauti dedikuotÄ… prieigos raktÄ… skirtÄ… Å¡iam klientui. OAuth2 specifikacijos terminais, tai reiÅ¡kia 'Client Credentials Grant' teisÄ™ Å¡iam klientui. -include-authnstatement=Ä®traukti AuthnStatement -include-authnstatement.tooltip=Ar prisijungimo bÅ«das ir laikas Å¡urÄ—tų bÅ«ti įtraukiami į prisijungimo operacijos atsakymÄ…? -sign-documents=PasiraÅ¡yti dokumentus -sign-documents.tooltip=Ar SAML dokumentai turi bÅ«tį pasiraÅ¡omi Å¡ios srities? -sign-documents-redirect-enable-key-info-ext=Optimizuoti REDIRECT pasiraÅ¡ymo rakto paieÅ¡kÄ… -sign-documents-redirect-enable-key-info-ext.tooltip=Ar privalo bÅ«ti itrauktas pasiraÅ¡ymo rakto ID į SAML protokolo žinutÄ—s elementÄ… kuomet pasiraÅ¡omi Keycloak REDIRECT SP sÄ…sajos dokumentai? Tokiu bÅ«du tikrinanÄioji pusÄ— optimizuoja tikrinimo proceÄ… naudodama tik vienÄ… raktÄ… vietoj to, kad bandytų visų raktų kombinacijas. -sign-assertions=PasiraÅ¡yti sprendinius -sign-assertions.tooltip=Ar SAML sprendiniai SAML dokumentuose turi bÅ«ti pasiraÅ¡omi? Å is nustatymas nebÅ«tinas, kuomet naudojamas viso dokumento pasiraÅ¡ymas. -signature-algorithm=ParaÅ¡o algoritmas -signature-algorithm.tooltip=ParaÅ¡o algoritmas naudojamas dokumentų pasiraÅ¡ymui. -canonicalization-method=Standartizavimo metodas -canonicalization-method.tooltip=XML paraÅ¡o metodas. -encrypt-assertions=Užkoduoti sprendinius -encrypt-assertions.tooltip=Ar SAML sprendiniai turi bÅ«ti užkoduojami kliento vieÅ¡uoju raktu naudojant AES? -client-signature-required=Privalomas kliento paraÅ¡as -client-signature-required.tooltip=Ar kliento siunÄiamos SAML užklausos ir atsakymai bus pasiraÅ¡yti? Jei taip, tuomet ar juos privaloma tikrinti? -force-post-binding=Priverstinai naudoti POST sÄ…ryšį -force-post-binding.tooltip=Visuomet naudoti POST sÄ…ryšį siunÄiant atsakymus. -front-channel-logout=IÅ¡registravimas per narÅ¡yklÄ™ -front-channel-logout.tooltip=Jei įgalinta, tuomet atsijungimas atliekamas narÅ¡yklÄ—s nukreipimu į kliento puslapį. Kitu atveju, atsijungimas atliekamas perduodant serveris-serveris užklausÄ…. -force-name-id-format=Priverstinai naudoti NameID formatÄ… -force-name-id-format.tooltip=Ignoruoti NameID tapatybÄ—s identifikatoriaus formatÄ…, naudojant administratoriaus konsolÄ—je nurodytÄ… formatÄ…. -name-id-format=NameID formatas -name-id-format.tooltip=Koks tapatybÄ—s identifikatoriaus formatas turi bÅ«ti naudojamas. -root-url=Å akninis URL -root-url.tooltip=Prie reliatyvių nuorodų pridedamas Å¡akninis URL -valid-redirect-uris=Leidžiamos nukreipimo nuorodos -valid-redirect-uris.tooltip=Nukreipimo URI Å¡ablonas, kuomet narÅ¡yklei leidžiama nukreipti naudotojÄ… po sÄ—kmingos autentifikacijos ar atsijungimo metu. Leidžiami pakaitos simboliai, pvz. 'http://pavyzdys.lt/*'. Leidžiami reliatyvÅ«s keliai pvz. /mano/reliatyvus/kelias/*. Reliatyvumas skaiÄiuojamas nuo kliento Å¡akninio URL (jei nurodyta) arba nuo autentifikacijos serverio Å¡akninio adreso. SAML atveju, kuomet tikimasi gavÄ—jo paslaugos URL įtraukimo į prisijungimo užklausÄ…, privaloma nurodyti teisingus URI Å¡ablonus. -base-url.tooltip=Numatytas URL, kuris turi bÅ«ti naudojamas naudotojo nukreipimui atgal į klientÄ…. -admin-url=Administravimo URL -admin-url.tooltip=Kliento administravimo tinklinÄ—s sÄ…sajos URL. Ä®raÅ¡yti tuomet, kai klientas palaiko adapterio REST API. Å is REST API leidžia autentifikacijos serveriui perduoti atÅ¡aukimo ir kitas su administravimu susijusias taisykles. Dažniausiai Å¡is URL sutampa su kliento pagrindiniu URL. -master-saml-processing-url=Å akninis SAML apdorojimo URL -master-saml-processing-url.tooltip=Kuomet sukonfigÅ«ruotas, Å¡is URL bus naudojamas visoms, 'SP Assertion Consumer' ir 'Single Logout Services' užklausoms. Detalioje SAML prieigos adresų konfigÅ«ravimo skyriuje Å¡ios reikÅ¡mÄ—s gali bÅ«ti atskirai pakeistos. -idp-sso-url-ref=IDP inicijuojamo SSO URL fragmento pavadinimas -idp-sso-url-ref.tooltip=Pavadinimas, kuris IDP inicijuoto SSO prisijungimo metu, perduodamas klientui per URL fragmentÄ…. Palikus tuÅ¡ÄiÄ… reikÅ¡mÄ™ IDP inicjuojamÄ… SSO prisijungimo funkcionalumas iÅ¡jungiamas. Å is fragmentas buv naudojamas formuojant Å¡iÄ… nuorodÄ…: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state=IDP inicijuotos SSO bÅ«senos perdavimas -idp-sso-relay-state.tooltip=SSO bÅ«senos parametro (RelayState) perdavimas kartu su IDP inicijuota SSO SAML užklausa. -web-origins=Å akninÄ—s nuorodos -web-origins.tooltip=Leidžiamos CORS nuorodos. NorÄ—dami leisti nukreipimÄ… į teisingas nuorodas, naudokite '+'. NorÄ—dami leisti visas nuorodas, naudokite '*'. -fine-oidc-endpoint-conf=Detalioji OpenID prisijungimo konfigÅ«racija -fine-oidc-endpoint-conf.tooltip=NorÄ—dami konfigÅ«ruoti kliento sÄ…sajos su OpenID prisijungimo protokolu iÅ¡plÄ—stines nuostatas, iÅ¡skleiskite šį skyrių. -user-info-signed-response-alg=Naudotojo informacijos pasiraÅ¡yto atsako algoritmas -user-info-signed-response-alg.tooltip=JWA algoritmas naudojamas pasiraÅ¡yti naudotojo informacijos prieigos taÅ¡ko atsakÄ…. Jei nustatyta 'unsigned', tuomet naudotojo informacijos atsakas nebus pasiraÅ¡ytas ir bus grąžintas application/json formatu. -request-object-signature-alg=Užklausos objekto paraÅ¡o algoritmas -request-object-signature-alg.tooltip=JWA algoritmas, kurį klientas naudoja siunÄiant OIDC užklausos objektÄ…, nusakytÄ… 'request' arba 'request_uri' parameterais. Jei nustatyta 'any', tuomet užklausos objektas gali bÅ«ti nepasiraÅ¡ytas arba pasiraÅ¡ytas bet kuriuo algoritmu. -fine-saml-endpoint-conf=Detalioji SAML prieigos taÅ¡kų konfigÅ«racija -fine-saml-endpoint-conf.tooltip=NorÄ—dami konfigÅ«ruoti sprendinių priÄ—mimo ir vieningo atsijungimo paslaugas, iÅ¡skleiskite šį skyrių. -assertion-consumer-post-binding-url=Sprendinių naudotojo paslaugos POST jungties URL -assertion-consumer-post-binding-url.tooltip=Kliento sprendinių priÄ—mimo paslaugos (prisijungimo rezultatų) SAML POST jungties URL. Jei tokių jungÄių neturite, tuomet palikite tuÅ¡Äias reikÅ¡mes. -assertion-consumer-redirect-binding-url=Sprendinių priÄ—mimo paslaugos nukreipimo jungties URL -assertion-consumer-redirect-binding-url.tooltip=Kliento sprendinio priÄ—mimo paslaugos SAML nukreipimo jungties URL (prisijungimo atsakymams). Jei tokių jungÄių neturite, tuomet palikite tuÅ¡Äias reikÅ¡mes. -logout-service-binding-post-url=Atsijungimo paslaugos POST jungties URL -logout-service-binding-post-url.tooltip=Kliento vieningo atsijungimo SAML POST jungties URL. Jei naudojate kitas jungtis, tuomet Å¡ias reikÅ¡mes galite palikti neužpildytas. -logout-service-redir-binding-url=Atsijungimo paslaugos nukreipimo jungties URL -logout-service-redir-binding-url.tooltip=Kliento vieningo atsijungimo paslaugos SAML nukreipimo jungties. Jei naudojate kitas jungtis, tuomet Å¡ias reikÅ¡mes galite palikti neužpildytas. - -# client import -import-client=Ä®diegti programos nustatymus -format-option=Formato pasirinkimas -select-format=Pasirinkite formatÄ… -import-file=Importuoti rinkmenÄ… - -# client tabs -settings=Nustatymai -credentials=Prisijungimo duomenys -roles=RolÄ—s -mappers=Atributų atitikmenys -mappers.tooltip=Protokolo atributų susiejimas atlieka raktų ir dokumentų transformacijas. Naudotojo duomenys gali bÅ«ti verÄiami į protokolo teiginius, arba tiesiog transformuoti bet kurias užklausas perduodamas tarp kliento ir autentifikacijos serverio. -scope=Apimtis -scope.tooltip=Apimties atitikmenų parinkimas leidžia apriboti, kurios naudotojo rolÄ—s kartu su raktu bus perduodamos klientui. -sessions.tooltip=PeržiÅ«rÄ—ti Å¡io kliento aktyvias sesijas. Matysite Å¡iuo metu prisijungusius naudotojus bei jų prisijungimo laikus. -offline-access=Darbas neprisijungus -offline-access.tooltip=PeržiÅ«rÄ—ti Å¡io kliento darbo neprisijungus rėžimo aktyvias sesijas. Matysite naudotojus, kuriems yra iÅ¡duoti darbo neprisijungus raktai bei jų iÅ¡davimo laikus. NorÄ—dami atÅ¡aukti visus Å¡iam klientui iÅ¡duotus raktus, eikite į atÅ¡aukimų kortelÄ™ ir pasirinkite 'Parinkti dabartinÄ™ datÄ…' -clustering=Klasteriai -installation=Diegimas -installation.tooltip=Klientų konfigÅ«ravimo pagalbinÄ— priemonÄ—, padedanti sugeneruoti klientų adapterių konfigÅ«racijas, kurias galima atsisiųsti, kopijuoti ar įkelti iÅ¡ iÅ¡karpinÄ—s -service-account-roles=Paslaugos paskyros rolÄ—s -service-account-roles.tooltip=Dedikuotų rolių priskyrimas Å¡ios paslaugos naudotojui - -# client credentials -client-authenticator=Kliento autentifikavimo priemonÄ—s -client-authenticator.tooltip=Kliento autentifikavimo priemonÄ—s naudojamos kliento autentifikavimuisi į Keycloak serverį -certificate.tooltip=Kliento sertifikatas naudojamas kliento iÅ¡duotų ir privaÄiu raktu pasiraÅ¡ytų JWT prieigos raktų tikrinimui. -publicKey.tooltip=Kliento iÅ¡duotas vieÅ¡asis raktas pasiraÅ¡ytas kliento privaÄiu raktu ir skirtas JWT tikrinimui. -no-client-certificate-configured=NesukonfigÅ«ruotas nei vienas kliento sertifikatas -gen-new-keys-and-cert=Naujų raktų ir sertifikatų generavimas -import-certificate=Importuoti sertifikatÄ… -gen-client-private-key=Generuoti kliento privatų raktÄ… -generate-private-key=Generuoti privatų raktÄ… -kid=Kid -kid.tooltip=Kliento vieÅ¡ojo rakto identifikatorius (Key ID) importuotas iÅ¡ JWKS. -use-jwks-url=Naudoti JWKS URL -use-jwks-url.tooltip=Jei įgalinta, tuomet kliento vieÅ¡asis raktas atsiunÄiamas iÅ¡ pateiktos JWKS URL. Ä®galinimas suteikia lankstumo, nes klientui pergeneravus raktus jie automatiÅ¡kai atsiunÄiami. Jei Å¡i nuostata iÅ¡jungta, tuomet naudojamas Keycloak DB saugomas vieÅ¡asis raktas (arba sertifikatas) ir klientui sugeneravus naujus raktus juos rankiniu bÅ«du reikÄ—s importuoti į Keycloak DB. -jwks-url=JWKS URL -jwks-url.tooltip=URL, kuriuo pasiekiami kliento JWK formatu saugomi raktai. ŽiÅ«rÄ—kite JWK specifikacijÄ… detalesnei informacijai. Jei naudojamas kliento adapteris su "jwt" kredencialais, tuomet galite naudoti jÅ«sų programos URL su '/k_jwks' sufiksu. Pavyzdžiui 'http://www.myhost.com/myapp/k_jwks' . -archive-format=Archyvo formatas -archive-format.tooltip=Java raktų saugykla (keystore) arba PKCS12 formato rinkmena. -key-alias=Rakto pseudonimas -key-alias.tooltip=Privataus rakto ir sertifikato rinkmenos pseudonimas. -key-password=Rakto slaptažodis -key-password.tooltip=Slaptažodžių saugykloje esanÄio privataus rakto slaptažodis -store-password=Saugyklos slaptažodis -store-password.tooltip=Slaptažodis, reikalingas norint atidaryti slaptažodžių saugyklÄ… -generate-and-download=Generuoti ir atsisiųsti -client-certificate-import=Kliento sertifikato importavimas -import-client-certificate=Importuoti kliento sertifikatus -jwt-import.key-alias.tooltip=Slaptažodžių saugyklos pseudonimas -secret=Slaptas kodas -regenerate-secret=Pergeneruoti slaptÄ… kodÄ… -registrationAccessToken=Registracijos prieigos raktas -registrationAccessToken.regenerate=Pergeneruoti registracijos prieigos raktÄ… -registrationAccessToken.tooltip=Registracijos prieigos raktas klientams suteikia prieigÄ… prie klientų registracijos paslaugos -add-role=PridÄ—ti rolÄ™ -role-name=RolÄ—s pavadinimas -composite=SudÄ—tinis -description=ApraÅ¡ymas -no-client-roles-available=Kliento rolÄ—s nesukonfigÅ«ruotos -scope-param-required=Privalomas taikymo srities parametras -scope-param-required.tooltip=Å i rolÄ— suteikiama tik tuo atveju, kai taikymo srities parametras su rolÄ—s vardu panaudotas autorizacijos užklausoje ar rakte. -composite-roles=SudÄ—tinÄ—s rolÄ—s -composite-roles.tooltip=Visos susietos rolÄ—s bus automatiÅ¡kai priskiriamos naudotojui prisikiriant Å¡iÄ… sudÄ—tinÄ™ rolÄ™. -realm-roles=Srities rolÄ—s -available-roles=Galimos rolÄ—s -add-selected=PridÄ—ti pažymÄ—tas -associated-roles=Priskirtos rolÄ—s -composite.associated-realm-roles.tooltip=Srities apmities rolÄ—s susietos su Å¡ia sudÄ—tine role. -composite.available-realm-roles.tooltip=Srities apmities rolÄ—s, kurias galima susieti su Å¡ia sudÄ—tine role. -remove-selected=PaÅ¡alinti pažymÄ—tas -client-roles=Kliento rolÄ—s -select-client-to-view-roles=NorÄ—dami pamatyti priskirtas roles pažymÄ—kite klientÄ… -available-roles.tooltip=Å io kliento rolÄ—s, kurios gali bÅ«ti priskiritos Å¡iai kompozicinei rolei. -client.associated-roles.tooltip=Su Å¡iuo klientu susietos sudÄ—tinÄ—s rolÄ—s. -add-builtin=PridÄ—ti numatytuosius -category=Kategorija -type=Tipas -no-mappers-available=NÄ—ra susietų atributų -add-builtin-protocol-mappers=PridÄ—ti numatytuosius protokolo atributų susiejimus -add-builtin-protocol-mapper=PridÄ—ti numatytuosius protokolo atributų susiejimus -scope-mappings=atributų susiejimo taikymo sritis -full-scope-allowed=Taikymas pilna apimtimi -full-scope-allowed.tooltip=Ä®galinimo atveju visi apribojimai iÅ¡jungiami -scope.available-roles.tooltip=Srities lygio rolÄ—s, kurios gali bÅ«ti priskiriamos Å¡iai taikymo sriÄiai. -assigned-roles=Priskirtos rolÄ—s -assigned-roles.tooltip=Srities lygio rolÄ—s, kurios yra priskirtos Å¡iai taikymo sriÄiai. -effective-roles=Aktyvios rolÄ—s -realm.effective-roles.tooltip=Priskirtos srities lygio rolÄ—s, kurios gali gali bÅ«ti paveldÄ—tos iÅ¡ sudÄ—tinių rolių. -select-client-roles.tooltip=NorÄ—dami pamatyti visas roles pažymÄ—kite klientÄ… -assign.available-roles.tooltip=Kliento rolÄ—s, kurias galima priskirti. -client.assigned-roles.tooltip=Priskirtos kliento rolÄ—s. -client.effective-roles.tooltip=Priskirtos kliento rolÄ—s, kurios gali gali bÅ«ti paveldÄ—tos iÅ¡ sudÄ—tinių rolių. -basic-configuration=PagrindinÄ— konfigÅ«racija -node-reregistration-timeout=Mazgo persiregistravimui skirtas laikas -node-reregistration-timeout.tooltip=Nurodykite maksimalų laiko intervalÄ…, per kurį mazgai privalo iÅ¡ naujo prisiregistruoti. Jei mazgas neatsiųs persiregistravimo užklausos per nurodytÄ… laikÄ…, tuomet Å¡is mazgas bus iÅ¡registruojamas iÅ¡ Keycloak -registered-cluster-nodes=Registruoti klasterio mazgus -register-node-manually=Registruoti mazgÄ… rankiniu bÅ«du -test-cluster-availability=Tikrinti ar mazgas prieinamas -last-registration=VÄ—liausia registracija -node-host=Mazgo serveris -no-registered-cluster-nodes=Nepriregistuotas nei vienas klasterio mazgas -cluster-nodes=Klasterio mazgai -add-node=PridÄ—ti mazgÄ… -active-sessions.tooltip=Å io kliento aktyvių naudotojų sesijų skaiÄius. -show-sessions=Rodyti sesijas -show-sessions.tooltip=DÄ—mesio, Å¡is veiksmas gali ilgai užtrukti priklausomai nuo aktyvių sesijų skaiÄiaus. -user=Naudotojas -from-ip=Prisijungimo IP -session-start=Sesijos pradžios laikas -first-page=Pirmas puslapis -previous-page=Atgalinis puslapis -next-page=Sekantis puslapis -client-revoke.not-before.tooltip=AtÅ¡aukti visus Å¡io kliento raktus iÅ¡duotus prieÅ¡ nurodytÄ… datÄ…. -client-revoke.push.tooltip=Kuomet nurodytas administravimo URL, taisyklÄ— perduodama klientui. -select-a-format=Formato parinkimas -download=Atsisiųsti -offline-tokens=Darbo neprisijungus raktai -offline-tokens.tooltip=Raktų skaiÄius, kurie naudojami darbui neprisijungus -show-offline-tokens=Rodyti raktus -show-offline-tokens.tooltip=DÄ—mesio, Å¡is veiksmas gali ilgai užtrukti priklausomai nuo aktyvių darbo neprisijungus sesijų skaiÄiaus. -token-issued=Rakto iÅ¡davimo laikas -last-access=VÄ—liausios prieigos laikas -last-refresh=VÄ—liausio atnaujinimo laikas -key-export=Eksportuoti raktÄ… -key-import=Importuoti raktÄ… -export-saml-key=Eksportuoti SAML raktÄ… -import-saml-key=Importuoti SAML raktÄ… -realm-certificate-alias=Srities sertifikato pseudonimas -realm-certificate-alias.tooltip=Srities sertifikato, kuris taip pat saugomas saugykloje, pseudonimas. -signing-key=PasiraÅ¡ymo raktas -saml-signing-key=SAML pasiraÅ¡ymo raktas. -private-key=Privatus raktas -generate-new-keys=Generuoti naujus raktus -export=Eksportuoti -encryption-key=Užkodavimo raktas -saml-encryption-key.tooltip=SAML užkodavimo raktas. -service-accounts=Paslaugos naudotojo profiliai -service-account.available-roles.tooltip=Å ios paslaugos paskyrai galimos priskirti srities rolÄ—s -service-account.assigned-roles.tooltip=Paslaugos paskyrai priskirtos srities rolÄ—s. -service-account-is-not-enabled-for=Kliento {{client}} paslaugos paskyra neįgalinta -create-protocol-mappers=Protokolo atitkmenų susiejimas -create-protocol-mapper=Protokolo atitkmenens susiejimas -protocol=Protokolas -protocol.tooltip=Protokolas... -id=ID -mapper.name.tooltip=Atitikmens susiejimo vardas. -mapper.consent-required.tooltip=Ar teikiant laikinÄ… prieigÄ… naudotojas privalo pateikti sutikimÄ… dÄ—l duomenų perdavimo? -consent-text=Sutikimo tekstas -consent-text.tooltip=Tekstas, kuris rodomas naudotojo sutikimo puslapyje. -mapper-type=Atitikmens tipas -mapper-type.tooltip=Atitikmens tipas -# realm identity providers -identity-providers=TapatybÄ—s teikÄ—jai -table-of-identity-providers=TapatybÄ—s teikÄ—jų sÄ…raÅ¡as -add-provider.placeholder=PridÄ—ti teikÄ—jÄ…... -provider=TeikÄ—jas -gui-order=GUI eiliÅ¡kumas -first-broker-login-flow=Pirmojo prisijungimo eiga -post-broker-login-flow=SekanÄių prisijungimų eiga -redirect-uri=Nukreipimo URI -redirect-uri.tooltip=TapatybÄ—s teikÄ—jo konfigÅ«ravimo nuoroda. -alias=Pseudonimas -display-name=Rodomas vardas -identity-provider.alias.tooltip=Pseudonimas, kuris vienareikÅ¡miÅ¡kai identifikuoja tapatybÄ—s teikÄ—jÄ… ir yra naudojamas konstruojant nukreipimo nuorodÄ…. -identity-provider.display-name.tooltip=Žmogui suprantamas, draugiÅ¡kas tapatybÄ—s teikÄ—jo pavadinimas. -identity-provider.enabled.tooltip=Ä®galinti šį tapatybÄ—s teikÄ—jÄ…. -authenticate-by-default=Autentifikuoti iÅ¡ karto -identity-provider.authenticate-by-default.tooltip=Jei įgalinta, tuomet bus bandoma autentifikuoti naudotojÄ… prieÅ¡ parodant prisijungimo langÄ…. -store-tokens=Saugoti raktus -identity-provider.store-tokens.tooltip=Jei įgalinta, tuomet po naudotojų prisijungimo, prieigos raktai bus iÅ¡saugoti. -stored-tokens-readable=Saugoti raktus skaitomame formate -identity-provider.stored-tokens-readable.tooltip=Jei įgalinta, tuomet naudotojai gali peržiÅ«rÄ—ti iÅ¡saugotus prieigos raktus. Ä®galinama broker.read-token rolÄ—. -disableUserInfo=Uždrausti naudotojo informacijos prieigÄ… -identity-provider.disableUserInfo.tooltip=Ar uždrausti prieigÄ… prie papildomos naudotojo profilio informacijos per User Info paslaugÄ…? Numatyta reikÅ¡mÄ— - naudoti Å¡iÄ… OIDC paslaugÄ…. -userIp=Naudoti userIp parametrÄ… -identity-provider.google-userIp.tooltip=Ar kvieÄiant Google naudotojo informacijos paslaugÄ… naudoti 'userIp' užklausos parametrÄ…? NustaÄius bus naudojamas naudotojo IP adresas. Nustatymas naudingas tuo atveju, jei Google ribotų užklausų kiekÅ¡ iÅ¡ vieno IP adreso. -update-profile-on-first-login=Profilio duomenų atnaujinimas pirmojo prisijungimo metu -on=On -off=Off -on-missing-info=Kuomet trÅ«ksta informacijos -update-profile-on-first-login.tooltip=Nurodykite sÄ…lygas, kuomet naudotojas privalo atnaujinti savo profilį pirmojo prisijungimo metu. -trust-email=El. paÅ¡tas patikimas -trust-email.tooltip=Jei įgalintas, tuomet Å¡io tapatybÄ—s teikÄ—jo pateiktas el. paÅ¡to adresas laikomas patikimu ir, nepaisant bendrųjų srities nustatymų, nÄ—ra papildomai tikrinamas. -gui-order.tooltip=EiliÅ¡kumÄ… GUI lange (pvz. Prisijungimo langas) nurodantis skaiÄius -first-broker-login-flow.tooltip=Autentifikacijos eigos pseudonimas, kuris bus sužadintas Å¡io tapatybÄ—s teikÄ—jo naudotojui prisijungus pirmÄ… kartÄ…. Terminas 'pirmas kartas' reiÅ¡kia, kad Keycloak sistemoje nebuvo saugomas naudotojo profilis susietas su autentifikuotu Å¡io tapatybÄ—s teikÄ—jo naudotoju. -post-broker-login-flow.tooltip=Autentifikacijos eigos pseudonimas, kuris bus sužadintas po kiekvieno prisijungimo naudojant šį tapatybÄ—s teikÄ—jÄ…. Naudingas tuomet, kai atlikti papildomus tikrinimus (pvz. OTP). Palikite tuÅ¡ÄiÄ… reikÅ¡mÄ™ jei nenorite sužadinti papildomų tikrinimų autentifikatoriumi jungiantis per šį tapatybÄ—s teikÄ—jÄ…. TurÄ—kite omenyje, kad autentifikatoriaus realizacijos turi daryti prielaidÄ…, kad ClientSession naudotojas yra tapatybÄ—s teikÄ—jo nustatytas. -openid-connect-config=OpenID prisijungimo konfigÅ«racija -openid-connect-config.tooltip=OIDC SP ir iÅ¡orinio IDP konfigÅ«racija. -authorization-url=Autorizacijos URL -authorization-url.tooltip=Autorizacijos URL adresas. -token-url=Prieigos raktų URL -token-url.tooltip=Prieigos raktų URL. -logout-url=Atsijungimo URL -identity-provider.logout-url.tooltip=Adresas, kuris turi bÅ«ti naudojamas norint atjungti naudotojÄ… nuo iÅ¡orinio tapatybÄ—s teikÄ—jo. -backchannel-logout=Foninis atjungimas -backchannel-logout.tooltip=Ar iÅ¡orinis tapatybÄ—s teikÄ—jas palaiko serveris-serveris naudotojo atjungimo bÅ«dÄ…? -user-info-url=Naudotojo informacijos URL -user-info-url.tooltip=Naudotojo informacijos URL. Neprivalomas. -identity-provider.client-id.tooltip=Kliento identifikatorius užregistruotas tapatybÄ—s teikÄ—jo sistemoje. -client-secret=Kliento slaptas kodas -show-secret=Rodysi slaptÄ… kodÄ… -hide-secret=SlÄ—pti slaptÄ… kodÄ… -client-secret.tooltip=Kliento slaptas kodas užregistruotas tapatybÄ—s teikÄ—jo sistemoje. -issuer=IÅ¡davÄ—jas -issuer.tooltip=IÅ¡davÄ—jo identifikatorius perduodamas iÅ¡davÄ—jo atsakyme. Tikrinimas nebus atliekamas jei reikÅ¡mÄ— tuÅ¡Äia. -default-scopes=Numatytosios taikymo sritys -identity-provider.default-scopes.tooltip=Taikymos sritys, kurios siunÄiamos autorizavimo užklausoje. ReikÅ¡mÄ—s turi bÅ«ti atskirtos tarpo simboliu. Numatyta reikÅ¡mÄ— - 'openid'. -prompt=Raginimas -unspecified.option=nenurodyta -none.option=jokio -consent.option=sutikimo tekstas -login.option=prisijungimas -select-account.option=paskyros pasirinkimas -prompt.tooltip=Nurodo, ar autorizacijos serveris galutinių naudotojų reikalauja pakartotinai patvirtinti sutikimÄ… ar prisijungti. -validate-signatures=ParaÅ¡o tikrinimas -identity-provider.validate-signatures.tooltip=Ä®galinamas iÅ¡orinių IDP parašų tikrinimas. -identity-provider.use-jwks-url.tooltip=Jei įgalinta, tuomet tapatybÄ—s teikÄ—jo vieÅ¡asis raktas atsiunÄiamas iÅ¡ pateiktos JWKS URL. Ä®galinimas suteikia lankstumo, nes tapatybÄ—s teikÄ—jui pergeneravus raktus jie automatiÅ¡kai atsiunÄiami. Jei Å¡i nuostata iÅ¡jungta, tuomet naudojamas Keycloak DB saugomas vieÅ¡asis raktas (arba sertifikatas) ir klientui sugeneravus naujus raktus juos rankiniu bÅ«du reikÄ—s importuoti į Keycloak DB. -identity-provider.jwks-url.tooltip=URL, kuriuo pasiekiami tapatybÄ—s teikÄ—jo JWK formatu saugomi raktai. ŽiÅ«rÄ—kite JWK specifikacijÄ… detalesnei informacijai. Jei naudojamas iÅ¡orinis Keycloak tapatybÄ—s teikÄ—jas, tuomet galite naudoti 'http://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certs' URL (pavyzdyje darome prielaida, kad Keycloak veikia 'http://broker-keycloak:8180' adresu ir naudojama 'test' sritis) -validating-public-key=VieÅ¡as raktas paraÅ¡o tikrinimui -identity-provider.validating-public-key.tooltip=PEM formato vieÅ¡asis raktas, kuris turi bÅ«ti naudojamas iÅ¡orinio IDP paraÅ¡tų tikrinimui. -import-external-idp-config=Importuoti iÅ¡orinio IDP konfigÅ«racijÄ… -import-external-idp-config.tooltip=Leidžia įkelti konfigÅ«racinÄ™ rinkmenÄ… arba nurodyti atsisiuntimo URL su iÅ¡orinio IDP metaduomenimis. -import-from-url=Importuoti iÅ¡ URL -identity-provider.import-from-url.tooltip=Importuoti metaduomenis iÅ¡ nutolusio IDP aptikimo apraÅ¡o (IDP discovery descriptor). -import-from-file=Importuoti iÅ¡ rinkmenos -identity-provider.import-from-file.tooltip=Importuoti metaduomenis iÅ¡ rinkmenos, kuriÄ… atsisiuntÄ—te iÅ¡ IDP aptikimo apraÅ¡o (IDP discovery descriptor). -saml-config=SAML konfigÅ«racija -identity-provider.saml-config.tooltip=SAML SP ir iÅ¡oriniu IDP konfigÅ«racija. -single-signon-service-url=Vieningo prisijungimo paslaugos URL -saml.single-signon-service-url.tooltip=Adresas, kuriuo turi bÅ«ti siunÄiamos autentifikacijos užklausos (SAML AuthnRequest). -single-logout-service-url=Vieningo atsijungimo paslaugos URL -saml.single-logout-service-url.tooltip=Adresas, kuriuo turi bÅ«ti siunÄiamos naudotojo atjungimo užklausos. -nameid-policy-format=NameID taisyklių formatas -nameid-policy-format.tooltip=Nurodykite URI nuorodÄ… atitinkanÄiÄ… vardo identifikatoriaus formatÄ…. Numatyta reikÅ¡mÄ— urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -http-post-binding-response=Siųsti atsakymus HTTP-POST -http-post-binding-response.tooltip=Jei įgalinta, tuomet atsakymai siunÄiami HTTP-POST saistymu. Kitu atveju bus naudojamas HTTP-REDIRECT. -http-post-binding-for-authn-request=Siųsti AuthnRequest HTTP-POST -http-post-binding-for-authn-request.tooltip=Jei įgalinta, tuomet AuthnRequest siunÄiami HTTP-POST saistymu. Kitu atveju bus naudojamas HTTP-REDIRECT. -want-authn-requests-signed=Reikalaujami pasiraÅ¡ytų AuthnRequests -want-authn-requests-signed.tooltip=Nurodykite, ar tapatybÄ—s teikÄ—jas tikisi pasiraÅ¡ytų AuthnRequest užklausų. -force-authentication=PriverstinÄ— autentifikacija -identity-provider.force-authentication.tooltip=Jei įgalinta, tuomet tapatybÄ—s teikÄ—jas privalo autentifikuoti naudotojÄ… iÅ¡ naujo nepasitikint ankstesniu prisijungimu. -validate-signature=ParaÅ¡o tikrinimas -saml.validate-signature.tooltip=Ä®jungti/iÅ¡jungti SAML atsakymų paraÅ¡o tikrinimÄ…. -validating-x509-certificate=X509 sertifikatai tikrinimui -validating-x509-certificate.tooltip=PEM formato sertifikatai, kurie turi bÅ«ti naudojami parašų tikrinimui. ReikÅ¡mÄ—s skiriamos kableliais (,). -saml.import-from-url.tooltip=Importuoti metaduomenis iÅ¡ nutolusio IDP SAML subjekto apraÅ¡o. -social.client-id.tooltip=Kliento identifikatorius užregistruotas tapatybÄ—s teikÄ—jo sistemoje. -social.client-secret.tooltip=Kliento saugos kodas užregistruotas tapatybÄ—s teikÄ—jo sistemoje. -social.default-scopes.tooltip=Autorizacijos metu siunÄiamos taikymo sritys. Galimų reikÅ¡mių sÄ…raÅ¡o, skirtuko ir numatytos reikÅ¡mÄ—s ieÅ¡kokite tapatybÄ—s teikÄ—jo sistemos dokumentacijoje.. -key=Raktas -stackoverflow.key.tooltip=Stack Overflow kliento registracijos metu gautas raktas. - -# User federation -sync-ldap-roles-to-keycloak=Sinchronizuoti LDAP roles į Keycloak -sync-keycloak-roles-to-ldap=Sinchronizuoti Keycloak roles į LDAP -sync-ldap-groups-to-keycloak=Sinchronizuoti LDAP grupes į Keycloak -sync-keycloak-groups-to-ldap=Sinchronizuoti Keycloak grupes į LDAP - -realms=Sritys -realm=Sritis - -identity-provider-mappers=TapatybÄ—s teikÄ—jo atitikmenų susiejimai -create-identity-provider-mapper=Sukurti tapatybÄ—s teikÄ—jo atitikmens susiejimÄ… -add-identity-provider-mapper=PridÄ—ti tapatybÄ—s teikÄ—jo atitikmens susiejimÄ… -client.description.tooltip=Nurodomas kliento apraÅ¡as. Pavyzdžiui 'Mano laiko lentelių klientas'. Palaikomos lokalizuotos reikÅ¡mÄ—s. Pavyzdžiui\: ${my_client_description} - -expires=Galioja iki -expiration=Galiojimas -expiration.tooltip=Nurodykite kiek laiko galios prieigos raktas -count=Kiekis -count.tooltip=Nurodykite kiek klientų gali bÅ«ti sukurti naudojant prieigos raktÄ… -remainingCount=LikÄ™s kiekis -created=Sukurta -back=Atgal -initial-access-tokens=Pradiniai prieigos raktai -initial-access-tokens.tooltip=Pradiniai prieigos raktai naudojami klientų registracijoms dinaminiu bÅ«du. Užklausos su Å¡iais raktais gali bÅ«ti siunÄiami iÅ¡ bet kurio serverio. -add-initial-access-tokens=PridÄ—ti pradinį prieigos raktÄ… -initial-access-token=Pradinis prieigos raktas -initial-access.copyPaste.tooltip=Nukopijuokite ir įklijuokite prieigos raktÄ… prieÅ¡ iÅ¡eidami iÅ¡ Å¡io puslapio. VÄ—liau negalÄ—site kopijuoti Å¡ių prieigos raktų. -continue=TÄ™sti -initial-access-token.confirm.title=Kopijuoti pradinius prieigos raktus -initial-access-token.confirm.text=PraÅ¡ome įsitikinti, kad nusikopijavote pradinius prieigos raktus nes vÄ—liau prie raktų nebegalÄ—site prieiti -no-initial-access-available=NÄ—ra galimų pradinių prieigos rakšų - -client-reg-policies=Klientų registravimo taisyklÄ—s -client-reg-policy.name.tooltip=TaisyklÄ—s rodomas pavadinimas -anonymous-policies=AnoniminÄ—s prieigos taisyklÄ—s -anonymous-policies.tooltip=Å ios taisyklÄ—s naudojamos tuomet, kai klientų registravimo paslauga iÅ¡kvieÄiama neautentifikuota užklausa. T.y. užklausa neturi nei pradinių prieigos raktų (Initial Access Token) nei prieigos raktų (Bearer Token). -auth-policies=Autentifikuotos prieigos taisyklÄ—s -auth-policies.tooltip=Å ios taisyklÄ—s naudojamos tuomet, kai klientų registravimo paslauga iÅ¡kvieÄiama autentifikuota užklausa. T.y. užklausa turi pradinių prieigos raktų (Initial Access Token) arba prieigos raktų (Bearer Token). -policy-name=TaisyklÄ—s pavadinimas -no-client-reg-policies-configured=NÄ—ra klientų registravimo taisyklių -trusted-hosts.label=Patikimi serveriai -trusted-hosts.tooltip=Serverių sÄ…raÅ¡as, kuriems suteikiama teisÄ— kviesti klientų registravimo paslaugÄ… (Client Registration Service) ir/arba naudototi Å¡ias reikÅ¡mes klientų URI parametre (Client URI). Galima naudoti serverių vardus arba IP adresus. Jei kaip pirmas simbolis naudojamas iÅ¡pleÄiantis simbolis (pvz '*.example.com') tuomet visas domenas 'example.com' bus patikimas. -host-sending-registration-request-must-match.label=Klientų registracijos paslaugos naudotojo serverio vardas turi sutapti -host-sending-registration-request-must-match.tooltip=Jei Å¡galinta, tuomet visos klientų registravimo užklausos leidžiamos tik tuo atveju, jei jos buvo iÅ¡siųstos iÅ¡ to paÄio patikimo serverio ar domeno. -client-uris-must-match.label=Klientų URI turi sutapti -client-uris-must-match.tooltip=Jei įgalinta, tuomet visos klientų nuorodos (nukreipimo nuorodos ir kitos) leidžiamos tik tuo atveju, jei jos sutampa su patikimu serverio vardu arba domenu. -allowed-protocol-mappers.label=Leidžiami protokolo atitikmenų parinkÄ—jai -allowed-protocol-mappers.tooltip=Nurodykite visus leidžiamus protokolo atitikmenų parinkÄ—jus. Jei bandoma registruoti klientÄ…, kuris turi protokolo atitikmenų parinkÄ—jÄ… neÅ¡trauktÄ… Å¡ leidžiamų sÄ…raÅ¡Ä…, tuomet visa registracijos užklausa bus atmesta. -consent-required-for-all-mappers.label=Privalomas visų atitikmenų parinkÄ—jų pritarimas -consent-required-for-all-mappers.label=Consent Required For Mappers -consent-required-for-all-mappers.tooltip=Jei įgalinta, tuomet visi naujai užregistruotiems protokolo parinkÄ—jams automatiÅ¡kai įgalinama consentRequired opcija. Tai reiÅ¡kia, kad naudotojas privalo pateikti patvirtinimÄ…. PASTABA: Patvirtinimo ekranas rodomas tik tiems klientams, kuriems įjungtas consentRequired nustatymas. Dažniausiai geriausia nustatyti Å¡iÄ… nuostatÄ… kartu su consent-required taisykle. -allowed-client-templates.label=Leidžiami klientų Å¡ablonai -allowed-client-templates.tooltip=Leidžiamų kliento Å¡ablonų sÄ…raÅ¡as, kuriuos galima naudoti naujai registruojamiems klientams. Bandant registruoti klientÄ… naudojant kliento Å¡ablonÄ…, kurio nÄ—ra sÄ…raÅ¡e bus atmestas. PradinÄ— reikÅ¡mÄ— - tuÅ¡Äias sÄ…raÅ¡as, t.y. neleidžiamas nei vienas kliento Å¡ablonas. -max-clients.label=Mksimalus srities klientų skaiÄius -max-clients.tooltip=Naujų klientų registracija draudžiama, jei užregistruotų klientų skaiÄius yra toks pats arba didesnis nei nustatytas limitas. - -client-scopes=Klientų Å¡ablonai -client-scopes.tooltip=Klientų Å¡ablonai leidžia nurodyti bendrÄ… visų klientų konfigÅ«racijÄ… - -groups=GrupÄ—s - -group.add-selected.tooltip=Grupei galimos priskirti srities rolÄ—s. -group.assigned-roles.tooltip=Su Å¡ia grupe susietos srities roles -group.effective-roles.tooltip=Visos srities susietos rolÄ—s. Å iame sÄ…raÅ¡e taip pat rodomos visos rolÄ—s, kurios priskirtos sudÄ—tinÄ—ms rolÄ—ms. -group.available-roles.tooltip=Å io kliento galimos susieti rolÄ—s. -group.assigned-roles-client.tooltip=Susietos Å¡io kliento rolÄ—s. -group.effective-roles-client.tooltip=Visos Å¡io kliento susietos rolÄ—s. Å iame sÄ…raÅ¡e taip pat rodomos visos rolÄ—s, kurios priskirtos sudÄ—tinÄ—ms rolÄ—ms. - -default-roles=Numatytosios rolÄ—s -no-realm-roles-available=Sritis neturi rolių - -users=Naudotojai -user.add-selected.tooltip=Naudotojui galimos priskirti srities rolÄ—s. -user.assigned-roles.tooltip=Su Å¡iuo naudotoju susietos srities rolÄ—s -user.effective-roles.tooltip=Visos srities susietos rolÄ—s. Å iame sÄ…raÅ¡e taip pat rodomos visos rolÄ—s, kurios priskirtos sudÄ—tinÄ—ms rolÄ—ms. -user.available-roles.tooltip=Å io kliento galimos susieti rolÄ—s. -user.assigned-roles-client.tooltip=Susietos Å¡io kliento rolÄ—s. -user.effective-roles-client.tooltip=Visos Å¡io kliento susietos rolÄ—s. Å iame sÄ…raÅ¡e taip pat rodomos visos rolÄ—s, kurios priskirtos sudÄ—tinÄ—ms rolÄ—ms. -default.available-roles.tooltip=Galimos priskirti srities rolÄ—s. -realm-default-roles=Numatytosios srities rolÄ—s -realm-default-roles.tooltip=Srities rolÄ—s, kurios automatiÅ¡kai priskiriamos naujiems naudotojams. -default.available-roles-client.tooltip=Å io kliento rolÄ—s, kurios automatiÅ¡kai gali bÅ«ti priskiriamos naudotojams. -client-default-roles=Numatytosios kliento rolÄ—s -client-default-roles.tooltip=Kliento rolÄ—s, kurios automatiÅ¡kai priskiriamos naujiems naudotojams. -composite.available-roles.tooltip=Srities rolÄ—s, kurias galima susieti su Å¡ia sudÄ—tine role. -composite.associated-roles.tooltip=Srities rolÄ—s, kurios susietos su Å¡ia sudÄ—tine role. -composite.available-roles-client.tooltip=Kliento rolÄ—s, kurias galima susieti su Å¡ia sudÄ—tine role. -composite.associated-roles-client.tooltip=Kliento rolÄ—s, kurios susietos su Å¡ia sudÄ—tine role. -partial-import=Dalinis duomenų importavimas -partial-import.tooltip=Dalinis duomenų importavimas leidžia įkelti prieÅ¡ tai eksportuotÄ… JSON rinkmenÄ… su naudotojais, klientais ir kitais resursais. - -file=Rinkmena -exported-json-file=Eksportuota JSON rinkmena -import-from-realm=Ä®kelti iÅ¡ srities -import-users=Ä®kelti naudotojus -import-groups=Ä®kelti grupes -import-clients=Ä®kelti klientus -import-identity-providers=Ä®kelti tapatybÄ—s teikÄ—jus -import-realm-roles=Ä®kelti srities roles -import-client-roles=Ä®kelti klientų roles -if-resource-exists=Jei resursas egzistuoja -fail=Nevykdyti -skip=Praleisti -overwrite=PerraÅ¡yti -if-resource-exists.tooltip=Nurodykite kÄ… daryti kuomet bandoma įkelti jau egzistuojantį resursÄ…. - -action=Veiksmas -role-selector=Rolių parinkimas -realm-roles.tooltip=Srities rolÄ—s, kurias galima pasirinkti. - -select-a-role=Pasirinkti rolÄ™ -select-realm-role=Pasirinkti srities rolÄ™ -client-roles.tooltip=Kliento rolÄ—s, kurias galite pažymÄ—ti. -select-client-role=Pasirinkti kliento rolÄ™ - -client-template=Kliento Å¡ablonas -client-template.tooltip=Kliento Å¡ablonas, iÅ¡ kurio paveldima konfigÅ«racija -client-saml-endpoint=Kliento SAML adresas -add-client-scope=Kliento Å¡ablono kÅ«rimas - -manage=Valdyti -authentication=Autentifikavimas -user-federation=Naudotojų federavimas -user-storage=Naudotojų saugykla -events=Ä®vykiai -realm-settings=Srities nustatymai -configure=KonfigÅ«ruoti -select-realm=Pasirinkite sritį -add=PridÄ—ti - -client-scope.name.tooltip=Kliento Å¡ablono pavadinimas. Privalo bÅ«ti unikalus Å¡ioje srityje -client-scope.description.tooltip=Kliento Å¡ablono apraÅ¡ymas -client-scope.protocol.tooltip=Kurio SSO protokolo konfigÅ«racija teikia Å¡is Å¡ablonas - -add-user-federation-provider=PridÄ—ti naudotojų federacijos teikÄ—ja -required-settings=Privalomi nustatymai -provider-id=TeikÄ—jo ID -console-display-name=KonsolÄ—je rodomas pavadinimas -console-display-name.tooltip=Administravimo konsolÄ—je rodomas teikÄ—jo pavadinimas. -priority=Prioritetas -priority.tooltip=SkaiÄius nurodantis naudotojo paieÅ¡kos Å¡iame federacijos teikÄ—juje prioritetÄ…. Pirmiausia imama su mažesniu skaiÄiumi. -sync-settings=Sinchronizuoti nustatymus -periodic-full-sync=Pilnas periodinis sinchronizavimas -periodic-full-sync.tooltip=Ar turi bÅ«ti atliekamas periodinis pilnas teikÄ—jo naudotojų sinchronizavimas į Keycloak? -full-sync-period=Pilno sinchronizavimo intervalas -full-sync-period.tooltip=Laikas sekundÄ—mis, kas kurį atliekamas pilnas naudotojų sinchronizavimas į Keycloak sistemÄ… -periodic-changed-users-sync=Periodinis pakeitimų sinchronizavimas -periodic-changed-users-sync.tooltip=Ar turi bÅ«ti atliekamas naujai užregistruotų naudotojų ar naudotojų su redaguotais profilio duomenimis periodinis sinchronizavimas į Keycloak? -changed-users-sync-period=Periodinis sinchronizavimo intervalas -changed-users-sync-period.tooltip=Laikas sekundÄ—mis, kas kurį atliekamas naujai užregistruotų naudotojų ar naudotojų su redaguotais profilio duomenimis sinchronizavimas į Keycloak -synchronize-changed-users=Sinchronizuoti naudotojų pakeitimus -synchronize-all-users=Sinchronizuoti visus naudotojus -kerberos-realm=Kerberos sritis -kerberos-realm.tooltip=Kerberos srities pavadinimas. Pavyzdžiui FOO.ORG -server-principal=Pagrindinis serveris -server-principal.tooltip=Pilnas HTTP paslaugai skirtas pagrindinio serverio su domenu pavadinimas. Pavyzdžiui HTTP/host.foo.org@FOO.ORG -keytab=KeyTab -keytab.tooltip=Kelias iki Kerberos KeyTab rinkmenos talpinanÄios prisijungimo prie pagrindinio serverio duomenis. Pavyzdžiui /etc/krb5.keytab -debug=Derinti -debug.tooltip=Ar įgalinti Krb5LoginModule veikimo praneÅ¡imų raÅ¡ymÄ… į standarinÄ™ iÅ¡vestį derinimo rėžimu? -allow-password-authentication=Leisti autentifikacijÄ… naudojant slaptažodį -allow-password-authentication.tooltip=Ar suteikti galimybÄ™ naudotojui prisijungti prie Kerberos naudojant naudotojo vardÄ… ir slaptažodį? -edit-mode=Pakeitimų rėžimas -edit-mode.tooltip=READ_ONLY reiÅ¡kia, kad naudotojui neleidžiama keisti slaptažodžio ir autentifikacija visuomet bus atliekama Kerberos. UNSYNCED reiÅ¡kia, kad naudotojui leidžiama keisti slaptažodį saugomÄ… Keycloak duomenų bazÄ—je ir kuris bus naudojamas autentifikacijos metu vietoj Kerberos slaptažodžio. -ldap.edit-mode.tooltip=READ_ONLY reiÅ¡kia, kad LDAP saugykla bus naudojama vien tik skaitymo rėžimu. WRITABLE reiÅ¡kia, kad duomenys sinchronizuojami atgal į LDAP pagal poreikį. UNSYNCED reiÅ¡kia, kad naudotojų duomenys bus importuoti, taÄiau niekuomet nesinchronizuojami atgal į LDAP. -update-profile-first-login=Pirmojo prisijungimo metu atnaujinti duomenis -update-profile-first-login.tooltip=Pirmojo prisijungimo metu atnaujinti naudotojo profilio duomenis -sync-registrations=Sinchronizuoti registracijas -ldap.sync-registrations.tooltip=Ar naujai užsiregistravÄ™ naudotojai turÄ—tų bÅ«ti sinchonizuojami į LDAP saugyklÄ…? Federavimo teikÄ—jas, į kurį sinchronizuojami nauji naudotojai, parenkamas pagal prioritetÄ…. Pirmiausia imami su mažiausiu skaiÄiumi. -vendor=Gamintojas -ldap.vendor.tooltip=LDAP gamintojas (teikÄ—jas) -username-ldap-attribute=Prisijungimo vardo LDAP atributas -ldap-attribute-name-for-username=LDAP atributo pavadinimas, kuriame saugomas naudotojo prisijungimo vardas -username-ldap-attribute.tooltip=LDAP atributas, kuris turi bÅ«ti susietas su Keycloak naudotojo prisijungimo vardu. Su daugeliu LDAP serverių gali bÅ«ti naudojamas 'uid' atributas. ActiveDirectory gali bÅ«ti 'sAMAccountName' arba 'cn'. Reikalaujama, kad nurodytas LDAP atributas bÅ«tų užpildytas visiems naudotojams kurie importuojami iÅ¡ LDAP į Keycloak. -rdn-ldap-attribute=RDN LDAP atributas -ldap-attribute-name-for-user-rdn=LDAP atributo pavadinimas, kuriame saugomas naudotojo RDN -rdn-ldap-attribute.tooltip=LDAP atributas, kuris naudojamas kaip RDN (Relative Distinguished Name) vietoj tipinio naudotojo DN (Distinguished Name). Dažniausiai reikÅ¡mÄ— sutampa su prisijungimo vardo LDAP atributu, taÄiau pastarasis nÄ—ra privalomas. Pavyzdžiui ActiveDirectory dažniausiai kaip RDN atributas naudojamas 'cn' nors prisijungimo vardo atributas bÅ«na 'sAMAccountName'. -uuid-ldap-attribute=UUID LDAP atributas -ldap-attribute-name-for-uuid=LDAP atributo pavadinimas, kuriame saugomas UUID -uuid-ldap-attribute.tooltip=LDAP atributas, kuris naudojamas kaip unikalus LDAP objektų identifikatorius (UUID). Daugelis LDAP serverių naudoja 'entryUUID', taÄiau pasitaiko ir iÅ¡imÄių. Pavyzdžiui ActiveDirectory naudojamas 'objectGUID' atributas. Jei jÅ«sų LDAP serveris nepalaiko UUID atributų, tuomet galite naudoti bet kurį kitÄ… atributÄ… kuris užtikrina LDAP naudotojų unikalumÄ…. Pavyzdžiui 'uid' arba 'entryDN'. -user-object-classes=Naudotojų objektų klasÄ—s -ldap-user-object-classes.placeholder=LDAP naudotojų objektų klasÄ—s (skiriamos kableliu) -ldap.user-object-classes.tooltip=LDAP atributo objectClass atskirtos kableliu reikÅ¡mÄ—s skirtos LDAP naudotojo objektui. Pavyzdžiui: 'inetOrgPerson, organizationalPerson' . Naujai registruoti Keycloak naudotojai bus įraÅ¡yti Å¡ LDAP su visomis nurodytomis objektų klasÄ—mis. Egzistuojantys LDAP naudotojų objektai randami tik tuomet, kai jie turi visas Å¡ias nurodytas objekto klases. - -ldap-connection-url=LDAP jungties URL -ldap-users-dn=LDAP naudotojų DN -ldap-bind-dn=LDAP prisijungimo DN -ldap-bind-credentials=LDAP prisijungimo slaptažodis -ldap-filter=LDAP filtras - -connection-url=Jungties URL -ldap.connection-url.tooltip=Jungties į LDAP serverį URL -test-connection=Tikrinti jungtį -users-dn=Naudotojų DN -ldap.users-dn.tooltip=Å akninÄ— LDAP medžio DN (Distinguished Name) kuriame saugomi naudotojai. Jei pavyzdžiui tipinio naudotojo DN yra 'uid=john,ou=users,dc=example,dc=com' tuomet Å¡io atributo reikÅ¡mÄ— turÄ—tų bÅ«ti 'ou=users,dc=example,dc=com' -authentication-type=Autentifikacijos tipas -ldap.authentication-type.tooltip=LDAP autentifikacijos tipas. Galimi 'none' (anoniminÄ— LDAP prieiga) arba 'simple' (Prisijungimo DN + slaptažodis autentifikacijai) autentifikacijos bÅ«dai -bind-dn=Prisijungimo DN -ldap.bind-dn.tooltip=LDAP administratoriaus DN (Distinguished Name), kuris turi bÅ«ti naudojamas Keycloak prieiti prie LDAP serverio -bind-credential=Prisijungimo slaptažodis -ldap.bind-credential.tooltip=LDAP administratoriaus slaptažodis -test-authentication=Tikrinti autentifikacijÄ… -custom-user-ldap-filter=Papildomas naudotojų LDAP filtras -ldap.custom-user-ldap-filter.tooltip=Papildomas LDAP filtras, kuris turi bÅ«ti naudojamas surastų naudotojų nufiltravimui. Palikite tuÅ¡ÄiÄ… laukÄ… jei papildomas filtravimas nereikalingas. Ä®sitikinkite, kad filtras prasideda '(' ir baigiasi ')' simboliais -search-scope=PaieÅ¡kos apimtis -ldap.search-scope.tooltip=Jei pasirinkta vieno lygio paieÅ¡ka, tuomet naudotojų ieÅ¡koma vien tik nurodytame naudotojų DN. Kai pasirinkta paieÅ¡ka medyje, tuomet naudotojų ieÅ¡koma visose medžio Å¡akose. IÅ¡samesnÄ—s informacijos ieÅ¡kokite LDAP dokumentacijÄ… -use-truststore-spi=Naudoti raktų saugyklos SPI -ldap.use-truststore-spi.tooltip=Nurodykite, kuomet LDAP jungtis naudos standalone.xml/domain.xml sukonfigÅ«ruotÄ… patikimų liudijimų/raktų saugyklos SPI. 'Visada' reiÅ¡kia, kad bus naudojama visada. 'Niekada' reiÅ¡kia, kad sukonfigÅ«ruota liudijimų saugykla nebus naudojama. 'Tik LDAP' reiÅ¡kia, kad saugykla bus naudojama tik su LDAP jungtimis. Pastaba: jei standalone.xml/domain.xml nesukonfigÅ«ruotas, tuomet bus naudojama standartinÄ— Java cacerts arba 'javax.net.ssl.trustStore' parametre nurodyta liudijimų saugykla. -connection-pooling=JungÄių buferizavimas -ldap.connection-pooling.tooltip=Ar Keycloak turÄ—tų naudoti jungÄių telkinį jungiantis prie LDAP serverio? -ldap.pagination.tooltip=Ar LDAP serveris palaiko puslapiavimÄ…? -kerberos-integration=Kerberos intergacija -allow-kerberos-authentication=Leisti Kerberos autentifikacijÄ… -ldap.allow-kerberos-authentication.tooltip=Ä®galina HTTP naudotojų autentifikacijÄ… naudojant SPNEGO/Kerberos raktus. Duomenys apie prisijungusį naudotojÄ… bus teikiama Å¡io LDAP serverio -use-kerberos-for-password-authentication=Naudoti Kerberos autentifikacijai su slaptažodžiu -ldap.use-kerberos-for-password-authentication.tooltip=Ar jungiantis su naudotojo vardu ir slaptažodžiu naudoti Kerberos serverį vietoj LDAP serverio Directory Service API -batch-size=Paketo dydis -ldap.batch-size.tooltip=Vienos tranzacijos metu į Keycloak importuojamų LDAP naudotojų skaiÄius. -ldap.periodic-full-sync.tooltip=Ar įgalinti periodinÄ™ pilnÄ… LDAP naudotojų sinchronizacijÄ… į Keycloak? -ldap.periodic-changed-users-sync.tooltip=Ar įgalinti periodinÄ™ naujai registruotų arba su pakeistais duomenimis LDAP naudotojų sinchronizacijÄ… į Keycloak? -ldap.changed-users-sync-period.tooltip=Intervalas sekundÄ—mis, kas kurį atliekamas periodinis naujai registruotų arba su pakeistais duomenimis LDAP naudotojų sinchronizavimas į Keycloak -user-federation-mappers=Federuoto naudotojo atributų atitikmenys -create-user-federation-mapper=Sukurti federuoto naudotojo atributo atitikmenį -add-user-federation-mapper=PridÄ—ti federuoto naudotojo atributo atitikmenį -provider-name=TeikÄ—jo pavadinimas -no-user-federation-providers-configured=NesukonfigÅ«ruotas nei vienas naudotojų federacijos teikÄ—jas -no-user-storage-providers-configured=NesukonfigÅ«ruota nei viena naudotojų saugykla -add-identity-provider=PridÄ—ti tapatybÄ—s teikÄ—jÄ… -add-identity-provider-link=PridÄ—ti sÄ…sajÄ… su tapatybÄ—s teikÄ—ju -identity-provider=TapatybÄ—s teikÄ—jas -identity-provider-user-id=TapatybÄ—s teikÄ—jo naudotojo ID -identity-provider-user-id.tooltip=Unikalus, tapatybÄ—s teikÄ—jo saugomas, naudotojo ID -identity-provider-username=TapatybÄ—s teikÄ—jo naudotojo vardas -identity-provider-username.tooltip=TapatybÄ—s teikÄ—jo sistemoje saugomas naudotojo vardas -pagination=Puslapiavimas - -browser-flow=Autentifikacijos seka -browser-flow.tooltip=Pasirinkite autentifikacijos narÅ¡yklÄ—je sekÄ… -registration-flow=Registracijos seka -registration-flow.tooltip=Pasirinkite registracijos narÅ¡yklÄ—je sekÄ…. -direct-grant-flow=Tiesioginių teisių seka -direct-grant-flow.tooltip=Pasirinkite tiesioginių teisių sekÄ… (direct grant authentication). -reset-credentials=Prisijungimo duomenų atkÅ«rimo seka -reset-credentials.tooltip=Pasirinkite prisijungimo duomenų priminimo narÅ¡yklÄ—je sekÄ… -client-authentication=Klientų autentifikacijos seka -client-authentication.tooltip=Pasirinkite klientų autentifikacijos sekÄ…. -new=Naujas -copy=Kopijuoti -add-execution=PridÄ—ti iÅ¡imtį -add-flow=PridÄ—ti sekÄ… -auth-type=Autentifikacijos tipas -requirement=Privalomumas -config=KonfigÅ«ruoti -no-executions-available=NÄ—ra sukonfigÅ«ruotų iÅ¡imÄių -authentication-flows=Autentifikacijos sekos -create-authenticator-config=Sukurti autentifikatoriaus konfigÅ«racijÄ… -authenticator.alias.tooltip=KonfigÅ«racijos pavadinimas -otp-type=OTP tipas -time-based=Paremtas laiku -counter-based=Paremtas skaitliuku -otp-type.tooltip='totp' paremtas ribotÄ… laikÄ… galiojanÄiu vienkartiniu slaptažodžiu. 'hotp' - ribotÄ… kartų galiojanÄiu vienkartiniu slaptažodžiu. -otp-hash-algorithm=OTP maiÅ¡os algoritmas -otp-hash-algorithm.tooltip=Kuris maiÅ¡os algoritmas turi bÅ«ti naudojamas OTP generavimui. -number-of-digits=Skaitmenų skaiÄius -otp.number-of-digits.tooltip=Kiek OTP turÄ—tų turÄ—ti skaitmenų? -look-ahead-window=Neatitikimo langas -otp.look-ahead-window.tooltip=Koks intervalas yra leidžiamas tuo atveju, kai prieigos raktų generatoriaus ir serverio laikai arba skaitliukai nesutampa. -initial-counter=PradinÄ— skaitliuko reikÅ¡mÄ— -otp.initial-counter.tooltip=Kokia turi bÅ«ti pradinÄ— skaitliuko reikÅ¡mÄ—? -otp-token-period=OTP rakto galiojimo intervalas -otp-token-period.tooltip=Kiek sekundžiu galios OTP prieigos raktas? Numatyta reikÅ¡mÄ— 30 sekundžių. -table-of-password-policies=Slaptažodžio taisyklių lentelÄ— -add-policy.placeholder=PridÄ—ti taisyklÄ™... -policy-type=TaisyklÄ—s tipas -policy-value=TaisyklÄ—s reikÅ¡mÄ— -admin-events=Administravimo įvykiai -admin-events.tooltip=Rodomi srities administravimo įvykiai susijÄ™ su administratoriaus paskyra, pvz. srities kÅ«rimas. Pasirinkite konfigÅ«ravimo skiltį norÄ—dami kad įvykiai bÅ«tų saugomi. -login-events=Prisijungimo įvykiai -filter=Filtruoti -update=Atnaujinti -reset=IÅ¡valyti -resource-types=Resurso tipas -operation-types=Veiksmas -select-operations.placeholder=Pasirinkite veiksmus... -resource-path=Resurso kelias -resource-path.tooltip=Filtravimas pagal resurso keliÄ…. Palaikomas pakaitos simbolis '*' atitinkantis vienÄ… kelio elementÄ… ir '**' daugiau nei vienÄ… elementÄ…. Pavyzdžiui 'realms/*/clients/asbc' visose sritise randa klientÄ… su identifikatoriumi 'asbc'. Kitas pavyzdys 'realms/master/**' randa visus veiksmus 'master' srityje. -date-(from)=Data (Nuo) -date-(to)=Data (Iki) -authentication-details=Autentifikacijos informacija -ip-address=IP adresas -time=Laikas -operation-type=Veiksmo tipas -auth=Autentifikacijos informacija -representation=Reprezentacija -register=Registracijos -required-action=Privalomi veiksmai -default-action=Numatytas veiksmas -auth.default-action.tooltip=Jei įgalintas, tuomet visi nauji naudotojai privalÄ—s atlikti pažymÄ—tus veiksmus. -no-required-actions-configured=NÄ—ra nei vieno sukonfigÅ«ruoto privalomo veiksmo -defaults-to-id=Nenurodžius bus naudojamas identifikatorius -flows=Sekos -bindings=SÄ…ryÅ¡iai -required-actions=Privalomi veiksmai -password-policy=Slaptažodžių taisyklÄ—s -otp-policy=OTP taisyklÄ—s -user-groups=Naudotojų grupÄ—s -default-groups=Numatytos grupÄ—s -groups.default-groups.tooltip=Nurodykite grupes, į kurias automatiÅ¡kai įtraukiami nauji naudotojai. -cut=IÅ¡kirpti -paste=Ä®klijuoti - -create-group=Sukurti grupÄ™ -create-authenticator-execution=Sukurti autentifikatoriaus veiksmo vykdymÄ… -create-form-action-execution=Sukurti formos veiksmo vykdymÄ… -create-top-level-form=Sukurti aukÅ¡Äiausio lygio formÄ… -flow.alias.tooltip=Ä®raÅ¡ykite sekos rodomÄ… pavadinimÄ…. -top-level-flow-type=AukÅ¡Äiausio lygio sekos tipas -flow.generic=generic -flow.client=client -top-level-flow-type.tooltip=Kokio tipo Å¡i aukÅ¡Äiausio lygio sritis? 'client' tipas naudojamas klientų (programų) autentifikacijai. 'generic' naudojamas visais kitais atvejais. -create-execution-flow=Sukurti vykdymo sekÄ… -flow-type=Sekos tipas -flow.form.type=form -flow-type.tooltip=Kokios rÅ«Å¡ies Å¡i forma? -form-provider=Formos teikÄ—jas -default-groups.tooltip=Naujai sukurti ar užregistruoti naudotojai automatiÅ¡kai priskiriami Å¡ioms grupÄ—ms -select-a-type.placeholder=pasirinkite tipÄ… -available-groups=Galimos grupÄ—s -available-groups.tooltip=Nurodykite grupÄ™, kuri bus numatytoji. -value=ReikÅ¡mÄ— -table-of-group-members=GrupÄ—s narių lentelÄ— -last-name=PavardÄ— -first-name=Vardas -email=El. paÅ¡tas -toggle-navigation=Perjungti navigacijÄ… -manage-account=Valdyti paskyrÄ… -sign-out=Atsijungti -server-info=Serverio informacija -resource-not-found=Resuras nerastas... -resource-not-found.instruction=Negalime rasti jÅ«sų ieÅ¡komo resurso. Ä®sitikinkite, kad įvedÄ—te teisingÄ… URL. -go-to-the-home-page=Eiti į pradinį puslapį » -page-not-found=Puslapis nerastas... -page-not-found.instruction=Negalime rasti jÅ«sų ieÅ¡komo puslapio. Ä®sitikinkite, kad įvedÄ—te teisingÄ… URL. -events.tooltip=Rodomi srities iÅ¡saugoti įvykiai. Rodomi įvykiai susijÄ™ su naudotojų paskyromis, pavyzdžiui naudotojo prisijungimas. NorÄ—dami keisti nustatymus pasirinkite 'KonfigÅ«ruoti' -select-event-types.placeholder=Pasirinkite įvykiu tipus... -events-config.tooltip=Rodoma naudotojų ir administravimo įvykių konfigÅ«racija. -select-an-action.placeholder=Pasirinkite veiksmÄ…... -event-listeners.tooltip=Nurodykite srities įvykių gavÄ—jus. -login.save-events.tooltip=Jei įgalinta, tuomet su prisijungimu susijÄ™ veiksmai saugomi duomenų bazÄ—je ir tampa prieinami per administravimo bei naudotojo paskyros valdymo skydus. -clear-events.tooltip=IÅ¡trinti visus įvykius iÅ¡ duomenų bazÄ—s. -events.expiration.tooltip=Nustato įvykių galiojimo laikÄ…. Nebegaliojantys įvykiai periodiÅ¡kai iÅ¡trinami iÅ¡ duomenų bazÄ—s. -admin-events-settings=Administravimo veiksmų nustatymai -save-events=Saugoti įvykius -admin.save-events.tooltip=Jei įgalinta, tuomet administravimo veiksmai saugomi duomenų bazÄ—je ir tampa prieinami per administravimo valdymo skydÄ…. -saved-types.tooltip=Nurodykite veiksmų tipus, kurie turÄ—tų bÅ«ti iÅ¡saugoti. -include-representation=IÅ¡saugoti reprezentacijÄ… -include-representation.tooltip=IÅ¡saugoti kurÅ«mo ir redagavimo užklausų JSON reprezentacijÄ…. -clear-admin-events.tooltip=IÅ¡trina visus su administravimu susijusius veiksmus iÅ¡ duomenų bazÄ—s. -server-version=Serverio versija -server-profile=Serverio profilis -info=Informacija -providers=TeikÄ—jai -server-time=Serverio laikas -server-uptime=Serverio veikimo laikas -memory=Atmintis -total-memory=Viso atminties -free-memory=Laisva atmintis -used-memory=Naudojama atmintis -system=Sistema -current-working-directory=Darbinis katalogas -java-version=Java Version -java-vendor=Java Vendor -java-runtime=Java Runtime -java-vm=Java VM -java-vm-version=Java VM Version -java-home=Java Home -user-name=User Name -user-timezone=User Timezone -user-locale=User Locale -system-encoding=System Encoding -operating-system=Operating System -os-architecture=OS Architecture -spi=SPI -granted-roles=Suteiktos rolÄ—s -granted-protocol-mappers=Suteiktos protokolo atitikmenų sÄ…sajos -additional-grants=Papildomai suteikta -consent-created-date=Sukurta -consent-last-updated-date=Pask. kartÄ… atnaujinta -revoke=AtÅ¡aukti -new-password=Naujas slaptažodis -password-confirmation=Pakartotas slaptažodis -reset-password=Pakeisti slaptažodį -credentials.temporary.tooltip=Jei įgalinta, tuomet naudotojas privalÄ—s pasikeisti slaptažodį sekanÄio prisijungimo metu -remove-totp=Å alinti OTP -credentials.remove-totp.tooltip=Å alinti vienkartinį naudotojo slaptažodžių generatorių. -reset-actions=Atkurti veiksmus -credentials.reset-actions.tooltip=Nurodykite naudotojui el. paÅ¡tu siunÄiamus privalomus atlikti veiksmus. 'Patvirtinti el. paÅ¡to adresÄ…' į naudotojo el. paÅ¡to adresÄ… siunÄia patvirtinimo nuorodÄ…. 'Atnaujinti profilio informacijÄ…' reikalauja naudotojo peržiÅ«rÄ—ti ir atnaujinti profilio informacijÄ…. 'Atnaujinti slaptažodį' reikalauja naudotojo pasikeisti slaptažodį. 'KonfigÅ«ruoti OTP' reikalauja atnaujinti mobilaus slaptažodžių generatoriaus konfigÅ«racijÄ…. -reset-actions-email=AtkÅ«rimo veiksmų siuntimas -send-email=Siųsti el. paÅ¡to laiÅ¡kÄ… -credentials.reset-actions-email.tooltip=Naudotojui siunÄiamas el. paÅ¡to laiÅ¡kas su nuorodomis leidžianÄiomis atlikti pasirinktus veiksmus. Naudotojas atidarÄ™s siunÄiamÄ… nuorodÄ… galÄ—s atlikti atkÅ«rimo veiksmus. Veismų atlikimui naudotojų nebus reikalaujama prisijungti. Pavyzdžiui parinkus slaptažodžio atkÅ«rimo veiksmÄ…, naudotojas galÄ—s neprisijungÄ™s nurodyti naujÄ… slaptaždį. -add-user=PridÄ—ti naudotojÄ… -created-at=SukÅ«rimo data -user-enabled=Naudotojas įgalintas -user-enabled.tooltip=Neįgalintam naudotojai neleidžiama prisijungti prie sistemos. -user-temporarily-locked=Naudotojas laikinai užrakintas -user-temporarily-locked.tooltip=Naudotojas laikintai užrakintas, nes per daug klydo prisijungiant prie sistemos. -unlock-user=Atrakinti naudotojÄ… -federation-link=Federacijos sÄ…saja -email-verified=El. paÅ¡tas patvirtintas -email-verified.tooltip=Ar naudotojo el. paÅ¡to adresas yra patvirtintas? -required-user-actions=Privalomi veiksmai naudotojui -required-user-actions.tooltip=Nurodykite kuriuos veiksmus po prisijungimo naudotojas privalo atlikti. 'Patvirtinti el. paÅ¡to adresÄ…' į naudotojo el. paÅ¡to adresÄ… siunÄia patvirtinimo nuorodÄ…. 'Atnaujinti profilio informacijÄ…' reikalauja naudotojo peržiÅ«rÄ—ti ir atnaujinti profilio informacijÄ…. 'Atnaujinti slaptažodį' reikalauja naudotojo pasikeisti slaptažodį. 'KonfigÅ«ruoti OTP' reikalauja atnaujinti mobilaus slaptažodžių generatoriaus konfigÅ«racijÄ…. -locale=LokalÄ— -select-one.placeholder=Pasirinkite... -impersonate=Ä®kÅ«nyti -impersonate-user=Ä®kÅ«nyti naudotojÄ… -impersonate-user.tooltip=Prisijungti kaip Å¡is naudotojas. Jei jÅ«sų sritis sutampa su naudotojo sritimi, tuomet jÅ«sų sesija bus baigta prieÅ¡ prisijungiant Å¡iuo naudotoju. -identity-provider-alias=TapatybÄ—s teikÄ—jo pseudonimas -provider-user-id=TeikÄ—jo naudotojo ID -provider-username=TeikÄ—jo naudotojo vardas -no-identity-provider-links-available=NÄ—ra nei vienos tapatybÄ—s teikÄ—jo sÄ…sajos -group-membership=NarystÄ— grupÄ—se -group-membership.tooltip=Visos grupÄ—s, kurių narys yra Å¡is naudotojas. PažymÄ—kite grupÄ™ ir paspauskite 'Palikti' norÄ—dami paÅ¡alinti naudotojÄ… iÅ¡ grupÄ—s. -leave=Palikti -membership.available-groups.tooltip=GrupÄ—s, į kurias galima įtraukti naudotojÄ…. PažymÄ—kite grupÄ™ ir paspauskite įtraukti. -table-of-realm-users=Srities naudotojų sÄ…raÅ¡as -view-all-users=Rodyti visus naudotojus -unlock-users=Atrakinti naudotojus -no-users-available=Naudotojų nÄ—ra -users.instruction=Ä®veskite paieÅ¡kos kriterijų arba paspauskite rodyti visus naudotojus -consents=Sutikimai -started=PradÄ—ta -logout-all-sessions=Atjungti visas sesijas -logout=Seanso pabaiga -new-name=Naujas pavadinimas -ok=Gerai -attributes=Atributai -role-mappings=Rolių susiejimas -members=Nariai -details=Detaliau -identity-provider-links=SÄ…sajos su tapatybÄ—s teikÄ—jais -register-required-action=Registruoti privalomÄ… atlikti veiksmÄ… -gender=Lytis -address=Adresas -phone=Telefonas -profile-url=Profilio URL -picture-url=Nuotraukos URL -website=InternetinÄ— svetainÄ— -import-keys-and-cert=Importuoti raktus ir sertifikatus -import-keys-and-cert.tooltip=Ä®kelti kliento raktų porÄ… ir sertifikatÄ…. -upload-keys=Ä®kelti raktus -download-keys-and-cert=Atsisiųsti raktus ir sertifikatÄ… -no-value-assigned.placeholder=NÄ—ra priskirtos reikÅ¡mÄ—s -remove=Å alinti -no-group-members=GrupÄ— neturi narių -temporary=Laikinas -join=Prijungti -event-type=Ä®vykio tipas -events-config=Ä®vykių konfigÅ«racija -event-listeners=Ä®vykių gavÄ—jai -login-events-settings=Prisijungimo įvykių nustatymai -clear-events=IÅ¡valyti įvykius -saved-types=Saugomi tipai -clear-admin-events=IÅ¡valyti administravimo įvykius -clear-changes=IÅ¡valyti pasikeitimus -error=Klaida - -# Authz -# Authz Common -authz-authorization=Autorizacija -authz-owner=Savininkas -authz-uri=URI -authz-scopes=Taikymo sritys -authz-resource=Resursas -authz-resource-type=Resurso tipas -authz-resources=Resursai -authz-scope=Taikymo sritis -authz-authz-scopes=Autorizacijos taikymo sritys -authz-policies=TaisyklÄ—s -authz-permissions=Leidimai -authz-evaluate=IÅ¡bandyti -authz-icon-uri=Ikonos URI -authz-icon-uri.tooltip=Ikonos paveiksliuko URI. -authz-select-scope=Parinkite taikymo sritį -authz-select-resource=Parinkite resursÄ… -authz-associated-policies=Susietos taisyklÄ—s -authz-any-resource=Bet kuris resursas -authz-any-scope=Bet kuri taikymo sritis -authz-any-role=Bet kuri rolÄ— -authz-policy-evaluation=IÅ¡bandyti taisyklÄ™ -authz-select-client=Parinkite klientÄ… -authz-select-user=Parinkite naudotojÄ… -authz-entitlements=TeisÄ—s -authz-no-resources=Resursų nÄ—ra -authz-result=Rezultatas -authz-authorization-services-enabled=Ä®galinti autorizacijÄ… -authz-authorization-services-enabled.tooltip=Ä®galinti detalų kliento autorizacijos palaikymÄ… -authz-required=Privalomas - -# Authz Settings -authz-import-config.tooltip=Importuoti Å¡io resursų serverio autorizacijos nustatymų JSON rinkmenÄ…. - -authz-policy-enforcement-mode=Taisyklių vykdymo rėžimas -authz-policy-enforcement-mode.tooltip=Taisyklių vykdymo rėžimas nusako kaip turi bÅ«ti tenkinamos autorizacijos užklausų taisyklÄ—s. 'Taikyti' reiÅ¡kia, kad tuo atveju kai nÄ—ra sukonfigÅ«ruota nei viena su resursu susijusi taisyklÄ—, prieiga draudžiama. 'Liberalus' reiÅ¡kia, kad tuo atveju kai nÄ—ra sukonfigÅ«ruota nei viena su resursu susijusi taisyklÄ—, prieiga leidžiama. 'IÅ¡jungta' reiÅ¡kia, kad neatliekamas taisyklių tikrinimas ir prieiga leidžiama prie visų resursų. -authz-policy-enforcement-mode-enforcing=Taikyti -authz-policy-enforcement-mode-permissive=Liberalus -authz-policy-enforcement-mode-disabled=IÅ¡jungta - -authz-remote-resource-management=Nuotolinis resursų valdymas -authz-remote-resource-management.tooltip=Ar leidžiama nuotoliniu bÅ«du resursų serveriui valdyti resursus? Jei neįgalinta, tuomet resursai gali bÅ«ti valdomi tik per Å¡iÄ… administravimo konsolÄ™. - -authz-export-settings=Eksportuoti nustatymus -authz-export-settings.tooltip=Eksportuoti ir atsisiųsti visus Å¡io resursų serverio autorazacijos nustatymus. - -# Authz Resource List -authz-no-resources-available=NÄ—ra galimų resursų. -authz-no-scopes-assigned=NÄ—ra susietų taikymo sriÄių. -authz-no-type-defined=NÄ—ra nurodytų tipų. -authz-no-permission-assigned=Nera susietų leidimų. -authz-no-policy-assigned=NÄ—ra susietų taisyklių. -authz-create-permission=Sukurti leidimÄ… - -# Authz Resource Detail -authz-add-resource=PridÄ—ti resursÄ… -authz-resource-name.tooltip=Unikalus resurso vardas. Vardas turi unikaliai identifikuoti resursÄ…. Naudingas, kuomet ieÅ¡koma specifinių resursų. -authz-resource-owner.tooltip=Å io resurso savininkas. -authz-resource-type.tooltip=Å io resurso tipas. ReikÅ¡mÄ— leidžia sugrupuoti skirtingus resursus turinÄius tÄ… patį tipÄ…. -authz-resource-uri.tooltip=URI kuris taip pat gali bÅ«ti naudojamas vienareikÅ¡miÅ¡kam resurso identifikavimui. -authz-resource-scopes.tooltip=Su Å¡iuo resursu susietos taikymo sritys. - -# Authz Scope List -authz-add-scope=PriÄ—ti taikymo sritį -authz-no-scopes-available=NÄ—ra galimų taikymo sriÄių. - -# Authz Scope Detail -authz-scope-name.tooltip=Unikalus taikymo srities pavadinimas. Å is pavadinimas gali vienareikÅ¡miÅ¡kai identifikuoti taikymo sritį. Naudingas kuomet ieÅ¡koma Å¡ios tam tikros srities. - -# Authz Policy List -authz-all-types=Visi tipai -authz-create-policy=Sukurti taisyklÄ™ -authz-no-policies-available=NÄ—ra galimų taisyklių. - -# Authz Policy Detail -authz-policy-name.tooltip=Å ios taisyklÄ—s pavadinimas. -authz-policy-description.tooltip=Å ios taisyklÄ—s apraÅ¡ymas. -authz-policy-logic=Logika -authz-policy-logic-positive=Teigiama -authz-policy-logic-negative=Neigiama -authz-policy-logic.tooltip=Logika nurodo kaip turi bÅ«ti tenkinama taisyklÄ—. Jei nurodyta 'Teigiama', tuomet Å¡ios taisyklÄ—s vykdymo metu gautas rezultatas (leisti arba drausti) bus naudojamas sprendinio priÄ—mimui. Jei nurodyta 'Neigiama', tuomet Å¡ios taisyklÄ—s vykdymo rezultatas bus paneigtas, t.y. leidžiama taps draudžiama ir atvirkÅ¡Äiai. -authz-policy-apply-policy=Pritaikyti taisyklÄ™ -authz-policy-apply-policy.tooltip=Nurodo visas taisykles, kurios turi bÅ«ti įvertintos Å¡ios taisyklÄ—s ar leidimo taikymo sriÄiai. -authz-policy-decision-strategy=Sprendimo strategija -authz-policy-decision-strategy.tooltip=Sprendimo strategija nurodo kaip priimamas galutinis sprendimas, kuomet yra vykdomos visos Å¡io leidimo taisyklÄ—s. 'Pozityvi' reiÅ¡kia, kad galutiniam teigiamam sprendimui turi bÅ«ti tenkinama bent viena taisyklÄ—. 'VienbalsÄ—' reiÅ¡kia, kad galutiniam teigiamam sprendimui visos taisyklÄ—s turi bÅ«ti teigiamos. 'Daugumos' reiÅ¡kia, kad galutinis teigiamas sprendimas bus priimtas tuomet, kai teigiamų taisyklių bus daugiau nei neigiamų. Jei teigiamų ir neigiamų taisyklių skaiÄius yra vienodas, tuomet galutinis rezultatas bus neigiamas. -authz-policy-decision-strategy-affirmative=Pozityvi -authz-policy-decision-strategy-unanimous=VienbalsÄ— -authz-policy-decision-strategy-consensus=Daugumos -authz-select-a-policy=Parinkite taisyklÄ™ - -# Authz Role Policy Detail -authz-add-role-policy=PridÄ—ti rolÄ—s taisyklÄ™ -authz-no-roles-assigned=NÄ—ra susietų rolių. -authz-policy-role-realm-roles.tooltip=Nurodo kurios *srities* rolÄ—(s) tenkina Å¡iÄ… taisyklÄ™. -authz-policy-role-clients.tooltip=Parinkite klienÄ… norÄ—dami rodyti tik Å¡io kliento roles. -authz-policy-role-client-roles.tooltip=Nurodo *kliento* rolÄ—(įs) kurios tenkina Å¡iÄ… taisyklÄ™. - -# Authz User Policy Detail -authz-add-user-policy=PridÄ—ti naudotojo taisyklÄ™ -authz-no-users-assigned=NÄ—ra susietų naudotojų. -authz-policy-user-users.tooltip=Nurodo kurie naudotojai tenkina Å¡iÄ… taisyklÄ™. - -# Authz Time Policy Detail -authz-add-time-policy=PridÄ—ti laiko taisyklÄ™ -authz-policy-time-not-before.tooltip=Nurodykite laikÄ… iki kurio Å¡i taisyklÄ— NETENKINAMA. Teigiamas rezultatas duodamas tik tuo atveju, kuomet dabartinÄ— data ir laikas yra vÄ—lesnÄ— arba lygi Å¡iai reikÅ¡mei. -authz-policy-time-not-on-after=Ne vÄ—liau -authz-policy-time-not-on-after.tooltip=Nurodykite laikÄ… po kurio Å¡i taisyklÄ— NETENKINAMA. Teigiamas rezultatas duodamas tik tuo atveju, kuomet dabartinÄ— data ir laikas yra ankstesni arba lygi Å¡iai reikÅ¡mei. -authz-policy-time-day-month=MÄ—nesio diena -authz-policy-time-day-month.tooltip=Nurodykite mÄ—nesio dienÄ… iki kurios Å¡i taisyklÄ— TENKINAMA. Užpildžius antrÄ…jį laukelį, taisyklÄ— bus TENKINAMA jei diena patenka į nurodytÄ… intervalÄ…. ReikÅ¡mÄ—s nurodomos imtinai. -authz-policy-time-month=MÄ—nesis -authz-policy-time-month.tooltip=Nurodykite mÄ—nesį iki kurio Å¡i taisyklÄ— TENKINAMA. Užpildžius antrÄ…jį laukelį, taisyklÄ— bus TENKINAMA jei mÄ—nesis patenka į nurodytÄ… intervalÄ…. ReikÅ¡mÄ—s nurodomos imtinai. -authz-policy-time-year=Metai -authz-policy-time-year.tooltip=Nurodykite metus iki kurių Å¡i taisyklÄ— TENKINAMA. Užpildžius antrÄ…jį laukelį, taisyklÄ— bus TENKINAMA jei metai patenka į nurodytÄ… intervalÄ…. ReikÅ¡mÄ—s nurodomos imtinai. -authz-policy-time-hour=Valanda -authz-policy-time-hour.tooltip=Nurodykite valandÄ… iki kurios Å¡i taisyklÄ— TENKINAMA. Užpildžius antrÄ…jį laukelį, taisyklÄ— bus TENKINAMA jei valanda patenka į nurodytÄ… intervalÄ…. ReikÅ¡mÄ—s nurodomos imtinai. -authz-policy-time-minute=MinutÄ— -authz-policy-time-minute.tooltip=Nurodykite minutÄ™ iki kurios Å¡i taisyklÄ— TENKINAMA. Užpildžius antrÄ…jį laukelį, taisyklÄ— bus TENKINAMA jei minutÄ— patenka į nurodytÄ… intervalÄ…. ReikÅ¡mÄ—s nurodomos imtinai. - -# Authz JS Policy Detail -authz-add-js-policy=PridÄ—ti JavaScript taisyklÄ™ -authz-policy-js-code=Programinis kodas -authz-policy-js-code.tooltip=JavaScript kodas kuriame apraÅ¡ytos Å¡ios taisyklÄ—s sÄ…lygos. - - -# Authz Aggregated Policy Detail -authz-aggregated=Agreguota -authz-add-aggregated-policy=PridÄ—ti agreguotÄ… taisyklÄ™ - -# Authz Permission List -authz-no-permissions-available=NÄ—ra galimų leidimų. - -# Authz Permission Detail -authz-permission-name.tooltip=Å io leidimo pavadinimas. -authz-permission-description.tooltip=Å io leidimo apraÅ¡ymas. - -# Authz Resource Permission Detail -authz-add-resource-permission=PridÄ—ti resurso leidimÄ… -authz-permission-resource-apply-to-resource-type=Pritaikyti resurso tipui -authz-permission-resource-apply-to-resource-type.tooltip=Nurodykite ar Å¡is leidimas turi bÅ«ti pritaikomas visiems Å¡io tipo resursams. Jei įgalinta, tuomet leidimo tikrinimas bus atliekamas visiems nurodyto tipo resursams. -authz-permission-resource-resource.tooltip=Nurodykite, kad Å¡is leidimas turi bÅ«ti taikomas tik tam tikriems resursams. -authz-permission-resource-type.tooltip=Nurodykite, kad Å¡i taisyklÄ— turi bÅ«ti taikoma visiems Å¡io tipo resursams. - -# Authz Scope Permission Detail -authz-add-scope-permission=PridÄ—ti taikymo srities leidimÄ… -authz-permission-scope-resource.tooltip=Pasirinkdami resurÄ… apribosite taikymo sriÄių sÄ…raÅ¡Ä…. Jei nepasirinkta, tuomet matysite visas galimas taikymo sritis. -authz-permission-scope-scope.tooltip=Nurodo, kad Å¡is leidimas turi bÅ«ti pritaikytas vienai ar daugiau taikymo sriÄių. - -# Authz Evaluation -authz-evaluation-identity-information=TapatybÄ—s informacija -authz-evaluation-identity-information.tooltip=Nurodykite tapatybÄ—s informacijÄ…, kuri bus naudojama taisyklių vertinime. -authz-evaluation-client.tooltip=Nurodykite klientÄ…, kuris atlieka autorizacijos užklausas. Nei nenurodyta, tuomet autorizacijos užklausa bus vertinama naudojant dabartinį klientÄ…. -authz-evaluation-user.tooltip=Nurodykite naudotojÄ…, kurio vardu atliekamas teisių serveryje filtravimas. -authz-evaluation-role.tooltip=Nurodykite pasirinkto naudotojo roles. -authz-evaluation-new=Papildyti užklausÄ… -authz-evaluation-re-evaluate=Vertinti pakartotinai -authz-evaluation-previous=PrieÅ¡ tai buvÄ™s bandymas - -authz-evaluation-contextual-info=KontekstinÄ— informacija -authz-evaluation-contextual-info.tooltip=Nurodykite kontekstinÄ™ informacijÄ…, kuri bus naudojama taisyklių vertinime. -authz-evaluation-contextual-attributes=Kontekstiniai atributai -authz-evaluation-contextual-attributes.tooltip=Galite pateikti vykdymo aplinkos arba vykdymo konteksto atributus. -authz-evaluation-permissions.tooltip=Nurodykite leidimus, kuriems bus taikomos taisyklÄ—s. -authz-evaluation-evaluate=Vertinti -authz-evaluation-any-resource-with-scopes=Bet kuris resursas su Å¡ia taikymo sritimi (sritimis) -authz-evaluation-no-result=Vertinant autorizacijos užklausÄ… rezultatų nerasta. Patikrinkite ar egzistuoja resursai ar taikymo sritys susietos su taisyklÄ—mis. -authz-evaluation-no-policies-resource=Å iam resursui taisyklÄ—s nerastos. -authz-evaluation-result.tooltip=Leidimų užklausos bendras rezultatas. -authz-evaluation-scopes.tooltip=Leidžiamų taikymo sriÄių sÄ…raÅ¡as. -authz-evaluation-policies.tooltip=Informacija apie vertinime dalyvavusias taisykles ir sprendimus. -authz-evaluation-authorization-data=Atsakymas -authz-evaluation-authorization-data.tooltip=Autorizavimo užklausos apdorojimo rezultatas su autorizacijos duomenimis. Rezultatas parodo kÄ… Keycloak grąžina klientui praÅ¡anÄiam leidimo. PeržiÅ«rÄ—kite 'authorization' teiginį su leidimais, kurie buvo suteikti Å¡iai autorizacijos užklausai. -authz-show-authorization-data=Rodyti autorizacijos duomenis - -kid=KID -keys=Raktai -all=Visi -status=BÅ«sena -keystore=Raktų saugykla -keystores=Raktų saugyklos -add-keystore=PridÄ—ti raktų saugyklÄ… -add-keystore.placeholder=PridÄ—ti raktų saugyklÄ…... -view=ŽiÅ«rÄ—ti -active=Aktyvus - -Sunday=Sekmadienis -Monday=Pirmadienis -Tuesday=Antradienis -Wednesday=TreÄiadienis -Thursday=Ketvirtadienis -Friday=Penktadienis -Saturday=Å eÅ¡tadienis - -user-storage-cache-policy=PodÄ—lio nustatymai -userStorage.cachePolicy=PodÄ—lio taisyklÄ—s -userStorage.cachePolicy.option.DEFAULT=DEFAULT -userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -userStorage.cachePolicy.tooltip=Saugyklos teikÄ—jo podÄ—lio nustatymai. 'DEFAULT' naudojami numatytieji globalaus naudotojo podÄ—lio nustatymai. 'EVICT_DAILY' naudotojų podÄ—lis iÅ¡valomas kiekvienÄ… dienÄ… numatytuoju laiku. 'EVICT_WEEKLY' naudotojų podÄ—lis iÅ¡valomas kartÄ… į savaitÄ™ numatytÄ… dienÄ…. 'MAX-LIFESPAN' maksimalus podÄ—lio įraÅ¡o galiojimo laikas milisekundÄ—mis. -userStorage.cachePolicy.evictionDay=IÅ¡valymo diena -userStorage.cachePolicy.evictionDay.tooltip=SavaitÄ—s diena, kuomet podÄ—lio įraÅ¡ai taps nebeaktualÅ«s -userStorage.cachePolicy.evictionHour=IÅ¡valymo valanda -userStorage.cachePolicy.evictionHour.tooltip=Valanda, kuomet podÄ—lio įraÅ¡ai taps nebeaktualÅ«s. -userStorage.cachePolicy.evictionMinute=IÅ¡valymo minutÄ— -userStorage.cachePolicy.evictionMinute.tooltip=MinutÄ—, kuomet podÄ—lio įraÅ¡ai taps nebeaktualÅ«s. -userStorage.cachePolicy.maxLifespan=Maksimalus galiojimo laikas -userStorage.cachePolicy.maxLifespan.tooltip=Maksimalus galiojimo laikas milisekundÄ—mis po kurio podÄ—lio įraÅ¡ai taps nebeaktualÅ«s. -user-origin-link=Saugojimo kilmÄ— - -disable=IÅ¡jungti -disableable-credential-types=IÅ¡jungiami tipai -credentials.disableable.tooltip=Galimų iÅ¡jungti prisijungimo duomenų tipų sÄ…raÅ¡as -disable-credential-types=IÅ¡jungti prisijungimo duomenų tipus -credentials.disable.tooltip=Paspauskite mygtukÄ… norÄ—dami iÅ¡jungti pažymÄ—tus prisijungimo duomenų tipus -credential-types=Prisijungimo duomenų tipai -manage-user-password=Tvarkyti slaptažodžius -disable-credentials=IÅ¡jungti prisijungimo duomenis -credential-reset-actions=Prisijungimo duomenų atkÅ«rimas -ldap-mappers=LDAP atitikmenų parinkÄ—jai -create-ldap-mapper=Sukurti LDAP atitikmenų parinkÄ—jÄ… \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_nl.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_nl.properties deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_no.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_no.properties deleted file mode 100644 index 83a0c5527..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_no.properties +++ /dev/null @@ -1,1127 +0,0 @@ -consoleTitle=Keycloak administrasjonskonsoll - -# Common messages -enabled=Aktivert -name=Navn -displayName=Vis navn -displayNameHtml=HTML vis navn -save=Lagre -cancel=Avbryt -onText=P\u00C5 -offText=AV -client=Klient -clients=Klienter -clear=T\u00F8m -selectOne=Velg en... - -true=True -false=False - -endpoints=Endepunkter - -# Realm settings -realm-detail.enabled.tooltip=Brukere og klienter har kun tilgang til et sikkerhetsdomene hvis det er aktivert -realm-detail.oidc-endpoints.tooltip=Viser konfigurasjonen av endepunkter for OpenID Connect -registrationAllowed=Registrering av bruker -registrationAllowed.tooltip=Aktiver/deaktiver registreringssiden. En lenke for registrering vil v\u00E6re synlig p\u00E5 innloggingssiden. -registrationEmailAsUsername=E-postadresse som brukernavn -registrationEmailAsUsername.tooltip=Dersom registreringssiden er aktivert, vil feltet for brukernavn v\u00E6re skjult fra registreringsskjema og e-postadresse vil bli brukt som brukernavn for nye brukere. -editUsernameAllowed=Rediger brukernavn -editUsernameAllowed.tooltip=Dersom aktivert, er feltet for brukernavn redigerbart, ellers kun lesbart. -resetPasswordAllowed=Glemt passord -resetPasswordAllowed.tooltip=Vis en lenke p\u00E5 innloggingssiden som brukere kan klikke p\u00E5 om de har glemt sine innloggingsdetaljer. -rememberMe=Husk meg -rememberMe.tooltip=Vis en avkryssingsboks p\u00E5 innloggingssiden som lar brukere forbli innlogget mellom omstart av nettleser og inntil sesjonen utl\u00F8per. -verifyEmail=Bekreft e-postadresse -verifyEmail.tooltip=Krev at bruker verifiserer sin e-postadresse f\u00F8rste gang de logger inn. -sslRequired=Krev SSL -sslRequired.option.all=Alle foresp\u00F8rsler -sslRequired.option.external=Eksterne foresp\u00F8rsler -sslRequired.option.none=Ingen -sslRequired.tooltip=Kreves HTTPS? 'Ingen' betyr at HTTPS ikke kreves for noen klienters IP-adresse. 'Ekstern foresp\u00F8rsel' betyr at localhost og private IP-adresser kan f\u00E5 tilgang uten HTTPS. 'Alle foresp\u00F8rsler' betyr at HTTPS kreves for alle IP-adresser. -publicKey=Offentlig n\u00F8kkel -privateKey=Privat n\u00F8kkel -gen-new-keys=Generer nye n\u00F8kler -certificate=Sertifikat -host=Vert -smtp-host=SMTP Vert -port=Port -smtp-port=SMTP Port (standard er 25) -from=Fra -sender-email-addr=Senders e-postadresse -enable-ssl=Aktiver SSL -enable-start-tls=Aktiver StartTLS -enable-auth=Aktiver autentisering -username=Brukernavn -login-username=Innloggingsbrukernavn -password=Passord -login-password=Innloggingspassord -login-theme=Innloggingstema -login-theme.tooltip=Velg tema for sidene: innlogging, OTP, rettigheter, registrering, glemt passord. -account-theme=Kontotema -account-theme.tooltip=Velg tema for brukerkontoadministrasjonssider. -admin-console-theme=Administrasjonskonsolltema -select-theme-admin-console=Velg et tema for administrasjonskonsollen. -email-theme=E-posttema -select-theme-email=Velg tema for e-post sendt av server. -i18n-enabled=Internasjonalisering aktivert -supported-locales=St\u00F8ttede lokaliteter -supported-locales.placeholder=Skriv inn en lokalitet og klikk enter -default-locale=Standard lokalitet -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=Cache for sikkerhetsdomenet -realm-cache-clear.tooltip=T\u00F8m sikkerhetsdomenecache (Dette vil fjerne oppf\u00F8ringer for alle sikkerhetsdomener) -user-cache-clear=Brukercache -user-cache-clear.tooltip=T\u00F8m brukercache (Dette vil fjerne oppf\u00F8ringer for alle sikkerhetsdomener) -revoke-refresh-token=Fjern refresh token -revoke-refresh-token.tooltip=Hvis aktivert kan refresh token kun bli brukt en gang. Ellers vil refresh tokens kunne bli brukt flere ganger. -sso-session-idle=Inaktiv SSO sesjon -seconds=Sekunder -minutes=Minutter -hours=Timer -days=Dager -sso-session-max=Maksimum SSO sesjon -sso-session-idle.tooltip=Tiden en sesjon er tillatt \u00E5 v\u00E6re inaktiv f\u00F8r den utl\u00F8per. Tokens og nettlesersesjoner vil bli ugyldig n\u00E5r en sesjon utl\u00F8per. -sso-session-max.tooltip=Maksimum tid f\u00F8r en sesjon utl\u00F8per. Tokens og nettlesersesjoner vil bli ugyldig n\u00E5r en sesjon utl\u00F8per. -offline-session-idle=Inaktiv sesjon i frakoblet modus -offline-session-idle.tooltip=Tiden en sesjon i frakoblet modus er tillatt \u00E5 v\u00E6re inaktiv f\u00F8r den utl\u00F8per. Du m\u00E5 bruke tokens for frakoblet modus for \u00E5 oppdatere sesjonen minst en gang i denne perioden, ellers vil sesjonen utl\u00F8pe. -access-token-lifespan=Levetid for access token -access-token-lifespan.tooltip= Maksimum tid f\u00F8r et access token utl\u00F8per. Det anbefales at denne verdien er kort i forhold til SSO timeout. -access-token-lifespan-for-implicit-flow=Access token-levetid for implicit flow -access-token-lifespan-for-implicit-flow.tooltip=Maksimum tid f\u00F8r et access token utstedt under OpenID Connect implicit flow utl\u00F8per. Det anbefales at denne er kortere enn SSO timeout. Det er ingen mulighet til \u00E5 oppdatere tokenet i l\u00F8pet av en implicit flow, derfor er det satt en separat timeout som er forskjellig fra 'Levetid for Access Token'. -client-login-timeout=Timeout av klientinnlogging -client-login-timeout.tooltip=Maksimum tid en klient har for \u00E5 fullf\u00F8re access token protokollen. Dette burde normalt v\u00E6re 1 minutt. -login-timeout=Timeout for innlogging -login-timeout.tooltip=Maksimum tid en bruker har til \u00E5 fullf\u00F8re en innlogging. Det anbefales at denne er relativt lang. 30 minutter eller mer. -login-action-timeout=Timeout for innloggingshandling. -login-action-timeout.tooltip=Maksimum tid en bruker har til \u00E5 fullf\u00F8re handlinger relatert til innlogging, som \u00E5 oppdatere passord eller konfigurere OTP. Det anbefales at denne er relativt lang. 5 minutter eller mer. -headers=Headere -brute-force-detection=Deteksjon av Brute Force -x-frame-options=Alternativer for X-Frame -x-frame-options-tooltip=Standardverdi hindrer sider fra \u00E5 bli inkludert via non-origin iframes. (Klikk p\u00E5 etikett for mer informasjon) -content-sec-policy=Sikkerhetspolicy for innhold -content-sec-policy-tooltip=Standardverdi hindrer sider fra \u00E5 bli inkludert via non-origin iframes. (Klikk p\u00E5 etikett for mer informasjon) -content-sec-policy-report-only=Rapporterende sikkerhetspolicy for innhold -content-sec-policy-report-only-tooltip=Verdi for Content-Security-Policy-Report-Only header. Til bruk for testing av ny sikkerhetspolicy. -content-type-options=Alternativer for X-innholdstyper -content-type-options-tooltip=Standardverdi som forhindrer Internet Explorer og Google Chrome fra \u00E5 MIME-sniffe et svar vekk fra den deklarerte innholdstypen (content-type) (Klikk p\u00E5 etikett for mer informasjon) -max-login-failures=Maksimum antall innloggingsfeil -max-login-failures.tooltip=Hvor mange feil f\u00F8r ventetid blir aktivert. -wait-increment=\u00F8kning av ventetid -wait-increment.tooltip=N\u00E5r terskelen for feil er n\u00E5dd, hvor lenge skal brukeren stenges ute? -quick-login-check-millis=Hurtig innlogging - kontroll av millisekunder -quick-login-check-millis.tooltip=Hvis en feil skjer for raskt samtidig, steng brukeren ute. -min-quick-login-wait=Minimum ventetid for hurtig innlogging -min-quick-login-wait.tooltip=Ventetid etter en hurtig innloggingsfeil. -max-wait=Maksimum ventetid -max-wait.tooltip=Maksimum tid en bruker vil v\u00E6re stengt ute. -failure-reset-time=Tid for tilbakestilling av feil. -failure-reset-time.tooltip=N\u00E5r vil teller for feil nullstilles? -realm-tab-login=Innlogging -realm-tab-keys=N\u00F8kler -realm-tab-email=E-post -realm-tab-themes=Tema -#realm-tab-localization=Localization -realm-tab-cache=Cache -realm-tab-tokens=Tokens -realm-tab-client-initial-access=F\u00F8rste access token -realm-tab-security-defenses=Sikkerhetsmekanismer -realm-tab-general=Generelt -add-realm=Legg til sikkerhetsdomene - -#Session settings -realm-sessions=Sikkerhetsdomenesesjoner -revocation=Oppheving -logout-all=Logg ut alle -active-sessions=Aktive sesjoner -sessions=Sesjoner -not-before=Ikke f\u00F8r -not-before.tooltip=Opphev alle tokens utstedt f\u00F8r denne datoen. -set-to-now=Sett til n\u00E5 -push=Send -push.tooltip=For enhver klient som har en administratorURL, send dem beskjed om den nye opphevingspolicyen. - -#Protocol Mapper -usermodel.prop.label=Egenskap -usermodel.prop.tooltip=Navn p\u00E5 egenskapsmetoden i UserModel-grensesnittet. For eksempel, en verdi av 'e-post' vil referere til metoden UserModel.getEmail(). -usermodel.attr.label=Brukerattributt -usermodel.attr.tooltip=Navn p\u00E5 lagret brukerattributt som er navnet p\u00E5 en attributt innenfor UserModel.attribute map. -userSession.modelNote.label=Brukersesjonsmerknad -userSession.modelNote.tooltip=Navn p\u00E5 lagret brukersesjonsmerknad innenfor UserSessionModel.note map. -multivalued.label=Flere verdier -multivalued.tooltip=Angir om en attributt st\u00F8tter flere verdier. Hvis true, vil listen med alle verdier for dette attributtet bli satt som claims. Hvis false, vil bare den f\u00F8rste verdien bli satt som claim. -selectRole.label=Velg rolle -selectRole.tooltip=Skriv inn rolle i tekstboksen til venstre, eller klikk p\u00E5 denne knappen for \u00E5 bla gjennom og velge rollen du \u00F8nsker. -tokenClaimName.label=Navn p\u00E5 token claim -tokenClaimName.tooltip=Navn p\u00E5 claim som skal legges inn i token. Denne kan v\u00E6re et fullt kvalifisert navn som 'address.street'. I dette tilfellet vil et nestet jsonobjekt bli laget. -jsonType.label=JSON-type for claims -jsonType.tooltip=JSON-type som burde bli brukt for \u00E5 fylle json claimet i tokenet. long, int, boolean og String er gyldige verdier. -includeInIdToken.label=Legg til i ID token -includeInIdToken.tooltip=Burde claim bli lagt til i ID token? -includeInAccessToken.label=Legg til i access token -includeInAccessToken.tooltip=Burde claim bli lagt til i access token? -includeInUserInfo.label=Legg til i brukerinfo -includeInUserInfo.tooltip=Burde claim bli lagt til i brukerinfo? -usermodel.clientRoleMapping.clientId.label=Klient-ID -usermodel.clientRoleMapping.clientId.tooltip=Klient-ID for \u00E5 mappe roller -usermodel.clientRoleMapping.rolePrefix.label=Prefiks for klientrolle -usermodel.clientRoleMapping.rolePrefix.tooltip=Prefiks for hver klientrolle (valgfri). -usermodel.realmRoleMapping.rolePrefix.label=Prefiks for sikkerhetsdomenerolle -usermodel.realmRoleMapping.rolePrefix.tooltip=Prefiks for hver sikkerhetsdomenerolle (valgfri). - -# client details -clients.tooltip=Klienter er betrodde nettleserapplikasjoner og web-tjenester i et sikkerhetsdomene. Disse klientene kan be om en innlogging. Du kan ogs\u00E5 definere klientspesifikke roller. -search.placeholder=S\u00F8k... -create=Opprett -import=Importer -client-id=Klient-ID -base-url=Base URL -actions=Handlinger -not-defined=Ikke definert -edit=Rediger -delete=Slett -no-results=Ingen resultater -no-clients-available=Ingen klienter er tilgjengelige -add-client=Legg til klient -select-file=Velg fil -view-details=Se detaljer -clear-import=T\u00F8m import -client-id.tooltip=Angir ID referert i URI og tokens. For eksempel 'min-klient'. For SAML er dette ogs\u00E5 forventet utgiververdi fra authn-foresp\u00F8rsler -client.name.tooltip=Angir klientnavnet som blir vist. For eksempel, 'Min klient'. St\u00F8tter n\u00F8kler for lokaliserte verdier. For eksempel\: ${my_client} -client.enabled.tooltip=Deaktiverte klienter kan ikke initiere en innlogging eller motta access tokens. -consent-required=Samtykke p\u00E5krevd -consent-required.tooltip=Hvis aktivert m\u00E5 brukere gi samtykke for at klienten skal f\u00E5 tilgang. -client-protocol=Klientprotokoll -client-protocol.tooltip='OpenID connect' tillater klienter \u00E5 verifisere identiteten til sluttbrukeren basert p\u00E5 autentisering utf\u00F8rt av en autorisasjonsserver. 'SAML' aktiverer en web-basert autentisering og autoriseringsscenarier som inkluderer cross-domain single sign-on (SSO) og som bruker security tokens som inneholder assertions for \u00E5 dele informasjon videre. -access-type=Tilgangstype -access-type.tooltip='Confidential' klienter krever en secret for \u00E5 initiere innloggingsprotokoll. 'Public' klienter krever ikke en secret. 'Bearer-only' klienter er webtjenester som aldri initierer en innlogging. -standard-flow-enabled=Standard flow aktivert -standard-flow-enabled.tooltip=Dette aktiverer standard OpenID Connect redirect-basert autentisering med autorisasjonskode. I forhold til OpenID Connect eller OAuth2 spesifikasjoner aktiverer dette st\u00F8tte for 'Authorization Code Flow' for denne klienten. -implicit-flow-enabled=Implicit flow aktivert -implicit-flow-enabled.tooltip=Dette aktiverer st\u00F8tte for OpenID Connect redirect-basert autentisering uten autorisasjonskode. I forhold til OpenID Connect eller OAuth2 spesifikasjoner aktiverer dette st\u00F8tte for 'Implicit Flow' for denne klienten. -direct-access-grants-enabled=Direct access grants aktivert -direct-access-grants-enabled.tooltip=Dette gir st\u00F8tte for Direct Access Grants, som betyr at klienten har tilgang til brukerens brukernavn/passord og kan bytte dette direkte med Keycloak-serveren for access token. I f\u00F8lge OAuth2 spesifikasjonen, aktiverer dette st\u00F8tte for 'Resource Owner Password Credentials Grant' for denne klienten. -service-accounts-enabled=Tjenestekonto aktivert -service-accounts-enabled.tooltip=Lar deg autentisere denne klienten til Keycloak og hente access token dedikert til denne klienten. I f\u00F8lge OAuth2 spesifikasjonen, aktiverer dette st\u00F8tte for 'Client Credentials Grant' for denne klienten. -include-authnstatement=Inkluder AuthnStatement -include-authnstatement.tooltip=Skal et statement som spesifiserer metoden for tidsstempel inng\u00E5 i innloggingssvaret? -sign-documents=Signer dokumenter -sign-documents.tooltip=Skal SAML dokumenter bli signert av sikkerhetsdomenet? -sign-assertions=Signer assertions -sign-assertions.tooltip=Skal assertions i SAML dokumenter bli signert? Denne innstillingen er ikke n\u00F8dvendig hvis et dokument allerede har blitt signert. -signature-algorithm=Signaturalgoritme -signature-algorithm.tooltip=Signaturalgoritmen som brukes for \u00E5 signere et dokument. -canonicalization-method=Kanoniseringsmetode -canonicalization-method.tooltip=Kanoniseringsmetode for XML signaturer. -encrypt-assertions=Krypter assertions -encrypt-assertions.tooltip=Skal SAML assertions bli kryptert med klientens offentlige n\u00F8kkel ved \u00E5 bruke AES? -client-signature-required=Klientens signatur er p\u00E5krevd -client-signature-required.tooltip=Skal klienten signere sine SAML foresp\u00F8rsler og svar? Og skal de valideres? -force-post-binding=Force POST binding -force-post-binding.tooltip=Bruk alltid POST binding for svar. -front-channel-logout=Front channel utlogging -front-channel-logout.tooltip=Hvis satt til true, krever utlogging en redirect i nettleser til klient. Hvis satt til false, vil server utf\u00F8re en bakgrunnskall for utlogging. -force-name-id-format=Force navn-ID format -force-name-id-format.tooltip=Ignorer forespurt format p\u00E5 Navn-ID emnet og bruk den som er konfigurert i administrasjonskonsollen. -name-id-format=Navn-ID format -name-id-format.tooltip=Navn-ID formatet som skal brukes for emnet. -root-url=Root URL -root-url.tooltip=Root URL lagt til relative URLer -valid-redirect-uris=Gyldig redirect URIer -valid-redirect-uris.tooltip=Gyldig URI m\u00F8nster som en nettleser kan redirecte til etter en vellykket innlogging eller utlogging. Enkle jokertegn er tillatt, for eksempel 'http://example.com/*'. Relativ sti kan ogs\u00E5 spesifiseres, for eksempel /my/relative/path/*. Relative stier er relative til klientens root URL, eller hvis ingen er spesifisert brukes root URL for autorisasjonsserveren. For SAML m\u00E5 du sette et gyldig URI m\u00F8nster hvis du er avhengig av at URL for forbrukertjenesten er integrert med foresp\u00F8rselen for p\u00E5logging. -base-url.tooltip=Standard URL som kan brukes n\u00E5r autorisasjonsserveren trenger \u00E5 redirecte eller lenke tilbake til klienten. -admin-url=Admin URL -admin-url.tooltip=URL til administratorgrensesnitt for klienten. Sett denne hvis klienten st\u00F8tter adapter REST API. Dette REST APIet tillater autorisasjonsserveren til \u00E5 sende tilbakekallingsregler og andre administrative oppgaver. Vanligvis er dette satt til klientens base URL. -master-saml-processing-url=Master SAML prosesserings URL -master-saml-processing-url.tooltip=Hvis konfigurert vil denne URLen bli brukt for hver binding til b\u00E5de SPs Assertion Consumer og Single Logout-tjenester. Denne kan bli individuelt overstyrt for hver binding og tjenester i konfigurasjonen for finkornet SAML endepunkt. -idp-sso-url-ref=IDP initiert SSO URL navn -idp-sso-url-ref.tooltip=Navn p\u00E5 URL-fragment som refererer til klienten n\u00E5r du vil gj\u00F8re en IDP initiert SSO. La denne st\u00E5 tom om du \u00F8nsker \u00E5 deaktivere IDP initiert SSO. URLen vil v\u00E6re: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state=IDP initiert SSO relay state -idp-sso-relay-state.tooltip=Relay state du \u00F8nsker \u00E5 sende med SAML foresp\u00F8rselen n\u00E5r du vil utf\u00F8re en IDP initiert SSO. -web-origins=Web origins -web-origins.tooltip=Tillat CORS origins. For \u00E5 tillate alle origins med gyldig Redirect URIer legg til '+'. For \u00E5 tillate alle origins legg til '*'. -fine-saml-endpoint-conf=Finkornet SAML endepunktskonfigurasjon -fine-saml-endpoint-conf.tooltip=Utvid denne delen til \u00E5 konfigurere n\u00F8yaktige URLer for Assertion Consumer og Single Logout-tjeneste. -assertion-consumer-post-binding-url=Assertion consumer service POST binding URL -assertion-consumer-post-binding-url.tooltip=SAML POST binding URL for klientens assertion customer service (innloggingsrespons). Du kan la denne st\u00E5 tom om du ikke \u00F8nsker en URL for denne bindingen. -assertion-consumer-redirect-binding-url=Assertion Consumer Service redirect binding URL -assertion-consumer-redirect-binding-url.tooltip=SAML redirect for klientens assertion consumer service (innloggingsrespons). Du kan la denne st\u00E5 tom om du ikke \u00F8nsker en URL for denne bindingen. -logout-service-binding-post-url=logout-tjeneste POST binding URL -logout-service-binding-post-url.tooltip=SAML POST binding URL for klientens single logout-tjeneste. Du kan la dette st\u00E5 tomt om du bruker en annen binding. -logout-service-redir-binding-url=Logout-tjeneste redirect binding URL -logout-service-redir-binding-url.tooltip=SAML redirect binding URL for klientens single logout-tjeneste. Du kan la dette st\u00E5 tomt om du bruker en annen binding. - -# client import -import-client=Importer klient -format-option=Formatalternativer -select-format=Velg et format -import-file=Importer fil - -# client tabs -settings=Innstillinger -credentials=Innloggingsdetaljer -roles=Roller -mappers=Mappere -mappers.tooltip=Protokollmappere som utf\u00F8rer endringer av tokens og dokumenter. De kan utf\u00F8re handlinger som \u00E5 mappe brukerdata til protokollclaims, eller bare endre foresp\u00F8rsler som blir sendt mellom klienten og autorisasjonsserver. -scope=Scope -scope.tooltip=Mapping av scope lar deg begrense hvilke rollemappinger som er inkludert i access token som klienten har bedt om. -sessions.tooltip=Viser aktive sesjoner for denne klienten. Tillater deg \u00E5 se hvilke brukere som er aktive og n\u00E5r de logget inn. -offline-access=Frakoblet tilgang -offline-access.tooltip=Viser frakoblede sesjoner for denne klienten. Tillater deg \u00E5 se hvilke brukere som henter tokens for frakoblet modus og n\u00E5r de henter den. For \u00E5 tilbakekalle alle tokens for klienten, g\u00E5 til fanen Opphev og sett verdien for Ikke f\u00F8r til n\u00E5. -clustering=Clustering -installation=Installasjon -installation.tooltip=Verkt\u00F8y for \u00E5 generere ulike konfigurasjonsformater for klientadapter som du kan laste ned eller klippe og lime inn for \u00E5 konfigurere klientene dine. -service-account-roles=Tjenestekonto-roller -service-account-roles.tooltip=Tillater deg \u00E5 autentisere rollemappinger for tjenestekontoen som er dedikert til denne klienten. - -# client credentials -client-authenticator=Klientautentikator -client-authenticator.tooltip=Klientautentikator som blir brukt for \u00E5 autentisere denne klienten mot keycloak-server -certificate.tooltip=Klientsertifikat for \u00E5 validere JWT utstedt av klienten og signert av privatn\u00F8kkel til klient fra din keystore. -publicKey.tooltip=Offentlig n\u00F8kkel for \u00E5 validere JWT utstedt av klient og signert av klientens privatn\u00F8kkel. -no-client-certificate-configured=Ingen klientsertifikat er konfigurert -gen-new-keys-and-cert=Generer nye n\u00F8kler og sertifikater -import-certificate=Importer sertifikat -gen-client-private-key=Generer privatn\u00F8kkel for klient -generate-private-key=Generer privatn\u00F8kkel -archive-format=Arkivformat -archive-format.tooltip=Java keystore eller PKCS12 arkivformat. -key-alias=N\u00F8kkelalias -key-alias.tooltip=Arkiv-alias for din privatn\u00F8kkel og sertifikater. -key-password=N\u00F8kkelpassord -key-password.tooltip=Passord for \u00E5 f\u00E5 tilgang til privatn\u00F8kler i arkivet -store-password=Lagre passord -store-password.tooltip=Passord for \u00E5 f\u00E5 tilgang til arkivet -generate-and-download=Generer og Last ned -client-certificate-import=Import av klientsertifikat -import-client-certificate=Importer klientsertifikat -jwt-import.key-alias.tooltip=Arkiv-alias for sertifikatet ditt. -secret=Secret -regenerate-secret=Regenere secret -registrationAccessToken=Access token for registrering -registrationAccessToken.regenerate=Regenerer access token for registrering -registrationAccessToken.tooltip=Access token for registrering gir klienter tilgang til registreringstjenesten for klienter. -add-role=Legg til rolle -role-name=Rollenavn -composite=Sammensatt -description=Beskrivelse -no-client-roles-available=Ingen klientroller er tilgjengelig -scope-param-required=Scope parameter p\u00E5krevd -scope-param-required.tooltip=Denne rollen vil kun bli gitt hvis parameter for scope med rollenavn blir brukt under foresp\u00F8rsel av autorisasjon/token. -composite-roles=Sammensatte roller -composite-roles.tooltip=N\u00E5r denne rollen er tildelt/ikke tildelt til en bruker, vil hvilken som helst rolle assosiert med denne bli implisitt tildelt/ikke tildelt. -realm-roles=Sikkerhetsdomeneroller -available-roles=Tilgjengelig roller -add-selected=Legg til valgte -associated-roles=Assosierte roller -composite.associated-realm-roles.tooltip=Sikkerhetsdomeneniv\u00E5-rolle knyttet til denne sammensatte rollen. -composite.available-realm-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller knyttet til denne sammensatte rollen. -remove-selected=Fjern valgte -client-roles=Klientroller -select-client-to-view-roles=Velg klient for \u00E5 se roller for klient -available-roles.tooltip=Roller fra denne klienten som du kan knytte til denne sammensatte rollen. -client.associated-roles.tooltip=Klientrolle assosiert med denne sammensatte rollen. -add-builtin=Legg til Builtin -category=Kategori -type=Type -no-mappers-available=Ingen mappere er tilgjengelig -add-builtin-protocol-mappers=Legg til Builtin protokollmappere -add-builtin-protocol-mapper=Legg til Builtin protokollmapper -scope-mappings=Scopemapping -full-scope-allowed=Tillatt med fullt scope -full-scope-allowed.tooltip=Lar deg \u00E5 deaktivere alle restriksjoner. -scope.available-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller som kan bli tildelt til scope. -assigned-roles=Tildelte roller -assigned-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller tildelt til scope. -effective-roles=Effektive roller -realm.effective-roles.tooltip=Tildelte sikkerhetsdomeneniv\u00E5-roller som kan ha blitt arvet fra en sammensatt rolle. -select-client-roles.tooltip=Velg en klient for \u00E5 se roller for klient -assign.available-roles.tooltip=Klientroller som er tilgjengelige til \u00E5 bli tildelt. -client.assigned-roles.tooltip=Tildelte klientroller. -client.effective-roles.tooltip=Tildelte klientroller som kan ha blitt arvet fra en sammensatt rolle. -basic-configuration=Basiskonfigurasjon -node-reregistration-timeout=Timeout for re-registrering av node -node-reregistration-timeout.tooltip=Intervall for \u00E5 angi maksimum tid for registrerte klienters clusternoder for \u00E5 re-registreres. Hvis en clusternode ikke sender re-regisreringsforesp\u00F8rsel til Keycloak innen dette intervallet, vil den bli uregistrert fra Keycloak. -registered-cluster-nodes=Registrerte clusternoder -register-node-manually=Register node manuelt -test-cluster-availability=Test cluster tilgjengelighet -last-registration=Siste registrering -node-host=Nodevert -no-registered-cluster-nodes=Ingen registrerte clusternoder tilgjengelig -cluster-nodes=Clusternoder -add-node=Legg til node -active-sessions.tooltip=Totalt antall aktive brukersesjoner for denne klienten. -show-sessions=Vis sesjoner -show-sessions.tooltip=Advarsel, dette er en potensielt kostbar operasjon avhengig av antall aktive sesjoner. -user=Bruker -from-ip=Fra IP -session-start=Start av sesjon -first-page=F\u00F8rste side -previous-page=Forrige side -next-page=Neste side -client-revoke.not-before.tooltip=Opphev alle token utstedt f\u00F8r denne datoen for denne klienten. -client-revoke.push.tooltip=Hvis administrator URL er konfigurert for denne klienten, dytt denne policyen p\u00E5 denne klienten. -select-a-format=Velg et format -download=Last ned -offline-tokens=Offline tokens -offline-tokens.tooltip=Totalt antall offline tokens for denne klienten. -show-offline-tokens=Vis offline tokens -show-offline-tokens.tooltip=Advarsel, dette er en potensielt kostbar operasjon avhengig av antall offline tokens. -token-issued=Utgitt token -last-access=Sist aksessert -last-refresh=Siste refresh -key-export=Eksporter n\u00F8kkel -key-import=Importer n\u00F8kkel -export-saml-key=Eksporter SAML n\u00F8kkel -import-saml-key=Importer SAML n\u00F8kkel -realm-certificate-alias=Alias for sikkerhetsdomenesertifikat -realm-certificate-alias.tooltip=Sertifikat for sikkerhetsdomenet er ogs\u00E5 lagret i arkivet. Dette er aliaset. -signing-key=Signeringsn\u00F8kkel -saml-signing-key=SAML signeringsn\u00F8kkel -private-key=Privatn\u00F8kkel -generate-new-keys=Generer nye n\u00F8kler -export=Eksporter -encryption-key=Krypteringsn\u00F8kkel -saml-encryption-key.tooltip=SAML krypteringsn\u00F8kkel. -service-accounts=Tjenestekonto-konto -service-account.available-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller som kan bli tildelt til tjeneste-konto. -service-account.assigned-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller tildelt service-konto. -service-account-is-not-enabled-for=Tjeneste-konto er ikke aktivert for {{client}} -create-protocol-mappers=Opprett protokollmappere -create-protocol-mapper=Opprett protokollmapper -protocol=Protokoll -protocol.tooltip=Protokoll... -id=ID -mapper.name.tooltip=Navn p\u00E5 mapper. -mapper.consent-required.tooltip=Ved tildeling av midlertidig tilgang m\u00E5 brukeren samtykke til \u00E5 gi denne informasjonen til klienten? -consent-text=Samtykketekst -consent-text.tooltip=Tekst som blir vist p\u00E5 side for samtykke. -mapper-type=Mappertype -mapper-type.tooltip=Type mapper -# realm identity providers -identity-providers=Identitetsleverand\u00F8r -table-of-identity-providers=Liste over identitetsleverand\u00F8rer -add-provider.placeholder=Legg til leverand\u00F8r... -provider=Leverand\u00F8r -gui-order=Rekkef\u00F8lge for brukergrensesnitt -first-broker-login-flow=Flyt for f\u00F8rste innlogging -post-broker-login-flow=Post-p\u00E5loggingsflyt -redirect-uri=Redirect URI -redirect-uri.tooltip=Redirect URI som skal brukes n\u00E5r du konfigurerer identitetsleverand\u00F8ren. -alias=Alias -identity-provider.alias.tooltip=Aliaset identifiserer en identitetsleverand\u00F8r og kan brukes for \u00E5 bygge en redirect uri. -identity-provider.enabled.tooltip=Aktiver/deaktiver denne identitetsleverand\u00F8ren. -authenticate-by-default=Autentiser som standard -identity-provider.authenticate-by-default.tooltip=Indikerer om en leverand\u00F8r burde fors\u00F8kes \u00E5 brukes om standard for autentisering selv om innloggingssiden enda ikke har blitt vist. -store-tokens=Lagre Tokens -identity-provider.store-tokens.tooltip=Aktiver/deaktiver hvis tokens m\u00E5 bli lagret etter at brukere har blitt autentisert. -stored-tokens-readable=Lagrede lesbare tokens -identity-provider.stored-tokens-readable.tooltip=Aktiver/deaktiver hvis nye brukere kan lese lagrede tokens. Dette tildeles broker.read-token rollen. -update-profile-on-first-login=Oppdater profil ved f\u00F8rste innlogging -on=P\u00E5 -on-missing-info=Ved manglende informasjon -off=Av -update-profile-on-first-login.tooltip=Definer vilk\u00E5rene en bruker m\u00E5 oppfylle for \u00E5 oppdatere sin profil ved f\u00F8rste innlogging. -trust-email=Stol p\u00E5 e-post -trust-email.tooltip=Hvis aktivert vil ikke e-post levert av denne leverand\u00F8ren bli verifisert selv om verifisering er aktivert for sikkerhetsdomenet. -gui-order.tooltip=Antall som angir rekkef\u00F8lgen av leverand\u00F8rer i brukergrensesnittet (For eksempel p\u00E5 innloggingssiden). -first-broker-login-flow.tooltip=Alias for autentiseringsflyt, som trigges etter f\u00F8rste innlogging med denne identitetsleverand\u00F8ren. Begrepet 'F\u00F8rste innlogging' betyr at det enn\u00E5 ikke eksisterer en Keycloak-konto koblet til den autentiserte kontoen til identitetsleverand\u00F8ren. -post-broker-login-flow.tooltip=Alias for autentiseringsflyt, som trigges etter hver innlogging med denne identitetsleverand\u00F8ren. Nyttig om man \u00F8nsker tilleggsverifikasjon av hver bruker autentisert med denne identitetsleverand\u00F8ren (for eksempel med engangskode/engangspassord). La denne st\u00E5 tom om du ikke \u00F8nsker at tilleggautentisering skal bli trigget etter en innlogging med denne identitetsleverand\u00F8ren. Merk ogs\u00E5 at implementasjonen av denne autentikatoren m\u00E5 anta at bruker allerede er satt i ClientSession ettersom identitetsleverand\u00F8ren allerede setter det. -openid-connect-config=OpenID Connect konfigurasjon -openid-connect-config.tooltip=OIDC SP og ekstern IDP-konfigurasjon. -authorization-url=Autorisasjons URL -authorization-url.tooltip=Autorisasjons URLen. -token-url=Token URL -token-url.tooltip=Token URLen. -logout-url=Utloggings URL -identity-provider.logout-url.tooltip=Endepunkt for avsluttende sesjon som brukes for \u00E5 logge ut bruker fra ekstern IDP. -backchannel-logout=Backchannel utlogging -backchannel-logout.tooltip=St\u00F8tter ekstern IDP backchannel utlogging? -user-info-url=Brukerinfo URL -user-info-url.tooltip=Brukerinfo URLen. Denne er valgfri. -identity-provider.client-id.tooltip=Klienten eller klientidentifikator registrert hos identitetsleverand\u00F8ren. -client-secret=Klient secret -show-secret=Vis secret -hide-secret=Skjul secret -client-secret.tooltip=Klienten eller klient secret registrert hos identitetsleverand\u00F8ren. -issuer=Utgiver -issuer.tooltip=Identifikator for utgiver av foresp\u00F8rselen. Hvis dette ikke er oppgitt vil ingen validering utf\u00F8res. -default-scopes=Standard Scopes -identity-provider.default-scopes.tooltip=Scopes som sendes n\u00E5r du ber om autorisasjon. Dette kan v\u00E6re en liste med scopes separert med mellomrom. Standard er satt til 'openid'. -prompt=Prompt -unspecified.option=uspesifisert -none.option=Ingen -consent.option=samtykke -login.option=Innlogging -select-account.option=velg_konto (select_account) -prompt.tooltip=Spesifiserer om autorisasjonsserver skal be sluttbruker om re-autentisering og samtykke. -validate-signatures=Valider signaturer -identity-provider.validate-signatures.tooltip=Aktiver/deaktiver signaturvalidering av eksterne IDP signaturer. -validating-public-key=Valider offentlig n\u00F8kkel -identity-provider.validating-public-key.tooltip=PEM format for offentlig n\u00F8kkel som m\u00E5 brukes for \u00E5 kontrollere eksterne IDP signaturer. -import-external-idp-config=Importer ekstern IDP konfigurasjon -import-external-idp-config.tooltip=Lar deg laste inn ekstern IDP metadata fra en konfigurasjonsfil eller ved \u00E5 laste det ned fra en URL. -import-from-url=Importer fra URL -identity-provider.import-from-url.tooltip=Importer metadata fra et eksternt IDP discovery descriptor. -import-from-file=Importer fra fil -identity-provider.import-from-file.tooltip=Importer metadata fra en nedlastet IDP discovery descriptor. -saml-config=SAML konfigurasjon -identity-provider.saml-config.tooltip=SAML SP og ekstern IDP konfigurasjon. -single-signon-service-url=Single sign-on service URL -saml.single-signon-service-url.tooltip=URL som m\u00E5 brukes for \u00E5 sende autentiseringsforesp\u00F8rsler (SAML AuthnRequest). -single-logout-service-url=Single utloggingstjeneste URL -saml.single-logout-service-url.tooltip=URL som m\u00E5 brukes for \u00E5 sende utloggingsforesp\u00F8rsler. -nameid-policy-format=Policy for nameid-format -nameid-policy-format.tooltip=Angir URI-referanse som tilsvarer et format for identifikator-navn. Standard er satt til urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -http-post-binding-response=HTTP-POST binding svar -http-post-binding-response.tooltip=Indikerer om man skal svare p\u00E5 foresp\u00F8rsler som bruker HTTP-POST binding eller ikke. Hvis satt til false, vil HTTP-REDIRECT binding bli brukt. -http-post-binding-for-authn-request=HTTP-POST binding for AuthnRequest -http-post-binding-for-authn-request.tooltip=Indikerer om AuthnRequests m\u00E5 bli sendt ved \u00E5 bruke en HTTP-POST binding. Hvis satt til false, vil HTTP-REDIRECT binding bli brukt. -want-authn-requests-signed=Vil ha AuthnRequests signert -want-authn-requests-signed.tooltip=Indikerer om identitetsleverand\u00F8r forventer en signert AuthnRequest. -force-authentication=Force autentisering -identity-provider.force-authentication.tooltip=Indikerer om identitetsleverand\u00F8r m\u00E5 autentisere presentat\u00F8ren direkte i stedet for \u00E5 stole p\u00E5 en tidligere sikkerhetskontekst. -validate-signature=Valider signatur -saml.validate-signature.tooltip=Aktiver/deaktiver signaturvalidering av SAML svar. -validating-x509-certificate=Validerer X509 sertifikat -validating-x509-certificate.tooltip=Sertifikatet i PEM format som m\u00E5 brukes for \u00E5 se etter signaturer. -saml.import-from-url.tooltip=Importer metadata fra et eksternt IDP SAML entity descriptor. -social.client-id.tooltip=Identifikator for klient registrert hos identitetsleverand\u00F8r. -social.client-secret.tooltip=Klient secret registrert hos identitetsleverand\u00F8r. -social.default-scopes.tooltip=Scopes som sendes n\u00E5r tillatelse for autorisasjon blir etterspurt. Se dokumentasjon for mulige verdier, separator og standardverdi. -key=N\u00F8kkel -stackoverflow.key.tooltip=N\u00F8kkelen er hentet fra klientregistrering p\u00E5 Stack Overflow. - -# User federation -sync-ldap-roles-to-keycloak=Synkroniser LDAP-roller til Keycloak -sync-keycloak-roles-to-ldap=Synkroniser Keycloak-roller til LDAP -sync-ldap-groups-to-keycloak=Synkroniser LDAP-grupper til Keycloak -sync-keycloak-groups-to-ldap=Synkroniser Keycloak-grupper til LDAP - -realms=Sikkerhetsdomener -realm=Sikkerhetsdomene - -identity-provider-mappers=Identitetsleverand\u00F8rmappere -create-identity-provider-mapper=Opprett identitetsleverand\u00F8rmappere -add-identity-provider-mapper=Legg til identitetsleverand\u00F8rmappere -client.description.tooltip=Angir beskrivelse av klienten. For eksempel\: 'Min klient for timelister'. St\u00F8tter n\u00F8kler for lokaliserte verdier. For eksempel\: ${my_client_description} - -expires=Utl\u00F8per -expiration=Holdbarhet -expiration.tooltip=Angir hvor lenge et token skal v\u00E6re gyldig -count=Teller -count.tooltip=Angir hvor mange klienter som kan bli opprettet ved \u00E5 bruke token. -remainingCount=Resterende antall -created=Opprettet -back=Tilbake -initial-access-tokens=F\u00F8rste access tokens -initial-access-tokens.tooltip=F\u00F8rste access tokens for dynamisk registrering av klienter. Foresp\u00F8rsler med disse tokens kan bli sent fra alle verter. -add-initial-access-tokens=Legg til f\u00F8rste access token -initial-access-token=F\u00F8rste access token -initial-access.copyPaste.tooltip=Kopier/lim inn f\u00F8rste access token f\u00F8r du navigerer vekk fra denne siden ettersom det ikke er mulig \u00E5 hente den senere. -continue=Fortsett -initial-access-token.confirm.title=Kopier f\u00F8rste access token -initial-access-token.confirm.text=Vennligst kopier og lim inn f\u00F8rste access token f\u00F8r du bekrefter ettersom den ikke kan hentes senere -no-initial-access-available=F\u00F8rste access token er ikke tilgjengelig - -trusted-hosts-legend=Betrodde verter for klientregistrering -trusted-hosts-legend.tooltip=Verter, som er betrodd for klientregistrering. klientregistreringsforesp\u00F8rsler fra disse vertene kan bli sent selv uten f\u00F8rste access token. Antall klientregistreringer fra denne spesifikke verten kan bli begrenset til et spesifisert antall. -no-client-trusted-hosts-available=Ingen betrodde verter er tilgjengelig -add-client-reg-trusted-host=Legg til betrodd vert -hostname=Vertsnavn -client-reg-hostname.tooltip=Vertsnavn eller IP-adresse. Klientregistreringsforesp\u00F8rsler fra denne verten/adressen vil bli betrodd og tillat til \u00E5 registrere en ny klient. -client-reg-count.tooltip=Tillat antall klientregistreringsforesp\u00F8rsler fra en spesifikk vert. Du m\u00E5 restarte denne n\u00E5r grensen er n\u00E5dd. -client-reg-remainingCount.tooltip=Gjenv\u00E6rende antall klientregistreringsforesp\u00F8rsler fra denne verten. Du m\u00E5 restarte denne n\u00E5r grensen er n\u00E5dd. -reset-remaining-count=Tilbakestill gjenst\u00E5ende antall - -client-scopes=Klientmaler -client-scopes.tooltip=Klientmaler tillater deg \u00E5 definere felles konfigurasjon som er delt av flere klienter. - -groups=Grupper - -group.add-selected.tooltip=Sikkerhetsdomene-roller som kan bli tildelt gruppen. -group.assigned-roles.tooltip=Sikkerhetsdomene-roller mappet til gruppen. -group.effective-roles.tooltip=Alle sikkerhetsdomene-rollemappinger. Noen roller kan ha blitt arvet fra en sammensatt rolle. -group.available-roles.tooltip=Roller som kan tildeles fra denne klienten. -group.assigned-roles-client.tooltip=Rollemapping for denne klienten. -group.effective-roles-client.tooltip=Rollemapping for denne klienten. Noen roller kan ha blitt arvet fra en mappet sammensatt rolle. - -default-roles=Standardroller -no-realm-roles-available=Ingen sikkerhetsdomener er tilgjengelig - -users=Brukere -user.add-selected.tooltip=Sikkerhetsdomene-roller som kan bli tildelt bruker. -user.assigned-roles.tooltip=Sikkerhetsdomene-roller mappet til bruker -user.effective-roles.tooltip=Alle sikkerhetsdomene-rollemappinger. Noen roller kan ha blitt arvet fra en sammensatt rolle. -user.available-roles.tooltip=Roller som kan tildeles fra denne klienten. -user.assigned-roles-client.tooltip=Rollemapping for denne klienten. -user.effective-roles-client.tooltip=Rollemapping for denne klienten. Noen roller kan ha blitt arvet fra en mappet sammensatt rolle. -default.available-roles.tooltip=Sikkerhetsdomene-roller som kan tildeles. -realm-default-roles=Standardroller for sikkerhetsdomene -realm-default-roles.tooltip=Sikkerhetsdomene-roller tildelt nye brukere. -default.available-roles-client.tooltip=Roller fra denne klienten som blir tildelt som standard. -client-default-roles=Standard klientroller -client-default-roles.tooltip=Roller fra denne klienten blir tildelt som standardrolle. -composite.available-roles.tooltip=Sikkerhetsdomene-roller knyttet til denne sammensatte rollen. -composite.associated-roles.tooltip=Sikkerhetsdomeneniv\u00E5-roller knyttet til denne sammensatte rollen. -composite.available-roles-client.tooltip=Roller fra denne klienten kan du assosiere med denne sammensatte rollen. -composite.associated-roles-client.tooltip=Klientroller knyttet til denne sammensatte rollen. -partial-import=Delvis import -partial-import.tooltip=Delvis import lar deg importere brukere, klienter og andre ressurser fra en tidligere eksportert json-fil. - -file=File -exported-json-file=Eksporter json-fil -import-from-realm=Importer fra sikkerhetsdomene -import-users=Importer brukere -import-groups=Importer grupper -import-clients=Importer klienter -import-identity-providers=Importer identitetsleverand\u00F8rer -import-realm-roles=Importer roller for sikkerhetsdomene -import-client-roles=Importer klientroller -if-resource-exists=Hvis en ressurs eksisterer -fail=Mislykkes -skip=Hopp over -overwrite=Skriv over -if-resource-exists.tooltip=Spesifiser hva som skal gj\u00F8res om du fors\u00F8ker \u00E5 importere en ressurs som allerede eksisterer. - -action=Handling -role-selector=Rollevelger -realm-roles.tooltip=Rolle for sikkerhetsdomene som kan velges. - -select-a-role=Velg en rolle -select-realm-role=Velg en rolle for sikkerhetsdomenet -client-roles.tooltip=Klientroller som kan velges. -select-client-role=Velg klientrolle - -client-template=Klientmal -client-template.tooltip=Klientmal som denne klienten arver konfigurasjonen fra -client-saml-endpoint=Endepunkt for klient-SAML -add-client-scope=Legg til klientmal - -manage=H\u00E5ndter -authentication=Autentisering -user-storage=Brukerlagring -user-federation=Brukerfederering -events=Hendelser -realm-settings=Innstillinger for sikkerhetsdomene -configure=Konfigurer -select-realm=Velg sikkerhetsdomene -add=Legg til - -client-scope.name.tooltip=Navn p\u00E5 klientmal. M\u00E5 v\u00E6re unik i sikkerhetsdomenet. -client-scope.description.tooltip=Beskrivelse av klientmal -client-scope.protocol.tooltip=Hvilken SSO protokoll-konfigurasjon som blir levert av denne klientmalen - -add-user-federation-provider=Legg til leverand\u00F8r for brukerfederering -add-user-storage-provider=Legg til brukerlagringsleverand\u00F8r -required-settings=P\u00E5krevde innstillinger -provider-id=Leverand\u00F8r-ID -console-display-name=Konsoll vis navn -console-display-name.tooltip=Viser navn p\u00E5 leverand\u00F8r n\u00E5r den er lenket i administratorkonsollen. -priority=Prioritet -priority.tooltip=Prioritet av leverand\u00F8r n\u00E5r et oppslag av bruker utf\u00F8res. Lavest f\u00F8rst. -sync-settings=Innstillinger for synkronisering -periodic-full-sync=Fullstendig periodisk synkronisering -periodic-full-sync.tooltip=Skal fullstendig periodisk synkronisering av leverand\u00F8r-brukere til Keycloak v\u00E6re aktivert eller deaktivert -full-sync-period=Fullstendig synkroniseringsperiode -full-sync-period.tooltip=Periode for fullstendig synkronisering i sekunder -periodic-changed-users-sync=Periodisk synkronisering av endrede brukere -periodic-changed-users-sync.tooltip=Skal periodisk synkronisering av endrede eller nylig opprettede leverand\u00F8r-brukere til Keycloak v\u00E6re aktivert eller deaktivert -changed-users-sync-period=Synkroniseringsperiode for endrede brukere -changed-users-sync-period.tooltip=Periode for synkronisering av endrede eller nylig opprettede leverand\u00F8r-brukere i sekunder. -synchronize-changed-users=Synkroniser endrede brukere -synchronize-all-users=Synkroniser alle brukere -kerberos-realm=Sikkerhetsdomene for Kerberos -kerberos-realm.tooltip=Navn p\u00E5 kerberos-sikkerhetsdomene. For eksempel FOO.ORG -server-principal=Server principal -server-principal.tooltip=Fullstendig navn p\u00E5 server principal for HTTP-service som inkluderer server og domenenavn. For eksempel HTTP/host.foo.org@FOO.ORG -keytab=KeyTab -keytab.tooltip=Plassering av Kerberos-keytab fil som inneholder legitimasjonsdetaljer for server principal. For eksempel /etc/krb5.keytab -debug=Feils\u00F8king -debug.tooltip=Aktiver/deaktiver logging av feils\u00F8king til standard output for Krb5LoginModule. -allow-password-authentication=Tillat autentisering med passord -allow-password-authentication.tooltip=Aktiver/deaktivert muligheten for autentisering med brukernavn/passord mot databasen til Kerberos -edit-mode=Redigeringsmodus -edit-mode.tooltip=READ_ONLY betyr at passordoppdateringer ikke er tillatt, og at bruker alltid autentiseres med et Kerberos-passord. UNSYNCED betyr at bruker kan endre sitt passord i databasen til Keycloak og at denne vil bli brukt i stedet for Kerberos-passordet. -ldap.edit-mode.tooltip=READ_ONLY er et skrivebeskyttet LDAP-lager. WRITABLE betyr at data vil bli synkronisert tilbake til LDAP p\u00E5 foresp\u00F8rsel. UNSYNCED betyr at brukerdata vil bli importert, men vil ikke bli synkronisert tilbake til LDAP. -update-profile-first-login=Oppdater profil ved f\u00F8rste innlogging -update-profile-first-login.tooltip=Oppdater profil ved f\u00F8rste innlogging -sync-registrations=Synkroniser registreringer -ldap.sync-registrations.tooltip=Skal nylig opprettede brukere bli opprettet innenfor et LDAP-lager? Prioritet p\u00E5virker hvilken leverand\u00F8r som er valgt for \u00E5 synkronisere den nye brukeren. -vendor=Leverand\u00F8r -ldap.vendor.tooltip=LDAP leverand\u00F8r (provider) -username-ldap-attribute=Brukernavn LDAP-attributt -ldap-attribute-name-for-username=LDAP-attributtnavn for brukernavn -username-ldap-attribute.tooltip=Navn p\u00E5 LDAP-attributt, som er kartlagt som et Keycloak-brukernavn. For mange LDAP-serverleverand\u00F8rer kan dette v\u00E6re 'uid'. For Active directory kan dette v\u00E6re 'sAMAccountName' eller 'cn'. Attributtet burde v\u00E6re fylt for alle LDAP-brukeroppf\u00F8ringer om du vil importere fra LDAP til Keycloak. -rdn-ldap-attribute=RDN LDAP-attributt -ldap-attribute-name-for-user-rdn=LDAP-attributtnavn for RDN-bruker -rdn-ldap-attribute.tooltip=Navn p\u00E5 LDAP-attributt, som brukes som RDN (topp-attributt) for en typisk DN-bruker. Vanligvis er dette det samme som LDAP-attributtet for brukernavn, men det er ikke p\u00E5krevd. For eksempel for Active directory er det vanlig \u00E5 bruke cn' som RDN-attributt n\u00E5r attributtet for brukernavn kan v\u00E6re 'sAMAccountName'. -uuid-ldap-attribute=UUID LDAP-attributt -ldap-attribute-name-for-uuid=LDAP-attributtnavn for UUID. -uuid-ldap-attribute.tooltip=Navn p\u00E5 LDAP-attributtet, som brukes som en unik objekt-identifikator (UUID) for objekter i LDAP. For mange LDAP-serverleverand\u00F8rer er det 'entryUUID', men noen er annerledes. For eksempel for Active directory b\u00F8r det v\u00E6re 'objectGUID'. Hvis din LDAP-server ikke st\u00F8tter UUID, kan du bruke hvilket som helst annet attributt, som er ment \u00E5 v\u00E6re unikt blant LDAP-brukere i treet. For eksempel 'uid' eller 'entryDN'. -user-object-classes=Brukerobjektklasser -ldap-user-object-classes.placeholder=Objektklasser for LDAP-bruker (separert med komma) - -ldap-connection-url=LDAP tilkoblings URL -ldap-users-dn=LDAP brukere DN -ldap-bind-dn=LDAP bind DN -ldap-bind-credentials=LDAP bind innloggingsdetaljer -ldap-filter=LDAP filter -ldap.user-object-classes.tooltip=Alle verdier av LDAP objectClass-attributtet for brukere i LDAP er separert med komma. For eksempel, 'inetOrgPerson, organizationalPerson'. Nylig opprettede Keycloak-brukere vil bli skrevet til LDAP med alle disse objektklassene og eksisterende LDAP-brukeroppf\u00F8ringer vil bli funnet om de inneholder de samme objektklassene. - -connection-url=Tilkoblings URL -ldap.connection-url.tooltip=Tilkoblings URL din til LDAP-server -test-connection=Testkobling -users-dn=DN-brukere -ldap.users-dn.tooltip=Fullstendig DN av LDAP-tre hvor dine brukere befinner seg. Denne spesifikke DN er forelder til LDAP-brukere. Den kan for eksempel v\u00E6re 'ou=users,dc=example,dc=com' hvis din typiske bruker vil ha en DN som 'uid=john,ou=users,dc=example,dc=com' -authentication-type=Autentiseringstype -ldap.authentication-type.tooltip=LDAP Autentiseringstype. For \u00F8yeblikket er kun mekanismene 'ingen' (anonym LDAP autentisering) eller 'enkel' (bind innloggingsdetaljer) tilgjengelig. -bind-dn=Bind DN -ldap.bind-dn.tooltip=DN av LDAP-administrator, som kan brukes av Keycloak for \u00E5 aksessere LDAP-server -bind-credential=Bind innloggingsdetaljer -ldap.bind-credential.tooltip=Passord for LDAP administrator -test-authentication=Testautentisering -custom-user-ldap-filter=Egendefinert filter for LDAP-bruker -ldap.custom-user-ldap-filter.tooltip=TilleggsLDAP-filter for \u00E5 filtrere s\u00F8kte brukere. La filteret v\u00E6re tomt om du ikke trenger et ekstra filter. Pass p\u00E5 at den starter med '(' og slutter med ')' -search-scope=Scope for s\u00F8k -ldap.search-scope.tooltip=For et niv\u00E5 s\u00F8ker vi etter brukere kun i DNser spesifisert av bruker-DNser. For subtre s\u00F8ker vi i hele subtreet. Se LDAP dokumentasjon for mer informasjon. -use-truststore-spi=Bruk Truststore SPI -ldap.use-truststore-spi.tooltip=Spesifiserer om LDAP-koblingen vil bruke truststore SPI med truststore konfigurert i keycloak-server.json. 'Alltid' betyr at den alltid vil brukes. 'Aldri' betyr at den ikke brukes. 'Kun for ldaps' betyr at den vil brukes hvis din koblings URL bruker ldaps. Merk at selv om keycloak-server.json ikke er konfigurert, vil default Java cacerts eller sertifikat spesifisert i 'javax.net.ssl.trustStore' bli brukt. -connection-pooling=Connection Pooling -ldap.connection-pooling.tooltip=Burde Keycloak bruke connection pooling for \u00E5 aksessere LDAP-serveren? -ldap.pagination.tooltip=St\u00F8tter LDAP-serveren paginering? -kerberos-integration=Kerberos Integrasjon -allow-kerberos-authentication=Tillat autentisering med Kerberos -ldap.allow-kerberos-authentication.tooltip=Aktiver/deaktiver HTTP autentisering av brukere med SPNEGO/Kerberos tokens. Informasjonen om autentiserte brukere vil bli klargjort fra denne LDAP-serveren. -use-kerberos-for-password-authentication=Bruk Kerberos for autentisering av passord -ldap.use-kerberos-for-password-authentication.tooltip=Bruk Kerberos-innloggingsmodul for \u00E5 autentisere brukernavn/passord mot Kerberos-server i stedet for autentisering mot LDAP-server med Directory Service API -batch-size=Batch st\u00F8rrelse -ldap.batch-size.tooltip=Antall LDAP-brukere som vil bli importert fra LDAP til Keycloak innen en enkelt transaksjon. -ldap.periodic-full-sync.tooltip=Om fullstendig periodisk synkronisering av LDAP-brukere til Keycloak vil v\u00E6re aktivert eller deaktivert. -ldap.periodic-changed-users-sync.tooltip=Om periodisk synkronisering av endret eller nylig opprettede LDAP-brukere til Keycloak vil v\u00E6re aktivert eller deaktivert. -ldap.changed-users-sync-period.tooltip=Tidsperiode for synkronisering av endrede eller nylig opprettede LDAP-brukere i sekunder. -user-federation-mappers=Mappere for brukerfederering -create-user-federation-mapper=Opprett mapper for brukerfederering -add-user-federation-mapper=Legg til mapper for brukerfederering -provider-name=Leverand\u00F8rnavn -no-user-federation-providers-configured=Ingen leverand\u00F8r for brukerfederering er konfigurert -no-user-storage-providers-configured=Ingen leverand\u00F8r for brukerlagring er konfigurert -add-identity-provider=Legg til identitetsleverand\u00F8r -add-identity-provider-link=Legg til lenke til identitetsleverand\u00F8r -identity-provider=Identitetsleverand\u00F8r -identity-provider-user-id=Bruker-ID for identitetsleverand\u00F8r -identity-provider-user-id.tooltip=Unik ID for brukeren p\u00E5 identitetsleverand\u00F8rens side -identity-provider-username=Brukernavn til identitetsleverand\u00F8r -identity-provider-username.tooltip=Brukernavn p\u00E5 identitetsleverand\u00F8rens side -pagination=Paginering - -browser-flow=Nettleserflyt -browser-flow.tooltip=Velg flyten du \u00F8nsker \u00E5 bruke for nettleser-autentisering. -registration-flow=Registreringsflyt -registration-flow.tooltip=Velg flyten du \u00F8nsker for registrering. -direct-grant-flow=Direct Grant Flyt -direct-grant-flow.tooltip=Velg flyten du \u00F8nsker \u00E5 bruke for direct grant autentisering. -reset-credentials=Tilbakestill innloggingsdetaljer -reset-credentials.tooltip=Velg flyten du \u00F8nsker \u00E5 bruke n\u00E5r brukeren har glemt sine p\u00E5loggingsdetaljer. -client-authentication=Autentisering av klient -client-authentication.tooltip=Velg flyten du \u00F8nsker \u00E5 bruke for autentisering av klienter. -new=Ny -copy=Kopi -add-execution=Legg til eksekvering -add-flow=Legg til flyt -auth-type=Type auth -requirement=Krav -config=Konfig -no-executions-available=Ingen tilgjengelig eksekvering -authentication-flows=Autentiseringsflyt -create-authenticator-config=Opprett konfig for autentikator -authenticator.alias.tooltip=Navn p\u00E5 konfigurasjonen -otp-type=Type engangskode -time-based=Tidsbasert -counter-based=Tellerbasert -otp-type.tooltip=Totp er et tidsbasert engangspassord. 'hotp' er et teller basert engangspassord hvor serveren f\u00F8lger med p\u00E5 en teller som den kan hashe mot. -otp-hash-algorithm=OTP hash-algoritme -otp-hash-algorithm.tooltip=Hva slags hashing algoritme skal brukes for \u00E5 generere OTP. -number-of-digits=Antall siffer -otp.number-of-digits.tooltip=Hvor mange sifre skal OTP ha? -look-ahead-window=Look Ahead Window -otp.look-ahead-window.tooltip=Hvor langt frem b\u00F8r serveren se i tilfelle token generator og server er ute av tidssynkronisering eller tellersynkronisering? -initial-counter=Initiell teller -otp.initial-counter.tooltip=Hva b\u00F8r den initielle tellerverdien v\u00E6re? -otp-token-period=Engangskode token -otp-token-period.tooltip=Hvor mange sekunder burde et engangskode token v\u00E6re gyldig? Standard er satt til 30 sekunder. -table-of-password-policies=Liste over policy for passord -add-policy.placeholder=Legg til policy... -policy-type=Type policy -policy-value=Verdi for policy -admin-events=administratorhendelser -admin-events.tooltip=Viser lagrede administratorhendelser for sikkerhetsdomenet. Hendelser relaterer til administratorkontoen, for eksempel opprettelse av et sikkerhetsdomene. For \u00E5 aktivere persistente hendelser g\u00E5 til konfig. -login-events=innloggingshendelser -filter=Filtrer -update=Oppdater -reset=Tilbakestill -operation-types=Operasjonstyper -resource-types=Ressurstyper -select-operations.placeholder=Velg operasjoner... -select-resource-types.placeholder=Velg ressursyper... -resource-path=Filsti for ressurs -resource-path.tooltip=Sorter etter filsti for ressurs. St\u00F8tter jokertegn '*' for \u00E5 sjekke om den er lik en del av stien, og '**' for \u00E5 sjekke flere deler. For eksempel 'realms/*/clients/asbc' vil v\u00E6re lik klient-ID asbc i alle sikkerhetsdomener, mens 'realms/master/**' er lik alt i mastersikkerhetsdomenet. -date-(from)=Dato (Fra) -date-(to)=Dato (Til) -authentication-details=Autentiseringsdetaljer -ip-address=IP-adresse -time=Tid -operation-type=Operasjonstype -resource-type=Ressurstype -auth=Auth -representation=Representasjon -register=Registrer -required-action=P\u00E5krevd handling -default-action=Standard handling -auth.default-action.tooltip=Hvis aktivert, vil enhver ny bruker bli tilordnet denne p\u00E5krevde handlingen. -no-required-actions-configured=Ingen p\u00E5krevde handlinger er konfigurert -defaults-to-id=Standardverdi er id -flows=Flyt -bindings=Bindinger -required-actions=P\u00E5krevde handlinger -password-policy=Passordpolicy -otp-policy=Policy for engangskode -user-groups=Brukergruppe -default-groups=Standardgrupper -groups.default-groups.tooltip=Sett med grupper som nye brukere automatisk vil bli medlem av. -cut=Klipp -paste=Lim inn - -create-group=Opprett gruppe -create-authenticator-execution=Opprett autentiseringsutf\u00F8relse -create-form-action-execution=Opprett skjema for handlingsutf\u00F8relse -create-top-level-form=Opprett skjema for toppniv\u00E5 -flow.alias.tooltip=Spesifiserer visningsnavn for flyten. -top-level-flow-type=Flytstype for toppniv\u00E5 -flow.generic=generisk -flow.client=klient -top-level-flow-type.tooltip=Hvilken type toppniv\u00E5 flyt er det? Type 'klient' brukes for autentisering av klienter (applikasjoner) n\u00E5r generisk brukes for brukere og alt annet -create-execution-flow=Opprett eksekveringsflyt -flow-type=Type av flyt -flow.form.type=skjema -flow-type.tooltip=Hva slags skjema det er -form-provider=Skjemaleverand\u00F8r -default-groups.tooltip=Nyopprettede eller registrerte brukere vil automatisk bli lagt til disse gruppene -select-a-type.placeholder=velg en type -available-groups=Tilgjengelige grupper -available-groups.tooltip=Velg en gruppe du \u00F8nsker \u00E5 legge til som standard. -value=Verdi -table-of-group-members=Liste over gruppemedlemmer -last-name=Etternavn -first-name=Fornavn -email=E-postadresse -toggle-navigation=Toggle navigasjon -manage-account=Administrer konto -sign-out=Logg ut -server-info=Serverinformasjon -resource-not-found=Ressurs ikke funnet... -resource-not-found.instruction=Vi kunne ikke finne ressursen du leter etter. Vennligst kontroller at nettadressen du oppga er riktig. -go-to-the-home-page=G\u00E5 til hjemmeside » -page-not-found=Side ikke funnet... -page-not-found.instruction=Vi kunne ikke finne siden du ser etter. Vennligst kontroller at nettadressen du skrev inn er riktig. -events.tooltip=Viser lagrede hendelser for sikkerhetsdomenet. Hendelser er relatert til brukerkontoer, for eksempel innlogging av bruker. For \u00E5 aktivere persistente hendelser g\u00E5 til konfig. -select-event-types.placeholder=Velg hendelsestyper... -events-config.tooltip=Viser konfigurasjonsalternativer for \u00E5 muliggj\u00F8re persistente bruker- og administratorhendelser. -select-an-action.placeholder=Velg en handling... -event-listeners.tooltip=Konfigurer hvilke lyttere som skal motta eventer fra sikkerhetsdomenet. -login.save-events.tooltip=Hvis aktivert vil innloggingshendelser bli lagret i databasen, noe som gj\u00F8r hendelsene tilgjengelige for administrator og kontoadministrasjonskonsoll. -clear-events.tooltip=Sletter alle hendelser fra databasen. -events.expiration.tooltip=Setter utl\u00F8pstid for hendelser. Utl\u00F8pte hendelser vil med jevne mellomrom bli slettet fra databasen. -admin-events-settings=Innstillinger for administratorhendelser -save-events=Lagre hendelser -admin.save-events.tooltip=Hvis aktivert vil administratorhendelser bli lagret i databasen, som vil gj\u00F8re hendelsene tilgjengelige i administrasjonskonsollen. -saved-types.tooltip=Konfigurer hvilke eventtyper som lagres. -include-representation=Inkluder representasjon -include-representation.tooltip=Inkluder JSON-representasjon for \u00E5 skape og oppdatere foresp\u00F8rsler. -clear-admin-events.tooltip=Sletter alle administratorhendelser i databasen. -server-version=Serverversjon -info=Info -providers=Leverand\u00F8rer -server-time=Servertid -server-uptime=Oppetid for server -memory=Minne -total-memory=Totalt minne -free-memory=Ledig minne -used-memory=Brukt minne -system=System -current-working-directory=Gjeldende arbeidskatalog -java-version=Java versjon -java-vendor=Java leverand\u00F8r -java-runtime=Java Runtime -java-vm=Java VM -java-vm-version=Java VM versjon -java-home=Java hjem -user-name=Brukers navn -user-timezone=Tidssone for bruker -user-locale=Lokalitet for bruker -system-encoding=Systemenkoding -operating-system=Operativsystem (OS) -os-architecture=OS arkitektur -spi=SPI -granted-roles=Tildelte roller -granted-protocol-mappers=Innvilgede protokollmappere -additional-grants=Tillegsrettigheter -consent-created-date=Opprettet -consent-last-updated-date=Sist oppdatert -revoke=Opphev -new-password=Nytt passord -password-confirmation=Passord bekreftelse -reset-password=Tilbakestill passord -credentials.temporary.tooltip=Hvis aktivert, er brukeren p\u00E5krevd til \u00E5 endre passordet ved neste innlogging -remove-totp=Fjern OTP -credentials.remove-totp.tooltip=Fjern generator for engangspassord for bruker. -reset-actions=Tilbakestill handlinger -credentials.reset-actions.tooltip=Sett med handlinger som kan utf\u00F8res ved \u00E5 sende en bruker en Tilbakestillingshandling for E-post. 'Verifiser e-post' sender en e-post til brukeren for \u00E5 verifisere e-postadresse. 'Oppdater profil' krever at bruker legger inn personlig informasjon. 'Oppdater passord' krever at bruker skriver inn et nytt passord. 'Konfigurer OTP' krever installasjon av en passordgenerator for mobil. -reset-actions-email=Tilbakestillingshandling for E-post. -send-email=Send e-post -credentials.reset-actions-email.tooltip=Sender en e-post til en bruker med en lenke. Ved \u00E5 klikke p\u00E5 denne lenken vil brukeren f\u00E5 lov til \u00E5 utf\u00F8re tilbakestillingshandlinger. Brukeren trenger ikke logge inn f\u00F8r dette. For eksempel, sett handlingen for \u00E5 oppdatere passord, klikk p\u00E5 denne knappen, og brukeren vil kunne endre deres passord uten \u00E5 logge inn. -add-user=Legg til bruker -created-at=Opprettet ved -user-enabled=Bruker aktivert -user-enabled.tooltip=En deaktivert bruker kan ikke logge inn. -user-temporarily-locked=Bruker er midlertidig l\u00E5st. -user-temporarily-locked.tooltip=Brukeren kan ha blitt l\u00E5st p\u00E5 grunn av at innloggingsfors\u00F8k har feilet for mange ganger. -unlock-user=L\u00E5s opp bruker -federation-link=Federeringslenke -email-verified=E-post verifisert -email-verified.tooltip=Har brukerens e-post blitt verifisert? -required-user-actions=P\u00E5krevde brukerhandlinger -required-user-actions.tooltip=Krev en handling n\u00E5r brukeren logger inn. 'Verifiser e-post' sender en e-post til brukeren for \u00E5 verifisere deres e-postadresse. 'Oppdater profil' krever at bruker legger inn personlig informasjon. 'Oppdater passord' krever at bruker skriver inn et nytt passord. 'Konfigurer OTP' krever installasjon av en passordgenerator for mobil. -locale=Lokalitet -select-one.placeholder=Velg en... -impersonate=Utgi deg for \u00E5 v\u00E6re bruker -impersonate-user=Utgi deg for \u00E5 v\u00E6re bruker -impersonate-user.tooltip=Logg inn som denne brukeren. Hvis bruker er i samme sikkerhetsdomene som deg, vil din n\u00E5v\u00E6rende innloggede sesjon bli logget ut f\u00F8r du blir logget inn som denne brukeren. -identity-provider-alias=Alias for identitetsleverand\u00F8r -provider-user-id=Bruker-ID for leverand\u00F8r -provider-username=Brukernavn for leverand\u00F8r -no-identity-provider-links-available=Ingen lenker for identitetsleverand\u00F8r er tilgjengelig -group-membership=Gruppemedlemskap -leave=Forlat -group-membership.tooltip=Gruppen som brukeren er medlem av. Velg en gruppe p\u00E5 listen og klikk p\u00E5 'Forlat' for \u00E5 forlate gruppen. -membership.available-groups.tooltip=Grupper som brukere kan bli medlem av. Velg en gruppe og klikk p\u00E5 'Bli med' knappen. -table-of-realm-users=Liste over sikkerhetsdomenebrukere -view-all-users=Se alle brukere -unlock-users=L\u00E5s opp brukere -no-users-available=Ingen brukere tilgjengelig -users.instruction=Vennligst skriv inn et s\u00F8k, eller klikk p\u00E5 Se alle brukere -consents=Samtykke -started=Startet -logout-all-sessions=Logg ut av alle sesjoner -logout=Logg ut -new-name=Nytt navn -ok=Ok -attributes=Attributter -role-mappings=Mapping av roller -members=Medlemmer -details=Detaljer -identity-provider-links=Lenker til identitetsleverand\u00F8r -register-required-action=Registrer p\u00E5krevd handling -gender=Kj\u00F8nn -address=Adresse -phone=Telefon -profile-url=Profil URL -picture-url=Bilde URL -website=Nettsted -import-keys-and-cert=Importer n\u00F8kler og sertifikat -import-keys-and-cert.tooltip=Last opp klientens n\u00F8kkelpar og sertifikat. -upload-keys=Last opp n\u00F8kler -download-keys-and-cert=Last ned n\u00F8kler og sertifikat -no-value-assigned.placeholder=Ingen tilordnet verdi -remove=Fjern -no-group-members=Ingen gruppemedlemmer -temporary=Midlertidig -join=Bli med -event-type=Hendelsestype -events-config=Hendelseskonfigurasjon -event-listeners=Hendelseslyttere -login-events-settings=Innstillinger for innloggingshendelser -clear-events=Fjern hendelser -saved-types=Lagrede typer -clear-admin-events=Fjern administratorhendelser -clear-changes=Fjern endringer -error=Feil - -# Authz - # Authz Common -authz-authorization=Autorisasjon -authz-owner=Eier -authz-uri=URI -authz-scopes=Scope -authz-resource=Ressurs -authz-resource-type=Ressurstype -authz-resources=Ressurser -authz-scope=Scope -authz-authz-scopes=Autorisasjonsscopes -authz-policies=Policier -authz-permissions=Tillatelser -authz-evaluate=Evaluer -authz-icon-uri=Ikon URI -authz-icon-uri.tooltip=En URI som peker til et ikon. -authz-select-scope=Velg et scope -authz-select-resource=Velg en ressurs -authz-associated-policies=Assosierte policier -authz-any-resource=Enhver ressurs -authz-any-scope=Ethvert scope -authz-any-role=Enhver rolle -authz-policy-evaluation=Evaluering av policy -authz-select-client=Velg en klient -authz-select-user=Velg en bruker -authz-entitlements=Rettigheter -authz-no-resources=Ingen ressurser -authz-result=Resultat -authz-authorization-services-enabled=Autorisasjon aktivert -authz-authorization-services-enabled.tooltip=Aktiver/deaktiver finkornet autorisasjonssupport for en klient -authz-required=P\u00E5krevd - -# Authz Settings -authz-import-config.tooltip=Importer en JSON-fil som inneholder innstillinger for autorisasjon for denne ressursserveren. - -authz-policy-enforcement-mode=Modus for h\u00E5ndhevelse av policy -authz-policy-enforcement-mode.tooltip=Modus for h\u00E5ndhevelse av policy dikterer hvordan policier blir h\u00E5ndhevet n\u00E5r autorisasjonsforesp\u00F8rsler blir evaluert. 'H\u00E5ndhevende' betyr at foresp\u00F8rsler blir nektet som standard selv om det ikke er en policy knyttet til en gitt ressurs. 'Ettergivende' betyr at foresp\u00F8rsler blir tillatt selv om det ikke er en policy knyttet til en gitt ressurs. 'Deaktivert' deaktiverer fullstendig evalueringen av policier og tillater tilgang til enhver ressurs. -authz-policy-enforcement-mode-enforcing=H\u00E5ndhevende -authz-policy-enforcement-mode-permissive=Ettergivende -authz-policy-enforcement-mode-disabled=Deaktivert - -authz-remote-resource-management=H\u00E5ndtering av ekstern ressurs -authz-remote-resource-management.tooltip=Skal ressursene bli h\u00E5ndtert eksternt av ressursserveren? Hvis satt til false kan ressursene kun bli h\u00E5ndtert fra denne administratorkonsollen. - -authz-export-settings=Eksporter innstillinger -authz-export-settings.tooltip=Eksporter og last ned alle innstillinger for autorisasjon for denne ressursserveren. - - # Authz Resource List -authz-no-resources-available=Ingen tilgjengelige ressurser. -authz-no-scopes-assigned=Ingen tildelte scopes. -authz-no-type-defined=Ingen definert type. -authz-no-permission-assigned=Ingen tillatelse er tildelt. -authz-no-policy-assigned=Ingen tildelt policy. -authz-create-permission=Opprett tillatelse - - # Authz Resource Detail -authz-add-resource=Legg til ressurs -authz-resource-name.tooltip=Et unikt navn for denne ressursen. Navnet kan bli brukt til \u00E5 identifisere en ressurs og er nyttig i sp\u00F8rringer for en bestemt ressurs. -authz-resource-owner.tooltip=Eieren av denne ressursen. -authz-resource-type.tooltip=Ressurstype. Den kan brukes til \u00E5 gruppere ulike ressursinstanser av samme type. -authz-resource-uri.tooltip=En URI som ogs\u00E5 kan brukes for \u00E5 identifisere denne ressursen. -authz-resource-scopes.tooltip=Scopes assosiert med denne ressursen. - - # Authz Scope List -authz-add-scope=Legg til scope -authz-no-scopes-available=Ingen tilgjengelige scopes. - - # Authz Scope Detail -authz-scope-name.tooltip=Et unikt navn for dette scopet. Navnet kan bli brukt for \u00E5 identifisere et scope, og er nyttig i sp\u00F8rringer for en bestemt ressurs. - - # Authz Policy List -authz-all-types=Alle typer -authz-create-policy=Opprett policy -authz-no-policies-available=Ingen tilgjengelige policier. - - # Authz Policy Detail -authz-policy-name.tooltip=Navnet p\u00E5 denne policien. -authz-policy-description.tooltip=En beskrivelse av denne policien. -authz-policy-logic=Logikk -authz-policy-logic-positive=Positiv -authz-policy-logic-negative=Negativ -authz-policy-logic.tooltip=Logikken som dikterer hvordan beslutningspolicien skal utf\u00F8rres. Hvis 'Positiv', vil resulterende effekt (tillate eller nekte) oppn\u00E5dd under evalueringen av denne policien bli brukt for \u00E5 ta en beslutning. Hvis 'Negativ', vil resulterende effekt bli opphevet, med andre ord blir en tillatelse til et avslag og motsatt. -authz-policy-apply-policy=Anvend policy -authz-policy-apply-policy.tooltip=Spesifiserer alle policies som m\u00E5 bli anvendt for scopes definert av denne policien eller tillatelsen. -authz-policy-decision-strategy=Beslutningsstrategi -authz-policy-decision-strategy.tooltip=Beslutningsstrategi som dikterer hvordan policies knyttet til en gitt policy blir evaluert og hvordan endelig avgj\u00F8relse oppn\u00E5s. 'Bekreftende' betyr at minst en policy m\u00E5 evalueres til en positiv beslutning for at den samlede avgj\u00F8relsen kan bli positiv. 'Enstemmig' betyr at alle policies m\u00E5 evalueres til en positiv beslutning for at den samlede avgj\u00F8relsen kan bli positiv. 'Konsensus' betyr at antall positive beslutninger m\u00E5 v\u00E6re h\u00F8yere enn antall negative beslutninger. Hvis antallet av positive og negative er likt, blir den samlede avgj\u00F8relsen negativ. -authz-policy-decision-strategy-affirmative=Bekreftende -authz-policy-decision-strategy-unanimous=Enstemmig -authz-policy-decision-strategy-consensus=Konsensus -authz-select-a-policy=Velg en policy - - # Authz Role Policy Detail -authz-add-role-policy=Legg til policy for rolle -authz-no-roles-assigned=Ingen tildelte roller. -authz-policy-role-roles.tooltip=Spesifiser sikkerhetsdomenerolle(r) som tillates av denne policien. -authz-policy-role-clients.tooltip=Velger en klient for \u00E5 filtrere klientroller som kan bli tatt i bruk av denne policien. -authz-policy-role-client-roles.tooltip=Spesifiserer klientroller tillatt av denne policien. - - # Authz User Policy Detail -authz-add-user-policy=Legg til policy for bruker -authz-no-users-assigned=Ingen tildelte brukere. -authz-policy-user-users.tooltip=Spesifiser bruker(e) som tillates av denne policien. - - # Authz Client Policy Detail -authz-add-client-policy=Legg til policy for klient -authz-no-clients-assigned=Ingen tildelte klienter. -authz-policy-client-clients.tooltip=Spesifiser klient(er) som tillates av denne policien. - - # Authz Time Policy Detail -authz-add-time-policy=Legg til policy for tid -authz-policy-time-not-before.tooltip=Definerer tiden f\u00F8r policien M\u00C5 IKKE innvilges. Denne innvilges kun om gjeldende dato/tid er f\u00F8r eller lik denne verdien. -authz-policy-time-not-on-after=Ikke p\u00E5 eller etter -authz-policy-time-not-on-after.tooltip=Definerer tiden etter en policy M\u00C5 IKKE innvilges. Denne innvilges kun om gjeldende dato/tid er f\u00F8r eller lik denne verdien. - - # Authz JS Policy Detail -authz-add-js-policy=Legg til policy for JavaScript -authz-policy-js-code=Kode -authz-policy-js-code.tooltip=JavaScript-koden angir betingelsene for denne politikken. - - - # Authz Aggregated Policy Detail -authz-aggregated=Aggregert -authz-add-aggregated-policy=Legg til policy for aggregering. - - # Authz Permission List -authz-no-permissions-available=Ingen tilgjengelige tillatelser. - - # Authz Permission Detail -authz-permission-name.tooltip=Navnet p\u00E5 denne tillatelsen. -authz-permission-description.tooltip=En beskrivelse av denne tillatelsen. - - # Authz Resource Permission Detail -authz-add-resource-permission=Legg til tillatelse for ressurs. -authz-permission-resource-apply-to-resource-type=Bruk p\u00E5 ressurstype -authz-permission-resource-apply-to-resource-type.tooltip=Spesifiserer om denne tillatelsen skal gjelde for alle ressurser med en gitt type. I dette tilfellet vil tillatelsen bli evaluert for alle instanser av gitt ressurstype. -authz-permission-resource-resource.tooltip=Spesifiserer at denne tillatelsen m\u00E5 bli brukt for en spesifikk ressursinstans. -authz-permission-resource-type.tooltip=Spesifiserer at denne tillatelsen m\u00E5 bli anvendt for alle ressursinstanser for en gitt type. - - # Authz Scope Permission Detail -authz-add-scope-permission=Legg til tillatelse for scope -authz-permission-scope-resource.tooltip=Begrens scopes til de som er tilknyttet den valgte ressursen. Hvis dette ikke er valgt vil alle scopes v\u00E6re tilgjengelige. -authz-permission-scope-scope.tooltip=Spesifiserer at denne tillatelse m\u00E5 anvendes p\u00E5 en eller flere scopes. - - # Authz Evaluation -authz-evaluation-identity-information=Identitetsinformasjon -authz-evaluation-identity-information.tooltip=De tilgjengelige alternativene for \u00E5 konfigurere identitesinformasjon som vil bli brukt ved evaluering av policier. -authz-evaluation-client.tooltip=Velg klienten som vil utf\u00F8re denne autorisasjonsforesp\u00F8rselen. -authz-evaluation-user.tooltip=Velg en bruker hvis identitet vil bli brukt for \u00E5 s\u00F8ke tillatelser fra serveren. -authz-evaluation-role.tooltip=Velg en rolle som du vil knytte til den valgte brukeren. -authz-evaluation-new=Ny evaluering -authz-evaluation-re-evaluate=Re-evaluering -authz-evaluation-previous=Forrige evaluering -authz-evaluation-contextual-info=Kontekstuell informasjon -authz-evaluation-contextual-info.tooltip=Tilgjengelige valg for \u00E5 konfigurere enhver kontekstuell informasjon som vil bli brukt ved evaluering av policier. -authz-evaluation-contextual-attributes=Kontekstuelle attributter -authz-evaluation-contextual-attributes.tooltip=Ethvert attributt gitt av et kj\u00F8rende milj\u00F8 eller ved utf\u00F8relseskontekst. -authz-evaluation-permissions.tooltip=De tilgjengelige alternativene for \u00E5 konfigurere tillatelsene for hvilke policies som skal anvendes. -authz-evaluation-evaluate=Evaluer -authz-evaluation-any-resource-with-scopes=Enhver ressurs med scope(s) -authz-evaluation-no-result=Kunne ikke f\u00E5 et resultat for den gitte autorisasjonsforesp\u00F8rselen. Sjekk om de tilgjengelige ressursene er tilknyttet en policy. -authz-evaluation-no-policies-resource=Ingen policies ble funnet for denne ressursen. -authz-evaluation-result.tooltip=Det samlede resultatet for denne foresp\u00F8rselen for tillatelse. -authz-evaluation-scopes.tooltip=Liste over tillatte scopes. -authz-evaluation-policies.tooltip=Detaljer om hvilke policies som ble evaluert og deres avgj\u00F8relser. -authz-evaluation-authorization-data=Respons -authz-evaluation-authorization-data.tooltip=Representerer et token som b\u00E6rer autorisasjonsdata som et resultat av prosesseringen av en autorisasjonsforesp\u00F8rsel. Denne representasjonen er hva Keycloak sender ut til klienter som ettersp\u00F8r tillatelser. Sjekk autorisasjonsclaim for tillatelsene som ble gitt basert p\u00E5 n\u00E5v\u00E6rende autorisasjonsforesp\u00F8rsel. -authz-show-authorization-data=Vis autorisasjonsdata diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_pl.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_pl.properties deleted file mode 100644 index dd55d697f..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_pl.properties +++ /dev/null @@ -1 +0,0 @@ -# encoding: UTF-8 diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties deleted file mode 100644 index dba51b2c9..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_pt_BR.properties +++ /dev/null @@ -1,1097 +0,0 @@ -#encoding: utf-8 -consoleTitle=Console de Administração do Keycloak - -# Common messages -enabled=Habilitado -name=Nome -displayName=Nome de exibição -displayNameHtml=Nome de exibição HTML -save=Salvar -cancel=Cancelar -onText=Sim -offText=Não -client=Cliente -clients=Clientes -clear=Limpar -selectOne=Selecione Um... - -true=Sim -false=Não - -endpoints=Endpoints - -# Realm settings -realm-detail.enabled.tooltip=Usuários e clientes somente podem acessar um Realm se ele estiver habilitado -realm-detail.oidc-endpoints.tooltip=Exibe a configuração dos endpoints do OpenID Connect -registrationAllowed=Cadastro de usuário -registrationAllowed.tooltip=Habilita/desabilita a página de cadastro. Um link para a página de cadastro também será exibido na tela de login. -registrationEmailAsUsername=Email como nome de usuário -registrationEmailAsUsername.tooltip=Se habilitado o campo 'nome de usuário' será ocultado no formulário de cadastro e o e-mail será usado como nome de usuário para o novo cadastro. -editUsernameAllowed=Editar nome de usuário -editUsernameAllowed.tooltip=Se habilitado, o campo nome de usuário é editável, senão será apenas leitura. -resetPasswordAllowed=Esqueci a senha -resetPasswordAllowed.tooltip=Exibe um link na página de login para o usuário clicar quando houver esquecido suas credenciais. -rememberMe=Lembrar me -rememberMe.tooltip=Exibe um checkbox na página de login para permitir ao usuário continuar logado entre restarts do browser até que a sessão expire. -verifyEmail=Verificar e-mail -verifyEmail.tooltip=Requer que o usuário verifique seu endereço de e-mail na primeira vez que efetuar login. -sslRequired=SSL requerido -sslRequired.option.all=todas requisições -sslRequired.option.external=requisições externas -sslRequired.option.none=nunca -sslRequired.tooltip=É necessário SSL? 'Nunca' significa que HTTPS não é requerido para nenhum endereço IP cliente. 'Requisições externas' significa que localhost e IPs privados podem acessar sem HTTPS. 'Todas requisições' significa que HTTPS é requerido para todos os endereços IPs. -publicKey=Chave pública -privateKey=Chave privada -gen-new-keys=Gerar novas chaves -certificate=Certificado -host=Host -smtp-host=Host SMTP -port=Porta -smtp-port=Porta SMTP (valor padrão: 25) -from=Remetente -sender-email-addr=Endereço de e-mail do remetente -enable-ssl=Habilitar SSL -enable-start-tls=Habilitar StartTLS -enable-auth=Habilitar autenticação -username=Usuário -login-username=Nome de usuário para login -password=Senha -login-password=Senha para login -login-theme=Tema de login -login-theme.tooltip=Selecione o tema para páginas de login, OTP, grant, cadastro e recuperar senha. -account-theme=Tema para conta -account-theme.tooltip=Selecione o tema para as páginas de administração de conta do usuário. -admin-console-theme=Tema para console de administração -select-theme-admin-console=Selecione o tema para o console de administração. -email-theme=Tema de e-mail -select-theme-email=Selecione o tema para os e-mail que são enviados pelo servidor. -i18n-enabled=Habilitar internacionalização -supported-locales=Locais disponíveis -supported-locales.placeholder=Digite um local e pressione Enter -default-locale=Local padrão -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=Realm Cache -realm-cache-clear.tooltip=Remove todas as entradas do cache de realm (isto irá remover as entradas para todos os realms) -user-cache-clear=Cache de usuário -user-cache-clear.tooltip=Remove todas as entradas do cache de usuário (isto irá remover as entradas de todos os realms) -revoke-refresh-token=Revogar Token de Atualização -revoke-refresh-token.tooltip=Se habilitado os tokens de atualização podem ser utilizados somente uma vez. Caso contrário os tokens de atualização não são revogados quando utilizados e podem ser utilizados várias vezes. -sso-session-idle=Sessão SSO inativa -sso-session-idle.tooltip=Tempo que uma sessão pode ficar inativa antes de expirar. Tokens e sessões de navegador são invalidados quando uma sessão é expirada. -seconds=Segundos -minutes=Minutos -hours=Horas -days=Dias -sso-session-max=Sessão SSO Máxima -sso-session-max.tooltip=Tempo máximo antes que uma sessão seja expirada. Tokens e sessões de navegador são invalidados quando uma sessão é expirada. -offline-session-idle=Sessão Offline Inativa -offline-session-idle.tooltip=Tempo que uma sessão offline pode ficar inativa antes de expirar. Você precisa utilizar um token de atualização offline pelo menos uma vez neste período, caso contrário a sessão offline será expirada. -access-token-lifespan=Duração do Token de Acesso -access-token-lifespan.tooltip=Tempo máximo antes que um token de acesso expire. Recomenda-se que este valor seja menor em relação ao tempo de inativação do inativação do SSO. -access-token-lifespan-for-implicit-flow=Duração do token de acesso para fluxos Implícitos -access-token-lifespan-for-implicit-flow.tooltip=Tempo máximo antes que um token de acesso emitido durante o Fluxo Implícito do OpenID Connect expire. Recomenda-se que este valor seja menor em relação ao tempo de inativação do SSO. Não há posibilidade de atualizar este token durante o fluxo implícito, sendo este o motivo de existir um tempo limite diferente para a 'Duração do Token de Acesso'. -client-login-timeout=Tempo limite para login do Cliente -client-login-timeout.tooltip=Tempo máximo que um cliente tem para finalizar o procolo do token de acesso. Normalmente deve ser 1 minuto. -login-timeout=Tempo máximo do Login -login-timeout.tooltip=Tempo máximo que um usuário tempo para completar o login. É recomendado que seja relativamente longo - 30 minutos ou mais. -login-action-timeout=Tempo limite da ação de Login -login-action-timeout.tooltip=Tempo máximo que um usuário tem para completar as ações relacionadas ao login como atualizar senhas ou configurar totp. É recomendado que seja relativamente longo - 5 minutos ou mais. -headers=Cabeçalhos -brute-force-detection=Detecção de ataque de Força Bruta -x-frame-options=X-Frame-Options -x-frame-options-tooltip=O valor padrão impede páginas de serem incluídas via non-origin iframes (clique no label para mais informações) -content-sec-policy=Content-Security-Policy -content-sec-policy-tooltip=O valor padrão impede páginas de serem incluídas via non-origin iframes (clique no label para mais informações) -content-type-options=X-Content-Type-Options -content-type-options-tooltip=O valor padrão impede Internet Explorer and Google Chrome de realizarem MIME-sniffing em uma resposta diferente do content-type declarado (clique no label para mais informações) -max-login-failures=Falhas de login -max-login-failures.tooltip=Quantas falhas de login antes que a espera seja habilitada. -wait-increment=Incremento de Espera -wait-increment.tooltip=Quando a quantidade de falhas for alcançada, quanto tempo o usuário deve aguardar antes de tentar novamente? -quick-login-check-millis=Verificação de Quick Login em Milli Seconds -quick-login-check-millis.tooltip=Se uma falha ocorre concorrentemente neste período, travar a conta do usuário. -min-quick-login-wait=Espera mínima após Quick Login -min-quick-login-wait.tooltip=Quanto tempo aguardar após uma falha de quick login. -max-wait=Espera máxima -max-wait.tooltip=Tempo máximo que um usuário deverá aguardar após uma falha de quick login. -failure-reset-time=Tempo para zerar falhas -failure-reset-time.tooltip=Quando o contador de falhas será resetado? -realm-tab-login=Login -realm-tab-keys=Chaves -realm-tab-email=E-mail -realm-tab-themes=Temas -#realm-tab-localization=Localization -realm-tab-cache=Cache -realm-tab-tokens=Tokens -realm-tab-client-initial-access=Tokens de Acesso inicial -realm-tab-security-defenses=Defesas -realm-tab-general=Geral -add-realm=Adicionar realm - -#Session settings -realm-sessions=Sessões do Realm -revocation=Revogação -logout-all=Deslogar todos -active-sessions=Sessões Ativas -sessions=Sessões -not-before=Não antes de -not-before.tooltip=Revogar qualquer token emitido antes desta data. -set-to-now=Definir como agora -push=Enviar -push.tooltip=Para cada cliente que possui uma URL de administrador, notificá-los da nova política de revogação. - -#Protocol Mapper -usermodel.prop.label=Propriedade -usermodel.attr.label=Atributo do usuário -userSession.modelNote.label=Nota da sessão de usuário -multivalued.label=Múltiplos valores -selectRole.label=Selecione o Role -tokenClaimName.label=Nome do Token Claim -jsonType.label=Tipo JSON do Claim -includeInIdToken.label=Adicionar ao token de ID -includeInAccessToken.label=Adicionar ao token de acesso -includeInUserInfo.label=Adicionar à informação do usuário -usermodel.clientRoleMapping.clientId.label=ID do cliente -usermodel.clientRoleMapping.rolePrefix.label=Prefixo para o role de Cliente -usermodel.realmRoleMapping.rolePrefix.label=Prefixo do Realm Role - -# client details -search.placeholder=Pesquisar... -create=Criar -import=Importar -client-id=ID do cliente -base-url=URL Base -actions=Ações -not-defined=Não definido -edit=Editar -delete=Excluir -no-results=Sem resultados -no-clients-available=Nenhum cliente disponível -add-client=Adicionar cliente -select-file=Selecionar arquivo -view-details=Ver detalhes -clear-import=Cancelar importação -client-id.tooltip=Especifica o ID referenciado em URI e tokens. Por exemplo 'meu-cliente'. Para SAML também representa o valor do emissor esperado dos authn requests -client.name.tooltip=Especifica o nome de exibição do cliente. Por exemplo 'Meu Cliente'. Também aceita chaves para valores localizados. Por exemplo: ${meu_cliente} -client.description.tooltip=Especifica a descrição do cliente. Por exemplo 'Meu cliente para TimeSheets'. Também aceita chaves para valores localizados. Por exemplo: ${meu_cliente_descricao} -client.enabled.tooltip=Clientes desabilitados não podem realizar login ou obter tokens de acesso. -consent-required=Consentimento exigido -consent-required.tooltip=Se habilitado os usuários devem consentir com o acesso ao cliente. -client-protocol=Protocolo cliente -client-protocol.tooltip='OpenID connect' permite aos Clientes verificarem a identidade do usuário final baseado na autenticação realizada por um servidor de Autorização. 'SAML' permite cenários de autenticação e autorização web-based incluindo cross-domain single sign-on (SSO) e utiliza tokens de segurança contendo assertions para trafegar informações. -access-type=Tipo de acesso -access-type.tooltip=Clientes 'Confidential' requerem um secret para iniciar o protocolo de login. Clientes 'Public' não necessitam de secret. Clientes 'Bearer-only' são web services que nunca iniciam um login. -standard-flow-enabled=Fluxo padrão habilitado -standard-flow-enabled.tooltip=Isto habilita a autenticação baseada em redirecionamento com código de autorização padrão do OpenID Connect. Em termos de especificações OpenID Connect ou OAuth2, isto habilita suporte ao 'Fluxo de Código de Autorização' para este cliente. -implicit-flow-enabled=Fluxo implícito habilitado -implicit-flow-enabled.tooltip=Isto habilita suporte a autenticação baseada em redirecionamento sem código de autorização. Em tempos de especificações OpenID Connect ou OAuth2, isto habilita suporte do 'Fluxo Implícito' para este cliente. -direct-access-grants-enabled=Grants de Acesso direto habilitado -service-accounts-enabled=Contas de serviço habilitadas -include-authnstatement=Incluir AuthnStatement -sign-documents=Assinar documentos -sign-assertions=Assinar assertions -signature-algorithm=Algoritmo de assinatura -canonicalization-method=Método de Canonicalization -encrypt-assertions=Encriptar Assertions -client-signature-required=Assinatura do cliente requerida -force-post-binding=Forçar Binding via POST -front-channel-logout=Front Channel Logout -force-name-id-format=Forçar formato do NameID -name-id-format=Formato do NameID -valid-redirect-uris=URIs de redirecionamento válidas -admin-url=URL do administrador -master-saml-processing-url=URL de processamento SAML principal -idp-sso-url-ref=Nome de URL para SSO iniciado via IDP -idp-sso-relay-state=Estado de relay para SSO iniciado via IDP -fine-saml-endpoint-conf=Configuração de endpoint para configuração fina do SAML -assertion-consumer-post-binding-url=URL para conexão post para o serviço consumidor de Assertions -assertion-consumer-redirect-binding-url=URL para conexão de redirecionamento do serviço consumidor de Assertions -logout-service-post-binding-url=URL de conexão POST para o serviço de logout -logout-service-post-binding-url.tooltip=URL de conexão POST para o serviço de logout -logout-service-redir-binding-url=URL de conexão para o redirecionamento do serviço de logout - -# client import -import-client=Importar cliente -format-option=Formato -import-file=Importar arquivo - -# client tabs -settings=Configurações -credentials=Credenciais -roles=Roles -mappers=Mapeamentos -scope=Escopo -offline-access=Acesso offline -installation=Instalação -service-account-roles=Roles de contas de serviço - -# client credentials -client-authenticator=Autenticador do cliente -no-client-certificate-configured=Nenhum certificado cliente configurado -gen-new-keys-and-cert=Gerar novas chaves e certificados -import-certificate=Importar certificado -gen-client-private-key=Gerar chave privada do cliente -generate-private-key=Gerar chave privada -archive-format=Formato do arquivo -key-alias=Alias da chave -key-password=Senha da chave -store-password=Salvar senha -generate-and-download=Gerar e fazer download -client-certificate-import=Importar certificado do cliente -import-client-certificate=Importar certificado do cliente -secret=Segredo -regenerate-secret=Recriar segredo -registrationAccessToken=Token de acesso para registro -registrationAccessToken.regenerate=Regerar token de acesso para registro -add-role=Adicionar Role -role-name=Nome do Role -composite=Composto -description=Descrição -no-client-roles-available=Nenhum role de cliente disponível -scope-param-required=Parâmetro de escopo requerido -composite-roles=Roles compostos -realm-roles=Roles do Realm -available-roles=Roles disponíveis -add-selected=Adicionar selecionados -associated-roles=Roles associados -remove-selected=Remover selecionados -client-roles=Roles de clientes -select-client-to-view-roles=Selecione o cliente para ver os roles do cliente -add-builtin=Adicionar Builtin -category=Categoria -type=Tipo -no-mappers-available=Nenhum mapeamento disponível -add-builtin-protocol-mappers=Adicionar mapeamentos de protocolo Builtin -add-builtin-protocol-mapper=Adicionar mapeamentos de protocolo Builtin - -scope-mappings=Mapeamentos do Escopo -full-scope-allowed=Permitir Escopo completo -assigned-roles=Roles associados -effective-roles=Roles efetivos -basic-configuration=Configuração básica -node-reregistration-timeout=Tempo limite para re-registro de nó -registered-cluster-nodes=Nós de cluster registrados -register-node-manually=Registrar nó manualmente -test-cluster-availability=Testar disponibilidade do cluster -last-registration=Último registro -node-host=Host -no-registered-cluster-nodes=Nenhum nó registrado disponível -cluster-nodes=Nós do cluster -add-node=Adicionar nó -show-sessions=Exibir sessões -user=Usuário -from-ip=Do IP -session-start=Início da sessão -first-page=Primeira página -previous-page=Página anterior -next-page=Próxima página -select-a-format=Selecione um formato -download=Download -offline-tokens=Tokens offline -show-offline-tokens=Exibir tokens offline -token-issued=Token emitido -last-access=Último acesso -last-refresh=Último refresh -key-export=Exportar chave -key-import=Importar chave -export-saml-key=Exportar chave SAML -import-saml-key=Importar chave SAML -realm-certificate-alias=Alias do certificado do Realm -signing-key=Chave de assinatura -saml-signing-key=Chave de assinatura SAML -private-key=Chave privada -generate-new-keys=Gerar novas chaves -export=Exportar -encryption-key=Chave de encriptação -service-accounts=Contas de serviço -service-account-is-not-enabled-for=Contas de serviço não estão habilitadas para {{client}} -create-protocol-mappers=Criar mapeamentos de protocolo -create-protocol-mapper=Criar mapeamento de protocolo -protocol=Protocolo -protocol.tooltip=Protocolo... -id=ID -mapper.name.tooltip=Nome do mapeamento -consent-text=Texto para consentimento -mapper-type=Tipo de mapeamento -# realm identity providers -identity-providers=Provedores de identificação -table-of-identity-providers=Tabela de provedores de identidade -add-provider.placeholder=Adicionar provedor... -provider=Provedor -first-broker-login-flow=Fluxo do primeiro login -post-broker-login-flow=Fluxo pós login -redirect-uri=URI de redirecionamento -alias=Alias -authenticate-by-default=Autenticar por padrão -store-tokens=Salvar Tokens -stored-tokens-readable=Leitura de tokens salvos -trust-email=Confiar no e-mail recebido -gui-order=Ordem na tela -gui-order.tooltip=Número definindo a ordem do provedor na GUI (ex na página de Login). -openid-connect-config=Configuração OpenID Connect -authorization-url=URL de autorização -token-url=URL do Token -logout-url=URL de logout -backchannel-logout=Backchannel Logout -user-info-url=URL de informações do usuário -client-secret=Secret do Cliente -show-secret=Exibir secret -hide-secret=Esconder secret -issuer=Emissor -default-scopes=Escopos padrão -prompt=Prompt -unspecified.option=Não especificado -none.option=Nenhum -consent.option=Consentimento -login.option=Login -select-account.option=select_account -validate-signatures=Validar assinaturas -validating-public-key=Chave pública para validação -import-external-idp-config=Importar configuração de IDP externo -import-from-url=Importar de URL -import-from-file=Importar de arquivo -saml-config=Configuração SAML -single-signon-service-url=URL de serviço do Single Sign On -single-logout-service-url=URL de serviço de Single Logout -nameid-policy-format=Política de formato NameID -http-post-binding-response=Responder com HTTP-POST -http-post-binding-for-authn-request=Utilizar HTTP-POST binding para AuthnRequest -want-authn-requests-signed=Esperar AuthnRequests assinados -force-authentication=Forçar autenticação -validate-signature=Validar assinatura -validating-x509-certificate=Validar certificados X509 -key=Chave - -# User federation -sync-ldap-roles-to-keycloak=Sincronizar os roles do LDAP para o Keycloak -sync-keycloak-roles-to-ldap=Sincronizar os roles do Keycloak para o LDAP -sync-ldap-groups-to-keycloak=Sincronizar os grupos do LDAP para o Keycloak -sync-keycloak-groups-to-ldap=Sincronizar os grupos do Keycloak para o LDAP - -realms=Realms -realm=Realm - -identity-provider-mappers=Mapeamentos de provedores de identificação -create-identity-provider-mapper=Criar mapeamento de provedores de identificação -add-identity-provider-mapper=Adicionar mapeamento de provedor de identificação - -expires=Expira em -expiration=Duração -expiration.tooltip=Especifica por quanto tempo o token deve ser válido -count=Quantidade -count.tooltip=Especifica quantos clientes podem ser criados usando o token -remainingCount=Quantidade restante -created=Criado em -back=Voltar -initial-access-tokens=Tokens de acesso inicial -add-initial-access-tokens=Adicionar token de acesso inicial -initial-access-token=Token de acesso inicial -initial-access.copyPaste.tooltip=Copie/cole o token de acesso inicial antes de sair desta página pois não é possível recuperá-lo depois -continue=Continuar -initial-access-token.confirm.title=Copiar o token de acesso inicial -initial-access-token.confirm.text=Por favor copie e cole o token de acesso inicial antes de confirmar pois não é possível recuperá-lo depois - -client-scopes=Modelos de cliente - -groups=Grupos - -default-roles=Roles padrão -no-realm-roles-available=Nenhum role de realm disponível - -users=Usuários -realm-default-roles=Roles padrão do Realm -client-default-roles=Roles padrão do Cliente -partial-import=Importação parcial - -file=Arquivo -exported-json-file=Arquivo json exportado -import-from-realm=Importar de realm -import-users=Importar usuários -import-groups=Importar grupos -import-clients=Importar clientes -import-identity-providers=Importar provedores de identificação -import-realm-roles=Importar roles do realm -import-client-roles=Importar roles de cliente -if-resource-exists=Se um recurso já existir -fail=Falhar -skip=Pular -overwrite=Sobrescrever - -action=Ações -role-selector=Seletor de roles - -select-a-role=Selecione um role -select-realm-role=Selecione um role de realm -select-client-role=Selecione um role de cliente - -client-template=Modelos de Cliente -client-saml-endpoint=Cliente SAML Endpoint -add-client-scope=Adicionar modelo de cliente - -manage=Administração -authentication=Autenticação -user-federation=Federação de usuários -events=Eventos -realm-settings=Configurações do Realm -configure=Configuração -select-realm=Selecione um realm -add=Adicionar - - -add-user-federation-provider=Adicionar provedor de federação de usuários -required-settings=Configurações obrigatórias -provider-id=ID do provedor -console-display-name=Nome de exibição no console -priority=Prioridade -sync-settings=Configurações de sincronização -periodic-full-sync=Syncronização completa periódica -full-sync-period=Período -periodic-changed-users-sync=Sincronização periódica de usuários alterados -changed-users-sync-period=Período -synchronize-changed-users=Sincronizar usuários alterados -synchronize-all-users=Sincronizar todos os usuários -kerberos-realm=Realm do Kerberos -server-principal=Principal do servidor -keytab=KeyTab -debug=Debug -allow-password-authentication=Permitir autenticação via senha -edit-mode=Modo de edição -update-profile-first-login=Atualizar Profile no primeiro login -sync-registrations=Sincronizar contas -vendor=Vendor -username-ldap-attribute=Atributo LDAP para Username -ldap-attribute-name-for-username=Atributo LDAP para Username -rdn-ldap-attribute=Atributo LDAP para RDN -ldap-attribute-name-for-user-rdn=Atributo LDAP para RDN -uuid-ldap-attribute=Atributo LDAP para UUID -ldap-attribute-name-for-uuid=Atributo LDAP para UUID -user-object-classes=Classes do objeto User - -ldap-connection-url=URL de conexão ao LDAP -ldap-users-dn=DN dos usuários no LDAP -ldap-bind-dn=DN para bind no LDAP -ldap-bind-credentials=Credenciais para conectar ao LDAP -ldap-filter=Filtro do LDAP - -connection-url=URL de conexão -test-connection=Testar conexão -users-dn=Users DN -authentication-type=Tipo de autenticação -bind-dn=Bind DN -bind-credential=Senha para conexão -test-authentication=Testar autenticação -custom-user-ldap-filter=Filtro de usuários LDAP customizado -search-scope=Escopo de pesquisa -use-truststore-spi=Utilizar Truststore SPI -connection-pooling=Pooling de conexões -kerberos-integration=Integração com Kerberos -allow-kerberos-authentication=Permitir autenticação Kerberos -use-kerberos-for-password-authentication=Utilizar Kerberos para autenticação via senha -batch-size=Tamanho do lote -user-federation-mappers=Mapeamentos de federação de usuário -create-user-federation-mapper=Criar mapeamento de federação de usuário -add-user-federation-mapper=Adicionar mapeamento de federação de usuário -provider-name=Nome do provedor -no-user-federation-providers-configured=Nenhum federação de usuários configurada. -add-identity-provider=Adicionar provedor de identificação -add-identity-provider-link=adicionar link para provedor de identificação -identity-provider=Provedor de identificação -identity-provider-user-id=ID de usuário do provedor de identificação -identity-provider-username=Nome de usuário do provedor de identificação -pagination=Paginação - -browser-flow=Fluxo de browser -registration-flow=Fluxo de registro -direct-grant-flow=Fluxo de Direct Grant -reset-credentials=Reiniciar credenciais -client-authentication=Autenticação do cliente -new=Novo -copy=Copiar -add-execution=Adicionar execução -add-flow=Adicionar fluxo -auth-type=Tipo -requirement=Condição -config=Configuração -no-executions-available=Nenhuma execução disponível -authentication-flows=Fluxos de autenticação -create-authenticator-config=Criar configuração de autenticação -otp-type=Tipo OTP -time-based=Baseado em tempo -counter-based=Baseado em contador -otp-hash-algorithm=Algoritmo de hash OTP -number-of-digits=Quantidade de dígitos -look-ahead-window=Look Ahead Window -initial-counter=Contador inicial -otp-token-period=Período de token OTP -table-of-password-policies=Tabela de política de senhas -add-policy.placeholder=Adicionar política... -policy-type=Tipo da política -policy-value=Valor da política -admin-events=Eventos de adminstração -login-events=Eventos de login -filter=Filtro -update=Atualizar -reset=Reiniciar -operation-types=Tipos de operações -select-operations.placeholder=Selecionar operações... -resource-path=Path do recurso -date-(from)=Data (De) -date-(to)=Data (Até) -authentication-details=Detalhes para autenticação -ip-address=Endereço IP -time=Tempo -operation-type=Tipo de operação -auth=Autenticação -representation=Representação -register=Registro -required-action=Ação requerida -default-action=Ação padrão -no-required-actions-configured=Nenhuma ação requerida configurada -defaults-to-id=ID é o padrão -flows=Fluxos -bindings=Ligações -required-actions=Ações requeridas -password-policy=Política de senha -otp-policy=Política OTP -user-groups=Grupos de usuário -default-groups=Grupos Padrão -cut=Recortar -paste=Colar - -create-group=Criar grupo -create-authenticator-execution=Criar execução de autenticação -create-form-action-execution=Criar execução de ação de formulário -create-top-level-form=Criar formulário de nível superior -top-level-flow-type=Tipo do fluxo de nível superior -flow.generic=genérico -flow.client=cliente -create-execution-flow=Criar fluxo de execução -flow-type=Flow Type -flow.form.type=formulário -flow.generic.type=genérico -form-provider=Provedor de formulário -select-a-type.placeholder=selecione um tipo -available-groups=Grupos disponíveis -value=Valor -table-of-group-members=Tabela de membros do grupo -table-of-role-members=Tabela de membros do role -last-name=Sobrenome -first-name=Primeiro nome -email=E-mail -toggle-navigation=Alternar navegação -manage-account=Administrar a conta -sign-out=Sign Out -server-info=Informação do servidor -resource-not-found=Recurso não encontrado... -resource-not-found.instruction=Não foi possível encontrar o recurso solicitado. Por favor verifique se a URL solicitada está correta. -go-to-the-home-page=Ir para a página inicial » -page-not-found=Página não encontrada... -page-not-found.instruction=Não foi possível encontrar a página solicitada. Por favor verifique se a URL solicitada está correta. -select-event-types.placeholder=Selecione os tipos de eventos... -select-an-action.placeholder=Selecione uma ação... -admin-events-settings=Configuração de eventos de administração -save-events=Salvar eventos -include-representation=Incluir representação -server-version=Versão do servidor -info=Informações -providers=Provedores -server-time=Hora do servidor -server-uptime=Uptime do servidor -memory=Memória -total-memory=Memória total -free-memory=Memória livre -used-memory=Memória utilizada -system=Sistema -current-working-directory=Diretório de trabalho atual -java-version=Versão do Java -java-vendor=Java Vendor -java-runtime=Java Runtime -java-vm=Java VM -java-vm-version=Versão da Java VM -java-home=Java Home -user-name=Usuário -user-timezone=Zona horária do usuário -user-locale=Locale do usuário -system-encoding=Enconding do sistema -operating-system=Sistema operacional -os-architecture=Arquitetura do OS -spi=SPI -granted-roles=Roles concedidos -granted-protocol-mappers=Protocol Mappers concedidos -additional-grants=Concessões adicionais -revoke=Revogar -new-password=Nova senha -password-confirmation=Confirmação de senha -reset-password=Reiniciar senha -remove-totp=Remover OTP -reset-actions=Ações para reiniciar -reset-actions-email=Ações para reiniciar e-mail -send-email=Enviar e-mail -add-user=Adicionar usuário -created-at=Criado em -user-enabled=Usuário ativo -user-temporarily-locked=Usuário temporariamente desativado -unlock-user=Liberar usuário -federation-link=Link para federação -email-verified=E-mail verificado -required-user-actions=Ações necessárias do usuário -locale=Locale -select-one.placeholder=Selecione um... -impersonate=Personificar -impersonate-user=Personificar usuário -identity-provider-alias=Alias do Provedor de Identificação -provider-user-id=Provider User ID -provider-username=Provider Username -no-identity-provider-links-available=Nenhum link para provedor de identificação disponível -group-membership=Grupos associados -leave=Sair -table-of-realm-users=Tabela de usuários do Realm -view-all-users=Exibir todos os usuários -unlock-users=Liberar usuários -no-users-available=Nenhum usuário disponível -users.instruction=Por favor faça uma pesquisa, ou clique em Exibir todos os usuários -consents=Consentimentos -started=Iniciado -logout-all-sessions=Logout todas as sessões -logout=Logout -new-name=Novo nome -ok=Ok -attributes=Atributos -role-mappings=Mapeamento de roles -members=Membros -details=Detalhes -identity-provider-links=Links de provedores de identificação. -register-required-action=Registrar ação necessária -gender=Gênero -address=Endereço -phone=Telefone -profile-url=URL do perfil -picture-url=URL da foto -website=Website -import-keys-and-cert=Importar chave e certificado -upload-keys=Carregar chaves -download-keys-and-cert=Download chave e certificado -no-value-assigned.placeholder=Nenhum valor associado -remove=Remover -no-group-members=Nenhum membro -no-role-members=Nenhum membro no role -temporary=Temporária -join=Participar -event-type=Tipo de evento -events-config=Configurar eventos -event-listeners=Listeners de eventos -login-events-settings=Configuração de eventos de login -clear-events=Limpar eventos -saved-types=Tipos salvos -clear-admin-events=Limpar eventos administrativos -clear-changes=Cancelar mudanças -error=Erro - -# Authz -# Authz Common -authz-authorization=Autorização -authz-owner=Proprietário -authz-uri=URI -authz-scopes=Escopos -authz-resource=Recurso -authz-resource-type=Tipo de recurso -authz-resources=Recursos -authz-scope=Escopo -authz-authz-scopes=Autorização de escopos -authz-policies=Políticas -authz-permissions=Permissões -authz-users=Usuários no role -authz-evaluate=Avaliar -authz-icon-uri=URI do ícone -authz-select-scope=Selecione um escopo -authz-select-resource=Selecione um recurso -authz-associated-policies=Políticas associadas -authz-any-resource=Qualquer recurso -authz-any-scope=Qualquer escopo -authz-any-role=Qualquer role -authz-policy-evaluation=Avaliação da política -authz-select-client=Selecione um cliente -authz-select-user=Selecione um usuário -authz-entitlements=Direitos -authz-no-resources=Nenhum recurso -authz-result=Resultado -authz-authorization-services-enabled=Autorização habilitada -authz-required=Obrigatório - -# Authz Settings - -authz-policy-enforcement-mode=Modo de execução da política -authz-policy-enforcement-mode-enforcing=Restritiva -authz-policy-enforcement-mode-permissive=Permissiva -authz-policy-enforcement-mode-disabled=Desabilitada - -authz-remote-resource-management=Administração remota de recursos - -authz-export-settings=Exportar configurações - -# Authz Resource List -authz-no-resources-available=Nenhum recurso disponível. -authz-no-scopes-assigned=Nenhum escopo associado. -authz-no-type-defined=Nenhum tipo definido. -authz-no-permission-assigned=Nenhuma permissão associada. -authz-no-policy-assigned=Nenhuma política associada. -authz-create-permission=Criar permissão - -# Authz Resource Detail -authz-add-resource=Adicionar recurso - -# Authz Scope List -authz-add-scope=Adicionar escopo -authz-no-scopes-available=Nenhum escopo disponível. - -# Authz Scope Detail - -# Authz Policy List -authz-all-types=Todos os tipos -authz-create-policy=Criar política -authz-no-policies-available=Nenhuma política disponível - -# Authz Policy Detail -authz-policy-logic=Lógica -authz-policy-logic-positive=Positiva -authz-policy-logic-negative=Negativa -authz-policy-apply-policy=Aplicar política -authz-policy-decision-strategy=Estratégia de decisão -authz-policy-decision-strategy-affirmative=Afirmativa -authz-policy-decision-strategy-unanimous=Unânime -authz-policy-decision-strategy-consensus=Consensual -authz-select-a-policy=Selecionar uma política - -# Authz Role Policy Detail -authz-add-role-policy=Adicionar política de Role -authz-no-roles-assigned=Nenhum role associado - -# Authz User Policy Detail -authz-add-user-policy=Adicionar política de usuário -authz-no-users-assigned=Nenhum usuário associado - -# Authz Time Policy Detail -authz-add-time-policy=Adicionar política de tempo -authz-policy-time-not-on-after=Não em ou depois - -# Authz JS Policy Detail -authz-add-js-policy=Adicionar política Javascript -authz-policy-js-code=Código - - -# Authz Aggregated Policy Detail -authz-aggregated=Agregado -authz-add-aggregated-policy=Adicionar política agregada - -# Authz Permission List -authz-no-permissions-available=Nenhuma permissão disponível - -# Authz Permission Detail - -# Authz Resource Permission Detail -authz-add-resource-permission=Adicionar permissão para recurso -authz-permission-resource-apply-to-resource-type=Aplicar ao tipo de recurso - -# Authz Scope Permission Detail -authz-add-scope-permission=Adicionar permissão de escopo - -# Authz Evaluation -authz-evaluation-identity-information=Informação de identidade -authz-evaluation-new=Nova avaliação -authz-evaluation-re-evaluate=Re-avaliar -authz-evaluation-previous=Avaliação anterior -authz-evaluation-contextual-info=Informação contextual -authz-evaluation-contextual-attributes=Atributos contextuais -authz-evaluation-evaluate=Avaliar -authz-evaluation-any-resource-with-scopes=Qualquer recurso com escopo(s) -authz-evaluation-no-result=Não foi possível obter nenhum resultado para o pedido de autorização provida. Verifique os recurso(s) ou escopo(s) providos estão associados com alguma política. -authz-evaluation-no-policies-resource=Nenhma política foi encontrada para este recurso. -authz-evaluation-authorization-data=Resposta -authz-show-authorization-data=Exibir dados da autorização - -usermodel.prop.tooltip=Nome do método da propriedade na interface UserModel. Por exemplo, o valor 'email' iria referenciar o método UserModel.getEmail() . -usermodel.attr.tooltip=Nome do atributo do usuário que é uma chave de atributo no mapa UserModel.attribute. -userSession.modelNote.tooltip=Nome da nota de sessão do usuário salva no mapa UserSessionModel.note. -multivalued.tooltip=Indica se um atributo suporta múltiplos valores. Se verdadeiro, então a lista de todos os valores desse atributo será definida como o claim. Se falso, então apenas o primeiro valor será utilizado. -selectRole.tooltip=Entre com o role na caixa à esquerda, ou clique neste botão para navegar e selecionar o role desejado. -tokenClaimName.tooltip=Nome do claim para inserir no token. Pode ser um nome completo (fully qualified) como 'address.street'. Neste caso, um objeto json aninhado será criado. -jsonType.tooltip=Tipo JSON que deve ser utilizado para popular o claim json no token. Os valores válidos são Long, int boolean e String. -includeInIdToken.tooltip=O claim deve ser adicionado ao token de ID? -includeInAccessToken.tooltip=O claim deve ser adicionado ao token de acesso? -includeInUserInfo.tooltip=O claim deve ser adicionado à informação do usuário? -usermodel.clientRoleMapping.clientId.tooltip=ID do cliente para mapeamentos de roles -usermodel.clientRoleMapping.rolePrefix.tooltip=Um prefixo para cada role do cliente (opcional) -usermodel.realmRoleMapping.rolePrefix.tooltip=Um prefixo para cada Realm Role (opcional). -clients.tooltip=Os clientes são aplicativos de browser e serviços web confiáveis em um realm. Esses clientes podem solicitar login. Você também pode definir roles específicos do cliente. -authz-policy-role-clients.tooltip= Selecione um cliente a fim de filtrar os roles de cliente que podem ser aplicados a esta política. -direct-access-grants-enabled.tooltip=Habilita o suporte para concessões de acesso direto (Direct Access Grants), o que significa que o cliente tem acesso ao nome de usuário/senha e negocia diretamente com o servidor Keycloak pelo token de acesso. Em termos de especificações OAuth2, habilita suporte de "Resource Owner Password Credentials Grant" para este cliente. -service-accounts-enabled.tooltip=Permite autenticar este cliente no Keycloak e recuperar tokens de acesso dedicados para este cliente. Em termos da especificações OAuth2, habilita suporte para 'Client Credentials Grants' para este cliente. -include-authnstatement.tooltip=Deve ser adicionado um statement especificando o método e timestamp nas respostas de login? -sign-documents.tooltip=Devem os documentos SAML serem assinados pelo realm? -sign-assertions.tooltip=Devem as asserções dentro dos documentos SAML serem assinadas? Esta configuração não é necessária se o documento já está sendo assinado. -signature-algorithm.tooltip=O algoritmo de assinatura a ser utilizado para assinar documentos. -canonicalization-method.tooltip=Canonicalization Method para assinaturas XML. -encrypt-assertions.tooltip=Devem as asserções SAML serem encriptadas com a chave pública do cliente usando AES? -client-signature-required.tooltip=O cliente irá assinar os pedidos e respostas saml? E eles devem ser validados? -force-post-binding.tooltip=Sempre utilizar POST para respostas. -front-channel-logout.tooltip=Quando marcado, o logout requer um redirecionamento do browser para o cliente. Caso contrário o servidor executo uma invocação em background para o logout. -force-name-id-format.tooltip=Ignora o NameID de assunto solicitado e utiliza o configurado no console de administração. -name-id-format.tooltip=O formato de Name ID para utilizar como assunto. -root-url.tooltip=URL raiz adicionada à URLs relativas -valid-redirect-uris.tooltip=Padrão de URI válido para onde um navegador pode redirecionar depois de um login bem-sucedido ou sair. Wildcards simples são permitidos, por exemplo 'http://example.com/*'. Caminhos relativos podem ser especificados também, ex: /my/relative/path/*. Caminhos relativos são relativos à URL raiz do cliente, ou se nenhum for especificado a URL raiz do servidor é usado. Para SAML, é necessário definir padrões de URI válidos se você está contando com a URL do serviço consumidor incorporada com a solicitação de login. -base-url.tooltip=URL padrão para utilizar quando o servidor de autenticação necessita redirecionar ou linkar para o cliente. -admin-url.tooltip=URL para a inteface administrativa do cliente. Defina este valor se o cliente suporta a API do adaptador REST. Esta API rest permite que o servidor de autenticação envie políticas de revogação e outras tarefas administrativas. Geralmente este valor é definido apontando para a URL base do cliente. -master-saml-processing-url.tooltip=Se configurado, esta URL será utilizada para todos os bindings do "SP's Assertion Consumer" e "Single Logout Services". Ela pode ser sobreescriva idnvidualmente para cada ligação e serviço na Configuração Detalhada do Endpoint SAML. -idp-sso-url-ref.tooltip=Nome do fragmento URL para referenciar o cliente quando você deseja um SSO iniciado por IDP. Deixar este campo vazio irá desabilitar SSO iniciado por IDP. A URL que você irá referenciar do seu browser será: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state.tooltip=O estado de Relay que você deseja enviar com um pedido SAML quando você deseja realizar SSO iniciado por IDP. -web-origins.tooltip=Permitir origens CORS. Para permitir todas as URIs de redirecionamento de origem válidas adicionar '+'. Para permitir todas as origens adicionar '*'. -fine-saml-endpoint-conf.tooltip=Expanda esta sessão para configurar URLs específics para 'Assertion Consumer' e 'Single Logout Service'. -assertion-consumer-post-binding-url.tooltip=URL de ligação SAML via post para as asserções de consumidor de serviços do cliente (respostas de login). Você pode deixar este campo em branco se você não tiver uma URL para esta ligação. -assertion-consumer-redirect-binding-url.tooltip=URL de ligação SAML de redirecionamento para as asserções de consumidor de serviços do cliente (respostas de login). Você pode deixar este campo em branco se você não tiver uma URL para esta ligação. -logout-service-binding-post-url.tooltip=URL de ligação SAML via post para o serviço de logout único do cliente. Voce pode deixar este campo em branco se estiver usando uma ligação diferente. -logout-service-redir-binding-url.tooltip=URL de ligação SAML de redirecionamento para o serviço de logout único do cliente. Voce pode deixar este campo em branco s e estiver usando uma ligação diferente. -mappers.tooltip=Mapeamentos de protocolo executam transformações em tokens e documentos. Eles podem realizar coisas como mapear dados de usuários para claims de protocolo, ou apenas transformar qualquer solicitação entre o cliente e o servidor de autenticação. -scope.tooltip=Escopos de mapeamento permitem que você restrinja quais mapeamentos de roles de usuário são inclusos nos tokens de acesso solicitado pelo cliente. -ldap.search-scope.tooltip=Para um nível nós pesquisamos somente os usuários nos DNs especificados pelo campo User DNs. Para subtree, nós pesquisamos na sub-árvore completa. Verifique a documentação do LDAP para mais detalhes. -authz-permission-scope-scope.tooltip=Define que esta permissões deve ser aplicada para um ou mais escopos. -sessions.tooltip=Exibir as sessões ativas para este cliente. Permite que você veja quais usuários estão ativos e quando eles logaram. -active-sessions.tooltip=Total de sessões de usuário ativas para este cliente. -show-sessions.tooltip=Atenção, esta é uma operação potencialmente cara dependendo do número de sessões ativas. -offline-access.tooltip=Exibe as sessões offline para este cliente. Permite que você veja quantos usuários obtém tokens offline e quando eles os obtiveram. PAra revogar todos os tokens do cliente, vá para a aba Revogações e defina o valor do campo 'não antes de' para 'agora'. -installation.tooltip=Ferramenta de auxílio para gerar vários formatos de adaptadores de cliente que você poderá fazer download depois ou copiar e colar para configurar seus cliente. -service-account-roles.tooltip=Permite que você autentique mapeamentos de roles para as contas de serviço dedicadas à este cliente. -client-authenticator.tooltip=Autenticador de Cliente usado para autenticar este cliente ao servidor Keycloak -certificate.tooltip=Certificado do cliente para validar JWT emitidos pelo cliente e assinados pela chave privada do cliente da sua keystore. -validating-x509-certificate.tooltip=O certificado em formato PEM que deve ser usado para verificar assinaturas. -archive-format.tooltip=Keystore Java ou arquivo em formato PKCS12. -key-alias.tooltip=Alias do arquivo para sua chave privada e certificado. -key-password.tooltip=Senha para acessar a chave privada no certificado. -store-password.tooltip=Senha para acessar o arquivo em si. -jwt-import.key-alias.tooltip=Alias do arquivo para o seu certificado. -registrationAccessToken.tooltip=O token de acesso para registro provê acesso aos cliente para o serviço de registro cliente. -scope-param-required.tooltip=Este role somente será concedido se os parâmetros de escopo com os nomes dos roles forem utilizados durante a autorização/solicitação de token. -composite-roles.tooltip=Quando este role é associado/removido de um usuário, qualquer role associado com ele também será adicionado/removido implicitamente. -composite.associated-realm-roles.tooltip=Roles de nível de realm associados com este role composto. -composite.available-realm-roles.tooltip=Roles de nível de realm disponíveis para este role composto. -available-roles.tooltip=Roles para este cliente que você pode associar a este role composto. -scope.available-roles.tooltip=Roles do Realm que podem ser associados a este escopo. -service-account.available-roles.tooltip=Roles do Realm que podem ser associados a contas de serviço. -client.associated-roles.tooltip=Roles do Cliente associados a este role composto. -full-scope-allowed.tooltip=Permite a você desabilitar todas as restrições. -assigned-roles.tooltip=Roles do Realm associados ao escopo. -service-account.assigned-roles.tooltip=Roles do Realm associados a conta de serviço. -group.assigned-roles.tooltip=Roles do Realm mapeados ao grupo. -realm.effective-roles.tooltip=Roles do Realm associados que podem ter sido herdados de um role composto. -select-client-roles.tooltip=Selecione o cliente para visualizar os roles de cliente. -assign.available-roles.tooltip=Roles de Cliente disponíveis para associação. -client.assigned-roles.tooltip=Roles de Cliente associados. -client.effective-roles.tooltip=Roles de cliente associados que podem ter sido herdados de um role composto. -node-reregistration-timeout.tooltip=Intervalo para especificar o tempo máximo para nós clientes de cluster registrados se re-registrarem. Se os nós do cluster não enviarem solicitações de re-registro dentro deste intervalo eles serão deregistrados do Keycloak. -client-revoke.not-before.tooltip=Revocar qualquer token emitido antes desta data para este cliente. -client-revoke.push.tooltip=Se a URL de administração estiver configurada para este cliente, envie esta política para este cliente. -offline-tokens.tooltip=Número total de tokens offline para este cliente. -show-offline-tokens.tooltip=Atenção, esta é uma operação potencialmente cara dependendo do número de tokens offline. -realm-certificate-alias.tooltip=O certificado do Realm também é guardado em arquivo. Este é o alias para ele. -saml-encryption-key.tooltip=Chave de encriptação SAML. -mapper.consent-required.tooltip=Ao conceder acesso temporário, deve o usuário consentir em prover esta informação para o cliente? -consent-text.tooltip=Texto para exibir na página de consentimento -mapper-type.tooltip=Tipo do mapeamento -redirect-uri.tooltip=A url de redirecionamento para usar quando da configuração do provedor de identidade. -identity-provider.alias.tooltip=O alias é o identificador único de um provedor de identidade e também é utilizado para construir a uri de redirecionamento. -identity-provider.enabled.tooltip=Habilita/Desabilita este provedor de identidade. -identity-provider.authenticate-by-default.tooltip=Indica se este provedor deve ser tentado por padrão para a autenticação mesmo ante de exibir a tela de login. -identity-provider.store-tokens.tooltip=Habilita/desabilita se os tokens deve ser guardados depois de autenticar os usuários. -identity-provider.stored-tokens-readable.tooltip=Habilita/desabilita se novos usuários podem ler quaisquer tokens salvo. Isto irá adicionar o role broker.read-token. -update-profile-on-first-login.tooltip=Define condições onde um usuário precisa atualizar o seu perfil durante o primeiro login. -trust-email.tooltip=Se habilitado então o e-mail provido por este provedor não será verificado mesmo que a verificação esteja habilitada para este realm. -first-broker-login-flow.tooltip=Alias do fluxo de autenticação que será invocado depois do primeiro login com este provedor de identificação. O termo 'Primeiro Login' significa que ainda não existe uma conta no Keycloak ligada a esta conta autenticada neste provedor. -post-broker-login-flow.tooltip=Alias do fluxo de autenticação que será invocado depois de cada login com esse provedor de identificação. É útil se você pretende adicionar verificações adicionais de cada usuário autenticado com este provedor (por exemplo OTP). Deixa vazio se você não deseja que nenhum autenticador adicionar seja invocado depois do login com este provedor de identificação. Note também que as implementações de autenticação devem assumir que o usuários já está definido na ClientSessioncom e com o provedor de identidade já definido. -openid-connect-config.tooltip=OIDC SP e configuração externa IDP. -authorization-url.tooltip=A URL de autorização. -token-url.tooltip=A URL do Token. -identity-provider.logout-url.tooltip='End session endpoint' para utilizar para realizar logour dos usuários do IDP externo. -backchannel-logout.tooltip=O IDP externo suporta logou via backchannel? -user-info-url.tooltip=A Url de informações de usuário. Opcional. -identity-provider.client-id.tooltip=O cliente ou identificador do cliente registrado junto ao provedor de identificação. -client-secret.tooltip=O cliente ou senha do cliente registrado junto ao provedor de identificação. -social.client-secret.tooltip=A senha do cliente registrado junto ao provedor de identificação. -issuer.tooltip=O identificador de emissor para o emissor da resposta. Se não for provido nenhuma validação será realizada. -identity-provider.default-scopes.tooltip=Os escopos que serão enviados ao solicitar autorização. Pode ser uma lista de escopos separadas por espaço. Valor padrão é 'openid'. -prompt.tooltip=Especifica se o Servidor de Autorização solicita ao Usuário Final reautenticação e consentimento. -identity-provider.validate-signatures.tooltip=Habilita/Desabilita a validação de assinatura de IDP externo. -identity-provider.validating-public-key.tooltip=A chave pública em formato PEM que deve ser usada para verificar assinaturas de IDP externos. -import-external-idp-config.tooltip=Permite que vocÊ carregue metadata de IDP externos de um arquivo de configuração ou baixando a partir de uma URL. -identity-provider.import-from-url.tooltip=Importar metadata de um descritor de descoberta remoto do IDP. -identity-provider.import-from-file.tooltip=Importar metadata fr um descritor de descoberta baixado do IDP. -identity-provider.saml-config.tooltip=SAML SP e configuração de IDP externo. -saml.single-signon-service-url.tooltip=A Url que deve ser utilizada para enviar solicitações de autenticação (SAML AuthnRequest). -saml.single-logout-service-url.tooltip=A Url que deve ser utilizada para enviar solicitações de logout. -nameid-policy-format.tooltip=Especifica a referência de URI correspondente a um formato de nome identificador. O padrão é urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -http-post-binding-response.tooltip=Indica se deve se responder a solicitações utilizando HTTP-POST. Se falso, HTTP-REDIRECT será utilizado. -http-post-binding-for-authn-request.tooltip=Indica se o AuthnRequest deve ser enviado utilizando HTTP-POST. Se falso, HTTP-REDIRECT será utilizado. -want-authn-requests-signed.tooltip=Indicate se um provedor de identificação deve experar um AuthnRequest assinado. -identity-provider.force-authentication.tooltip=Indica se um provedor de identificação deve autenticar o apresentador diretamente ao invés de confiar em um contexto de segurança anterior. -saml.validate-signature.tooltip=Habilita/Desabilita validação de assinaturas de respostas SAML. -saml.import-from-url.tooltip=Importar metadata de um descritor de entidade IDP SAML remoto. -social.client-id.tooltip=O identificador do cliente registrado com o provedor de identificação. -social.default-scopes.tooltip=Os escopos que serão enviados ao solicitar autorização. Veja a documentação para valores possíveis, separador e valores padrão. -stackoverflow.key.tooltip=A chave de cliente obtida do registro no Stack Overflow. -client-scopes.tooltip=Modelos de cliente permitem que você defina configurações comuns que serão compartilhadas entre múltiplos clientes. -group.add-selected.tooltip=Roles do Realm que serão associadas ao grupo. -group.effective-roles.tooltip=Todos os mapeamentos de roles do Realm. Alguns roles exibidos podem ter sido herdados de um role composto mapeado. -group.available-roles.tooltip=Roles associáveis deste cliente. -group.assigned-roles-client.tooltip=Mapeamentos de roles para este cliente. -group.effective-roles-client.tooltip=Mapeamentos de roles para este cliente. Alguns roles exibidos podem ter sido herdados de um role composto mapeado. -user.add-selected.tooltip=Roles do Realm que podem ser associados ao usuário. -user.assigned-roles.tooltip=Roles do Realm mapeados para o usuário. -user.effective-roles.tooltip=Todos os mapeamentos de roles do Realm. Alguns roles exibidos podem ter sido herdados de um role composto mapeado. -user.available-roles.tooltip=Roles associáveis deste cliente. -user.assigned-roles-client.tooltip=Mapeamentos de roles para este cliente. -user.effective-roles-client.tooltip=Mapeamentos de Role para este cliente. Alguns roles exibidos podem ter sido herdados de um role composto mapeado. -default.available-roles.tooltip=Roles do nível de Realm que podem ser associados. -realm-default-roles.tooltip=Roles do nível de Realm associados a novos usuários. -default.available-roles-client.tooltip=Roles para este cliente que são associáveis por padrão. -client-default-roles.tooltip=Roles para este cliente que são associados como roles padrão. -composite.available-roles.tooltip=Roles do nível de Realm associáveis com este role composto. -composite.associated-roles.tooltip=Roles do nível de Realm associados com este role composto. -composite.available-roles-client.tooltip=Roles para este cliente que podem ser associados com este role composto. -composite.associated-roles-client.tooltip=Roles do cliente associados com este role composto. -partial-import.tooltip=Importação parcial permite que você importe usuários, clientes, e outros recursos de um arquivo json previamente exportado. -if-resource-exists.tooltip=Especifica o que deve ser feito se você tentar importar um recurso já existente. -realm-roles.tooltip=Roles do Realm que podem ser selecionados. -authz-policy-role-realm-roles.tooltip=Especifica quais role(s) de *realm* são permitidos por esta política. -client-roles.tooltip=Roles do cliente que podem ser selecionados. -authz-policy-role-client-roles.tooltip=Especifica quais role(s) do *cliente* são permitidos por esta política. -client-scope.tooltip=Modelo de cliente do qual ete cliente herda as configurações. -client-scope.name.tooltip=Nome do modelo de cliente. Deve ser único neste Realm. -client-scope.description.tooltip=Descrição do modelo de cliente. -client-scope.protocol.tooltip=Qual configuração de protocolo SSO será provida por este modelo de cliente. -console-display-name.tooltip=Nome de exibição do provedor quando linkado no console de administração. -priority.tooltip=Prioridade do provedor quando da busca de usuários. Valores mais baixos são utilizados primeiro. -periodic-full-sync.tooltip=Habilitar ou não a sincronização completa periódica dos usuários deste provedor. -ldap.periodic-full-sync.tooltip=Habilitar ou não a sincronização completa dos usuários do LDAP para o Keycloak. -full-sync-period.tooltip=Intervalo para a sincronização completa em segundos. -periodic-changed-users-sync.tooltip=Habilitar ou não a sincronização de usuários novos ou alterados do provedor para o Keycloak. -ldap.periodic-changed-users-sync.tooltip=Habilitar ou não a sincronização de usuários novos ou alterados do LDAP para o Keycloak. -changed-users-sync-period.tooltip=Intervalo para sincronização dos usuários alterados ou novos do provedor em segundos. -ldap.changed-users-sync-period.tooltip=Intervalo para sincronização dos usuários alterados ou novos do LDAP em segundos. -kerberos-realm.tooltip=Nome do realm kerberos. Por exemplo FOO.ORG -server-principal.tooltip=Nome completo do principal do servidor para o serviço HTTP incluindo o servidor e nome do domínio. Por exemplo HTTP/host.foo.org@FOO.ORG -keytab.tooltip=Localização do arquivo KeyTab do Kerberos contendo as credenciais do principal do servidor. Por exemplo /etc/krb5.keytab -debug.tooltip=Habilita/Desabilita log de nível debug para a saída padrão para Krb5LoginModule. -allow-password-authentication.tooltip=Habilita/Desabilita a possibilidade de autenticação via usuário/senha contra o banco Kerberos -edit-mode.tooltip=READ_ONLY significa que atualizações de senhas não são permitidas e o usuário sempre autenticará com a senha do Kerberos. UNSYNCED significa que o usuário pode alterar a senha no banco do Keycloak e essa senha será utilizda ao invés da senha do Kerberos. -ldap.edit-mode.tooltip=READ_ONLY é um LDAP somente leitura. WRITABLE significa que os dados serão sicronizados de volta para o LDAP on demand. UNSYNCED significa que os dados do usuário serão importados, mas não sicronizados de volta para o LDAP. -update-profile-first-login.tooltip=Atualizar o perfil no primeiro login -ldap.sync-registrations.tooltip=Os novos usuários criados devem ser criados no LDAP? A prioridade afeta qual provedor é utilizado para sincronizar o novo usuário. -ldap.vendor.tooltip=LDAP vendor (provedor) -username-ldap-attribute.tooltip=Nome do atributo do LDAP que será mapeado como nome do usuário no Keycloak. Para muitos servidores LDAP este valor deve ser 'uid'. Para o Active Directory pode ser 'sAMAccountName' ou 'cn'. O atributo deve ser preenchido para todos os registros de usuários do LDAP que você deseja importar do LDAP para o Keycloak. -rdn-ldap-attribute.tooltip=Nome do atributo LDAP que é utilizado como RDN (atributo topo) do DN do usuário típico. Geralmente é o mesmo que o atributo do nome do usuário, mas isto não é obrigatório. Por exemplo para o Active Directory é comum utilizar 'cn' como atributo RDN quando o atributo do nome de usuário pode ser 'sAMAccountName', -uuid-ldap-attribute.tooltip=Nome do atributo LDAP que é utilizado como identificador único do objeto(UUID) para objetos no LDAP. Para muitos servidores LDAP o valor é 'entryUUID', porém alguns são diferentes. Por exemplo para o Active Directory este valor para objetos no LDAP deve ser 'objectGUID'. Se o seu servidor LDAP realmente não suporta a noção de UUID, vocÊ pode usar qualquer outro atributo que seja único na árvore de usuários do LDAP. Por exemplo 'uid' ou 'entryDN'. -ldap.user-object-classes.tooltip=Todos os valores de objectClass para usuários no LDAP separados por vírgula. Por exemplo: 'inetOrgPerson, organizationalPerson'. Usuários criados no Keycloak serão enviados para o LDAP com todas essas classes de objetos associadas e dados de usuários do LDAP somente serão localizados se ele contiverem todas estas classes de objeto. -ldap.connection-url.tooltip=Conexão URL para o seu servidor LDAP -ldap.users-dn.tooltip=DN completo da árvore LDAP onde os usuários estão. Este DN é o pai dos usuários do LDAP. Por exemplo pode ser 'ou=users,dc=example,dc=com' entendendo que o usuário típico irá ter um DN como 'uid=john,ou=users,dc=example,dc=com'. -ldap.authentication-type.tooltip=Tipo de autenticação no LDAP. No momento apenas os mecanismos 'none' (anonymous LDAP authentication) ou 'simple' (Credencial de bind + senha para bind) estão disponíveis. -ldap.bind-dn.tooltip=DN do administrador do LDAP, que será utilizado pelo Keycloak para acessar o servidor LDAP. -ldap.bind-credential.tooltip=Senha do administrador do LDAP -ldap.custom-user-ldap-filter.tooltip=Additional LDAP Filter for filtering searched users. Leave this empty if you don't need additional filter. Make sure that it starts with '(' and ends with ')' -ldap.use-truststore-spi.tooltip=Specifies whether LDAP connection will use the truststore SPI with the truststore configured in keycloak-server.json. 'Always' means that it will always use it. 'Never' means that it won't use it. 'Only for ldaps' means that it will use if your connection URL use ldaps. Note even if keycloak-server.json is not configured, the default Java cacerts or certificate specified by 'javax.net.ssl.trustStore' property will be used. -ldap.connection-pooling.tooltip=Does Keycloak should use connection pooling for accessing LDAP server -ldap.pagination.tooltip=Does the LDAP server support pagination. -ldap.allow-kerberos-authentication.tooltip=Enable/disable HTTP authentication of users with SPNEGO/Kerberos tokens. The data about authenticated users will be provisioned from this LDAP server -ldap.use-kerberos-for-password-authentication.tooltip=Use Kerberos login module for authenticate username/password against Kerberos server instead of authenticating against LDAP server with Directory Service API -ldap.batch-size.tooltip=Count of LDAP users to be imported from LDAP to Keycloak within single transaction. -identity-provider-user-id.tooltip=Unique ID of the user on the Identity Provider side -identity-provider-username.tooltip=Username on the Identity Provider side -browser-flow.tooltip=Select the flow you want to use for browser authentication. -registration-flow.tooltip=Select the flow you want to use for registration. -direct-grant-flow.tooltip=Select the flow you want to use for direct grant authentication. -reset-credentials.tooltip=Select the flow you want to use when the user has forgotten their credentials. -client-authentication.tooltip=Select the flow you want to use for authentication of clients. -authenticator.alias.tooltip=Name of the configuration -otp-type.tooltip=totp is Time-Based One Time Password. 'hotp' is a counter base one time password in which the server keeps a counter to hash against. -otp-hash-algorithm.tooltip=What hashing algorithm should be used to generate the OTP. -otp.number-of-digits.tooltip=How many digits should the OTP have? -otp.look-ahead-window.tooltip=How far ahead should the server look just in case the token generator and server are out of time sync or counter sync? -otp.initial-counter.tooltip=What should the initial counter value be? -otp-token-period.tooltip=How many seconds should an OTP token be valid? Defaults to 30 seconds. -admin-events.tooltip=Displays saved admin events for the realm. Events are related to admin account, for example a realm creation. To enable persisted events go to config. -clear-admin-events.tooltip=Deletes all admin events in the database. -resource-path.tooltip=Filter by resource path. Supports wildcards '*' to match a single part of the path and '**' matches multiple parts. For example 'realms/*/clients/asbc' matches client with id asbc in any realm, while or 'realms/master/**' matches anything in the master realm. -auth.default-action.tooltip=If enabled, any new user will have this required action assigned to it. -groups.default-groups.tooltip=Set of groups that new users will automatically join. -flow.alias.tooltip=Specifies display name for the flow. -top-level-flow-type.tooltip=What kind of top level flow is it? Type 'client' is used for authentication of clients (applications) when generic is for users and everything else -flow-type.tooltip=What kind of form is it -default-groups.tooltip=Newly created or registered users will automatically be added to these groups -available-groups.tooltip=Select a group you want to add as a default. -membership.available-groups.tooltip=Groups a user can join. Select a group and click the join button. -events.tooltip=Displays saved events for the realm. Events are related to user accounts, for example a user login. To enable persisted events go to config. -login.save-events.tooltip=If enabled login events are saved to the database which makes events available to the admin and account management consoles. -admin.save-events.tooltip=If enabled admin events are saved to the database which makes events available to the admin console. -events-config.tooltip=Displays configuration options to enable persistence of user and admin events. -event-listeners.tooltip=Configure what listeners receive events for the realm. -clear-events.tooltip=Deletes all events in the database. -events.expiration.tooltip=Sets the expiration for events. Expired events are periodically deleted from the database. -saved-types.tooltip=Configure what event types are saved. -include-representation.tooltip=Include JSON representation for create and update requests. -credentials.temporary.tooltip=If enabled user is required to change password on next login -credentials.remove-totp.tooltip=Remove one time password generator for user. -credentials.reset-actions.tooltip=Set of actions to execute when sending the user a Reset Actions Email. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure OTP' requires setup of a mobile password generator. -credentials.reset-actions-email.tooltip=Sends an email to user with an embedded link. Clicking on link will allow the user to execute the reset actions. They will not have to login prior to this. For example, set the action to update password, click this button, and the user will be able to change their password without logging in. -user-enabled.tooltip=A disabled user cannot login. -user-temporarily-locked.tooltip=The user may have been locked due to failing to login too many times. -email-verified.tooltip=Has the user's email been verified? -required-user-actions.tooltip=Require an action when the user logs in. 'Verify email' sends an email to the user to verify their email address. 'Update profile' requires user to enter in new personal information. 'Update password' requires user to enter in a new password. 'Configure OTP' requires setup of a mobile password generator. -impersonate-user.tooltip=Login as this user. If user is in same realm as you, your current login session will be logged out before you are logged in as this user. -group-membership.tooltip=Groups user is a member of. Select a listed group and click the Leave button to leave the group. -import-keys-and-cert.tooltip=Upload the client's key pair and cert. -authz-icon-uri.tooltip=An URI pointing to an icon. -authz-authorization-services-enabled.tooltip=Enable/Disable fine-grained authorization support for a client -authz-import-config.tooltip=Import a JSON file containing authorization settings for this resource server. -authz-policy-enforcement-mode.tooltip=The policy enforcement mode dictates how policies are enforced when evaluating authorization requests. 'Enforcing' means requests are denied by default even when there is no policy associated with a given resource. 'Permissive' means requests are allowed even when there is no policy associated with a given resource. 'Disabled' completely disables the evaluation of policies and allow access to any resource. -authz-remote-resource-management.tooltip=Should resources be managed remotely by the resource server? If false, resources can only be managed from this admin console. -authz-export-settings.tooltip=Export and download all authorization settings for this resource server. -authz-resource-name.tooltip=An unique name for this resource. The name can be used to uniquely identify a resource, useful when querying for a specific resource. -authz-resource-owner.tooltip=The owner of this resource. -authz-resource-type.tooltip=The type of this resource. It can be used to group different resource instances with the same type. -authz-resource-uri.tooltip=An URI that can also be used to uniquely identify this resource. -authz-resource-scopes.tooltip=The scopes associated with this resource. -authz-scope-name.tooltip=An unique name for this scope. The name can be used to uniquely identify a scope, useful when querying for a specific scope. -authz-policy-name.tooltip=The name of this policy. -authz-policy-description.tooltip=A description for this policy. -authz-policy-logic.tooltip=The logic dictates how the policy decision should be made. If 'Positive', the resulting effect (permit or deny) obtained during the evaluation of this policy will be used to perform a decision. If 'Negative', the resulting effect will be negated, in other words, a permit becomes a deny and vice-versa. -authz-policy-apply-policy.tooltip=Specifies all the policies that must be applied to the scopes defined by this policy or permission. -authz-policy-decision-strategy.tooltip=The decision strategy dictates how the policies associated with a given policy are evaluated and how a final decision is obtained. 'Affirmative' means that at least one policy must evaluate to a positive decision in order to the overall decision be also positive. 'Unanimous' means that all policies must evaluate to a positive decision in order to the overall decision be also positive. 'Consensus' means that the number of positive decisions must be greater than the number of negative decisions. If the number of positive and negative is the same, the final decision will be negative. -authz-policy-user-users.tooltip=Specifies which user(s) are allowed by this policy. -authz-policy-time-not-before.tooltip=Defines the time before which the policy MUST NOT be granted. Only granted if current date/time is after or equal to this value. -authz-policy-time-not-on-after.tooltip=Defines the time after which the policy MUST NOT be granted. Only granted if current date/time is before or equal to this value. -authz-policy-js-code.tooltip=The JavaScript code providing the conditions for this policy. -authz-permission-name.tooltip=The name of this permission. -authz-permission-description.tooltip=A description for this permission. -authz-permission-resource-apply-to-resource-type.tooltip=Specifies if this permission would be applied to all resources with a given type. In this case, this permission will be evaluated for all instances of a given resource type. -authz-permission-resource-resource.tooltip=Specifies that this permission must be applied to a specific resource instance. -authz-permission-resource-type.tooltip=Specifies that this permission must be applied to all resources instances of a given type. -authz-permission-scope-resource.tooltip=Restrict the scopes to those associated with the selected resource. If not selected all scopes would be available. -authz-evaluation-identity-information.tooltip=The available options to configure the identity information that will be used when evaluating policies. -authz-evaluation-client.tooltip=Select the client making this authorization request. If not provided, authorization requests would be done based on the client you are in. -authz-evaluation-user.tooltip=Select an user whose identity is going to be used to query permissions from the server. -authz-evaluation-role.tooltip=Select the roles you want to associate with the selected user. -authz-evaluation-contextual-info.tooltip=The available options to configure any contextual information that will be used when evaluating policies. -authz-evaluation-contextual-attributes.tooltip=Any attribute provided by a running environment or execution context. -authz-evaluation-permissions.tooltip=The available options to configure the permissions to which policies will be applied. -authz-evaluation-result.tooltip=The overall result for this permission request. -authz-evaluation-scopes.tooltip=The list of allowed scopes. -authz-evaluation-policies.tooltip=Details about which policies were evaluated and their decisions. -authz-evaluation-authorization-data.tooltip=Represents a token carrying authorization data as a result of the processing of an authorization request. This representation is basically what Keycloak issues to clients asking for permissions. Check the 'authorization' claim for the permissions that were granted based on the current authorization request. diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_ru.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_ru.properties deleted file mode 100644 index 259854657..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_ru.properties +++ /dev/null @@ -1,1277 +0,0 @@ -# encoding: utf-8 -consoleTitle=КонÑоль админиÑтратора Keycloak -# Common messages -enabled=Включено -hidden=Скрыто -link-only-column=Только ÑÑылки -name=Ð˜Ð¼Ñ -displayName=Отображаемое название -displayNameHtml=Отображаемое название в HTML -save=Сохранить -cancel=Отмена -onText=ВКЛ -offText=ВЫК -client=Клиент -clients=Клиенты -clear=ОчиÑтить -selectOne=Выбрать... - -true=Да -false=Ðет - -endpoints=Конечные точки - -# Realm settings -realm-detail.enabled.tooltip=Пользователи и клиенты могут получить доÑтуп к Realm только еÑли он включен -realm-detail.oidc-endpoints.tooltip=Показать конфигурацию конечных точек OpenID Connect -registrationAllowed=СамоÑтоÑÑ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ñ€ÐµÐ³Ð¸ÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ -registrationAllowed.tooltip=Включить/выключить Ñтраницу региÑтрации. СÑылка Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации будет также показана на Ñтранице входа. -registrationEmailAsUsername=E-mail как Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -registrationEmailAsUsername.tooltip=ЕÑли включено, то на форме региÑтрации поле имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÐµÑ‚ Ñкрыто и в качеÑтве имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð½Ð¾Ð²Ñ‹Ñ… пользователей будет иÑпользоватьÑÑ E-mail. -editUsernameAllowed=Редактируемое Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -editUsernameAllowed.tooltip=ЕÑли включено,то Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ будет отредактировать, иначе оно будет доÑтупным только Ð´Ð»Ñ Ñ‡Ñ‚ÐµÐ½Ð¸Ñ. -resetPasswordAllowed=Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ -resetPasswordAllowed.tooltip=Показывает ÑÑылку на Ñтранице входа Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ, по переходу на которую пользователь Ñможет воÑÑтановить Ñвои данные Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð°. -rememberMe=Запомнить Ð¼ÐµÐ½Ñ -rememberMe.tooltip=Показать Ñ‡ÐµÐºÐ±Ð¾ÐºÑ Ð½Ð° Ñтранице входа, чтобы разрешить пользователю запомнить вход в учетную запиÑÑŒ в Ñлучае еÑли Ð±Ñ€Ð°ÑƒÐ·ÐµÑ€Ð½Ð°Ñ ÑеÑÑÐ¸Ñ ÑƒÑтареет. -loginWithEmailAllowed=Вход по E-mail -loginWithEmailAllowed.tooltip=Разрешает пользователÑм входить Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ E-mail. -duplicateEmailsAllowed=ДублирующиеÑÑ E-mail -duplicateEmailsAllowed.tooltip=Разрешает разным пользователÑм иметь один и тот же E-mail. Изменение Ñтой наÑтройки также очиÑтит пользовательÑкий кÑш. ПоÑле Ð²Ñ‹ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€Ð¶ÐºÐ¸ дублирующихÑÑ email рекомендуетÑÑ Ð²Ñ€ÑƒÑ‡Ð½ÑƒÑŽ почиÑтить в базе данных Ð¾Ð³Ñ€Ð°Ð½Ð¸Ñ‡ÐµÐ½Ð¸Ñ Ð¿Ð¾ E-mail ÑущеÑтвующим пользователÑм. -verifyEmail=Подтверждение E-mail -verifyEmail.tooltip=Требует у Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚ÑŒ Ñвой E-mail при первом входе в учетную запиÑÑŒ. -sslRequired=Требует SSL -sslRequired.option.all=вÑе запроÑÑ‹ -sslRequired.option.external=внешние запроÑÑ‹ -sslRequired.option.none=нет -sslRequired.tooltip=ТребуетÑÑ Ð»Ð¸ HTTPS? 'нет' означает, что HTTPS не требуетÑÑ Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð² Ñ Ð»ÑŽÐ±Ñ‹Ð¼ IP адреÑом. 'Внешние запроÑÑ‹' означает, что localhost и внутренние IP адреÑа могут получить доÑтуп без HTTPS. 'Ð’Ñе запроÑÑ‹' означает, что HTTPS требуетÑÑ Ð²Ð½Ðµ завиÑимоÑти от IP адреÑа. -publicKeys=Публичные ключи -publicKey=Публичный ключ -privateKey=Приватный ключ -gen-new-keys=Сгенерировать новый ключ -certificate=Сертификат -host=Сервер -smtp-host=SMTP Ñервер -port=Порт -smtp-port=SMTP порт (по умолчанию 25) -from=От -sender-email-addr=E-mail Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÐµÐ»Ñ -enable-ssl=Включить SSL -enable-start-tls=Включить StartTLS -enable-auth=Включить аутентификацию -username=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -login-username=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° -password=Пароль -login-password=Пароль Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° -login-theme=Тема Ñтраницы входа -login-theme.tooltip=Выберите тему Ð´Ð»Ñ Ñтраниц входа, временного одноразового Ð¿Ð°Ñ€Ð¾Ð»Ñ (OTP), выдачи разрешений, региÑтрации и воÑÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ. -account-theme=Тема учетной запиÑи -account-theme.tooltip=Выберите тему Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑью пользователÑ. -admin-console-theme=Тема конÑоли админиÑтратора -select-theme-admin-console=Выберите тему Ð´Ð»Ñ ÐºÐ¾Ð½Ñоли админиÑтратора. -email-theme=Тема Ð´Ð»Ñ E-mail -select-theme-email=Выберите тему Ð´Ð»Ñ E-mail, которые будут отÑылатьÑÑ Ñ Ñервера. -i18n-enabled=Ð˜Ð½Ñ‚ÐµÑ€Ð½Ð°Ñ†Ð¸Ð¾Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ -supported-locales=Поддерживаемые Ñзыки -supported-locales.placeholder=Выберите Ñзык и нажмите Enter -default-locale=Язык по умолчанию -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=КÑш Realm -realm-cache-clear.tooltip=Удалить вÑе запиÑи в кÑше realm (удалит вÑе запиÑи Ð´Ð»Ñ Ð²Ñех realm) -user-cache-clear=КÑш пользователей -user-cache-clear.tooltip=ОчиÑтить вÑе запиÑи в пользовательÑком кÑше (Ñто удалит запиÑи Ð´Ð»Ñ Ð²Ñех realm) -keys-cache-clear=КÑш ключей -keys-cache-clear.tooltip=ОчиÑтить вÑе запиÑи в кÑше внешних публичных ключей. Эти ключи внешних ключей или провайдеров идентификации. (Ñто очиÑтит вÑе запиÑи Ð´Ð»Ñ Ð²Ñех realm) -revoke-refresh-token=Одноразовые токены Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ -revoke-refresh-token.tooltip=ЕÑли включено, то токены Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¼Ð¾Ð³ÑƒÑ‚ быть иÑпользованы один раз. Иначе токен отзыватьÑÑ Ð½Ðµ будет и может иÑпользоватьÑÑ Ð¼Ð½Ð¾Ð³Ð¾ÐºÑ€Ð°Ñ‚Ð½Ð¾. -sso-session-idle=Таймаут ÑеÑÑии SSO -seconds=Ñекунд -minutes=минут -hours=чаÑов -days=дней -sso-session-max=Ограничение ÑеÑÑии SSO -sso-session-idle.tooltip=ДопуÑтимое Ð²Ñ€ÐµÐ¼Ñ Ð±ÐµÐ·Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ ÑеÑÑии. По иÑтечении Ñтого времени токены и браузерные ÑеÑÑии ÑтановÑÑ‚ÑÑ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼Ð¸. -sso-session-max.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð´Ð¾ того, как иÑтечет ÑеÑÑиÑ. По иÑтечении Ñтого времени токены и браузерные ÑеÑÑии ÑтановÑÑ‚ÑÑ Ð½ÐµÐ²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼Ð¸. -offline-session-idle=Таймаут оффлайн ÑеÑÑии -offline-session-idle.tooltip=ДопуÑтимое Ð²Ñ€ÐµÐ¼Ñ Ð±ÐµÐ·Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ð¾Ñ„Ñ„Ð»Ð°Ð¹Ð½ ÑеÑÑии. Вам необходимо иÑпользовать оффлайн токен Ð´Ð»Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ñ…Ð¾Ñ‚Ñ Ð±Ñ‹ раз за Ñтот период, иначе ÑеÑÑÐ¸Ñ Ð¸Ñтечет. -access-token-lifespan=ПродолжительноÑÑ‚ÑŒ жизни токена доÑтупа -access-token-lifespan.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‚Ð¾ÐºÐµÐ½Ð° доÑтупа. Значение рекомендуетÑÑ ÑƒÑтанавливать как можно ближе к таймауту SSO. -access-token-lifespan-for-implicit-flow=ПродолжительноÑÑ‚ÑŒ жизни токена доÑтупа Ð´Ð»Ñ Implicit Flow -access-token-lifespan-for-implicit-flow.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð´ÐµÐ¹ÑÑ‚Ð²Ð¸Ñ Ñ‚Ð¾ÐºÐµÐ½Ð° доÑтупа поÑле того как ÑеÑÑÐ¸Ñ Ñ‚Ð¾ÐºÐµÐ½Ð° OpenID Connect Implicit Flow иÑтекла. Это значение рекомендуетÑÑ ÑƒÑтановить как можно ближе к таймауту SSO. Ðет возможноÑти обновить токен во Ð²Ñ€ÐµÐ¼Ñ Implicit Flow, поÑтому Ñтот таймаут отличаетÑÑ Ð¾Ñ‚ 'ПродолжительноÑти жизни токена доÑтупа' -client-login-timeout=Таймаут авторизации клиента -client-login-timeout.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° access token. Обычно уÑтанавливаетÑÑ Ñ€Ð°Ð²Ð½Ñ‹Ð¼ 1-ой минуте. -login-timeout=Таймаут входа -login-timeout.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð°. РекомендуетÑÑ ÑƒÑтановить отноÑительно большое значение (30 минут и более). -login-action-timeout=Таймаут дейÑтвий по входу -login-action-timeout.tooltip=МакÑимальное времÑ, за которое пользователь должен выполнить и завершить дейÑтвие поÑле входа. Ðапример, обновление Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸Ð»Ð¸ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¾Ð´Ð½Ð¾Ñ€Ð°Ð·Ð¾Ð²Ð¾Ð³Ð¾ временного паролÑ. РекомендуетÑÑ ÑƒÑтановить отноÑительно большое значение (5 минут и более). -headers=Заголовки -brute-force-detection=Определение Brute Force -x-frame-options=X-Frame-Options -x-frame-options-tooltip=Значение по умолчанию не позволÑет Ñтраницам быть включенными в iframe Ñторонних Ñайтов (перейдите по ÑÑылке Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации) -content-sec-policy=Content-Security-Policy -content-sec-policy-tooltip=Значение по умолчанию не позволÑет Ñтраницам быть включенными в iframe Ñторонних Ñайтов (перейдите по ÑÑылке Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации) -content-type-options=X-Content-Type-Options -content-type-options-tooltip=Значение по умолчанию не позволÑет браузерам Internet Explorer и Google Chrome вычиÑлÑÑ‚ÑŒ тип Ñодержимого в ответе от Ñервера дальше от объÑвленного типа Ñодержимого (перейдите по ÑÑылке Ð´Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации) -max-login-failures=МакÑимальное количеÑтво неудачных попыток входа -max-login-failures.tooltip=КоличеÑтво неудачных попыток входа до блокировки пользователÑ. -wait-increment=Порог Ð¾Ð¶Ð¸Ð´Ð°Ð½Ð¸Ñ -wait-increment.tooltip=ЕÑли порог ошибок превышен, Ñколько времени пользователь будет заблокирован? -quick-login-check-millis=Проверка количеÑтва миллиÑекунд между попытками входа -quick-login-check-millis.tooltip=ЕÑли попытки аутентификации проиÑходÑÑ‚ Ñлишком чаÑто, то Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½ÐµÐ¾Ð±Ñ…Ð¾Ð´Ð¸Ð¼Ð¾ заблокировать. -min-quick-login-wait=Минимальное ожидание быÑтрого входа -min-quick-login-wait.tooltip=Как долго ждать поÑле неудачной попытки быÑтрого входа. -max-wait=МакÑимальное ожидание -max-wait.tooltip=МакÑимальное времÑ, на которое пользователь будет заблокирован. -failure-reset-time=Ð’Ñ€ÐµÐ¼Ñ ÑброÑа неудачных попыток -failure-reset-time.tooltip=Через какое Ð²Ñ€ÐµÐ¼Ñ Ñчетчик неудачных попыток будет Ñброшен? -realm-tab-login=Вход -realm-tab-keys=Ключи -realm-tab-email=E-mail -realm-tab-themes=Темы -#realm-tab-localization=Localization -realm-tab-cache=КÑш -realm-tab-tokens=Токены -realm-tab-client-initial-access=Первоначальные токены доÑтупа -realm-tab-security-defenses=Защита безопаÑноÑти -realm-tab-general=Ð“Ð»Ð°Ð²Ð½Ð°Ñ -add-realm=Добавить realm - -#Session settings -realm-sessions=ÐаÑтройки Realm -revocation=Отзыв -logout-all=Разлогинить вÑе ÑеÑÑии -active-sessions=Ðктивные ÑеÑÑии -sessions=СеÑÑии -not-before=Ðе ранее чем -not-before.tooltip=Отозвать любые токены, выданные ранее Ñтой даты. -set-to-now=УÑтановить на ÑÐµÐ¹Ñ‡Ð°Ñ -push=РазоÑлать -push.tooltip=Уведомить каждого клиента, имеющего URL админиÑтратора, о новой политике отзыва токена. - -#Protocol Mapper -usermodel.prop.label=СвойÑтво -usermodel.prop.tooltip=Ð˜Ð¼Ñ ÑвойÑтва метода в интерфейÑе UserModel. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°, значение 'email' будет ÑÑылкой на метод UserModel.getEmail(). -usermodel.attr.label=Ðтрибут Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -usermodel.attr.tooltip=Ð˜Ð¼Ñ Ñохраненного атрибута пользователÑ, которое ÑвлÑетÑÑ Ð¸Ð¼ÐµÐ½ÐµÐ¼ атрибута, ÑоглаÑованным Ñ UserModel.attribute. -userSession.modelNote.label=Заметка ÑеÑÑии Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -userSession.modelNote.tooltip=Ðаименование процедуры заметки ÑеÑÑии Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑоглаÑованным Ñ UserSessionModel.note. -multivalued.label=ÐеÑколько значений -multivalued.tooltip=ОтображаетÑÑ, еÑли атрибут поддерживает неÑколько значений. ЕÑли включен, то ÑпиÑок вÑех значений будет претендовать на Ñтот атрибут. Ð’ противном Ñлучае выбиратьÑÑ Ð±ÑƒÐ´ÐµÑ‚ только первое значение -selectRole.label=Выберите роль -selectRole.tooltip=Введите роль в текÑтовом поле Ñлева, или нажмите на кнопку, чтобы выбрать желаемую роль. -tokenClaimName.label=Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ в токене -tokenClaimName.tooltip=Ð˜Ð¼Ñ Ð¿ÐµÑ€ÐµÐ¼ÐµÐ½Ð½Ð¾Ð¹ при добавлении ее в токен. Может быть полное имÑ, например 'address.street'. Ð’ таком Ñлучае будет Ñоздан вложенный json объект. -jsonType.label=Тип переменной JSON -jsonType.tooltip=Тип переменной в JSON, который должен иÑпользоватьÑÑ Ð¿Ñ€Ð¸ добавлении ее в токен. ДопуÑтимые Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ long, int, boolean, и String. -includeInIdToken.label=Добавить в токен ID -includeInIdToken.tooltip=Должно ли значение быть добавлено в токен ID? -includeInAccessToken.label=Добавить в токен доÑтупа -includeInAccessToken.tooltip=Должно ли значение быть добавлено в токен доÑтупа? -includeInUserInfo.label=Добавить в информацию о пользователе -includeInUserInfo.tooltip=Должно ли требование быть добавлено в информацию о пользователе? -usermodel.clientRoleMapping.clientId.label=ID клиента -usermodel.clientRoleMapping.clientId.tooltip=ID клиента Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ€Ð¾Ð»ÐµÐ¹ -usermodel.clientRoleMapping.rolePrefix.label=ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ñ€Ð¾Ð»ÐµÐ¹ клиента -usermodel.clientRoleMapping.rolePrefix.tooltip=ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ роли клиента (опционально). -usermodel.realmRoleMapping.rolePrefix.label=ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ñ€Ð¾Ð»ÐµÐ¹ Realm -usermodel.realmRoleMapping.rolePrefix.tooltip=ÐŸÑ€ÐµÑ„Ð¸ÐºÑ Ð´Ð»Ñ ÐºÐ°Ð¶Ð´Ð¾Ð¹ роли Realm (опционально). -sectorIdentifierUri.label=Сектор идентификации URI -sectorIdentifierUri.tooltip=Провайдеры, иÑпользующие пары вÑпомогательных значений и поддерживающие динамичеÑкую региÑтрацию клиентов ДОЛЖÐЫ иÑпользовать sector_identified_uri параметр. Это обеÑпечивает ÑпоÑоб Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ñ‹ Ñайтов под общим админиÑтративным контролем, чтобы иметь поÑледовательные попарные Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð½ÐµÐ·Ð°Ð²Ð¸Ñимо от индивидуальных доменных имен. Это также обеÑпечивает ÑпоÑоб Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð² Ð´Ð»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ redirect_uri доменов, не имещющих возможноÑти перерегиÑтрации вÑех Ñвоих пользователей. -pairwiseSubAlgorithmSalt.label=Соль -pairwiseSubAlgorithmSalt.tooltip=Соль, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð²Ñ‹Ñ‡Ð¸ÑÐ»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð½Ð¾Ð³Ð¾ Ñубъекта идентификатора. ЕÑли поле не заполнено, то Ñоль будет Ñгенерирована. -addressClaim.street.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, обозначающего Улицу -addressClaim.street.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, которое будет иÑпользоватьÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'street_address' внутри атрибута 'address' токена. По умолчанию 'street' . -addressClaim.locality.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, обозначающего МеÑтонахождение -addressClaim.locality.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, которое будет иÑпользоватьÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'locality' внутри атрибута 'address' токена. По умолчанию 'locality' . -addressClaim.region.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, обозначающего Регион -addressClaim.region.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, которое будет иÑпользоватьÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'region' внутри атрибута 'address' токена. По умолчанию 'region' . -addressClaim.postal_code.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, обозначающего Почтовый Ð¸Ð½Ð´ÐµÐºÑ -addressClaim.postal_code.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÑлького атрибута, котоое будет иÑпользоватьÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'postal_code' внутри атрибута 'address' токена. По умолчанию 'postal_code' . -addressClaim.country.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, обозначающего Страна -addressClaim.country.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, которое будет иÑпользоватльÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'country' внутри атрибута 'address' токена. По умолчанию 'country' . -addressClaim.formatted.label=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑокого атрибута, обозначающего Формитированный Ð°Ð´Ñ€ÐµÑ -addressClaim.formatted.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÑŒÑкого атрибута, которое будет иÑпользоватьÑÑ Ð´Ð»Ñ ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð°Ñ‚Ñ€Ð¸Ð±ÑƒÑ‚Ð° 'formatted' внутри атрибута 'address' токена. По умолчанию 'formatted' . - -# client details -clients.tooltip=Клиенты доверенных браузерных приложений и веб-ÑервиÑов в realm. Эти клиенты могут запрашивать вход. Ð’Ñ‹ также можете определить конкретные роли клиента. -search.placeholder=ПоиÑк... -create=Создать -import=Импорт -client-id=ID клиента -base-url=Базовый URL -actions=ДейÑÑ‚Ð²Ð¸Ñ -not-defined=Ðе задан -edit=Редактировать -delete=Удалить -no-results=Ðет результатов -no-clients-available=Ðет доÑтупных клиентов -add-client=Добавить клиента -select-file=Выберите файл -view-details=Смотреть детали -clear-import=ОчиÑтить импорт -client-id.tooltip=Задает идентификатор, указываемый в URI и в токенах. Ðапример 'my-client'. Ð”Ð»Ñ SAML Ñто также ожидаемое Ð¸Ð¼Ñ Ð¸Ð·Ð´Ð°Ñ‚ÐµÐ»Ñ Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов аутентификации -client.name.tooltip=Задает отображаемое название клиента. Ðапример 'My Client'. Поддерживает ключи Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… значений. Ðапример\\: ${my_client} -client.enabled.tooltip=Отключенные клиенты не могут инициировать вход или иметь возможноÑÑ‚ÑŒ получить токены доÑтупа. -consent-required=Ðеобходимо ÑоглаÑие -consent-required.tooltip=ЕÑли включено, пользователи должны дать ÑоглаÑие на доÑтуп клиентÑкому приложению. -client-protocol=Протокол клиента -client-protocol.tooltip='OpenID connect' разрешает клиентам проверить личноÑÑ‚ÑŒ конечного пользователÑ, оÑнованного на выполнении аутентификации на Сервере Ðвторизации.'SAML' включает веб-Ñценарии аутентификации и авторизации, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ ÐºÑ€Ð¾ÑÑдоменные центры единого ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупом (SSO) и иÑпользующие токены безопаÑноÑти, Ñодержащие заÑÐ²Ð»ÐµÐ½Ð¸Ñ Ð½Ð° передачу информации. -access-type=Тип доÑтупа -access-type.tooltip='Confidential' клиенты требуют Ñекрет Ð´Ð»Ñ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ð¸ протокола входа. 'Public' клиентам Ñекрет не требуетÑÑ. 'Bearer-only' клиенты и веб-ÑервиÑÑ‹ никогда не инициализируют вход. -standard-flow-enabled=Standard Flow включен -standard-flow-enabled.tooltip=Включает Ñтандартное OpenID Connect перенаправление, оÑнованное на аутентификации Ñ ÐºÐ¾Ð´Ð¾Ð¼ авторизации. Ð’ терминах OpenID Connect или OAuth2 Ñпецификаций включает 'Authorization Code Flow' Ð´Ð»Ñ Ñтого клиента. -implicit-flow-enabled=Implicit Flow включен -implicit-flow-enabled.tooltip=Включает поддержку OpenID Connect перенаправлениÑ, оÑнованного на аутентификации без кода авторизации. Ð’ терминах OpenID Connect или OAuth2 Ñпецификаций включает поддержку 'Implicit Flow' Ð´Ð»Ñ Ñтого клиента. -direct-access-grants-enabled=Direct Access Grants включен -direct-access-grants-enabled.tooltip=Включает поддержку Direct Access Grants, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¾Ð·Ð½Ð°Ñ‡Ð°ÐµÑ‚, что клиент имеет доÑтуп к имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¸ обменивает их напрÑмую Ñ Ñервером Keycloak на токен доÑтупа. Ð’ терминах OAuth2 Ñпецификации означает поддержку 'Resource Owner Password Credentials Grant' Ð´Ð»Ñ Ñтого клиента. -service-accounts-enabled=Service Accounts включен -service-accounts-enabled.tooltip=Разрешает Вам аутентифицировать Ñтого клиента в Keycloak и получить токен доÑтупа Ñпециально Ð´Ð»Ñ Ñтого клиента. Ð’ терминах OAuth2 Ñпецификации включает поддержку 'Client Credentials Grant' Ð´Ð»Ñ Ñтого клиента. -include-authnstatement=Включать Ðутентификационные ЗаÑвки -include-authnstatement.tooltip=Должны ли заÑвки на методы и временные метки быть включены в ответе на вход? -include-onetimeuse-condition=Включить уÑловие одноразового иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ -include-onetimeuse-condition.tooltip=Должно ли уÑловие одноразового иÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð±Ñ‹Ñ‚ÑŒ включено в ответе на вход? -sign-documents=ПодпиÑÑŒ документов -sign-documents.tooltip=Должны ли SAML документы быть подпиÑаны в realm? -sign-documents-redirect-enable-key-info-ext=ÐžÐ¿Ñ‚Ð¸Ð¼Ð¸Ð·Ð°Ñ†Ð¸Ñ REDIRECT поиÑка подпиÑанного ключа -sign-documents-redirect-enable-key-info-ext.tooltip=При подпиÑи SAML документов при REDIRECT ÑопоÑтавлении Ñ SP, который обеÑпечиваетÑÑ Ð±ÐµÐ·Ð¾Ð¿Ð°ÑноÑтью адаптера Keycloak, должен ли включать ID подпиÑанного ключа в Ñообщение по протоколу SAML в Ñлемент? Это оптимизирует валидацию Ñигнатуры, где в качеÑтве проверки иÑпользуетÑÑ Ð¾Ð´Ð¸Ð½ ключ вмеÑто попытки проверки каждого ключа во Ð²Ñ€ÐµÐ¼Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸. -sign-assertions=Sign Assertions -sign-assertions.tooltip=Должны ли ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð½ÑƒÑ‚Ñ€Ð¸ SAML документов быть подпиÑаны? УÑтанавливает отÑутÑтвие необходимоÑти подпиÑывать уже подпиÑанные документы. -signature-algorithm=Ðлгоритм подпиÑи -signature-algorithm.tooltip=Ðлгоритм, иÑпользуемый Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи документов. -canonicalization-method=Метод канонизации -canonicalization-method.tooltip=Метод канонизации Ð´Ð»Ñ XML Ñигнатур. -encrypt-assertions=Зашифровка утверждений -encrypt-assertions.tooltip=Должны ли SAML ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð±Ñ‹Ñ‚ÑŒ зашифрованы публичным ключом клиента, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ AES? -client-signature-required=ПодпиÑÑŒ клиента обÑзательна -client-signature-required.tooltip=Будет ли клиент подпиÑывать Ñвои saml запроÑÑ‹ и ответы? И должны ли они быть провалидированы? -force-post-binding=Принудительно иÑпользовать POST Binding -force-post-binding.tooltip=Ð’Ñегда иÑпользовать POST Binding Ð´Ð»Ñ Ð¾Ñ‚Ð²ÐµÑ‚Ð¾Ð². -front-channel-logout=Выход Ñ Ð¿ÐµÑ€ÐµÐ´Ð½ÐµÐ³Ð¾ канала -front-channel-logout.tooltip=Когда правила, выход требует перенаправить браузер на клиента. ЕÑли ложь, Ñервер выполнÑет фоновый режим Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из ÑиÑтемы. -force-name-id-format=Принудительно иÑпользовать формат ID -force-name-id-format.tooltip=Игнорирует запрошенный формат заголовка NameID и иÑпользует Ñконфигурированный через конÑоль админиÑтратора. -name-id-format=Ðаименование формата ID -name-id-format.tooltip=Ðаименование формата ID Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð² теме. -root-url=Корневой URL -root-url.tooltip=Корневой URL добавлÑетÑÑ Ðº отноÑительным URL -valid-redirect-uris=Ð’Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ñ URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -valid-redirect-uris.tooltip=Валидирует паттерн URI, на который может быть перенаправлен браузер поÑле уÑпешного входа или выхода. Разрешены проÑтые ÑÑылки, напр. 'http://example.com/*'. Также допуÑкаетÑÑ Ð¸Ñпользовать отноÑительный путь, напр. '/my/relative/path/*'. ОтноÑительные пути необходимо указывать отноÑительно корневого URL клиента, или, еÑли он не Ñпецифицирован, корневого URL Ñервера авторизации. Ð”Ð»Ñ SAML Ð’Ñ‹ должны задать валидный паттерн URI, еÑли Ð’Ñ‹ полагаетеÑÑŒ на URL ÑервиÑа потребителÑ, внедренного в Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð°Ð²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ð¸. -base-url.tooltip=ИÑпользуемый URL по умолчанию. ИÑпользуетÑÑ Ð² Ñлучае, еÑли Ñерверу требуетÑÑ Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ или Ð¾Ð±Ñ€Ð°Ñ‚Ð½Ð°Ñ ÑÑылка на клиента. -admin-url=URL админиÑÑ‚Ñ€Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -admin-url.tooltip=URL Ð´Ð»Ñ Ð´Ð¾Ñтупа к интерфейÑу админиÑтратора в заданном клиенте. Ðеобходимо уÑтановить, еÑли клиент поддерживает адаптер REST API. Это REST API разрешает Ñерверу авторизации Ñлать политики отзыва и прочие админиÑтративные задачи. Обычно уÑтанавливаетÑÑ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ðµ, ÑоответÑтвующее базовому URL клиента. -master-saml-processing-url=ОÑновной URL обработчика SAML -master-saml-processing-url.tooltip=ЕÑли URL Ñконфигурирован, то он будет каждый раз Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ SP's Assertion Consumer и Single Logout Services. Может быть переопределен индивидуально Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ ÑервиÑа в тонкой наÑтройке конфигурации конечных точек доÑтупа SAML. -idp-sso-url-ref=Ðаименование URL Ð´Ð»Ñ Ð¿Ð¾Ñтавщика идентификации IDP, инициирующего SSO -idp-sso-url-ref.tooltip=Ð˜Ð¼Ñ URL фрагмента, обозначающего клиента, еÑли вы хотите, чтобы SSO был проинициирован поÑтавщиком идентификации. ОÑтавьте Ñто поле пуÑтым, чтобы отключить инициирование SSO Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика идентификации. URL Ð´Ð»Ñ ÑÑылки вашего браузера может быть в Ñледующем виде: {server-root}/realms/{realm}/protocol/saml/clients/{client-url-name} -idp-sso-relay-state=Передача ÑоÑтоÑÐ½Ð¸Ñ SSO инициирующим поÑтавщиком идентификации -idp-sso-relay-state.tooltip=Передать ÑоÑтоÑние, которое вы хотите поÑлать вмеÑте Ñ SAML запроÑом, которым хотите проиницировать SSO поÑтавщиком идентификации. -web-origins=Web иÑточники -web-origins.tooltip=Разрешает CORS иÑточникам. Чтобы разрешить вÑем иÑточники Ñ Ð´Ð¾Ð¿ÑƒÑтимыми URI-адреÑами переадреÑации, добавьте '+'. Чтобы разрешить вÑе иÑточники, добавьте '*'. -fine-oidc-endpoint-conf=Ð¢Ð¾Ð½ÐºÐ°Ñ Ð½Ð°Ñтройка конфигурации OpenID Connect -fine-oidc-endpoint-conf.tooltip=РаÑкройте Ñту Ñекцию, чтобы Ñконфигурировать наÑтройки клиента, ÑвÑзанные Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð¼ OpenID Connect -user-info-signed-response-alg=Ðлгоритм подпиÑи ответа информации о пользователе -user-info-signed-response-alg.tooltip=JWA алгоритм иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾Ð´Ð¿Ð¸Ñи ответа реÑурÑа информации о пользователе. ЕÑли уÑтановлено в 'unsigned', то ответ инофрмации о пользователе не будет подпиÑан и будет возвращен в формате application/json. -request-object-signature-alg=Ðлгоритм Ñигнатуры объекта запроÑа -request-object-signature-alg.tooltip=JWA алгоритм, который необходим клиенту Ð´Ð»Ñ Ð¸ÑÐ¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð²Ð¾ Ð²Ñ€ÐµÐ¼Ñ Ð¾Ñ‚Ñылки OIDC запроÑа объекта, Ñпецифицированного по 'request' или 'request_uri' параметрам. ЕÑли уÑтановлено в 'any', то объект запроÑа будет подпиÑан любым алгоритмом (Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ 'none' ). -fine-saml-endpoint-conf=Ð¢Ð¾Ð½ÐºÐ°Ñ Ð½Ð°Ñтройка конфигурации конечных точек доÑтупа SAML -fine-saml-endpoint-conf.tooltip=Разверните Ñту Ñекции, чтобы Ñконфигурировать точные URL-адреÑа Ð´Ð»Ñ ÑƒÑ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð½Ð¾Ð³Ð¾ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»Ñ Ð¸ ÑервиÑа единого выхода. -assertion-consumer-post-binding-url=ПривÑзка URL POST-запроÑа Ð´Ð»Ñ ÑервиÑа Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»ÐµÐ¹ -assertion-consumer-post-binding-url.tooltip=URL-Ð°Ð´Ñ€ÐµÑ SAML POST запроÑа Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñких ÑервиÑов Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»ÐµÐ¹ (запроÑÑ‹ входа). Ð’Ñ‹ можете оÑтавить Ñто поле пуÑтым, еÑли не имеете URL Ð´Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð¹ приввÑзки. -assertion-consumer-redirect-binding-url=ПривÑзка URL-адреÑа переадреÑации Ð´Ð»Ñ ÑервиÑа Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»ÐµÐ¹ -assertion-consumer-redirect-binding-url.tooltip=SAML переадреÑÐ°Ñ†Ð¸Ñ Ð½Ð° привÑзанный URL Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñкого ÑервиÑа Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð¿Ð¾Ñ‚Ñ€ÐµÐ±Ð¸Ñ‚ÐµÐ»ÐµÐ¹ (запроÑÑ‹ входа). Ð’Ñ‹ можете оÑтавить Ñто поле пуÑтым, еÑли вы не имеете URL Ð´Ð»Ñ Ð¾ÑущеÑÑ‚Ð²Ð»ÐµÐ½Ð¸Ñ Ñ‚Ð°ÐºÐ¾Ð¹ привÑзки. -logout-service-post-binding-url=URL Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из ÑервиÑа в привÑзанном POST-методе -logout-service-post-binding-url.tooltip=SAML POST ÑвÑзанный URL Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ñкого ÑервиÑа единого выхода. ЕÑли Ð’Ñ‹ иÑпользуете другие привÑзки, то можете оÑтавить Ñто поле пуÑтым. -logout-service-redir-binding-url=URL переадреÑации Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° из ÑервиÑа -logout-service-redir-binding-url.tooltip=SAML переадреÑует на привÑзанный URL Ð´Ð»Ñ ÐµÐ´Ð¸Ð½Ð¾Ð¹ точки выхода из ÑервиÑа Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð². ЕÑли Ð’Ñ‹ иÑпользуете другие привÑзки, то можете оÑтаавить Ñто поле пуÑтым. -saml-signature-keyName-transformer=Ðаименование ключа Ñигнатуры SAML -saml-signature-keyName-transformer.tooltip=ПодпиÑанные SAML документы Ñодержат идентификаторы ключей подпиÑи в Ñлементе KeyName. Ð”Ð»Ñ Keycloak / RH-SSO контрагентов, иÑпользуйте KEY_ID, Ð´Ð»Ñ MS AD FS иÑпользуйте CERT_SUBJECT, Ð´Ð»Ñ Ð¾Ñтальных уÑтановите и иÑпользуйте NONE еÑли другие опции не работают. - -# client import -import-client=Импортировать клиента -format-option=Формат -select-format=Выберите формат -import-file=Импортировать файл - -# client tabs -settings=ÐаÑтройки -credentials=Учетные данные -roles=Роли -mappers=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -mappers.tooltip=Протокол ÑопоÑтавлений, оÑущеÑтвлÑющих преобразование в токены и документы. Могут делать такие вещи как ÑопоÑтавление пользовательÑких данных в заÑвки протокола, или проÑто преобразовать любой запроÑ, проиÑходÑщий между клиентом и Ñервером аутентификации. -scope=ОблаÑÑ‚ÑŒ -scope.tooltip=СопоÑтавление облаÑти позволÑет вам ограничить ÑопоÑтавленные роли пользователÑ, включаемые вмеÑте Ñ Ñ‚Ð¾ÐºÐµÐ½Ð¾Ð¼ доÑтупа, запрошенного клиентом. -sessions.tooltip=ПроÑмотр ÑеÑÑий Ð´Ð»Ñ Ñтого клиента. ПозволÑет Вам увидеть, какие пользователи активны и когда они вошли. -offline-access=Оффлайн доÑтуп -offline-access.tooltip=ПроÑмотр оффлайн ÑеÑÑий Ð´Ð»Ñ Ñтого клиента. ПозволÑет Вам увидеть, какие пользователи получали оффлайн токен и когда они его получили. Чтобы выбрать вÑе токены Ð´Ð»Ñ Ñтого клиента, перейдите на вкладку отзыва и уÑтановите значение в текущее времÑ. -clustering=КлаÑÑ‚ÐµÑ€Ð¸Ð·Ð°Ñ†Ð¸Ñ -installation=УÑтановка -installation.tooltip=Ð’ÑÐ¿Ð¾Ð¼Ð¾Ð³Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ ÑƒÑ‚Ð¸Ð»Ð¸Ñ‚Ð° Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ различных форматов конфигурации адаптера клиента, которые Ð’Ñ‹ можете Ñкачать или Ñкопировать Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ Ваших клиентов. -service-account-roles=Роли Service Account -service-account-roles.tooltip=Разрешают Вам аутентифицировать ÑопоÑтавленные роли Ð´Ð»Ñ ÑервиÑа учетных запиÑей, выделенного Ð´Ð»Ñ Ñтого клиента. - -# client credentials -client-authenticator=Проверка подлинноÑти клиента -client-authenticator.tooltip=Проверка подлинноÑти клиента иÑпользуетÑÑ Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ Ñтого клиента вмеÑто Ñервера Keycloak -certificate.tooltip=КлиентÑкий Ñертификат Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸ JWT, выпущенный клиентом и подпиÑанный клиентÑким приватным ключом из Вашего хранилища ключей. -publicKey.tooltip=Публичный ключ Ð´Ð»Ñ Ð²Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ð¸ JWT, выпущенный клиентом и подпиÑанный клиентÑким приватным ключом. -no-client-certificate-configured=КлиентÑкий Ñертификат не Ñконфигурирован -gen-new-keys-and-cert=Сгенерировать новые ключи и Ñертификат -import-certificate=Импортировать Ñертификат -gen-client-private-key=Сгенерировать приватный ключ клиента -generate-private-key=Сгенерировать приватный ключ -kid=KID -kid.tooltip=KID (Key ID) публичного ключа клиента из импортированного JWKS. -use-jwks-url=ИÑпользовать JWKS URL -use-jwks-url.tooltip=ЕÑли включено, то публичные ключи клиента будут ÑкачиватьÑÑ Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ адреÑа JWKS. Это дает большую гибкоÑÑ‚ÑŒ, поÑкольку в Ñлучае, еÑли клиент Ñгенерирует новую пару, то новые ключи вÑегда будут перезакачиватьÑÑ. ЕÑли выключено, то иÑпользуетÑÑ Ð¿ÑƒÐ±Ð»Ð¸Ñ‡Ð½Ñ‹Ð¹ ключ (или Ñертификат) из базы Keycloak DB, так еÑли пара клиента изменитÑÑ, вам будет необходимо вÑегда импортировать новый ключ (или Ñертификат) в базу Keycloak. -jwks-url=JWKS URL -jwks-url.tooltip=URL, где клиентÑкие ключи хранÑÑ‚ÑÑ Ð² формате JWK. Ð”Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ñ‹Ñ… деталей Ñмотрите Ñпецификацию JWK. ЕÑли Ð’Ñ‹ будете иÑпользовать адаптер клиента keycloak Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ð¼Ð¸ запиÑÑми "jwt", то Ð’Ñ‹ можете иÑпользовать URL вашего Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ñ ÑуффикÑом '/k_jwks'. Ðапример 'http://www.myhost.com/myapp/k_jwks' . -archive-format=Формат архивации -archive-format.tooltip=Формат архивации Java keystore или PKCS12. -key-alias=Синоним ключа -key-alias.tooltip=Синоним архива Ð´Ð»Ñ Ð’Ð°ÑˆÐµÐ³Ð¾ приватного ключа и Ñертификата. -key-password=Пароль Ð´Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° -key-password.tooltip=Пароль Ð´Ð»Ñ Ð´Ð¾Ñтупа к приватного ключу в архиве -store-password=Пароль хранилища -store-password.tooltip=Пароль Ð´Ð»Ñ Ð´Ð¾Ñтупа в Ñам архив -generate-and-download=Сгенерировать и Ñкачать -client-certificate-import=Импорт Ñертификата клиента -import-client-certificate=Импорт Ñертификата клиента -jwt-import.key-alias.tooltip=Синоним архива Ð´Ð»Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ Ñертификата. -secret=Секрет -regenerate-secret=Перегенерировать Ñекрет -registrationAccessToken=Токен доÑтупа к региÑтрации -registrationAccessToken.regenerate=Перегенерировать токен доÑтупа к региÑтрации -registrationAccessToken.tooltip=Токен доÑтупа к региÑтрации обеÑпечивает доÑтуп Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð¾Ð² к ÑервиÑу региÑтрации клиентов. -add-role=Добавить роль -role-name=Ðаименование роли -composite=СоÑÑ‚Ð°Ð²Ð½Ð°Ñ -description=ОпиÑание -no-client-roles-available=Ðет доÑтупных ролей клиента -scope-param-required=ТребуетÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€ облаÑти -scope-param-required.tooltip=Эта роль будет предоÑтавлена только еÑли параметр облаÑти Ñ Ð½Ð°Ð¸Ð¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸ÐµÐ¼ роли иÑпользуетÑÑ Ð² запроÑах авторизации/Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ð¾ÐºÐµÐ½Ð°. -composite-roles=СоÑтавные роли -composite-roles.tooltip=Когда Ñта роль (не)аÑÑоциирована Ñ Ð»ÑŽÐ±Ð¾Ð¹ ролью пользователей, она (не)будет неÑвно аÑÑоциирована. -realm-roles=Роли Realm -available-roles=ДоÑтупные роли -add-selected=Добавить выбранное -associated-roles=ÐÑÑоциированные роли -composite.associated-realm-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, аÑÑоциированные Ñ ÑоÑтавными ролÑми. -composite.available-realm-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, аÑÑоциированные Ñ Ñтой ÑоÑтавной ролью. -remove-selected=Удалить выбранное -client-roles=Роли клиентов -select-client-to-view-roles=Выберите клиента Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра его ролей -available-roles.tooltip=Роли Ñтого клиента, которые вы можете аÑÑоциировать Ñ ÑоÑтавной ролью. -client.associated-roles.tooltip=КлиентÑкие роли, аÑÑоциированные Ñ ÑоÑтавной ролью. -add-builtin=Добавить вÑтроенные -category=ÐšÐ°Ñ‚ÐµÐ³Ð¾Ñ€Ð¸Ñ -type=Тип -no-mappers-available=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ доÑтупны -add-builtin-protocol-mappers=Добавить вÑтроенные ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° -add-builtin-protocol-mapper=Добавить вÑтроенное ÑопоÑтавление протокола -scope-mappings=СопоÑтавление облаÑтей -full-scope-allowed=Полный доÑтуп к облаÑÑ‚Ñм -full-scope-allowed.tooltip=Отключает вÑе ограничениÑ. -scope.available-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, которые могут быть приÑвоены облаÑти. -assigned-roles=ПриÑвоенные роли -assigned-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, приÑвоенные облаÑти. -effective-roles=Ðазначенные роли -realm.effective-roles.tooltip=Ðазначенные роли ÑƒÑ€Ð¾Ð²Ð½Ñ realm, которые могут быть унаÑледованы из ÑоÑтавной роли. -select-client-roles.tooltip=Выберите клиента Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра его ролей -assign.available-roles.tooltip=Роли клиентов, доÑтупные Ð´Ð»Ñ Ð½Ð°Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ. -client.assigned-roles.tooltip=Ðазначенные роли клиента. -client.effective-roles.tooltip=Ðазначенные роли клиента, которые можно унаÑледовать из ÑоÑтавной роли. -basic-configuration=ОÑÐ½Ð¾Ð²Ð½Ð°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ -node-reregistration-timeout=Таймаут узла перерегиÑтрации -node-reregistration-timeout.tooltip=Интервал, означающий макÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð´Ð»Ñ ÑƒÐ·Ð»Ð¾Ð² клаÑтера зарегиÑтрированных клиентов Ð´Ð»Ñ Ð¸Ñ… перерегиÑтрации. ЕÑли узел клаÑтера не может поÑлать Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð¿ÐµÑ€ÐµÑ€ÐµÐ³Ð¸Ñтрации в Keycloak за указанное времÑ, то он будет разрегиÑтрирован из Keycloak -registered-cluster-nodes=ЗарегиÑтрированные узлы клаÑтера -register-node-manually=ЗарегиÑтрировать узел вручную -test-cluster-availability=ПротеÑтировать доÑтупноÑÑ‚ÑŒ клаÑтера -last-registration=ПоÑледнÑÑ Ñ€ÐµÐ³Ð¸ÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -node-host=ХоÑÑ‚ узла -no-registered-cluster-nodes=Ðет доÑтупных зарегиÑтрированных узлов клаÑтера -cluster-nodes=Узлы клаÑтера -add-node=Добавить узел -active-sessions.tooltip=Общее количеÑтво активных ÑеÑÑий пользователей Ð´Ð»Ñ Ñтого клиента. -show-sessions=Показать ÑеÑÑии -show-sessions.tooltip=Предупреждение! Ð’ Ñлучае большого чиÑла активных ÑеÑÑий Ñто будет доÑтаточно Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ. -user=Пользователь -from-ip=С IP -session-start=СеÑÑÐ¸Ñ Ð½Ð°Ñ‡Ð°Ñ‚Ð° -first-page=ÐŸÐµÑ€Ð²Ð°Ñ Ñтраница -previous-page=ПоÑледнÑÑ Ñтраница -next-page=Ð¡Ð»ÐµÐ´ÑƒÑŽÑ‰Ð°Ñ Ñтраница -client-revoke.not-before.tooltip=Отозвать любые токены, выданные до указанной даты Ð´Ð»Ñ Ñтого клиента. -client-revoke.push.tooltip=ЕÑли URL ÑиÑтемы админиÑтрации Ñконфигурирован Ð´Ð»Ñ Ñтого клиента, то необходимо поÑлать политики Ñтому клиенту. -select-a-format=Выберите формат -download=Скачать -offline-tokens=Оффлайн токены -offline-tokens.tooltip=Общее количеÑтво оффлайн токенов Ð´Ð»Ñ Ñтого клиента. -show-offline-tokens=Показать оффлайн токены -show-offline-tokens.tooltip=Предупреждение! Ð’ Ñлучае большого чиÑла активных ÑеÑÑий Ñто будет доÑтаточно Ð½Ð°ÐºÐ»Ð°Ð´Ð½Ð°Ñ Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ. -token-issued=Токен выдан -last-access=ПоÑледний доÑтуп -last-refresh=ПоÑледнее обновление -key-export=ЭкÑпорт ключа -key-import=Импорт ключа -export-saml-key=ЭкÑпорт SAML ключа -import-saml-key=Импорт SAML ключа -realm-certificate-alias=Синоним Ñертификата Realm -realm-certificate-alias.tooltip=Это Ñиноним Ñертификата. Сам Ñертификат Realm также ÑохранÑетÑÑ Ð² архиве. -signing-key=Ключ подпиÑи -saml-signing-key=SAML-ключ подпиÑи. -private-key=Приватный ключ -generate-new-keys=Сгенерировать новые ключи -export=ЭкÑпорт -encryption-key=Ключ ÑˆÐ¸Ñ„Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -saml-encryption-key.tooltip=SAML ключ шифрованиÑ. -service-accounts=Учетные запиÑи ÑервиÑа -service-account.available-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, которые могут быть приÑвоены учетной запиÑи ÑервиÑа. -service-account.assigned-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, назначенные учетной запиÑи ÑервиÑа. -service-account-is-not-enabled-for=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ ÑервиÑа не включена Ð´Ð»Ñ {{client}} -create-protocol-mappers=Создать ÑопоÑтавление протокола -create-protocol-mapper=Создать ÑопоÑтавление протокола -protocol=Протокол -protocol.tooltip=Протокол... -id=ID -mapper.name.tooltip=Ðаименование ÑопоÑтавлениÑ. -mapper.consent-required.tooltip=Ðеобходимо ли ÑоглаÑие Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° предоÑтавление Ñтой информации клиенту? -consent-text=ТекÑÑ‚ ÑоглаÑÐ¾Ð²Ð°Ð½Ð¸Ñ -consent-text.tooltip=ТекÑÑ‚, который будет показан пользователю на Ñтранице ÑоглаÑованиÑ. -mapper-type=Тип ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -mapper-type.tooltip=Тип ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -# realm identity providers -identity-providers=ПоÑтавщики идентификации -table-of-identity-providers=Таблица поÑтавщиков идентификации -add-provider.placeholder=Добавить поÑтавщика... -provider=ПоÑтавщик -gui-order=ОчередноÑÑ‚ÑŒ в GUI -first-broker-login-flow=Сценарий первого входа -post-broker-login-flow=Сценарий поÑле входа -redirect-uri=URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -redirect-uri.tooltip=Этот uri Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸ÑпользуетÑÑ Ð² том Ñлучае, еÑли Ñконфигурирован поÑтавщик идентификации. -alias=Синоним -display-name=Отображаемое название -identity-provider.alias.tooltip=Синоним уникально идентифицирует поÑтавщика идентификации, а также иÑпользуетÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑÑ‚Ñ€Ð¾ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа переадреÑации. -identity-provider.display-name.tooltip=Дружелюбное Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð¹Ð´ÐµÑ€Ð¾Ð² идентификации. -identity-provider.enabled.tooltip=Включает/выключает Ñтого поÑтавщика идентификации. -authenticate-by-default=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ð¾ умолчанию -identity-provider.authenticate-by-default.tooltip=ОтображаетÑÑ, еÑли поÑтавщик должен быть иÑпользован Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ð°ÐºÐ°Ñ†Ð¸Ð¸ по умолчанию даже перед отображением Ñкрана входа. -store-tokens=Хранение токенов -identity-provider.store-tokens.tooltip=Включено/выключено хранение токенов поÑле аутентификации пользователÑ. -stored-tokens-readable=Сохраненные токены доÑтупны на чтение -identity-provider.stored-tokens-readable.tooltip=Включено/выключено чтение новыми пользователÑми любых Ñохраненных токенов. Это назначаетÑÑ Ñ€Ð¾Ð»ÑŒÑŽ broker.read-token. -disableUserInfo=Отключить информацию о пользователе -identity-provider.disableUserInfo.tooltip=Отключить иÑпользование ÑервиÑа информации о пользователе, чтобы получить дополнительную информацию о пользователе? По умолчанию иÑпользуетÑÑ ÑÐµÑ€Ð²Ð¸Ñ OIDC. -userIp=ИÑпользовать параметр userIp -identity-provider.google-userIp.tooltip=УÑтановить 'userIp' параметр запроÑа при вызове ÑервиÑа Google's. Будет иÑпользовать ip Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. Полезно, еÑли Google будет подавлÑÑ‚ÑŒ доÑтуп к ÑервиÑу информации о пользователе. -update-profile-on-first-login=Обновить профиль при первом входе -on=Вкл -on-missing-info=При пропущенной инфо -off=Вык -update-profile-on-first-login.tooltip=Определить уÑловиÑ, при которых пользователи должны обновлÑÑ‚ÑŒ Ñвой профиль во Ð²Ñ€ÐµÐ¼Ñ Ð¿ÐµÑ€Ð²Ð¾Ð³Ð¾ входа. -trust-email=Подтверждение E-mail -trust-email.tooltip=ЕÑли включено, то E-mail, предоÑтавленный Ñтим поÑтавщиком не будет подтвержденным даже еÑли подтверждение включено Ð´Ð»Ñ realm. -link-only=Только ÑвÑзывание учетной запиÑи -link-only.tooltip=ЕÑли уÑтановлено, то пользователи не Ñмогут войти через Ñтого провайдера. Только уÑтанавливает ÑвÑзь к Ñтому провайдеру. ИÑпользуетÑÑ, еÑли вы не хотите разрешать вход через Ñтого провайдера, но хотите Ñ Ñтим провайдером иметь интеграцию. -hide-on-login-page=Скрыть на Ñтранице входа -hide-on-login-page.tooltip=ЕÑли Ñкрыто, то вход Ñ Ñтим провайдером возможен только при Ñвном вызове, например при иÑпользовании параметра 'kc_idp_hint'. -gui-order.tooltip=ЧиÑло, определÑющее порÑдок поÑтавщиков в GUI (например, на Ñтранице входа). -first-broker-login-flow.tooltip=Синоним ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸, который Ñрабатывает поÑле первого входа Ñ Ñтого поÑтавщика идентификации. Термин 'First Login' означает, что еще не ÑущеÑтвует учетной запиÑи Keycloak ÑвÑзанной Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ð¾Ð¹ учетной запиÑью поÑтавщика идентификации. -post-broker-login-flow.tooltip=Синоним ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸, который Ñрабатывает поÑле каждого входа из Ñтого поÑтавщика идентификации. Полезно, еÑли вы ходите получить дополнительную проверку каждого пользователÑ, аутентифицированного в Ñтом поÑтавщике идентификации (например OTP). ОÑтавьте Ñто поле пуÑтым, еÑли не хотите, чтобы Ñрабатывали дополнительные проверки аутенификации поÑле входа Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñ Ñтим поÑтавщиком идентификации. Также обратите внимание, что реализации аутентификатора должны предполагать что пользователь уже уÑтановил ClientSession также как уÑтановил ее в поÑтавщике идентификации. -openid-connect-config=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ OpenID Connect -openid-connect-config.tooltip=OIDC SP и ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð²Ð½ÐµÑˆÐ½Ð¸Ñ… IDP. -authorization-url=URL авторизации -authorization-url.tooltip=Url авторизации. -token-url=URL токена -token-url.tooltip=URL токена. -logout-url=URL выхода -identity-provider.logout-url.tooltip=ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ð½Ð¸Ñ ÑеÑÑии, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÐµÐ¼Ð°Ñ Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð· внешнего IDP. -backchannel-logout=Backchannel Logout -backchannel-logout.tooltip=Поддерживает ли внешний IDP backchannel logout? -user-info-url=URL информации о пользователе -user-info-url.tooltip=Url информации о пользователе. Это поле опционально. -identity-provider.client-id.tooltip=Клиент или идентификатор клиента, зарегиÑтрированного Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика идентификации. -client-secret=Секрет клиента -show-secret=Показать Ñекрет -hide-secret=Скрыть Ñекрет -client-secret.tooltip=Клиент или Ñекрет клиента, зарегиÑтрированный Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика идентификации. -issuer=Эмитент -issuer.tooltip=Идентификатор Ñмитента Ð´Ð»Ñ Ñмитента ответа. ЕÑли не предоÑтавлен, проверка не будет выполнÑÑ‚ÑŒÑÑ. -default-scopes=ОблаÑти по умолчанию -identity-provider.default-scopes.tooltip=ОблаÑти, которые будут поÑланы поÑле запроÑа авторизации. Это может быть ÑпиÑок облаÑтей, разделенных пробелом. По умолчанию 'openid'. -prompt=ПодÑказка -unspecified.option=неопределенный -none.option=нет -consent.option=ÑоглаÑие -login.option=вход -select-account.option=выберите_учетную_запиÑÑŒ -prompt.tooltip=Указывает, запрашивает ли Ñервер авторизации у конечного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿ÐµÑ€ÐµÐ°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸ÑŽ и ÑоглаÑие. -validate-signatures=Проверка подпиÑей -identity-provider.validate-signatures.tooltip=Включить/выключить проверку подпиÑей внешних поÑтавщиков идентификации. -identity-provider.use-jwks-url.tooltip=ЕÑли включено, то публичные ключи поÑтавщиков идентификации будет Ñкачаны Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ JWKS URL. Это дает дополнительную гибкоÑÑ‚ÑŒ, так как новые ключи ÑкачиваютÑÑ ÐºÐ°Ð¶Ð´Ñ‹Ð¹ раз когда поÑтавщик идентификации Ñоздает новую пару. ЕÑли выключено, то будут иÑпользованы публичные ключи (или Ñертификат) из базы данных Keycloak, и в Ñлучае изменений пары на поÑтавщике идентификации вам будет необходимо каждый раз импортировать новые ключи в базу данных Keycloak. -identity-provider.jwks-url.tooltip=URL по которому поÑтавщик идентификации хранит ключи в формате JWK. Ð”Ð»Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ð¹ информации Ñмотрите Ñпецификацию JWK. ЕÑли Ð’Ñ‹ иÑпользуете внешнего поÑтавщика идентификации keycloak, то Ð’Ñ‹ можете иÑпользовать URL наподобие 'http://broker-keycloak:8180/auth/realms/test/protocol/openid-connect/certs' предполагаÑ, что ваш поÑредник keycloak запущен на 'http://broker-keycloak:8180' и его realm 'test' . -validating-public-key=Проверка публичного ключа -identity-provider.validating-public-key.tooltip=Публичный ключ в формате PEM, который должен иÑпользоватьÑÑ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ подпиÑей внешних поÑтавщиков идентификации. -validating-public-key-id=Ð’Ð°Ð»Ð¸Ð´Ð°Ñ†Ð¸Ñ Id публичного ключа -identity-provider.validating-public-key-id.tooltip=Явный ID проверÑемого публичного ключа, выданного выше, еÑли еÑÑ‚ÑŒ key ID. ОÑтавьте Ñто поле пуÑтым еÑли ключ выше должен быть иÑпользован вÑегда, незавиÑимо от key ID указанного внешнего IDP; уÑтановите Ñто еÑли ключ должен быть иÑпользован Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ ÑоответÑÐ²Ñ‚Ð¸Ñ key ID внешних IDP. -import-external-idp-config=Импортировать конфигурацию внешнего IDP -import-external-idp-config.tooltip=ПозволÑет вам загрузить метаданные внешнего IDP из файла конфигурации или Ñкачать его из URL. -import-from-url=Импорт из URL -identity-provider.import-from-url.tooltip=Импорт метаданных из деÑкриптора Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ поÑтавщика идентификации. -import-from-file=Импорт из файла -identity-provider.import-from-file.tooltip=Импорт метаданных Ñо Ñкачанного деÑкриптора Ñ€Ð°Ð·Ð²ÐµÑ€Ñ‚Ñ‹Ð²Ð°Ð½Ð¸Ñ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾Ð³Ð¾ поÑтавщика идентификации. -saml-config=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ SAML -identity-provider.saml-config.tooltip=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ SAML SP и внешних IDP. -single-signon-service-url=ÐÐ´Ñ€ÐµÑ ÑервиÑа единой точки входа -saml.single-signon-service-url.tooltip=Url, который должен быть иÑпользован Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ‹Ñ… запроÑов на аутентификацию (SAML AuthnRequest). -single-logout-service-url=ÐдреÑа ÑервиÑа единого выхода -saml.single-logout-service-url.tooltip=Url, который должен быть иÑпользован Ð´Ð»Ñ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ‹Ñ… запроÑов на выход. -nameid-policy-format=Формат политики NameID -nameid-policy-format.tooltip=ОпределÑет ÑÑылку URI, ÑоответÑтвующую формату идентификатора имени. По умолчанию urn:oasis:names:tc:SAML:2.0:nameid-format:persistent. -saml.principal-type=Тип идентификации -saml.principal-type.tooltip=ОпределÑет, каким образом Keycloak идентифицирует внешних пользователей по SAML-Ñообщению. По умолчанию Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð¸Ñходит по Subject NameID, в качеÑтве альтернативы можно иÑпользовать атрибут-идентификатор. -saml.principal-attribute=Ðтрибут-идентификатор -saml.principal-attribute.tooltip=Ð˜Ð¼Ñ (Name) или "дружеÑтвенное имÑ" (Friendly Name) атрибута, идентифицирующего внешних пользователей. -http-post-binding-response=ПривÑзанный ответ HTTP-POST -http-post-binding-response.tooltip=Указывает, Ñледует ли отвечать на запроÑÑ‹, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ñ€Ð¸Ð²Ñзку HTTP-POST. ЕÑли нет, то будет иÑпользован HTTP-REDIRECT. -http-post-binding-for-authn-request=ПривÑзывание HTTP-POST Ð´Ð»Ñ AuthnRequest -http-post-binding-for-authn-request.tooltip=Указывает, должны ли AuthnRequest быть поÑланы, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ñ€Ð¸Ð²Ñзку HTTP-POST. ЕÑли нет, то будет иÑпользован HTTP-REDIRECT. -http-post-binding-logout=ПривÑзывание HTTP-POST Ð´Ð»Ñ Ð²Ñ‹Ñ…Ð¾Ð´Ð° -http-post-binding-logout.tooltip=Указывает, необходоимо ли отвечать на завпроÑÑ‹, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ Ð¿Ñ€Ð¸Ð²Ñзку HTTP-POST. ЕÑли не задано, то будет иÑпользован HTTP-REDIRECT. -want-authn-requests-signed=Ожидание подпиÑи AuthnRequests -want-authn-requests-signed.tooltip=Указывает, ожидает ли поÑтавщик идентификации подпиÑанных AuthnRequest. -force-authentication=ÐŸÑ€Ð¸Ð½ÑƒÐ´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ -identity-provider.force-authentication.tooltip=Указывает, должен ли поÑтавщик идентификации аутентифицировать ведущего напрÑмую, а не иÑпользовать предыдущий контекÑÑ‚ безопаÑноÑти. -validate-signature=Проверка подпиÑи -saml.validate-signature.tooltip=Включает/выключает проверку подпиÑи ответов от SAML. -validating-x509-certificate=Проверка X509 Ñертификатов -validating-x509-certificate.tooltip=Сертификат в формате PEM, который должен быть иÑпользован Ð´Ð»Ñ Ð¿Ñ€Ð¾Ð²ÐµÑ€ÐºÐ¸ подпиÑи. -saml.import-from-url.tooltip=Импортировать метаданные из удаленного деÑкриптора ÑущноÑтей IDP SAML. -social.client-id.tooltip=Идентификатор клиента, зарегиÑтрированный Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика идентификации. -social.client-secret.tooltip=Секрет клиента, зарегиÑтрированный Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ поÑтавщика идентификации. -social.default-scopes.tooltip=ОблаÑти, которые будут поÑланы при запроÑе авторизации. Смотрите документацию Ð´Ð»Ñ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ‹Ñ… значений, разделителей и значений по умолчанию. -key=Ключ -stackoverflow.key.tooltip=Ключ, полученный при региÑтрации клиента в Stack Overflow. - -# User federation -sync-ldap-roles-to-keycloak=Синхронизировать роли LDAP Ñ Keycloak -sync-keycloak-roles-to-ldap=Синхронизировать роли Keycloak Ñ LDAP -sync-ldap-groups-to-keycloak=Синхронизировать группы LDAP Ñ Keycloak -sync-keycloak-groups-to-ldap=Синхронизировать группы Keycloak Ñ LDAP - -realms=Realms -realm=Realm - -identity-provider-mappers=СопоÑтавление поÑтавщиков идентификации -create-identity-provider-mapper=Создать ÑопоÑтавление поÑтавщика учетных запиÑей -add-identity-provider-mapper=Добавить ÑопоÑтавление поÑтавщика учетных запиÑей -client.description.tooltip=Задает опиÑание клиента. Ðапример 'Мой клиент Ð´Ð»Ñ Ñ‚Ð°Ð±ÐµÐ»Ñ ÑƒÑ‡ÐµÑ‚Ð° времени'. Поддерживает ключи Ð´Ð»Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñ‹Ñ… значений. Ðапример: ${my_client_description} - -expires=ИÑтекает -expiration=ИÑтечение -expiration.tooltip=ОпределÑет, как долго токен будет оÑтаватьÑÑ Ð²Ð°Ð»Ð¸Ð´Ð½Ñ‹Ð¼ -count=Счетчик -count.tooltip=ОпределÑет, как много клиентов может быть Ñоздано Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Ñтого токена -remainingCount=Счетчик оÑтатка -created=Создано -back=Ðазад -initial-access-tokens=Токены первичного доÑтупа -add-initial-access-tokens=Добавить токен первичного доÑтупа -initial-access-token=Токен первичного доÑтупа -initial-access.copyPaste.tooltip=Ðеобходимо Ñкопировать/вÑтавить токен первичного доÑтупа до того, как покинете Ñту Ñтраницу, Ñ‚.к. в дальнейшем получить его будет невозможно -continue=Продолжить -initial-access-token.confirm.title=Скопировать токен первичного доÑтупа -initial-access-token.confirm.text=ПожалуйÑта, Ñкопируйте и вÑтавьте токен первичного доÑтупа до того, как Ñделаете подтверждение, Ñ‚.к. в дальнейшем получить его будет невозможно -no-initial-access-available=Ðет доÑтупных токенов первичного доÑтупа - -client-reg-policies=Политики региÑтрации клиента -client-reg-policy.name.tooltip=Отображаемое наименование политики -anonymous-policies=Политики анонимного доÑтупа -anonymous-policies.tooltip=Эти политики будут иÑпользоватьÑÑ, когда ÑÐµÑ€Ð²Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтрации клиента вызываетÑÑ Ð½ÐµÐ°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ запроÑом. Это означает, что Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ðµ Ñодержит ни токена первичного доÑтупа ни Bearer токена. -auth-policies=Политики аутентифицированного доÑтупа -auth-policies.tooltip=Эти политики будут иÑпользоватьÑÑ, когда ÑÐµÑ€Ð²Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтрации клиента вызываетÑÑ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸Ñ†Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð½Ñ‹Ð¼ запроÑом. Это означает, что Ð·Ð°Ð¿Ñ€Ð¾Ñ Ñодержит токен первичного доÑтупа или Bearer токен. -policy-name=Ðаименование политики -no-client-reg-policies-configured=Ðет политик региÑтрации клиента -trusted-hosts.label=Доверенные хоÑÑ‚Ñ‹ -trusted-hosts.tooltip=СпиÑок хоÑтов, которым доверенно и разрешено адреÑоватьÑÑ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтрации клиентов или/или иÑпользоватьÑÑ Ð² Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ URI клиентов. Ð’Ñ‹ можете иÑпользовать имена хоÑтов или IP адреÑа. ЕÑли Ð’Ñ‹ иÑпользуете звезду If you use star at the beginning (for example '*.example.com' ) then whole domain example.com will be trusted. -host-sending-registration-request-must-match.label=ХоÑÑ‚, поÑылающий Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° региÑтрацию клиента должен Ñовпадать -host-sending-registration-request-must-match.tooltip=ЕÑли включено, то любой Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð½Ð° ÑÐµÑ€Ð²Ð¸Ñ Ñ€ÐµÐ³Ð¸Ñтрации клиентов разрешен только еÑли он передан из доверенного хоÑта или домена. -client-uris-must-match.label=URI клиента должны Ñовпадать -client-uris-must-match.tooltip=ЕÑли включено, то вÑе клиентÑкие URI (URI переадреÑации и прочие) разрешены только еÑли они Ñовпадают Ñ Ð´Ð¾Ð²ÐµÑ€ÐµÐ½Ð½Ñ‹Ð¼ хоÑтом или доменом. -allowed-protocol-mappers.label=Разрешенные ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° -allowed-protocol-mappers.tooltip=Белый ÑпиÑок разрешенных поÑтавщиков ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð°. ЕÑли еÑÑ‚ÑŒ попытка региÑтрации клиента, который Ñодержит какие-либо ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð°, которые не находÑÑ‚ÑÑ Ð² белом ÑпиÑке, то региÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ñ‚Ð°ÐºÐ¸Ñ… клиентов будет отклонена. -consent-required-for-all-mappers.label=ТребуетÑÑ ÑоглаÑие Ð´Ð»Ñ ÑопоÑтавлений -consent-required-for-all-mappers.tooltip=ЕÑли включено, то то вÑе вновь зарегеÑтрированные ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° будут автоматичеÑки иметь включенный consentRequired. Это означает, что пользователь должен подтвердить на Ñкране ÑоглаÑиÑ. Примечание: Экран ÑоглаÑÐ¸Ñ Ð¾Ñ‚Ð¾Ð±Ñ€Ð°Ð¶Ð°ÐµÑ‚ÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли клиент имеет включенный consentRequired. Таким образом, как правило Ñтот переключатель иÑпользуетÑÑ ÑовмеÑтно Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ¾Ð¹ ÑоглаÑий. -allowed-client-templates.label=Разрешить шаблоны клиента -allowed-client-templates.tooltip=Белый ÑпиÑок шаблонов клиента, который может быть иÑпользован при региÑтрации нового клиента. Попытка зарегеÑтрировать клиента Ñ ÐºÐ°ÐºÐ¸Ð¼-либо шаблоном не из белого ÑпиÑка будет отклонена. По умолчанию, белый лиÑÑ‚ пуÑтой, таким образом шаблоны клиентам не доÑтупны. -max-clients.label=МакÑимальное количеÑтво клиентов Ð´Ð»Ñ Realm -max-clients.tooltip=Ðе позволÑет региÑтрировать клиентов больше уÑтановленного предельного значениÑ. - -client-scopes=Шаблоны клиентов -client-scopes.tooltip=Шаблоны клиентов позволÑÑŽÑ‚ вам определить оÑновную конфигурацию, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть общей между неÑколькими клиентами - -groups=Группы - -group.add-selected.tooltip=Роли Realm, которые могут быть назначены на Ñту группу. -group.assigned-roles.tooltip=Роли Realm, ÑопоÑтавленные на группу -group.effective-roles.tooltip=Ð’Ñе ÑопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ realm ролей. Ðекоторые роли здеÑÑŒ могут быть унаÑледованы из ÑоÑтавной роли. -group.available-roles.tooltip=Ðазначаемые роли Ñтого клиента. -group.assigned-roles-client.tooltip=СопоÑтавление ролей Ñтого клиента. -group.effective-roles-client.tooltip=СопоÑтавление ролей Ñтого клиента. Ðекоторые роли здеÑÑŒ могут быть унаÑледованы из ÑопоÑтавленных ÑоÑтавных ролей. - -default-roles=Роли по умолчанию -no-realm-roles-available=Роли realm не доÑтупны - -users=Пользователи -user.add-selected.tooltip=Роли Realm, которые могут быть назначены пользователю. -user.assigned-roles.tooltip=Роли Realm, ÑопоÑтавленные пользователю -user.effective-roles.tooltip=Ð’Ñе ÑоответÑÑ‚Ð²Ð¸Ñ Ñ€Ð¾Ð»ÐµÐ¹ realm. Ðекоторые роли здеÑÑŒ могут быть унаÑледованы из ÑоответÑтвующих ÑоÑтавных ролей. -user.available-roles.tooltip=ДоÑтупные роли Ð´Ð»Ñ Ñтого клиента. -user.assigned-roles-client.tooltip=СоответÑтвие ролей Ð´Ð»Ñ Ñтого клиента. -user.effective-roles-client.tooltip=СоответÑтвие ролей Ð´Ð»Ñ Ñтого клиента. Ðекоторые роли здеÑÑŒ могут быть унаÑледованы из ÑоответÑтвующих ÑоÑтавных ролей. -default.available-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, которые могут быть назначены. -realm-default-roles=Роли Realm по умолчанию -realm-default-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, которые могут быть назначены новым пользователÑм. -default.available-roles-client.tooltip=Роли из Ñтого клиента, которые могут быть назначены по умолчанию. -client-default-roles=Роли клиента по умолчанию -client-default-roles.tooltip=Роли из Ñтого клиента, назначенные как роли по умолчанию. -composite.available-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm ÑвÑзанные Ñ Ñтой ÑоÑтавной ролью. -composite.associated-roles.tooltip=Роли ÑƒÑ€Ð¾Ð²Ð½Ñ Realm, ÑвÑзанные Ñ Ñтой ÑоÑтавной ролью. -composite.available-roles-client.tooltip=Роли из Ñтого клиента, которые могут быть назначены Ñ Ñтой ÑоÑтавной ролью. -composite.associated-roles-client.tooltip=Роли клиента, ÑвÑзанные Ñ Ñтой ÑоÑтавной ролью. -partial-import=ЧаÑтичный импорт -partial-import.tooltip=ЧаÑтичный импорт позволÑет импортировать пользователей, клиентов, и другие реÑурÑÑ‹ из ранее ÑкÑпортированного json-файла. - -file=File -exported-json-file=ЭкÑпортированный json файл -import-from-realm=Импортировать из realm -import-users=Импортировать пользователей -import-groups=Импортировать группы -import-clients=Импортировать клиентов -import-identity-providers=Импортировать поÑтавщиков идентификации -import-realm-roles=Импортировать роли realm -import-client-roles=Импортировать роли клиентов -if-resource-exists=ЕÑли реÑÑƒÑ€Ñ ÑущеÑтвует -fail=Ðеудача -skip=ПропуÑтить -overwrite=ПерезапиÑать -if-resource-exists.tooltip=Указать, что Ñледует делать, еÑли вы пытаетеÑÑŒ импортировать реÑурÑ, который уже ÑущеÑтвует. - -action=ДейÑтвие -role-selector=Селектор ролей -realm-roles.tooltip=Роли Realm, которые могут быть выбраны. - -select-a-role=Выберите роль -select-realm-role=Выберите роль realm -client-roles.tooltip=Роли клиента, которые могут быть выбраны. -select-client-role=Выберите роль клиента - -client-template=Шаблон клиента -client-template.tooltip=Шаблон клиента, определÑющий наÑледование конфигурации Ñтого клиента из -client-saml-endpoint=ÐšÐ¾Ð½ÐµÑ‡Ð½Ð°Ñ Ñ‚Ð¾Ñ‡ÐºÐ° доÑтупа SAML клиента -add-client-scope=Добавить шаблон клиента - -manage=Управление -authentication=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ -user-federation=Ð¤ÐµÐ´ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ -user-storage=Хранилище пользователей -events=Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ -realm-settings=ÐаÑтройки Realm -configure=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ -select-realm=Выберите realm -add=Добавить - -client-scope.name.tooltip=Ðаименование шаблона клиента. Должно быть уникально Ð´Ð»Ñ realm -client-scope.description.tooltip=ОпиÑание шаблона клиента -client-scope.protocol.tooltip=ÐšÐ°ÐºÐ°Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° SSO будет поддержана шаблоном клиента - -add-user-federation-provider=Добавить Ñлужбу федерации пользователей -add-user-storage-provider=Добавить Ñлужбу хранилища пользователей -required-settings=Требуемые наÑтройки -provider-id=ID Ñлужбы -console-display-name=Ðаименование в конÑоли -console-display-name.tooltip=Отображаемое Ð¸Ð¼Ñ Ñлужбы, ÑвÑзанное Ñ ÐºÐ¾Ð½Ñолью админиÑтратора. -priority=Приоритет -priority.tooltip=Приоритет Ñлужбы при поиÑке пользователÑ. Вперед идут более низкие значениÑ. -sync-settings=Синхронизировать наÑтройки -periodic-full-sync=ПериодичеÑÐºÐ°Ñ Ð¿Ð¾Ð»Ð½Ð°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ -periodic-full-sync.tooltip=Должна ли периодичеÑÐºÐ°Ñ Ð¿Ð¾Ð»Ð½Ð°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ñ Ð¿Ð¾Ñтавщиком идентификации в Keycloak включена или нет -full-sync-period=Период полной Ñинхронизации -full-sync-period.tooltip=Период Ð´Ð»Ñ Ð¿Ð¾Ð»Ð½Ð¾Ð¹ Ñинхронизации в Ñекундах -periodic-changed-users-sync=ПериодичеÑÐºÐ°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ð¹ пользователей -periodic-changed-users-sync.tooltip=Должна ли проиÑходить периодичеÑÐºÐ°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… и измененных пользователей поÑтавщика идентификации Ñ Keycloak -changed-users-sync-period=Период Ñинхронизации измененных пользователей -changed-users-sync-period.tooltip=Период Ð´Ð»Ñ Ñинхронизации измененных и новых пользователей в поÑтавщике идентификации в Ñекундах -synchronize-changed-users=Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð½Ñ‹Ñ… пользователей -synchronize-all-users=Ð¡Ð¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñех пользователей -remove-imported-users=Удалить импортированных -unlink-users=ОтвÑзать пользователей -kerberos-realm=Kerberos Realm -kerberos-realm.tooltip=Ðаименование kerberos realm. Ðапример FOO.ORG -server-principal=ОÑновной Ñервер -server-principal.tooltip=Полное Ð¸Ð¼Ñ Ð¾Ñновного Ñервера Ð´Ð»Ñ HTTP ÑервиÑа, Ð²ÐºÐ»ÑŽÑ‡Ð°Ñ Ñерверное и доменное имÑ. Ðапример HTTP/host.foo.org@FOO.ORG -keytab=KeyTab -keytab.tooltip=МеÑтоположение файла KeyTab в Kerberos, Ñодержащего учетные данные оÑновного Ñервера. Ðапример /etc/krb5.keytab -debug=Отладчик -debug.tooltip=Включить/выключить отладочные логи в Ñтандартный вывод Ð´Ð»Ñ Krb5LoginModule. -allow-password-authentication=Разрешить аутентификацию по паролю -allow-password-authentication.tooltip=Включить/выключить возможноÑÑ‚ÑŒ аутентификации по имени/Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð²Ð¾Ð¿Ñ€ÐµÐºÐ¸ базе данных Kerberos -edit-mode=Режим Ñ€ÐµÐ´Ð°ÐºÑ‚Ð¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -edit-mode.tooltip=READ_ONLY означает, что обновление Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ допуÑкаетÑÑ Ð¸ пользователь вÑегда аутентифицируетÑÑ Ñ Ð¿Ð°Ñ€Ð¾Ð»ÐµÐ¼ Kerberos. UNSYNCED означает, что пользователь может изменить Ñвой пароль в базе данных Keycloak и тогда он будет иÑпользован вмеÑто Ð¿Ð°Ñ€Ð¾Ð»Ñ Kerberos -ldap.edit-mode.tooltip=READ_ONLY означает доÑтуп только на чтение из LDAP. WRITABLE означает, что данные будут обратно Ñинхронизированы в LDAP по заÑвке. UNSYNCED означает, что данные Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð±ÑƒÐ´ÑƒÑ‚ импортированы, но не Ñинхронизированы обратно в LDAP. -update-profile-first-login=Обновить профиль при первом входе -update-profile-first-login.tooltip=Обновить профиль при первом входе -sync-registrations=Синхронизировать региÑтрации -ldap.sync-registrations.tooltip=Должны ли вновь Ñозданные пользователи быть Ñозданы в хранилище LDAP? Приоритет определÑет какой из поÑтавщиков будет выбран Ð´Ð»Ñ Ñинхронизации нового пользователÑ. -import-enabled=Импортировать пользователей -ldap.import-enabled.tooltip=ЕÑли включено, пользователи LDAP будут импортированы в базу данных Keycloak и Ñинхронизированы через Ñконфигурированные политики Ñинхронизации. -vendor=ПоÑтавщик -ldap.vendor.tooltip=LDAP поÑтавщик (провайдер) -username-ldap-attribute=Ðтрибут Username в LDAP -ldap-attribute-name-for-username=Ðаименование атрибута LDAP Ð´Ð»Ñ Ð¸Ð¼ÐµÐ½Ð¸ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -username-ldap-attribute.tooltip=Ðаименование LDAP атрибута, которое отображаетÑÑ ÐºÐ°Ðº Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð² Keycloak. Ð”Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва Ñерверов LDAP Ñто может быть 'uid'. Ð”Ð»Ñ Active directory Ñто может быть 'sAMAccountName' или 'cn'. Ðтрибут должен быть заполнен Ð´Ð»Ñ Ð²Ñех LDAP запиÑей пользователей, которые вы хотите импортировать из LDAP в Keycloak. -rdn-ldap-attribute=Ðтрибут RDN в LDAP -ldap-attribute-name-for-user-rdn=Ðаименование атрибута LDAP Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ RDN -rdn-ldap-attribute.tooltip=Ðаименование атрибутов LDAP, которое иÑпользуетÑÑ ÐºÐ°Ðº RDN (верхний атрибут) обычного Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ DN. Обычно оно такое же, как атрибут имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ LDAP, однако он не обÑзателен. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°, Ð´Ð»Ñ Active directory обычно иÑпользуетÑÑ 'cn' как атрибут RDN, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº атрибут имени Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть 'sAMAccountName'. -uuid-ldap-attribute=Ðтрибут UUID в LDAP -ldap-attribute-name-for-uuid=Ðаименование LDAP атрибута Ð´Ð»Ñ UUID -uuid-ldap-attribute.tooltip=Ðаименование LDAP атрибута,которое иÑпользуетÑÑ ÐºÐ°Ðº уникальный идентификатор объектов (UUID) в LDAP. Ð”Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтва LDAP Ñерверов Ñто 'entryUUID' однако некоторые могут отличатьÑÑ. Ð”Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð°, Ð´Ð»Ñ Active directory он должен быть 'objectGUID'. ЕÑли ваш LDAP Ñервер дейÑтвительно не поддерживает понÑтие UUID, вы можете иÑпользовать любой другой атрибут, который должен быть уникальным Ñреди пользователей в дереве LDAP. Ðапример 'uid' или 'entryDN'. -user-object-classes=КлаÑÑÑ‹ объектов Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -ldap-user-object-classes.placeholder=КлаÑÑÑ‹ объектов Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ LDAP (разделенные запÑтой) - -ldap-connection-url=URL ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ LDAP -ldap-users-dn=Пользователи DN LDAP -ldap-bind-dn=СопоÑтавление DN LDAP -ldap-bind-credentials=СопоÑтавление учетных данных LDAP -ldap-filter=LDAP фильтр -ldap.user-object-classes.tooltip=Ð’Ñе Ð·Ð½Ð°Ñ‡ÐµÐ½Ð¸Ñ Ð¸Ð· LDAP objectClass атрибутов Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ в LDAP, разделенные запÑтой. Ðапример: 'inetOrgPerson, organizationalPerson' . Вновь Ñозданные пользователи Keycloak будут запиÑаны в LDAP вмеÑте Ñ Ñтими клаÑÑами объектов, а ÑущеÑтвующие запиÑи пользователей LDAP будут найдены только еÑли они Ñодержат вÑе Ñти клаÑÑÑ‹ объектов. - -connection-url=URL ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ -ldap.connection-url.tooltip=URL ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ Ð²Ð°ÑˆÐ¸Ð¼ Ñервером LDAP -test-connection=ТеÑÑ‚ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ -users-dn=Пользователи DN -ldap.users-dn.tooltip=Полный DN из дерева LDAP где приÑутÑтвуют ваши пользователи. Этот DN ÑвлÑетÑÑ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»ÐµÐ¼ пользователей LDAP. Он может быть, Ð´Ð»Ñ Ð¿Ñ€Ð¸Ð¼ÐµÑ€Ð° 'ou=users,dc=example,dc=com' при уÑловии, что ваш обычный пользователь будет иметь DN похожий на'uid=john,ou=users,dc=example,dc=com' -authentication-type=Тип аутентификации -ldap.authentication-type.tooltip=Тип LDAP аутентификации. Ð¡ÐµÐ¹Ñ‡Ð°Ñ Ð´Ð¾Ñтупны только механизмы 'none' (Ð°Ð½Ð¾Ð½Ð¸Ð¼Ð½Ð°Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ LDAP) или 'simple' (ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ð¾ ÑопоÑтавленным логину и паролю) -bind-dn=СопоÑтавление DN -ldap.bind-dn.tooltip=DN админиÑтратора LDAP, которые будут иÑпользованы Keycloak Ð´Ð»Ñ Ð´Ð¾Ñтупа на Ñервер LDAP -bind-credential=СопоÑтавление учетных данных -ldap.bind-credential.tooltip=Пароль админиÑтратора LDAP -test-authentication=Проверка аутентификации -custom-user-ldap-filter=ПользовательÑкий Фильтр LDAP пользователей -ldap.custom-user-ldap-filter.tooltip=Дополнительный фильтр LDAP Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð°Ñ†Ð¸Ð¸ иÑкомых пользователей. ОÑтавьте поле пуÑтым, еÑли не нуждаетеÑÑŒ в дополнительном фильтре. УбедитеÑÑŒ, что он начинаетÑÑ Ñ '(' и заканчиваетÑÑ ')' -search-scope=ПоиÑк облаÑти -ldap.search-scope.tooltip=Ð”Ð»Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ ÑƒÑ€Ð¾Ð²Ð½Ñ Ð¼Ñ‹ ищем пользователей только в DN, определенных как пользовательÑкие DN. Ð”Ð»Ñ Ð¿Ð¾Ð´Ð´ÐµÑ€ÐµÐ²ÑŒÐµÐ² мы ищем полноÑтью в их поддеревьÑÑ…. Смотрите документацию LDAP Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ€Ð¾Ð±Ð½Ñ‹Ñ… деталей -use-truststore-spi=ИÑпользование доверенных Ñертификатов SPI -ldap.use-truststore-spi.tooltip=ОпределÑет, будет ли Ñоединение Ñ LDAP иÑпользовать хранилище доверенных Ñертификатов SPI вмеÑте Ñ Ñертификатами, Ñконфигурированными в keycloak-server.json. 'Ð’Ñегда' означает, что они будут иÑпользоватьÑÑ Ð²Ñегда. 'Ðикогда' означает, что они никогда не будут иÑпользованы. 'Только Ð´Ð»Ñ ldap`ов' означает, что они будут иÑпользованы вмеÑте Ñ Ð²Ð°ÑˆÐ¸Ð¼Ð¸ ÑоединениÑми к ldap Ñерверам. Обратите внимание, что еÑли keycloak-server.json не Ñконфигурирован, то по умолчанию Java будет иÑпользовать cacerts или Ñертификат, определенный в 'javax.net.ssl.trustStore'. -connection-pooling=Пул Ñоединений -ldap-connection-timeout=Таймаут ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ -ldap.connection-timeout.tooltip=Таймаут ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñ LDAP в миллиÑекундах -ldap-read-timeout=Таймаут Ñ‡Ñ‚ÐµÐ½Ð¸Ñ -ldap.read-timeout.tooltip=Таймаут Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· LDAP в миллиÑекундах. Этот таймаут применÑетÑÑ Ðº операциÑм Ñ‡Ñ‚ÐµÐ½Ð¸Ñ Ð¸Ð· LDAP -ldap.connection-pooling.tooltip=Должен ли Keycloak иÑпользовать пул Ñоединений Ð´Ð»Ñ Ð´Ð¾Ñтупа к LDAP Ñерверу -ldap.pagination.tooltip=Должен ли LDAP Ñервер поддерживать поÑтраничный вывод. -kerberos-integration=Ð˜Ð½Ñ‚ÐµÐ³Ñ€Ð°Ñ†Ð¸Ñ Ñ Kerberos -allow-kerberos-authentication=Разрешить аутентификацию Kerberos -ldap.allow-kerberos-authentication.tooltip=Включить/выключить аутентификацию HTTP пользователей Ñ Ñ‚Ð¾ÐºÐµÐ½Ð°Ð¼Ð¸ SPNEGO/Kerberos. Данные об аутентифицированых пользователÑÑ… будут предуÑмотрены из Ñтого LDAP Ñервера -use-kerberos-for-password-authentication=ИÑпользовать Kerberos Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ по паролю -ldap.use-kerberos-for-password-authentication.tooltip=ИÑпользовать модуль входа Kerberos Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ по логин/пароль Ñ Ñервера Kerberos вмеÑто аутентификации на Ñервере LDAP Ñ Directory Service API -batch-size=Размер пачки -ldap.batch-size.tooltip=КоличеÑтво пользователей LDAP, которые будут импортированы в Keycloak за одну транзакцию. -ldap.periodic-full-sync.tooltip=Должна ли быть включена Ð¿Ð¾Ð»Ð½Ð°Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡ÐµÑÐºÐ°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ LDAP в Keycloak или нет -ldap.periodic-changed-users-sync.tooltip=Должна ли быть включена периодичеÑÐºÐ°Ñ ÑÐ¸Ð½Ñ…Ñ€Ð¾Ð½Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð¾Ð²Ñ‹Ñ… и измененных пользователей LDAP в Keycloak или нет -ldap.changed-users-sync-period.tooltip=Период Ð´Ð»Ñ Ñинхронизации измененных или вновь Ñозданных пользователей LDAP в Ñекундах -user-federation-mappers=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ñ„ÐµÐ´ÐµÑ€Ð°Ñ†Ð¸Ð¹ пользователей -create-user-federation-mapper=Создать отображение федерации пользователей -add-user-federation-mapper=Добавить отображение федерации пользователей -provider-name=Ðаименование поÑтавщика -no-user-federation-providers-configured=Ðе Ñконфигурирован федеративный поÑтавщик идентификации -no-user-storage-providers-configured=Ðе Ñконфигурирован поÑтавщик хранилища учетных запиÑей -add-identity-provider=Добавить поÑтавщика идентификации -add-identity-provider-link=Добавить ÑÑылку на поÑтавщика идентификации -identity-provider=ПоÑтавщик идентификации -identity-provider-user-id=ID Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ñтавщика идентификации -identity-provider-user-id.tooltip=Уникальный ID Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° Ñтороне поÑтавщика идентификации -identity-provider-username=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¿Ð¾Ñтавщика идентификации -identity-provider-username.tooltip=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° Ñтороне поÑтавщика идентификации -pagination=ПоÑтраничный вывод - -browser-flow=Сценарий браузера -browser-flow.tooltip=Выберите Ñценарий, который вы хотите иÑпользовать Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ через браузер. -registration-flow=Сценарий региÑтрации -registration-flow.tooltip=Выберите Ñценарий, который вы хотите иÑпользовать Ð´Ð»Ñ Ñ€ÐµÐ³Ð¸Ñтрации пользователÑ. -direct-grant-flow=Сценарий Direct Grant Flow -direct-grant-flow.tooltip=Выберите Ñценарий, который вы хотите иÑпользоватьÑÑ Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ direct grant. -reset-credentials=СброÑить учетные данные -reset-credentials.tooltip=Выберите Ñценарий, который вы хотите иÑпользовать когда пользователь забыл Ñвои учетные данные. -client-authentication=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° -client-authentication.tooltip=Выберите Ñценарий, который вы хотите иÑпользовать Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ клиентов. -new=Создать -copy=Копировать -add-execution=Добавить иÑполнение -add-flow=Добавить Ñценарий -auth-type=Тип аутентификации -requirement=Ð¢Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ -config=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ -no-executions-available=Ðет доÑтупных выполнений -authentication-flows=Сценарии аутентификации -create-authenticator-config=Создать конфигурацию аутентификатора -authenticator.alias.tooltip=Ðаименование конфигурации -otp-type=Тип одноразового Ð¿Ð°Ñ€Ð¾Ð»Ñ OTP -time-based=ОÑнован на времени -counter-based=ОÑнован на Ñчетчике -otp-type.tooltip=totp ÑвлÑетÑÑ Ð’Ñ€ÐµÐ¼ÐµÐ½Ð½Ñ‹Ð¼ одноразовым паролем. 'hotp' оÑнованный на Ñчетчике одноразовый пароль в котором Ñервер хранит Ñчетчик хеша. -otp-hash-algorithm=Ðлгоритм хеша OTP -otp-hash-algorithm.tooltip=Какой алгоритм Ñ…ÐµÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ быть иÑпользован Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ð¸ OTP. -number-of-digits=КоличеÑтво цифр -otp.number-of-digits.tooltip=Сколько цифр должен иметь OTP? -look-ahead-window=Окно вперед -otp.look-ahead-window.tooltip=Как далеко вперед Ñервер должен выглÑдеть в Ñлучае еÑли Ñгенерированный токен и Ñервер не Ñинхронизированы Ñ Ð²Ñ€ÐµÐ¼ÐµÐ½ÐµÐ¼ или Ñчетчиком -initial-counter=Ðачальное значение Ñчетчика -otp.initial-counter.tooltip=Каким должно быть начальное значение Ñчетчика? -otp-token-period=Период токена OTP -otp-token-period.tooltip=Сколько Ñекунд токен OTP должен быть дейÑтвителен? По умолчанию 30 Ñекунд. -table-of-password-policies=Таблица политик Ð¿Ð°Ñ€Ð¾Ð»Ñ -add-policy.placeholder=Добавить политику... -policy-type=Тип политики -policy-value=Значение политики -admin-events=Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора -admin-events.tooltip=Отображает Ñохраненные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора в Ñтом realm. СобытиÑ, ÑвÑзанные Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑью админиÑтратора, например Ñоздание realm. Чтобы включить Ñохранение Ñобытий, перейдите в конфигурацию. -login-events=Ð¡Ð¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð° -filter=Фильтр -update=Обновить -reset=СброÑить -operation-types=Типы операций -resource-types=Типы реÑурÑов -select-operations.placeholder=Выберите операции... -select-resource-types.placeholder=Выберите типы реÑурÑов... -resource-path=Путь к реÑурÑу -resource-path.tooltip=Фильтр по пути к реÑурÑу. Поддерживает подÑтановку '*' Ð´Ð»Ñ ÑÐ¾Ð²Ð¿Ð°Ð´ÐµÐ½Ð¸Ñ Ð¾Ð´Ð½Ð¾Ð¹ чаÑти пути и '**' Ñовпадение неÑкольких чаÑтей. Ðапример 'realms/*/clients/asbc' выберет клиента Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð¼ asbc в любом realm, в то Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ðº 'realms/master/**' не найдет ничего в master realm. -date-(from)=Дата (С) -date-(to)=Дата (По) -authentication-details=Детали аутентификации -ip-address=IP Ð°Ð´Ñ€ÐµÑ -time=Ð’Ñ€ÐµÐ¼Ñ -operation-type=Тип операции -resource-type=Тип реÑурÑа -auth=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ -representation=ПредÑтавление -register=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -required-action=Требуемое дейÑтвие -default-action=ДейÑтвие по умолчанию -auth.default-action.tooltip=ЕÑли включено, то любому новому пользователю будет будет назначено требуемое дейÑтвие. -no-required-actions-configured=Требуемые дейÑÑ‚Ð²Ð¸Ñ Ð½Ðµ Ñконфигурированы -defaults-to-id=По умолчанию id -flows=Сценарии -bindings=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -required-actions=Требуемые дейÑÑ‚Ð²Ð¸Ñ -password-policy=Политики Ð¿Ð°Ñ€Ð¾Ð»Ñ -otp-policy=Политики OTP -user-groups=Группы пользователей -default-groups=Группы по умолчанию -groups.default-groups.tooltip=УÑтанавливает группы, в которые новые пользователи будут включены автоматичеÑки. -cut=Вырезать -paste=Ð’Ñтавить - -create-group=Создать группу -create-authenticator-execution=Создать иÑполнение аутентификатора -create-form-action-execution=Создать форму дейÑÑ‚Ð²Ð¸Ñ Ð¸ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ -create-top-level-form=Создать верхнеуровневую форму -flow.alias.tooltip=Задает отображаемое Ð¸Ð¼Ñ Ð´Ð»Ñ ÑценариÑ. -top-level-flow-type=Top Level Flow Type -flow.generic=общий -flow.client=клиент -top-level-flow-type.tooltip=Какой Ñто тип ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ Ð²ÐµÑ€Ñ…Ð½ÐµÐ³Ð¾ уровнÑ? Тип "клиент" иÑпользуетÑÑ Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ клиентов (приложений), когда "общий" Ð´Ð»Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»ÐµÐ¹ и вÑего оÑтального -create-execution-flow=Создать Ñценарий иÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ -flow-type=Тип ÑÑ†ÐµÐ½Ð°Ñ€Ð¸Ñ -flow.form.type=форма -flow.generic.type=общий -flow-type.tooltip=Какого типа Ñта форма -form-provider=ПоÑтавщик формы -default-groups.tooltip=Вновь Ñозданные или зарегиÑтрированные пользователи будут автоматичеÑки добавлены к Ñтим группам -select-a-type.placeholder=выберите тип -available-groups=ДоÑтупные группы -available-groups.tooltip=Выберите группу, которые вы хотите добавить по умолчанию. -value=Значение -table-of-group-members=Таблица членов группы -last-name=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ -first-name=Ð˜Ð¼Ñ -email=E-mail -toggle-navigation=Переключить навигацию -manage-account=Управление учетной запиÑью -sign-out=Выход -server-info=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¾ Ñервере -resource-not-found=РеÑÑƒÑ€Ñ Ð½Ðµ найден... -resource-not-found.instruction=Мы не Ñмогли найти реÑурÑ, который вы ищете. ПожалуйÑта, убедитеÑÑŒ, что вы ввели корректный URL. -go-to-the-home-page=Перейти на домашнюю Ñтраницу » -page-not-found=Страница не найдена... -page-not-found.instruction=Мы не Ñмогли найти Ñтраницу, которую вы ищете. ПожалуйÑта, убедитеÑÑŒ, что URL-Ð°Ð´Ñ€ÐµÑ Ð²Ð²ÐµÐ´ÐµÐ½ правильно. -events.tooltip=Отображает Ñохраненные ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð´Ð»Ñ realm. СобытиÑ, ÑвÑзанные Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ð¼Ð¸ запиÑÑми пользователей, например, вход пользователÑ. Ð”Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы включить Ñохранение Ñобытий, перейдите в конфигурацию. -select-event-types.placeholder=Выберите тип Ñобытий... -events-config.tooltip=Отображает опции конфигурации Ð´Ð»Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ ÑÐ¾Ñ…Ñ€Ð°Ð½ÐµÐ½Ð¸Ñ Ñобытий пользователей и админиÑтратора. -select-an-action.placeholder=Выберите дейÑтвие... -event-listeners.tooltip=ÐаÑтройка Ñлушателей, получающих ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð´Ð»Ñ realm. -login.save-events.tooltip=ЕÑли включено, то ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð±ÑƒÐ´ÑƒÑ‚ Ñохранены в базу данных, что Ñделает их доÑтупными админиÑтратору и конÑоли ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ð¾Ð¹ запиÑью. -clear-events.tooltip=УдалÑет вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¸Ð· базы данных. -events.expiration.tooltip=УÑтановить Ñрок иÑÑ‚ÐµÑ‡ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñобытий. ИÑтекшие ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð¿ÐµÑ€Ð¸Ð¾Ð´Ð¸Ñ‡ÐµÑки удалÑÑŽÑ‚ÑÑ Ð¸Ð· базы данных. -admin-events-settings=ÐаÑтройки Ñобытий админиÑтратора -save-events=СохранÑÑ‚ÑŒ ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ -admin.save-events.tooltip=ЕÑли включено, то ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора будет Ñохранены в базу данных, что Ñделает их доÑтупными через конÑоль админиÑтратора. -saved-types.tooltip=Сконфигурировать, какие типы Ñобытий Ñледует ÑохранÑÑ‚ÑŒ. -include-representation=Включить предÑтавление -include-representation.tooltip=Включить JSON предÑтавление Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñов на Ñоздание и обновление. -clear-admin-events.tooltip=Удалить вÑе ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора из базы данных. -server-version=ВерÑÐ¸Ñ Ñервера -server-profile=Профиль Ñервера -server-disabled=Отключенные функции Ñервера -info=Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ -providers=ПоÑтавщики -server-time=Ð’Ñ€ÐµÐ¼Ñ Ð½Ð° Ñервере -server-uptime=Ðптайм Ñервера -memory=ПамÑÑ‚ÑŒ -total-memory=Ð’Ñего памÑти -free-memory=Свободно памÑти -used-memory=ИÑпользовано памÑти -system=СиÑтема -current-working-directory=Ð¢ÐµÐºÑƒÑ‰Ð°Ñ Ñ€Ð°Ð±Ð¾Ñ‡Ð°Ñ Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ -java-version=ВерÑÐ¸Ñ Java -java-vendor=ПоÑтавщик Java -java-runtime=Java Runtime -java-vm=Java VM -java-vm-version=ВерÑÐ¸Ñ Java VM -java-home=Java Home -user-name=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -user-timezone=Таймзона Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -user-locale=Язык Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -system-encoding=СиÑÑ‚ÐµÐ¼Ð½Ð°Ñ ÐºÐ¾Ð´Ð¸Ñ€Ð¾Ð²ÐºÐ° -operating-system=ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ð¾Ð½Ð½Ð°Ñ ÑиÑтема -os-architecture=Ðрхитектура OS -spi=SPI -granted-roles=ПредоÑтавленные роли -granted-protocol-mappers=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð° предоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ -additional-grants=Дополнительные Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ñ -consent-created-date=Создано -consent-last-updated-date=Обновлено -revoke=Отобрать -new-password=Ðовый пароль -password-confirmation=Подтверждение Ð¿Ð°Ñ€Ð¾Ð»Ñ -reset-password=Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ -credentials.temporary.tooltip=ЕÑли включено, пользователю необходимо Ñменить пароль при Ñледующем входе -remove-totp=Удалить OTP -credentials.remove-totp.tooltip=Удалить генератор одноразовых паролей из пользователÑ. -reset-actions=ДейÑÑ‚Ð²Ð¸Ñ ÑброÑа -credentials.reset-actions.tooltip=Ðабор дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð¿Ñ€Ð¸ отправке пользователю пиÑьма Ñ ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñми по ÑброÑу паролÑ. 'Подтвердить E-mail' выÑылает пользователю пиÑьмо Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ E-mail. 'Обновить профиль' требует от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð²ÐµÑти новую перÑональную информацию. 'Обновить пароль' требует от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð²ÐµÑти новый пароль. 'ÐаÑтроить OTP' требует уÑтановить мобильное приложение Ñ Ð³ÐµÐ½ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð¾Ð¼ паролей. -reset-actions-email=E-mail Ñ Ð´ÐµÐ¹ÑтвиÑми Ð´Ð»Ñ ÑброÑа Ð¿Ð°Ñ€Ð¾Ð»Ñ -send-email=ПоÑлать пиÑьмо -credentials.reset-actions-email.tooltip=ПоÑылает пиÑьмо пользователю Ñо вÑтроенной ÑÑылкой. Кликнув на ÑÑылку, пользователю будет разрешено выполнить дейÑÑ‚Ð²Ð¸Ñ Ð´Ð»Ñ ÑброÑа. Они не должны Ð´Ð»Ñ Ñтого входить в ÑиÑтему. Ðапример, уÑтановка дейÑÑ‚Ð²Ð¸Ñ Ð¾Ð±Ð½Ð¾Ð²Ð»ÐµÐ½Ð¸Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ, щелкните по Ñтой кнопке, и пользователь получит возможноÑÑ‚ÑŒ Ñменить Ñвой пароль без входа в ÑиÑтему. -add-user=Добавить Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -created-at=Создан -user-enabled=Пользователь включен -user-enabled.tooltip=Отключенные пользователи не Ñмогут войти. -user-temporarily-locked=Пользователь временно заблокирован -user-temporarily-locked.tooltip=Пользователь может быть заблокирован в Ñлучае многократных неудачных попыток входа. -unlock-user=Разблокировать Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -federation-link=СÑылка федерации -email-verified=Подтверждение E-mail -email-verified.tooltip=Должен ли пользователь подтверждать Ñвой E-mail? -required-user-actions=Требуемые дейÑÑ‚Ð²Ð¸Ñ Ð¾Ñ‚ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -required-user-actions.tooltip=Требует дейÑтвий от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÐºÐ¾Ð³Ð´Ð° он входит. 'Подтвердить E-mail' выÑылает пиÑьмо пользователю Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ ÐµÐ³Ð¾ E-mail. 'Обновить профиль' требует от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð²ÐµÑти новую перÑональную информацию. 'Обновить пароль' требует от Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð²Ð²ÐµÑти новый пароль. 'ÐаÑтроить OTP' требует уÑтановить мобильное приложение генерации паролей. -locale=Язык -select-one.placeholder=Выберите... -impersonate=ИмперÑонировать -impersonate-user=ИмперÑонировать -impersonate-user.tooltip=Войти как Ñтот пользователь. ЕÑли пользователь в том же Ñамом realm что и вы, то ваша Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ ÑеÑÑÐ¸Ñ Ð±ÑƒÐ´ÐµÑ‚ разлогинена перед тем как вы войдете как Ñтот пользователь. -identity-provider-alias=Синоним поÑтавщика идентификации -provider-user-id=ID Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ñƒ поÑтавщика -provider-username=Username у поÑтавщика -no-identity-provider-links-available=СÑылки поÑтавщика идентификации не доÑтупны -group-membership=ЧленÑтво в группах -leave=Покинуть -group-membership.tooltip=Пользователь ÑвлÑетÑÑ Ñ‡Ð»ÐµÐ½Ð¾Ð¼ группы. Выберите в ÑпиÑке группу и нажмите кнопку Покинуть, чтобы покинуть группу. -membership.available-groups.tooltip=Группы, к которым пользователь может приÑоединитьÑÑ. Выберите группу и нажмите кнопку приÑоединитьÑÑ. -table-of-realm-users=Таблица пользователей Realm -view-all-users=Показать вÑех пользователей -unlock-users=Разблокировать пользователей -no-users-available=Пользователи не доÑтупны -users.instruction=ПожалуйÑта, заполните Ñтроку поиÑка, или нажмите поÑмотреть вÑех пользователей -consents=СоглаÑÐ¸Ñ -started=Ðачато -logout-all-sessions=Выйти из вÑех ÑеÑÑий -logout=Выход -new-name=Ðовое Ð¸Ð¼Ñ -ok=Ок -attributes=Ðтрибуты -role-mappings=СопоÑтавление ролей -members=Члены -details=Детали -identity-provider-links=СÑылки поÑтавщика идентификации -register-required-action=ЗарегиÑтрировать требуемое дейÑтвие -gender=Пол -address=ÐÐ´Ñ€ÐµÑ -phone=Телефон -profile-url=URL Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ -picture-url=URL Ð¸Ð·Ð¾Ð±Ñ€Ð°Ð¶ÐµÐ½Ð¸Ñ -website=ВебÑайт -import-keys-and-cert=Импорт ключей и Ñертификатов -import-keys-and-cert.tooltip=Загрузить пару ключей и Ñертификат клиента. -upload-keys=Загрузить ключи -download-keys-and-cert=Скачать ключи и Ñертификат -no-value-assigned.placeholder=Значение не назначено -remove=Удалить -no-group-members=Ð’ группе нет членов -temporary=Временный -join=ПриÑоединитьÑÑ -event-type=Тип ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ -events-config=ÐšÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ñ Ñобытий -event-listeners=Слушатели Ñобытий -login-events-settings=ÐаÑтройки Ñобытий по входу -clear-events=ОчиÑтить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ -saved-types=СохранÑемые типы Ñобытий -clear-admin-events=ОчиÑтить ÑÐ¾Ð±Ñ‹Ñ‚Ð¸Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора -clear-changes=ОчиÑтить Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ -error=Ошибка - -# Authz -# Authz Common -authz-authorization=ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ -authz-owner=Владелец -authz-uri=URI -authz-scopes=ОблаÑти -authz-resource=РеÑÑƒÑ€Ñ -authz-resource-type=Тип реÑурÑа -authz-resources=РеÑурÑÑ‹ -authz-scope=ОблаÑÑ‚ÑŒ -authz-authz-scopes=ОблаÑти авторизации -authz-policies=Политики -authz-permissions=Ð Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -authz-evaluate=Оценка -authz-icon-uri=Иконка URI -authz-icon-uri.tooltip=URI, указывающий на иконку. -authz-select-scope=Выберите облаÑÑ‚ÑŒ -authz-select-resource=Выберите реÑÑƒÑ€Ñ -authz-associated-policies=Ðазначенные политики -authz-any-resource=Любой реÑÑƒÑ€Ñ -authz-any-scope=Ð›ÑŽÐ±Ð°Ñ Ð¾Ð±Ð»Ð°ÑÑ‚ÑŒ -authz-any-role=Ð›ÑŽÐ±Ð°Ñ Ñ€Ð¾Ð»ÑŒ -authz-policy-evaluation=Оценки политики -authz-select-client=Выберите клиента -authz-select-user=Выберите Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -authz-entitlements=Права -authz-no-resources=Ðет реÑурÑов -authz-result=Результат -authz-authorization-services-enabled=ÐÐ²Ñ‚Ð¾Ñ€Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²ÐºÐ»ÑŽÑ‡ÐµÐ½Ð° -authz-authorization-services-enabled.tooltip=Включить/Выключить тонко-наÑтраиваемую поддержку авторизации Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° -authz-required=ТребуетÑÑ -authz-show-details=Показать детали -authz-hide-details=Скрыть детали -authz-associated-permissions=Ðазначенные Ñ€Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -authz-no-permission-associated=Ð Ð°Ð·Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð½Ðµ назначены - -# Authz Settings -authz-import-config.tooltip=Импорт JSON файла, Ñодержащего авторизационные наÑтройки Ð´Ð»Ñ Ñтого Ñервера реÑурÑов. - -authz-policy-enforcement-mode=Режим Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸Ðº -authz-policy-enforcement-mode.tooltip=Режим Ð¿Ñ€Ð¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸Ðº диктует, каким образом политики применÑÑŽÑ‚ÑÑ Ð¿Ñ€Ð¸ оценке запроÑов на авторизацию. «ОбÑзывающаÑ» означает, что запроÑÑ‹ запрещены по умолчанию, даже еÑли нет никакой политики, ÑвÑзанной Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ реÑурÑом. "РазрешающаÑ" означает, что запроÑÑ‹ разрешены даже еÑли не ÑущеÑтвует политика, ÑвÑÐ·Ð°Ð½Ð½Ð°Ñ Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ реÑурÑом. 'Отключено' полноÑтью отключает оценку политики и позволÑет получить доÑтуп к любому реÑурÑу. -authz-policy-enforcement-mode-enforcing=ОбÑÐ·Ñ‹Ð²Ð°ÑŽÑ‰Ð°Ñ -authz-policy-enforcement-mode-permissive=Ð Ð°Ð·Ñ€ÐµÑˆÐ°ÑŽÑ‰Ð°Ñ -authz-policy-enforcement-mode-disabled=Отключено - -authz-remote-resource-management=Удаленное управление реÑурÑами -authz-remote-resource-management.tooltip=Должны ли реÑурÑÑ‹ управлÑÑ‚ÑŒÑÑ ÑƒÐ´Ð°Ð»ÐµÐ½Ð½Ð¾ Ñервером реÑурÑов? ЕÑли нет, то реÑурÑÑ‹ могут управлÑÑ‚ÑŒÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ через конÑоль админиÑтратора. - -authz-export-settings=ЭкÑпортировать наÑтройки -authz-export-settings.tooltip=ЭкÑпортировать и Ñкачать вÑе авторизационные наÑтройки Ð´Ð»Ñ Ñтого Ñервера реÑурÑов. - -# Authz Resource List -authz-no-resources-available=Ðет доÑтупных реÑурÑов. -authz-no-scopes-assigned=Ðет назначенных облаÑтей. -authz-no-type-defined=Ðет заданных типов. -authz-no-uri-defined=Ðет заданных URI. -authz-no-permission-assigned=ÐŸÐ¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ñ Ð½Ðµ назначены. -authz-no-policy-assigned=Политики не заданы. -authz-create-permission=Создать Ð¿Ð¾Ð»Ð½Ð¾Ð¼Ð¾Ñ‡Ð¸Ñ - -# Authz Resource Detail -authz-add-resource=Добавить реÑÑƒÑ€Ñ -authz-resource-name.tooltip=Уникальное Ð¸Ð¼Ñ Ð´Ð»Ñ Ñтого реÑурÑа. Ð˜Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть иÑпользовано Ð´Ð»Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ идентификации реÑурÑа, иÑпользуетÑÑ Ð¿Ñ€Ð¸ запроÑах конкретных реÑурÑов. -authz-resource-owner.tooltip=Владелец Ñтого реÑурÑа. -authz-resource-type.tooltip=Тип Ñтого реÑурÑа. Может быть иÑпользовано Ð´Ð»Ñ Ð³Ñ€ÑƒÐ¿Ð¿Ð¸Ñ€Ð¾Ð²ÐºÐ¸ различных ÑкземплÑров реÑурÑа Ñ Ñ‚ÐµÐ¼ же типом. -authz-resource-uri.tooltip=URI, который также может быть иÑпользован Ð´Ð»Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ идентификации Ñтого реÑурÑа. -authz-resource-scopes.tooltip=ОблаÑти, аÑÑоциироваанные Ñ Ñтим реÑурÑом. - -# Authz Scope List -authz-add-scope=Добавить облаÑÑ‚ÑŒ -authz-no-scopes-available=Ðет доÑтупных облаÑтей. - -# Authz Scope Detail -authz-scope-name.tooltip=Уникальное Ð¸Ð¼Ñ Ð´Ð»Ñ Ð¾Ð±Ð»Ð°Ñти. Ð˜Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ‚ быть иÑпользовано Ð´Ð»Ñ ÑƒÐ½Ð¸ÐºÐ°Ð»ÑŒÐ½Ð¾Ð¹ идентификации облаÑти, иÑпользуетÑÑ Ð¿Ñ€Ð¸ запроÑах конкретных облаÑтей. - -# Authz Policy List -authz-all-types=Ð’Ñе типы -authz-create-policy=Создать политику -authz-no-policies-available=Ðет доÑтупных политик. - -# Authz Policy Detail -authz-policy-name.tooltip=Ðазвание Ñтой политики. -authz-policy-description.tooltip=ОпиÑание Ñтой политики. -authz-policy-logic=Логика -authz-policy-logic-positive=ÐŸÐ¾Ð·Ð¸Ñ‚Ð¸Ð²Ð½Ð°Ñ -authz-policy-logic-negative=ÐÐµÐ³Ð¸Ñ‚Ð¸Ð²Ð½Ð°Ñ -authz-policy-logic.tooltip=Логика диктует, как политика должна применÑÑ‚ÑŒÑÑ. ЕÑли 'ПозитивнаÑ', результирующий Ñффект (разрешение или запрещение) полученный в ходе оценки Ñтой политики будет иÑпользован Ð´Ð»Ñ Ð²Ñ‹Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ. ЕÑли 'ÐегативнаÑ', результирующий Ñффект будет отрицательным, другими Ñловами, разрешение ÑтановитÑÑ Ð·Ð°Ð¿Ñ€ÐµÑ‰ÐµÐ½Ð¸ÐµÐ¼ и наоборот. -authz-policy-apply-policy=Применить политику -authz-policy-apply-policy.tooltip=ОпределÑем вÑе политики, которые должны быть применены к облаÑÑ‚Ñм, определенным Ñтой политикой или разрешением. -authz-policy-decision-strategy=Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ -authz-policy-decision-strategy.tooltip=Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ñ€ÐµÑˆÐµÐ½Ð¸Ñ Ð´Ð¸ÐºÑ‚ÑƒÐµÑ‚ как политики ÑвÑзаны Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼Ð¸ разрешениÑми и как формируетÑÑ Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð¾Ðµ решение. 'УтвердительнаÑ' означает, что, по крайней мере, одна политика должна дать положительную оценку Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы окончательное решение также было положительным. 'ЕдиноглаÑнаÑ' означает что вÑе политики должны дать положительную оценку Ð´Ð»Ñ Ñ‚Ð¾Ð³Ð¾, чтобы Ð¾ÐºÐ¾Ð½Ñ‡Ð°Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° также была положительной. 'КонÑенÑуÑнаÑ' означает, что количеÑтво положительных решений должно превышать количеÑтво отрицательных решений. ЕÑли количеÑтво положительных и отрицательных решений Ñовпадает, окончательное решение будет отрицательным. -authz-policy-decision-strategy-affirmative=Ð£Ñ‚Ð²ÐµÑ€Ð´Ð¸Ñ‚ÐµÐ»ÑŒÐ½Ð°Ñ -authz-policy-decision-strategy-unanimous=ЕдиноглаÑÐ½Ð°Ñ -authz-policy-decision-strategy-consensus=КонÑенÑуÑÐ½Ð°Ñ -authz-select-a-policy=Выберите политику - -# Authz Role Policy Detail -authz-add-role-policy=Добавить роль политики -authz-no-roles-assigned=Ðет назначенных ролей. -authz-policy-role-realm-roles.tooltip=Задайте роли *realm*, допущенные Ñтой политикой. -authz-policy-role-clients.tooltip=Выберите клиента в порÑдке, необходимом Ð´Ð»Ñ Ñ„Ð¸Ð»ÑŒÑ‚Ñ€Ð° клиентÑких ролей, которые могут быть применены к Ñтой политике. -authz-policy-role-client-roles.tooltip=Задайте роли клиента, допущенные Ñтой политикой. - -# Authz User Policy Detail -authz-add-user-policy=Добавить политику пользователей -authz-no-users-assigned=Ðет назначенных пользователей. -authz-policy-user-users.tooltip=Задайте, какие пользователи допущены Ñтой политикой. - -# Authz Client Policy Detail -authz-add-client-policy=Добавить политику клиента -authz-no-clients-assigned=Ðет назначенных клиентов. -authz-policy-client-clients.tooltip=Задайте, какие клиенты допущеный Ñтой политикой. - -# Authz Time Policy Detail -authz-add-time-policy=Добавить политики времени -authz-policy-time-not-before.tooltip=Определете времÑ, до наÑÑ‚ÑƒÐ¿Ð»ÐµÐ½Ð¸Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ð¾Ð³Ð¾ политика ÐЕ ДОЛЖÐРбыть разрешена. Разрешено только еÑли текущее времÑ/дата больше или равны заданному значению. -authz-policy-time-not-on-after=Ðе поÑле -authz-policy-time-not-on-after.tooltip=ОпределÑет времÑ, поÑле которого политика ÐЕ ДОЛЖÐРбыть разрешена. Разрешено только еÑли текущее времÑ/дата менеьше или равны заданному значению. -authz-policy-time-day-month=День меÑÑца -authz-policy-time-day-month.tooltip=ОпределÑет день меÑÑца, в который политика ДОЛЖÐРбыть разрешена. Ð’Ñ‹ также можете определить диапазон, заполнив второе поле. Ð’ Ñтом Ñлучае разрешение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли текущий день меÑÑца равен или находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ заданными значениÑми. -authz-policy-time-month=МеÑÑц -authz-policy-time-month.tooltip=ОпределÑет меÑÑц, в который политика ДОЛЖÐРбыть разрешена. Ð’Ñ‹ также можете определить диапазон, заполнив второе поле. Ð’ Ñтом Ñлучае разрешение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли текущий меÑÑц равен или находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ заданными значениÑми. -authz-policy-time-year=Год -authz-policy-time-year.tooltip=ОпределÑет год, в который политика ДОЛЖÐРбыть разрешена. Ð’Ñ‹ также можете определить диапазон, заполнив второе поле. Ð’ Ñтом Ñлучае разрешение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли текущий год равен или находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ заданными значениÑми. -authz-policy-time-hour=Ð§Ð°Ñ -authz-policy-time-hour.tooltip=ОпределÑет чаÑ, в который политика ДОЛЖÐРбыть разрешена. Ð’Ñ‹ также можете определить диапазон, заполнив второе поле. Ð’ Ñтом Ñлучае разрешение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли текущий Ñ‡Ð°Ñ Ñ€Ð°Ð²ÐµÐ½ или находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ заданными значениÑми. -authz-policy-time-minute=Минута -authz-policy-time-minute.tooltip=ОпределÑет минуту, в которую политика ДОЛЖÐРбыть разрешена. Ð’Ñ‹ также можете определить диапазон, заполнив второе поле. Ð’ Ñтом Ñлучае разрешение выдаетÑÑ Ñ‚Ð¾Ð»ÑŒÐºÐ¾ еÑли Ñ‚ÐµÐºÑƒÑ‰Ð°Ñ Ð¼Ð¸Ð½ÑƒÑ‚Ð° равна или находитÑÑ Ð¼ÐµÐ¶Ð´Ñƒ заданными значениÑми. - -# Authz JS Policy Detail -authz-add-js-policy=Добавить политику JavaScript -authz-policy-js-code=Код -authz-policy-js-code.tooltip=Код JavaScript, предоÑтавлÑющий уÑÐ»Ð¾Ð²Ð¸Ñ Ð´Ð»Ñ Ñтой политики. - - -# Authz Aggregated Policy Detail -authz-aggregated=Ð¡Ð¾Ð²Ð¾ÐºÑƒÐ¿Ð½Ð°Ñ -authz-add-aggregated-policy=Добавить Ñовокупную политику - -# Authz Permission List -authz-no-permissions-available=Ðет доÑтупных разрешений. - -# Authz Permission Detail -authz-permission-name.tooltip=Ð˜Ð¼Ñ Ñтого разрешениÑ. -authz-permission-description.tooltip=ОпиÑание Ñтого разрешениÑ. - -# Authz Resource Permission Detail -authz-add-resource-permission=Добавить разрешение реÑурÑа -authz-permission-resource-apply-to-resource-type=Применить к типу реÑурÑа -authz-permission-resource-apply-to-resource-type.tooltip=ОпределÑет, будет ли Ñто разрешение будет применено ко вÑем реÑурÑам Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ типом. Ð’ Ñтом Ñлучае Ñто разрешение будет вычиÑлÑÑ‚ÑŒÑÑ Ð´Ð»Ñ Ð²Ñех ÑкземплÑров Ñ Ð·Ð°Ð´Ð°Ð½Ð½Ñ‹Ð¼ типом реÑурÑа. -authz-permission-resource-resource.tooltip=ОпределÑет, что Ñто разрешение должно быть применено к конкретному ÑкземплÑру реÑурÑов. -authz-permission-resource-type.tooltip=ОпределÑет, что Ñто разрешение должно быть применено ко вÑем ÑкземплÑрам реÑурÑов заданного типа. - -# Authz Scope Permission Detail -authz-add-scope-permission=Добавить разрешение облаÑти -authz-permission-scope-resource.tooltip=Ограничевает облаÑти, Ñ ÐºÐ¾Ñ‚Ð¾Ñ€Ñ‹Ð¼Ð¸ ÑвÑзан выбранный реÑурÑ. ЕÑли не выбрано, вÑе облаÑти будут доÑтупны. -authz-permission-scope-scope.tooltip=ОпределÑет, что разрешение должно быть применено к одной или неÑкольким облаÑÑ‚Ñм. - -# Authz Evaluation -authz-evaluation-identity-information=ИдентичноÑÑ‚ÑŒ данных -authz-evaluation-identity-information.tooltip=ДоÑтупные облаÑти Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ идентичных данных будут иÑпользованы при оценке политик. -authz-evaluation-client.tooltip=Выберите клиента, оÑущеÑтвлÑющего авторизационный запроÑ. ЕÑли не задан, авторизационные запроÑÑ‹ будут оÑнованы на том клиенте, в котором вы находитеÑÑŒ. -authz-evaluation-user.tooltip=Выберите пользователÑ, идентификационные данные которого будут иÑпользованы Ð´Ð»Ñ Ð·Ð°Ð¿Ñ€Ð¾Ñа разрешений Ñ Ñервера. -authz-evaluation-role.tooltip=Выберите роли, которые вы хотите ÑвÑзать Ñ Ð²Ñ‹Ð±Ñ€Ð°Ð½Ð½Ñ‹Ð¼ пользователем. -authz-evaluation-new=ÐÐ¾Ð²Ð°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° -authz-evaluation-re-evaluate=Переоценить -authz-evaluation-previous=ÐŸÑ€ÐµÐ´Ñ‹Ð´ÑƒÑ‰Ð°Ñ Ð¾Ñ†ÐµÐ½ÐºÐ° -authz-evaluation-contextual-info=КонтекÑÑ‚Ð½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ -authz-evaluation-contextual-info.tooltip=ДоÑтуные опции Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ контекÑтной информации, ÐºÐ¾Ñ‚Ð¾Ñ€Ð°Ñ Ð±ÑƒÐ´ÐµÑ‚ иÑпользована при оценке политик. -authz-evaluation-contextual-attributes=КонтекÑтные аттрибуты -authz-evaluation-contextual-attributes.tooltip=Любой аттрибут определÑетÑÑ Ð·Ð°Ð¿ÑƒÑ‰ÐµÐ½Ð½Ñ‹Ð¼ окружением или контекÑтом иÑполнениÑ. -authz-evaluation-permissions.tooltip=ДоÑтупные опции Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ð¸Ð³ÑƒÑ€Ð°Ñ†Ð¸Ð¸ разрешений, к которым будет применÑÑ‚ÑŒÑÑ Ð¿Ð¾Ð»Ð¸Ñ‚Ð¸ÐºÐ°. -authz-evaluation-evaluate=Оценка -authz-evaluation-any-resource-with-scopes=Любой реÑÑƒÑ€Ñ Ñ Ð¾Ð±Ð»Ð°Ñтью(Ñми) -authz-evaluation-no-result=Ðе удалоÑÑŒ получить какой-либо результат Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ запроÑа авторизации. Проверьте, ÑвÑзаны ли назначенные реÑурÑ(Ñ‹) или облаÑÑ‚ÑŒ(и) Ñ ÐºÐ°ÐºÐ¾Ð¹-либо политикой. -authz-evaluation-no-policies-resource=Ðе найдено политик Ð´Ð»Ñ Ñтого реÑурÑа. -authz-evaluation-result.tooltip=Общий результат Ð´Ð»Ñ Ñтого запроÑа разрешений. -authz-evaluation-scopes.tooltip=СпиÑок разрешенных облаÑтей. -authz-evaluation-policies.tooltip=Подробнее о том, какие политики были раÑчитаны и их разрешениÑ. -authz-evaluation-authorization-data=Ответ -authz-evaluation-authorization-data.tooltip=ПредоÑтавлÑет токен, Ñодержащий авторизационные данные как результат обработки авторизационного запроÑа. Это предÑтавление преимущеÑтвенно отображает как Keycloak отвечает на запроÑÑ‹ клиентов об авторизации. Проверьте Ñ‚Ñ€ÐµÐ±Ð¾Ð²Ð°Ð½Ð¸Ñ 'авторизации' Ð´Ð»Ñ Ñ‚ÐµÑ… разрешений, которые были выданы на оÑнове текущего авторизационного запроÑа. -authz-show-authorization-data=Показать авторизационные данные - - -keys=Ключи -all=Ð’Ñе -status=Ð¡Ñ‚Ð°Ñ‚ÑƒÑ -keystore=Хранилище ключей -keystores=Хранилища ключей -add-keystore=Добавить хранилище ключей -add-keystore.placeholder=Добавить хранилище ключей... -view=Смотреть -active=Ðктивные - -Sunday=ВоÑкреÑенье -Monday=Понедельник -Tuesday=Вторник -Wednesday=Среда -Thursday=Четверг -Friday=ПÑтница -Saturday=Суббота - -user-storage-cache-policy=ÐаÑтройки кÑÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -userStorage.cachePolicy=Политики кÑÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ -userStorage.cachePolicy.option.DEFAULT=DEFAULT -userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -userStorage.cachePolicy.tooltip=Политики кÑÑˆÐ¸Ñ€Ð¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð»Ñ Ñтого поÑтавщика хранениÑ. 'DEFAULT' предÑтавлÑет наÑтройки по-умолчанию Ð´Ð»Ñ Ð³Ð»Ð¾Ð±Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ пользовательÑкого кÑша. 'EVICT_DAILY' Ð²Ñ€ÐµÐ¼Ñ ÐºÐ°Ð¶Ð´Ð¾Ð³Ð¾ днÑ, поÑле которого пользовательÑкий кÑш инвалидируетÑÑ. 'EVICT_WEEKLY' день и Ð²Ñ€ÐµÐ¼Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ поÑле которого пользовательÑкий кÑш инвалидируетÑÑ. 'MAX-LIFESPAN' Ð²Ñ€ÐµÐ¼Ñ Ð² миллиÑекундах, в течение которого будет ÑущеÑтвовать жизненный цикл запиÑи в кÑше. -userStorage.cachePolicy.evictionDay=День иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ -userStorage.cachePolicy.evictionDay.tooltip=День недели в который запиÑÑŒ Ñтанет недейÑтвительной и будет иÑключена из кÑша. -userStorage.cachePolicy.evictionHour=Ð§Ð°Ñ Ð¸ÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ -userStorage.cachePolicy.evictionHour.tooltip=Ð§Ð°Ñ Ð´Ð½Ñ, в который запиÑÑŒ Ñтанет недейÑтвительной. -userStorage.cachePolicy.evictionMinute=Минута иÑÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ -userStorage.cachePolicy.evictionMinute.tooltip=Минута днÑ, в которую запиÑÑŒ Ñтанет недейÑтвительной. -userStorage.cachePolicy.maxLifespan=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ -userStorage.cachePolicy.maxLifespan.tooltip=МакÑимальное Ð²Ñ€ÐµÐ¼Ñ Ð¶Ð¸Ð·Ð½Ð¸ запиÑи пользовательÑткого кÑша в Ñекундах. -user-origin-link=ИÑточник хранилища -user-origin.tooltip=UserStorageProvider из которого был загружен пользователь -user-link.tooltip=UserStorageProvider из которого был импортирован локально Ñохраненный пользователь. - -disable=Отключено -disableable-credential-types=Отключаемые типы -credentials.disableable.tooltip=СпиÑок типов учетных данных, которые Ð’Ñ‹ можете отключить -disable-credential-types=Отключить типы учетных данных -credentials.disable.tooltip=Ðажмите кнопку Ð´Ð»Ñ Ð¾Ñ‚ÐºÐ»ÑŽÑ‡ÐµÐ½Ð¸Ñ Ñ‚Ð¸Ð¿Ð¾Ð² учетных данных -credential-types=Типы учетных данных -manage-user-password=Управление паролÑми -disable-credentials=Отключить учетные данные -credential-reset-actions=Ð¡Ð±Ñ€Ð¾Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… данных -ldap-mappers=СопоÑÑ‚Ð°Ð²Ð»ÐµÐ½Ð¸Ñ LDAP -create-ldap-mapper=Создать LDAP ÑопоÑтавление diff --git a/deps/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties b/deps/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties deleted file mode 100644 index 23f81cfea..000000000 --- a/deps/keycloak/themes/base/admin/messages/admin-messages_zh_CN.properties +++ /dev/null @@ -1,1228 +0,0 @@ -# encoding: utf-8 -consoleTitle=Keycloak管ç†ç•Œé¢ - -# Common messages -enabled=å¼€å¯ -name=å称 -displayName=显示å称 -displayNameHtml=HTML 显示å称 -save=ä¿å­˜ -cancel=å–消 -onText=å¼€ -offText=å…³ -client=客户端 -clients=客户端 -clear=清除 -selectOne=选择一个... - -true=是 -false=å¦ - -endpoints=æœåŠ¡è·¯å¾„ - -# Realm settings -realm-detail.enabled.tooltip=åªæœ‰å½“域å¯ç”¨æ—¶ï¼Œç”¨æˆ·å’Œå®¢æˆ·ç¨‹åºæ‰èƒ½è®¿é—® -realm-detail.oidc-endpoints.tooltip=显示openID connectæœåŠ¡è·¯å¾„çš„é…ç½® -registrationAllowed=用户注册 -registrationAllowed.tooltip=å¼€å¯/关闭注册页é¢ï¼Œæ³¨å†Œé¡µé¢çš„é“¾æŽ¥ä¹Ÿä¼šæ˜¾ç¤ºåœ¨ç™»å½•é¡µé¢ -registrationEmailAsUsername=Email当åšç”¨æˆ·å -registrationEmailAsUsername.tooltip=当开å¯æ—¶æ³¨å†Œè¡¨å•çš„用户å域会被éšè—而且Email会作为新用户的用户å -editUsernameAllowed=编辑用户å -editUsernameAllowed.tooltip=如果开å¯ï¼Œç”¨æˆ·å域是å¯ä»¥ç¼–辑的。å¦åˆ™ç”¨æˆ·å域是åªè¯»çš„。 -resetPasswordAllowed=å¿˜è®°å¯†ç  -resetPasswordAllowed.tooltip=当用户忘记他们的密ç æ—¶ï¼Œåœ¨ç™»å½•ç•Œé¢æ˜¾ç¤ºä¸€ä¸ªè¿žæŽ¥ç»™ç”¨æˆ·ç‚¹å‡»ã€‚ -rememberMe=è®°ä½æˆ‘ -rememberMe.tooltip=显示一个选择框æ¥è®©ç”¨æˆ·åœ¨é‡å¯æµè§ˆå™¨æ—¶ä»ç„¶å¤„于登录状æ€ï¼Œç›´åˆ°ä¼šè¯è¿‡æœŸã€‚ -verifyEmail=验è¯email -verifyEmail.tooltip=è¦æ±‚用户在首次登录时验è¯ä»–们的邮箱。 -sslRequired=需è¦SSL -sslRequired.option.all=所有请求 -sslRequired.option.external=外部请求 -sslRequired.option.none=æ—  -sslRequired.tooltip=是å¦éœ€è¦HTTPS?‘无’代表对于任何客户端IP地å€éƒ½ä¸éœ€è¦HTTPS,‘外部请求’代表localhostå’Œç§æœ‰ip地å€å¯ä»¥ä¸é€šè¿‡https访问,‘所有请求’代表所有IP地å€éƒ½éœ€è¦é€šè¿‡https访问。 -publicKey=公有秘钥 -privateKey=ç§æœ‰ç§˜é’¥ -gen-new-keys=生æˆæ–°ç§˜é’¥ -certificate=è¯ä¹¦ -host=主机 -smtp-host=SMTP 主机 -port=端å£å· -smtp-port=SMTP 端å£å·ï¼ˆé»˜è®¤25) -from=æ¥è‡ª -sender-email-addr=邮件å‘é€è€…emailåœ°å€ -enable-ssl=å¯ç”¨ SSL -enable-start-tls=å¯ç”¨ StartTLS -enable-auth=å¯ç”¨è®¤è¯ -username=用户å -login-username=登录用户å -password=å¯†ç  -login-password=ç™»å½•å¯†ç  -login-theme=登录主题 -login-theme.tooltip=为登录ã€æŽˆæƒã€æ³¨å†Œã€å¿˜è®°å¯†ç ç•Œé¢é€‰æ‹©é¡µé¢ä¸»é¢˜ -account-theme=账户主题 -account-theme.tooltip=为用户管ç†ç•Œé¢é€‰æ‹©ä¸»é¢˜ -admin-console-theme=管ç†å‘˜æŽ§åˆ¶å°ä¸»é¢˜ -select-theme-admin-console=为管ç†å‘˜æŽ§åˆ¶å°é€‰æ‹©ä¸»é¢˜ -email-theme=邮件主题 -select-theme-email=为æœåŠ¡å™¨å‘é€çš„邮件选择主题 -i18n-enabled=å¯ç”¨å›½é™…化 -supported-locales=支æŒçš„语言 -supported-locales.placeholder=输入一个locale并按回车 -default-locale=默认语言 -#localization-upload-file=Upload localization JSON file -#missing-locale=Missing locale. -#missing-file=Missing file. Please select a file to upload. -#localization-file.upload.success=The localization data has been loaded from file. -#localization-file.upload.error=The file can not be uploaded. Please verify the file. -#localization-show=Show realm specific localizations -#no-localizations-configured=No realm specific localizations configured -#add-localization-text=Add localization text -#locale.create.success=The Locale has been created. -#localization-text.create.success=The localization text has been created. -#localization-text.update.success=The localization text has been updated. -#localization-text.remove.success=The localization text has been deleted. -realm-cache-clear=域缓存 -realm-cache-clear.tooltip=从域缓存中清ç†æ‰€æœ‰æ¡ç›®ï¼ˆè¿™ä¼šæ¸…ç†æ‰€æœ‰åŸŸçš„æ¡ç›®ï¼‰ -user-cache-clear=用户缓存 -user-cache-clear.tooltip=清ç†ç”¨æˆ·ç¼“存的所有æ¡ç›®ï¼ˆè¿™ä¼šæ¸…ç†æ‰€æœ‰åŸŸä¸­çš„æ¡ç›®ï¼‰ -revoke-refresh-token=收回 Refresh Token -revoke-refresh-token.tooltip=å¦‚æžœå¼€å¯ refresh tokensåªèƒ½ä½¿ç”¨ä¸€æ¬¡ï¼Œå¦åˆ™refresh tokenä¸ä¼šè¢«æ”¶å›žå¹¶ä¸”å¯ä»¥ä½¿ç”¨å¤šæ¬¡ -sso-session-idle=SSO会è¯ç©ºé—²æ—¶é—´ -seconds=秒 -minutes=分 -hours=å°æ—¶ -days=天 -sso-session-max=SSO会è¯æœ€é•¿æ—¶é—´ -sso-session-idle.tooltip=设置会è¯åœ¨è¿‡æœŸä¹‹å‰å¯ä»¥ç©ºé—²çš„时间长度,当会è¯è¿‡æœŸæ—¶ Token å’Œæµè§ˆå™¨ä¼šè¯éƒ½ä¼šè¢«è®¾ç½®ä¸ºæ— æ•ˆã€‚ -sso-session-max.tooltip=会è¯çš„最大时间长度,当会è¯è¿‡æœŸæ—¶ Token å’Œæµè§ˆå™¨ä¼šè¯éƒ½ä¼šè¢«è®¾ç½®ä¸ºæ— æ•ˆã€‚ -offline-session-idle=离线会è¯çš„空闲时间 -offline-session-idle.tooltip=离线会è¯å…许的空闲时间。你需è¦ä½¿ç”¨ç¦»çº¿Token在这段时间内至少刷新一次å¦åˆ™ä¼šè¯å°±ä¼šè¿‡æœŸ -access-token-lifespan=Access Token 有效期 -access-token-lifespan.tooltip=access token最长有效时间,这个值推èè¦æ¯”SSO超时è¦çŸ­ä¸€äº›ã€‚ -access-token-lifespan-for-implicit-flow =éšå¼æµçš„访问令牌生命周期 -access-token-lifespan-for-implicit-flow.tooltip =在OpenID连接éšå¼æµæœŸé—´å‘出的访问令牌到期之å‰çš„最长时间。建议该值å°äºŽSSO超时。没有å¯èƒ½åœ¨éšå¼æµæœŸé—´åˆ·æ–°ä»¤ç‰Œï¼Œè¿™å°±æ˜¯ä¸ºä»€ä¹ˆæœ‰å•ç‹¬çš„超时ä¸åŒäºŽâ€œè®¿é—®ä»¤ç‰Œå¯¿å‘½â€ã€‚ -client-login-timeout =客户端登录超时 -client-login-timeout.tooltip =客户端必须完æˆè®¿é—®ä»¤ç‰Œå议的最大时间。这通常是1分钟。 -login-timeout =登录超时 -login-timeout.tooltip =用户必须完æˆç™»å½•çš„最长时间。这建议比较长。 30分钟以上。 -login-action-timeout =登录æ“作超时 -login-action-timeout.tooltip =用户必须完æˆç™»å½•ç›¸å…³æ“作(如更新密ç æˆ–é…ç½®totp)的最长时间。这建议比较长。 5分钟以上。 -headers =标题 -brute-force-detection=强力检测 -x-frame-options = X-Frame-Options -x-frame-options-tooltip =默认值阻止通过éžæºiframe包å«é¡µé¢ï¼ˆå•å‡»æ ‡ç­¾äº†è§£æ›´å¤šä¿¡æ¯ï¼‰ -content-sec-policy = Content-Security-Policy -content-sec-policy-tooltip =默认值阻止通过éžæºiframe包å«ç½‘页(点击标签了解更多信æ¯ï¼‰ -content-type-options = X-Content-Type-Options -content-type-options-tooltip =默认值阻止Internet Explorerå’ŒGoogle Chrome从已声明的内容类型中嗅探å“应(点击标签了解更多信æ¯ï¼‰ -max-login-failures =最大登录失败 -max-login-failures.tooltip =触å‘等待之å‰çš„失败次数。 -wait-increment =ç­‰å¾…å¢žé‡ -wait-increment.tooltip =当满足故障阈值时,用户应该é”定多长时间? -quick-login-check-millis =快速登录检查Milli秒 -quick-login-check-millis.tooltip =如果故障åŒæ—¶å‘生太快,则é”定用户。 -min-quick-login-wait =最å°å¿«é€Ÿç™»å½•ç­‰å¾… -min-quick-login-wait.tooltip =快速登录失败åŽç­‰å¾…多长时间。 -max-wait = Max Wait -max-wait.tooltip =用户将被é”定的最长时间。 -failure-reset-time =æ•…éšœå¤ä½æ—¶é—´ -failure-reset-time.tooltip =何时将故障计数å¤ä½ï¼Ÿ -realm-tab-login=登录 -realm-tab-keys=秘钥 -realm-tab-email=Email -realm-tab-themes=主题 -#realm-tab-localization=Localization -realm-tab-cache=缓存 -realm-tab-tokens=Tokens -realm-tab-client-registration=客户端注册 -realm-tab-security-defenses=安全防护 -realm-tab-general=通用 -add-realm=添加域 - -#Session settings -realm-sessions=åŸŸä¼šè¯ -revocation=回收 -logout-all=登出所有 -active-sessions=æ´»è·ƒçš„ä¼šè¯ -sessions=ä¼šè¯ -not-before=ä¸æ—©äºŽ -not-before.tooltip=回收早于日期授予的token -set-to-now=设置到现在 -push=æŽ¨é€ -push.tooltip=对于æ¯ä¸ªæ‹¥æœ‰ç®¡ç†å‘˜æƒé™çš„用户,通知他们新的回收策略 -#Protocol Mapper -usermodel.prop.label=属性 -usermodel.prop.tooltip=UserModel 接å£ä¸­å±žæ€§æ–¹æ³•çš„åå­—. 例如, 'email' 会引用UserModel.getEmail() 方法. -usermodel.attr.label=用户属性 -usermodel.attr.tooltip=在UserModel.attribute映射中定义的存储的用户属性å。 -userSession.modelNote.label=用户会è¯æ ‡è®° -userSession.modelNote.tooltip=用户会è¯æ ‡è®°åœ¨ UserSessionModel.note映射中的属性å。 -multivalued.label=多值的 -multivalued.tooltip=表示此值是å¦æ”¯æŒå¤šå€¼.如果为真,所有值会设置为已知。如果为å‡ï¼Œåªæœ‰ç¬¬ä¸€ä¸ªå€¼æ˜¯å·²çŸ¥ã€‚ -selectRole.label=选择角色 -selectRole.tooltip=在左边文本框输入角色或点击这个按钮æµè§ˆå¹¶é€‰æ‹©æ‚¨æƒ³è¦çš„角色。 -tokenClaimName.label=Token申请å -tokenClaimName.tooltip=token中加入的申请者å. è¿™å¯ä»¥æ˜¯ä¸ªå®Œæ•´çš„分级信æ¯ä¾‹å¦‚ 'address.street'. è¿™ç§æƒ…况下,会生æˆä¸€ä¸ªå¤æ‚çš„jsonå›žå¤ -jsonType.label=申请 JSON 的类型 -jsonType.tooltip=用æ¥å±•çŽ°ç”³è¯·çš„JSON 类型 long, int, boolean, å’Œ String 是有效值 -includeInIdToken.label =添加到ID令牌 -includeInIdToken.tooltip =是å¦åº”将声明添加到ID令牌? -includeInAccessToken.label =添加到访问令牌 -includeInAccessToken.tooltip =是å¦åº”该将声明添加到访问令牌? -includeInUserInfo.label =添加到userinfo -includeInUserInfo.tooltip =是å¦åº”该将声明添加到userinfo? -usermodel.clientRoleMapping.clientId.label =客户端ID -usermodel.clientRoleMapping.clientId.tooltip =角色映射的客户端ID -usermodel.clientRoleMapping.rolePrefix.label =客户端角色å‰ç¼€ -usermodel.clientRoleMapping.rolePrefix.tooltip =æ¯ä¸ªå®¢æˆ·ç«¯è§’色的å‰ç¼€ï¼ˆå¯é€‰ï¼‰ã€‚ -usermodel.realmRoleMapping.rolePrefix.label = Realm角色å‰ç¼€ -usermodel.realmRoleMapping.rolePrefix.tooltip =æ¯ä¸ªé¢†åŸŸè§’色的å‰ç¼€ï¼ˆå¯é€‰ï¼‰ã€‚ -sectorIdentifierUri.label =扇区标识符URI -sectorIdentifierUri.tooltip =使用æˆå¯¹å­å€¼å’Œæ”¯æŒçš„æ供程åºåŠ¨æ€å®¢æˆ·ç«¯æ³¨å†Œåº”使用sector_identifier_uriå‚数。它为一组在共åŒç®¡ç†æŽ§åˆ¶ä¸‹çš„网站æ供了一ç§ç‹¬ç«‹äºŽå„个域å的具有一致的æˆå¯¹å­å€¼çš„方法。它还为客户端更改redirect_uri域而ä¸å¿…é‡æ–°æ³¨å†Œå…¶æ‰€æœ‰ç”¨æˆ·æ供了一ç§æ–¹æ³•ã€‚ -pairwiseSubAlgorithmSalt.label = Salt -pairwiseSubAlgorithmSalt.tooltip =计算æˆå¯¹ä¸»ä½“标识符时使用的ç›ã€‚如果留空,将产生ç›ã€‚ - - - -# client details -clients.tooltip=客户端是域中å—信任的应用程åºå’Œweb应用. 这些程åºå¯ä»¥å‘起登录.您也å¯ä»¥å®šä¹‰åº”用的角色。 -search.placeholder=æœç´¢... -create=创建 -import=导入 -client-id=客户端 ID -base-url=æ ¹ URL -actions=æ“作 -not-defined=未定义 -edit=编辑 -delete=删除 -no-results=无记录 -no-clients-available=æ— å¯ç”¨å®¢æˆ· -add-client=添加客户端 -select-file=选择文件 -view-details=查看详情 -clear-import=清除导入 -client-id.tooltip =指定在URI和令牌中引用的ID。例如“my-clientâ€ã€‚对于SAML,这也是authn请求的预期å‘放者值 -client.name.tooltip =指定客户端的显示å称。例如“我的客户端â€ã€‚支æŒæœ¬åœ°åŒ–值的键。例如\\uff1a$ {my_client} -client.enabled.tooltip =ç¦ç”¨å®¢æˆ·ç«¯æ— æ³•å¯åŠ¨ç™»å½•æˆ–获å–访问令牌。 -consent-required =åŒæ„必需 -consent-required.tooltip =如果已å¯ç”¨çš„用户必须åŒæ„客户端访问。 -client-protocol =客户端åè®® -client-protocol.tooltip ='OpenID connect'å…许客户端基于授æƒæœåŠ¡å™¨æ‰§è¡Œçš„认è¯æ¥éªŒè¯æœ€ç»ˆç”¨æˆ·çš„身份。'SAML'å¯ç”¨åŸºäºŽWeb的身份验è¯å’ŒæŽˆæƒæ–¹æ¡ˆï¼ŒåŒ…括跨域å•ç‚¹ç™»å½•ï¼ˆSSO),并使用包å«æ–­è¨€çš„安全令牌传递信æ¯ã€‚ -access-type =访问类型 -access-type.tooltip ='机密'客户端需è¦ä¸€ä¸ªç§˜å¯†å¯åŠ¨ç™»å½•å议。 “公共â€å®¢æˆ·ä¸éœ€è¦ä¸€ä¸ªç§˜å¯†ã€‚ “仅承载â€å®¢æˆ·ç«¯æ˜¯ä»Žä¸å¯åŠ¨ç™»å½•çš„WebæœåŠ¡ã€‚ -standard-flow-enabled =å¯ç”¨æ ‡å‡†æµç¨‹ -standard-flow-enabled.tooltip =这使标准的基于OpenID Connecté‡å®šå‘的身份验è¯ä¸ŽæŽˆæƒç ã€‚æ ¹æ®OpenID Connect或OAuth2规范,这将支æŒæ­¤å®¢æˆ·ç«¯çš„“授æƒä»£ç æµâ€ã€‚ -implicit-flow-enabled =å¯ç”¨éšå¼æµ -implicit-flow-enabled.tooltip =è¿™å¯ç”¨å¯¹æ— æŽˆæƒä»£ç çš„基于OpenID Connecté‡å®šå‘的身份验è¯çš„支æŒã€‚æ ¹æ®OpenID Connect或OAuth2规范,这将支æŒæ­¤å®¢æˆ·ç«¯çš„“éšå¼æµâ€ã€‚ -direct-access-grants-enabled =å¯ç”¨ç›´æŽ¥è®¿é—®æŽˆæƒ -direct-access-grants-enabled.tooltip =è¿™å¯ç”¨å¯¹ç›´æŽ¥è®¿é—®æŽˆæƒçš„支æŒï¼Œè¿™æ„味ç€å®¢æˆ·ç«¯å¯ä»¥è®¿é—®ç”¨æˆ·çš„用户å/密ç ï¼Œå¹¶ç›´æŽ¥ä¸ŽKeycloakæœåŠ¡å™¨äº¤æ¢è®¿é—®ä»¤ç‰Œã€‚在OAuth2规范方é¢ï¼Œè¿™å…许支æŒæ­¤å®¢æˆ·ç«¯çš„“资æºæ‰€æœ‰è€…密ç å‡­æ®æŽˆæƒâ€ã€‚ -service-accounts-enabled =å¯ç”¨æœåŠ¡å¸æˆ· -service-accounts-enabled.tooltip =å…许您å‘Keycloak验è¯æ­¤å®¢æˆ·ç«¯å¹¶æ£€ç´¢ä¸“用于此客户端的访问令牌。在OAuth2规范方é¢ï¼Œè¿™å°†æ”¯æŒæ­¤å®¢æˆ·ç«¯çš„“客户端凭æ®æŽˆäºˆâ€ã€‚ -include-authnstatement = Include AuthnStatement -include-authnstatement.tooltip =是å¦åº”该在登录å“应中包å«æŒ‡å®šæ–¹æ³•å’Œæ—¶é—´æˆ³çš„语å¥ï¼Ÿ -sign-documents =签署文件 -sign-documents.tooltip = SAML文档是å¦åº”该由领域签å? -sign-documents-redirect-enable-key-info-ext =优化REDIRECTç­¾å密钥查找 -sign-documents-redirect-enable-key-info-ext.tooltip =在由Keycloak适é…器ä¿æŠ¤çš„SPçš„REDIRECT绑定中签åSAML文档时,如果签å密钥的ID包å«åœ¨å…ƒç´ ä¸­çš„SAMLå议消æ¯ä¸­ï¼Ÿè¿™å°†ä¼˜åŒ–ç­¾å的验è¯ï¼Œå› ä¸ºéªŒè¯æ–¹ä½¿ç”¨å•ä¸ªå¯†é’¥ï¼Œè€Œä¸æ˜¯å°è¯•æ¯ä¸ªå·²çŸ¥å¯†é’¥è¿›è¡ŒéªŒè¯ã€‚ -sign-assertions =符å·æ–­è¨€ -sign-assertions.tooltip = SAML文档中的断言是å¦åº”该签å?如果文档已签署,则ä¸éœ€è¦æ­¤è®¾ç½®ã€‚ -signature-algorithm =ç­¾å算法 -signature-algorithm.tooltip =用于签署文档的签å算法。 -canonicalization-method =规范化方法 -canonicalization-method.tooltip = XMLç­¾å的规范化方法。 -encrypt-assertions =加密断言 -encrypt-assertions.tooltip =是å¦åº”使用AES通过客户端的公钥对SAML断言进行加密? -client-signature-required =需è¦å®¢æˆ·ç«¯ç­¾å -client-signature-required.tooltip =客户端是å¦ç­¾ç½²äº†saml请求和å“应?他们应该验è¯å—? -force-post-binding =强制POST绑定 -force-post-binding.tooltip =始终对POSTå“应使用POST绑定。 -front-channel-logout =å‰é€šé“注销 -front-channel-logout.tooltip =当为true时,注销需è¦æµè§ˆå™¨é‡å®šå‘到客户端。当为false时,æœåŠ¡å™¨å¯¹æ³¨é”€æ‰§è¡ŒåŽå°è°ƒç”¨ã€‚ -force-name-id-format =强制å称IDæ ¼å¼ -force-name-id-format.tooltip =忽略请求的NameID主题格å¼å¹¶ä½¿ç”¨ç®¡ç†æŽ§åˆ¶å°é…置的。 -name-id-format =å称IDæ ¼å¼ -name-id-format.tooltip =è¦ç”¨äºŽä¸»é¢˜çš„å称IDæ ¼å¼ã€‚ -root-url =æ ¹URL -root-url.tooltip =附加到相对URLçš„æ ¹URL -valid-redirect-uris =有效的é‡å®šå‘URI -valid-redirect-uris.tooltip =æµè§ˆå™¨å¯ä»¥åœ¨æˆåŠŸç™»å½•æˆ–注销åŽé‡å®šå‘到的有效URI模å¼ã€‚å…许使用简å•é€šé…符,å³â€œhttp://example.com/*â€ã€‚也å¯ä»¥æŒ‡å®šç›¸å¯¹è·¯å¾„,å³/ my / relative / path / *。相对路径是相对于客户端根URL的,如果没有指定,则使用authæœåŠ¡å™¨æ ¹URL。对于SAML,如果您ä¾èµ–嵌入登录请求的使用者æœåŠ¡URL,则必须设置有效的URI模å¼ã€‚ -base-url.tooltip =当authæœåŠ¡å™¨éœ€è¦é‡å®šå‘或链接回客户端时使用的默认URL。 -admin-url =管ç†å‘˜ç½‘å€ -admin-url.tooltip =客户端管ç†ç•Œé¢çš„URL。如果客户端支æŒé€‚é…器REST API,请设置此选项。此REST APIå…许authæœåŠ¡å™¨æŽ¨é€åŠé”€ç­–略和其他管ç†ä»»åŠ¡ã€‚通常将此设置为客户端的基本URL。 -master-saml-processing-url =主SAML处ç†URL -master-saml-processing-url.tooltip =如果é…置,此URL将用于æ¯æ¬¡ç»‘定到SP的断言使用者和å•ä¸€æ³¨é”€æœåŠ¡ã€‚è¿™å¯ä»¥å¯¹ç»†ç²’度SAML端点é…置中的æ¯ä¸ªç»‘定和æœåŠ¡å•ç‹¬è¿›è¡Œè¦†ç›–。 -idp-sso-url-ref = IDPå‘èµ·çš„SSO URLå称 -idp-sso-url-ref.tooltip =当您想è¦è¿›è¡ŒIDPå‘èµ·çš„SSO时,引用客户端的URL片段å称。留下此空将ç¦ç”¨IDPå¯åŠ¨çš„SSO。您将从æµè§ˆå™¨å¼•ç”¨çš„URL为:{server-root} / realms / {realm} / protocol / saml / clients / {client-url-name} -idp-sso-relay-state = IDPå‘èµ·çš„SSOä¸­ç»§çŠ¶æ€ -idp-sso-relay-state.tooltip =当您想è¦æ‰§è¡ŒIDPå‘èµ·çš„SSO时,è¦ä½¿ç”¨SAML请求å‘é€çš„中继状æ€ã€‚ -web-origins = Webèµ·æº -web-origins.tooltip =å…许的CORS起点。è¦å…许有效é‡å®šå‘URI的所有æ¥æºï¼Œè¯·æ·»åŠ â€œ+â€ã€‚å…许所有起点添加'*'。 -fine-oidc-endpoint-conf = Fine Grain OpenID连接é…ç½® -fine-oidc-endpoint-conf.tooltip =展开此部分以é…置与OpenID Connectå议相关的此客户端的高级设置 -user-info-signed-response-alg =用户信æ¯ç­¾åçš„å“应算法 -user-info-signed-response-alg.tooltip =用于签å的用户信æ¯ç«¯ç‚¹å“应的JWA算法。如果设置为“unsignedâ€ï¼Œåˆ™ç”¨æˆ·ä¿¡æ¯å“应将ä¸ä¼šè¢«ç­¾å,并将以application / jsonæ ¼å¼è¿”回。 -request-object-signature-alg =请求对象签å算法 -request-object-signature-alg.tooltip = JWA算法,客户端在å‘é€ç”±'request'或'request_uri'å‚数指定的OIDC请求对象时需è¦ä½¿ç”¨ã€‚如果设置为“anyâ€ï¼Œåˆ™Request对象å¯ä»¥ç”±ä»»ä½•ç®—法(包括“noneâ€ï¼‰ç­¾å。 -fine-saml-endpoint-conf =细粒度SAML端点é…ç½® -fine-saml-endpoint-conf.tooltip =展开此部分以é…ç½®Assertion Consumerå’Œå•ä¸€æ³¨é”€æœåŠ¡çš„确切URL。 -assertion-consumer-post-binding-url =断言使用者æœåŠ¡POST绑定URL -assertion-consumer-post-binding-url.tooltip = SAML POST绑定客户端断言使用者æœåŠ¡çš„URL(登录å“应)。如果您没有此绑定的URL,则å¯ä»¥å°†æ­¤å­—段留空。 -assertion-consumer-redirect-binding-url =断言使用者æœåŠ¡é‡å®šå‘绑定URL -assertion-consumer-redirect-binding-url.tooltip = SAMLé‡å®šå‘客户端断言使用者æœåŠ¡çš„绑定URL(登录å“应)。如果您没有此绑定的URL,则å¯ä»¥å°†æ­¤å­—段留空。 -logout-service-post-binding-url =注销æœåŠ¡POST绑定URL -logout-service-post-binding-url.tooltip = SAML POST绑定客户端å•ä¸€æ³¨é”€æœåŠ¡çš„URL。如果使用ä¸åŒçš„绑定,则å¯ä»¥å°†æ­¤ç•™ç©º -logout-service-redir-binding-url =注销æœåŠ¡é‡å®šå‘绑定URL -logout-service-redir-binding-url.tooltip = SAMLé‡å®šå‘客户端å•ä¸€æ³¨é”€æœåŠ¡çš„绑定URL。如果使用ä¸åŒçš„绑定,则å¯ä»¥å°†æ­¤ç•™ç©ºã€‚ - -#client import -import-client =导入客户端 -format-option =æ ¼å¼é€‰é¡¹ -select-format =é€‰æ‹©æ ¼å¼ -import-file =导入文件 - -#client tabs -settings =设置 -credentials =å‡­æ® -roles =角色 -mappers = Mappers -mappers.tooltip =å议映射器对令牌和文档执行转æ¢ã€‚他们å¯ä»¥åšä¸€äº›äº‹æƒ…,例如将用户数æ®æ˜ å°„到å议声明中,或者åªæ˜¯è½¬æ¢å®¢æˆ·ç«¯å’Œèº«ä»½éªŒè¯æœåŠ¡å™¨ä¹‹é—´çš„任何请求。 -scope =作用域 -scope.tooltip =作用域映射å…许您é™åˆ¶å“ªäº›ç”¨æˆ·è§’色映射包å«åœ¨å®¢æˆ·ç«¯è¯·æ±‚的访问令牌中。 -sessions.tooltip =查看此客户端的活动会è¯ã€‚å…许您查看哪些用户处于活动状æ€ï¼Œä»¥åŠä»–们何时登录。 -offline-access =离线访问 -offline-access.tooltip =查看此客户端的离线会è¯ã€‚å…许您查看哪些用户检索离线令牌以åŠä½•æ—¶æ£€ç´¢ç¦»çº¿ä»¤ç‰Œã€‚è¦æ’¤é”€å®¢æˆ·ç«¯çš„所有令牌,请转到撤销选项å¡ï¼Œå¹¶å°†ä¸æ—©äºŽå€¼è®¾ç½®åˆ°çŽ°åœ¨ã€‚ -clustering =èšç±» -installation =安装 -installation.tooltip =用于生æˆå„ç§å®¢æˆ·ç«¯é€‚é…器é…置格å¼çš„帮助程åºå®žç”¨ç¨‹åºï¼Œæ‚¨å¯ä»¥ä¸‹è½½æˆ–剪切和粘贴以é…置您的客户端。 -service-account-roles =æœåŠ¡å¸æˆ·è§’色 -service-account-roles.tooltip =å…许您为专用于此客户端的æœåŠ¡å¸æˆ·éªŒè¯è§’色映射。 - -# client credentials -client-authenticator =客户端认è¯å™¨ -client-authenticator.tooltip =客户端身份验è¯å™¨ç”¨äºŽè®¤è¯æ­¤å®¢æˆ·ç«¯å¯¹KeycloakæœåŠ¡å™¨ -certificate.tooltip =客户端å‘出的验è¯JWT的客户端è¯ä¹¦ï¼Œç”±å®¢æˆ·ç«¯ç§é’¥ä»Žæ‚¨çš„密钥库签å。 -publicKey.tooltip =由客户端å‘出并由客户端ç§é’¥ç­¾ç½²çš„validate JWT的公钥。 -no-client-certificate-configured =未é…置客户端è¯ä¹¦ -gen-new-keys-and-cert =生æˆæ–°å¯†é’¥å’Œè¯ä¹¦ -import-certificate =导入è¯ä¹¦ -gen-client-private-key =生æˆå®¢æˆ·ç«¯ç§é’¥ -generate-private-key =生æˆç§é’¥ -kid =å­©å­ -kid.tooltip =æ¥è‡ªå¯¼å…¥çš„JWKS的客户端公钥的KID(密钥ID)。 -use-jwks-url =使用JWKS URL -use-jwks-url.tooltip =如果开关打开,那么将从给定的JWKS URL下载客户端公钥。这å…许很大的çµæ´»æ€§ï¼Œå› ä¸ºå½“客户端生æˆæ–°çš„密钥对时,新密钥将总是é‡æ–°ä¸‹è½½ã€‚如果交æ¢æœºå…³é—­ï¼Œåˆ™ä½¿ç”¨æ¥è‡ªKeycloak DB的公钥(或è¯ä¹¦ï¼‰ï¼Œå› æ­¤å½“客户端密钥更改时,您总是需è¦å°†æ–°å¯†é’¥ï¼ˆæˆ–è¯ä¹¦ï¼‰å¯¼å…¥åˆ°Keycloakæ•°æ®åº“。 -jwks-url = JWKS URL -jwks-url.tooltip =存储JWKæ ¼å¼çš„客户端密钥的URL。有关更多详细信æ¯ï¼Œè¯·å‚阅JWK规范。如果您使用带有“jwtâ€å‡­æ®çš„keycloak客户端适é…器,那么您å¯ä»¥ä½¿ç”¨å¸¦æœ‰'/ k_jwks'åŽç¼€çš„应用程åºçš„URL。例如“http://www.myhost.com/myapp/k_jwksâ€ã€‚ -archive-format =å½’æ¡£æ ¼å¼ -archive-format.tooltip = Java密钥库或PKCS12归档格å¼ã€‚ -key-alias =密钥别å -key-alias.tooltip =存档您的ç§é’¥å’Œè¯ä¹¦çš„别å。 -key-password =å¯†é’¥å¯†ç  -key-password.tooltip =访问存档中ç§é’¥çš„å¯†ç  -store-password =å­˜å‚¨å¯†ç  -store-password.tooltip =è®¿é—®å½’æ¡£æœ¬èº«çš„å¯†ç  -generate-and-download =生æˆå’Œä¸‹è½½ -client-certificate-import =客户端è¯ä¹¦å¯¼å…¥ -import-client-certificate =导入客户端è¯ä¹¦ -jwt-import.key-alias.tooltip =您的è¯ä¹¦çš„归档别å。 -secret =秘密 -regenerate-secret =é‡ç”Ÿç§˜å¯† -registrationAccessToken =注册访问令牌 -registrationAccessToken.regenerate =é‡æ–°ç”Ÿæˆæ³¨å†Œè®¿é—®ä»¤ç‰Œ -registrationAccessToken.tooltip =注册访问令牌为客户端æ供对客户端注册æœåŠ¡çš„访问。 -add-role =添加角色 -role-name =角色å称 -composite = Composite -description =æè¿° -no-client-roles-available =没有å¯ç”¨çš„客户端角色 -scope-param-required = Scope Param必需 -scope-param-required.tooltip =åªæœ‰åœ¨æŽˆæƒ/令牌请求期间使用具有角色å称的scopeå‚数时,æ‰ä¼šæŽˆäºˆæ­¤è§’色。 -composite-roles =å¤åˆè§’色 -composite-roles.tooltip =当将此角色(un)分é…给用户时,与其关è”的任何角色将被éšå¼åˆ†é…(un)。 -realm-roles = Realm角色 -available-roles =å¯ç”¨è§’色 -add-selected =添加选择 -associated-roles =å…³è”角色 -composite.associated-realm-roles.tooltip =与此组åˆè§’色关è”的领域级角色。 -composite.available-realm-roles.tooltip =您å¯ä»¥å…³è”到此组åˆè§’色的领域级角色。 -remove-selected =删除所选项 -client-roles =客户端角色 -select-client-to-view-roles =选择客户端以查看客户端的角色 -available-roles.tooltip =您å¯ä»¥ä¸Žæ­¤ç»„åˆè§’色关è”çš„æ¥è‡ªæ­¤å®¢æˆ·ç«¯çš„角色。 -client.associated-roles.tooltip =与此组åˆè§’色关è”的客户端角色。 -add-builtin =添加内置 -category = Category -type = Type -no-mappers-available =没有å¯ç”¨çš„映射器 -add-builtin-protocol-mappers =添加内置å议映射器 -add-builtin-protocol-mapper =添加内置å议映射器 -scope-mappings =范围映射 -full-scope-allowed =å…许的全范围 -full-scope-allowed.tooltip =å…许您ç¦ç”¨æ‰€æœ‰é™åˆ¶ã€‚ -scope.available-roles.tooltip =å¯ä»¥åˆ†é…到范围的领域级角色。 -assigned-roles =分é…的角色 -assigned-roles.tooltip =分é…给范围的领域级角色。 -effective-roles =有效角色 -realm.effective-roles.tooltip =å¯èƒ½å·²ä»Žç»„åˆè§’色继承的分é…的领域级角色。 -select-client-roles.tooltip =选择客户端以查看客户端的角色 -assign.available-roles.tooltip =å¯åˆ†é…的客户端角色。 -client.assigned-roles.tooltip =分é…的客户端角色。 -client.effective-roles.tooltip =å¯èƒ½å·²ä»Žç»„åˆè§’色继承的分é…的客户端角色。 -basic-configuration =基本é…ç½® -node-reregistration-timeout =节点é‡æ–°æ³¨å†Œè¶…æ—¶ -node-reregistration-timeout.tooltip =指定注册的客户端群集节点é‡æ–°æ³¨å†Œçš„最大时间的间隔。如果集群节点在此时间内ä¸ä¼šå‘Keycloakå‘é€é‡æ–°æ³¨å†Œè¯·æ±‚,则它将从Keycloak注销 -registered-cluster-nodes =注册的集群节点 -register-node-manually =手动注册节点 -test-cluster-availability =测试集群å¯ç”¨æ€§ -last-registration =最åŽä¸€æ¬¡æ³¨å†Œ -node-host =节点主机 -no-registered-cluster-nodes =没有注册的集群节点å¯ç”¨ -cluster-nodes =集群节点 -add-node =添加节点 -active-sessions.tooltip =此客户端的活动用户会è¯çš„总数。 -show-sessions =æ˜¾ç¤ºä¼šè¯ -show-sessions.tooltip =警告,这是一个潜在昂贵的æ“作,å–决于活动会è¯çš„æ•°é‡ã€‚ -user =用户 -from-ip =从IP -session-start =会è¯å¼€å§‹ -first-page=第一页 -previous-page=上一页 -next-page =下一页 -client-revoke.not-before.tooltip =撤销此客户端在此日期之å‰å‘出的任何令牌。 -client-revoke.push.tooltip =如果为此客户端é…置了管ç†URL,请将此策略推é€åˆ°è¯¥å®¢æˆ·ç«¯ã€‚ -select-a-format =é€‰æ‹©æ ¼å¼ -download=下载 -offline-tokens =脱机令牌 -offline-tokens.tooltip =此客户端的脱机令牌的总数。 -show-offline-tokens =显示脱机令牌 -show-offline-tokens.tooltip =警告,这是一个潜在的昂贵的æ“作,å–决于脱机令牌的数é‡ã€‚ -token-issued =å‘出的令牌 -last-access=最åŽè®¿é—® -last-refresh =上次刷新 -key-export =密钥导出 -key-import =密钥导入 -export-saml-key =导出SAML密钥 -import-saml-key =导入SAML密钥 -realm-certificate-alias =域è¯ä¹¦åˆ«å -realm-certificate-alias.tooltip = Realmè¯ä¹¦ä¹Ÿå­˜å‚¨åœ¨å½’档中。这是它的别å。 -signing-key =ç­¾å密钥 -saml-signing-key = SAMLç­¾å密钥。 -private-key =ç§é’¥ -generate-new-keys =生æˆæ–°å¯†é’¥ -export =导出 -encryption-key =加密密钥 -saml-encryption-key.tooltip = SAML加密密钥。 -service-accounts =æœåŠ¡å¸æˆ· -service-account.available-roles.tooltip =å¯ä»¥åˆ†é…ç»™æœåŠ¡å¸æˆ·çš„领域级角色。 -service-account.assigned-roles.tooltip =分é…ç»™æœåŠ¡å¸æˆ·çš„领域级角色。 -service-account-is-not-enabled-for = {{client}}未å¯ç”¨æœåŠ¡å¸æˆ· -create-protocol-mappers =创建å议映射器 -create-protocol-mapper =创建å议映射器 -protocol =åè®® -protocol.tooltip =åè®®... -id = ID -mapper.name.tooltip =映射器的å称。 -mapper.consent-required.tooltip =授予临时访问æƒé™æ—¶ï¼Œç”¨æˆ·æ˜¯å¦åŒæ„å‘客户端æ供此数æ®ï¼Ÿ -consent-text =åŒæ„文本 -consent-text.tooltip =在åŒæ„页é¢ä¸Šæ˜¾ç¤ºçš„文本。 -mapper-type =映射器类型 -mapper-type.tooltip =映射程åºçš„类型 -# realm identity providers -identity-providers =身份æ供者 -table-of-identity-providers =身份æ供程åºè¡¨ -add-provider.placeholder =添加æ供程åº... -provider =æä¾›ç¨‹åº -gui-order = GUIé¡ºåº -first-broker-login-flow =ç¬¬ä¸€ç™»å½•æµ -post-broker-login-flow =登录åŽæµç¨‹ -redirect-uri =é‡å®šå‘URI -redirect-uri.tooltip =é…置身份æ供程åºæ—¶è¦ä½¿ç”¨çš„é‡å®šå‘uri。 -alias =别å -display-name =显示å称 -identity-provider.alias.tooltip =别å唯一标识身份æ供者,它也用于构建é‡å®šå‘uri。 -identity-provider.display-name.tooltip =身份æ供者的å‹å¥½å称。 -identity-provider.enabled.tooltip =å¯ç”¨/ç¦ç”¨æ­¤èº«ä»½æ供程åºã€‚ -authenticate-by-default =é»˜è®¤éªŒè¯ -identity-provider.authenticate-by-default.tooltip =指示在显示登录å±å¹•ä¹‹å‰æ˜¯å¦åº”默认å°è¯•æ­¤æ供程åºè¿›è¡Œèº«ä»½éªŒè¯ã€‚ -store-tokens =存储令牌 -identity-provider.store-tokens.tooltip =如果在验è¯ç”¨æˆ·åŽå¿…须存储令牌,则å¯ç”¨/ç¦ç”¨ã€‚ -stored-tokens-readable=存储令牌å¯è¯» -identity-provider.stored-tokens-readable.tooltip =如果新用户å¯ä»¥è¯»å–任何存储的令牌,则å¯ç”¨/ç¦ç”¨ã€‚这将分é…broker.read-token角色。 -disableUserInfo =ç¦ç”¨ç”¨æˆ·ä¿¡æ¯ -identity-provider.disableUserInfo.tooltip =ç¦ç”¨ç”¨æˆ·ä¿¡æ¯æœåŠ¡çš„使用以获å–其他用户信æ¯ï¼Ÿé»˜è®¤æ˜¯ä½¿ç”¨æ­¤OIDCæœåŠ¡ã€‚ -userIp =使用userIpå‚æ•° -identity-provider.google-userIp.tooltip =在Google的用户信æ¯æœåŠ¡ä¸Šè°ƒç”¨æ—¶è®¾ç½®'userIp'查询å‚数。这将使用用户的IP地å€ã€‚如果Google正在é™åˆ¶å¯¹ç”¨æˆ·ä¿¡æ¯æœåŠ¡çš„访问,则此选项éžå¸¸æœ‰ç”¨ã€‚ -update-profile-on-first-login =首次登录时更新é…置文件 -on =å¼€ -on-missing-info =ç¼ºå°‘ä¿¡æ¯ -off =关闭 -update-profile-on-first-login.tooltip =定义用户在首次登录期间必须更新其é…置文件的æ¡ä»¶ã€‚ -trust-email =信任电å­é‚®ä»¶ -trust-email.tooltip =如果å¯ç”¨ï¼Œåˆ™æ­¤æ供商æ供的电å­é‚®ä»¶ä¸ä¼šéªŒè¯ï¼Œå³ä½¿å·²å¯ç”¨å¯¹é¢†åŸŸçš„验è¯ã€‚ -gui-order.tooltip = GUI中æ供者的定义顺åºçš„数字(例如,在登录页é¢ä¸Šï¼‰ã€‚ -first-broker-login-flow.tooltip =认è¯æµçš„别å,在首次使用此身份æ供者登录åŽè§¦å‘。术语“首次登录â€æ„味ç€å°šæœªå­˜åœ¨ä¸Žè®¤è¯èº«ä»½æ供商å¸æˆ·é“¾æŽ¥çš„Keycloakå¸æˆ·ã€‚ -post-broker-login-flow.tooltip =认è¯æµçš„别å,在æ¯æ¬¡ä½¿ç”¨æ­¤èº«ä»½æ供程åºç™»å½•åŽè§¦å‘。如果您需è¦å¯¹é€šè¿‡æ­¤èº«ä»½æ供程åºï¼ˆä¾‹å¦‚OTP)验è¯çš„æ¯ä¸ªç”¨æˆ·è¿›è¡Œé¢å¤–验è¯ï¼Œè¿™å°†éžå¸¸æœ‰ç”¨ã€‚如果您ä¸å¸Œæœ›åœ¨ä½¿ç”¨æ­¤èº«ä»½æ供商登录åŽè§¦å‘任何其他验è¯å™¨ï¼Œè¯·å°†æ­¤ç©ºç™½ç•™ç©ºã€‚还è¦æ³¨æ„,认è¯è€…实现必须å‡å®šç”¨æˆ·å·²ç»åœ¨ClientSession中设置为身份æ供者已ç»è®¾ç½®ã€‚ -openid-connect-config = OpenID连接é…ç½® -openid-connect-config.tooltip = OIDC SP和外部IDPé…置。 -authorization-url =授æƒURL -authorization-url.tooltip =授æƒç½‘å€ã€‚ -token-url =令牌URL -token-url.tooltip =令牌URL。 -logout-url =注销URL -identity-provider.logout-url.tooltip =用于从外部IDP注销用户的会è¯ç»ˆç»“点。 -backchannel-logout = Backchannel注销 -backchannel-logout.tooltip =外部IDP是å¦æ”¯æŒåå‘通é“注销? -user-info-url =用户信æ¯URL -user-info-url.tooltip =用户信æ¯ç½‘å€ã€‚这是å¯é€‰çš„。 -identity-provider.client-id.tooltip =在身份æ供者中注册的客户端或客户端标识符。 -client-secret =客户端密钥 -show-secret =æ˜¾ç¤ºå¯†ç  -hide-secret =éšè—秘密 -client-secret.tooltip =在身份æ供程åºä¸­æ³¨å†Œçš„客户端或客户端机密。 -issuer =å‘行人 -issuer.tooltip =å“应的å‘行者的å‘行者标识符。如果未æ供,将ä¸æ‰§è¡ŒéªŒè¯ã€‚ -default-scopes =默认范围 -identity-provider.default-scopes.tooltip =在请求授æƒæ—¶è¦å‘é€çš„作用域。它å¯ä»¥æ˜¯ä»¥ç©ºæ ¼åˆ†éš”的范围列表。默认为'openid'。 -prompt =æ示 -unspecified.option =未指定 -none.option = none -consent.option =åŒæ„ -login.option = login -select-account.option = select_account -prompt.tooltip =指定授æƒæœåŠ¡å™¨æ˜¯å¦æ示最终用户é‡æ–°è®¤è¯å’ŒåŒæ„。 -validate-signatures =验è¯ç­¾å -identity-provider.validate-signatures.tooltip =å¯ç”¨/ç¦ç”¨å¤–部IDPç­¾åçš„ç­¾å验è¯ã€‚ -identity-provider.use-jwks-url.tooltip =如果交æ¢æœºæ‰“开,那么将从给定的JWKS URL下载身份æ供程åºå…¬é’¥ã€‚è¿™å…许很大的çµæ´»æ€§ï¼Œå› ä¸ºå½“身份æ供商生æˆæ–°çš„密钥对时,新密钥将总是被é‡æ–°ä¸‹è½½ã€‚如果交æ¢æœºå…³é—­ï¼Œåˆ™ä½¿ç”¨æ¥è‡ªKeycloak DB的公钥(或è¯ä¹¦ï¼‰ï¼Œå› æ­¤å½“身份æ供商密钥更改时,您始终需è¦å°†æ–°å¯†é’¥å¯¼å…¥åˆ°Keycloakæ•°æ®åº“。 -identity-provider.jwks-url.tooltip =存储JWKæ ¼å¼çš„身份æ供者密钥的URL。有关更多详细信æ¯ï¼Œè¯·å‚阅JWK规范。如果你使用外部keycloak身份æ供者,那么你å¯ä»¥ä½¿ç”¨åƒhttp:// broker-keycloak:8180 / auth / realms / test / protocol / openid-connect / certs这样的URL,å‡è®¾ä½ çš„代ç†keycloak是è¿è¡Œåœ¨http: / broker-keycloak:8180',它的境界是'test'。 -validating-public-key =验è¯å…¬é’¥ -identity-provider.validating-public-key.tooltip =必须用于验è¯å¤–部IDPç­¾åçš„PEMæ ¼å¼çš„公钥。 -import-external-idp-config =导入外部IDPé…ç½® -import-external-idp-config.tooltip =å…许您从é…置文件加载外部IDP元数æ®æˆ–从URL下载它。 -import-from-url =从URL导入 -identity-provider.import-from-url.tooltip =从远程IDPå‘现æ述符导入元数æ®ã€‚ -import-from-file =从文件导入 -identity-provider.import-from-file.tooltip =从下载的IDPå‘现æ述符导入元数æ®ã€‚ -saml-config = SAMLé…ç½® -identity-provider.saml-config.tooltip = SAML SP和外部IDPé…置。 -single-signon-service-url =å•ç‚¹ç™»å½•æœåŠ¡URL -saml.single-signon-service-url.tooltip =必须用于å‘é€è®¤è¯è¯·æ±‚(SAML AuthnRequest)的URL。 -single-logout-service-url =å•ä¸€æ³¨é”€æœåŠ¡URL -saml.single-logout-service-url.tooltip =必须用于å‘é€æ³¨é”€è¯·æ±‚的网å€ã€‚ -nameid-policy-format = NameIDç­–ç•¥æ ¼å¼ -nameid-policy-format.tooltip =指定与å称标识符格å¼ç›¸å¯¹åº”çš„URI引用。默认为urn:oasis:names:tc:SAML:2.0:nameid-format:persistent。 -http-post-binding-response = HTTP-POST绑定å“应 -http-post-binding-response.tooltip =指示是å¦ä½¿ç”¨HTTP-POST绑定å“应请求。如果为false,将使用HTTP-REDIRECT绑定。 -http-post-binding-for-authn-request = HTTP-POST AuthnRequest的绑定 -http-post-binding-for-authn-request.tooltip =指示是å¦å¿…须使用HTTP-POST绑定å‘é€AuthnRequest。如果为false,将使用HTTP-REDIRECT绑定。 -want-authn-requests-signed =需è¦AuthnRequestsç­¾å -want-authn-requests-signed.tooltip =指示身份æ供者是å¦æœŸæœ›ç­¾ç½²AuthnRequest。 -force-authentication =å¼ºåˆ¶éªŒè¯ -identity-provider.force-authentication.tooltip =指示身份æ供者是å¦å¿…须直接认è¯æ¼”示者,而ä¸æ˜¯ä¾èµ–以å‰çš„安全上下文。 -validate-signature =验è¯ç­¾å -saml.validate-signature.tooltip =å¯ç”¨/ç¦ç”¨SAMLå“应的签å验è¯ã€‚ -validating-x509-certificate =验è¯X509è¯ä¹¦ -validating-x509-certificate.tooltip =必须用于检查签åçš„PEMæ ¼å¼çš„è¯ä¹¦ã€‚å¯ä»¥è¾“入多个è¯ä¹¦ï¼Œç”¨é€—å·ï¼ˆï¼Œï¼‰åˆ†éš”。 -saml.import-from-url.tooltip =从远程IDP SAML实体æ述符导入元数æ®ã€‚ -social.client-id.tooltip =å‘身份æ供者注册的客户机标识符。 -social.client-secret.tooltip =å‘身份æ供者注册的客户端密钥。 -social.default-scopes.tooltip =在请求授æƒæ—¶è¦å‘é€çš„作用域。有关å¯èƒ½çš„值,分隔符和默认值,请å‚阅文档。 -key = Key -stackoverflow.key.tooltip =从Stack Overflow客户端注册获å–的密钥。 - -# User federation -sync-ldap-roles-to-keycloak =å°†LDAP角色åŒæ­¥åˆ°Keycloak -sync-keycloak-roles-to-ldap =åŒæ­¥Keycloak到LDAP的角色 -sync-ldap-groups-to-keycloak =å°†LDAP组åŒæ­¥åˆ°Keycloak -sync-keycloak-groups-to-ldap =åŒæ­¥Keycloak组到LDAP - -realms =领域 -realm = Realm - -identity-provider-mappers =身份æ供者映射器 -create-identity-provider-mapper =创建身份æ供者映射器 -add-identity-provider-mapper =添加身份æ供者映射器 -client.description.tooltip =指定客户端的æ述。例如“我的客户端的时间表â€ã€‚支æŒæœ¬åœ°åŒ–值的键。例如\\uff1a$ {my_client_description} - -expires =到期 -expiration =到期 -expiration.tooltip =指定令牌有效的时间 -count = Count -count.tooltip =指定å¯ä»¥ä½¿ç”¨ä»¤ç‰Œåˆ›å»ºå¤šå°‘个客户端 -remainingCount =剩余计数 -created =已创建 -back =返回 -initial-access-tokens=åˆå§‹æŽ¥å…¥ä»¤ç‰Œ -add-initial-access-tokens =添加åˆå§‹è®¿é—®ä»¤ç‰Œ -initial-access-token=åˆå§‹æŽ¥å…¥ä»¤ç‰Œ -initial-access.copyPaste.tooltip =在导航离开此页é¢ä¹‹å‰å¤åˆ¶/粘贴åˆå§‹è®¿é—®ä»¤ç‰Œï¼Œå› ä¸ºå®ƒä¸å¯èƒ½ç¨åŽæ£€ç´¢ -continue =继续 -initial-access-token.confirm.title =å¤åˆ¶åˆå§‹è®¿é—®ä»¤ç‰Œ -initial-access-token.confirm.text =在确认之å‰ï¼Œè¯·å¤åˆ¶å¹¶ç²˜è´´åˆå§‹è®¿é—®ä»¤ç‰Œï¼Œå› ä¸ºä»¥åŽæ— æ³•æ£€ç´¢ -no-initial-access-available =没有åˆå§‹è®¿é—®ä»¤ç‰Œå¯ç”¨ - -client-reg-policies =客户端注册策略 -client-reg-policy.name.tooltip =显示策略的å称 -anonymous-policies =匿å访问策略 -anonymous-policies.tooltip =当客户端注册æœåŠ¡ç”±æœªç»èº«ä»½éªŒè¯çš„请求调用时,使用这些策略。这æ„味ç€è¯·æ±‚ä¸åŒ…å«åˆå§‹æŽ¥å…¥ä»¤ç‰Œæˆ–承载令牌。 -auth-policies =验è¯çš„访问策略 -auth-policies.tooltip =当通过认è¯è¯·æ±‚调用客户端注册æœåŠ¡æ—¶ä½¿ç”¨è¿™äº›ç­–略。这æ„味ç€è¯·æ±‚包å«åˆå§‹æŽ¥å…¥ä»¤ç‰Œæˆ–承载令牌。 -policy-name =ç­–ç•¥å称 -no-client-reg-policies-configured =无客户端注册策略 -trusted-hosts.label =å—信任的主机 -trusted-hosts.tooltip =主机列表,它们是å—信任的,并且å…许调用客户端注册æœåŠ¡å’Œ/或用作客户端URI的值。您å¯ä»¥ä½¿ç”¨ä¸»æœºå或IP地å€ã€‚如果您在开头使用星å·ï¼ˆä¾‹å¦‚“* .example.comâ€ï¼‰ï¼Œåˆ™æ•´ä¸ªåŸŸexample.comå°†å—信任。 -host-sending-registration-request-must-match.label =主机å‘é€å®¢æˆ·ç«¯æ³¨å†Œè¯·æ±‚å¿…é¡»åŒ¹é… -host-sending-registration-request-must-match.tooltip =如果开å¯ï¼Œåˆ™åªè¦å®¢æˆ·ç«¯æ³¨å†ŒæœåŠ¡æ˜¯ä»ŽæŸä¸ªå—信任的主机或域å‘é€çš„,就å…许任何请求。 -client-uris-must-match.label =客户端URIå¿…é¡»åŒ¹é… -client-uris-must-match.tooltip =如果å¯ç”¨ï¼Œåˆ™æ‰€æœ‰å®¢æˆ·ç«¯URI(é‡å®šå‘URI和其他)åªæœ‰åœ¨å®ƒä»¬åŒ¹é…一些å—信任的主机或域时æ‰å…许。 -allowed-protocol-mappers.label =å…许的å议映射器 -allowed-protocol-mappers.tooltip =å…许的å议映射器æ供程åºçš„白åå•ã€‚如果å°è¯•æ³¨å†Œå®¢æˆ·ç«¯ï¼Œå…¶ä¸­åŒ…å«ä¸€äº›æœªåˆ—入白åå•çš„å议映射器,则注册请求将被拒ç»ã€‚ -consent-required-for-all-mappers.label =需è¦åŒæ„Mappers -consent-required-for-all-mappers.tooltip =如果打开,则所有新注册的å议映射器将自动具有consentRequiredå¼€å¯ã€‚è¿™æ„味ç€ç”¨æˆ·å°†éœ€è¦æ‰¹å‡†åŒæ„å±å¹•ã€‚注æ„:åªæœ‰åœ¨å®¢æˆ·ç«¯å·²å¯ç”¨consentRequired开关时,æ‰ä¼šæ˜¾ç¤ºåŒæ„å±å¹•ã€‚所以通常很好地使用这个开关与需è¦åŒæ„的政策。 -allowed-client-templates.label =å…è®¸çš„å®¢æˆ·ç«¯æ¨¡æ¿ -allowed-client-templates.tooltip =客户端模æ¿çš„白åå•ï¼Œå¯ä»¥åœ¨æ–°æ³¨å†Œçš„客户端上使用。å°è¯•å‘æŸä¸ªæœªåˆ—入白åå•çš„客户端模æ¿æ³¨å†Œå®¢æˆ·ç«¯å°†è¢«æ‹’ç»ã€‚默认情况下,白åå•ä¸ºç©ºï¼Œå› æ­¤ä¸å…许任何客户端模æ¿ã€‚ -max-clients.label =æ¯ä¸ªé¢†åŸŸçš„最大客户端 -max-clients.tooltip =如果域中现有客户端的数é‡ç­‰äºŽæˆ–大于é…置的é™åˆ¶ï¼Œå°†ä¸å…许注册新客户端。 - -client-scopes =å®¢æˆ·ç«¯æ¨¡æ¿ -client-scopes.tooltip =客户机模æ¿å…许您定义在多个客户机之间共享的公共é…ç½® - -groups =组 - -group.add-selected.tooltip =å¯ä»¥åˆ†é…给组的领域角色。 -group.assigned-roles.tooltip =映射到组的Realm角色 -group.effective-roles.tooltip =所有领域角色映射。这里的一些角色å¯èƒ½ä»Žæ˜ å°„组åˆè§’色继承。 -group.available-roles.tooltip =å¯ä»Žæ­¤å®¢æˆ·ç«¯åˆ†é…角色。 -group.assigned-roles-client.tooltip =此客户端的角色映射。 -group.effective-roles-client.tooltip =此客户端的角色映射。这里的一些角色å¯èƒ½ä»Žæ˜ å°„组åˆè§’色继承。 - -default-roles =默认角色 -no-realm-roles-available =没有领域角色å¯ç”¨ - -users =用户 -user.add-selected.tooltip =å¯ä»¥åˆ†é…给用户的领域角色。 -user.assigned-roles.tooltip =映射到用户的Realm角色 -user.effective-roles.tooltip =所有领域角色映射。这里的一些角色å¯èƒ½ä»Žæ˜ å°„组åˆè§’色继承。 -user.available-roles.tooltip =å¯ä»Žæ­¤å®¢æˆ·ç«¯åˆ†é…角色。 -user.assigned-roles-client.tooltip =此客户端的角色映射。 -user.effective-roles-client.tooltip =此客户端的角色映射。这里的一些角色å¯èƒ½ä»Žæ˜ å°„组åˆè§’色继承。 -default.available-roles.tooltip =å¯ä»¥åˆ†é…的领域级角色。 -realm-default-roles = Realm默认角色 -realm-default-roles.tooltip =分é…给新用户的领域级别角色。 -default.available-roles-client.tooltip =å¯ä½œä¸ºé»˜è®¤å€¼åˆ†é…çš„æ¥è‡ªæ­¤å®¢æˆ·ç«¯çš„角色。 -client-default-roles =客户端默认角色 -client-default-roles.tooltip =æ¥è‡ªæ­¤å®¢æˆ·ç«¯çš„作为默认角色分é…的角色。 -composite.available-roles.tooltip =您å¯ä»¥å…³è”到此组åˆè§’色的领域级角色。 -composite.associated-roles.tooltip =与此组åˆè§’色关è”的领域级角色。 -composite.available-roles-client.tooltip =您å¯ä»¥ä¸Žæ­¤ç»„åˆè§’色关è”的角色。 -composite.associated-roles-client.tooltip =与此组åˆè§’色关è”的客户端角色。 -partial-import =部分导入 -partial-import.tooltip =部分导入å…许您从先å‰å¯¼å‡ºçš„json文件导入用户,客户端和其他资æºã€‚ -file = File -exported-json-file =导出的json文件 -import-from-realm =从领域导入 -import-users =导入用户 -import-groups =导入组 -import-clients =导入客户端 -import-identity-providers =导入身份æ供者 -import-realm-roles =导入领域角色 -import-client-roles =导入客户端角色 -if-resource-exists =如果资æºå­˜åœ¨ -fail =失败 -skip =跳过 -overwrite =覆盖 -if-resource-exists.tooltip =指定在å°è¯•å¯¼å…¥å·²å­˜åœ¨çš„资æºæ—¶åº”该åšä»€ä¹ˆã€‚ - -action = Action -role-selector =角色选择器 -realm-roles.tooltip =å¯ä»¥é€‰æ‹©çš„领域角色。 - -select-a-role =选择角色 -select-realm-role =选择领域角色 -client-roles.tooltip =å¯ä»¥é€‰æ‹©çš„客户端角色。 -select-client-role =选择客户端角色 - -client-template =å®¢æˆ·ç«¯æ¨¡æ¿ -client-template.tooltip =此客户端继承é…ç½®çš„å®¢æˆ·ç«¯æ¨¡æ¿ -client-saml-endpoint =客户端SAML端点 -add-client-scope =æ·»åŠ å®¢æˆ·ç«¯æ¨¡æ¿ - -manage =ç®¡ç† -authentication =éªŒè¯ -user-federation =用户è”åˆ -user-storage =用户存储 -events =事件 -realm-settings =领域设置 -configure =é…ç½® -select-realm =选择领域 -add =添加 - -client-scope.name.tooltip =客户端模æ¿çš„å称。在领域中必须是唯一的 -client-scope.description.tooltip =客户端模æ¿çš„æè¿° -client-scope.protocol.tooltip =此客户端模æ¿æ供的SSOåè®®é…ç½® - -add-user-federation-provider =添加用户è”åˆæä¾›ç¨‹åº -add-user-storage-provider =添加用户存储æä¾›ç¨‹åº -required-settings =必需的设置 -provider-id =æ供商ID -console-display-name =控制å°æ˜¾ç¤ºå称 -console-display-name.tooltip =在管ç†æŽ§åˆ¶å°ä¸­é“¾æŽ¥æ—¶æ˜¾ç¤ºæ供程åºçš„å称。 -priority =优先级 -priority.tooltip =执行用户查找时æ供程åºçš„优先级。最低优先。 -sync-settings =åŒæ­¥è®¾ç½® -periodic-full-sync =周期性完全åŒæ­¥ -periodic-full-sync.tooltip =是å¦åº”该å¯ç”¨æ供程åºç”¨æˆ·åˆ°Keycloak的周期性完全åŒæ­¥ -full-sync-period =完全åŒæ­¥å‘¨æœŸ -full-sync-period.tooltip =完全åŒæ­¥çš„周期(以秒为å•ä½ï¼‰ -periodic-changed-users-sync =定期更改的用户åŒæ­¥ -periodic-changed-users-sync.tooltip =应该å¯ç”¨æ›´æ”¹çš„或新创建的æ供程åºç”¨æˆ·åˆ°Keycloak的周期性åŒæ­¥ -changed-users-sync-period =更改的用户åŒæ­¥æœŸé—´ -changed-users-sync-period.tooltip =用于åŒæ­¥æ›´æ”¹çš„或新创建的æ供程åºç”¨æˆ·çš„时间段(以秒为å•ä½ï¼‰ -synchronize-changed-users =åŒæ­¥å·²æ›´æ”¹çš„用户 -synchronize-all-users =åŒæ­¥æ‰€æœ‰ç”¨æˆ· -kerberos-realm = Kerberos领域 -kerberos-realm.tooltip = kerberos域的å称。例如FOO.ORG -server-principal =æœåŠ¡å™¨ä¸»ä½“ -server-principal.tooltip = HTTPæœåŠ¡çš„æœåŠ¡å™¨ä¸»ä½“的完整å称,包括æœåŠ¡å™¨å’ŒåŸŸå。例如HTTP /host.foo.org@FOO.ORG -keytab = KeyTab -keytab.tooltip =包å«æœåŠ¡å™¨ä¸»ä½“的凭æ®çš„Kerberos KeyTab文件的ä½ç½®ã€‚例如/etc/krb5.keytab -debug = Debug -debug.tooltip =å¯ç”¨/ç¦ç”¨è°ƒè¯•æ—¥å¿—到Krb5LoginModule的标准输出。 -allow-password-authentication =å…许密ç éªŒè¯ -allow-password-authentication.tooltip =å¯ç”¨/ç¦ç”¨Kerberosæ•°æ®åº“的用户å/密ç èº«ä»½éªŒè¯çš„å¯èƒ½æ€§ -edit-mode =ç¼–è¾‘æ¨¡å¼ -edit-mode.tooltip = READ_ONLY表示ä¸å…许更新密ç ï¼Œç”¨æˆ·å§‹ç»ˆä½¿ç”¨Kerberos密ç è¿›è¡Œèº«ä»½éªŒè¯ã€‚ UNSYNCED表示用户å¯ä»¥åœ¨Keycloakæ•°æ®åº“中更改其密ç ï¼Œç„¶åŽå°†ä½¿ç”¨æ­¤å¯†ç è€Œä¸æ˜¯Kerberoså¯†ç  -ldap.edit-mode.tooltip = READ_ONLY是åªè¯»LDAP存储。å¯å†™æ„味ç€æ•°æ®å°†æŒ‰éœ€åŒæ­¥å›žLDAP。 UNSYNCED表示将导入用户数æ®ï¼Œä½†ä¸ä¼šåŒæ­¥å›žLDAP。 -update-profile-first-login =æ›´æ–°é…置文件首次登录 -update-profile-first-login.tooltip =首次登录时更新é…置文件 -sync-registrations =åŒæ­¥æ³¨å†Œ -ldap.sync-registrations.tooltip =是å¦åº”在LDAP存储中创建新创建的用户?选择æ供程åºä»¥åŒæ­¥æ–°ç”¨æˆ·çš„优先级效果。 -vendor =供应商 -ldap.vendor.tooltip = LDAP供应商(æ供者) -username-ldap-attribute =用户åLDAP属性 -ldap-attribute-name-for-username =用户åçš„LDAP属性å称 -username-ldap-attribute.tooltip = LDAP属性的å称,映射为Keycloak用户å。对于许多LDAPæœåŠ¡å™¨ä¾›åº”商,它å¯ä»¥æ˜¯â€œuidâ€ã€‚对于活动目录,å¯ä»¥æ˜¯â€œsAMAccountNameâ€æˆ–“cnâ€ã€‚应该为è¦ä»ŽLDAP导入到Keycloak的所有LDAP用户记录填充该属性。 -rdn-ldap-attribute = RDN LDAP属性 -ldap-attribute-name-for-user-rdn =用户RDNçš„LDAP属性å称 -rdn-ldap-attribute.tooltip = LDAP属性的å称,用作典型用户DNçš„RDN(top属性)。通常它与用户åLDAP属性相åŒï¼Œä½†ä¸æ˜¯å¿…需的。例如对于Active目录,当username属性å¯èƒ½æ˜¯â€œsAMAccountNameâ€æ—¶ï¼Œé€šå¸¸ä½¿ç”¨â€œcnâ€ä½œä¸ºRDN属性。 -uuid-ldap-attribute = UUID LDAP属性 -ldap-attribute-name-for-uuid = UUIDçš„LDAP属性å称 -uuid-ldap-attribute.tooltip = LDAP属性的å称,用作LDAP中对象的唯一对象标识符(UUID)。对于许多LDAPæœåŠ¡å™¨ä¾›åº”商,它的'entryUUID',但有些是ä¸åŒçš„。例如对于Active目录,它应该是'objectGUID'。如果您的LDAPæœåŠ¡å™¨ç¡®å®žä¸æ”¯æŒUUID的概念,您å¯ä»¥ä½¿ç”¨ä»»ä½•å…¶ä»–属性,它应该在树中的LDAP用户中是唯一的。例如“uidâ€æˆ–“entryDNâ€ã€‚ -user-object-classes =用户对象类 -ldap-user-object-classes.placeholder = LDAP用户对象类(以逗å·åˆ†éš”) - -ldap-connection-url = LDAP连接URL -ldap-users-dn = LDAP用户DN -ldap-bind-dn = LDAP绑定DN -ldap-bind-credentials = LDAPç»‘å®šå‡­æ® -ldap-filter = LDAP过滤器 -ldap.user-object-classes.tooltip = LDAP中用户的LDAP objectClass属性的所有值除以逗å·ã€‚例如:'inetOrgPerson,organizationalPerson'。新创建的Keycloak用户将被写入具有所有这些对象类的LDAP,并且åªè¦çŽ°æœ‰çš„LDAP用户记录包å«æ‰€æœ‰è¿™äº›å¯¹è±¡ç±»ï¼Œå°±ä¼šæ‰¾åˆ°å®ƒä»¬ã€‚ - -connection-url =连接URL -ldap.connection-url.tooltip =与LDAPæœåŠ¡å™¨çš„连接URL -test-connection =测试连接 -users-dn =用户DN -ldap.users-dn.tooltip =用户所在的LDAP树的完整DN。此DN是LDAP用户的父级。它å¯ä»¥æ˜¯ä¾‹å¦‚'ou = users,dc = example,dc = com',å‡è®¾æ‚¨çš„典型用户将有DNåƒ'uid = john,ou = users,dc = example,dc = com' -authentication-type =认è¯ç±»åž‹ -ldap.authentication-type.tooltip = LDAP认è¯ç±»åž‹ã€‚现在åªæœ‰â€œæ— â€ï¼ˆåŒ¿åLDAP身份验è¯ï¼‰æˆ–“简å•â€ï¼ˆç»‘定凭æ®+绑定密ç èº«ä»½éªŒè¯ï¼‰æœºåˆ¶å¯ç”¨ -bind-dn =绑定DN -ldap.bind-dn.tooltip = LDAP管ç†å‘˜çš„DN,Keycloak将使用它æ¥è®¿é—®LDAPæœåŠ¡å™¨ -bind-credential =ç»‘å®šå‡­æ® -ldap.bind-credential.tooltip = LDAP管ç†å‘˜çš„å¯†ç  -test-authentication =æµ‹è¯•éªŒè¯ -custom-user-ldap-filter =自定义用户LDAP过滤器 -ldap.custom-user-ldap-filter.tooltip =用于过滤æœç´¢ç”¨æˆ·çš„其他LDAP过滤器。如果您ä¸éœ€è¦é¢å¤–的过滤器,请留空。确ä¿å®ƒä»¥'('开头,以')结æŸ' -search-scope =æœç´¢èŒƒå›´ -ldap.search-scope.tooltip =对于一个级别,我们仅在用户DN指定的DN中æœç´¢ç”¨æˆ·ã€‚对于å­æ ‘,我们æœç´¢æ•´ä¸ªä»–们的å­æ ‘。有关更多详细信æ¯ï¼Œè¯·å‚阅LDAP文档 -use-truststore-spi =使用Truststore SPI -ldap.use-truststore-spi.tooltip =指定LDAP连接是å¦å°†ä½¿ç”¨å…·æœ‰åœ¨standalone.xml / domain.xml中é…置的信任库的truststore SPI。 “永远â€æ„味ç€å®ƒæ€»æ˜¯ä½¿ç”¨å®ƒã€‚ “从ä¸â€æ„味ç€å®ƒä¸ä¼šä½¿ç”¨å®ƒã€‚ 'åªæœ‰ldaps'æ„味ç€å®ƒå°†ä½¿ç”¨ï¼Œå¦‚果你的连接URL使用ldaps。å³ä½¿æœªé…ç½®standalone.xml / domain.xml,也将使用由“javax.net.ssl.trustStoreâ€å±žæ€§æŒ‡å®šçš„缺çœJava cacerts或è¯ä¹¦ã€‚ -connection-pooling =连接池 -ldap.connection-pooling.tooltip = Keycloak是å¦åº”该使用连接池æ¥è®¿é—®LDAPæœåŠ¡å™¨ -ldap.pagination.tooltip = LDAPæœåŠ¡å™¨æ˜¯å¦æ”¯æŒåˆ†é¡µã€‚ -kerberos-integration = Kerberosé›†æˆ -allow-kerberos-authentication =å…许Kerberosèº«ä»½éªŒè¯ -ldap.allow-kerberos-authentication.tooltip =å¯ç”¨/ç¦ç”¨å…·æœ‰SPNEGO / Kerberos令牌的用户的HTTP身份验è¯ã€‚有关已验è¯ç”¨æˆ·çš„æ•°æ®å°†ä»Žæ­¤LDAPæœåŠ¡å™¨è¿›è¡Œé…ç½® -use-kerberos-for-password-authentication =使用Kerberos进行密ç éªŒè¯ -ldap.use-kerberos-for-password-authentication.tooltip =使用Kerberos登录模å—用于针对KerberosæœåŠ¡å™¨çš„身份验è¯ç”¨æˆ·å/密ç ï¼Œè€Œä¸æ˜¯ä½¿ç”¨Directory Service API对LDAPæœåŠ¡å™¨è¿›è¡Œèº«ä»½éªŒè¯ -batch-size =批é‡å¤§å° -ldap.batch-size.tooltip =在å•ä¸ªäº‹åŠ¡ä¸­è¦ä»ŽLDAP导入到Keycloakçš„LDAP用户的计数。 -ldap.periodic-full-sync.tooltip =是å¦åº”该å¯ç”¨LDAP用户到Keycloak的周期性完全åŒæ­¥ -ldap.periodic-changed-users-sync.tooltip =应该å¯ç”¨æ›´æ”¹çš„或新创建的LDAP用户到Keycloak的周期性åŒæ­¥ -ldap.changed-users-sync-period.tooltip =用于åŒæ­¥æ›´æ”¹çš„或新创建的LDAP用户的时间段(以秒为å•ä½ï¼‰ -user-federation-mappers =用户è”åˆæ˜ å°„器 -create-user-federation-mapper =创建用户è”åˆæ˜ å°„器 -add-user-federation-mapper =添加用户è”åˆæ˜ å°„器 -provider-name =æ供程åºå称 -no-user-federation-providers-configured =未é…置用户è”åˆæä¾›ç¨‹åº -no-user-storage-providers-configured =未é…置用户存储æä¾›ç¨‹åº -add-identity-provider =添加身份æ供者 -add-identity-provider-link =添加身份æ供商链接 -identity-provider =身份æ供者 -identity-provider-user-id =身份æ供者用户ID -identity-provider-user-id.tooltip =身份æ供者端的用户的唯一ID -identity-provider-username =身份æ供者用户å -identity-provider-username.tooltip =身份æ供者端的用户å -pagination =分页 - -browser-flow =æµè§ˆå™¨æµ -browser-flow.tooltip =选择è¦ç”¨äºŽæµè§ˆå™¨èº«ä»½éªŒè¯çš„æµã€‚ -registration-flow =注册æµç¨‹ -registration-flow.tooltip =选择è¦ç”¨äºŽæ³¨å†Œçš„æµã€‚ -direct-grant-flow =直接授æƒæµ -direct-grant-flow.tooltip =选择è¦ç”¨äºŽç›´æŽ¥æŽˆäºˆèº«ä»½éªŒè¯çš„æµã€‚ -reset-credentials =é‡ç½®å‡­æ® -reset-credentials.tooltip =选择当用户忘记其凭æ®æ—¶è¦ä½¿ç”¨çš„æµã€‚ -client-authentication =å®¢æˆ·ç«¯éªŒè¯ -client-authentication.tooltip =选择è¦ç”¨äºŽå®¢æˆ·ç«¯èº«ä»½éªŒè¯çš„æµã€‚ -new =æ–° -copy =å¤åˆ¶ -add-execution =添加执行 -add-flow =æ·»åŠ æµ -auth-type =认è¯ç±»åž‹ -requirement=需求 -config = Config -no-executions-available =没有å¯ç”¨çš„执行 -authentication-flows =认è¯æµ -create-authenticator-config =创建验è¯å™¨é…ç½® -authenticator.alias.tooltip =é…置的å称 -otp-type = OTP类型 -time-based=基于时间的 -counter-based=基于计数器 -otp-type.tooltip = totp是基于时间的一次性密ç ã€‚ 'hotp'是一个计数器基本一次性密ç ï¼Œå…¶ä¸­æœåŠ¡å™¨ä¿æŒä¸€ä¸ªè®¡æ•°å™¨å“ˆå¸Œã€‚ -otp-hash-algorithm = OTP哈希算法 -otp-hash-algorithm.tooltip =应该使用什么散列算法æ¥ç”ŸæˆOTP。 -number-of-digits=ä½æ•° -otp.number-of-digits.tooltip = OTP有多少ä½ï¼Ÿ -look-ahead-window =å‘å‰çœ‹çª—å£ -otp.look-ahead-window.tooltip =如果令牌生æˆå™¨å’ŒæœåŠ¡å™¨ä¸åœ¨æ—¶é—´åŒæ­¥æˆ–计数器åŒæ­¥ï¼ŒæœåŠ¡å™¨åº”该å‘多远å‰è¿›ï¼Ÿ -initial-counter=åˆå§‹è®¡æ•°å™¨ -otp.initial-counter.tooltip =åˆå§‹è®¡æ•°å™¨å€¼åº”该是什么? -otp-token-period = OTP令牌周期 -otp-token-period.tooltip = OTP令牌有效多少秒?默认为30秒。 -table-of-password-policies =密ç ç­–略表 -add-policy.placeholder =添加策略... -policy-type =策略类型 -policy-value =策略值 -admin-events =管ç†äº‹ä»¶ -admin-events.tooltip =显示领域的已ä¿å­˜ç®¡ç†äº‹ä»¶ã€‚事件与管ç†å‘˜å¸æˆ·ç›¸å…³ï¼Œä¾‹å¦‚领域创建。è¦å¯ç”¨æŒä¹…性事件,请转到é…置。 -login-events =登录事件 -filter =过滤器 -update =æ›´æ–° -reset =å¤ä½ -operation-types =æ“作类型 -resource-types =资æºç±»åž‹ -select-operations.placeholder =选择æ“作... -select-resource-types.placeholder =选择资æºç±»åž‹... -resource-path =资æºè·¯å¾„ -resource-path.tooltip =按资æºè·¯å¾„过滤。支æŒé€šé…符'*'匹é…路径的å•ä¸ªéƒ¨åˆ†ï¼Œ'**'匹é…多个部分。例如,“realms / * / clients / asbcâ€åŒ¹é…任何域中具有id asbc的客户端,而“realms / master / **â€åŒ¹é…主域中的任何内容。 -date-(from)= Date(From) -date-(to)=日期(To) -authentication-details =验è¯è¯¦ç»†ä¿¡æ¯ -ip-address = IPåœ°å€ -time=时间 -operation-type =æ“作类型 -resource-type =资æºç±»åž‹ -auth = Auth -representation =表示 -register=寄存器 -required-action =必需æ“作 -default-action =默认æ“作 -auth.default-action.tooltip =如果å¯ç”¨ï¼Œä»»ä½•æ–°ç”¨æˆ·éƒ½å°†åˆ†é…此必需æ“作。 -no-required-actions-configured =未é…置所需的æ“作 -defaults-to-id =默认为id -flows=æµé‡ -bindings =绑定 -required-actions =必需æ“作 -password-policy =密ç ç­–ç•¥ -otp-policy = OTPç­–ç•¥ -user-groups =用户组 -default-groups =默认组 -groups.default-groups.tooltip =新用户将自动加入的组的集åˆã€‚ -cut = Cut -paste =粘贴 - -create-group =创建组 -create-authenticator-execution =创建Authenticator执行 -create-form-action-execution =创建表å•æ“作执行 -create-top-level-form =åˆ›å»ºé¡¶çº§è¡¨å• -flow.alias.tooltip =指定æµçš„显示å称。 -top-level-flow-type =顶级æµç±»åž‹ -flow.generic = generic -flow.client = client -top-level-flow-type.tooltip =什么样的顶层æµæ˜¯ä»€ä¹ˆï¼Ÿç±»åž‹â€œå®¢æˆ·ç«¯â€ç”¨äºŽå®¢æˆ·ç«¯ï¼ˆåº”用程åºï¼‰çš„认è¯ï¼Œå½“通用是为用户和其他 -create-execution-flow =åˆ›å»ºæ‰§è¡Œæµ -flow-type =æµç±»åž‹ -flow.form.type = form -flow.generic.type = generic -flow-type.tooltip =å®ƒæ˜¯ä»€ä¹ˆæ ·çš„å½¢å¼ -form-provider =表å•æä¾›ç¨‹åº -default-groups.tooltip =新创建或注册的用户将自动添加到这些组 -select-a-type.placeholder =选择一个类型 -available-groups =å¯ç”¨ç»„ -available-groups.tooltip =选择è¦æ·»åŠ ä¸ºé»˜è®¤çš„组。 -value = Value -table-of-group-members =组æˆå‘˜è¡¨ -last-name =å§“æ° -first-name =åå­— -email =电å­é‚®ä»¶ -toggle-navigation =切æ¢å¯¼èˆª -manage-account =管ç†å¸æˆ· -sign-out=退出 -server-info =æœåŠ¡å™¨ä¿¡æ¯ -resource-not-found =资æºæœªæ‰¾åˆ° ... -resource-not-found.instruction =我们找ä¸åˆ°æ‚¨è¦æ‰¾çš„资æºã€‚请确ä¿æ‚¨è¾“入的网å€æ­£ç¡®æ— è¯¯ã€‚ -go-to-the-home-page =å‰å¾€é¦–页&raquo; -page-not-found =页é¢æœªæ‰¾åˆ° ... -page-not-found.instruction =我们找ä¸åˆ°æ‚¨è¦å¯»æ‰¾çš„页é¢ã€‚请确ä¿æ‚¨è¾“入的网å€æ­£ç¡®æ— è¯¯ã€‚ -events.tooltip =显示领域的已ä¿å­˜äº‹ä»¶ã€‚事件与用户å¸æˆ·ç›¸å…³ï¼Œä¾‹å¦‚用户登录。è¦å¯ç”¨æŒä¹…性事件,请转到é…置。 -select-event-types.placeholder =选择事件类型... -events-config.tooltip =显示é…置选项以å¯ç”¨ç”¨æˆ·å’Œç®¡ç†äº‹ä»¶çš„æŒä¹…性。 -select-an-action.placeholder =选择æ“作... -event-listeners.tooltip =é…置什么侦å¬å™¨æŽ¥æ”¶é¢†åŸŸçš„事件。 -login.save-events.tooltip =如果å¯ç”¨çš„登录事件ä¿å­˜åˆ°æ•°æ®åº“,使事件å¯ç”¨äºŽç®¡ç†å’Œå¸æˆ·ç®¡ç†æŽ§åˆ¶å°ã€‚ -clear-events.tooltip =删除数æ®åº“中的所有事件。 -events.expiration.tooltip =设置事件的到期时间。过期事件将定期从数æ®åº“中删除。 -admin-events-settings =管ç†äº‹ä»¶è®¾ç½® -save-events =ä¿å­˜äº‹ä»¶ -admin.save-events.tooltip =如果已å¯ç”¨çš„管ç†äº‹ä»¶ä¿å­˜åˆ°æ•°æ®åº“,使事件å¯ç”¨äºŽç®¡ç†æŽ§åˆ¶å°ã€‚ -saved-types.tooltip =é…ç½®ä¿å­˜çš„事件类型。 -include-representation =包å«è¡¨ç¤º -include-representation.tooltip =包å«ç”¨äºŽåˆ›å»ºå’Œæ›´æ–°è¯·æ±‚çš„JSON表示。 -clear-admin-events.tooltip =删除数æ®åº“中的所有管ç†äº‹ä»¶ã€‚ -server-version =æœåŠ¡å™¨ç‰ˆæœ¬ -server-profile =æœåŠ¡å™¨é…置文件 -info =ä¿¡æ¯ -providers =æ供者 -server-time =æœåŠ¡å™¨æ—¶é—´ -server-uptime =æœåŠ¡å™¨æ­£å¸¸è¿è¡Œæ—¶é—´ -memory =内存 -total-memory =总内存 -free-memory =å¯ç”¨å†…å­˜ -used-memory =使用的内存 -system = System -current-working-directory =当å‰å·¥ä½œç›®å½• -java-version = Java版本 -java-vendor = Java供应商 -java-runtime = Javaè¿è¡Œæ—¶ -java-vm = Java VM -java-vm-version = Java虚拟机版本 -java-home = Java首页 -user-name =用户å -user-timezone =用户时区 -user-locale =用户区域设置 -system-encoding =ç³»ç»Ÿç¼–ç  -operating-system =æ“作系统 -os-architecture = OS体系结构 -spi = SPI -granted-roles =授予的角色 -granted-protocol-mappers =授予的å议映射器 -additional-grants =附加赠款 -consent-created-date =创建 -consent-last-updated-date =最åŽæ›´æ–° -revoke =撤消 -new-password =æ–°å¯†ç  -password-confirmation =密ç ç¡®è®¤ -reset-password =é‡ç½®å¯†ç  -credentials.temporary.tooltip =如果å¯ç”¨ï¼Œç”¨æˆ·éœ€è¦åœ¨ä¸‹æ¬¡ç™»å½•æ—¶æ›´æ”¹å¯†ç  -remove-totp =删除OTP -credentials.remove-totp.tooltip =为用户删除一次性密ç ç”Ÿæˆå™¨ã€‚ -reset-actions =å¤ä½æ“作 -credentials.reset-actions.tooltip =å‘é€ç”¨æˆ·é‡ç½®æ“作电å­é‚®ä»¶æ—¶è¦æ‰§è¡Œçš„æ“作的集åˆã€‚ “验è¯ç”µå­é‚®ä»¶â€å‘用户å‘é€ç”µå­é‚®ä»¶ä»¥éªŒè¯å…¶ç”µå­é‚®ä»¶åœ°å€ã€‚ “更新个人资料â€è¦æ±‚用户输入新的个人信æ¯ã€‚ “更新密ç â€è¦æ±‚用户输入新密ç ã€‚ 'é…ç½®OTP'需è¦è®¾ç½®ç§»åŠ¨å¯†ç ç”Ÿæˆå™¨ã€‚ -reset-actions-email =é‡ç½®æ“作电å­é‚®ä»¶ -send-email =å‘é€ç”µå­é‚®ä»¶ -credentials.reset-actions-email.tooltip =å‘具有嵌入链接的用户å‘é€ç”µå­é‚®ä»¶ã€‚å•å‡»é“¾æŽ¥å°†å…许用户执行é‡ç½®æ“作。他们ä¸å¿…在此之å‰ç™»å½•ã€‚例如,将æ“作设置为更新密ç ï¼Œå•å‡»æ­¤æŒ‰é’®ï¼Œç”¨æˆ·å°†æ— éœ€ç™»å½•å³å¯æ›´æ”¹å…¶å¯†ç ã€‚ -add-user =添加用户 -created-at =创建于 -user-enabled =用户已å¯ç”¨ -user-enabled.tooltip =ç¦ç”¨çš„用户无法登录。 -user-temporarily-locked =用户临时é”定 -user-temporarily-locked.tooltip =用户å¯èƒ½ç”±äºŽæ— æ³•ç™»å½•å¤ªå¤šæ¬¡è€Œè¢«é”定。 -unlock-user =解é”用户 -federation-link =è”åˆé“¾æŽ¥ -email-verified =电å­é‚®ä»¶éªŒè¯ -email-verified.tooltip =用户的电å­é‚®ä»¶ç»è¿‡éªŒè¯å—? -required-user-actions =必需的用户æ“作 -required-user-actions.tooltip =需è¦ç”¨æˆ·ç™»å½•æ—¶çš„æ“作。“验è¯ç”µå­é‚®ä»¶â€å‘用户å‘é€ç”µå­é‚®ä»¶ä»¥éªŒè¯å…¶ç”µå­é‚®ä»¶åœ°å€ã€‚ “更新个人资料â€è¦æ±‚用户输入新的个人信æ¯ã€‚ “更新密ç â€è¦æ±‚用户输入新密ç ã€‚ 'é…ç½®OTP'需è¦è®¾ç½®ç§»åŠ¨å¯†ç ç”Ÿæˆå™¨ã€‚ -locale =语言环境 -select-one.placeholder =选择一个... -impersonate =模拟 -impersonate-user =模拟用户 -impersonate-user.tooltip =以此用户身份登录。如果用户与您处于相åŒçš„领域,则在您以此用户身份登录之å‰ï¼Œå½“å‰çš„登录会è¯å°†è¢«æ³¨é”€ã€‚ -identity-provider-alias =身份æ供者别å -provider-user-id =æ供程åºç”¨æˆ·ID -provider-username =æ供者用户å -no-identity-provider-links-available =没有å¯ç”¨çš„身份æ供程åºé“¾æŽ¥ -group-membership =组æˆå‘˜èµ„æ ¼ -leave =离开 -group-membership.tooltip =组用户是的æˆå‘˜ã€‚选择列出的组,然åŽå•å‡»ç¦»å¼€æŒ‰é’®é€€å‡ºç»„。 -membership.available-groups.tooltip =用户å¯ä»¥åŠ å…¥çš„组。选择一个组,然åŽå•å‡»åŠ å…¥æŒ‰é’®ã€‚ -table-of-realm-users =表的Realm用户 -view-all-users =查看所有用户 -unlock-users =解é”用户 -no-users-available =没有å¯ç”¨çš„用户 -users.instruction =请输入æœç´¢ï¼Œæˆ–点击查看所有用户 -consents=åŒæ„ -started =开始 -logout-all-sessions =æ³¨é”€æ‰€æœ‰ä¼šè¯ -logout =注销 -new-name =æ–°å称 -ok =好的 -attributes =属性 -role-mappings =角色映射 -members =æˆå‘˜ -details =详细 -identity-provider-links =身份æ供者链接 -register-required-action =注册所需的æ“作 -gender =性别 -address = Address -phone =ç”µè¯ -profile-url =ä¸ªäººèµ„æ–™ç½‘å€ -picture-url =å›¾ç‰‡ç½‘å€ -website =网站 -import-keys-and-cert =导入密钥和è¯ä¹¦ -import-keys-and-cert.tooltip =上传客户端的密钥对和è¯ä¹¦ã€‚ -upload-keys =上传密钥 -download-keys-and-cert =下载密钥和è¯ä¹¦ -no-value-assigned.placeholder =未分é…值 -remove =删除 -no-group-members =没有组æˆå‘˜ -temporary =临时 -join =加入 -event-type =事件类型 -events-config =事件é…ç½® -event-listeners =事件监å¬å™¨ -login-events-settings =登录事件设置 -clear-events =清除事件 -saved-types =ä¿å­˜çš„类型 -clear-admin-events =清除管ç†äº‹ä»¶ -clear-changes =清除更改 -error =错误 - -# Authz -# Authz Common -authz-authorization =æŽˆæƒ -authz-owner =所有者 -authz-uri = URI -authz-scopes =范围 -authz-resource =èµ„æº -authz-resource-type =资æºç±»åž‹ -authz-resources =èµ„æº -authz-scope =范围 -authz-authz-scopes =授æƒèŒƒå›´ -authz-policies =ç­–ç•¥ -authz-permissions =æƒé™ -authz-evaluate =评估 -authz-icon-uri =图标URI -authz-icon-uri.tooltip =指å‘图标的URI。 -authz-select-scope =选择范围 -authz-select-resource =é€‰æ‹©èµ„æº -authz-associated-policies =å…³è”ç­–ç•¥ -authz-any-resource =ä»»ä½•èµ„æº -authz-any-scope =任何作用域 -authz-any-role =任何角色 -authz-policy-evaluation =政策评估 -authz-select-client =选择客户端 -authz-select-user =选择用户 -authz-entitlements =æƒåˆ© -authz-no-resources =æ— èµ„æº -authz-result = Result -authz-authorization-services-enabled =授æƒå·²å¯ç”¨ -authz-authorization-services-enabled.tooltip =å¯ç”¨/ç¦ç”¨å®¢æˆ·ç«¯çš„细粒度授æƒæ”¯æŒ -authz-required =必需 - -# Authz Settings -authz-import-config.tooltip =导入包å«æ­¤èµ„æºæœåŠ¡å™¨çš„授æƒè®¾ç½®çš„JSON文件。 - -authz-policy-enforcement-mode =ç­–ç•¥å¼ºåˆ¶æ¨¡å¼ -authz-policy-enforcement-mode.tooltip =策略强制模å¼æŒ‡ç¤ºåœ¨è¯„估授æƒè¯·æ±‚时如何强制执行策略。 “Enforcingâ€è¡¨ç¤ºå³ä½¿æ²¡æœ‰ä¸Žç»™å®šèµ„æºç›¸å…³è”的策略,也会默认拒ç»è¯·æ±‚。 “Permissiveâ€è¡¨ç¤ºå³ä½¿æ²¡æœ‰ä¸Žç»™å®šèµ„æºç›¸å…³è”的策略也å…许请求。 “ç¦ç”¨â€å®Œå…¨ç¦ç”¨ç­–略的评估,并å…许访问任何资æºã€‚ -authz-policy-enforcement-mode-enforcing =强制 -authz-policy-enforcement-mode-permissive = Permissive -authz-policy-enforcement-mode-disabled =ç¦ç”¨ - -authz-remote-resource-management =远程资æºç®¡ç† -authz-remote-resource-management.tooltip =资æºæœåŠ¡å™¨æ˜¯å¦åº”该远程管ç†èµ„æºï¼Ÿå¦‚果为false,则åªèƒ½ä»Žæ­¤ç®¡ç†æŽ§åˆ¶å°ç®¡ç†èµ„æºã€‚ - -authz-export-settings =导出设置 -authz-export-settings.tooltip =导出并下载此资æºæœåŠ¡å™¨çš„所有授æƒè®¾ç½®ã€‚ - -# Authz Resource List -authz-no-resources-available =æ— å¯ç”¨èµ„æºã€‚ -authz-no-scopes-assigned =未分é…范围。 -authz-no-type-defined =未定义类型。 -authz-no-permission-assigned =未分é…æƒé™ã€‚ -authz-no-policy-assigned =未分é…策略。 -authz-create-permission =创建æƒé™ - -# Authz Resource Detail -authz-add-resource =æ·»åŠ èµ„æº -authz-resource-name.tooltip =此资æºçš„唯一å称。 该å称å¯ç”¨äºŽå”¯ä¸€æ ‡è¯†èµ„æºï¼Œåœ¨æŸ¥è¯¢ç‰¹å®šèµ„æºæ—¶å¾ˆæœ‰ç”¨ã€‚ -authz-resource-owner.tooltip =此资æºçš„所有者。 -authz-resource-type.tooltip =此资æºçš„类型。 它å¯ä»¥ç”¨äºŽå¯¹å…·æœ‰ç›¸åŒç±»åž‹çš„ä¸åŒèµ„æºå®žä¾‹è¿›è¡Œåˆ†ç»„。 -authz-resource-uri.tooltip =也å¯ä»¥ç”¨äºŽå”¯ä¸€æ ‡è¯†æ­¤èµ„æºçš„URI。 -authz-resource-scopes.tooltip =与此资æºå…³è”的范围。 - -# Authz Scope List -authz-add-scope=Add Scope -authz-no-scopes-available=No scopes available. - -#Authzä½œç”¨åŸŸè¯¦ç»†ä¿¡æ¯ -authz-scope-name.tooltip =此作用域的唯一å称。该å称å¯ç”¨äºŽå”¯ä¸€æ ‡è¯†èŒƒå›´ï¼Œåœ¨æŸ¥è¯¢ç‰¹å®šèŒƒå›´æ—¶å¾ˆæœ‰ç”¨ã€‚ - -#Authz策略列表 -authz-all-types =所有类型 -authz-create-policy =创建策略 -authz-no-policies-available =没有å¯ç”¨çš„策略。 - -#Authzç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-policy-name.tooltip =此策略的å称。 -authz-policy-description.tooltip =此策略的æ述。 -authz-policy-logic =逻辑 -authz-policy-logic-positive =肯定 -authz-policy-logic-negative = Negative -authz-policy-logic.tooltip =逻辑决定如何进行策略决策。如果为“积æžâ€ï¼Œåˆ™åœ¨è¯„估本政策期间获得的效果(许å¯æˆ–æ‹’ç»ï¼‰å°†ç”¨äºŽæ‰§è¡Œå†³ç­–。如果为“å¦å®šâ€ï¼Œåˆ™æ‰€å¾—的效果将被å¦å®šï¼Œæ¢å¥è¯è¯´ï¼Œè®¸å¯è¯å˜ä¸ºæ‹’ç»ï¼Œå之亦然。 -authz-policy-apply-policy =应用策略 -authz-policy-apply-policy.tooltip =指定必须应用于此策略或æƒé™å®šä¹‰çš„范围的所有策略。 -authz-policy-decision-strategy =决策策略 -authz-policy-decision-strategy.tooltip =决策策略规定如何评估与给定æƒé™ç›¸å…³è”的策略以åŠå¦‚何获得最终决策。 “肯定â€æ„味ç€è‡³å°‘一个政策必须评估为积æžçš„决定,以使最终决定也是积æžçš„。 “一致â€æ˜¯æŒ‡æ‰€æœ‰æ”¿ç­–必须评估为一个积æžçš„决定,以使最终决定也是积æžçš„。 “共识â€æ„味ç€ç§¯æžå†³ç­–çš„æ•°é‡å¿…须大于负é¢å†³ç­–çš„æ•°é‡ã€‚如果正数和负数相åŒï¼Œæœ€ç»ˆå†³å®šå°†ä¸ºè´Ÿæ•°ã€‚ -authz-policy-decision-strategy-affirmative =肯定 -authz-policy-decision-strategy-unanimous =一致 -authz-policy-decision-strategy-consensus=共识 -authz-select-a-policy =选择一个策略 - -#Authzè§’è‰²ç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-add-role-policy =添加角色策略 -authz-no-roles-assigned =未分é…角色。 -authz-policy-role-realm-roles.tooltip =指定此策略å…许的* realm *角色。 -authz-policy-role-clients.tooltip =选择客户端以过滤å¯åº”用于此策略的客户端角色。 -authz-policy-role-client-roles.tooltip =指定此策略å…许的客户端角色。 - -#Authzç”¨æˆ·ç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-add-user-policy =添加用户策略 -authz-no-users-assigned =未分é…用户。 -authz-policy-user-users.tooltip =指定此策略å…许哪些用户。 - -#Authzæ—¶é—´ç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-add-time-policy =添加时间策略 -authz-policy-time-not-before.tooltip =定义ä¸å¾—授予策略的时间。仅当当å‰æ—¥æœŸ/时间晚于或等于此值时æ‰è¢«æŽˆäºˆã€‚ -authz-policy-time-not-on-after =ä¸å¼€æˆ–ä¹‹åŽ -authz-policy-time-not-on-after.tooltip =定义ä¸èƒ½æŽˆäºˆç­–略的时间。仅当当å‰æ—¥æœŸ/时间在此值之å‰æˆ–之å‰æ—¶æ‰è¢«æŽˆäºˆã€‚ -authz-policy-time-day-month =日期 -authz-policy-time-day-month.tooltip =定义必须授予策略的月份日期。您还å¯ä»¥é€šè¿‡å¡«å……第二个字段æ¥æ供范围。在这ç§æƒ…况下,åªæœ‰å½“月的当天介于或等于您æ供的两个值之åŽï¼Œæ‰ä¼šæŽˆäºˆæƒé™ã€‚ -authz-policy-time-month = month -authz-policy-time-month.tooltip =定义必须授予策略的月份。您还å¯ä»¥é€šè¿‡å¡«å……第二个字段æ¥æ供范围。在这ç§æƒ…况下,仅当当å‰æœˆä»½ä»‹äºŽæˆ–等于您æ供的两个值之间时æ‰ä¼šæŽˆäºˆæƒé™ã€‚ -authz-policy-time-year =å¹´ -authz-policy-time-year.tooltip =定义策略必须授予的年份。您还å¯ä»¥é€šè¿‡å¡«å……第二个字段æ¥æ供范围。在这ç§æƒ…况下,仅当当å‰å¹´ä»½ä»‹äºŽæˆ–等于您æ供的两个值之间时æ‰ä¼šæŽˆäºˆæƒé™ã€‚ -authz-policy-time-hour =å°æ—¶ -authz-policy-time-hour.tooltip =定义策略必须被授予的å°æ—¶ã€‚您还å¯ä»¥é€šè¿‡å¡«å……第二个字段æ¥æ供范围。在这ç§æƒ…况下,åªæœ‰å½“å‰å°æ—¶ä»‹äºŽæˆ–等于您æ供的两个值之间时æ‰ä¼šæŽˆäºˆæƒé™ã€‚ -authz-policy-time-minute =分钟 -authz-policy-time-minute.tooltip =定义策略必须被授予的分钟。您还å¯ä»¥é€šè¿‡å¡«å……第二个字段æ¥æ供范围。在这ç§æƒ…况下,仅当当å‰åˆ†é’Ÿä»‹äºŽæˆ–等于您æ供的两个值之间时æ‰ä¼šæŽˆäºˆæƒé™ã€‚ - -#Authz JSç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-add-js-policy =添加JavaScriptç­–ç•¥ -authz-policy-js-code =ä»£ç  -authz-policy-js-code.tooltip =æ供此策略æ¡ä»¶çš„JavaScript代ç ã€‚ - - -#Authzèšåˆç­–ç•¥è¯¦ç»†ä¿¡æ¯ -authz-aggregated=èšåˆ -authz-add-aggregation-policy =添加èšåˆç­–ç•¥ - -#Authzæƒé™åˆ—表 -authz-no-permissions-available =没有å¯ç”¨çš„æƒé™ã€‚ - -#Authzæƒé™è¯¦ç»†ä¿¡æ¯ -authz-permission-name.tooltip =æ­¤æƒé™çš„å称。 -authz-permission-description.tooltip =æ­¤æƒé™çš„æ述。 - -#Authz资æºè®¸å¯è¯¦ç»†ä¿¡æ¯ -authz-add-resource-permission =添加资æºæƒé™ -authz-permission-resource-apply-to-resource-type =应用于资æºç±»åž‹ -authz-permission-resource-apply-to-resource-type.tooltip =指定是å¦å°†æ­¤æƒé™åº”用于具有给定类型的所有资æºã€‚ 在这ç§æƒ…况下,将对给定资æºç±»åž‹çš„所有实例评估此æƒé™ã€‚ -authz-permission-resource-resource.tooltip =指定此æƒé™å¿…须应用于特定资æºå®žä¾‹ã€‚ -authz-permission-resource-type.tooltip =指定此æƒé™å¿…须应用于给定类型的所有资æºå®žä¾‹ã€‚ - -#Authz Scope Permission Detail -authz-add-scope-permission =添加范围æƒé™ -authz-permission-scope-resource.tooltip =将范围é™åˆ¶ä¸ºä¸Žæ‰€é€‰èµ„æºå…³è”的范围。 如果未选择,则所有范围都å¯ç”¨ã€‚ -authz-permission-scope-scope.tooltip =指定此æƒé™å¿…须应用于一个或多个作用域。 - -# Authz Evaluation -authz-evaluation-identity-information =èº«ä»½ä¿¡æ¯ -authz-evaluation-identity-information.tooltip =用于é…置在评估策略时将使用的身份信æ¯çš„å¯ç”¨é€‰é¡¹ã€‚ -authz-evaluation-client.tooltip =选择进行此授æƒè¯·æ±‚的客户端。如果未æ供,授æƒè¯·æ±‚将根æ®æ‚¨æ‰€åœ¨çš„客户端完æˆã€‚ -authz-evaluation-user.tooltip =选择一个用户,其身份将被用于查询æœåŠ¡å™¨çš„æƒé™ã€‚ -authz-evaluation-role.tooltip =选择è¦ä¸Žæ‰€é€‰ç”¨æˆ·å…³è”的角色。 -authz-evaluation-new =新评估 -authz-evaluation-re-evaluate =é‡æ–°è¯„ä¼° -authz-evaluation-previous =以å‰çš„评估 -authz-evaluation-contextual-info =ä¸Šä¸‹æ–‡ä¿¡æ¯ -authz-evaluation-contextual-info.tooltip =用于é…置在评估策略时将使用的任何上下文信æ¯çš„å¯ç”¨é€‰é¡¹ã€‚ -authz-evaluation-contextual-attributes =上下文属性 -authz-evaluation-contextual-attributes.tooltip =由正在è¿è¡Œçš„环境或执行上下文æ供的任何属性。 -authz-evaluation-permissions.tooltip =用于é…置将应用策略的æƒé™çš„å¯ç”¨é€‰é¡¹ã€‚ -authz-evaluation-evaluate =评估 -authz-evaluation-any-resource-with-scopes =ä»»ä½•å…·æœ‰èŒƒå›´çš„èµ„æº -authz-evaluation-no-result =无法获å–给定授æƒè¯·æ±‚的任何结果。检查所æ供的资æºæˆ–范围是å¦ä¸Žä»»ä½•ç­–略相关è”。 -authz-evaluation-no-policies-resource =未找到此资æºçš„策略。 -authz-evaluation-result.tooltip =æ­¤æƒé™è¯·æ±‚的总体结果。 -authz-evaluation-scopes.tooltip =å…许的作用域列表。 -authz-evaluation-policies.tooltip =有关评估哪些策略åŠå…¶å†³ç­–的详细信æ¯ã€‚ -authz-evaluation-authorization-data =å“应 -authz-evaluation-authorization-data.tooltip =表示由于处ç†æŽˆæƒè¯·æ±‚而æºå¸¦æŽˆæƒæ•°æ®çš„令牌。这个表示基本上是Keycloakå‘客户端请求æƒé™çš„问题。针对根æ®å½“å‰æŽˆæƒè¯·æ±‚授予的æƒé™ï¼Œæ£€æŸ¥â€œæŽˆæƒâ€å£°æ˜Žã€‚ -authz-show-authorization-data =显示授æƒæ•°æ® - -keys=秘钥 -all=所有 -status=çŠ¶æ€ -keystore=钥匙链 -keystores= 钥匙链 -add-keystore=添加 钥匙链 -add-keystore.placeholder=添加 钥匙链... -view=查看 -active=活跃 - -Sunday=星期天 -Monday=星期一 -Tuesday=星期二 -Wednesday=星期三 -Thursday=星期四 -Friday=星期五 -Saturday=星期六 - -user-storage-cache-policy=缓存设置 -userStorage.cachePolicy=缓存策略 -userStorage.cachePolicy.option.DEFAULT=默认 -userStorage.cachePolicy.option.EVICT_WEEKLY=EVICT_WEEKLY -userStorage.cachePolicy.option.EVICT_DAILY=EVICT_DAILY -userStorage.cachePolicy.option.MAX_LIFESPAN=MAX_LIFESPAN -userStorage.cachePolicy.option.NO_CACHE=NO_CACHE -userStorage.cachePolicy.tooltip=这个存储æºçš„缓存策略. '默认' 是全局的默认缓存策略。'EVICT_DAILY'是æ¯å¤©ç‰¹å®šæ—¶é—´ç¼“存会失效. 'EVICT_WEEKLY'是æ¯å‘¨ç¬¬n天的特定时间缓存会失效. 'MAX-LIFESPAN' 是指缓存æ¡ç›®çš„最大生命周期 -userStorage.cachePolicy.evictionDay=Eviction Day -userStorage.cachePolicy.evictionDay.tooltip=æ¯å‘¨ç¬¬n天缓存失效 -userStorage.cachePolicy.evictionHour=Eviction Hour -userStorage.cachePolicy.evictionHour.tooltip=一天中几点缓存失效 -userStorage.cachePolicy.evictionMinute=Eviction Minute -userStorage.cachePolicy.evictionMinute.tooltip=缓存失效的分钟 -userStorage.cachePolicy.maxLifespan=最大生命周期 -userStorage.cachePolicy.maxLifespan.tooltip=以微秒计数的最大生命周期 -user-origin-link=å­˜å‚¨æº - -disable=关闭 -disableable-credential-types=å¯ä»¥å…³é—­çš„类型 -credentials.disableable.tooltip=å¯ä»¥å…³é—­çš„密ç ç±»åž‹åˆ—表 -disable-credential-types=关闭密ç ç±»åž‹ -credentials.disable.tooltip=点击按钮关闭密ç ç±»åž‹ -credential-types=密ç ç±»åž‹ -manage-user-password=管ç†å¯†ç  -disable-credentials=å…³é—­å¯†ç  -credential-reset-actions=é‡ç½®å¯†ç  -ldap-mappers=LDAP 映射器 -create-ldap-mapper=创建 LDAP 映射 -loginWithEmailAllowed=使用电å­é‚®ä»¶ç™»å½• -duplicateEmailsAllowed=é‡å¤çš„邮件 -hidden=éšè— - - - - - - diff --git a/deps/keycloak/themes/base/admin/messages/messages_ca.properties b/deps/keycloak/themes/base/admin/messages/messages_ca.properties deleted file mode 100644 index 50aa0a007..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_ca.properties +++ /dev/null @@ -1,8 +0,0 @@ -invalidPasswordHistoryMessage=Contrasenya incorrecta: no pot ser igual a cap de les \u00FAltimes {0} contrasenyes. -invalidPasswordMinDigitsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres num\u00E9ricos. -invalidPasswordMinLengthMessage=Contrasenya incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinLowerCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres min\u00FAscules. -invalidPasswordMinSpecialCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} car\u00E0cters especials. -invalidPasswordMinUpperCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres maj\u00FAscules. -invalidPasswordNotUsernameMessage=Contrasenya incorrecta: no pot ser igual al nom d''usuari. -invalidPasswordRegexPatternMessage=Contrasenya incorrecta: no compleix l''expressi\u00F3 regular. diff --git a/deps/keycloak/themes/base/admin/messages/messages_de.properties b/deps/keycloak/themes/base/admin/messages/messages_de.properties deleted file mode 100644 index 3902300ea..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_de.properties +++ /dev/null @@ -1,29 +0,0 @@ -invalidPasswordMinLengthMessage=Ung\u00FCltiges Passwort: muss mindestens {0} Zeichen beinhalten. -invalidPasswordMinLowerCaseCharsMessage=Ung\u00FCltiges Passwort: muss mindestens {0} Kleinbuchstaben beinhalten. -invalidPasswordMinDigitsMessage=Ung\u00FCltiges Passwort: muss mindestens {0} Ziffern beinhalten. -invalidPasswordMinUpperCaseCharsMessage=Ung\u00FCltiges Passwort: muss mindestens {0} Gro\u00DFbuchstaben beinhalten. -invalidPasswordMinSpecialCharsMessage=Ung\u00FCltiges Passwort: muss mindestens {0} Sonderzeichen beinhalten. -invalidPasswordNotUsernameMessage=Ung\u00FCltiges Passwort: darf nicht identisch mit dem Benutzernamen sein. -invalidPasswordNotEmailMessage=Ung\u00FCltiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein. -invalidPasswordRegexPatternMessage=Ung\u00FCltiges Passwort: stimmt nicht mit Regex-Muster \u00FCberein. -invalidPasswordHistoryMessage=Ung\u00FCltiges Passwort: darf nicht identisch mit einem der letzten {0} Passw\u00F6rter sein. -invalidPasswordBlacklistedMessage=Ung\u00FCltiges Passwort: Passwort ist zu bekannt und auf der schwarzen Liste. -invalidPasswordGenericMessage=Ung\u00FCltiges Passwort: neues Passwort erf\u00FCllt die Passwort-Anforderungen nicht. - -#ldapErrorInvalidCustomFilter=Custom configured LDAP filter does not start with "(" or does not end with ")". -#ldapErrorConnectionTimeoutNotNumber=Connection Timeout must be a number -#ldapErrorReadTimeoutNotNumber=Read Timeout must be a number -#ldapErrorMissingClientId=Client ID needs to be provided in config when Realm Roles Mapping is not used. -#ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Not possible to preserve group inheritance and use UID membership type together. -#ldapErrorCantWriteOnlyForReadOnlyLdap=Can't set write only when LDAP provider mode is not WRITABLE -#ldapErrorCantWriteOnlyAndReadOnly=Can't set write-only and read-only together - -#clientRedirectURIsFragmentError=Redirect URIs must not contain an URI fragment -#clientRootURLFragmentError=Root URL must not contain an URL fragment - -#pairwiseMalformedClientRedirectURI=Client contained an invalid redirect URI. -#pairwiseClientRedirectURIsMissingHost=Client redirect URIs must contain a valid host component. -#pairwiseClientRedirectURIsMultipleHosts=Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components. -#pairwiseMalformedSectorIdentifierURI=Malformed Sector Identifier URI. -#pairwiseFailedToGetRedirectURIs=Failed to get redirect URIs from the Sector Identifier URI. -#pairwiseRedirectURIsMismatch=Client redirect URIs does not match redirect URIs fetched from the Sector Identifier URI. diff --git a/deps/keycloak/themes/base/admin/messages/messages_en.properties b/deps/keycloak/themes/base/admin/messages/messages_en.properties deleted file mode 100644 index 94bbb7d82..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_en.properties +++ /dev/null @@ -1,57 +0,0 @@ -invalidPasswordMinLengthMessage=Invalid password: minimum length {0}. -invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters. -invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits. -invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters. -invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters. -invalidPasswordNotUsernameMessage=Invalid password: must not be equal to the username. -invalidPasswordNotEmailMessage=Invalid password: must not be equal to the email. -invalidPasswordRegexPatternMessage=Invalid password: fails to match regex pattern(s). -invalidPasswordHistoryMessage=Invalid password: must not be equal to any of last {0} passwords. -invalidPasswordBlacklistedMessage=Invalid password: password is blacklisted. -invalidPasswordGenericMessage=Invalid password: new password does not match password policies. - -ldapErrorInvalidCustomFilter=Custom configured LDAP filter does not start with "(" or does not end with ")". -ldapErrorConnectionTimeoutNotNumber=Connection Timeout must be a number -ldapErrorReadTimeoutNotNumber=Read Timeout must be a number -ldapErrorMissingClientId=Client ID needs to be provided in config when Realm Roles Mapping is not used. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Not possible to preserve group inheritance and use UID membership type together. -ldapErrorCantWriteOnlyForReadOnlyLdap=Can not set write only when LDAP provider mode is not WRITABLE -ldapErrorCantWriteOnlyAndReadOnly=Can not set write-only and read-only together -ldapErrorCantEnableStartTlsAndConnectionPooling=Can not enable both StartTLS and connection pooling. -ldapErrorCantEnableUnsyncedAndImportOff=Can not disable Importing users when LDAP provider mode is UNSYNCED -ldapErrorMissingGroupsPathGroup=Groups path group does not exist - please create the group on specified path first - -clientRedirectURIsFragmentError=Redirect URIs must not contain an URI fragment -clientRootURLFragmentError=Root URL must not contain an URL fragment -clientRootURLIllegalSchemeError=Root URL uses an illegal scheme -clientBaseURLIllegalSchemeError=Base URL uses an illegal scheme -backchannelLogoutUrlIllegalSchemeError=Backchannel logout URL uses an illegal scheme -clientRedirectURIsIllegalSchemeError=A redirect URI uses an illegal scheme -clientBaseURLInvalid=Base URL is not a valid URL -clientRootURLInvalid=Root URL is not a valid URL -clientRedirectURIsInvalid=A redirect URI is not a valid URI -backchannelLogoutUrlIsInvalid=Backchannel logout URL is not a valid URL - - -pairwiseMalformedClientRedirectURI=Client contained an invalid redirect URI. -pairwiseClientRedirectURIsMissingHost=Client redirect URIs must contain a valid host component. -pairwiseClientRedirectURIsMultipleHosts=Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components. -pairwiseMalformedSectorIdentifierURI=Malformed Sector Identifier URI. -pairwiseFailedToGetRedirectURIs=Failed to get redirect URIs from the Sector Identifier URI. -pairwiseRedirectURIsMismatch=Client redirect URIs does not match redirect URIs fetched from the Sector Identifier URI. - -error-invalid-value=Invalid value. -error-invalid-blank=Please specify value. -error-empty=Please specify value. -error-invalid-length=Attribute {0} must have a length between {1} and {2}. -error-invalid-email=Invalid email address. -error-invalid-number=Invalid number. -error-number-out-of-range=Attribute {0} must be a number between {1} and {2}. -error-pattern-no-match=Invalid value. -error-invalid-uri=Invalid URL. -error-invalid-uri-scheme=Invalid URL scheme. -error-invalid-uri-fragment=Invalid URL fragment. -error-user-attribute-required=Please specify attribute {0}. -error-invalid-date=Invalid date. - -error-user-attribute-read-only=Attribute {0} is read only. \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/messages/messages_es.properties b/deps/keycloak/themes/base/admin/messages/messages_es.properties deleted file mode 100644 index 70e3d7352..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_es.properties +++ /dev/null @@ -1,8 +0,0 @@ -invalidPasswordMinLengthMessage=Contrase\u00F1a incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinLowerCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras min\u00FAsculas. -invalidPasswordMinDigitsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres num\u00E9ricos. -invalidPasswordMinUpperCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras may\u00FAsculas. -invalidPasswordMinSpecialCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres especiales. -invalidPasswordNotUsernameMessage=Contrase\u00F1a incorrecta: no puede ser igual al nombre de usuario. -invalidPasswordRegexPatternMessage=Contrase\u00F1a incorrecta: no cumple la expresi\u00F3n regular. -invalidPasswordHistoryMessage=Contrase\u00F1a incorrecta: no puede ser igual a ninguna de las \u00FAltimas {0} contrase\u00F1as. diff --git a/deps/keycloak/themes/base/admin/messages/messages_fr.properties b/deps/keycloak/themes/base/admin/messages/messages_fr.properties deleted file mode 100644 index c4a021642..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_fr.properties +++ /dev/null @@ -1,8 +0,0 @@ -invalidPasswordMinLengthMessage=Mot de passe invalide : longueur minimale requise de {0}. -invalidPasswordMinLowerCaseCharsMessage=Mot de passe invalide : doit contenir au moins {0} lettre(s) en minuscule. -invalidPasswordMinDigitsMessage=Mot de passe invalide : doit contenir au moins {0} chiffre(s). -invalidPasswordMinUpperCaseCharsMessage=Mot de passe invalide : doit contenir au moins {0} lettre(s) en majuscule. -invalidPasswordMinSpecialCharsMessage=Mot de passe invalide : doit contenir au moins {0} caract\u00e8re(s) sp\u00e9ciaux. -invalidPasswordNotUsernameMessage=Mot de passe invalide : ne doit pas \u00eatre identique au nom d''utilisateur. -invalidPasswordRegexPatternMessage=Mot de passe invalide : ne valide pas l''expression rationnelle. -invalidPasswordHistoryMessage=Mot de passe invalide : ne doit pas \u00eatre \u00e9gal aux {0} derniers mot de passe. diff --git a/deps/keycloak/themes/base/admin/messages/messages_it.properties b/deps/keycloak/themes/base/admin/messages/messages_it.properties deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/messages/messages_ja.properties b/deps/keycloak/themes/base/admin/messages/messages_ja.properties deleted file mode 100644 index 1ba814b57..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_ja.properties +++ /dev/null @@ -1,30 +0,0 @@ -# encoding: utf-8 -invalidPasswordMinLengthMessage=無効ãªãƒ‘スワード: 最å°{0}ã®é•·ã•ãŒå¿…è¦ã§ã™ã€‚ -invalidPasswordMinLowerCaseCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®å°æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinDigitsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®æ•°å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinUpperCaseCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®å¤§æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinSpecialCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordNotUsernameMessage=無効ãªãƒ‘スワード: ユーザーåã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordRegexPatternMessage=無効ãªãƒ‘スワード: æ­£è¦è¡¨ç¾ãƒ‘ターンã¨ä¸€è‡´ã—ã¾ã›ã‚“。 -invalidPasswordHistoryMessage=無効ãªãƒ‘スワード: 最近ã®{0}パスワードã®ã„ãšã‚Œã‹ã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordBlacklistedMessage=無効ãªãƒ‘スワード: パスワードãŒãƒ–ラックリストã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordGenericMessage=無効ãªãƒ‘スワード: æ–°ã—ã„パスワードã¯ãƒ‘スワード・ãƒãƒªã‚·ãƒ¼ã¨ä¸€è‡´ã—ã¾ã›ã‚“。 - -ldapErrorInvalidCustomFilter=LDAPフィルターã®ã‚«ã‚¹ã‚¿ãƒ è¨­å®šãŒã€ã€Œ(ã€ã‹ã‚‰é–‹å§‹ã¾ãŸã¯ã€Œ)ã€ã§çµ‚了ã¨ãªã£ã¦ã„ã¾ã›ã‚“。 -ldapErrorConnectionTimeoutNotNumber=接続タイムアウトã¯æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ -ldapErrorReadTimeoutNotNumber=読ã¿å–りタイムアウトã¯æ•°å­—ã§ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“ -ldapErrorMissingClientId=レルムロール・マッピングを使用ã—ãªã„å ´åˆã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆIDã¯è¨­å®šå†…ã§æä¾›ã•ã‚Œã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=グループã®ç¶™æ‰¿ã‚’維æŒã™ã‚‹ã“ã¨ã¨ã€UIDメンãƒãƒ¼ã‚·ãƒƒãƒ—・タイプを使用ã™ã‚‹ã“ã¨ã¯åŒæ™‚ã«ã§ãã¾ã›ã‚“。 -ldapErrorCantWriteOnlyForReadOnlyLdap=LDAPプロãƒã‚¤ãƒ€ãƒ¼ãƒ»ãƒ¢ãƒ¼ãƒ‰ãŒWRITABLEã§ã¯ãªã„å ´åˆã¯ã€write onlyを設定ã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -ldapErrorCantWriteOnlyAndReadOnly=write-onlyã¨read-onlyを一緒ã«è¨­å®šã™ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -ldapErrorCantEnableStartTlsAndConnectionPooling=StartTLSã¨æŽ¥ç¶šãƒ—ーリングã®ä¸¡æ–¹ã‚’有効ã«ã§ãã¾ã›ã‚“。 - -clientRedirectURIsFragmentError=リダイレクトURIã«URIフラグメントをå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -clientRootURLFragmentError=ルートURLã«URLフラグメントをå«ã‚ã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。 - -pairwiseMalformedClientRedirectURI=クライアントã«ç„¡åŠ¹ãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIãŒå«ã¾ã‚Œã¦ã„ã¾ã—ãŸã€‚ -pairwiseClientRedirectURIsMissingHost=クライアントã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã«ã¯æœ‰åŠ¹ãªãƒ›ã‚¹ãƒˆãƒ»ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆãŒå«ã¾ã‚Œã¦ã„ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -pairwiseClientRedirectURIsMultipleHosts=設定ã•ã‚ŒãŸã‚»ãƒ¬ã‚¯ã‚¿ãƒ¼è­˜åˆ¥å­URIãŒãªã„å ´åˆã¯ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã¯è¤‡æ•°ã®ãƒ›ã‚¹ãƒˆãƒ»ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã‚’å«ã‚€ã“ã¨ã¯ã§ãã¾ã›ã‚“。 -pairwiseMalformedSectorIdentifierURI=ä¸æ­£ãªã‚»ãƒ¬ã‚¯ã‚¿ãƒ¼è­˜åˆ¥å­URIã§ã™ã€‚ -pairwiseFailedToGetRedirectURIs=セクター識別å­URIã‹ã‚‰ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -pairwiseRedirectURIsMismatch=クライアントã®ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã¯ã€ã‚»ã‚¯ã‚¿ãƒ¼è­˜åˆ¥å­URIã‹ã‚‰ãƒ•ã‚§ãƒƒãƒã•ã‚ŒãŸãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã¨ä¸€è‡´ã—ã¾ã›ã‚“。 diff --git a/deps/keycloak/themes/base/admin/messages/messages_lt.properties b/deps/keycloak/themes/base/admin/messages/messages_lt.properties deleted file mode 100644 index 76885b76e..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_lt.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -invalidPasswordMinLengthMessage=Per trumpas slaptažodis: mažiausias ilgis {0}. -invalidPasswordMinLowerCaseCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} mažąjÄ… raidÄ™. -invalidPasswordMinDigitsMessage=Neteisingas slaptažodis: privaloma įvesti {0} skaitmenį. -invalidPasswordMinUpperCaseCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} didžiÄ…jÄ… raidÄ™. -invalidPasswordMinSpecialCharsMessage=Neteisingas slaptažodis: privaloma įvesti {0} specialų simbolį. -invalidPasswordNotUsernameMessage=Neteisingas slaptažodis: slaptažodis negali sutapti su naudotojo vardu. -invalidPasswordRegexPatternMessage=Neteisingas slaptažodis: slaptažodis netenkina regex taisyklÄ—s(ių). -invalidPasswordHistoryMessage=Neteisingas slaptažodis: slaptažodis negali sutapti su prieÅ¡ tai buvusiais {0} slaptažodžiais. - -ldapErrorInvalidCustomFilter=SukonfigÅ«ruotas LDAP filtras neprasideda "(" ir nesibaigia ")" simboliais. -ldapErrorMissingClientId=Privaloma nurodyti kliento ID kai srities rolių susiejimas nÄ—ra nenaudojamas. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Grupių paveldÄ—jimo ir UID narystÄ—s tipas kartu negali bÅ«ti naudojami. -ldapErrorCantWriteOnlyForReadOnlyLdap=Negalima nustatyti raÅ¡ymo rėžimo kuomet LDAP teikÄ—jo rėžimas ne WRITABLE -ldapErrorCantWriteOnlyAndReadOnly=Negalima nustatyti tik raÅ¡yti ir tik skaityti kartu - -clientRedirectURIsFragmentError=Nurodykite URI fragmentÄ…, kurio negali bÅ«ti peradresuojamuose URI adresuose -clientRootURLFragmentError=Nurodykite URL fragmentÄ…, kurio negali bÅ«ti Å¡akniniame URL adrese - -pairwiseMalformedClientRedirectURI=Klientas pateikÄ— neteisingÄ… nukreipimo nuorodÄ…. -pairwiseClientRedirectURIsMissingHost=Kliento nukreipimo nuorodos privalo bÅ«ti nurodytos su serverio vardo komponentu. -pairwiseClientRedirectURIsMultipleHosts=Kuomet nesukonfigÅ«ruotas sektoriaus identifikatoriaus URL, kliento nukreipimo nuorodos privalo talpinti ne daugiau kaip vienÄ… skirtingÄ… serverio vardo komponentÄ…. -pairwiseMalformedSectorIdentifierURI=Neteisinga sektoriaus identifikatoriaus URI. -pairwiseFailedToGetRedirectURIs=Nepavyko gauti nukreipimo nuorodų iÅ¡ sektoriaus identifikatoriaus URI. -pairwiseRedirectURIsMismatch=Kliento nukreipimo nuoroda neatitinka nukreipimo nuorodų iÅ¡ sektoriaus identifikatoriaus URI. \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/messages/messages_nl.properties b/deps/keycloak/themes/base/admin/messages/messages_nl.properties deleted file mode 100644 index 4a04a5249..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_nl.properties +++ /dev/null @@ -1,27 +0,0 @@ -invalidPasswordMinLengthMessage=Ongeldig wachtwoord: de minimale lengte is {0} karakters. -invalidPasswordMinLowerCaseCharsMessage=Ongeldig wachtwoord: het moet minstens {0} kleine letters bevatten. -invalidPasswordMinDigitsMessage=Ongeldig wachtwoord: het moet minstens {0} getallen bevatten. -invalidPasswordMinUpperCaseCharsMessage=Ongeldig wachtwoord: het moet minstens {0} hoofdletters bevatten. -invalidPasswordMinSpecialCharsMessage=Ongeldig wachtwoord: het moet minstens {0} speciale karakters bevatten. -invalidPasswordNotUsernameMessage=Ongeldig wachtwoord: het mag niet overeenkomen met de gebruikersnaam. -invalidPasswordRegexPatternMessage=Ongeldig wachtwoord: het voldoet niet aan het door de beheerder ingestelde patroon. -invalidPasswordHistoryMessage=Ongeldig wachtwoord: het mag niet overeen komen met een van de laatste {0} wachtwoorden. -invalidPasswordGenericMessage=Ongeldig wachtwoord: het nieuwe wachtwoord voldoet niet aan het wachtwoordbeleid. - -ldapErrorInvalidCustomFilter=LDAP filter met aangepaste configuratie start niet met "(" of eindigt niet met ")". -ldapErrorConnectionTimeoutNotNumber=Verbindingstimeout moet een getal zijn -ldapErrorReadTimeoutNotNumber=Lees-timeout moet een getal zijn -ldapErrorMissingClientId=Client ID moet ingesteld zijn als Realm Roles Mapping niet gebruikt wordt. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Kan groepsovererving niet behouden bij UID-lidmaatschapstype. -ldapErrorCantWriteOnlyForReadOnlyLdap=Alleen-schrijven niet mogelijk als LDAP provider mode niet WRITABLE is -ldapErrorCantWriteOnlyAndReadOnly=Alleen-schrijven en alleen-lezen mogen niet tegelijk ingesteld zijn - -clientRedirectURIsFragmentError=Redirect URIs mogen geen URI fragment bevatten -clientRootURLFragmentError=Root URL mag geen URL fragment bevatten - -pairwiseMalformedClientRedirectURI=Client heeft een ongeldige redirect URI. -pairwiseClientRedirectURIsMissingHost=Client redirect URIs moeten een geldige host-component bevatten. -pairwiseClientRedirectURIsMultipleHosts=Zonder een geconfigureerde Sector Identifier URI mogen client redirect URIs niet meerdere host componenten hebben. -pairwiseMalformedSectorIdentifierURI=Onjuist notatie in Sector Identifier URI. -pairwiseFailedToGetRedirectURIs=Kon geen redirect URIs verkrijgen van de Sector Identifier URI. -pairwiseRedirectURIsMismatch=Client redirect URIs komen niet overeen met redict URIs ontvangen van de Sector Identifier URI. diff --git a/deps/keycloak/themes/base/admin/messages/messages_no.properties b/deps/keycloak/themes/base/admin/messages/messages_no.properties deleted file mode 100644 index 43cb61df0..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_no.properties +++ /dev/null @@ -1,14 +0,0 @@ -invalidPasswordMinLengthMessage=Ugyldig passord: minimum lengde {0}. -invalidPasswordMinLowerCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minst {0} sm\u00E5 bokstaver. -invalidPasswordMinDigitsMessage=Ugyldig passord: m\u00E5 inneholde minst {0} sifre. -invalidPasswordMinUpperCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minst {0} store bokstaver. -invalidPasswordMinSpecialCharsMessage=Ugyldig passord: m\u00E5 inneholde minst {0} spesialtegn. -invalidPasswordNotUsernameMessage=Ugyldig passord: kan ikke v\u00E6re likt brukernavn. -invalidPasswordRegexPatternMessage=Ugyldig passord: tilfredsstiller ikke kravene for passord-m\u00F8nster. -invalidPasswordHistoryMessage=Ugyldig passord: kan ikke v\u00E6re likt noen av de {0} foreg\u00E5ende passordene. - -ldapErrorInvalidCustomFilter=Tilpasset konfigurasjon av LDAP-filter starter ikke med "(" eller slutter ikke med ")". -ldapErrorMissingClientId=KlientID m\u00E5 v\u00E6re tilgjengelig i config n\u00E5r sikkerhetsdomenerollemapping ikke brukes. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Ikke mulig \u00E5 bevare gruppearv og samtidig bruke UID medlemskapstype. -ldapErrorCantWriteOnlyForReadOnlyLdap=Kan ikke sette write-only n\u00E5r LDAP leverand\u00F8r-modus ikke er WRITABLE -ldapErrorCantWriteOnlyAndReadOnly=Kan ikke sette b\u00E5de write-only og read-only diff --git a/deps/keycloak/themes/base/admin/messages/messages_pl.properties b/deps/keycloak/themes/base/admin/messages/messages_pl.properties deleted file mode 100644 index dd55d697f..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_pl.properties +++ /dev/null @@ -1 +0,0 @@ -# encoding: UTF-8 diff --git a/deps/keycloak/themes/base/admin/messages/messages_pt_BR.properties b/deps/keycloak/themes/base/admin/messages/messages_pt_BR.properties deleted file mode 100644 index b26e46508..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_pt_BR.properties +++ /dev/null @@ -1,18 +0,0 @@ -#encoding: utf-8 -invalidPasswordMinLengthMessage=Senha inválida: deve conter ao menos {0} caracteres. -invalidPasswordMinLowerCaseCharsMessage=Senha inválida: deve conter ao menos {0} caracteres minúsculos. -invalidPasswordMinDigitsMessage=Senha inválida: deve conter ao menos {0} digitos numéricos. -invalidPasswordMinUpperCaseCharsMessage=Senha inválida: deve conter ao menos {0} caracteres maiúsculos. -invalidPasswordMinSpecialCharsMessage=Senha inválida: deve conter ao menos {0} caracteres especiais. -invalidPasswordNotUsernameMessage=Senha inválida: não deve ser igual ao nome de usuário. -invalidPasswordRegexPatternMessage=Senha inválida: falha ao passar por padrões. -invalidPasswordHistoryMessage=Senha inválida: não deve ser igual às últimas {0} senhas. - -ldapErrorInvalidCustomFilter=Filtro LDAP não inicia com "(" ou não termina com ")". -ldapErrorMissingClientId=ID do cliente precisa ser definido na configuração quando mapeamentos de Roles do Realm não é utilizado. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Não é possível preservar herança de grupos e usar tipo de associação de UID ao mesmo tempo. -ldapErrorCantWriteOnlyForReadOnlyLdap=Não é possível definir modo de somente escrita quando o provedor LDAP não suporta escrita -ldapErrorCantWriteOnlyAndReadOnly=Não é possível definir somente escrita e somente leitura ao mesmo tempo - -clientRedirectURIsFragmentError=URIs de redirecionamento não podem conter fragmentos -clientRootURLFragmentError=URL raiz não pode conter fragmentos \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/messages/messages_ru.properties b/deps/keycloak/themes/base/admin/messages/messages_ru.properties deleted file mode 100644 index efedac4a8..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_ru.properties +++ /dev/null @@ -1,26 +0,0 @@ -# encoding: utf-8 -invalidPasswordMinLengthMessage=Ðекорректный пароль: длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть не менее {0} Ñимволов(а). -invalidPasswordMinDigitsMessage=Ðекорректный пароль: должен Ñодержать не менее {0} цифр(Ñ‹). -invalidPasswordMinLowerCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимволов(а) в нижнем региÑтре. -invalidPasswordMinUpperCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимволов(а) в верхнем региÑтре. -invalidPasswordMinSpecialCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} ÑпецÑимволов(а). -invalidPasswordNotUsernameMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пользователÑ. -invalidPasswordRegexPatternMessage=Ðекорректный пароль: пароль не прошел проверку по регулÑрному выражению. -invalidPasswordHistoryMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¿Ð¾Ñледним(и) {0} паролем(Ñми). -invalidPasswordGenericMessage=Ðекорректный пароль: новый пароль не ÑоответÑтвует правилам паролÑ. - -ldapErrorInvalidCustomFilter=Сконфигурированный пользователем фильтр LDAP не должен начинатьÑÑ Ñ "(" или заканчиватьÑÑ Ð½Ð° ")". -ldapErrorMissingClientId=Client ID должен быть наÑтроен в конфигурации, еÑли не иÑпользуетÑÑ ÑопоÑтавление ролей в realm. -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=Ðе удалоÑÑŒ унаÑледовать группу и иÑпользовать членÑтво UID типа вмеÑте. -ldapErrorCantWriteOnlyForReadOnlyLdap=Ðевозможно уÑтановить режим "только на запиÑÑŒ", когда LDAP провайдер не в режиме WRITABLE -ldapErrorCantWriteOnlyAndReadOnly=Ðевозможно одновременно уÑтановить режимы "только на чтение" и "только на запиÑÑŒ" - -clientRedirectURIsFragmentError=URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð½Ðµ должен Ñодержать фрагмент URI -clientRootURLFragmentError=Корневой URL не должен Ñодержать фрагмент URL - -pairwiseMalformedClientRedirectURI=Клиент Ñодержит некорректный URI перенаправлениÑ. -pairwiseClientRedirectURIsMissingHost=URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° должен Ñодержать корректный компонент хоÑта. -pairwiseClientRedirectURIsMultipleHosts=Без конфигурации по чаÑти идентификатора URI, URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ ÐºÐ»Ð¸ÐµÐ½Ñ‚Ð° не может Ñодержать неÑколько компонентов хоÑта. -pairwiseMalformedSectorIdentifierURI=ИÑÐºÐ°Ð¶ÐµÐ½Ð½Ð°Ñ Ñ‡Ð°ÑÑ‚ÑŒ идентификатора URI. -pairwiseFailedToGetRedirectURIs=Ðе удалоÑÑŒ получить идентификаторы URI Ð¿ÐµÑ€ÐµÐ½Ð°Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð¸Ð· чаÑти идентификатора URI. -pairwiseRedirectURIsMismatch=Клиент URI переадреÑации не ÑоответÑтвует URI переадреÑации, полученной из чаÑти идентификатора URI. diff --git a/deps/keycloak/themes/base/admin/messages/messages_zh_CN.properties b/deps/keycloak/themes/base/admin/messages/messages_zh_CN.properties deleted file mode 100644 index 622dccbfd..000000000 --- a/deps/keycloak/themes/base/admin/messages/messages_zh_CN.properties +++ /dev/null @@ -1,26 +0,0 @@ -# encoding: utf-8 -invalidPasswordMinLengthMessage=无效的密ç ï¼šæœ€çŸ­é•¿åº¦ {0}. -invalidPasswordMinLowerCaseCharsMessage=无效的密ç ï¼šè‡³å°‘åŒ…å« {0} å°å†™å­—æ¯ -invalidPasswordMinDigitsMessage=无效的密ç ï¼šè‡³å°‘åŒ…å« {0} 个数字 -invalidPasswordMinUpperCaseCharsMessage=无效的密ç ï¼šæœ€çŸ­é•¿åº¦ {0} å¤§å†™å­—æ¯ -invalidPasswordMinSpecialCharsMessage=无效的密ç ï¼šæœ€çŸ­é•¿åº¦ {0} 特殊字符 -invalidPasswordNotUsernameMessage=无效的密ç ï¼š ä¸å¯ä»¥ä¸Žç”¨æˆ·åç›¸åŒ -invalidPasswordRegexPatternMessage=无效的密ç ï¼š 无法与正则表达å¼åŒ¹é… -invalidPasswordHistoryMessage=无效的密ç ï¼šä¸èƒ½ä¸Žæœ€åŽä½¿ç”¨çš„ {0} 个密ç ç›¸åŒ - -ldapErrorInvalidCustomFilter=定制的 LDAP过滤器ä¸æ˜¯ä»¥ "(" 开头或以 ")"结尾. -ldapErrorConnectionTimeoutNotNumber=Connection Timeout 必须是个数字 -ldapErrorMissingClientId=当域角色映射未å¯ç”¨æ—¶ï¼Œå®¢æˆ·ç«¯ ID 需è¦æŒ‡å®šã€‚ -ldapErrorCantPreserveGroupInheritanceWithUIDMembershipType=无法在使用UIDæˆå‘˜ç±»åž‹çš„åŒæ—¶ç»´æŠ¤ç»„继承属性。 -ldapErrorCantWriteOnlyForReadOnlyLdap=当LDAPæ供方ä¸æ˜¯å¯å†™æ¨¡å¼æ—¶ï¼Œæ— æ³•è®¾ç½®åªå†™ -ldapErrorCantWriteOnlyAndReadOnly=无法åŒæ—¶è®¾ç½®åªè¯»å’Œåªå†™ - -clientRedirectURIsFragmentError=é‡å®šå‘URLä¸åº”包å«URI片段 -clientRootURLFragmentError=æ ¹URL ä¸åº”åŒ…å« URL 片段 - -pairwiseMalformedClientRedirectURI=客户端包å«ä¸€ä¸ªæ— æ•ˆçš„é‡å®šå‘URL -pairwiseClientRedirectURIsMissingHost=客户端é‡å®šå‘URL需è¦æœ‰ä¸€ä¸ªæœ‰æ•ˆçš„主机 -pairwiseClientRedirectURIsMultipleHosts=Without a configured Sector Identifier URI, client redirect URIs must not contain multiple host components. -pairwiseMalformedSectorIdentifierURI=Malformed Sector Identifier URI. -pairwiseFailedToGetRedirectURIs=无法从æœåŠ¡å™¨èŽ·å¾—é‡å®šå‘URL -pairwiseRedirectURIsMismatch=客户端的é‡å®šå‘URI与æœåŠ¡å™¨ç«¯èŽ·å–çš„URIé…ç½®ä¸åŒ¹é…。 diff --git a/deps/keycloak/themes/base/admin/resources/js/app.js b/deps/keycloak/themes/base/admin/resources/js/app.js deleted file mode 100644 index 1654e397d..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/app.js +++ /dev/null @@ -1,3689 +0,0 @@ -'use strict'; - -var auth = {}; -var resourceBundle; -var locale = 'en'; - -var module = angular.module('keycloak', [ 'keycloak.services', 'keycloak.loaders', 'ui.bootstrap', 'ui.select2', 'angularFileUpload', 'angularTreeview', 'pascalprecht.translate', 'ngCookies', 'ngSanitize', 'ui.ace']); -var resourceRequests = 0; -var loadingTimer = -1; -var translateProvider = null; -var currentRealm = null; - -angular.element(document).ready(function () { - var keycloakAuth = new Keycloak(consoleBaseUrl + 'config'); - - function whoAmI(success, error) { - var req = new XMLHttpRequest(); - req.open('GET', consoleBaseUrl + 'whoami', true); - req.setRequestHeader('Accept', 'application/json'); - req.setRequestHeader('Authorization', 'bearer ' + keycloakAuth.token); - - req.onreadystatechange = function () { - if (req.readyState == 4) { - if (req.status == 200) { - var data = JSON.parse(req.responseText); - success(data); - } else { - error(); - } - } - } - - req.send(); - } - - function loadResourceBundle(success, error) { - var req = new XMLHttpRequest(); - req.open('GET', consoleBaseUrl + 'messages.json?lang=' + locale, true); - req.setRequestHeader('Accept', 'application/json'); - - req.onreadystatechange = function () { - if (req.readyState == 4) { - if (req.status == 200) { - var data = JSON.parse(req.responseText); - success && success(data); - } else { - error && error(); - } - } - } - - req.send(); - } - - function loadSelect2Localization() { - // 'en' is the built-in default and does not have to be loaded. - var supportedLocales = ['ar', 'az', 'bg', 'ca', 'cs', 'da', 'de', 'el', 'es', 'et', 'eu', 'fa', 'fi', 'fr', - 'gl', 'he', 'hr', 'hu', 'id', 'is', 'it', 'ja', 'ka', 'ko', 'lt', 'lv', 'mk', 'ms', 'nl', 'no', 'pl', - 'pt-BR', 'pt-PT', 'ro', 'rs', 'ru', 'sk', 'sv', 'th', 'tr', 'ug-CN', 'uk', 'vi', 'zh-CN', 'zh-TW']; - if (supportedLocales.indexOf(locale) == -1) return; - var select2JsUrl; - var allScriptElements = document.getElementsByTagName('script'); - for (var i = 0, n = allScriptElements.length; i < n; i++) { - var src = allScriptElements[i].getAttribute('src'); - if (src && src.match(/\/select2\/select2\.js$/)) { - select2JsUrl = src; - break; - } - } - if (!select2JsUrl) return; - var scriptElement = document.createElement('script'); - scriptElement.src = select2JsUrl.replace(/\/select2\/select2\.js$/, '/select2/select2_locale_'+locale+'.js'); - scriptElement.type = 'text/javascript'; - document.getElementsByTagName('head')[0].appendChild(scriptElement); - } - - function hasAnyAccess(user) { - return user && user['realm_access']; - } - - keycloakAuth.onAuthLogout = function() { - location.reload(); - } - - auth.refreshPermissions = function(success, error) { - whoAmI(function(data) { - auth.user = data; - auth.loggedIn = true; - auth.hasAnyAccess = hasAnyAccess(data); - - success(); - }, function() { - error(); - }); - }; - - module.factory('Auth', function () { - return auth; - }); - - keycloakAuth.init({ onLoad: 'login-required', pkceMethod: 'S256' }).then(function () { - auth.authz = keycloakAuth; - - whoAmI(function(data) { - auth.user = data; - auth.loggedIn = true; - auth.hasAnyAccess = hasAnyAccess(data); - locale = auth.user.locale || locale; - - loadResourceBundle(function(data) { - resourceBundle = data; - - var injector = angular.bootstrap(document, ["keycloak"]); - - injector.get('$translate')('consoleTitle').then(function (consoleTitle) { - document.title = consoleTitle; - }); - }); - }); - - loadSelect2Localization(); - }).catch(function () { - window.location.reload(); - }); -}); - -module.factory('authInterceptor', function($q, Auth) { - return { - request: function (config) { - if (!config.url.match(/.html$/)) { - var deferred = $q.defer(); - if (Auth.authz.token) { - Auth.authz.updateToken(5).then(function () { - config.headers = config.headers || {}; - config.headers.Authorization = 'Bearer ' + Auth.authz.token; - - deferred.resolve(config); - }).catch(function () { - location.reload(); - }); - } - return deferred.promise; - } else { - return config; - } - } - }; -}); - -module.config(['$translateProvider', function($translateProvider) { - translateProvider = $translateProvider; - $translateProvider.useSanitizeValueStrategy('sanitizeParameters'); - $translateProvider.preferredLanguage(locale); - $translateProvider.translations(locale, resourceBundle); -}]); - -// Change for upgrade to AngularJS 1.6 -// See https://github.com/angular/angular.js/commit/aa077e81129c740041438688dff2e8d20c3d7b52 -module.config(['$locationProvider', function($locationProvider) { - $locationProvider.hashPrefix(''); -}]); - -module.config([ '$routeProvider', function($routeProvider) { - $routeProvider - .when('/create/realm', { - templateUrl : resourceUrl + '/partials/realm-create.html', - resolve : { - - }, - controller : 'RealmCreateCtrl' - }) - .when('/realms/:realm', { - templateUrl : resourceUrl + '/partials/realm-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmDetailCtrl' - }) - .when('/realms/:realm/localization', { - templateUrl : resourceUrl + '/partials/realm-localization.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - realmSpecificLocales : function(RealmSpecificLocalesLoader) { - return RealmSpecificLocalesLoader(); - } - }, - controller : 'RealmLocalizationCtrl' - }) - .when('/realms/:realm/localization/upload', { - templateUrl : resourceUrl + '/partials/realm-localization-upload.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmLocalizationUploadCtrl' - }) - .when('/realms/:realm/login-settings', { - templateUrl : resourceUrl + '/partials/realm-login-settings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmLoginSettingsCtrl' - }) - .when('/realms/:realm/theme-settings', { - templateUrl : resourceUrl + '/partials/realm-theme-settings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmThemeCtrl' - }) - .when('/realms/:realm/cache-settings', { - templateUrl : resourceUrl + '/partials/realm-cache-settings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmCacheCtrl' - }) - .when('/realms', { - templateUrl : resourceUrl + '/partials/realm-list.html', - controller : 'RealmListCtrl' - }) - .when('/realms/:realm/token-settings', { - templateUrl : resourceUrl + '/partials/realm-tokens.html', - resolve : { - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmTokenDetailCtrl' - }) - .when('/realms/:realm/user-profile', { - templateUrl : resourceUrl + '/partials/realm-user-profile.html', - resolve : { - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmUserProfileCtrl' - }) - .when('/realms/:realm/client-registration/client-initial-access', { - templateUrl : resourceUrl + '/partials/client-initial-access.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientInitialAccess : function(ClientInitialAccessLoader) { - return ClientInitialAccessLoader(); - } - }, - controller : 'ClientInitialAccessCtrl' - }) - .when('/realms/:realm/client-registration/client-initial-access/create', { - templateUrl : resourceUrl + '/partials/client-initial-access-create.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'ClientInitialAccessCreateCtrl' - }) - .when('/realms/:realm/client-registration/client-reg-policies', { - templateUrl : resourceUrl + '/partials/client-reg-policies.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - policies : function(ComponentsLoader) { - return ComponentsLoader.loadComponents(null, 'org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy'); - }, - clientRegistrationPolicyProviders : function(ClientRegistrationPolicyProvidersLoader) { - return ClientRegistrationPolicyProvidersLoader(); - } - }, - controller : 'ClientRegPoliciesCtrl' - }) - .when('/realms/:realm/client-registration/client-reg-policies/create/:componentType/:providerId', { - templateUrl : resourceUrl + '/partials/client-reg-policy-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function($route) { - return { - providerType: 'org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy', - subType: $route.current.params.componentType, - providerId: $route.current.params.providerId - }; - }, - clientRegistrationPolicyProviders : function(ClientRegistrationPolicyProvidersLoader) { - return ClientRegistrationPolicyProvidersLoader(); - } - }, - controller : 'ClientRegPolicyDetailCtrl' - }) - .when('/realms/:realm/client-registration/client-reg-policies/:provider/:componentId', { - templateUrl : resourceUrl + '/partials/client-reg-policy-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - clientRegistrationPolicyProviders : function(ClientRegistrationPolicyProvidersLoader) { - return ClientRegistrationPolicyProvidersLoader(); - } - }, - controller : 'ClientRegPolicyDetailCtrl' - }) - .when('/realms/:realm/client-policies/profiles', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - }, - }, - controller : 'ClientPoliciesProfilesListCtrl' - }) - .when('/realms/:realm/client-policies/profiles-json', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-json.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - } - }, - controller : 'ClientPoliciesProfilesJsonCtrl' - }) - .when('/realms/:realm/client-policies/profiles-create', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-edit.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('false'); - } - }, - controller : 'ClientPoliciesProfilesEditCtrl' - }) - .when('/realms/:realm/client-policies/profiles-update/:profileName', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-edit.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - } - }, - controller : 'ClientPoliciesProfilesEditCtrl' - }) - .when('/realms/:realm/client-policies/profiles-update/:profileName/create-executor', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-edit-executor.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('false'); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientPoliciesProfilesEditExecutorCtrl' - }) - .when('/realms/:realm/client-policies/profiles-update/:profileName/update-executor/:executorIndex', { - templateUrl : resourceUrl + '/partials/client-policies-profiles-edit-executor.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientPoliciesProfilesEditExecutorCtrl' - }) - .when('/realms/:realm/client-policies/policies', { - templateUrl : resourceUrl + '/partials/client-policies-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - } - }, - controller : 'ClientPoliciesListCtrl' - }) - .when('/realms/:realm/client-policies/policies-json', { - templateUrl : resourceUrl + '/partials/client-policies-json.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - } - }, - controller : 'ClientPoliciesJsonCtrl' - }) - .when('/realms/:realm/client-policies/policy-create', { - templateUrl : resourceUrl + '/partials/client-policies-policy-edit.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - } - }, - controller : 'ClientPoliciesEditCtrl' - }) - .when('/realms/:realm/client-policies/policies-update/:policyName', { - templateUrl : resourceUrl + '/partials/client-policies-policy-edit.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientProfiles : function(ClientPoliciesProfilesLoader) { - return ClientPoliciesProfilesLoader.loadClientProfiles('true'); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - } - }, - controller : 'ClientPoliciesEditCtrl' - }) - .when('/realms/:realm/client-policies/policies-update/:policyName/create-condition', { - templateUrl : resourceUrl + '/partials/client-policies-policy-edit-condition.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientPoliciesEditConditionCtrl' - }) - .when('/realms/:realm/client-policies/policies-update/:policyName/update-condition/:conditionIndex', { - templateUrl : resourceUrl + '/partials/client-policies-policy-edit-condition.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientPolicies : function(ClientPoliciesLoader) { - return ClientPoliciesLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientPoliciesEditConditionCtrl' - }) - .when('/realms/:realm/keys', { - templateUrl : resourceUrl + '/partials/realm-keys.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - keys: function(RealmKeysLoader) { - return RealmKeysLoader(); - } - }, - controller : 'RealmKeysCtrl' - }) - .when('/realms/:realm/keys/passive', { - templateUrl : resourceUrl + '/partials/realm-keys-passive.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - keys: function(RealmKeysLoader) { - return RealmKeysLoader(); - } - }, - controller : 'RealmKeysCtrl' - }) - .when('/realms/:realm/keys/disabled', { - templateUrl : resourceUrl + '/partials/realm-keys-disabled.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - keys: function(RealmKeysLoader) { - return RealmKeysLoader(); - } - }, - controller : 'RealmKeysCtrl' - }) - .when('/realms/:realm/keys/providers', { - templateUrl : resourceUrl + '/partials/realm-keys-providers.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmKeysProvidersCtrl' - }) - .when('/create/keys/:realm/providers/:provider', { - templateUrl : resourceUrl + '/partials/realm-keys-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function() { - return { - }; - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericKeystoreCtrl' - }) - .when('/realms/:realm/keys/providers/:provider/:componentId', { - templateUrl : resourceUrl + '/partials/realm-keys-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericKeystoreCtrl' - }) - .when('/realms/:realm/identity-provider-settings', { - templateUrl : resourceUrl + '/partials/realm-identity-provider.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - instance : function(IdentityProviderLoader) { - return {}; - }, - providerFactory : function(IdentityProviderFactoryLoader) { - return {}; - }, - authFlows : function(AuthenticationFlowsLoader) { - return {}; - } - }, - controller : 'RealmIdentityProviderCtrl' - }) - .when('/create/identity-provider/:realm/:provider_id', { - templateUrl : function(params){ return resourceUrl + '/partials/realm-identity-provider-' + params.provider_id + '.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - instance : function(IdentityProviderLoader) { - return {}; - }, - providerFactory : function(IdentityProviderFactoryLoader) { - return new IdentityProviderFactoryLoader(); - }, - authFlows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - } - }, - controller : 'RealmIdentityProviderCtrl' - }) - .when('/realms/:realm/identity-provider-settings/provider/:provider_id/:alias', { - templateUrl : function(params){ return resourceUrl + '/partials/realm-identity-provider-' + params.provider_id + '.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - instance : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - }, - providerFactory : function(IdentityProviderFactoryLoader) { - return IdentityProviderFactoryLoader(); - }, - authFlows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - } - }, - controller : 'RealmIdentityProviderCtrl' - }) - .when('/realms/:realm/identity-provider-settings/provider/:provider_id/:alias/export', { - templateUrl : resourceUrl + '/partials/realm-identity-provider-export.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - identityProvider : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - }, - providerFactory : function(IdentityProviderFactoryLoader) { - return IdentityProviderFactoryLoader(); - } - }, - controller : 'RealmIdentityProviderExportCtrl' - }) - .when('/realms/:realm/identity-provider-mappers/:alias/mappers', { - templateUrl : function(params){ return resourceUrl + '/partials/identity-provider-mappers.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - identityProvider : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - }, - mapperTypes : function(IdentityProviderMapperTypesLoader) { - return IdentityProviderMapperTypesLoader(); - }, - mappers : function(IdentityProviderMappersLoader) { - return IdentityProviderMappersLoader(); - } - }, - controller : 'IdentityProviderMapperListCtrl' - }) - .when('/realms/:realm/identity-provider-mappers/:alias/mappers/:mapperId', { - templateUrl : function(params){ return resourceUrl + '/partials/identity-provider-mapper-detail.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - identityProvider : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - }, - mapperTypes : function(IdentityProviderMapperTypesLoader) { - return IdentityProviderMapperTypesLoader(); - }, - mapper : function(IdentityProviderMapperLoader) { - return IdentityProviderMapperLoader(); - } - }, - controller : 'IdentityProviderMapperCtrl' - }) - .when('/create/identity-provider-mappers/:realm/:alias', { - templateUrl : function(params){ return resourceUrl + '/partials/identity-provider-mapper-detail.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - identityProvider : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - }, - mapperTypes : function(IdentityProviderMapperTypesLoader) { - return IdentityProviderMapperTypesLoader(); - } - }, - controller : 'IdentityProviderMapperCreateCtrl' - }) - - .when('/realms/:realm/default-roles', { - templateUrl : resourceUrl + '/partials/realm-default-roles.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - } - }, - controller : 'RealmDefaultRolesCtrl' - }) - .when('/realms/:realm/smtp-settings', { - templateUrl : resourceUrl + '/partials/realm-smtp.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmSMTPSettingsCtrl' - }) - .when('/realms/:realm/events', { - templateUrl : resourceUrl + '/partials/realm-events.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmEventsCtrl' - }) - .when('/realms/:realm/admin-events', { - templateUrl : resourceUrl + '/partials/realm-events-admin.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmAdminEventsCtrl' - }) - .when('/realms/:realm/events-settings', { - templateUrl : resourceUrl + '/partials/realm-events-config.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - eventsConfig : function(RealmEventsConfigLoader) { - return RealmEventsConfigLoader(); - } - }, - controller : 'RealmEventsConfigCtrl' - }) - .when('/realms/:realm/partial-import', { - templateUrl : resourceUrl + '/partials/partial-import.html', - resolve : { - resourceName : function() { return 'users'}, - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmImportCtrl' - }) - .when('/realms/:realm/partial-export', { - templateUrl : resourceUrl + '/partials/partial-export.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmExportCtrl' - }) - .when('/create/user/:realm', { - templateUrl : resourceUrl + '/partials/user-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function() { - return {}; - } - }, - controller : 'UserDetailCtrl' - }) - .when('/realms/:realm/users/:user', { - templateUrl : resourceUrl + '/partials/user-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - } - }, - controller : 'UserDetailCtrl' - }) - .when('/realms/:realm/users/:user/user-attributes', { - templateUrl : resourceUrl + '/partials/user-attributes.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - } - }, - controller : 'UserDetailCtrl' - }) - .when('/realms/:realm/users/:user/user-credentials', { - templateUrl : resourceUrl + '/partials/user-credentials.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - } - }, - controller : 'UserCredentialsCtrl' - }) - .when('/realms/:realm/users/:user/role-mappings', { - templateUrl : resourceUrl + '/partials/role-mappings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - client : function() { - return {}; - } - }, - controller : 'UserRoleMappingCtrl' - }) - .when('/realms/:realm/users/:user/groups', { - templateUrl : resourceUrl + '/partials/user-group-membership.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - } - }, - controller : 'UserGroupMembershipCtrl' - }) - .when('/realms/:realm/users/:user/sessions', { - templateUrl : resourceUrl + '/partials/user-sessions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - sessions : function(UserSessionsLoader) { - return UserSessionsLoader(); - } - }, - controller : 'UserSessionsCtrl' - }) - .when('/realms/:realm/users/:user/federated-identity', { - templateUrl : resourceUrl + '/partials/user-federated-identity-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - federatedIdentities : function(UserFederatedIdentityLoader) { - return UserFederatedIdentityLoader(); - } - }, - controller : 'UserFederatedIdentityCtrl' - }) - .when('/create/federated-identity/:realm/:user', { - templateUrl : resourceUrl + '/partials/user-federated-identity-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - federatedIdentities : function(UserFederatedIdentityLoader) { - return UserFederatedIdentityLoader(); - } - }, - controller : 'UserFederatedIdentityAddCtrl' - }) - .when('/realms/:realm/users/:user/consents', { - templateUrl : resourceUrl + '/partials/user-consents.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - userConsents : function(UserConsentsLoader) { - return UserConsentsLoader(); - } - }, - controller : 'UserConsentsCtrl' - }) - .when('/realms/:realm/users/:user/offline-sessions/:client', { - templateUrl : resourceUrl + '/partials/user-offline-sessions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(UserLoader) { - return UserLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - offlineSessions : function(UserOfflineSessionsLoader) { - return UserOfflineSessionsLoader(); - } - }, - controller : 'UserOfflineSessionsCtrl' - }) - .when('/realms/:realm/users', { - templateUrl : resourceUrl + '/partials/user-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'UserListCtrl' - }) - - .when('/create/role/:realm', { - templateUrl : resourceUrl + '/partials/role-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - role : function() { - return {}; - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'RoleDetailCtrl' - }) - .when('/realms/:realm/roles/:role', { - templateUrl : resourceUrl + '/partials/role-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - role : function(RoleLoader) { - return RoleLoader(); - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'RoleDetailCtrl' - }) - .when('/realms/:realm/roles/:role/role-attributes', { - templateUrl : resourceUrl + '/partials/role-attributes.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - role : function(RoleLoader) { - return RoleLoader(); - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'RoleDetailCtrl' - }) - .when('/realms/:realm/roles/:role/users', { - templateUrl : resourceUrl + '/partials/realm-role-users.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - role : function(RoleLoader) { - return RoleLoader(); - } - }, - controller : 'RoleMembersCtrl' - }) - .when('/realms/:realm/roles', { - templateUrl : resourceUrl + '/partials/role-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RoleListCtrl' - }) - .when('/realms/:realm/groups', { - templateUrl : resourceUrl + '/partials/group-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'GroupListCtrl' - }) - .when('/create/group/:realm/parent/:parentId', { - templateUrl : resourceUrl + '/partials/create-group.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - parentId : function($route) { - return $route.current.params.parentId; - } - }, - controller : 'GroupCreateCtrl' - }) - .when('/realms/:realm/groups/:group', { - templateUrl : resourceUrl + '/partials/group-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - group : function(GroupLoader) { - return GroupLoader(); - } - }, - controller : 'GroupDetailCtrl' - }) - .when('/realms/:realm/groups/:group/attributes', { - templateUrl : resourceUrl + '/partials/group-attributes.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - group : function(GroupLoader) { - return GroupLoader(); - } - }, - controller : 'GroupDetailCtrl' - }) - .when('/realms/:realm/groups/:group/members', { - templateUrl : resourceUrl + '/partials/group-members.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - group : function(GroupLoader) { - return GroupLoader(); - } - }, - controller : 'GroupMembersCtrl' - }) - .when('/realms/:realm/groups/:group/role-mappings', { - templateUrl : resourceUrl + '/partials/group-role-mappings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - group : function(GroupLoader) { - return GroupLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - client : function() { - return {}; - } - }, - controller : 'GroupRoleMappingCtrl' - }) - .when('/realms/:realm/default-groups', { - templateUrl : resourceUrl + '/partials/default-groups.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'DefaultGroupsCtrl' - }) - - - .when('/create/role/:realm/clients/:client', { - templateUrl : resourceUrl + '/partials/client-role-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - role : function() { - return {}; - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientRoleDetailCtrl' - }) - .when('/realms/:realm/clients/:client/roles/:role', { - templateUrl : resourceUrl + '/partials/client-role-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - role : function(ClientRoleLoader) { - return ClientRoleLoader(); - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientRoleDetailCtrl' - }) - .when('/realms/:realm/clients/:client/roles/:role/role-attributes', { - templateUrl : resourceUrl + '/partials/client-role-attributes.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - role : function(ClientRoleLoader) { - return ClientRoleLoader(); - }, - roles : function(RoleListLoader) { - return RoleListLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientRoleDetailCtrl' - }) - .when('/realms/:realm/clients/:client/roles/:role/users', { - templateUrl : resourceUrl + '/partials/client-role-users.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - role : function(ClientRoleLoader) { - return ClientRoleLoader(); - } - }, - controller : 'ClientRoleMembersCtrl' - }) - .when('/realms/:realm/clients/:client/mappers', { - templateUrl : resourceUrl + '/partials/client-mappers.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientProtocolMapperListCtrl' - }) - .when('/realms/:realm/clients/:client/add-mappers', { - templateUrl : resourceUrl + '/partials/client-mappers-add.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'AddBuiltinProtocolMapperCtrl' - }) - .when('/realms/:realm/clients/:client/mappers/:id', { - templateUrl : resourceUrl + '/partials/client-protocol-mapper-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - mapper : function(ClientProtocolMapperLoader) { - return ClientProtocolMapperLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - - }, - controller : 'ClientProtocolMapperCtrl' - }) - .when('/create/client/:realm/:client/mappers', { - templateUrl : resourceUrl + '/partials/client-protocol-mapper-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientProtocolMapperCreateCtrl' - }) - .when('/realms/:realm/clients/:client/client-scopes/setup-scopes', { - templateUrl : resourceUrl + '/partials/client-scopes-setup.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clientScopes : function(ClientScopeListLoader) { - return ClientScopeListLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - clientDefaultClientScopes : function(ClientDefaultClientScopesLoader) { - return ClientDefaultClientScopesLoader(); - }, - clientOptionalClientScopes : function(ClientOptionalClientScopesLoader) { - return ClientOptionalClientScopesLoader(); - } - }, - controller : 'ClientClientScopesSetupCtrl' - }) - .when('/realms/:realm/clients/:client/client-scopes/evaluate-scopes', { - templateUrl : resourceUrl + '/partials/client-scopes-evaluate.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - clientScopes : function(ClientScopeListLoader) { - return ClientScopeListLoader(); - }, - clientDefaultClientScopes : function(ClientDefaultClientScopesLoader) { - return ClientDefaultClientScopesLoader(); - }, - clientOptionalClientScopes : function(ClientOptionalClientScopesLoader) { - return ClientOptionalClientScopesLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientClientScopesEvaluateCtrl' - }) - .when('/realms/:realm/client-scopes/:clientScope/mappers', { - templateUrl : resourceUrl + '/partials/client-scope-mappers.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientScopeProtocolMapperListCtrl' - }) - .when('/realms/:realm/client-scopes/:clientScope/add-mappers', { - templateUrl : resourceUrl + '/partials/client-scope-mappers-add.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientScopeAddBuiltinProtocolMapperCtrl' - }) - .when('/realms/:realm/client-scopes/:clientScope/mappers/:id', { - templateUrl : resourceUrl + '/partials/client-scope-protocol-mapper-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - mapper : function(ClientScopeProtocolMapperLoader) { - return ClientScopeProtocolMapperLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - - }, - controller : 'ClientScopeProtocolMapperCtrl' - }) - .when('/create/client-scope/:realm/:clientScope/mappers', { - templateUrl : resourceUrl + '/partials/client-scope-protocol-mapper-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientScopeProtocolMapperCreateCtrl' - }) - .when('/realms/:realm/clients/:client/sessions', { - templateUrl : resourceUrl + '/partials/client-sessions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - sessionCount : function(ClientSessionCountLoader) { - return ClientSessionCountLoader(); - } - }, - controller : 'ClientSessionsCtrl' - }) - .when('/realms/:realm/clients/:client/offline-access', { - templateUrl : resourceUrl + '/partials/client-offline-sessions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - offlineSessionCount : function(ClientOfflineSessionCountLoader) { - return ClientOfflineSessionCountLoader(); - } - }, - controller : 'ClientOfflineSessionsCtrl' - }) - .when('/realms/:realm/clients/:client/credentials', { - templateUrl : resourceUrl + '/partials/client-credentials.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clientAuthenticatorProviders : function(ClientAuthenticatorProvidersLoader) { - return ClientAuthenticatorProvidersLoader(); - }, - clientConfigProperties: function(PerClientAuthenticationConfigDescriptionLoader) { - return PerClientAuthenticationConfigDescriptionLoader(); - } - }, - controller : 'ClientCredentialsCtrl' - }) - .when('/realms/:realm/clients/:client/oidc/:keyType/import/:attribute', { - templateUrl : resourceUrl + '/partials/client-oidc-key-import.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - callingContext : function() { - return "oidc"; - } - }, - controller : 'ClientCertificateImportCtrl' - }) - .when('/realms/:realm/clients/:client/oidc/:keyType/export/:attribute', { - templateUrl : resourceUrl + '/partials/client-oidc-key-export.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - callingContext : function() { - return "oidc"; - } - }, - controller : 'ClientCertificateExportCtrl' - }) - .when('/realms/:realm/clients/:client/identity-provider', { - templateUrl : resourceUrl + '/partials/client-identity-provider.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientIdentityProviderCtrl' - }) - .when('/realms/:realm/clients/:client/clustering', { - templateUrl : resourceUrl + '/partials/client-clustering.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientClusteringCtrl' - }) - .when('/register-node/realms/:realm/clients/:client/clustering', { - templateUrl : resourceUrl + '/partials/client-clustering-node.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientClusteringNodeCtrl' - }) - .when('/realms/:realm/clients/:client/clustering/:node', { - templateUrl : resourceUrl + '/partials/client-clustering-node.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientClusteringNodeCtrl' - }) - .when('/realms/:realm/clients/:client/saml/keys', { - templateUrl : resourceUrl + '/partials/client-saml-keys.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientSamlKeyCtrl' - }) - .when('/realms/:realm/clients/:client/saml/:keyType/import/:attribute', { - templateUrl : resourceUrl + '/partials/client-saml-key-import.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - callingContext : function() { - return "saml"; - } - }, - controller : 'ClientCertificateImportCtrl' - }) - .when('/realms/:realm/clients/:client/saml/:keyType/export/:attribute', { - templateUrl : resourceUrl + '/partials/client-saml-key-export.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - callingContext : function() { - return "saml"; - } - }, - controller : 'ClientCertificateExportCtrl' - }) - .when('/realms/:realm/clients/:client/oidc/keys', { - templateUrl : resourceUrl + '/partials/client-oidc-keys.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientOidcKeyCtrl' - }) - .when('/realms/:realm/clients/:client/roles', { - templateUrl : resourceUrl + '/partials/client-role-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientRoleListCtrl' - }) - .when('/realms/:realm/clients/:client/revocation', { - templateUrl : resourceUrl + '/partials/client-revocation.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientRevocationCtrl' - }) - .when('/realms/:realm/clients/:client/scope-mappings', { - templateUrl : resourceUrl + '/partials/client-scope-mappings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientScopeMappingCtrl' - }) - .when('/realms/:realm/clients/:client/installation', { - templateUrl : resourceUrl + '/partials/client-installation.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientInstallationCtrl' - }) - .when('/realms/:realm/clients/:client/service-account-roles', { - templateUrl : resourceUrl + '/partials/client-service-account-roles.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - user : function(ClientServiceAccountUserLoader) { - return ClientServiceAccountUserLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'UserRoleMappingCtrl' - }) - .when('/create/client/:realm', { - templateUrl : resourceUrl + '/partials/create-client.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - client : function() { - return {}; - }, - flows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'CreateClientCtrl' - }) - .when('/realms/:realm/clients/:client', { - templateUrl : resourceUrl + '/partials/client-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - flows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientDetailCtrl' - }) - .when('/create/client-scope/:realm', { - templateUrl : resourceUrl + '/partials/client-scope-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function() { - return {}; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientScopeDetailCtrl' - }) - .when('/realms/:realm/client-scopes/:clientScope', { - templateUrl : resourceUrl + '/partials/client-scope-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientScopeDetailCtrl' - }) - .when('/realms/:realm/client-scopes/:clientScope/scope-mappings', { - templateUrl : resourceUrl + '/partials/client-scope-scope-mappings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScope : function(ClientScopeLoader) { - return ClientScopeLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'ClientScopeScopeMappingCtrl' - }) - .when('/realms/:realm/clients', { - templateUrl : resourceUrl + '/partials/client-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - - }, - controller : 'ClientListCtrl' - }) - .when('/realms/:realm/client-scopes', { - templateUrl : resourceUrl + '/partials/client-scope-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScopes : function(ClientScopeListLoader) { - return ClientScopeListLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - - }, - controller : 'ClientScopeListCtrl' - }) - .when('/realms/:realm/default-client-scopes', { - templateUrl : resourceUrl + '/partials/client-scopes-realm-default.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - clientScopes : function(ClientScopeListLoader) { - return ClientScopeListLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - }, - realmDefaultClientScopes : function(RealmDefaultClientScopesLoader) { - return RealmDefaultClientScopesLoader(); - }, - realmOptionalClientScopes : function(RealmOptionalClientScopesLoader) { - return RealmOptionalClientScopesLoader(); - } - }, - controller : 'ClientScopesRealmDefaultCtrl' - }) - .when('/import/client/:realm', { - templateUrl : resourceUrl + '/partials/client-import.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientImportCtrl' - }) - .when('/realms/:realm/client-stores', { - templateUrl : resourceUrl + '/partials/client-storage-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ClientStoresCtrl' - }) - .when('/realms/:realm/client-storage/providers/:provider/:componentId', { - templateUrl : resourceUrl + '/partials/client-storage-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericClientStorageCtrl' - }) - .when('/create/client-storage/:realm/providers/:provider', { - templateUrl : resourceUrl + '/partials/client-storage-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function() { - return { - - }; - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericClientStorageCtrl' - }) - .when('/', { - templateUrl : resourceUrl + '/partials/home.html', - controller : 'HomeCtrl' - }) - .when('/mocks/:realm', { - templateUrl : resourceUrl + '/partials/realm-detail_mock.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmDetailCtrl' - }) - .when('/realms/:realm/sessions/revocation', { - templateUrl : resourceUrl + '/partials/session-revocation.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmRevocationCtrl' - }) - .when('/realms/:realm/sessions/realm', { - templateUrl : resourceUrl + '/partials/session-realm.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - stats : function(RealmClientSessionStatsLoader) { - return RealmClientSessionStatsLoader(); - } - }, - controller : 'RealmSessionStatsCtrl' - }) - .when('/create/user-storage/:realm/providers/ldap', { - templateUrl : resourceUrl + '/partials/user-storage-ldap.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function() { - return { - - }; - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'LDAPUserStorageCtrl' - }) - .when('/create/user-storage/:realm/providers/kerberos', { - templateUrl : resourceUrl + '/partials/user-storage-kerberos.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function() { - return { - - }; - }, - providerId : function($route) { - return "kerberos"; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericUserStorageCtrl' - }) - .when('/create/user-storage/:realm/providers/:provider', { - templateUrl : resourceUrl + '/partials/user-storage-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function() { - return { - - }; - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericUserStorageCtrl' - }) - .when('/realms/:realm/user-storage/providers/ldap/:componentId', { - templateUrl : resourceUrl + '/partials/user-storage-ldap.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'LDAPUserStorageCtrl' - }) - .when('/realms/:realm/user-storage/providers/kerberos/:componentId', { - templateUrl : resourceUrl + '/partials/user-storage-kerberos.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - providerId : function($route) { - return "kerberos"; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericUserStorageCtrl' - }) - .when('/realms/:realm/user-storage/providers/:provider/:componentId', { - templateUrl : resourceUrl + '/partials/user-storage-generic.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - instance : function(ComponentLoader) { - return ComponentLoader(); - }, - providerId : function($route) { - return $route.current.params.provider; - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'GenericUserStorageCtrl' - }) - .when('/realms/:realm/ldap-mappers/:componentId', { - templateUrl : function(params){ return resourceUrl + '/partials/user-storage-ldap-mappers.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - provider : function(ComponentLoader) { - return ComponentLoader(); - }, - mappers : function(ComponentsLoader, $route) { - return ComponentsLoader.loadComponents($route.current.params.componentId, 'org.keycloak.storage.ldap.mappers.LDAPStorageMapper'); - } - }, - controller : 'LDAPMapperListCtrl' - }) - .when('/create/ldap-mappers/:realm/:componentId', { - templateUrl : function(params){ return resourceUrl + '/partials/user-storage-ldap-mapper-detail.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - provider : function(ComponentLoader) { - return ComponentLoader(); - }, - mapperTypes : function(SubComponentTypesLoader, $route) { - return SubComponentTypesLoader.loadComponents($route.current.params.componentId, 'org.keycloak.storage.ldap.mappers.LDAPStorageMapper'); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'LDAPMapperCreateCtrl' - }) - .when('/realms/:realm/ldap-mappers/:componentId/mappers/:mapperId', { - templateUrl : function(params){ return resourceUrl + '/partials/user-storage-ldap-mapper-detail.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - provider : function(ComponentLoader) { - return ComponentLoader(); - }, - mapperTypes : function(SubComponentTypesLoader, $route) { - return SubComponentTypesLoader.loadComponents($route.current.params.componentId, 'org.keycloak.storage.ldap.mappers.LDAPStorageMapper'); - }, - mapper : function(LDAPMapperLoader) { - return LDAPMapperLoader(); - }, - clients : function(ClientListLoader) { - return ClientListLoader(); - } - }, - controller : 'LDAPMapperCtrl' - }) - .when('/realms/:realm/user-federation', { - templateUrl : resourceUrl + '/partials/user-federation.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'UserFederationCtrl' - }) - .when('/realms/:realm/defense/headers', { - templateUrl : resourceUrl + '/partials/defense-headers.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - - }, - controller : 'DefenseHeadersCtrl' - }) - .when('/realms/:realm/defense/brute-force', { - templateUrl : resourceUrl + '/partials/brute-force.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'RealmBruteForceCtrl' - }) - .when('/realms/:realm/protocols', { - templateUrl : resourceUrl + '/partials/protocol-list.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - - }, - controller : 'ProtocolListCtrl' - }) - .when('/realms/:realm/authentication/flows', { - templateUrl : resourceUrl + '/partials/authentication-flows.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - flows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - }, - selectedFlow : function() { - return null; - } - }, - controller : 'AuthenticationFlowsCtrl' - }) - .when('/realms/:realm/authentication/flow-bindings', { - templateUrl : resourceUrl + '/partials/authentication-flow-bindings.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - flows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmFlowBindingCtrl' - }) - .when('/realms/:realm/authentication/flows/:flow', { - templateUrl : resourceUrl + '/partials/authentication-flows.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - flows : function(AuthenticationFlowsLoader) { - return AuthenticationFlowsLoader(); - }, - selectedFlow : function($route) { - return $route.current.params.flow; - } - }, - controller : 'AuthenticationFlowsCtrl' - }) - .when('/realms/:realm/authentication/flows/:flow/create/execution/:topFlow', { - templateUrl : resourceUrl + '/partials/create-execution.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - topFlow: function($route) { - return $route.current.params.topFlow; - }, - parentFlow : function(AuthenticationFlowLoader) { - return AuthenticationFlowLoader(); - }, - formActionProviders : function(AuthenticationFormActionProvidersLoader) { - return AuthenticationFormActionProvidersLoader(); - }, - authenticatorProviders : function(AuthenticatorProvidersLoader) { - return AuthenticatorProvidersLoader(); - }, - clientAuthenticatorProviders : function(ClientAuthenticatorProvidersLoader) { - return ClientAuthenticatorProvidersLoader(); - } - }, - controller : 'CreateExecutionCtrl' - }) - .when('/realms/:realm/authentication/flows/:flow/create/flow/execution/:topFlow', { - templateUrl : resourceUrl + '/partials/create-flow-execution.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - topFlow: function($route) { - return $route.current.params.topFlow; - }, - parentFlow : function(AuthenticationFlowLoader) { - return AuthenticationFlowLoader(); - }, - formProviders : function(AuthenticationFormProvidersLoader) { - return AuthenticationFormProvidersLoader(); - } - }, - controller : 'CreateExecutionFlowCtrl' - }) - .when('/realms/:realm/authentication/create/flow', { - templateUrl : resourceUrl + '/partials/create-flow.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'CreateFlowCtrl' - }) - .when('/realms/:realm/authentication/required-actions', { - templateUrl : resourceUrl + '/partials/required-actions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - unregisteredRequiredActions : function(UnregisteredRequiredActionsListLoader) { - return UnregisteredRequiredActionsListLoader(); - } - }, - controller : 'RequiredActionsCtrl' - }) - .when('/realms/:realm/authentication/password-policy', { - templateUrl : resourceUrl + '/partials/password-policy.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmPasswordPolicyCtrl' - }) - .when('/realms/:realm/authentication/otp-policy', { - templateUrl : resourceUrl + '/partials/otp-policy.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmOtpPolicyCtrl' - }) - .when('/realms/:realm/authentication/webauthn-policy', { - templateUrl : resourceUrl + '/partials/webauthn-policy.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmWebAuthnPolicyCtrl' - }) - .when('/realms/:realm/authentication/webauthn-policy-passwordless', { - templateUrl : resourceUrl + '/partials/webauthn-policy-passwordless.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmWebAuthnPasswordlessPolicyCtrl' - }) - .when('/realms/:realm/authentication/ciba-policy', { - templateUrl : resourceUrl + '/partials/ciba-policy.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'RealmCibaPolicyCtrl' - }) - .when('/realms/:realm/authentication/flows/:flow/config/:provider/:config', { - templateUrl : resourceUrl + '/partials/authenticator-config.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - flow : function(AuthenticationFlowLoader) { - return AuthenticationFlowLoader(); - }, - configType : function(AuthenticationConfigDescriptionLoader) { - return AuthenticationConfigDescriptionLoader(); - }, - config : function(AuthenticationConfigLoader) { - return AuthenticationConfigLoader(); - } - }, - controller : 'AuthenticationConfigCtrl' - }) - .when('/create/authentication/:realm/flows/:flow/execution/:executionId/provider/:provider', { - templateUrl : resourceUrl + '/partials/authenticator-config.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - flow : function(AuthenticationFlowLoader) { - return AuthenticationFlowLoader(); - }, - configType : function(AuthenticationConfigDescriptionLoader) { - return AuthenticationConfigDescriptionLoader(); - }, - execution : function(ExecutionIdLoader) { - return ExecutionIdLoader(); - } - }, - controller : 'AuthenticationConfigCreateCtrl' - }) - .when('/create/localization/:realm/:locale', { - templateUrl : resourceUrl + '/partials/realm-localization-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - locale: function($route) { - return $route.current.params.locale; - }, - key: function() { - return null - }, - localizationText : function() { - return null; - } - }, - controller : 'RealmLocalizationDetailCtrl' - }) - .when('/realms/:realm/localization/:locale/:key', { - templateUrl : resourceUrl + '/partials/realm-localization-detail.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - locale: function($route) { - return $route.current.params.locale; - }, - key: function($route) { - return $route.current.params.key; - }, - localizationText : function(RealmSpecificlocalizationTextLoader) { - return RealmSpecificlocalizationTextLoader(); - } - }, - controller : 'RealmLocalizationDetailCtrl' - }) - .when('/server-info', { - templateUrl : resourceUrl + '/partials/server-info.html', - resolve : { - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ServerInfoCtrl' - }) - .when('/server-info/providers', { - templateUrl : resourceUrl + '/partials/server-info-providers.html', - resolve : { - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller : 'ServerInfoCtrl' - }) - .when('/logout', { - templateUrl : resourceUrl + '/partials/home.html', - controller : 'LogoutCtrl' - }) - .when('/notfound', { - templateUrl : resourceUrl + '/partials/notfound.html' - }) - .when('/forbidden', { - templateUrl : resourceUrl + '/partials/forbidden.html' - }) - .otherwise({ - templateUrl : resourceUrl + '/partials/pagenotfound.html' - }); -} ]); - -module.config(function($httpProvider) { - $httpProvider.interceptors.push('errorInterceptor'); - - var spinnerFunction = function(data, headersGetter) { - if (resourceRequests == 0) { - loadingTimer = window.setTimeout(function() { - $('#loading').show(); - loadingTimer = -1; - }, 500); - } - resourceRequests++; - return data; - }; - $httpProvider.defaults.transformRequest.push(spinnerFunction); - - $httpProvider.interceptors.push('spinnerInterceptor'); - $httpProvider.interceptors.push('authInterceptor'); - -}); - -module.factory('spinnerInterceptor', function($q, $window, $rootScope, $location) { - return { - response: function(response) { - resourceRequests--; - if (resourceRequests == 0) { - if(loadingTimer != -1) { - window.clearTimeout(loadingTimer); - loadingTimer = -1; - } - $('#loading').hide(); - } - return response; - }, - responseError: function(response) { - resourceRequests--; - if (resourceRequests == 0) { - if(loadingTimer != -1) { - window.clearTimeout(loadingTimer); - loadingTimer = -1; - } - $('#loading').hide(); - } - - return $q.reject(response); - } - }; -}); - -module.factory('errorInterceptor', function($q, $window, $rootScope, $location, Notifications, Auth) { - return { - response: function(response) { - return response; - }, - responseError: function(response) { - if (response.status == 401) { - Auth.authz.logout(); - } else if (response.status == 403) { - $location.path('/forbidden'); - } else if (response.status == 404) { - $location.path('/notfound'); - } else if (response.status) { - if (response.data && response.data.errorMessage) { - Notifications.error(response.data.errorMessage); - } else if (response.data && response.data.errors) { - var messages = "Multiple errors found: "; - - for (var i = 0; i < response.data.errors.length; i++) { - messages+=response.data.errors[i].errorMessage + " "; - } - - Notifications.error(messages); - } else if (response.data && response.data.error_description) { - Notifications.error(response.data.error_description); - } else { - Notifications.error("An unexpected server error has occurred"); - } - } else { - Notifications.error("No response from server."); - } - return $q.reject(response); - } - }; -}); - -// collapsable form fieldsets -module.directive('collapsable', function() { - return function(scope, element, attrs) { - element.click(function() { - $(this).toggleClass('collapsed'); - $(this).find('.toggle-icons').toggleClass('kc-icon-collapse').toggleClass('kc-icon-expand'); - $(this).find('.toggle-icons').text($(this).text() == "Icon: expand" ? "Icon: collapse" : "Icon: expand"); - $(this).parent().find('.form-group').toggleClass('hidden'); - }); - } -}); - -// collapsable form fieldsets -module.directive('uncollapsed', function() { - return function(scope, element, attrs) { - element.prepend(' '); - element.click(function() { - $(this).find('.toggle-class').toggleClass('fa-angle-down').toggleClass('fa-angle-right'); - $(this).parent().find('.form-group').toggleClass('hidden'); - }); - } -}); - -// collapsable form fieldsets -module.directive('collapsed', function() { - return function(scope, element, attrs) { - element.prepend(' '); - element.parent().find('.form-group').toggleClass('hidden'); - element.click(function() { - $(this).find('.toggle-class').toggleClass('fa-angle-down').toggleClass('fa-angle-right'); - $(this).parent().find('.form-group').toggleClass('hidden'); - }); - } -}); - -/** - * Directive for presenting an ON-OFF switch for checkbox. - * Usage: - */ -module.directive('onoffswitch', function() { - return { - restrict: "EA", - replace: true, - scope: { - name: '@', - id: '@', - ngModel: '=', - ngDisabled: '=', - kcOnText: '@onText', - kcOffText: '@offText' - }, - // TODO - The same code acts differently when put into the templateURL. Find why and move the code there. - //templateUrl: "templates/kc-switch.html", - template: "
", - compile: function(element, attrs) { - /* - We don't want to propagate basic attributes to the root element of directive. Id should be passed to the - input element only to achieve proper label binding (and validity). - */ - element.removeAttr('name'); - element.removeAttr('id'); - - if (!attrs.onText) { attrs.onText = "ON"; } - if (!attrs.offText) { attrs.offText = "OFF"; } - - element.bind('keydown', function(e){ - var code = e.keyCode || e.which; - if (code === 32 || code === 13) { - e.stopImmediatePropagation(); - e.preventDefault(); - $(e.target).find('input').click(); - } - }); - } - } -}); - -/** - * Directive for presenting an ON-OFF switch for checkbox. The directive expects the value to be string 'true' or 'false', not boolean true/false - * This directive provides some additional capabilities to the default onoffswitch such as: - * - * - Dynamic values for id and name attributes. Useful if you need to use this directive inside a ng-repeat - * - Specific scope to specify the value. Instead of just true or false. - * - * Usage: - */ -module.directive('onoffswitchstring', function() { - return { - restrict: "EA", - replace: true, - scope: { - name: '=', - id: '=', - value: '=', - ngModel: '=', - ngDisabled: '=', - kcOnText: '@onText', - kcOffText: '@offText' - }, - // TODO - The same code acts differently when put into the templateURL. Find why and move the code there. - //templateUrl: "templates/kc-switch.html", - template: '
', - compile: function(element, attrs) { - - if (!attrs.onText) { attrs.onText = "ON"; } - if (!attrs.offText) { attrs.offText = "OFF"; } - - element.bind('keydown click', function(e){ - var code = e.keyCode || e.which; - if (code === 32 || code === 13) { - e.stopImmediatePropagation(); - e.preventDefault(); - $(e.target).find('input').click(); - } - }); - } - } -}); - -/** - * Directive for presenting an ON-OFF switch for checkbox. The directive expects the true-value or false-value to be string like 'true' or 'false', not boolean true/false. - * This directive provides some additional capabilities to the default onoffswitch such as: - * - * - Specific scope to specify the value. Instead of just 'true' or 'false' you can use any other values. For example: true-value="'foo'" false-value="'bar'" . - * But 'true'/'false' are defaults if true-value and false-value are not specified - * - * Usage: - */ -module.directive('onoffswitchvalue', function() { - return { - restrict: "EA", - replace: true, - scope: { - name: '@', - id: '@', - trueValue: '@', - falseValue: '@', - ngModel: '=', - ngDisabled: '=', - kcOnText: '@onText', - kcOffText: '@offText' - }, - // TODO - The same code acts differently when put into the templateURL. Find why and move the code there. - //templateUrl: "templates/kc-switch.html", - template: "
", - compile: function(element, attrs) { - /* - We don't want to propagate basic attributes to the root element of directive. Id should be passed to the - input element only to achieve proper label binding (and validity). - */ - element.removeAttr('name'); - element.removeAttr('id'); - - if (!attrs.trueValue) { attrs.trueValue = "'true'"; } - if (!attrs.falseValue) { attrs.falseValue = "'false'"; } - - if (!attrs.onText) { attrs.onText = "ON"; } - if (!attrs.offText) { attrs.offText = "OFF"; } - - element.bind('keydown', function(e){ - var code = e.keyCode || e.which; - if (code === 32 || code === 13) { - e.stopImmediatePropagation(); - e.preventDefault(); - $(e.target).find('input').click(); - } - }); - } - } -}); - -module.directive('kcInput', function() { - var d = { - scope : true, - replace : false, - link : function(scope, element, attrs) { - var form = element.children('form'); - var label = element.children('label'); - var input = element.children('input'); - - var id = form.attr('name') + '.' + input.attr('name'); - - element.attr('class', 'control-group'); - - label.attr('class', 'control-label'); - label.attr('for', id); - - input.wrap('
'); - input.attr('id', id); - - if (!input.attr('placeHolder')) { - input.attr('placeHolder', label.text()); - } - - if (input.attr('required')) { - label.append(' *'); - } - } - }; - return d; -}); - -module.directive('kcEnter', function() { - return function(scope, element, attrs) { - element.bind("keydown keypress", function(event) { - if (event.which === 13) { - scope.$apply(function() { - scope.$eval(attrs.kcEnter); - }); - - event.preventDefault(); - } - }); - }; -}); - -// Don't allow URI reserved characters -module.directive('kcNoReservedChars', function (Notifications, $translate) { - return function($scope, element) { - element.bind("keypress", function(event) { - var keyPressed = String.fromCharCode(event.which || event.keyCode || 0); - - // ] and ' can not be used inside a character set on POSIX and GNU - if (keyPressed.match('[:/?#[@!$&()*+,;=]') || keyPressed === ']' || keyPressed === '\'') { - event.preventDefault(); - $scope.$apply(function() { - Notifications.warn($translate.instant('key-not-allowed-here', {character: keyPressed})); - }); - } - }); - }; -}); - -module.directive('kcSave', function ($compile, $timeout, Notifications) { - var clickDelay = 500; // 500 ms - - return { - restrict: 'A', - link: function ($scope, elem, attr, ctrl) { - elem.addClass("btn btn-primary"); - elem.attr("type","submit"); - - var disabled = false; - elem.on('click', function(evt) { - if ($scope.hasOwnProperty("changed") && !$scope.changed) return; - - // KEYCLOAK-4121: Prevent double form submission - if (disabled) { - evt.preventDefault(); - evt.stopImmediatePropagation(); - return; - } else { - disabled = true; - $timeout(function () { disabled = false; }, clickDelay, false); - } - - $scope.$apply(function() { - var form = elem.closest('form'); - if (form && form.attr('name')) { - var ngValid = form.find('.ng-valid'); - if ($scope[form.attr('name')].$valid) { - //ngValid.removeClass('error'); - ngValid.parent().removeClass('has-error'); - $scope['save'](); - } else { - Notifications.error("Missing or invalid field(s). Please verify the fields in red.") - //ngValid.removeClass('error'); - ngValid.parent().removeClass('has-error'); - - var ngInvalid = form.find('.ng-invalid'); - //ngInvalid.addClass('error'); - ngInvalid.parent().addClass('has-error'); - } - } - }); - }) - } - } -}); - -module.directive('kcReset', function ($compile, Notifications) { - return { - restrict: 'A', - link: function ($scope, elem, attr, ctrl) { - elem.addClass("btn btn-default"); - elem.attr("type","submit"); - elem.bind('click', function() { - $scope.$apply(function() { - var form = elem.closest('form'); - if (form && form.attr('name')) { - form.find('.ng-valid').removeClass('error'); - form.find('.ng-invalid').removeClass('error'); - $scope['reset'](); - } - }) - }) - } - } -}); - -module.directive('kcCancel', function ($compile, Notifications) { - return { - restrict: 'A', - link: function ($scope, elem, attr, ctrl) { - elem.addClass("btn btn-default"); - elem.attr("type","submit"); - } - } -}); - -module.directive('kcDelete', function ($compile, Notifications) { - return { - restrict: 'A', - link: function ($scope, elem, attr, ctrl) { - elem.addClass("btn btn-danger"); - elem.attr("type","submit"); - } - } -}); - - -module.directive('kcDropdown', function ($compile, Notifications) { - return { - scope: { - kcOptions: '=', - kcModel: '=', - id: "=", - kcPlaceholder: '@' - }, - restrict: 'EA', - replace: true, - templateUrl: resourceUrl + '/templates/kc-select.html', - link: function(scope, element, attr) { - scope.updateModel = function(item) { - scope.kcModel = item; - }; - } - } -}); - -module.directive('kcReadOnly', function() { - var disabled = {}; - - var d = { - replace : false, - link : function(scope, element, attrs) { - var disable = function(i, e) { - if (!e.disabled) { - disabled[e.tagName + i] = true; - e.disabled = true; - } - } - - var enable = function(i, e) { - if (disabled[e.tagName + i]) { - e.disabled = false; - delete disabled[i]; - } - } - - var filterIgnored = function(i, e){ - return !e.attributes['kc-read-only-ignore']; - } - - scope.$watch(attrs.kcReadOnly, function(readOnly) { - if (readOnly) { - element.find('input').filter(filterIgnored).each(disable); - element.find('button').filter(filterIgnored).each(disable); - element.find('select').filter(filterIgnored).each(disable); - element.find('textarea').filter(filterIgnored).each(disable); - } else { - element.find('input').filter(filterIgnored).each(enable); - element.find('input').filter(filterIgnored).each(enable); - element.find('button').filter(filterIgnored).each(enable); - element.find('select').filter(filterIgnored).each(enable); - element.find('textarea').filter(filterIgnored).each(enable); - } - }); - } - }; - return d; -}); - -module.directive('kcMenu', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-menu.html' - } -}); - -module.directive('kcTabsRealm', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-realm.html' - } -}); - -module.directive('kcTabsAuthentication', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-authentication.html' - } -}); - -module.directive('kcTabsRole', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-role.html' - } -}); - -module.directive('kcTabsClientRole', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-client-role.html' - } -}); - -module.directive('kcTabsUser', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-user.html' - } -}); - -module.directive('kcTabsUsers', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-users.html' - } -}); - -module.directive('kcTabsClients', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-clients.html' - } -}); - -module.directive('kcTabsGroup', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-group.html' - } -}); - -module.directive('kcTabsGroupList', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-group-list.html' - } -}); - -module.directive('kcTabsClient', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-client.html' - } -}); - -module.directive('kcTabsClientScope', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-client-scope.html' - } -}); - -module.directive('kcNavigationUser', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-navigation-user.html' - } -}); - -module.directive('kcTabsIdentityProvider', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-identity-provider.html' - } -}); - -module.directive('kcTabsUserFederation', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-user-federation.html' - } -}); - -module.directive('kcTabsLdap', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/kc-tabs-ldap.html' - } -}); - -module.controller('RoleSelectorModalCtrl', function($scope, realm, config, configName, RealmRoles, Client, ClientRole, $modalInstance) { - $scope.selectedRealmRole = { - role: undefined - }; - $scope.selectedClientRole = { - role: undefined - }; - $scope.client = { - selected: undefined - }; - - $scope.selectRealmRole = function() { - config[configName] = $scope.selectedRealmRole.role.name; - $modalInstance.close(); - } - - $scope.selectClientRole = function() { - config[configName] = $scope.selectedClient.clientId + "." + $scope.selectedClientRole.role.name; - $modalInstance.close(); - } - - $scope.cancel = function() { - $modalInstance.dismiss(); - } - - clientSelectControl($scope, realm.realm, Client); - - $scope.selectedClient = null; - - $scope.changeClient = function(client) { - $scope.selectedClient = client; - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - if ($scope.selectedClient) { - ClientRole.query({realm: realm.realm, client: $scope.selectedClient.id}, function (data) { - $scope.clientRoles = data; - }); - } else { - console.log('selected client was null'); - $scope.clientRoles = null; - } - - $scope.selectedClient = client; - } - - RealmRoles.query({realm: realm.realm}, function(data) { - $scope.realmRoles = data; - }) -}); - -module.controller('ProviderConfigCtrl', function ($modal, $scope, $route, ComponentUtils, Client) { - clientSelectControl($scope, $route.current.params.realm, Client); - $scope.fileNames = {}; - $scope.newMapEntries = {}; - var cachedMaps = {}; - var cachedParsedMaps = {}; - var focusMapValueId = null; - - // KEYCLOAK-4463 - $scope.initEditor = function(editor){ - editor.$blockScrolling = Infinity; // suppress warning message - }; - - $scope.initSelectedClient = function(configName, config) { - if(config[configName]) { - $scope.selectedClient = null; - Client.query({realm: $route.current.params.realm, search: false, clientId: config[configName], max: 1}, function(data) { - if(data.length > 0) { - $scope.selectedClient = angular.copy(data[0]); - $scope.selectedClient.text = $scope.selectedClient.clientId; - } - }); - } - } - - $scope.openRoleSelector = function (configName, config) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/role-selector.html', - controller: 'RoleSelectorModalCtrl', - resolve: { - realm: function () { - return $scope.realm; - }, - config: function () { - return config; - }, - configName: function () { - return configName; - } - } - }) - } - - $scope.changeClient = function(configName, config, client, multivalued) { - if (!client || !client.id) { - config[configName] = null; - $scope.selectedClient = null; - return; - } - $scope.selectedClient = client; - if (multivalued) { - config[configName][0] = client.clientId; - } else { - config[configName] = client.clientId; - } - }; - - ComponentUtils.convertAllMultivaluedStringValuesToList($scope.properties, $scope.config); - - ComponentUtils.addLastEmptyValueToMultivaluedLists($scope.properties, $scope.config); - - $scope.addValueToMultivalued = function(optionName) { - var configProperty = $scope.config[optionName]; - var lastIndex = configProperty.length - 1; - var lastValue = configProperty[lastIndex]; - console.log("Option=" + optionName + ", lastIndex=" + lastIndex + ", lastValue=" + lastValue); - - if (lastValue.length > 0) { - configProperty.push(''); - } - } - - $scope.deleteValueFromMultivalued = function(optionName, index) { - $scope.config[optionName].splice(index, 1); - } - - $scope.uploadFile = function($files, optionName, config) { - var reader = new FileReader(); - reader.onload = function(e) { - $scope.$apply(function() { - config[optionName][0] = e.target.result; - }); - }; - reader.readAsText($files[0]); - $scope.fileNames[optionName] = $files[0].name; - } - - $scope.addMapEntry = function(optionName) { - $scope.removeMapEntry(optionName, $scope.newMapEntries[optionName].key) - - var parsedMap = JSON.parse($scope.config[optionName]); - parsedMap.push($scope.newMapEntries[optionName]); - $scope.config[optionName] = JSON.stringify(parsedMap); - - delete $scope.newMapEntries[optionName]; - } - - $scope.removeMapEntry = function(optionName, key) { - var parsedMap = JSON.parse($scope.config[optionName]); - - for(var i = parsedMap.length - 1; i >= 0; i--) { - if(parsedMap[i]['key'] === key) { - parsedMap.splice(i, 1); - } - } - - $scope.config[optionName] = JSON.stringify(parsedMap); - } - - $scope.updateMapEntry = function(optionName, key, value) { - var parsedMap = JSON.parse($scope.config[optionName]); - - for(var i = parsedMap.length - 1; i >= 0; i--) { - if(parsedMap[i]['key'] === key) { - parsedMap[i]['value'] = value; - } - } - $scope.config[optionName] = JSON.stringify(parsedMap); - - focusMapValueId = "mapValue-" + optionName + "-" + key; - } - - $scope.jsonParseMap = function(optionName) { - - if(cachedParsedMaps[optionName] === undefined) { - cachedMaps[optionName] = "[]"; - cachedParsedMaps[optionName] = []; - - if(!$scope.config.hasOwnProperty(optionName)){ - $scope.config[optionName]=cachedMaps[optionName]; - } else { - cachedMaps[optionName] = $scope.config[optionName]; - cachedParsedMaps[optionName] = JSON.parse(cachedMaps[optionName]); - } - } - - var mapChanged = $scope.config[optionName] !== cachedMaps[optionName]; - - if(mapChanged){ - cachedMaps[optionName] = $scope.config[optionName]; - cachedParsedMaps[optionName] = JSON.parse(cachedMaps[optionName]); - } - - if(!mapChanged && focusMapValueId !== null){ - document.getElementById(focusMapValueId).focus(); - focusMapValueId = null; - } - - return cachedParsedMaps[optionName]; - } -}); - -module.directive('kcProviderConfig', function ($modal) { - return { - scope: { - config: '=', - properties: '=', - realm: '=', - clients: '=', - configName: '=' - }, - restrict: 'E', - replace: true, - controller: 'ProviderConfigCtrl', - templateUrl: resourceUrl + '/templates/kc-provider-config.html' - } -}); - -module.controller('ComponentRoleSelectorModalCtrl', function($scope, realm, config, configName, RealmRoles, Client, ClientRole, $modalInstance) { - $scope.selectedRealmRole = { - role: undefined - }; - $scope.selectedClientRole = { - role: undefined - }; - $scope.client = { - selected: undefined - }; - - $scope.selectRealmRole = function() { - config[configName][0] = $scope.selectedRealmRole.role.name; - $modalInstance.close(); - } - - $scope.selectClientRole = function() { - config[configName][0] = $scope.client.selected.clientId + "." + $scope.selectedClientRole.role.name; - $modalInstance.close(); - } - - $scope.cancel = function() { - $modalInstance.dismiss(); - } - - $scope.changeClient = function() { - if ($scope.client.selected) { - ClientRole.query({realm: realm.realm, client: $scope.client.selected.id}, function (data) { - $scope.clientRoles = data; - }); - } else { - console.log('selected client was null'); - $scope.clientRoles = null; - } - - } - RealmRoles.query({realm: realm.realm}, function(data) { - $scope.realmRoles = data; - }) - Client.query({realm: realm.realm}, function(data) { - $scope.clients = data; - if (data.length > 0) { - $scope.client.selected = data[0]; - $scope.changeClient(); - } - }) -}); - -module.controller('ComponentConfigCtrl', function ($modal, $scope, $route, Client) { - - $scope.initSelectedClient = function(configName, config) { - if(config[configName]) { - $scope.selectedClient = null; - Client.query({realm: $route.current.params.realm, search: false, clientId: config[configName], max: 1}, function(data) { - if(data.length > 0) { - $scope.selectedClient = angular.copy(data[0]); - $scope.selectedClient.text = $scope.selectedClient.clientId; - } - }); - } - } - - $scope.changeClient = function(configName, config, client) { - if (!client || !client.id) { - config[configName] = null; - $scope.selectedClient = null; - return; - } - $scope.selectedClient = client; - config[configName] = client.clientId; - }; - - - $scope.openRoleSelector = function (configName, config) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/component-role-selector.html', - controller: 'ComponentRoleSelectorModalCtrl', - resolve: { - realm: function () { - return $scope.realm; - }, - config: function () { - return config; - }, - configName: function () { - return configName; - } - } - }) - } -}); -module.directive('kcComponentConfig', function ($modal) { - return { - scope: { - config: '=', - properties: '=', - realm: '=', - clients: '=', - configName: '=' - }, - restrict: 'E', - replace: true, - controller: 'ComponentConfigCtrl', - templateUrl: resourceUrl + '/templates/kc-component-config.html' - } -}); - -/* -* Used to select the element (invoke $(elem).select()) on specified action list. -* Usages kc-select-action="click mouseover" -* When used in the textarea element, this will select/highlight the textarea content on specified action (i.e. click). -*/ -module.directive('kcSelectAction', function ($compile, Notifications) { - return { - restrict: 'A', - compile: function (elem, attrs) { - - var events = attrs.kcSelectAction.split(" "); - - for(var i=0; i < events.length; i++){ - - elem.bind(events[i], function(){ - elem.select(); - }); - } - } - } -}); - -module.filter('remove', function() { - return function(input, remove, attribute) { - if (!input || !remove) { - return input; - } - - var out = []; - for ( var i = 0; i < input.length; i++) { - var e = input[i]; - - if (Array.isArray(remove)) { - for (var j = 0; j < remove.length; j++) { - if (attribute) { - if (remove[j][attribute] == e[attribute]) { - e = null; - break; - } - } else { - if (remove[j] == e) { - e = null; - break; - } - } - } - } else { - if (attribute) { - if (remove[attribute] == e[attribute]) { - e = null; - } - } else { - if (remove == e) { - e = null; - } - } - } - - if (e != null) { - out.push(e); - } - } - - return out; - }; -}); - -module.filter('capitalize', function() { - return function(input) { - if (!input) { - return; - } - var splittedWords = input.split(/\s+/); - for (var i=0; i'); - - $compile(label)(scope); - } - }; -}); - -module.directive( 'kcOpen', function ( $location ) { - return function ( scope, element, attrs ) { - var path; - - attrs.$observe( 'kcOpen', function (val) { - path = val; - }); - - element.bind( 'click', function () { - scope.$apply( function () { - $location.path(path); - }); - }); - }; -}); - -module.directive('kcOnReadFile', function ($parse) { - console.debug('kcOnReadFile'); - return { - restrict: 'A', - scope: false, - link: function(scope, element, attrs) { - var fn = $parse(attrs.kcOnReadFile); - - element.on('change', function(onChangeEvent) { - var reader = new FileReader(); - - reader.onload = function(onLoadEvent) { - scope.$apply(function() { - fn(scope, {$fileContent:onLoadEvent.target.result}); - }); - }; - - reader.readAsText((onChangeEvent.srcElement || onChangeEvent.target).files[0]); - }); - } - }; -}); - -module.controller('PagingCtrl', function ($scope) { - $scope.currentPageInput = 1; - - $scope.firstPage = function() { - if (!$scope.hasPrevious()) return; - $scope.currentPage = 1; - $scope.currentPageInput = 1; - }; - - $scope.lastPage = function() { - if (!$scope.hasNext()) return; - $scope.currentPage = $scope.numberOfPages; - $scope.currentPageInput = $scope.numberOfPages; - }; - - $scope.previousPage = function() { - if (!$scope.hasPrevious()) return; - $scope.currentPage--; - $scope.currentPageInput = $scope.currentPage; - }; - - $scope.nextPage = function() { - if (!$scope.hasNext()) return; - $scope.currentPage++; - $scope.currentPageInput = $scope.currentPage; - }; - - $scope.hasNext = function() { - return $scope.currentPage < $scope.numberOfPages; - }; - - $scope.hasPrevious = function() { - return $scope.currentPage > 1; - }; -}); - -// Provides a component for injection with utility methods for manipulating strings -module.factory('KcStrings', function () { - var instance = {}; - - // some IE versions do not support string.endsWith method, this method should be used as an alternative for cross-browser compatibility - instance.endsWith = function(source, suffix) { - return source.indexOf(suffix, source.length - suffix.length) !== -1; - }; - - return instance; -}); - -module.directive('kcPaging', function () { - return { - scope: { - currentPage: '=', - currentPageInput: '=', - numberOfPages: '=' - }, - restrict: 'E', - replace: true, - controller: 'PagingCtrl', - templateUrl: resourceUrl + '/templates/kc-paging.html' - } -}); - -// Tests the page number input from currentPageInput to see -// if it represents a valid page. If so, the current page is changed. -module.directive('kcValidPage', function() { - return { - require: 'ngModel', - link: function(scope, element, attrs, ctrl) { - ctrl.$validators.inRange = function(modelValue, viewValue) { - if (viewValue >= 1 && viewValue <= scope.numberOfPages) { - scope.currentPage = viewValue; - } - - return true; - } - } - } -}); - -// Directive to parse/format strings into numbers -module.directive('stringToNumber', function() { - return { - require: 'ngModel', - link: function(scope, element, attrs, ngModel) { - ngModel.$parsers.push(function(value) { - return (typeof value === 'undefined' || value === null)? '' : '' + value; - }); - ngModel.$formatters.push(function(value) { - return parseFloat(value); - }); - } - }; -}); - -// filter used for paged tables -module.filter('startFrom', function () { - return function (input, start) { - if (input) { - start = +start; - return input.slice(start); - } - return []; - }; -}); - - -module.directive('kcPassword', function ($compile, Notifications) { - return { - restrict: 'A', - link: function ($scope, elem, attr, ctrl) { - function toggleMask(evt) { - if(elem.hasClass('password-conceal')) { - view(); - } else { - conceal(); - } - } - - function view() { - elem.removeClass('password-conceal'); - - var t = elem.next().children().first(); - t.addClass('fa-eye-slash'); - t.removeClass('fa-eye'); - } - - function conceal() { - elem.addClass('password-conceal'); - - var t = elem.next().children().first(); - t.removeClass('fa-eye-slash'); - t.addClass('fa-eye'); - } - - elem.addClass("password-conceal"); - elem.attr("type","text"); - elem.attr("autocomplete", "off"); - - var p = elem.parent(); - - var inputGroup = $('
'); - var eye = $('') - .on('click', toggleMask); - - $scope.$watch(attr.ngModel, function(v) { - if (v && v == '**********') { - elem.next().addClass('disabled') - } else if (v && v.indexOf('${v') == 0) { - elem.next().addClass('disabled') - view(); - } else { - elem.next().removeClass('disabled') - } - }) - - elem.detach().appendTo(inputGroup); - inputGroup.append(eye); - p.append(inputGroup); - } - } -}); - - -module.filter('resolveClientRootUrl', function() { - return function(input) { - if (!input) { - return; - } - return input.replace("${authBaseUrl}", authServerUrl).replace("${authAdminUrl}", authUrl); - }; -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/authz/authz-app.js b/deps/keycloak/themes/base/admin/resources/js/authz/authz-app.js deleted file mode 100644 index 5c4e29b2e..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/authz/authz-app.js +++ /dev/null @@ -1,549 +0,0 @@ -/* - * JBoss, Home of Professional Open Source. - * Copyright 2016 Red Hat, Inc., and individual contributors - * as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.requires.push('ui.ace'); - -module.config(['$routeProvider', function ($routeProvider) { - $routeProvider - .when('/realms/:realm/authz', { - templateUrl: resourceUrl + '/partials/authz/resource-server-list.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - } - }, - controller: 'ResourceServerCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/create', { - templateUrl: resourceUrl + '/partials/authz/resource-server-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients: function (ClientListLoader) { - return ClientListLoader(); - } - }, - controller: 'ResourceServerDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server', { - templateUrl: resourceUrl + '/partials/authz/resource-server-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients: function (ClientListLoader) { - return ClientListLoader(); - }, - serverInfo: function (ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller: 'ResourceServerDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/export-settings', { - templateUrl: resourceUrl + '/partials/authz/resource-server-export-settings.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients: function (ClientListLoader) { - return ClientListLoader(); - }, - serverInfo: function (ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller: 'ResourceServerDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/evaluate', { - templateUrl: resourceUrl + '/partials/authz/policy/resource-server-policy-evaluate.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - clients: function (ClientListLoader) { - return ClientListLoader(); - }, - roles: function (RoleListLoader) { - return new RoleListLoader(); - } - }, - controller: 'PolicyEvaluateCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/evaluate/result', { - templateUrl: resourceUrl + '/partials/authz/policy/resource-server-policy-evaluate-result.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - }, - controller: 'PolicyEvaluateCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/resource', { - templateUrl: resourceUrl + '/partials/authz/resource-server-resource-list.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerResourceCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/resource/create', { - templateUrl: resourceUrl + '/partials/authz/resource-server-resource-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerResourceDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/resource/:rsrid', { - templateUrl: resourceUrl + '/partials/authz/resource-server-resource-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerResourceDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/scope', { - templateUrl: resourceUrl + '/partials/authz/resource-server-scope-list.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerScopeCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/scope/create', { - templateUrl: resourceUrl + '/partials/authz/resource-server-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerScopeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/scope/:id', { - templateUrl: resourceUrl + '/partials/authz/resource-server-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerScopeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/permission', { - templateUrl: resourceUrl + '/partials/authz/permission/resource-server-permission-list.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPermissionCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy', { - templateUrl: resourceUrl + '/partials/authz/policy/resource-server-policy-list.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/permission/resource/create', { - templateUrl: resourceUrl + '/partials/authz/permission/provider/resource-server-policy-resource-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyResourceDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/permission/resource/:id', { - templateUrl: resourceUrl + '/partials/authz/permission/provider/resource-server-policy-resource-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyResourceDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/permission/scope/create', { - templateUrl: resourceUrl + '/partials/authz/permission/provider/resource-server-policy-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyScopeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/permission/scope/:id', { - templateUrl: resourceUrl + '/partials/authz/permission/provider/resource-server-policy-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyScopeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/user/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-user-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyUserDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/user/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-user-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyUserDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/client/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-client-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyClientDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/client/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-client-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyClientDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/role/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-role-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyRoleDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/role/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-role-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyRoleDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/group/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-group-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyGroupDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/group/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-group-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyGroupDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/js/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-js-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller: 'ResourceServerPolicyJSDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/js/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-js-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - serverInfo : function(ServerInfoLoader) { - return ServerInfoLoader(); - } - }, - controller: 'ResourceServerPolicyJSDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/time/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-time-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyTimeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/time/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-time-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyTimeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/aggregate/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyAggregateDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/aggregate/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyAggregateDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/client-scope/create', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyClientScopeDetailCtrl' - }).when('/realms/:realm/clients/:client/authz/resource-server/policy/client-scope/:id', { - templateUrl: resourceUrl + '/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html', - resolve: { - realm: function (RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller: 'ResourceServerPolicyClientScopeDetailCtrl' - }).when('/realms/:realm/roles/:role/permissions', { - templateUrl : resourceUrl + '/partials/authz/mgmt/realm-role-permissions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - role : function(RoleLoader) { - return RoleLoader(); - } - }, - controller : 'RealmRolePermissionsCtrl' - }).when('/realms/:realm/clients/:client/roles/:role/permissions', { - templateUrl : resourceUrl + '/partials/authz/mgmt/client-role-permissions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - }, - role : function(RoleLoader) { - return RoleLoader(); - } - }, - controller : 'ClientRolePermissionsCtrl' - }).when('/realms/:realm/users-permissions', { - templateUrl : resourceUrl + '/partials/authz/mgmt/users-permissions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - } - }, - controller : 'UsersPermissionsCtrl' - }) - .when('/realms/:realm/clients/:client/permissions', { - templateUrl : resourceUrl + '/partials/authz/mgmt/client-permissions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - client : function(ClientLoader) { - return ClientLoader(); - } - }, - controller : 'ClientPermissionsCtrl' - }) - .when('/realms/:realm/groups/:group/permissions', { - templateUrl : resourceUrl + '/partials/authz/mgmt/group-permissions.html', - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - group : function(GroupLoader) { - return GroupLoader(); - } - }, - controller : 'GroupPermissionsCtrl' - }) - .when('/realms/:realm/identity-provider-settings/provider/:provider_id/:alias/permissions', { - templateUrl : function(params){ return resourceUrl + '/partials/authz/mgmt/broker-permissions.html'; }, - resolve : { - realm : function(RealmLoader) { - return RealmLoader(); - }, - identityProvider : function(IdentityProviderLoader) { - return IdentityProviderLoader(); - } - }, - controller : 'IdentityProviderPermissionCtrl' - }) - ; -}]); - -module.directive('kcTabsResourceServer', function () { - return { - scope: true, - restrict: 'E', - replace: true, - templateUrl: resourceUrl + '/templates/authz/kc-tabs-resource-server.html' - } -}); - -module.filter('unique', function () { - - return function (items, filterOn) { - - if (filterOn === false) { - return items; - } - - if ((filterOn || angular.isUndefined(filterOn)) && angular.isArray(items)) { - var hashCheck = {}, newItems = []; - - var extractValueToCompare = function (item) { - if (angular.isObject(item) && angular.isString(filterOn)) { - return item[filterOn]; - } else { - return item; - } - }; - - angular.forEach(items, function (item) { - var valueToCheck, isDuplicate = false; - - for (var i = 0; i < newItems.length; i++) { - if (angular.equals(extractValueToCompare(newItems[i]), extractValueToCompare(item))) { - isDuplicate = true; - break; - } - } - if (!isDuplicate) { - newItems.push(item); - } - - }); - items = newItems; - } - return items; - }; -}); - -module.filter('toCamelCase', function () { - return function (input) { - input = input || ''; - return input.replace(/\w\S*/g, function (txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - }); - }; -}) \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/js/authz/authz-controller.js b/deps/keycloak/themes/base/admin/resources/js/authz/authz-controller.js deleted file mode 100644 index f4c533d27..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/authz/authz-controller.js +++ /dev/null @@ -1,3013 +0,0 @@ -module.controller('ResourceServerCtrl', function($scope, realm, ResourceServer) { - $scope.realm = realm; - - ResourceServer.query({realm : realm.realm}, function (data) { - $scope.servers = data; - }); -}); - -module.controller('ResourceServerDetailCtrl', function($scope, $http, $route, $location, $upload, $modal, realm, ResourceServer, client, AuthzDialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = angular.copy(data); - $scope.changed = false; - - $scope.$watch('server', function() { - if (!angular.equals($scope.server, data)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - ResourceServer.update({realm : realm.realm, client : $scope.server.clientId}, $scope.server, function() { - $route.reload(); - Notifications.success("The resource server has been created."); - }); - } - - $scope.reset = function() { - $route.reload(); - } - - $scope.export = function() { - $scope.exportSettings = true; - ResourceServer.settings({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - var tmp = angular.fromJson(data); - $scope.settings = angular.toJson(tmp, true); - }) - } - - $scope.downloadSettings = function() { - saveAs(new Blob([$scope.settings], { type: 'application/json' }), $scope.server.name + "-authz-config.json"); - } - - $scope.cancelExport = function() { - delete $scope.settings - } - - $scope.onFileSelect = function($fileContent) { - $scope.server = angular.copy(JSON.parse($fileContent)); - $scope.importing = true; - }; - - $scope.viewImportDetails = function() { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-object.html', - controller: 'ObjectModalCtrl', - resolve: { - object: function () { - return $scope.server; - } - } - }) - }; - - $scope.import = function () { - ResourceServer.import({realm : realm.realm, client : client.id}, $scope.server, function() { - $route.reload(); - Notifications.success("The resource server has been updated."); - }); - } - }); -}); - -var Resources = { - delete: function(ResourceServerResource, realm, client, $scope, AuthzDialog, $location, Notifications, $route) { - ResourceServerResource.permissions({ - realm : realm, - client : client.id, - rsrid : $scope.resource._id - }, function (permissions) { - var msg = ""; - - if (permissions.length > 0 && !$scope.deleteConsent) { - msg = "

This resource is referenced in some permissions:

"; - msg += "
    "; - for (i = 0; i < permissions.length; i++) { - msg+= "
  • " + permissions[i].name + "
  • "; - } - msg += "
"; - msg += "

If you remove this resource, the permissions above will be affected and will not be associated with this resource anymore.

"; - } - - AuthzDialog.confirmDeleteWithMsg($scope.resource.name, "Resource", msg, function() { - ResourceServerResource.delete({realm : realm, client : $scope.client.id, rsrid : $scope.resource._id}, null, function() { - $location.url("/realms/" + realm + "/clients/" + $scope.client.id + "/authz/resource-server/resource"); - $route.reload(); - Notifications.success("The resource has been deleted."); - }); - }); - }); - } -} - -var Policies = { - delete: function(service, realm, client, $scope, AuthzDialog, $location, Notifications, $route, isPermission) { - var msg = ""; - - service.dependentPolicies({ - realm : realm, - client : client.id, - id : $scope.policy.id - }, function (dependentPolicies) { - if (dependentPolicies.length > 0 && !$scope.deleteConsent) { - msg = "

This policy is being used by other policies:

"; - msg += "
    "; - for (i = 0; i < dependentPolicies.length; i++) { - msg+= "
  • " + dependentPolicies[i].name + "
  • "; - } - msg += "
"; - msg += "

If you remove this policy, the policies above will be affected and will not be associated with this policy anymore.

"; - } - - AuthzDialog.confirmDeleteWithMsg($scope.policy.name, isPermission ? "Permission" : "Policy", msg, function() { - service.delete({realm : realm, client : $scope.client.id, id : $scope.policy.id}, null, function() { - if (isPermission) { - $location.url("/realms/" + realm + "/clients/" + $scope.client.id + "/authz/resource-server/permission"); - Notifications.success("The permission has been deleted."); - } else { - $location.url("/realms/" + realm + "/clients/" + $scope.client.id + "/authz/resource-server/policy"); - Notifications.success("The policy has been deleted."); - } - $route.reload(); - }); - }); - }); - } -} - -module.controller('ResourceServerResourceCtrl', function($scope, $http, $route, $location, realm, ResourceServer, ResourceServerResource, client, AuthzDialog, Notifications, viewState) { - $scope.realm = realm; - $scope.client = client; - - $scope.query = { - realm: realm.realm, - client : client.id, - deep: false, - max : 20, - first : 0 - }; - - $scope.listSizes = [5, 10, 20]; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - - $scope.createPolicy = function(resource) { - viewState.state = {}; - viewState.state.previousUrl = '/realms/' + $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/resource'; - $location.path('/realms/' + $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/permission/resource/create').search({rsrid: resource._id}); - } - - $scope.searchQuery(); - }); - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - ResourceServerResource.query($scope.query, function(response) { - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - $scope.resources = response; - if ($scope.detailsFilter) { - $scope.showDetails(); - } - }); - }; - - $scope.loadDetails = function (resource) { - if (resource.details) { - resource.details.loaded = !resource.details.loaded; - return; - } - - resource.details = {loaded: false}; - - ResourceServerResource.scopes({ - realm : $route.current.params.realm, - client : client.id, - rsrid : resource._id - }, function(response) { - resource.scopes = response; - ResourceServerResource.permissions({ - realm : $route.current.params.realm, - client : client.id, - rsrid : resource._id - }, function(response) { - resource.policies = response; - resource.details.loaded = true; - }); - }); - } - - $scope.showDetails = function(item, event) { - if (event.target.localName == 'a' || event.target.localName == 'button') { - return; - } - - if (item) { - $scope.loadDetails(item); - } else { - for (i = 0; i < $scope.resources.length; i++) { - $scope.loadDetails($scope.resources[i]); - } - } - }; - - $scope.delete = function(resource) { - $scope.resource = resource; - Resources.delete(ResourceServerResource, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route); - }; -}); - -module.controller('ResourceServerResourceDetailCtrl', function($scope, $http, $route, $location, realm, ResourceServer, client, ResourceServerResource, ResourceServerScope, AuthzDialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - - $scope.scopesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerScope.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - return object.name; - }, - formatSelection: function(object, container, query) { - return object.name; - } - }; - - var $instance = this; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - - var resourceId = $route.current.params.rsrid; - - if (!resourceId) { - $scope.create = true; - $scope.changed = false; - - var resource = {}; - resource.scopes = []; - resource.attributes = {}; - resource.uris = []; - - $scope.resource = angular.copy(resource); - - $scope.$watch('resource', function() { - if (!angular.equals($scope.resource, resource)) { - $scope.changed = true; - } - }, true); - - $scope.$watch('newUri', function() { - if ($scope.newUri && $scope.newUri.length > 0) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - if ($scope.newUri && $scope.newUri.length > 0) { - $scope.addUri(); - } - - for (i = 0; i < $scope.resource.scopes.length; i++) { - delete $scope.resource.scopes[i].text; - } - $instance.checkNameAvailability(function () { - ResourceServerResource.save({realm : realm.realm, client : $scope.client.id}, $scope.resource, function(data) { - $location.url("/realms/" + realm.realm + "/clients/" + $scope.client.id + "/authz/resource-server/resource/" + data._id); - Notifications.success("The resource has been created."); - }); - }); - } - - $scope.reset = function() { - $location.url("/realms/" + realm.realm + "/clients/" + $scope.client.id + "/authz/resource-server/resource/"); - } - } else { - ResourceServerResource.get({ - realm : $route.current.params.realm, - client : client.id, - rsrid : $route.current.params.rsrid, - }, function(data) { - if (!data.scopes) { - data.scopes = []; - } - - if (!data.attributes) { - data.attributes = {}; - } - - $scope.resource = angular.copy(data); - $scope.changed = false; - - $scope.originalResource = angular.copy($scope.resource); - - $scope.$watch('resource', function() { - if (!angular.equals($scope.resource, data)) { - $scope.changed = true; - } - }, true); - - $scope.$watch('newUri', function() { - if ($scope.newUri && $scope.newUri.length > 0) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - if ($scope.newUri && $scope.newUri.length > 0) { - $scope.addUri(); - } - - for (i = 0; i < $scope.resource.scopes.length; i++) { - delete $scope.resource.scopes[i].text; - } - - var keys = Object.keys($scope.resource.attributes); - - for (var k = 0; k < keys.length; k++) { - var key = keys[k]; - var value = $scope.resource.attributes[key]; - var values = value.toString().split(','); - - $scope.resource.attributes[key] = []; - - for (j = 0; j < values.length; j++) { - $scope.resource.attributes[key].push(values[j]); - } - } - $instance.checkNameAvailability(function () { - ResourceServerResource.update({realm : realm.realm, client : $scope.client.id, rsrid : $scope.resource._id}, $scope.resource, function() { - $route.reload(); - Notifications.success("The resource has been updated."); - }); - }); - } - - $scope.remove = function() { - Resources.delete(ResourceServerResource, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route); - } - - $scope.reset = function() { - $route.reload(); - } - }); - } - }); - - $scope.checkNewNameAvailability = function () { - $instance.checkNameAvailability(function () {}); - } - - this.checkNameAvailability = function (onSuccess) { - if (!$scope.resource.name || $scope.resource.name.trim().length == 0) { - return; - } - ResourceServerResource.search({ - realm : $route.current.params.realm, - client : client.id, - rsrid : $route.current.params.rsrid, - name: $scope.resource.name - }, function(data) { - if (data && data._id && data._id != $scope.resource._id) { - Notifications.error("Name already in use by another resource, please choose another one."); - } else { - onSuccess(); - } - }); - } - - $scope.addAttribute = function() { - $scope.resource.attributes[$scope.newAttribute.key] = $scope.newAttribute.value; - delete $scope.newAttribute; - } - - $scope.removeAttribute = function(key) { - delete $scope.resource.attributes[key]; - } - - $scope.addUri = function() { - $scope.resource.uris.push($scope.newUri); - $scope.newUri = ""; - } - - $scope.deleteUri = function(index) { - $scope.resource.uris.splice(index, 1); - } -}); - -var Scopes = { - delete: function(ResourceServerScope, realm, client, $scope, AuthzDialog, $location, Notifications, $route) { - ResourceServerScope.permissions({ - realm : realm, - client : client.id, - id : $scope.scope.id - }, function (permissions) { - var msg = ""; - - if (permissions.length > 0 && !$scope.deleteConsent) { - msg = "

This scope is referenced in some permissions:

"; - msg += "
    "; - for (i = 0; i < permissions.length; i++) { - msg+= "
  • " + permissions[i].name + "
  • "; - } - msg += "
"; - msg += "

If you remove this scope, the permissions above will be affected and will not be associated with this scope anymore.

"; - } - - AuthzDialog.confirmDeleteWithMsg($scope.scope.name, "Scope", msg, function() { - ResourceServerScope.delete({realm : realm, client : $scope.client.id, id : $scope.scope.id}, null, function() { - $location.url("/realms/" + realm + "/clients/" + $scope.client.id + "/authz/resource-server/scope"); - $route.reload(); - Notifications.success("The scope has been deleted."); - }); - }); - }); - } -} - -module.controller('ResourceServerScopeCtrl', function($scope, $http, $route, $location, realm, ResourceServer, ResourceServerScope,client, AuthzDialog, Notifications, viewState) { - $scope.realm = realm; - $scope.client = client; - - $scope.query = { - realm: realm.realm, - client : client.id, - deep: false, - max : 20, - first : 0 - }; - - $scope.listSizes = [5, 10, 20]; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - - $scope.createPolicy = function(scope) { - viewState.state = {}; - viewState.state.previousUrl = '/realms/' + $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/scope'; - $location.path('/realms/' + $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/permission/scope/create').search({scpid: scope.id}); - } - - $scope.searchQuery(); - }); - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function(detailsFilter) { - $scope.searchLoaded = false; - - ResourceServerScope.query($scope.query, function(response) { - $scope.scopes = response; - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - if ($scope.detailsFilter) { - $scope.showDetails(); - } - }); - }; - - $scope.loadDetails = function (scope) { - if (scope.details) { - scope.details.loaded = !scope.details.loaded; - return; - } - - scope.details = {loaded: false}; - - ResourceServerScope.resources({ - realm : $route.current.params.realm, - client : client.id, - id : scope.id - }, function(response) { - scope.resources = response; - ResourceServerScope.permissions({ - realm : $route.current.params.realm, - client : client.id, - id : scope.id - }, function(response) { - scope.policies = response; - scope.details.loaded = true; - }); - }); - } - - $scope.showDetails = function(item, event) { - if (event.target.localName == 'a' || event.target.localName == 'button') { - return; - } - if (item) { - $scope.loadDetails(item); - } else { - for (i = 0; i < $scope.scopes.length; i++) { - $scope.loadDetails($scope.scopes[i]); - } - } - }; - - $scope.delete = function(scope) { - $scope.scope = scope; - Scopes.delete(ResourceServerScope, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route); - }; -}); - -module.controller('ResourceServerScopeDetailCtrl', function($scope, $http, $route, $location, realm, ResourceServer, client, ResourceServerScope, AuthzDialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - - var $instance = this; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - - var scopeId = $route.current.params.id; - - if (!scopeId) { - $scope.create = true; - $scope.changed = false; - - var scope = {}; - - $scope.scope = angular.copy(scope); - - $scope.$watch('scope', function() { - if (!angular.equals($scope.scope, scope)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - $instance.checkNameAvailability(function () { - ResourceServerScope.save({realm : realm.realm, client : $scope.client.id}, $scope.scope, function(data) { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/scope/" + data.id); - Notifications.success("The scope has been created."); - }); - }); - } - - $scope.reset = function() { - $location.url("/realms/" + realm.realm + "/clients/" + $scope.client.id + "/authz/resource-server/scope/"); - } - } else { - ResourceServerScope.get({ - realm : $route.current.params.realm, - client : client.id, - id : $route.current.params.id, - }, function(data) { - $scope.scope = angular.copy(data); - $scope.changed = false; - - $scope.$watch('scope', function() { - if (!angular.equals($scope.scope, data)) { - $scope.changed = true; - } - }, true); - - $scope.originalScope = angular.copy($scope.scope); - - $scope.save = function() { - $instance.checkNameAvailability(function () { - ResourceServerScope.update({realm : realm.realm, client : $scope.client.id, id : $scope.scope.id}, $scope.scope, function() { - $scope.changed = false; - Notifications.success("The scope has been updated."); - }); - }); - } - - $scope.remove = function() { - Scopes.delete(ResourceServerScope, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route); - } - - $scope.reset = function() { - $route.reload(); - } - }); - } - }); - - $scope.checkNewNameAvailability = function () { - $instance.checkNameAvailability(function () {}); - } - - this.checkNameAvailability = function (onSuccess) { - if (!$scope.scope.name || $scope.scope.name.trim().length == 0) { - return; - } - ResourceServerScope.search({ - realm : $route.current.params.realm, - client : client.id, - name: $scope.scope.name - }, function(data) { - if (data && data.id && data.id != $scope.scope.id) { - Notifications.error("Name already in use by another scope, please choose another one."); - } else { - onSuccess(); - } - }); - } -}); - -module.controller('ResourceServerPolicyCtrl', function($scope, $http, $route, $location, realm, ResourceServer, ResourceServerPolicy, PolicyProvider, client, AuthzDialog, Notifications, KcStrings) { - $scope.realm = realm; - $scope.client = client; - $scope.policyProviders = []; - - $scope.query = { - realm: realm.realm, - client : client.id, - permission: false, - max: 20, - first : 0 - }; - - $scope.listSizes = [5, 10, 20]; - - PolicyProvider.query({ - realm : $route.current.params.realm, - client : client.id - }, function (data) { - for (i = 0; i < data.length; i++) { - if (data[i].type != 'resource' && data[i].type != 'scope') { - $scope.policyProviders.push(data[i]); - } - } - }); - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - $scope.searchQuery(); - }); - - $scope.addPolicy = function(policyType) { - if (KcStrings.endsWith(policyType.type, '.js')) { - ResourceServerPolicy.save({realm : realm.realm, client : client.id, type: policyType.type}, {name: policyType.name, type: policyType.type}, function(data) { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/"); - Notifications.success("The policy has been created."); - }); - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/" + policyType.type + "/create"); - } - } - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - ResourceServerPolicy.query($scope.query, function(data) { - $scope.policies = data; - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - if ($scope.detailsFilter) { - $scope.showDetails(); - } - }); - }; - - $scope.loadDetails = function (policy) { - if (policy.details) { - policy.details.loaded = !policy.details.loaded; - return; - } - - policy.details = {loaded: false}; - - ResourceServerPolicy.dependentPolicies({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(response) { - policy.dependentPolicies = response; - policy.details.loaded = true; - }); - } - - $scope.showDetails = function(item, event) { - if (event.target.localName == 'a' || event.target.localName == 'button') { - return; - } - if (item) { - $scope.loadDetails(item); - } else { - for (i = 0; i < $scope.policies.length; i++) { - $scope.loadDetails($scope.policies[i]); - } - } - }; - - $scope.delete = function(policy) { - $scope.policy = policy; - Policies.delete(ResourceServerPolicy, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route, false); - }; -}); - -module.controller('ResourceServerPermissionCtrl', function($scope, $http, $route, $location, realm, ResourceServer, ResourceServerPermission, PolicyProvider, client, AuthzDialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - $scope.policyProviders = []; - - $scope.query = { - realm: realm.realm, - client : client.id, - max : 20, - first : 0 - }; - - $scope.listSizes = [5, 10, 20]; - - PolicyProvider.query({ - realm : $route.current.params.realm, - client : client.id - }, function (data) { - for (i = 0; i < data.length; i++) { - if (data[i].type == 'resource' || data[i].type == 'scope') { - $scope.policyProviders.push(data[i]); - } - } - }); - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - $scope.searchQuery(); - }); - - $scope.addPolicy = function(policyType) { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/permission/" + policyType.type + "/create"); - } - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - ResourceServerPermission.query($scope.query, function(data) { - $scope.policies = data; - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - if ($scope.detailsFilter) { - $scope.showDetails(); - } - }); - }; - - $scope.loadDetails = function (policy) { - if (policy.details) { - policy.details.loaded = !policy.details.loaded; - return; - } - - policy.details = {loaded: false}; - - ResourceServerPermission.associatedPolicies({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(response) { - policy.associatedPolicies = response; - policy.details.loaded = true; - }); - } - - $scope.showDetails = function(item, event) { - if (event.target.localName == 'a' || event.target.localName == 'button') { - return; - } - if (item) { - $scope.loadDetails(item); - } else { - for (i = 0; i < $scope.policies.length; i++) { - $scope.loadDetails($scope.policies[i]); - } - } - }; - - $scope.delete = function(policy) { - $scope.policy = policy; - Policies.delete(ResourceServerPermission, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route, true); - }; -}); - -module.controller('ResourceServerPolicyResourceDetailCtrl', function($scope, $route, $location, realm, client, PolicyController, ResourceServerPermission, ResourceServerResource, policyViewState) { - PolicyController.onInit({ - getPolicyType : function() { - return "resource"; - }, - - isPermission : function() { - return true; - }, - - onInit : function() { - $scope.resourcesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - id: function(resource){ return resource._id; }, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerResource.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.policiesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - permission: false, - name: query.term.trim(), - max : 20, - first : 0 - }; - ResourceServerPermission.searchPolicies($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.applyToResourceType = function() { - if ($scope.applyToResourceTypeFlag) { - $scope.selectedResource = null; - } else { - $scope.policy.resourceType = null; - } - } - }, - - onInitUpdate : function(policy) { - if (!policy.resourceType) { - $scope.selectedResource = {}; - ResourceServerPermission.resources({ - realm: $route.current.params.realm, - client: client.id, - id: policy.id - }, function (resources) { - resources[0].text = resources[0].name; - $scope.selectedResource = resources[0]; - var copy = angular.copy($scope.selectedResource); - $scope.$watch('selectedResource', function() { - if (!angular.equals($scope.selectedResource, copy)) { - $scope.changed = true; - } - }, true); - }); - } else { - $scope.applyToResourceTypeFlag = true; - } - - ResourceServerPermission.associatedPolicies({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(policies) { - $scope.selectedPolicies = []; - for (i = 0; i < policies.length; i++) { - policies[i].text = policies[i].name; - $scope.selectedPolicies.push(policies[i]); - } - var copy = angular.copy($scope.selectedPolicies); - $scope.$watch('selectedPolicies', function() { - if (!angular.equals($scope.selectedPolicies, copy)) { - $scope.changed = true; - } - }, true); - }); - }, - - onUpdate : function() { - if ($scope.selectedResource && $scope.selectedResource._id) { - $scope.policy.resources = []; - $scope.policy.resources.push($scope.selectedResource._id); - } else { - $scope.policy.resources = []; - } - - var policies = []; - - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - }, - - onInitCreate : function(newPolicy) { - policyViewState.state.previousPage.name = 'authz-add-resource-permission'; - $scope.selectedResource = null; - var copy = angular.copy($scope.selectedResource); - $scope.$watch('selectedResource', function() { - if (!angular.equals($scope.selectedResource, copy)) { - $scope.changed = true; - } - }, true); - - $scope.selectedPolicies = null; - var copy = angular.copy($scope.selectedPolicies); - $scope.$watch('selectedPolicies', function() { - if (!angular.equals($scope.selectedPolicies, copy)) { - $scope.changed = true; - } - }, true); - - var resourceId = $location.search()['rsrid']; - - if (resourceId) { - ResourceServerResource.get({ - realm : $route.current.params.realm, - client : client.id, - rsrid : resourceId - }, function(data) { - data.text = data.name; - $scope.selectedResource = data; - }); - } - }, - - onCreate : function() { - if ($scope.selectedResource && $scope.selectedResource._id) { - $scope.policy.resources = []; - $scope.policy.resources.push($scope.selectedResource._id); - } else { - delete $scope.policy.resources - } - - var policies = []; - - if ($scope.selectedPolicies) { - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - }, - - onSaveState : function(policy) { - policyViewState.state.selectedResource = $scope.selectedResource; - policyViewState.state.applyToResourceTypeFlag = $scope.applyToResourceTypeFlag; - }, - - onRestoreState : function(policy) { - $scope.selectedResource = policyViewState.state.selectedResource; - $scope.applyToResourceTypeFlag = policyViewState.state.applyToResourceTypeFlag; - policy.resourceType = policyViewState.state.policy.resourceType; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyScopeDetailCtrl', function($scope, $route, $location, realm, client, PolicyController, ResourceServerPolicy, ResourceServerResource, ResourceServerScope, policyViewState) { - PolicyController.onInit({ - getPolicyType : function() { - return "scope"; - }, - - isPermission : function() { - return true; - }, - - onInit : function() { - $scope.scopesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerScope.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.resourcesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - id: function(resource){ return resource._id; }, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerResource.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.policiesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - permission: false, - name: query.term.trim(), - max : 20, - first : 0 - }; - ResourceServerPolicy.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.selectResource = function() { - $scope.selectedScopes = null; - if ($scope.selectedResource) { - ResourceServerResource.scopes({ - realm: $route.current.params.realm, - client: client.id, - rsrid: $scope.selectedResource._id - }, function (data) { - $scope.resourceScopes = data; - }); - } - } - }, - - onInitUpdate : function(policy) { - ResourceServerPolicy.resources({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(resources) { - if (resources.length > 0) { - for (i = 0; i < resources.length; i++) { - ResourceServerResource.get({ - realm: $route.current.params.realm, - client: client.id, - rsrid: resources[0]._id, - }, function (resource) { - ResourceServerResource.query({ - realm: $route.current.params.realm, - client: client.id, - _id: resource._id, - deep: false - }, function (resource) { - resource[0].text = resource[0].name; - $scope.selectedResource = resource[0]; - var copy = angular.copy($scope.selectedResource); - $scope.$watch('selectedResource', function() { - if (!angular.equals($scope.selectedResource, copy)) { - $scope.changed = true; - } - }, true); - ResourceServerResource.scopes({ - realm: $route.current.params.realm, - client: client.id, - rsrid: resource[0]._id - }, function (scopes) { - $scope.resourceScopes = scopes; - }); - }); - }); - } - - ResourceServerPolicy.scopes({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(scopes) { - $scope.selectedScopes = []; - for (i = 0; i < scopes.length; i++) { - scopes[i].text = scopes[i].name; - $scope.selectedScopes.push(scopes[i].id); - } - var copy = angular.copy($scope.selectedScopes); - $scope.$watch('selectedScopes', function() { - if (!angular.equals($scope.selectedScopes, copy)) { - $scope.changed = true; - } - }, true); - }); - } else { - $scope.selectedResource = null; - var copy = angular.copy($scope.selectedResource); - $scope.$watch('selectedResource', function() { - if (!angular.equals($scope.selectedResource, copy)) { - $scope.changed = true; - } - }, true); - ResourceServerPolicy.scopes({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(scopes) { - $scope.selectedScopes = []; - for (i = 0; i < scopes.length; i++) { - scopes[i].text = scopes[i].name; - $scope.selectedScopes.push(scopes[i]); - } - var copy = angular.copy($scope.selectedScopes); - $scope.$watch('selectedScopes', function() { - if (!angular.equals($scope.selectedScopes, copy)) { - $scope.changed = true; - } - }, true); - }); - } - }); - - ResourceServerPolicy.associatedPolicies({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(policies) { - $scope.selectedPolicies = []; - for (i = 0; i < policies.length; i++) { - policies[i].text = policies[i].name; - $scope.selectedPolicies.push(policies[i]); - } - var copy = angular.copy($scope.selectedPolicies); - $scope.$watch('selectedPolicies', function() { - if (!angular.equals($scope.selectedPolicies, copy)) { - $scope.changed = true; - } - }, true); - }); - }, - - onUpdate : function() { - if ($scope.selectedResource != null) { - $scope.policy.resources = [$scope.selectedResource._id]; - } else { - $scope.policy.resources = []; - } - - var scopes = []; - - for (i = 0; i < $scope.selectedScopes.length; i++) { - if ($scope.selectedScopes[i].id) { - scopes.push($scope.selectedScopes[i].id); - } else { - scopes.push($scope.selectedScopes[i]); - } - } - - $scope.policy.scopes = scopes; - - var policies = []; - - if ($scope.selectedPolicies) { - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - }, - - onInitCreate : function(newPolicy) { - policyViewState.state.previousPage.name = 'authz-add-scope-permission'; - var scopeId = $location.search()['scpid']; - - if (scopeId) { - ResourceServerScope.get({ - realm: $route.current.params.realm, - client: client.id, - id: scopeId, - }, function (data) { - data.text = data.name; - if (!$scope.policy.scopes) { - $scope.selectedScopes = []; - } - $scope.selectedScopes.push(data); - }); - } - }, - - onCreate : function() { - if ($scope.selectedResource != null) { - $scope.policy.resources = [$scope.selectedResource._id]; - } - - var scopes = []; - - for (i = 0; i < $scope.selectedScopes.length; i++) { - if ($scope.selectedScopes[i].id) { - scopes.push($scope.selectedScopes[i].id); - } else { - scopes.push($scope.selectedScopes[i]); - } - } - - $scope.policy.scopes = scopes; - - var policies = []; - - if ($scope.selectedPolicies) { - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - }, - - onSaveState : function(policy) { - policyViewState.state.selectedScopes = $scope.selectedScopes; - policyViewState.state.selectedResource = $scope.selectedResource; - policyViewState.state.resourceScopes = $scope.resourceScopes; - }, - - onRestoreState : function(policy) { - $scope.selectedScopes = policyViewState.state.selectedScopes; - $scope.selectedResource = policyViewState.state.selectedResource; - $scope.resourceScopes = policyViewState.state.resourceScopes; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyUserDetailCtrl', function($scope, $route, realm, client, PolicyController, User) { - PolicyController.onInit({ - getPolicyType : function() { - return "user"; - }, - - onInit : function() { - $scope.usersUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - User.query({realm: $route.current.params.realm, search: query.term.trim(), max: 20}, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - return object.username; - } - }; - - $scope.selectedUsers = []; - - $scope.selectUser = function(user) { - if (!user || !user.id) { - return; - } - - $scope.selectedUser = null; - - for (i = 0; i < $scope.selectedUsers.length; i++) { - if ($scope.selectedUsers[i].id == user.id) { - return; - } - } - - $scope.selectedUsers.push(user); - } - - $scope.removeFromList = function(list, user) { - for (i = 0; i < angular.copy(list).length; i++) { - if (user == list[i]) { - list.splice(i, 1); - } - } - } - }, - - onInitUpdate : function(policy) { - var selectedUsers = []; - - if (policy.users) { - var users = policy.users; - - for (i = 0; i < users.length; i++) { - User.get({realm: $route.current.params.realm, userId: users[i]}, function(data) { - selectedUsers.push(data); - $scope.selectedUsers = angular.copy(selectedUsers); - }); - } - } - - $scope.$watch('selectedUsers', function() { - if (!angular.equals($scope.selectedUsers, selectedUsers)) { - $scope.changed = true; - } else { - $scope.changed = false; - } - }, true); - }, - - onUpdate : function() { - var users = []; - - for (i = 0; i < $scope.selectedUsers.length; i++) { - users.push($scope.selectedUsers[i].id); - } - - $scope.policy.users = users; - delete $scope.policy.config; - }, - - onCreate : function() { - var users = []; - - for (i = 0; i < $scope.selectedUsers.length; i++) { - users.push($scope.selectedUsers[i].id); - } - - $scope.policy.users = users; - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyClientDetailCtrl', function($scope, $route, realm, client, PolicyController, Client) { - PolicyController.onInit({ - getPolicyType : function() { - return "client"; - }, - - onInit : function() { - clientSelectControl($scope, $route.current.params.realm, Client); - - $scope.selectedClients = []; - - $scope.selectClient = function(client) { - if (!client || !client.id) { - return; - } - - $scope.selectedClient = null; - - for (var i = 0; i < $scope.selectedClients.length; i++) { - if ($scope.selectedClients[i].id == client.id) { - return; - } - } - - $scope.selectedClients.push(client); - } - - $scope.removeFromList = function(client) { - var index = $scope.selectedClients.indexOf(client); - if (index != -1) { - $scope.selectedClients.splice(index, 1); - } - } - }, - - onInitUpdate : function(policy) { - var selectedClients = []; - - if (policy.clients) { - var clients = policy.clients; - - for (var i = 0; i < clients.length; i++) { - Client.get({realm: $route.current.params.realm, client: clients[i]}, function(data) { - selectedClients.push(data); - $scope.selectedClients = angular.copy(selectedClients); - }); - } - } - - $scope.$watch('selectedClients', function() { - if (!angular.equals($scope.selectedClients, selectedClients)) { - $scope.changed = true; - } else { - $scope.changed = false; - } - }, true); - }, - - onUpdate : function() { - var clients = []; - - for (var i = 0; i < $scope.selectedClients.length; i++) { - clients.push($scope.selectedClients[i].id); - } - - $scope.policy.clients = clients; - delete $scope.policy.config; - }, - - onInitCreate : function() { - var selectedClients = []; - - $scope.$watch('selectedClients', function() { - if (!angular.equals($scope.selectedClients, selectedClients)) { - $scope.changed = true; - } - }, true); - }, - - onCreate : function() { - var clients = []; - - for (var i = 0; i < $scope.selectedClients.length; i++) { - clients.push($scope.selectedClients[i].id); - } - - $scope.policy.clients = clients; - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyRoleDetailCtrl', function($scope, $route, realm, client, Client, ClientRole, PolicyController, Role, RoleById) { - PolicyController.onInit({ - getPolicyType : function() { - return "role"; - }, - - onInit : function() { - Role.query({realm: $route.current.params.realm}, function(data) { - $scope.roles = data; - }); - - Client.query({realm: $route.current.params.realm}, function (data) { - $scope.clients = data; - }); - - $scope.selectedRoles = []; - - $scope.selectRole = function(role) { - if (!role || !role.id) { - return; - } - - $scope.selectedRole = null; - - for (i = 0; i < $scope.selectedRoles.length; i++) { - if ($scope.selectedRoles[i].id == role.id) { - return; - } - } - - $scope.selectedRoles.push(role); - - var clientRoles = []; - - if ($scope.clientRoles) { - for (i = 0; i < $scope.clientRoles.length; i++) { - if ($scope.clientRoles[i].id != role.id) { - clientRoles.push($scope.clientRoles[i]); - } - } - $scope.clientRoles = clientRoles; - } - } - - $scope.removeFromList = function(role) { - if ($scope.clientRoles && $scope.selectedClient && $scope.selectedClient.id == role.containerId) { - $scope.clientRoles.push(role); - } - var index = $scope.selectedRoles.indexOf(role); - if (index != -1) { - $scope.selectedRoles.splice(index, 1); - } - } - - $scope.selectClient = function() { - if (!$scope.selectedClient) { - $scope.clientRoles = []; - return; - } - ClientRole.query({realm: $route.current.params.realm, client: $scope.selectedClient.id}, function(data) { - var roles = []; - - for (j = 0; j < data.length; j++) { - var defined = false; - - for (i = 0; i < $scope.selectedRoles.length; i++) { - if ($scope.selectedRoles[i].id == data[j].id) { - defined = true; - break; - } - } - - if (!defined) { - data[j].container = {}; - data[j].container.name = $scope.selectedClient.clientId; - roles.push(data[j]); - } - } - $scope.clientRoles = roles; - }); - } - }, - - onInitUpdate : function(policy) { - var selectedRoles = []; - - if (policy.roles) { - var roles = policy.roles; - - for (i = 0; i < roles.length; i++) { - RoleById.get({realm: $route.current.params.realm, role: roles[i].id}, function(data) { - for (i = 0; i < roles.length; i++) { - if (roles[i].id == data.id) { - data.required = roles[i].required ? true : false; - } - } - for (i = 0; i < $scope.clients.length; i++) { - if ($scope.clients[i].id == data.containerId) { - data.container = {}; - data.container.name = $scope.clients[i].clientId; - } - } - selectedRoles.push(data); - $scope.selectedRoles = angular.copy(selectedRoles); - }); - } - } - - $scope.$watch('selectedRoles', function() { - if (!angular.equals($scope.selectedRoles, selectedRoles)) { - $scope.changed = true; - } else { - $scope.changed = false; - } - }, true); - }, - - onUpdate : function() { - var roles = []; - - for (i = 0; i < $scope.selectedRoles.length; i++) { - var role = {}; - role.id = $scope.selectedRoles[i].id; - if ($scope.selectedRoles[i].required) { - role.required = $scope.selectedRoles[i].required; - } - roles.push(role); - } - - $scope.policy.roles = roles; - delete $scope.policy.config; - }, - - onCreate : function() { - var roles = []; - - for (i = 0; i < $scope.selectedRoles.length; i++) { - var role = {}; - role.id = $scope.selectedRoles[i].id; - if ($scope.selectedRoles[i].required) { - role.required = $scope.selectedRoles[i].required; - } - roles.push(role); - } - - $scope.policy.roles = roles; - delete $scope.policy.config; - } - }, realm, client, $scope); - - $scope.hasRealmRole = function () { - for (i = 0; i < $scope.selectedRoles.length; i++) { - if (!$scope.selectedRoles[i].clientRole) { - return true; - } - } - return false; - } - - $scope.hasClientRole = function () { - for (i = 0; i < $scope.selectedRoles.length; i++) { - if ($scope.selectedRoles[i].clientRole) { - return true; - } - } - return false; - } -}); - -module.controller('ResourceServerPolicyGroupDetailCtrl', function($scope, $route, realm, client, Client, Groups, Group, PolicyController, Notifications, $translate) { - PolicyController.onInit({ - getPolicyType : function() { - return "group"; - }, - - onInit : function() { - $scope.tree = []; - - Groups.query({realm: $route.current.params.realm}, function(groups) { - $scope.groups = groups; - $scope.groupList = [ - {"id" : "realm", "name": $translate.instant('groups'), - "subGroups" : groups} - ]; - }); - - var isLeaf = function(node) { - return node.id != "realm" && (!node.subGroups || node.subGroups.length == 0); - } - - $scope.getGroupClass = function(node) { - if (node.id == "realm") { - return 'pficon pficon-users'; - } - if (isLeaf(node)) { - return 'normal'; - } - if (node.subGroups.length && node.collapsed) return 'collapsed'; - if (node.subGroups.length && !node.collapsed) return 'expanded'; - return 'collapsed'; - - } - - $scope.getSelectedClass = function(node) { - if (node.selected) { - return 'selected'; - } else if ($scope.cutNode && $scope.cutNode.id == node.id) { - return 'cut'; - } - return undefined; - } - - $scope.selectGroup = function(group) { - for (i = 0; i < $scope.selectedGroups.length; i++) { - if ($scope.selectedGroups[i].id == group.id) { - return - } - } - if (group.id == "realm") { - Notifications.error("You must choose a group"); - return; - } - $scope.selectedGroups.push({id: group.id, path: group.path}); - $scope.changed = true; - } - - $scope.extendChildren = function(group) { - $scope.changed = true; - } - - $scope.removeFromList = function(group) { - var index = $scope.selectedGroups.indexOf(group); - if (index != -1) { - $scope.selectedGroups.splice(index, 1); - $scope.changed = true; - } - } - }, - - onInitCreate : function(policy) { - var selectedGroups = []; - - $scope.selectedGroups = angular.copy(selectedGroups); - - $scope.$watch('selectedGroups', function() { - if (!angular.equals($scope.selectedGroups, selectedGroups)) { - $scope.changed = true; - } else { - $scope.changed = PolicyController.isNewAssociatedPolicy(); - } - }, true); - }, - - onInitUpdate : function(policy) { - $scope.selectedGroups = policy.groups; - - angular.forEach($scope.selectedGroups, function(group, index){ - Group.get({realm: $route.current.params.realm, groupId: group.id}, function (existing) { - group.path = existing.path; - }); - }); - - $scope.$watch('selectedGroups', function() { - if (!$scope.changed) { - return; - } - if (!angular.equals($scope.selectedGroups, selectedGroups)) { - $scope.changed = true; - } else { - $scope.changed = false; - } - }, true); - }, - - onUpdate : function() { - $scope.policy.groups = $scope.selectedGroups; - delete $scope.policy.config; - }, - - onCreate : function() { - $scope.policy.groups = $scope.selectedGroups; - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyJSDetailCtrl', function($scope, $route, $location, realm, PolicyController, client, serverInfo) { - PolicyController.onInit({ - getPolicyType : function() { - return "js"; - }, - - onInit : function() { - $scope.readOnly = !serverInfo.featureEnabled('UPLOAD_SCRIPTS'); - $scope.initEditor = function(editor){ - editor.$blockScrolling = Infinity; - editor.setReadOnly($scope.readOnly); - var session = editor.getSession(); - session.setMode('ace/mode/javascript'); - }; - }, - - onInitUpdate : function(policy) { - - }, - - onUpdate : function() { - delete $scope.policy.config; - }, - - onInitCreate : function(newPolicy) { - }, - - onCreate : function() { - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyTimeDetailCtrl', function($scope, $route, $location, realm, PolicyController, client) { - - function clearEmptyStrings() { - if ($scope.policy.notBefore != undefined && $scope.policy.notBefore.trim() == '') { - $scope.policy.notBefore = null; - } - if ($scope.policy.notOnOrAfter != undefined && $scope.policy.notOnOrAfter.trim() == '') { - $scope.policy.notOnOrAfter = null; - } - } - - PolicyController.onInit({ - getPolicyType : function() { - return "time"; - }, - - onInit : function() { - - }, - - onInitUpdate : function(policy) { - if (policy.dayMonth) { - policy.dayMonth = parseInt(policy.dayMonth); - } - if (policy.dayMonthEnd) { - policy.dayMonthEnd = parseInt(policy.dayMonthEnd); - } - if (policy.month) { - policy.month = parseInt(policy.month); - } - if (policy.monthEnd) { - policy.monthEnd = parseInt(policy.monthEnd); - } - if (policy.year) { - policy.year = parseInt(policy.year); - } - if (policy.yearEnd) { - policy.yearEnd = parseInt(policy.yearEnd); - } - if (policy.hour) { - policy.hour = parseInt(policy.hour); - } - if (policy.hourEnd) { - policy.hourEnd = parseInt(policy.hourEnd); - } - if (policy.minute) { - policy.minute = parseInt(policy.minute); - } - if (policy.minuteEnd) { - policy.minuteEnd = parseInt(policy.minuteEnd); - } - }, - - onUpdate : function() { - clearEmptyStrings(); - delete $scope.policy.config; - }, - - onInitCreate : function(newPolicy) { - }, - - onCreate : function() { - clearEmptyStrings(); - delete $scope.policy.config; - } - }, realm, client, $scope); - - $scope.isRequired = function () { - var policy = $scope.policy; - - if (!policy) { - return true; - } - - if (policy.notOnOrAfter || policy.notBefore - || policy.dayMonth - || policy.month - || policy.year - || policy.hour - || policy.minute) { - return false; - } - return true; - } -}); - -module.controller('ResourceServerPolicyAggregateDetailCtrl', function($scope, $route, $location, realm, PolicyController, ResourceServerPolicy, client, PolicyProvider, policyViewState) { - PolicyController.onInit({ - getPolicyType : function() { - return "aggregate"; - }, - - onInit : function() { - $scope.policiesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - permission: false, - name: query.term.trim(), - max : 20, - first : 0 - }; - ResourceServerPolicy.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - }, - - onInitUpdate : function(policy) { - ResourceServerPolicy.associatedPolicies({ - realm : $route.current.params.realm, - client : client.id, - id : policy.id - }, function(policies) { - $scope.selectedPolicies = []; - for (i = 0; i < policies.length; i++) { - policies[i].text = policies[i].name; - $scope.selectedPolicies.push(policies[i]); - } - var copy = angular.copy($scope.selectedPolicies); - $scope.$watch('selectedPolicies', function() { - if (!angular.equals($scope.selectedPolicies, copy)) { - $scope.changed = true; - } - }, true); - }); - }, - - onUpdate : function() { - var policies = []; - - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - }, - - onInitCreate : function(newPolicy) { - policyViewState.state.previousPage.name = 'authz-add-aggregated-policy'; - }, - - onCreate : function() { - var policies = []; - - for (i = 0; i < $scope.selectedPolicies.length; i++) { - policies.push($scope.selectedPolicies[i].id); - } - - $scope.policy.policies = policies; - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.controller('ResourceServerPolicyClientScopeDetailCtrl', function($scope, $route, realm, client, ClientScope, PolicyController) { - PolicyController.onInit({ - getPolicyType : function() { - return "client-scope"; - }, - - onInit : function() { - ClientScope.query({realm: $route.current.params.realm}, function(data) { - $scope.clientScopes = data; - }); - - $scope.selectedClientScopes = []; - - $scope.selectClientScope = function(clientScope) { - if (!clientScope || !clientScope.id) { - return; - } - - $scope.selectedClientScope = null; - - for (i = 0; i < $scope.selectedClientScopes.length; i++) { - if ($scope.selectedClientScopes[i].id == clientScope.id) { - return; - } - } - - $scope.selectedClientScopes.push(clientScope); - } - - $scope.removeFromList = function(clientScope) { - var index = $scope.selectedClientScopes.indexOf(clientScope); - if (index != -1) { - $scope.selectedClientScopes.splice(index, 1); - } - } - }, - - onInitUpdate : function(policy) { - var selectedClientScopes = []; - - if (policy.clientScopes) { - var clientScopes = policy.clientScopes; - - for (i = 0; i < clientScopes.length; i++) { - ClientScope.get({realm: $route.current.params.realm, clientScope: clientScopes[i].id}, function(data) { - for (i = 0; i < clientScopes.length; i++) { - if (clientScopes[i].id == data.id) { - data.required = clientScopes[i].required ? true : false; - } - } - selectedClientScopes.push(data); - $scope.selectedClientScopes = angular.copy(selectedClientScopes); - }); - } - } - - $scope.$watch('selectedClientScopes', function() { - if (!angular.equals($scope.selectedClientScopes, selectedClientScopes)) { - $scope.changed = true; - } else { - $scope.changed = false; - } - }, true); - }, - - onUpdate : function() { - var clientScopes = []; - - for (i = 0; i < $scope.selectedClientScopes.length; i++) { - var clientScope = {}; - clientScope.id = $scope.selectedClientScopes[i].id; - if ($scope.selectedClientScopes[i].required) { - clientScope.required = $scope.selectedClientScopes[i].required; - } - clientScopes.push(clientScope); - } - - $scope.policy.clientScopes = clientScopes; - delete $scope.policy.config; - }, - - onCreate : function() { - var clientScopes = []; - - for (i = 0; i < $scope.selectedClientScopes.length; i++) { - var clientScope = {}; - clientScope.id = $scope.selectedClientScopes[i].id; - if ($scope.selectedClientScopes[i].required) { - clientScope.required = $scope.selectedClientScopes[i].required; - } - clientScopes.push(clientScope); - } - - $scope.policy.clientScopes = clientScopes; - delete $scope.policy.config; - } - }, realm, client, $scope); -}); - -module.service("PolicyController", function($http, $route, $location, ResourceServer, ResourceServerPolicy, ResourceServerPermission, AuthzDialog, Notifications, policyViewState, PolicyProvider, viewState) { - - var PolicyController = {}; - - PolicyController.isNewAssociatedPolicy = function() { - return $route.current.params['new_policy'] != null; - } - - PolicyController.isBackNewAssociatedPolicy = function() { - return $route.current.params['back'] != null; - } - - PolicyController.onInit = function(delegate, realm, client, $scope) { - $scope.policyProviders = []; - - PolicyProvider.query({ - realm : $route.current.params.realm, - client : client.id - }, function (data) { - for (i = 0; i < data.length; i++) { - if (data[i].type != 'resource' && data[i].type != 'scope') { - $scope.policyProviders.push(data[i]); - } - } - }); - - if ((!policyViewState.state || !PolicyController.isBackNewAssociatedPolicy()) && !PolicyController.isNewAssociatedPolicy()) { - policyViewState.state = {}; - } - - if (!policyViewState.state.previousPage) { - policyViewState.state.previousPage = {}; - } - - $scope.policyViewState = policyViewState; - - $scope.addPolicy = function(policyType) { - policyViewState.state.policy = $scope.policy; - - if (delegate.onSaveState) { - delegate.onSaveState($scope.policy); - } - - if ($scope.selectedPolicies) { - policyViewState.state.selectedPolicies = $scope.selectedPolicies; - } - var previousUrl = window.location.href.substring(window.location.href.indexOf('/realms')); - - if (previousUrl.indexOf('back=true') == -1) { - previousUrl = previousUrl + (previousUrl.indexOf('?') == -1 ? '?' : '&') + 'back=true'; - } - policyViewState.state.previousUrl = previousUrl; - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/" + policyType.type + "/create?new_policy=true"); - } - - $scope.detailPolicy = function(policy) { - policyViewState.state.policy = $scope.policy; - if (delegate.onSaveState) { - delegate.onSaveState($scope.policy); - } - if ($scope.selectedPolicies) { - policyViewState.state.selectedPolicies = $scope.selectedPolicies; - } - var previousUrl = window.location.href.substring(window.location.href.indexOf('/realms')); - - if (previousUrl.indexOf('back=true') == -1) { - previousUrl = previousUrl + (previousUrl.indexOf('?') == -1 ? '?' : '&') + 'back=true'; - } - policyViewState.state.previousUrl = previousUrl; - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/" + policy.type + "/" + policy.id + "?new_policy=true"); - } - - $scope.removePolicy = function(list, policy) { - for (i = 0; i < angular.copy(list).length; i++) { - if (policy.id == list[i].id) { - list.splice(i, 1); - } - } - } - - $scope.selectPolicy = function(policy) { - if (!policy || !policy.id) { - return; - } - - if (!$scope.selectedPolicies) { - $scope.selectedPolicies = []; - } - - $scope.selectedPolicy = null; - - for (i = 0; i < $scope.selectedPolicies.length; i++) { - if ($scope.selectedPolicies[i].id == policy.id) { - return; - } - } - - $scope.selectedPolicies.push(policy); - } - - $scope.createNewPolicy = function() { - $scope.showNewPolicy = true; - } - - $scope.cancelCreateNewPolicy = function() { - $scope.showNewPolicy = false; - } - - $scope.historyBackOnSaveOrCancel = PolicyController.isNewAssociatedPolicy(); - - if (!delegate.isPermission) { - delegate.isPermission = function () { - return false; - } - } - - var service = ResourceServerPolicy; - - if (delegate.isPermission()) { - service = ResourceServerPermission; - } - - $scope.realm = realm; - $scope.client = client; - - $scope.decisionStrategies = ['AFFIRMATIVE', 'UNANIMOUS', 'CONSENSUS']; - $scope.logics = ['POSITIVE', 'NEGATIVE']; - - delegate.onInit(); - - var $instance = this; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - - var policyId = $route.current.params.id; - - if (!policyId) { - $scope.create = true; - - var policy = {}; - - policy.type = delegate.getPolicyType(); - policy.config = {}; - policy.logic = 'POSITIVE'; - policy.decisionStrategy = 'UNANIMOUS'; - - $scope.changed = $scope.historyBackOnSaveOrCancel || PolicyController.isBackNewAssociatedPolicy(); - - if (viewState.state != null && viewState.state.previousUrl != null) { - $scope.previousUrl = viewState.state.previousUrl; - policyViewState.state.rootUrl = $scope.previousUrl; - viewState.state = {}; - } - - $scope.policy = angular.copy(policy); - - $scope.$watch('policy', function() { - if (!angular.equals($scope.policy, policy)) { - $scope.changed = true; - } - }, true); - - if (PolicyController.isBackNewAssociatedPolicy()) { - if (delegate.onRestoreState) { - delegate.onRestoreState($scope.policy); - } - $instance.restoreState($scope); - } else if (delegate.onInitCreate) { - delegate.onInitCreate(policy); - } - - $scope.save = function() { - $instance.checkNameAvailability(function () { - if (delegate.onCreate) { - delegate.onCreate(); - } - service.save({realm : realm.realm, client : client.id, type: $scope.policy.type}, $scope.policy, function(data) { - if (delegate.isPermission()) { - if ($scope.historyBackOnSaveOrCancel || policyViewState.state.rootUrl != null) { - if (policyViewState.state.rootUrl != null) { - $location.url(policyViewState.state.rootUrl); - } else { - policyViewState.state.newPolicyName = $scope.policy.name; - $location.url(policyViewState.state.previousUrl); - } - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/permission/" + $scope.policy.type + "/" + data.id); - } - Notifications.success("The permission has been created."); - } else { - if ($scope.historyBackOnSaveOrCancel) { - policyViewState.state.newPolicyName = $scope.policy.name; - $location.url(policyViewState.state.previousUrl); - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/" + $scope.policy.type + "/" + data.id); - } - Notifications.success("The policy has been created."); - } - }); - }); - } - - $scope.reset = function() { - if (delegate.isPermission()) { - if ($scope.historyBackOnSaveOrCancel || policyViewState.state.rootUrl != null) { - if (policyViewState.state.rootUrl != null) { - $location.url(policyViewState.state.rootUrl); - } else { - $location.url(policyViewState.state.previousUrl); - } - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/permission/"); - } - } else { - if ($scope.historyBackOnSaveOrCancel) { - $location.url(policyViewState.state.previousUrl); - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/"); - } - } - } - } else { - service.get({ - realm: realm.realm, - client : client.id, - type: delegate.getPolicyType(), - id: $route.current.params.id - }, function(data) { - $scope.originalPolicy = data; - var policy = angular.copy(data); - - $scope.changed = $scope.historyBackOnSaveOrCancel || PolicyController.isBackNewAssociatedPolicy(); - $scope.policy = angular.copy(policy); - - if (PolicyController.isBackNewAssociatedPolicy()) { - if (delegate.onRestoreState) { - delegate.onRestoreState($scope.policy); - } - $instance.restoreState($scope); - } else if (delegate.onInitUpdate) { - delegate.onInitUpdate($scope.policy); - } - - $scope.$watch('policy', function() { - if (!angular.equals($scope.policy, policy)) { - $scope.changed = true; - } - }, true); - - - $scope.save = function() { - $instance.checkNameAvailability(function () { - if (delegate.onUpdate) { - delegate.onUpdate(); - } - service.update({realm : realm.realm, client : client.id, type: $scope.policy.type, id : $scope.policy.id}, $scope.policy, function() { - if (delegate.isPermission()) { - if ($scope.historyBackOnSaveOrCancel) { - $location.url(policyViewState.state.previousUrl); - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/permission/" + $scope.policy.type + "/" + $scope.policy.id); - } - $route.reload(); - Notifications.success("The permission has been updated."); - } else { - if ($scope.historyBackOnSaveOrCancel) { - $location.url(policyViewState.state.previousUrl); - } else { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/authz/resource-server/policy/" + $scope.policy.type + "/" + $scope.policy.id); - } - $route.reload(); - Notifications.success("The policy has been updated."); - } - }); - }); - } - - $scope.reset = function() { - if ($scope.historyBackOnSaveOrCancel) { - $location.url(policyViewState.state.previousUrl); - } else { - var freshPolicy = angular.copy(data); - - if (delegate.onInitUpdate) { - delegate.onInitUpdate(freshPolicy); - } - - $scope.policy = angular.copy(freshPolicy); - $scope.changed = false; - } - } - }); - - $scope.remove = function() { - Policies.delete(ResourceServerPolicy, $route.current.params.realm, client, $scope, AuthzDialog, $location, Notifications, $route, delegate.isPermission()); - } - } - }); - - $scope.checkNewNameAvailability = function () { - $instance.checkNameAvailability(function () {}); - } - - this.checkNameAvailability = function (onSuccess) { - if (!$scope.policy.name || $scope.policy.name.trim().length == 0) { - return; - } - ResourceServerPolicy.search({ - realm: $route.current.params.realm, - client: client.id, - name: $scope.policy.name - }, function(data) { - if (data && data.id && data.id != $scope.policy.id) { - Notifications.error("Name already in use by another policy or permission, please choose another one."); - } else { - onSuccess(); - } - }); - } - - this.restoreState = function($scope) { - $scope.policy.name = policyViewState.state.policy.name; - $scope.policy.description = policyViewState.state.policy.description; - $scope.policy.decisionStrategy = policyViewState.state.policy.decisionStrategy; - $scope.policy.logic = policyViewState.state.policy.logic; - $scope.selectedPolicies = policyViewState.state.selectedPolicies; - - if (!$scope.selectedPolicies) { - $scope.selectedPolicies = []; - } - - $scope.changed = true; - var previousPage = policyViewState.state.previousPage; - - if (policyViewState.state.newPolicyName) { - ResourceServerPolicy.query({ - realm: realm.realm, - client : client.id, - permission: false, - name: policyViewState.state.newPolicyName, - max : 20, - first : 0 - }, function(response) { - for (i = 0; i < response.length; i++) { - if (response[i].name == policyViewState.state.newPolicyName) { - response[i].text = response[i].name; - $scope.selectedPolicies.push(response[i]); - } - } - - var rootUrl = policyViewState.state.rootUrl; - policyViewState.state = {}; - policyViewState.state.previousPage = previousPage; - policyViewState.state.rootUrl = rootUrl; - }); - } else { - var rootUrl = policyViewState.state.rootUrl; - policyViewState.state = {}; - policyViewState.state.previousPage = previousPage; - policyViewState.state.rootUrl = rootUrl; - } - } - } - - return PolicyController; -}); - -module.controller('PolicyEvaluateCtrl', function($scope, $http, $route, $location, realm, clients, roles, ResourceServer, client, ResourceServerResource, ResourceServerScope, User, Notifications) { - $scope.realm = realm; - $scope.client = client; - $scope.clients = clients; - $scope.roles = roles; - $scope.authzRequest = {}; - $scope.authzRequest.resources = []; - $scope.authzRequest.context = {}; - $scope.authzRequest.context.attributes = {}; - $scope.authzRequest.roleIds = []; - $scope.resultUrl = resourceUrl + '/partials/authz/policy/resource-server-policy-evaluate-result.html'; - - $scope.addContextAttribute = function() { - if (!$scope.newContextAttribute.value || $scope.newContextAttribute.value == '') { - Notifications.error("You must provide a value to a context attribute."); - return; - } - - $scope.authzRequest.context.attributes[$scope.newContextAttribute.key] = $scope.newContextAttribute.value; - delete $scope.newContextAttribute; - } - - $scope.removeContextAttribute = function(key) { - delete $scope.authzRequest.context.attributes[key]; - } - - $scope.getContextAttribute = function(key) { - for (i = 0; i < $scope.defaultContextAttributes.length; i++) { - if ($scope.defaultContextAttributes[i].key == key) { - return $scope.defaultContextAttributes[i]; - } - } - - return $scope.authzRequest.context.attributes[key]; - } - - $scope.getContextAttributeName = function(key) { - var attribute = $scope.getContextAttribute(key); - - if (!attribute.name) { - return key; - } - - return attribute.name; - } - - $scope.defaultContextAttributes = [ - { - key : "custom", - name : "Custom Attribute...", - custom: true - }, - { - key : "kc.identity.authc.method", - name : "Authentication Method", - values: [ - { - key : "pwd", - name : "Password" - }, - { - key : "otp", - name : "One-Time Password" - }, - { - key : "kbr", - name : "Kerberos" - } - ] - }, - { - key : "kc.realm.name", - name : "Realm" - }, - { - key : "kc.time.date_time", - name : "Date/Time (MM/dd/yyyy hh:mm:ss)" - }, - { - key : "kc.client.network.ip_address", - name : "Client IPv4 Address" - }, - { - key : "kc.client.network.host", - name : "Client Host" - }, - { - key : "kc.client.user_agent", - name : "Client/User Agent" - } - ]; - - $scope.isDefaultContextAttribute = function() { - if (!$scope.newContextAttribute) { - return true; - } - - if ($scope.newContextAttribute.custom) { - return false; - } - - if (!$scope.getContextAttribute($scope.newContextAttribute.key).custom) { - return true; - } - - return false; - } - - $scope.selectDefaultContextAttribute = function() { - $scope.newContextAttribute = angular.copy($scope.newContextAttribute); - } - - $scope.setApplyToResourceType = function() { - delete $scope.newResource; - $scope.authzRequest.resources = []; - } - - $scope.addResource = function() { - var resource = angular.copy($scope.newResource); - - if (!resource) { - resource = {}; - } - - delete resource.text; - - if (!$scope.newScopes || (resource._id != null && $scope.newScopes.length > 0 && $scope.newScopes[0].id)) { - $scope.newScopes = []; - } - - var scopes = []; - - for (i = 0; i < $scope.newScopes.length; i++) { - if ($scope.newScopes[i].name) { - scopes.push($scope.newScopes[i].name); - } else { - scopes.push($scope.newScopes[i]); - } - } - - resource.scopes = scopes; - - $scope.authzRequest.resources.push(resource); - - delete $scope.newResource; - delete $scope.newScopes; - } - - $scope.removeResource = function(index) { - $scope.authzRequest.resources.splice(index, 1); - } - - $scope.resolveScopes = function() { - if ($scope.newResource._id) { - $scope.newResource.scopes = []; - $scope.scopes = []; - ResourceServerResource.scopes({ - realm: $route.current.params.realm, - client: client.id, - rsrid: $scope.newResource._id - }, function (data) { - $scope.scopes = data; - }); - } - } - - $scope.reevaluate = function() { - if ($scope.authzRequest.entitlements) { - $scope.entitlements(); - } else { - $scope.save(); - } - } - - $scope.showAuthzData = function() { - $scope.showRpt = true; - } - - $scope.save = function() { - $scope.authzRequest.entitlements = false; - if ($scope.applyResourceType) { - if (!$scope.newResource) { - $scope.newResource = {}; - } - if (!$scope.newScopes || ($scope.newResource._id != null && $scope.newScopes.length > 0 && $scope.newScopes[0].id)) { - $scope.newScopes = []; - } - - var scopes = angular.copy($scope.newScopes); - - for (i = 0; i < scopes.length; i++) { - delete scopes[i].text; - } - - $scope.authzRequest.resources[0].scopes = scopes; - } - - $http.post(authUrl + '/admin/realms/'+ $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/policy/evaluate' - , $scope.authzRequest).then(function(response) { - $scope.evaluationResult = response.data; - $scope.showResultTab(); - }); - } - - $scope.entitlements = function() { - $scope.authzRequest.entitlements = true; - $http.post(authUrl + '/admin/realms/'+ $route.current.params.realm + '/clients/' + client.id + '/authz/resource-server/policy/evaluate' - , $scope.authzRequest).then(function(response) { - $scope.evaluationResult = response.data; - $scope.showResultTab(); - }); - } - - $scope.showResultTab = function() { - $scope.showResult = true; - $scope.showRpt = false; - } - - $scope.showRequestTab = function() { - $scope.showResult = false; - $scope.showRpt = false; - } - - $scope.usersUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - User.query({realm: $route.current.params.realm, search: query.term.trim(), max: 20}, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.username; - return object.username; - } - }; - - $scope.resourcesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - id: function(resource){ return resource._id; }, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerResource.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - $scope.scopesUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - client : client.id, - name: query.term.trim(), - deep: false, - max : 20, - first : 0 - }; - ResourceServerScope.query($scope.query, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.name; - return object.name; - } - }; - - ResourceServer.get({ - realm : $route.current.params.realm, - client : client.id - }, function(data) { - $scope.server = data; - }); - - $scope.selectUser = function(user) { - if (!user || !user.id) { - $scope.selectedUser = null; - $scope.authzRequest.userId = ''; - return; - } - - $scope.authzRequest.userId = user.id; - } - - $scope.reset = function() { - $scope.authzRequest = angular.copy(authzRequest); - $scope.changed = false; - } -}); - -getManageClientId = function(realm) { - if (realm.realm == masterRealm) { - return 'master-realm'; - } else { - return 'realm-management'; - } -} - -module.controller('RealmRolePermissionsCtrl', function($scope, $http, $route, $location, realm, role, RoleManagementPermissions, Client, Notifications, Dialog, RealmRoleRemover) { - console.log('RealmRolePermissionsCtrl'); - $scope.role = role; - $scope.realm = realm; - - $scope.remove = function() { - RealmRoleRemover.remove($scope.role, realm, Dialog, $location, Notifications); - }; - - RoleManagementPermissions.get({realm: realm.realm, role: role.id}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions= RoleManagementPermissions.update({realm: realm.realm, role:role.id}, param); - } - }, true); - }); - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); -}); -module.controller('ClientRolePermissionsCtrl', function($scope, $http, $route, $location, realm, client, role, Client, RoleManagementPermissions, Client, Notifications) { - console.log('RealmRolePermissionsCtrl'); - $scope.client = client; - $scope.role = role; - $scope.realm = realm; - RoleManagementPermissions.get({realm: realm.realm, role: role.id}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions = RoleManagementPermissions.update({realm: realm.realm, role:role.id}, param); - } - }, true); - }); - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); -}); - -module.controller('UsersPermissionsCtrl', function($scope, $http, $route, $location, realm, UsersManagementPermissions, Client, Notifications) { - console.log('UsersPermissionsCtrl'); - $scope.realm = realm; - var first = true; - UsersManagementPermissions.get({realm: realm.realm}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions = UsersManagementPermissions.update({realm: realm.realm}, param); - - } - }, true); - }); - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); - - - - -}); - -module.controller('ClientPermissionsCtrl', function($scope, $http, $route, $location, realm, client, Client, ClientManagementPermissions, Notifications) { - $scope.client = client; - $scope.realm = realm; - ClientManagementPermissions.get({realm: realm.realm, client: client.id}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions = ClientManagementPermissions.update({realm: realm.realm, client: client.id}, param); - } - }, true); - }); - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); -}); - -module.controller('IdentityProviderPermissionCtrl', function($scope, $http, $route, $location, realm, identityProvider, Client, IdentityProviderManagementPermissions, Notifications) { - $scope.identityProvider = identityProvider; - $scope.realm = realm; - IdentityProviderManagementPermissions.get({realm: realm.realm, alias: identityProvider.alias}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions = IdentityProviderManagementPermissions.update({realm: realm.realm, alias: identityProvider.alias}, param); - } - }, true); - }); - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); -}); - -module.controller('GroupPermissionsCtrl', function($scope, $http, $route, $location, realm, group, GroupManagementPermissions, Client, Notifications) { - $scope.group = group; - $scope.realm = realm; - Client.query({realm: realm.realm, clientId: getManageClientId(realm)}, function(data) { - $scope.realmManagementClientId = data[0].id; - }); - GroupManagementPermissions.get({realm: realm.realm, group: group.id}, function(data) { - $scope.permissions = data; - $scope.$watch('permissions.enabled', function(newVal, oldVal) { - if (newVal != oldVal) { - var param = {enabled: $scope.permissions.enabled}; - $scope.permissions = GroupManagementPermissions.update({realm: realm.realm, group: group.id}, param); - } - }, true); - }); -}); \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/js/authz/authz-services.js b/deps/keycloak/themes/base/admin/resources/js/authz/authz-services.js deleted file mode 100644 index 5e2047223..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/authz/authz-services.js +++ /dev/null @@ -1,218 +0,0 @@ -module.factory('ResourceServer', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server', { - realm : '@realm', - client: '@client' - }, { - 'update' : {method : 'PUT'}, - 'import' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/import', method : 'POST'}, - 'settings' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/settings', method : 'GET'} - }); -}); - -module.factory('ResourceServerResource', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/resource/:rsrid', { - realm : '@realm', - client: '@client', - rsrid : '@rsrid' - }, { - 'update' : {method : 'PUT'}, - 'search' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/resource/search', method : 'GET'}, - 'scopes' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/resource/:rsrid/scopes', method : 'GET', isArray: true}, - 'permissions' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/resource/:rsrid/permissions', method : 'GET', isArray: true} - }); -}); - -module.factory('ResourceServerScope', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/scope/:id', { - realm : '@realm', - client: '@client', - id : '@id' - }, { - 'update' : {method : 'PUT'}, - 'search' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/scope/search', method : 'GET'}, - 'resources' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/scope/:id/resources', method : 'GET', isArray: true}, - 'permissions' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/scope/:id/permissions', method : 'GET', isArray: true}, - }); -}); - -module.factory('ResourceServerPolicy', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:type/:id', { - realm : '@realm', - client: '@client', - id : '@id', - type: '@type' - }, { - 'update' : {method : 'PUT'}, - 'search' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/search', method : 'GET'}, - 'associatedPolicies' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/associatedPolicies', method : 'GET', isArray: true}, - 'dependentPolicies' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/dependentPolicies', method : 'GET', isArray: true}, - 'scopes' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/scopes', method : 'GET', isArray: true}, - 'resources' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/resources', method : 'GET', isArray: true} - }); -}); - -module.factory('ResourceServerPermission', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/permission/:type/:id', { - realm : '@realm', - client: '@client', - type: '@type', - id : '@id' - }, { - 'update' : {method : 'PUT'}, - 'search' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/permission/search', method : 'GET'}, - 'searchPolicies' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy', method : 'GET', isArray: true}, - 'associatedPolicies' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/associatedPolicies', method : 'GET', isArray: true}, - 'dependentPolicies' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/:id/dependentPolicies', method : 'GET', isArray: true}, - 'scopes' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/permission/:id/scopes', method : 'GET', isArray: true}, - 'resources' : {url: authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/permission/:id/resources', method : 'GET', isArray: true} - }); -}); - -module.factory('PolicyProvider', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/authz/resource-server/policy/providers', { - realm : '@realm', - client: '@client' - }); -}); - -module.service('AuthzDialog', function($modal) { - var dialog = {}; - - var openDialog = function(title, message, btns, template) { - var controller = function($scope, $modalInstance, $sce, title, message, btns) { - $scope.title = title; - $scope.message = $sce.trustAsHtml(message); - $scope.btns = btns; - - $scope.ok = function () { - $modalInstance.close(); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - }; - - return $modal.open({ - templateUrl: resourceUrl + template, - controller: controller, - resolve: { - title: function() { - return title; - }, - message: function() { - return message; - }, - btns: function() { - return btns; - } - } - }).result; - } - - dialog.confirmDeleteWithMsg = function(name, type, msg, success) { - var title = 'Delete ' + type; - msg += 'Are you sure you want to permanently delete the ' + type + ' ' + name + ' ?'; - var btns = { - ok: { - label: 'Delete', - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, msg, btns, '/templates/authz/kc-authz-modal.html').then(success); - }; - - dialog.confirmDelete = function(name, type, success) { - var title = 'Delete ' + type; - var msg = 'Are you sure you want to permanently delete the ' + type + ' ' + name + ' ?'; - var btns = { - ok: { - label: 'Delete', - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, msg, btns, '/templates/authz/kc-authz-modal.html').then(success); - } - - return dialog; -}); - -module.factory('RoleManagementPermissions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role/management/permissions', { - realm : '@realm', - role : '@role' - }, { - update: { - method: 'PUT' - } - }); -}); - -module.factory('UsersManagementPermissions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users-management-permissions', { - realm : '@realm' - }, { - update: { - method: 'PUT' - } - }); -}); - -module.factory('ClientManagementPermissions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/management/permissions', { - realm : '@realm', - client : '@client' - }, { - update: { - method: 'PUT' - } - }); -}); - -module.factory('IdentityProviderManagementPermissions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/management/permissions', { - realm : '@realm', - alias : '@alias' - }, { - update: { - method: 'PUT' - } - }); -}); - -module.factory('GroupManagementPermissions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:group/management/permissions', { - realm : '@realm', - group : '@group' - }, { - update: { - method: 'PUT' - } - }); -}); - -module.factory('policyViewState', [function () { - return { - model: { - state: {} - } - }; -}]); - -module.factory('viewState', [function () { - return { - model: { - state: {} - } - }; -}]); - diff --git a/deps/keycloak/themes/base/admin/resources/js/controllers/clients.js b/deps/keycloak/themes/base/admin/resources/js/controllers/clients.js deleted file mode 100644 index 9e2c5601a..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/controllers/clients.js +++ /dev/null @@ -1,3730 +0,0 @@ -Array.prototype.remove = function(from, to) { - var rest = this.slice((to || from) + 1 || this.length); - this.length = from < 0 ? this.length + from : from; - return this.push.apply(this, rest); -}; - -module.controller('ClientTabCtrl', function(Dialog, $scope, Current, Notifications, $location) { - $scope.removeClient = function() { - Dialog.confirmDelete($scope.client.clientId, 'client', function() { - $scope.client.$remove({ - realm : Current.realm.realm, - client : $scope.client.id - }, function() { - $location.url("/realms/" + Current.realm.realm + "/clients"); - Notifications.success("The client has been deleted."); - }); - }); - }; -}); - -module.controller('ClientRoleListCtrl', function($scope, $route, realm, client, ClientRoleList, RoleById, Notifications, Dialog) { - $scope.realm = realm; - $scope.roles = []; - $scope.client = client; - - $scope.query = { - realm: realm.realm, - client: $scope.client.id, - search : null, - max : 20, - first : 0 - } - - $scope.$watch('query.search', function (newVal, oldVal) { - if($scope.query.search && $scope.query.search.length >= 3) { - $scope.firstPage(); - } - }, true); - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - $scope.roles = ClientRoleList.query($scope.query, function() { - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - }); - }; - - $scope.searchQuery(); - - $scope.removeRole = function(role) { - Dialog.confirmDelete(role.name, 'role', function() { - RoleById.remove({ - realm: realm.realm, - role: role.id - }, function () { - $route.reload(); - Notifications.success("The role has been deleted."); - }); - }); - }; -}); - -module.controller('ClientCredentialsCtrl', function($scope, $location, realm, client, clientAuthenticatorProviders, clientConfigProperties, Client, ClientRegistrationAccessToken, Notifications) { - $scope.realm = realm; - $scope.client = angular.copy(client); - $scope.clientAuthenticatorProviders = clientAuthenticatorProviders; - - var updateCurrentPartial = function(val) { - $scope.clientAuthenticatorConfigPartial; - switch(val) { - case 'client-secret': - $scope.clientAuthenticatorConfigPartial = 'client-credentials-secret.html'; - break; - case 'client-jwt': - $scope.clientAuthenticatorConfigPartial = 'client-credentials-jwt.html'; - break; - case 'client-secret-jwt': - $scope.clientAuthenticatorConfigPartial = 'client-credentials-secret-jwt.html'; - break; - case 'client-x509': - $scope.clientAuthenticatorConfigPartial = 'client-credentials-x509.html'; - break; - default: - $scope.currentAuthenticatorConfigProperties = clientConfigProperties[val]; - $scope.clientAuthenticatorConfigPartial = 'client-credentials-generic.html'; - break; - } - }; - - updateCurrentPartial(client.clientAuthenticatorType); - - $scope.$watch('client.clientAuthenticatorType', function() { - if (!angular.equals($scope.client.clientAuthenticatorType, client.clientAuthenticatorType)) { - - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.client, function() { - $scope.changed = false; - client = angular.copy($scope.client); - updateCurrentPartial(client.clientAuthenticatorType) - }); - - } - }, true); - - $scope.regenerateRegistrationAccessToken = function() { - var secret = ClientRegistrationAccessToken.update({ realm : $scope.realm.realm, client : $scope.client.id }, - function(data) { - Notifications.success('The registration access token has been updated.'); - $scope.client['registrationAccessToken'] = data.registrationAccessToken; - }, - function() { - Notifications.error('Failed to update the registration access token'); - } - ); - }; -}); - -module.controller('ClientSecretCtrl', function($scope, $location, Client, ClientSecret, Notifications) { - var secret = ClientSecret.get({ realm : $scope.realm.realm, client : $scope.client.id }, - function() { - $scope.secret = secret.value; - } - ); - - $scope.changePassword = function() { - var secret = ClientSecret.update({ realm : $scope.realm.realm, client : $scope.client.id }, - function() { - Notifications.success('The secret has been changed.'); - $scope.secret = secret.value; - }, - function() { - Notifications.error("The secret was not changed due to a problem."); - $scope.secret = "error"; - } - ); - }; - - $scope.tokenEndpointAuthSigningAlg = $scope.client.attributes['token.endpoint.auth.signing.alg']; - - $scope.switchChange = function() { - $scope.changed = true; - } - - $scope.save = function() { - $scope.client.attributes['token.endpoint.auth.signing.alg'] = $scope.tokenEndpointAuthSigningAlg; - - Client.update({ - realm : $scope.realm.realm, - client : $scope.client.id - }, $scope.client, function() { - $scope.changed = false; - $scope.clientCopy = angular.copy($scope.client); - Notifications.success("Client authentication configuration has been saved to the client."); - }); - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.cancel = function() { - $location.url("/realms/" + $scope.realm.realm + "/clients/" + $scope.client.id + "/credentials"); - }; -}); - -module.controller('ClientX509Ctrl', function($scope, $location, Client, Notifications) { - console.log('ClientX509Ctrl invoked'); - - $scope.clientCopy = angular.copy($scope.client); - $scope.changed = false; - - $scope.$watch('client', function() { - if (!angular.equals($scope.client, $scope.clientCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - if (!$scope.client.attributes["x509.subjectdn"]) { - Notifications.error("The SubjectDN must not be empty."); - } else { - Client.update({ - realm : $scope.realm.realm, - client : $scope.client.id - }, $scope.client, function() { - $scope.changed = false; - $scope.clientCopy = angular.copy($scope.client); - Notifications.success("Client authentication configuration has been saved to the client."); - }, function() { - Notifications.error("The SubjectDN was not changed due to a problem."); - $scope.subjectdn = "error"; - }); - } - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.reset = function() { - $scope.client.attributes["x509.subjectdn"] = $scope.clientCopy.attributes["x509.subjectdn"]; - $location.url("/realms/" + $scope.realm.realm + "/clients/" + $scope.client.id + "/credentials"); - }; -}); - -module.controller('ClientSignedJWTCtrl', function($scope, Client, Notifications) { - console.log('ClientSignedJWTCtrl invoked'); - - $scope.tokenEndpointAuthSigningAlg = $scope.client.attributes['token.endpoint.auth.signing.alg']; - - $scope.$watch('tokenEndpointAuthSigningAlg', function() { - if (!angular.equals($scope.client.attributes['token.endpoint.auth.signing.alg'], $scope.tokenEndpointAuthSigningAlg)) { - $scope.client.attributes['token.endpoint.auth.signing.alg'] = $scope.tokenEndpointAuthSigningAlg; - - Client.update({ - realm : $scope.realm.realm, - client : $scope.client.id - }, $scope.client, function() { - Notifications.success("Signature algorithm has been saved to the client."); - }); - } - }, true); - -}); - -module.controller('ClientGenericCredentialsCtrl', function($scope, $location, Client, Notifications) { - - console.log('ClientGenericCredentialsCtrl invoked'); - - $scope.clientCopy = angular.copy($scope.client); - $scope.changed = false; - - $scope.$watch('client', function() { - if (!angular.equals($scope.client, $scope.clientCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - - Client.update({ - realm : $scope.realm.realm, - client : $scope.client.id - }, $scope.client, function() { - $scope.changed = false; - $scope.clientCopy = angular.copy($scope.client); - Notifications.success("Client authentication configuration has been saved to the client."); - }); - }; - - $scope.reset = function() { - $scope.client = angular.copy($scope.clientCopy); - $scope.changed = false; - }; -}); - -module.controller('ClientIdentityProviderCtrl', function($scope, $location, $route, realm, client, Client, $location, Notifications) { - $scope.realm = realm; - $scope.client = angular.copy(client); - var length = 0; - - if ($scope.client.identityProviders) { - length = $scope.client.identityProviders.length; - - for (i = 0; i < $scope.client.identityProviders.length; i++) { - var clientProvider = $scope.client.identityProviders[i]; - if (clientProvider.retrieveToken) { - clientProvider.retrieveToken = clientProvider.retrieveToken.toString(); - } - } - - } else { - $scope.client.identityProviders = []; - } - - $scope.identityProviders = []; - var providersMissingInClient = []; - - for (j = 0; j < realm.identityProviders.length; j++) { - var identityProvider = realm.identityProviders[j]; - var clientProvider = null; - - for (i = 0; i < $scope.client.identityProviders.length; i++) { - clientProvider = $scope.client.identityProviders[i]; - - if (clientProvider) { - - if (clientProvider.id == identityProvider.id) { - $scope.identityProviders[i] = {}; - $scope.identityProviders[i].identityProvider = identityProvider; - $scope.identityProviders[i].retrieveToken = clientProvider.retrieveToken; - break; - } - - clientProvider = null; - } - } - - if (clientProvider == null) { - providersMissingInClient.push(identityProvider); - } - } - - for (j = 0; j < providersMissingInClient.length; j++) { - var identityProvider = providersMissingInClient[j]; - - var currentProvider = {}; - currentProvider.identityProvider = identityProvider; - currentProvider.retrieveToken = "false"; - $scope.identityProviders.push(currentProvider); - - var currentClientProvider = {}; - currentClientProvider.id = identityProvider.id; - currentClientProvider.retrieveToken = "false"; - $scope.client.identityProviders.push(currentClientProvider); - } - - var oldCopy = angular.copy($scope.client); - - $scope.save = function() { - - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.client, function() { - $scope.changed = false; - $route.reload(); - Notifications.success("Your changes have been saved to the client."); - }); - }; - - $scope.reset = function() { - $scope.client = angular.copy(oldCopy); - $scope.changed = false; - }; - - $scope.$watch('client', function() { - if (!angular.equals($scope.client, oldCopy)) { - $scope.changed = true; - } - }, true); -}); - -module.controller('ClientSamlKeyCtrl', function($scope, $location, $http, $upload, realm, client, - ClientCertificate, ClientCertificateGenerate, - ClientCertificateDownload, Notifications) { - $scope.realm = realm; - $scope.client = client; - - var signingKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'saml.signing' }, - function() { - $scope.signingKeyInfo = signingKeyInfo; - } - ); - - $scope.generateSigningKey = function() { - var keyInfo = ClientCertificateGenerate.generate({ realm : realm.realm, client : client.id, attribute: 'saml.signing' }, - function() { - Notifications.success('Signing key has been regenerated.'); - $scope.signingKeyInfo = keyInfo; - }, - function() { - Notifications.error("Signing key was not regenerated."); - } - ); - }; - - $scope.importSigningKey = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Signing/import/saml.signing"); - }; - - $scope.exportSigningKey = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Signing/export/saml.signing"); - }; - - var encryptionKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'saml.encryption' }, - function() { - $scope.encryptionKeyInfo = encryptionKeyInfo; - } - ); - - $scope.generateEncryptionKey = function() { - var keyInfo = ClientCertificateGenerate.generate({ realm : realm.realm, client : client.id, attribute: 'saml.encryption' }, - function() { - Notifications.success('Encryption key has been regenerated.'); - $scope.encryptionKeyInfo = keyInfo; - }, - function() { - Notifications.error("Encryption key was not regenerated."); - } - ); - }; - - $scope.importEncryptionKey = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Encryption/import/saml.encryption"); - }; - - $scope.exportEncryptionKey = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/saml/Encryption/export/saml.encryption"); - }; - - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); -}); - -module.controller('ClientCertificateImportCtrl', function($scope, $location, $http, $upload, realm, client, callingContext, $routeParams, - ClientCertificate, ClientCertificateGenerate, - ClientCertificateDownload, Notifications) { - - console.log("callingContext: " + callingContext); - - var keyType = $routeParams.keyType; - var attribute = $routeParams.attribute; - $scope.realm = realm; - $scope.client = client; - $scope.keyType = keyType; - - if (callingContext == 'saml') { - var uploadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/upload'; - var redirectLocation = "/realms/" + realm.realm + "/clients/" + client.id + "/saml/keys"; - } else if (callingContext == 'oidc') { - var uploadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/upload-certificate'; - var redirectLocation = "/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys"; - } - - $scope.files = []; - - $scope.onFileSelect = function($files) { - $scope.files = $files; - }; - - $scope.cancel = function() { - $location.url(redirectLocation); - } - - $scope.keyFormats = [ - "JKS", - "PKCS12", - "Certificate PEM" - ]; - - if (callingContext == 'oidc') { - $scope.keyFormats.push('Public Key PEM'); - $scope.keyFormats.push('JSON Web Key Set'); - } - - $scope.hideKeystoreSettings = function() { - return $scope.uploadKeyFormat == 'Certificate PEM' || $scope.uploadKeyFormat == 'Public Key PEM' || $scope.uploadKeyFormat == 'JSON Web Key Set'; - } - - $scope.uploadKeyFormat = $scope.keyFormats[0]; - - $scope.uploadFile = function() { - //$files: an array of files selected, each file has name, size, and type. - for (var i = 0; i < $scope.files.length; i++) { - var $file = $scope.files[i]; - $scope.upload = $upload.upload({ - url: uploadUrl, - // method: POST or PUT, - // headers: {'headerKey': 'headerValue'}, withCredential: true, - data: {keystoreFormat: $scope.uploadKeyFormat, - keyAlias: $scope.uploadKeyAlias, - keyPassword: $scope.uploadKeyPassword, - storePassword: $scope.uploadStorePassword - }, - file: $file - /* set file formData name for 'Content-Desposition' header. Default: 'file' */ - //fileFormDataName: myFile, - /* customize how data is added to formData. See #40#issuecomment-28612000 for example */ - //formDataAppender: function(formData, key, val){} - }).then(function(data, status, headers) { - Notifications.success("Keystore uploaded successfully."); - $location.url(redirectLocation); - }) - //.then(success, error, progress); - } - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); -}); - -module.controller('ClientCertificateExportCtrl', function($scope, $location, $http, $upload, realm, client, callingContext, $routeParams, - ClientCertificate, ClientCertificateGenerate, - ClientCertificateDownload, Notifications) { - var keyType = $routeParams.keyType; - var attribute = $routeParams.attribute; - $scope.realm = realm; - $scope.client = client; - $scope.keyType = keyType; - - if (callingContext == 'saml') { - var downloadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/download'; - var realmCertificate = true; - } else if (callingContext == 'oidc') { - var downloadUrl = authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/certificates/' + attribute + '/generate-and-download' - var realmCertificate = false; - } - - var jks = { - keyAlias: client.clientId, - realmAlias: realm.realm, - realmCertificate: realmCertificate - }; - - $scope.keyFormats = [ - "JKS", - "PKCS12" - ]; - - var keyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: attribute }, - function() { - $scope.keyInfo = keyInfo; - } - ); - $scope.jks = jks; - $scope.jks.format = $scope.keyFormats[0]; - - $scope.download = function() { - $http({ - url: downloadUrl, - method: 'POST', - responseType: 'arraybuffer', - data: $scope.jks, - headers: { - 'Content-Type': 'application/json', - 'Accept': 'application/octet-stream' - } - }).then(function(response){ - var blob = new Blob([response.data], { - type: 'application/octet-stream' - }); - var ext = ".jks"; - if ($scope.jks.format == 'PKCS12') ext = ".p12"; - - if (callingContext == 'oidc') { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys"); - Notifications.success("New keypair and certificate generated successfully. Download keystore file") - } - - saveAs(blob, 'keystore' + ext); - }).catch(function(response) { - var errorMsg = 'Error downloading'; - try { - var error = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(response.data))); - errorMsg = error['error_description'] ? error['error_description'] : errorMsg; - } catch (err) { - } - Notifications.error(errorMsg); - }); - } - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/keys"); - } -}); - -module.controller('ClientOidcKeyCtrl', function($scope, $location, realm, client, Client, ClientCertificate, Notifications, $route) { - $scope.realm = realm; - $scope.client = angular.copy(client); - - var signingKeyInfo = ClientCertificate.get({ realm : realm.realm, client : client.id, attribute: 'jwt.credential' }, - function() { - $scope.signingKeyInfo = signingKeyInfo; - } - ); - - $scope.changed = false; - - $scope.$watch('client', function() { - if (!angular.equals($scope.client, client)) { - $scope.changed = true; - } - }, true); - - if ($scope.client.attributes["use.jwks.url"]) { - if ($scope.client.attributes["use.jwks.url"] == "true") { - $scope.useJwksUrl = true; - } else { - $scope.useJwksUrl = false; - } - } - - $scope.switchChange = function() { - $scope.changed = true; - } - - $scope.save = function() { - - if ($scope.useJwksUrl == true) { - $scope.client.attributes["use.jwks.url"] = "true"; - } else { - $scope.client.attributes["use.jwks.url"] = "false"; - } - - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.client, function() { - $scope.changed = false; - client = angular.copy($scope.client); - Notifications.success("OIDC key has been saved to the client."); - }); - }; - - $scope.importCertificate = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/Signing/import/jwt.credential"); - }; - - $scope.generateSigningKey = function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/oidc/Signing/export/jwt.credential"); - }; - - $scope.reset = function() { - $route.reload(); - }; -}); - -module.controller('ClientSessionsCtrl', function($scope, realm, sessionCount, client, - ClientUserSessions) { - $scope.realm = realm; - $scope.count = sessionCount.count; - $scope.sessions = []; - $scope.client = client; - - $scope.page = 0; - - $scope.query = { - realm : realm.realm, - client: $scope.client.id, - max : 5, - first : 0 - } - - $scope.firstPage = function() { - $scope.query.first = 0; - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.loadUsers(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.loadUsers(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.loadUsers(); - } - - $scope.toDate = function(val) { - return new Date(val); - }; - - $scope.loadUsers = function() { - ClientUserSessions.query($scope.query, function(updated) { - $scope.sessions = updated; - }) - }; -}); - -module.controller('ClientOfflineSessionsCtrl', function($scope, realm, offlineSessionCount, client, - ClientOfflineSessions) { - $scope.realm = realm; - $scope.count = offlineSessionCount.count; - $scope.sessions = []; - $scope.client = client; - - $scope.page = 0; - - $scope.query = { - realm : realm.realm, - client: $scope.client.id, - max : 5, - first : 0 - } - - $scope.firstPage = function() { - $scope.query.first = 0; - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.loadUsers(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.loadUsers(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.loadUsers(); - } - - $scope.toDate = function(val) { - return new Date(val); - }; - - $scope.loadUsers = function() { - ClientOfflineSessions.query($scope.query, function(updated) { - $scope.sessions = updated; - }) - }; -}); - -module.controller('ClientRoleDetailCtrl', function($scope, $route, realm, client, role, roles, Client, - Role, ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, - $http, $location, Dialog, Notifications, ComponentUtils) { - $scope.realm = realm; - $scope.client = client; - $scope.role = angular.copy(role); - $scope.create = !role.name; - - $scope.changed = $scope.create; - - $scope.save = function() { - convertAttributeValuesToLists(); - if ($scope.create) { - ClientRole.save({ - realm: realm.realm, - client : client.id - }, $scope.role, function (data, headers) { - $scope.changed = false; - convertAttributeValuesToString($scope.role); - role = angular.copy($scope.role); - - ClientRole.get({ realm: realm.realm, client : client.id, role: role.name }, function(role) { - var id = role.id; - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles/" + id); - Notifications.success("The role has been created."); - }); - }); - } else { - $scope.update(); - } - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.role.name, 'role', function() { - $scope.role.$remove({ - realm : realm.realm, - client : client.id, - role : $scope.role.id - }, function() { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles"); - Notifications.success("The role has been deleted."); - }); - }); - }; - - $scope.cancel = function () { - $location.url("/realms/" + realm.realm + "/clients/" + client.id + "/roles"); - }; - - $scope.addAttribute = function() { - $scope.role.attributes[$scope.newAttribute.key] = $scope.newAttribute.value; - delete $scope.newAttribute; - } - - $scope.removeAttribute = function(key) { - delete $scope.role.attributes[key]; - } - - function convertAttributeValuesToLists() { - var attrs = $scope.role.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "string") { - var attrVals = attrs[attribute].split("##"); - attrs[attribute] = attrVals; - } - } - } - - function convertAttributeValuesToString(role) { - var attrs = role.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "object") { - var attrVals = attrs[attribute].join("##"); - attrs[attribute] = attrVals; - } - } - } - - roleControl($scope, $route, realm, role, roles, Client, - ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, - $http, $location, Notifications, Dialog, ComponentUtils); - -}); - -module.controller('ClientRoleMembersCtrl', function($scope, realm, client, role, ClientRoleMembership, Dialog, Notifications, $location) { - $scope.realm = realm; - $scope.page = 0; - $scope.role = role; - $scope.client = client; - - $scope.query = { - realm: realm.realm, - role: role.name, - client: client.id, - max : 5, - first : 0 - } - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - $scope.users = ClientRoleMembership.query($scope.query, function() { - console.log('search loaded'); - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - }); - }; - - $scope.searchQuery(); -}); - -module.controller('ClientImportCtrl', function($scope, $location, $upload, realm, serverInfo, Notifications) { - - $scope.realm = realm; - - $scope.files = []; - - $scope.onFileSelect = function($files) { - $scope.files = $files; - }; - - $scope.clearFileSelect = function() { - $scope.files = null; - } - - $scope.uploadFile = function() { - //$files: an array of files selected, each file has name, size, and type. - for (var i = 0; i < $scope.files.length; i++) { - var $file = $scope.files[i]; - $scope.upload = $upload.upload({ - url: authUrl + '/admin/realms/' + realm.realm + '/client-importers/' + $scope.configFormat.id + '/upload', - // method: POST or PUT, - // headers: {'headerKey': 'headerValue'}, withCredential: true, - data: {myObj: ""}, - file: $file - /* set file formData name for 'Content-Desposition' header. Default: 'file' */ - //fileFormDataName: myFile, - /* customize how data is added to formData. See #40#issuecomment-28612000 for example */ - //formDataAppender: function(formData, key, val){} - }).success(function(data, status, headers) { - Notifications.success("Uploaded successfully."); - $location.url("/realms/" + realm.realm + "/clients"); - }) - .error(function() { - Notifications.error("The file can not be uploaded. Please verify the file."); - - }); - //.then(success, error, progress); - } - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); -}); - - -module.controller('ClientListCtrl', function($scope, realm, Client, ClientListSearchState, $route, Dialog, Notifications) { - $scope.init = function() { - $scope.realm = realm; - $scope.searchLoaded = true; - - ClientListSearchState.query.realm = realm.realm; - $scope.query = ClientListSearchState.query; - - if (!ClientListSearchState.isFirstSearch) { - $scope.searchQuery(); - } else { - $scope.query.clientId = null; - $scope.firstPage(); - } - }; - - $scope.searchQuery = function() { - console.log("query.search: ", $scope.query); - $scope.searchLoaded = false; - - $scope.clients = Client.query($scope.query, function() { - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - ClientListSearchState.isFirstSearch = false; - }); - }; - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.removeClient = function(client) { - Dialog.confirmDelete(client.clientId, 'client', function() { - Client.remove({ - realm : realm.realm, - client : client.id - }, function() { - $route.reload(); - Notifications.success("The client has been deleted."); - }); - }); - }; - - $scope.exportClient = function(client) { - var clientCopy = angular.copy(client); - delete clientCopy.id; - - if (clientCopy.protocolMappers) { - for (var i = 0; i < clientCopy.protocolMappers.length; i++) { - delete clientCopy.protocolMappers[i].id; - } - } - - saveAs(new Blob([angular.toJson(clientCopy, 4)], { type: 'application/json' }), clientCopy.clientId + '.json'); - } -}); - -module.controller('ClientInstallationCtrl', function($scope, realm, client, serverInfo, ClientInstallation,$http, $routeParams) { - $scope.realm = realm; - $scope.client = client; - $scope.installation = null; - $scope.download = null; - $scope.configFormat = null; - $scope.filename = null; - - var protocol = client.protocol; - if (!protocol) protocol = 'openid-connect'; - $scope.configFormats = serverInfo.clientInstallations[protocol]; - console.log('configFormats.length: ' + $scope.configFormats.length); - - $scope.changeFormat = function() { - var url = ClientInstallation.url({ realm: $routeParams.realm, client: $routeParams.client, provider: $scope.configFormat.id }); - if ($scope.configFormat.mediaType == 'application/zip') { - $http({ - url: url, - method: 'GET', - responseType: 'arraybuffer', - cache: false - }).then(function(response) { - var installation = response.data; - $scope.installation = installation; - } - ); - } else { - $http.get(url).then(function (response) { - var installation = response.data; - if ($scope.configFormat.mediaType == 'application/json') { - installation = angular.fromJson(response.data); - installation = angular.toJson(installation, true); - } - $scope.installation = installation; - }); - } - - }; - $scope.download = function() { - saveAs(new Blob([$scope.installation], { type: $scope.configFormat.mediaType }), $scope.configFormat.filename); - } -}); - - -module.controller('ClientDetailCtrl', function($scope, realm, client, flows, $route, serverInfo, Client, ClientDescriptionConverter, Components, ClientStorageOperations, $location, $modal, Dialog, Notifications, TimeUnit2) { - $scope.serverInfo = serverInfo; - $scope.flows = []; - $scope.clientFlows = []; - var emptyFlow = { - id: "", - alias: "" - } - for (var i=0 ; i 0) { - $scope.client.requestUris = $scope.client.attributes["request.uris"].split("##"); - } else { - $scope.client.requestUris = []; - } - } - - if (!$scope.create) { - $scope.client = client; - updateProperties(); - - $scope.clientEdit = angular.copy(client); - } - - - $scope.samlIdpInitiatedUrl = function(ssoName) { - return encodeURI($location.absUrl().replace(/\/admin.*/, "/realms/") + realm.realm + "/protocol/saml/clients/") + encodeURIComponent(ssoName) - } - - $scope.importFile = function(fileContent){ - console.debug(fileContent); - ClientDescriptionConverter.save({ - realm: realm.realm - }, fileContent, function (data) { - $scope.client = data; - updateProperties(); - $scope.importing = true; - - $scope.clientEdit = angular.copy(client); - }); - }; - - $scope.viewImportDetails = function() { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-object.html', - controller: 'ObjectModalCtrl', - resolve: { - object: function () { - return $scope.client; - } - } - }) - }; - - $scope.switchChange = function() { - $scope.changed = true; - } - - $scope.changeAccessType = function() { - if ($scope.accessType == "confidential") { - $scope.clientEdit.bearerOnly = false; - $scope.clientEdit.publicClient = false; - } else if ($scope.accessType == "public") { - $scope.clientEdit.bearerOnly = false; - $scope.clientEdit.publicClient = true; - } else if ($scope.accessType == "bearer-only") { - $scope.clientEdit.bearerOnly = true; - $scope.clientEdit.publicClient = false; - $scope.clientEdit.alwaysDisplayInConsole = false; - } - }; - - $scope.changeProtocol = function() { - if ($scope.protocol == "openid-connect") { - $scope.clientEdit.protocol = "openid-connect"; - } else if ($scope.protocol == "saml") { - $scope.clientEdit.protocol = "saml"; - } - }; - - $scope.changeAlgorithm = function() { - $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm; - }; - - $scope.changeNameIdFormat = function() { - $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat; - }; - - $scope.changeSamlSigKeyNameTranformer = function() { - $scope.clientEdit.attributes['saml.server.signature.keyinfo.xmlSigKeyInfoKeyNameTransformer'] = $scope.samlXmlKeyNameTranformer; - }; - - $scope.changeAccessTokenSignedResponseAlg = function() { - $scope.clientEdit.attributes['access.token.signed.response.alg'] = $scope.accessTokenSignedResponseAlg; - }; - - $scope.changeIdTokenSignedResponseAlg = function() { - $scope.clientEdit.attributes['id.token.signed.response.alg'] = $scope.idTokenSignedResponseAlg; - }; - - $scope.changeIdTokenEncryptedResponseAlg = function() { - $scope.clientEdit.attributes['id.token.encrypted.response.alg'] = $scope.idTokenEncryptedResponseAlg; - }; - - $scope.changeIdTokenEncryptedResponseEnc = function() { - $scope.clientEdit.attributes['id.token.encrypted.response.enc'] = $scope.idTokenEncryptedResponseEnc; - }; - - $scope.changeUserInfoSignedResponseAlg = function() { - if ($scope.userInfoSignedResponseAlg === 'unsigned') { - $scope.clientEdit.attributes['user.info.response.signature.alg'] = null; - } else { - $scope.clientEdit.attributes['user.info.response.signature.alg'] = $scope.userInfoSignedResponseAlg; - } - }; - - $scope.changeRequestObjectSignatureAlg = function() { - if ($scope.requestObjectSignatureAlg === 'any') { - $scope.clientEdit.attributes['request.object.signature.alg'] = null; - } else { - $scope.clientEdit.attributes['request.object.signature.alg'] = $scope.requestObjectSignatureAlg; - } - }; - - $scope.changeRequestObjectRequired = function() { - if ($scope.requestObjectRequired === 'not required') { - $scope.clientEdit.attributes['request.object.required'] = null; - } else { - $scope.clientEdit.attributes['request.object.required'] = $scope.requestObjectRequired; - } - }; - - $scope.changePkceCodeChallengeMethod = function() { - $scope.clientEdit.attributes['pkce.code.challenge.method'] = $scope.pkceCodeChallengeMethod; - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - function isChanged() { - if (!angular.equals($scope.client, $scope.clientEdit)) { - return true; - } - if ($scope.newRedirectUri && $scope.newRedirectUri.length > 0) { - return true; - } - if ($scope.newWebOrigin && $scope.newWebOrigin.length > 0) { - return true; - } - if ($scope.newRequestUri && $scope.newRequestUri.length > 0) { - return true; - } - return false; - } - - $scope.updateTimeouts = function() { - if ($scope.accessTokenLifespan.time) { - if ($scope.accessTokenLifespan.time === -1) { - $scope.clientEdit.attributes['access.token.lifespan'] = -1; - } else { - $scope.clientEdit.attributes['access.token.lifespan'] = $scope.accessTokenLifespan.toSeconds(); - } - } else { - $scope.clientEdit.attributes['access.token.lifespan'] = null; - } - } - - $scope.updateAssertionLifespan = function() { - if ($scope.samlAssertionLifespan.time) { - $scope.clientEdit.attributes['saml.assertion.lifespan'] = $scope.samlAssertionLifespan.toSeconds(); - } else { - $scope.clientEdit.attributes['saml.assertion.lifespan'] = null; - } - } - - $scope.updateClientSessionIdleTimeout = function() { - if ($scope.clientSessionIdleTimeout.time) { - $scope.clientEdit.attributes['client.session.idle.timeout'] = $scope.clientSessionIdleTimeout.toSeconds(); - } else { - $scope.clientEdit.attributes['client.session.idle.timeout'] = null; - } - } - - $scope.updateClientSessionMaxLifespan = function() { - if ($scope.clientSessionMaxLifespan.time) { - $scope.clientEdit.attributes['client.session.max.lifespan'] = $scope.clientSessionMaxLifespan.toSeconds(); - } else { - $scope.clientEdit.attributes['client.session.max.lifespan'] = null; - } - } - - $scope.updateClientOfflineSessionIdleTimeout = function() { - if ($scope.clientOfflineSessionIdleTimeout.time) { - $scope.clientEdit.attributes['client.offline.session.idle.timeout'] = $scope.clientOfflineSessionIdleTimeout.toSeconds(); - } else { - $scope.clientEdit.attributes['client.offline.session.idle.timeout'] = null; - } - } - - $scope.updateClientOfflineSessionMaxLifespan = function() { - if ($scope.clientOfflineSessionMaxLifespan.time) { - $scope.clientEdit.attributes['client.offline.session.max.lifespan'] = $scope.clientOfflineSessionMaxLifespan.toSeconds(); - } else { - $scope.clientEdit.attributes['client.offline.session.max.lifespan'] = null; - } - } - - $scope.updateOauth2DeviceCodeLifespan = function() { - if ($scope.oauth2DeviceCodeLifespan.time) { - $scope.clientEdit.attributes['oauth2.device.code.lifespan'] = $scope.oauth2DeviceCodeLifespan.toSeconds(); - } else { - $scope.clientEdit.attributes['oauth2.device.code.lifespan'] = null; - } - } - - $scope.updateOauth2DevicePollingInterval = function() { - if ($scope.oauth2DevicePollingInterval) { - $scope.clientEdit.attributes['oauth2.device.polling.interval'] = $scope.oauth2DevicePollingInterval; - } else { - $scope.clientEdit.attributes['oauth2.device.polling.interval'] = null; - } - } - - $scope.confirmChangeAuthzSettings = function($event) { - if ($scope.client.authorizationServicesEnabled && $scope.clientEdit.authorizationServicesEnabled) { - $event.preventDefault(); - Dialog.confirm("Disable Authorization Settings", "Are you sure you want to disable authorization ? Once you save your changes, all authorization settings associated with this client will be removed. This operation can not be reverted.", function () { - $scope.clientEdit.authorizationServicesEnabled = false; - }, function () { - $scope.clientEdit.authorizationServicesEnabled = true; - }); - } - } - - function configureAuthorizationServices() { - if ($scope.clientEdit.authorizationServicesEnabled) { - if ($scope.accessType == 'public') { - $scope.accessType = 'confidential'; - } - $scope.clientEdit.publicClient = false; - $scope.clientEdit.serviceAccountsEnabled = true; - } else if ($scope.clientEdit.bearerOnly) { - $scope.clientEdit.serviceAccountsEnabled = false; - } - } - - $scope.$watch('clientEdit', function() { - $scope.changed = isChanged(); - configureAuthorizationServices(); - }, true); - - $scope.$watch('newRedirectUri', function() { - $scope.changed = isChanged(); - }, true); - - - $scope.$watch('newWebOrigin', function() { - $scope.changed = isChanged(); - }, true); - - $scope.$watch('newRequestUri', function() { - $scope.changed = isChanged(); - }, true); - - $scope.deleteWebOrigin = function(index) { - $scope.clientEdit.webOrigins.splice(index, 1); - } - $scope.addWebOrigin = function() { - $scope.clientEdit.webOrigins.push($scope.newWebOrigin); - $scope.newWebOrigin = ""; - } - $scope.deleteRequestUri = function(index) { - $scope.clientEdit.requestUris.splice(index, 1); - } - $scope.addRequestUri = function() { - $scope.clientEdit.requestUris.push($scope.newRequestUri); - $scope.newRequestUri = ""; - } - $scope.deleteRedirectUri = function(index) { - $scope.clientEdit.redirectUris.splice(index, 1); - } - - $scope.addRedirectUri = function() { - $scope.clientEdit.redirectUris.push($scope.newRedirectUri); - $scope.newRedirectUri = ""; - } - - $scope.save = function() { - if ($scope.newRedirectUri && $scope.newRedirectUri.length > 0) { - $scope.addRedirectUri(); - } - - if ($scope.newWebOrigin && $scope.newWebOrigin.length > 0) { - $scope.addWebOrigin(); - } - - if ($scope.newRequestUri && $scope.newRequestUri.length > 0) { - $scope.addRequestUri(); - } - if ($scope.clientEdit.requestUris && $scope.clientEdit.requestUris.length > 0) { - $scope.clientEdit.attributes["request.uris"] = $scope.clientEdit.requestUris.join("##"); - } else { - $scope.clientEdit.attributes["request.uris"] = null; - } - delete $scope.clientEdit.requestUris; - - if ($scope.samlArtifactBinding == true) { - $scope.clientEdit.attributes["saml.artifact.binding"] = "true"; - } else { - $scope.clientEdit.attributes["saml.artifact.binding"] = "false"; - } - if ($scope.samlServerSignature == true) { - $scope.clientEdit.attributes["saml.server.signature"] = "true"; - } else { - $scope.clientEdit.attributes["saml.server.signature"] = "false"; - } - if ($scope.samlServerSignatureEnableKeyInfoExtension == true) { - $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "true"; - } else { - $scope.clientEdit.attributes["saml.server.signature.keyinfo.ext"] = "false"; - } - if ($scope.samlAssertionSignature == true) { - $scope.clientEdit.attributes["saml.assertion.signature"] = "true"; - } else { - $scope.clientEdit.attributes["saml.assertion.signature"] = "false"; - } - if ($scope.samlClientSignature == true) { - $scope.clientEdit.attributes["saml.client.signature"] = "true"; - } else { - $scope.clientEdit.attributes["saml.client.signature"] = "false"; - - } - if ($scope.samlEncrypt == true) { - $scope.clientEdit.attributes["saml.encrypt"] = "true"; - } else { - $scope.clientEdit.attributes["saml.encrypt"] = "false"; - - } - if ($scope.samlAuthnStatement == true) { - $scope.clientEdit.attributes["saml.authnstatement"] = "true"; - } else { - $scope.clientEdit.attributes["saml.authnstatement"] = "false"; - - } - if ($scope.samlOneTimeUseCondition == true) { - $scope.clientEdit.attributes["saml.onetimeuse.condition"] = "true"; - } else { - $scope.clientEdit.attributes["saml.onetimeuse.condition"] = "false"; - - } - if ($scope.samlForceNameIdFormat == true) { - $scope.clientEdit.attributes["saml_force_name_id_format"] = "true"; - } else { - $scope.clientEdit.attributes["saml_force_name_id_format"] = "false"; - - } - if ($scope.samlMultiValuedRoles == true) { - $scope.clientEdit.attributes["saml.multivalued.roles"] = "true"; - } else { - $scope.clientEdit.attributes["saml.multivalued.roles"] = "false"; - - } - if ($scope.samlForcePostBinding == true) { - $scope.clientEdit.attributes["saml.force.post.binding"] = "true"; - } else { - $scope.clientEdit.attributes["saml.force.post.binding"] = "false"; - - } - - if ($scope.excludeSessionStateFromAuthResponse == true) { - $scope.clientEdit.attributes["exclude.session.state.from.auth.response"] = "true"; - } else { - $scope.clientEdit.attributes["exclude.session.state.from.auth.response"] = "false"; - - } - - if ($scope.oauth2DeviceAuthorizationGrantEnabled == true) { - $scope.clientEdit.attributes["oauth2.device.authorization.grant.enabled"] = "true"; - } else { - $scope.clientEdit.attributes["oauth2.device.authorization.grant.enabled"] = "false"; - } - - if ($scope.oidcCibaGrantEnabled == true) { - $scope.clientEdit.attributes["oidc.ciba.grant.enabled"] = "true"; - } else { - $scope.clientEdit.attributes["oidc.ciba.grant.enabled"] = "false"; - } - - if ($scope.useRefreshTokens == true) { - $scope.clientEdit.attributes["use.refresh.tokens"] = "true"; - } else { - $scope.clientEdit.attributes["use.refresh.tokens"] = "false"; - } - - if ($scope.useIdTokenAsDetachedSignature == true) { - $scope.clientEdit.attributes["id.token.as.detached.signature"] = "true"; - } else { - $scope.clientEdit.attributes["id.token.as.detached.signature"] = "false"; - } - - // KEYCLOAK-6771 Certificate Bound Token - // https://tools.ietf.org/html/draft-ietf-oauth-mtls-08#section-3 - if ($scope.tlsClientCertificateBoundAccessTokens == true) { - $scope.clientEdit.attributes["tls.client.certificate.bound.access.tokens"] = "true"; - } else { - $scope.clientEdit.attributes["tls.client.certificate.bound.access.tokens"] = "false"; - } - - // KEYCLOAK-9551 Client Credentials Grant generates refresh token - // https://tools.ietf.org/html/rfc6749#section-4.4.3 - if ($scope.useRefreshTokenForClientCredentialsGrant === true) { - $scope.clientEdit.attributes["client_credentials.use_refresh_token"] = "true"; - } else { - $scope.clientEdit.attributes["client_credentials.use_refresh_token"] = "false"; - } - - if ($scope.displayOnConsentScreen == true) { - $scope.clientEdit.attributes["display.on.consent.screen"] = "true"; - } else { - $scope.clientEdit.attributes["display.on.consent.screen"] = "false"; - } - - if ($scope.backchannelLogoutSessionRequired == true) { - $scope.clientEdit.attributes["backchannel.logout.session.required"] = "true"; - } else { - $scope.clientEdit.attributes["backchannel.logout.session.required"] = "false"; - } - - if ($scope.backchannelLogoutRevokeOfflineSessions == true) { - $scope.clientEdit.attributes["backchannel.logout.revoke.offline.tokens"] = "true"; - } else { - $scope.clientEdit.attributes["backchannel.logout.revoke.offline.tokens"] = "false"; - } - - $scope.clientEdit.protocol = $scope.protocol; - $scope.clientEdit.attributes['saml.signature.algorithm'] = $scope.signatureAlgorithm; - $scope.clientEdit.attributes['saml_name_id_format'] = $scope.nameIdFormat; - - if ($scope.clientEdit.protocol != 'saml' && !$scope.clientEdit.bearerOnly && ($scope.clientEdit.standardFlowEnabled || $scope.clientEdit.implicitFlowEnabled) && (!$scope.clientEdit.redirectUris || $scope.clientEdit.redirectUris.length == 0)) { - Notifications.error("You must specify at least one redirect uri"); - } else { - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.clientEdit, function() { - $route.reload(); - Notifications.success("Your changes have been saved to the client."); - }); - } - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/clients"); - }; -}); - -module.controller('CreateClientCtrl', function($scope, realm, client, $route, serverInfo, Client, ClientDescriptionConverter, $location, $modal, Dialog, Notifications) { - $scope.protocols = serverInfo.listProviderIds('login-protocol'); - $scope.create = true; - - $scope.realm = realm; - - $scope.client = { - enabled: true, - attributes: {} - }; - $scope.client.redirectUris = []; - $scope.protocol = $scope.protocols[0]; - - - $scope.importFile = function(fileContent){ - console.debug(fileContent); - ClientDescriptionConverter.save({ - realm: realm.realm - }, fileContent, function (data) { - $scope.client = data; - if (data.protocol) { - $scope.protocol = data.protocol; - } - $scope.importing = true; - }); - }; - - $scope.viewImportDetails = function() { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-object.html', - controller: 'ObjectModalCtrl', - resolve: { - object: function () { - return $scope.client; - } - } - }) - }; - - $scope.switchChange = function() { - $scope.changed = true; - } - - $scope.changeProtocol = function() { - if ($scope.protocol == "openid-connect") { - $scope.client.protocol = "openid-connect"; - } else if ($scope.protocol == "saml") { - $scope.client.protocol = "saml"; - } - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - function isChanged() { - if (!angular.equals($scope.client, client)) { - return true; - } - return false; - } - - $scope.$watch('client', function() { - $scope.changed = isChanged(); - }, true); - - - $scope.save = function() { - $scope.client.protocol = $scope.protocol; - - Client.save({ - realm: realm.realm, - client: '' - }, $scope.client, function (data, headers) { - $scope.changed = false; - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + "/clients/" + id); - Notifications.success("The client has been created."); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/clients"); - }; -}); - -module.controller('ClientScopeMappingCtrl', function($scope, $http, realm, $route, client, clients, Notifications, - Client, ClientScope, - ClientRealmScopeMapping, ClientClientScopeMapping, ClientRole, - ClientAvailableRealmScopeMapping, ClientAvailableClientScopeMapping, - ClientCompositeRealmScopeMapping, ClientCompositeClientScopeMapping) { - $scope.realm = realm; - $scope.client = angular.copy(client); - $scope.selectedRealmRoles = []; - $scope.selectedRealmMappings = []; - $scope.realmMappings = []; - $scope.clients = clients; - $scope.clientRoles = []; - $scope.clientComposite = []; - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.clientMappings = []; - $scope.dummymodel = []; - - $scope.hideRoleSelector = function() { - return $scope.client.fullScopeAllowed; - } - - $scope.changeFlag = function() { - console.log('changeFlag'); - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.client, function() { - $scope.changed = false; - client = angular.copy($scope.client); - updateRealmRoles(); - Notifications.success("Scope mappings updated."); - }); - } - - - $scope.selectedClient = null; - - $scope.selectClient = function(client) { - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - - $scope.selectedClient = client; - updateClientRoles(); - } - - function updateRealmRoles() { - $scope.realmRoles = ClientAvailableRealmScopeMapping.query({realm : realm.realm, client : client.id}); - $scope.realmMappings = ClientRealmScopeMapping.query({realm : realm.realm, client : client.id}); - $scope.realmComposite = ClientCompositeRealmScopeMapping.query({realm : realm.realm, client : client.id}); - } - - function updateClientRoles() { - if ($scope.selectedClient) { - $scope.clientRoles = ClientAvailableClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id}); - $scope.clientMappings = ClientClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id}); - $scope.clientComposite = ClientCompositeClientScopeMapping.query({realm : realm.realm, client : client.id, targetClient : $scope.selectedClient.id}); - } else { - $scope.clientRoles = null; - $scope.clientMappings = null; - $scope.clientComposite = null; - } - } - - $scope.addRealmRole = function() { - $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $scope.selectedRealmRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm', - $scope.selectedRealmRolesToAdd).then(function() { - updateRealmRoles(); - $scope.selectedRealmRolesToAdd = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.deleteRealmRole = function() { - $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); - $scope.selectedRealmMappings = []; - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/realm', - {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () { - updateRealmRoles(); - $scope.selectedRealmMappingsToRemove = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.addClientRole = function() { - $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $scope.selectedClientRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.selectedClient.id, - $scope.selectedClientRolesToAdd).then(function () { - updateClientRoles(); - $scope.selectedClientRolesToAdd = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.deleteClientRole = function() { - $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); - $scope.selectedClientMappings = []; - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/scope-mappings/clients/' + $scope.selectedClient.id, - {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () { - updateClientRoles(); - $scope.selectedClientMappingsToRemove = []; - Notifications.success("Scope mappings updated."); - }); - }; - - clientSelectControl($scope, $route.current.params.realm, Client); - updateRealmRoles(); -}); - -module.controller('ClientRevocationCtrl', function($scope, realm, client, Client, ClientPushRevocation, $location, Dialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - - var setNotBefore = function() { - if ($scope.client.notBefore == 0) { - $scope.notBefore = "None"; - } else { - $scope.notBefore = new Date($scope.client.notBefore * 1000); - } - }; - - setNotBefore(); - - var refresh = function() { - Client.get({ realm : realm.realm, client: $scope.client.id }, function(updated) { - $scope.client = updated; - setNotBefore(); - }) - - }; - - $scope.clear = function() { - $scope.client.notBefore = 0; - Client.update({ realm : realm.realm, client: client.id}, $scope.client, function () { - $scope.notBefore = "None"; - Notifications.success('Not Before cleared for client.'); - refresh(); - }); - } - $scope.setNotBeforeNow = function() { - $scope.client.notBefore = new Date().getTime()/1000; - Client.update({ realm : realm.realm, client: $scope.client.id}, $scope.client, function () { - Notifications.success('Not Before set for client.'); - refresh(); - }); - } - $scope.pushRevocation = function() { - ClientPushRevocation.save({realm : realm.realm, client: $scope.client.id}, function (globalReqResult) { - var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0; - var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0; - - if (successCount==0 && failedCount==0) { - Notifications.warn('No push sent. No admin URI configured or no registered cluster nodes available'); - } else if (failedCount > 0) { - var msgStart = successCount>0 ? 'Successfully push notBefore to: ' + globalReqResult.successRequests + ' . ' : ''; - Notifications.error(msgStart + 'Failed to push notBefore to: ' + globalReqResult.failedRequests + '. Verify availability of failed hosts and try again'); - } else { - Notifications.success('Successfully push notBefore to: ' + globalReqResult.successRequests); - } - }); - } - -}); - -module.controller('ClientClusteringCtrl', function($scope, client, Client, ClientTestNodesAvailable, ClientClusterNode, realm, $location, $route, Dialog, Notifications, TimeUnit) { - $scope.client = client; - $scope.realm = realm; - - var oldCopy = angular.copy($scope.client); - $scope.changed = false; - - $scope.$watch('client', function() { - if (!angular.equals($scope.client, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.client.nodeReRegistrationTimeoutUnit = TimeUnit.autoUnit(client.nodeReRegistrationTimeout); - $scope.client.nodeReRegistrationTimeout = TimeUnit.toUnit(client.nodeReRegistrationTimeout, $scope.client.nodeReRegistrationTimeoutUnit); - - $scope.save = function() { - var clientCopy = angular.copy($scope.client); - delete clientCopy['nodeReRegistrationTimeoutUnit']; - clientCopy.nodeReRegistrationTimeout = TimeUnit.toSeconds($scope.client.nodeReRegistrationTimeout, $scope.client.nodeReRegistrationTimeoutUnit) - Client.update({ realm : realm.realm, client : client.id }, clientCopy, function () { - $route.reload(); - Notifications.success('Your changes have been saved to the client.'); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.testNodesAvailable = function() { - ClientTestNodesAvailable.get({ realm : realm.realm, client : client.id }, function(globalReqResult) { - $route.reload(); - - var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0; - var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0; - - if (successCount==0 && failedCount==0) { - Notifications.warn('No requests sent. No admin URI configured or no registered cluster nodes available'); - } else if (failedCount > 0) { - var msgStart = successCount>0 ? 'Successfully verify availability for ' + globalReqResult.successRequests + ' . ' : ''; - Notifications.error(msgStart + 'Failed to verify availability for: ' + globalReqResult.failedRequests + '. Fix or unregister failed cluster nodes and try again'); - } else { - Notifications.success('Successfully sent requests to: ' + globalReqResult.successRequests); - } - }); - }; - - if (client.registeredNodes) { - var nodeRegistrations = []; - for (node in client.registeredNodes) { - reg = { - host: node, - lastRegistration: new Date(client.registeredNodes[node] * 1000) - } - nodeRegistrations.push(reg); - } - - $scope.nodeRegistrations = nodeRegistrations; - }; - - $scope.removeNode = function(node) { - Dialog.confirmDelete(node.host, 'node', function() { - ClientClusterNode.remove({ realm : realm.realm, client : client.id , node: node.host }, function() { - Notifications.success('Node ' + node.host + ' unregistered successfully.'); - $route.reload(); - }); - }); - }; -}); - -module.controller('ClientClusteringNodeCtrl', function($scope, client, Client, ClientClusterNode, realm, - $location, $routeParams, Notifications, Dialog) { - $scope.client = client; - $scope.realm = realm; - $scope.create = !$routeParams.node; - - $scope.save = function() { - ClientClusterNode.save({ realm : realm.realm, client : client.id , node: $scope.node.host }, function() { - Notifications.success('Node ' + $scope.node.host + ' registered successfully.'); - $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/clustering'); - }); - } - - $scope.unregisterNode = function() { - Dialog.confirmDelete($scope.node.host, 'node', function() { - ClientClusterNode.remove({ realm : realm.realm, client : client.id , node: $scope.node.host }, function() { - Notifications.success('Node ' + $scope.node.host + ' unregistered successfully.'); - $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/clustering'); - }); - }); - } - - if ($scope.create) { - $scope.node = {} - $scope.registered = false; - } else { - var lastRegTime = client.registeredNodes[$routeParams.node]; - - if (lastRegTime) { - $scope.registered = true; - $scope.node = { - host: $routeParams.node, - lastRegistration: new Date(lastRegTime * 1000) - } - - } else { - $scope.registered = false; - $scope.node = { - host: $routeParams.node - } - } - } -}); - -module.controller('AddBuiltinProtocolMapperCtrl', function($scope, realm, client, serverInfo, - ClientProtocolMappersByProtocol, - $http, $location, Dialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - if (client.protocol == null) { - client.protocol = 'openid-connect'; - } - - var protocolMappers = serverInfo.protocolMapperTypes[client.protocol]; - var mapperTypes = {}; - for (var i = 0; i < protocolMappers.length; i++) { - mapperTypes[protocolMappers[i].id] = protocolMappers[i]; - } - $scope.mapperTypes = mapperTypes; - - - - - var updateMappers = function() { - var clientMappers = ClientProtocolMappersByProtocol.query({realm : realm.realm, client : client.id, protocol : client.protocol}, function() { - var builtinMappers = serverInfo.builtinProtocolMappers[client.protocol]; - for (var i = 0; i < clientMappers.length; i++) { - for (var j = 0; j < builtinMappers.length; j++) { - if (builtinMappers[j].name == clientMappers[i].name - && builtinMappers[j].protocolMapper == clientMappers[i].protocolMapper) { - builtinMappers.splice(j, 1); - break; - } - } - } - $scope.mappers = builtinMappers; - for (var i = 0; i < $scope.mappers.length; i++) { - $scope.mappers[i].isChecked = false; - } - - - }); - }; - - updateMappers(); - - $scope.add = function() { - var toAdd = []; - for (var i = 0; i < $scope.mappers.length; i++) { - if ($scope.mappers[i].isChecked) { - delete $scope.mappers[i].isChecked; - toAdd.push($scope.mappers[i]); - } - } - $http.post(authUrl + '/admin/realms/' + realm.realm + '/clients/' + client.id + '/protocol-mappers/add-models', - toAdd).then(function() { - Notifications.success("Mappers added"); - $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/mappers'); - }).catch(function() { - Notifications.error("Error adding mappers"); - $location.url('/realms/' + realm.realm + '/clients/' + client.id + '/mappers'); - }); - }; - -}); - -module.controller('ClientProtocolMapperListCtrl', function($scope, realm, client, serverInfo, - Client, - ClientProtocolMappersByProtocol, ClientProtocolMapper, - $route, Dialog, Notifications) { - $scope.realm = realm; - $scope.client = client; - if (client.protocol == null) { - client.protocol = 'openid-connect'; - } - - $scope.changeFlag = function() { - Client.update({ - realm : realm.realm, - client : client.id - }, $scope.client, function() { - $scope.changed = false; - client = angular.copy($scope.client); - Notifications.success("Client updated."); - }); - } - - var protocolMappers = serverInfo.protocolMapperTypes[client.protocol]; - var mapperTypes = {}; - for (var i = 0; i < protocolMappers.length; i++) { - mapperTypes[protocolMappers[i].id] = protocolMappers[i]; - } - $scope.mapperTypes = mapperTypes; - - $scope.removeMapper = function(mapper) { - console.debug(mapper); - Dialog.confirmDelete(mapper.name, 'mapper', function() { - ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : mapper.id }, function() { - Notifications.success("The mapper has been deleted."); - $route.reload(); - }); - }); - }; - - $scope.sortMappersByPriority = function(mapper) { - return $scope.mapperTypes[mapper.protocolMapper].priority; - } - - var updateMappers = function() { - $scope.mappers = ClientProtocolMappersByProtocol.query({realm : realm.realm, client : client.id, protocol : client.protocol}); - }; - - updateMappers(); -}); - -module.controller('ClientProtocolMapperCtrl', function($scope, realm, serverInfo, client, clients, mapper, ClientProtocolMapper, Notifications, Dialog, $location) { - $scope.realm = realm; - $scope.clients = clients; - - /* - $scope.client = client; - $scope.create = false; - $scope.protocol = client.protocol; - $scope.mapper = angular.copy(mapper); - $scope.changed = false; - */ - - if (client.protocol == null) { - client.protocol = 'openid-connect'; - } - - $scope.model = { - realm: realm, - client: client, - create: false, - protocol: client.protocol, - mapper: angular.copy(mapper), - changed: false - }; - - var protocolMappers = serverInfo.protocolMapperTypes[client.protocol]; - for (var i = 0; i < protocolMappers.length; i++) { - if (protocolMappers[i].id === mapper.protocolMapper) { - $scope.model.mapperType = protocolMappers[i]; - } - } - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch('model.mapper', function() { - if (!angular.equals($scope.model.mapper, mapper)) { - $scope.model.changed = true; - } - }, true); - - $scope.save = function() { - ClientProtocolMapper.update({ - realm : realm.realm, - client: client.id, - id : $scope.model.mapper.id - }, $scope.model.mapper, function() { - $scope.model.changed = false; - mapper = angular.copy($scope.mapper); - $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + $scope.model.mapper.id); - Notifications.success("Your changes have been saved."); - }); - }; - - $scope.reset = function() { - $scope.model.mapper = angular.copy(mapper); - $scope.model.changed = false; - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.model.mapper.name, 'mapper', function() { - ClientProtocolMapper.remove({ realm: realm.realm, client: client.id, id : $scope.model.mapper.id }, function() { - Notifications.success("The mapper has been deleted."); - $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers"); - }); - }); - }; - -}); - -module.controller('ClientProtocolMapperCreateCtrl', function($scope, realm, serverInfo, client, clients, ClientProtocolMapper, Notifications, Dialog, $location) { - $scope.realm = realm; - $scope.clients = clients; - - if (client.protocol == null) { - client.protocol = 'openid-connect'; - } - var protocol = client.protocol; - /* - $scope.client = client; - $scope.create = true; - $scope.protocol = protocol; - $scope.mapper = { protocol : client.protocol, config: {}}; - $scope.mapperTypes = serverInfo.protocolMapperTypes[protocol]; - */ - $scope.model = { - realm: realm, - client: client, - create: true, - protocol: client.protocol, - mapper: { protocol : client.protocol, config: {}}, - changed: false, - mapperTypes: serverInfo.protocolMapperTypes[protocol] - }; - console.log("mapper types: ", $scope.model.mapperTypes); - - // apply default configurations on change for selected protocolmapper type. - $scope.$watch('model.mapperType', function() { - var currentMapperType = $scope.model.mapperType; - var defaultConfig = {}; - - if (currentMapperType && Array.isArray(currentMapperType.properties)) { - for (var i = 0; i < currentMapperType.properties.length; i++) { - var property = currentMapperType.properties[i]; - if (property && property.name && property.defaultValue) { - defaultConfig[property.name] = property.defaultValue; - } - } - } - - $scope.model.mapper.config = defaultConfig; - }, true); - - $scope.model.mapperType = $scope.model.mapperTypes[0]; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.save = function() { - $scope.model.mapper.protocolMapper = $scope.model.mapperType.id; - ClientProtocolMapper.save({ - realm : realm.realm, client: client.id - }, $scope.model.mapper, function(data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + '/clients/' + client.id + "/mappers/" + id); - Notifications.success("Mapper has been created."); - }); - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - -}); - - -module.controller('ClientClientScopesSetupCtrl', function($scope, realm, Realm, client, clientScopes, serverInfo, - clientDefaultClientScopes, ClientDefaultClientScopes, clientOptionalClientScopes, ClientOptionalClientScopes, $route, Notifications, $location) { - console.log('ClientClientScopesSetupCtrl'); - - $scope.realm = realm; - $scope.client = client; - - $scope.clientDefaultClientScopes = clientDefaultClientScopes; - $scope.clientOptionalClientScopes = clientOptionalClientScopes; - - $scope.availableClientScopes = []; - $scope.selectedDefaultClientScopes = []; - $scope.selectedDefDefaultClientScopes = []; - - $scope.selectedOptionalClientScopes = []; - $scope.selectedDefOptionalClientScopes = []; - - // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional' - for (var i = 0; i < clientScopes.length; i++) { - var clientScope = clientScopes[i]; - var scopeName = clientScopes[i].name; - - var available = true; - if (clientScope.protocol != client.protocol) { - available = false; - } - - for (var j = 0; j < $scope.clientDefaultClientScopes.length; j++) { - if (scopeName === $scope.clientDefaultClientScopes[j].name) { - available = false; - } - } - for (var j = 0; j < $scope.clientOptionalClientScopes.length; j++) { - if (scopeName === $scope.clientOptionalClientScopes[j].name) { - available = false; - } - } - - if (available) { - $scope.availableClientScopes.push(clientScope); - } - } - - $scope.addDefaultClientScope = function () { - $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']'); - toAdd = $scope.selectedDefaultClientScopesToAdd.length; - - for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) { - var currentScope = $scope.selectedDefaultClientScopesToAdd[i]; - - ClientDefaultClientScopes.update({ - realm : realm.realm, - client : client.id, - clientScopeId : currentScope.id - }, function () { - toAdd = toAdd - 1; - if (toAdd === 0) { - $route.reload(); - Notifications.success("Default scopes updated."); - } - }); - } - $scope.selectedDefaultClientScopesToAdd = []; - }; - - $scope.deleteDefaultClientScope = function () { - $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']'); - toRemove = $scope.selectedDefDefaultClientScopesToRemove.length; - - for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) { - var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i]; - - ClientDefaultClientScopes.remove({ - realm : realm.realm, - client : client.id, - clientScopeId : currentScope.id - }, function () { - toRemove = toRemove - 1; - if (toRemove === 0) { - $route.reload(); - Notifications.success("Default scopes updated."); - } - }); - } - $scope.selectedDefDefaultClientScopesToRemove = []; - }; - - $scope.addOptionalClientScope = function () { - $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']'); - toAdd = $scope.selectedOptionalClientScopesToAdd.length; - - for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) { - var currentScope = $scope.selectedOptionalClientScopesToAdd[i]; - - ClientOptionalClientScopes.update({ - realm : realm.realm, - client : client.id, - clientScopeId : currentScope.id - }, function () { - toAdd = toAdd - 1; - if (toAdd === 0) { - $route.reload(); - Notifications.success("Optional scopes updated."); - } - }); - } - }; - - $scope.deleteOptionalClientScope = function () { - $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']'); - toRemove = $scope.selectedDefOptionalClientScopesToRemove.length; - - for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) { - var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i]; - - ClientOptionalClientScopes.remove({ - realm : realm.realm, - client : client.id, - clientScopeId : currentScope.id - }, function () { - toRemove = toRemove - 1; - if (toRemove === 0) { - $route.reload(); - Notifications.success("Optional scopes updated."); - } - }); - } - $scope.selectedDefOptionalClientScopesToRemove = []; - }; - -}); - -module.controller('ClientClientScopesEvaluateCtrl', function($scope, Realm, User, ClientEvaluateProtocolMappers, ClientEvaluateGrantedRoles, - ClientEvaluateNotGrantedRoles, ClientEvaluateGenerateExampleAccessToken, ClientEvaluateGenerateExampleIDToken, - ClientEvaluateGenerateExampleUserInfo, realm, client, clients, clientScopes, serverInfo, ComponentUtils, - clientOptionalClientScopes, clientDefaultClientScopes, $route, $routeParams, $http, Notifications, $location, - Client) { - - console.log('ClientClientScopesEvaluateCtrl'); - - var protocolMappers = serverInfo.protocolMapperTypes[client.protocol]; - var mapperTypes = {}; - for (var i = 0; i < protocolMappers.length; i++) { - mapperTypes[protocolMappers[i].id] = protocolMappers[i]; - } - $scope.mapperTypes = mapperTypes; - - $scope.realm = realm; - $scope.client = client; - $scope.clients = clients; - $scope.userId = null; - - $scope.availableClientScopes = []; - $scope.assignedClientScopes = []; - $scope.selectedClientScopes = []; - $scope.selectedDefClientScopes = []; - $scope.effectiveClientScopes = []; - - // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional' - for (var i = 0; i < clientOptionalClientScopes.length; i++) { - $scope.availableClientScopes.push(clientOptionalClientScopes[i]); - } - - function clearEvalResponse() { - $scope.protocolMappers = null; - $scope.grantedRealmRoles = null; - $scope.notGrantedRealmRoles = null; - $scope.grantedClientRoles = null; - $scope.notGrantedClientRoles = null; - $scope.targetClient = null; - $scope.oidcAccessToken = null; - $scope.oidcIDToken = null; - $scope.oidcUserInfo = null; - - $scope.selectedTab = 0; - } - - function updateState() { - // Compute scope parameter - $scope.scopeParam = 'openid'; - for (var i = 0; i < $scope.assignedClientScopes.length; i++) { - var currentScopeParam = $scope.assignedClientScopes[i].name; - $scope.scopeParam = $scope.scopeParam + ' ' + currentScopeParam; - } - - // Compute effective scopes - $scope.effectiveClientScopes = []; - - for (var i = 0; i < clientDefaultClientScopes.length; i++) { - var currentScope = clientDefaultClientScopes[i]; - $scope.effectiveClientScopes.push(currentScope); - } - for (var i = 0; i < $scope.assignedClientScopes.length; i++) { - var currentScope = $scope.assignedClientScopes[i]; - $scope.effectiveClientScopes.push(currentScope); - } - - // Clear the evaluation response - clearEvalResponse(); - } - - updateState(); - - - $scope.addAppliedClientScope = function () { - $scope.selectedClientScopesToAdd = JSON.parse('[' + $scope.selectedClientScopes + ']'); - for (var i = 0; i < $scope.selectedClientScopesToAdd.length; i++) { - var currentScope = $scope.selectedClientScopesToAdd[i]; - - $scope.assignedClientScopes.push(currentScope); - - var index = ComponentUtils.findIndexById($scope.availableClientScopes, currentScope.id); - if (index > -1) { - $scope.availableClientScopes.splice(index, 1); - } - } - - $scope.selectedClientScopes = []; - $scope.selectedClientScopesToAdd = []; - updateState(); - }; - - $scope.deleteAppliedClientScope = function () { - $scope.selectedDefClientScopesToRemove = JSON.parse('[' + $scope.selectedDefClientScopes + ']'); - for (var i = 0; i < $scope.selectedDefClientScopesToRemove.length; i++) { - var currentScope = $scope.selectedDefClientScopesToRemove[i]; - - $scope.availableClientScopes.push(currentScope); - - var index = ComponentUtils.findIndexById($scope.assignedClientScopes, currentScope.id); - if (index > -1) { - $scope.assignedClientScopes.splice(index, 1); - } - } - - $scope.selectedDefClientScopes = []; - $scope.selectedDefClientScopesToRemove = []; - - updateState(); - }; - - $scope.usersUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - User.query({realm: $route.current.params.realm, search: query.term.trim(), max: 20}, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.username; - return object.username; - } - }; - - $scope.selectedUser = null; - - $scope.selectUser = function(user) { - clearEvalResponse(); - - if (!user || !user.id) { - $scope.selectedUser = null; - $scope.userId = ''; - return; - } - - $scope.userId = user.id; - } - - clientSelectControl($scope, $route.current.params.realm, Client); - - $scope.selectedClient = null; - - $scope.selectClient = function(client) { - console.log("selected client: ", client); - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - - $scope.selectedClient = client; - updateScopeClientRoles(); - } - - - $scope.sendEvaluationRequest = function () { - - // Send request for retrieve protocolMappers - $scope.protocolMappers = ClientEvaluateProtocolMappers.query({ - realm: realm.realm, - client: client.id, - scopeParam: $scope.scopeParam - }); - - // Send request for retrieve realmRoles - updateScopeRealmRoles(); - - // Send request for retrieve accessToken (in case user was selected) - if (client.protocol === 'openid-connect' && $scope.userId != null && $scope.userId !== '') { - var exampleRequestParams = { - realm: realm.realm, - client: client.id, - userId: $scope.userId, - scopeParam: $scope.scopeParam - }; - - var accessTokenUrl = ClientEvaluateGenerateExampleAccessToken.url(exampleRequestParams); - getPrettyJsonResponse(accessTokenUrl).then(function (result) { - $scope.oidcAccessToken = result; - }); - - var idTokenUrl = ClientEvaluateGenerateExampleIDToken.url(exampleRequestParams); - getPrettyJsonResponse(idTokenUrl).then(function (result) { - $scope.oidcIDToken = result; - }); - - var userInfoUrl = ClientEvaluateGenerateExampleUserInfo.url(exampleRequestParams); - getPrettyJsonResponse(userInfoUrl).then(function (result) { - $scope.oidcUserInfo = result; - }); - } - - $scope.showTab(1); - }; - - function getPrettyJsonResponse(url) { - return $http.get(url).then(function (response) { - if (response.data) { - var responseJson = angular.fromJson(response.data); - return angular.toJson(responseJson, true); - } else { - return null; - } - }); - } - - $scope.isResponseAvailable = function () { - return $scope.protocolMappers != null; - } - - $scope.isAccessTokenAvailable = function () { - return $scope.oidcAccessToken != null; - } - - $scope.isIDTokenAvailable = function () { - return $scope.oidcIDToken != null; - } - - $scope.isUserInfoAvailable = function () { - return $scope.oidcUserInfo != null; - } - - $scope.showTab = function (tab) { - $scope.selectedTab = tab; - - $scope.tabCss = { - tab1: getTabCssClass(1, tab), - tab2: getTabCssClass(2, tab), - tab3: getTabCssClass(3, tab), - tab4: getTabCssClass(4, tab), - tab5: getTabCssClass(5, tab) - } - } - - function getTabCssClass(tabNo, selectedTab) { - return (tabNo === selectedTab) ? 'active' : ''; - } - - $scope.protocolMappersShown = function () { - return $scope.selectedTab === 1; - } - - $scope.rolesShown = function () { - return $scope.selectedTab === 2; - } - - $scope.exampleTabInfo = function() { - switch ($scope.selectedTab) { - case 3: - return { isShown: true, value: $scope.oidcAccessToken} - case 4: - return { isShown: true, value: $scope.oidcIDToken} - case 5: - return { isShown: true, value: $scope.oidcUserInfo} - default: - return { isShown: false, value: null} - } - } - - $scope.sortMappersByPriority = function(mapper) { - return $scope.mapperTypes[mapper.protocolMapper].priority; - } - - - // Roles - - function updateScopeRealmRoles() { - $scope.grantedRealmRoles = ClientEvaluateGrantedRoles.query({ - realm: realm.realm, - client: client.id, - roleContainer: realm.realm, - scopeParam: $scope.scopeParam - }); - $scope.notGrantedRealmRoles = ClientEvaluateNotGrantedRoles.query({ - realm: realm.realm, - client: client.id, - roleContainer: realm.realm, - scopeParam: $scope.scopeParam - }); - } - - function updateScopeClientRoles() { - if ($scope.selectedClient) { - $scope.grantedClientRoles = ClientEvaluateGrantedRoles.query({ - realm: realm.realm, - client: client.id, - roleContainer: $scope.selectedClient.id, - scopeParam: $scope.scopeParam - }); - $scope.notGrantedClientRoles = ClientEvaluateNotGrantedRoles.query({ - realm: realm.realm, - client: client.id, - roleContainer: $scope.selectedClient.id, - scopeParam: $scope.scopeParam - }); - } else { - $scope.grantedClientRoles = null; - $scope.notGrantedClientRoles = null; - } - } -}); - - -module.controller('ClientScopeTabCtrl', function(Dialog, $scope, Current, Notifications, $location) { - $scope.removeClientScope = function() { - Dialog.confirmDelete($scope.clientScope.name, 'client scope', function() { - $scope.clientScope.$remove({ - realm : Current.realm.realm, - clientScope : $scope.clientScope.id - }, function() { - $location.url("/realms/" + Current.realm.realm + "/client-scopes"); - Notifications.success("The client scope has been deleted."); - }); - }); - }; -}); - - - -module.controller('ClientScopeListCtrl', function($scope, realm, clientScopes, ClientScope, serverInfo, $route, Dialog, Notifications, $location) { - $scope.realm = realm; - $scope.clientScopes = clientScopes; - - $scope.removeClientScope = function(clientScope) { - Dialog.confirmDelete(clientScope.name, 'client scope', function() { - ClientScope.remove({ - realm : realm.realm, - clientScope : clientScope.id - }, function() { - $route.reload(); - Notifications.success("The client scope been deleted."); - }); - }); - }; -}); - -module.controller('ClientScopesRealmDefaultCtrl', function($scope, realm, Realm, clientScopes, realmDefaultClientScopes, RealmDefaultClientScopes, - realmOptionalClientScopes, RealmOptionalClientScopes, serverInfo, $route, Dialog, Notifications, $location) { - - console.log('ClientScopesRealmDefaultCtrl'); - - $scope.realm = realm; - $scope.realmDefaultClientScopes = realmDefaultClientScopes; - $scope.realmOptionalClientScopes = realmOptionalClientScopes; - - $scope.availableClientScopes = []; - $scope.selectedDefaultClientScopes = []; - $scope.selectedDefDefaultClientScopes = []; - - $scope.selectedOptionalClientScopes = []; - $scope.selectedDefOptionalClientScopes = []; - - // Populate available client scopes. Available client scopes are neither already assigned to 'default' or 'optional' - for (var i = 0; i < clientScopes.length; i++) { - var scopeName = clientScopes[i].name; - - var available = true; - for (var j = 0; j < $scope.realmDefaultClientScopes.length; j++) { - if (scopeName === $scope.realmDefaultClientScopes[j].name) { - available = false; - } - } - for (var j = 0; j < $scope.realmOptionalClientScopes.length; j++) { - if (scopeName === $scope.realmOptionalClientScopes[j].name) { - available = false; - } - } - - if (available) { - $scope.availableClientScopes.push(clientScopes[i]); - } - } - - $scope.addDefaultClientScope = function () { - $scope.selectedDefaultClientScopesToAdd = JSON.parse('[' + $scope.selectedDefaultClientScopes + ']'); - toAdd = $scope.selectedDefaultClientScopesToAdd.length; - - for (var i = 0; i < $scope.selectedDefaultClientScopesToAdd.length; i++) { - var currentScope = $scope.selectedDefaultClientScopesToAdd[i]; - - RealmDefaultClientScopes.update({ - realm : realm.realm, - clientScopeId : currentScope.id - }, function () { - toAdd = toAdd - 1; - console.log('toAdd: ' + toAdd); - if (toAdd === 0) { - $route.reload(); - Notifications.success("Realm default scopes updated."); - } - }); - } - $scope.selectedDefaultClientScopesToAdd = []; - }; - - $scope.deleteDefaultClientScope = function () { - $scope.selectedDefDefaultClientScopesToRemove = JSON.parse('[' + $scope.selectedDefDefaultClientScopes + ']'); - toRemove = $scope.selectedDefDefaultClientScopesToRemove.length; - - for (var i = 0; i < $scope.selectedDefDefaultClientScopesToRemove.length; i++) { - var currentScope = $scope.selectedDefDefaultClientScopesToRemove[i]; - - RealmDefaultClientScopes.remove({ - realm : realm.realm, - clientScopeId : currentScope.id - }, function () { - toRemove = toRemove - 1; - if (toRemove === 0) { - $route.reload(); - Notifications.success("Realm default scopes updated."); - } - }); - } - $scope.selectedDefDefaultClientScopesToRemove = []; - }; - - $scope.addOptionalClientScope = function () { - $scope.selectedOptionalClientScopesToAdd = JSON.parse('[' + $scope.selectedOptionalClientScopes + ']'); - toAdd = $scope.selectedOptionalClientScopesToAdd.length; - - for (var i = 0; i < $scope.selectedOptionalClientScopesToAdd.length; i++) { - var currentScope = $scope.selectedOptionalClientScopesToAdd[i]; - - RealmOptionalClientScopes.update({ - realm : realm.realm, - clientScopeId : currentScope.id - }, function () { - toAdd = toAdd - 1; - console.log('toAdd: ' + toAdd); - if (toAdd === 0) { - $route.reload(); - Notifications.success("Realm optional scopes updated."); - } - }); - } - $scope.selectedOptionalClientScopesToAdd = []; - }; - - $scope.deleteOptionalClientScope = function () { - $scope.selectedDefOptionalClientScopesToRemove = JSON.parse('[' + $scope.selectedDefOptionalClientScopes + ']'); - toRemove = $scope.selectedDefOptionalClientScopesToRemove.length; - - for (var i = 0; i < $scope.selectedDefOptionalClientScopesToRemove.length; i++) { - var currentScope = $scope.selectedDefOptionalClientScopesToRemove[i]; - - RealmOptionalClientScopes.remove({ - realm : realm.realm, - clientScopeId : currentScope.id - }, function () { - toRemove = toRemove - 1; - if (toRemove === 0) { - $route.reload(); - Notifications.success("Realm optional scopes updated."); - } - }); - } - $scope.selectedDefOptionalClientScopesToRemove = []; - }; -}); - -module.controller('ClientScopeDetailCtrl', function($scope, realm, clientScope, $route, serverInfo, ClientScope, $location, $modal, Dialog, Notifications) { - $scope.protocols = serverInfo.listProviderIds('login-protocol'); - - $scope.realm = realm; - $scope.create = !clientScope.name; - - function updateProperties() { - if (!$scope.clientScope.attributes) { - $scope.clientScope.attributes = {}; - } - - if ($scope.clientScope.protocol) { - $scope.protocol = $scope.protocols[$scope.protocols.indexOf($scope.clientScope.protocol)]; - } else { - $scope.protocol = $scope.protocols[0]; - } - - if ($scope.clientScope.attributes["display.on.consent.screen"]) { - if ($scope.clientScope.attributes["display.on.consent.screen"] == "true") { - $scope.displayOnConsentScreen = true; - } else { - $scope.displayOnConsentScreen = false; - } - } else { - $scope.displayOnConsentScreen = true; - } - - if ($scope.clientScope.attributes["include.in.token.scope"]) { - if ($scope.clientScope.attributes["include.in.token.scope"] == "true") { - $scope.includeInTokenScope = true; - } else { - $scope.includeInTokenScope = false; - } - } else { - $scope.includeInTokenScope = true; - } - } - - if (!$scope.create) { - $scope.clientScope = angular.copy(clientScope); - } else { - $scope.clientScope = {}; - } - - updateProperties(); - - - $scope.switchChange = function() { - $scope.changed = true; - } - - $scope.changeProtocol = function() { - if ($scope.protocol == "openid-connect") { - $scope.clientScope.protocol = "openid-connect"; - } else if ($scope.protocol == "saml") { - $scope.clientScope.protocol = "saml"; - } - }; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - function isChanged() { - if (!angular.equals($scope.clientScope, clientScope)) { - return true; - } - return false; - } - - $scope.$watch('clientScope', function() { - $scope.changed = isChanged(); - }, true); - - $scope.save = function() { - $scope.clientScope.protocol = $scope.protocol; - - if ($scope.displayOnConsentScreen == true) { - $scope.clientScope.attributes["display.on.consent.screen"] = "true"; - } else { - $scope.clientScope.attributes["display.on.consent.screen"] = "false"; - } - - if ($scope.includeInTokenScope == true) { - $scope.clientScope.attributes["include.in.token.scope"] = "true"; - } else { - $scope.clientScope.attributes["include.in.token.scope"] = "false"; - } - - if ($scope.create) { - ClientScope.save({ - realm: realm.realm, - clientScope: '' - }, $scope.clientScope, function (data, headers) { - $scope.changed = false; - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + "/client-scopes/" + id); - Notifications.success("The client scope has been created."); - }); - } else { - ClientScope.update({ - realm : realm.realm, - clientScope : clientScope.id - }, $scope.clientScope, function() { - $scope.changed = false; - clientScope = angular.copy($scope.clientScope); - $location.url("/realms/" + realm.realm + "/client-scopes/" + clientScope.id); - Notifications.success("Your changes have been saved to the client scope."); - }); - } - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/client-scopes"); - }; -}); - -module.controller('ClientScopeProtocolMapperListCtrl', function($scope, realm, clientScope, serverInfo, - ClientScopeProtocolMappersByProtocol, ClientScopeProtocolMapper, - $route, Dialog, Notifications) { - $scope.realm = realm; - $scope.clientScope = clientScope; - if (clientScope.protocol == null) { - clientScope.protocol = 'openid-connect'; - } - - var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol]; - var mapperTypes = {}; - for (var i = 0; i < protocolMappers.length; i++) { - mapperTypes[protocolMappers[i].id] = protocolMappers[i]; - } - $scope.mapperTypes = mapperTypes; - - $scope.removeMapper = function(mapper) { - console.debug(mapper); - Dialog.confirmDelete(mapper.name, 'mapper', function() { - ClientScopeProtocolMapper.remove({ realm: realm.realm, clientScope: clientScope.id, id : mapper.id }, function() { - Notifications.success("The mapper has been deleted."); - $route.reload(); - }); - }); - }; - - $scope.sortMappersByPriority = function(mapper) { - return $scope.mapperTypes[mapper.protocolMapper].priority; - } - - var updateMappers = function() { - $scope.mappers = ClientScopeProtocolMappersByProtocol.query({realm : realm.realm, clientScope : clientScope.id, protocol : clientScope.protocol}); - }; - - updateMappers(); -}); - -module.controller('ClientScopeProtocolMapperCtrl', function($scope, realm, serverInfo, clientScope, mapper, clients, ClientScopeProtocolMapper, Notifications, Dialog, $location, $route) { - $scope.realm = realm; - $scope.clients = clients; - - if (clientScope.protocol == null) { - clientScope.protocol = 'openid-connect'; - } - - $scope.model = { - realm: realm, - clientScope: clientScope, - create: false, - protocol: clientScope.protocol, - mapper: angular.copy(mapper), - changed: false - } - - var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol]; - for (var i = 0; i < protocolMappers.length; i++) { - if (protocolMappers[i].id == mapper.protocolMapper) { - $scope.model.mapperType = protocolMappers[i]; - } - } - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch('model.mapper', function() { - if (!angular.equals($scope.model.mapper, mapper)) { - $scope.model.changed = true; - } - }, true); - - $scope.save = function() { - ClientScopeProtocolMapper.update({ - realm : realm.realm, - clientScope: clientScope.id, - id : mapper.id - }, $scope.model.mapper, function() { - $route.reload(); - Notifications.success("Your changes have been saved."); - }); - }; - - $scope.reset = function() { - $scope.model.mapper = angular.copy(mapper); - $scope.model.changed = false; - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.model.mapper.name, 'mapper', function() { - ClientScopeProtocolMapper.remove({ realm: realm.realm, clientScope: clientScope.id, id : $scope.model.mapper.id }, function() { - Notifications.success("The mapper has been deleted."); - $location.url("/realms/" + realm.realm + '/client-scopes/' + clientScope.id + "/mappers"); - }); - }); - }; - -}); - -module.controller('ClientScopeProtocolMapperCreateCtrl', function($scope, realm, serverInfo, clientScope, clients, ClientScopeProtocolMapper, Notifications, Dialog, $location) { - $scope.realm = realm; - $scope.clients = clients; - - if (clientScope.protocol == null) { - clientScope.protocol = 'openid-connect'; - } - var protocol = clientScope.protocol; - $scope.model = { - realm: realm, - clientScope: clientScope, - create: true, - protocol: clientScope.protocol, - mapper: { protocol : clientScope.protocol, config: {}}, - changed: false, - mapperTypes: serverInfo.protocolMapperTypes[protocol] - } - - // apply default configurations on change for selected protocolmapper type. - $scope.$watch('model.mapperType', function() { - var currentMapperType = $scope.model.mapperType; - var defaultConfig = {}; - - if (currentMapperType && Array.isArray(currentMapperType.properties)) { - for (var i = 0; i < currentMapperType.properties.length; i++) { - var property = currentMapperType.properties[i]; - if (property && property.name && property.defaultValue) { - defaultConfig[property.name] = property.defaultValue; - } - } - } - - $scope.model.mapper.config = defaultConfig; - }, true); - - $scope.model.mapperType = $scope.model.mapperTypes[0]; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.save = function() { - $scope.model.mapper.protocolMapper = $scope.model.mapperType.id; - ClientScopeProtocolMapper.save({ - realm : realm.realm, clientScope: clientScope.id - }, $scope.model.mapper, function(data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + '/client-scopes/' + clientScope.id + "/mappers/" + id); - Notifications.success("Mapper has been created."); - }); - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - -}); - -module.controller('ClientScopeAddBuiltinProtocolMapperCtrl', function($scope, realm, clientScope, serverInfo, - ClientScopeProtocolMappersByProtocol, - $http, $location, Dialog, Notifications) { - $scope.realm = realm; - $scope.clientScope = clientScope; - if (clientScope.protocol == null) { - clientScope.protocol = 'openid-connect'; - } - - var protocolMappers = serverInfo.protocolMapperTypes[clientScope.protocol]; - var mapperTypes = {}; - for (var i = 0; i < protocolMappers.length; i++) { - mapperTypes[protocolMappers[i].id] = protocolMappers[i]; - } - $scope.mapperTypes = mapperTypes; - - - - - var updateMappers = function() { - var clientMappers = ClientScopeProtocolMappersByProtocol.query({realm : realm.realm, clientScope : clientScope.id, protocol : clientScope.protocol}, function() { - var builtinMappers = serverInfo.builtinProtocolMappers[clientScope.protocol]; - for (var i = 0; i < clientMappers.length; i++) { - for (var j = 0; j < builtinMappers.length; j++) { - if (builtinMappers[j].name == clientMappers[i].name - && builtinMappers[j].protocolMapper == clientMappers[i].protocolMapper) { - builtinMappers.splice(j, 1); - break; - } - } - } - $scope.mappers = builtinMappers; - for (var i = 0; i < $scope.mappers.length; i++) { - $scope.mappers[i].isChecked = false; - } - - - }); - }; - - updateMappers(); - - $scope.add = function() { - var toAdd = []; - for (var i = 0; i < $scope.mappers.length; i++) { - if ($scope.mappers[i].isChecked) { - delete $scope.mappers[i].isChecked; - toAdd.push($scope.mappers[i]); - } - } - $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/protocol-mappers/add-models', - toAdd).then(function() { - Notifications.success("Mappers added"); - $location.url('/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/mappers'); - }).catch(function() { - Notifications.error("Error adding mappers"); - $location.url('/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/mappers'); - }); - }; - -}); - - -module.controller('ClientScopeScopeMappingCtrl', function($scope, $http, $route, realm, clientScope, Notifications, - ClientScope, Client, - ClientScopeRealmScopeMapping, ClientScopeClientScopeMapping, ClientRole, - ClientScopeAvailableRealmScopeMapping, ClientScopeAvailableClientScopeMapping, - ClientScopeCompositeRealmScopeMapping, ClientScopeCompositeClientScopeMapping) { - $scope.realm = realm; - $scope.clientScope = angular.copy(clientScope); - $scope.selectedRealmRoles = []; - $scope.selectedRealmMappings = []; - $scope.realmMappings = []; - $scope.clientRoles = []; - $scope.clientComposite = []; - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.clientMappings = []; - $scope.dummymodel = []; - $scope.selectedClient = null; - - function updateScopeRealmRoles() { - $scope.realmRoles = ClientScopeAvailableRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id}); - $scope.realmMappings = ClientScopeRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id}); - $scope.realmComposite = ClientScopeCompositeRealmScopeMapping.query({realm : realm.realm, clientScope : clientScope.id}); - } - - function updateScopeClientRoles() { - if ($scope.selectedClient) { - $scope.clientRoles = ClientScopeAvailableClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id}); - $scope.clientMappings = ClientScopeClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id}); - $scope.clientComposite = ClientScopeCompositeClientScopeMapping.query({realm : realm.realm, clientScope : clientScope.id, targetClient : $scope.selectedClient.id}); - } else { - $scope.clientRoles = null; - $scope.clientMappings = null; - $scope.clientComposite = null; - } - } - - $scope.changeClient = function(client) { - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - $scope.selectedClient = client; - updateScopeClientRoles(); - }; - - $scope.addRealmRole = function() { - $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $scope.selectedRealmRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm', - $scope.selectedRealmRolesToAdd).then(function() { - updateScopeRealmRoles(); - $scope.selectedRealmRolesToAdd = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.deleteRealmRole = function() { - $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); - $scope.selectedRealmMappings = []; - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/realm', - {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () { - updateScopeRealmRoles(); - $scope.selectedRealmMappingsToRemove = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.addClientRole = function() { - $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $scope.selectedClientRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.selectedClient.id, - $scope.selectedClientRolesToAdd).then(function () { - updateScopeClientRoles(); - $scope.selectedClientRolesToAdd = []; - Notifications.success("Scope mappings updated."); - }); - }; - - $scope.deleteClientRole = function() { - $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); - $scope.selectedClientMappings = []; - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/client-scopes/' + clientScope.id + '/scope-mappings/clients/' + $scope.selectedClient.id, - {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function () { - updateScopeClientRoles(); - $scope.selectedClientMappingsToRemove = []; - Notifications.success("Scope mappings updated."); - }); - }; - - clientSelectControl($scope, $route.current.params.realm, Client); - updateScopeRealmRoles(); -}); - -module.controller('ClientStoresCtrl', function($scope, $location, $route, realm, serverInfo, Components, Notifications, Dialog) { - console.log('ClientStoresCtrl ++++****'); - $scope.realm = realm; - $scope.providers = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider']; - $scope.clientStorageProviders = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider']; - $scope.instancesLoaded = false; - - if (!$scope.providers) $scope.providers = []; - - $scope.addProvider = function(provider) { - console.log('Add provider: ' + provider.id); - $location.url("/create/client-storage/" + realm.realm + "/providers/" + provider.id); - }; - - $scope.getInstanceLink = function(instance) { - return "/realms/" + realm.realm + "/client-storage/providers/" + instance.providerId + "/" + instance.id; - } - - $scope.getInstanceName = function(instance) { - return instance.name; - } - $scope.getInstanceProvider = function(instance) { - return instance.providerId; - } - - $scope.isProviderEnabled = function(instance) { - return !instance.config['enabled'] || instance.config['enabled'][0] == 'true'; - } - - $scope.getInstancePriority = function(instance) { - if (!instance.config['priority']) { - return "0"; - } - return instance.config['priority'][0]; - } - - Components.query({realm: realm.realm, - parent: realm.id, - type: 'org.keycloak.storage.client.ClientStorageProvider' - }, function(data) { - $scope.instances = data; - $scope.instancesLoaded = true; - }); - - $scope.removeInstance = function(instance) { - Dialog.confirmDelete(instance.name, 'client storage provider', function() { - Components.remove({ - realm : realm.realm, - componentId : instance.id - }, function() { - $route.reload(); - Notifications.success("The provider has been deleted."); - }); - }); - }; -}); - -module.controller('GenericClientStorageCtrl', function($scope, $location, Notifications, $route, Dialog, realm, - serverInfo, instance, providerId, Components) { - console.log('GenericClientStorageCtrl'); - console.log('providerId: ' + providerId); - $scope.create = !instance.providerId; - console.log('create: ' + $scope.create); - var providers = serverInfo.componentTypes['org.keycloak.storage.client.ClientStorageProvider']; - console.log('providers length ' + providers.length); - var providerFactory = null; - for (var i = 0; i < providers.length; i++) { - var p = providers[i]; - console.log('provider: ' + p.id); - if (p.id == providerId) { - $scope.providerFactory = p; - providerFactory = p; - break; - } - - } - $scope.changed = false; - - console.log("providerFactory: " + providerFactory.id); - - function initClientStorageSettings() { - if ($scope.create) { - $scope.changed = true; - instance.name = providerFactory.id; - instance.providerId = providerFactory.id; - instance.providerType = 'org.keycloak.storage.client.ClientStorageProvider'; - instance.parentId = realm.id; - instance.config = { - - }; - instance.config['priority'] = ["0"]; - instance.config['enabled'] = ["true"]; - - $scope.fullSyncEnabled = false; - $scope.changedSyncEnabled = false; - instance.config['cachePolicy'] = ['DEFAULT']; - instance.config['evictionDay'] = ['']; - instance.config['evictionHour'] = ['']; - instance.config['evictionMinute'] = ['']; - instance.config['maxLifespan'] = ['']; - if (providerFactory.properties) { - - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (configProperty.defaultValue) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } else { - instance.config[configProperty.name] = ['']; - } - - } - } - - } else { - $scope.changed = false; - if (!instance.config['enabled']) { - instance.config['enabled'] = ['true']; - } - if (!instance.config['cachePolicy']) { - instance.config['cachePolicy'] = ['DEFAULT']; - - } - if (!instance.config['evictionDay']) { - instance.config['evictionDay'] = ['']; - - } - if (!instance.config['evictionHour']) { - instance.config['evictionHour'] = ['']; - - } - if (!instance.config['evictionMinute']) { - instance.config['evictionMinute'] = ['']; - - } - if (!instance.config['maxLifespan']) { - instance.config['maxLifespan'] = ['']; - - } - if (!instance.config['priority']) { - instance.config['priority'] = ['0']; - } - - if (providerFactory.properties) { - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (!instance.config[configProperty.name]) { - instance.config[configProperty.name] = ['']; - } - } - } - - } - } - - initClientStorageSettings(); - $scope.instance = angular.copy(instance); - $scope.realm = realm; - - $scope.$watch('instance', function() { - if (!angular.equals($scope.instance, instance)) { - $scope.changed = true; - } - - }, true); - - $scope.save = function() { - console.log('save provider'); - $scope.changed = false; - if ($scope.create) { - console.log('saving new provider'); - Components.save({realm: realm.realm}, $scope.instance, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/client-storage/providers/" + $scope.instance.providerId + "/" + id); - Notifications.success("The provider has been created."); - }); - } else { - console.log('update existing provider'); - Components.update({realm: realm.realm, - componentId: instance.id - }, - $scope.instance, function () { - $route.reload(); - Notifications.success("The provider has been updated."); - }); - } - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - console.log('cancel'); - if ($scope.create) { - $location.url("/realms/" + realm.realm + "/client-stores"); - } else { - $route.reload(); - } - }; - - - -}); - - diff --git a/deps/keycloak/themes/base/admin/resources/js/controllers/groups.js b/deps/keycloak/themes/base/admin/resources/js/controllers/groups.js deleted file mode 100644 index e92de0f5d..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/controllers/groups.js +++ /dev/null @@ -1,625 +0,0 @@ -module.controller('GroupListCtrl', function($scope, $route, $q, realm, Groups, GroupsCount, Group, GroupChildren, Notifications, $location, Dialog, ComponentUtils, $translate) { - $scope.realm = realm; - $scope.groupList = [ - { - "id" : "realm", - "name": $translate.instant('groups'), - "subGroups" : [] - } - ]; - - $scope.searchCriteria = ''; - $scope.currentPage = 1; - $scope.currentPageInput = $scope.currentPage; - $scope.pageSize = 20; - $scope.numberOfPages = 1; - $scope.tree = []; - - var refreshGroups = function (search) { - console.log('refreshGroups'); - $scope.currentPageInput = $scope.currentPage; - - var first = ($scope.currentPage * $scope.pageSize) - $scope.pageSize; - console.log('first:' + first); - var queryParams = { - realm : realm.realm, - first : first, - max : $scope.pageSize - }; - var countParams = { - realm : realm.realm, - top : 'true' - }; - - if(angular.isDefined(search) && search !== '') { - queryParams.search = search; - countParams.search = search; - } - - var promiseGetGroups = $q.defer(); - Groups.query(queryParams, function(entry) { - promiseGetGroups.resolve(entry); - }, function() { - promiseGetGroups.reject($translate.instant('group.fetch.fail', {params: queryParams})); - }); - promiseGetGroups.promise.then(function(groups) { - $scope.groupList = [ - { - "id" : "realm", - "name": $translate.instant('groups'), - "subGroups": ComponentUtils.sortGroups('name', groups) - } - ]; - if (angular.isDefined(search) && search !== '') { - // Add highlight for concrete text match - setTimeout(function () { - document.querySelectorAll('span').forEach(function (element) { - if (element.textContent.indexOf(search) != -1) { - angular.element(element).addClass('highlight'); - } - }); - }, 500); - } - }, function (failed) { - Notifications.error(failed); - }); - - var promiseCount = $q.defer(); - console.log('countParams: realm[' + countParams.realm); - GroupsCount.query(countParams, function(entry) { - promiseCount.resolve(entry); - }, function() { - promiseCount.reject($translate.instant('group.fetch.fail', {params: countParams})); - }); - promiseCount.promise.then(function(entry) { - if(angular.isDefined(entry.count) && entry.count > $scope.pageSize) { - $scope.numberOfPages = Math.ceil(entry.count/$scope.pageSize); - } else { - $scope.numberOfPages = 1; - } - }, function (failed) { - Notifications.error(failed); - }); - }; - refreshGroups(); - - $scope.$watch('currentPage', function(newValue, oldValue) { - if(parseInt(newValue, 10) !== oldValue) { - refreshGroups($scope.searchCriteria); - } - }); - - $scope.clearSearch = function() { - $scope.searchCriteria = ''; - if (parseInt($scope.currentPage, 10) === 1) { - refreshGroups(); - } else { - $scope.currentPage = 1; - } - }; - - $scope.searchGroup = function() { - if (parseInt($scope.currentPage, 10) === 1) { - refreshGroups($scope.searchCriteria); - } else { - $scope.currentPage = 1; - } - }; - - $scope.edit = function(selected) { - if (selected.id === 'realm') return; - $location.url("/realms/" + realm.realm + "/groups/" + selected.id); - }; - - $scope.cut = function(selected) { - $scope.cutNode = selected; - }; - - $scope.isDisabled = function() { - if (!$scope.tree.currentNode) return true; - return $scope.tree.currentNode.id === 'realm'; - }; - - $scope.paste = function(selected) { - if (selected === null) return; - if ($scope.cutNode === null) return; - if (selected.id === $scope.cutNode.id) return; - if (selected.id === 'realm') { - Groups.save({realm: realm.realm}, {id:$scope.cutNode.id, name: $scope.cutNode.name}, function() { - $route.reload(); - Notifications.success($translate.instant('group.move.success')); - - }); - - } else { - GroupChildren.save({realm: realm.realm, groupId: selected.id}, {id:$scope.cutNode.id, name: $scope.cutNode.name}, function() { - $route.reload(); - Notifications.success($translate.instant('group.move.success')); - - }); - - } - - }; - - $scope.remove = function(selected) { - if (selected === null) return; - Dialog.confirmWithButtonText( - $translate.instant('group.remove.confirm.title', {name: selected.name}), - $translate.instant('group.remove.confirm.message', {name: selected.name}), - $translate.instant('dialogs.delete.confirm'), - function() { - Group.remove({ realm: realm.realm, groupId : selected.id }, function() { - $route.reload(); - Notifications.success($translate.instant('group.remove.success')); - }); - } - ); - }; - - $scope.createGroup = function(selected) { - var parent = 'realm'; - if (selected) { - parent = selected.id; - } - $location.url("/create/group/" + realm.realm + '/parent/' + parent); - - }; - var isLeaf = function(node) { - return node.id !== "realm" && (!node.subGroups || node.subGroups.length === 0); - }; - - $scope.getGroupClass = function(node) { - if (node.id === "realm") { - return 'pficon pficon-users'; - } - if (isLeaf(node)) { - return 'normal'; - } - if (node.subGroups.length && node.collapsed) return 'collapsed'; - if (node.subGroups.length && !node.collapsed) return 'expanded'; - return 'collapsed'; - - }; - - $scope.getSelectedClass = function(node) { - if (node.selected) { - return 'selected'; - } else if ($scope.cutNode && $scope.cutNode.id === node.id) { - return 'cut'; - } - return undefined; - } - -}); - -module.controller('GroupCreateCtrl', function($scope, $route, realm, parentId, Groups, Group, GroupChildren, Notifications, $location, $translate) { - $scope.realm = realm; - $scope.group = {}; - $scope.save = function() { - console.log('save!!!'); - if (parentId === 'realm') { - console.log('realm'); - Groups.save({realm: realm.realm}, $scope.group, function(data, headers) { - var l = headers().location; - - - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/groups/" + id); - Notifications.success($translate.instant('group.create.success')); - }) - - } else { - GroupChildren.save({realm: realm.realm, groupId: parentId}, $scope.group, function(data, headers) { - var l = headers().location; - - - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/groups/" + id); - Notifications.success($translate.instant('group.create.success')); - }) - - } - - }; - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/groups"); - }; -}); - -module.controller('GroupTabCtrl', function(Dialog, $scope, Current, Group, Notifications, $location, $translate) { - $scope.removeGroup = function() { - Dialog.confirmWithButtonText( - $translate.instant('group.remove.confirm.title', {name: $scope.group.name}), - $translate.instant('group.remove.confirm.message', {name: $scope.group.name}), - $translate.instant('dialogs.delete.confirm'), - function() { - Group.remove({ - realm : Current.realm.realm, - groupId : $scope.group.id - }, function() { - $location.url("/realms/" + Current.realm.realm + "/groups"); - Notifications.success($translate.instant('group.remove.success')); - }); - } - ); - }; -}); - -module.controller('GroupDetailCtrl', function(Dialog, $scope, realm, group, Group, Notifications, $location, $translate) { - $scope.realm = realm; - - if (!group.attributes) { - group.attributes = {} - } - convertAttributeValuesToString(group); - - - $scope.group = angular.copy(group); - - $scope.changed = false; // $scope.create; - $scope.$watch('group', function() { - if (!angular.equals($scope.group, group)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - convertAttributeValuesToLists(); - - Group.update({ - realm: realm.realm, - groupId: $scope.group.id - }, $scope.group, function () { - $scope.changed = false; - convertAttributeValuesToString($scope.group); - group = angular.copy($scope.group); - Notifications.success($translate.instant('group.edit.success')); - }); - }; - - function convertAttributeValuesToLists() { - var attrs = $scope.group.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "string") { - attrs[attribute] = attrs[attribute].split("##"); - } - } - } - - function convertAttributeValuesToString(group) { - var attrs = group.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "object") { - attrs[attribute] = attrs[attribute].join("##"); - } - } - } - - $scope.reset = function() { - $scope.group = angular.copy(group); - $scope.changed = false; - }; - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/groups"); - }; - - $scope.addAttribute = function() { - $scope.group.attributes[$scope.newAttribute.key] = $scope.newAttribute.value; - delete $scope.newAttribute; - } - - $scope.removeAttribute = function(key) { - delete $scope.group.attributes[key]; - } -}); - -module.controller('GroupRoleMappingCtrl', function($scope, $http, $route, realm, group, clients, client, Client, Notifications, GroupRealmRoleMapping, - GroupClientRoleMapping, GroupAvailableRealmRoleMapping, GroupAvailableClientRoleMapping, - GroupCompositeRealmRoleMapping, GroupCompositeClientRoleMapping, $translate) { - $scope.realm = realm; - $scope.group = group; - $scope.selectedRealmRoles = []; - $scope.selectedRealmMappings = []; - $scope.realmMappings = []; - $scope.clients = clients; - $scope.client = client; - $scope.clientRoles = []; - $scope.clientComposite = []; - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.clientMappings = []; - $scope.dummymodel = []; - - $scope.realmMappings = GroupRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - - $scope.addRealmRole = function() { - $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $scope.selectedRealmRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/realm', - $scope.selectedRealmRolesToAdd).then(function() { - $scope.realmMappings = GroupRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.selectedRealmMappings = []; - $scope.selectRealmRoles = []; - if ($scope.selectedClient) { - console.log('load available'); - $scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - } - $scope.selectedRealmRolesToAdd = []; - Notifications.success($translate.instant('group.roles.add.success')); - - }); - }; - - $scope.deleteRealmRole = function() { - $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/realm', - {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { - $scope.realmMappings = GroupRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.selectedRealmMappings = []; - $scope.selectRealmRoles = []; - if ($scope.selectedClient) { - console.log('load available'); - $scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - } - $scope.selectedRealmMappingsToRemove = []; - Notifications.success($translate.instant('group.roles.remove.success')); - }); - }; - - $scope.addClientRole = function() { - $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/clients/' + $scope.selectedClient.id, - $scope.selectedClientRolesToAdd).then(function() { - $scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.selectedClientRolesToAdd = []; - Notifications.success($translate.instant('group.roles.add.success')); - }); - }; - - $scope.deleteClientRole = function() { - $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/groups/' + group.id + '/role-mappings/clients/' + $scope.selectedClient.id, - {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { - $scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.realmComposite = GroupCompositeRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.realmRoles = GroupAvailableRealmRoleMapping.query({realm : realm.realm, groupId : group.id}); - $scope.selectedClientMappingsToRemove = []; - Notifications.success($translate.instant('group.roles.remove.success')); - }); - }; - - - $scope.changeClient = function(client) { - $scope.selectedClient = client; - if (!client || !client.id) { - $scope.selectedClient = null; - $scope.clientRoles = null; - $scope.clientMappings = null; - $scope.clientComposite = null; - return; - } - if ($scope.selectedClient) { - $scope.clientComposite = GroupCompositeClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientRoles = GroupAvailableClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - $scope.clientMappings = GroupClientRoleMapping.query({realm : realm.realm, groupId : group.id, client : $scope.selectedClient.id}); - } - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - }; - - clientSelectControl($scope, $route.current.params.realm, Client); - -}); - -module.controller('GroupMembersCtrl', function($scope, realm, group, GroupMembership) { - $scope.realm = realm; - $scope.page = 0; - $scope.group = group; - - $scope.query = { - realm: realm.realm, - groupId: group.id, - max : 5, - first : 0 - }; - - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - }; - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - }; - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - }; - - $scope.searchQuery = function() { - console.log("query.search: " + $scope.query.search); - $scope.searchLoaded = false; - - $scope.users = GroupMembership.query($scope.query, function() { - console.log('search loaded'); - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - }); - }; - - $scope.searchQuery(); - -}); - -module.controller('DefaultGroupsCtrl', function($scope, $q, realm, Groups, GroupsCount, DefaultGroups, Notifications, $translate) { - $scope.realm = realm; - $scope.groupList = []; - $scope.selectedGroup = null; - $scope.tree = []; - - $scope.searchCriteria = ''; - $scope.currentPage = 1; - $scope.currentPageInput = $scope.currentPage; - $scope.pageSize = 20; - $scope.numberOfPages = 1; - - var refreshDefaultGroups = function () { - DefaultGroups.query({realm: realm.realm}, function(data) { - $scope.defaultGroups = data; - }); - } - - var refreshAvailableGroups = function (search) { - var first = ($scope.currentPage * $scope.pageSize) - $scope.pageSize; - $scope.currentPageInput = $scope.currentPage; - var queryParams = { - realm : realm.realm, - first : first, - max : $scope.pageSize - }; - var countParams = { - realm : realm.realm, - top : 'true' - }; - - if(angular.isDefined(search) && search !== '') { - queryParams.search = search; - countParams.search = search; - } - - var promiseGetGroups = $q.defer(); - Groups.query(queryParams, function(entry) { - promiseGetGroups.resolve(entry); - }, function() { - promiseGetGroups.reject($translate.instant('group.fetch.fail', {params: queryParams})); - }); - promiseGetGroups.promise.then(function(groups) { - $scope.groupList = groups; - }, function (failed) { - Notifications.success(failed); - }); - - var promiseCount = $q.defer(); - GroupsCount.query(countParams, function(entry) { - promiseCount.resolve(entry); - }, function() { - promiseCount.reject($translate.instant('group.fetch.fail', {params: countParams})); - }); - promiseCount.promise.then(function(entry) { - if(angular.isDefined(entry.count) && entry.count > $scope.pageSize) { - $scope.numberOfPages = Math.ceil(entry.count/$scope.pageSize); - } - }, function (failed) { - Notifications.success(failed); - }); - }; - - refreshAvailableGroups(); - - $scope.$watch('currentPage', function(newValue, oldValue) { - if(parseInt(newValue, 10) !== parseInt(oldValue, 10)) { - refreshAvailableGroups($scope.searchCriteria); - } - }); - - $scope.clearSearch = function() { - $scope.searchCriteria = ''; - if (parseInt($scope.currentPage, 10) === 1) { - refreshAvailableGroups(); - } else { - $scope.currentPage = 1; - } - }; - - $scope.searchGroup = function() { - if (parseInt($scope.currentPage, 10) === 1) { - refreshAvailableGroups($scope.searchCriteria); - } else { - $scope.currentPage = 1; - } - }; - - refreshDefaultGroups(); - - $scope.addDefaultGroup = function() { - if (!$scope.tree.currentNode) { - Notifications.error($translate.instant('group.default.add.error')); - return; - } - - DefaultGroups.update({realm: realm.realm, groupId: $scope.tree.currentNode.id}, function() { - refreshDefaultGroups(); - Notifications.success($translate.instant('group.default.add.success')); - }); - - }; - - $scope.removeDefaultGroup = function() { - DefaultGroups.remove({realm: realm.realm, groupId: $scope.selectedGroup.id}, function() { - refreshDefaultGroups(); - Notifications.success($translate.instant('group.default.remove.success')); - }); - - }; - - var isLeaf = function(node) { - return node.id !== "realm" && (!node.subGroups || node.subGroups.length === 0); - }; - - $scope.getGroupClass = function(node) { - if (node.id === "realm") { - return 'pficon pficon-users'; - } - if (isLeaf(node)) { - return 'normal'; - } - if (node.subGroups.length && node.collapsed) return 'collapsed'; - if (node.subGroups.length && !node.collapsed) return 'expanded'; - return 'collapsed'; - - }; - - $scope.getSelectedClass = function(node) { - if (node.selected) { - return 'selected'; - } else if ($scope.cutNode && $scope.cutNode.id === node.id) { - return 'cut'; - } - return undefined; - } - -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/controllers/realm.js b/deps/keycloak/themes/base/admin/resources/js/controllers/realm.js deleted file mode 100644 index 13d06e778..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/controllers/realm.js +++ /dev/null @@ -1,4219 +0,0 @@ -function getAccess(Auth, Current, role) { - if (!Current.realm)return false; - var realmAccess = Auth.user && Auth.user['realm_access']; - if (realmAccess) { - realmAccess = realmAccess[Current.realm.realm]; - if (realmAccess) { - return realmAccess.indexOf(role) >= 0; - } - } - return false; -} - -function getAccessObject(Auth, Current) { - return { - get createRealm() { - return Auth.user && Auth.user.createRealm; - }, - - get queryUsers() { - return getAccess(Auth, Current, 'query-users') || this.viewUsers; - }, - - get queryGroups() { - return getAccess(Auth, Current, 'query-groups') || this.viewUsers; - }, - - get queryClients() { - return getAccess(Auth, Current, 'query-clients') || this.viewClients; - }, - - get viewRealm() { - return getAccess(Auth, Current, 'view-realm') || getAccess(Auth, Current, 'manage-realm') || this.manageRealm; - }, - - get viewClients() { - return getAccess(Auth, Current, 'view-clients') || getAccess(Auth, Current, 'manage-clients') || this.manageClients; - }, - - get viewUsers() { - return getAccess(Auth, Current, 'view-users') || getAccess(Auth, Current, 'manage-users') || this.manageClients; - }, - - get viewEvents() { - return getAccess(Auth, Current, 'view-events') || getAccess(Auth, Current, 'manage-events') || this.manageClients; - }, - - get viewIdentityProviders() { - return getAccess(Auth, Current, 'view-identity-providers') || getAccess(Auth, Current, 'manage-identity-providers') || this.manageIdentityProviders; - }, - - get viewAuthorization() { - return getAccess(Auth, Current, 'view-authorization') || this.manageAuthorization; - }, - - get manageRealm() { - return getAccess(Auth, Current, 'manage-realm'); - }, - - get manageClients() { - return getAccess(Auth, Current, 'manage-clients'); - }, - - get manageUsers() { - return getAccess(Auth, Current, 'manage-users'); - }, - - get manageEvents() { - return getAccess(Auth, Current, 'manage-events'); - }, - - get manageIdentityProviders() { - return getAccess(Auth, Current, 'manage-identity-providers'); - }, - - get manageAuthorization() { - return getAccess(Auth, Current, 'manage-authorization'); - }, - - get impersonation() { - return getAccess(Auth, Current, 'impersonation'); - } - }; -} - - -module.controller('GlobalCtrl', function($scope, $http, Auth, Current, $location, Notifications, ServerInfo, RealmSpecificLocalizationTexts) { - $scope.authUrl = authUrl; - $scope.resourceUrl = resourceUrl; - $scope.auth = Auth; - $scope.serverInfo = ServerInfo.get(); - - $scope.access = getAccessObject(Auth, Current); - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.fragment = $location.path(); - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch(function() { - return Current.realm; - }, function() { - if(Current.realm !== null && currentRealm !== Current.realm.id) { - currentRealm = Current.realm.id; - translateProvider.translations(locale, resourceBundle); - RealmSpecificLocalizationTexts.get({id: Current.realm.realm, locale: locale}, function (localizationTexts) { - translateProvider.translations(locale, localizationTexts.toJSON()); - }) - } - }) -}); - -module.controller('HomeCtrl', function(Realm, Auth, Current, $location) { - - Realm.query(null, function(realms) { - var realm; - if (realms.length == 1) { - realm = realms[0]; - } else if (realms.length == 2) { - if (realms[0].realm == Auth.user.realm) { - realm = realms[1]; - } else if (realms[1].realm == Auth.user.realm) { - realm = realms[0]; - } - } - if (realm) { - Current.realms = realms; - Current.realm = realm; - var access = getAccessObject(Auth, Current); - if (access.viewRealm || access.manageRealm) { - $location.url('/realms/' + realm.realm ); - } else if (access.queryClients) { - $location.url('/realms/' + realm.realm + "/clients"); - } else if (access.viewIdentityProviders) { - $location.url('/realms/' + realm.realm + "/identity-provider-settings"); - } else if (access.queryUsers) { - $location.url('/realms/' + realm.realm + "/users"); - } else if (access.queryGroups) { - $location.url('/realms/' + realm.realm + "/groups"); - } else if (access.viewEvents) { - $location.url('/realms/' + realm.realm + "/events"); - } - } else { - $location.url('/realms'); - } - }); -}); - -module.controller('RealmTabCtrl', function(Dialog, $scope, Current, Realm, Notifications, $location) { - $scope.removeRealm = function() { - Dialog.confirmDelete(Current.realm.realm, 'realm', function() { - Realm.remove({ id : Current.realm.realm }, function() { - Current.realms = Realm.query(); - Notifications.success("The realm has been deleted."); - $location.url("/"); - }); - }); - }; -}); - -module.controller('ServerInfoCtrl', function($scope, ServerInfo) { - ServerInfo.reload(); - - $scope.serverInfo = ServerInfo.get(); - - $scope.$watch($scope.serverInfo, function() { - $scope.providers = []; - for(var spi in $scope.serverInfo.providers) { - var p = angular.copy($scope.serverInfo.providers[spi]); - p.name = spi; - $scope.providers.push(p) - } - }); - - $scope.serverInfoReload = function() { - ServerInfo.reload(); - } -}); - -module.controller('RealmListCtrl', function($scope, Realm, Current) { - $scope.realms = Realm.query(); - Current.realms = $scope.realms; -}); - -module.controller('RealmDropdownCtrl', function($scope, Realm, Current, Auth, $location) { -// Current.realms = Realm.get(); - $scope.current = Current; - - $scope.changeRealm = function(selectedRealm) { - $location.url("/realms/" + selectedRealm); - } -}); - -module.controller('RealmCreateCtrl', function($scope, Current, Realm, $upload, $http, $location, $route, Dialog, Notifications, Auth, $modal) { - console.log('RealmCreateCtrl'); - - Current.realm = null; - - $scope.realm = { - enabled: true - }; - - $scope.changed = false; - $scope.files = []; - - var oldCopy = angular.copy($scope.realm); - - $scope.importFile = function($fileContent){ - $scope.realm = angular.copy(JSON.parse($fileContent)); - $scope.importing = true; - }; - - $scope.viewImportDetails = function() { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-object.html', - controller: 'ObjectModalCtrl', - resolve: { - object: function () { - return $scope.realm; - } - } - }) - }; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.$watch('realm.realm', function() { - $scope.realm.id = $scope.realm.realm; - }, true); - - $scope.save = function() { - var realmCopy = angular.copy($scope.realm); - Realm.create(realmCopy, function() { - Notifications.success("The realm has been created."); - - Auth.refreshPermissions(function() { - $scope.$apply(function() { - $location.url("/realms/" + realmCopy.realm); - }); - }); - }); - }; - - $scope.cancel = function() { - $location.url("/"); - }; - - $scope.reset = function() { - $route.reload(); - } -}); - -module.controller('ObjectModalCtrl', function($scope, object) { - $scope.object = object; -}); - -module.controller('RealmDetailCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $location, $window, Dialog, Notifications, Auth) { - $scope.createRealm = !realm.realm; - $scope.serverInfo = serverInfo; - $scope.realmName = realm.realm; - $scope.disableRename = realm.realm == masterRealm; - $scope.authServerUrl = authServerUrl; - - if (Current.realm == null || Current.realm.realm != realm.realm) { - for (var i = 0; i < Current.realms.length; i++) { - if (realm.realm == Current.realms[i].realm) { - Current.realm = Current.realms[i]; - break; - } - } - } - for (var i = 0; i < Current.realms.length; i++) { - if (Current.realms[i].realm == realm.realm) { - Current.realm = Current.realms[i]; - } - } - $scope.realm = angular.copy(realm); - - var oldCopy = angular.copy($scope.realm); - - $scope.changed = $scope.create; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - $scope.$watch('realmName', function() { - if (!angular.equals($scope.realmName, oldCopy.realm)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - var realmCopy = angular.copy($scope.realm); - realmCopy.realm = $scope.realmName; - $scope.changed = false; - var nameChanged = !angular.equals($scope.realmName, oldCopy.realm); - var oldName = oldCopy.realm; - Realm.update({ id : oldCopy.realm}, realmCopy, function () { - var data = Realm.query(function () { - Current.realms = data; - for (var i = 0; i < Current.realms.length; i++) { - if (Current.realms[i].realm == realmCopy.realm) { - Current.realm = Current.realms[i]; - oldCopy = angular.copy($scope.realm); - } - } - }); - - if (nameChanged) { - console.debug(Auth); - console.debug(Auth.authz.tokenParsed.iss); - - if (Auth.authz.tokenParsed.iss.endsWith(masterRealm)) { - Auth.refreshPermissions(function () { - Auth.refreshPermissions(function () { - Notifications.success("Your changes have been saved to the realm."); - $scope.$apply(function () { - $location.url("/realms/" + realmCopy.realm); - }); - }); - }); - } else { - delete Auth.authz.token; - delete Auth.authz.refreshToken; - - var newLocation = $window.location.href.replace('/' + oldName + '/', '/' + realmCopy.realm + '/') - .replace('/realms/' + oldName, '/realms/' + realmCopy.realm); - window.location.replace(newLocation); - } - } else { - $location.url("/realms/" + realmCopy.realm); - Notifications.success("Your changes have been saved to the realm."); - } - }); - }; - - $scope.reset = function() { - $scope.realm = angular.copy(oldCopy); - $scope.changed = false; - }; - - $scope.cancel = function() { - window.history.back(); - }; -}); - -function genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, url) { - $scope.realm = angular.copy(realm); - $scope.serverInfo = serverInfo; - $scope.registrationAllowed = $scope.realm.registrationAllowed; - - var oldCopy = angular.copy($scope.realm); - - $scope.changed = false; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - var realmCopy = angular.copy($scope.realm); - console.log('updating realm...'); - $scope.changed = false; - console.log('oldCopy.realm - ' + oldCopy.realm); - Realm.update({ id : oldCopy.realm}, realmCopy, function () { - $route.reload(); - Notifications.success("Your changes have been saved to the realm."); - $scope.registrationAllowed = $scope.realm.registrationAllowed; - }); - }; - - $scope.reset = function() { - $scope.realm = angular.copy(oldCopy); - $scope.changed = false; - }; - - $scope.cancel = function() { - $route.reload(); - }; - -} - -module.controller('DefenseHeadersCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications) { - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/defense/headers"); -}); - -module.controller('RealmLoginSettingsCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications) { - // KEYCLOAK-5474: Make sure duplicateEmailsAllowed is disabled if loginWithEmailAllowed - $scope.$watch('realm.loginWithEmailAllowed', function() { - if ($scope.realm.loginWithEmailAllowed) { - $scope.realm.duplicateEmailsAllowed = false; - } - }); - - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/login-settings"); -}); - -module.controller('RealmOtpPolicyCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications) { - $scope.optionsDigits = [ 6, 8 ]; - - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/authentication/otp-policy"); -}); - -module.controller('RealmWebAuthnPolicyCtrl', function ($scope, Current, Realm, realm, serverInfo, $http, $route, $location, Dialog, Notifications) { - - $scope.deleteAcceptableAaguid = function(index) { - $scope.realm.webAuthnPolicyAcceptableAaguids.splice(index, 1); - }; - - $scope.addAcceptableAaguid = function() { - $scope.realm.webAuthnPolicyAcceptableAaguids.push($scope.newAcceptableAaguid); - $scope.newAcceptableAaguid = ""; - }; - - // Just for case the user fill particular URL with disabled WebAuthn feature. - $scope.redirectIfWebAuthnDisabled = function () { - if (!serverInfo.featureEnabled('WEB_AUTHN')) { - $location.url("/realms/" + $scope.realm.realm + "/authentication"); - } - }; - - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/authentication/webauthn-policy"); -}); - -module.controller('RealmWebAuthnPasswordlessPolicyCtrl', function ($scope, Current, Realm, realm, serverInfo, $http, $route, $location, Dialog, Notifications) { - - $scope.deleteAcceptableAaguid = function(index) { - $scope.realm.webAuthnPolicyPasswordlessAcceptableAaguids.splice(index, 1); - }; - - $scope.addAcceptableAaguid = function() { - $scope.realm.webAuthnPolicyPasswordlessAcceptableAaguids.push($scope.newAcceptableAaguid); - $scope.newAcceptableAaguid = ""; - }; - - // Just for case the user fill particular URL with disabled WebAuthn feature. - $scope.redirectIfWebAuthnDisabled = function () { - if (!serverInfo.featureEnabled('WEB_AUTHN')) { - $location.url("/realms/" + $scope.realm.realm + "/authentication"); - } - }; - - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/authentication/webauthn-policy-passwordless"); -}); - -module.controller('RealmCibaPolicyCtrl', function ($scope, Current, Realm, realm, serverInfo, $http, $route, $location, Dialog, Notifications) { - - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/authentication/ciba-policy"); -}); - -module.controller('RealmThemeCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications) { - genericRealmUpdate($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, "/realms/" + realm.realm + "/theme-settings"); - - $scope.supportedLocalesOptions = { - 'multiple' : true, - 'simple_tags' : true, - 'tags' : [] - }; - - updateSupported(); - - function localeForTheme(type, name) { - name = name || 'base'; - for (var i = 0; i < serverInfo.themes[type].length; i++) { - if (serverInfo.themes[type][i].name == name) { - return serverInfo.themes[type][i].locales || []; - } - } - return []; - } - - function updateSupported() { - if ($scope.realm.internationalizationEnabled) { - var accountLocales = localeForTheme('account', $scope.realm.accountTheme); - var loginLocales = localeForTheme('login', $scope.realm.loginTheme); - var emailLocales = localeForTheme('email', $scope.realm.emailTheme); - - var supportedLocales = []; - for (var i = 0; i < accountLocales.length; i++) { - var l = accountLocales[i]; - if (loginLocales.indexOf(l) >= 0 && emailLocales.indexOf(l) >= 0) { - supportedLocales.push(l); - } - } - - $scope.supportedLocalesOptions.tags = supportedLocales; - - if (!$scope.realm.supportedLocales) { - $scope.realm.supportedLocales = supportedLocales; - } else { - for (var i = 0; i < $scope.realm.supportedLocales.length; i++) { - if (supportedLocales.indexOf($scope.realm.supportedLocales[i]) == -1) { - $scope.realm.supportedLocales = supportedLocales; - } - } - } - - if (!$scope.realm.defaultLocale || supportedLocales.indexOf($scope.realm.defaultLocale) == -1) { - $scope.realm.defaultLocale = 'en'; - } - } - } - - $scope.$watch('realm.loginTheme', updateSupported); - $scope.$watch('realm.accountTheme', updateSupported); - $scope.$watch('realm.emailTheme', updateSupported); - $scope.$watch('realm.internationalizationEnabled', updateSupported); -}); - -module.controller('RealmLocalizationCtrl', function($scope, Current, $location, Realm, realm, serverInfo, Notifications, RealmSpecificLocales, realmSpecificLocales, RealmSpecificLocalizationTexts, RealmSpecificLocalizationText, Dialog, $translate){ - $scope.realm = realm; - $scope.realmSpecificLocales = realmSpecificLocales; - $scope.newLocale = null; - $scope.selectedRealmSpecificLocales = null; - $scope.localizationTexts = null; - - $scope.createLocale = function() { - if(!$scope.newLocale) { - Notifications.error($translate.instant('missing-locale')); - return; - } - $scope.realmSpecificLocales.push($scope.newLocale) - $scope.selectedRealmSpecificLocales = $scope.newLocale; - $scope.newLocale = null; - $location.url('/create/localization/' + realm.realm + '/' + $scope.selectedRealmSpecificLocales); - } - - $scope.$watch(function() { - return $scope.selectedRealmSpecificLocales; - }, function() { - if($scope.selectedRealmSpecificLocales != null) { - $scope.updateRealmSpecificLocalizationTexts(); - } - }) - - $scope.updateRealmSpecificLocales = function() { - RealmSpecificLocales.get({id: realm.realm}, function (updated) { - $scope.realmSpecificLocales = updated; - }) - } - - $scope.updateRealmSpecificLocalizationTexts = function() { - RealmSpecificLocalizationTexts.get({id: realm.realm, locale: $scope.selectedRealmSpecificLocales }, function (updated) { - $scope.localizationTexts = updated; - }) - } - - $scope.removeLocalizationText = function(key) { - Dialog.confirmDelete(key, 'localization text', function() { - RealmSpecificLocalizationText.remove({ - realm: realm.realm, - locale: $scope.selectedRealmSpecificLocales, - key: key - }, function () { - $scope.updateRealmSpecificLocalizationTexts(); - Notifications.success($translate.instant('localization-text.remove.success')); - }); - }); - } -}); - -module.controller('RealmLocalizationUploadCtrl', function($scope, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications, $upload, $translate){ - $scope.realm = realm; - $scope.locale = null; - $scope.files = []; - - $scope.onFileSelect = function($files) { - $scope.files = $files; - }; - - $scope.reset = function() { - $scope.locale = null; - $scope.files = null; - }; - - $scope.save = function() { - - if(!$scope.files || $scope.files.length === 0) { - Notifications.error($translate.instant('missing-file')); - return; - } - //$files: an array of files selected, each file has name, size, and type. - for (var i = 0; i < $scope.files.length; i++) { - var $file = $scope.files[i]; - $scope.upload = $upload.upload({ - url: authUrl + '/admin/realms/' + realm.realm + '/localization/' + $scope.locale, - file: $file - }).then(function(response) { - $scope.reset(); - Notifications.success($translate.instant('localization-file.upload.success')); - }).catch(function() { - Notifications.error($translate.instant('localization-file.upload.error')); - }); - } - }; - -}); - -module.controller('RealmLocalizationDetailCtrl', function($scope, Current, $location, Realm, realm, Notifications, locale, key, RealmSpecificLocalizationText, localizationText, $translate){ - $scope.realm = realm; - $scope.locale = locale; - $scope.key = key; - $scope.value = ((localizationText)? localizationText.content : null); - - $scope.create = !key; - - $scope.save = function() { - if ($scope.create) { - RealmSpecificLocalizationText.save({ - realm: realm.realm, - locale: $scope.locale, - key: $scope.key - }, $scope.value, function (data, headers) { - $location.url("/realms/" + realm.realm + "/localization"); - Notifications.success($translate.instant('localization-text.create.success')); - }); - } else { - RealmSpecificLocalizationText.save({ - realm: realm.realm, - locale: $scope.locale, - key: $scope.key - }, $scope.value, function (data, headers) { - $location.url("/realms/" + realm.realm + "/localization"); - Notifications.success($translate.instant('localization-text.update.success')); - }); - } - }; - - $scope.cancel = function () { - $location.url("/realms/" + realm.realm + "/localization"); - }; - -}); - -module.controller('RealmCacheCtrl', function($scope, realm, RealmClearUserCache, RealmClearRealmCache, RealmClearKeysCache, Notifications) { - $scope.realm = angular.copy(realm); - - $scope.clearUserCache = function() { - RealmClearUserCache.save({ realm: realm.realm}, function () { - Notifications.success("User cache cleared"); - }); - } - - $scope.clearRealmCache = function() { - RealmClearRealmCache.save({ realm: realm.realm}, function () { - Notifications.success("Realm cache cleared"); - }); - } - - $scope.clearKeysCache = function() { - RealmClearKeysCache.save({ realm: realm.realm}, function () { - Notifications.success("Public keys cache cleared"); - }); - } - - -}); - -module.controller('RealmPasswordPolicyCtrl', function($scope, Realm, realm, $http, $location, $route, Dialog, Notifications, serverInfo) { - var parse = function(policyString) { - var policies = []; - if (!policyString || policyString.length == 0){ - return policies; - } - - var policyArray = policyString.split(" and "); - - for (var i = 0; i < policyArray.length; i ++){ - var policyToken = policyArray[i]; - var id; - var value; - if (policyToken.indexOf('(') == -1) { - id = policyToken.trim(); - value = null; - } else { - id = policyToken.substring(0, policyToken.indexOf('(')); - value = policyToken.substring(policyToken.indexOf('(') + 1, policyToken.lastIndexOf(')')).trim(); - } - - for (var j = 0; j < serverInfo.passwordPolicies.length; j++) { - if (serverInfo.passwordPolicies[j].id == id) { - // clone - var p = JSON.parse(JSON.stringify(serverInfo.passwordPolicies[j])); - - p.value = value && value || p.defaultValue; - policies.push(p); - } - } - } - return policies; - }; - - var toString = function(policies) { - if (!policies || policies.length == 0) { - return ""; - } - var policyString = ""; - for (var i = 0; i < policies.length; i++) { - policyString += policies[i].id + '(' + policies[i].value + ')'; - if (i != policies.length - 1) { - policyString += ' and '; - } - } - return policyString; - } - - $scope.realm = realm; - $scope.serverInfo = serverInfo; - - $scope.changed = false; - console.log(JSON.stringify(parse(realm.passwordPolicy))); - $scope.policy = parse(realm.passwordPolicy); - var oldCopy = angular.copy($scope.policy); - - $scope.$watch('policy', function() { - $scope.changed = ! angular.equals($scope.policy, oldCopy); - }, true); - - $scope.addPolicy = function(policy){ - policy.value = policy.defaultValue; - if (!$scope.policy) { - $scope.policy = []; - } - $scope.policy.push(policy); - } - - $scope.removePolicy = function(index){ - $scope.policy.splice(index, 1); - } - - $scope.save = function() { - $scope.realm.passwordPolicy = toString($scope.policy); - console.log($scope.realm.passwordPolicy); - - Realm.update($scope.realm, function () { - $route.reload(); - Notifications.success("Your changes have been saved to the realm."); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; -}); - -module.controller('RealmDefaultRolesCtrl', function ($scope, $route, realm, roles, Notifications, ClientRole, Client, RoleRealmComposites, RoleClientComposites, ComponentUtils, $http) { - - console.log('RealmDefaultRolesCtrl'); - - $scope.realm = realm; - $scope.availableRealmRoles = angular.copy(roles); - $scope.selectedRealmRoles = []; - $scope.selectedRealmDefRoles = []; - - $scope.availableClientRoles = []; - $scope.selectedClientRoles = []; - $scope.selectedClientDefRoles = []; - - for (var j = 0; j < $scope.availableRealmRoles.length; j++) { - if ($scope.availableRealmRoles[j].id === realm.defaultRole.id) { - var realmRole = $scope.availableRealmRoles[j]; - var idx = $scope.availableRealmRoles.indexOf(realmRole); - $scope.availableRealmRoles.splice(idx, 1); - break; - } - } - - $scope.realmMappings = RoleRealmComposites.query({realm : realm.realm, role : realm.defaultRole.id}, function(){ - for (var i = 0; i < $scope.realmMappings.length; i++) { - var role = $scope.realmMappings[i]; - for (var j = 0; j < $scope.availableRealmRoles.length; j++) { - var realmRole = $scope.availableRealmRoles[j]; - if (realmRole.id === role.id) { - var idx = $scope.availableRealmRoles.indexOf(realmRole); - if (idx !== -1) { - $scope.availableRealmRoles.splice(idx, 1); - break; - } - } - } - } - }); - - $scope.addRealmDefaultRole = function () { - - $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + realm.defaultRole.id + '/composites', - $scope.selectedRealmRolesToAdd).then(function() { - // Remove selected roles from the Available roles and add them to realm default roles (move from left to right). - for (var i = 0; i < $scope.selectedRealmRolesToAdd.length; i++) { - var selectedRole = $scope.selectedRealmRolesToAdd[i]; - var index = ComponentUtils.findIndexById($scope.availableRealmRoles, selectedRole.id); - if (index > -1) { - $scope.availableRealmRoles.splice(index, 1); - $scope.realmMappings.push(selectedRole); - } - } - - $scope.selectedRealmRoles = []; - $scope.selectedRealmRolesToAdd = []; - Notifications.success("Default roles updated."); - }); - }; - - $scope.deleteRealmDefaultRole = function () { - - $scope.selectedClientRolesToRemove = JSON.parse('[' + $scope.selectedRealmDefRoles + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + realm.defaultRole.id + '/composites', - {data : $scope.selectedClientRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() { - // Remove selected roles from the realm default roles and add them to available roles (move from right to left). - for (var i = 0; i < $scope.selectedClientRolesToRemove.length; i++) { - var selectedRole = $scope.selectedClientRolesToRemove[i]; - var index = ComponentUtils.findIndexById($scope.realmMappings, selectedRole.id); - if (index > -1) { - $scope.realmMappings.splice(index, 1); - $scope.availableRealmRoles.push(selectedRole); - } - } - - $scope.selectedRealmDefRoles = []; - $scope.selectedClientRolesToRemove = []; - Notifications.success("Default roles updated."); - }); - }; - - $scope.changeClient = function (client) { - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - $scope.selectedClient = client; - $scope.selectedClientRoles = []; - $scope.selectedClientDefRoles = []; - - // Populate available roles for selected client - if ($scope.selectedClient) { - $scope.availableClientRoles = ClientRole.query({realm: realm.realm, client: client.id}, function () { - $scope.clientMappings = RoleClientComposites.query({realm : realm.realm, role : realm.defaultRole.id, client : client.id}, function(){ - for (var i = 0; i < $scope.clientMappings.length; i++) { - var role = $scope.clientMappings[i]; - for (var j = 0; j < $scope.availableClientRoles.length; j++) { - var clientRole = $scope.availableClientRoles[j]; - if (clientRole.id === role.id) { - var idx = $scope.availableClientRoles.indexOf(clientRole); - if (idx !== -1) { - $scope.availableClientRoles.splice(idx, 1); - break; - } - } - } - } - }); - for (var j = 0; j < $scope.availableClientRoles.length; j++) { - if ($scope.availableClientRoles[j] === realm.defaultRole.id) { - var clientRole = $scope.availableClientRoles[j]; - var idx = $scope.availableClientRoles.indexof(clientRole); - $scope.availableClientRoles.splice(idx, 1); - break; - } - } - }); - } else { - $scope.availableClientRoles = null; - } - }; - - $scope.addClientDefaultRole = function () { - - $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + realm.defaultRole.id + '/composites', - $scope.selectedClientRolesToAdd).then(function() { - // Remove selected roles from the app available roles and add them to app default roles (move from left to right). - for (var i = 0; i < $scope.selectedClientRolesToAdd.length; i++) { - var selectedRole = $scope.selectedClientRolesToAdd[i]; - - var index = ComponentUtils.findIndexById($scope.availableClientRoles, selectedRole.id); - if (index > -1) { - $scope.availableClientRoles.splice(index, 1); - $scope.clientMappings.push(selectedRole); - } - } - - $scope.selectedClientRoles = []; - $scope.selectedClientRolesToAdd = []; - Notifications.success("Default roles updated."); - }); - }; - - $scope.rmClientDefaultRole = function () { - - $scope.selectedClientRolesToRemove = JSON.parse('[' + $scope.selectedClientDefRoles + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + realm.defaultRole.id + '/composites', - {data : $scope.selectedClientRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() { - // Remove selected roles from the realm default roles and add them to available roles (move from right to left). - for (var i = 0; i < $scope.selectedClientRolesToRemove.length; i++) { - var selectedRole = $scope.selectedClientRolesToRemove[i]; - var index = ComponentUtils.findIndexById($scope.clientMappings, selectedRole.id); - if (index > -1) { - $scope.clientMappings.splice(index, 1); - $scope.availableClientRoles.push(selectedRole); - } - } - - $scope.selectedClientDefRoles = []; - $scope.selectedClientRolesToRemove = []; - Notifications.success("Default roles updated."); - }); - }; - - clientSelectControl($scope, $route.current.params.realm, Client); -}); - - - -module.controller('IdentityProviderTabCtrl', function(Dialog, $scope, Current, Notifications, $location) { - $scope.removeIdentityProvider = function() { - Dialog.confirmDelete($scope.identityProvider.alias, 'provider', function() { - $scope.identityProvider.$remove({ - realm : Current.realm.realm, - alias : $scope.identityProvider.alias - }, function() { - $location.url("/realms/" + Current.realm.realm + "/identity-provider-settings"); - Notifications.success("The identity provider has been deleted."); - }); - }); - }; -}); - -module.controller('RealmIdentityProviderCtrl', function($scope, $filter, $upload, $http, $route, realm, instance, providerFactory, IdentityProvider, serverInfo, authFlows, $location, Notifications, Dialog) { - $scope.realm = angular.copy(realm); - - $scope.initSamlProvider = function() { - $scope.nameIdFormats = [ - { - format: "urn:oasis:names:tc:SAML:2.0:nameid-format:persistent", - name: "Persistent" - - }, - { - format: "urn:oasis:names:tc:SAML:2.0:nameid-format:transient", - name: "Transient" - }, - { - format: "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", - name: "Email" - - }, - { - format: "urn:oasis:names:tc:SAML:2.0:nameid-format:kerberos", - name: "Kerberos" - - }, - { - format: "urn:oasis:names:tc:SAML:1.1:nameid-format:X509SubjectName", - name: "X.509 Subject Name" - - }, - { - format: "urn:oasis:names:tc:SAML:1.1:nameid-format:WindowsDomainQualifiedName", - name: "Windows Domain Qualified Name" - - }, - { - format: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", - name: "Unspecified" - - } - ]; - $scope.signatureAlgorithms = [ - "RSA_SHA1", - "RSA_SHA256", - "RSA_SHA256_MGF1", - "RSA_SHA512", - "RSA_SHA512_MGF1", - "DSA_SHA1" - ]; - $scope.xmlKeyNameTranformers = [ - "NONE", - "KEY_ID", - "CERT_SUBJECT" - ]; - $scope.principalTypes = [ - { - type: "SUBJECT", - name: "Subject NameID" - - }, - { - type: "ATTRIBUTE", - name: "Attribute [Name]" - - }, - { - type: "FRIENDLY_ATTRIBUTE", - name: "Attribute [Friendly Name]" - - } - ]; - if (instance && instance.alias) { - - } else { - $scope.identityProvider.config.nameIDPolicyFormat = $scope.nameIdFormats[0].format; - $scope.identityProvider.config.principalType = $scope.principalTypes[0].type; - $scope.identityProvider.config.signatureAlgorithm = $scope.signatureAlgorithms[1]; - $scope.identityProvider.config.xmlSigKeyInfoKeyNameTransformer = $scope.xmlKeyNameTranformers[1]; - $scope.identityProvider.config.allowCreate = 'true'; - } - $scope.identityProvider.config.entityId = $scope.identityProvider.config.entityId || (authUrl + '/realms/' + realm.realm); - } - - $scope.hidePassword = true; - $scope.fromUrl = { - data: '' - }; - - if (instance && instance.alias) { - $scope.identityProvider = angular.copy(instance); - $scope.newIdentityProvider = false; - for (var i in serverInfo.identityProviders) { - var provider = serverInfo.identityProviders[i]; - - if (provider.id == instance.providerId) { - $scope.provider = provider; - } - } - } else { - $scope.identityProvider = {}; - $scope.identityProvider.config = {}; - $scope.identityProvider.alias = providerFactory.id; - $scope.identityProvider.providerId = providerFactory.id; - - $scope.identityProvider.enabled = true; - $scope.identityProvider.authenticateByDefault = false; - $scope.identityProvider.firstBrokerLoginFlowAlias = 'first broker login'; - $scope.identityProvider.config.useJwksUrl = 'true'; - $scope.identityProvider.config.syncMode = 'IMPORT'; - $scope.newIdentityProvider = true; - } - - $scope.changed = $scope.newIdentityProvider; - - $scope.$watch('identityProvider', function() { - if (!angular.equals($scope.identityProvider, instance)) { - $scope.changed = true; - } - }, true); - - - $scope.serverInfo = serverInfo; - - $scope.allProviders = angular.copy(serverInfo.identityProviders); - - $scope.configuredProviders = angular.copy(realm.identityProviders); - - removeUsedSocial(); - - $scope.authFlows = []; - for (var i=0 ; i 0) { - $scope.importUrl = true; - } else{ - $scope.importUrl = false; - } - }); - - $scope.$watch('configuredProviders', function(configuredProviders) { - if (configuredProviders) { - $scope.configuredProviders = angular.copy(configuredProviders); - - for (var j = 0; j < configuredProviders.length; j++) { - var configProvidedId = configuredProviders[j].providerId; - - for (var i in $scope.allProviders) { - var provider = $scope.allProviders[i]; - if (provider.id == configProvidedId) { - configuredProviders[j].provider = provider; - } - } - } - $scope.configuredProviders = angular.copy(configuredProviders); - } - }, true); - - $scope.callbackUrl = authServerUrl + "/realms/" + realm.realm + "/broker/"; - - $scope.addProvider = function(provider) { - $location.url("/create/identity-provider/" + realm.realm + "/" + provider.id); - }; - - $scope.save = function() { - if ($scope.newIdentityProvider) { - if (!$scope.identityProvider.alias) { - Notifications.error("You must specify an alias"); - return; - } - IdentityProvider.save({ - realm: $scope.realm.realm, alias: '' - }, $scope.identityProvider, function () { - $location.url("/realms/" + realm.realm + "/identity-provider-settings/provider/" + $scope.identityProvider.providerId + "/" + $scope.identityProvider.alias); - Notifications.success("The " + $scope.identityProvider.alias + " provider has been created."); - }); - } else { - IdentityProvider.update({ - realm: $scope.realm.realm, - alias: $scope.identityProvider.alias - }, $scope.identityProvider, function () { - $route.reload(); - Notifications.success("The " + $scope.identityProvider.alias + " provider has been updated."); - }); - } - }; - - $scope.cancel = function() { - if ($scope.newIdentityProvider) { - $location.url("/realms/" + realm.realm + "/identity-provider-settings"); - } else { - $route.reload(); - } - }; - - - $scope.reset = function() { - $scope.identityProvider = {}; - $scope.configuredProviders = angular.copy($scope.realm.identityProviders); - }; - - $scope.showPassword = function(flag) { - $scope.hidePassword = flag; - }; - - $scope.removeIdentityProvider = function(identityProvider) { - Dialog.confirmDelete(identityProvider.alias, 'provider', function() { - IdentityProvider.remove({ - realm : realm.realm, - alias : identityProvider.alias - }, function() { - $route.reload(); - Notifications.success("The identity provider has been deleted."); - }); - }); - }; - - // KEYCLOAK-5932: remove social providers that have already been defined - function removeUsedSocial() { - var i = $scope.allProviders.length; - while (i--) { - if ($scope.allProviders[i].groupName !== 'Social') continue; - if ($scope.configuredProviders != null) { - for (var j = 0; j < $scope.configuredProviders.length; j++) { - if ($scope.configuredProviders[j].providerId === $scope.allProviders[i].id) { - $scope.allProviders.splice(i, 1); - break; - } - } - } - } - }; - - if (instance && instance.alias) { - try { $scope.authnContextClassRefs = JSON.parse($scope.identityProvider.config.authnContextClassRefs || '[]'); } catch (e) { $scope.authnContextClassRefs = []; } - try { $scope.authnContextDeclRefs = JSON.parse($scope.identityProvider.config.authnContextDeclRefs || '[]'); } catch (e) { $scope.authnContextDeclRefs = []; } - } else { - $scope.authnContextClassRefs = []; - $scope.authnContextDeclRefs = []; - } - - $scope.deleteAuthnContextClassRef = function(index) { - $scope.authnContextClassRefs.splice(index, 1); - $scope.identityProvider.config.authnContextClassRefs = JSON.stringify($scope.authnContextClassRefs); - }; - - $scope.addAuthnContextClassRef = function() { - $scope.authnContextClassRefs.push($scope.newAuthnContextClassRef); - $scope.identityProvider.config.authnContextClassRefs = JSON.stringify($scope.authnContextClassRefs); - $scope.newAuthnContextClassRef = ""; - }; - - $scope.deleteAuthnContextDeclRef = function(index) { - $scope.authnContextDeclRefs.splice(index, 1); - $scope.identityProvider.config.authnContextDeclRefs = JSON.stringify($scope.authnContextDeclRefs); - }; - - $scope.addAuthnContextDeclRef = function() { - $scope.authnContextDeclRefs.push($scope.newAuthnContextDeclRef); - $scope.identityProvider.config.authnContextDeclRefs = JSON.stringify($scope.authnContextDeclRefs); - $scope.newAuthnContextDeclRef = ""; - }; -}); - -module.controller('RealmTokenDetailCtrl', function($scope, Realm, realm, $http, $location, $route, Dialog, Notifications, TimeUnit, TimeUnit2, serverInfo) { - $scope.realm = realm; - $scope.serverInfo = serverInfo; - $scope.actionTokenProviders = $scope.serverInfo.providers.actionTokenHandler.providers; - - $scope.realm.accessTokenLifespan = TimeUnit2.asUnit(realm.accessTokenLifespan); - $scope.realm.accessTokenLifespanForImplicitFlow = TimeUnit2.asUnit(realm.accessTokenLifespanForImplicitFlow); - $scope.realm.ssoSessionIdleTimeout = TimeUnit2.asUnit(realm.ssoSessionIdleTimeout); - $scope.realm.ssoSessionMaxLifespan = TimeUnit2.asUnit(realm.ssoSessionMaxLifespan); - $scope.realm.ssoSessionIdleTimeoutRememberMe = TimeUnit2.asUnit(realm.ssoSessionIdleTimeoutRememberMe); - $scope.realm.ssoSessionMaxLifespanRememberMe = TimeUnit2.asUnit(realm.ssoSessionMaxLifespanRememberMe); - $scope.realm.offlineSessionIdleTimeout = TimeUnit2.asUnit(realm.offlineSessionIdleTimeout); - // KEYCLOAK-7688 Offline Session Max for Offline Token - $scope.realm.offlineSessionMaxLifespan = TimeUnit2.asUnit(realm.offlineSessionMaxLifespan); - $scope.realm.clientSessionIdleTimeout = TimeUnit2.asUnit(realm.clientSessionIdleTimeout); - $scope.realm.clientSessionMaxLifespan = TimeUnit2.asUnit(realm.clientSessionMaxLifespan); - $scope.realm.clientOfflineSessionIdleTimeout = TimeUnit2.asUnit(realm.clientOfflineSessionIdleTimeout); - $scope.realm.clientOfflineSessionMaxLifespan = TimeUnit2.asUnit(realm.clientOfflineSessionMaxLifespan); - $scope.realm.accessCodeLifespan = TimeUnit2.asUnit(realm.accessCodeLifespan); - $scope.realm.accessCodeLifespanLogin = TimeUnit2.asUnit(realm.accessCodeLifespanLogin); - $scope.realm.accessCodeLifespanUserAction = TimeUnit2.asUnit(realm.accessCodeLifespanUserAction); - $scope.realm.actionTokenGeneratedByAdminLifespan = TimeUnit2.asUnit(realm.actionTokenGeneratedByAdminLifespan); - $scope.realm.actionTokenGeneratedByUserLifespan = TimeUnit2.asUnit(realm.actionTokenGeneratedByUserLifespan); - $scope.realm.oauth2DeviceCodeLifespan = TimeUnit2.asUnit(realm.oauth2DeviceCodeLifespan); - $scope.realm.attributes = realm.attributes - - var oldCopy = angular.copy($scope.realm); - $scope.changed = false; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.$watch('actionLifespanId', function () { - // changedActionLifespanId signals other watchers that we were merely - // changing the dropdown and we should not enable 'save' button - if ($scope.actionTokenAttribute && $scope.actionTokenAttribute.hasOwnProperty('time')) { - $scope.changedActionLifespanId = true; - } - - $scope.actionTokenAttribute = TimeUnit2.asUnit($scope.realm.attributes['actionTokenGeneratedByUserLifespan.' + $scope.actionLifespanId]); - }, true); - - $scope.$watch('actionTokenAttribute', function () { - if ($scope.actionLifespanId === null) return; - - if ($scope.changedActionLifespanId) { - $scope.changedActionLifespanId = false; - return; - } else { - $scope.changed = true; - } - - if ($scope.actionTokenAttribute !== null) { - $scope.realm.attributes['actionTokenGeneratedByUserLifespan.' + $scope.actionLifespanId] = $scope.actionTokenAttribute.toSeconds(); - } - }, true); - - $scope.changeRevokeRefreshToken = function() { - - }; - - $scope.save = function() { - $scope.realm.accessTokenLifespan = $scope.realm.accessTokenLifespan.toSeconds(); - $scope.realm.accessTokenLifespanForImplicitFlow = $scope.realm.accessTokenLifespanForImplicitFlow.toSeconds(); - $scope.realm.ssoSessionIdleTimeout = $scope.realm.ssoSessionIdleTimeout.toSeconds(); - $scope.realm.ssoSessionMaxLifespan = $scope.realm.ssoSessionMaxLifespan.toSeconds(); - $scope.realm.ssoSessionIdleTimeoutRememberMe = $scope.realm.ssoSessionIdleTimeoutRememberMe.toSeconds(); - $scope.realm.ssoSessionMaxLifespanRememberMe = $scope.realm.ssoSessionMaxLifespanRememberMe.toSeconds(); - $scope.realm.offlineSessionIdleTimeout = $scope.realm.offlineSessionIdleTimeout.toSeconds(); - // KEYCLOAK-7688 Offline Session Max for Offline Token - $scope.realm.offlineSessionMaxLifespan = $scope.realm.offlineSessionMaxLifespan.toSeconds(); - $scope.realm.clientSessionIdleTimeout = $scope.realm.clientSessionIdleTimeout.toSeconds(); - $scope.realm.clientSessionMaxLifespan = $scope.realm.clientSessionMaxLifespan.toSeconds(); - $scope.realm.clientOfflineSessionIdleTimeout = $scope.realm.clientOfflineSessionIdleTimeout.toSeconds(); - $scope.realm.clientOfflineSessionMaxLifespan = $scope.realm.clientOfflineSessionMaxLifespan.toSeconds(); - $scope.realm.accessCodeLifespan = $scope.realm.accessCodeLifespan.toSeconds(); - $scope.realm.accessCodeLifespanUserAction = $scope.realm.accessCodeLifespanUserAction.toSeconds(); - $scope.realm.accessCodeLifespanLogin = $scope.realm.accessCodeLifespanLogin.toSeconds(); - $scope.realm.actionTokenGeneratedByAdminLifespan = $scope.realm.actionTokenGeneratedByAdminLifespan.toSeconds(); - $scope.realm.actionTokenGeneratedByUserLifespan = $scope.realm.actionTokenGeneratedByUserLifespan.toSeconds(); - $scope.realm.oauth2DeviceCodeLifespan = $scope.realm.oauth2DeviceCodeLifespan.toSeconds(); - - Realm.update($scope.realm, function () { - $route.reload(); - Notifications.success("The changes have been saved to the realm."); - }); - }; - - $scope.resetToDefaultToken = function (actionTokenId) { - $scope.actionTokenAttribute = {}; - delete $scope.realm.attributes['actionTokenGeneratedByUserLifespan.' + $scope.actionLifespanId]; - //Only for UI effects, resets to the original state - $scope.actionTokenAttribute.unit = 'Minutes'; - } - - $scope.reset = function() { - $route.reload(); - }; -}); - -module.controller('RealmUserProfileCtrl', function($scope, Realm, realm, $http, $location, $route, UserProfile, Dialog, Notifications, serverInfo) { - $scope.realm = realm; - $scope.validatorProviders = serverInfo.componentTypes['org.keycloak.validate.Validator']; - - $scope.isShowAttributes = true; - - UserProfile.get({realm: realm.realm}, function(config) { - $scope.config = config; - $scope.rawConfig = angular.toJson(config, true); - }); - - $scope.isShowAttributes = true; - - $scope.showAttributes = function() { - $route.reload(); - } - - $scope.showJsonEditor = function() { - $scope.isShowAttributes = false; - } - - $scope.canViewPermission = { - minimumInputLength: 0, - delay: 500, - allowClear: true, - query: function (query) { - query.callback({results: ['user', 'admin']}); - }, - formatResult: function(object, container, query) { - return object; - }, - formatSelection: function(object, container, query) { - return object; - } - }; - - $scope.canEditPermission = { - minimumInputLength: 0, - delay: 500, - allowClear: true, - query: function (query) { - query.callback({results: ['user', 'admin']}); - }, - formatResult: function(object, container, query) { - return object; - }, - formatSelection: function(object, container, query) { - return object; - } - }; - - $scope.attributeSelected = false; - - $scope.showListing = function() { - return !$scope.attributeSelected && $scope.currentAttribute == null && $scope.isShowAttributes; - } - - $scope.create = function() { - $scope.isCreate = true; - $scope.currentAttribute = { - permissions: { - view: [], - edit: [] - } - }; - }; - - $scope.removeAttribute = function(attribute) { - Dialog.confirmDelete(attribute.name, 'attribute', function() { - let newAttributes = []; - - for (var v of $scope.config.attributes) { - if (v != attribute) { - newAttributes.push(v); - } - } - - $scope.config.attributes = newAttributes; - $scope.save(); - }); - }; - - $scope.addAnnotation = function() { - if (!$scope.currentAttribute.annotations) { - $scope.currentAttribute.annotations = {}; - } - $scope.currentAttribute.annotations[$scope.newAnnotation.key] = $scope.newAnnotation.value; - delete $scope.newAnnotation; - } - - $scope.removeAnnotation = function(key) { - delete $scope.currentAttribute.annotations[key]; - } - - $scope.edit = function(attribute) { - if (attribute.permissions == null) { - attribute.permissions = { - view: [], - edit: [] - }; - } - - $scope.isRequired = attribute.required != null; - $scope.canUserView = attribute.permissions.view.includes('user'); - $scope.canAdminView = attribute.permissions.view.includes('admin'); - $scope.canUserEdit = attribute.permissions.edit.includes('user'); - $scope.canAdminEdit = attribute.permissions.edit.includes('admin'); - $scope.currentAttribute = attribute; - $scope.attributeSelected = true; - }; - - $scope.$watch('isRequired', function() { - if ($scope.isRequired) { - $scope.currentAttribute.required = {}; - } else { - delete $scope.currentAttribute.required; - } - }, true); - - handlePermission = function(permission, role, allowed) { - let attribute = $scope.currentAttribute; - let roles = []; - - for (let r of attribute.permissions[permission]) { - if (r != role) { - roles.push(r); - } - } - - if (allowed) { - roles.push(role); - } - - attribute.permissions[permission] = roles; - } - - $scope.$watch('canUserView', function() { - handlePermission('view', 'user', $scope.canUserView); - }, true); - - $scope.$watch('canAdminView', function() { - handlePermission('view', 'admin', $scope.canAdminView); - }, true); - - $scope.$watch('canUserEdit', function() { - handlePermission('edit', 'user', $scope.canUserEdit); - }, true); - - $scope.$watch('canAdminEdit', function() { - handlePermission('edit', 'admin', $scope.canAdminEdit); - }, true); - - $scope.addValidator = function(validator) { - if ($scope.currentAttribute.validations == null) { - $scope.currentAttribute.validations = {}; - } - - let config = {}; - - for (let key in validator.config) { - let values = validator.config[key]; - - for (let k in values) { - config[key] = values[k]; - } - } - - $scope.currentAttribute.validations[validator.id] = config; - - delete $scope.newValidator; - }; - - $scope.selectValidator = function(validator) { - validator.config = {}; - }; - - $scope.cancelAddValidator = function() { - delete $scope.newValidator; - }; - - $scope.removeValidator = function(id) { - let newValidators = {}; - - for (let v in $scope.currentAttribute.validations) { - if (v != id) { - newValidators[v] = $scope.currentAttribute.validations[v]; - } - } - - if (newValidators.length == 0) { - delete $scope.currentAttribute.validations; - return; - } - - $scope.currentAttribute.validations = newValidators; - }; - - $scope.save = function() { - if (!$scope.isShowAttributes) { - $scope.config = JSON.parse($scope.rawConfig); - } - - if ($scope.isCreate && $scope.currentAttribute) { - $scope.config['attributes'].push($scope.currentAttribute); - } - - UserProfile.update({realm: realm.realm}, - $scope.config, function () { - $scope.attributeSelected = false; - delete $scope.currentAttribute; - delete $scope.isCreate; - delete $scope.isRequired; - delete $scope.canUserView; - delete $scope.canAdminView; - delete $scope.canUserEdit; - delete $scope.canAdminEdit; - $route.reload(); - Notifications.success("The attribute has been added."); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; -}); - -module.controller('ViewKeyCtrl', function($scope, key) { - $scope.key = key; -}); - -module.controller('RealmKeysCtrl', function($scope, Realm, realm, $http, $route, $location, Dialog, Notifications, serverInfo, keys, Components, $modal) { - $scope.realm = angular.copy(realm); - $scope.keys = keys.keys; - $scope.active = {}; - - Components.query({realm: realm.realm, - parent: realm.id, - type: 'org.keycloak.keys.KeyProvider' - }, function(data) { - for (var i = 0; i < keys.keys.length; i++) { - for (var j = 0; j < data.length; j++) { - if (keys.keys[i].providerId == data[j].id) { - keys.keys[i].provider = data[j]; - } - } - } - - for (var t in keys.active) { - for (var i = 0; i < keys.keys.length; i++) { - if (keys.active[t] == keys.keys[i].kid) { - $scope.active[t] = keys.keys[i]; - } - } - } - }); - - $scope.viewKey = function(key) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-key.html', - controller: 'ViewKeyCtrl', - resolve: { - key: function () { - return key; - } - } - }) - } -}); - -module.controller('RealmKeysProvidersCtrl', function($scope, Realm, realm, $http, $route, $location, Dialog, Notifications, serverInfo, Components, $modal) { - $scope.realm = angular.copy(realm); - $scope.enableUpload = false; - - $scope.providers = serverInfo.componentTypes['org.keycloak.keys.KeyProvider']; - - Components.query({realm: realm.realm, - parent: realm.id, - type: 'org.keycloak.keys.KeyProvider' - }, function(data) { - $scope.instances = data; - - for (var i = 0; i < $scope.instances.length; i++) { - for (var j = 0; j < $scope.providers.length; j++) { - if ($scope.providers[j].id === $scope.instances[i].providerId) { - $scope.instances[i].provider = $scope.providers[j]; - } - } - } - }); - - $scope.addProvider = function(provider) { - $location.url("/create/keys/" + realm.realm + "/providers/" + provider.id); - }; - - $scope.removeInstance = function(instance) { - Dialog.confirmDelete(instance.name, 'key provider', function() { - Components.remove({ - realm : realm.realm, - componentId : instance.id - }, function() { - $route.reload(); - Notifications.success("The provider has been deleted."); - }); - }); - }; -}); - -module.controller('GenericKeystoreCtrl', function($scope, $location, Notifications, $route, Dialog, realm, serverInfo, instance, providerId, Components) { - $scope.create = !instance.providerId; - $scope.realm = realm; - - var providers = serverInfo.componentTypes['org.keycloak.keys.KeyProvider']; - var providerFactory = null; - for (var i = 0; i < providers.length; i++) { - var p = providers[i]; - if (p.id == providerId) { - $scope.providerFactory = p; - providerFactory = p; - break; - } - } - - if ($scope.create) { - $scope.instance = { - name: providerFactory.id, - providerId: providerFactory.id, - providerType: 'org.keycloak.keys.KeyProvider', - parentId: realm.id, - config: { - 'priority': ["0"] - } - } - } else { - $scope.instance = angular.copy(instance); - } - - if (providerFactory.properties) { - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (!$scope.instance.config[configProperty.name]) { - if (configProperty.defaultValue) { - $scope.instance.config[configProperty.name] = [configProperty.defaultValue]; - if (!$scope.create) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } - } else { - $scope.instance.config[configProperty.name] = ['']; - if (!$scope.create) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } - } - } - } - } - - $scope.$watch('instance', function() { - if (!angular.equals($scope.instance, instance)) { - $scope.changed = true; - } - - }, true); - - $scope.save = function() { - $scope.changed = false; - if ($scope.create) { - Components.save({realm: realm.realm}, $scope.instance, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/keys/providers/" + $scope.instance.providerId + "/" + id); - Notifications.success("The provider has been created."); - }); - } else { - Components.update({realm: realm.realm, - componentId: instance.id - }, - $scope.instance, function () { - $route.reload(); - Notifications.success("The provider has been updated."); - }); - } - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - if ($scope.create) { - $location.url("/realms/" + realm.realm + "/keys"); - } else { - $route.reload(); - } - }; -}); - -module.controller('RealmSessionStatsCtrl', function($scope, realm, stats, RealmClientSessionStats, RealmLogoutAll, Notifications) { - $scope.realm = realm; - $scope.stats = stats; - - $scope.logoutAll = function() { - RealmLogoutAll.save({realm : realm.realm}, function (globalReqResult) { - var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0; - var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0; - - if (failedCount > 0) { - var msgStart = successCount>0 ? 'Successfully logout all users under: ' + globalReqResult.successRequests + ' . ' : ''; - Notifications.error(msgStart + 'Failed to logout users under: ' + globalReqResult.failedRequests + '. Verify availability of failed hosts and try again'); - } else { - window.location.reload(); - } - }); - }; -}); - - -module.controller('RealmRevocationCtrl', function($scope, Realm, RealmPushRevocation, realm, $http, $location, Dialog, Notifications) { - $scope.realm = angular.copy(realm); - - var setNotBefore = function() { - if ($scope.realm.notBefore == 0) { - $scope.notBefore = "None"; - } else { - $scope.notBefore = new Date($scope.realm.notBefore * 1000); - } - }; - - setNotBefore(); - - var reset = function() { - Realm.get({ id : realm.realm }, function(updated) { - $scope.realm = updated; - setNotBefore(); - }) - - }; - - $scope.clear = function() { - Realm.update({ realm: realm.realm, notBefore : 0 }, function () { - $scope.notBefore = "None"; - Notifications.success('Not Before cleared for realm.'); - reset(); - }); - } - $scope.setNotBeforeNow = function() { - Realm.update({ realm: realm.realm, notBefore : new Date().getTime()/1000}, function () { - Notifications.success('Not Before set for realm.'); - reset(); - }); - } - $scope.pushRevocation = function() { - RealmPushRevocation.save({ realm: realm.realm}, function (globalReqResult) { - var successCount = globalReqResult.successRequests ? globalReqResult.successRequests.length : 0; - var failedCount = globalReqResult.failedRequests ? globalReqResult.failedRequests.length : 0; - - if (successCount==0 && failedCount==0) { - Notifications.warn('No push sent. No admin URI configured or no registered cluster nodes available'); - } else if (failedCount > 0) { - var msgStart = successCount>0 ? 'Successfully push notBefore to: ' + globalReqResult.successRequests + ' . ' : ''; - Notifications.error(msgStart + 'Failed to push notBefore to: ' + globalReqResult.failedRequests + '. Verify availability of failed hosts and try again'); - } else { - Notifications.success('Successfully push notBefore to all configured clients'); - } - }); - } - -}); - - -module.controller('RoleTabCtrl', function(Dialog, $scope, Current, Notifications, $location) { - $scope.removeRole = function() { - Dialog.confirmDelete($scope.role.name, 'role', function() { - RoleById.remove({ - realm: realm.realm, - role: $scope.role.id - }, function () { - $route.reload(); - Notifications.success("The role has been deleted."); - }); - }); - }; -}); - - -module.controller('RoleListCtrl', function($scope, $route, Dialog, Notifications, realm, RoleList, RoleById, filterFilter) { - $scope.realm = realm; - $scope.roles = []; - $scope.defaultRoleName = realm.defaultRole.name; - - $scope.query = { - realm: realm.realm, - search : null, - max : 20, - first : 0 - } - - $scope.$watch('query.search', function (newVal, oldVal) { - if($scope.query.search && $scope.query.search.length >= 3) { - $scope.firstPage(); - } - }, true); - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - $scope.searchLoaded = false; - - $scope.roles = RoleList.query($scope.query, function() { - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - }); - }; - - $scope.searchQuery(); - - $scope.determineEditLink = function(role) { - return role.name === $scope.defaultRoleName ? "/realms/" + $scope.realm.realm + "/default-roles" : "/realms/" + $scope.realm.realm + "/roles/" + role.id; - } - - $scope.removeRole = function (role) { - if (role.name === $scope.defaultRoleName) return; - - Dialog.confirmDelete(role.name, 'role', function () { - RoleById.remove({ - realm: realm.realm, - role: role.id - }, function () { - $route.reload(); - Notifications.success("The role has been deleted."); - }); - }); - }; -}); - - -module.controller('RoleDetailCtrl', function($scope, realm, role, roles, Client, $route, - Role, ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, - $http, $location, Dialog, Notifications, RealmRoleRemover, ComponentUtils) { - $scope.realm = realm; - $scope.role = angular.copy(role); - $scope.create = !role.name; - - $scope.changed = $scope.create; - - $scope.save = function() { - convertAttributeValuesToLists(); - console.log('save'); - if ($scope.create) { - Role.save({ - realm: realm.realm - }, $scope.role, function (data, headers) { - $scope.changed = false; - convertAttributeValuesToString($scope.role); - role = angular.copy($scope.role); - - Role.get({ realm: realm.realm, role: role.name }, function(role) { - var id = role.id; - $location.url("/realms/" + realm.realm + "/roles/" + id); - Notifications.success("The role has been created."); - }); - }); - } else { - $scope.update(); - } - }; - - $scope.remove = function() { - RealmRoleRemover.remove($scope.role, realm, Dialog, $location, Notifications); - }; - - $scope.cancel = function () { - $location.url("/realms/" + realm.realm + "/roles"); - }; - - $scope.addAttribute = function() { - $scope.role.attributes[$scope.newAttribute.key] = $scope.newAttribute.value; - delete $scope.newAttribute; - } - - $scope.removeAttribute = function(key) { - delete $scope.role.attributes[key]; - } - - function convertAttributeValuesToLists() { - var attrs = $scope.role.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "string") { - var attrVals = attrs[attribute].split("##"); - attrs[attribute] = attrVals; - } - } - } - - function convertAttributeValuesToString(role) { - var attrs = role.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "object") { - var attrVals = attrs[attribute].join("##"); - attrs[attribute] = attrVals; - console.log("attribute" + attrVals) - } - } - } - - roleControl($scope, $route, realm, role, roles, Client, - ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, - $http, $location, Notifications, Dialog, ComponentUtils); -}); - -module.controller('RealmSMTPSettingsCtrl', function($scope, Current, Realm, realm, $http, $location, Dialog, Notifications, RealmSMTPConnectionTester) { - console.log('RealmSMTPSettingsCtrl'); - - var booleanSmtpAtts = ["auth","ssl","starttls"]; - - $scope.realm = realm; - - if ($scope.realm.smtpServer) { - $scope.realm.smtpServer = typeObject($scope.realm.smtpServer); - }; - - var oldCopy = angular.copy($scope.realm); - $scope.changed = false; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - var realmCopy = angular.copy($scope.realm); - realmCopy['smtpServer'] = detypeObject(realmCopy.smtpServer); - $scope.changed = false; - Realm.update(realmCopy, function () { - $location.url("/realms/" + realm.realm + "/smtp-settings"); - Notifications.success("Your changes have been saved to the realm."); - }); - }; - - $scope.reset = function() { - $scope.realm = angular.copy(oldCopy); - $scope.changed = false; - }; - - $scope.testConnection = function() { - RealmSMTPConnectionTester.save({realm: realm.realm}, realm.smtpServer, function() { - Notifications.success("SMTP connection successful. E-mail was sent!"); - }, function(errorResponse) { - if (error.data.errorMessage) { - Notifications.error(error.data.errorMessage); - } else { - Notifications.error('Unexpected error during SMTP validation'); - } - }); - }; - - /* Convert string attributes containing a boolean to actual boolean type + convert an integer string (port) to integer. */ - function typeObject(obj){ - for (var att in obj){ - if (booleanSmtpAtts.indexOf(att) < 0) - continue; - if (obj[att] === "true"){ - obj[att] = true; - } else if (obj[att] === "false"){ - obj[att] = false; - } - } - - obj['port'] = parseInt(obj['port']); - - return obj; - } - - /* Convert all non-string values to strings to invert changes caused by the typeObject function. */ - function detypeObject(obj){ - for (var att in obj){ - if (booleanSmtpAtts.indexOf(att) < 0) - continue; - if (obj[att] === true){ - obj[att] = "true"; - } else if (obj[att] === false){ - obj[att] = "false" - } - } - - obj['port'] = obj['port'] && obj['port'].toString(); - - return obj; - } -}); - -module.controller('RealmEventsConfigCtrl', function($scope, eventsConfig, RealmEventsConfig, RealmEvents, RealmAdminEvents, realm, serverInfo, $location, Notifications, TimeUnit, Dialog) { - $scope.realm = realm; - - $scope.eventsConfig = eventsConfig; - - $scope.eventsConfig.expirationUnit = TimeUnit.autoUnit(eventsConfig.eventsExpiration); - $scope.eventsConfig.eventsExpiration = TimeUnit.toUnit(eventsConfig.eventsExpiration, $scope.eventsConfig.expirationUnit); - - $scope.eventListeners = Object.keys(serverInfo.providers.eventsListener.providers); - - $scope.eventsConfigSelectOptions = { - 'multiple': true, - 'simple_tags': true, - 'tags': $scope.eventListeners - }; - - $scope.eventSelectOptions = { - 'multiple': true, - 'simple_tags': true, - 'tags': serverInfo.enums['eventType'] - }; - - var oldCopy = angular.copy($scope.eventsConfig); - $scope.changed = false; - - $scope.$watch('eventsConfig', function() { - if (!angular.equals($scope.eventsConfig, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - $scope.changed = false; - - var copy = angular.copy($scope.eventsConfig) - delete copy['expirationUnit']; - - copy.eventsExpiration = TimeUnit.toSeconds($scope.eventsConfig.eventsExpiration, $scope.eventsConfig.expirationUnit); - - RealmEventsConfig.update({ - id : realm.realm - }, copy, function () { - $location.url("/realms/" + realm.realm + "/events-settings"); - Notifications.success("Your changes have been saved to the realm."); - }); - }; - - $scope.reset = function() { - $scope.eventsConfig = angular.copy(oldCopy); - $scope.changed = false; - }; - - $scope.clearEvents = function() { - Dialog.confirmDelete($scope.realm.realm, 'events', function() { - RealmEvents.remove({ id : $scope.realm.realm }, function() { - Notifications.success("The events has been cleared."); - }); - }); - }; - - $scope.clearAdminEvents = function() { - Dialog.confirmDelete($scope.realm.realm, 'admin-events', function() { - RealmAdminEvents.remove({ id : $scope.realm.realm }, function() { - Notifications.success("The admin events has been cleared."); - }); - }); - }; -}); - -module.controller('RealmEventsCtrl', function($scope, RealmEvents, realm, serverInfo) { - $scope.realm = realm; - $scope.page = 0; - - $scope.eventSelectOptions = { - 'multiple': true, - 'simple_tags': true, - 'tags': serverInfo.enums['eventType'] - }; - - $scope.query = { - id : realm.realm, - max : 5, - first : 0 - } - - $scope.disablePaste = function(e) { - e.preventDefault(); - return false; - } - - $scope.update = function() { - $scope.query.first = 0; - for (var i in $scope.query) { - if ($scope.query[i] === '') { - delete $scope.query[i]; - } - } - $scope.events = RealmEvents.query($scope.query); - } - - $scope.reset = function() { - $scope.query.first = 0; - $scope.query.max = 5; - $scope.query.type = ''; - $scope.query.client = ''; - $scope.query.user = ''; - $scope.query.dateFrom = ''; - $scope.query.dateTo = ''; - - $scope.update(); - } - - $scope.queryUpdate = function() { - for (var i in $scope.query) { - if ($scope.query[i] === '') { - delete $scope.query[i]; - } - } - $scope.events = RealmEvents.query($scope.query); - } - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.queryUpdate(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.queryUpdate(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.queryUpdate(); - } - - $scope.update(); -}); - -module.controller('RealmAdminEventsCtrl', function($scope, RealmAdminEvents, realm, serverInfo, $modal, $filter) { - $scope.realm = realm; - $scope.page = 0; - - $scope.query = { - id : realm.realm, - max : 5, - first : 0 - }; - - $scope.adminEnabledEventOperationsOptions = { - 'multiple': true, - 'simple_tags': true, - 'tags': serverInfo.enums['operationType'] - }; - - $scope.adminEnabledEventResourceTypesOptions = { - 'multiple': true, - 'simple_tags': true, - 'tags': serverInfo.enums['resourceType'] - }; - - $scope.disablePaste = function(e) { - e.preventDefault(); - return false; - } - - $scope.update = function() { - $scope.query.first = 0; - for (var i in $scope.query) { - if ($scope.query[i] === '') { - delete $scope.query[i]; - } - } - $scope.events = RealmAdminEvents.query($scope.query); - }; - - $scope.reset = function() { - $scope.query.first = 0; - $scope.query.max = 5; - $scope.query.operationTypes = ''; - $scope.query.resourceTypes = ''; - $scope.query.resourcePath = ''; - $scope.query.authRealm = ''; - $scope.query.authClient = ''; - $scope.query.authUser = ''; - $scope.query.authIpAddress = ''; - $scope.query.dateFrom = ''; - $scope.query.dateTo = ''; - - $scope.update(); - }; - - $scope.queryUpdate = function() { - for (var i in $scope.query) { - if ($scope.query[i] === '') { - delete $scope.query[i]; - } - } - $scope.events = RealmAdminEvents.query($scope.query); - } - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.queryUpdate(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.queryUpdate(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.queryUpdate(); - } - - $scope.update(); - - $scope.viewRepresentation = function(event) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/realm-events-admin-representation.html', - controller: 'RealmAdminEventsModalCtrl', - resolve: { - event: function () { - return event; - } - } - }) - } - - $scope.viewAuth = function(event) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/realm-events-admin-auth.html', - controller: 'RealmAdminEventsModalCtrl', - resolve: { - event: function () { - return event; - } - } - }) - } -}); - -module.controller('RealmAdminEventsModalCtrl', function($scope, $filter, event) { - $scope.event = event; -}); - -module.controller('RealmBruteForceCtrl', function($scope, Realm, realm, $http, $location, Dialog, Notifications, TimeUnit, $route) { - console.log('RealmBruteForceCtrl'); - - $scope.realm = realm; - - $scope.realm.waitIncrementUnit = TimeUnit.autoUnit(realm.waitIncrementSeconds); - $scope.realm.waitIncrement = TimeUnit.toUnit(realm.waitIncrementSeconds, $scope.realm.waitIncrementUnit); - - $scope.realm.minimumQuickLoginWaitUnit = TimeUnit.autoUnit(realm.minimumQuickLoginWaitSeconds); - $scope.realm.minimumQuickLoginWait = TimeUnit.toUnit(realm.minimumQuickLoginWaitSeconds, $scope.realm.minimumQuickLoginWaitUnit); - - $scope.realm.maxFailureWaitUnit = TimeUnit.autoUnit(realm.maxFailureWaitSeconds); - $scope.realm.maxFailureWait = TimeUnit.toUnit(realm.maxFailureWaitSeconds, $scope.realm.maxFailureWaitUnit); - - $scope.realm.maxDeltaTimeUnit = TimeUnit.autoUnit(realm.maxDeltaTimeSeconds); - $scope.realm.maxDeltaTime = TimeUnit.toUnit(realm.maxDeltaTimeSeconds, $scope.realm.maxDeltaTimeUnit); - - var oldCopy = angular.copy($scope.realm); - $scope.changed = false; - - $scope.$watch('realm', function() { - if (!angular.equals($scope.realm, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - var realmCopy = angular.copy($scope.realm); - delete realmCopy["waitIncrementUnit"]; - delete realmCopy["waitIncrement"]; - delete realmCopy["minimumQuickLoginWaitUnit"]; - delete realmCopy["minimumQuickLoginWait"]; - delete realmCopy["maxFailureWaitUnit"]; - delete realmCopy["maxFailureWait"]; - delete realmCopy["maxDeltaTimeUnit"]; - delete realmCopy["maxDeltaTime"]; - - realmCopy.waitIncrementSeconds = TimeUnit.toSeconds($scope.realm.waitIncrement, $scope.realm.waitIncrementUnit) - realmCopy.minimumQuickLoginWaitSeconds = TimeUnit.toSeconds($scope.realm.minimumQuickLoginWait, $scope.realm.minimumQuickLoginWaitUnit) - realmCopy.maxFailureWaitSeconds = TimeUnit.toSeconds($scope.realm.maxFailureWait, $scope.realm.maxFailureWaitUnit) - realmCopy.maxDeltaTimeSeconds = TimeUnit.toSeconds($scope.realm.maxDeltaTime, $scope.realm.maxDeltaTimeUnit) - - $scope.changed = false; - Realm.update(realmCopy, function () { - oldCopy = angular.copy($scope.realm); - $location.url("/realms/" + realm.realm + "/defense/brute-force"); - Notifications.success("Your changes have been saved to the realm."); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; -}); - - -module.controller('IdentityProviderMapperListCtrl', function($scope, realm, identityProvider, mapperTypes, mappers) { - $scope.realm = realm; - $scope.identityProvider = identityProvider; - $scope.mapperTypes = mapperTypes; - $scope.mappers = mappers; -}); - -module.controller('IdentityProviderMapperCtrl', function ($scope, realm, identityProvider, mapperTypes, mapper, IdentityProviderMapper, Notifications, Dialog, ComponentUtils, $location) { - $scope.realm = realm; - $scope.identityProvider = identityProvider; - $scope.create = false; - $scope.changed = false; - $scope.mapperType = mapperTypes[mapper.identityProviderMapper]; - - ComponentUtils.convertAllMultivaluedStringValuesToList($scope.mapperType.properties, mapper.config); - ComponentUtils.addLastEmptyValueToMultivaluedLists($scope.mapperType.properties, mapper.config); - - $scope.mapper = angular.copy(mapper); - - $scope.$watch(function () { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch('mapper', function() { - if (!angular.equals($scope.mapper, mapper)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - let mapperCopy = angular.copy($scope.mapper); - ComponentUtils.convertAllListValuesToMultivaluedString($scope.mapperType.properties, mapperCopy.config); - - IdentityProviderMapper.update({ - realm : realm.realm, - alias : identityProvider.alias, - mapperId : mapper.id - }, mapperCopy, function () { - $scope.changed = false; - ComponentUtils.addLastEmptyValueToMultivaluedLists($scope.mapperType.properties, $scope.mapper.config); - mapper = angular.copy($scope.mapper); - $location.url("/realms/" + realm.realm + '/identity-provider-mappers/' + identityProvider.alias + "/mappers/" + mapper.id); - Notifications.success("Your changes have been saved."); - }); - }; - - $scope.reset = function() { - $scope.mapper = angular.copy(mapper); - $scope.changed = false; - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.mapper.name, 'mapper', function() { - IdentityProviderMapper.remove({ realm: realm.realm, alias: mapper.identityProviderAlias, mapperId : $scope.mapper.id }, function() { - Notifications.success("The mapper has been deleted."); - $location.url("/realms/" + realm.realm + '/identity-provider-mappers/' + identityProvider.alias + "/mappers"); - }); - }); - }; - -}); - -module.controller('IdentityProviderMapperCreateCtrl', function ($scope, realm, identityProvider, mapperTypes, IdentityProviderMapper, Notifications, Dialog, ComponentUtils, $location) { - $scope.realm = realm; - $scope.identityProvider = identityProvider; - $scope.create = true; - $scope.mapper = { identityProviderAlias: identityProvider.alias, config: {}}; - $scope.mapperTypes = mapperTypes; - - // make first type the default - $scope.mapperType = mapperTypes[Object.keys(mapperTypes)[0]]; - $scope.mapper.config.syncMode = 'INHERIT'; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.save = function () { - $scope.mapper.identityProviderMapper = $scope.mapperType.id; - let copyMapper = angular.copy($scope.mapper); - ComponentUtils.convertAllListValuesToMultivaluedString($scope.mapperType.properties, copyMapper.config); - - IdentityProviderMapper.save({ - realm : realm.realm, - alias : identityProvider.alias - }, copyMapper, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + '/identity-provider-mappers/' + identityProvider.alias + "/mappers/" + id); - Notifications.success("Mapper has been created."); - }); - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - -}); - -module.controller('RealmFlowBindingCtrl', function($scope, flows, Current, Realm, realm, serverInfo, $http, $route, Dialog, Notifications) { - $scope.flows = []; - $scope.clientFlows = []; - for (var i=0 ; i 0) { - $scope.provider = formProviders[0]; - } - - $scope.save = function() { - $scope.flow.provider = $scope.provider.id; - CreateExecutionFlow.save({realm: realm.realm, alias: parentFlow.alias}, $scope.flow, function() { - $location.url("/realms/" + realm.realm + "/authentication/flows"); - Notifications.success("Flow Created."); - }) - } - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/authentication/flows"); - }; -}); - -module.controller('CreateExecutionCtrl', function($scope, realm, parentFlow, formActionProviders, authenticatorProviders, clientAuthenticatorProviders, - CreateExecution, - Notifications, $location) { - $scope.realm = realm; - $scope.parentFlow = parentFlow; - - if (parentFlow.providerId == 'form-flow') { - $scope.providers = formActionProviders; - } else if (parentFlow.providerId == 'client-flow') { - $scope.providers = clientAuthenticatorProviders; - } else { - $scope.providers = authenticatorProviders; - } - - $scope.provider = {}; - if ($scope.providers.length > 0) { - $scope.provider = $scope.providers[0]; - } - - $scope.save = function() { - var execution = { - provider: $scope.provider.id - } - CreateExecution.save({realm: realm.realm, alias: parentFlow.alias}, execution, function() { - $location.url("/realms/" + realm.realm + "/authentication/flows"); - Notifications.success("Execution Created."); - }) - } - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/authentication/flows"); - }; -}); - - - -module.controller('AuthenticationFlowsCtrl', function($scope, $route, realm, flows, selectedFlow, LastFlowSelected, Dialog, - AuthenticationFlows, AuthenticationFlowsCopy, AuthenticationFlowsUpdate, AuthenticationFlowExecutions, - AuthenticationExecution, AuthenticationExecutionRaisePriority, AuthenticationExecutionLowerPriority, - $modal, Notifications, CopyDialog, UpdateDialog, $location) { - $scope.realm = realm; - $scope.flows = flows; - - if (selectedFlow !== null) { - LastFlowSelected.alias = selectedFlow; - } - - if (selectedFlow === null && LastFlowSelected.alias !== null) { - selectedFlow = LastFlowSelected.alias; - } - - if (flows.length > 0) { - $scope.flow = flows[0]; - if (selectedFlow) { - for (var i = 0; i < flows.length; i++) { - if (flows[i].alias == selectedFlow) { - $scope.flow = flows[i]; - break; - } - } - } - } - - $scope.selectFlow = function(flow) { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + flow.alias); - }; - - var setupForm = function() { - AuthenticationFlowExecutions.query({realm: realm.realm, alias: $scope.flow.alias}, function(data) { - $scope.executions = data; - $scope.choicesmax = 0; - $scope.levelmax = 0; - for (var i = 0; i < $scope.executions.length; i++ ) { - var execution = $scope.executions[i]; - if (execution.requirementChoices.length > $scope.choicesmax) { - $scope.choicesmax = execution.requirementChoices.length; - } - if (execution.level > $scope.levelmax) { - $scope.levelmax = execution.level; - } - } - $scope.levelmaxempties = []; - for (j = 0; j < $scope.levelmax; j++) { - $scope.levelmaxempties.push(j); - - } - for (var i = 0; i < $scope.executions.length; i++ ) { - var execution = $scope.executions[i]; - execution.empties = []; - for (j = 0; j < $scope.choicesmax - execution.requirementChoices.length; j++) { - execution.empties.push(j); - } - execution.preLevels = []; - for (j = 0; j < execution.level; j++) { - execution.preLevels.push(j); - } - execution.postLevels = []; - for (j = execution.level; j < $scope.levelmax; j++) { - execution.postLevels.push(j); - } - } - }) - }; - - $scope.copyFlow = function() { - CopyDialog.open('Copy Authentication Flow', $scope.flow.alias, function(name) { - AuthenticationFlowsCopy.save({realm: realm.realm, alias: $scope.flow.alias}, { - newName: name - }, function() { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + name); - Notifications.success("Flow copied."); - }) - }) - }; - - $scope.deleteFlow = function() { - Dialog.confirmDelete($scope.flow.alias, 'flow', function() { - $scope.removeFlow(); - }); - }; - - $scope.removeFlow = function() { - console.log('Remove flow:' + $scope.flow.alias); - if (realm.browserFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the browser flow."); - - } else if (realm.registrationFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the registration flow."); - - } else if (realm.directGrantFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the direct grant flow."); - - } else if (realm.resetCredentialsFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the reset credentials flow."); - - } else if (realm.clientAuthenticationFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the client authentication flow."); - - } else if (realm.dockerAuthenticationFlow == $scope.flow.alias) { - Notifications.error("Cannot remove flow, it is currently being used as the docker authentication flow."); - } else { - AuthenticationFlows.remove({realm: realm.realm, flow: $scope.flow.id}, function () { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + flows[0].alias); - Notifications.success("Flow removed"); - }) - } - - }; - - $scope.editFlow = function(flow) { - var copy = angular.copy(flow); - UpdateDialog.open('Update Authentication Flow', copy.alias, copy.description, function(name, desc) { - copy.alias = name; - copy.description = desc; - AuthenticationFlowsUpdate.update({realm: realm.realm, flow: flow.id}, copy, function() { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + name); - Notifications.success("Flow updated"); - }); - }) - }; - - $scope.addFlow = function() { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + $scope.flow.id + '/create/flow/execution/' + $scope.flow.id); - - } - - $scope.addSubFlow = function(execution) { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + execution.flowId + '/create/flow/execution/' + $scope.flow.alias); - - } - - $scope.addSubFlowExecution = function(execution) { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + execution.flowId + '/create/execution/' + $scope.flow.alias); - - } - - $scope.addExecution = function() { - $location.url("/realms/" + realm.realm + '/authentication/flows/' + $scope.flow.id + '/create/execution/' + $scope.flow.id); - - } - - $scope.createFlow = function() { - $location.url("/realms/" + realm.realm + '/authentication/create/flow'); - } - - $scope.updateExecution = function(execution) { - var copy = angular.copy(execution); - delete copy.empties; - delete copy.levels; - delete copy.preLevels; - delete copy.postLevels; - AuthenticationFlowExecutions.update({realm: realm.realm, alias: $scope.flow.alias}, copy, function() { - Notifications.success("Auth requirement updated"); - setupForm(); - }); - - }; - - $scope.editExecutionFlow = function(execution) { - var copy = angular.copy(execution); - delete copy.empties; - delete copy.levels; - delete copy.preLevels; - delete copy.postLevels; - UpdateDialog.open('Update Execution Flow', copy.displayName, copy.description, function(name, desc) { - copy.displayName = name; - copy.description = desc; - AuthenticationFlowExecutions.update({realm: realm.realm, alias: $scope.flow.alias}, copy, function() { - Notifications.success("Execution Flow updated"); - setupForm(); - }); - }) - }; - - $scope.removeExecution = function(execution) { - console.log('removeExecution: ' + execution.id); - var exeOrFlow = execution.authenticationFlow ? 'flow' : 'execution'; - Dialog.confirmDelete(execution.displayName, exeOrFlow, function() { - AuthenticationExecution.remove({realm: realm.realm, execution: execution.id}, function() { - Notifications.success("The " + exeOrFlow + " was removed."); - setupForm(); - }); - }); - - } - - $scope.raisePriority = function(execution) { - AuthenticationExecutionRaisePriority.save({realm: realm.realm, execution: execution.id}, function() { - Notifications.success("Priority raised"); - setupForm(); - }) - } - - $scope.lowerPriority = function(execution) { - AuthenticationExecutionLowerPriority.save({realm: realm.realm, execution: execution.id}, function() { - Notifications.success("Priority lowered"); - setupForm(); - }) - } - - $scope.setupForm = setupForm; - - if (selectedFlow == null) { - $scope.selectFlow(flows[0]); - } else { - setupForm(); - } -}); - -module.controller('RequiredActionsCtrl', function($scope, realm, unregisteredRequiredActions, - $modal, $route, - RegisterRequiredAction, RequiredActions, RequiredActionRaisePriority, RequiredActionLowerPriority, Notifications) { - console.log('RequiredActionsCtrl'); - $scope.realm = realm; - $scope.unregisteredRequiredActions = unregisteredRequiredActions; - $scope.requiredActions = []; - var setupRequiredActionsForm = function() { - console.log('setupRequiredActionsForm'); - RequiredActions.query({realm: realm.realm}, function(data) { - $scope.requiredActions = []; - for (var i = 0; i < data.length; i++) { - $scope.requiredActions.push(data[i]); - } - }); - }; - - $scope.updateRequiredAction = function(action) { - RequiredActions.update({realm: realm.realm, alias: action.alias}, action, function() { - Notifications.success("Required action updated"); - setupRequiredActionsForm(); - }); - } - - $scope.raisePriority = function(action) { - RequiredActionRaisePriority.save({realm: realm.realm, alias: action.alias}, function() { - Notifications.success("Required action's priority raised"); - setupRequiredActionsForm(); - }) - } - - $scope.lowerPriority = function(action) { - RequiredActionLowerPriority.save({realm: realm.realm, alias: action.alias}, function() { - Notifications.success("Required action's priority lowered"); - setupRequiredActionsForm(); - }) - } - - $scope.register = function() { - var controller = function($scope, $modalInstance) { - $scope.unregisteredRequiredActions = unregisteredRequiredActions; - $scope.selected = { - selected: $scope.unregisteredRequiredActions[0] - } - $scope.ok = function () { - $modalInstance.close(); - RegisterRequiredAction.save({realm: realm.realm}, $scope.selected.selected, function() { - $route.reload(); - }); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - } - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/unregistered-required-action-selector.html', - controller: controller, - resolve: { - } - }); - } - - setupRequiredActionsForm(); - - -}); - -module.controller('AuthenticationConfigCtrl', function($scope, realm, flow, configType, config, AuthenticationConfig, Notifications, - Dialog, $location, ComponentUtils) { - $scope.realm = realm; - $scope.flow = flow; - $scope.configType = configType; - $scope.create = false; - $scope.config = angular.copy(config); - $scope.changed = false; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch('config', function() { - if (!angular.equals($scope.config, config)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - var configCopy = angular.copy($scope.config); - ComponentUtils.convertAllListValuesToMultivaluedString(configType.properties, configCopy.config); - - AuthenticationConfig.update({ - realm : realm.realm, - config : config.id - }, configCopy, function() { - $scope.changed = false; - config = angular.copy($scope.config); - $location.url("/realms/" + realm.realm + '/authentication/flows/' + flow.id + '/config/' + configType.providerId + "/" + config.id); - Notifications.success("Your changes have been saved."); - }); - }; - - $scope.reset = function() { - $scope.config = angular.copy(config); - $scope.changed = false; - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.config.alias, 'config', function() { - AuthenticationConfig.remove({ realm: realm.realm, config : $scope.config.id }, function() { - Notifications.success("The config has been deleted."); - $location.url("/realms/" + realm.realm + '/authentication/flows/' + flow.id); - }); - }); - }; - -}); - -module.controller('AuthenticationConfigCreateCtrl', function($scope, realm, flow, configType, execution, AuthenticationExecutionConfig, - Notifications, Dialog, $location, ComponentUtils) { - $scope.realm = realm; - $scope.flow = flow; - $scope.create = true; - $scope.configType = configType; - - var defaultConfig = {}; - if (configType && Array.isArray(configType.properties)) { - for(var i = 0; i < configType.properties.length; i++) { - var property = configType.properties[i]; - if (property && property.name) { - defaultConfig[property.name] = property.defaultValue; - } - } - } - - $scope.config = { config: defaultConfig}; - - $scope.$watch(function() { - return $location.path(); - }, function() { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.save = function() { - var configCopy = angular.copy($scope.config); - ComponentUtils.convertAllListValuesToMultivaluedString(configType.properties, configCopy.config); - - AuthenticationExecutionConfig.save({ - realm : realm.realm, - execution: execution - }, configCopy, function(data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - var url = "/realms/" + realm.realm + '/authentication/flows/' + flow.id + '/config/' + configType.providerId + "/" + id; - console.log('redirect url: ' + url); - $location.url(url); - Notifications.success("Config has been created."); - }); - }; - - $scope.cancel = function() { - //$location.url("/realms"); - window.history.back(); - }; -}); - -module.controller('ClientInitialAccessCtrl', function($scope, realm, clientInitialAccess, ClientInitialAccess, Dialog, Notifications, $route, $location) { - $scope.realm = realm; - $scope.clientInitialAccess = clientInitialAccess; - - $scope.remove = function(id) { - Dialog.confirmDelete(id, 'initial access token', function() { - ClientInitialAccess.remove({ realm: realm.realm, id: id }, function() { - Notifications.success("The initial access token was deleted."); - $route.reload(); - }); - }); - } -}); - -module.controller('ClientInitialAccessCreateCtrl', function($scope, realm, ClientInitialAccess, TimeUnit, Dialog, $location, $translate) { - $scope.expirationUnit = 'Days'; - $scope.expiration = TimeUnit.toUnit(0, $scope.expirationUnit); - $scope.count = 1; - $scope.realm = realm; - - $scope.save = function() { - var expiration = TimeUnit.toSeconds($scope.expiration, $scope.expirationUnit); - ClientInitialAccess.save({ - realm: realm.realm - }, { expiration: expiration, count: $scope.count}, function (data) { - console.debug(data); - $scope.id = data.id; - $scope.token = data.token; - }); - }; - - $scope.cancel = function() { - $location.url('/realms/' + realm.realm + '/client-registration/client-initial-access'); - }; - - $scope.done = function() { - var btns = { - ok: { - label: $translate.instant('continue'), - cssClass: 'btn btn-primary' - }, - cancel: { - label: $translate.instant('cancel'), - cssClass: 'btn btn-default' - } - } - - var title = $translate.instant('initial-access-token.confirm.title'); - var message = $translate.instant('initial-access-token.confirm.text'); - Dialog.open(title, message, btns, function() { - $location.url('/realms/' + realm.realm + '/client-registration/client-initial-access'); - }); - }; -}); - -module.controller('ClientRegPoliciesCtrl', function($scope, realm, clientRegistrationPolicyProviders, policies, Dialog, Notifications, Components, $route, $location) { - $scope.realm = realm; - $scope.providers = clientRegistrationPolicyProviders; - $scope.anonPolicies = []; - $scope.authPolicies = []; - for (var i=0 ; i { - $scope.headerTitle = translatedValue; - }).catch(() => { - $scope.headerTitle = $scope.instance.providerId; - }); - - if ($scope.create) { - $scope.instance.name = ""; - $scope.instance.parentId = realm.id; - $scope.instance.config = {}; - - if ($scope.providerType.properties) { - - for (let i = 0; i < $scope.providerType.properties.length; i++) { - let configProperty = $scope.providerType.properties[i]; - $scope.instance.config[configProperty.name] = toDefaultValue(configProperty); - } - } - } - - if ($scope.providerType.properties) { - ComponentUtils.addLastEmptyValueToMultivaluedLists($scope.providerType.properties, $scope.instance.config); - ComponentUtils.addMvOptionsToMultivaluedLists($scope.providerType.properties); - } - - let oldCopy = angular.copy($scope.instance); - $scope.changed = false; - - $scope.$watch('instance', function() { - if (!angular.equals($scope.instance, oldCopy)) { - $scope.changed = true; - } - }, true); - - $scope.reset = function() { - $scope.create ? window.history.back() : $route.reload(); - }; - - $scope.hasValidValues = () => $scope.changed && $scope.instance.name; - - $scope.save = function() { - $scope.changed = false; - if ($scope.create) { - Components.save({realm: realm.realm}, $scope.instance, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - $location.url("/realms/" + realm.realm + "/client-registration/client-reg-policies/" + $scope.instance.providerId + "/" + id); - Notifications.success("The policy has been created."); - }); - } else { - Components.update({realm: realm.realm, - componentId: instance.id - }, - $scope.instance, function () { - $route.reload(); - Notifications.success("The policy has been updated."); - }); - } - }; - -}); - -module.controller('ClientPoliciesProfilesListCtrl', function($scope, realm, clientProfiles, ClientPoliciesProfiles, Dialog, Notifications, $route, $location) { - console.log('ClientPoliciesProfilesListCtrl'); - $scope.realm = realm; - $scope.clientProfiles = clientProfiles; - - $scope.removeClientProfile = function(clientProfile) { - Dialog.confirmDelete(clientProfile.name, 'client profile', function() { - console.log("Deleting client profile from the JSON: " + clientProfile.name); - - for (var i = 0; i < $scope.clientProfiles.profiles.length; i++) { - var currentProfile = $scope.clientProfiles.profiles[i]; - if (currentProfile.name === clientProfile.name) { - $scope.clientProfiles.profiles.splice(i, 1); - break; - } - } - - ClientPoliciesProfiles.update({ - realm: realm.realm, - }, $scope.clientProfiles, function () { - $route.reload(); - Notifications.success("The client profile was deleted."); - }, function (errorResponse) { - $route.reload(); - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - Notifications.error('Failed to delete client profile: ' + errDetails); - }); - }); - }; - -}); - -module.controller('ClientPoliciesProfilesJsonCtrl', function($scope, realm, clientProfiles, ClientPoliciesProfiles, Dialog, Notifications, $route, $location) { - console.log('ClientPoliciesProfilesJsonCtrl'); - $scope.realm = realm; - $scope.clientProfilesString = angular.toJson(clientProfiles, true); - - $scope.save = function() { - var clientProfilesObj = null; - try { - clientProfilesObj = angular.fromJson($scope.clientProfilesString); - } catch (e) { - Notifications.error("Provided JSON is incorrect: " + e.message); - console.log(e); - return; - } - var clientProfilesCompressed = angular.toJson(clientProfilesObj, false); - - ClientPoliciesProfiles.update({ - realm: realm.realm, - }, clientProfilesCompressed, function () { - $route.reload(); - Notifications.success("The client profiles configuration was updated."); - }, function(errorResponse) { - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - Notifications.error("Failed to update client profiles: " + errDetails); - console.log("Error response when updating client profiles JSON: Status: " + errorResponse.status + - ", statusText: " + errorResponse.statusText + ", data: " + JSON.stringify(errorResponse.data)); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; - -}); - -module.controller('ClientPoliciesProfilesEditCtrl', function($scope, realm, clientProfiles, ClientPoliciesProfiles, Dialog, Notifications, $route, $location) { - var targetProfileName = $route.current.params.profileName; - $scope.createNew = targetProfileName == null; - if ($scope.createNew) { - console.log('ClientPoliciesProfilesEditCtrl: creating new profile'); - } else { - console.log('ClientPoliciesProfilesEditCtrl: updating profile ' + targetProfileName); - } - - $scope.realm = realm; - $scope.editedProfile = null; - - function getProfileByName(profilesArray) { - if (!profilesArray) return null; - for (var i=0 ; i < profilesArray.length ; i++) { - var currentProfile = profilesArray[i]; - if (targetProfileName === currentProfile.name) { - return currentProfile; - } - } - } - - if ($scope.createNew) { - $scope.editedProfile = { - name: "", - executors: [] - }; - } else { - var globalProfile = false; - $scope.editedProfile = getProfileByName(clientProfiles.profiles); - if (!$scope.editedProfile) { - $scope.editedProfile = getProfileByName(clientProfiles.globalProfiles); - globalProfile = true; - } - - if ($scope.editedProfile == null) { - console.log("Profile of name " + targetProfileName + " not found"); - throw 'Profile not found'; - } - } - - // needs to be a function because when this controller runs, the permissions might not be loaded yet - $scope.isReadOnly = function() { - return !$scope.access.manageRealm || globalProfile; - } - - $scope.removeExecutor = function(executorIndex) { - Dialog.confirmDelete($scope.editedProfile.executors[executorIndex].executor, 'executor', function() { - console.log("remove executor of index " + executorIndex); - - // Delete executor - $scope.editedProfile.executors.splice(executorIndex, 1); - - ClientPoliciesProfiles.update({ - realm: realm.realm, - }, clientProfiles, function () { - Notifications.success("The executor was deleted."); - }, function (errorResponse) { - $route.reload(); - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - Notifications.error('Failed to delete executor: ' + errDetails); - }); - }); - } - - $scope.save = function() { - if (!$scope.editedProfile.name || $scope.editedProfile.name === '') { - Notifications.error('Name must be provided'); - return; - } - - if ($scope.createNew) { - clientProfiles.profiles.push($scope.editedProfile); - } - - ClientPoliciesProfiles.update({ - realm: realm.realm, - }, clientProfiles, function () { - if ($scope.createNew) { - Notifications.success("The client profile was created."); - $location.url('/realms/' + realm.realm + '/client-policies/profiles-update/' + $scope.editedProfile.name); - } else { - Notifications.success("The client profile was updated."); - $location.url('/realms/' + realm.realm + '/client-policies/profiles'); - } - }, function(errorResponse) { - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - if ($scope.createNew) { - Notifications.error('Failed to create client profile: ' + errDetails); - } else { - Notifications.error('Failed to update client profile: ' + errDetails); - } - }); - - }; - - $scope.back = function() { - $location.url('/realms/' + realm.realm + '/client-policies/profiles'); - }; - -}); - -module.controller('ClientPoliciesProfilesEditExecutorCtrl', function($scope, realm, serverInfo, clientProfiles, ClientPoliciesProfiles, ComponentUtils, Dialog, Notifications, $route, $location) { - var updatedExecutorIndex = $route.current.params.executorIndex; - var targetProfileName = $route.current.params.profileName; - $scope.createNew = updatedExecutorIndex == null; - if ($scope.createNew) { - console.log('ClientPoliciesProfilesEditExecutorCtrl: adding executor to profile ' + targetProfileName); - } else { - console.log('ClientPoliciesProfilesEditExecutorCtrl: updating executor with index ' + updatedExecutorIndex + ' of profile ' + targetProfileName); - } - $scope.realm = realm; - - function getProfileByName(profilesArray) { - if (!profilesArray) return null; - for (var i=0 ; i < profilesArray.length ; i++) { - var currentProfile = profilesArray[i]; - if (targetProfileName === currentProfile.name) { - return currentProfile; - } - } - } - - var globalProfile = false; - $scope.editedProfile = getProfileByName(clientProfiles.profiles); - if (!$scope.editedProfile) { - $scope.editedProfile = getProfileByName(clientProfiles.globalProfiles); - globalProfile = true; - } - if ($scope.editedProfile == null) { - throw 'Client profile of specified name not found'; - } - - // needs to be a function because when this controller runs, the permissions might not be loaded yet - $scope.isReadOnly = function() { - return !$scope.access.manageRealm || globalProfile; - } - - $scope.executorTypes = serverInfo.componentTypes['org.keycloak.services.clientpolicy.executor.ClientPolicyExecutorProvider']; - - for (var j=0 ; j < $scope.executorTypes.length ; j++) { - var currExecutorType = $scope.executorTypes[j]; - if (currExecutorType.properties) { - console.log("Adjusting executorType: " + currExecutorType.id); - ComponentUtils.addMvOptionsToMultivaluedLists(currExecutorType.properties); - } - } - - function getExecutorByIndex(clientProfile, executorIndex) { - if (clientProfile.executors.length <= executorIndex) { - console.error('Client profile does not have executor of specified index'); - $location.path('/notfound'); - return null; - } else { - return clientProfile.executors[executorIndex]; - } - } - - if ($scope.createNew) { - // make first type the default - $scope.executorType = $scope.executorTypes[0]; - var oldExecutorType = $scope.executorType; - initConfig(); - - $scope.$watch('executorType', function() { - if (!angular.equals($scope.executorType, oldExecutorType)) { - oldExecutorType = $scope.executorType; - initConfig(); - } - }, true); - } else { - var exec = getExecutorByIndex($scope.editedProfile, updatedExecutorIndex); - if (exec) { - // a failsafe in case the configuration was deleted entirely (or set to null) in the JSON view - if (!exec.configuration) { - exec.configuration = {} - } - - $scope.executor = { - config: exec.configuration - }; - - $scope.executorType = null; - for (var j=0 ; j < $scope.executorTypes.length ; j++) { - var currentExType = $scope.executorTypes[j]; - if (exec.executor === currentExType.id) { - $scope.executorType = currentExType; - break; - } - } - - for (var j=0 ; j < $scope.executorType.properties.length ; j++) { - // Convert boolean properties from the configuration to strings as expected by the kc-provider-config directive - var currentProperty = $scope.executorType.properties[j]; - if (currentProperty.type === 'boolean') { - $scope.executor.config[currentProperty.name] = ($scope.executor.config[currentProperty.name]) ? "true" : "false"; - } - - // a workaround for select2 to prevent displaying empty boxes - var configProperty = $scope.executor.config[$scope.executorType.properties[j].name]; - if (Array.isArray(configProperty) && configProperty.length === 0) { - $scope.executor.config[$scope.executorType.properties[j].name] = null - } - - } - } - - } - - function toDefaultValue(configProperty) { - if (configProperty.type === 'boolean') { - return (configProperty.defaultValue) ? "true" : "false"; - } - - if (configProperty.defaultValue !== undefined) { - if ((configProperty.type === 'MultivaluedString' || configProperty.type === 'MultivaluedList') && !Array.isArray(configProperty.defaultValue)) { - return [configProperty.defaultValue] - } - return configProperty.defaultValue; - } else { - return null; - } - } - - function initConfig() { - console.log("Initialized config now. ConfigType is: " + $scope.executorType.id); - $scope.executor = { - config: {} - }; - - for (let i = 0; i < $scope.executorType.properties.length; i++) { - let configProperty = $scope.executorType.properties[i]; - $scope.executor.config[configProperty.name] = toDefaultValue(configProperty); - } - } - - $scope.save = function() { - console.log("save: " + $scope.executorType.id); - - var executorName = $scope.executorType.id; - if (!$scope.editedProfile.executors) { - $scope.editedProfile.executors = []; - } - - ComponentUtils.removeLastEmptyValue($scope.executor.config); - - // Convert String properties required by the kc-provider-config directive back to booleans - for (var j=0 ; j < $scope.executorType.properties.length ; j++) { - var currentProperty = $scope.executorType.properties[j]; - if (currentProperty.type === 'boolean') { - $scope.executor.config[currentProperty.name] = ($scope.executor.config[currentProperty.name] === "true") ? true : false; - } - } - - if ($scope.createNew) { - var selectedExecutor = { - executor: $scope.executorType.id, - configuration: $scope.executor.config - }; - $scope.editedProfile.executors.push(selectedExecutor); - } else { - var currentExecutor = getExecutorByIndex($scope.editedProfile, updatedExecutorIndex); - if (currentExecutor) { - currentExecutor.configuration = $scope.executor.config; - } - } - - ClientPoliciesProfiles.update({ - realm: realm.realm, - }, clientProfiles, function () { - if ($scope.createNew) { - Notifications.success("Executor created successfully"); - } else { - Notifications.success("Executor updated successfully"); - } - $location.url('/realms/' + realm.realm + '/client-policies/profiles-update/' + $scope.editedProfile.name); - }, function(errorResponse) { - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - if ($scope.createNew) { - Notifications.error('Failed to create executor: ' + errDetails); - } else { - Notifications.error('Failed to update executor: ' + errDetails); - } - }); - - }; - - $scope.cancel = function() { - $location.url('/realms/' + realm.realm + '/client-policies/profiles-update/' + $scope.editedProfile.name); - }; - -}); - -module.controller('ClientPoliciesListCtrl', function($scope, realm, clientPolicies, ClientPolicies, Dialog, Notifications, $route, $location) { - console.log('ClientPoliciesListCtrl'); - $scope.realm = realm; - $scope.clientPolicies = clientPolicies; - - $scope.removeClientPolicy = function(clientPolicy) { - Dialog.confirmDelete(clientPolicy.name, 'client policy', function() { - console.log("Deleting client policy from the JSON: " + clientPolicy.name); - - for (var i = 0; i < $scope.clientPolicies.policies.length; i++) { - var currentPolicy = $scope.clientPolicies.policies[i]; - if (currentPolicy.name === clientPolicy.name) { - $scope.clientPolicies.policies.splice(i, 1); - break; - } - } - - ClientPolicies.update({ - realm: realm.realm, - }, $scope.clientPolicies, function () { - $route.reload(); - Notifications.success("The client policy was deleted."); - }, function (errorResponse) { - $route.reload(); - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - Notifications.error('Failed to delete client policy: ' + errDetails); - }); - }); - }; - -}); - -module.controller('ClientPoliciesJsonCtrl', function($scope, realm, clientPolicies, Dialog, Notifications, ClientPolicies, $route, $location) { - console.log('ClientPoliciesJsonCtrl'); - $scope.realm = realm; - $scope.clientPoliciesString = angular.toJson(clientPolicies, true); - - $scope.save = function() { - var clientPoliciesObj = null; - try { - var clientPoliciesObj = angular.fromJson($scope.clientPoliciesString); - } catch (e) { - Notifications.error("Provided JSON is incorrect: " + e.message); - console.log(e); - return; - } - var clientPoliciesCompressed = angular.toJson(clientPoliciesObj, false); - - ClientPolicies.update({ - realm: realm.realm, - }, clientPoliciesCompressed, function () { - $route.reload(); - Notifications.success("The client policies configuration was updated."); - }, function(errorResponse) { - var errDetails = (!errorResponse.data.errorMessage) ? "unknown error, please see the server log" : errorResponse.data.errorMessage - Notifications.error("Failed to update client policies: " + errDetails); - console.log("Error response when updating client policies JSON: Status: " + errorResponse.status + - ", statusText: " + errorResponse.statusText + ", data: " + JSON.stringify(errorResponse.data)); - }); - }; - - $scope.reset = function() { - $route.reload(); - }; -}); - -module.controller('ClientPoliciesEditCtrl', function($scope, realm, clientProfiles, clientPolicies, ClientPolicies, Dialog, Notifications, $route, $location) { - var targetPolicyName = $route.current.params.policyName; - $scope.createNew = targetPolicyName == null; - if ($scope.createNew) { - console.log('ClientPoliciesEditCtrl: creating new policy'); - } else { - console.log('ClientPoliciesEditCtrl: updating policy ' + targetPolicyName); - } - - $scope.realm = realm; - $scope.clientPolicies = clientPolicies; - $scope.clientProfiles = clientProfiles; - $scope.editedPolicy = null; - - if ($scope.createNew) { - $scope.editedPolicy = { - name: "", - enabled: true, - profiles: [], - conditions: [] - }; - } else { - for (var i=0 ; i < $scope.clientPolicies.policies.length ; i++) { - var currentPolicy = $scope.clientPolicies.policies[i]; - if (targetPolicyName === currentPolicy.name) { - $scope.editedPolicy = currentPolicy; - break; - } - } - - if ($scope.editedPolicy == null) { - console.log("Policy of name " + targetPolicyName + " not found"); - throw 'Policy not found'; - } - } - - // needs to be a function because when this controller runs, the permissions might not be loaded yet - $scope.isReadOnly = function() { - return !$scope.access.manageRealm; - } - - $scope.availableProfiles = []; - var allClientProfiles = clientProfiles.profiles; - if (clientProfiles.globalProfiles) { - allClientProfiles = allClientProfiles.concat(clientProfiles.globalProfiles); - } - for (var k=0 ; k 0)) { - if ($scope.rawContent.length > 1) $scope.isMultiRealm = true; - $scope.fileContent = $scope.rawContent[0]; - } else { - $scope.fileContent = $scope.rawContent; - } - - $scope.importing = true; - setOnOffSwitchDefaults(); - $scope.results = {}; - if (!$scope.hasResources()) { - $scope.nothingToImport(); - } - }; - - $scope.hasResults = function() { - return (Object.keys($scope.results).length > 0) && - ($scope.results.results !== undefined) && - ($scope.results.results.length > 0); - } - - $scope.resultsPage = function() { - if (!$scope.hasResults()) return {}; - return $scope.results.results.slice(startIndex(), endIndex()); - } - - function startIndex() { - return pageSize * $scope.currentPage; - } - - function endIndex() { - var length = $scope.results.results.length; - var endIndex = startIndex() + pageSize; - if (endIndex > length) endIndex = length; - return endIndex; - } - - function setOnOffSwitchDefaults() { - $scope.importUsers = $scope.hasArray('users'); - $scope.importGroups = $scope.hasArray('groups'); - $scope.importClients = $scope.hasArray('clients'); - $scope.importIdentityProviders = $scope.hasArray('identityProviders'); - $scope.importRealmRoles = $scope.hasRealmRoles(); - $scope.importClientRoles = $scope.hasClientRoles(); - } - - $scope.setFirstPage = function() { - $scope.currentPage = 0; - } - - $scope.setNextPage = function() { - $scope.currentPage++; - } - - $scope.setPreviousPage = function() { - $scope.currentPage--; - } - - $scope.hasNext = function() { - if (!$scope.hasResults()) return false; - var length = $scope.results.results.length; - //console.log('length=' + length); - var endIndex = startIndex() + pageSize; - //console.log('endIndex=' + endIndex); - return length > endIndex; - } - - $scope.hasPrevious = function() { - if (!$scope.hasResults()) return false; - return $scope.currentPage > 0; - } - - $scope.viewImportDetails = function() { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/view-object.html', - controller: 'ObjectModalCtrl', - resolve: { - object: function () { - return $scope.fileContent; - } - } - }) - }; - - $scope.hasArray = function(section) { - return ($scope.fileContent !== 'undefined') && - ($scope.fileContent.hasOwnProperty(section)) && - ($scope.fileContent[section] instanceof Array) && - ($scope.fileContent[section].length > 0); - } - - $scope.hasRealmRoles = function() { - return $scope.hasRoles() && - ($scope.fileContent.roles.hasOwnProperty('realm')) && - ($scope.fileContent.roles.realm instanceof Array) && - ($scope.fileContent.roles.realm.length > 0); - } - - $scope.hasRoles = function() { - return ($scope.fileContent !== 'undefined') && - ($scope.fileContent.hasOwnProperty('roles')) && - ($scope.fileContent.roles !== 'undefined'); - } - - $scope.hasClientRoles = function() { - return $scope.hasRoles() && - ($scope.fileContent.roles.hasOwnProperty('client')) && - (Object.keys($scope.fileContent.roles.client).length > 0); - } - - $scope.itemCount = function(section) { - if (!$scope.importing) return 0; - if ($scope.hasRealmRoles() && (section === 'roles.realm')) return $scope.fileContent.roles.realm.length; - if ($scope.hasClientRoles() && (section === 'roles.client')) return clientRolesCount($scope.fileContent.roles.client); - - if (!$scope.fileContent.hasOwnProperty(section)) return 0; - - return $scope.fileContent[section].length; - } - - clientRolesCount = function(clientRoles) { - var total = 0; - for (var clientName in clientRoles) { - total += clientRoles[clientName].length; - } - return total; - } - - $scope.hasResources = function() { - return ($scope.importUsers && $scope.hasArray('users')) || - ($scope.importGroups && $scope.hasArray('groups')) || - ($scope.importClients && $scope.hasArray('clients')) || - ($scope.importIdentityProviders && $scope.hasArray('identityProviders')) || - ($scope.importRealmRoles && $scope.hasRealmRoles()) || - ($scope.importClientRoles && $scope.hasClientRoles()); - } - - $scope.nothingToImport = function() { - Notifications.error('No resources specified to import.'); - } - - $scope.$watch('fileContent', function() { - if (!angular.equals($scope.fileContent, oldCopy)) { - $scope.changed = true; - } - setOnOffSwitchDefaults(); - }, true); - - $scope.successMessage = function() { - var message = $scope.results.added + ' records added. '; - if ($scope.ifResourceExists === 'SKIP') { - message += $scope.results.skipped + ' records skipped.' - } - if ($scope.ifResourceExists === 'OVERWRITE') { - message += $scope.results.overwritten + ' records overwritten.'; - } - return message; - } - - $scope.save = function() { - var json = angular.copy($scope.fileContent); - json.ifResourceExists = $scope.ifResourceExists; - if (!$scope.importUsers) delete json.users; - if (!$scope.importGroups) delete json.groups; - if (!$scope.importIdentityProviders) delete json.identityProviders; - if (!$scope.importClients) delete json.clients; - - if (json.hasOwnProperty('roles')) { - if (!$scope.importRealmRoles) delete json.roles.realm; - if (!$scope.importClientRoles) delete json.roles.client; - } - - var importFile = $resource(authUrl + '/admin/realms/' + realm.realm + '/partialImport'); - $scope.results = importFile.save(json, function() { - Notifications.success($scope.successMessage()); - }, function(error) { - if (error.data.errorMessage) { - Notifications.error(error.data.errorMessage); - } else { - Notifications.error('Unexpected error during import'); - } - }); - }; - - $scope.reset = function() { - $route.reload(); - } - -}); - -module.controller('RealmExportCtrl', function($scope, realm, $http, - $httpParamSerializer, Notifications, Dialog) { - $scope.realm = realm; - $scope.exportGroupsAndRoles = false; - $scope.exportClients = false; - - $scope.export = function() { - if ($scope.exportGroupsAndRoles || $scope.exportClients) { - Dialog.confirm('Export', 'This operation may make server unresponsive for a while.\n\nAre you sure you want to proceed?', download); - } else { - download(); - } - } - - function download() { - var exportUrl = authUrl + '/admin/realms/' + realm.realm + '/partial-export'; - var params = {}; - if ($scope.exportGroupsAndRoles) { - params['exportGroupsAndRoles'] = true; - } - if ($scope.exportClients) { - params['exportClients'] = true; - } - if (Object.keys(params).length > 0) { - exportUrl += '?' + $httpParamSerializer(params); - } - $http.post(exportUrl) - .then(function(response) { - var download = angular.fromJson(response.data); - download = angular.toJson(download, true); - saveAs(new Blob([download], { type: 'application/json' }), 'realm-export.json'); - }).catch(function() { - Notifications.error("Sorry, something went wrong."); - }); - } -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/controllers/roles.js b/deps/keycloak/themes/base/admin/resources/js/controllers/roles.js deleted file mode 100644 index bc24c578e..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/controllers/roles.js +++ /dev/null @@ -1,48 +0,0 @@ -module.controller('RoleMembersCtrl', function($scope, realm, role, RoleMembership, Dialog, Notifications, $location, RealmRoleRemover) { - $scope.realm = realm; - $scope.page = 0; - $scope.role = role; - - $scope.query = { - realm: realm.realm, - role: role.name, - max : 5, - first : 0 - } - - $scope.remove = function() { - RealmRoleRemover.remove($scope.role, realm, Dialog, $location, Notifications); - }; - - $scope.firstPage = function() { - $scope.query.first = 0; - $scope.searchQuery(); - } - - $scope.previousPage = function() { - $scope.query.first -= parseInt($scope.query.max); - if ($scope.query.first < 0) { - $scope.query.first = 0; - } - $scope.searchQuery(); - } - - $scope.nextPage = function() { - $scope.query.first += parseInt($scope.query.max); - $scope.searchQuery(); - } - - $scope.searchQuery = function() { - console.log("query.search: " + $scope.query.search); - $scope.searchLoaded = false; - - $scope.users = RoleMembership.query($scope.query, function() { - console.log('search loaded'); - $scope.searchLoaded = true; - $scope.lastSearch = $scope.query.search; - }); - }; - - $scope.searchQuery(); - -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/controllers/users.js b/deps/keycloak/themes/base/admin/resources/js/controllers/users.js deleted file mode 100644 index 34df0290c..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/controllers/users.js +++ /dev/null @@ -1,2044 +0,0 @@ -module.controller('UserRoleMappingCtrl', function($scope, $http, $route, realm, user, client, Client, Notifications, RealmRoleMapping, - ClientRoleMapping, AvailableRealmRoleMapping, AvailableClientRoleMapping, - CompositeRealmRoleMapping, CompositeClientRoleMapping, $translate) { - $scope.realm = realm; - $scope.user = user; - $scope.selectedRealmRoles = []; - $scope.selectedRealmMappings = []; - $scope.realmMappings = []; - $scope.client = client; - $scope.clientRoles = []; - $scope.clientComposite = []; - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.clientMappings = []; - $scope.dummymodel = []; - $scope.selectedClient = null; - - - $scope.realmMappings = RealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - - $scope.addRealmRole = function() { - $scope.realmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $scope.selectedRealmRoles = []; - $http.post(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/realm', - $scope.realmRolesToAdd).then(function() { - $scope.realmMappings = RealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.selectedRealmMappings = []; - $scope.selectRealmRoles = []; - if ($scope.selectedClient) { - console.log('load available'); - $scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - } - Notifications.success($translate.instant('user.roles.add.success')); - - }); - }; - - $scope.deleteRealmRole = function() { - $scope.realmRolesToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/realm', - {data : $scope.realmRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() { - $scope.realmMappings = RealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.selectedRealmMappings = []; - $scope.selectRealmRoles = []; - if ($scope.selectedClient) { - console.log('load available'); - $scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - } - Notifications.success($translate.instant('user.roles.remove.success')); - }); - }; - - $scope.addClientRole = function() { - $scope.clientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/clients/' + $scope.selectedClient.id, - $scope.clientRolesToAdd).then(function() { - $scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - Notifications.success($translate.instant('user.roles.add.success')); - }); - }; - - $scope.deleteClientRole = function() { - $scope.clientRolesToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/users/' + user.id + '/role-mappings/clients/' + $scope.selectedClient.id, - {data : $scope.clientRolesToRemove, headers : {"content-type" : "application/json"}}).then(function() { - $scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.realmComposite = CompositeRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - $scope.realmRoles = AvailableRealmRoleMapping.query({realm : realm.realm, userId : user.id}); - Notifications.success($translate.instant('user.roles.remove.success')); - }); - }; - - $scope.changeClient = function(client) { - console.log("selected client: ", client); - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } else { - $scope.selectedClient = client; - } - if ($scope.selectedClient) { - console.log('load available'); - $scope.clientComposite = CompositeClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientRoles = AvailableClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - $scope.clientMappings = ClientRoleMapping.query({realm : realm.realm, userId : user.id, client : $scope.selectedClient.id}); - } else { - $scope.clientRoles = null; - $scope.clientMappings = null; - $scope.clientComposite = null; - } - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - }; - - clientSelectControl($scope, $route.current.params.realm, Client); -}); - -module.controller('UserSessionsCtrl', function($scope, realm, user, sessions, UserSessions, UserLogout, UserSessionLogout, Notifications, $translate) { - $scope.realm = realm; - $scope.user = user; - $scope.sessions = sessions; - - $scope.logoutAll = function() { - UserLogout.save({realm : realm.realm, user: user.id}, function () { - Notifications.success($translate.instant('user.logout.all.success')); - UserSessions.query({realm: realm.realm, user: user.id}, function(updated) { - $scope.sessions = updated; - }) - }); - }; - - $scope.logoutSession = function(sessionId) { - console.log('here in logoutSession'); - UserSessionLogout.delete({realm : realm.realm, session: sessionId}, function() { - UserSessions.query({realm: realm.realm, user: user.id}, function(updated) { - $scope.sessions = updated; - Notifications.success($translate.instant('user.logout.session.success')); - }) - }); - } -}); - -module.controller('UserFederatedIdentityCtrl', function($scope, $location, realm, user, federatedIdentities, UserFederatedIdentity, Notifications, Dialog, $translate) { - $scope.realm = realm; - $scope.user = user; - $scope.federatedIdentities = federatedIdentities; - - $scope.hasAnyProvidersToCreate = function() { - return realm.identityProviders.length - $scope.federatedIdentities.length > 0; - } - - $scope.removeProviderLink = function(providerLink) { - - console.log("Removing provider link: " + providerLink.identityProvider); - - Dialog.confirmWithButtonText( - $translate.instant('user.fedid.link.remove.confirm.title', {name: providerLink.identityProvider}), - $translate.instant('user.fedid.link.remove.confirm.message', {name: providerLink.identityProvider}), - $translate.instant('dialogs.delete.confirm'), - function() { - UserFederatedIdentity.remove({ realm: realm.realm, user: user.id, provider: providerLink.identityProvider }, function() { - Notifications.success($translate.instant('user.fedid.link.remove.success')); - var indexToRemove = $scope.federatedIdentities.indexOf(providerLink); - $scope.federatedIdentities.splice(indexToRemove, 1); - }); - } - ); - } -}); - -module.controller('UserFederatedIdentityAddCtrl', function($scope, $location, realm, user, federatedIdentities, UserFederatedIdentity, Notifications, $translate) { - $scope.realm = realm; - $scope.user = user; - $scope.federatedIdentity = {}; - - var getAvailableProvidersToCreate = function() { - var realmProviders = []; - for (var i=0 ; i 0) { - $scope.previousPage(); - } - - Notifications.success($translate.instant('user.remove.success')); - }, function() { - Notifications.error($translate.instant('user.remove.error')); - }); - } - ); - }; -}); - - -module.controller('UserTabCtrl', function($scope, $location, Dialog, Notifications, Current) { - $scope.removeUser = function() { - Dialog.confirmDelete($scope.user.id, 'user', function() { - $scope.user.$remove({ - realm : Current.realm.realm, - userId : $scope.user.id - }, function() { - $location.url("/realms/" + Current.realm.realm + "/users"); - Notifications.success($translate.instant('user.remove.success')); - }, function() { - Notifications.error($translate.instant('user.remove.error')); - }); - }); - }; -}); - -function loadUserStorageLink(realm, user, console, Components, UserStorageOperations, $scope, $location) { - if(user.federationLink) { - console.log("federationLink is not null. It is " + user.federationLink); - - if ($scope.access.viewRealm) { - Components.get({realm: realm.realm, componentId: user.federationLink}, function (link) { - $scope.federationLinkName = link.name; - $scope.federationLink = "#/realms/" + realm.realm + "/user-storage/providers/" + link.providerId + "/" + link.id; - }); - } else { - // KEYCLOAK-4328 - UserStorageOperations.simpleName.get({realm: realm.realm, componentId: user.federationLink}, function (link) { - $scope.federationLinkName = link.name; - $scope.federationLink = $location.absUrl(); - }) - } - - } else { - console.log("federationLink is null"); - } - - if(user.origin) { - if ($scope.access.viewRealm) { - Components.get({realm: realm.realm, componentId: user.origin}, function (link) { - $scope.originName = link.name; - $scope.originLink = "#/realms/" + realm.realm + "/user-storage/providers/" + link.providerId + "/" + link.id; - }) - } - else { - // KEYCLOAK-4328 - UserStorageOperations.simpleName.get({realm: realm.realm, componentId: user.origin}, function (link) { - $scope.originName = link.name; - $scope.originLink = $location.absUrl(); - }) - } - } else { - console.log("origin is null"); - } -}; - -module.controller('UserDetailCtrl', function($scope, realm, user, BruteForceUser, User, - Components, - UserImpersonation, RequiredActions, - UserStorageOperations, - $location, $http, Dialog, Notifications, $translate, Groups) { - $scope.realm = realm; - $scope.create = !user.id; - $scope.editUsername = $scope.create || $scope.realm.editUsernameAllowed; - $scope.emailAsUsername = $scope.realm.registrationEmailAsUsername; - $scope.groupSearch = { selectedGroup : null }; - - if ($scope.create) { - $scope.user = { enabled: true, attributes: {}, groups: [] } - } else { - if (!user.attributes) { - user.attributes = {} - } - convertAttributeValuesToString(user); - - - $scope.user = angular.copy(user); - $scope.impersonate = function() { - UserImpersonation.save({realm : realm.realm, user: $scope.user.id}, function (data) { - if (data.sameRealm) { - window.location = data.redirect; - } else { - window.open(data.redirect, "_blank"); - } - }); - }; - - loadUserStorageLink(realm, user, console, Components, UserStorageOperations, $scope, $location); - - console.log('realm brute force? ' + realm.bruteForceProtected) - $scope.temporarilyDisabled = false; - var isDisabled = function () { - BruteForceUser.get({realm: realm.realm, userId: user.id}, function(data) { - console.log('here in isDisabled ' + data.disabled); - $scope.temporarilyDisabled = data.disabled; - }); - }; - - console.log("check if disabled"); - isDisabled(); - - $scope.unlockUser = function() { - BruteForceUser.delete({realm: realm.realm, userId: user.id}, function(data) { - isDisabled(); - }); - } - } - - $scope.changed = false; // $scope.create; - if (user.requiredActions) { - for (var i = 0; i < user.requiredActions.length; i++) { - console.log("user require action: " + user.requiredActions[i]); - } - } - // ID - Name map for required actions. IDs are enum names. - RequiredActions.query({realm: realm.realm}, function(data) { - $scope.userReqActionList = []; - for (var i = 0; i < data.length; i++) { - console.log("listed required action: " + data[i].name); - if (data[i].enabled) { - var item = data[i]; - $scope.userReqActionList.push(item); - } - } - console.log("---------------------"); - console.log("ng-model: user.requiredActions=" + JSON.stringify($scope.user.requiredActions)); - console.log("---------------------"); - console.log("ng-repeat: userReqActionList=" + JSON.stringify($scope.userReqActionList)); - console.log("---------------------"); - }); - $scope.$watch('user', function() { - if (!angular.equals($scope.user, user)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - convertAttributeValuesToLists(); - - if ($scope.create) { - pushSelectedGroupsToUser(); - - User.save({ - realm: realm.realm - }, $scope.user, function (data, headers) { - $scope.changed = false; - convertAttributeValuesToString($scope.user); - user = angular.copy($scope.user); - var l = headers().location; - - console.debug("Location == " + l); - - var id = l.substring(l.lastIndexOf("/") + 1); - - - $location.url("/realms/" + realm.realm + "/users/" + id); - Notifications.success($translate.instant('user.create.success')); - }); - } else { - User.update({ - realm: realm.realm, - userId: $scope.user.id - }, $scope.user, function () { - $scope.changed = false; - convertAttributeValuesToString($scope.user); - user = angular.copy($scope.user); - Notifications.success($translate.instant('user.edit.success')); - }); - } - }; - - function convertAttributeValuesToLists() { - var attrs = $scope.user.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "string") { - var attrVals = attrs[attribute].split("##"); - attrs[attribute] = attrVals; - } - } - } - - function convertAttributeValuesToString(user) { - var attrs = user.attributes; - for (var attribute in attrs) { - if (typeof attrs[attribute] === "object") { - var attrVals = attrs[attribute].join("##"); - attrs[attribute] = attrVals; - } - } - } - - function pushSelectedGroupsToUser() { - var groups = $scope.user.groups; - if ($scope.selectedGroups) { - for (i = 0; i < $scope.selectedGroups.length; i++) { - var groupPath = $scope.selectedGroups[i].path; - if (!groups.includes(groupPath)) { - groups.push(groupPath); - } - } - } - } - - function bfs(tree, collection) { - if (!tree["subGroups"] || tree["subGroups"].length === 0) return; - for (var i=0; i < tree["subGroups"].length; i++) { - var child = tree["subGroups"][i] - collection.push(child); - bfs(child, collection); - } - return; - } - - function flattenGroups(groups) { - var flattenedGroups = []; - if (!groups || groups.length === 0) return groups; - for (var i=0; i < groups.length; i++) { - flattenedGroups.push(groups[i]); - bfs(groups[i], flattenedGroups); - } - - return flattenedGroups; - } - - /** - * Only keep groups that : - * - include the search term in their path - * - are not already selected - */ - function filterSearchedGroups(groups, term, selectedGroups) { - if (!groups || groups.length === 0) return groups; - if (!selectedGroups) selectedGroups = []; - - return groups.filter(group => group.path?.includes(term) && !selectedGroups.some(selGroup => selGroup.id === group.id)); - } - - $scope.reset = function() { - $scope.user = angular.copy(user); - $scope.changed = false; - }; - - $scope.cancel = function() { - $location.url("/realms/" + realm.realm + "/users"); - }; - - $scope.addAttribute = function() { - $scope.user.attributes[$scope.newAttribute.key] = $scope.newAttribute.value; - delete $scope.newAttribute; - } - - $scope.removeAttribute = function(key) { - delete $scope.user.attributes[key]; - } - - $scope.groupsUiSelect = { - minimumInputLength: 1, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - if ('' == query.term.trim()) { - query.callback(data); - return; - } - $scope.query = { - realm: realm.realm, - search: query.term.trim(), - max : 20, - first : 0 - }; - Groups.query($scope.query, function(response) { - data.results = filterSearchedGroups(flattenGroups(response), query.term.trim(), $scope.selectedGroups); - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.path; - return object.path; - } - }; - - $scope.removeGroup = function(list, group) { - for (i = 0; i < angular.copy(list).length; i++) { - if (group.id == list[i].id) { - list.splice(i, 1); - } - } - } - - $scope.selectGroup = function(group) { - if (!group || !group.id) { - return; - } - - $scope.groupSearch.selectedGroup = group; - - if (!$scope.selectedGroups) { - $scope.selectedGroups = []; - } - - for (i = 0; i < $scope.selectedGroups.length; i++) { - if ($scope.selectedGroups[i].id == group.id) { - return; - } - } - - $scope.selectedGroups.push(group); - $scope.groupSearch.selectedGroup = null; - } - - $scope.clearGroupSelection = function() { - $scope.groupSearch.selectedGroup = null; - $('#groups').val(null).trigger('change.select2'); - } -}); - -module.controller('UserCredentialsCtrl', function($scope, realm, user, $route, $location, RequiredActions, User, UserExecuteActionsEmail, - UserCredentials, Notifications, Dialog, TimeUnit2, Components, UserStorageOperations, $modal, $translate) { - console.log('UserCredentialsCtrl'); - - $scope.hasPassword = false; - - loadCredentials(); - - loadUserStorageLink(realm, user, console, Components, UserStorageOperations, $scope, $location); - - $scope.getUserStorageProviderName = function() { - return user.federationLink ? $scope.federationLinkName : $scope.originName; - } - - $scope.getUserStorageProviderLink = function() { - return user.federationLink ? $scope.federationLink : $scope.originLink; - } - - $scope.updateCredentialLabel = function(credential) { - UserCredentials.updateCredentialLabel({ realm: realm.realm, userId: user.id, credentialId: credential.id }, { - 'id': credential.id, - 'userLabel': credential.userLabel ? credential.userLabel : "", - // We JSONify the credential data - 'credentialData': JSON.stringify(credential.credentialData) - }, function() { - Notifications.success($translate.instant('user.credential.update.success')); - }, function(err) { - Notifications.error($translate.instant('user.credential.update.error')); - console.log(err); - }); - } - - $scope.deleteCredential = function(credential) { - Dialog.confirmWithButtonText( - $translate.instant('user.credential.remove.confirm.title', {name: credential.id}), - $translate.instant('user.credential.remove.confirm.message', {name: credential.id}), - $translate.instant('dialogs.delete.confirm'), - function() { - UserCredentials.deleteCredential({ realm: realm.realm, userId: user.id, credentialId: credential.id }, null, function() { - Notifications.success($translate.instant('user.credential.remove.success')); - $route.reload(); - }, function(err) { - Notifications.error($translate.instant('user.credential.remove.error')); - console.log(err); - }) - } - ); - } - - $scope.moveUp = function(credentials, index) { - // Safety first - if (index == 0) { - return; - } else if (index == 1) { - UserCredentials.moveToFirst( - { - realm: realm.realm, - userId: user.id, - credentialId: credentials[index].id - }, - function () { - $route.reload(); - }, - function (err) { - Notifications.error($translate.instant('user.credential.move-top.error')); - console.log(err); - }); - - } else { - UserCredentials.moveCredentialAfter( - { - realm: realm.realm, - userId: user.id, - credentialId: credentials[index].id, - newPreviousCredentialId: credentials[index - 2].id - }, - function () { - $route.reload(); - }, - function (err) { - Notifications.error($translate.instant('user.credential.move-up.error')); - console.log(err); - }); - } - } - - $scope.moveDown = function(credentials, index) { - // Safety first - if (index == credentials.length - 1) { - return; - } - UserCredentials.moveCredentialAfter( - { - realm: realm.realm, - userId: user.id, - credentialId: credentials[index].id, - newPreviousCredentialId: credentials[index + 1].id - }, - function() { - $route.reload(); - }, - function(err) { - Notifications.error($translate.instant('user.credential.move-down.error')); - console.log(err); - }); - } - - $scope.showData = function(credentialData) { - $modal.open({ - templateUrl: resourceUrl + '/partials/modal/user-credential-data.html', - controller: 'UserCredentialsDataModalCtrl', - resolve: { - credentialData: function () { - return credentialData; - } - } - }) - } - - $scope.realm = realm; - $scope.user = angular.copy(user); - $scope.temporaryPassword = true; - - $scope.isTotp = false; - if(!!user.totp){ - $scope.isTotp = user.totp; - } - // ID - Name map for required actions. IDs are enum names. - RequiredActions.query({realm: realm.realm}, function(data) { - $scope.userReqActionList = []; - for (var i = 0; i < data.length; i++) { - console.log("listed required action: " + data[i].name); - if (data[i].enabled) { - var item = data[i]; - $scope.userReqActionList.push(item); - } - } - - }); - - function loadCredentials() { - UserCredentials.getCredentials({ realm: realm.realm, userId: user.id }, null, function(credentials) { - $scope.credentials = credentials.map(function(c) { - // We de-JSONify the credential data - if (c.credentialData) { - c.credentialData = JSON.parse(c.credentialData); - } - if (c.type == 'password') { - $scope.hasPassword = true; - } - return c; - }); - }, function(err) { - Notifications.error($translate.instant('user.credential.fetch.error')); - console.log(err); - }); - - UserCredentials.getConfiguredUserStorageCredentialTypes({ realm: realm.realm, userId: user.id }, null, function(userStorageCredentialTypes) { - $scope.userStorageCredentialTypes = userStorageCredentialTypes; - $scope.hasPassword = $scope.hasPassword || userStorageCredentialTypes.lastIndexOf("password") > -1; - }, function(err) { - Notifications.error($translate.instant('user.credential.storage.fetch.error')); - console.log(err); - }); - } - - $scope.resetPassword = function() { - // hit enter without entering both fields - ignore - if (!$scope.passwordAndConfirmPasswordEntered()) return; - - if ($scope.pwdChange) { - if ($scope.password != $scope.confirmPassword) { - Notifications.error($translate.instant('user.password.error.not-matching')); - return; - } - } - - var msgTitle = ($scope.hasPassword ? $translate.instant('user.password.reset.confirm.title') : $translate.instant('user.password.set.confirm.title')); - var msg = ($scope.hasPassword ? $translate.instant('user.password.reset.confirm.message') : $translate.instant('user.password.set.confirm.message')); - var msgSuccess = ($scope.hasPassword ? $translate.instant('user.password.reset.success') : $translate.instant('user.password.set.success')); - - Dialog.confirm(msgTitle, msg, function() { - UserCredentials.resetPassword({ realm: realm.realm, userId: user.id }, { type : "password", value : $scope.password, temporary: $scope.temporaryPassword }, function() { - Notifications.success(msgSuccess); - $scope.password = null; - $scope.confirmPassword = null; - $route.reload(); - }); - }, function() { - $scope.password = null; - $scope.confirmPassword = null; - }); - }; - - $scope.passwordAndConfirmPasswordEntered = function() { - return $scope.password && $scope.confirmPassword; - } - - $scope.disableCredentialTypes = function() { - Dialog.confirm( - $translate.instant('user.credential.disable.confirm.title'), - $translate.instant('user.credential.disable.confirm.message'), - function() { - UserCredentials.disableCredentialTypes({ realm: realm.realm, userId: user.id }, $scope.disableableCredentialTypes, function() { - $route.reload(); - Notifications.success($translate.instant('user.credential.disable.confirm.success')); - }, function() { - Notifications.error($translate.instant('user.credential.disable.confirm.error')); - }); - }); - }; - - $scope.emailActions = []; - $scope.emailActionsTimeout = TimeUnit2.asUnit(realm.actionTokenGeneratedByAdminLifespan); - $scope.disableableCredentialTypes = []; - - $scope.sendExecuteActionsEmail = function() { - if ($scope.changed) { - Dialog.message($translate.instant('user.actions-email.send.pending-changes.title'), - $translate.instant('user.actions-email.send.pending-changes.message')); - return; - } - Dialog.confirm( - $translate.instant('user.actions-email.send.confirm.title'), - $translate.instant('user.actions-email.send.confirm.message'), - function() { - UserExecuteActionsEmail.update({ realm: realm.realm, userId: user.id, lifespan: $scope.emailActionsTimeout.toSeconds() }, $scope.emailActions, function() { - Notifications.success($translate.instant('user.actions-email.send.confirm.success')); - }, function() { - Notifications.error($translate.instant('user.actions-email.send.confirm.error')); - }); - }); - }; - - - - $scope.$watch('user', function() { - if (!angular.equals($scope.user, user)) { - $scope.userChange = true; - } else { - $scope.userChange = false; - } - }, true); - - $scope.$watch('password', function() { - if (!!$scope.password){ - $scope.pwdChange = true; - } else { - $scope.pwdChange = false; - } - }, true); - - $scope.reset = function() { - $scope.password = ""; - $scope.confirmPassword = ""; - - $scope.user = angular.copy(user); - - $scope.isTotp = false; - if(!!user.totp){ - $scope.isTotp = user.totp; - } - - $scope.pwdChange = false; - $scope.userChange = false; - }; -}); - -module.controller('UserCredentialsDataModalCtrl', function($scope, credentialData) { - $scope.credentialData = credentialData; - - $scope.keys = function(object) { - return object ? Object.keys(object) : []; - } -}); - -module.controller('UserFederationCtrl', function($scope, $location, $route, realm, serverInfo, Components, Notifications, Dialog, $translate) { - console.log('UserFederationCtrl ++++****'); - $scope.realm = realm; - $scope.providers = serverInfo.componentTypes['org.keycloak.storage.UserStorageProvider']; - $scope.instancesLoaded = false; - - if (!$scope.providers) $scope.providers = []; - - $scope.addProvider = function(provider) { - console.log('Add provider: ' + provider.id); - $location.url("/create/user-storage/" + realm.realm + "/providers/" + provider.id); - }; - - $scope.getInstanceLink = function(instance) { - return "/realms/" + realm.realm + "/user-storage/providers/" + instance.providerId + "/" + instance.id; - } - - $scope.getInstanceName = function(instance) { - return instance.name; - } - $scope.getInstanceProvider = function(instance) { - return instance.providerId; - } - - $scope.isProviderEnabled = function(instance) { - return !instance.config['enabled'] || instance.config['enabled'][0] == 'true'; - } - - $scope.getInstancePriority = function(instance) { - if (!instance.config['priority']) { - console.log('getInstancePriority is undefined'); - return -1; - } - return +instance.config['priority'][0]; - } - - Components.query({realm: realm.realm, - parent: realm.id, - type: 'org.keycloak.storage.UserStorageProvider' - }, function(data) { - $scope.instances = data; - $scope.instancesLoaded = true; - }); - - $scope.removeInstance = function(instance) { - Dialog.confirmWithButtonText( - $translate.instant('user.storage.remove.confirm.title', {name: instance.name}), - $translate.instant('user.storage.remove.confirm.message', {name: instance.name}), - $translate.instant('dialogs.delete.confirm'), - function() { - Components.remove({ - realm : realm.realm, - componentId : instance.id - }, function() { - $route.reload(); - Notifications.success($translate.instant('user.storage.remove.success')); - }); - } - ); - }; -}); - -module.controller('GenericUserStorageCtrl', function($scope, $location, Notifications, $route, Dialog, realm, - serverInfo, instance, providerId, Components, UserStorageOperations, $translate) { - console.log('GenericUserStorageCtrl'); - console.log('providerId: ' + providerId); - $scope.create = !instance.providerId; - console.log('create: ' + $scope.create); - var providers = serverInfo.componentTypes['org.keycloak.storage.UserStorageProvider']; - console.log('providers length ' + providers.length); - var providerFactory = null; - for (var i = 0; i < providers.length; i++) { - var p = providers[i]; - console.log('provider: ' + p.id); - if (p.id == providerId) { - $scope.providerFactory = p; - providerFactory = p; - break; - } - - } - $scope.showSync = false; - $scope.changed = false; - - console.log("providerFactory: " + providerFactory.id); - - function initUserStorageSettings() { - if ($scope.create) { - $scope.changed = true; - instance.name = providerFactory.id; - instance.providerId = providerFactory.id; - instance.providerType = 'org.keycloak.storage.UserStorageProvider'; - instance.parentId = realm.id; - instance.config = { - - }; - instance.config['priority'] = ["0"]; - instance.config['enabled'] = ["true"]; - - $scope.fullSyncEnabled = false; - $scope.changedSyncEnabled = false; - if (providerFactory.metadata.synchronizable) { - instance.config['fullSyncPeriod'] = ['-1']; - instance.config['changedSyncPeriod'] = ['-1']; - - } - instance.config['cachePolicy'] = ['DEFAULT']; - instance.config['evictionDay'] = ['']; - instance.config['evictionHour'] = ['']; - instance.config['evictionMinute'] = ['']; - instance.config['maxLifespan'] = ['']; - if (providerFactory.properties) { - - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (configProperty.defaultValue) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } else { - instance.config[configProperty.name] = ['']; - } - - } - } - - } else { - $scope.changed = false; - $scope.fullSyncEnabled = (instance.config['fullSyncPeriod'] && instance.config['fullSyncPeriod'][0] > 0); - $scope.changedSyncEnabled = (instance.config['changedSyncPeriod'] && instance.config['changedSyncPeriod'][0]> 0); - if (providerFactory.metadata.synchronizable) { - if (!instance.config['fullSyncPeriod']) { - console.log('setting to -1'); - instance.config['fullSyncPeriod'] = ['-1']; - - } - if (!instance.config['changedSyncPeriod']) { - console.log('setting to -1'); - instance.config['changedSyncPeriod'] = ['-1']; - - } - } - if (!instance.config['enabled']) { - instance.config['enabled'] = ['true']; - } - if (!instance.config['cachePolicy']) { - instance.config['cachePolicy'] = ['DEFAULT']; - - } - if (!instance.config['evictionDay']) { - instance.config['evictionDay'] = ['']; - - } - if (!instance.config['evictionHour']) { - instance.config['evictionHour'] = ['']; - - } - if (!instance.config['evictionMinute']) { - instance.config['evictionMinute'] = ['']; - - } - if (!instance.config['maxLifespan']) { - instance.config['maxLifespan'] = ['']; - - } - if (!instance.config['priority']) { - instance.config['priority'] = ['0']; - } - - if (providerFactory.properties) { - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (!instance.config[configProperty.name]) { - instance.config[configProperty.name] = ['']; - } - } - } - - } - if (providerFactory.metadata.synchronizable) { - if (instance.config && instance.config['importEnabled']) { - $scope.showSync = instance.config['importEnabled'][0] == 'true'; - } else { - $scope.showSync = true; - } - } - - } - - initUserStorageSettings(); - $scope.instance = angular.copy(instance); - $scope.realm = realm; - - $scope.$watch('instance', function() { - if (!angular.equals($scope.instance, instance)) { - $scope.changed = true; - } - - }, true); - - $scope.$watch('fullSyncEnabled', function(newVal, oldVal) { - if (oldVal == newVal) { - return; - } - - $scope.instance.config['fullSyncPeriod'][0] = $scope.fullSyncEnabled ? "604800" : "-1"; - $scope.changed = true; - }); - - $scope.$watch('changedSyncEnabled', function(newVal, oldVal) { - if (oldVal == newVal) { - return; - } - - $scope.instance.config['changedSyncPeriod'][0] = $scope.changedSyncEnabled ? "86400" : "-1"; - $scope.changed = true; - }); - - - $scope.save = function() { - console.log('save provider'); - $scope.changed = false; - if ($scope.create) { - console.log('saving new provider'); - Components.save({realm: realm.realm}, $scope.instance, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/user-storage/providers/" + $scope.instance.providerId + "/" + id); - Notifications.success($translate.instant('user.storage.create.success')); - }); - } else { - console.log('update existing provider'); - Components.update({realm: realm.realm, - componentId: instance.id - }, - $scope.instance, function () { - $route.reload(); - Notifications.success($translate.instant('user.storage.edit.success')); - }); - } - }; - - $scope.reset = function() { - //initUserStorageSettings(); - //$scope.instance = angular.copy(instance); - $route.reload(); - }; - - $scope.cancel = function() { - console.log('cancel'); - if ($scope.create) { - $location.url("/realms/" + realm.realm + "/user-federation"); - } else { - $route.reload(); - } - }; - - $scope.triggerFullSync = function() { - console.log('GenericCtrl: triggerFullSync'); - triggerSync('triggerFullSync'); - } - - $scope.triggerChangedUsersSync = function() { - console.log('GenericCtrl: triggerChangedUsersSync'); - triggerSync('triggerChangedUsersSync'); - } - - function triggerSync(action) { - UserStorageOperations.sync.save({ action: action, realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success($translate.instant('user.storage.sync.success',{status: syncResult.status})); - }, function() { - $route.reload(); - Notifications.error($translate.instant('user.storage.sync.error')); - }); - } - $scope.removeImportedUsers = function() { - UserStorageOperations.removeImportedUsers.save({ realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success($translate.instant('user.storage.remove-users.success')); - }, function() { - $route.reload(); - Notifications.error($translate.instant('user.storage.remove-users.error')); - }); - }; - $scope.unlinkUsers = function() { - UserStorageOperations.unlinkUsers.save({ realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success($translate.instant('user.storage.unlink.success')); - }, function() { - $route.reload(); - Notifications.error($translate.instant('user.storage.unlink.error')); - }); - }; - -}); - - -function removeGroupMember(groups, member) { - for (var j = 0; j < groups.length; j++) { - //console.log('checking: ' + groups[j].path); - if (member.path == groups[j].path) { - groups.splice(j, 1); - break; - } - if (groups[j].subGroups && groups[j].subGroups.length > 0) { - //console.log('going into subgroups'); - removeGroupMember(groups[j].subGroups, member); - } - } -} - -module.controller('UserGroupMembershipCtrl', function($scope, $q, realm, user, UserGroupMembership, UserGroupMembershipCount, UserGroupMapping, Notifications, Groups, GroupsCount, ComponentUtils, $translate) { - $scope.realm = realm; - $scope.user = user; - $scope.groupList = []; - $scope.allGroupMemberships = []; - $scope.groupMemberships = []; - $scope.tree = []; - $scope.membershipTree = []; - - $scope.searchCriteria = ''; - $scope.searchCriteriaMembership = ''; - $scope.currentPage = 1; - $scope.currentMembershipPage = 1; - $scope.currentPageInput = $scope.currentPage; - $scope.currentMembershipPageInput = $scope.currentMembershipPage; - $scope.pageSize = 20; - $scope.numberOfPages = 1; - $scope.numberOfMembershipPages = 1; - - var refreshCompleteUserGroupMembership = function() { - var queryParams = { - realm : realm.realm, - userId: user.id - }; - - var promiseGetCompleteUserGroupMembership = $q.defer(); - UserGroupMembership.query(queryParams, function(entry) { - promiseGetCompleteUserGroupMembership.resolve(entry); - }, function() { - promiseGetCompleteUserGroupMembership.reject($translate.instant('user.groups.fetch.all.error', {params: queryParams})); - }); - promiseGetCompleteUserGroupMembership.promise.then(function(groups) { - for (var i = 0; i < groups.length; i++) { - $scope.allGroupMemberships.push(groups[i]); - $scope.getGroupClass(groups[i]); - } - }, function (failed) { - Notifications.error(failed); - }); - return promiseGetCompleteUserGroupMembership.promise; - }; - - var refreshUserGroupMembership = function (search) { - $scope.currentMembershipPageInput = $scope.currentMembershipPage; - var first = ($scope.currentMembershipPage * $scope.pageSize) - $scope.pageSize; - var queryParams = { - realm : realm.realm, - userId: user.id, - first : first, - max : $scope.pageSize - }; - - var countParams = { - realm : realm.realm, - userId: user.id - }; - - var isSearch = function() { - return angular.isDefined(search) && search !== ''; - }; - - if (isSearch()) { - queryParams.search = search; - countParams.search = search; - } - - var promiseGetUserGroupMembership = $q.defer(); - UserGroupMembership.query(queryParams, function(entry) { - promiseGetUserGroupMembership.resolve(entry); - }, function() { - promiseGetUserGroupMembership.reject($translate.instant('user.groups.fetch.error', {params: queryParams})); - }); - - var promiseMembershipCount = $q.defer(); - - promiseGetUserGroupMembership.promise.then(function(groups) { - $scope.groupMemberships = groups; - UserGroupMembershipCount.query(countParams, function(entry) { - promiseMembershipCount.resolve(entry); - }, function() { - promiseMembershipCount.reject($translate.instant('user.groups.fetch.error', {params: countParams})); - }); - promiseMembershipCount.promise.then(function(membershipEntry) { - if(angular.isDefined(membershipEntry.count) && membershipEntry.count > $scope.pageSize) { - $scope.numberOfMembershipPages = Math.ceil(membershipEntry.count/$scope.pageSize); - } else { - $scope.numberOfMembershipPages = 1; - } - if (parseInt($scope.currentMembershipPage, 10) > $scope.numberOfMembershipPages) { - $scope.currentMembershipPage = $scope.numberOfMembershipPages; - } - }, function (failed) { - Notifications.error(failed); - }); - }, function (failed) { - Notifications.error(failed); - }); - - return promiseMembershipCount.promise; - }; - - var refreshAvailableGroups = function (search) { - $scope.currentPageInput = $scope.currentPage; - var first = ($scope.currentPage * $scope.pageSize) - $scope.pageSize; - var queryParams = { - realm : realm.realm, - first : first, - max : $scope.pageSize - }; - - var countParams = { - realm : realm.realm, - top : 'true' - }; - - if(angular.isDefined(search) && search !== '') { - queryParams.search = search; - countParams.search = search; - } - - var promiseGetGroups = $q.defer(); - Groups.query(queryParams, function(entry) { - promiseGetGroups.resolve(entry); - }, function() { - promiseGetGroups.reject($translate.instant('user.groups.fetch.error', {params: queryParams})); - }); - - var promiseCount = $q.defer(); - - promiseGetGroups.promise.then(function(groups) { - $scope.groupList = ComponentUtils.sortGroups('name', groups); - GroupsCount.query(countParams, function(entry) { - promiseCount.resolve(entry); - }, function() { - promiseCount.reject($translate.instant('user.groups.fetch.error', {params: countParams})); - }); - promiseCount.promise.then(function(entry) { - if(angular.isDefined(entry.count) && entry.count > $scope.pageSize) { - $scope.numberOfPages = Math.ceil(entry.count/$scope.pageSize); - } else { - $scope.numberOfPages = 1; - } - }, function (failed) { - Notifications.error(failed); - }); - }, function (failed) { - Notifications.error(failed); - }); - - return promiseCount.promise; - }; - - $scope.clearSearchMembership = function() { - $scope.searchCriteriaMembership = ''; - if (parseInt($scope.currentMembershipPage, 10) === 1) { - refreshUserGroupMembership(); - } else { - $scope.currentMembershipPage = 1; - } - }; - - $scope.searchGroupMembership = function() { - if (parseInt($scope.currentMembershipPage, 10) === 1) { - refreshUserGroupMembership($scope.searchCriteriaMembership); - } else { - $scope.currentMembershipPage = 1; - } - }; - - refreshUserGroupMembership().then(function() { - refreshAvailableGroups(); - refreshCompleteUserGroupMembership(); - }); - - $scope.$watch('currentPage', function(newValue, oldValue) { - if(parseInt(newValue, 10) !== parseInt(oldValue, 10)) { - refreshAvailableGroups($scope.searchCriteria); - } - }); - - $scope.$watch('currentMembershipPage', function(newValue, oldValue) { - if(parseInt(newValue, 10) !== parseInt(oldValue, 10)) { - refreshUserGroupMembership($scope.searchCriteriaMembership); - } - }); - - $scope.clearSearch = function() { - $scope.searchCriteria = ''; - if (parseInt($scope.currentPage, 10) === 1) { - refreshAvailableGroups(); - } else { - $scope.currentPage = 1; - } - }; - - $scope.searchGroup = function() { - if (parseInt($scope.currentPage, 10) === 1) { - refreshAvailableGroups($scope.searchCriteria); - } else { - $scope.currentPage = 1; - } - }; - - $scope.joinGroup = function() { - if (!$scope.tree.currentNode) { - Notifications.error($translate.instant('user.groups.join.error.no-group-selected')); - return; - } - if (isMember($scope.tree.currentNode)) { - Notifications.error($translate.instant('user.groups.join.error.already-added')); - return; - } - UserGroupMapping.update({realm: realm.realm, userId: user.id, groupId: $scope.tree.currentNode.id}, function() { - $scope.allGroupMemberships.push($scope.tree.currentNode); - refreshUserGroupMembership($scope.searchCriteriaMembership); - Notifications.success($translate.instant('user.groups.join.success')); - }); - - }; - - $scope.leaveGroup = function() { - if (!$scope.membershipTree.currentNode) { - Notifications.error($translate.instant('user.groups.leave.error.no-group-selected')); - return; - } - UserGroupMapping.remove({realm: realm.realm, userId: user.id, groupId: $scope.membershipTree.currentNode.id}, function () { - removeGroupMember($scope.allGroupMemberships, $scope.membershipTree.currentNode); - refreshUserGroupMembership($scope.searchCriteriaMembership); - Notifications.success($translate.instant('user.groups.leave.success')); - }); - - }; - - var isLeaf = function(node) { - return node.id !== 'realm' && (!node.subGroups || node.subGroups.length === 0); - }; - - var isMember = function(node) { - for (var i = 0; i < $scope.allGroupMemberships.length; i++) { - var member = $scope.allGroupMemberships[i]; - if (node.id === member.id) { - return true; - } - } - return false; - }; - - $scope.getGroupClass = function(node) { - if (node.id == "realm") { - return 'pficon pficon-users'; - } - if (isMember(node)) { - return 'normal deactivate'; - } - if (isLeaf(node)) { - return 'normal'; - } - if (node.subGroups.length && node.collapsed) return 'collapsed'; - if (node.subGroups.length && !node.collapsed) return 'expanded'; - return 'collapsed'; - - } - - $scope.getSelectedClass = function(node) { - if (node.selected) { - if (isMember(node)) { - return "deactivate_selected"; - } else { - return 'selected'; - } - } else if ($scope.cutNode && $scope.cutNode.id === node.id) { - return 'cut'; - } - return undefined; - } - -}); - -module.controller('LDAPUserStorageCtrl', function($scope, $location, Notifications, $route, Dialog, realm, - serverInfo, instance, Components, UserStorageOperations, - RealmLDAPConnectionTester, $http) { - console.log('LDAPUserStorageCtrl'); - var providerId = 'ldap'; - console.log('providerId: ' + providerId); - $scope.create = !instance.providerId; - console.log('create: ' + $scope.create); - var providers = serverInfo.componentTypes['org.keycloak.storage.UserStorageProvider']; - console.log('providers length ' + providers.length); - var providerFactory = null; - for (var i = 0; i < providers.length; i++) { - var p = providers[i]; - console.log('provider: ' + p.id); - if (p.id == providerId) { - $scope.providerFactory = p; - providerFactory = p; - break; - } - - } - - $scope.provider = instance; - $scope.showSync = false; - - if (serverInfo.profileInfo.name == 'community') { - $scope.ldapVendors = [ - {"id": "ad", "name": "Active Directory"}, - {"id": "rhds", "name": "Red Hat Directory Server"}, - {"id": "tivoli", "name": "Tivoli"}, - {"id": "edirectory", "name": "Novell eDirectory"}, - {"id": "other", "name": "Other"} - ]; - } else { - $scope.ldapVendors = [ - {"id": "ad", "name": "Active Directory"}, - {"id": "rhds", "name": "Red Hat Directory Server"} - ]; - } - - $scope.authTypes = [ - { "id": "none", "name": "none" }, - { "id": "simple", "name": "simple" } - ]; - - $scope.searchScopes = [ - { "id": "1", "name": "One Level" }, - { "id": "2", "name": "Subtree" } - ]; - - $scope.useTruststoreOptions = [ - { "id": "always", "name": "Always" }, - { "id": "ldapsOnly", "name": "Only for ldaps" }, - { "id": "never", "name": "Never" } - ]; - - var DEFAULT_BATCH_SIZE = "1000"; - - - console.log("providerFactory: " + providerFactory.id); - - $scope.changed = false; - function initUserStorageSettings() { - if ($scope.create) { - $scope.changed = true; - instance.name = 'ldap'; - instance.providerId = 'ldap'; - instance.providerType = 'org.keycloak.storage.UserStorageProvider'; - instance.parentId = realm.id; - instance.config = { - - }; - instance.config['enabled'] = ["true"]; - instance.config['priority'] = ["0"]; - - $scope.fullSyncEnabled = false; - $scope.changedSyncEnabled = false; - instance.config['fullSyncPeriod'] = ['-1']; - instance.config['changedSyncPeriod'] = ['-1']; - instance.config['cachePolicy'] = ['DEFAULT']; - instance.config['evictionDay'] = ['']; - instance.config['evictionHour'] = ['']; - instance.config['evictionMinute'] = ['']; - instance.config['maxLifespan'] = ['']; - instance.config['batchSizeForSync'] = [DEFAULT_BATCH_SIZE]; - //instance.config['importEnabled'] = ['true']; - - if (providerFactory.properties) { - - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (configProperty.defaultValue) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } else { - instance.config[configProperty.name] = ['']; - } - - } - } - - - } else { - $scope.changed = false; - $scope.fullSyncEnabled = (instance.config['fullSyncPeriod'] && instance.config['fullSyncPeriod'][0] > 0); - $scope.changedSyncEnabled = (instance.config['changedSyncPeriod'] && instance.config['changedSyncPeriod'][0]> 0); - if (!instance.config['fullSyncPeriod']) { - console.log('setting to -1'); - instance.config['fullSyncPeriod'] = ['-1']; - - } - if (!instance.config['enabled']) { - instance.config['enabled'] = ['true']; - } - if (!instance.config['changedSyncPeriod']) { - console.log('setting to -1'); - instance.config['changedSyncPeriod'] = ['-1']; - - } - if (!instance.config['cachePolicy']) { - instance.config['cachePolicy'] = ['DEFAULT']; - - } - if (!instance.config['evictionDay']) { - instance.config['evictionDay'] = ['']; - - } - if (!instance.config['evictionHour']) { - instance.config['evictionHour'] = ['']; - - } - if (!instance.config['evictionMinute']) { - instance.config['evictionMinute'] = ['']; - - } - if (!instance.config['maxLifespan']) { - instance.config['maxLifespan'] = ['']; - - } - if (!instance.config['priority']) { - instance.config['priority'] = ['0']; - } - if (!instance.config['importEnabled']) { - instance.config['importEnabled'] = ['true']; - } - - if (providerFactory.properties) { - - for (var i = 0; i < providerFactory.properties.length; i++) { - var configProperty = providerFactory.properties[i]; - if (!instance.config[configProperty.name]) { - if (configProperty.defaultValue) { - instance.config[configProperty.name] = [configProperty.defaultValue]; - } else { - instance.config[configProperty.name] = ['']; - } - } - - } - } - - for (var i=0 ; i<$scope.ldapVendors.length ; i++) { - if ($scope.ldapVendors[i].id === instance.config['vendor'][0]) { - $scope.vendorName = $scope.ldapVendors[i].name; - } - }; - - - - } - if (instance.config && instance.config['importEnabled']) { - $scope.showSync = instance.config['importEnabled'][0] == 'true'; - } else { - $scope.showSync = true; - } - - $scope.lastVendor = instance.config['vendor'][0]; - } - - initUserStorageSettings(); - $scope.instance = angular.copy(instance); - $scope.realm = realm; - - $scope.$watch('instance', function() { - if (!angular.equals($scope.instance, instance)) { - $scope.changed = true; - } - - if (!angular.equals($scope.instance.config['vendor'][0], $scope.lastVendor)) { - console.log("LDAP vendor changed. Previous=" + $scope.lastVendor + " New=" + $scope.instance.config['vendor'][0]); - $scope.lastVendor = $scope.instance.config['vendor'][0]; - - if ($scope.lastVendor === "ad") { - $scope.instance.config['usernameLDAPAttribute'][0] = "cn"; - $scope.instance.config['userObjectClasses'][0] = "person, organizationalPerson, user"; - } else { - $scope.instance.config['usernameLDAPAttribute'][0] = "uid"; - $scope.instance.config['userObjectClasses'][0] = "inetOrgPerson, organizationalPerson"; - } - - $scope.instance.config['rdnLDAPAttribute'][0] = $scope.instance.config['usernameLDAPAttribute'][0]; - - var vendorToUUID = { - rhds: "nsuniqueid", - tivoli: "uniqueidentifier", - edirectory: "guid", - ad: "objectGUID", - other: "entryUUID" - }; - $scope.instance.config['uuidLDAPAttribute'][0] = vendorToUUID[$scope.lastVendor]; - } - - - }, true); - - $scope.$watch('fullSyncEnabled', function(newVal, oldVal) { - if (oldVal == newVal) { - return; - } - - $scope.instance.config['fullSyncPeriod'][0] = $scope.fullSyncEnabled ? "604800" : "-1"; - $scope.changed = true; - }); - - $scope.$watch('changedSyncEnabled', function(newVal, oldVal) { - if (oldVal == newVal) { - return; - } - - $scope.instance.config['changedSyncPeriod'][0] = $scope.changedSyncEnabled ? "86400" : "-1"; - $scope.changed = true; - }); - - - $scope.save = function() { - $scope.changed = false; - if (!$scope.instance.config['batchSizeForSync'] || !parseInt($scope.instance.config['batchSizeForSync'][0])) { - $scope.instance.config['batchSizeForSync'] = [ DEFAULT_BATCH_SIZE ]; - } else { - $scope.instance.config['batchSizeForSync'][0] = parseInt($scope.instance.config.batchSizeForSync).toString(); - } - - if ($scope.create) { - Components.save({realm: realm.realm}, $scope.instance, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/user-storage/providers/" + $scope.instance.providerId + "/" + id); - Notifications.success("The provider has been created."); - }); - } else { - Components.update({realm: realm.realm, - componentId: instance.id - }, - $scope.instance, function () { - $route.reload(); - Notifications.success("The provider has been updated."); - }); - } - }; - - $scope.reset = function() { - $route.reload(); - }; - - $scope.cancel = function() { - if ($scope.create) { - $location.url("/realms/" + realm.realm + "/user-federation"); - } else { - $route.reload(); - } - }; - - $scope.triggerFullSync = function() { - console.log('GenericCtrl: triggerFullSync'); - triggerSync('triggerFullSync'); - } - - $scope.triggerChangedUsersSync = function() { - console.log('GenericCtrl: triggerChangedUsersSync'); - triggerSync('triggerChangedUsersSync'); - } - - - function triggerSync(action) { - UserStorageOperations.sync.save({ action: action, realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success("Sync of users finished successfully. " + syncResult.status); - }, function() { - $route.reload(); - Notifications.error("Error during sync of users"); - }); - } - $scope.removeImportedUsers = function() { - UserStorageOperations.removeImportedUsers.save({ realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success("Remove imported users finished successfully. "); - }, function() { - $route.reload(); - Notifications.error("Error during remove"); - }); - }; - $scope.unlinkUsers = function() { - UserStorageOperations.unlinkUsers.save({ realm: $scope.realm.realm, componentId: $scope.instance.id }, {}, function(syncResult) { - $route.reload(); - Notifications.success("Unlink of users finished successfully. "); - }, function() { - $route.reload(); - Notifications.error("Error during unlink"); - }); - }; - - var initConnectionTest = function(testAction, ldapConfig) { - return { - action: testAction, - connectionUrl: ldapConfig.connectionUrl && ldapConfig.connectionUrl[0], - authType: ldapConfig.authType && ldapConfig.authType[0], - bindDn: ldapConfig.bindDn && ldapConfig.bindDn[0], - bindCredential: ldapConfig.bindCredential && ldapConfig.bindCredential[0], - useTruststoreSpi: ldapConfig.useTruststoreSpi && ldapConfig.useTruststoreSpi[0], - connectionTimeout: ldapConfig.connectionTimeout && ldapConfig.connectionTimeout[0], - startTls: ldapConfig.startTls && ldapConfig.startTls[0], - componentId: instance.id - }; - }; - - $scope.testConnection = function() { - console.log('LDAPCtrl: testConnection'); - RealmLDAPConnectionTester.save({realm: realm.realm}, initConnectionTest("testConnection", $scope.instance.config), function() { - Notifications.success("LDAP connection successful."); - }, function() { - Notifications.error("Error when trying to connect to LDAP. See server.log for details."); - }); - } - - $scope.testAuthentication = function() { - console.log('LDAPCtrl: testAuthentication'); - RealmLDAPConnectionTester.save({realm: realm.realm}, initConnectionTest("testAuthentication", $scope.instance.config), function() { - Notifications.success("LDAP authentication successful."); - }, function() { - Notifications.error("LDAP authentication failed. See server.log for details"); - }); - } - - $scope.queryAndSetLdapSupportedExtensions = function() { - console.log('LDAPCtrl: getLdapSupportedExtensions'); - const PASSWORD_MODIFY_OID = '1.3.6.1.4.1.4203.1.11.1'; - - $http.post( - authUrl + '/admin/realms/' + realm.realm + '/ldap-server-capabilities', - initConnectionTest("queryServerCapabilities", $scope.instance.config)).then( - function(response) { - Notifications.success("LDAP supported extensions successfully requested."); - const ldapOids = response.data; - if (angular.isArray(ldapOids)) { - const passwordModifyOid = ldapOids.filter(function(ldapOid) { return ldapOid.oid === PASSWORD_MODIFY_OID; }); - $scope.instance.config['usePasswordModifyExtendedOp'][0] = (passwordModifyOid.length > 0).toString(); - } - }, - function() { - Notifications.error("Error when trying to request supported extensions of LDAP. See server.log for details."); - }); - } - -}); - -module.controller('LDAPTabCtrl', function(Dialog, $scope, Current, Notifications, $location) { - $scope.removeUserFederation = function() { - Dialog.confirmDelete($scope.instance.name, 'ldap provider', function() { - $scope.instance.$remove({ - realm : Current.realm.realm, - componentId : $scope.instance.id - }, function() { - $location.url("/realms/" + Current.realm.realm + "/user-federation"); - Notifications.success("The provider has been deleted."); - }); - }); - }; -}); - - -module.controller('LDAPMapperListCtrl', function($scope, $location, Notifications, $route, Dialog, realm, provider, mappers) { - console.log('LDAPMapperListCtrl'); - - $scope.realm = realm; - $scope.provider = provider; - $scope.instance = provider; - - $scope.mappers = mappers; - -}); - -module.controller('LDAPMapperCtrl', function($scope, $route, realm, provider, mapperTypes, mapper, clients, Components, LDAPMapperSync, Notifications, Dialog, $location) { - console.log('LDAPMapperCtrl'); - $scope.realm = realm; - $scope.provider = provider; - $scope.clients = clients; - $scope.create = false; - $scope.changed = false; - - for (var i = 0; i < mapperTypes.length; i++) { - console.log('mapper.providerId: ' + mapper.providerId); - console.log('mapperTypes[i].id ' + mapperTypes[i].id); - if (mapperTypes[i].id == mapper.providerId) { - $scope.mapperType = mapperTypes[i]; - break; - } - } - - if ($scope.mapperType.properties) { - - for (var i = 0; i < $scope.mapperType.properties.length; i++) { - var configProperty = $scope.mapperType.properties[i]; - if (!mapper.config[configProperty.name]) { - if (configProperty.defaultValue) { - mapper.config[configProperty.name] = [configProperty.defaultValue]; - } else { - mapper.config[configProperty.name] = ['']; - } - } - - } - } - $scope.mapper = angular.copy(mapper); - - - $scope.$watch('mapper', function() { - if (!angular.equals($scope.mapper, mapper)) { - $scope.changed = true; - } - }, true); - - $scope.save = function() { - Components.update({realm: realm.realm, - componentId: mapper.id - }, - $scope.mapper, function () { - $route.reload(); - Notifications.success("The mapper has been updated."); - }); - }; - - $scope.reset = function() { - $scope.mapper = angular.copy(mapper); - $scope.changed = false; - }; - - $scope.remove = function() { - Dialog.confirmDelete($scope.mapper.name, 'ldap mapper', function() { - Components.remove({ - realm : realm.realm, - componentId : mapper.id - }, function() { - $location.url("/realms/" + realm.realm + '/ldap-mappers/' + provider.id); - Notifications.success("The provider has been deleted."); - }); - }); - }; - - $scope.triggerFedToKeycloakSync = function() { - triggerMapperSync("fedToKeycloak") - } - - $scope.triggerKeycloakToFedSync = function() { - triggerMapperSync("keycloakToFed"); - } - - function triggerMapperSync(direction) { - LDAPMapperSync.save({ direction: direction, realm: realm.realm, parentId: provider.id, mapperId : $scope.mapper.id }, {}, function(syncResult) { - Notifications.success("Data synced successfully. " + syncResult.status); - }, function(error) { - Notifications.error(error.data.errorMessage); - }); - } - -}); - -module.controller('LDAPMapperCreateCtrl', function($scope, realm, provider, mapperTypes, clients, Components, Notifications, Dialog, $location) { - console.log('LDAPMapperCreateCtrl'); - $scope.realm = realm; - $scope.provider = provider; - $scope.clients = clients; - $scope.create = true; - $scope.mapper = { config: {}}; - $scope.mapperTypes = mapperTypes; - $scope.mapperType = null; - $scope.changed = true; - - $scope.$watch('mapperType', function() { - if ($scope.mapperType != null) { - $scope.mapper.config = {}; - if ($scope.mapperType.properties) { - - for (var i = 0; i < $scope.mapperType.properties.length; i++) { - var configProperty = $scope.mapperType.properties[i]; - if (!$scope.mapper.config[configProperty.name]) { - if (configProperty.defaultValue) { - $scope.mapper.config[configProperty.name] = [configProperty.defaultValue]; - } else { - $scope.mapper.config[configProperty.name] = ['']; - } - } - - } - } - } - }, true); - - $scope.save = function() { - if ($scope.mapperType == null) { - Notifications.error("You need to select mapper type!"); - return; - } - - $scope.mapper.providerId = $scope.mapperType.id; - $scope.mapper.providerType = 'org.keycloak.storage.ldap.mappers.LDAPStorageMapper'; - $scope.mapper.parentId = provider.id; - - if ($scope.mapper.config && $scope.mapper.config["role"] && !Array.isArray($scope.mapper.config["role"])) { - $scope.mapper.config["role"] = [$scope.mapper.config["role"]]; - } - - Components.save({realm: realm.realm}, $scope.mapper, function (data, headers) { - var l = headers().location; - var id = l.substring(l.lastIndexOf("/") + 1); - - $location.url("/realms/" + realm.realm + "/ldap-mappers/" + $scope.mapper.parentId + "/mappers/" + id); - Notifications.success("The mapper has been created."); - }); - }; - - $scope.reset = function() { - $location.url("/realms/" + realm.realm + '/ldap-mappers/' + provider.id); - }; - - -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/loaders.js b/deps/keycloak/themes/base/admin/resources/js/loaders.js deleted file mode 100644 index 1f8985259..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/loaders.js +++ /dev/null @@ -1,587 +0,0 @@ -'use strict'; - -var module = angular.module('keycloak.loaders', [ 'keycloak.services', 'ngResource' ]); - -module.factory('Loader', function($q) { - var loader = {}; - loader.get = function(service, id) { - return function() { - var i = id && id(); - var delay = $q.defer(); - service.get(i, function(entry) { - delay.resolve(entry); - }, function() { - delay.reject('Unable to fetch ' + i); - }); - return delay.promise; - }; - }; - loader.query = function(service, id) { - return function() { - var i = id && id(); - var delay = $q.defer(); - service.query(i, function(entry) { - delay.resolve(entry); - }, function() { - delay.reject('Unable to fetch ' + i); - }); - return delay.promise; - }; - }; - return loader; -}); - -module.factory('RealmListLoader', function(Loader, Realm, $q) { - return Loader.get(Realm); -}); - -module.factory('ServerInfoLoader', function(Loader, ServerInfo) { - return function() { - return ServerInfo.promise; - }; -}); - -module.factory('RealmLoader', function(Loader, Realm, $route, $q) { - return Loader.get(Realm, function() { - return { - id : $route.current.params.realm - } - }); -}); - -module.factory('RealmKeysLoader', function(Loader, RealmKeys, $route, $q) { - return Loader.get(RealmKeys, function() { - return { - id : $route.current.params.realm - } - }); -}); - -module.factory('RealmSpecificLocalesLoader', function(Loader, RealmSpecificLocales, $route, $q) { - return Loader.get(RealmSpecificLocales, function() { - return { - id : $route.current.params.realm - } - }); -}); - -module.factory('RealmSpecificlocalizationTextLoader', function(Loader, RealmSpecificLocalizationText, $route, $q) { - return Loader.get(RealmSpecificLocalizationText, function() { - return { - realm : $route.current.params.realm, - locale : $route.current.params.locale, - key: $route.current.params.key - } - }); -}); - -module.factory('RealmEventsConfigLoader', function(Loader, RealmEventsConfig, $route, $q) { - return Loader.get(RealmEventsConfig, function() { - return { - id : $route.current.params.realm - } - }); -}); - -module.factory('UserListLoader', function(Loader, User, $route, $q) { - return Loader.query(User, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('RequiredActionsListLoader', function(Loader, RequiredActions, $route, $q) { - return Loader.query(RequiredActions, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('UnregisteredRequiredActionsListLoader', function(Loader, UnregisteredRequiredActions, $route, $q) { - return Loader.query(UnregisteredRequiredActions, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('RealmSessionStatsLoader', function(Loader, RealmSessionStats, $route, $q) { - return Loader.get(RealmSessionStats, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('RealmClientSessionStatsLoader', function(Loader, RealmClientSessionStats, $route, $q) { - return Loader.query(RealmClientSessionStats, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('ClientProtocolMapperLoader', function(Loader, ClientProtocolMapper, $route, $q) { - return Loader.get(ClientProtocolMapper, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client, - id: $route.current.params.id - } - }); -}); - -module.factory('ClientScopeProtocolMapperLoader', function(Loader, ClientScopeProtocolMapper, $route, $q) { - return Loader.get(ClientScopeProtocolMapper, function() { - return { - realm : $route.current.params.realm, - clientScope : $route.current.params.clientScope, - id: $route.current.params.id - } - }); -}); - -module.factory('UserLoader', function(Loader, User, $route, $q) { - return Loader.get(User, function() { - return { - realm : $route.current.params.realm, - userId : $route.current.params.user - } - }); -}); - -module.factory('ComponentLoader', function(Loader, Components, $route, $q) { - return Loader.get(Components, function() { - return { - realm : $route.current.params.realm, - componentId: $route.current.params.componentId - } - }); -}); - -module.factory('LDAPMapperLoader', function(Loader, Components, $route, $q) { - return Loader.get(Components, function() { - return { - realm : $route.current.params.realm, - componentId: $route.current.params.mapperId - } - }); -}); - -module.factory('ComponentsLoader', function(Loader, Components, $route, $q) { - var componentsLoader = {}; - - componentsLoader.loadComponents = function(parent, componentType) { - return Loader.query(Components, function() { - return { - realm : $route.current.params.realm, - parent : parent, - type: componentType - } - })(); - }; - - return componentsLoader; -}); - -module.factory('SubComponentTypesLoader', function(Loader, SubComponentTypes, $route, $q) { - var componentsLoader = {}; - - componentsLoader.loadComponents = function(parent, componentType) { - return Loader.query(SubComponentTypes, function() { - return { - realm : $route.current.params.realm, - componentId : parent, - type: componentType - } - })(); - }; - - return componentsLoader; -}); - -module.factory('UserSessionStatsLoader', function(Loader, UserSessionStats, $route, $q) { - return Loader.get(UserSessionStats, function() { - return { - realm : $route.current.params.realm, - user : $route.current.params.user - } - }); -}); - -module.factory('UserSessionsLoader', function(Loader, UserSessions, $route, $q) { - return Loader.query(UserSessions, function() { - return { - realm : $route.current.params.realm, - user : $route.current.params.user - } - }); -}); - -module.factory('UserOfflineSessionsLoader', function(Loader, UserOfflineSessions, $route, $q) { - return Loader.query(UserOfflineSessions, function() { - return { - realm : $route.current.params.realm, - user : $route.current.params.user, - client : $route.current.params.client - } - }); -}); - -module.factory('UserFederatedIdentityLoader', function(Loader, UserFederatedIdentities, $route, $q) { - return Loader.query(UserFederatedIdentities, function() { - return { - realm : $route.current.params.realm, - user : $route.current.params.user - } - }); -}); - -module.factory('UserConsentsLoader', function(Loader, UserConsents, $route, $q) { - return Loader.query(UserConsents, function() { - return { - realm : $route.current.params.realm, - user : $route.current.params.user - } - }); -}); - - - -module.factory('RoleLoader', function(Loader, RoleById, $route, $q) { - return Loader.get(RoleById, function() { - return { - realm : $route.current.params.realm, - role : $route.current.params.role - } - }); -}); - -module.factory('RoleListLoader', function(Loader, Role, $route, $q) { - return Loader.query(Role, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('ClientRoleLoader', function(Loader, RoleById, $route, $q) { - return Loader.get(RoleById, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client, - role : $route.current.params.role - } - }); -}); - -module.factory('ClientSessionStatsLoader', function(Loader, ClientSessionStats, $route, $q) { - return Loader.get(ClientSessionStats, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientSessionCountLoader', function(Loader, ClientSessionCount, $route, $q) { - return Loader.get(ClientSessionCount, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientOfflineSessionCountLoader', function(Loader, ClientOfflineSessionCount, $route, $q) { - return Loader.get(ClientOfflineSessionCount, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientDefaultClientScopesLoader', function(Loader, ClientDefaultClientScopes, $route, $q) { - return Loader.query(ClientDefaultClientScopes, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientOptionalClientScopesLoader', function(Loader, ClientOptionalClientScopes, $route, $q) { - return Loader.query(ClientOptionalClientScopes, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientLoader', function(Loader, Client, $route, $q) { - return Loader.get(Client, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - -module.factory('ClientListLoader', function(Loader, Client, $route, $q) { - return Loader.query(Client, function() { - return { - realm : $route.current.params.realm, - first: 0, - max: 20 - } - }); -}); - -module.factory('ClientScopeLoader', function(Loader, ClientScope, $route, $q) { - return Loader.get(ClientScope, function() { - return { - realm : $route.current.params.realm, - clientScope : $route.current.params.clientScope - } - }); -}); - -module.factory('ClientScopeListLoader', function(Loader, ClientScope, $route, $q) { - return Loader.query(ClientScope, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('RealmDefaultClientScopesLoader', function(Loader, RealmDefaultClientScopes, $route, $q) { - return Loader.query(RealmDefaultClientScopes, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('RealmOptionalClientScopesLoader', function(Loader, RealmOptionalClientScopes, $route, $q) { - return Loader.query(RealmOptionalClientScopes, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('ClientServiceAccountUserLoader', function(Loader, ClientServiceAccountUser, $route, $q) { - return Loader.get(ClientServiceAccountUser, function() { - return { - realm : $route.current.params.realm, - client : $route.current.params.client - } - }); -}); - - -module.factory('RoleMappingLoader', function(Loader, RoleMapping, $route, $q) { - var realm = $route.current.params.realm || $route.current.params.client; - - return Loader.query(RoleMapping, function() { - return { - realm : realm, - role : $route.current.params.role - } - }); -}); - -module.factory('IdentityProviderLoader', function(Loader, IdentityProvider, $route, $q) { - return Loader.get(IdentityProvider, function () { - return { - realm: $route.current.params.realm, - alias: $route.current.params.alias - } - }); -}); - -module.factory('IdentityProviderFactoryLoader', function(Loader, IdentityProviderFactory, $route, $q) { - return Loader.get(IdentityProviderFactory, function () { - return { - realm: $route.current.params.realm, - provider_id: $route.current.params.provider_id - } - }); -}); - -module.factory('IdentityProviderMapperTypesLoader', function(Loader, IdentityProviderMapperTypes, $route, $q) { - return Loader.get(IdentityProviderMapperTypes, function () { - return { - realm: $route.current.params.realm, - alias: $route.current.params.alias - } - }); -}); - -module.factory('IdentityProviderMappersLoader', function(Loader, IdentityProviderMappers, $route, $q) { - return Loader.query(IdentityProviderMappers, function () { - return { - realm: $route.current.params.realm, - alias: $route.current.params.alias - } - }); -}); - -module.factory('IdentityProviderMapperLoader', function(Loader, IdentityProviderMapper, $route, $q) { - return Loader.get(IdentityProviderMapper, function () { - return { - realm: $route.current.params.realm, - alias: $route.current.params.alias, - mapperId: $route.current.params.mapperId - } - }); -}); - -module.factory('AuthenticationFlowsLoader', function(Loader, AuthenticationFlows, $route, $q) { - return Loader.query(AuthenticationFlows, function() { - return { - realm : $route.current.params.realm, - flow: '' - } - }); -}); - -module.factory('AuthenticationFormProvidersLoader', function(Loader, AuthenticationFormProviders, $route, $q) { - return Loader.query(AuthenticationFormProviders, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('AuthenticationFormActionProvidersLoader', function(Loader, AuthenticationFormActionProviders, $route, $q) { - return Loader.query(AuthenticationFormActionProviders, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('AuthenticatorProvidersLoader', function(Loader, AuthenticatorProviders, $route, $q) { - return Loader.query(AuthenticatorProviders, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('ClientAuthenticatorProvidersLoader', function(Loader, ClientAuthenticatorProviders, $route, $q) { - return Loader.query(ClientAuthenticatorProviders, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('AuthenticationFlowLoader', function(Loader, AuthenticationFlows, $route, $q) { - return Loader.get(AuthenticationFlows, function() { - return { - realm : $route.current.params.realm, - flow: $route.current.params.flow - } - }); -}); - -module.factory('AuthenticationConfigDescriptionLoader', function(Loader, AuthenticationConfigDescription, $route, $q) { - return Loader.get(AuthenticationConfigDescription, function () { - return { - realm: $route.current.params.realm, - provider: $route.current.params.provider - } - }); -}); - -module.factory('PerClientAuthenticationConfigDescriptionLoader', function(Loader, PerClientAuthenticationConfigDescription, $route, $q) { - return Loader.get(PerClientAuthenticationConfigDescription, function () { - return { - realm: $route.current.params.realm - } - }); -}); - -module.factory('ExecutionIdLoader', function($route) { - return function() { return $route.current.params.executionId; }; -}); - -module.factory('AuthenticationConfigLoader', function(Loader, AuthenticationConfig, $route, $q) { - return Loader.get(AuthenticationConfig, function () { - return { - realm: $route.current.params.realm, - config: $route.current.params.config - } - }); -}); - -module.factory('GroupListLoader', function(Loader, Groups, $route, $q) { - return Loader.query(Groups, function() { - return { - realm : $route.current.params.realm - } - }); -}); - -module.factory('GroupCountLoader', function(Loader, GroupsCount, $route, $q) { - return Loader.query(GroupsCount, function() { - return { - realm : $route.current.params.realm, - top : true - } - }); -}); - -module.factory('GroupLoader', function(Loader, Group, $route, $q) { - return Loader.get(Group, function() { - return { - realm : $route.current.params.realm, - groupId : $route.current.params.group - } - }); -}); - -module.factory('ClientInitialAccessLoader', function(Loader, ClientInitialAccess, $route) { - return Loader.query(ClientInitialAccess, function() { - return { - realm: $route.current.params.realm - } - }); -}); - -module.factory('ClientRegistrationPolicyProvidersLoader', function(Loader, ClientRegistrationPolicyProviders, $route) { - return Loader.query(ClientRegistrationPolicyProviders, function() { - return { - realm: $route.current.params.realm - } - }); -}); - -module.factory('ClientPoliciesProfilesLoader', function(Loader, ClientPoliciesProfiles, $route , $q) { - var clientPoliciesLoader = {}; - - clientPoliciesLoader.loadClientProfiles = function(includeGlobalProfiles) { - return Loader.get(ClientPoliciesProfiles, function() { - return { - realm : $route.current.params.realm, - includeGlobalProfiles : includeGlobalProfiles - } - })(); - }; - - return clientPoliciesLoader; -}); - -module.factory('ClientPoliciesLoader', function(Loader, ClientPolicies, $route) { - return Loader.get(ClientPolicies, function() { - return { - realm: $route.current.params.realm - } - }); -}); diff --git a/deps/keycloak/themes/base/admin/resources/js/services.js b/deps/keycloak/themes/base/admin/resources/js/services.js deleted file mode 100644 index 95487d111..000000000 --- a/deps/keycloak/themes/base/admin/resources/js/services.js +++ /dev/null @@ -1,2256 +0,0 @@ -'use strict'; - -var module = angular.module('keycloak.services', [ 'ngResource', 'ngRoute' ]); - -module.service('Dialog', function($modal, $translate) { - var dialog = {}; - - var openDialog = function(title, message, btns, template) { - var controller = function($scope, $modalInstance, title, message, btns) { - $scope.title = title; - $scope.message = message; - $scope.btns = btns; - - $scope.ok = function () { - $modalInstance.close(); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - }; - - return $modal.open({ - templateUrl: resourceUrl + template, - controller: controller, - resolve: { - title: function() { - return title; - }, - message: function() { - return message; - }, - btns: function() { - return btns; - } - } - }).result; - } - - var escapeHtml = function(str) { - var div = document.createElement('div'); - div.appendChild(document.createTextNode(str)); - return div.innerHTML; - }; - - dialog.confirmDelete = function(name, type, success) { - var title = $translate.instant('dialogs.delete.title', {type: escapeHtml(type.charAt(0).toUpperCase() + type.slice(1))}); - var msg = $translate.instant('dialogs.delete.message', {type: type, name: name}); - var confirm = $translate.instant('dialogs.delete.confirm'); - - dialog.confirmWithButtonText(title, msg, confirm, success); - } - - dialog.confirmGenerateKeys = function(name, type, success) { - var title = 'Generate new keys for realm'; - var msg = 'Are you sure you want to permanently generate new keys for ' + name + '?'; - var btns = { - ok: { - label: 'Generate Keys', - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, msg, btns, '/templates/kc-modal.html').then(success); - } - - dialog.confirm = function(title, message, success, cancel) { - dialog.confirmWithButtonText(title, message, title, success, cancel); - } - - dialog.confirmWithButtonText = function(title, message, confirm, success, cancel) { - var btns = { - ok: { - label: confirm, - cssClass: 'btn btn-danger' - }, - cancel: { - label: $translate.instant('dialogs.cancel'), - cssClass: 'btn btn-default' - } - } - - openDialog(title, message, btns, '/templates/kc-modal.html').then(success, cancel); - } - - dialog.message = function(title, message, success, cancel) { - var btns = { - ok: { - label: $translate.instant('dialogs.ok'), - cssClass: 'btn btn-default' - } - } - - openDialog(title, message, btns, '/templates/kc-modal-message.html').then(success, cancel); - } - - dialog.open = function(title, message, btns, success, cancel) { - openDialog(title, message, btns, '/templates/kc-modal.html').then(success, cancel); - } - - return dialog -}); - -module.service('CopyDialog', function($modal) { - var dialog = {}; - dialog.open = function (title, suggested, success) { - var controller = function($scope, $modalInstance, title) { - $scope.title = title; - $scope.name = { value: 'Copy of ' + suggested }; - $scope.ok = function () { - console.log('ok with name: ' + $scope.name); - $modalInstance.close(); - success($scope.name.value); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - } - $modal.open({ - templateUrl: resourceUrl + '/templates/kc-copy.html', - controller: controller, - resolve: { - title: function() { - return title; - } - } - }); - }; - return dialog; -}); - -module.service('UpdateDialog', function($modal) { - var dialog = {}; - dialog.open = function (title, name, desc, success) { - var controller = function($scope, $modalInstance, title) { - $scope.title = title; - $scope.name = { value: name }; - $scope.description = { value: desc }; - $scope.ok = function () { - console.log('ok with name: ' + $scope.name + 'and description: ' + $scope.description); - $modalInstance.close(); - success($scope.name.value, $scope.description.value); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - } - $modal.open({ - templateUrl: resourceUrl + '/templates/kc-edit.html', - controller: controller, - resolve: { - title: function() { - return title; - } - } - }); - }; - return dialog; -}); - -module.factory('Notifications', function($rootScope, $timeout, $translate) { - // time (in ms) the notifications are shown - var delay = 5000; - - var notifications = {}; - notifications.current = { display: false }; - notifications.current.remove = function() { - if (notifications.scheduled) { - $timeout.cancel(notifications.scheduled); - delete notifications.scheduled; - } - delete notifications.current.type; - delete notifications.current.header; - delete notifications.current.message; - notifications.current.display = false; - console.debug("Remove message"); - } - - $rootScope.notification = notifications.current; - - notifications.message = function(type, header, message) { - notifications.current.remove(); - - notifications.current.type = type; - notifications.current.header = header; - notifications.current.message = message; - notifications.current.display = true; - - notifications.scheduled = $timeout(function() { - notifications.current.remove(); - }, delay); - - console.debug("Added message"); - } - - notifications.info = function(message) { - notifications.message("info", $translate.instant('notifications.info.header'), message); - }; - - notifications.success = function(message) { - notifications.message("success", $translate.instant('notifications.success.header'), message); - }; - - notifications.error = function(message) { - notifications.message("danger", $translate.instant('notifications.error.header'), message); - }; - - notifications.warn = function(message) { - notifications.message("warning", $translate.instant('notifications.warn.header'), message); - }; - - return notifications; -}); - - -module.factory('ComponentUtils', function() { - - function sortGroups(prop, arr) { - // sort current elements - arr.sort(function (a, b) { - if (a[prop] < b[prop]) { return -1; } - if (a[prop] > b[prop]) { return 1; } - return 0; - }); - // check sub groups - arr.forEach(function (item, index) { - if (!!item.subGroups) { - sortGroups(prop, item.subGroups); - } - }); - return arr; - }; - - var utils = {}; - - utils.sortGroups = sortGroups; - - utils.findIndexById = function(array, id) { - for (var i = 0; i < array.length; i++) { - if (array[i].id === id) return i; - } - return -1; - } - - utils.convertAllMultivaluedStringValuesToList = function(properties, config) { - if (!properties) { - return; - } - - for (var i=0 ; i 0) { - var lastVal = configVal[configVal.length - 1]; - if (lastVal === '') { - console.log('Remove empty value from config property: ' + prop.name); - configVal.splice(configVal.length - 1, 1); - } - } - - var attrVals = configVal.join("##"); - config[prop.name] = attrVals; - - } - } - } - } - - - - utils.addLastEmptyValueToMultivaluedLists = function(properties, config) { - if (!properties) { - return; - } - - for (var i=0 ; i 0) { - configProperty.push(''); - } - } - } - } - - - utils.removeLastEmptyValue = function(componentConfig) { - - for (var configPropertyName in componentConfig) { - var configVal = componentConfig[configPropertyName]; - if (configVal && configVal.length > 0) { - var lastVal = configVal[configVal.length - 1]; - if (lastVal === '') { - console.log('Remove empty value from config property: ' + configPropertyName); - configVal.splice(configVal.length - 1, 1); - } - } - } - } - - // Allows you to use ui-select2 with tag. - // In HTML you will then use property.mvOptions like this: - // Flows tab -module.service('LastFlowSelected', function() { - this.alias = null; -}); - -module.service('RealmRoleRemover', function() { - this.remove = function (role, realm, Dialog, $location, Notifications) { - Dialog.confirmDelete(role.name, 'role', function () { - role.$remove({ - realm: realm.realm, - role: role.id - }, function () { - $location.url("/realms/" + realm.realm + "/roles"); - Notifications.success("The role has been deleted."); - }); - }); - }; -}); - -module.factory('UserSessionStats', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/session-stats', { - realm : '@realm', - user : '@user' - }); -}); -module.factory('UserSessions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/sessions', { - realm : '@realm', - user : '@user' - }); -}); -module.factory('UserOfflineSessions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/offline-sessions/:client', { - realm : '@realm', - user : '@user', - client : '@client' - }); -}); - -module.factory('UserSessionLogout', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/sessions/:session', { - realm : '@realm', - session : '@session' - }); -}); - -module.factory('UserLogout', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/logout', { - realm : '@realm', - user : '@user' - }); -}); - -module.factory('UserFederatedIdentities', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/federated-identity', { - realm : '@realm', - user : '@user' - }); -}); -module.factory('UserFederatedIdentity', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/federated-identity/:provider', { - realm : '@realm', - user : '@user', - provider : '@provider' - }); -}); - -module.factory('UserConsents', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/consents/:client', { - realm : '@realm', - user : '@user', - client: '@client' - }); -}); - -module.factory('UserImpersonation', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:user/impersonation', { - realm : '@realm', - user : '@user' - }); -}); - -module.factory('UserCredentials', function($resource) { - var credentials = {}; - - credentials.getCredentials = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials', { - realm : '@realm', - userId : '@userId' - }).query; - - credentials.getConfiguredUserStorageCredentialTypes = $resource(authUrl + '/admin/realms/:realm/users/:userId/configured-user-storage-credential-types', { - realm : '@realm', - userId : '@userId' - }).query; - - credentials.deleteCredential = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId', { - realm : '@realm', - userId : '@userId', - credentialId : '@credentialId' - }).delete; - - credentials.updateCredentialLabel = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/userLabel', { - realm : '@realm', - userId : '@userId', - credentialId : '@credentialId' - }, { - update : { - method : 'PUT', - headers: { - 'Content-Type': 'text/plain;charset=utf-8' - }, - transformRequest: function(credential, getHeaders) { - return credential.userLabel; - } - } - }).update; - - credentials.resetPassword = $resource(authUrl + '/admin/realms/:realm/users/:userId/reset-password', { - realm : '@realm', - userId : '@userId' - }, { - update : { - method : 'PUT' - } - }).update; - - credentials.removeTotp = $resource(authUrl + '/admin/realms/:realm/users/:userId/remove-totp', { - realm : '@realm', - userId : '@userId' - }, { - update : { - method : 'PUT' - } - }).update; - - credentials.disableCredentialTypes = $resource(authUrl + '/admin/realms/:realm/users/:userId/disable-credential-types', { - realm : '@realm', - userId : '@userId' - }, { - update : { - method : 'PUT' - } - }).update; - - credentials.moveCredentialAfter = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/moveAfter/:newPreviousCredentialId', { - realm : '@realm', - userId : '@userId', - credentialId : '@credentialId', - newPreviousCredentialId : '@newPreviousCredentialId' - }, { - update : { - method : 'POST' - } - }).update; - - credentials.moveToFirst = $resource(authUrl + '/admin/realms/:realm/users/:userId/credentials/:credentialId/moveToFirst', { - realm : '@realm', - userId : '@userId', - credentialId : '@credentialId' - }, { - update : { - method : 'POST' - } - }).update; - - return credentials; -}); - -module.factory('UserExecuteActionsEmail', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/execute-actions-email', { - realm : '@realm', - userId : '@userId', - lifespan : '@lifespan', - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('RealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm', { - realm : '@realm', - userId : '@userId' - }); -}); - -module.factory('CompositeRealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm/composite', { - realm : '@realm', - userId : '@userId' - }); -}); - -module.factory('AvailableRealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/realm/available', { - realm : '@realm', - userId : '@userId' - }); -}); - - -module.factory('ClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client', { - realm : '@realm', - userId : '@userId', - client : "@client" - }); -}); - -module.factory('AvailableClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client/available', { - realm : '@realm', - userId : '@userId', - client : "@client" - }); -}); - -module.factory('CompositeClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/role-mappings/clients/:client/composite', { - realm : '@realm', - userId : '@userId', - client : "@client" - }); -}); - -module.factory('ClientRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm', { - realm : '@realm', - client : '@client' - }); -}); - -module.factory('ClientAvailableRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm/available', { - realm : '@realm', - client : '@client' - }); -}); - -module.factory('ClientCompositeRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/realm/composite', { - realm : '@realm', - client : '@client' - }); -}); - -module.factory('ClientClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient', { - realm : '@realm', - client : '@client', - targetClient : '@targetClient' - }); -}); - -module.factory('ClientAvailableClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient/available', { - realm : '@realm', - client : '@client', - targetClient : '@targetClient' - }); -}); - -module.factory('ClientCompositeClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/scope-mappings/clients/:targetClient/composite', { - realm : '@realm', - client : '@client', - targetClient : '@targetClient' - }); -}); - - - -module.factory('RealmRoles', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles', { - realm : '@realm' - }); -}); - -module.factory('RoleRealmComposites', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role/composites/realm', { - realm : '@realm', - role : '@role' - }); -}); - -module.factory('RealmPushRevocation', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/push-revocation', { - realm : '@realm' - }); -}); - -module.factory('RealmClearUserCache', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clear-user-cache', { - realm : '@realm' - }); -}); - -module.factory('RealmClearRealmCache', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clear-realm-cache', { - realm : '@realm' - }); -}); - -module.factory('RealmClearKeysCache', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clear-keys-cache', { - realm : '@realm' - }); -}); - -module.factory('RealmSessionStats', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/session-stats', { - realm : '@realm' - }); -}); - -module.factory('RealmClientSessionStats', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-session-stats', { - realm : '@realm' - }); -}); - - -module.factory('RoleClientComposites', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role/composites/clients/:client', { - realm : '@realm', - role : '@role', - client : "@client" - }); -}); - -function clientSelectControl($scope, realm, Client) { - $scope.clientsUiSelect = { - minimumInputLength: 0, - delay: 500, - allowClear: true, - query: function (query) { - var data = {results: []}; - Client.query({realm: realm, search: true, clientId: query.term.trim(), max: 20}, function(response) { - data.results = response; - query.callback(data); - }); - }, - formatResult: function(object, container, query) { - object.text = object.clientId; - return object.clientId; - } - }; -} - -function roleControl($scope, $route, realm, role, roles, Client, - ClientRole, RoleById, RoleRealmComposites, RoleClientComposites, - $http, $location, Notifications, Dialog, ComponentUtils) { - $scope.$watch(function () { - return $location.path(); - }, function () { - $scope.path = $location.path().substring(1).split("/"); - }); - - $scope.$watch('role', function () { - if (!angular.equals($scope.role, role)) { - $scope.changed = true; - } - }, true); - - $scope.update = function () { - RoleById.update({ - realm: realm.realm, - role: role.id - }, $scope.role, function () { - $scope.changed = false; - role = angular.copy($scope.role); - Notifications.success("Your changes have been saved to the role."); - }); - }; - - $scope.reset = function () { - $scope.role = angular.copy(role); - $scope.changed = false; - }; - - if (!role.id) return; - - $scope.compositeSwitch = role.composite; - $scope.compositeSwitchDisabled = role.composite; - $scope.realmRoles = angular.copy(roles); - $scope.selectedRealmRoles = []; - $scope.selectedRealmMappings = []; - $scope.realmMappings = []; - $scope.clientRoles = []; - $scope.selectedClientRoles = []; - $scope.selectedClientMappings = []; - $scope.clientMappings = []; - - for (var j = 0; j < $scope.realmRoles.length; j++) { - if ($scope.realmRoles[j].id == role.id) { - var realmRole = $scope.realmRoles[j]; - var idx = $scope.realmRoles.indexOf(realmRole); - $scope.realmRoles.splice(idx, 1); - break; - } - } - - - clientSelectControl($scope, $route.current.params.realm, Client); - - $scope.selectedClient = null; - - - $scope.realmMappings = RoleRealmComposites.query({realm : realm.realm, role : role.id}, function(){ - for (var i = 0; i < $scope.realmMappings.length; i++) { - var role = $scope.realmMappings[i]; - for (var j = 0; j < $scope.realmRoles.length; j++) { - var realmRole = $scope.realmRoles[j]; - if (realmRole.id == role.id) { - var idx = $scope.realmRoles.indexOf(realmRole); - if (idx != -1) { - $scope.realmRoles.splice(idx, 1); - break; - } - } - } - } - }); - - $scope.addRealmRole = function() { - $scope.compositeSwitchDisabled=true; - $scope.selectedRealmRolesToAdd = JSON.parse('[' + $scope.selectedRealmRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', - $scope.selectedRealmRolesToAdd).then(function() { - for (var i = 0; i < $scope.selectedRealmRolesToAdd.length; i++) { - var role = $scope.selectedRealmRolesToAdd[i]; - var idx = ComponentUtils.findIndexById($scope.realmRoles, role.id); - if (idx != -1) { - $scope.realmRoles.splice(idx, 1); - $scope.realmMappings.push(role); - } - } - $scope.selectedRealmRoles = []; - $scope.selectedRealmRolesToAdd = []; - Notifications.success("Role added to composite."); - }); - }; - - $scope.deleteRealmRole = function() { - $scope.compositeSwitchDisabled=true; - $scope.selectedRealmMappingsToRemove = JSON.parse('[' + $scope.selectedRealmMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', - {data : $scope.selectedRealmMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { - for (var i = 0; i < $scope.selectedRealmMappingsToRemove.length; i++) { - var role = $scope.selectedRealmMappingsToRemove[i]; - var idx = ComponentUtils.findIndexById($scope.realmMappings, role.id); - if (idx != -1) { - $scope.realmMappings.splice(idx, 1); - $scope.realmRoles.push(role); - } - } - $scope.selectedRealmMappings = []; - $scope.selectedRealmMappingsToRemove = []; - Notifications.success("Role removed from composite."); - }); - }; - - $scope.addClientRole = function() { - $scope.compositeSwitchDisabled=true; - $scope.selectedClientRolesToAdd = JSON.parse('[' + $scope.selectedClientRoles + ']'); - $http.post(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', - $scope.selectedClientRolesToAdd).then(function() { - for (var i = 0; i < $scope.selectedClientRolesToAdd.length; i++) { - var role = $scope.selectedClientRolesToAdd[i]; - var idx = ComponentUtils.findIndexById($scope.clientRoles, role.id); - if (idx != -1) { - $scope.clientRoles.splice(idx, 1); - $scope.clientMappings.push(role); - } - } - $scope.selectedClientRoles = []; - $scope.selectedClientRolesToAdd = []; - Notifications.success("Client role added."); - }); - }; - - $scope.deleteClientRole = function() { - $scope.compositeSwitchDisabled=true; - $scope.selectedClientMappingsToRemove = JSON.parse('[' + $scope.selectedClientMappings + ']'); - $http.delete(authUrl + '/admin/realms/' + realm.realm + '/roles-by-id/' + role.id + '/composites', - {data : $scope.selectedClientMappingsToRemove, headers : {"content-type" : "application/json"}}).then(function() { - for (var i = 0; i < $scope.selectedClientMappingsToRemove.length; i++) { - var role = $scope.selectedClientMappingsToRemove[i]; - var idx = ComponentUtils.findIndexById($scope.clientMappings, role.id); - if (idx != -1) { - $scope.clientMappings.splice(idx, 1); - $scope.clientRoles.push(role); - } - } - $scope.selectedClientMappings = []; - $scope.selectedClientMappingsToRemove = []; - Notifications.success("Client role removed."); - }); - }; - - - $scope.changeClient = function(client) { - console.log("selected client: ", client); - if (!client || !client.id) { - $scope.selectedClient = null; - return; - } - $scope.selectedClient = client; - $scope.clientRoles = ClientRole.query({realm : realm.realm, client : client.id}, function() { - $scope.clientMappings = RoleClientComposites.query({realm : realm.realm, role : role.id, client : client.id}, function(){ - for (var i = 0; i < $scope.clientMappings.length; i++) { - var role = $scope.clientMappings[i]; - for (var j = 0; j < $scope.clientRoles.length; j++) { - var realmRole = $scope.clientRoles[j]; - if (realmRole.id == role.id) { - var idx = $scope.clientRoles.indexOf(realmRole); - if (idx != -1) { - $scope.clientRoles.splice(idx, 1); - break; - } - } - } - } - }); - for (var j = 0; j < $scope.clientRoles.length; j++) { - if ($scope.clientRoles[j] == role.id) { - var appRole = $scope.clientRoles[j]; - var idx = $scope.clientRoles.indexof(appRole); - $scope.clientRoles.splice(idx, 1); - break; - } - } - } - ); - }; - - - - -} - - -module.factory('Role', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles/:role', { - realm : '@realm', - role : '@role' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('RoleById', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles-by-id/:role', { - realm : '@realm', - role : '@role' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientRole', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles/:role', { - realm : '@realm', - client : "@client", - role : '@role' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientDefaultClientScopes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/default-client-scopes/:clientScopeId', { - realm : '@realm', - client : "@client", - clientScopeId : '@clientScopeId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientOptionalClientScopes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/optional-client-scopes/:clientScopeId', { - realm : '@realm', - client : "@client", - clientScopeId : '@clientScopeId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientEvaluateProtocolMappers', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/protocol-mappers?scope=:scopeParam', { - realm : '@realm', - client : "@client", - scopeParam : "@scopeParam" - }); -}); - -module.factory('ClientEvaluateGrantedRoles', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/scope-mappings/:roleContainer/granted?scope=:scopeParam', { - realm : '@realm', - client : "@client", - roleContainer : "@roleContainer", - scopeParam : "@scopeParam" - }); -}); - -module.factory('ClientEvaluateNotGrantedRoles', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/scope-mappings/:roleContainer/not-granted?scope=:scopeParam', { - realm : '@realm', - client : "@client", - roleContainer : "@roleContainer", - scopeParam : "@scopeParam" - }); -}); - -module.factory('ClientEvaluateGenerateExampleAccessToken', function($resource) { - return buildClientEvaluateGenerateExampleUrl('generate-example-access-token'); -}); - -module.factory('ClientEvaluateGenerateExampleIDToken', function($resource) { - return buildClientEvaluateGenerateExampleUrl('generate-example-id-token'); -}); - -module.factory('ClientEvaluateGenerateExampleUserInfo', function($resource) { - return buildClientEvaluateGenerateExampleUrl('generate-example-userinfo'); -}); - -function buildClientEvaluateGenerateExampleUrl(subPath) { - var urlTemplate = authUrl + '/admin/realms/:realm/clients/:client/evaluate-scopes/' + subPath + '?scope=:scopeParam&userId=:userId'; - return { - url: function (parameters) { - return urlTemplate - .replace(':realm', parameters.realm) - .replace(':client', parameters.client) - .replace(':scopeParam', parameters.scopeParam) - .replace(':userId', parameters.userId); - } - } -} - -module.factory('ClientProtocolMappersByProtocol', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/protocol-mappers/protocol/:protocol', { - realm : '@realm', - client : "@client", - protocol : "@protocol" - }); -}); - -module.factory('ClientScopeProtocolMappersByProtocol', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/protocol-mappers/protocol/:protocol', { - realm : '@realm', - clientScope : "@clientScope", - protocol : "@protocol" - }); -}); - -module.factory('ClientScopeRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm', { - realm : '@realm', - clientScope : '@clientScope' - }); -}); - -module.factory('ClientScopeAvailableRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm/available', { - realm : '@realm', - clientScope : '@clientScope' - }); -}); - -module.factory('ClientScopeCompositeRealmScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/realm/composite', { - realm : '@realm', - clientScope : '@clientScope' - }); -}); - -module.factory('ClientScopeClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient', { - realm : '@realm', - clientScope : '@clientScope', - targetClient : '@targetClient' - }); -}); - -module.factory('ClientScopeAvailableClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient/available', { - realm : '@realm', - clientScope : '@clientScope', - targetClient : '@targetClient' - }); -}); - -module.factory('ClientScopeCompositeClientScopeMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope/scope-mappings/clients/:targetClient/composite', { - realm : '@realm', - clientScope : '@clientScope', - targetClient : '@targetClient' - }); -}); - - -module.factory('ClientSessionStats', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-stats', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientSessionStatsWithUsers', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-stats?users=true', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientSessionCount', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/session-count', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientUserSessions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/user-sessions', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientOfflineSessionCount', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/offline-session-count', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientOfflineSessions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/offline-sessions', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('RealmLogoutAll', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/logout-all', { - realm : '@realm' - }); -}); - -module.factory('ClientPushRevocation', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/push-revocation', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientClusterNode', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/nodes/:node', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientTestNodesAvailable', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/test-nodes-available', { - realm : '@realm', - client : "@client" - }); -}); - -module.factory('ClientCertificate', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute', { - realm : '@realm', - client : "@client", - attribute: "@attribute" - }); -}); - -module.factory('ClientCertificateGenerate', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute/generate', { - realm : '@realm', - client : "@client", - attribute: "@attribute" - }, - { - generate : { - method : 'POST' - } - }); -}); - -module.factory('ClientCertificateDownload', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/certificates/:attribute/download', { - realm : '@realm', - client : "@client", - attribute: "@attribute" - }, - { - download : { - method : 'POST', - responseType: 'arraybuffer' - } - }); -}); - -module.factory('Client', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client', { - realm : '@realm', - client : '@client' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientScope', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-scopes/:clientScope', { - realm : '@realm', - clientScope : '@clientScope' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('RealmDefaultClientScopes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/default-default-client-scopes/:clientScopeId', { - realm : '@realm', - clientScopeId : '@clientScopeId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('RealmOptionalClientScopes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/default-optional-client-scopes/:clientScopeId', { - realm : '@realm', - clientScopeId : '@clientScopeId' - }, { - update : { - method : 'PUT' - } - }); -}); - - -module.factory('ClientDescriptionConverter', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-description-converter', { - realm : '@realm' - }); -}); - -/* -module.factory('ClientInstallation', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/installation/providers/:provider', { - realm : '@realm', - client : '@client', - provider : '@provider' - }); -}); -*/ - - - -module.factory('ClientInstallation', function($resource) { - var url = authUrl + '/admin/realms/:realm/clients/:client/installation/providers/:provider'; - return { - url : function(parameters) - { - return url.replace(':realm', parameters.realm).replace(':client', parameters.client).replace(':provider', parameters.provider); - } - } -}); - -module.factory('ClientInstallationJBoss', function($resource) { - var url = authUrl + '/admin/realms/:realm/clients/:client/installation/jboss'; - return { - url : function(parameters) - { - return url.replace(':realm', parameters.realm).replace(':client', parameters.client); - } - } -}); - -module.factory('ClientSecret', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/client-secret', { - realm : '@realm', - client : '@client' - }, { - update : { - method : 'POST' - } - }); -}); - -module.factory('ClientRegistrationAccessToken', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/registration-access-token', { - realm : '@realm', - client : '@client' - }, { - update : { - method : 'POST' - } - }); -}); - -module.factory('ClientOrigins', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/allowed-origins', { - realm : '@realm', - client : '@client' - }, { - update : { - method : 'PUT', - isArray : true - } - }); -}); - -module.factory('ClientServiceAccountUser', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/service-account-user', { - realm : '@realm', - client : '@client' - }); -}); - -module.factory('Current', function(Realm, $route, $rootScope) { - var current = { - realms: {}, - realm: null - }; - - $rootScope.$on('$routeChangeStart', function() { - current.realms = Realm.query(null, function(realms) { - var currentRealm = null; - if ($route.current.params.realm) { - for (var i = 0; i < realms.length; i++) { - if (realms[i].realm == $route.current.params.realm) { - currentRealm = realms[i]; - } - } - } - current.realm = currentRealm; - }); - }); - - return current; -}); - -module.factory('TimeUnit', function() { - var t = {}; - - t.autoUnit = function(time) { - if (!time) { - return 'Hours'; - } - - var unit = 'Seconds'; - if (time % 60 == 0) { - unit = 'Minutes'; - time = time / 60; - } - if (time % 60 == 0) { - unit = 'Hours'; - time = time / 60; - } - if (time % 24 == 0) { - unit = 'Days' - time = time / 24; - } - return unit; - } - - t.toSeconds = function(time, unit) { - switch (unit) { - case 'Seconds': return time; - case 'Minutes': return time * 60; - case 'Hours': return time * 3600; - case 'Days': return time * 86400; - default: throw 'invalid unit ' + unit; - } - } - - t.toUnit = function(time, unit) { - switch (unit) { - case 'Seconds': return time; - case 'Minutes': return Math.ceil(time / 60); - case 'Hours': return Math.ceil(time / 3600); - case 'Days': return Math.ceil(time / 86400); - default: throw 'invalid unit ' + unit; - } - } - - return t; -}); - -module.factory('TimeUnit2', function() { - var t = {}; - - t.asUnit = function(time) { - - var unit = 'Minutes'; - - if (time) { - if (time == -1) { - time = -1; - } else { - if (time < 60) { - time = 60; - } - - if (time % 60 == 0) { - unit = 'Minutes'; - time = time / 60; - } - if (time % 60 == 0) { - unit = 'Hours'; - time = time / 60; - } - if (time % 24 == 0) { - unit = 'Days' - time = time / 24; - } - } - } - - var v = { - unit: unit, - time: time, - toSeconds: function() { - switch (v.unit) { - case 'Minutes': - return v.time * 60; - case 'Hours': - return v.time * 3600; - case 'Days': - return v.time * 86400; - } - } - } - - return v; - } - - return t; -}); - -module.filter('removeSelectedPolicies', function() { - return function(policies, selectedPolicies) { - var result = []; - for(var i in policies) { - var policy = policies[i]; - var policyAvailable = true; - for(var j in selectedPolicies) { - if(policy.id === selectedPolicies[j].id && !policy.multipleSupported) { - policyAvailable = false; - } - } - if(policyAvailable) { - result.push(policy); - } - } - return result; - } -}); - -module.factory('IdentityProvider', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias', { - realm : '@realm', - alias : '@alias' - }, { - update: { - method : 'PUT' - } - }); -}); - -module.factory('IdentityProviderExport', function($resource) { - var url = authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/export'; - return { - url : function(parameters) - { - return url.replace(':realm', parameters.realm).replace(':alias', parameters.alias); - } - } -}); - -module.factory('IdentityProviderFactory', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/providers/:provider_id', { - realm : '@realm', - provider_id : '@provider_id' - }); -}); - -module.factory('IdentityProviderMapperTypes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mapper-types', { - realm : '@realm', - alias : '@alias' - }); -}); - -module.factory('IdentityProviderMappers', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mappers', { - realm : '@realm', - alias : '@alias' - }); -}); - -module.factory('IdentityProviderMapper', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/identity-provider/instances/:alias/mappers/:mapperId', { - realm : '@realm', - alias : '@alias', - mapperId: '@mapperId' - }, { - update: { - method : 'PUT' - } - }); -}); - -module.factory('AuthenticationFlowExecutions', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions', { - realm : '@realm', - alias : '@alias' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('CreateExecutionFlow', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions/flow', { - realm : '@realm', - alias : '@alias' - }); -}); - -module.factory('CreateExecution', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/executions/execution', { - realm : '@realm', - alias : '@alias' - }); -}); - -module.factory('AuthenticationFlows', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:flow', { - realm : '@realm', - flow: '@flow' - }); -}); - -module.factory('AuthenticationFormProviders', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/form-providers', { - realm : '@realm' - }); -}); - -module.factory('AuthenticationFormActionProviders', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/form-action-providers', { - realm : '@realm' - }); -}); - -module.factory('AuthenticatorProviders', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/authenticator-providers', { - realm : '@realm' - }); -}); - -module.factory('ClientAuthenticatorProviders', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/client-authenticator-providers', { - realm : '@realm' - }); -}); - - -module.factory('AuthenticationFlowsCopy', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:alias/copy', { - realm : '@realm', - alias : '@alias' - }); -}); - -module.factory('AuthenticationFlowsUpdate', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/flows/:flow', { - realm : '@realm', - flow : '@flow' - }, { - update : { - method : 'PUT' - } - }); -}); - - -module.factory('AuthenticationConfigDescription', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/config-description/:provider', { - realm : '@realm', - provider: '@provider' - }); -}); -module.factory('PerClientAuthenticationConfigDescription', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/per-client-config-description', { - realm : '@realm' - }); -}); - -module.factory('AuthenticationConfig', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/config/:config', { - realm : '@realm', - config: '@config' - }, { - update: { - method : 'PUT' - } - }); -}); -module.factory('AuthenticationExecutionConfig', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/config', { - realm : '@realm', - execution: '@execution' - }); -}); - -module.factory('AuthenticationExecution', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution', { - realm : '@realm', - execution : '@execution' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('AuthenticationExecutionRaisePriority', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/raise-priority', { - realm : '@realm', - execution : '@execution' - }); -}); - -module.factory('AuthenticationExecutionLowerPriority', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/authentication/executions/:execution/lower-priority', { - realm : '@realm', - execution : '@execution' - }); -}); - - - -module.service('SelectRoleDialog', function($modal) { - var dialog = {}; - - var openDialog = function(title, message, btns) { - var controller = function($scope, $modalInstance, title, message, btns) { - $scope.title = title; - $scope.message = message; - $scope.btns = btns; - - $scope.ok = function () { - $modalInstance.close(); - }; - $scope.cancel = function () { - $modalInstance.dismiss('cancel'); - }; - }; - - return $modal.open({ - templateUrl: resourceUrl + '/templates/kc-modal.html', - controller: controller, - resolve: { - title: function() { - return title; - }, - message: function() { - return message; - }, - btns: function() { - return btns; - } - } - }).result; - } - - var escapeHtml = function(str) { - var div = document.createElement('div'); - div.appendChild(document.createTextNode(str)); - return div.innerHTML; - }; - - dialog.confirmDelete = function(name, type, success) { - var title = 'Delete ' + escapeHtml(type.charAt(0).toUpperCase() + type.slice(1)); - var msg = 'Are you sure you want to permanently delete the ' + type + ' ' + name + '?'; - var btns = { - ok: { - label: 'Delete', - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, msg, btns).then(success); - } - - dialog.confirmGenerateKeys = function(name, type, success) { - var title = 'Generate new keys for realm'; - var msg = 'Are you sure you want to permanently generate new keys for ' + name + '?'; - var btns = { - ok: { - label: 'Generate Keys', - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, msg, btns).then(success); - } - - dialog.confirm = function(title, message, success, cancel) { - var btns = { - ok: { - label: title, - cssClass: 'btn btn-danger' - }, - cancel: { - label: 'Cancel', - cssClass: 'btn btn-default' - } - } - - openDialog(title, message, btns).then(success, cancel); - } - - return dialog -}); - -module.factory('Group', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId', { - realm : '@realm', - userId : '@groupId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('GroupChildren', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/children', { - realm : '@realm', - groupId : '@groupId' - }); -}); - -module.factory('GroupsCount', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/count', { - realm : '@realm' - }, - { - query: { - isArray: false, - method: 'GET', - params: {}, - transformResponse: function (data) { - return angular.fromJson(data) - } - } - }); -}); - -module.factory('Groups', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups', { - realm : '@realm' - }) -}); - -module.factory('GroupRealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm', { - realm : '@realm', - groupId : '@groupId' - }); -}); - -module.factory('GroupCompositeRealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm/composite', { - realm : '@realm', - groupId : '@groupId' - }); -}); - -module.factory('GroupAvailableRealmRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/realm/available', { - realm : '@realm', - groupId : '@groupId' - }); -}); - - -module.factory('GroupClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client', { - realm : '@realm', - groupId : '@groupId', - client : "@client" - }); -}); - -module.factory('GroupAvailableClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client/available', { - realm : '@realm', - groupId : '@groupId', - client : "@client" - }); -}); - -module.factory('GroupCompositeClientRoleMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/role-mappings/clients/:client/composite', { - realm : '@realm', - groupId : '@groupId', - client : "@client" - }); -}); - -module.factory('GroupMembership', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/groups/:groupId/members', { - realm : '@realm', - groupId : '@groupId' - }); -}); - -module.factory('RoleList', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles', { - realm : '@realm' - }); -}); - -module.factory('RoleMembership', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/roles/:role/users', { - realm : '@realm', - role : '@role' - }); -}); - -module.factory('ClientRoleList', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles', { - realm : '@realm', - client : '@client' - }); -}); - -module.factory('ClientRoleMembership', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/clients/:client/roles/:role/users', { - realm : '@realm', - client : '@client', - role : '@role' - }); -}); - -module.factory('UserGroupMembership', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups', { - realm : '@realm', - userId : '@userId' - }); -}); - -module.factory('UserGroupMapping', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups/:groupId', { - realm : '@realm', - userId : '@userId', - groupId : '@groupId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('UserProfile', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/profile', { - realm : '@realm' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('DefaultGroups', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/default-groups/:groupId', { - realm : '@realm', - groupId : '@groupId' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('SubComponentTypes', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/components/:componentId/sub-component-types', { - realm: '@realm', - componentId: '@componentId' - }); -}); - -module.factory('Components', function($resource, ComponentUtils) { - return $resource(authUrl + '/admin/realms/:realm/components/:componentId', { - realm : '@realm', - componentId : '@componentId' - }, { - update : { - method : 'PUT', - transformRequest: function(componentInstance) { - - if (componentInstance.config) { - ComponentUtils.removeLastEmptyValue(componentInstance.config); - } - - return angular.toJson(componentInstance); - } - }, - save : { - method : 'POST', - transformRequest: function(componentInstance) { - - if (componentInstance.config) { - ComponentUtils.removeLastEmptyValue(componentInstance.config); - } - - return angular.toJson(componentInstance); - } - } - }); -}); - -module.factory('UserStorageOperations', function($resource) { - var object = {} - object.sync = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/sync', { - realm : '@realm', - componentId : '@componentId' - }); - object.removeImportedUsers = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/remove-imported-users', { - realm : '@realm', - componentId : '@componentId' - }); - object.unlinkUsers = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/unlink-users', { - realm : '@realm', - componentId : '@componentId' - }); - object.simpleName = $resource(authUrl + '/admin/realms/:realm/user-storage/:componentId/name', { - realm : '@realm', - componentId : '@componentId' - }); - return object; -}); - - -module.factory('ClientStorageOperations', function($resource) { - var object = {} - object.simpleName = $resource(authUrl + '/admin/realms/:realm/client-storage/:componentId/name', { - realm : '@realm', - componentId : '@componentId' - }); - return object; -}); - - -module.factory('ClientRegistrationPolicyProviders', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-registration-policy/providers', { - realm : '@realm', - }); -}); - -module.factory('ClientPoliciesProfiles', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-policies/profiles?include-global-profiles=:includeGlobalProfiles', { - realm : '@realm', - includeGlobalProfiles : '@includeGlobalProfiles' - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('ClientPolicies', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/client-policies/policies', { - realm : '@realm', - }, { - update : { - method : 'PUT' - } - }); -}); - -module.factory('LDAPMapperSync', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/user-storage/:parentId/mappers/:mapperId/sync', { - realm : '@realm', - componentId : '@componentId', - mapperId: '@mapperId' - }); -}); - - -module.factory('UserGroupMembershipCount', function($resource) { - return $resource(authUrl + '/admin/realms/:realm/users/:userId/groups/count', { - realm : '@realm', - userId : '@userId' - }, - { - query: { - isArray: false, - method: 'GET', - params: {}, - transformResponse: function (data) { - return angular.fromJson(data) - } - } - }); -}); diff --git a/deps/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html b/deps/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html deleted file mode 100644 index 6bf39f3ba..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authentication-flow-bindings.html +++ /dev/null @@ -1,83 +0,0 @@ -
-

{{:: 'authentication' | translate}}

- - - -
-
- -
-
- -
-
- {{:: 'browser-flow.tooltip' | translate}} -
-
- -
-
- -
-
- {{:: 'registration-flow.tooltip' | translate}} -
-
- -
-
- -
-
- {{:: 'direct-grant-flow.tooltip' | translate}} -
- -
- -
-
- -
-
- {{:: 'reset-credentials.tooltip' | translate}} -
- -
- -
-
- -
-
- {{:: 'client-authentication.tooltip' | translate}} -
- - -
- -
-
- -
-
- {{:: 'docker-auth.tooltip' | translate}} -
- -
-
- - -
-
-
- -
- - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authentication-flows.html b/deps/keycloak/themes/base/admin/resources/partials/authentication-flows.html deleted file mode 100644 index eb8e72110..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authentication-flows.html +++ /dev/null @@ -1,72 +0,0 @@ -
-

{{:: 'authentication' | translate}}

- - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -    -
- - - - - - -
-
{{:: 'auth-type' | translate}}{{:: 'requirement' | translate}} 
- - - {{execution.displayName|capitalize}}({{execution.alias}}) -    - - - - - -
{{:: 'no-executions-available' | translate}}
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authenticator-config.html b/deps/keycloak/themes/base/admin/resources/partials/authenticator-config.html deleted file mode 100644 index 1b3440669..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authenticator-config.html +++ /dev/null @@ -1,52 +0,0 @@ -
- - - -

{{:: 'create-authenticator-config' | translate}}

-

- {{config.alias|capitalize}} - {{config.id}} - -

- -
-
-
- -
- -
-
-
- -
- -
- {{:: 'authenticator.alias.tooltip' | translate}} -
- -
- -
-
- - -
-
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html deleted file mode 100644 index 2e389ff92..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/broker-permissions.html +++ /dev/null @@ -1,40 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'permissions-enabled-role.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html deleted file mode 100644 index 7f29fd71c..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-permissions.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'permissions-enabled-role.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html deleted file mode 100644 index c76ecec05..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/client-role-permissions.html +++ /dev/null @@ -1,40 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'permissions-enabled-role.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html deleted file mode 100644 index f2be6d99a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/group-permissions.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'permissions-enabled-role.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html deleted file mode 100644 index e21ee63ed..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/realm-role-permissions.html +++ /dev/null @@ -1,39 +0,0 @@ -
- - - - -
-
-
- -
- -
- {{:: 'permissions-enabled-role.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html b/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html deleted file mode 100644 index 2665bba99..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/mgmt/users-permissions.html +++ /dev/null @@ -1,35 +0,0 @@ -
- - - -
-
-
- -
- -
- {{:: 'permissions-enabled-users.tooltip' | translate}} -
-
-
- - - - - - - - - - - - - - - - - -
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html deleted file mode 100644 index af5aace4f..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-resource-detail.html +++ /dev/null @@ -1,131 +0,0 @@ -
- - - -

{{:: 'authz-add-resource-permission' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-permission-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-permission-description.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-permission-resource-apply-to-resource-type.tooltip' | translate}} -
-
- - -
- -
- {{:: 'authz-permission-resource-resource.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-permission-resource-type.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
-
-
-
- -
-
{{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'actions' | translate}}
{{policy.name}}{{policy.name}}{{policy.description}} - {{:: 'remove' | translate}} -
{{:: 'authz-no-policies-assigned' | translate}}
-
- {{:: 'authz-policy-apply-policy.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-decision-strategy.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html deleted file mode 100644 index 17ee7cb5a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/provider/resource-server-policy-scope-detail.html +++ /dev/null @@ -1,134 +0,0 @@ -
- - - -

{{:: 'authz-add-scope-permission' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-permission-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-permission-description.tooltip' | translate}} -
-
- - -
- -
- {{:: 'authz-permission-scope-resource.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-permission-scope-scope.tooltip' | translate}} -
-
- - -
- -
- {{:: 'authz-permission-scope-scope.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
-
-
-
- -
-
{{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'actions' | translate}}
{{policy.name}}{{policy.name}}{{policy.description}} - {{:: 'remove' | translate}} -
{{:: 'authz-no-policies-assigned' | translate}}
-
- {{:: 'authz-policy-apply-policy.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-decision-strategy.tooltip' | translate}} -
- -
-
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html b/deps/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html deleted file mode 100644 index 40dfacdf5..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/permission/resource-server-permission-list.html +++ /dev/null @@ -1,118 +0,0 @@ -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
- {{:: 'filter' | translate}}:   -
- -
- -
-
-
- -
- -
-
-
- -
- -
-
-
- -
-
-
- -
-
-
{{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'type' | translate}}{{:: 'actions' | translate}}
-
- - - -
-
- - - {{policy.name}}{{policy.description}}{{policy.type}} - -
-
-
- -
-
-
-
-
{{:: 'authz-associated-policies' | translate}}
-
- {{:: 'authz-no-policies-available' | translate}} - {{dep.name}}{{$last ? '' : ', '}} -
-
-
-
-
-
{{:: 'no-results' | translate}}{{:: 'authz-no-permissions-available' | translate}}
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html deleted file mode 100644 index 25be65b18..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-aggregate-detail.html +++ /dev/null @@ -1,123 +0,0 @@ -
- - - -

{{:: 'authz-add-aggregated-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
- -
-
-
-
-
- -
-
{{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'actions' | translate}}
{{policy.name}}{{policy.name}}{{policy.description}} - {{:: 'remove' | translate}} -
{{:: 'authz-no-policies-assigned' | translate}}
-
- {{:: 'authz-policy-apply-policy.tooltip' | translate}} -
-
- -
- -
- - {{:: 'authz-policy-decision-strategy.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html deleted file mode 100644 index 9c5630a00..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-detail.html +++ /dev/null @@ -1,93 +0,0 @@ -
- - - -

{{:: 'authz-add-client-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- - -
- - -
- {{:: 'authz-policy-client-clients.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - -
{{:: 'clientId' | translate}}{{:: 'actions' | translate}}
{{client.clientId}} - -
{{:: 'authz-no-clients-assigned' | translate}}
-
-
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html deleted file mode 100644 index e48f550a0..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-client-scope-detail.html +++ /dev/null @@ -1,126 +0,0 @@ - - -
- - - -

{{:: 'authz-add-client-scope-policy' | translate}}

-

- {{originalPolicy.name|capitalize}} -

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-client-scope-client-scopes.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - -
{{:: 'name' | translate}}{{:: 'authz-required' | translate}}{{:: 'actions' | translate}}
{{clientScope.name}} - -
{{:: 'authz-no-client-scopes-assigned' | translate}}
-
-
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
-
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html deleted file mode 100644 index cc1353b83..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-group-detail.html +++ /dev/null @@ -1,126 +0,0 @@ - - -
- - - -

{{:: 'authz-add-group-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-group-claim.tooltip' | translate}} -
-
- -
-
-
- - -
- {{:: 'authz-policy-user-users.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - -
{{:: 'path' | translate}}Extend to Children{{:: 'actions' | translate}}
{{group.path}} - - - -
{{:: 'authz-no-groups-assigned' | translate}}
-
-
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
-
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html deleted file mode 100644 index 172c2b614..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-js-detail.html +++ /dev/null @@ -1,69 +0,0 @@ - -
- - - -

{{:: 'authz-add-js-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- -
-
-
- {{:: 'authz-policy-js-code.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html deleted file mode 100644 index 944868244..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-role-detail.html +++ /dev/null @@ -1,169 +0,0 @@ - - -
- - - -

{{:: 'authz-add-role-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-role-realm-roles.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - -
{{:: 'name' | translate}}{{:: 'authz-required' | translate}}{{:: 'actions' | translate}}
{{role.name}} - -
{{:: 'authz-no-roles-assigned' | translate}}
-
-
-
- - -
- -
- {{:: 'authz-policy-role-clients.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-role-client-roles.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - - - - - -
{{:: 'name' | translate}}{{:: 'client' | translate}}{{:: 'authz-required' | translate}}{{:: 'actions' | translate}}
{{role.name}}{{role.container.name}} - -
{{:: 'authz-no-roles-assigned' | translate}}
-
-
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
-
-
- - -
-
- {{policyState.page.previous}} -
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html deleted file mode 100644 index 4af901447..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-time-detail.html +++ /dev/null @@ -1,119 +0,0 @@ - -
- - - - -

{{:: 'authz-add-time-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- - -
- -
- {{:: 'authz-policy-time-not-before.tooltip' | translate}} -
-
- - -
- -
- {{:: 'authz-policy-time-not-on-after.tooltip' | translate}} -
-
- - -
-   to   -
- {{:: 'authz-policy-time-day-month.tooltip' | translate}} -
-
- - -
-   to   -
- {{:: 'authz-policy-time-month.tooltip' | translate}} -
-
- - -
-   to   -
- {{:: 'authz-policy-time-year.tooltip' | translate}} -
-
- - -
-   to   -
- {{:: 'authz-policy-time-hour.tooltip' | translate}} -
-
- - -
-   to   -
- {{:: 'authz-policy-time-minute.tooltip' | translate}} -
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html deleted file mode 100644 index 80d81ac58..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/provider/resource-server-policy-user-detail.html +++ /dev/null @@ -1,93 +0,0 @@ -
- - - -

{{:: 'authz-add-user-policy' | translate}}

-

{{originalPolicy.name|capitalize}}

- -
-
-
- -
- -
- {{:: 'authz-policy-name.tooltip' | translate}} -
-
- -
- -
- {{:: 'authz-policy-description.tooltip' | translate}} -
-
- - -
- - -
- {{:: 'authz-policy-user-users.tooltip' | translate}} -
-
- -
- - - - - - - - - - - - - - - - -
{{:: 'username' | translate}}{{:: 'actions' | translate}}
{{user.username}} - -
{{:: 'authz-no-users-assigned' | translate}}
-
-
-
- - -
- -
- - {{:: 'authz-policy-logic.tooltip' | translate}} -
- -
- -
-
- - -
-
-
-
- - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html deleted file mode 100644 index 19ff72020..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate-result.html +++ /dev/null @@ -1,72 +0,0 @@ -
-
- {{:: 'authz-evaluation-no-result' | translate}} -
- {{result.resource.name}} - -
- - -
-
- {{result.status}} - {{result.status}} -
-
- {{:: 'authz-evaluation-result.tooltip' | translate}} -
-
- - -
- {{:: 'authz-no-scopes-available' | translate}} - -
-
    -
  • - {{scope.name}} -
  • -
-
-
- {{:: 'authz-evaluation-scopes.tooltip' | translate}} -
-
- - -
- {{:: 'authz-evaluation-no-policies-resource' | translate}} -
-
-
  • - - {{policyResult.policy.name}} - - {{policyResult.policy.description}} - - - decision was {{policyResult.status}} - {{policyResult.status}} - by {{policyResult.policy.decisionStrategy}} decision. {{policyResult.policy.scopes.length > 0 ? (policyResult.status == 'DENY' ? 'Denied Scopes:' : 'Granted Scopes:') : ''}} {{scope}}{{$last ? '' : ', '}}{{policyResult.policy.scopes.length > 0 ? '.' : ''}} - -
  • - -
    -
    - {{:: 'authz-evaluation-policies.tooltip' | translate}} -
    -
    -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html deleted file mode 100644 index aedbdeadf..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-evaluate.html +++ /dev/null @@ -1,267 +0,0 @@ -
    - - - - - - - - - -
    -
    - -
    - -
    - {{:: 'authz-evaluation-authorization-data.tooltip' | translate}} -
    -
    - -
    -
    -
    -
    - {{:: 'authz-evaluation-identity-information' | translate}} - {{:: 'authz-evaluation-identity-information.tooltip' | translate}} - -
    - - -
    -
    - -
    -
    - {{:: 'authz-evaluation-client.tooltip' | translate}} -
    -
    - - -
    - - -
    - - {{:: 'authz-evaluation-user.tooltip' | translate}} -
    - -
    - - -
    - -
    - - {{:: 'authz-evaluation-role.tooltip' | translate}} -
    -
    -
    - {{:: 'authz-evaluation-contextual-info' | translate}} - {{:: 'authz-evaluation-contextual-info.tooltip' | translate}} - -
    - - -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{getContextAttributeName(key)}} - - - - -
    - - - - - - - -
    -
    - - {{:: 'authz-evaluation-contextual-attributes.tooltip' | translate}} -
    -
    -
    - {{:: 'authz-permissions' | translate}} - {{:: 'authz-evaluation-permissions.tooltip' | translate}} - -
    - - -
    - -
    - {{:: 'authz-permission-resource-apply-to-resource-type.tooltip' | translate}} - -
    -
    - - -
    - -
    - {{:: 'authz-permission-resource-resource.tooltip' | translate}} -
    -
    - - -
    - -
    - - {{:: 'authz-permission-resource-type.tooltip' | translate}} -
    -
    - - -
    - -
    - - {{:: 'authz-permission-scope-scope.tooltip' | translate}} -
    -
    - - -
    - -
    - - {{:: 'authz-permission-scope-scope.tooltip' | translate}} -
    -
    - - -
    - - - - - - - - - - - - - - - - - - - -
    {{:: 'authz-resource' | translate}}{{:: 'authz-scopes' | translate}}{{:: 'actions' | translate}}
    - {{:: 'authz-no-resources' | translate}} -
    {{resource.name ? resource.name : 'authz-evaluation-any-resource-with-scopes' | translate}} - {{:: 'authz-any-scope' | translate}}. - - - {{scope.name ? scope.name : scope}} {{$last ? '' : ', '}} - - - - -
    -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html b/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html deleted file mode 100644 index d142c44d6..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/policy/resource-server-policy-list.html +++ /dev/null @@ -1,117 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - {{:: 'filter' | translate}}:   -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    {{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'type' | translate}}{{:: 'actions' | translate}}
    -
    - - - -
    -
    - - - {{policy.name}}{{policy.description}}{{policy.type}} - -
    -
    -
    - -
    -
    -
    -
    -
    Dependent Permissions
    -
    - {{:: 'authz-no-policies-available' | translate}} - {{dep.name}}{{$last ? '' : ', '}} -
    -
    -
    -
    -
    -
    {{:: 'no-results' | translate}}{{:: 'authz-no-policies-available' | translate}}
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html deleted file mode 100644 index 5bf7d88af..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-detail.html +++ /dev/null @@ -1,77 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    -
    - - -
    -
    - -
    -
    - {{:: 'authz-import-config.tooltip' | translate}} -
    -
    -
    - - -
    -
    -
    -
    -
    - -
    - -
    - {{:: 'authz-policy-enforcement-mode.tooltip' | translate}} -
    -
    - - -
    - -
    - - {{:: 'authz-server-decision-strategy.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-remote-resource-management.tooltip' | translate}} -
    -
    -
    - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html deleted file mode 100644 index 86505db88..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-export-settings.html +++ /dev/null @@ -1,35 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - - - -
    - {{:: 'authz-export-settings.tooltip' | translate}} -
    -
    -
    -
    - {{:: 'download' | translate}} - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html deleted file mode 100644 index 3b4130e64..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-list.html +++ /dev/null @@ -1,49 +0,0 @@ -
    -

    - Resource Servers - Resource Servers are applications serving resources to their users. These resources can be a RESTFul API, web pages or any other kind of resource that must be managed and protected by a set of authorization policies. -

    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - Create -
    -
    -
    NamePolicy Enforcement ModeAllows Remote Resource Management ?Allows Entitlement ?
    {{server.name}}{{server.policyEnforcementMode | toCamelCase}}{{server.allowRemoteResourceManagement}}{{server.allowEntitlements}}
    No resultsNo servers available
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html deleted file mode 100644 index b3d6eca3d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-detail.html +++ /dev/null @@ -1,126 +0,0 @@ -
    - - - -

    {{:: 'authz-add-resource' | translate}}

    -

    {{originalResource.name|capitalize}}

    - -
    -
    -
    - -
    - -
    - {{:: 'authz-resource-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-resource-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-resource-owner.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-resource-type.tooltip' | translate}} -
    -
    - -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - {{:: 'authz-resource-uri.tooltip' | translate}} -
    -
    - - -
    - -
    - - {{:: 'authz-resource-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-icon-uri.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-resource-user-managed-access-enabled.tooltip' | translate}} -
    -
    - -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}}
    -
    - {{:: 'authz-resource-attributes.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html deleted file mode 100644 index dce000e48..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-resource-list.html +++ /dev/null @@ -1,169 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - {{:: 'filter' | translate}}:   -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    {{:: 'name' | translate}}{{:: 'type' | translate}}{{:: 'authz-uris' | translate}}{{:: 'authz-owner' | translate}}{{:: 'actions' | translate}}
    -
    - - - -
    -
    - - - - {{resource.name}} - - {{resource.type}} - {{:: 'authz-no-type-defined' | translate}} - - {{:: 'authz-no-uri-defined' | translate}} - {{resource.uris[0]}} - {{resource.uris.length}} {{:: 'authz-uris' | translate}} - {{resource.owner.name}} - -
    -
    -
    - -
    -
    -
    -
    -
    {{:: 'authz-scopes' | translate}}
    -
    - {{:: 'authz-no-scopes-assigned' | translate}} - {{scope.name}}{{$last ? '' : ', '}} -
    -
    {{:: 'authz-associated-permissions' | translate}}
    -
    - {{:: 'authz-no-permission-assigned' | translate}} - {{policy.name}}{{$last ? '' : ', '}} -
    -
    {{:: 'authz-uris' | translate}}
    -
    - {{:: 'authz-no-uri-defined' | translate}} - {{uri}}{{$last ? '' : ', '}} -
    -
    -
    -
    -
    -
    {{:: 'no-results' | translate}}{{:: 'authz-no-resources-available' | - translate}} -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html deleted file mode 100644 index d296abd73..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-detail.html +++ /dev/null @@ -1,50 +0,0 @@ -
    - - - -

    {{:: 'authz-add-scope' | translate}}

    -

    {{originalScope.name|capitalize}}

    - -
    -
    -
    - -
    - -
    - {{:: 'authz-scope-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-scope-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'authz-icon-uri.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html b/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html deleted file mode 100644 index 22c7f388a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/authz/resource-server-scope-list.html +++ /dev/null @@ -1,102 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    {{:: 'name' | translate}}{{:: 'actions' | translate}}
    -
    - - - -
    -
    - - - {{scope.name}} - -
    -
    -
    - -
    -
    -
    -
    -
    {{:: 'authz-resources' | translate}}
    -
    - {{:: 'authz-no-resources-assigned' | translate}} - {{resource.name}}{{$last ? '' : ', '}} -
    -
    {{:: 'authz-associated-permissions' | translate}}
    -
    - {{:: 'authz-no-permission-assigned' | translate}} - {{policy.name}}{{$last ? '' : ', '}} -
    -
    -
    -
    -
    -
    {{:: 'no-results' | translate}}{{:: 'authz-no-scopes-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/brute-force.html b/deps/keycloak/themes/base/admin/resources/partials/brute-force.html deleted file mode 100644 index 6ab009239..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/brute-force.html +++ /dev/null @@ -1,114 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'permanent-lockout.tooltip' | translate}} -
    - -
    - - -
    - -
    - {{:: 'max-login-failures.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'wait-increment.tooltip' | translate}} -
    -
    - - -
    - -
    - {{:: 'quick-login-check-millis.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'min-quick-login-wait.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'max-wait.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'failure-reset-time.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/ciba-policy.html b/deps/keycloak/themes/base/admin/resources/partials/ciba-policy.html deleted file mode 100644 index 9c7ccd1d7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/ciba-policy.html +++ /dev/null @@ -1,62 +0,0 @@ -
    -

    {{:: 'authentication' | translate}}

    - - -
    - -
    - -
    -
    - -
    -
    - {{:: 'ciba-backchannel-tokendelivery-mode.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'ciba-expires-in.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'ciba-interval.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'ciba-auth-requested-user-hint.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/claims.html b/deps/keycloak/themes/base/admin/resources/partials/claims.html deleted file mode 100644 index 27357cad9..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/claims.html +++ /dev/null @@ -1,62 +0,0 @@ -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-clustering-node.html b/deps/keycloak/themes/base/admin/resources/partials/client-clustering-node.html deleted file mode 100644 index 56eb9db8d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-clustering-node.html +++ /dev/null @@ -1,37 +0,0 @@ -
    - - -

    {{:: 'add-node' | translate}}

    -

    - {{node.host|capitalize}} - -

    - -
    -
    - -
    - -
    -
    -
    - -
    - {{node.lastRegistration}} -
    -
    -
    -
    - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-clustering.html b/deps/keycloak/themes/base/admin/resources/partials/client-clustering.html deleted file mode 100644 index 72ff43789..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-clustering.html +++ /dev/null @@ -1,76 +0,0 @@ -
    - - - - - -
    - {{:: 'basic-configuration' | translate}} -
    -
    - -
    -
    -
    - - -
    -
    -
    - {{:: 'node-reregistration-timeout.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    - {{:: 'registered-cluster-nodes' | translate}} - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'node-host' | translate}}{{:: 'last-registration' | translate}}{{:: 'actions' | translate}}
    {{node.host}}{{node.lastRegistration}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-registered-cluster-nodes' | translate}}
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html deleted file mode 100644 index 39e9ebc3a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-generic.html +++ /dev/null @@ -1,14 +0,0 @@ -
    -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html deleted file mode 100644 index 43a3ca769..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-jwt.html +++ /dev/null @@ -1,26 +0,0 @@ -
    - -
    - -
    -
    - -
    -
    - {{:: 'token-endpoint-auth-signing-alg.tooltip' | translate}} -
    - -
    - -
    -
    -
    {{:: 'need-to-configure-keys' | translate}}
    -
    -
    -
    - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html deleted file mode 100644 index 444bf02fa..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret-jwt.html +++ /dev/null @@ -1,39 +0,0 @@ -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    - -
    -
    - -
    -
    - {{:: 'token-endpoint-auth-signing-alg.tooltip' | translate}} -
    - -
    -
    - -
    -
    - -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html deleted file mode 100644 index 7cf5bf135..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-secret.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html deleted file mode 100644 index c3ee5f12a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials-x509.html +++ /dev/null @@ -1,21 +0,0 @@ -
    -
    -
    - - {{:: 'subjectdn-tooltip' | translate}} -
    -
    -
    - -
    -
    -
    -
    -
    -
    - - -
    -
    -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-credentials.html b/deps/keycloak/themes/base/admin/resources/partials/client-credentials.html deleted file mode 100644 index e6865a3e7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-credentials.html +++ /dev/null @@ -1,38 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'client-authenticator.tooltip' | translate}} -
    -
    -
    - -
    -
    - -
    - -
    -
    - -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-detail.html deleted file mode 100644 index 11acdc716..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-detail.html +++ /dev/null @@ -1,823 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - -
    - {{:: 'client-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client.name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client.description.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'alwaysDisplayInConsole.tooltip' | translate}} -
    -
    - -
    - {{originName}} -
    - {{:: 'client-origin.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'consent-required.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client.display-on-consent-screen.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client.consent-screen-text.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'login-theme.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'client-protocol.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'access-type.tooltip' | translate}} -
    -
    - - {{:: 'standard-flow-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'implicit-flow-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'direct-access-grants-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'service-accounts-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'oauth2-device-authorization-grant-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'oidc-ciba-grant-enabled.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'authz-authorization-services-enabled.tooltip' | translate}} -
    - -
    -
    -
    - -
    - -
    - {{:: 'include-authnstatement.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'include-onetimeuse-condition.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'artifact-binding.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'sign-documents.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'sign-documents-redirect-enable-key-info-ext.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'sign-assertions.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'signature-algorithm.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'saml-signature-keyName-transformer.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'canonicalization-method.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'encrypt-assertions.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-signature-required.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'force-post-binding.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'front-channel-logout.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'force-name-id-format.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'name-id-format.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'root-url.tooltip' | translate}} -
    - -
    - - -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - - {{:: 'valid-redirect-uris.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'base-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'admin-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'master-saml-processing-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'idp-sso-url-ref.urlhint' | translate}} {{samlIdpInitiatedUrl(clientEdit.attributes.saml_idp_initiated_sso_url_name)}} -
    -
    - {{:: 'idp-sso-url-ref.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'idp-sso-relay-state.tooltip' | translate}} -
    -
    - - -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - - {{:: 'web-origins.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'backchannel-logout-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'backchannel-logout-session-required.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'backchannel-logout-revoke-offline-sessions.tooltip' | translate}} -
    -
    -
    - {{:: 'fine-saml-endpoint-conf' | translate}} {{:: 'fine-saml-endpoint-conf.tooltip' | translate}} -
    - -
    - -
    - {{:: 'assertion-consumer-post-binding-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'assertion-consumer-redirect-binding-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'logout-service-post-binding-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'logout-service-redir-binding-url.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'logout-service-artifact-binding-url.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'artifact-binding-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'artifact-resolution-service-url.tooltip' | translate}} -
    -
    - -
    - {{:: 'fine-oidc-endpoint-conf' | translate}} {{:: 'fine-oidc-endpoint-conf.tooltip' | translate}} - -
    - -
    -
    - -
    -
    - {{:: 'access-token-signed-response-alg.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'id-token-signed-response-alg.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'id-token-encrypted-response-alg.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'id-token-encrypted-response-enc.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'user-info-signed-response-alg.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'request-object-signature-alg.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'request-object-required.tooltip' | translate}} -
    -
    - -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - {{:: 'request-uris.tooltip' | translate}} -
    -
    - -
    - {{:: 'oidc-compatibility-modes' | translate}} {{:: 'oidc-compatibility-modes.tooltip' | translate}} -
    - -
    - -
    - {{:: 'exclude-session-state-from-auth-response.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'use-refresh-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'use-refresh-token-for-client-credentials-grant.tooltip' | translate}} -
    -
    - -
    - {{:: 'advanced-client-settings' | translate}} {{:: 'advanced-client-settings.tooltip' | translate}} - -
    - - -
    - - -
    - {{:: 'access-token-lifespan.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'saml-assertion-lifespan.tooltip' | translate}} -
    - -
    - -
    - - -
    - {{:: 'client-session-idle.tooltip' | translate}} -
    - -
    - -
    - - -
    - {{:: 'client-session-max.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-offline-session-idle.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-offline-session-max.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'oauth2-device-code-lifespan.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'oauth2-device-polling-interval.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'tls-client-certificate-bound-access-tokens.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'use-idtoken-as-detached-signature.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'pkce-code-challenge-method.tooltip' | translate}} -
    -
    - -
    - {{:: 'client-flow-bindings' | translate}} {{:: 'client-flow-bindings.tooltip' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'browser-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'direct-grant-flow.tooltip' | translate}} -
    -
    - - - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-import.html b/deps/keycloak/themes/base/admin/resources/partials/client-import.html deleted file mode 100644 index 18ec93caf..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-import.html +++ /dev/null @@ -1,46 +0,0 @@ -
    - - - -

    {{:: 'import-client' | translate}}

    - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - - -
    - - {{files[0].name}} - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html b/deps/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html deleted file mode 100644 index 8c0cb1925..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-initial-access-create.html +++ /dev/null @@ -1,63 +0,0 @@ -
    - - - -

    {{:: 'add-client' | translate}}

    - -
    - -
    - - -
    - - -
    - {{:: 'expiration.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'count.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - -
    - -
    - - {{:: 'initial-access.copyPaste.tooltip' | translate}} -
    - -
    -
    - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-initial-access.html b/deps/keycloak/themes/base/admin/resources/partials/client-initial-access.html deleted file mode 100644 index b2e683d2b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-initial-access.html +++ /dev/null @@ -1,55 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    {{:: 'id' | translate}}{{:: 'created' | translate}}{{:: 'expires' | translate}}{{:: 'count' | translate}}{{:: 'remainingCount' | translate}}{{:: 'actions' | translate}}
    {{ia.id}}{{(ia.timestamp * 1000)|date:('dateFormat' | translate)}} {{(ia.timestamp * 1000)|date:('timeFormat' | translate)}}{{((ia.timestamp + ia.expiration) * 1000)|date:('dateFormat' | translate)}} {{((ia.timestamp + ia.expiration) * 1000)|date:('timeFormat' | translate)}}{{ia.count}}{{ia.remainingCount}}{{:: 'delete' | translate}}
    {{:: 'no-results' | translate}}{{:: 'no-initial-access-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-installation.html b/deps/keycloak/themes/base/admin/resources/partials/client-installation.html deleted file mode 100644 index d03fdd267..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-installation.html +++ /dev/null @@ -1,36 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    -
    - {{:: 'download' | translate}} - -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-keys.html b/deps/keycloak/themes/base/admin/resources/partials/client-keys.html deleted file mode 100644 index c412e2726..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-keys.html +++ /dev/null @@ -1,146 +0,0 @@ -
    - - - - - -
    -
    - {{:: 'import-keys-and-cert' | translate}} {{:: 'import-keys-and-cert.tooltip' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'archive-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-password.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'store-password.tooltip' | translate}} -
    -
    - - -
    -
    - - -
    -
    -
    - {{:: 'download-keys-and-cert' | translate}} Client key pair, cert, and realm certificate will be stuffed into a PKCS12 or Java keystore that you can use in your clients. -
    - -
    -
    - -
    -
    - Java keystore or PKCS12 archive format. -
    -
    - -
    - -
    - Archive alias for your private key and certificate. -
    -
    - -
    - -
    - Password to access the private key in the archive -
    -
    - -
    - -
    - Realm certificate is stored in archive too. This is the alias to it. -
    -
    - -
    - -
    - Password to access the archive itself -
    -
    -
    - -
    -
    -
    -
    - Keys and Certificate Keys and cert in PEM format. -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-list.html deleted file mode 100644 index 6640d5a9f..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-list.html +++ /dev/null @@ -1,68 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-mappers-add.html b/deps/keycloak/themes/base/admin/resources/partials/client-mappers-add.html deleted file mode 100644 index 653777924..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-mappers-add.html +++ /dev/null @@ -1,53 +0,0 @@ -
    - - - -

    {{:: 'add-builtin-protocol-mapper' | translate}}

    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'name' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}{{:: 'add' | translate}}
    {{mapper.name}}{{mapperTypes[mapper.protocolMapper].category}}{{mapperTypes[mapper.protocolMapper].name}}
    {{:: 'no-mappers-available' | translate}}
    - -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-mappers.html b/deps/keycloak/themes/base/admin/resources/partials/client-mappers.html deleted file mode 100644 index 83123c278..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-mappers.html +++ /dev/null @@ -1,55 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'name' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}{{:: 'priority-order' | translate}}{{:: 'actions' | translate}}
    {{mapper.name}}{{mapperTypes[mapper.protocolMapper].category}}{{mapperTypes[mapper.protocolMapper].name}}{{mapperTypes[mapper.protocolMapper].priority}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-mappers-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html b/deps/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html deleted file mode 100644 index 3d2aaf7a1..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-offline-sessions.html +++ /dev/null @@ -1,59 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - -
    - {{:: 'offline-tokens.tooltip' | translate}} -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'user' | translate}}{{:: 'from-ip' | translate}}{{:: 'token-issued' | translate}}{{:: 'last-refresh' | translate}}
    -
    - - - -
    -
    {{session.username}}{{session.ipAddress}}{{session.start | date:'medium'}}{{session.lastAccess | date:'medium'}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html b/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html deleted file mode 100644 index b293cdc94..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-export.html +++ /dev/null @@ -1,57 +0,0 @@ -
    - - - -

    {{:: 'generate-private-key' | translate}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'archive-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-password.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'store-password.tooltip' | translate}} -
    -
    -
    - - -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html b/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html deleted file mode 100644 index 1b91e4391..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-key-import.html +++ /dev/null @@ -1,62 +0,0 @@ -
    - - - -

    {{:: 'import-client-certificate' | translate}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'archive-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'jwt-import.key-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'store-password.tooltip' | translate}} -
    -
    - -
    -
    - - -
    - - {{files[0].name}} - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html b/deps/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html deleted file mode 100644 index ba4a8036f..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-oidc-keys.html +++ /dev/null @@ -1,90 +0,0 @@ -
    - - - - - -
    -
    - -
    - -
    - {{:: 'use-jwks-url.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'jwks-url.tooltip' | translate}} -
    - -
    - -
    - - {{:: 'certificate.tooltip' | translate}} - -
    - -
    -
    - -
    - - {{:: 'publicKey.tooltip' | translate}} - -
    - -
    -
    - -
    - - {{:: 'kid.tooltip' | translate}} - -
    -
    -
    - -
    -
    -
    -
    - -
    - -
    -
    -
    {{:: 'no-client-certificate-configured' | translate}}
    -
    -
    -
    - -
    - -
    -
    - - - - -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-json.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-json.html deleted file mode 100644 index a6150df5a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-json.html +++ /dev/null @@ -1,60 +0,0 @@ - - -
    - - - - - - -
    - - -
    -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-list.html deleted file mode 100644 index 087510568..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-list.html +++ /dev/null @@ -1,74 +0,0 @@ - - -
    - - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'enabled' | translate}}{{:: 'actions' | translate}}
    {{clientPolicy.name}}{{clientPolicy.description}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    -
    - -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html deleted file mode 100644 index 45c0a8a67..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit-condition.html +++ /dev/null @@ -1,65 +0,0 @@ - - -
    - - - -

    {{conditionType.id|capitalize}}

    -

    {{:: 'create-condition' | translate}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{conditionType.helpText}} -
    -
    - -
    - -
    - {{conditionType.helpText}} -
    - -
    - -
    -
    - - -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html deleted file mode 100644 index 41476f6d4..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-policy-edit.html +++ /dev/null @@ -1,140 +0,0 @@ - - -
    - - - -

    {{:: 'create-client-policy' | translate}}

    -

    {{editedPolicy.name|capitalize}}

    - -
    - -
    - -
    - -
    - -
    - {{:: 'client-policy-name.tooltip' | translate}} -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    - {{:: 'client-policy-enabled.tooltip' | translate}} -
    - -
    - -
    - -
    -
    - - -
    -
    - -
    - -
    - - {{:: 'conditions' | translate}} {{:: 'client-policy-conditions.tooltip' | translate}} - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'type' | translate}}{{:: 'actions' | translate}}
    {{condition.condition}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-conditions-available' | translate}}
    - -
    - -
    - {{:: 'client-profiles' | translate}}{{:: 'client-profiles.tooltip' | translate}} - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'name' | translate}}{{:: 'actions' | translate}}
    {{profileName}}{{:: 'delete' | translate}}
    {{:: 'no-client-profiles-configured' | translate}}
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html deleted file mode 100644 index 5bf8da664..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit-executor.html +++ /dev/null @@ -1,65 +0,0 @@ - - -
    - - - -

    {{executorType.id|capitalize}}

    -

    {{:: 'create-executor' | translate}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{executorType.helpText}} -
    -
    - -
    - -
    - {{executorType.helpText}} -
    - -
    - -
    -
    - - -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html deleted file mode 100644 index 1e3e71e67..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-edit.html +++ /dev/null @@ -1,97 +0,0 @@ - - -
    - - - -

    {{:: 'create-client-profile' | translate}}

    -

    {{editedProfile.name|capitalize}}

    - -
    - -
    - -
    - -
    - -
    - {{:: 'client-profile-name.tooltip' | translate}} -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    - - -
    -
    - -
    - -
    - - {{:: 'executors' | translate}} {{:: 'client-profile-executors.tooltip' | translate}} - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'type' | translate}}{{:: 'actions' | translate}}
    {{executor.executor}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-executors-available' | translate}}
    - -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html deleted file mode 100644 index e2fae4aea..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-json.html +++ /dev/null @@ -1,60 +0,0 @@ - - -
    - - - - - - -
    - - -
    -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html deleted file mode 100644 index a0b9f8903..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-policies-profiles-list.html +++ /dev/null @@ -1,80 +0,0 @@ - - -
    - - - - - - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'name' | translate}}{{:: 'description' | translate}}{{:: 'global' | translate}}{{:: 'actions' | translate}}
    {{clientProfile.name}}{{clientProfile.description}}{{:: 'true' | translate}}{{:: 'edit' | translate}}
    {{clientProfile.name}}{{clientProfile.description}}{{:: 'false' | translate}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    -
    - -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html deleted file mode 100644 index b2af24a93..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-protocol-mapper-detail.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-reg-policies.html b/deps/keycloak/themes/base/admin/resources/partials/client-reg-policies.html deleted file mode 100644 index 9ca912fcb..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-reg-policies.html +++ /dev/null @@ -1,106 +0,0 @@ - - -
    - - - - -
    - -
    - {{:: 'anonymous-policies' | translate}}{{:: 'anonymous-policies.tooltip' | translate}} - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'policy-name' | translate}}{{:: 'provider-id' | translate}}{{:: 'actions' | translate}}
    {{instance.name}}{{instance.providerId}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-client-reg-policies-configured' | translate}}
    -
    - -
    - {{:: 'auth-policies' | translate}}{{:: 'auth-policies.tooltip' | translate}} - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'policy-name' | translate}}{{:: 'provider-id' | translate}}{{:: 'actions' | translate}}
    {{instance.name}}{{instance.providerId}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-client-reg-policies-configured' | translate}}
    -
    - - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html deleted file mode 100644 index 91a8ed9d1..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-reg-policy-detail.html +++ /dev/null @@ -1,68 +0,0 @@ - - -
    - - - -
    -
    - {{headerTitle}}{{:: providerType.helpText | translate}} -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'client-reg-policy.name.tooltip' | translate}} -
    -
    - -
    - -
    - {{providerType.helpText}} -
    - -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html b/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html deleted file mode 100644 index cb07613a5..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-create.html +++ /dev/null @@ -1,55 +0,0 @@ - - -
    - - - -

    {{:: 'add-client-reg-trusted-host' | translate}}

    - -
    - -
    - -
    - -
    - {{:: 'client-reg-hostname.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-reg-count.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html deleted file mode 100644 index 5644fc1dd..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-reg-trusted-host-detail.html +++ /dev/null @@ -1,64 +0,0 @@ - - -
    - - - -

    {{hostName}}

    - -
    - -
    - -
    - -
    - {{:: 'client-reg-hostname.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-reg-count.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-reg-remainingCount.tooltip' | translate}} -
    - -
    -
    - - - -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html b/deps/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html deleted file mode 100644 index 327b70d9a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-registration-access-token.html +++ /dev/null @@ -1,18 +0,0 @@ -
    -
    -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    - {{:: 'registrationAccessToken.tooltip' | translate}} -
    -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-revocation.html b/deps/keycloak/themes/base/admin/resources/partials/client-revocation.html deleted file mode 100644 index 95db767ae..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-revocation.html +++ /dev/null @@ -1,30 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - -
    - {{:: 'client-revoke.not-before.tooltip' | translate}} -
    -
    -
    -
    - - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-role-attributes.html b/deps/keycloak/themes/base/admin/resources/partials/client-role-attributes.html deleted file mode 100644 index 47ef4167e..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-role-attributes.html +++ /dev/null @@ -1,45 +0,0 @@ -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}}
    - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-role-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-role-detail.html deleted file mode 100644 index 8877dbeea..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-role-detail.html +++ /dev/null @@ -1,140 +0,0 @@ -
    - - - - - -
    - -
    -
    - - -
    - -
    -
    -
    - - -
    - - -
    -
    -
    - -
    - -
    - {{:: 'composite-roles.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - -
    -
    - -
    - {{:: 'composite-roles' | translate}} - -
    - - -
    -
    -
    - - {{:: 'composite.available-realm-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'composite.associated-realm-roles.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - -
    - - -
    - - -
    -
    -
    - - {{:: 'available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.associated-roles.tooltip' | translate}} - - -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-role-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-role-list.html deleted file mode 100644 index 4feff0ae0..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-role-list.html +++ /dev/null @@ -1,64 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    {{:: 'role-name' | translate}}{{:: 'composite' | translate}}{{:: 'description' | translate}}{{:: 'actions' | translate}}
    {{role.name}}{{role.description}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-results' | translate}}{{:: 'no-client-roles-available' | translate}}
    -
    - - - -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-role-users.html b/deps/keycloak/themes/base/admin/resources/partials/client-role-users.html deleted file mode 100644 index 534917132..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-role-users.html +++ /dev/null @@ -1,52 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'username' | translate}}{{:: 'last-name' | translate}}{{:: 'first-name' | translate}}{{:: 'email' | translate}}
    -
    - - - -
    -
    {{user.username}}{{user.lastName}}{{user.firstName}}{{user.email}}{{:: 'edit' | translate}}
    {{:: 'no-role-members' | translate}}{{:: 'no-role-members' | translate}}
    - -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html b/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html deleted file mode 100644 index 761019219..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-export.html +++ /dev/null @@ -1,63 +0,0 @@ -
    - - - -

    {{:: 'export-saml-key' | translate}} {{client.clientId|capitalize}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'archive-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-password.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'realm-certificate-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'store-password.tooltip' | translate}} -
    -
    -
    - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html b/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html deleted file mode 100644 index f37ac7a14..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-saml-key-import.html +++ /dev/null @@ -1,62 +0,0 @@ -
    - - - -

    {{:: 'import-saml-key' | translate}} {{client.clientId|capitalize}}

    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'archive-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'key-alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'store-password.tooltip' | translate}} -
    -
    - -
    -
    - - -
    - - {{files[0].name}} - -
    -
    -
    -
    - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-saml-keys.html b/deps/keycloak/themes/base/admin/resources/partials/client-saml-keys.html deleted file mode 100644 index 776349d5b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-saml-keys.html +++ /dev/null @@ -1,66 +0,0 @@ -
    - - - - - -
    -
    - {{:: 'signing-key' | translate}} {{:: 'saml-signing-key' | translate}} -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    -
    - - - -
    -
    -
    -
    - {{:: 'encryption-key' | translate}} {{:: 'saml-encryption-key.tooltip' | translate}} -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    -
    - - - -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-detail.html deleted file mode 100644 index 88c3216d8..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-detail.html +++ /dev/null @@ -1,84 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - -
    - {{:: 'client-scope.name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-scope.description.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'client-scope.protocol.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-scope.display-on-consent-screen.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-scope.consent-screen-text.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-scope.include-in-token-scope.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-scope.gui-order.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-list.html deleted file mode 100644 index 1f945fcc2..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-list.html +++ /dev/null @@ -1,60 +0,0 @@ -
    -

    - {{:: 'client-scopes' | translate}} - {{:: 'client-scopes.tooltip' | translate}} -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    {{:: 'name' | translate}}{{:: 'protocol' | translate}}{{:: 'gui-order' | translate}}{{:: 'actions' | translate}}
    {{clientScope.name}}{{clientScope.protocol}}{{clientScope.attributes['gui.order']}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-results' | translate}}{{:: 'no-clients-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html deleted file mode 100644 index 413c06554..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers-add.html +++ /dev/null @@ -1,53 +0,0 @@ -
    - - - -

    {{:: 'add-builtin-protocol-mapper' | translate}}

    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'name' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}{{:: 'add' | translate}}
    {{mapper.name}}{{mapperTypes[mapper.protocolMapper].category}}{{mapperTypes[mapper.protocolMapper].name}}
    {{:: 'no-mappers-available' | translate}}
    - -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html deleted file mode 100644 index 3b9591091..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappers.html +++ /dev/null @@ -1,55 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'name' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}{{:: 'priority-order' | translate}}{{:: 'actions' | translate}}
    {{mapper.name}}{{mapperTypes[mapper.protocolMapper].category}}{{mapperTypes[mapper.protocolMapper].name}}{{mapperTypes[mapper.protocolMapper].priority}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-mappers-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html deleted file mode 100644 index 1343f1b4c..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-mappings.html +++ /dev/null @@ -1,127 +0,0 @@ -
    - - - - - -

    {{client.clientId}} {{:: 'scope-mappings' | translate}}

    -

    -
    -
    -
    - - {{:: 'full-scope-allowed.tooltip' | translate}} -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    - - {{:: 'scope.available-roles.tooltip' | translate}} - - - -
    -
    - - {{:: 'assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'realm.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    - -
    -
    -
    - - {{:: 'assign.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html deleted file mode 100644 index 0f6cb5c80..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-protocol-mapper-detail.html +++ /dev/null @@ -1,13 +0,0 @@ -
    - - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html b/deps/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html deleted file mode 100644 index 3180826b7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scope-scope-mappings.html +++ /dev/null @@ -1,116 +0,0 @@ -
    - - - - - -

    {{clientScope.name}} {{:: 'scope-mappings' | translate}}

    -

    - -
    -
    - -
    -
    -
    - - {{:: 'scope.available-roles.tooltip' | translate}} - - - -
    -
    - - {{:: 'assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'realm.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    - -
    -
    -
    - - {{:: 'assign.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html b/deps/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html deleted file mode 100644 index e8702ad2a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-evaluate.html +++ /dev/null @@ -1,268 +0,0 @@ - - -
    - - - - - - - -
    -
    -
    - -
    - -
    - {{:: 'scope-parameter.tooltip' | translate}} -
    -
    - -
    - - {{:: 'client-scopes.evaluate.scopes.tooltip' | translate}} - -
    -
    -
    - - {{:: 'client-scopes.evaluate.scopes.available.tooltip' | translate}} - - -
    -
    - - {{:: 'client-scopes.evaluate.scopes.assigned.tooltip' | translate}} - - -
    -
    - - {{:: 'client-scopes.evaluate.scopes.effective.tooltip' | translate}} - -
    -
    -
    -
    - -
    - - -
    - - -
    - - {{:: 'client-scopes.evaluate.user.tooltip' | translate}} -
    - -
    -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'name' | translate}}{{:: 'parent-client-scope' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}{{:: 'priority-order' | translate}}
    {{mapper.mapperName}}{{mapper.containerName}}{{mapperTypes[mapper.protocolMapper].category}}{{mapperTypes[mapper.protocolMapper].name}}{{mapperTypes[mapper.protocolMapper].priority}}
    {{:: 'no-mappers-available' | translate}}
    - - - -
    -
    - -
    -
    -
    - - {{:: 'client-scopes.evaluate.not-granted-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client-scopes.evaluate.granted-realm-effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    - -
    -
    -
    - - {{:: 'client-scopes.evaluate.not-granted-roles.tooltip' | translate}} - -
    -
    - - {{:: 'client-scopes.evaluate.granted-realm-effective-roles.tooltip' | translate}} - -
    -
    -
    -
    -
    - - - -
    -
    -
    - -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html b/deps/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html deleted file mode 100644 index e30570aee..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-realm-default.html +++ /dev/null @@ -1,99 +0,0 @@ -
    -

    - {{:: 'default-client-scopes' | translate}} - {{:: 'default-client-scopes.tooltip' | translate}} -

    - - - -
    -
    - - {{:: 'default-client-scopes.default.tooltip' | translate}} - -
    -
    -
    - - {{:: 'default-client-scopes.default.available.tooltip' | translate}} - - -
    -
    - - {{:: 'default-client-scopes.default.assigned.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - - {{:: 'default-client-scopes.optional.tooltip' | translate}} - -
    -
    -
    - - {{:: 'default-client-scopes.optional.available.tooltip' | translate}} - - -
    -
    - - {{:: 'default-client-scopes.optional.assigned.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html b/deps/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html deleted file mode 100644 index db39cf0ab..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-scopes-setup.html +++ /dev/null @@ -1,123 +0,0 @@ - - -
    - - - - - - - -
    -
    - - {{:: 'client-scopes.default.tooltip' | translate}} - -
    -
    -
    - - {{:: 'client-scopes.default.available.tooltip' | translate}} - - -
    -
    - - {{:: 'client-scopes.default.assigned.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - - {{:: 'client-scopes.optional.tooltip' | translate}} - -
    -
    -
    - - {{:: 'client-scopes.optional.available.tooltip' | translate}} - - -
    -
    - - {{:: 'client-scopes.optional.assigned.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html b/deps/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html deleted file mode 100644 index bc17f1b24..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-service-account-roles.html +++ /dev/null @@ -1,127 +0,0 @@ -
    - - - - - -

    {{client.clientId}} {{:: 'service-accounts' | translate}}

    -

    - -
    -
    - -
    -
    -
    - - {{:: 'service-account.available-roles.tooltip' | translate}} - - - -
    -
    - - {{:: 'service-account.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'realm.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    - -
    -
    -
    - - {{:: 'assign.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'client.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    -
    - -
    - -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-sessions.html b/deps/keycloak/themes/base/admin/resources/partials/client-sessions.html deleted file mode 100644 index 5dbb2afdd..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-sessions.html +++ /dev/null @@ -1,57 +0,0 @@ -
    - - - - - -
    -
    -
    - -
    - -
    - {{:: 'active-sessions.tooltip' | translate}} -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'user' | translate}}{{:: 'from-ip' | translate}}{{:: 'session-start' | translate}}
    -
    - - - -
    -
    {{session.username}}{{session.ipAddress}}{{session.start | date:'medium'}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-storage-generic.html b/deps/keycloak/themes/base/admin/resources/partials/client-storage-generic.html deleted file mode 100644 index 90ed088ef..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-storage-generic.html +++ /dev/null @@ -1,207 +0,0 @@ -
    - - -
    -
    - {{:: 'required-settings' | translate}} -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'client-storage.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'console-display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'priority.tooltip' | translate}} -
    - - - -
    - -
    - {{:: 'client-storage-cache-policy' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'clientStorage.cachePolicy.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'clientStorage.cachePolicy.evictionDay.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'clientStorage.cachePolicy.evictionHour.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'clientStorage.cachePolicy.evictionMinute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'clientStorage.cachePolicy.maxLifespan.tooltip' | translate}} -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/client-storage-list.html b/deps/keycloak/themes/base/admin/resources/partials/client-storage-list.html deleted file mode 100644 index c111eaa14..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/client-storage-list.html +++ /dev/null @@ -1,67 +0,0 @@ -
    - - - -
    -
    - -
    -

    - {{:: 'client-storage' | translate}} -

    - {{:: 'client-storage-list-no-entries' | translate}} -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'id' | translate}}{{:: 'enabled' | translate}}{{:: 'provider-name' | translate}}{{:: 'priority' | translate}}{{:: 'actions' | translate}}
    {{getInstanceName(instance)}}{{isProviderEnabled(instance)}}{{getInstanceProvider(instance) | capitalize}}{{getInstancePriority(instance)}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-client-storage-providers-configured' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/create-client.html b/deps/keycloak/themes/base/admin/resources/partials/create-client.html deleted file mode 100644 index 0c47b312f..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/create-client.html +++ /dev/null @@ -1,72 +0,0 @@ -
    - - - - - -
    -
    -
    - - -
    - - -
    - -
    - - -
    -
    - -
    - -
    - -
    - {{:: 'client-id.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'client-protocol.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'root-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'master-saml-processing-url.tooltip' | translate}} -
    -
    -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/create-execution.html b/deps/keycloak/themes/base/admin/resources/partials/create-execution.html deleted file mode 100644 index d68dc9c91..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/create-execution.html +++ /dev/null @@ -1,31 +0,0 @@ -
    - -
    -

    {{:: 'create-authenticator-execution' | translate}}

    -

    {{:: 'create-authenticator-execution' | translate}}

    -

    {{:: 'create-form-action-execution' | translate}}

    -
    - -
    -
    - -
    -
    - -
    -
    - {{provider.description}} -
    -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/create-flow-execution.html b/deps/keycloak/themes/base/admin/resources/partials/create-flow-execution.html deleted file mode 100644 index 195a7ff05..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/create-flow-execution.html +++ /dev/null @@ -1,55 +0,0 @@ -
    -

    {{:: 'create-execution-flow' | translate}}

    - - - -
    -
    - -
    - -
    - {{:: 'flow.alias.tooltip' | translate}} -
    -
    - - -
    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'flow-type.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{provider.description}} -
    -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/create-flow.html b/deps/keycloak/themes/base/admin/resources/partials/create-flow.html deleted file mode 100644 index efd34e99d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/create-flow.html +++ /dev/null @@ -1,43 +0,0 @@ -
    -

    {{:: 'create-top-level-form' | translate}}

    - - - -
    -
    - -
    - -
    - {{:: 'flow.alias.tooltip' | translate}} -
    -
    - - -
    - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'top-level-flow-type.tooltip' | translate}} -
    -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/create-group.html b/deps/keycloak/themes/base/admin/resources/partials/create-group.html deleted file mode 100644 index 255cf32a7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/create-group.html +++ /dev/null @@ -1,25 +0,0 @@ -
    -
    -

    {{:: 'create-group' | translate}}

    -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/default-groups.html b/deps/keycloak/themes/base/admin/resources/partials/default-groups.html deleted file mode 100644 index 8d0866e7a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/default-groups.html +++ /dev/null @@ -1,91 +0,0 @@ -
    - - -
    -
    - - -
    -
    -
    - - - - - - - - - - - -
    -
    - - {{:: 'default-groups.tooltip' | translate}} - -
    - -
    -
    -
    - -
    -
    -
    - - - - - - - - - - - -
    -
    -
    - - {{:: 'available-groups.tooltip' | translate}} -
    -
    -
    - -
    - -
    -
    -
    -   - -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/defense-headers.html b/deps/keycloak/themes/base/admin/resources/partials/defense-headers.html deleted file mode 100644 index 51acdf187..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/defense-headers.html +++ /dev/null @@ -1,71 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'x-frame-options-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'content-sec-policy-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'content-sec-policy-report-only-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'content-type-options-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'robots-tag-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'x-xss-protection-tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'strict-transport-security-tooltip' | translate}} -
    -
    -
    -
    - - -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/forbidden.html b/deps/keycloak/themes/base/admin/resources/partials/forbidden.html deleted file mode 100644 index b40f2e7fc..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/forbidden.html +++ /dev/null @@ -1,7 +0,0 @@ -
    -
    -

    Forbidden

    -

    You don't have access to the requested resource.

    - Go to the home page » -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/group-attributes.html b/deps/keycloak/themes/base/admin/resources/partials/group-attributes.html deleted file mode 100644 index e12c553d0..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/group-attributes.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}}
    - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/group-detail.html b/deps/keycloak/themes/base/admin/resources/partials/group-detail.html deleted file mode 100644 index 8fd646179..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/group-detail.html +++ /dev/null @@ -1,28 +0,0 @@ -
    - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/group-list.html b/deps/keycloak/themes/base/admin/resources/partials/group-list.html deleted file mode 100644 index 3412e6a2d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/group-list.html +++ /dev/null @@ -1,50 +0,0 @@ -
    - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - - - - -
    -
    -
    -
    -
    -
    -
    -
    - -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/group-members.html b/deps/keycloak/themes/base/admin/resources/partials/group-members.html deleted file mode 100644 index ffdf3623c..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/group-members.html +++ /dev/null @@ -1,48 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'username' | translate}}{{:: 'last-name' | translate}}{{:: 'first-name' | translate}}{{:: 'email' | translate}}
    -
    - - - -
    -
    {{user.username}}{{user.lastName}}{{user.firstName}}{{user.email}}{{:: 'edit' | translate}}
    {{:: 'no-group-members' | translate}}{{:: 'no-group-members' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/group-role-mappings.html b/deps/keycloak/themes/base/admin/resources/partials/group-role-mappings.html deleted file mode 100644 index fc3f6ee36..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/group-role-mappings.html +++ /dev/null @@ -1,111 +0,0 @@ -
    - - - - -
    -
    - - -
    -
    -
    - - - - {{:: 'group.add-selected.tooltip' | translate}} -
    -
    - - {{:: 'group.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'group.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    - - {{:: 'group.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'group.assigned-roles-client.tooltip' | translate}} - - -
    -
    - - {{:: 'group.effective-roles-client.tooltip' | translate}} - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/home.html b/deps/keycloak/themes/base/admin/resources/partials/home.html deleted file mode 100644 index dc2471b75..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/home.html +++ /dev/null @@ -1,4 +0,0 @@ -
    -
    -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html b/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html deleted file mode 100644 index 7e62b1449..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mapper-detail.html +++ /dev/null @@ -1,84 +0,0 @@ -
    - - -

    {{mapper.name|capitalize}}

    -

    {{:: 'add-identity-provider-mapper' | translate}}

    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'mapper.name.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode-override.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{mapperType.helpText}} -
    -
    - -
    - -
    - {{mapperType.helpText}} -
    - -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html b/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html deleted file mode 100644 index c7c136b8b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/identity-provider-mappers.html +++ /dev/null @@ -1,49 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    {{:: 'name' | translate}}{{:: 'category' | translate}}{{:: 'type' | translate}}
    {{mapper.name}}{{mapperTypes[mapper.identityProviderMapper].category}}{{mapperTypes[mapper.identityProviderMapper].name}}
    {{:: 'no-mappers-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/menu.html b/deps/keycloak/themes/base/admin/resources/partials/menu.html deleted file mode 100644 index dc413236d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/menu.html +++ /dev/null @@ -1,26 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html b/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html deleted file mode 100644 index c8da93e20..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-auth.html +++ /dev/null @@ -1,8 +0,0 @@ -
    - - - - - -
    {{:: 'realm' | translate}}{{event.authDetails.realmId}}
    {{:: 'client' | translate}}{{event.authDetails.clientId}}
    {{:: 'user' | translate}}{{event.authDetails.userId}}
    {{:: 'ip-address' | translate}}{{event.authDetails.ipAddress}}
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html b/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html deleted file mode 100644 index 837a164ec..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/realm-events-admin-representation.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/role-selector.html b/deps/keycloak/themes/base/admin/resources/partials/modal/role-selector.html deleted file mode 100644 index b4dd43fe7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/role-selector.html +++ /dev/null @@ -1,39 +0,0 @@ - -
    -
    -
    - - {{:: 'realm-roles.tooltip' | translate}} - - -
    -
    - - - - - -
    -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html b/deps/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html deleted file mode 100644 index bc9995ff6..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/unregistered-required-action-selector.html +++ /dev/null @@ -1,21 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html b/deps/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html deleted file mode 100644 index 342b3f6ae..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/user-credential-data.html +++ /dev/null @@ -1,8 +0,0 @@ -
    - - - - - -
    {{key}}{{credentialData[key]}}
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/view-key.html b/deps/keycloak/themes/base/admin/resources/partials/modal/view-key.html deleted file mode 100644 index 5d53d3ff7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/view-key.html +++ /dev/null @@ -1,18 +0,0 @@ - - -
    {{key}}
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/modal/view-object.html b/deps/keycloak/themes/base/admin/resources/partials/modal/view-object.html deleted file mode 100644 index ee50aee65..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/modal/view-object.html +++ /dev/null @@ -1,3 +0,0 @@ -
    -
    
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/notfound.html b/deps/keycloak/themes/base/admin/resources/partials/notfound.html deleted file mode 100644 index 62a1a5bd4..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/notfound.html +++ /dev/null @@ -1,7 +0,0 @@ -
    -
    -

    -

    {{:: 'resource-not-found.instruction' | translate}}

    - -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/otp-policy.html b/deps/keycloak/themes/base/admin/resources/partials/otp-policy.html deleted file mode 100644 index 0fdb94693..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/otp-policy.html +++ /dev/null @@ -1,88 +0,0 @@ -
    -

    {{:: 'authentication' | translate}}

    - - - -
    -
    - -
    -
    - -
    -
    - {{:: 'otp-type.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'otp-hash-algorithm.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'otp.number-of-digits.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'otp.look-ahead-window.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'otp.initial-counter.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'otp-token-period.tooltip' | translate}} -
    - -
    - -
    - {{realm.otpSupportedApplications.join(', ')}} -
    - {{:: 'otp-supported-applications.tooltip' | translate}} -
    - - -
    -
    - - -
    -
    -
    - -
    - - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/pagenotfound.html b/deps/keycloak/themes/base/admin/resources/partials/pagenotfound.html deleted file mode 100644 index c15a05125..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/pagenotfound.html +++ /dev/null @@ -1,7 +0,0 @@ -
    -
    -

    -

    {{:: 'page-not-found.instruction' | translate}}

    - -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/partial-export.html b/deps/keycloak/themes/base/admin/resources/partials/partial-export.html deleted file mode 100644 index 1ceed8c19..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/partial-export.html +++ /dev/null @@ -1,34 +0,0 @@ -
    - -

    - {{:: 'partial-export' | translate}} - {{:: 'partial-export.tooltip' | translate}} -

    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/partial-import.html b/deps/keycloak/themes/base/admin/resources/partials/partial-import.html deleted file mode 100644 index 4df12073b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/partial-import.html +++ /dev/null @@ -1,130 +0,0 @@ -
    - -

    - {{:: 'partial-import' | translate}} - {{:: 'partial-import.tooltip' | translate}} -

    - -
    -
    -
    - - -
    - - -
    - -
    - - -
    -
    - -
    - -
    -
    - -
    -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    -
    - -
    -
    - {{:: 'if-resource-exists.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - -
    - {{successMessage()}} - - - - - - - - - - - - - - - - - - - -
    {{:: 'action' | translate}}{{:: 'type' | translate}}{{:: 'name' | translate}}{{:: 'id' | translate}}
    {{result.action}}{{result.action}}{{result.action}}{{result.resourceType}}{{result.resourceName}}{{result.id}}
    - -
    - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/password-policy.html b/deps/keycloak/themes/base/admin/resources/partials/password-policy.html deleted file mode 100644 index f211dba29..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/password-policy.html +++ /dev/null @@ -1,51 +0,0 @@ -
    -

    {{:: 'authentication' | translate}}

    - - - -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'policy-type' | translate}}{{:: 'policy-value' | translate}}{{:: 'actions' | translate}}
    {{p.displayName}} - - {{:: 'delete' | translate}}
    - -
    -
    - - -
    -
    -
    - -
    - - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html b/deps/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html deleted file mode 100644 index e555aafb4..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/protocol-mapper-detail.html +++ /dev/null @@ -1,64 +0,0 @@ -

    {{:: 'create-protocol-mapper' | translate}}

    -

    {{model.mapper.name|capitalize}}

    - -
    - -
    -
    - -
    - -
    - {{:: 'protocol.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'mapper.name.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{model.mapperType.helpText}} -
    -
    - -
    - -
    - {{model.mapperType.helpText}} -
    - -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html b/deps/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html deleted file mode 100644 index 53a7987f1..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-cache-settings.html +++ /dev/null @@ -1,30 +0,0 @@ -
    - - -
    -
    - -
    - -
    - - {{:: 'realm-cache-clear.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'user-cache-clear.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'keys-cache-clear.tooltip' | translate}} -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-create.html b/deps/keycloak/themes/base/admin/resources/partials/realm-create.html deleted file mode 100644 index f156c3b92..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-create.html +++ /dev/null @@ -1,45 +0,0 @@ -
    - -

    {{:: 'add-realm' | translate}}

    - -
    -
    -
    - - -
    - - -
    - -
    - - -
    -
    - -
    - - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-default-roles.html b/deps/keycloak/themes/base/admin/resources/partials/realm-default-roles.html deleted file mode 100644 index 41cb09b21..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-default-roles.html +++ /dev/null @@ -1,88 +0,0 @@ -
    -

    {{:: 'roles' | translate}}

    - - -
    -
    - - -
    -
    -
    - - {{:: 'default.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'realm-default-roles.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    - - {{:: 'default.available-roles-client.tooltip' | translate}} - - -
    -
    - - {{:: 'client-default-roles.tooltip' | translate}} - - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-detail.html b/deps/keycloak/themes/base/admin/resources/partials/realm-detail.html deleted file mode 100644 index 89eb413e5..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-detail.html +++ /dev/null @@ -1,82 +0,0 @@ -
    - - -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    - {{:: 'realm-detail.frontendUrl.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'realm-detail.hostname.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'realm-detail.enabled.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'realm-detail.userManagedAccess.tooltip' | translate}} -
    - -
    - - - {{:: 'realm-detail.protocol-endpoints.tooltip' | translate}} -
    - -
    -
    - - -
    - -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-events-admin.html b/deps/keycloak/themes/base/admin/resources/partials/realm-events-admin.html deleted file mode 100644 index d7279762e..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-events-admin.html +++ /dev/null @@ -1,134 +0,0 @@ -
    -

    - {{:: 'admin-events' | translate}} - {{:: 'admin-events.tooltip' | translate}} -

    - - -

    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - - {{:: 'resource-path.tooltip' | translate}} -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    - -
    - {{:: 'authentication-details' | translate}} - -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    {{:: 'time' | translate}}{{:: 'operation-type' | translate}}{{:: 'resource-type' | translate}}{{:: 'resource-path' | translate}}{{:: 'details' | translate}}
    - - - -
    {{event.time|date:('dateFormat' | translate)}}
    {{event.time|date:('timeFormat' | translate)}}
    {{event.operationType}}{{event.resourceType}}{{event.resourcePath}} - - -
    -
    -
    - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-events-config.html b/deps/keycloak/themes/base/admin/resources/partials/realm-events-config.html deleted file mode 100644 index b47d6e1fb..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-events-config.html +++ /dev/null @@ -1,106 +0,0 @@ -
    -

    - {{:: 'events-config' | translate}} - {{:: 'events-config.tooltip' | translate}} -

    - - -
    -

    {{:: 'events-config' | translate}}

    - -
    - -
    -
    - - {{:: 'event-listeners.tooltip' | translate}} -
    - -
    -
    -
    - -
    - {{:: 'login-events-settings' | translate}} - -
    - - {{:: 'login.save-events.tooltip' | translate}} -
    - -
    -
    - -
    - - {{:: 'saved-types.tooltip' | translate}} -
    - -
    -
    - -
    - - {{:: 'clear-events.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'events.expiration.tooltip' | translate}} -
    - - -
    -
    -
    - - -
    - {{:: 'admin-events-settings' | translate}} - -
    - - {{:: 'admin.save-events.tooltip' | translate}} -
    - -
    -
    - -
    - - {{:: 'include-representation.tooltip' | translate}} -
    - -
    -
    - -
    - - {{:: 'clear-admin-events.tooltip' | translate}} -
    - -
    -
    - -
    - -
    -
    - - -
    -
    -
    -
    -
    - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-events.html b/deps/keycloak/themes/base/admin/resources/partials/realm-events.html deleted file mode 100644 index 91c7aab76..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-events.html +++ /dev/null @@ -1,124 +0,0 @@ -
    -

    - {{:: 'events' | translate}} - {{:: 'events.tooltip' | translate}} -

    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    - -
    -
    {{:: 'time' | translate}}{{:: 'event-type' | translate}}{{:: 'details' | translate}}
    - - - -
    {{event.time|date:('dateFormat' | translate)}}
    {{event.time|date:('timeFormat' | translate)}}
    {{event.type}} - - - - - - - - - - - - - -
    {{:: 'client' | translate}}{{event.clientId}}
    {{:: 'user' | translate}}{{event.userId}}
    {{:: 'ip-address' | translate}}{{event.ipAddress}}
    {{:: 'error' | translate}}{{event.error}}
    {{:: 'details' | translate}} - - - - - - -
    {{key}}{{value}}
    -
    {{:: 'representation' | translate}} - -
    {{event.representation}}
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html deleted file mode 100644 index fab751e2c..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-bitbucket.html +++ /dev/null @@ -1,142 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'bitbucket.key.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'bitbucket.secret.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'bitbucket.default-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html deleted file mode 100644 index c8f111ae6..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook-ext.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    - -
    - {{:: 'identity-provider.facebook-fetchedFields.tooltip' | translate}} -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-facebook.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github-ext.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-github.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html deleted file mode 100644 index 00c0e947b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-gitlab.html +++ /dev/null @@ -1,142 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'gitlab.application-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gitlab.application-secret.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gitlab.default-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html deleted file mode 100644 index 4f313a8b2..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google-ext.html +++ /dev/null @@ -1,21 +0,0 @@ -
    - -
    - -
    - {{:: 'identity-provider.google-hostedDomain.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.google-userIp.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.google-offlineAccess.tooltip' | translate}} -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-google.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram-ext.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-instagram.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html deleted file mode 100644 index d3807496c..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-keycloak-oidc.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin-ext.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-linkedin.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft-ext.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-microsoft.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html deleted file mode 100644 index e9b28e288..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-oidc.html +++ /dev/null @@ -1,388 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'identity-provider.alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    -
    - {{:: 'openid-connect-config' | translate}} {{:: 'openid-connect-config.tooltip' | translate}} -
    - -
    - -
    - {{:: 'authorization-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'loginHint.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'uiLocales.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'token-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.logout-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'backchannel-logout.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.disableUserInfo.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'user-info-url.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'client-auth.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.client-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-secret.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'client-assertion-signing-algorithm.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'issuer.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.default-scopes.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'prompt.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'accepts-prompt-none-forward-from-client.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.validate-signatures.tooltip' | translate}} -
    - -
    - -
    - -
    - -
    - {{:: 'identity-provider.use-jwks-url.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'identity-provider.jwks-url.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'identity-provider.validating-public-key.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'identity-provider.validating-public-key-id.tooltip' | translate}} -
    - -
    - -
    - -
    - -
    - {{:: 'pkce-enabled.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'pkce-method.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'identity-provider.allowed-clock-skew.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.forwarded-query-parameters.tooltip' | translate}} -
    -
    -
    - {{:: 'import-external-idp-config' | translate}} {{:: 'import-external-idp-config.tooltip' | translate}} -
    - -
    - -
    - {{:: 'identity-provider.import-from-url.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - - {{:: 'identity-provider.import-from-file.tooltip' | translate}} -
    -
    - - -
    - - {{files[0].name}} - -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html deleted file mode 100644 index b1c27defe..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3-ext.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    - -
    - {{:: 'openshift.base-url.tooltip' | translate}} -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html deleted file mode 100644 index eb42ba1fb..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v3.html +++ /dev/null @@ -1,164 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'identity-provider.alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'social.client-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'social.client-secret.tooltip' | translate}} -
    -
    -
    - -
    - -
    - {{:: 'social.default-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.disableUserInfo.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html deleted file mode 100644 index 46254be4a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4-ext.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    - -
    - {{:: 'openshift4.base-url.tooltip' | translate}} -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html deleted file mode 100644 index 9e1415428..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-openshift-v4.html +++ /dev/null @@ -1,164 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'identity-provider.alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'social.client-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'social.client-secret.tooltip' | translate}} -
    -
    -
    - -
    - -
    - {{:: 'social.default-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.disableUserInfo.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'linkOnly.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html deleted file mode 100644 index 692a078b9..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal-ext.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    - -
    - {{:: 'identity-provider.paypal-sandbox.tooltip' | translate}} -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html deleted file mode 100644 index 62e97badb..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-paypal.html +++ /dev/null @@ -1 +0,0 @@ -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html deleted file mode 100644 index fb1a38d9d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-saml.html +++ /dev/null @@ -1,414 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'identity-provider.alias.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - - - {{:: 'identity-provider.saml.protocol-endpoints.saml.tooltip' | translate}} -
    -
    -
    - {{:: 'saml-config' | translate}} {{:: 'identity-provider.saml-config.tooltip' | translate}} - -
    - -
    - -
    - {{:: 'identity-provider.saml.entity-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.single-signon-service-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.single-logout-service-url.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'backchannel-logout.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'nameid-policy-format.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.principal-type.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.principal-attribute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.allow-create.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'http-post-binding-response.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'http-post-binding-for-authn-request.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'http-post-binding-logout.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'want-authn-requests-signed.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'want-assertions-signed.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'want-assertions-encrypted.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'signature-algorithm.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'saml-signature-keyName-transformer.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.force-authentication.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.validate-signature.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'validating-x509-certificate.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.saml.sign-sp-metadata.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'saml.loginHint.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.allowed-clock-skew.tooltip' | translate}} -
    -
    -
    - {{:: 'identity-provider.saml.requested-authncontext' | translate}} {{:: 'identity-provider.saml.requested-authncontext.tooltip' | translate}} - -
    - -
    -
    - -
    -
    - {{:: 'identity-provider.saml.authncontext-comparison-type.tooltip' | translate}} -
    -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - {{:: 'identity-provider.saml.authncontext-class-ref.tooltip' | translate}} -
    -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - {{:: 'identity-provider.saml.authncontext-decl-ref.tooltip' | translate}} -
    -
    -
    - {{:: 'import-external-idp-config' | translate}} {{:: 'import-external-idp-config.tooltip' | translate}} -
    - -
    - -
    - {{:: 'saml.import-from-url.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    - - {{files[0].name}} - -
    -
    - -
    - -
    -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html deleted file mode 100644 index b74563480..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-social.html +++ /dev/null @@ -1,157 +0,0 @@ -
    - - - - -
    -
    -
    - -
    - -
    - {{:: 'redirect-uri.tooltip' | translate}} -
    -
    -
    -
    - -
    - -
    - {{:: 'social.client-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'social.client-secret.tooltip' | translate}} -
    -
    -
    - -
    - -
    - {{:: 'social.default-scopes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.store-tokens.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.stored-tokens-readable.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'accepts-prompt-none-forward-from-client.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider.disableUserInfo.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'link-only.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'hide-on-login-page.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'gui-order.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'first-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'post-broker-login-flow.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sync-mode.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html deleted file mode 100644 index 5e478f60b..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow-ext.html +++ /dev/null @@ -1,7 +0,0 @@ -
    - -
    - -
    - {{:: 'stackoverflow.key.tooltip' | translate}} -
    diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-stackoverflow.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter-ext.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter-ext.html deleted file mode 100644 index e69de29bb..000000000 diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html deleted file mode 100644 index a4630ac78..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider-twitter.html +++ /dev/null @@ -1 +0,0 @@ -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html b/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html deleted file mode 100644 index 342275296..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-identity-provider.html +++ /dev/null @@ -1,81 +0,0 @@ -
    -

    {{:: 'identity-providers' | translate}}

    -
    -
    - -
    -

    - {{:: 'identity-providers' | translate}} -

    -

    - Through Identity Brokering it's easy to allow users to authenticate to Keycloak using external Identity Providers or Social Networks.
    We have built-in support for OpenID Connect and SAML 2.0 as well as a number of social networks such as Google, GitHub, Facebook and Twitter. -

    -

    To get started select a provider from the dropdown below:

    -
    -
    -
    -
    - -
    -
    -
    -
    - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'name' | translate}}{{:: 'provider' | translate}}{{:: 'enabled' | translate}}{{:: 'hidden' | translate}}{{:: 'link-only-column' | translate}}{{:: 'gui-order' | translate}}{{:: 'actions' | translate}}
    - - {{identityProvider.displayName}} - {{identityProvider.provider.name}} - {{identityProvider.alias}} - - {{identityProvider.providerId}}{{identityProvider.config.guiOrder}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html b/deps/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html deleted file mode 100644 index 242c841dc..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-disabled.html +++ /dev/null @@ -1,70 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'algorithm' | translate}}{{:: 'type' | translate}}{{:: 'kid' | translate}}{{:: 'priority' | translate}}{{:: 'provider' | translate}}{{:: 'publicKeys' | translate}}
    {{key.algorithm}}{{key.type}}{{key.kid}}{{key.providerPriority}}{{key.provider.name}}{{:: 'publicKey' | translate}}{{:: 'certificate' | translate}}
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html b/deps/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html deleted file mode 100644 index dd2017ace..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-generic.html +++ /dev/null @@ -1,69 +0,0 @@ - - -
    - - - - - - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'console-display-name.tooltip' | translate}} -
    - - -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html b/deps/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html deleted file mode 100644 index 65f934a48..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-passive.html +++ /dev/null @@ -1,70 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'algorithm' | translate}}{{:: 'type' | translate}}{{:: 'kid' | translate}}{{:: 'priority' | translate}}{{:: 'provider' | translate}}{{:: 'publicKeys' | translate}}
    {{key.algorithm}}{{key.type}}{{key.kid}}{{key.providerPriority}}{{key.provider.name}}{{:: 'publicKey' | translate}}{{:: 'certificate' | translate}}
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html b/deps/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html deleted file mode 100644 index c303a38bc..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-keys-providers.html +++ /dev/null @@ -1,75 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    {{:: 'name' | translate}}{{:: 'provider' | translate}}{{:: 'providerHelpText' | translate}}{{:: 'priority' | translate}}{{:: 'actions' | translate}}
    {{instance.name}}{{instance.providerId}}{{instance.provider.helpText}}{{instance.config['priority'][0]}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    - -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-keys.html b/deps/keycloak/themes/base/admin/resources/partials/realm-keys.html deleted file mode 100644 index 3f736828e..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-keys.html +++ /dev/null @@ -1,71 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    -
    -
    {{:: 'algorithm' | translate}}{{:: 'type' | translate}}{{:: 'kid' | translate}}{{:: 'priority' | translate}}{{:: 'provider' | translate}}{{:: 'publicKeys' | translate}}
    {{key.algorithm}}{{key.type}}{{key.kid}}{{key.providerPriority}}{{key.provider.name}}{{:: 'publicKey' | translate}}{{:: 'certificate' | translate}}
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-list.html b/deps/keycloak/themes/base/admin/resources/partials/realm-list.html deleted file mode 100644 index 099fe6d51..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-list.html +++ /dev/null @@ -1,20 +0,0 @@ -
    - -

    {{:: 'realms' | translate}}

    - - - - - - - - - - - - -
    {{:: 'realm' | translate}}
    {{r.realm}}
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html b/deps/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html deleted file mode 100644 index c79025657..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-localization-detail.html +++ /dev/null @@ -1,50 +0,0 @@ -
    - - - -
    -
    -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    - - -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html b/deps/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html deleted file mode 100644 index a15352c49..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-localization-upload.html +++ /dev/null @@ -1,37 +0,0 @@ -
    - - - - -
    -
    - -
    - -
    -
    -
    - -
    -
    - - -
    - - {{files[0].name}} - -
    -
    -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-localization.html b/deps/keycloak/themes/base/admin/resources/partials/realm-localization.html deleted file mode 100644 index b282fa280..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-localization.html +++ /dev/null @@ -1,61 +0,0 @@ -
    - - - - -
    -
    - -
    - -
    -
    - {{:: 'no-localizations-configured' | translate}} -
    -
    -
    - -
    - -
    -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{value}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-login-settings.html b/deps/keycloak/themes/base/admin/resources/partials/realm-login-settings.html deleted file mode 100644 index c5a084ac2..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-login-settings.html +++ /dev/null @@ -1,87 +0,0 @@ -
    - - -
    -
    -
    - -
    - -
    - {{:: 'registrationAllowed.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'registrationEmailAsUsername.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'editUsernameAllowed.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'resetPasswordAllowed.tooltip' |translate}} -
    -
    - -
    - -
    - {{:: 'rememberMe.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'verifyEmail.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'loginWithEmailAllowed.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'duplicateEmailsAllowed.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'sslRequired.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-role-users.html b/deps/keycloak/themes/base/admin/resources/partials/realm-role-users.html deleted file mode 100644 index 11cbbc684..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-role-users.html +++ /dev/null @@ -1,50 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'username' | translate}}{{:: 'last-name' | translate}}{{:: 'first-name' | translate}}{{:: 'email' | translate}}
    -
    - - - -
    -
    {{user.username}}{{user.lastName}}{{user.firstName}}{{user.email}}{{:: 'edit' | translate}}
    {{:: 'no-role-members' | translate}}{{:: 'no-role-members' | translate}}
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-smtp.html b/deps/keycloak/themes/base/admin/resources/partials/realm-smtp.html deleted file mode 100644 index 7533071de..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-smtp.html +++ /dev/null @@ -1,96 +0,0 @@ -
    - - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'fromDisplayName.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'replyToDisplayName.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'envelopeFrom.tooltip' | translate}} -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    - -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'smtp-password.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html b/deps/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html deleted file mode 100644 index be74a2af8..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-theme-settings.html +++ /dev/null @@ -1,97 +0,0 @@ -
    - - -
    -
    -
    - -
    -
    - -
    -
    - {{:: 'login-theme.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{ 'account-theme.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'select-theme-admin-console' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'select-theme-email' | translate}} -
    -
    - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-tokens.html b/deps/keycloak/themes/base/admin/resources/partials/realm-tokens.html deleted file mode 100644 index c85c68fce..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-tokens.html +++ /dev/null @@ -1,385 +0,0 @@ -
    - - -
    - -
    - - -
    - -
    - - {{:: 'default-signature-algorithm.tooltip' | translate}} - -
    - -
    - - -
    - -
    - - {{:: 'revoke-refresh-token.tooltip' | translate}} - -
    - -
    - - -
    - -
    - - {{:: 'refresh-token-max-reuse.tooltip' | translate}} - -
    - -
    - - -
    - - -
    - {{:: 'sso-session-idle.tooltip' | translate}} - -
    - -
    - - -
    - - -
    - {{:: 'sso-session-max.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'sso-session-idle-remember-me.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'sso-session-max-remember-me.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'offline-session-idle.tooltip' | translate}} -
    - - -
    - -
    - -
    - {{:: 'offline-session-max-limited.tooltip' | translate}} -
    -
    - -
    - - -
    - {{:: 'offline-session-max.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-offline-session-idle.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'client-offline-session-max.tooltip' | translate}} -
    - -
    - -
    - - -
    - {{:: 'client-session-idle.tooltip' | translate}} -
    - -
    - -
    - - -
    - {{:: 'client-session-max.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'access-token-lifespan.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'access-token-lifespan-for-implicit-flow.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'client-login-timeout.tooltip' | translate}} -
    - -
    - - -
    - - -
    - {{:: 'login-timeout.tooltip' | translate}} -
    - -
    - - -
    - - -
    - - {{:: 'login-action-timeout.tooltip' | translate}} - -
    - -
    - - -
    - - -
    - - {{:: 'action-token-generated-by-user-lifespan.tooltip' | translate}} - -
    - -
    - - -
    - - -
    - - {{:: 'action-token-generated-by-admin-lifespan.tooltip' | translate}} - -
    - -
    - -
    - - - - -
    - - {{:: 'action-token-generated-by-user.tooltip' | translate}} - -
    - -
    - - -
    - - -
    - {{:: 'oauth2-device-code-lifespan.tooltip' | translate}} -
    - -
    - - -
    - -
    - {{:: 'oauth2-device-polling-interval.tooltip' | translate}} -
    - -
    -
    - - -
    -
    - -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/realm-user-profile.html b/deps/keycloak/themes/base/admin/resources/partials/realm-user-profile.html deleted file mode 100644 index fd74383f0..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/realm-user-profile.html +++ /dev/null @@ -1,209 +0,0 @@ -
    - - - - -
    - - - - - - - - - - - - - - - - - - -
    - -
    - -
    -
    -
    - -
    -
    -
    - -
    -
    - - -
    -
    -
    - -
    - -
    -

    - {{:: 'user.profile.attribute' | translate}} {{currentAttribute.name}} {{:: 'configuration' | translate}} - -

    - - {{:: 'user.profile.attribute.name.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'user.profile.attribute.required.tooltip' | translate}} -
    - -
    -
    -
    - {{:: 'user.profile.attribute.permission' | translate}} -
    - - {{:: 'user.profile.attribute.canUserView.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'user.profile.attribute.canAdminView.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'user.profile.attribute.canUserEdit.tooltip' | translate}} -
    - -
    -
    -
    - - {{:: 'user.profile.attribute.canAdminEdit.tooltip' | translate}} -
    - -
    -
    -
    -
    - {{:: 'user.profile.attribute.validation' | translate}} -
    - - {{:: 'user.profile.attribute.validation.add.validator.tooltip' | translate}} -
    - -
    -
    - -

    -

    -
    - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    - {{:: 'user.profile.attribute.annotation' | translate}} -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}} -
    -
    -
    -
    -

    -

    - - -
    -
    -
    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/required-actions.html b/deps/keycloak/themes/base/admin/resources/partials/required-actions.html deleted file mode 100644 index ab16456c9..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/required-actions.html +++ /dev/null @@ -1,38 +0,0 @@ -
    -

    {{:: 'authentication' | translate}}

    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
    -
    {{:: 'required-action' | translate}}{{:: 'enabled' | translate}}{{:: 'default-action' | translate}}
    - - - {{requiredAction.name}} -
    {{:: 'no-required-actions-configured' | translate}}
    - -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/role-attributes.html b/deps/keycloak/themes/base/admin/resources/partials/role-attributes.html deleted file mode 100644 index b9cbbd7e8..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/role-attributes.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}}
    - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/role-detail.html b/deps/keycloak/themes/base/admin/resources/partials/role-detail.html deleted file mode 100644 index 7595f6555..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/role-detail.html +++ /dev/null @@ -1,135 +0,0 @@ -
    - - - - - -
    -
    -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - -
    - -
    - {{:: 'composite-roles.tooltip' | translate}} -
    -
    - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    - -
    - {{:: 'composite-roles' | translate}} -
    - - -
    -
    -
    - - {{:: 'composite.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'composite.associated-roles.tooltip' | translate}} - - -
    -
    -
    -
    - -
    - -
    - - -
    - - -
    -
    -
    - - {{:: 'composite.available-roles-client.tooltip' | translate}} - - -
    -
    - - {{:: 'composite.associated-roles-client.tooltip' | translate}} - - -
    -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/role-list.html b/deps/keycloak/themes/base/admin/resources/partials/role-list.html deleted file mode 100644 index 6329cccdc..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/role-list.html +++ /dev/null @@ -1,63 +0,0 @@ -
    -

    Roles

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    -
    {{:: 'role-name' | translate}}{{:: 'composite' | translate}}{{:: 'description' | translate}}{{:: 'actions' | translate}}
    {{role.name}}{{role.description}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-results' | translate}}{{:: 'no-realm-roles-available' | translate}}
    -
    - - - -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/role-mappings.html b/deps/keycloak/themes/base/admin/resources/partials/role-mappings.html deleted file mode 100644 index 184a849a7..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/role-mappings.html +++ /dev/null @@ -1,119 +0,0 @@ -
    - - - - -
    -
    - - -
    -
    -
    - - - - {{:: 'user.add-selected.tooltip' | translate}} -
    -
    - - {{:: 'user.assigned-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'user.effective-roles.tooltip' | translate}} - -
    -
    -
    -
    - -
    - -
    - - -
    - - -
    -
    -
    - - {{:: 'user.available-roles.tooltip' | translate}} - - -
    -
    - - {{:: 'user.assigned-roles-client.tooltip' | translate}} - - -
    -
    - - {{:: 'user.effective-roles-client.tooltip' | translate}} - -
    -
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/server-info-providers.html b/deps/keycloak/themes/base/admin/resources/partials/server-info-providers.html deleted file mode 100644 index be741c124..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/server-info-providers.html +++ /dev/null @@ -1,55 +0,0 @@ -
    -

    - {{:: 'server-info' | translate}} - -

    - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -
    -
    -
    {{:: 'spi' | translate}}{{:: 'providers' | translate}}
    {{spi.name}} -
    - {{providerName}} - - - - - - - -
    {{key}}{{value}}
    -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/server-info.html b/deps/keycloak/themes/base/admin/resources/partials/server-info.html deleted file mode 100644 index 6d2441971..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/server-info.html +++ /dev/null @@ -1,135 +0,0 @@ -
    -

    - {{:: 'server-info' | translate}} - -

    - - - - - - - - - - - - - - - - -
    {{:: 'server-version' | translate}}{{serverInfo.systemInfo.version}}
    {{:: 'server-time' | translate}}{{serverInfo.systemInfo.serverTime}}
    {{:: 'server-uptime' | translate}}{{serverInfo.systemInfo.uptime}}
    - - - {{:: 'profile' | translate}} - - - - - - - - - - - - - - - - - - -
    {{:: 'server-profile' | translate}}{{serverInfo.profileInfo.name | capitalize}}
    - {{:: 'server-disabled' | translate}} - {{:: 'server-disabled.tooltip' | translate}} - {{serverInfo.profileInfo.disabledFeatures.sort().join(', ')}}
    - {{:: 'server-preview' | translate}} - {{:: 'server-preview.tooltip' | translate}} - {{serverInfo.profileInfo.previewFeatures.sort().join(', ')}}
    - {{:: 'server-experimental' | translate}} - {{:: 'server-experimental.tooltip' | translate}} - {{serverInfo.profileInfo.experimentalFeatures.sort().join(', ')}}
    - -
    - {{:: 'memory' | translate}} - - - - - - - - - - - - - -
    {{:: 'total-memory' | translate}}{{serverInfo.memoryInfo.totalFormated}}
    {{:: 'free-memory' | translate}}{{serverInfo.memoryInfo.freeFormated}} ({{serverInfo.memoryInfo.freePercentage}}%)
    {{:: 'used-memory' | translate}}{{serverInfo.memoryInfo.usedFormated}}
    -
    - -
    - {{:: 'system' | translate}} - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'current-working-directory' | translate}}{{serverInfo.systemInfo.userDir}}
    {{:: 'java-version' | translate}}{{serverInfo.systemInfo.javaVersion}}
    {{:: 'java-vendor' | translate}}{{serverInfo.systemInfo.javaVendor}}
    {{:: 'java-runtime' | translate}}{{serverInfo.systemInfo.javaRuntime}}
    {{:: 'java-vm' | translate}}{{serverInfo.systemInfo.javaVm}}
    {{:: 'java-vm-version' | translate}}{{serverInfo.systemInfo.javaVmVersion}}
    {{:: 'java-home' | translate}}{{serverInfo.systemInfo.javaHome}}
    {{:: 'user-name' | translate}}{{serverInfo.systemInfo.userName}}
    {{:: 'user-timezone' | translate}}{{serverInfo.systemInfo.userTimezone}}
    {{:: 'user-locale' | translate}}{{serverInfo.systemInfo.userLocale}}
    {{:: 'system-encoding' | translate}}{{serverInfo.systemInfo.fileEncoding}}
    {{:: 'operating-system' | translate}}{{serverInfo.systemInfo.osName}} {{serverInfo.systemInfo.osVersion}}
    {{:: 'os-architecture' | translate}}{{serverInfo.systemInfo.osArchitecture}}
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/session-realm.html b/deps/keycloak/themes/base/admin/resources/partials/session-realm.html deleted file mode 100644 index 98b228427..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/session-realm.html +++ /dev/null @@ -1,34 +0,0 @@ -
    -

    {{:: 'sessions' | translate}}

    - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'client' | translate}}{{:: 'active-sessions' | translate}}{{:: 'offline-sessions' | translate}}
    {{data.clientId}}{{data.active}}{{data.offline}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/session-revocation.html b/deps/keycloak/themes/base/admin/resources/partials/session-revocation.html deleted file mode 100644 index 03c686458..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/session-revocation.html +++ /dev/null @@ -1,30 +0,0 @@ -
    -

    {{:: 'sessions' | translate}}

    - - - -
    -
    -
    - -
    - -
    - {{:: 'not-before.tooltip' | translate}} -
    -
    - -
    -
    - - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-attributes.html b/deps/keycloak/themes/base/admin/resources/partials/user-attributes.html deleted file mode 100644 index 10e3d8fcf..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-attributes.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - -
    - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{key}}{{:: 'delete' | translate}}
    {{:: 'add' | translate}}
    - -
    -
    - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-consents.html b/deps/keycloak/themes/base/admin/resources/partials/user-consents.html deleted file mode 100644 index 76eb0a85a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-consents.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'client' | translate}}{{:: 'granted-client-scopes' | translate}}{{:: 'additional-grants' | translate}}{{:: 'consent-created-date' | translate}}{{:: 'consent-last-updated-date' | translate}}{{:: 'action' | translate}}
    {{consent.clientId}} - - , {{clientScope}} - - - - , {{additionalGrant.key}} - - {{consent.createdDate | date :'short'}}{{consent.lastUpdatedDate | date :'short'}}{{:: 'revoke' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-credentials.html b/deps/keycloak/themes/base/admin/resources/partials/user-credentials.html deleted file mode 100644 index 737b4b18a..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-credentials.html +++ /dev/null @@ -1,173 +0,0 @@ -
    - - - - -
    - -
    - - {{:: 'supported-user-storage-credential-types' | translate}} - {{:: 'supported-user-storage-credential-types.tooltip' | translate}} - - - - - - - - - - - - - -
    - -
    - - {{:: 'manage-credentials' | translate}} - {{:: 'manage-credentials.tooltip' | translate}} - - - {{:: 'manage-credentials' | translate}} - - - - - - - - - - - - - - - - - - - - -
    - -
    - {{ (hasPassword ? 'reset-password' : 'set-password') | translate }} -
    - -
    - -
    -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    - {{:: 'credentials.temporary.tooltip' | translate}} -
    - -
    -
    - -
    -
    -
    - -
    - {{:: 'disable-credentials' | translate}} -
    - - -
    - -
    - {{:: 'credentials.disableable.tooltip' | translate}} -
    -
    - - -
    - -
    - {{:: 'credentials.disable.tooltip' | translate}} -
    -
    - -
    - {{:: 'credential-reset-actions' | translate}} -
    - - -
    - -
    - {{:: 'credentials.reset-actions.tooltip' | translate}} -
    -
    - - -
    - - -
    - {{:: 'credential-reset-actions-timeout.tooltip' | translate}} -
    -
    - - -
    - -
    - {{:: 'credentials.reset-actions-email.tooltip' | translate}} -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-detail.html b/deps/keycloak/themes/base/admin/resources/partials/user-detail.html deleted file mode 100644 index d7b462388..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-detail.html +++ /dev/null @@ -1,186 +0,0 @@ -
    - - - - -
    - -
    -
    - -
    - -
    -
    - -
    - -
    - {{user.createdTimestamp|date:('dateFormat' | translate)}} {{user.createdTimestamp|date:('timeFormat' | translate)}} -
    -
    - -
    - -
    - - -
    -
    - - -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    -
    - - -
    - -
    -
    - -
    - -
    - -
    - {{:: 'user-enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'user-temporarily-locked.tooltip' | translate}} -
    - -
    -
    -
    - - - {{:: 'user-link.tooltip' | translate}} -
    -
    - - - {{:: 'user-origin.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'email-verified.tooltip' | translate}} -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    -
    -
    -
    {{:: 'groups-joining-path' | translate}}{{:: 'actions' | translate}}
    {{group.path}} - {{:: 'remove' | translate}} -
    {{:: 'groups-joining-no-selected' | translate}}
    -
    - {{:: 'groups-joining.tooltip' | translate}} -
    -
    - - -
    - -
    - {{:: 'required-user-actions.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    -
    - -
    - - -
    - -
    - {{:: 'impersonate-user.tooltip' | translate}} -
    - -
    - -
    -
    - - -
    - -
    - - -
    -
    - -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html b/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html deleted file mode 100644 index aa5d04953..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-detail.html +++ /dev/null @@ -1,53 +0,0 @@ -
    - - -

    {{:: 'add-identity-provider-link' | translate}}

    - - - -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    - -
    - {{:: 'identity-provider-user-id.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'identity-provider-username.tooltip' | translate}} -
    - -
    - - -
    -
    - - -
    -
    - -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html b/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html deleted file mode 100644 index 82f96f68e..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-federated-identity-list.html +++ /dev/null @@ -1,41 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'identity-provider-alias' | translate}}{{:: 'provider-user-id' | translate}}{{:: 'provider-username' | translate}}{{:: 'action' | translate}}
    {{identity.identityProvider}}{{identity.userId}}{{identity.userName}}{{:: 'remove' | translate}}
    {{:: 'no-identity-provider-links-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-federation.html b/deps/keycloak/themes/base/admin/resources/partials/user-federation.html deleted file mode 100644 index 3e702f399..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-federation.html +++ /dev/null @@ -1,69 +0,0 @@ -
    -

    - {{:: 'user-federation' | translate}} -

    - -
    -
    - -
    -

    - {{:: 'user-federation' | translate}} -

    -

    Keycloak can federate external user databases. Out of the box we have support for LDAP and Active Directory.

    -

    To get started select a provider from the dropdown below:

    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'id' | translate}}{{:: 'enabled' | translate}}{{:: 'provider-name' | translate}}{{:: 'priority' | translate}}{{:: 'actions' | translate}}
    {{getInstanceName(instance)}}{{isProviderEnabled(instance)}}{{getInstanceProvider(instance) | capitalize}}{{getInstancePriority(instance)}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-user-federation-providers-configured' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-group-membership.html b/deps/keycloak/themes/base/admin/resources/partials/user-group-membership.html deleted file mode 100644 index abfb237fe..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-group-membership.html +++ /dev/null @@ -1,114 +0,0 @@ -
    - - - - -
    -
    - - -
    -
    -
    - - - - - - - - - - - -
    -
    -
    - - {{:: 'group-membership.tooltip' | translate}} -
    -
    -
    - -
    - -
    -
    -
    -   - -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    - - - - - - - - - - - -
    - -
    -
    - - {{:: 'membership.available-groups.tooltip' | translate}} -
    -
    -
    - -
    - -
    -
    -
    -   - -
    - -
    -
    -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-list.html b/deps/keycloak/themes/base/admin/resources/partials/user-list.html deleted file mode 100644 index 1fc707cbb..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-list.html +++ /dev/null @@ -1,69 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - - -
    - - {{:: 'add-user' | translate}} -
    -
    -
    {{:: 'id' | translate}}{{:: 'username' | translate}}{{:: 'email' | translate}}{{:: 'last-name' | translate}}{{:: 'first-name' | translate}}{{:: 'actions' | translate}}
    -
    - - - -
    -
    {{user.id}}{{user.username}}{{user.email}}{{user.lastName}}{{user.firstName}}{{:: 'edit' | translate}}{{:: 'impersonate' | translate}}{{:: 'delete' | translate}}
    {{:: 'users.instruction' | translate}}{{:: 'no-results' | translate}}{{:: 'no-users-available' | translate}}
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html b/deps/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html deleted file mode 100644 index 0194bca6e..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-offline-sessions.html +++ /dev/null @@ -1,35 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - -
    {{:: 'ip-address' | translate}}{{:: 'started' | translate}}{{:: 'last-refresh' | translate}}
    {{session.ipAddress}}{{session.start | date:'medium'}}{{session.lastAccess | date:'medium'}}
    - -
    -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-sessions.html b/deps/keycloak/themes/base/admin/resources/partials/user-sessions.html deleted file mode 100644 index 02c195940..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-sessions.html +++ /dev/null @@ -1,43 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    {{:: 'ip-address' | translate}}{{:: 'started' | translate}}{{:: 'last-access' | translate}}{{:: 'clients' | translate}}{{:: 'action' | translate}}
    {{session.ipAddress}}{{session.start | date:'medium'}}{{session.lastAccess | date:'medium'}} - - - {{:: 'logout' | translate}}
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage-generic.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage-generic.html deleted file mode 100644 index 2b2456c88..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage-generic.html +++ /dev/null @@ -1,246 +0,0 @@ -
    - - - - -
    -
    - {{:: 'required-settings' | translate}} -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'user-storage.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'console-display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'priority.tooltip' | translate}} -
    - - - -
    - -
    - {{:: 'sync-settings' | translate}} -
    - -
    - -
    - {{:: 'periodic-full-sync.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'full-sync-period.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'periodic-changed-users-sync.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'changed-users-sync-period.tooltip' | translate}} -
    -
    - - -
    - {{:: 'user-storage-cache-policy' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionDay.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionHour.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'userStorage.cachePolicy.maxLifespan.tooltip' | translate}} -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html deleted file mode 100644 index b7fa6efe0..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage-kerberos.html +++ /dev/null @@ -1,264 +0,0 @@ -
    - - - - -
    -
    - {{:: 'required-settings' | translate}} -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'user-storage.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'console-display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'priority.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'kerberos-realm.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'server-principal.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'keytab.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'debug.tooltip' | translate}} -
    - -
    - -
    - -
    - {{:: 'allow-password-authentication.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'edit-mode.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'update-profile-first-login.tooltip' | translate}} -
    - -
    - -
    - {{:: 'user-storage-cache-policy' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionDay.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionHour.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'userStorage.cachePolicy.maxLifespan.tooltip' | translate}} -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html deleted file mode 100644 index 88de0ffd8..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mapper-detail.html +++ /dev/null @@ -1,64 +0,0 @@ -
    - - -

    {{mapper.name|capitalize}}

    -

    {{:: 'add-user-federation-mapper' | translate}}

    - -
    -
    -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'mapper.name.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{mapperType.helpText}} -
    -
    - -
    - -
    - {{mapperType.helpText}} -
    - - - -
    - -
    -
    - - - - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html deleted file mode 100644 index 794e83e56..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap-mappers.html +++ /dev/null @@ -1,46 +0,0 @@ -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    - -
    - -
    -
    -
    - -
    -
    {{:: 'name' | translate}}{{:: 'type' | translate}}
    {{mapper.name}}{{mapper.providerId}}
    {{:: 'no-mappers-available' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html deleted file mode 100644 index 6e250223d..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage-ldap.html +++ /dev/null @@ -1,567 +0,0 @@ -
    - - - - -
    -
    - {{:: 'required-settings' | translate}} -
    - -
    - -
    -
    -
    - -
    - -
    - {{:: 'user-storage.enabled.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'console-display-name.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'priority.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.import-enabled.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'ldap.edit-mode.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.sync-registrations.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - -
    -
    - {{:: 'ldap.vendor.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'username-ldap-attribute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'rdn-ldap-attribute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'uuid-ldap-attribute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.user-object-classes.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-url.tooltip' | translate}} - -
    -
    - -
    - -
    - {{:: 'ldap.users-dn.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.custom-user-ldap-filter.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'ldap.search-scope.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'ldap.authentication-type.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.bind-dn.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.bind-credential.tooltip' | translate}} - -
    -
    - -
    - {{:: 'advanced-ldap-settings' | translate}} -
    - -
    - -
    - {{:: 'ldap.startTls.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.usePasswordModifyExtendedOp.tooltip' | translate}} -
    - - {{:: 'ldap-query-supported-extensions.tooltip' | translate}} -
    -
    -
    - -
    - -
    - {{:: 'ldap.validate-password-policy.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'trust-email.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'ldap.use-truststore-spi.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-timeout.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.read-timeout.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.pagination.tooltip' | translate}} -
    -
    - -
    - {{:: 'connection-pooling' | translate}} -
    - -
    - -
    - {{:: 'ldap.connection-pooling.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.authentication.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.debug.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.initsize.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.maxsize.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.prefsize.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.protocol.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.connection-pooling.timeout.tooltip' | translate}} -
    -
    - -
    - {{:: 'kerberos-integration' | translate}} -
    - -
    - -
    - {{:: 'ldap.allow-kerberos-authentication.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'kerberos-realm.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'server-principal.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'keytab.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'debug.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.use-kerberos-for-password-authentication.tooltip' | translate}} -
    -
    - -
    - {{:: 'sync-settings' | translate}} -
    - -
    - -
    - {{:: 'ldap.batch-size.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.periodic-full-sync.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'full-sync-period.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.periodic-changed-users-sync.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'ldap.changed-users-sync-period.tooltip' | translate}} -
    -
    - -
    - {{:: 'user-storage-cache-policy' | translate}} -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionDay.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionHour.tooltip' | translate}} -
    -
    - -
    -
    - -
    -
    - {{:: 'userStorage.cachePolicy.evictionMinute.tooltip' | translate}} -
    -
    - -
    - -
    - {{:: 'userStorage.cachePolicy.maxLifespan.tooltip' | translate}} -
    -
    - - -
    -
    - - -
    -
    - -
    -
    - - - - - - -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/user-storage.html b/deps/keycloak/themes/base/admin/resources/partials/user-storage.html deleted file mode 100644 index 93ca5a9b6..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/user-storage.html +++ /dev/null @@ -1,45 +0,0 @@ -
    -

    - {{:: 'user-storage' | translate}} -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - -
    -
    -
    {{:: 'id' | translate}}{{:: 'provider-name' | translate}}{{:: 'enabled' | translate}}{{:: 'priority' | translate}}{{:: 'actions' | translate}}
    {{instance.name}}{{instance.providerId|capitalize}}{{instance.config['enabled'][0]}}{{instance.config['priority'][0]}}{{:: 'edit' | translate}}{{:: 'delete' | translate}}
    {{:: 'no-user-storage-providers-configured' | translate}}
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html b/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html deleted file mode 100644 index dbb1e0e83..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy-passwordless.html +++ /dev/null @@ -1,177 +0,0 @@ - - -
    -

    {{:: 'authentication' | translate}}

    - - - - -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-rp-entity-name.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-signature-algorithms.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-rp-id.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-attestation-conveyance-preference.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-authenticator-attachment.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-require-resident-key.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-user-verification-requirement.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-create-timeout.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-avoid-same-authenticator-register.tooltip' | translate}} -
    - -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - {{:: 'webauthn-acceptable-aaguids.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    - - - diff --git a/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy.html b/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy.html deleted file mode 100644 index 432eb3de5..000000000 --- a/deps/keycloak/themes/base/admin/resources/partials/webauthn-policy.html +++ /dev/null @@ -1,159 +0,0 @@ -
    -

    {{:: 'authentication' | translate}}

    - - - - -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-rp-entity-name.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-signature-algorithms.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-rp-id.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-attestation-conveyance-preference.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-authenticator-attachment.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-require-resident-key.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-user-verification-requirement.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-create-timeout.tooltip' | translate}} -
    - -
    - -
    -
    - -
    -
    - {{:: 'webauthn-avoid-same-authenticator-register.tooltip' | translate}} -
    - -
    - -
    -
    - -
    - -
    -
    -
    - -
    - -
    -
    -
    - {{:: 'webauthn-acceptable-aaguids.tooltip' | translate}} -
    - -
    -
    - - -
    -
    -
    - -
    - - - diff --git a/deps/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html b/deps/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html deleted file mode 100644 index 18acf86b2..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/authz/kc-authz-modal.html +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html b/deps/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html deleted file mode 100644 index bd2027035..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/authz/kc-tabs-resource-server.html +++ /dev/null @@ -1,14 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-component-config.html b/deps/keycloak/themes/base/admin/resources/templates/kc-component-config.html deleted file mode 100644 index 3f29ee7e4..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-component-config.html +++ /dev/null @@ -1,67 +0,0 @@ -
    -
    - - -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - -
    - -
    -
    - - - -
    -
    - -
    -
    - {{config[option.name]}} -
    -
    - -
    -
    - -
    - -
    - -
    - -
    -
    - -
    - - {{:: option.helpText | translate}} -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-copy.html b/deps/keycloak/themes/base/admin/resources/templates/kc-copy.html deleted file mode 100644 index d92b2d4be..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-copy.html +++ /dev/null @@ -1,18 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-dropdown.html b/deps/keycloak/themes/base/admin/resources/templates/kc-dropdown.html deleted file mode 100644 index 13874ca03..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-dropdown.html +++ /dev/null @@ -1,12 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-edit.html b/deps/keycloak/themes/base/admin/resources/templates/kc-edit.html deleted file mode 100644 index 0b98b294f..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-edit.html +++ /dev/null @@ -1,22 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-menu.html b/deps/keycloak/themes/base/admin/resources/templates/kc-menu.html deleted file mode 100644 index d2baf360c..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-menu.html +++ /dev/null @@ -1,65 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-modal-message.html b/deps/keycloak/themes/base/admin/resources/templates/kc-modal-message.html deleted file mode 100644 index fc3270828..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-modal-message.html +++ /dev/null @@ -1,10 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-modal.html b/deps/keycloak/themes/base/admin/resources/templates/kc-modal.html deleted file mode 100644 index 25eee9682..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-modal.html +++ /dev/null @@ -1,11 +0,0 @@ - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-paging.html b/deps/keycloak/themes/base/admin/resources/templates/kc-paging.html deleted file mode 100644 index 653e4a58c..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-paging.html +++ /dev/null @@ -1,25 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-provider-config.html b/deps/keycloak/themes/base/admin/resources/templates/kc-provider-config.html deleted file mode 100644 index 70225bcec..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-provider-config.html +++ /dev/null @@ -1,94 +0,0 @@ -
    -
    - - -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    - -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - -
    - -
    -
    - {{config[option.name]}} -
    -
    - -
    -
    - -
    - -
    - -
    - -
    -
    - -
    - -
    - -
    - -
    - - - - - - - - - - - - - - - - - - - - - - -
    {{:: 'key' | translate}}{{:: 'value' | translate}}{{:: 'actions' | translate}}
    {{mapEntry['key']}}{{:: 'delete' | translate}} -
    {{:: 'add' | translate}} -
    -
    - - {{:: option.helpText | translate}} -
    -
    diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-switch.html b/deps/keycloak/themes/base/admin/resources/templates/kc-switch.html deleted file mode 100644 index 7f28598d3..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-switch.html +++ /dev/null @@ -1,12 +0,0 @@ - -
    - - -
    -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html deleted file mode 100644 index 98ad23f11..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-authentication.html +++ /dev/null @@ -1,16 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html deleted file mode 100644 index 20f05a9b3..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-role.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    {{:: 'add-role' | translate}}

    -

    {{role.name|capitalize}}

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html deleted file mode 100644 index 72f59e94e..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client-scope.html +++ /dev/null @@ -1,20 +0,0 @@ -
    - -

    {{:: 'add-client-scope' | translate}}

    -

    - {{clientScope.name|capitalize}} - -

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html deleted file mode 100644 index 41486878c..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-client.html +++ /dev/null @@ -1,65 +0,0 @@ -
    - -

    {{:: 'add-client' | translate}}

    -

    - {{client.clientId|capitalize}} - -

    - - -
    diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html deleted file mode 100644 index 8cf318a8f..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-clients.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -

    - {{:: 'clients' | translate}} -

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html deleted file mode 100644 index 5b6703595..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group-list.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -

    - {{:: 'user-groups' | translate}} -

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html deleted file mode 100644 index da0825214..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-group.html +++ /dev/null @@ -1,17 +0,0 @@ -
    -

    - {{group.name|capitalize}} - -

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html deleted file mode 100644 index 94b260447..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-identity-provider.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -

    - {{identityProvider.displayName}} - {{provider.name}} - {{identityProvider.alias}} - - -

    -

    {{:: 'add-identity-provider' | translate}}

    - - -
    diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html deleted file mode 100644 index a4f17a8a5..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-ldap.html +++ /dev/null @@ -1,12 +0,0 @@ -
    -

    - {{instance.name|capitalize}} - -

    -

    {{:: 'add-user-federation-provider' | translate}}

    - - -
    diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html deleted file mode 100644 index d9caf3ec6..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-realm.html +++ /dev/null @@ -1,24 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html deleted file mode 100644 index f00515b44..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-role.html +++ /dev/null @@ -1,16 +0,0 @@ -
    -

    {{role.name|capitalize}}

    -

    {{:: 'add-role' | translate}}

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html deleted file mode 100644 index 03e1ddc60..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user-storage.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -

    - {{instance.name|capitalize}} - -

    -

    {{:: 'add-user-storage-provider' | translate}}

    - - -
    diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html deleted file mode 100644 index 9c372e3b1..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-user.html +++ /dev/null @@ -1,18 +0,0 @@ - \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html b/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html deleted file mode 100644 index e5771a0c0..000000000 --- a/deps/keycloak/themes/base/admin/resources/templates/kc-tabs-users.html +++ /dev/null @@ -1,11 +0,0 @@ -
    -

    {{:: 'users' | translate}}

    - - -
    \ No newline at end of file diff --git a/deps/keycloak/themes/base/admin/theme.properties b/deps/keycloak/themes/base/admin/theme.properties deleted file mode 100644 index 8e1a43e6a..000000000 --- a/deps/keycloak/themes/base/admin/theme.properties +++ /dev/null @@ -1 +0,0 @@ -locales=ca,de,en,es,fr,it,ja,lt,nl,no,pl,pt-BR,ru,sv,zh-CN diff --git a/deps/keycloak/themes/base/email/html/email-test.ftl b/deps/keycloak/themes/base/email/html/email-test.ftl deleted file mode 100644 index 3a522728f..000000000 --- a/deps/keycloak/themes/base/email/html/email-test.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("emailTestBodyHtml",realmName))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/email-verification-with-code.ftl b/deps/keycloak/themes/base/email/html/email-verification-with-code.ftl deleted file mode 100644 index 66e892587..000000000 --- a/deps/keycloak/themes/base/email/html/email-verification-with-code.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("emailVerificationBodyCodeHtml",code))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/email-verification.ftl b/deps/keycloak/themes/base/email/html/email-verification.ftl deleted file mode 100644 index dacabd252..000000000 --- a/deps/keycloak/themes/base/email/html/email-verification.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("emailVerificationBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/event-login_error.ftl b/deps/keycloak/themes/base/email/html/event-login_error.ftl deleted file mode 100644 index 022c024da..000000000 --- a/deps/keycloak/themes/base/email/html/event-login_error.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("eventLoginErrorBodyHtml",event.date,event.ipAddress))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/event-remove_totp.ftl b/deps/keycloak/themes/base/email/html/event-remove_totp.ftl deleted file mode 100644 index 9a56ed387..000000000 --- a/deps/keycloak/themes/base/email/html/event-remove_totp.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("eventRemoveTotpBodyHtml",event.date, event.ipAddress))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/event-update_password.ftl b/deps/keycloak/themes/base/email/html/event-update_password.ftl deleted file mode 100644 index 27825c72d..000000000 --- a/deps/keycloak/themes/base/email/html/event-update_password.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("eventUpdatePasswordBodyHtml",event.date, event.ipAddress))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/event-update_totp.ftl b/deps/keycloak/themes/base/email/html/event-update_totp.ftl deleted file mode 100644 index 3ed37c38b..000000000 --- a/deps/keycloak/themes/base/email/html/event-update_totp.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("eventUpdateTotpBodyHtml",event.date, event.ipAddress))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/executeActions.ftl b/deps/keycloak/themes/base/email/html/executeActions.ftl deleted file mode 100644 index 4c837bcbb..000000000 --- a/deps/keycloak/themes/base/email/html/executeActions.ftl +++ /dev/null @@ -1,9 +0,0 @@ -<#outputformat "plainText"> -<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as reqActionItem>${msg("requiredAction.${reqActionItem}")}<#sep>, - - - - -${kcSanitize(msg("executeActionsBodyHtml",link, linkExpiration, realmName, requiredActionsText, linkExpirationFormatter(linkExpiration)))?no_esc} - - diff --git a/deps/keycloak/themes/base/email/html/identity-provider-link.ftl b/deps/keycloak/themes/base/email/html/identity-provider-link.ftl deleted file mode 100644 index 8b67968e1..000000000 --- a/deps/keycloak/themes/base/email/html/identity-provider-link.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("identityProviderLinkBodyHtml", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration)))?no_esc} - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/html/password-reset.ftl b/deps/keycloak/themes/base/email/html/password-reset.ftl deleted file mode 100644 index b2840b630..000000000 --- a/deps/keycloak/themes/base/email/html/password-reset.ftl +++ /dev/null @@ -1,5 +0,0 @@ - - -${kcSanitize(msg("passwordResetBodyHtml",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration)))?no_esc} - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/messages/messages_ca.properties b/deps/keycloak/themes/base/email/messages/messages_ca.properties deleted file mode 100644 index 03e0254f0..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_ca.properties +++ /dev/null @@ -1,21 +0,0 @@ -emailVerificationSubject=Verificaci\u00F3 d''email -emailVerificationBody=Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi tu no has creat aquest compte, simplement ignora aquest missatge. -emailVerificationBodyHtml=

    Alg\u00FA ha creat un compte de {2} amb aquesta adre\u00E7a de correu electr\u00F2nic. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per verificar la teva adre\u00E7a de correu electr\u00F2nic.

    {0}

    Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.

    Si tu no has creat aquest compte, simplement ignora aquest missatge.

    -passwordResetSubject=Reinicia contrasenya -passwordResetBody=Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minuts.\n\nSi no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. -passwordResetBodyHtml=

    Alg\u00FA ha demanat de canviar les credencials del teu compte de {2}. Si has estat tu, fes clic a l''enlla\u00E7 seg\u00FCent per a reiniciar-les.

    {0}

    Aquest enlla\u00E7 expirar\u00E0 en {1} minuts.

    Si no vols reiniciar les teves credencials, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.

    -executeActionsSubject=Actualitza el teu compte -executeActionsBody=L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.\n\n{0}\n\nAquest enlla\u00E7 expirar\u00E0 en {1} minutes.\n\nSi no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi. -executeActionsBodyHtml=

    L''administrador ha sol\u00B7licitat que actualitzis el teu compte de {2}. Fes clic a l''enlla\u00E7 inferior per iniciar aquest proc\u00E9s.

    {0}

    Aquest enlla\u00E7 expirar\u00E0 en {1} minutes.

    Si no est\u00E0s al tant que l''administrador hagi sol\u00B7licitat aix\u00F2, simplement ignora aquest missatge i no es realitzar\u00E0 cap canvi.

    -eventLoginErrorSubject=Fallada en l''inici de sessi\u00F3 -eventLoginErrorBody=S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventLoginErrorBodyHtml=

    S''ha detectat un intent d''acc\u00E9s fallit al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

    -eventRemoveTotpSubject=Esborrat OTP -eventRemoveTotpBody=OTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, per favor contacta amb l''administrador. -eventRemoveTotpBodyHtml=

    OTP s''ha eliminat del teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventUpdatePasswordSubject=Actualitzaci\u00F3 de contrasenya -eventUpdatePasswordBody=La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventUpdatePasswordBodyHtml=

    La teva contrasenya s''ha actualitzat el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

    -eventUpdateTotpSubject=Actualitzaci\u00F3 de OTP -eventUpdateTotpBody=OTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador. -eventUpdateTotpBodyHtml=

    OTP s''ha actualitzat al teu compte el {0} des de {1}. Si no has estat tu, si us plau contacta amb l''administrador.

    diff --git a/deps/keycloak/themes/base/email/messages/messages_cs.properties b/deps/keycloak/themes/base/email/messages/messages_cs.properties deleted file mode 100644 index 24c27af0c..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_cs.properties +++ /dev/null @@ -1,56 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Ověření e-mailu -emailVerificationBody=NÄ›kdo vytvoÅ™il úÄet {2} s touto e-mailovou adresou. Pokud jste to vy, kliknÄ›te na níže uvedený odkaz a ověřte svou e-mailovou adresu \n\n{0}\n\nTento odkaz vyprší za {1} minuty.\n\nPokud jste tento úÄet nevytvoÅ™ili, tuto zprávu ignorujte. -emailVerificationBodyHtml=

    NÄ›kdo vytvoÅ™il úÄet {2} s touto e-mailovou adresou. Pokud jste to vy, kliknÄ›te na níže uvedený odkaz a ověřte svou e-mailovou adresu.

    Odkaz na ověření e-mailové adresy

    Platnost odkazu vyprší za {1} minut.

    Pokud jste tento úÄet nevytvoÅ™ili, tuto zprávu ignorujte.

    -emailTestSubject=[KEYCLOAK] - testovací zpráva -emailTestBody=Toto je testovací zpráva -emailTestBodyHtml=

    Toto je testovací zpráva

    -identityProviderLinkSubject=Odkaz {0} -identityProviderLinkBody=NÄ›kdo chce propojit váš úÄet "{1}" s úÄtem "{0}" uživatele {2}. Pokud jste to vy, kliknÄ›te na níže uvedený odkaz a propojte úÄty. \n\n{3}\n\nPlatnost tohoto odkazu je {5}.\n\nPokud nechcete propojit úÄet, tuto zprávu ignorujte. Pokud propojíte úÄty, budete se moci pÅ™ihlásit jako {1} pomocí {0}. -identityProviderLinkBodyHtml=

    NÄ›kdo právÄ› požádal o zmÄ›nu hesla u vaÅ¡eho úÄtu {2}. Pokud jste to vy, pro jeho zmÄ›nu kliknÄ›te na odkaz níže.

    Odkaz na změnu hesla.

    Platnost tohoto odkazu je {3}.

    Pokud heslo změnit nechcete, tuto zprávu ignorujte a nic se nezmění.

    -passwordResetSubject=Zapomenuté heslo -passwordResetBody=NÄ›kdo právÄ› požádal o zmÄ›nu hesla u vaÅ¡eho úÄtu {2}. Pokud jste to vy, pro jeho zmÄ›nu kliknÄ›te na odkaz níže.\n\n{0}\n\nPlatnost tohoto odkazu je {3}.\n\nPokud heslo zmÄ›nit nechcete, tuto zprávu ignorujte a nic se nezmÄ›ní. -passwordResetBodyHtml=

    NÄ›kdo právÄ› požádal o zmÄ›nu pověření vaÅ¡eho úÄtu {2}. Pokud jste to vy, kliknÄ›te na odkaz níže, abyste je resetovali.

    Odkaz na obnovení pověření

    Platnost tohoto odkazu vyprší během {1} minut.

    Pokud nechcete obnovit vaše pověření, ignorujte tuto zprávu a nic se nezmění.

    -executeActionsSubject=Aktualizujte svůj úÄet -executeActionsBody=Váš administrátor vás požádal o provedení následujících akcí u úÄtu {2}: {3}. ZaÄnÄ›te kliknutím na níže uvedený odkaz.\n\n{0}\n\nPlatnost tohoto odkazu je {4}.\n\nPokud si nejste jisti, zda je tento požadavek v pořádku, ignorujte tuto zprávu. -executeActionsBodyHtml=

    Váš administrátor vás požádal o provedení následujících akcí u úÄtu {2}: {3}. ZaÄnÄ›te kliknutím na níže uvedený odkaz.

    Odkaz na aktualizaci úÄtu.

    Platnost tohoto odkazu je {4}.

    Pokud si nejste jisti, zda je tento požadavek v pořádku, ignorujte tuto zprávu.

    -eventLoginErrorSubject=Chyba pÅ™ihlášení -eventLoginErrorBody=NÄ›kdo se neúspěšnÄ› pokusil pÅ™ihlásit k úÄtu {0} z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventLoginErrorBodyHtml=

    NÄ›kdo se neúspěšnÄ› pokusil pÅ™ihlásit k úÄtu {0} z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.

    -eventRemoveTotpSubject=Odebrat TOTP -eventRemoveTotpBody=V úÄtu {0} bylo odebráno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventRemoveTotpBodyHtml=

    V úÄtu {0} bylo odebráno nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.

    -eventUpdatePasswordSubject=Aktualizace hesla -eventUpdatePasswordBody=V úÄtu {0} bylo zmÄ›nÄ›no heslo z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventUpdatePasswordBodyHtml=

    V úÄtu {0} bylo zmÄ›nÄ›no heslo z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.

    -eventUpdateTotpSubject=Aktualizace OTP -eventUpdateTotpBody=V úÄtu {0} bylo zmÄ›nÄ›no nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora. -eventUpdateTotpBodyHtml=

    V úÄtu {0} bylo zmÄ›nÄ›no nastavení OTP z {1}. Pokud jste to nebyli vy, kontaktujte administrátora.

    - -requiredAction.CONFIGURE_TOTP=Konfigurace OTP -requiredAction.terms_and_conditions=Smluvní podmínky -requiredAction.UPDATE_PASSWORD=Aktualizace hesla -requiredAction.UPDATE_PROFILE=Aktualizace profilu -requiredAction.VERIFY_EMAIL=Ověření e-mailu - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekund -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.seconds.2=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.3=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.4=sekundy -linkExpirationFormatter.timePeriodUnit.minutes=minut -linkExpirationFormatter.timePeriodUnit.minutes.1=minuta -linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=hodin -linkExpirationFormatter.timePeriodUnit.hours.1=hodina -linkExpirationFormatter.timePeriodUnit.hours.2=hodiny -linkExpirationFormatter.timePeriodUnit.hours.3=hodiny -linkExpirationFormatter.timePeriodUnit.hours.4=hodiny -linkExpirationFormatter.timePeriodUnit.days=dní -linkExpirationFormatter.timePeriodUnit.days.1=den -linkExpirationFormatter.timePeriodUnit.days.2=dny -linkExpirationFormatter.timePeriodUnit.days.3=dny -linkExpirationFormatter.timePeriodUnit.days.4=dny \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/messages/messages_da.properties b/deps/keycloak/themes/base/email/messages/messages_da.properties deleted file mode 100644 index 5f013f2de..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_da.properties +++ /dev/null @@ -1,47 +0,0 @@ -# encoding: UTF-8 -emailVerificationSubject=Verificer email -emailVerificationBody=Nogen har oprettet en {2} konto med denne email adresse. Hvis dette var dig, bedes du trykke på forbindet herunder for at verificere din email adresse \n\n{0}\n\nDette link vil udløbe inden for {3}.\n\nHvis det var dig der har oprettet denne konto, bedes du se bort fra denne mail. -emailVerificationBodyHtml=

    Nogen har oprettet en {2} konto med denne email adresse. Hvis dette var dig, bedes du trykke på forbindet herunder for at verificere din email adresse

    Link til email verificering

    Dette link vil udløbe inden for {3}.

    Hvis det var dig der har oprettet denne konto, bedes du se bort fra denne mail.

    -emailTestSubject=[KEYCLOAK] - SMTP test besked -emailTestBody=Dette er en test besked -emailTestBodyHtml=

    Dette er en test besked

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Nogen vil forbinde din "{1}" konto med "{0}" kontoen som er tilknyttet brugeren {2}. Hvis dette var dig, bedes du klikke på forbindet herunder for at forbinde de to konti\n\n{3}\n\nDette link vil udløbe efter {5}.\n\nHvis du ikke vil forbinde disse konti, kan du bare ignore denne besked. Hvis du vælger at forbinde de to konti, kan du logge ind som {1} via {0}. -identityProviderLinkBodyHtml=

    Someone wants to link your {1} account with {0} account of user {2} . Hvis dette var dig, bedes du klikke på forbindet herunder for at forbinde de to konti

    Bekræft

    Dette link vil udløbe efter {5}.

    nHvis du ikke vil forbinde disse konti, kan du bare ignore denne besked. Hvis du vælger at forbinde de to konti, kan du logge ind som {1} via {0}. -passwordResetSubject=Gendan adgangskode -passwordResetBody=Nogen har forsøgt at nulstille adgangskoden til {2}. Hvis dette var dig, bedes du klikke på linket herunder for at nulstille adgangskoden.\n\n{0}\n\nDette link og kode vil udløbe efter {3}.\n\nHvis du ikke ønsker at nulstille din adgangskode, kan du se bort fra denne besked. -passwordResetBodyHtml=

    Nogen har forsøgt at nulstille adgangskoden til {2}. Hvis dette var dig, bedes du klikke på linket herunder for at nulstille adgangskoden.

    Nulstil adgangskode

    Dette link og kode vil udløbe efter {3}.

    Hvis du ikke ønsker at nulstille din adgangskode, kan du se bort fra denne besked.

    -executeActionsSubject=Opdater din konto -executeActionsBody=Din administrator beder dig opdatere din {2} konto ved at udføre følgende handling(er): {3}. Klik på linket herunder for at starte processen.\n\n{0}\n\nDette link udløber efter {4}.\n\nHvis du ikke mener at din administrator har efterspurgt dette, kan du blot se bort fra denne besked. -executeActionsBodyHtml=

    Din administrator beder dig opdatere din {2} konto ved at udføre følgende handling(er): {3}. Klik på linket herunder for at starte processen.

    Opdater konto

    Dette link udløber efter {4}.

    Hvis du ikke mener at din administrator har efterspurgt dette, kan du blot se bort fra denne besked.

    -eventLoginErrorSubject=Logind fejl -eventLoginErrorBody=Et fejlet logind forsøg er blevet registreret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventLoginErrorBodyHtml=

    Et fejlet logind forsøg er blevet registreret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.

    -eventRemoveTotpSubject=Fjern OTP -eventRemoveTotpBody=OTP er blevet fjernet fra din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventRemoveTotpBodyHtml=

    OTP er blevet fjernet fra din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.

    -eventUpdatePasswordSubject=Opdater adgangskode -eventUpdatePasswordBody=Din adgangskode er blevet opdateret d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventUpdatePasswordBodyHtml=

    Din adgangskode er blevet opdateret d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.

    -eventUpdateTotpSubject=Opdater OTP -eventUpdateTotpBody=OTP blev opdateret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående. -eventUpdateTotpBodyHtml=

    OTP blev opdateret på din konto d. {0} fra {1}. Hvis dette ikke var dig, bedes du kontakte din administrator omgående.

    - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=Vilkår og Betingelser -requiredAction.UPDATE_PASSWORD=Opdater Adgangskode -requiredAction.UPDATE_PROFILE=Opdater Profil -requiredAction.VERIFY_EMAIL=Verificer Email - -# units for link expiration timeout formatting -forbindexpirationFormatter.timePeriodUnit.seconds=sekunder -forbindexpirationFormatter.timePeriodUnit.seconds.1=sekund -forbindexpirationFormatter.timePeriodUnit.minutes=minutter -forbindexpirationFormatter.timePeriodUnit.minutes.1=minut -forbindexpirationFormatter.timePeriodUnit.hours=timer -forbindexpirationFormatter.timePeriodUnit.hours.1=time -forbindexpirationFormatter.timePeriodUnit.days=dage -forbindexpirationFormatter.timePeriodUnit.days.1=dag - -emailVerificationBodyCode=Verificer din email adresse ved at indtaste følgende kode.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Verificer din email adresse ved at indtaste følgende kode.

    {0}

    diff --git a/deps/keycloak/themes/base/email/messages/messages_de.properties b/deps/keycloak/themes/base/email/messages/messages_de.properties deleted file mode 100644 index d79a3b1a8..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_de.properties +++ /dev/null @@ -1,43 +0,0 @@ -emailVerificationSubject=E-Mail verifizieren -emailVerificationBody=Jemand hat ein {2} Konto mit dieser E-Mail-Adresse erstellt. Falls Sie das waren, dann klicken Sie auf den Link, um die E-Mail-Adresse zu verifizieren.\n\n{0}\n\nDieser Link wird in {1} Minuten ablaufen.\n\nFalls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren. -emailVerificationBodyHtml=

    Jemand hat ein {2} Konto mit dieser E-Mail-Adresse erstellt. Falls das Sie waren, klicken Sie auf den Link, um die E-Mail-Adresse zu verifizieren.

    Link zur Best\u00E4tigung der E-Mail-Adresse

    Dieser Link wird in {1} Minuten ablaufen.

    Falls Sie dieses Konto nicht erstellt haben, dann k\u00F6nnen sie diese Nachricht ignorieren.

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{3}\n\n Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.\n\nSollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht. -identityProviderLinkBodyHtml=

    Es wurde beantragt Ihren Account {1} mit dem Account {0} von Benutzer {2} zu verlinken. Sollten Sie dies beantragt haben, klicken Sie auf den unten stehenden Link.

    Link zur Best\u00E4tigung der Kontoverkn\u00FCpfung

    Die G\u00FCltigkeit des Links wird in {4} Minuten verfallen.

    Sollten Sie Ihren Account nicht verlinken wollen, ignorieren Sie diese Nachricht. Wenn Sie die Accounts verlinken wird ein Login auf {1} \u00FCber {0} erm\u00F6glicht.

    -passwordResetSubject=Passwort zur\u00FCcksetzen -passwordResetBody=Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert. -passwordResetBodyHtml=

    Es wurde eine \u00C4nderung der Anmeldeinformationen f\u00FCr Ihren Account {2} angefordert. Wenn Sie diese \u00C4nderung beantragt haben, klicken Sie auf den unten stehenden Link.

    Link zum Zur\u00FCcksetzen von Anmeldeinformationen

    Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.

    Sollten Sie keine \u00C4nderung vollziehen wollen k\u00F6nnen Sie diese Nachricht ignorieren und an Ihrem Account wird nichts ge\u00E4ndert.

    -executeActionsSubject=Aktualisieren Sie Ihr Konto -executeActionsBody=Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.\n\n{0}\n\nDie G\u00FCltigkeit des Links wird in {1} Minuten verfallen.\n\nSollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert. -executeActionsBodyHtml=

    Ihr Administrator hat Sie aufgefordert Ihren Account {2} zu aktualisieren. Klicken Sie auf den unten stehenden Link um den Prozess zu starten.

    Link zum Account-Update

    Die G\u00FCltigkeit des Links wird in {1} Minuten verfallen.

    Sollten Sie sich dieser Aufforderung nicht bewusst sein, ignorieren Sie diese Nachricht und Ihr Account bleibt unver\u00E4ndert.

    -eventLoginErrorSubject=Fehlgeschlagene Anmeldung -eventLoginErrorBody=Jemand hat um {0} von {1} versucht, sich mit Ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventLoginErrorBodyHtml=

    Jemand hat um {0} von {1} versucht, sich mit Ihrem Konto anzumelden. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

    -eventRemoveTotpSubject=OTP Entfernt -eventRemoveTotpBody=OTP wurde von Ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventRemoveTotpBodyHtml=

    OTP wurde von Ihrem Konto am {0} von {1} entfernt. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

    -eventUpdatePasswordSubject=Passwort Aktualisiert -eventUpdatePasswordBody=Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventUpdatePasswordBodyHtml=

    Ihr Passwort wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

    -eventUpdateTotpSubject=OTP Aktualisiert -eventUpdateTotpBody=OTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin. -eventUpdateTotpBodyHtml=

    OTP wurde am {0} von {1} ge\u00E4ndert. Falls das nicht Sie waren, dann kontaktieren Sie bitte Ihren Admin.

    - -requiredAction.CONFIGURE_TOTP=Mehrfachauthentifizierung konfigurieren -requiredAction.terms_and_conditions=Bedingungen und Konditionen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse verifizieren - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=Sekunden -linkExpirationFormatter.timePeriodUnit.seconds.1=Sekunde -linkExpirationFormatter.timePeriodUnit.minutes=Minuten -linkExpirationFormatter.timePeriodUnit.minutes.1=Minute -linkExpirationFormatter.timePeriodUnit.hours=Stunden -linkExpirationFormatter.timePeriodUnit.hours.1=Stunde -linkExpirationFormatter.timePeriodUnit.days=Tage -linkExpirationFormatter.timePeriodUnit.days.1=Tag - -emailVerificationBodyCode=Bitte verifizieren Sie Ihre E-Mail-Adresse, indem Sie den folgenden Code eingeben.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Bitte verifizieren Sie Ihre E-Mail-Adresse, indem Sie den folgenden Code eingeben.

    {0}

    diff --git a/deps/keycloak/themes/base/email/messages/messages_en.properties b/deps/keycloak/themes/base/email/messages/messages_en.properties deleted file mode 100644 index b83d00fe3..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_en.properties +++ /dev/null @@ -1,51 +0,0 @@ -emailVerificationSubject=Verify email -emailVerificationBody=Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address\n\n{0}\n\nThis link will expire within {3}.\n\nIf you didn''t create this account, just ignore this message. -emailVerificationBodyHtml=

    Someone has created a {2} account with this email address. If this was you, click the link below to verify your email address

    Link to e-mail address verification

    This link will expire within {3}.

    If you didn''t create this account, just ignore this message.

    -emailTestSubject=[KEYCLOAK] - SMTP test message -emailTestBody=This is a test message -emailTestBodyHtml=

    This is a test message

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Someone wants to link your "{1}" account with "{0}" account of user {2} . If this was you, click the link below to link accounts\n\n{3}\n\nThis link will expire within {5}.\n\nIf you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}. -identityProviderLinkBodyHtml=

    Someone wants to link your {1} account with {0} account of user {2} . If this was you, click the link below to link accounts

    Link to confirm account linking

    This link will expire within {5}.

    If you don''t want to link account, just ignore this message. If you link accounts, you will be able to login to {1} through {0}.

    -passwordResetSubject=Reset password -passwordResetBody=Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.\n\n{0}\n\nThis link and code will expire within {3}.\n\nIf you don''t want to reset your credentials, just ignore this message and nothing will be changed. -passwordResetBodyHtml=

    Someone just requested to change your {2} account''s credentials. If this was you, click on the link below to reset them.

    Link to reset credentials

    This link will expire within {3}.

    If you don''t want to reset your credentials, just ignore this message and nothing will be changed.

    -executeActionsSubject=Update Your Account -executeActionsBody=Your administrator has just requested that you update your {2} account by performing the following action(s): {3}. Click on the link below to start this process.\n\n{0}\n\nThis link will expire within {4}.\n\nIf you are unaware that your administrator has requested this, just ignore this message and nothing will be changed. -executeActionsBodyHtml=

    Your administrator has just requested that you update your {2} account by performing the following action(s): {3}. Click on the link below to start this process.

    Link to account update

    This link will expire within {4}.

    If you are unaware that your administrator has requested this, just ignore this message and nothing will be changed.

    -eventLoginErrorSubject=Login error -eventLoginErrorBody=A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an administrator. -eventLoginErrorBodyHtml=

    A failed login attempt was detected to your account on {0} from {1}. If this was not you, please contact an administrator.

    -eventRemoveTotpSubject=Remove OTP -eventRemoveTotpBody=OTP was removed from your account on {0} from {1}. If this was not you, please contact an administrator. -eventRemoveTotpBodyHtml=

    OTP was removed from your account on {0} from {1}. If this was not you, please contact an administrator.

    -eventUpdatePasswordSubject=Update password -eventUpdatePasswordBody=Your password was changed on {0} from {1}. If this was not you, please contact an administrator. -eventUpdatePasswordBodyHtml=

    Your password was changed on {0} from {1}. If this was not you, please contact an administrator.

    -eventUpdateTotpSubject=Update OTP -eventUpdateTotpBody=OTP was updated for your account on {0} from {1}. If this was not you, please contact an administrator. -eventUpdateTotpBodyHtml=

    OTP was updated for your account on {0} from {1}. If this was not you, please contact an administrator.

    - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=seconds -linkExpirationFormatter.timePeriodUnit.seconds.1=second -linkExpirationFormatter.timePeriodUnit.minutes=minutes -linkExpirationFormatter.timePeriodUnit.minutes.1=minute -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=hours -linkExpirationFormatter.timePeriodUnit.hours.1=hour -linkExpirationFormatter.timePeriodUnit.days=days -linkExpirationFormatter.timePeriodUnit.days.1=day - -emailVerificationBodyCode=Please verify your email address by entering in the following code.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Please verify your email address by entering in the following code.

    {0}

    - diff --git a/deps/keycloak/themes/base/email/messages/messages_es.properties b/deps/keycloak/themes/base/email/messages/messages_es.properties deleted file mode 100644 index 024bc3d6b..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_es.properties +++ /dev/null @@ -1,21 +0,0 @@ -emailVerificationSubject=Verificaci\u00F3n de email -emailVerificationBody=Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi t\u00FA no has creado esta cuenta, simplemente ignora este mensaje. -emailVerificationBodyHtml=

    Alguien ha creado una cuenta de {2} con esta direcci\u00F3n de email. Si has sido t\u00FA, haz click en el enlace siguiente para verificar tu direcci\u00F3n de email.

    Enlace de verficaci\u00F3n de direcci\u00F3n de email

    Este enlace expirar\u00E1 en {1} minutos.

    Si t\u00FA no has creado esta cuenta, simplemente ignora este mensaje.

    -passwordResetSubject=Reiniciar contrase\u00F1a -passwordResetBody=Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. -passwordResetBodyHtml=

    Alguien ha solicitado cambiar las credenciales de tu cuenta de {2}. Si has sido t\u00FA, haz clic en el enlace siguiente para reiniciarlas.

    {0}

    Este enlace expirar\u00E1 en {1} minutos.

    Si no quieres reiniciar tus credenciales, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.

    -executeActionsSubject=Actualiza tu cuenta -executeActionsBody=El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.\n\n{0}\n\nEste enlace expirar\u00E1 en {1} minutos.\n\nSi no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio. -executeActionsBodyHtml=

    El administrador ha solicitado que actualices tu cuenta de {2}. Haz clic en el enlace inferior para iniciar este proceso.

    {0}

    Este enlace expirar\u00E1 en {1} minutos.

    Si no est\u00E1s al tanto de que el administrador haya solicitado esto, simplemente ignora este mensaje y no se realizar\u00E1 ning\u00FAn cambio.

    -eventLoginErrorSubject=Fallo en el inicio de sesi\u00F3n -eventLoginErrorBody=Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventLoginErrorBodyHtml=

    Se ha detectado un intento de acceso fallido a tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

    -eventRemoveTotpSubject=Borrado OTP -eventRemoveTotpBody=OTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventRemoveTotpBodyHtml=

    OTP fue eliminado de tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

    -eventUpdatePasswordSubject=Actualizaci\u00F3n de contrase\u00F1a -eventUpdatePasswordBody=Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventUpdatePasswordBodyHtml=

    Tu contrase\u00F1a se ha actualizado el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

    -eventUpdateTotpSubject=Actualizaci\u00F3n de OTP -eventUpdateTotpBody=OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador. -eventUpdateTotpBodyHtml=

    OTP se ha actualizado en tu cuenta el {0} desde {1}. Si no has sido t\u00FA, por favor contacta con el administrador.

    diff --git a/deps/keycloak/themes/base/email/messages/messages_fr.properties b/deps/keycloak/themes/base/email/messages/messages_fr.properties deleted file mode 100644 index e00c0a296..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_fr.properties +++ /dev/null @@ -1,37 +0,0 @@ -emailVerificationSubject=V\u00e9rification du courriel -emailVerificationBody=Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel\n\n{0}\n\nCe lien expire dans {4}.\n\nSinon, veuillez ignorer ce message. -emailVerificationBodyHtml=

    Quelqu''un vient de cr\u00e9er un compte "{2}" avec votre courriel. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous afin de v\u00e9rifier votre adresse de courriel

    {0}

    Ce lien expire dans {4}.

    Sinon, veuillez ignorer ce message.

    -passwordResetSubject=R\u00e9initialiser le mot de passe -passwordResetBody=Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.\n\n{0}\n\nCe lien expire dans {4}.\n\nSinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. -passwordResetBodyHtml=

    Quelqu''un vient de demander une r\u00e9initialisation de mot de passe pour votre compte {2}. Si vous \u00eates \u00e0 l''origine de cette requ\u00eate, veuillez cliquer sur le lien ci-dessous pour le mettre \u00e0 jour.

    Lien pour r\u00e9initialiser votre mot de passe

    Ce lien expire dans {4}.

    Sinon, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.

    -executeActionsSubject=Mettre \u00e0 jour votre compte -executeActionsBody=Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2} pour r\u00e9aliser les actions suivantes : {3}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.\n\n{0}\n\nCe lien expire dans {4}.\n\nSi vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte. -executeActionsBodyHtml=

    Votre administrateur vient de demander une mise \u00e0 jour de votre compte {2} pour r\u00e9aliser les actions suivantes : {3}. Veuillez cliquer sur le lien ci-dessous afin de commencer le processus.

    {0}

    Ce lien expire dans {4}.

    Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez ignorer ce message ; aucun changement ne sera effectu\u00e9 sur votre compte.

    -eventLoginErrorSubject=Erreur de connexion -eventLoginErrorBody=Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventLoginErrorBodyHtml=

    Une tentative de connexion a \u00e9t\u00e9 d\u00e9tect\u00e9e sur votre compte {0} depuis {1}. Si vous n''\u00eates pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

    -eventRemoveTotpSubject=Suppression du OTP -eventRemoveTotpBody=Le OTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventRemoveTotpBodyHtml=

    Le OTP a \u00e9t\u00e9 supprim\u00e9 de votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

    -eventUpdatePasswordSubject=Mise \u00e0 jour du mot de passe -eventUpdatePasswordBody=Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventUpdatePasswordBodyHtml=

    Votre mot de passe pour votre compte {0} a \u00e9t\u00e9 modifi\u00e9 depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

    -eventUpdateTotpSubject=Mise \u00e0 jour du OTP -eventUpdateTotpBody=Le OTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur. -eventUpdateTotpBodyHtml=

    Le OTP a \u00e9t\u00e9 mis \u00e0 jour pour votre compte {0} depuis {1}. Si vous n''\u00e9tiez pas \u00e0 l''origine de cette requ\u00eate, veuillez contacter votre administrateur.

    - -requiredAction.CONFIGURE_TOTP=Configurer un OTP -requiredAction.terms_and_conditions=Conditions g\u00e9n\u00e9rale d''utilisation -requiredAction.UPDATE_PASSWORD=Mise \u00e0 jour du mot de passe -requiredAction.UPDATE_PROFILE=Mise \u00e0 jour du profile -requiredAction.VERIFY_EMAIL=V\u00e9rification de l''adresse courriel - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=secondes -linkExpirationFormatter.timePeriodUnit.seconds.1=seconde -linkExpirationFormatter.timePeriodUnit.minutes=minutes -linkExpirationFormatter.timePeriodUnit.minutes.1=minute -linkExpirationFormatter.timePeriodUnit.hours=heures -linkExpirationFormatter.timePeriodUnit.hours.1=heure -linkExpirationFormatter.timePeriodUnit.days=jours -linkExpirationFormatter.timePeriodUnit.days.1=jour diff --git a/deps/keycloak/themes/base/email/messages/messages_hu.properties b/deps/keycloak/themes/base/email/messages/messages_hu.properties deleted file mode 100644 index 65f5ac044..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_hu.properties +++ /dev/null @@ -1,47 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Email cím megerősítése -emailVerificationBody=Ezzel az email címmel valaki létrehozott egy {2} tartomány felhasználói fiókot. Amennyiben a fiókot Ön hozta létre, kérem kattintson a lenti hivatkozásra, hogy megerősítse fiókját és ezt az email címet.\n\n{0}\n\nA hivatkozás érvényét veszti {3} múlva.\n\nHa nem ön hozta létre a felhasználói fiókot, akkor kérem hagyja figyelmen kívül ezt az üzenetet. -emailVerificationBodyHtml=

    Ezzel az email címmel valaki létrehozott egy {2} tartomány felhasználói fiókot. Amennyiben a fiókot Ön hozta létre, kérem kattintson a lenti hivatkozásra, hogy megerősítse fiókját és ezt az email címet.

    Hivatkozás a fiók és az email cím megerősítéséhez

    A hivatkozás érvényét veszti {3} múlva.

    Ha nem ön hozta létre a felhasználói fiókot, akkor kérem hagyja figyelmen kívül ezt az üzenetet.

    -emailTestSubject=[KEYCLOAK] - SMTP teszt üzenet -emailTestBody=Ez egy KEYCLOAK teszt üzenet. -emailTestBodyHtml=

    Ez egy KEYCLOAK teszt üzenet.

    -identityProviderLinkSubject={0} összekötés -identityProviderLinkBody=Valaki össze kívánja kötni az Ön "{1}" tartományi fiókját a(z) "{0}" személyazonosság-kezelő {2} felhasználói fiókjával. Amennyiben az összekötést Ön kezdeményezte kérem kattintson a lenti hivatkozásra, hogy összekösse fiókjait.\n\n{3}\n\nA hivatkozás érvényét veszti {5} múlva.\n\nHa nem ön kezdeményezte a felhasználói fiókok összekötését, akkor kérem hagyja figyelmen kívül ezt az üzenetet.\n\nHa összeköti a fiókjait, akkor beléphet a(z) {1} tartományba a(z) {0} szolgáltatón keresztül. -identityProviderLinkBodyHtml=

    Valaki össze kívánja kötni az Ön {1} tartomány fiókját a(z) {0} személyazonosság-kezelő {2} felhasználói fiókjával. Amennyiben az összekötést Ön kezdeményezte kérem kattintson a lenti hivatkozásra, hogy összekösse fiókjait.

    Hivatkozás a fiók összekötés megerősítéshez

    A hivatkozás érvényét veszti {5} múlva.

    Ha nem ön kezdeményezte a felhasználói fiókok összekötését, akkor kérem hagyja figyelmen kívül ezt az üzenetet.

    Ha összeköti a fiókjait, akkor beléphet a(z) {1} tartományba a(z) {0} szolgáltatón keresztül.

    -passwordResetSubject=Jelszó visszaállítás -passwordResetBody=Valaki vissza kívánja állítani az Ön "{2}" tartományi fiókjának jelszavát. Amennyiben a jelszó visszaállítást Ön kezdeményezte, kérem kattintson a lenti hivatkozásra a jelszava megváltoztatásához.\n\n{0}\n\nA hivatkozás érvényét veszti {3} múlva.\n\nHa nem ön kérte a jelszó visszaállítást, akkor kérem hagyja figyelmen kívül ezt az üzenetet, a jelszava nem fog megváltozni. -passwordResetBodyHtml=

    Valaki vissza kívánja állítani az Ön "{2}" tartományi fiókjának jelszavát. Amennyiben a jelszó visszaállítást Ön kezdeményezte, kérem kattintson a lenti hivatkozásra a jelszava megváltoztatásához.

    Hivatkozás a jelszó visszaállításhoz

    A hivatkozás érvényét veszti {3} múlva.

    Ha nem ön kérte a jelszó visszaállítást, akkor kérem hagyja figyelmen kívül ezt az üzenetet, a jelszava nem fog megváltozni.

    -executeActionsSubject=Felhasználói fiók adatok módosítása -executeActionsBody=Az alkalmazás adminisztrátora kezdeményezte az Ön "{2}" tartományi felhasználói fiók adatainak módosítását a következő műveletekkel: {3}. Kérem kattintson a lenti hivatkozásra, hogy megkezdhesse a kért módosításokat.\n\n{0}\n\nA hivatkozás érvényét veszti {4} múlva.\n\nHa nincs tudomása arról, hogy az adminisztrátora módosításokat kért Öntől, akkor kérem hagyja figyelmen kívül ezt az üzenetet, az adatai nem fognak megváltozni. -executeActionsBodyHtml=

    Az alkalmazás adminisztrátora kezdeményezte az Ön "{2}" tartományi felhasználói fiók adatainak módosítását a következő műveletekkel: {3}. Kérem kattintson a lenti hivatkozásra, hogy megkezdhesse a kért módosításokat.

    Hivatkozás a felhasználói fiók adatok módosításához

    A hivatkozás érvényét veszti {4} múlva.

    Ha nincs tudomása arról, hogy az adminisztrátora módosításokat kért Öntől, akkor kérem hagyja figyelmen kívül ezt az üzenetet, az adatai nem fognak megváltozni.

    -eventLoginErrorSubject=Belépési hiba -eventLoginErrorBody=Sikertelen belépési kísérlet történt {0} időpontban a(z) {1} címről. Kérem lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön próbált meg belépni. -eventLoginErrorBodyHtml=

    Sikertelen belépési kísérlet történt {0} időpontban a(z) {1} címről. Kérem lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön próbált meg belépni.

    -eventRemoveTotpSubject=Egyszer használatos jelszó (OTP) eltávolítása -eventRemoveTotpBody=Az egyszer használatos jelszó (OTP) funkciót {0} időpontban a(z) {1} címről érkező kérés értelmében eltávolítottuk a fiókjáról. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP eltávolítását. -eventRemoveTotpBodyHtml=

    Az egyszer használatos jelszó (OTP) funkciót {0} időpontban a(z) {1} címről érkező kérés értelmében eltávolítottuk a fiókjáról. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP eltávolítását.

    -eventUpdatePasswordSubject=Jelszó csere -eventUpdatePasswordBody=Jelszavát {0} időpontban a(z) {1} címről érkező kérés értelmében lecseréltük. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte a jelszó cserét. -eventUpdatePasswordBodyHtml=

    Jelszavát {0} időpontban a(z) {1} címről érkező kérés értelmében lecseréltük. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte a jelszó cserét.

    -eventUpdateTotpSubject=Egyszer használatos jelszó (OTP) csere -eventUpdateTotpBody=Az egyszer használatos jelszó (OTP) beállításait {0} időpontban a(z) {1} címről érkező kérés értelmében módosítottuk a fiókján. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP beállítások módosítását. -eventUpdateTotpBodyHtml=

    Az egyszer használatos jelszó (OTP) beállításait {0} időpontban a(z) {1} címről érkező kérés értelmében módosítottuk a fiókján. Kérem haladéktalanul lépjen kapcsolatba az alkalmazás adminisztrátorral amennyiben nem ön igényelte az OTP beállítások módosítását.

    - -requiredAction.CONFIGURE_TOTP=Egyszer használatos jelszó (OTP) beállítása -requiredAction.terms_and_conditions=Felhasználási feltételek -requiredAction.UPDATE_PASSWORD=Jelszó csere -requiredAction.UPDATE_PROFILE=Fiók adatok módosítása -requiredAction.VERIFY_EMAIL=Email cím megerősítése - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=másodperc -linkExpirationFormatter.timePeriodUnit.seconds.1=másodperc -linkExpirationFormatter.timePeriodUnit.minutes=perc -linkExpirationFormatter.timePeriodUnit.minutes.1=perc -linkExpirationFormatter.timePeriodUnit.hours=óra -linkExpirationFormatter.timePeriodUnit.hours.1=óra -linkExpirationFormatter.timePeriodUnit.days=nap -linkExpirationFormatter.timePeriodUnit.days.1=nap - -emailVerificationBodyCode=Kérem erősítse meg az email címét a következő kód megadásával.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Kérem erősítse meg az email címét a következő kód megadásával.

    {0}

    diff --git a/deps/keycloak/themes/base/email/messages/messages_it.properties b/deps/keycloak/themes/base/email/messages/messages_it.properties deleted file mode 100644 index a866bf2d2..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_it.properties +++ /dev/null @@ -1,50 +0,0 @@ -emailVerificationSubject=Verifica l''email -emailVerificationBody=Qualcuno ha creato un account {2} con questo indirizzo email. Se sei stato tu, fai clic sul link seguente per verificare il tuo indirizzo email\n\n{0}\n\nQuesto link scadr\u00e0 in {3}.\n\nSe non sei stato tu a creare questo account, ignora questo messaggio. -emailVerificationBodyHtml=

    Qualcuno ha creato un account {2} con questo indirizzo email. Se sei stato tu, fai clic sul link seguente per verificare il tuo indirizzo email

    {0}

    Questo link scadr\u00e0 in {3}.

    Se non sei stato tu a creare questo account, ignora questo messaggio.

    -emailTestSubject=[KEYCLOAK] - messaggio di test SMTP -emailTestBody=Questo \u00e8 un messaggio di test -emailTestBodyHtml=

    Questo \u00e8 un messaggio di test

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Qualcuno vuole associare il tuo account "{1}" con l''account "{0}" dell''utente {2}. Se sei stato tu, fai clic sul link seguente per associare gli account\n\n{3}\n\nQuesto link scadr\u00e0 in {5}.\n\nSe non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}. -identityProviderLinkBodyHtml=

    Qualcuno vuole associare il tuo account {1} con l''account {0} dell''utente {2}. Se sei stato tu, fai clic sul link seguente per associare gli account

    {3}

    Questo link scadr\u00e0 in {5}.

    Se non vuoi associare l''account, ignora questo messaggio. Se associ gli account, potrai accedere a {1} attraverso {0}.

    -passwordResetSubject=Reimposta la password -passwordResetBody=Qualcuno ha appena richiesto di cambiare le credenziali di accesso al tuo account {2}. Se sei stato tu, fai clic sul link seguente per reimpostarle.\n\n{0}\n\nQuesto link e codice scadranno in {3}.\n\nSe non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. -passwordResetBodyHtml=

    Qualcuno ha appena richiesto di cambiare le credenziali di accesso al tuo account {2}. Se sei stato tu, fai clic sul link seguente per reimpostarle.

    {0}

    Questo link scadr\u00e0 in {3}.

    Se non vuoi reimpostare le tue credenziali di accesso, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.

    -executeActionsSubject=Aggiorna il tuo account -executeActionsBody=Il tuo amministratore ha appena richiesto un aggiornamento del tuo account {2} ed \u00e8 necessario che tu esegua la/le seguente/i azione/i: {3}. Fai clic sul link seguente per iniziare questo processo.\n\n{0}\n\nQuesto link scadr\u00e0 in {4}.\n\nSe non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio. -executeActionsBodyHtml=

    Il tuo amministratore ha appena richiesto un aggiornamento del tuo account {2} ed \u00e8 necessario che tu esegua la/le seguente/i azione/i: {3}. Fai clic sul link seguente per iniziare questo processo.

    Link to account update

    Questo link scadr\u00e0 in {4}.

    Se non sei a conoscenza della richiesta del tuo amministratore, ignora questo messaggio e non verr\u00e0 effettuato nessun cambio.

    -eventLoginErrorSubject=Errore di accesso -eventLoginErrorBody=\u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventLoginErrorBodyHtml=

    \u00c8 stato rilevato un tentativo fallito di accesso al tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

    -eventRemoveTotpSubject=Rimozione OTP (password temporanea valida una volta sola) -eventRemoveTotpBody=La OTP (password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventRemoveTotpBodyHtml=

    La OTP (password temporanea valida una volta sola) \u00e8 stata rimossa dal tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

    -eventUpdatePasswordSubject=Aggiornamento password -eventUpdatePasswordBody=La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventUpdatePasswordBodyHtml=

    La tua password \u00e8 stata cambiata il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

    -eventUpdateTotpSubject=Aggiornamento OTP (password temporanea valida una volta sola) -eventUpdateTotpBody=La OTP (password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore. -eventUpdateTotpBodyHtml=

    La OTP (password temporanea valida una volta sola) \u00e8 stata aggiornata per il tuo account il {0} da {1}. Se non sei stato tu, per favore contatta l''amministratore.

    - -requiredAction.CONFIGURE_TOTP=Configurazione OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiornamento password -requiredAction.UPDATE_PROFILE=Aggiornamento profilo -requiredAction.VERIFY_EMAIL=Verifica dell''indirizzo email - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=secondi -linkExpirationFormatter.timePeriodUnit.seconds.1=secondo -linkExpirationFormatter.timePeriodUnit.minutes=minuti -linkExpirationFormatter.timePeriodUnit.minutes.1=minuto -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=ore -linkExpirationFormatter.timePeriodUnit.hours.1=ora -linkExpirationFormatter.timePeriodUnit.days=giorni -linkExpirationFormatter.timePeriodUnit.days.1=giorno - -emailVerificationBodyCode=Per favore verifica il tuo indirizzo email inserendo il codice seguente.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Per favore verifica il tuo indirizzo email inserendo il codice seguente.

    {0}

    diff --git a/deps/keycloak/themes/base/email/messages/messages_ja.properties b/deps/keycloak/themes/base/email/messages/messages_ja.properties deleted file mode 100644 index fb5c72874..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_ja.properties +++ /dev/null @@ -1,52 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Eメールã®ç¢ºèª -emailVerificationBody=ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§{2}アカウントãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªã‚’完了ã—ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯{3}ã ã‘有効ã§ã™ã€‚\n\nã‚‚ã—ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã«å¿ƒå½“ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚’無視ã—ã¦ãã ã•ã„。 -emailVerificationBodyHtml=

    ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§{2}アカウントãŒä½œæˆã•ã‚Œã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªã‚’完了ã—ã¦ãã ã•ã„。

    メールアドレスã®ç¢ºèª

    ã“ã®ãƒªãƒ³ã‚¯ã¯{3}ã ã‘有効ã§ã™ã€‚

    ã‚‚ã—ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ä½œæˆã«å¿ƒå½“ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒ¼ãƒ«ã‚’無視ã—ã¦ãã ã•ã„。

    -emailTestSubject=[KEYCLOAK] - SMTPテストメッセージ -emailTestBody=ã“ã‚Œã¯ãƒ†ã‚¹ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™ -emailTestBodyHtml=

    ã“ã‚Œã¯ãƒ†ã‚¹ãƒˆãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã§ã™

    -identityProviderLinkSubject=リンク {0} -identityProviderLinkBody=ã‚ãªãŸã®"{1}"アカウントã¨{2}ユーザーã®"{0}"アカウントã®ãƒªãƒ³ã‚¯ãŒè¦æ±‚ã•ã‚Œã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒªãƒ³ã‚¯ã‚’è¡Œã£ã¦ãã ã•ã„。\n\n{3}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯{5}ã ã‘有効ã§ã™ã€‚\n\nã‚‚ã—アカウントã®ãƒªãƒ³ã‚¯ã‚’è¡Œã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。アカウントã®ãƒªãƒ³ã‚¯ã‚’è¡Œã†ã“ã¨ã§ã€{0}経由ã§{1}ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚ -identityProviderLinkBodyHtml=

    ã‚ãªãŸã®{1}アカウントã¨{2}ユーザーã®{0}アカウントã®ãƒªãƒ³ã‚¯ãŒè¦æ±‚ã•ã‚Œã¾ã—ãŸã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã®ãƒªãƒ³ã‚¯ã‚’è¡Œã£ã¦ãã ã•ã„。

    アカウントリンクã®ç¢ºèª

    ã“ã®ãƒªãƒ³ã‚¯ã¯{5}ã ã‘有効ã§ã™ã€‚

    ã‚‚ã—アカウントã®ãƒªãƒ³ã‚¯ã‚’è¡Œã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。アカウントã®ãƒªãƒ³ã‚¯ã‚’è¡Œã†ã“ã¨ã§ã€{0}経由ã§{1}ã«ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãŒã§ãるよã†ã«ãªã‚Šã¾ã™ã€‚

    -passwordResetSubject=パスワードã®ãƒªã‚»ãƒƒãƒˆ -passwordResetBody=ã‚ãªãŸã®{2}アカウントã®ãƒ‘スワードã®å¤‰æ›´ãŒè¦æ±‚ã•ã‚Œã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã£ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯{3}ã ã‘有効ã§ã™ã€‚\n\nã‚‚ã—パスワードã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•ã‚Œã¾ã›ã‚“。 -passwordResetBodyHtml=

    ã‚ãªãŸã®{2}アカウントã®ãƒ‘スワードã®å¤‰æ›´ãŒè¦æ±‚ã•ã‚Œã¦ã„ã¾ã™ã€‚以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ãƒ‘スワードã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã£ã¦ãã ã•ã„。

    パスワードã®ãƒªã‚»ãƒƒãƒˆ

    ã“ã®ãƒªãƒ³ã‚¯ã¯{3}ã ã‘有効ã§ã™ã€‚

    ã‚‚ã—パスワードã®ãƒªã‚»ãƒƒãƒˆã‚’è¡Œã‚ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•ã‚Œã¾ã›ã‚“。

    -executeActionsSubject=アカウントã®æ›´æ–° -executeActionsBody=次ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ç®¡ç†è€…よりã‚ãªãŸã®{2}アカウントã®æ›´æ–°ãŒè¦æ±‚ã•ã‚Œã¦ã„ã¾ã™: {3}。以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã“ã®ãƒ—ロセスを開始ã—ã¦ãã ã•ã„。\n\n{0}\n\nã“ã®ãƒªãƒ³ã‚¯ã¯{4}ã ã‘有効ã§ã™ã€‚\n\n管ç†è€…ã‹ã‚‰ã®ã“ã®å¤‰æ›´è¦æ±‚ã«ã¤ã„ã¦ã”存知ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•ã‚Œã¾ã›ã‚“。 -executeActionsBodyHtml=

    次ã®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã™ã‚‹ã“ã¨ã«ã‚ˆã‚Šã€ç®¡ç†è€…よりã‚ãªãŸã®{2}アカウントã®æ›´æ–°ãŒè¦æ±‚ã•ã‚Œã¦ã„ã¾ã™: {3}。以下ã®ãƒªãƒ³ã‚¯ã‚’クリックã—ã¦ã“ã®ãƒ—ロセスを開始ã—ã¦ãã ã•ã„。

    アカウントã®æ›´æ–°

    ã“ã®ãƒªãƒ³ã‚¯ã¯{4}ã ã‘有効ã§ã™ã€‚

    管ç†è€…ã‹ã‚‰ã®ã“ã®å¤‰æ›´è¦æ±‚ã«ã¤ã„ã¦ã”存知ãªã„å ´åˆã¯ã€ã“ã®ãƒ¡ãƒƒã‚»ãƒ¼ã‚¸ã‚’無視ã—ã¦ãã ã•ã„。何も変更ã•ã‚Œã¾ã›ã‚“。

    -eventLoginErrorSubject=ログインエラー -eventLoginErrorBody={0}ã«{1}ã‹ã‚‰ã®ãƒ­ã‚°ã‚¤ãƒ³å¤±æ•—ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§æ¤œå‡ºã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 -eventLoginErrorBodyHtml=

    {0}ã«{1}ã‹ã‚‰ã®ãƒ­ã‚°ã‚¤ãƒ³å¤±æ•—ãŒã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§æ¤œå‡ºã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。

    -eventRemoveTotpSubject=OTPã®å‰Šé™¤ -eventRemoveTotpBody={0}ã«{1}ã‹ã‚‰ã®æ“作ã§OTPãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 -eventRemoveTotpBodyHtml=

    {0}ã«{1}ã‹ã‚‰ã®æ“作ã§OTPãŒå‰Šé™¤ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。

    -eventUpdatePasswordSubject=パスワードã®æ›´æ–° -eventUpdatePasswordBody={0}ã«{1}ã‹ã‚‰ã®æ“作ã§ã‚ãªãŸã®ãƒ‘スワードãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 -eventUpdatePasswordBodyHtml=

    {0}ã«{1}ã‹ã‚‰ã®æ“作ã§ã‚ãªãŸã®ãƒ‘スワードãŒå¤‰æ›´ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。

    -eventUpdateTotpSubject=OTPã®æ›´æ–° -eventUpdateTotpBody={0}ã«{1}ã‹ã‚‰ã®æ“作ã§OTPãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 -eventUpdateTotpBodyHtml=

    {0}ã«{1}ã‹ã‚‰ã®æ“作ã§OTPãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚心当ãŸã‚ŠãŒãªã„å ´åˆã¯ã€ç®¡ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。

    - -requiredAction.CONFIGURE_TOTP=OTPã®è¨­å®š -requiredAction.terms_and_conditions=利用è¦ç´„ -requiredAction.UPDATE_PASSWORD=パスワードã®æ›´æ–° -requiredAction.UPDATE_PROFILE=プロファイルã®æ›´æ–° -requiredAction.VERIFY_EMAIL=Eメールã®ç¢ºèª - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=秒 -linkExpirationFormatter.timePeriodUnit.seconds.1=秒 -linkExpirationFormatter.timePeriodUnit.minutes=分 -linkExpirationFormatter.timePeriodUnit.minutes.1=分 -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=時間 -linkExpirationFormatter.timePeriodUnit.hours.1=時間 -linkExpirationFormatter.timePeriodUnit.days=æ—¥ -linkExpirationFormatter.timePeriodUnit.days.1=æ—¥ - -emailVerificationBodyCode=次ã®ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’確èªã—ã¦ãã ã•ã„。\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    次ã®ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’確èªã—ã¦ãã ã•ã„。

    {0}

    - diff --git a/deps/keycloak/themes/base/email/messages/messages_lt.properties b/deps/keycloak/themes/base/email/messages/messages_lt.properties deleted file mode 100644 index abf16599c..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_lt.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=El. paÅ¡to patvirtinimas -emailVerificationBody=Paskyra {2} sukurta naudojant šį el. paÅ¡to adresÄ…. Jei tai buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ…\n\n{0}\n\nÅ i nuoroda galioja {1} min.\n\nJei paskyros nekÅ«rÄ—te, tuomet ignuoruokite šį laiÅ¡kÄ…. -emailVerificationBodyHtml=

    Paskyra {2} sukurta naudojant šį el. paÅ¡to adresÄ…. Jei tao buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ…

    {0}

    Å i nuoroda galioja {1} min.

    nJei paskyros nekūrėte, tuomet ignuoruokite šį laišką.

    -identityProviderLinkSubject=SÄ…saja {0} -identityProviderLinkBody=Kažas pageidauja susieti JÅ«sų "{1}" paskyrÄ… su "{0}" {2} naudotojo paskyrÄ…. Jei tai buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ… norÄ—dami susieti paskyras\n\n{3}\n\nÅ i nuoroda galioja {4} min.\n\nJei paskyrų susieti nenorite, tuomet ignoruokite šį laiÅ¡kÄ…. Jei paskyras susiesite, tuomet prie {1} galÄ—siste prisijungti per {0}. -identityProviderLinkBodyHtml=

    žas pageidauja susieti JÅ«sų {1} paskyrÄ… su {0} {2} naudotojo paskyrÄ…. Jei tai buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ… norÄ—dami susieti paskyras

    {3}

    Å i nuoroda galioja {4} min.

    Jei paskyrų susieti nenorite, tuomet ignoruokite šį laišką. Jei paskyras susiesite, tuomet prie {1} galėsiste prisijungti per {0}.

    -passwordResetSubject=Slaptažodžio atkÅ«rimas -passwordResetBody=Kažkas pageidauja pakeisti JÅ«sų paskyros {2} slaptažodį. Jei tai buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ… slaptažodžio pakeitimui.\n\n{0}\n\nÅ i nuoroda ir kodas galioja {1} min.\n\nJei nepageidajate keisti slaptažodžio, tuomet ignoruokite šį laiÅ¡kÄ… ir niekas nebus pakeista. -passwordResetBodyHtml=

    Kažkas pageidauja pakeisti JÅ«sų paskyros {2} slaptažodį. Jei tai buvote JÅ«s, tuomet paspauskite žemiau esanÄiÄ… nuorodÄ… slaptažodžio pakeitimui.

    {0}

    Å i nuoroda ir kodas galioja {1} min.

    Jei nepageidajate keisti slaptažodžio, tuomet ignoruokite šį laišką ir niekas nebus pakeista.

    -executeActionsSubject=Atnaujinkite savo paskyrÄ… -executeActionsBody=Sistemos administratorius pageidauja, kad JÅ«s atnaujintumÄ—te savo {2} paskyrÄ…. Paspauskite žemiau esanÄiÄ… nuorodÄ… paskyros duomenų atnaujinimui.\n\n{0}\n\nÅ i nuoroda galioja {1} min.\n\nJei JÅ«s neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite šį laiÅ¡kÄ… ir niekas nebus pakeista. -executeActionsBodyHtml=

    Sistemos administratorius pageidauja, kad JÅ«s atnaujintumÄ—te savo {2} paskyrÄ…. Paspauskite žemiau esanÄiÄ… nuorodÄ… paskyros duomenų atnaujinimui.

    {0}

    Å i nuoroda galioja {1} min.

    Jei Jūs neasate tikri, kad tai administratoriaus pageidavimas, tuomet ignoruokite šį laišką ir niekas nebus pakeista.

    -eventLoginErrorSubject=Nesėkmingas bandymas prisijungti prie jūsų paskyros -eventLoginErrorBody=Bandymas prisijungti prie jūsų paskyros {0} iš {1} nesėkmingas. Jei tai nebuvote jūs, tuomet susisiekite su administratoriumi -eventLoginErrorBodyHtml=

    Bandymas prisijungti prie jūsų paskyros {0} iš {1} nesėkmingas. Jei tai nebuvote jūs, tuomet susisiekite su administratoriumi

    -eventRemoveTotpSubject=OTP pašalinimas -eventRemoveTotpBody=Kažkas pageidauja atsieti TOPT Jūsų {1} paskyroje su {0}. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi -eventRemoveTotpBodyHtml=

    Kažkas pageidauja atsieti TOPT Jūsų {1} paskyroje su {0}. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi

    -eventUpdatePasswordSubject=Slaptažodžio atnaujinimas -eventUpdatePasswordBody={1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi -eventUpdatePasswordBodyHtml=

    {1} paskyroje {0} pakeisas jūsų slaptažodis. Jei Jūs nekeitėte, tuomet susisiekite su administratoriumi

    -eventUpdateTotpSubject=OTP atnaujinimas -eventUpdateTotpBody=OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi -eventUpdateTotpBodyHtml=

    OTP Jūsų {1} paskyroje su {0} buvo atnaujintas. Jei tai nebuvote Jūs, tuomet susisiekite su administratoriumi

    \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/messages/messages_nl.properties b/deps/keycloak/themes/base/email/messages/messages_nl.properties deleted file mode 100644 index 9e6efbe3e..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_nl.properties +++ /dev/null @@ -1,38 +0,0 @@ -emailVerificationSubject=Bevestig e-mailadres -emailVerificationBody=Iemand heeft een {2} account aangemaakt met dit e-mailadres. Als u dit was, klikt u op de onderstaande koppeling om uw e-mailadres te bevestigen \n\n{0}\n\nDeze koppeling zal binnen {3} vervallen.\n\nU kunt dit bericht negeren indien u dit account niet heeft aangemaakt. -emailVerificationBodyHtml=

    Iemand heeft een {2} account aangemaakt met dit e-mailadres. Als u dit was, klikt u op de onderstaande koppeling om uw e-mailadres te bevestigen

    Koppeling naar e-mailadres bevestiging

    Deze koppeling zal binnen {3} vervallen.U kunt dit bericht negeren indien u dit account niet heeft aangemaakt.

    -emailTestSubject=[KEYCLOAK] - SMTP testbericht -emailTestBody=Dit is een testbericht -emailTestBodyHtml=

    Dit is een testbericht

    -identityProviderLinkSubject=Koppel {0} -identityProviderLinkBody=Iemand wil uw "{1}" account koppelen met "{0}" account van gebruiker {2}. Als u dit was, klik dan op de onderstaande link om de accounts te koppelen\n\n{3}\n\nDeze link zal over {5} vervallen.\n\nAls u de accounts niet wilt koppelen, negeer dan dit bericht. Als u accounts koppelt, dan kunt u bij {1} inloggen via {0}. -identityProviderLinkBodyHtml=

    Iemand wil uw "{1}" account koppelen met "{0}" account van gebruiker {2}. Als u dit was, klik dan op de onderstaande link om de accounts te koppelen

    Link om accounts te koppelen

    Deze link zal over {5} vervallen.

    Als u de accounts niet wilt koppelen, negeer dan dit bericht. Als u accounts koppelt, dan kunt u bij {1} inloggen via {0}.

    -passwordResetSubject=Wijzig wachtwoord -passwordResetBody=Iemand verzocht de aanmeldgegevens van uw {2} account te wijzigen. Als u dit was, klik dan op de onderstaande koppeling om ze te wijzigen.\n\n{0}\n\nDe link en de code zullen binnen {3} vervallen.\n\nAls u uw aanmeldgegevens niet wilt wijzigen, negeer dan dit bericht en er zal niets gewijzigd worden. -passwordResetBodyHtml=

    Iemand verzocht de aanmeldgegevens van uw {2} account te wijzigen. Als u dit was, klik dan op de onderstaande koppeling om ze te wijzigen.

    Wijzig aanmeldgegevens

    De link en de code zullen binnen {3} vervallen.

    Als u uw aanmeldgegevens niet wilt wijzigen, negeer dan dit bericht en er zal niets gewijzigd worden.

    -executeActionsSubject=Wijzig uw account -executeActionsBody=Uw beheerder heeft u verzocht uw {2} account te wijzigen. Klik op de onderstaande koppeling om dit proces te starten. \n\n{0}\n\nDeze link zal over {4} vervallen. \n\nAls u niet over dit verzoek op de hoogte was, negeer dan dit bericht om uw account ongewijzigd te laten. -executeActionsBodyHtml=

    Uw beheerder heeft u verzocht uw {2} account te wijzigen. Klik op de onderstaande koppeling om dit proces te starten.

    Link naar account wijziging

    Deze link zal over {4} vervallen.

    Als u niet over dit verzoek op de hoogte was, negeer dan dit bericht om uw account ongewijzigd te laten.

    -eventLoginErrorSubject=Inlogfout -eventLoginErrorBody=Er is een foutieve inlogpoging gedetecteerd op uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met de beheerder. -eventLoginErrorBodyHtml=

    Er is een foutieve inlogpoging gedetecteerd op uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met de beheerder.

    -eventRemoveTotpSubject=OTP verwijderd -eventRemoveTotpBody=OTP is verwijderd van uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventRemoveTotpBodyHtml=

    OTP is verwijderd van uw account om {0} vanuit {1}. Als u dit niet was, neem dan contact op met uw beheerder.

    -eventUpdatePasswordSubject=Wachtwoord gewijzigd -eventUpdatePasswordBody=Uw wachtwoord is gewijzigd om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventUpdatePasswordBodyHtml=

    Uw wachtwoord is gewijzigd om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder.

    -eventUpdateTotpSubject=OTP gewijzigd -eventUpdateTotpBody=OTP is gewijzigd voor uw account om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder. -eventUpdateTotpBodyHtml=

    OTP is gewijzigd voor uw account om {0} door {1}. Als u dit niet was, neem dan contact op met uw beheerder.

    - - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=seconden -linkExpirationFormatter.timePeriodUnit.seconds.1=seconde -linkExpirationFormatter.timePeriodUnit.minutes=minuten -linkExpirationFormatter.timePeriodUnit.minutes.1=minuut -linkExpirationFormatter.timePeriodUnit.hours=uur -linkExpirationFormatter.timePeriodUnit.hours.1=uur -linkExpirationFormatter.timePeriodUnit.days=dagen -linkExpirationFormatter.timePeriodUnit.days.1=dag diff --git a/deps/keycloak/themes/base/email/messages/messages_no.properties b/deps/keycloak/themes/base/email/messages/messages_no.properties deleted file mode 100644 index 32334e9d8..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_no.properties +++ /dev/null @@ -1,24 +0,0 @@ -emailVerificationSubject=Bekreft e-postadresse -emailVerificationBody=Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen. -emailVerificationBodyHtml=

    Noen har opprettet en {2} konto med denne e-postadressen. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 bekrefte e-postadressen din

    {0}

    Denne lenken vil utl\u00F8pe om {1} minutter.

    Hvis du ikke opprettet denne kontoen, vennligst ignorer denne meldingen.

    -identityProviderLinkSubject=Lenke {0} -identityProviderLinkBody=Noen vil koble din {1} konto med {0} konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene\n\n{3}\n\nDenne lenken vil utl\u00F8pe om {4} minutter\n\nHvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}. -identityProviderLinkBodyHtml=

    Noen vil koble din {1} konto med {0} konto til bruker {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 koble kontoene.

    {3}

    Denne lenken vil utl\u00F8pe om {4} minutter.

    Hvis du ikke vil koble kontoene, vennligst ignorer denne meldingen. Hvis du kobler kontoene sammen vil du kunne logge inn til {1} gjennom {0}.

    -passwordResetSubject=Tilbakestill passord -passwordResetBody=Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret. -passwordResetBodyHtml=

    Noen har bedt om \u00E5 endre innloggingsdetaljene til din konto {2}. Hvis dette var deg, klikk p\u00E5 lenken nedenfor for \u00E5 tilbakestille dem.

    {0}

    Denne lenken vil utl\u00F8pe om {1} minutter.

    Hvis du ikke vil tilbakestille din innloggingsdata, vennligst ignorer denne meldingen og ingenting vil bli endret.

    -executeActionsSubject=Oppdater kontoen din -executeActionsBody=Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 lenken nedenfor for \u00E5 starte denne prosessen\n\n{0}\n\nDenne lenken vil utl\u00F8pe om {1} minutter.\n\nHvis du ikke var klar over at administrator har bedt om dette, vennligst ignorer denne meldingen og ingenting vil bli endret. -executeActionsBodyHtml=

    Administrator har anmodet at du oppdaterer din {2} konto. Klikk p\u00E5 linken nedenfor for \u00E5 starte denne prosessen.

    {0}

    Denne lenken vil utl\u00F8pe om {1} minutter.

    Hvis du ikke var klar over at administrator har bedt om dette, ignorer denne meldingen og ingenting vil bli endret.

    -eventLoginErrorSubject=Innlogging feilet -eventLoginErrorBody=Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventLoginErrorBodyHtml=

    Et mislykket innloggingsfors\u00F8k ble oppdaget p\u00E5 din konto p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

    -eventRemoveTotpSubject=Fjern engangskode -eventRemoveTotpBody=Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventRemoveTotpBodyHtml=

    Engangskode ble fjernet fra kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

    -eventUpdatePasswordSubject=Oppdater passord -eventUpdatePasswordBody=Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventUpdatePasswordBodyHtml=

    Ditt passord ble endret i {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

    -eventUpdateTotpSubject=Oppdater engangskode -eventUpdateTotpBody=Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator. -eventUpdateTotpBodyHtml=

    Engangskode ble oppdatert for kontoen din p\u00E5 {0} fra {1}. Hvis dette ikke var deg, vennligst kontakt administrator.

    diff --git a/deps/keycloak/themes/base/email/messages/messages_pl.properties b/deps/keycloak/themes/base/email/messages/messages_pl.properties deleted file mode 100644 index 757f1bdbc..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_pl.properties +++ /dev/null @@ -1,56 +0,0 @@ -# encoding: UTF-8 -emailVerificationSubject=Zweryfikuj email -emailVerificationBody=Ktoś utworzył już konto {2} z tym adresem e-mail. Jeśli to Ty, kliknij poniższy link, aby zweryfikować swój adres e-mail \n\n{0}\n\nLink ten wygaśnie w ciągu {3}.\n\nJeśli nie utworzyłeś tego konta, po prostu zignoruj tę wiadomość. -emailVerificationBodyHtml=

    Ktoś utworzył już konto {2} z tym adresem e-mail. Jeśli to Ty, kliknij ten link aby zweryfikować swój adres e-mail

    Link ten wygaśnie w ciągu {3}

    Jeśli nie utworzyłeś tego konta, po prostu zignoruj tę wiadomość.

    -emailTestSubject=[KEYCLOAK] - wiadomość testowa SMTP -emailTestBody=To jest wiadomość testowa -emailTestBodyHtml=

    To jest wiadomość testowa

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Ktoś chce połączyć Twoje konto "{1}" z kontem "{0}" użytkownika {2}. Jeśli to Ty, kliknij poniższy link by połączyć konta\n\n{3}\n\nTen link wygaśnie w ciągu {5}.\n\nJeśli nie chcesz połączyć konta to zignoruj tę wiadomość. Jeśli połączysz konta, będziesz mógł się zalogować na {1} przez {0}. -identityProviderLinkBodyHtml=

    Ktoś chce połączyć Twoje konto {1} z kontem {0} użytkownika {2}. Jeśli to Ty, kliknij ten link by połączyć konta.

    Ten link wygaśnie w ciągu {5}.

    Jeśli nie chcesz połączyć konta to zignoruj tę wiadomość. Jeśli połączysz konta, będziesz mógł się zalogować na {1} przez {0}.

    -passwordResetSubject=Zresetuj hasło -passwordResetBody=Ktoś właśnie poprosił o zmianę danych logowania Twojego konta {2}. Jeśli to Ty, kliknij poniższy link, aby je zresetować.\n\n{0}\n\nTen link i kod stracą ważność w ciągu {3}.\n\nJeśli nie chcesz zresetować swoich danych logowania, po prostu zignoruj tę wiadomość i nic się nie zmieni. -passwordResetBodyHtml=

    Ktoś właśnie poprosił o zmianę poświadczeń Twojego konta {2}. Jeśli to Ty, kliknij poniższy link, aby je zresetować.

    Link do resetowania poświadczeń

    Ten link wygaśnie w ciągu {3}.

    Jeśli nie chcesz resetować swoich poświadczeń, po prostu zignoruj tę wiadomość i nic się nie zmieni.

    -executeActionsSubject=Zaktualizuj swoje konto -executeActionsBody=Administrator właśnie zażądał aktualizacji konta {2} poprzez wykonanie następujących działań: {3}. Kliknij poniższy link, aby rozpocząć ten proces.\n\n{0}\n\nTen link wygaśnie w ciągu {4}.\n\nJeśli nie masz pewności, że administrator tego zażądał, po prostu zignoruj tę wiadomość i nic się nie zmieni. -executeActionsBodyHtml=

    Administrator właśnie zażądał aktualizacji konta {2} poprzez wykonanie następujących działań: {3}. Kliknij ten link, aby rozpocząć proces.

    Link ten wygaśnie w ciągu {4}.

    Jeśli nie masz pewności, że administrator tego zażądał, po prostu zignoruj tę wiadomość i nic się nie zmieni.

    -eventLoginErrorSubject=Błąd logowania -eventLoginErrorBody=Nieudana próba logowania została wykryta na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventLoginErrorBodyHtml=

    Nieudana próba logowania została wykryta na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.

    -eventRemoveTotpSubject=Usuń hasło jednorazowe (OTP) -eventRemoveTotpBody=Hasło jednorazowe (OTP) zostało usunięte z Twojego konta w {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventRemoveTotpBodyHtml=

    Hasło jednorazowe (OTP) zostało usunięte z Twojego konta w {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.

    -eventUpdatePasswordSubject=Aktualizuj hasło -eventUpdatePasswordBody=Twoje hasło zostało zmienione {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventUpdatePasswordBodyHtml=

    Twoje hasło zostało zmienione {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.

    -eventUpdateTotpSubject=Aktualizuj hasło jednorazowe (OTP) -eventUpdateTotpBody=Hasło jednorazowe (OTP) zostało zaktualizowane na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem. -eventUpdateTotpBodyHtml=

    Hasło jednorazowe (OTP) zostało zaktualizowane na Twoim koncie {0} z {1}. Jeśli to nie Ty, skontaktuj się z administratorem.

    - -requiredAction.CONFIGURE_TOTP=Konfiguracja hasła jednorazowego (OTP) -requiredAction.terms_and_conditions=Regulamin -requiredAction.UPDATE_PASSWORD=Aktualizacja hasła -requiredAction.UPDATE_PROFILE=Aktualizacja profilu -requiredAction.VERIFY_EMAIL=Weryfikacja adresu e-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekund -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.seconds.2=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.3=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.4=sekundy -linkExpirationFormatter.timePeriodUnit.minutes=minut -linkExpirationFormatter.timePeriodUnit.minutes.1=minuta -linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=godzin -linkExpirationFormatter.timePeriodUnit.hours.1=godzina -linkExpirationFormatter.timePeriodUnit.hours.2=godziny -linkExpirationFormatter.timePeriodUnit.hours.3=godziny -linkExpirationFormatter.timePeriodUnit.hours.4=godziny -linkExpirationFormatter.timePeriodUnit.days=dni -linkExpirationFormatter.timePeriodUnit.days.1=dzień - -emailVerificationBodyCode=Potwierdź swój adres e-mail wprowadzając następujący kod.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Potwierdź swój adres e-mail, wprowadzając następujący kod.

    {0}

    diff --git a/deps/keycloak/themes/base/email/messages/messages_pt_BR.properties b/deps/keycloak/themes/base/email/messages/messages_pt_BR.properties deleted file mode 100644 index d8fa2146a..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_pt_BR.properties +++ /dev/null @@ -1,51 +0,0 @@ -emailVerificationSubject=Verifica\u00E7\u00E3o de endere\u00e7o de e-mail -emailVerificationBody=Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email.\n\n{0}\n\nEste link ir\u00E1 expirar dentro de {3}.\n\nSe n\u00E3o foi voc\u00EA quem criou esta conta, basta ignorar esta mensagem. -emailVerificationBodyHtml=

    Algu\u00E9m criou uma conta {2} com este endere\u00E7o de e-mail. Se foi voc\u00EA, clique no link abaixo para verificar o seu endere\u00E7o de email.

    Link para verifica\u00e7\u00e3o de endere\u00e7o de e-mail

    Este link ir\u00E1 expirar dentro de {3}.

    Se n\u00E3o foi voc\u00EA quem criou esta conta, basta ignorar esta mensagem.

    -emailTestSubject=[KEYCLOAK] - Mensagem de teste SMTP -emailTestBody=Esta \u00E9 uma mensagem de teste -emailTestBodyHtml=

    Esta \u00E9 uma mensagem de teste

    -identityProviderLinkSubject=Vincular {0} -identityProviderLinkBody=Algu\u00E9m quer vincular a sua conta "{1}" com a conta "{0}" do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.\n\n{3}\n\nEste link ir\u00E1 expirar em {5}.\n\nSe voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} fazendo login em {0}. -identityProviderLinkBodyHtml=

    Algu\u00E9m quer vincular a sua conta {1} com a conta {0} do usu\u00E1rio {2} . Se foi voc\u00EA, clique no link abaixo para vincular as contas.

    Link para confirmar vincula\u00e7\u00e3o de contas

    Este link ir\u00E1 expirar em {5}.

    Se voc\u00EA n\u00E3o quer vincular a conta, apenas ignore esta mensagem. Se voc\u00EA vincular as contas, voc\u00EA ser\u00E1 capaz de logar em {1} fazendo login em {0}.

    -passwordResetSubject=Redefini\u00E7\u00E3o de senha -passwordResetBody=Algu\u00E9m solicitou uma altera\u00E7\u00E3o de senha da sua conta {2}. Se foi voc\u00EA, clique no link abaixo para redefini-la.\n\n{0}\n\nEste link e c\u00F3digo expiram em {3}.\n\nSe voc\u00EA n\u00E3o deseja redefinir sua senha, apenas ignore esta mensagem e nada ser\u00E1 alterado. -passwordResetBodyHtml=

    Algu\u00E9m solicitou uma altera\u00E7\u00E3o de senha da sua conta {2}. Se foi voc\u00EA, clique no link abaixo para redefini-la.

    Link para redefinir a senha

    Este link ir\u00E1 expirar em {3}.

    Se voc\u00EA n\u00E3o deseja redefinir sua senha, apenas ignore esta mensagem e nada ser\u00E1 alterado.

    -executeActionsSubject=Atualiza\u00E7\u00E3o de conta -executeActionsBody=Um administrador solicitou que voc\u00EA atualize sua conta {2} com a(s) seguinte(s) etapa(s): {3}. Clique no link abaixo para iniciar o processo.\n\n{0}\n\nEste link ir\u00E1 expirar em {4}.\n\nSe voc\u00EA n\u00E3o tem conhecimento de que o administrador solicitou isso, basta ignorar esta mensagem e nada ser\u00E1 alterado. -executeActionsBodyHtml=

    Um administrador solicitou que voc\u00EA atualize sua conta {2} com a(s) seguinte(s) etapa(s): {3}. Clique no link abaixo para iniciar o processo.

    Link para atualizar a conta

    Este link ir\u00E1 expirar em {4}.

    Se voc\u00EA n\u00E3o tem conhecimento de que o administrador solicitou isso, basta ignorar esta mensagem e nada ser\u00E1 alterado.

    -eventLoginErrorSubject=Erro de login -eventLoginErrorBody=Uma tentativa de login malsucedida da sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventLoginErrorBodyHtml=

    Uma tentativa de login malsucedida da sua conta foi detectada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

    -eventRemoveTotpSubject=Remover autentica\u00e7\u00e3o de dois fatores -eventRemoveTotpBody=A autentica\u00e7\u00e3o de dois fatores foi removida da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventRemoveTotpBodyHtml=

    A autentica\u00e7\u00e3o de dois fatores foi removida da sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

    -eventUpdatePasswordSubject=Atualiza\u00E7\u00E3o de senha -eventUpdatePasswordBody=Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventUpdatePasswordBodyHtml=

    Sua senha foi alterada em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

    -eventUpdateTotpSubject=Atualiza\u00E7\u00E3o de autentica\u00e7\u00e3o de dois fatores -eventUpdateTotpBody=A autentica\u00e7\u00e3o de dois fatores foi atualizada para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador. -eventUpdateTotpBodyHtml=

    A autentica\u00e7\u00e3o de dois fatores foi atualizada para a sua conta em {0} de {1}. Se n\u00E3o foi voc\u00EA, por favor, entre em contato com um administrador.

    - -requiredAction.CONFIGURE_TOTP=Configurar Autentica\u00e7\u00e3o de Dois Fatores -requiredAction.terms_and_conditions=Termos e Condi\u00E7\u00F5es -requiredAction.UPDATE_PASSWORD=Atualizar Senha -requiredAction.UPDATE_PROFILE=Atualizar Perfil -requiredAction.VERIFY_EMAIL=Verificar Endere\u00e7o de E-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=segundos -linkExpirationFormatter.timePeriodUnit.seconds.1=segundo -linkExpirationFormatter.timePeriodUnit.minutes=minutos -linkExpirationFormatter.timePeriodUnit.minutes.1=minuto -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=horas -linkExpirationFormatter.timePeriodUnit.hours.1=hora -linkExpirationFormatter.timePeriodUnit.days=dias -linkExpirationFormatter.timePeriodUnit.days.1=dia - -emailVerificationBodyCode=Verifique o seu endere\u00E7o de e-mail inserindo o seguinte c\u00F3digo.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    Verifique o seu endere\u00E7o de e-mail inserindo o seguinte c\u00F3digo.

    {0}

    - diff --git a/deps/keycloak/themes/base/email/messages/messages_ru.properties b/deps/keycloak/themes/base/email/messages/messages_ru.properties deleted file mode 100644 index 7f6886b40..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_ru.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Подтверждение E-mail -emailVerificationBody=Кто-то Ñоздал учетную запиÑÑŒ {2} Ñ Ñтим E-mail. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ email\n\n{0}\n\nЭта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли Ð’Ñ‹ не Ñоздавали учетную запиÑÑŒ, проÑто проигнорируйте Ñто пиÑьмо. -emailVerificationBodyHtml=

    Кто-то Ñоздал учетную запиÑÑŒ {2} Ñ Ñтим E-mail. ЕÑли Ñто были Ð’Ñ‹, нажмите по ÑÑылке Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð²Ð°ÑˆÐµÐ³Ð¾ E-mail

    {0}

    Эта ÑÑылка уÑтареет через {1} минут.

    ЕÑли Ð’Ñ‹ не Ñоздавали учетную запиÑÑŒ, проÑто проигнорируйте Ñто пиÑьмо.

    -identityProviderLinkSubject=СÑылка {0} -identityProviderLinkBody=Кто-то хочет ÑвÑзать вашу учетную запиÑÑŒ "{1}" Ñ "{0}" учетной запиÑью Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {2} . ЕÑли Ñто были Ð’Ñ‹, нажмите по Ñледующей ÑÑылке, чтобы ÑвÑзать учетные запиÑи\n\n{3}\n\nЭта ÑÑылка уÑтареет через {4} минут.\n\nЕÑли Ñто не хотите объединÑÑ‚ÑŒ учетные запиÑи, проÑто проигнориуйте Ñто пиÑьмо. ПоÑле Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей Ð’Ñ‹ можете войти в {1} через {0}. -identityProviderLinkBodyHtml=

    Кто-то хочет ÑвÑзать вашу учетную запиÑÑŒ {1} Ñ {0} учетной запиÑью Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ {2} . ЕÑли Ñто были Ð’Ñ‹, нажмите по Ñледующей ÑÑылке, чтобы ÑвÑзать учетные запиÑи

    {3}

    Эта ÑÑылка уÑтареет через {4} минут.

    ЕÑли Ñто не хотите объединÑÑ‚ÑŒ учетные запиÑи, проÑто проигнориуйте Ñто пиÑьмо. ПоÑле Ð¾Ð±ÑŠÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ ÑƒÑ‡ÐµÑ‚Ð½Ñ‹Ñ… запиÑей Ð’Ñ‹ можете войти в {1} через {0}.

    -passwordResetSubject=Ð¡Ð±Ñ€Ð¾Ñ Ð¿Ð°Ñ€Ð¾Ð»Ñ -passwordResetBody=Кто-то только что запроÑил изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ Вашей учетной запиÑи {2}. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку, чтобы ÑброÑить его.\n\n{0}\n\nЭта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли Ð’Ñ‹ не хотите ÑбраÑывать пароль, проÑто проигнорируйте Ñто пиÑьмо. -passwordResetBodyHtml=

    Кто-то только что запроÑил изменение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð¾Ñ‚ Вашей учетной запиÑи {2}. ЕÑли Ñто были Ð’Ñ‹, нажмите на Ñледующую ÑÑылку, чтобы ÑброÑить его.

    {0}

    Эта ÑÑылка уÑтареет через {1} минут.

    ЕÑли Ð’Ñ‹ не хотите ÑбраÑывать пароль, проÑто проигнорируйте Ñто пиÑьмо и ничего не изменитÑÑ.

    -executeActionsSubject=Обновление Вашей учетной запиÑи -executeActionsBody=ÐдминиÑтратор проÑит Ð’Ð°Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ данные Вашей учетной запиÑи {2}. Ðажмите по Ñледующей ÑÑылке чтобы начать Ñтот процеÑÑ.\n\n{0}\n\nЭта ÑÑылка уÑтареет через {1} минут.\n\nЕÑли у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ подозрениÑ, что админиÑтратор не мог Ñделать такой запроÑ, проÑто проигнорируйте Ñто пиÑьмо. -executeActionsBodyHtml=

    ÐдминиÑтратор проÑит Ð’Ð°Ñ Ð¾Ð±Ð½Ð¾Ð²Ð¸Ñ‚ÑŒ данные Вашей учетной запиÑи {2}. Ðажмите по Ñледующей ÑÑылке чтобы начать Ñтот процеÑÑ.

    {0}

    Эта ÑÑылка уÑтареет через {1} минут.

    ЕÑли у Ð²Ð°Ñ ÐµÑÑ‚ÑŒ подозрениÑ, что админиÑтратор не мог Ñделать такой запроÑ, проÑто проигнорируйте Ñто пиÑьмо.

    -eventLoginErrorSubject=Ошибка входа -eventLoginErrorBody=Была зафикÑирована Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° входа в Вашу учетную запиÑÑŒ {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. -eventLoginErrorBodyHtml=

    Была зафикÑирована Ð½ÐµÑƒÐ´Ð°Ñ‡Ð½Ð°Ñ Ð¿Ð¾Ð¿Ñ‹Ñ‚ÐºÐ° входа в Вашу учетную запиÑÑŒ {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.

    -eventRemoveTotpSubject=Удалить OTP -eventRemoveTotpBody=OTP был удален из вашей учетной запиÑи {0} c {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. -eventRemoveTotpBodyHtml=

    OTP был удален из вашей учетной запиÑи {0} c {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.

    -eventUpdatePasswordSubject=Обновление Ð¿Ð°Ñ€Ð¾Ð»Ñ -eventUpdatePasswordBody=Ваш пароль был изменен в {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. -eventUpdatePasswordBodyHtml=

    Ваш пароль был изменен в {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.

    -eventUpdateTotpSubject=Обновление OTP -eventUpdateTotpBody=OTP был обновлен в вашей учетной запиÑи {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. -eventUpdateTotpBodyHtml=

    OTP был обновлен в вашей учетной запиÑи {0} Ñ {1}. ЕÑли Ñто были не Ð’Ñ‹, пожалуйÑта, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором.

    diff --git a/deps/keycloak/themes/base/email/messages/messages_sk.properties b/deps/keycloak/themes/base/email/messages/messages_sk.properties deleted file mode 100644 index a87972ca2..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_sk.properties +++ /dev/null @@ -1,48 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Overenie e-mailu -emailVerificationBody=Niekto vytvoril úÄet {2} s touto e-mailovou adresou. Ak ste to vy, kliknite na nižšie uvedený odkaz a overte svoju e-mailovú adresu \n\n{0}\n\nTento odkaz uplynie do {1} minút.\n\nAk ste tento úÄet nevytvorili, ignorujte túto správu. -emailVerificationBodyHtml=

    Niekto vytvoril úÄet {2} s touto e-mailovou adresou. Ak ste to vy, kliknite na nižšie uvedený odkaz na overenie svojej e-mailovej adresy.

    Odkaz na overenie e-mailovej adresy

    Platnosť odkazu vyprší za {1} minút.

    Ak ste tento úÄet nevytvorili, ignorujte túto správu.

    -emailTestSubject=[KEYCLOAK] - Testovacia správa SMTP -emailTestBody=Toto je skúšobná správa -emailTestBodyHtml=

    Toto je skúšobná správa

    -identityProviderLinkSubject=Odkaz {0} -identityProviderLinkBody=Niekto chce prepojiÅ¥ váš úÄet "{1}" s úÄtom {0}"používateľa {2}. Ak ste to vy, kliknutím na odkaz nižšie prepojte úÄty. \n\n{3}\n\nTento odkaz uplynie do {4} minút.\n\nAk nechcete prepojiÅ¥ úÄet, jednoducho ignorujte túto správu , Ak prepájate úÄty, budete sa môcÅ¥ prihlásiÅ¥ do {1} až {0}. -identityProviderLinkBodyHtml=

    Niekto chce prepojiÅ¥ váš úÄet {1} s úÄtom {0} používateľa {2}. Ak ste to vy, kliknutím na odkaz nižšie prepojte úÄty

    Odkaz na potvrdenie prepojenia úÄtu

    Platnosť tohto odkazu vyprší v rámci {4} minút.

    Ak nechcete prepojiÅ¥ úÄet, ignorujte túto správu. Ak prepojujete úÄty, budete sa môcÅ¥ prihlásiÅ¥ do {1} až {0}.

    -passwordResetSubject=Obnovenie hesla -passwordResetBody=Niekto požiadal, aby ste zmenili svoje poverenia úÄtu {2}. Ak ste to vy, kliknite na odkaz uvedený nižšie, aby ste ich vynulovali.\n\n{0}\n\nTento odkaz a kód uplynie do {1} minút.\n\nAk nechcete obnoviÅ¥ svoje poverenia , ignorujte túto správu a niÄ sa nezmení. -passwordResetBodyHtml=

    Niekto požiadal, aby ste zmenili svoje poverenia úÄtu {2}. Ak ste to vy, kliknutím na odkaz nižšie ich resetujte.

    Odkaz na obnovenie poverení

    Platnosť tohto odkazu vyprší v priebehu {1} minút.

    Ak nechcete obnoviÅ¥ svoje poverenia, ignorujte túto správu a niÄ sa nezmení.

    -executeActionsSubject=Aktualizujte svoj úÄet -executeActionsBody=Váš administrátor práve požiadal o aktualizáciu vášho úÄtu {2} vykonaním nasledujúcich akcií: {3}. Kliknutím na odkaz uvedený nižšie spustíte tento proces.\n\n{0}\n\nTento odkaz vyprší za {1} minúty.\n\nAk si nie ste vedomý, že váš adminstrátor o toto požiadal, ignorujte túto správu a niÄ bude zmenené. -executeActionsBodyHtml=

    Váš správca práve požiadal o aktualizáciu vášho úÄtu {2} vykonaním nasledujúcich akcií: {3}. Kliknutím na odkaz uvedený nižšie spustíte tento proces.

    Odkaz na aktualizáciu úÄtu

    Platnosť tohto odkazu uplynie do {1} minúty.

    Ak si nie ste vedomí, že váš adminstrátor o toto požiadal, ignorujte túto správu a niÄ sa nezmení.

    -eventLoginErrorSubject=Chyba prihlásenia -eventLoginErrorBody=Bol zistený neúspeÅ¡ný pokus o prihlásenie do vášho úÄtu v {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventLoginErrorBodyHtml=

    Bol zistený neúspeÅ¡ný pokus o prihlásenie vášho úÄtu na {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.

    -eventRemoveTotpSubject=OdstrániÅ¥ TOTP -eventRemoveTotpBody=OTP bol odstránený z vášho úÄtu dňa {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventRemoveTotpBodyHtml=

    OTP bol odstránený z vášho úÄtu dňa {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.

    -eventUpdatePasswordSubject=Aktualizovať heslo -eventUpdatePasswordBody=Vaše heslo bolo zmenené na {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventUpdatePasswordBodyHtml=

    Vaše heslo bolo zmenené na {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.

    -eventUpdateTotpSubject=Aktualizácia TOTP -eventUpdateTotpBody=TOTP bol aktualizovaný pre váš úÄet na {0} z {1}. Ak ste to neboli vy, obráťte sa na administrátora. -eventUpdateTotpBodyHtml=

    TOTP bol aktualizovaný pre váš úÄet dňa {0} z {1}. Ak ste to neboli vy, kontaktujte administrátora.

    - -requiredAction.CONFIGURE_TOTP=Konfigurácia OTP -requiredAction.terms_and_conditions=Zmluvné podmienky -requiredAction.UPDATE_PASSWORD=Aktualizovať heslo -requiredAction.UPDATE_PROFILE=Aktualizovať profil -requiredAction.VERIFY_EMAIL=Overiť e-mail - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=sekundy -linkExpirationFormatter.timePeriodUnit.seconds.1=sekunda -linkExpirationFormatter.timePeriodUnit.minutes=minuty -linkExpirationFormatter.timePeriodUnit.minutes.1=minúta -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minutu -linkExpirationFormatter.timePeriodUnit.hours=hodiny -linkExpirationFormatter.timePeriodUnit.hours.1=hodina -linkExpirationFormatter.timePeriodUnit.days=dni -linkExpirationFormatter.timePeriodUnit.days.1=deň diff --git a/deps/keycloak/themes/base/email/messages/messages_sv.properties b/deps/keycloak/themes/base/email/messages/messages_sv.properties deleted file mode 100644 index 15199c137..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_sv.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=Verifiera e-post -emailVerificationBody=Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet. -emailVerificationBodyHtml=

    Någon har skapat ett {2} konto med den här e-postadressen. Om det var du, klicka då på länken nedan för att verifiera din e-postadress

    {0}

    Den här länken kommer att upphöra inom {1} minuter.

    Om det inte var du som skapade det här kontot, ignorera i så fall det här meddelandet.

    -identityProviderLinkSubject=Länk {0} -identityProviderLinkBody=Någon vill länka ditt "{1}" konto med "{0}" kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona\n\n{3}\n\nDen här länken kommer att upphöra inom {4} minuter.\n\nOm du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}. -identityProviderLinkBodyHtml=

    Någon vill länka ditt {1} konto med {0} kontot tillhörande användaren {2} . Om det var du, klicka då på länken nedan för att länka kontona

    {3}

    Den här länken kommer att upphöra inom {4} minuter.

    Om du inte vill länka kontot, ignorera i så fall det här meddelandet. Om du länkar kontona, så kan du logga in till {1} genom {0}.

    -passwordResetSubject=Återställ lösenord -passwordResetBody=Någon har precis bett om att ändra användaruppgifter för ditt konto {2}. Om det var du, klicka då på länken nedan för att återställa dem.\n\n{0}\n\nDen här länken och koden kommer att upphöra inom {1} minuter.\n\nOm du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras. -passwordResetBodyHtml=

    Någon har precis bett om att ändra användaruppgifter för ditt konto {2}. Om det var du, klicka då på länken nedan för att återställa dem.

    {0}

    Den här länken och koden kommer att upphöra inom {1} minuter.

    Om du inte vill återställa dina kontouppgifter, ignorera i så fall det här meddelandet så kommer inget att ändras.

    -executeActionsSubject=Uppdatera ditt konto -executeActionsBody=Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.\n\n{0}\n\nDen här länken kommer att upphöra inom {1} minuter.\n\nOm du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras. -executeActionsBodyHtml=

    Din administratör har precis bett om att du skall uppdatera ditt {2} konto. Klicka på länken för att påbörja processen.

    {0}

    Den här länken kommer att upphöra inom {1} minuter.

    Om du är omedveten om att din administratör har bett om detta, ignorera i så fall det här meddelandet så kommer inget att ändras.

    -eventLoginErrorSubject=Inloggningsfel -eventLoginErrorBody=Ett misslyckat inloggningsförsök har upptäckts på ditt konto på {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventLoginErrorBodyHtml=

    Ett misslyckat inloggningsförsök har upptäckts på ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

    -eventRemoveTotpSubject=Ta bort OTP -eventRemoveTotpBody=OTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventRemoveTotpBodyHtml=

    OTP togs bort från ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

    -eventUpdatePasswordSubject=Uppdatera lösenord -eventUpdatePasswordBody=Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventUpdatePasswordBodyHtml=

    Ditt lösenord ändrades den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

    -eventUpdateTotpSubject=Uppdatera OTP -eventUpdateTotpBody=OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör. -eventUpdateTotpBodyHtml=

    OTP uppdaterades för ditt konto den {0} från {1}. Om det inte var du, vänligen kontakta i så fall en administratör.

    \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/messages/messages_tr.properties b/deps/keycloak/themes/base/email/messages/messages_tr.properties deleted file mode 100644 index a260ef16c..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_tr.properties +++ /dev/null @@ -1,51 +0,0 @@ -emailVerificationSubject=E-postay\u0131 do\u011Frula -emailVerificationBody=Birisi bu e-posta adresiyle bir {2} hesap olu\u015Fturdu. Bu sizseniz, e-posta adresinizi do\u011Frulamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131ya t\u0131klay\u0131n\n\n{0}\n\nBu ba\u011Flant\u0131 {3} i\u00E7inde sona erecek.\n\nBu hesab\u0131 olu\u015Fturmad\u0131ysan\u0131z, sadece bu iletiyi yoksay\u0131n\u0131z. -emailVerificationBodyHtml=

    Birisi bu e-posta adresiyle bir {2} hesap olu\u015Fturdu. Bu sizseniz, e-posta adresinizi do\u011Frulamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n.

    E-posta adresi do\u011Frulama adresi

    Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {3} i\u00E7erisinde sona erecek.

    Bu hesab\u0131 siz olu\u015Fturmad\u0131ysan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin.

    -emailTestSubject=[KEYCLOAK] - SMTP test mesaj\u0131 -emailTestBody=Bu bir test mesaj\u0131 -emailTestBodyHtml=

    Bu bir test mesaj\u0131

    -identityProviderLinkSubject=Link {0} -identityProviderLinkBody=Birisi "{1}" hesab\u0131n\u0131z\u0131 "{0}" kullan\u0131c\u0131 hesab\u0131 {2} ile ba\u011Flamak istiyor. Bu sizseniz, hesaplar\u0131 ba\u011Flamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n:\n\n{3}\n\nBu ba\u011Flant\u0131 {5} i\u00E7inde sona erecek.\n\nHesab\u0131n\u0131z\u0131 ba\u011Flamak istemiyorsan\u0131z bu mesaj\u0131 g\u00F6z ard\u0131 edin. Hesaplar\u0131 ba\u011Flarsan\u0131z, {1} ile {0} aras\u0131nda oturum a\u00E7abilirsiniz. -identityProviderLinkBodyHtml=

    Birisi {1} hesab\u0131n\u0131z\u0131 {2} kullan\u0131c\u0131s\u0131 {0} hesab\u0131na ba\u011Flamak istiyor. Bu sizseniz, ba\u011Flant\u0131 vermek i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n

    Hesap ba\u011Flant\u0131s\u0131n\u0131 onaylamak i\u00E7in ba\u011Flant\u0131

    Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {5} i\u00E7erisinde sona erecek.

    Hesab\u0131 ba\u011Flamak istemiyorsan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin. Hesaplar\u0131 ba\u011Flarsan\u0131z, {1} ile {0} aras\u0131nda oturum a\u00E7abilirsiniz.

    -passwordResetSubject=\u015Eifreyi s\u0131f\u0131rla -passwordResetBody=Birisi, {2} hesab\u0131n\u0131z\u0131n kimlik bilgilerini de\u011Fi\u015Ftirmeyi istedi.Bu sizseniz, s\u0131f\u0131rlamak i\u00E7in a\u015Fa\u011F\u0131daki ba\u011Flant\u0131y\u0131 t\u0131klay\u0131n.\n\n{0}\n\nBu ba\u011Flant\u0131 ve kod {3} i\u00E7inde sona erecek.\n\nFakat bilgilerinizi s\u0131f\u0131rlamak istemiyorsan\u0131z, Sadece bu mesaj\u0131 g\u00F6rmezden gelin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmeyecek. -passwordResetBodyHtml=

    Birisi, {2} hesab\u0131n\u0131z\u0131n kimlik bilgilerini de\u011Fi\u015Ftirmeyi istedi. Sizseniz, s\u0131f\u0131rlamak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n\u0131z.

    Kimlik bilgilerini s\u0131f\u0131rlamak i\u00E7in ba\u011Flant\u0131

    Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {3} i\u00E7erisinde sona erecek.

    Kimlik bilgilerinizi s\u0131f\u0131rlamak istemiyorsan\u0131z, bu mesaj\u0131 g\u00F6z ard\u0131 edin.

    -executeActionsSubject=Hesab\u0131n\u0131z\u0131 G\u00FCncelleyin -executeActionsBody=Y\u00F6neticiniz a\u015Fa\u011F\u0131daki i\u015Flemleri ger\u00E7ekle\u015Ftirerek {2} hesab\u0131n\u0131z\u0131 g\u00FCncelledi: {3}. Bu i\u015Flemi ba\u015Flatmak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n.\n\n{0}\n\nBu ba\u011Flant\u0131n\u0131n s\u00FCresi {4} i\u00E7erisinde sona erecek.\n\nY\u00F6neticinizin bunu istedi\u011Finden habersizseniz, bu mesaj\u0131 g\u00F6z ard\u0131 edin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmez. -executeActionsBodyHtml=

    Y\u00F6neticiniz a\u015Fa\u011F\u0131daki i\u015Flemleri ger\u00E7ekle\u015Ftirerek {2} hesab\u0131n\u0131z\u0131 g\u00FCncelledi: {3}. Bu i\u015Flemi ba\u015Flatmak i\u00E7in a\u015Fa\u011F\u0131daki linke t\u0131klay\u0131n.

    Hesap g\u00FCncelleme ba\u011Flant\u0131s\u0131

    Bu ba\u011Flant\u0131n\u0131n s\u00FCresi {4} i\u00E7erisinde sona erecek.

    Y\u00F6neticinizin bunu istedi\u011Finden habersizseniz, bu mesaj\u0131 g\u00F6z ard\u0131 edin ve hi\u00E7bir \u015Fey de\u011Fi\u015Fmez.

    -eventLoginErrorSubject=Giri\u015F hatas\u0131 -eventLoginErrorBody={1} ''den {0} tarihinde ba\u015Far\u0131s\u0131z bir giri\u015F denemesi yap\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventLoginErrorBodyHtml=

    {1} ''den {0} tarihinde ba\u015Far\u0131s\u0131z bir giri\u015F denemesi yap\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.

    -eventRemoveTotpSubject=OTP''yi kald\u0131r -eventRemoveTotpBody=OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131zdan kald\u0131r\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventRemoveTotpBodyHtml=

    OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131zdan kald\u0131r\u0131ld\u0131. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.

    -eventUpdatePasswordSubject=\u015Eifreyi g\u00FCncelle -eventUpdatePasswordBody=\u015Eifreniz {0} tarihinde {0} tarihinde de\u011Fi\u015Ftirildi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventUpdatePasswordBodyHtml=

    \u015Eifreniz {0} tarihinde {0} tarihinde de\u011Fi\u015Ftirildi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.

    -eventUpdateTotpSubject=OTP''yi G\u00FCncelle -eventUpdateTotpBody=OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131z i\u00E7in g\u00FCncellendi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in. -eventUpdateTotpBodyHtml=

    OTP, {0} tarihinden {1} tarihinde hesab\u0131n\u0131z i\u00E7in g\u00FCncellendi. Bu siz de\u011Filseniz, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in.

    - -requiredAction.CONFIGURE_TOTP=OTP''yi yap\u0131land\u0131r -requiredAction.terms_and_conditions=\u015Eartlar ve Ko\u015Fullar -requiredAction.UPDATE_PASSWORD=\u015Eifre G\u00FCncelleme -requiredAction.UPDATE_PROFILE=Profilleri g\u00FCncelle -requiredAction.VERIFY_EMAIL=E-mail do\u011Frula - -# units for link expiration timeout formatting -linkExpirationFormatter.timePeriodUnit.seconds=saniye -linkExpirationFormatter.timePeriodUnit.seconds.1=saniye -linkExpirationFormatter.timePeriodUnit.minutes=dakika -linkExpirationFormatter.timePeriodUnit.minutes.1=dakika -#for language which have more unit plural forms depending on the value (eg. Czech and other Slavic langs) you can override unit text for some other values like this: -#linkExpirationFormatter.timePeriodUnit.minutes.2=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.3=minuty -#linkExpirationFormatter.timePeriodUnit.minutes.4=minuty -linkExpirationFormatter.timePeriodUnit.hours=saat -linkExpirationFormatter.timePeriodUnit.hours.1=saat -linkExpirationFormatter.timePeriodUnit.days=g\u00FCn -linkExpirationFormatter.timePeriodUnit.days.1=g\u00FCn - -emailVerificationBodyCode=L\u00FCtfen a\u015Fa\u011F\u0131daki kodu girerek e-posta adresinizi do\u011Frulay\u0131n.\n\n{0}\n\n. -emailVerificationBodyCodeHtml=

    L\u00FCtfen a\u015Fa\u011F\u0131daki kodu girerek e-posta adresinizi do\u011Frulay\u0131n.

    {0}

    - diff --git a/deps/keycloak/themes/base/email/messages/messages_zh_CN.properties b/deps/keycloak/themes/base/email/messages/messages_zh_CN.properties deleted file mode 100644 index 42f59f86b..000000000 --- a/deps/keycloak/themes/base/email/messages/messages_zh_CN.properties +++ /dev/null @@ -1,25 +0,0 @@ -# encoding: utf-8 -emailVerificationSubject=验è¯ç”µå­é‚®ä»¶ -emailVerificationBody=用户使用当å‰ç”µå­é‚®ä»¶æ³¨å†Œ {2} 账户。如是本人æ“作,请点击以下链接完æˆé‚®ç®±éªŒè¯\n\n{0}\n\n这个链接会在 {1} 分钟åŽè¿‡æœŸ.\n\n如果您没有注册用户,请忽略这æ¡æ¶ˆæ¯ã€‚ -emailVerificationBodyHtml=

    用户使用当å‰ç”µå­é‚®ä»¶æ³¨å†Œ {2} 账户。如是本人æ“作,请点击以下链接完æˆé‚®ç®±éªŒè¯

    {0}

    这个链接会在 {1} 分钟åŽè¿‡æœŸ.

    如果您没有注册用户,请忽略这æ¡æ¶ˆæ¯ã€‚

    -identityProviderLinkSubject=链接 {0} -identityProviderLinkBody=有用户想è¦å°†è´¦æˆ· "{1}" 与用户{2}的账户"{0}" åšé“¾æŽ¥ . 如果是本人æ“作,请点击以下链接完æˆé“¾æŽ¥è¯·æ±‚\n\n{3}\n\n这个链接会在 {4} 分钟åŽè¿‡æœŸ.\n\n如éžæœ¬äººæ“作,请忽略这æ¡æ¶ˆæ¯ã€‚如果您链接账户,您将å¯ä»¥é€šè¿‡{0}登录账户 {1}. -identityProviderLinkBodyHtml=

    有用户想è¦å°†è´¦æˆ· {1} 与用户{2} 的账户{0} åšé“¾æŽ¥ . 如果是本人æ“作,请点击以下链接完æˆé“¾æŽ¥è¯·æ±‚

    {3}

    这个链接会在 {4} 分钟åŽè¿‡æœŸã€‚

    如éžæœ¬äººæ“作,请忽略这æ¡æ¶ˆæ¯ã€‚如果您链接账户,您将å¯ä»¥é€šè¿‡{0}登录账户 {1}.

    -passwordResetSubject=é‡ç½®å¯†ç  -passwordResetBody=有用户è¦æ±‚修改账户 {2} 的密ç .如是本人æ“作,请点击下é¢é“¾æŽ¥è¿›è¡Œé‡ç½®.\n\n{0}\n\n这个链接会在 {1} 分钟åŽè¿‡æœŸ.\n\n如果您ä¸æƒ³é‡ç½®æ‚¨çš„密ç ï¼Œè¯·å¿½ç•¥è¿™æ¡æ¶ˆæ¯ï¼Œå¯†ç ä¸ä¼šæ”¹å˜ã€‚ -passwordResetBodyHtml=

    有用户è¦æ±‚修改账户 {2} 的密ç å¦‚是本人æ“作,请点击下é¢é“¾æŽ¥è¿›è¡Œé‡ç½®.

    {0}

    这个链接会在 {1} 分钟åŽè¿‡æœŸ

    如果您ä¸æƒ³é‡ç½®æ‚¨çš„密ç ï¼Œè¯·å¿½ç•¥è¿™æ¡æ¶ˆæ¯ï¼Œå¯†ç ä¸ä¼šæ”¹å˜ã€‚

    -executeActionsSubject=更新您的账户 -executeActionsBody=您的管ç†å‘˜è¦æ±‚您更新账户 {2}. 点击以下链接开始更新\n\n{0}\n\n这个链接会在 {1} 分钟åŽå¤±æ•ˆ.\n\n如果您ä¸çŸ¥é“管ç†å‘˜è¦æ±‚更新账户信æ¯ï¼Œè¯·å¿½ç•¥è¿™æ¡æ¶ˆæ¯ã€‚账户信æ¯ä¸ä¼šä¿®æ”¹ã€‚ -executeActionsBodyHtml=

    您的管ç†å‘˜è¦æ±‚您更新账户{2}. 点击以下链接开始更新.

    {0}

    这个链接会在 {1} 分钟åŽå¤±æ•ˆ.

    如果您ä¸çŸ¥é“管ç†å‘˜è¦æ±‚更新账户信æ¯ï¼Œè¯·å¿½ç•¥è¿™æ¡æ¶ˆæ¯ã€‚账户信æ¯ä¸ä¼šä¿®æ”¹ã€‚

    -eventLoginErrorSubject=登录错误 -eventLoginErrorBody=在{0} ç”± {1}使用您的账户登录失败. 如果这ä¸æ˜¯æ‚¨æœ¬äººæ“作,请è”系管ç†å‘˜. -eventLoginErrorBodyHtml=

    在{0} ç”± {1}使用您的账户登录失败. 如果这ä¸æ˜¯æ‚¨æœ¬äººæ“作,请è”系管ç†å‘˜.

    -eventRemoveTotpSubject=删除 OTP -eventRemoveTotpBody=OTP在 {0} ç”±{1} 从您的账户中删除.如果这ä¸æ˜¯æ‚¨æœ¬äººæ“作,请è”系管ç†å‘˜ -eventRemoveTotpBodyHtml=

    OTP在 {0} ç”±{1} 从您的账户中删除.如果这ä¸æ˜¯æ‚¨æœ¬äººæ“作,请è”系管ç†å‘˜ã€‚

    -eventUpdatePasswordSubject=æ›´æ–°å¯†ç  -eventUpdatePasswordBody=您的密ç åœ¨{0} ç”± {1}更改. 如éžæœ¬äººæ“作,请è”系管ç†å‘˜ -eventUpdatePasswordBodyHtml=

    您的密ç åœ¨{0} ç”± {1}更改. 如éžæœ¬äººæ“作,请è”系管ç†å‘˜

    -eventUpdateTotpSubject=æ›´æ–° OTP -eventUpdateTotpBody=您账户的OTP é…置在{0} ç”± {1}更改. 如éžæœ¬äººæ“作,请è”系管ç†å‘˜ã€‚ -eventUpdateTotpBodyHtml=

    您账户的OTP é…置在{0} ç”± {1}更改. 如éžæœ¬äººæ“作,请è”系管ç†å‘˜ã€‚

    diff --git a/deps/keycloak/themes/base/email/text/email-test.ftl b/deps/keycloak/themes/base/email/text/email-test.ftl deleted file mode 100644 index f1becdd2a..000000000 --- a/deps/keycloak/themes/base/email/text/email-test.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailTestBody", realmName)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/email-verification-with-code.ftl b/deps/keycloak/themes/base/email/text/email-verification-with-code.ftl deleted file mode 100644 index 4ffb7d879..000000000 --- a/deps/keycloak/themes/base/email/text/email-verification-with-code.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailVerificationBodyCode",code)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/email-verification.ftl b/deps/keycloak/themes/base/email/text/email-verification.ftl deleted file mode 100644 index 9e3969632..000000000 --- a/deps/keycloak/themes/base/email/text/email-verification.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("emailVerificationBody",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration))} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/event-login_error.ftl b/deps/keycloak/themes/base/email/text/event-login_error.ftl deleted file mode 100644 index bfb4036f5..000000000 --- a/deps/keycloak/themes/base/email/text/event-login_error.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventLoginErrorBody",event.date,event.ipAddress)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/event-remove_totp.ftl b/deps/keycloak/themes/base/email/text/event-remove_totp.ftl deleted file mode 100644 index a7e3b6860..000000000 --- a/deps/keycloak/themes/base/email/text/event-remove_totp.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventRemoveTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/event-update_password.ftl b/deps/keycloak/themes/base/email/text/event-update_password.ftl deleted file mode 100644 index 2ec7ea01e..000000000 --- a/deps/keycloak/themes/base/email/text/event-update_password.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventUpdatePasswordBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/event-update_totp.ftl b/deps/keycloak/themes/base/email/text/event-update_totp.ftl deleted file mode 100644 index 14778b5ff..000000000 --- a/deps/keycloak/themes/base/email/text/event-update_totp.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("eventUpdateTotpBody",event.date, event.ipAddress)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/executeActions.ftl b/deps/keycloak/themes/base/email/text/executeActions.ftl deleted file mode 100644 index 6610c7ada..000000000 --- a/deps/keycloak/themes/base/email/text/executeActions.ftl +++ /dev/null @@ -1,4 +0,0 @@ -<#ftl output_format="plainText"> -<#assign requiredActionsText><#if requiredActions??><#list requiredActions><#items as reqActionItem>${msg("requiredAction.${reqActionItem}")}<#sep>, <#else> - -${msg("executeActionsBody",link, linkExpiration, realmName, requiredActionsText, linkExpirationFormatter(linkExpiration))} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/identity-provider-link.ftl b/deps/keycloak/themes/base/email/text/identity-provider-link.ftl deleted file mode 100644 index ed9d246cf..000000000 --- a/deps/keycloak/themes/base/email/text/identity-provider-link.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("identityProviderLinkBody", identityProviderAlias, realmName, identityProviderContext.username, link, linkExpiration, linkExpirationFormatter(linkExpiration))} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/text/password-reset.ftl b/deps/keycloak/themes/base/email/text/password-reset.ftl deleted file mode 100644 index 27405c9a4..000000000 --- a/deps/keycloak/themes/base/email/text/password-reset.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("passwordResetBody",link, linkExpiration, realmName, linkExpirationFormatter(linkExpiration))} \ No newline at end of file diff --git a/deps/keycloak/themes/base/email/theme.properties b/deps/keycloak/themes/base/email/theme.properties deleted file mode 100644 index d537a8bf4..000000000 --- a/deps/keycloak/themes/base/email/theme.properties +++ /dev/null @@ -1 +0,0 @@ -locales=ca,cs,da,de,en,es,fr,hu,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN diff --git a/deps/keycloak/themes/base/login/cli_splash.ftl b/deps/keycloak/themes/base/login/cli_splash.ftl deleted file mode 100644 index cd9ebbb7a..000000000 --- a/deps/keycloak/themes/base/login/cli_splash.ftl +++ /dev/null @@ -1,7 +0,0 @@ - _ __ _ _ -| |/ /___ _ _ ___| | ___ __ _| | __ -| ' // _ \ | | |/ __| |/ _ \ / _` | |/ / -| . \ __/ |_| | (__| | (_) | (_| | < -|_|\_\___|\__, |\___|_|\___/ \__,_|_|\_\ - |___/ - diff --git a/deps/keycloak/themes/base/login/code.ftl b/deps/keycloak/themes/base/login/code.ftl deleted file mode 100644 index 6830fc497..000000000 --- a/deps/keycloak/themes/base/login/code.ftl +++ /dev/null @@ -1,19 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - <#if code.success> - ${msg("codeSuccessTitle")} - <#else> - ${msg("codeErrorTitle", code.error)} - - <#elseif section = "form"> -
    - <#if code.success> -

    ${msg("copyCodeInstruction")}

    - - <#else> -

    ${code.error}

    - -
    - - diff --git a/deps/keycloak/themes/base/login/delete-account-confirm.ftl b/deps/keycloak/themes/base/login/delete-account-confirm.ftl deleted file mode 100644 index 6aa93f096..000000000 --- a/deps/keycloak/themes/base/login/delete-account-confirm.ftl +++ /dev/null @@ -1,33 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - - <#if section = "header"> - ${msg("deleteAccountConfirm")} - - <#elseif section = "form"> - -
    - -
    - - ${msg("irreversibleAction")} -
    - -

    ${msg("deletingImplies")}

    -
      -
    • ${msg("loggingOutImmediately")}
    • -
    • ${msg("errasingData")}
    • -
    - - - -
    - - <#if triggered_from_aia> - - -
    -
    - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/error.ftl b/deps/keycloak/themes/base/login/error.ftl deleted file mode 100644 index a909e0dac..000000000 --- a/deps/keycloak/themes/base/login/error.ftl +++ /dev/null @@ -1,13 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "header"> - ${msg("errorTitle")} - <#elseif section = "form"> -
    -

    ${message.summary?no_esc}

    - <#if client?? && client.baseUrl?has_content> -

    ${kcSanitize(msg("backToApplication"))?no_esc}

    - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/info.ftl b/deps/keycloak/themes/base/login/info.ftl deleted file mode 100644 index 8da0cb7a2..000000000 --- a/deps/keycloak/themes/base/login/info.ftl +++ /dev/null @@ -1,24 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "header"> - <#if messageHeader??> - ${messageHeader} - <#else> - ${message.summary} - - <#elseif section = "form"> -
    -

    ${message.summary}<#if requiredActions??><#list requiredActions>: <#items as reqActionItem>${msg("requiredAction.${reqActionItem}")}<#sep>, <#else>

    - <#if skipLink??> - <#else> - <#if pageRedirectUri?has_content> -

    ${kcSanitize(msg("backToApplication"))?no_esc}

    - <#elseif actionUri?has_content> -

    ${kcSanitize(msg("proceedWithAction"))?no_esc}

    - <#elseif (client.baseUrl)?has_content> -

    ${kcSanitize(msg("backToApplication"))?no_esc}

    - - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-config-totp-text.ftl b/deps/keycloak/themes/base/login/login-config-totp-text.ftl deleted file mode 100644 index d609182ed..000000000 --- a/deps/keycloak/themes/base/login/login-config-totp-text.ftl +++ /dev/null @@ -1,31 +0,0 @@ -<#ftl output_format="plainText"> -${msg("loginTotpIntro")} - -${msg("loginTotpStep1")} - -<#list totp.policy.supportedApplications as app> -* ${app} - - -${msg("loginTotpManualStep2")} - - ${totp.totpSecretEncoded} - - -${msg("loginTotpManualStep3")} - -- ${msg("loginTotpType")}: ${msg("loginTotp." + totp.policy.type)} -- ${msg("loginTotpAlgorithm")}: ${totp.policy.getAlgorithmKey()} -- ${msg("loginTotpDigits")}: ${totp.policy.digits} -<#if totp.policy.type = "totp"> -- ${msg("loginTotpInterval")}: ${totp.policy.period} - -<#elseif totp.policy.type = "hotp"> -- ${msg("loginTotpCounter")}: ${totp.policy.initialCounter} - - - -Enter in your one time password so we can verify you have installed it correctly. - - - diff --git a/deps/keycloak/themes/base/login/login-config-totp.ftl b/deps/keycloak/themes/base/login/login-config-totp.ftl deleted file mode 100644 index c82948d03..000000000 --- a/deps/keycloak/themes/base/login/login-config-totp.ftl +++ /dev/null @@ -1,108 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayRequiredFields=false displayMessage=!messagesPerField.existsError('totp','userLabel'); section> - - <#if section = "header"> - ${msg("loginTotpTitle")} - <#elseif section = "form"> -
      -
    1. -

      ${msg("loginTotpStep1")}

      - -
        - <#list totp.policy.supportedApplications as app> -
      • ${app}
      • - -
      -
    2. - - <#if mode?? && mode = "manual"> -
    3. -

      ${msg("loginTotpManualStep2")}

      -

      ${totp.totpSecretEncoded}

      -

      ${msg("loginTotpScanBarcode")}

      -
    4. -
    5. -

      ${msg("loginTotpManualStep3")}

      -

      -

        -
      • ${msg("loginTotpType")}: ${msg("loginTotp." + totp.policy.type)}
      • -
      • ${msg("loginTotpAlgorithm")}: ${totp.policy.getAlgorithmKey()}
      • -
      • ${msg("loginTotpDigits")}: ${totp.policy.digits}
      • - <#if totp.policy.type = "totp"> -
      • ${msg("loginTotpInterval")}: ${totp.policy.period}
      • - <#elseif totp.policy.type = "hotp"> -
      • ${msg("loginTotpCounter")}: ${totp.policy.initialCounter}
      • - -
      -

      -
    6. - <#else> -
    7. -

      ${msg("loginTotpStep2")}

      - Figure: Barcode
      -

      ${msg("loginTotpUnableToScan")}

      -
    8. - -
    9. -

      ${msg("loginTotpStep3")}

      -

      ${msg("loginTotpStep3DeviceName")}

      -
    10. -
    - -
    -
    -
    - * -
    -
    - - - <#if messagesPerField.existsError('totp')> - - ${kcSanitize(messagesPerField.get('totp'))?no_esc} - - - -
    - - <#if mode??> -
    - -
    -
    - <#if totp.otpCredentials?size gte 1>* -
    - -
    - - - <#if messagesPerField.existsError('userLabel')> - - ${kcSanitize(messagesPerField.get('userLabel'))?no_esc} - - -
    -
    - - <#if isAppInitiatedAction??> - - - <#else> - - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-idp-link-confirm.ftl b/deps/keycloak/themes/base/login/login-idp-link-confirm.ftl deleted file mode 100644 index c3537c5d3..000000000 --- a/deps/keycloak/themes/base/login/login-idp-link-confirm.ftl +++ /dev/null @@ -1,13 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("confirmLinkIdpTitle")} - <#elseif section = "form"> -
    -
    - - -
    -
    - - diff --git a/deps/keycloak/themes/base/login/login-idp-link-email.ftl b/deps/keycloak/themes/base/login/login-idp-link-email.ftl deleted file mode 100644 index 0020178f0..000000000 --- a/deps/keycloak/themes/base/login/login-idp-link-email.ftl +++ /dev/null @@ -1,16 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("emailLinkIdpTitle", idpDisplayName)} - <#elseif section = "form"> -

    - ${msg("emailLinkIdp1", idpDisplayName, brokerContext.username, realm.displayName)} -

    -

    - ${msg("emailLinkIdp2")} ${msg("doClickHere")} ${msg("emailLinkIdp3")} -

    -

    - ${msg("emailLinkIdp4")} ${msg("doClickHere")} ${msg("emailLinkIdp5")} -

    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-oauth-grant.ftl b/deps/keycloak/themes/base/login/login-oauth-grant.ftl deleted file mode 100644 index 8c5927629..000000000 --- a/deps/keycloak/themes/base/login/login-oauth-grant.ftl +++ /dev/null @@ -1,41 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout bodyClass="oauth"; section> - <#if section = "header"> - <#if client.name?has_content> - ${msg("oauthGrantTitle",advancedMsg(client.name))} - <#else> - ${msg("oauthGrantTitle",client.clientId)} - - <#elseif section = "form"> -
    -

    ${msg("oauthGrantRequest")}

    -
      - <#if oauth.clientScopesRequested??> - <#list oauth.clientScopesRequested as clientScope> -
    • - ${advancedMsg(clientScope.consentScreenText)} -
    • - - -
    - -
    - -
    -
    -
    -
    -
    - -
    -
    - - -
    -
    -
    -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl b/deps/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl deleted file mode 100644 index dfb625fe8..000000000 --- a/deps/keycloak/themes/base/login/login-oauth2-device-verify-user-code.ftl +++ /dev/null @@ -1,31 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("oauth2DeviceVerificationTitle")} - <#elseif section = "form"> -
    -
    -
    - -
    - -
    - -
    -
    - -
    -
    -
    -
    -
    - -
    -
    - -
    -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-otp.ftl b/deps/keycloak/themes/base/login/login-otp.ftl deleted file mode 100644 index a43778d90..000000000 --- a/deps/keycloak/themes/base/login/login-otp.ftl +++ /dev/null @@ -1,58 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('totp'); section> - <#if section="header"> - ${msg("doLogIn")} - <#elseif section="form"> -
    - <#if otpLogin.userOtpCredentials?size gt 1> -
    -
    - <#list otpLogin.userOtpCredentials as otpCredential> - checked="checked"> - - -
    -
    - - -
    -
    - -
    - -
    - - - <#if messagesPerField.existsError('totp')> - - ${kcSanitize(messagesPerField.get('totp'))?no_esc} - - -
    -
    - -
    -
    -
    -
    -
    - -
    - -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-page-expired.ftl b/deps/keycloak/themes/base/login/login-page-expired.ftl deleted file mode 100644 index 2b470e018..000000000 --- a/deps/keycloak/themes/base/login/login-page-expired.ftl +++ /dev/null @@ -1,11 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("pageExpiredTitle")} - <#elseif section = "form"> -

    - ${msg("pageExpiredMsg1")} ${msg("doClickHere")} .
    - ${msg("pageExpiredMsg2")} ${msg("doClickHere")} . -

    - - diff --git a/deps/keycloak/themes/base/login/login-password.ftl b/deps/keycloak/themes/base/login/login-password.ftl deleted file mode 100644 index e9a72116a..000000000 --- a/deps/keycloak/themes/base/login/login-password.ftl +++ /dev/null @@ -1,43 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('password'); section> - <#if section = "header"> - ${msg("doLogIn")} - <#elseif section = "form"> -
    -
    -
    -
    -
    - - - <#if messagesPerField.existsError('password')> - - ${kcSanitize(messagesPerField.get('password'))?no_esc} - - -
    - -
    -
    -
    -
    - <#if realm.resetPasswordAllowed> - ${msg("doForgotPassword")} - -
    -
    - -
    - -
    -
    -
    -
    - - - diff --git a/deps/keycloak/themes/base/login/login-reset-password.ftl b/deps/keycloak/themes/base/login/login-reset-password.ftl deleted file mode 100644 index 561d7d2ea..000000000 --- a/deps/keycloak/themes/base/login/login-reset-password.ftl +++ /dev/null @@ -1,40 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=true displayMessage=!messagesPerField.existsError('username'); section> - <#if section = "header"> - ${msg("emailForgotTitle")} - <#elseif section = "form"> -
    -
    -
    - -
    -
    - <#if auth?has_content && auth.showUsername()> - - <#else> - - - - <#if messagesPerField.existsError('username')> - - ${kcSanitize(messagesPerField.get('username'))?no_esc} - - -
    -
    - -
    - <#elseif section = "info" > - ${msg("emailInstruction")} - - diff --git a/deps/keycloak/themes/base/login/login-update-password.ftl b/deps/keycloak/themes/base/login/login-update-password.ftl deleted file mode 100644 index b884d7527..000000000 --- a/deps/keycloak/themes/base/login/login-update-password.ftl +++ /dev/null @@ -1,71 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('password','password-confirm'); section> - <#if section = "header"> - ${msg("updatePasswordTitle")} - <#elseif section = "form"> -
    - - - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('password')> - - ${kcSanitize(messagesPerField.get('password'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('password-confirm')> - - ${kcSanitize(messagesPerField.get('password-confirm'))?no_esc} - - - -
    -
    - -
    -
    -
    - <#if isAppInitiatedAction??> -
    - -
    - -
    -
    - -
    - <#if isAppInitiatedAction??> - - - <#else> - - -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-update-profile.ftl b/deps/keycloak/themes/base/login/login-update-profile.ftl deleted file mode 100644 index 3a8610a55..000000000 --- a/deps/keycloak/themes/base/login/login-update-profile.ftl +++ /dev/null @@ -1,97 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','email','firstName','lastName'); section> - <#if section = "header"> - ${msg("loginProfileTitle")} - <#elseif section = "form"> -
    - <#if user.editUsernameAllowed> -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('username')> - - ${kcSanitize(messagesPerField.get('username'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('email')> - - ${kcSanitize(messagesPerField.get('email'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('firstName')> - - ${kcSanitize(messagesPerField.get('firstName'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('lastName')> - - ${kcSanitize(messagesPerField.get('lastName'))?no_esc} - - -
    -
    - -
    -
    -
    -
    -
    - -
    - <#if isAppInitiatedAction??> - - - <#else> - - -
    -
    -
    - - diff --git a/deps/keycloak/themes/base/login/login-username.ftl b/deps/keycloak/themes/base/login/login-username.ftl deleted file mode 100644 index add4f4cc4..000000000 --- a/deps/keycloak/themes/base/login/login-username.ftl +++ /dev/null @@ -1,92 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username') displayInfo=(realm.password && realm.registrationAllowed && !registrationDisabled??); section> - <#if section = "header"> - ${msg("loginAccountTitle")} - <#elseif section = "form"> -
    -
    - <#if realm.password> -
    -
    - - - <#if usernameEditDisabled??> - - <#else> - - - - <#if messagesPerField.existsError('username')> - - ${kcSanitize(messagesPerField.get('username'))?no_esc} - - -
    - -
    -
    - <#if realm.rememberMe && !usernameEditDisabled??> -
    - -
    - -
    -
    - -
    - -
    -
    - -
    - - <#if realm.password && social.providers??> -
    -
    -

    ${msg("identity-provider-login-label")}

    - - -
    - - - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !registrationDisabled??> -
    - ${msg("noAccount")} ${msg("doRegister")} -
    - - - - diff --git a/deps/keycloak/themes/base/login/login-verify-email-code-text.ftl b/deps/keycloak/themes/base/login/login-verify-email-code-text.ftl deleted file mode 100644 index 87abcd786..000000000 --- a/deps/keycloak/themes/base/login/login-verify-email-code-text.ftl +++ /dev/null @@ -1,2 +0,0 @@ -<#ftl output_format="plainText"> -${msg("console-verify-email",email, code)} \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-verify-email.ftl b/deps/keycloak/themes/base/login/login-verify-email.ftl deleted file mode 100644 index 0d0cd864a..000000000 --- a/deps/keycloak/themes/base/login/login-verify-email.ftl +++ /dev/null @@ -1,14 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=true; section> - <#if section = "header"> - ${msg("emailVerifyTitle")} - <#elseif section = "form"> -

    ${msg("emailVerifyInstruction1")}

    - <#elseif section = "info"> -

    - ${msg("emailVerifyInstruction2")} -
    - ${msg("doClickHere")} ${msg("emailVerifyInstruction3")} -

    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/login-x509-info.ftl b/deps/keycloak/themes/base/login/login-x509-info.ftl deleted file mode 100644 index 0228b0633..000000000 --- a/deps/keycloak/themes/base/login/login-x509-info.ftl +++ /dev/null @@ -1,55 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("doLogIn")} - <#elseif section = "form"> - -
    -
    - -
    - -
    - <#if x509.formData.subjectDN??> -
    - -
    - <#else> -
    - -
    - -
    - -
    - - <#if x509.formData.isUserEnabled??> -
    - -
    -
    - -
    - - -
    - -
    -
    -
    -
    -
    - -
    -
    - - <#if x509.formData.isUserEnabled??> - - -
    -
    -
    -
    - - - diff --git a/deps/keycloak/themes/base/login/login.ftl b/deps/keycloak/themes/base/login/login.ftl deleted file mode 100644 index dcace58d3..000000000 --- a/deps/keycloak/themes/base/login/login.ftl +++ /dev/null @@ -1,99 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> - <#if section = "header"> - ${msg("loginAccountTitle")} - <#elseif section = "form"> -
    -
    - <#if realm.password> -
    -
    - - - <#if usernameEditDisabled??> - - <#else> - - - <#if messagesPerField.existsError('username','password')> - - ${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} - - - -
    - -
    - - - -
    - -
    -
    - <#if realm.rememberMe && !usernameEditDisabled??> -
    - -
    - -
    -
    - <#if realm.resetPasswordAllowed> - ${msg("doForgotPassword")} - -
    - -
    - -
    - value="${auth.selectedCredential}"/> - -
    -
    - -
    - - <#if realm.password && social.providers??> -
    -
    -

    ${msg("identity-provider-login-label")}

    - - -
    - - -
    - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !registrationDisabled??> -
    -
    - ${msg("noAccount")} ${msg("doRegister")} -
    -
    - - - - diff --git a/deps/keycloak/themes/base/login/messages/messages_ca.properties b/deps/keycloak/themes/base/login/messages/messages_ca.properties deleted file mode 100644 index 5d133289b..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_ca.properties +++ /dev/null @@ -1,200 +0,0 @@ -doLogIn=Inicia sessi\u00F3 -doRegister=Registra''t -doCancel=Cancel\u00B7lar -doSubmit=Envia -doYes=S\u00ED -doNo=No -doContinue=Continua -doAccept=Accepta -doDecline=Rebutja -doForgotPassword=Has oblidat la teva contrasenya? -doClickHere=Fes clic aqu\u00ED -doImpersonate=Personifica -kerberosNotConfigured=Kerberos no configurat -kerberosNotConfiguredTitle=Kerberos no configurat -bypassKerberosDetail=O b\u00E9 no est\u00E0s identificat mitjan\u00E7ant Kerberos o el teu navegador no est\u00E0 configurat per identificar-se mitjan\u00E7ant Kerberos. Si us plau fes clic per identificar-te per un altre mitj\u00E0. -kerberosNotSetUp=Kerberos no est\u00E0 configurat. No pots identificar-te. -registerWithTitle=Registra''t amb {0} -registerWithTitleHtml={0} -loginTitle=Inicia sessi\u00F3 a {0} -loginTitleHtml={0} -impersonateTitle={0}\u00A0Personifica Usuari -impersonateTitleHtml={0} Personifica Usuari -realmChoice=Domini -unknownUser=Usuari desconegut -loginTotpTitle=Configura la teva aplicaci\u00F3 d''identificaci\u00F3 m\u00F2bil -loginProfileTitle=Actualitza la informaci\u00F3 del teu compte -loginTimeout=Has trigat massa a identificar-te. Inicia de nou la identificaci\u00F3. -oauthGrantTitle=Concessi\u00F3 OAuth -oauthGrantTitleHtml={0} -errorTitle=Ho sentim... -errorTitleHtml=Ho sentim... -emailVerifyTitle=Verificaci\u00F3 de l''email -emailForgotTitle=Has oblidat la teva contrasenya? -updatePasswordTitle=Modificaci\u00F3 de contrasenya -codeSuccessTitle=Codi d''\u00E8xit -codeErrorTitle=Codi d''error: {0} - -termsTitle=Termes i Condicions -termsTitleHtml=Termes i Condicions -termsText=

    Termes i condicions a definir

    - -recaptchaFailed=Reconeixement de text inv\u00E0lid -recaptchaNotConfigured=El reconeixement de text \u00E9s obligatori per\u00F2 no est\u00E0 configurat -consentDenied=Consentiment rebutjat. - -noAccount=Usuari nou? -username=Usuari -usernameOrEmail=Usuari o email -firstName=Nom -givenName=Nom de pila -fullName=Nom complet -lastName=Cognoms -familyName=Cognoms -email=Email -password=Contrasenya -passwordConfirm=Confirma la contrasenya -passwordNew=Nova contrasenya -passwordNewConfirm=Confirma la nova contrasenya -rememberMe=Seguir connectat -authenticatorCode=Codi d''identificaci\u00F3 -address=Adre\u00E7a -street=Carrer -locality=Ciutat o Municipi -region=Estat, Prov\u00EDncia, o Regi\u00F3 -postal_code=Codi Postal -country=Pa\u00EDs -emailVerified=Email verificat -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Instal\u00B7la FreeOTP o Google Authenticator al teu tel\u00E8fon m\u00F2bil. Les dues aplicacions estan disponibles a Google Play i en l''App Store d''Apple. -loginTotpStep2=Obre l''aplicaci\u00F3 i escaneja el codi o introdueix la clau. -loginTotpStep3=Introdueix el codi \u00FAnic que et mostra l''aplicaci\u00F3 d''autenticaci\u00F3 i fes clic a Envia per finalitzar la configuraci\u00F3 -loginOtpOneTime=Codi d''un sol \u00FAs - -oauthGrantRequest=Vols permetre aquests privilegis d''acc\u00E9s? -inResource=a - -emailVerifyInstruction1=T''hem enviat un email amb instruccions per verificar el teu email. -emailVerifyInstruction2=No has rebut un codi de verificaci\u00F3 al teu email? -emailVerifyInstruction3=per reenviar l''email. - -backToLogin=« Torna a la identificaci\u00F3 - -emailInstruction=Indica el teu usuari o email i t''enviarem instruccions indicant com generar una nova contrasenya. - -copyCodeInstruction=Si us plau, copia i enganxa aquest codi a la teva aplicaci\u00F3: - -personalInfo=Informaci\u00F3 personal: -role_admin=Admin -role_realm-admin=Administrador del domini -role_create-realm=Crear domini -role_create-client=Crear client -role_view-realm=Veure domini -role_view-users=Veure usuaris -role_view-applications=Veure aplicacions -role_view-clients=Veure clients -role_view-events=Veure events -role_view-identity-providers=Veure prove\u00EFdors d''identitat -role_manage-realm=Gestionar domini -role_manage-users=Gestionar usuaris -role_manage-applications=Gestionar aplicacions -role_manage-identity-providers=Gestionar prove\u00EFdors d''identitat -role_manage-clients=Gestionar clients -role_manage-events=Gestionar events -role_view-profile=Veure perfil -role_manage-account=Gestionar compte -role_read-token=Llegir token -role_offline-access=Acc\u00E9s sense connexi\u00F3 -client_account=Compte -client_security-admin-console=Consola d''Administraci\u00F3 de Seguretat -client_realm-management=Gesti\u00F3 del domini -client_broker=Broker - -invalidUserMessage=Usuari o contrasenya incorrectes. -invalidEmailMessage=Email no v\u00E0lid -accountDisabledMessage=El compte est\u00E0 desactivat, contacta amb l''administrador. -accountTemporarilyDisabledMessage=El compte est\u00E0 temporalment desactivat, contacta amb l''administrador o intenta-ho de nou m\u00E9s tard. -expiredCodeMessage=S''ha esgotat el temps m\u00E0xim per a la identificaci\u00F3. Si us plau identifica''t de nou. - -missingFirstNameMessage=Si us plau indica el teu nom. -missingLastNameMessage=Si us plau indica els teus cognoms. -missingEmailMessage=Si us plau indica el teu email. -missingUsernameMessage=Si us plau indica el teu usuari. -missingPasswordMessage=Si us plau indica la teva contrasenya. -missingTotpMessage=Si us plau indica el teu codi d''autenticaci\u00F3 -notMatchPasswordMessage=Les contrasenyes no coincideixen. - -invalidPasswordExistingMessage=La contrasenya actual no \u00E9s correcta. -invalidPasswordConfirmMessage=La confirmaci\u00F3 de contrasenya no coincideix. -invalidTotpMessage=El codi d''autenticaci\u00F3 no \u00E9s v\u00E0lid. - -usernameExistsMessage=El nom d''usuari ja existeix -emailExistsMessage=L''email ja existeix - -federatedIdentityEmailExistsMessage=Ja existeix un usuari amb aquest email. Si us plau accedeix a la gesti\u00F3 del teu compte per enlla\u00E7ar-lo. -federatedIdentityUsernameExistsMessage=Ja existeix un usuari amb aquest nom d''usuari. Si us plau accedeix a la gesti\u00F3 del teu compte per enlla\u00E7ar-lo. - -configureTotpMessage=Has de configurar l''aplicaci\u00F3 m\u00F2bil 'd'identificaci\u00F3 per activar el teu compte. -updateProfileMessage=Has d''actualitzar el teu perfil d''usuari per activar el teu compte. -updatePasswordMessage=Has de canviar la contrasenya per activar el teu compte. -verifyEmailMessage=Has de verificar el teu email per activar el teu compte. - -emailSentMessage=En breu hauries de rebre un missatge amb m\u00E9s instruccions -emailSendErrorMessage=Ha fallat l''enviament de l''email, si us plau intenta-ho de nou m\u00E9s tard. - -accountUpdatedMessage=El teu compte s''ha actualitzat. -accountPasswordUpdatedMessage=La contrasenya s''ha actualitzat. - -noAccessMessage=Sense acc\u00E9s - -invalidPasswordMinLengthMessage=Contrasenya incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinDigitsMessage=Contrasenya incorrecta: ha de contenir almenys {0} car\u00E0cters num\u00E8rics. -invalidPasswordMinLowerCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres min\u00FAscules. -invalidPasswordMinUpperCaseCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} lletres maj\u00FAscules. -invalidPasswordMinSpecialCharsMessage=Contrasenya incorrecta: ha de contenir almenys {0} car\u00E0cters especials. -invalidPasswordNotUsernameMessage=Contrasenya incorrecta: no pot ser igual al nom d''usuari. -invalidPasswordRegexPatternMessage=Contrasenya incorrecta: no compleix l''expressi\u00F3 regular. -invalidPasswordHistoryMessage=Contrasenya incorrecta: no pot ser igual a cap de les \u00FAltimes {0} contrasenyes. - -failedToProcessResponseMessage=Fallada en processar la resposta -httpsRequiredMessage=HTTPS obligatori -realmNotEnabledMessage=El domini no est\u00E0 activat -invalidRequestMessage=Petici\u00F3 incorrecta -failedLogout=Ha fallat la desconnexi\u00F3. -unknownLoginRequesterMessage=Sol\u00B7licitant d''identificaci\u00F3 desconegut -loginRequesterNotEnabledMessage=El sol\u00B7licitant d''inici de sessi\u00F3 est\u00E0 desactivat -bearerOnlyMessage=Les aplicacions Bearer-only no poden iniciar sessi\u00F3 des del navegador. -directGrantsOnlyMessage=Els clients de tipus Direct-grants-only no poden iniciar sessi\u00F3 des del navegador. -invalidRedirectUriMessage=L''URI de redirecci\u00F3 no \u00E9s correcta -unsupportedNameIdFormatMessage=NameIDFormat no suportat -invalidRequesterMessage=Sol\u00B7licitant no v\u00E0lid -registrationNotAllowedMessage=El registre no est\u00E0 perm\u00E8s -resetCredentialNotAllowedMessage=El reinici de les credencials no est\u00E0 perm\u00E8s - -permissionNotApprovedMessage=Perm\u00EDs no aprovat. -noRelayStateInResponseMessage=Sense estat de retransmissi\u00F3 en la resposta del prove\u00EFdor d''identitat. -identityProviderAlreadyLinkedMessage=La identitat retornada pel prove\u00EFdor d''identitat ja est\u00E0 associada a un altre usuari. -insufficientPermissionMessage=Permisos insuficients per enlla\u00E7ar identitats. -couldNotProceedWithAuthenticationRequestMessage=No s''ha pogut continuar amb la petici\u00F3 d''autenticaci\u00F3 al prove\u00EFdor d''identitat. -couldNotObtainTokenMessage=No s''ha pogut obtenir el codi del prove\u00EFdor d''identitat. -unexpectedErrorRetrievingTokenMessage=Error inesperat obtenint el token del prove\u00EFdor d''identitat -unexpectedErrorHandlingResponseMessage=Error inesperat processant la resposta del prove\u00EFdor d''identitat. -identityProviderAuthenticationFailedMessage=Ha fallat l''autenticaci\u00F3. No ha estat possible autenticar-se en el prove\u00EFdor d''identitat. -couldNotSendAuthenticationRequestMessage=No s''ha pogut enviar la petici\u00F3 d''identificaci\u00F3 al prove\u00EFdor d''identitat. -unexpectedErrorHandlingRequestMessage=Error inesperat durant la petici\u00F3 d''identificaci\u00F3 al prove\u00EFdor d''identitat. -invalidAccessCodeMessage=Codi d''acc\u00E9s no v\u00E0lid. -sessionNotActiveMessage=La sessi\u00F3 no est\u00E0 activa -invalidCodeMessage=Hi ha hagut un error, si us plau identifica''t de nou des de la teva aplicaci\u00F3. -identityProviderUnexpectedErrorMessage=Error no esperat intentant autenticar en el prove\u00EFdor d''identitat. -identityProviderNotFoundMessage=No s''ha trobat cap prove\u00EFdor d''identitat. -realmSupportsNoCredentialsMessage=El domini no suporta cap tipus de credencials. -identityProviderNotUniqueMessage=El domini suporta m\u00FAltiples prove\u00EFdors d''identitat. No s''ha pogut determinar el prove\u00EFdor d''identitat que hauria de ser utilitzat per identificar-se. -emailVerifiedMessage=El teu email ha estat verificat. - -backToApplication=« Torna a l''aplicaci\u00F3 -missingParameterMessage=Par\u00E0metres que falten: {0} -clientNotFoundMessage=Client no trobat -invalidParameterMessage=Par\u00E0metre no v\u00E0lid: {0} -alreadyLoggedIn=You are already logged in. - diff --git a/deps/keycloak/themes/base/login/messages/messages_cs.properties b/deps/keycloak/themes/base/login/messages/messages_cs.properties deleted file mode 100644 index 36b3b68bd..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_cs.properties +++ /dev/null @@ -1,259 +0,0 @@ -# encoding: utf-8 -doLogIn=PÅ™ihlásit se -doRegister=Registrovat se -doCancel=ZruÅ¡it -doSubmit=Odeslat -doYes=Ano -doNo=Ne -doContinue=PokraÄovat -doIgnore=Ignorovat -doAccept=Potvrdit -doDecline=Zamítnout -doForgotPassword=Zapomenuté heslo? -doClickHere=KliknÄ›te zde -doImpersonate=Zosobnit -kerberosNotConfigured=Kerberos není nakonfigurován -kerberosNotConfiguredTitle=Kerberos není nakonfigurován -bypassKerberosDetail=BuÄ nejste pÅ™ihlášeni pÅ™es Kerberos nebo váš prohlížeÄ není nastaven pro pÅ™ihlášení Kerberos. Klepnutím na tlaÄítko pokraÄujte k pÅ™ihlášení jinými způsoby -kerberosNotSetUp=Kerberos není nastaven. Nemůžete se pÅ™ihlásit. -registerWithTitle=Registrovat {0} -registerWithTitleHtml={0} -loginTitle=PÅ™ihlásit do {0} -loginTitleHtml={0} -impersonateTitle={0} Zosobnit uživatele -impersonateTitleHtml={0} Zosobnit uživatele -realmChoice=Realm -unknownUser=Neznámý uživatel -loginTotpTitle=Nastavení autentizátoru OTP -loginProfileTitle=Aktualizovat informace o úÄtu -loginTimeout=PÅ™ihlaÅ¡ování trvalo příliÅ¡ dlouho. PÅ™ihlaÅ¡ovací proces zaÄíná od zaÄátku. -oauthGrantTitle=Poskytnout přístup -oauthGrantTitleHtml={0} -errorTitle=Je nám líto ... -errorTitleHtml=Omlouváme se ... -emailVerifyTitle=Ověření e-mailu -emailForgotTitle=ZapomnÄ›li jste heslo? -updatePasswordTitle=Aktualizace hesla -codeSuccessTitle=Kód úspÄ›chu -codeErrorTitle=Kód chyby\: {0} - -termsTitle=Smluvní podmínky -termsTitleHtml=Smluvní podmínky -termsText=

    Smluvní podmínky, které se mají definovat

    - -recaptchaFailed=Neplatné Recaptcha -recaptchaNotConfigured=Recaptcha je vyžadována, ale není nakonfigurována -consentDenied=Souhlas byl zamítnut. - -noAccount=Nový uživatel? -username=PÅ™ihlaÅ¡ovací jméno -usernameOrEmail=PÅ™ihlaÅ¡ovací jméno nebo e-mail -firstName=KÅ™estní jméno -givenName=KÅ™estní jména -fullName=Celé jméno -lastName=Příjmení -familyName=Příjmení -email=E-mail -password=Heslo -passwordConfirm=Potvrdit heslo -passwordNew=Nové heslo -passwordNewConfirm=Potvrdit nové heslo -rememberMe=Pamatovat si mÄ› -authenticatorCode=Jednorázový kód -address=Adresa -street=Ulice -locality=MÄ›sto -region=Kraj -postal_code=PSÄŒ -country=Stát -emailVerified=E-mail ověřen -gssDelegationCredential=GSS Delegované OprávnÄ›ní - -loginTotpStep1=Nainstalujte do mobilu jednu z následujících aplikací -loginTotpStep2=OtevÅ™ete aplikaci a naskenujte Äárový kód -loginTotpStep3=Zadejte jednorázový kód poskytnutý aplikací a klepnutím na tlaÄítko Odeslat dokonÄete nastavení -loginTotpManualStep2=OtevÅ™ete aplikaci a zadejte klÃ­Ä -loginTotpManualStep3=Použijte následující hodnoty konfigurace, pokud aplikace umožňuje jejich nastavení -loginTotpUnableToScan=Nelze skenovat? -loginTotpScanBarcode=Skenovat Äárový kód? -loginTotpOneTime=Jednorázový kód -loginTotpType=Typ -loginTotpAlgorithm=Algoritmus -loginTotpDigits=Číslice -loginTotpInterval=Interval -loginTotpCounter=PoÄítadlo - -loginTotp.totp=Založeno na Äase -loginTotp.hotp=Založeno na poÄítadle - - -oauthGrantRequest=Poskytujete tyto přístupová oprávnÄ›ní? -inResource=v - -emailVerifyInstruction1=Byl Vám zaslán e-mail s pokyny k ověření vaší e-mailové adresy. -emailVerifyInstruction2=Nezískali jste v e-mailu ověřovací kód? -emailVerifyInstruction3=znovu odeslat e-mail. - -emailLinkIdpTitle=Odkaz {0} -emailLinkIdp1=Byl vám zaslán e-mail s pokyny k propojení {0} úÄtu {1} s vaším úÄtem {2}. -emailLinkIdp2=Nezískali jste v e-mailu ověřovací kód? -emailLinkIdp3=znovu odeslat e-mail. -emailLinkIdp4=Pokud jste již ověřili e-mail v jiném prohlížeÄi -emailLinkIdp5=pokraÄovat. - -backToLogin=« ZpÄ›t k pÅ™ihlášení - -emailInstruction=Zadejte své uživatelské jméno nebo e-mailovou adresu a my vám zaÅ¡leme pokyny k vytvoÅ™ení nového hesla. - -copyCodeInstruction=Zkopírujte tento kód a vložte jej do své aplikace: - -pageExpiredTitle=VyprÅ¡ela platnost stránky -pageExpiredMsg1=Pro restart procesu pÅ™ihlášení -pageExpiredMsg2=PokraÄovat v procesu pÅ™ihlášení - -personalInfo=Osobní údaje: -role_admin=Administrátor realmu -role_realm-admin=Administrátor realmu -role_create-realm=VytvoÅ™it realm -role_create-client=VytvoÅ™it klienta -role_view-realm=Zobrazit realm -role_view-users=Zobrazit uživatele -role_view-applications=Zobrazit aplikace -role_view-clients=Zobrazit klienty -role_view-events=Zobrazit události -role_view-identity-providers=Zobrazit poskytovatele identity -role_manage-realm=Spravovat realm -role_manage-users=Spravovat uživatele -role_manage-applications=Spravovat aplikace -role_manage-identity-providers=Spravovat poskytovatele identity -role_manage-clients=Spravovat klienty -role_manage-events=Spravovat události -role_view-profile=Zobrazit profil -role_manage-account=Spravovat úÄet -role_manage-account-links=Spravovat odkazy na úÄet -role_read-token=Číst token -role_offline-access=Přístup offline -client_account=ÚÄet -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Spravovat Realm -client_broker=Broker - -invalidUserMessage=Nesprávné jméno nebo heslo. -invalidEmailMessage=Nesprávný e-mail. -accountDisabledMessage=ÚÄet je neplatný, kontaktujte administrátora. -accountTemporarilyDisabledMessage=ÚÄet je doÄasnÄ› deaktivován, kontaktujte administrátora nebo zkuste pozdÄ›ji. -expiredCodeMessage=Platnost pÅ™ihlášení vyprÅ¡ela. PÅ™ihlaÅ¡te se znovu. -expiredActionMessage=Akce vyprÅ¡ela. PokraÄujte pÅ™ihlášením. -expiredActionTokenNoSessionMessage=Akce vyprÅ¡ela. -expiredActionTokenSessionExistsMessage=Akce vyprÅ¡ela. ZaÄnÄ›te znovu - -missingFirstNameMessage=Zadejte prosím jméno. -missingLastNameMessage=Zadejte prosím příjmení. -missingEmailMessage=Zadejte prosím e-mail. -missingUsernameMessage=Zadejte prosím uživatelské jméno. -missingPasswordMessage=Zadejte prosím heslo. -missingTotpMessage=Zadejte prosím kód ověřovatele. -notMatchPasswordMessage=Hesla se neshodují. - -invalidPasswordExistingMessage=Neplatné existující heslo. -invalidPasswordBlacklistedMessage=Neplatné heslo: heslo je na Äerné listinÄ›. -invalidPasswordConfirmMessage=Potvrzení hesla se neshoduje. -invalidTotpMessage=Neplatný kód ověřování. - -usernameExistsMessage=Uživatelské jméno již existuje. -emailExistsMessage=Email již existuje. - -federatedIdentityExistsMessage=Uživatel s {0} {1} již existuje. PÅ™ihlaste se ke správÄ› úÄtu a propojte úÄet. - -confirmLinkIdpTitle=ÚÄet již existuje -federatedIdentityConfirmLinkMessage=Uživatel s {0} {1} již existuje. Jak chcete pokraÄovat? -federatedIdentityConfirmReauthenticateMessage=Ověřte jako {0} k propojení úÄtu {1} -confirmLinkIdpReviewProfile=Zkontrolujte profil -confirmLinkIdpContinue=PÅ™idat do existujícího úÄtu - -configureTotpMessage=Chcete-li aktivovat úÄet, musíte nastavit službu Mobile Authenticator. -updateProfileMessage=Pro aktivaci úÄtu potÅ™ebujete aktualizovat svůj uživatelský profil. -updatePasswordMessage=Pro aktivaci úÄtu musíte provést aktualizaci hesla. -resetPasswordMessage=Je tÅ™eba zmÄ›nit heslo. -verifyEmailMessage=Pro aktivaci úÄtu potÅ™ebujete ověřit vaÅ¡i e-mailovou adresu. -linkIdpMessage=PotÅ™ebujete-li ověřit vaÅ¡i e-mailovou adresu, propojte svůj úÄet s {0}. - -emailSentMessage=MÄ›li byste brzy obdržet e-mail s dalšími pokyny. -emailSendErrorMessage=NepodaÅ™ilo se odeslat e-mail, zkuste to prosím pozdÄ›ji. - -accountUpdatedMessage=Váš úÄet byl aktualizován. -accountPasswordUpdatedMessage=VaÅ¡e heslo bylo aktualizováno. - -noAccessMessage=Žádný přístup - -invalidPasswordMinLengthMessage=Neplatné heslo: minimální délka {0}. -invalidPasswordMinDigitsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} Äíslic. -invalidPasswordMinLowerCaseCharsMessage=Neplatné heslo: musí obsahovat minimálnÄ› {0} malé znaky. -invalidPasswordMinUpperCaseCharsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} velká písmena. -invalidPasswordMinSpecialCharsMessage=Neplatné heslo: musí obsahovat nejménÄ› {0} speciální znaky. -invalidPasswordNotUsernameMessage=Neplatné heslo: nesmí být totožné s uživatelským jménem. -invalidPasswordRegexPatternMessage=Neplatné heslo: neshoduje se vzorem regulérního výrazu. -invalidPasswordHistoryMessage=Neplatné heslo: Nesmí se rovnat žádnému z posledních {0} hesel. -invalidPasswordGenericMessage=Neplatné heslo: nové heslo neodpovídá pravidlům hesla. - -failedToProcessResponseMessage=NepodaÅ™ilo se zpracovat odpovÄ›Ä -httpsRequiredMessage=Požadováno HTTPS -realmNotEnabledMessage=Realm není povolen -invalidRequestMessage=Neplatná žádost -failedLogout=Odhlášení se nezdaÅ™ilo -unknownLoginRequesterMessage=Neznámý žadatel o pÅ™ihlášení -loginRequesterNotEnabledMessage=Žadatel o pÅ™ihlášení není povolen -bearerOnlyMessage=Aplikace bearer-only nemohou iniciovat pÅ™ihlaÅ¡ování pomocí prohlížeÄe -standardFlowDisabledMessage=Klient nesmí iniciovat pÅ™ihlaÅ¡ování prohlížeÄe s daným typem odpovÄ›di. Standardní tok je pro klienta zakázán. -implicitFlowDisabledMessage=Klient nesmí iniciovat pÅ™ihlaÅ¡ování prohlížeÄe s daným typem odpovÄ›di. Implicitní tok je pro klienta zakázán. -invalidRedirectUriMessage=Neplatné redirect uri -unsupportedNameIdFormatMessage=Nepodporovaný NameIDFormat -invalidRequesterMessage=Neplatný žadatel -registrationNotAllowedMessage=Registrace není povolena -resetCredentialNotAllowedMessage=Reset Credential není povoleno - -permissionNotApprovedMessage=OprávnÄ›ní nebylo schváleno. -noRelayStateInResponseMessage=Neexistuje relay state relé v odpovÄ›di od poskytovatele totožnosti. -insufficientPermissionMessage=NedostateÄná oprávnÄ›ní k propojení identit. -couldNotProceedWithAuthenticationRequestMessage=Nemohu pokraÄovat s žádostí o ověření poskytovateli totožnosti. -couldNotObtainTokenMessage=Nelze získat token od poskytovatele totožnosti. -unexpectedErrorRetrievingTokenMessage=NeoÄekávaná chyba pÅ™i naÄítání tokenu od poskytovatele identity. -unexpectedErrorHandlingResponseMessage=NeoÄekávaná chyba pÅ™i zpracování odpovÄ›di od poskytovatele identity. -identityProviderAuthenticationFailedMessage=Ověření selhalo. Nelze ověřit s poskytovatelem identity. -identityProviderDifferentUserMessage=Ověřeno jako {0}, ale mÄ›lo by být ověřeno jako {1} -couldNotSendAuthenticationRequestMessage=Nelze odeslat žádost o ověření poskytovateli totožnosti. -unexpectedErrorHandlingRequestMessage=NeoÄekávaná chyba pÅ™i zpracování požadavku na ověření poskytovateli totožnosti. -invalidAccessCodeMessage=Neplatný přístupový kód. -sessionNotActiveMessage=Session není aktivní. -invalidCodeMessage=DoÅ¡lo k chybÄ›, pÅ™ihlaste se znovu prostÅ™ednictvím své aplikace. -identityProviderUnexpectedErrorMessage=NeoÄekávaná chyba pÅ™i ověřování s poskytovatelem identity -identityProviderNotFoundMessage=Nelze najít poskytovatele identity s identifikátorem. -identityProviderLinkSuccess=ÚspěšnÄ› jste ověřili svůj e-mail. VraÅ¥te se prosím zpÄ›t do původního prohlížeÄe a pokraÄujte tam s pÅ™ihlaÅ¡ovacími údaji. -staleCodeMessage=Tato stránka již není platná. VraÅ¥te se zpÄ›t do aplikace a pÅ™ihlaste se znovu -realmSupportsNoCredentialsMessage=Realm nepodporuje žádný typ pověření. -identityProviderNotUniqueMessage=Oblast podporuje více poskytovatelů totožnosti. Nelze urÄit, s jakým zprostÅ™edkovatelem totožnosti se má ověřit. -emailVerifiedMessage=VaÅ¡e e-mailová adresa byla ověřena. -staleEmailVerificationLink=Odkaz, na který jste klikli, je starý starý odkaz a již není platný. Možná jste již ověřili svůj e-mail? -identityProviderAlreadyLinkedMessage=Federovaná identita vrácená {0} je již propojena s jiným uživatelem. -confirmAccountLinking=PotvrÄte propojení úÄtu {0} poskytovatele totožnosti {1} s vaším úÄtem. -confirmEmailAddressVerification=PotvrÄte platnost e-mailové adresy {0}. -confirmExecutionOfActions=ProveÄte následující akce - -backToApplication=« ZpÄ›t na aplikaci -missingParameterMessage=ChybÄ›jící parametry \: {0} -clientNotFoundMessage=Klient nebyl nalezen. -clientDisabledMessage=Klient byl zneplatnÄ›n. -invalidParameterMessage=Neplatný parametr : {0} -alreadyLoggedIn=Jste již pÅ™ihlášeni. -differentUserAuthenticated=Jste již v této relaci ověřeni jako jiný uživatel '' {0} ''. Nejdříve se odhlaÅ¡te. -brokerLinkingSessionExpired=Požadované propojení úÄtu brokerů, ale aktuální relace již není platná. -proceedWithAction=» KliknÄ›te zde pro pokraÄování - -requiredAction.CONFIGURE_TOTP=Konfigurovat OTP -requiredAction.terms_and_conditions=Smluvní podmínky -requiredAction.UPDATE_PASSWORD=Aktualizace hesla -requiredAction.UPDATE_PROFILE=Aktualizovat profil -requiredAction.VERIFY_EMAIL=Ověřit e-mail - -p3pPolicy=CP="Toto není politika P3P!" diff --git a/deps/keycloak/themes/base/login/messages/messages_da.properties b/deps/keycloak/themes/base/login/messages/messages_da.properties deleted file mode 100644 index 1eba02d8c..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_da.properties +++ /dev/null @@ -1,361 +0,0 @@ -# encoding: UTF-8 -doLogIn=Log ind -doRegister=Registrer -doCancel=Annuller -doSubmit=Indsend -doYes=Ja -doNo=Nej -doContinue=Fortsæt -doIgnore=Ignorer -doAccept=Accepter -doDecline=AfslÃ¥ -doForgotPassword=Glemt adgangskode? -doClickHere=Klik her -doImpersonate=Efterlign -kerberosNotConfigured=Kerberos er ikke konfigureret -kerberosNotConfiguredTitle=Kerberos er ikke konfigureret -bypassKerberosDetail=Enten er du ikke logget ind via Kerberos eller ogsÃ¥ er din browser ikke sat op til Kerberos login. Tryk fortsæt for at logge ind pÃ¥ anden vis -kerberosNotSetUp=Kerberos er ikke sat op. Du kan ikke logge ind. -registerTitle=Registrer -loginTitle=Log ind i {0} -loginTitleHtml={0} -impersonateTitle={0} Efterlign bruger -impersonateTitleHtml={0} Efterlign bruger -realmChoice=Rige -unknownUser=Ukendt bruger -loginTotpTitle=Mobil Godkendelses Opsætning -loginProfileTitle=Opdater brugerinformationer -loginTimeout=Dit login tog for lang tid. Login processen vil nu begynde forfra. -oauthGrantTitle=Giv adgang til {0} -oauthGrantTitleHtml={0} -errorTitle=Vi beklager... -errorTitleHtml=Vi beklager ... -emailVerifyTitle=Email verificering -emailForgotTitle=Glemt din adgangskode? -updatePasswordTitle=Opdater adgangskode -codeSuccessTitle=Success kode -codeErrorTitle=Fejl kode\: {0} -displayUnsupported=Den ønskede skærmtype understøttes ikke -browserRequired=Brwoseren skal logges ind -browserContinue=Browser pÃ¥krævet for at kunne gennemføre login -browserContinuePrompt=Ã…ben browser for at fortsætte login? [j/n]: -browserContinueAnswer=j - -termsTitle=VilkÃ¥r og betingelser -termsText=

    Vilkår og betingelser mangler at blive beskrevet

    -termsPlainText=VilkÃ¥r og betingelser mangler at blive beskrevet. - -recaptchaFailed=Ugyldig Recaptcha -recaptchaNotConfigured=Recaptcha er pÃ¥krævet, men ikke konfigureret -consentDenied=Samtykke afslÃ¥et. - -noAccount=Ny bruger? -username=Brugernavn -usernameOrEmail=Brugernavn eller email -firstName=Fornavn -givenName=Fornavn -fullName=Fulde navn -lastName=Efternavn -familyName=Efternavn -email=Email -password=Adgangskode -passwordConfirm=Bekræft adgangskode -passwordNew=Ny Adgangskode -passwordNewConfirm=Bekræft ny adgangskode -rememberMe=Husk mig -authenticatorCode=Engangskode -address=Adresse -street=Vej -locality=By -region=Region -postal_code=Postnummer -country=Land -emailVerified=Email verificeret -gssDelegationCredential=GSS Delegation Credential - -profileScopeConsentText=Brugerprofil -emailScopeConsentText=Email adresse -addressScopeConsentText=Adresse -phoneScopeConsentText=Telefonnummer -offlineAccessScopeConsentText=Offline Adgang -samlRoleListScopeConsentText=Mine roller - -loginTotpIntro=Du skal opsætte en Engangskodegenerator for at kunne tilgÃ¥ denne konto. -loginTotpStep1=Installer en af følgende applikationer pÃ¥ din mobil -loginTotpStep2=Ã…ben applikationen og skan stregkoden -loginTotpStep3=Indtast engangskoden fra applikationen og tryk Indsend for at gennemføre opsætningen -loginTotpManualStep2=Ã…ben applikationen og indtast nøglen -loginTotpManualStep3=Brug følgende konfigurations værdier hvis applikationen tillader det -loginTotpUnableToScan=Kan du ikke skanne? -loginTotpScanBarcode=Skan stregkode? -loginOtpOneTime=Engangskode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Cifre -loginTotpInterval=Interval -loginTotpCounter=Tæller - -loginTotp.totp=Tidsbaseret -loginTotp.hotp=Tællerbaseret - -oauthGrantRequest=Bevilger du disse adgangs privilegier? -inResource=ind -emailVerifyInstruction1=En email med instruktioner til, hvordan du verificerer din mail adresse er blevet sendt til dig. -emailVerifyInstruction2=Har du ikke modtaget en verificerings kode i din inbox? -emailVerifyInstruction3=for at gensende emailen. - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=En email med instruktioner til hvordan du linker {0} konto {1} med din {2} konto er blevet sendt til dig. -emailLinkIdp2=Har du ikke modtaget en verificerings kode i din inbox? -emailLinkIdp3=for at gensende emailen. -emailLinkIdp4=Hvis du allerede har verificeret din email i en anden browser -emailLinkIdp5=for at fortsætte. - -backToLogin=« Tilbage til log ind - -emailInstruction=Indtast dit brugernavn eller email adresse, sÃ¥ sender vi instruktioner til dig om hvordan du angiver en ny adgangskode. - -copyCodeInstruction=Kopier denne kode og indsæt den i din applikation: - -pageExpiredTitle=Siden er udløbet -pageExpiredMsg1=For at genstarte login processen -pageExpiredMsg2=For at fortsætte login processen - -personalInfo=Personlig information: -role_admin=Admin -role_realm-admin=Rige Admin -role_create-realm=Opret rige -role_create-client=Opret klient -role_view-realm=Se rige -role_view-users=Se brugere -role_view-applications=Se applikationer -role_view-clients=Se klienter -role_view-events=Se hændelser -role_view-identity-providers=Se identitetsudbydere -role_manage-realm=Administrer rige -role_manage-users=Administrer brugere -role_manage-applications=Administrer applikationer -role_manage-identity-providers=Administrer identitetsudbydere -role_manage-clients=Administrer klienter -role_manage-events=Administrer hændelser -role_view-profile=Se profil -role_manage-account=Administrer konto -role_manage-account-links=Administrer konto links -role_read-token=Se token -role_offline-access=Offline adgang -client_account=Konto -client_account-console=Kontokonsol -client_security-admin-console=Sikkerhefds Admin Konsol -client_admin-cli=Admin CLI -client_realm-management=Rige administration -client_broker=Broker - -invalidUserMessage=Ugyldig brugernavn eller adgangskode. -invalidEmailMessage=Ugyldig email adresse. -accountDisabledMessage=Kontoen er deaktiveret, kontakt en administrator. -accountTemporarilyDisabledMessage=Kontoen er midlertidigt deaktiveret, kontakt en administrator eller prøv igen senere. -expiredCodeMessage=Log ind tog for lang tid. Prøv igen. -expiredActionMessage=Handlingen er udløbet. Fortsæt med log ind nu. -expiredActionTokenNoSessionMessage=Handling udløbet. -expiredActionTokenSessionExistsMessage=Handlingen er udløbet. Start venligst forfra. - -missingFirstNameMessage=Angiv fornavn. -missingLastNameMessage=Angiv efternavn. -missingEmailMessage=Angiv email adressse. -missingUsernameMessage=Angiv brugernavn. -missingPasswordMessage=Angiv password. -missingTotpMessage=Angiv autentificerings kode. -notMatchPasswordMessage=Passwords er ikke ens. - -invalidPasswordExistingMessage=Ugyldig eksisterende adgangskode. -invalidPasswordBlacklistedMessage=Ugyldig adgangskode: Adgangskoden er sortlisted. -invalidPasswordConfirmMessage=Adgangskoderne er ikke ens -invalidTotpMessage=Ugyldig autentificerings kode. - -usernameExistsMessage=Brugernavnet eksisterer allerede. -emailExistsMessage=Email adressen eksisterer allerede. - -federatedIdentityExistsMessage=Bruger med {0} {1} eksisterer allerede. Log ind i konto administration for at linke kontoen. - -confirmLinkIdpTitle=Kontoen eksisterer allerede -federatedIdentityConfirmLinkMessage=Bruger med {0} {1} eksisterer allerede. Hvordan vil du fortsætte? -federatedIdentityConfirmReauthenticateMessage=Log ind som {0} for at linke din konto med {1} -confirmLinkIdpReviewProfile=Se profil -confirmLinkIdpContinue=Tilføj til eksisterende konto - -configureTotpMessage=Du skal opsætte en Mobile Authenticator for at kunne aktivere din konto. -updateProfileMessage=Du skal opdatere din brugerprofil for at kunne aktivere din konto. -updatePasswordMessage=Du skal ændre din adgangskode for at kunne aktivere din konto. -resetPasswordMessage=Du skal ændre din adgangskode. -verifyEmailMessage=Du skal verificere din email adresse for at kunne aktivere din konto. -linkIdpMessage=Du skal verificere din email adresse for at kunne kontoen med {0}. - -emailSentMessage=Du vil snarest modtage en email med yderligere instruktioner. -emailSendErrorMessage=Kunne ikke sende email, prøv igen senere. - -accountUpdatedMessage=Din konto er blevet opdateret. -accountPasswordUpdatedMessage=Din adgangskode er blevet opdateret. - -delegationCompleteHeader=Login lykkedes -delegationCompleteMessage=Du kan nu lukke dette browser vindue og gÃ¥ tilbage til din konsol applikation. -delegationFailedHeader=Log ind fejlede -delegationFailedMessage=Du kan nu lukke dette browser vindue og gÃ¥ tilbage til din konsol applikation for at forsøge at logge ind igen. - -noAccessMessage=Ingen adgang - -invalidPasswordMinLengthMessage=Ugyldig adgangskode: minimum længde {0}. -invalidPasswordMinDigitsMessage=Ugyldig adgangskode: skal minimum indeholde {0} tal. -invalidPasswordMinLowerCaseCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} smÃ¥ bogstaver. -invalidPasswordMinUpperCaseCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} store bogstaver. -invalidPasswordMinSpecialCharsMessage=Ugyldig adgangskode: skal minimum indeholde {0} specialtegn. -invalidPasswordNotUsernameMessage=Ugyldig adgangskode: mÃ¥ ikke være identisk med brugernavnet. -invalidPasswordRegexPatternMessage=Ugyldig adgangskode: Ikke i stand til at matche regex mønstre. -invalidPasswordHistoryMessage=Ugyldig adgangskode: mÃ¥ ikke være identisk med nogle af de seneste {0} adgangskoder. -invalidPasswordGenericMessage=Ugyldig adgangskode: ny adgangskode matcher ikke vores adgangskode politikker. - -failedToProcessResponseMessage=Ude af stand til at processere svaret -httpsRequiredMessage=HTTPS pÃ¥krævet -realmNotEnabledMessage=Riget er ikke aktiveret -invalidRequestMessage=Ugyldig Forespørgsel -failedLogout=Logud fejlede -unknownLoginRequesterMessage=Ukendt log ind forespørger -loginRequesterNotEnabledMessage=Log ind forespørgeren er ikke aktiveret -bearerOnlyMessage=Bearer-only applikationer mÃ¥ ikke foretage browser login -standardFlowDisabledMessage=Klienten mÃ¥ ikke foretage browser login med den givne response_type. Standard flowet er deaktiveret for klienten. -implicitFlowDisabledMessage=Klienten mÃ¥ ikke foretage browser login med den givne response_type. Implicit flowet er deaktiveret for klienten. - -invalidRedirectUriMessage=Ugyldig redirect uri -unsupportedNameIdFormatMessage=Ikke understøttet NameIDFormat -invalidRequesterMessage=Ugyldig forespørger -registrationNotAllowedMessage=Registrering er ikke tilladt -resetCredentialNotAllowedMessage=Reset Credential er ikke tilladt - -permissionNotApprovedMessage=Tilladelse ikke godkendt. -noRelayStateInResponseMessage=Ingen relæ tilstand i svaret fra identitetsudbyderen. -insufficientPermissionMessage=Utilstrækkelig tilladelse for at kunne linke identiter. -couldNotProceedWithAuthenticationRequestMessage=Kunne ikke fortsætte med godkendelsesanmodning til identitetsudbyderen. -couldNotObtainTokenMessage=Kunne ikke opnÃ¥ token fra identitetsudbyder. -unexpectedErrorRetrievingTokenMessage=Uventet fejl i forsøget pÃ¥ at hente token fra identitetsudbyder. -unexpectedErrorHandlingResponseMessage=Uventet fejl i forsøget pÃ¥ at behandle svaret fra identitetsudbyder. -identityProviderAuthenticationFailedMessage=Log ind fejlede. Kunne ikke logge ind ved identitetsudbyder. -couldNotSendAuthenticationRequestMessage=Kunne ikke sende log ind forespørgsel til identitetsudbyder. -unexpectedErrorHandlingRequestMessage=Uventet fejl under hÃ¥ndteringen af forespørgsel til identitetsudbyder. -invalidAccessCodeMessage=Ugyldig adgangskode. -sessionNotActiveMessage=Sessionen er ikke aktiv. -invalidCodeMessage=Der opstod en fejl, log ind igen via din applikation. -identityProviderUnexpectedErrorMessage=Uventet fejl under log ind ved identitetsudbyder -identityProviderNotFoundMessage=Kunne ikke finde en identitetsudbyder med det angivede id. -identityProviderLinkSuccess=Din email er nu verificeret. GÃ¥ tilbage til din oprindelige browser og fortsæt log ind derfra. -staleCodeMessage=Siden er ikke længere gyldig, gÃ¥ tilbage til din applikation og login igen -realmSupportsNoCredentialsMessage=Riget understøtter ikke nogen legimatitionstype. -credentialSetupRequired=Kan ikke logge ind. Legimatitionstype skal konfigureres. -identityProviderNotUniqueMessage=Riget understøtter flere forskellige identitetsudbydere. Kunne ikke beslutte hvilken identitetsudbyder der skulle bruges til at logge ind med. -emailVerifiedMessage=Din email adresse er verificeret. -staleEmailVerificationLink=Linket du har klikket pÃ¥ er et gammelt udløbet link. MÃ¥ske har du allerede verificeret din mailadresse? -identityProviderAlreadyLinkedMessage=Forbundsidentitet returneret af {0} er allerede linket til en anden bruger. -confirmAccountLinking=Bekræft sammenkobling af konto {0} fra identitetsudbyder {1} med din konto. -confirmEmailAddressVerification=Bekræft gyldigheden af email adresse {0}. -confirmExecutionOfActions=Udfør følgende handling(er) - -locale_ca=Catal\u00E0 -locale_da=Dansk -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00F1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65E5\u672C\u8A9E -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00EAs (Brasil) -locale_pt-BR=Portugu\u00EAs (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sk=Sloven\u010Dina -locale_sv=Svenska - -backToApplication=« Tilbage til applikation -missingParameterMessage=Manglende parametre\: {0} -clientNotFoundMessage=Klienten kunne ikke findes. -clientDisabledMessage=Klienten er deaktiveret. -invalidParameterMessage=Ugyldig parameter\: {0} -alreadyLoggedIn=Du er allerede logget ind. -differentUserAuthenticated=Du er allerede logget ind som en anden bruger ''{0}'' i denne session. Log venligst ud først. -brokerLinkingSessionExpired=Har forespørgt kobling mellem mæglerkonti, men den nuværende session er ikke længere gyldig. - -proceedWithAction=» Tryk her for at fortsætte - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=VilkÃ¥r og betingelser -requiredAction.UPDATE_PASSWORD=Opdater Adgangskode -requiredAction.UPDATE_PROFILE=Opdater Profil -requiredAction.VERIFY_EMAIL=Verificer email adresse - -doX509Login=Du vil blive logget ind som\: -clientCertificate=X509 client certificate\: -noCertificate=[No Certificate] - -pageNotFound=Siden kunne ikke findes -internalServerError=Der opstod en intern server fejl. - -console-username=Brugernavn: -console-password=Adgangskode: -console-otp=Engangskode: -console-new-password=Ny Adgangskode: -console-confirm-password=Bekræft Adgangskode: -console-update-password=Du skal opdatere din adgangskode. -console-verify-email=Du skal verificere din email adresse. En email er blevet sendt til {0} som indeholder en verificerings kode. Indtast koden i input feltet herunder. - -console-email-code=Email Kode: -console-accept-terms=Accepter VilkÃ¥r? [j/n]: -console-accept=j - -auth-username-form-display-name=Brugernavn -auth-username-form-help-text=Start log ind ved at indtaste dit brugernavn -auth-username-password-form-display-name=Brugernavn og adgangskode -auth-username-password-form-help-text=Log ind ved at indtaste dit brugernavn og adgangskode - -doBack=Tilbage -doTryAgain=Prøv igen -doTryAnotherWay=Prøv pÃ¥ en anden mÃ¥de -rolesScopeConsentText=Brugerroller -restartLoginTooltip=Start log ind forfra -loginTotpStep3DeviceName=Angiv et udstyrsnavn for at kunne holde rede pÃ¥ udstyr med engangskode. -loginCredential=Credential -loginTotpDeviceName=Udstyrsnavn -loginChooseAuthenticator=Vælg metode til log ind -requiredFields=Nødvendige felter -invalidUsernameMessage=Ugyldigt brugernavn. -invalidUsernameOrEmailMessage=Ugyldigt brugernavn eller email. -invalidPasswordMessage=Ugyldig adangskode. -missingTotpDeviceNameMessage=Angiv venligst et udstyrsnavn. -nestedFirstBrokerFlowMessage={0} brugeren {1} er ikke forbundet til nogen kendt bruger. -locale_cs=\u010Ce\u0161tina -locale_pl=Polish -openshift.scope.user_info=Brugerinformation -openshift.scope.user_check-access=Brugeradgangsinformation -openshift.scope.user_full=Fuld adgang -openshift.scope.list-projects=Vis liste af projekter -saml.post-form.title=Log ind Redirect -saml.post-form.message=Redirigerer, vent venligst. -saml.post-form.js-disabled=JavaScript er disabled. Vi anbefaler stærkt at enbable det. Klik pÃ¥ knappen nedenfor for at fortsætte. -otp-display-name=Engangskodegenerator -otp-help-text=Indtast en godkendelseskode fra engangskodegeneratoren. -password-display-name=Adgangskode -password-help-text=Log ind ved at indtaste din adgangskode. -webauthn-display-name=Sikkerhedsnøgle -webauthn-help-text=Brug din sikkerhedsnøgle for at logge ind. -webauthn-passwordless-display-name=Sikkerhedsnøgle -webauthn-passwordless-help-text=Brug din sikkerhedsnøgle for at logge ind uden adgangskode. -webauthn-login-title=Log ind med sikkerhedsnøgle -webauthn-registration-title=Registrering af Sikkerhedsnøgle -webauthn-available-authenticators=Tilgængelige log ind mÃ¥der -webauthn-error-title=Sikkerhedsnøglefejl -webauthn-error-registration=Det lykkedes ikke at registrere din sikkerhedsnøgle. -webauthn-error-api-get=Det lykkedes ikke at logge ind med din sikkerhedsnøgle. -webauthn-error-different-user=Den første authenticatede bruger er ikke den der er authenticated med sikkerhedsnøglen. -webauthn-error-auth-verification=Resultatet fra log ind med sikkerhedsnøgle er ugyldigt. -webauthn-error-register-verification=Resultatet fra registrering med sikkerhedsnøglen er ugyldigt. -webauthn-error-user-not-found=Ukendt bruger authenticated med sikkerhedsnøglen. -identity-provider-redirector=Forbind med en anden Identitetsudbyder \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/messages/messages_de.properties b/deps/keycloak/themes/base/login/messages/messages_de.properties deleted file mode 100644 index f22556561..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_de.properties +++ /dev/null @@ -1,378 +0,0 @@ -doLogIn=Anmelden -doRegister=Registrieren -doCancel=Abbrechen -doSubmit=Absenden -doBack=Zur\u00FCck -doYes=Ja -doNo=Nein -doContinue=Weiter -doIgnore=Ignorieren -doAccept=Annehmen -doDecline=Ablehnen -doForgotPassword=Passwort vergessen? -doClickHere=Hier klicken -doImpersonate=Identit\u00E4tswechsel -doTryAgain=Erneut versuchen -doTryAnotherWay=Einen anderen Weg versuchen -doConfirmDelete=L\u00F6schung best\u00E4tigen -errorDeletingAccount=Beim L\u00F6schen des Kontos ist ein Fehler aufgetreten -deletingAccountForbidden=Sie haben nicht gen\u00FCgend Berechtigungen, um Ihr eigenes Konto zu l\u00F6schen, wenden Sie sich an einen Administrator. -kerberosNotConfigured=Kerberos ist nicht konfiguriert. -kerberosNotConfiguredTitle=Kerberos nicht konfiguriert -bypassKerberosDetail=Sie sind entweder nicht mit Kerberos angemeldet, oder Ihr Browser ist nicht f\u00FCr eine Anmeldung mit Kerberos konfiguriert. Bitte klicken Sie auf Weiter, damit Sie sich auf eine andere Art anmelden k\u00F6nnen -kerberosNotSetUp=Kerberos ist nicht konfiguriert. Sie k\u00F6nnen sich damit nicht anmelden. -registerTitle=Registrierung -loginAccountTitle=Bei Ihrem Konto anmelden -loginTitle=Anmeldung bei {0} -loginTitleHtml={0} -impersonateTitle={0} Identit\u00E4tswechsel -impersonateTitleHtml={0} Identit\u00E4tswechsel -realmChoice=Realm -unknownUser=Unbekannter Benutzer -loginTotpTitle=Mehrfachauthentifizierung konfigurieren -loginProfileTitle=Benutzerkonto Informationen aktualisieren -loginTimeout=Sie haben zu lange gebraucht, um sich anzumelden. Bitte versuchen Sie es erneut. -oauthGrantTitle=OAuth gew\u00E4hren -oauthGrantTitleHtml={0} -errorTitle=Es ist ein Fehler aufgetreten. -errorTitleHtml=Es ist ein Fehler aufgetreten. -emailVerifyTitle=E-Mail verifizieren -emailForgotTitle=Passwort vergessen? -updatePasswordTitle=Passwort aktualisieren -codeSuccessTitle=Erfolgreicher Code -codeErrorTitle=Fehlercode\: {0} -displayUnsupported=Angeforderter Anzeigetyp wird nicht unterst\u00FCtzt -browserRequired=Browser f\u00FCr die Anmeldung erforderlich -browserContinue=Browser erforderlich, um die Anmeldung abzuschlie\u00DFen -browserContinuePrompt=Browser \u00F6ffnen und Anmeldung fortsetzen? [y/n]: -browserContinueAnswer=y - - -termsTitle=Bedingungen und Konditionen -termsTitleHtml=Bedingungen und Konditionen -termsText=

    Zu definierende Bedingungen und Konditionen

    - -recaptchaFailed=Ung\u00FCltiges Recaptcha -recaptchaNotConfigured=Recaptcha Eingabe ist erforderlich, jedoch noch nicht konfiguriert. -consentDenied=Zustimmung verweigert. - -noAccount=Neuer Benutzer? -username=Benutzername -usernameOrEmail=Benutzername oder E-Mail -firstName=Vorname -givenName=Vorname -fullName=Voller Name -lastName=Nachname -familyName=Nachname -email=E-Mail -password=Passwort -passwordConfirm=Passwort best\u00E4tigen -passwordNew=Neues Passwort -passwordNewConfirm=Neues Passwort best\u00E4tigen -rememberMe=Angemeldet bleiben -authenticatorCode=One-time Code -address=Adresse -street=Stra\u00DFe -locality=Stadt oder Ortschaft -region=Staat, Provinz, Region -postal_code=PLZ -country=Land -emailVerified=E-Mail verifiziert -website=Website -phoneNumber=Telefonnummer -phoneNumberVerified=Telefonnummer verifiziert -gender=Geschlecht -birthday=Geburtsdatum -zoneinfo=Zeitzone -gssDelegationCredential=GSS delegierte Berechtigung -logoutOtherSessions=Von anderen Ger\u00E4ten abmelden - -profileScopeConsentText=Nutzerkonto -emailScopeConsentText=E-Mail Adresse -addressScopeConsentText=Adresse -phoneScopeConsentText=Telefonnummer -offlineAccessScopeConsentText=Offline Zugriff -samlRoleListScopeConsentText=Meine Rollen -rolesScopeConsentText=Nutzerrollen - -restartLoginTooltip=Login neustarten - -loginTotpIntro=Sie m\u00FCssen einen One Time Passwort-Generator einrichten, um auf dieses Konto zugreifen zu k\u00F6nnen. -loginTotpStep1=Installieren Sie eine der folgenden Applikationen auf Ihrem Smartphone: -loginTotpStep2=\u00D6ffnen Sie die Applikation und scannen Sie den Barcode. -loginTotpStep3=Geben Sie den von der Applikation generierten One-time Code ein und klicken Sie auf Speichern. -loginTotpStep3DeviceName=Geben Sie einen Ger\u00E4tenamen an, um die Verwaltung Ihrer OTP-Ger\u00E4te zu erleichtern. -loginTotpManualStep2=\u00D6ffnen Sie die Applikation und geben Sie den folgenden Schl\u00FCssel ein. -loginTotpManualStep3=Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese f\u00FCr die Applikation anpassen k\u00F6nnen: -loginTotpUnableToScan=Sie k\u00F6nnen den Barcode nicht scannen? -loginTotpScanBarcode=Barcode scannen? -loginCredential=Anmeldeinformation -loginOtpOneTime=One-time code -loginTotpType=Typ -loginTotpAlgorithm=Algorithmus -loginTotpDigits=Ziffern -loginTotpInterval=Intervall -loginTotpCounter=Z\u00E4hler -loginTotpDeviceName=Ger\u00E4tename - -loginTotp.totp=zeitbasiert (time-based) -loginTotp.hotp=z\u00E4hlerbasiert (counter-based) - -loginChooseAuthenticator=Login Methode ausw\u00E4hlen - -oauthGrantRequest=Wollen Sie diese Zugriffsrechte gew\u00E4hren? -inResource=in - -emailVerifyInstruction1=Eine E-Mail mit weiteren Anweisungen wurde an Sie versendet. -emailVerifyInstruction2=Falls Sie keine E-Mail erhalten haben, dann k\u00F6nnen Sie -emailVerifyInstruction3=um eine neue E-Mail versenden zu lassen. - -emailLinkIdpTitle={0} verkn\u00FCpfen -emailLinkIdp1=Eine E-Mail mit weiteren Anweisungen um {0} Konto {1} mit Ihrem {2} Konto zu verkn\u00FCpfen wurde an Sie versendet. -emailLinkIdp2=Sie haben keinen Code in Ihrer E-Mail erhalten? -emailLinkIdp3=um eine neue E-Mail versenden zu lassen. -emailLinkIdp4=Wenn Sie die E-Mail bereits in einem anderen Browser verifiziert haben -emailLinkIdp5=um fortzufahren. - -backToLogin=« Zur\u00FCck zur Anmeldung - -emailInstruction=Geben Sie Ihren Benutzernamen oder Ihre E-Mail Adresse ein und klicken Sie auf Absenden. Danach werden wir Ihnen eine E-Mail mit weiteren Instruktionen zusenden. - -copyCodeInstruction=Bitte kopieren Sie den folgenden Code und f\u00FCgen ihn in die Applikation ein\: - -pageExpiredTitle=Diese Seite ist nicht mehr g\u00FCltig. -pageExpiredMsg1=Um den Anmeldevorgang neu zu starten -pageExpiredMsg2=Um den Anmeldevorgang fortzusetzen - -personalInfo=Pers\u00F6nliche Informationen: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Realm erstellen -role_create-client=Client erstellen -role_view-realm=Realm ansehen -role_view-users=Benutzer ansehen -role_view-applications=Applikationen ansehen -role_view-clients=Clients ansehen -role_view-events=Events ansehen -role_view-identity-providers=Identity Provider ansehen -role_manage-realm=Realm verwalten -role_manage-users=Benutzer verwalten -role_manage-applications=Applikationen verwalten -role_manage-identity-providers=Identity Provider verwalten -role_manage-clients=Clients verwalten -role_manage-events=Events verwalten -role_view-profile=Profile ansehen -role_manage-account=Profile verwalten -role_manage-account-links=Profil-Links verwalten -role_read-token=Token lesen -role_offline-access=Offline-Zugriff -client_account=Clientkonto -client_account-console=Accountkonsole -client_security-admin-console=Security Adminkonsole -client_admin-cli=Admin CLI -client_realm-management=Realm-Management -client_broker=Broker - -requiredFields=Ben\u00F6tigte Felder - -invalidUserMessage=Ung\u00FCltiger Benutzername oder Passwort. -invalidUsernameMessage=Ung\u00FCltiger Benutzername. -invalidUsernameOrEmailMessage=Ung\u00FCltiger Benutzername oder E-Mail. -invalidPasswordMessage=Ung\u00FCltiges Passwort. -invalidEmailMessage=Ung\u00FCltige E-Mail-Adresse. -accountDisabledMessage=Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin. -accountTemporarilyDisabledMessage=Ihr Benutzerkonto ist tempor\u00E4r gesperrt. Bitte kontaktieren Sie den Admin oder versuchen Sie es sp\u00E4ter noch einmal. -expiredCodeMessage=Zeit\u00FCberschreitung bei der Anmeldung. Bitte melden Sie sich erneut an. -expiredActionMessage=Die Aktion ist nicht mehr g\u00FCltig. Bitte fahren Sie nun mit der Anmeldung fort. -expiredActionTokenNoSessionMessage=Die Aktion ist nicht mehr g\u00FCltig. -expiredActionTokenSessionExistsMessage=Die Aktion ist nicht mehr g\u00FCltig. Bitte fangen Sie noch einmal an. - -missingFirstNameMessage=Bitte geben Sie einen Vornamen ein. -missingLastNameMessage=Bitte geben Sie einen Nachnamen ein. -missingEmailMessage=Bitte geben Sie eine E-Mail-Adresse ein. -missingUsernameMessage=Bitte geben Sie einen Benutzernamen ein. -missingPasswordMessage=Bitte geben Sie ein Passwort ein. -missingTotpMessage=Bitte geben Sie den One-time Code ein. -missingTotpDeviceNameMessage=Bitte geben Sie einen Ger\u00E4tenamen ein. -notMatchPasswordMessage=Passw\u00F6rter sind nicht identisch. - -invalidPasswordExistingMessage=Das aktuelle Passwort ist ung\u00FCltig. -invalidPasswordBlacklistedMessage=Ung\u00FCltiges Passwort: Das Passwort steht auf der Blockliste (schwarzen Liste). -invalidPasswordConfirmMessage=Die Passwortbest\u00E4tigung ist nicht identisch. -invalidTotpMessage=Ung\u00FCltiger One-time Code. - -usernameExistsMessage=Benutzername existiert bereits. -emailExistsMessage=E-Mail existiert bereits. - -federatedIdentityExistsMessage=Ein Benutzer mit {0} {1} existiert bereits. Bitte melden Sie sich an der Benutzerkontoverwaltung an um den Benutzer zu verkn\u00FCpfen. - -confirmLinkIdpTitle=Das Benutzerkonto existiert bereits. -federatedIdentityConfirmLinkMessage=Ein Benutzer mit {0} {1} existiert bereits. Wie m\u00F6chten Sie fortfahren? -federatedIdentityConfirmReauthenticateMessage=Anmelden um das Benutzerkonto mit {0} zu verkn\u00FCpfen -nestedFirstBrokerFlowMessage=Der {0} Benutzer {1} ist mit keinem bekannten Benutzer verkn\u00FCpfen. -confirmLinkIdpReviewProfile=Benutzerkonto \u00FCberpr\u00FCfen -confirmLinkIdpContinue=Zu einem bestehenden Benutzerkonto hinzuf\u00FCgen - -configureTotpMessage=Sie m\u00FCssen eine Mehrfachauthentifizierung einrichten, um das Benutzerkonto zu aktivieren. -updateProfileMessage=Sie m\u00FCssen Ihr Benutzerkonto aktualisieren, um das Benutzerkonto zu aktivieren. -updatePasswordMessage=Sie m\u00FCssen Ihr Passwort \u00E4ndern, um das Benutzerkonto zu aktivieren. -resetPasswordMessage=Sie m\u00FCssen Ihr Passwort \u00E4ndern. -verifyEmailMessage=Sie m\u00FCssen Ihre E-Mail-Adresse verifizieren, um das Benutzerkonto zu aktivieren. -linkIdpMessage=Sie m\u00FCssen Ihre E-Mail-Adresse verifizieren, um Ihr Benutzerkonto mit {0} zu verkn\u00FCpfen. - -emailSentMessage=Sie sollten in K\u00FCrze eine E-Mail mit weiteren Instruktionen erhalten. -emailSendErrorMessage=Die E-Mail konnte nicht versendet werden. Bitte versuchen Sie es sp\u00E4ter nochmal einmal. - -accountUpdatedMessage=Ihr Benutzerkonto wurde aktualisiert. -accountPasswordUpdatedMessage=Ihr Passwort wurde aktualisiert. - -delegationCompleteHeader=Login Erfolgreich -delegationCompleteMessage=Sie k\u00F6nnen dieses Browserfenster schlie\u00DFen und zu Ihrer Konsolenanwendung zur\u00FCckkehren. -delegationFailedHeader=Login Fehlgeschlagen -delegationFailedMessage=Sie k\u00F6nnen dieses Browserfenster schlie\u00DFen und zu Ihrer Konsolenanwendung zur\u00FCckkehren und versuchen, sich erneut anzumelden. - -noAccessMessage=Kein Zugriff - -invalidPasswordMinLengthMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Zeichen lang sein. -invalidPasswordMinDigitsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten. -invalidPasswordMinLowerCaseCharsMessage=Ung\u00FCltiges Passwort\: Es muss mindestens {0} Kleinbuchstaben beinhalten. -invalidPasswordMinUpperCaseCharsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Gro\u00DFbuchstaben beinhalten. -invalidPasswordMinSpecialCharsMessage=Ung\u00FCltiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten. -invalidPasswordNotUsernameMessage=Ung\u00FCltiges Passwort: Es darf nicht gleich sein wie der Benutzername. -invalidPasswordNotEmailMessage=Ung\u00FCltiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein. -invalidPasswordRegexPatternMessage=Ung\u00FCltiges Passwort: Es entspricht nicht dem Regex-Muster. -invalidPasswordHistoryMessage=Ung\u00FCltiges Passwort: Es darf nicht einem der letzten {0} Passw\u00F6rter entsprechen. -invalidPasswordGenericMessage=Ung\u00FCltiges Passwort: Es verletzt die Passwort-Richtlinien. - -failedToProcessResponseMessage=Konnte Antwort nicht verarbeiten. -httpsRequiredMessage=HTTPS erforderlich. -realmNotEnabledMessage=Realm nicht aktiviert. -invalidRequestMessage=Ung\u00FCltiger Request. -failedLogout=Logout fehlgeschlagen. -unknownLoginRequesterMessage=Ung\u00FCltiger Login Requester. -loginRequesterNotEnabledMessage=Login Requester nicht aktiviert. -bearerOnlyMessage=Bearer-only Clients k\u00F6nnen sich nicht via Browser anmelden. -standardFlowDisabledMessage=Client darf sich mit diesem response_type nicht via Browser anmelden. Standard Flow ist f\u00FCr diesen Client deaktiviert. -implicitFlowDisabledMessage=Client darf sich mit diesem response_type nicht via Browser anmelden. Implicit Flow ist f\u00FCr diesen Client deaktiviert. -invalidRedirectUriMessage=Ung\u00FCltige Redirect Uri. -unsupportedNameIdFormatMessage=Nicht unterst\u00FCtztes NameIDFormat. -invalidRequesterMessage=Ung\u00FCltiger Requester. -registrationNotAllowedMessage=Registrierung nicht erlaubt. -resetCredentialNotAllowedMessage=Reset Credential nicht erlaubt. - -permissionNotApprovedMessage=Berechtigung nicht best\u00E4tigt. -noRelayStateInResponseMessage=Kein Relay State in der Antwort von Identity Provider. -insufficientPermissionMessage=Nicht gen\u00FCgend Rechte, um die Identit\u00E4t zu verkn\u00FCpfen. -couldNotProceedWithAuthenticationRequestMessage=Konnte die Authentifizierungsanfrage nicht weiter verarbeiten. -couldNotObtainTokenMessage=Konnte kein Token vom Identity Provider erhalten. -unexpectedErrorRetrievingTokenMessage=Unerwarteter Fehler w\u00E4hrend dem Empfang des Tokens vom Identity Provider. -unexpectedErrorHandlingResponseMessage=Unerwarteter Fehler w\u00E4hrend der Bearbeitung der Antwort vom Identity Provider. -identityProviderAuthenticationFailedMessage=Authentifizierung fehlgeschlagen. Authentifizierung mit dem Identity Provider nicht m\u00F6glich. -couldNotSendAuthenticationRequestMessage=Konnte Authentifizierungsanfrage nicht an den Identity Provider senden. -unexpectedErrorHandlingRequestMessage=Unerwarteter Fehler w\u00E4hrend der Bearbeitung der Anfrage an den Identity Provider. -invalidAccessCodeMessage=Ung\u00FCltiger Access-Code. -sessionNotActiveMessage=Session nicht aktiv. -invalidCodeMessage=Ung\u00FCltiger Code, bitte melden Sie sich erneut \u00FCber die Applikation an. -identityProviderUnexpectedErrorMessage=Unerwarteter Fehler w\u00E4hrend der Authentifizierung mit dem Identity Provider. -identityProviderMissingStateMessage=Fehlender state Parameter in der Antwort vom Identit\u00E4tsanbieter. -identityProviderNotFoundMessage=Konnte keinen Identity Provider zu der Identit\u00E4t finden. -identityProviderLinkSuccess=Sie haben Ihre E-Mail-Adresse erfolgreich verifiziert. Bitte kehren Sie zu Ihrem urspr\u00FCnglichen Browser zur\u00FCck und fahren Sie dort mit der Anmeldung fort. -staleCodeMessage=Diese Seite ist nicht mehr g\u00FCltig, bitte kehren Sie zu Ihrer Applikation zur\u00FCk und melden Sie sich erneut an. -realmSupportsNoCredentialsMessage=Realm unterst\u00FCtzt keine Credential Typen. -credentialSetupRequired=Anmeldung nicht m\u00F6glich, Einrichtung der Anmeldeinformationen erforderlich. -identityProviderNotUniqueMessage=Der Realm unterst\u00FCtzt mehrere Identity Provider. Es konnte kein eindeutiger Identity Provider zum Authentifizieren gew\u00E4hlt werden. -emailVerifiedMessage=Ihre E-Mail-Adresse wurde erfolgreich verifiziert. -staleEmailVerificationLink=Der von Ihnen angeklickte Link ist nicht mehr g\u00FCltig. Haben Sie Ihre E-Mail-Adresse eventuell bereits verifiziert? -identityProviderAlreadyLinkedMessage=Die Identit\u00E4t welche von dem Identity Provider zur\u00FCckgegeben wurde ist bereits mit einem anderen Benutzer verkn\u00FCpft. -confirmAccountLinking=Best\u00E4tigen Sie den Account {0} des Identity Provider {1} mit Ihrem Account zu verkn\u00FCpfen. -confirmEmailAddressVerification=Best\u00E4tigen Sie, dass die E-Mail-Adresse {0} g\u00FCltig ist. -confirmExecutionOfActions=F\u00FChren Sie die folgende(n) Aktion(en) aus - -backToApplication=« Zur\u00FCck zur Applikation -missingParameterMessage=Fehlender Parameter\: {0} -clientNotFoundMessage=Client nicht gefunden. -clientDisabledMessage=Client deaktiviert. -invalidParameterMessage=Ung\u00FCltiger Parameter\: {0} -alreadyLoggedIn=Sie sind bereits angemeldet. -differentUserAuthenticated=Sie sind in dieser Session bereits mit einem anderen Benutzer ''{0}'' angemeldet. Bitte melden Sie sich zuerst ab. -brokerLinkingSessionExpired=Broker Account Linking angefordert; Ihre Session ist allerdings nicht mehr g\u00FCltig. -proceedWithAction=» Klicken Sie hier um fortzufahren - -requiredAction.CONFIGURE_TOTP=Mehrfachauthentifizierung konfigurieren -requiredAction.terms_and_conditions=Bedingungen und Konditionen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse verifizieren - -doX509Login=Sie werden angemeldet als\: -clientCertificate=X509 Client Zertifikat\: -noCertificate=[Kein Zertifikat] - - -pageNotFound=Seite nicht gefunden -internalServerError=Es ist ein interner Server-Fehler aufgetreten - -console-username=Benutzername: -console-password=Passwort: -console-otp=One Time Passwort: -console-new-password=Neues Passwort: -console-confirm-password=Passwort best\u00E4tigen: -console-update-password=Eine Aktualisierung Ihres Passworts ist erforderlich. -console-verify-email=Sie m\u00FCssen Ihre E-Mail-Adresse verifizieren. Wir haben eine E-Mail an {0} gesendet, die einen Verifizierungscode enth\u00E4lt. Bitte geben Sie diesen Code in das untenstehende Eingabefeld ein. -console-email-code=E-Mail Code: -console-accept-terms=Nutzungsbedingungen akzeptieren? [y/n]: -console-accept=y - -# Openshift messages -openshift.scope.user_info=Nutzerinformation -openshift.scope.user_check-access=Benutzerzugriffsinformationen -openshift.scope.user_full=Voller Zugriff -openshift.scope.list-projects=Projekte auflisten - -# SAML authentication -saml.post-form.title=Authentifizierungsumleitung -saml.post-form.message=Sie werden weitergeleitet, bitte warten. -saml.post-form.js-disabled=JavaScript ist deaktiviert. Wir empfehlen dringend, es zu aktivieren. Klicken Sie auf die Schaltfl\u00E4che unten, um fortzufahren. - -#authenticators -otp-display-name=Authenticator-Anwendung -otp-help-text=Eingabe eines Verifizierungscodes aus der Authenticator-Anwendung. -password-display-name=Passwort -password-help-text=Melden Sie sich an, indem Sie Ihr Passwort eingeben. -auth-username-form-display-name=Benutzername -auth-username-form-help-text=Anmelden durch Eingabe des Benutzernamens -auth-username-password-form-display-name=Benutzername und Passwort -auth-username-password-form-help-text=Anmelden, indem Sie Ihren Benutzernamen und Ihr Passwort eingeben. - -# WebAuthn -webauthn-display-name=Security-Token -webauthn-help-text=Verwenden Sie Ihr Security-Token zur Anmeldung. -webauthn-passwordless-display-name=Security-Token -webauthn-passwordless-help-text=Verwenden Sie Ihr Security-Token zur kennwortlosen Anmeldung. -webauthn-login-title=Security-Token Anmeldung -webauthn-registration-title=Security-Token Registrierung -webauthn-available-authenticators=Verf\u00FCgbare Authentifikatoren -webauthn-unsupported-browser-text=WebAuthn wird von diesem Browser nicht unterst\u00FCtzt. Versuchen Sie es mit einem anderen oder wenden Sie sich an Ihren Administrator. - -# WebAuthn Error -webauthn-error-title=Security-Token Fehler -webauthn-error-registration=Fehler beim Registrieren Ihres Security-Tokens.
    {0} -webauthn-error-api-get=Fehler beim Authentifizieren mit dem Security-Token.
    {0} -webauthn-error-different-user=Der erste authentifizierte Benutzer ist nicht derjenige, der durch das Security-Token authentifiziert wurde. -webauthn-error-auth-verification=Das Ergebnis der Security-Token Authentifizierung ist ung\u00FCltig.
    {0} -webauthn-error-register-verification=Das Ergebnis der Security-Token Registrierung ist ung\u00FCltig.
    {0} -webauthn-error-user-not-found=Unbekannter Benutzer, der mit dem Security-Token authentifiziert wurde. - -# Identity provider -identity-provider-redirector=Mit einem anderen Indentit\u00E4tsprovider verbinden -identity-provider-login-label=Oder anmelden mit - -finalDeletionConfirmation=Wenn Sie Ihr Konto l\u00F6schen, kann es nicht wiederhergestellt werden. Um Ihr Konto zu behalten, klicken Sie auf Abbrechen. -irreversibleAction=Diese Aktion ist unwiderruflich -deleteAccountConfirm=L\u00F6schung des Kontos best\u00E4tigen - -deletingImplies=Die L\u00F6schung Ihres Kontos bedeutet: -errasingData=L\u00F6schen aller Ihrer Daten -loggingOutImmediately=Sofortige Abmeldung -accountUnusable=Eine sp\u00E4tere Nutzung der Anwendung ist mit diesem Konto nicht mehr m\u00F6glich -userDeletedSuccessfully=Nutzer erfolgreich gel\u00F6scht diff --git a/deps/keycloak/themes/base/login/messages/messages_en.properties b/deps/keycloak/themes/base/login/messages/messages_en.properties deleted file mode 100644 index fef40f661..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_en.properties +++ /dev/null @@ -1,429 +0,0 @@ -doLogIn=Sign In -doRegister=Register -doCancel=Cancel -doSubmit=Submit -doBack=Back -doYes=Yes -doNo=No -doContinue=Continue -doIgnore=Ignore -doAccept=Accept -doDecline=Decline -doForgotPassword=Forgot Password? -doClickHere=Click here -doImpersonate=Impersonate -doTryAgain=Try again -doTryAnotherWay=Try Another Way -doConfirmDelete=Confirm deletion -errorDeletingAccount=Error happened while deleting account -deletingAccountForbidden=You do not have enough permissions to delete your own account, contact admin. -kerberosNotConfigured=Kerberos Not Configured -kerberosNotConfiguredTitle=Kerberos Not Configured -bypassKerberosDetail=Either you are not logged in by Kerberos or your browser is not set up for Kerberos login. Please click continue to login in through other means -kerberosNotSetUp=Kerberos is not set up. You cannot login. -registerTitle=Register -loginAccountTitle=Sign in to your account -loginTitle=Sign in to {0} -loginTitleHtml={0} -impersonateTitle={0} Impersonate User -impersonateTitleHtml={0} Impersonate User -realmChoice=Realm -unknownUser=Unknown user -loginTotpTitle=Mobile Authenticator Setup -loginProfileTitle=Update Account Information -loginTimeout=Your login attempt timed out. Login will start from the beginning. -oauthGrantTitle=Grant Access to {0} -oauthGrantTitleHtml={0} -errorTitle=We are sorry... -errorTitleHtml=We are sorry ... -emailVerifyTitle=Email verification -emailForgotTitle=Forgot Your Password? -updatePasswordTitle=Update password -codeSuccessTitle=Success code -codeErrorTitle=Error code\: {0} -displayUnsupported=Requested display type unsupported -browserRequired=Browser required to login -browserContinue=Browser required to complete login -browserContinuePrompt=Open browser and continue login? [y/n]: -browserContinueAnswer=y - - -termsTitle=Terms and Conditions -termsText=

    Terms and conditions to be defined

    -termsPlainText=Terms and conditions to be defined. - -recaptchaFailed=Invalid Recaptcha -recaptchaNotConfigured=Recaptcha is required, but not configured -consentDenied=Consent denied. - -noAccount=New user? -username=Username -usernameOrEmail=Username or email -firstName=First name -givenName=Given name -fullName=Full name -lastName=Last name -familyName=Family name -email=Email -password=Password -passwordConfirm=Confirm password -passwordNew=New Password -passwordNewConfirm=New Password confirmation -rememberMe=Remember me -authenticatorCode=One-time code -address=Address -street=Street -locality=City or Locality -region=State, Province, or Region -postal_code=Zip or Postal code -country=Country -emailVerified=Email verified -website=Web page -phoneNumber=Phone number -phoneNumberVerified=Phone number verified -gender=Gender -birthday=Birthdate -zoneinfo=Time zone -gssDelegationCredential=GSS Delegation Credential -logoutOtherSessions=Sign out from other devices - -profileScopeConsentText=User profile -emailScopeConsentText=Email address -addressScopeConsentText=Address -phoneScopeConsentText=Phone number -offlineAccessScopeConsentText=Offline Access -samlRoleListScopeConsentText=My Roles -rolesScopeConsentText=User roles - -restartLoginTooltip=Restart login - -loginTotpIntro=You need to set up a One Time Password generator to access this account -loginTotpStep1=Install one of the following applications on your mobile: -loginTotpStep2=Open the application and scan the barcode: -loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup. -loginTotpStep3DeviceName=Provide a Device Name to help you manage your OTP devices. -loginTotpManualStep2=Open the application and enter the key: -loginTotpManualStep3=Use the following configuration values if the application allows setting them: -loginTotpUnableToScan=Unable to scan? -loginTotpScanBarcode=Scan barcode? -loginCredential=Credential -loginOtpOneTime=One-time code -loginTotpType=Type -loginTotpAlgorithm=Algorithm -loginTotpDigits=Digits -loginTotpInterval=Interval -loginTotpCounter=Counter -loginTotpDeviceName=Device Name - -loginTotp.totp=Time-based -loginTotp.hotp=Counter-based - -loginChooseAuthenticator=Select login method - -oauthGrantRequest=Do you grant these access privileges? -inResource=in - -oauth2DeviceVerificationTitle=Device Login -verifyOAuth2DeviceUserCode=Enter the code provided by your device and click Submit -oauth2DeviceInvalidUserCodeMessage=Invalid code, please try again. -oauth2DeviceExpiredUserCodeMessage=The code has expired. Please go back to your device and try connecting again. -oauth2DeviceVerificationCompleteHeader=Device Login Successful -oauth2DeviceVerificationCompleteMessage=You may close this browser window and go back to your device. -oauth2DeviceVerificationFailedHeader=Device Login Failed -oauth2DeviceVerificationFailedMessage=You may close this browser window and go back to your device and try connecting again. -oauth2DeviceConsentDeniedMessage=Consent denied for connecting the device. -oauth2DeviceAuthorizationGrantDisabledMessage=Client is not allowed to initiate OAuth 2.0 Device Authorization Grant. The flow is disabled for the client. - -emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you. -emailVerifyInstruction2=Haven''t received a verification code in your email? -emailVerifyInstruction3=to re-send the email. - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you. -emailLinkIdp2=Haven''t received a verification code in your email? -emailLinkIdp3=to re-send the email. -emailLinkIdp4=If you already verified the email in different browser -emailLinkIdp5=to continue. - -backToLogin=« Back to Login - -emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password. - -copyCodeInstruction=Please copy this code and paste it into your application: - -pageExpiredTitle=Page has expired -pageExpiredMsg1=To restart the login process -pageExpiredMsg2=To continue the login process - -personalInfo=Personal Info: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Create realm -role_create-client=Create client -role_view-realm=View realm -role_view-users=View users -role_view-applications=View applications -role_view-clients=View clients -role_view-events=View events -role_view-identity-providers=View identity providers -role_manage-realm=Manage realm -role_manage-users=Manage users -role_manage-applications=Manage applications -role_manage-identity-providers=Manage identity providers -role_manage-clients=Manage clients -role_manage-events=Manage events -role_view-profile=View profile -role_manage-account=Manage account -role_manage-account-links=Manage account links -role_read-token=Read token -role_offline-access=Offline access -client_account=Account -client_account-console=Account Console -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm Management -client_broker=Broker - -requiredFields=Required fields - -invalidUserMessage=Invalid username or password. -invalidUsernameMessage=Invalid username. -invalidUsernameOrEmailMessage=Invalid username or email. -invalidPasswordMessage=Invalid password. -invalidEmailMessage=Invalid email address. -accountDisabledMessage=Account is disabled, contact your administrator. -accountTemporarilyDisabledMessage=Account is temporarily disabled; contact your administrator or retry later. -expiredCodeMessage=Login timeout. Please sign in again. -expiredActionMessage=Action expired. Please continue with login now. -expiredActionTokenNoSessionMessage=Action expired. -expiredActionTokenSessionExistsMessage=Action expired. Please start again. - -missingFirstNameMessage=Please specify first name. -missingLastNameMessage=Please specify last name. -missingEmailMessage=Please specify email. -missingUsernameMessage=Please specify username. -missingPasswordMessage=Please specify password. -missingTotpMessage=Please specify authenticator code. -missingTotpDeviceNameMessage=Please specify device name. -notMatchPasswordMessage=Passwords don''t match. - -error-invalid-value=Invalid value. -error-invalid-blank=Please specify value. -error-empty=Please specify value. -error-invalid-length=Length must be between {1} and {2}. -error-invalid-email=Invalid email address. -error-invalid-number=Invalid number. -error-number-out-of-range=Number must be between {1} and {2}. -error-pattern-no-match=Invalid value. -error-invalid-uri=Invalid URL. -error-invalid-uri-scheme=Invalid URL scheme. -error-invalid-uri-fragment=Invalid URL fragment. -error-user-attribute-required=Please specify this field. - -invalidPasswordExistingMessage=Invalid existing password. -invalidPasswordBlacklistedMessage=Invalid password: password is blacklisted. -invalidPasswordConfirmMessage=Password confirmation doesn''t match. -invalidTotpMessage=Invalid authenticator code. - -usernameExistsMessage=Username already exists. -emailExistsMessage=Email already exists. - -federatedIdentityExistsMessage=User with {0} {1} already exists. Please login to account management to link the account. -federatedIdentityUnavailableMessage=User {0} authenticated with identity provider {1} does not exists. Please contact your administrator. - -confirmLinkIdpTitle=Account already exists -federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? -federatedIdentityConfirmReauthenticateMessage=Authenticate to link your account with {0} -nestedFirstBrokerFlowMessage=The {0} user {1} is not linked to any known user. -confirmLinkIdpReviewProfile=Review profile -confirmLinkIdpContinue=Add to existing account - -configureTotpMessage=You need to set up Mobile Authenticator to activate your account. -updateProfileMessage=You need to update your user profile to activate your account. -updatePasswordMessage=You need to change your password to activate your account. -resetPasswordMessage=You need to change your password. -verifyEmailMessage=You need to verify your email address to activate your account. -linkIdpMessage=You need to verify your email address to link your account with {0}. - -emailSentMessage=You should receive an email shortly with further instructions. -emailSendErrorMessage=Failed to send email, please try again later. - -accountUpdatedMessage=Your account has been updated. -accountPasswordUpdatedMessage=Your password has been updated. - -delegationCompleteHeader=Login Successful -delegationCompleteMessage=You may close this browser window and go back to your console application. -delegationFailedHeader=Login Failed -delegationFailedMessage=You may close this browser window and go back to your console application and try logging in again. - -noAccessMessage=No access - -invalidPasswordMinLengthMessage=Invalid password: minimum length {0}. -invalidPasswordMinDigitsMessage=Invalid password: must contain at least {0} numerical digits. -invalidPasswordMinLowerCaseCharsMessage=Invalid password: must contain at least {0} lower case characters. -invalidPasswordMinUpperCaseCharsMessage=Invalid password: must contain at least {0} upper case characters. -invalidPasswordMinSpecialCharsMessage=Invalid password: must contain at least {0} special characters. -invalidPasswordNotUsernameMessage=Invalid password: must not be equal to the username. -invalidPasswordNotEmailMessage=Invalid password: must not be equal to the email. -invalidPasswordRegexPatternMessage=Invalid password: fails to match regex pattern(s). -invalidPasswordHistoryMessage=Invalid password: must not be equal to any of last {0} passwords. -invalidPasswordGenericMessage=Invalid password: new password doesn''t match password policies. - -failedToProcessResponseMessage=Failed to process response -httpsRequiredMessage=HTTPS required -realmNotEnabledMessage=Realm not enabled -invalidRequestMessage=Invalid Request -failedLogout=Logout failed -unknownLoginRequesterMessage=Unknown login requester -loginRequesterNotEnabledMessage=Login requester not enabled -bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login -standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. -implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. -invalidRedirectUriMessage=Invalid redirect uri -unsupportedNameIdFormatMessage=Unsupported NameIDFormat -invalidRequesterMessage=Invalid requester -registrationNotAllowedMessage=Registration not allowed -resetCredentialNotAllowedMessage=Reset Credential not allowed - -permissionNotApprovedMessage=Permission not approved. -noRelayStateInResponseMessage=No relay state in response from identity provider. -insufficientPermissionMessage=Insufficient permissions to link identities. -couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider. -couldNotObtainTokenMessage=Could not obtain token from identity provider. -unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider. -unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider. -identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider. -couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider. -unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider. -invalidAccessCodeMessage=Invalid access code. -sessionNotActiveMessage=Session not active. -invalidCodeMessage=An error occurred, please login again through your application. -identityProviderUnexpectedErrorMessage=Unexpected error when authenticating with identity provider -identityProviderMissingStateMessage=Missing state parameter in response from identity provider. -identityProviderNotFoundMessage=Could not find an identity provider with the identifier. -identityProviderLinkSuccess=You successfully verified your email. Please go back to your original browser and continue there with the login. -staleCodeMessage=This page is no longer valid, please go back to your application and sign in again -realmSupportsNoCredentialsMessage=Realm does not support any credential type. -credentialSetupRequired=Cannot login, credential setup required. -identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. -emailVerifiedMessage=Your email address has been verified. -staleEmailVerificationLink=The link you clicked is an old stale link and is no longer valid. Maybe you have already verified your email. -identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user. -confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account. -confirmEmailAddressVerification=Confirm validity of e-mail address {0}. -confirmExecutionOfActions=Perform the following action(s) - -locale_ca=Catal\u00E0 -locale_cs=\u010Ce\u0161tina -locale_da=Dansk -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00F1ol -locale_fr=Fran\u00E7ais -locale_hu=Magyar -locale_it=Italiano -locale_ja=\u65E5\u672C\u8A9E -locale_lt=Lietuvi\u0173 -locale_nl=Nederlands -locale_no=Norsk -locale_pl=Polski -locale_pt_BR=Portugu\u00EAs (Brasil) -locale_pt-BR=Portugu\u00EAs (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 -locale_sk=Sloven\u010Dina -locale_sv=Svenska -locale_tr=T\u00FCrk\u00E7e -locale_zh-CN=\u4E2D\u6587\u7B80\u4F53 - -backToApplication=« Back to Application -missingParameterMessage=Missing parameters\: {0} -clientNotFoundMessage=Client not found. -clientDisabledMessage=Client disabled. -invalidParameterMessage=Invalid parameter\: {0} -alreadyLoggedIn=You are already logged in. -differentUserAuthenticated=You are already authenticated as different user ''{0}'' in this session. Please sign out first. -brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. -proceedWithAction=» Click here to proceed - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email - -doX509Login=You will be logged in as\: -clientCertificate=X509 client certificate\: -noCertificate=[No Certificate] - - -pageNotFound=Page not found -internalServerError=An internal server error has occurred - -console-username=Username: -console-password=Password: -console-otp=One Time Password: -console-new-password=New Password: -console-confirm-password=Confirm Password: -console-update-password=Update of your password is required. -console-verify-email=You need to verify your email address. We sent an email to {0} that contains a verification code. Please enter this code into the input below. -console-email-code=Email Code: -console-accept-terms=Accept Terms? [y/n]: -console-accept=y - -# Openshift messages -openshift.scope.user_info=User information -openshift.scope.user_check-access=User access information -openshift.scope.user_full=Full Access -openshift.scope.list-projects=List projects - -# SAML authentication -saml.post-form.title=Authentication Redirect -saml.post-form.message=Redirecting, please wait. -saml.post-form.js-disabled=JavaScript is disabled. We strongly recommend to enable it. Click the button below to continue. -saml.artifactResolutionServiceInvalidResponse=Unable to resolve artifact. - -#authenticators -otp-display-name=Authenticator Application -otp-help-text=Enter a verification code from authenticator application. -password-display-name=Password -password-help-text=Sign in by entering your password. -auth-username-form-display-name=Username -auth-username-form-help-text=Start sign in by entering your username -auth-username-password-form-display-name=Username and password -auth-username-password-form-help-text=Sign in by entering your username and password. - -# WebAuthn -webauthn-display-name=Security Key -webauthn-help-text=Use your security key to sign in. -webauthn-passwordless-display-name=Security Key -webauthn-passwordless-help-text=Use your security key for passwordless sign in. -webauthn-login-title=Security Key login -webauthn-registration-title=Security Key Registration -webauthn-available-authenticators=Available authenticators -webauthn-unsupported-browser-text=WebAuthn is not supported by this browser. Try another one or contact your administrator. -webauthn-doAuthenticate=Sign in with Security Key - -# WebAuthn Error -webauthn-error-title=Security Key Error -webauthn-error-registration=Failed to register your Security key.
    {0} -webauthn-error-api-get=Failed to authenticate by the Security key.
    {0} -webauthn-error-different-user=First authenticated user is not the one authenticated by the Security key. -webauthn-error-auth-verification=Security key authentication result is invalid.
    {0} -webauthn-error-register-verification=Security key registration result is invalid.
    {0} -webauthn-error-user-not-found=Unknown user authenticated by the Security key. - -# Identity provider -identity-provider-redirector=Connect with another Identity Provider -identity-provider-login-label=Or sign in with - -finalDeletionConfirmation=If you delete your account, it cannot be restored. To keep your account, click Cancel. -irreversibleAction=This action is irreversible -deleteAccountConfirm=Delete account confirmation - -deletingImplies=Deleting your account implies: -errasingData=Erasing all your data -loggingOutImmediately=Logging you out immediately -accountUnusable=Any subsequent use of the application will not be possible with this account -userDeletedSuccessfully=User deleted successfully - -access-denied=Access denied \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/messages/messages_es.properties b/deps/keycloak/themes/base/login/messages/messages_es.properties deleted file mode 100644 index 482ea03b7..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_es.properties +++ /dev/null @@ -1,200 +0,0 @@ -doLogIn=Iniciar sesi\u00F3n -doRegister=Reg\u00EDstrate -doCancel=Cancelar -doSubmit=Enviar -doYes=S\u00ED -doNo=No -doContinue=Continuar -doAccept=Aceptar -doDecline=Declinar -doForgotPassword=\u00BFHas olvidado tu contrase\u00F1a? -doClickHere=Haz clic aqu\u00ED -doImpersonate=Personificar -kerberosNotConfigured=Kerberos no configurado -kerberosNotConfiguredTitle=Kerberos no configurado -bypassKerberosDetail=O bien no est\u00E1s identificado mediante Kerberos o tu navegador no est\u00E1 configurado para identificarse mediante Kerberos. Por favor haz clic para identificarte por otro medio. -kerberosNotSetUp=Kerberos no est\u00E1 configurado. No puedes identificarte. -registerWithTitle=Reg\u00EDstrate con {0} -registerWithTitleHtml={0} -loginTitle=Inicia sesi\u00F3n en {0} -loginTitleHtml={0} -impersonateTitle={0}\u00A0Personificar Usuario -impersonateTitleHtml={0} Personificar Usuario -realmChoice=Dominio -unknownUser=Usuario desconocido -loginTotpTitle=Configura tu aplicaci\u00F3n de identificaci\u00F3n m\u00F3vil -loginProfileTitle=Actualiza la informaci\u00F3n de tu cuenta -loginTimeout=Has tardado demasiado en identificarte. Inicia de nuevo la identificaci\u00F3n. -oauthGrantTitle=Concesi\u00F3n OAuth -oauthGrantTitleHtml={0} -errorTitle=Lo sentimos... -errorTitleHtml=Lo sentimos... -emailVerifyTitle=Verificaci\u00F3n del email -emailForgotTitle=\u00BFHas olvidado tu contrase\u00F1a? -updatePasswordTitle=Modificaci\u00F3n de contrase\u00F1a -codeSuccessTitle=C\u00F3digo de \u00E9xito -codeErrorTitle=C\u00F3digo de error: {0} - -termsTitle=T\u00E9rminos y Condiciones -termsTitleHtml=T\u00E9rminos y Condiciones -termsText=

    T\u00E9rmines y condiciones a definir

    - -recaptchaFailed=Reconocimiento de texto inv\u00E1lido -recaptchaNotConfigured=El reconocimiento de texto es obligatorio pero no est\u00E1 configurado -consentDenied=Consentimiento rechazado. - -noAccount=\u00BFUsuario nuevo? -username=Usuario -usernameOrEmail=Usuario o email -firstName=Nombre -givenName=Nombre de pila -fullName=Nombre completo -lastName=Apellidos -familyName=Apellidos -email=Email -password=Contrase\u00F1a -passwordConfirm=Confirma la contrase\u00F1a -passwordNew=Nueva contrase\u00F1a -passwordNewConfirm=Confirma la nueva contrase\u00F1a -rememberMe=Seguir conectado -authenticatorCode=C\u00F3digo de identificaci\u00F3n -address=Direcci\u00F3n -street=Calle -locality=Ciudad o Municipio -region=Estado, Provincia, o Regi\u00F3n -postal_code=C\u00F3digo Postal -country=Pa\u00EDs -emailVerified=Email verificado -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Instala FreeOTP o Google Authenticator en tu tel\u00E9fono m\u00F3vil. Ambas aplicaciones est\u00E1n disponibles en Google Play y en la App Store de Apple. -loginTotpStep2=Abre la aplicaci\u00F3n y escanea el c\u00F3digo o introduce la clave. -loginTotpStep3=Introduce el c\u00F3digo \u00FAnico que te muestra la aplicaci\u00F3n de autenticaci\u00F3n y haz clic en Enviar para finalizar la configuraci\u00F3n -loginOtpOneTime=C\u00F3digo de un solo uso - -oauthGrantRequest=\u00BFQuieres permitir estos privilegios de acceso? -inResource=en - -emailVerifyInstruction1=Te hemos enviado un email con instrucciones para verificar tu email. -emailVerifyInstruction2=\u00BFNo has recibido un c\u00F3digo de verificaci\u00F3n en tu email? -emailVerifyInstruction3=para reenviar el email. - -backToLogin=« Volver a la identificaci\u00F3n - -emailInstruction=Indica tu usuario o email y te enviaremos instrucciones indicando c\u00F3mo generar una nueva contrase\u00F1a. - -copyCodeInstruction=Por favor, copia y pega este c\u00F3digo en tu aplicaci\u00F3n: - -personalInfo=Informaci\u00F3n personal: -role_admin=Admin -role_realm-admin=Administrador del dominio -role_create-realm=Crear dominio -role_create-client=Crear cliente -role_view-realm=Ver dominio -role_view-users=Ver usuarios -role_view-applications=Ver aplicaciones -role_view-clients=Ver clientes -role_view-events=Ver eventos -role_view-identity-providers=Ver proveedores de identidad -role_manage-realm=Gestionar dominio -role_manage-users=Gestionar usuarios -role_manage-applications=Gestionar aplicaciones -role_manage-identity-providers=Gestionar proveedores de identidad -role_manage-clients=Gestionar clientes -role_manage-events=Gestionar eventos -role_view-profile=Ver perfil -role_manage-account=Gestionar cuenta -role_read-token=Leer token -role_offline-access=Acceso sin conexi\u00F3n -client_account=Cuenta -client_security-admin-console=Consola de Administraci\u00F3n de Seguridad -client_realm-management=Gesti\u00F3n del dominio -client_broker=Broker - -invalidUserMessage=Usuario o contrase\u00F1a incorrectos. -invalidEmailMessage=Email no v\u00E1lido -accountDisabledMessage=La cuenta est\u00E1 desactivada, contacta con el administrador. -accountTemporarilyDisabledMessage=La cuenta est\u00E1 temporalmente desactivada, contacta con el administrador o int\u00E9ntalo de nuevo m\u00E1s tarde. -expiredCodeMessage=Se agot\u00F3 el tiempo m\u00E1ximo para la identificaci\u00F3n. Por favor identificate de nuevo. - -missingFirstNameMessage=Por favor indica tu nombre. -missingLastNameMessage=Por favor indica tus apellidos. -missingEmailMessage=Por favor indica tu email. -missingUsernameMessage=Por favor indica tu usuario. -missingPasswordMessage=Por favor indica tu contrase\u00F1a. -missingTotpMessage=Por favor indica tu c\u00F3digo de autenticaci\u00F3n -notMatchPasswordMessage=Las contrase\u00F1as no coinciden. - -invalidPasswordExistingMessage=La contrase\u00F1a actual no es correcta. -invalidPasswordConfirmMessage=La confirmaci\u00F3n de contrase\u00F1a no coincide. -invalidTotpMessage=El c\u00F3digo de autenticaci\u00F3n no es v\u00E1lido. - -usernameExistsMessage=El nombre de usuario ya existe -emailExistsMessage=El email ya existe - -federatedIdentityEmailExistsMessage=Ya existe un usuario con este email. Por favor accede a la gesti\u00F3n de tu cuenta para enlazarlo. -federatedIdentityUsernameExistsMessage=Ya existe un usuario con este nombre de usuario. Por favor accede a la gesti\u00F3n de tu cuenta para enlazarlo. - -configureTotpMessage=Tienes que configurar la aplicaci\u00F3n m\u00F3vil de identificaci\u00F3n para activar tu cuenta. -updateProfileMessage=Tienes que actualizar tu perfil de usuario para activar tu cuenta. -updatePasswordMessage=Tienes que cambiar tu contrase\u00F1a para activar tu cuenta. -verifyEmailMessage=Tienes que verificar tu email para activar tu cuenta. - -emailSentMessage=En breve deber\u00EDas recibir un mensaje con m\u00E1s instrucciones -emailSendErrorMessage=Fall\u00F3 el env\u00EDo del email, por favor int\u00E9ntalo de nuevo m\u00E1s tarde. - -accountUpdatedMessage=Tu cuenta se ha actualizado. -accountPasswordUpdatedMessage=Tu contrase\u00F1a se ha actualizado. - -noAccessMessage=Sin acceso - -invalidPasswordMinLengthMessage=Contrase\u00F1a incorrecta: longitud m\u00EDnima {0}. -invalidPasswordMinDigitsMessage=Contrase\u00F1a incorrecta: debe contaner al menos {0} caracteres num\u00E9ricos. -invalidPasswordMinLowerCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras min\u00FAsculas. -invalidPasswordMinUpperCaseCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} letras may\u00FAsculas. -invalidPasswordMinSpecialCharsMessage=Contrase\u00F1a incorrecta: debe contener al menos {0} caracteres especiales. -invalidPasswordNotUsernameMessage=Contrase\u00F1a incorrecta: no puede ser igual al nombre de usuario. -invalidPasswordRegexPatternMessage=Contrase\u00F1a incorrecta: no cumple la expresi\u00F3n regular. -invalidPasswordHistoryMessage=Contrase\u00F1a incorrecta: no puede ser igual a ninguna de las \u00FAltimas {0} contrase\u00F1as. - -failedToProcessResponseMessage=Fallo al procesar la respuesta -httpsRequiredMessage=HTTPS obligatorio -realmNotEnabledMessage=El dominio no est\u00E1 activado -invalidRequestMessage=Petici\u00F3n incorrecta -failedLogout=Fall\u00F3 la desconexi\u00F3n. -unknownLoginRequesterMessage=Solicitante de identificaci\u00F3n desconocido -loginRequesterNotEnabledMessage=El solicitante de inicio de sesi\u00F3n est\u00E1 desactivado -bearerOnlyMessage=Las aplicaciones Bearer-only no pueden iniciar sesi\u00F3n desde el navegador. -directGrantsOnlyMessage=Los clientes de tipo Direct-grants-only no pueden iniciar sesi\u00F3n desde el navegador. -invalidRedirectUriMessage=La URI de redirecci\u00F3n no es correcta -unsupportedNameIdFormatMessage=NameIDFormat no soportado -invalidRequesterMessage=Solicitante no v\u00E1lido -registrationNotAllowedMessage=El registro no est\u00E1 permitido -resetCredentialNotAllowedMessage=El reinicio de las credenciales no est\u00E1 permitido - -permissionNotApprovedMessage=Permiso no aprobado. -noRelayStateInResponseMessage=Sin estado de retransmisi\u00F3n en la respuesta del proveedor de identidad. -identityProviderAlreadyLinkedMessage=La identidad devuelta por el proveedor de identidad ya est\u00E1 asociada a otro usuario. -insufficientPermissionMessage=Permisos insuficientes para enlazar identidades. -couldNotProceedWithAuthenticationRequestMessage=No se pudo continuar con la petici\u00F3n de autenticaci\u00F3n al proveedor de identidad. -couldNotObtainTokenMessage=.No se pudo obtener el c\u00F3digo del proveedor de identidad -unexpectedErrorRetrievingTokenMessage=Error inesperado obteniendo el token del proveedor de identidad -unexpectedErrorHandlingResponseMessage=Error inesperado procesando la respuesta del proveedor de identidad. -identityProviderAuthenticationFailedMessage=Fall\u00F3 la autenticaci\u00F3n. No fue posible autenticarse en el proveedor de identidad. -couldNotSendAuthenticationRequestMessage=No se pudo enviar la petici\u00F3n de identificaci\u00F3n al proveedor de identidad. -unexpectedErrorHandlingRequestMessage=Error inesperado durante la petici\u00F3n de identificaci\u00F3n al proveedor de identidad. -invalidAccessCodeMessage=C\u00F3digo de acceso no v\u00E1lido. -sessionNotActiveMessage=La sesi\u00F3n no est\u00E1 activa -invalidCodeMessage=Ha ocurrido un error, por favor identificate de nuevo desde tu aplicaci\u00F3n. -identityProviderUnexpectedErrorMessage=Error no esperado intentado autenticar en el proveedor de identidad. -identityProviderNotFoundMessage=No se encontr\u00F3 un proveedor de identidad. -realmSupportsNoCredentialsMessage=El dominio no soporta ning\u00FAn tipo de credenciales. -identityProviderNotUniqueMessage=El dominio soporta m\u00FAltiples proveedores de identidad. No se pudo determinar el proveedor de identidad que deber\u00EDa ser utilizado para identificarse. -emailVerifiedMessage=Tu email ha sido verificado. - -backToApplication=« Volver a la aplicaci\u00F3n -missingParameterMessage=Par\u00E1metros que faltan: {0} -clientNotFoundMessage=Cliente no encontrado -invalidParameterMessage=Par\u00E1metro no v\u00E1lido: {0} -alreadyLoggedIn=You are already logged in. - diff --git a/deps/keycloak/themes/base/login/messages/messages_fr.properties b/deps/keycloak/themes/base/login/messages/messages_fr.properties deleted file mode 100644 index b1143dc88..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_fr.properties +++ /dev/null @@ -1,276 +0,0 @@ -doLogIn=Connexion -doRegister=Enregistrement -doCancel=Annuler -doSubmit=Soumettre -doYes=Oui -doNo=Non -doContinue=Continuer -doIgnore=Ignorer -doAccept=Accepter -doDecline=D\u00e9cliner -doForgotPassword=Mot de passe oubli\u00e9 ? -doClickHere=Cliquez ici -doImpersonate=Usurper l'identit\u00e9 -kerberosNotConfigured=Kerberos non configur\u00e9 -kerberosNotConfiguredTitle=Kerberos non configur\u00e9 -bypassKerberosDetail=Si vous n''\u00eates pas connect\u00e9 via Kerberos ou bien que votre navigateur n''est pas configur\u00e9 pour la connexion via Kerberos. Veuillez cliquer pour vous connecter via un autre moyen. -kerberosNotSetUp=Kerberos n''est pas configur\u00e9. Connexion impossible. -registerTitle=S''enregistrer -loginAccountTitle=Connectez-vous \u00e0 votre compte -registerWithTitle=Enregistrement avec {0} -registerWithTitleHtml={0} -loginTitle=Se connecter \u00e0 {0} -loginTitleHtml={0} -impersonateTitle={0} utilisateur usurp\u00e9 -impersonateTitleHtml={0} utilisateur usurp\u00e9 -realmChoice=Domaine -unknownUser=Utilisateur inconnu -loginTotpTitle=Configuration de l''authentification par mobile -loginProfileTitle=Mise \u00e0 jour du compte -loginTimeout=Le temps imparti pour la connexion est \u00e9coul\u00e9. Le processus de connexion red\u00e9marre depuis le d\u00e9but. -oauthGrantTitle=OAuth Grant -oauthGrantTitleHtml={0} -errorTitle=Nous sommes d\u00e9sol\u00e9s... -errorTitleHtml=Nous sommes d\u00e9sol\u00e9s... -emailVerifyTitle=V\u00e9rification du courriel -emailForgotTitle=Mot de passe oubli\u00e9 ? -updatePasswordTitle=Mise \u00e0 jour du mot de passe -codeSuccessTitle=Code succ\u00e8s -codeErrorTitle=Code d''erreur \: {0} -displayUnsupported=Type d''affichage demand\u00e9 non support\u00e9 -browserRequired=Navigateur requis pour se connecter -browserContinue=Navigateur requis pour continuer la connexion -browserContinuePrompt=Ouvrir le navigateur et continuer la connexion? [y/n]: -browserContinueAnswer=y - -termsTitle=Termes et Conditions -termsTitleHtml=Termes et Conditions -termsText=

    Termes et conditions \u00e0 d\u00e9finir

    -termsPlainText=Termes et conditions \u00e0 d\u00e9finir - -recaptchaFailed=Re-captcha invalide -recaptchaNotConfigured=Re-captcha est requis, mais il n''est pas configur\u00e9 -consentDenied=Consentement refus\u00e9. - -noAccount=Nouvel utilisateur ? -username=Nom d''utilisateur -usernameOrEmail=Nom d''utilisateur ou courriel -firstName=Pr\u00e9nom -givenName=Pr\u00e9nom -fullName=Nom complet -lastName=Nom -familyName=Nom de famille -email=Courriel -password=Mot de passe -passwordConfirm=Confirmation du mot de passe -passwordNew=Nouveau mot de passe -passwordNewConfirm=Confirmation du nouveau mot de passe -rememberMe=Se souvenir de moi -authenticatorCode=Code \u00e0 usage unique -address=Adresse -street=Rue -locality=Ville ou Localit\u00e9 -region=\u00c9tat, Province ou R\u00e9gion -postal_code=Code postal -country=Pays -emailVerified=Courriel v\u00e9rifi\u00e9 -gssDelegationCredential=Accr\u00e9ditation de d\u00e9l\u00e9gation GSS - -loginTotpIntro=Il est n\u00e9cessaire de configurer un g\u00e9n\u00e9rateur One Time Password pour acc\u00e9der \u00e0 ce compte -loginTotpStep1=Installez une des applications suivantes sur votre mobile: -loginTotpStep2=Ouvrez l''application et scannez le code-barres ou entrez la clef. -loginTotpStep3=Entrez le code \u00e0 usage unique fourni par l''application et cliquez sur Sauvegarder pour terminer. -loginTotpManualStep2=Ouvrez l''application et saisissez la cl\u00e9 -loginTotpManualStep3=Utilisez la configuration de valeur suivante si l''application permet son \u00e9dition -loginTotpUnableToScan=Impossible de scanner? -loginTotpScanBarcode=Scanner le code barre ? -loginOtpOneTime=Code \u00e0 usage unique -loginTotpType=Type -loginTotpAlgorithm=Algorithme -loginTotpDigits=Chiffres -loginTotpInterval=Intervalle -loginTotpCounter=Compteur - -loginTotp.totp=Bas\u00e9 sur le temps -loginTotp.hotp=Bas\u00e9 sur les compteurs - -oauthGrantRequest=Voulez-vous accorder ces privil\u00e8ges d''acc\u00e8s ? -inResource=dans - -emailVerifyInstruction1=Un courriel avec des instructions \u00e0 suivre vous a \u00e9t\u00e9 envoy\u00e9. -emailVerifyInstruction2=Vous n''avez pas re\u00e7u de code dans le courriel ? -emailVerifyInstruction3=pour renvoyer le courriel. - -emailLinkIdpTitle=Association avec {0} -emailLinkIdp1=Un courriel avec des instructions pour associer le compte {1} sur {0} avec votre compte {2} vous a \u00e9t\u00e9 envoy\u00e9. -emailLinkIdp2=Vous n''avez pas re\u00e7u de code dans le courriel ? -emailLinkIdp3=pour renvoyer le courriel. -emailLinkIdp4=Si vous avez d\u00e9j\u00e0 v\u00e9rifi\u00e9 votre courriel dans un autre navigateur -emailLinkIdp5=pour continuer. - -backToLogin=« Retour \u00e0 la connexion - -emailInstruction=Entrez votre nom d''utilisateur ou votre courriel ; un courriel va vous \u00eatre envoy\u00e9 vous permettant de cr\u00e9er un nouveau mot de passe. - -copyCodeInstruction=Copiez le code et recopiez le dans votre application : - -pageExpiredTitle=La page a expir\u00e9 -pageExpiredMsg1=Pour recommencer le processus d''authentification -pageExpiredMsg2=Pour continuer le processus d''authentification - -personalInfo=Information personnelle : -role_admin=Administrateur -role_realm-admin=Administrateur du domaine -role_create-realm=Cr\u00e9er un domaine -role_create-client=Cr\u00e9er un client -role_view-realm=Voir un domaine -role_view-users=Voir les utilisateurs -role_view-applications=Voir les applications -role_view-clients=Voir les clients -role_view-events=Voir les \u00e9v\u00e9nements -role_view-identity-providers=Voir les fournisseurs d''identit\u00e9 -role_manage-realm=G\u00e9rer le domaine -role_manage-users=G\u00e9rer les utilisateurs -role_manage-applications=G\u00e9rer les applications -role_manage-identity-providers=G\u00e9rer les fournisseurs d''identit\u00e9 -role_manage-clients=G\u00e9rer les clients -role_manage-events=G\u00e9rer les \u00e9v\u00e9nements -role_view-profile=Voir le profil -role_manage-account=G\u00e9rer le compte -role_manage-account-links=G\u00e9rer les liens de compte -role_read-token=Lire le jeton d''authentification -role_offline-access=Acc\u00e8s hors-ligne -client_account=Compte -client_security-admin-console=Console d''administration de la s\u00e9curit\u00e9 -client_admin-cli=Admin CLI -client_realm-management=Gestion du domaine -client_broker=Broker - -invalidUserMessage=Nom d''utilisateur ou mot de passe invalide. -invalidEmailMessage=Courriel invalide. -accountDisabledMessage=Compte d\u00e9sactiv\u00e9, contactez votre administrateur. -accountTemporarilyDisabledMessage=Ce compte est temporairement d\u00e9sactiv\u00e9, contactez votre administrateur ou bien r\u00e9essayez plus tard. -expiredCodeMessage=Connexion expir\u00e9e. Veuillez vous reconnecter. -expiredActionMessage=Action expir\u00e9e. Merci de continuer la connexion. -expiredActionTokenNoSessionMessage=Action expir\u00e9e. -expiredActionTokenSessionExistsMessage=Action expir\u00e9e. Merci de recommencer. - -missingFirstNameMessage=Veuillez entrer votre pr\u00e9nom. -missingLastNameMessage=Veuillez entrer votre nom. -missingEmailMessage=Veuillez entrer votre courriel. -missingUsernameMessage=Veuillez entrer votre nom d''utilisateur. -missingPasswordMessage=Veuillez entrer votre mot de passe. -missingTotpMessage=Veuillez entrer votre code d''authentification. -notMatchPasswordMessage=Les mots de passe ne sont pas identiques. - -invalidPasswordExistingMessage=Mot de passe existant invalide. -invalidPasswordBlacklistedMessage=Mot de passe invalide : ce mot de passe est blacklist\u00e9. -invalidPasswordConfirmMessage=Le mot de passe de confirmation ne correspond pas. -invalidTotpMessage=Le code d''authentification est invalide. - -usernameExistsMessage=Le nom d''utilisateur existe d\u00e9j\u00e0. -emailExistsMessage=Le courriel existe d\u00e9j\u00e0. - -federatedIdentityExistsMessage=L''utilisateur avec {0} {1} existe d\u00e9j\u00e0. Veuillez acc\u00e9der \u00e0 au gestionnaire de compte pour lier le compte. -federatedIdentityEmailExistsMessage=Cet utilisateur avec ce courriel existe d\u00e9j\u00e0. Veuillez vous connecter au gestionnaire de compte pour lier le compte. - -confirmLinkIdpTitle=Ce compte existe d\u00e9j\u00e0 -federatedIdentityConfirmLinkMessage=L''utilisateur {0} {1} existe d\u00e9j\u00e0. Que souhaitez-vous faire ? -federatedIdentityConfirmReauthenticateMessage=Identifiez vous afin de lier votre compte avec {0} -confirmLinkIdpReviewProfile=V\u00e9rifiez vos informations de profil -confirmLinkIdpContinue=Souhaitez-vous lier {0} \u00e0 votre compte existant - -configureTotpMessage=Vous devez configurer l''authentification par mobile pour activer votre compte. -updateProfileMessage=Vous devez mettre \u00e0 jour votre profil pour activer votre compte. -updatePasswordMessage=Vous devez changer votre mot de passe pour activer votre compte. -resetPasswordMessage=Vous devez changer votre mot de passe. -verifyEmailMessage=Vous devez v\u00e9rifier votre courriel pour activer votre compte. -linkIdpMessage=Vous devez v\u00e9rifier votre courriel pour lier votre compte avec {0}. - -emailSentMessage=Vous devriez recevoir rapidement un courriel avec de plus amples instructions. -emailSendErrorMessage=Erreur lors de l''envoi du courriel, veuillez essayer plus tard. - -accountUpdatedMessage=Votre compte a \u00e9t\u00e9 mis \u00e0 jour. -accountPasswordUpdatedMessage=Votre mot de passe a \u00e9t\u00e9 mis \u00e0 jour. - -noAccessMessage=Aucun acc\u00e8s - -invalidPasswordMinLengthMessage=Mot de passe invalide : longueur minimale requise de {0}. -invalidPasswordMinDigitsMessage=Mot de passe invalide : doit contenir au moins {0} chiffre(s). -invalidPasswordMinLowerCaseCharsMessage=Mot de passe invalide : doit contenir au moins {0} lettre(s) en minuscule. -invalidPasswordMinUpperCaseCharsMessage=Mot de passe invalide : doit contenir au moins {0} lettre(s) en majuscule. -invalidPasswordMinSpecialCharsMessage=Mot de passe invalide : doit contenir au moins {0} caract\u00e8re(s) sp\u00e9ciaux. -invalidPasswordNotUsernameMessage=Mot de passe invalide : ne doit pas \u00eatre identique au nom d''utilisateur. -invalidPasswordRegexPatternMessage=Mot de passe invalide : ne valide pas l''expression rationnelle. -invalidPasswordHistoryMessage=Mot de passe invalide : ne doit pas \u00eatre \u00e9gal aux {0} derniers mots de passe. -invalidPasswordGenericMessage=Mot de passe invalide : le nouveau mot de passe ne r\u00e9pond pas \u00e0 la politique de mot de passe. - -failedToProcessResponseMessage=Erreur lors du traitement de la r\u00e9ponse -httpsRequiredMessage=Le protocole HTTPS est requis -realmNotEnabledMessage=Le domaine n''est pas activ\u00e9 -invalidRequestMessage=Requ\u00eate invalide -failedLogout=La d\u00e9connexion a \u00e9chou\u00e9e -unknownLoginRequesterMessage=Compte inconnu du demandeur -loginRequesterNotEnabledMessage=La connexion du demandeur n''est pas active -bearerOnlyMessage=Les applications Bearer-only ne sont pas autoris\u00e9es \u00e0 initier la connexion par navigateur. -standardFlowDisabledMessage=Le client n''est pas autoris\u00e9 \u00e0 initier une connexion avec le navigateur avec ce response_type. Le flux standard est d\u00e9sactiv\u00e9 pour le client. -implicitFlowDisabledMessage=Le client n''est pas autoris\u00e9 \u00e0 initier une connexion avec le navigateur avec ce response_type. Le flux implicite est d\u00e9sactiv\u00e9 pour le client. -invalidRedirectUriMessage=L''URI de redirection est invalide -unsupportedNameIdFormatMessage=NameIDFormat non support\u00e9 -invalidRequesterMessage=Demandeur invalide -registrationNotAllowedMessage=L''enregistrement n''est pas autoris\u00e9 -resetCredentialNotAllowedMessage=La remise \u00e0 z\u00e9ro n''est pas autoris\u00e9e - -permissionNotApprovedMessage=La permission n''est pas approuv\u00e9e. -noRelayStateInResponseMessage=Aucun \u00e9tat de relais dans la r\u00e9ponse du fournisseur d''identit\u00e9. -insufficientPermissionMessage=Permissions insuffisantes pour lier les identit\u00e9s. -couldNotProceedWithAuthenticationRequestMessage=Impossible de continuer avec la requ\u00eate d''authentification vers le fournisseur d''identit\u00e9. -couldNotObtainTokenMessage=Impossible de r\u00e9cup\u00e9rer le jeton du fournisseur d''identit\u00e9. -unexpectedErrorRetrievingTokenMessage=Erreur inattendue lors de la r\u00e9cup\u00e9ration du jeton provenant du fournisseur d''identit\u00e9. -unexpectedErrorHandlingResponseMessage=Erreur inattendue lors du traitement de la r\u00e9ponse provenant du fournisseur d''identit\u00e9. -identityProviderAuthenticationFailedMessage=L''authentification a \u00e9chou\u00e9e. Impossible de s''authentifier avec le fournisseur d''identit\u00e9. -couldNotSendAuthenticationRequestMessage=Impossible d''envoyer la requ\u00eate d''authentification vers le fournisseur d''identit\u00e9. -unexpectedErrorHandlingRequestMessage=Erreur inattendue lors du traitement de la requ\u00eate vers le fournisseur d''identit\u00e9. -invalidAccessCodeMessage=Code d''acc\u00e8s invalide. -sessionNotActiveMessage=La session n''est pas active. -invalidCodeMessage=Une erreur est survenue, veuillez vous reconnecter \u00e0 votre application. -identityProviderUnexpectedErrorMessage=Erreur inattendue lors de l''authentification avec fournisseur d''identit\u00e9. -identityProviderNotFoundMessage=Impossible de trouver le fournisseur d''identit\u00e9 avec cet identifiant. -identityProviderLinkSuccess=Votre compte a \u00e9t\u00e9 correctement li\u00e9 avec {0} compte {1} . -staleCodeMessage=Cette page n''est plus valide, merci de retourner \u00e0 votre application et de vous connecter \u00e0 nouveau. -realmSupportsNoCredentialsMessage=Ce domaine ne supporte aucun type d''accr\u00e9ditation. -identityProviderNotUniqueMessage=Ce domaine autorise plusieurs fournisseurs d''identit\u00e9. Impossible de d\u00e9terminer le fournisseur d''identit\u00e9 avec lequel s''authentifier. -emailVerifiedMessage=Votre courriel a \u00e9t\u00e9 v\u00e9rifi\u00e9. - -staleEmailVerificationLink=Le lien que vous avez cliqu\u00e9 est p\u00e9rim\u00e9 et n''est plus valide. Peut-\u00eatre avez vous d\u00e9j\u00e0 v\u00e9rifi\u00e9 votre mot de passe ? -identityProviderAlreadyLinkedMessage=L''identit\u00e9 f\u00e9d\u00e9r\u00e9e retourn\u00e9e par {0} est d\u00e9j\u00e0 li\u00e9e \u00e0 un autre utilisateur. -confirmAccountLinking=Confirmez la liaison du compte {0} du fournisseur d''entit\u00e9 {1} avec votre compte. -confirmEmailAddressVerification=Confirmez la validit\u00e9 de l''adresse courriel {0}. -confirmExecutionOfActions=Suivez les instructions suivantes - - -backToApplication=« Revenir \u00e0 l''application -missingParameterMessage=Param\u00e8tres manquants \: {0} -clientNotFoundMessage=Client inconnu. -clientDisabledMessage=Client d\u00e9sactiv\u00e9. -invalidParameterMessage=Param\u00e8tre invalide \: {0} -alreadyLoggedIn=Vous \u00eates d\u00e9j\u00e0 connect\u00e9. - -differentUserAuthenticated=Vous \u00eates d\u00e9j\u00e0 authentifi\u00e9 avec un autre utilisateur ''{0}'' dans cette session. Merci de vous d\u00e9connecter. -proceedWithAction=» Cliquez ici - - -requiredAction.CONFIGURE_TOTP=Configurer OTP -requiredAction.terms_and_conditions=Termes et conditions -requiredAction.UPDATE_PASSWORD=Mettre \u00e0 jour votre mot de passe -requiredAction.UPDATE_PROFILE=Mettre \u00e0 jour votre profil -requiredAction.VERIFY_EMAIL=Valider votre adresse email - - -doX509Login=Vous allez \u00eatre connect\u00e9 en tant que\: -clientCertificate=X509 certificat client\: -noCertificate=[Pas de certificat] - - -pageNotFound=Page non trouv\u00e9e -internalServerError=Une erreur interne du serveur s''est produite diff --git a/deps/keycloak/themes/base/login/messages/messages_hu.properties b/deps/keycloak/themes/base/login/messages/messages_hu.properties deleted file mode 100644 index be481ffd2..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_hu.properties +++ /dev/null @@ -1,352 +0,0 @@ -# encoding: utf-8 -doLogIn=Belépés -doRegister=Regisztráció -doCancel=Mégsem -doSubmit=Elküld -doBack=Vissza -doYes=Igen -doNo=Nem -doContinue=Folytat -doIgnore=MellÅ‘z -doAccept=Elfogad -doDecline=Elutasít -doForgotPassword=Elfelejtette a jelszavát? -doClickHere=Kattintson ide -doImpersonate=Megszemélyesítés -doTryAgain=Próbálja újra -doTryAnotherWay=Pórbálja máshogyan -kerberosNotConfigured=Nincs beállítva Kerberos -kerberosNotConfiguredTitle=Nincs beállítva Kerberos -bypassKerberosDetail=Vagy nem Kerberosszal lépett be, vagy a böngészÅ‘je nem kezeli a Kerberos alapú belépést. Kérem kattintson a Folytat gombra, egy másik belépési módhoz. -kerberosNotSetUp=Nincs beállítva Kerberos, nem lehet belépni. -registerTitle=Regisztráció -loginTitle=Belépés ide: {0} -loginTitleHtml={0} -impersonateTitle={0} megszemélyesített felhasználó -impersonateTitleHtml={0} megszemélyesített felhasználó -realmChoice=Tartomány -unknownUser=Ismeretlen felhasználó -loginTotpTitle=Mobil hitelesítÅ‘ eszköz beállítása -loginProfileTitle=Felhasználói fiók adatok módosítása -loginTimeout=Belépési kísérlete idÅ‘túllépés miatt meghiúsult, a belépési eljárás újraindul. -oauthGrantTitle=Hozzáférés engedélyezése {0}-nak/nek -oauthGrantTitleHtml={0} -errorTitle=Nagyon sajnáljuk... -errorTitleHtml=Nagyon sajnáljuk ... -emailVerifyTitle=Email ellenÅ‘rzés -emailForgotTitle=Elfelejtette a jelszavát? -updatePasswordTitle=Jelszó módosítása -codeSuccessTitle=Sikeres kérés kódja -codeErrorTitle=Hibakód\: {0} -displayUnsupported=A kért megjelenítési mód nem támogatott -browserRequired=A belépéshez böngészÅ‘ szükséges -browserContinue=A belépés befejezéséhez böngészÅ‘ szükséges -browserContinuePrompt=Megnyitja a böngészÅ‘t és folytatja a belépést? [i/n]: -browserContinueAnswer=i - - -termsTitle=Felhasználási feltételek -termsText=

    Felhasználási feltételek helye

    -termsPlainText=Felhasználási feltételek helye - -recaptchaFailed=Érvénytelen Recaptcha -recaptchaNotConfigured=Recaptcha szükséges, de nincsen beállítva -consentDenied=Jóváhagyó nyilatkozat elutasítva. - -noAccount=Új felhasználó? -username=Felhasználó név -usernameOrEmail=Felhasználó név vagy email -firstName=Keresztnév -givenName=Keresztnév -fullName=Teljes név -lastName=Vezetéknév -familyName=Vezetéknév -password=Jelszó -email=Email cím -passwordConfirm=Jelszó megerÅ‘sítése -passwordNew=Új jelszó -passwordNewConfirm=Új jelszó megerÅ‘sítése -rememberMe=Automatikus bejelentkezés -authenticatorCode=Egyszer használatos hitelesítÅ‘ kód -address=Cím -street=Közterület -locality=Település -region=Ãllam, Tartomány, Megye, Régió -postal_code=Irányítószám -country=Ország -emailVerified=EllenÅ‘rzött email cím -gssDelegationCredential=GSS Delegation Credential - -profileScopeConsentText=Felhasználói fiók -emailScopeConsentText=Email cím -addressScopeConsentText=Cím -phoneScopeConsentText=Telefonszám -offlineAccessScopeConsentText=Offline hozzáférés -samlRoleListScopeConsentText=Szerepköreim -rolesScopeConsentText=Felhasználói szerepkörök -restartLoginTooltip=Belépés újrakezdése -loginTotpIntro=A felhasználói fiók hozzáféréshez be kell állítania egy egyszer használatos jelszót (OTP) generáló alkalmazást. -loginTotpStep1=Kérem telepítse az itt felsorolt alkalmazások egyikét a mobil eszközére: -loginTotpStep2=Indítsa el az alkalmazást a mobil eszközén és olvassa be ezt a (QR) kódot: -loginTotpStep3=Adja meg az alkalmazás által generált egyszer használatos kódot majd kattintson az Elküld gombra a beállítás befejezéséhez. -loginTotpStep3DeviceName=Adja meg a mobil eszköz nevét. Ez a késÅ‘bbiekben segíthet az eszköz azonosításában. -loginTotpManualStep2=Indítsa el az alkalmazást és adja meg a következÅ‘ kulcsot: -loginTotpManualStep3=Használja a következÅ‘ beállításokat, ha az alkalmazása támogatja ezeket: -loginTotpUnableToScan=Nem tud (QR) kódot beolvasni? -loginTotpScanBarcode=Inkább (QR) kódot olvasna be? -loginCredential=Jelszó -loginOtpOneTime=Egyszer használatos kód -loginTotpType=Típus -loginTotpAlgorithm=Algoritmus -loginTotpDigits=Számjegyek -loginTotpInterval=Intervallum -loginTotpCounter=Számláló -loginTotpDeviceName=Eszköz neve - -loginTotp.totp=IdÅ‘ alapú -loginTotp.hotp=Számláló alapú -loginChooseAuthenticator=Válasszon egy belépési módszert - -oauthGrantRequest=Engedélyezi a következÅ‘ hozzáférés jogosultságokat? -inResource=Itt: - -emailVerifyInstruction1=A megadott email címre elküldtük az email cím megerÅ‘sítéséhez szükséges lépéseket tartalmazó üzenetet. -emailVerifyInstruction2=Nem kapott megerÅ‘sítÅ‘ kódot tartalmazó email üzenetet? -emailVerifyInstruction3=az ellenÅ‘rzÅ‘ kód ismételt kiküldéséhez. - -emailLinkIdpTitle={0} összekötés -emailLinkIdp1=A(z) {1} {0} fiók és a(z) {2} fiókjának összekötéséhez szükséges tudnivalókat email üzenetben elküldtük Önnek. -emailLinkIdp2=Nem kapott megerÅ‘sítÅ‘ kódot tartalmazó email üzenetet? -emailLinkIdp3=az ellenÅ‘rzÅ‘ kód ismételt kiküldéséhez. -emailLinkIdp4=Ha egy másik böngészÅ‘ben már jóváhagyta az email címét -emailLinkIdp5=a folytatáshoz. - -backToLogin=« Vissza a belépéshez - -emailInstruction=Adja meg a felhasználó nevét vagy email címét, hogy az új jelszó beállításához szükséges tudnivalókat elküldhessük Önnek. - -copyCodeInstruction=Kérem másolja ki ezt a kódot és illessze be az alkalmazásába: - -pageExpiredTitle=A lap érvényessége lejárt -pageExpiredMsg1=Ahhoz, hogy újrakezdje a belépési eljárást -pageExpiredMsg2=Ahhoz, hogy folytassa a belépési eljárást - -personalInfo=Személyes adatok: -role_admin=Adminisztrátor -role_realm-admin=Tartomány Adminisztrátor -role_create-realm=Tartomány létrehozása -role_create-client=Kliens létrehozása -role_view-realm=Tartományok megtekintése -role_view-users=Felhasználók megtekintése -role_view-applications=Alkalmazások megtekintése -role_view-clients=Kliensek megtekintése -role_view-events=Események megtekintése -role_view-identity-providers=Személyazonosság-kezelÅ‘k megtekintése -role_view-consent=Jóváhagyó nyilatkozatok megtekintése -role_manage-realm=Tartományok kezelése -role_manage-users=Felhasználók kezelése -role_manage-applications=Alkalmazások kezelése -role_manage-identity-providers=Személyazonosság-kezelÅ‘k karbantartása -role_manage-clients=Kliensek kezelése -role_manage-events=Események kezelése -role_view-profile=Fiók megtekintése -role_manage-account=Fiók kezelése -role_manage-account-links=Fiók összekötések kezelése -role_manage-consent=Jóváhagyó nyilatkozatok kezelése -role_read-token=Olvasási token -role_offline-access=Offline hozzáférés -role_uma_authorization=Hozzáférés jogosultságokhoz (UMA) -client_account=Fiók -client_account-console=Fiók kezelés -client_security-admin-console=Biztonsági, adminisztrátor fiók kezelés -client_admin-cli=Admin CLI -client_realm-management=Tartomány kezelés -client_broker=Ãœgynök - -requiredFields=KötelezÅ‘en kitöltendÅ‘ mezÅ‘k - -invalidUserMessage=Érvénytelen felhasználó név vagy jelszó. -invalidUsernameMessage=Érvénytelen felhasználó név. -invalidUsernameOrEmailMessage=Érvénytelen felhasználó név vagy email cím. -invalidPasswordMessage=Érvénytelen jelszó. -invalidEmailMessage=Érvénytelen email cím. -accountDisabledMessage=Felhasználói fiókja inaktív, kérem vegye fel a kapcsolatot az alkalmazás adminisztrátorral. -accountTemporarilyDisabledMessage=Felhasználói fiókja átmenetileg inaktív, kérem vegye fel a kapcsolatot az alkalmazás adminisztrátorral, vagy próbálkozzon késÅ‘bb. -expiredCodeMessage=Belépési idÅ‘túllépés, kérem lépjen be újra. -expiredActionMessage=A művelet érvényességi ideje lejárt. Kérem lépjen be újra. -expiredActionTokenNoSessionMessage=A művelet érvényességi ideje lejárt. -expiredActionTokenSessionExistsMessage=A művelet érvényességi ideje lejárt. Kérem ismételje meg a műveletet. - -missingUsernameMessage=Kérem adja meg a felhasználó nevét. -missingFirstNameMessage=Kérem adja meg a keresztnevet. -missingLastNameMessage=Kérem adja meg a vezetéknevet. -missingEmailMessage=Kérem adja meg az email címet. -missingPasswordMessage=Kérem adja meg a jelszót. -missingTotpMessage=Kérem adja meg a hitelesítÅ‘ kódot. -missingTotpDeviceNameMessage=Kérem adja meg az eszköz nevét. -notMatchPasswordMessage=A jelszavak nem egyeznek meg. - -invalidPasswordExistingMessage=Érvénytelen jelenlegi jelszó. -invalidPasswordBlacklistedMessage=Érvénytelen jelszó: a jelszó tiltó listán szerepel. -invalidPasswordConfirmMessage=A jelszavak nem egyeznek meg. -invalidTotpMessage=Érvénytelen hitelesítÅ‘ kód. - -usernameExistsMessage=Ez a felhasználó név már foglalt. -emailExistsMessage=Ez az email cím már foglalt. - -federatedIdentityExistsMessage=A megadott {0} {1} felhasználó már létezik. Kérem lépjen be a Keycloak Fiók KezelÅ‘be, hogy összeköthesse a fiókokat. - -confirmLinkIdpTitle=A felhasználói fiók már létezik -federatedIdentityConfirmLinkMessage=A megadott {0} {1} felhasználó már létezik. Hogyan tovább? -federatedIdentityConfirmReauthenticateMessage=Azonosítsa magát, hogy összeköthesse a felhasználói fiókját a(z) {0}-val/vel. -nestedFirstBrokerFlowMessage=A {0} {1} felhasználó nincs összekötve egyetlen ismert felhasználóval sem. -confirmLinkIdpReviewProfile=Fiók áttekintése -confirmLinkIdpContinue=Hozzáadás meglévÅ‘ fiókhoz - -configureTotpMessage=Fiókja aktiválásához elÅ‘bb be kell állítania egy mobil hitelesítÅ‘ eszközt. -updateProfileMessage=Fiókja aktiválásához elÅ‘bb módosítania kell a felhasználói adatait. -updatePasswordMessage=Fiókja aktiválásához elÅ‘bb le kell cserélnie a jelszavát. -resetPasswordMessage=Cserélje le jelszavát! -verifyEmailMessage=Fiókja aktiválásához elÅ‘bb erÅ‘sítse meg email címét. -linkIdpMessage=Fiókja összekötéséhez elÅ‘bb erÅ‘sítse meg email címét a(z) {0}-val/vel. - -emailSentMessage=Hamarosan email üzenetet küldünk a további tudnivalókról. -emailSendErrorMessage=Az email üzenetet nem tudtuk elküldeni, kérem próbálja meg késÅ‘bb. - -accountUpdatedMessage=A felhasználói fiók adatai megváltoztak. -accountPasswordUpdatedMessage=A jelszava megváltozott. - -delegationCompleteHeader=Sikeres belépés -delegationCompleteMessage=Becsukhatja a böngészÅ‘ ablakot és visszatérhet a konzolos alkalmazásához. -delegationFailedHeader=Sikertelen belépés -delegationFailedMessage=Becsukhatja a böngészÅ‘ ablakot és visszatérhet a konzolos alkalmazásához, ahol újból megpróbálhat a belépni. - -noAccessMessage=Nincs hozzáférés - -invalidPasswordMinLengthMessage=Érvénytelen jelszó: minimum hossz {0}. -invalidPasswordMinLowerCaseCharsMessage=Érvénytelen jelszó: legalább {0} darab kisbetűt kell tartalmaznia. -invalidPasswordMinDigitsMessage=Érvénytelen jelszó: legalább {0} darab számjegyet kell tartalmaznia. -invalidPasswordMinUpperCaseCharsMessage=Érvénytelen jelszó: legalább {0} darab nagybetűt kell tartalmaznia. -invalidPasswordMinSpecialCharsMessage=Érvénytelen jelszó: legalább {0} darab speciális karaktert (pl. #!$@ stb.) kell tartalmaznia. -invalidPasswordNotUsernameMessage=Érvénytelen jelszó: nem lehet azonos a felhasználó névvel. -invalidPasswordRegexPatternMessage=Érvénytelen jelszó: a jelszó nem illeszkedik a megadott reguláris kifejezés mintára. -invalidPasswordHistoryMessage=Érvénytelen jelszó: nem lehet azonos az utolsó {0} darab, korábban alkalmazott jelszóval. -invalidPasswordGenericMessage=Érvénytelen jelszó: az új jelszó nem felel meg a jelszó házirendnek. - -failedToProcessResponseMessage=A válasz üzenet feldolgozása nem sikerült. -httpsRequiredMessage=HTTPS protokoll használata kötelezÅ‘. -realmNotEnabledMessage=A tartomány inaktív. -invalidRequestMessage=Érvénytelen kérés. -failedLogout=A kilépés sikertelen. -unknownLoginRequesterMessage=A belépést kérelmezÅ‘ ismeretlen. -loginRequesterNotEnabledMessage=A belépést kérelmezÅ‘ inaktív. -bearerOnlyMessage=Bearer-only alkalmazások nem kezdeményezhetnek böngészÅ‘ alapú beléptetést. -standardFlowDisabledMessage=Ez a kliens nem kezdeményezhet böngészÅ‘ alapú beléptetést a megadott válasz típussal. A standard belépési eljárás (flow) tiltott a kliensen. -implicitFlowDisabledMessage=Ez a kliens nem kezdeményezhet böngészÅ‘ alapú beléptetést a megadott válasz típussal. Az implicit belépési eljárás (flow) tiltott a kliensen. -invalidRedirectUriMessage=Érvénytelen átirányítási cím (URI) -unsupportedNameIdFormatMessage=Nem támogatott NameIDFormat -invalidRequesterMessage=Érvénytelen kérelmezÅ‘ -registrationNotAllowedMessage=A felhasználó regisztráció tiltott. -resetCredentialNotAllowedMessage=A jelszó visszaállítás tiltott. - -permissionNotApprovedMessage=A jogosultság nincsen jóváhagyva. -noRelayStateInResponseMessage=Nincsen "relay state" a személyazonosság-kezelÅ‘ válaszüzenetében. -insufficientPermissionMessage=Nincs elég jogosultság a fiókok összekötéséhez. -couldNotProceedWithAuthenticationRequestMessage=A személyazonosság-kezelÅ‘ felé indított hitelesítési kérés sikertelen. -couldNotObtainTokenMessage=Nem sikerült tokent igényelni a személyazonosság-kezelÅ‘tÅ‘l. -unexpectedErrorRetrievingTokenMessage=Váratlan hiba történt a személyazonosság-kezelÅ‘ token igénylése közben. -unexpectedErrorHandlingResponseMessage=Váratlan hiba történt a személyazonosság-kezelÅ‘ válaszüzenetének feldolgozása közben. -identityProviderAuthenticationFailedMessage=Nem sikerült a személyazonosság-kezelÅ‘n keresztül intézett hitelesítés. -couldNotSendAuthenticationRequestMessage=Nem sikerült a személyazonosság-kezelÅ‘höz intézett hitelesítés kérés elküldése. -unexpectedErrorHandlingRequestMessage=Váratlan hiba történt a személyazonosság-kezelÅ‘ hitelesítés kérés feldolgozása közben. -invalidAccessCodeMessage=Érvénytelen hozzáférési kód. -sessionNotActiveMessage=A munkamenet inaktív. -invalidCodeMessage=Hiba történt, kérem lépjen be újra az alkalmazásán keresztül. -identityProviderUnexpectedErrorMessage=Váratlan hiba történt a személyazonosság-kezelÅ‘n keresztül intézett hitelesítés során. -identityProviderNotFoundMessage=A megadott azonosítóval személyazonosság-kezelÅ‘ nem található. -identityProviderLinkSuccess=Sikeresen megerÅ‘sítette email címét. Kérem térjen vissza az eredeti böngészÅ‘jébe, és onnan folytassa a belépési eljárást. -staleCodeMessage=Ez a lap már nem érvényes, kérem térjen vissza az alkalmazásába és lépjen be ismét. -realmSupportsNoCredentialsMessage=Ez a tartomány nem támogat jelszó alapú azonosítást. -credentialSetupRequired=Belépés sikertelen, jelszó beállítás szükséges. -identityProviderNotUniqueMessage=Ez a tartomány több személyazonosság-kezelÅ‘t támogat. Nem sikerült meghatározni, hogy melyik személyazonosság-kezelÅ‘t kellene a hitelesítéshez alkalmazni. -emailVerifiedMessage=Az email címét megerÅ‘sítettük. -staleEmailVerificationLink=Az a hivatkozás, amelyikre rákattintott elévült és érvényét vesztette. Talán már korábban megerÅ‘sítette az email címét? -identityProviderAlreadyLinkedMessage=A(z) {0}-tól/tÅ‘l visszakapott összekapcsolt személyazonosság már össze van kötve egy másik felhasználói fiókkal. -confirmAccountLinking=ErÅ‘sítse meg a(z) {0} személyazonosság-kezelÅ‘ {1} fiókjának összekötését a felhasználói fiókjával. -confirmEmailAddressVerification=ErÅ‘sítse meg a(z) {0} email cím érvényességét. -confirmExecutionOfActions=Hajtsa végre a következÅ‘ művelet(ek)et - -backToApplication=« Vissza az alkalmazásba -missingParameterMessage=Hiányzó paraméterek\: {0} -clientNotFoundMessage=A kliens nem található. -clientDisabledMessage=A kliens inaktív. -invalidParameterMessage=Érvénytelen paraméter\: {0} -alreadyLoggedIn=Már korábban belépett. -differentUserAuthenticated=Ebben a munkamenetben már korábban belépett ''{0}'' felhasználó névvel. Kérem elÅ‘bb lépjen ki a munkamenetbÅ‘l. -brokerLinkingSessionExpired=Ãœgynök fiók összekötést kezdeményezett, de az aktuális munkamenete már érvénytelen. -proceedWithAction=» Kattintson ide a folytatáshoz - -requiredAction.CONFIGURE_TOTP=Egyszer használatos jelszó (OTP) beállítása -requiredAction.terms_and_conditions=Felhasználási feltételek -requiredAction.UPDATE_PASSWORD=Jelszó csere -requiredAction.UPDATE_PROFILE=Fiók adatok módosítása -requiredAction.VERIFY_EMAIL=Email cím megerÅ‘sítése - -doX509Login=Beléptetés mint\: -clientCertificate=X509 kliens tanúsítvány\: -noCertificate=[Nincs tanúsítvány] - -pageNotFound=A kért lap nem található -internalServerError=BelsÅ‘ hiba történt - -console-username=Felhasználó név: -console-password=Jelszó: -console-otp=Egyszer használatos jelszó (OTP): -console-new-password=Új jelszó: -console-confirm-password=Jelszó megerÅ‘sítés: -console-update-password=Cserélje le jelszavát. -console-verify-email=Meg kell erÅ‘sítenie az email címét. Email üzenetet küldtünk a(z) {0} email címre amely egy ellenÅ‘rzÅ‘, megerÅ‘sítÅ‘, kódot tartalmaz. Kérem írja be a kapott kódot a lenti beviteli mezÅ‘be. -console-email-code=Email üzenetben kapott ellenÅ‘rzÅ‘ kód: -console-accept-terms=Elfogadja a felhasználási feltételeket? [i/n]: -console-accept=i - -# Openshift messages -openshift.scope.user_info=Felhasználó adatok -openshift.scope.user_check-access=Felhasználó hozzáférés adatok -openshift.scope.user_full=Teljes hozzáférés -openshift.scope.list-projects=Projektek listája - -# SAML authentication -saml.post-form.title=Hitelesítés átirányítás -saml.post-form.message=Ãtirányítás folyamatban, kérem várjon. -saml.post-form.js-disabled=A JavaScript nincs engedélyezve. A folytatás elÅ‘tt ajánlott bekapcsolni a JavaScript támogatást. Kattintson a lenti gombra a folytatáshoz. - -#authenticators -otp-display-name=HitelesítÅ‘ alkalmazás -otp-help-text=Adja meg az ellenÅ‘rzÅ‘ kódot a hitelesítÅ‘ alkalmazásból -password-display-name=Jelszó -password-help-text=Lépjen be a jelszava megadásával -auth-username-form-display-name=Felhasználó név -auth-username-form-help-text=Kezdje meg a belépést a felhasználó nevének megadásával -auth-username-password-form-display-name=Felhasználó név és jelszó -auth-username-password-form-help-text=Lépjen be a felhasználó neve és jelszava megadásával. - -# WebAuthn -webauthn-display-name=Biztonsági kulcs -webauthn-help-text=Használja a biztonsági kulcsát a belépéshez. -webauthn-passwordless-display-name=Biztonsági kulcs -webauthn-passwordless-help-text=Használja a biztonsági kulcsát a jelszómentes belépéshez. -webauthn-login-title=Biztonsági kulcs alapú belépés -webauthn-registration-title=Biztonsági kulcs regisztráció -webauthn-available-authenticators=ElérhetÅ‘ hitelesítÅ‘ alkalmazások - -# WebAuthn Error -webauthn-error-title=Biztonsági kulcs hiba -webauthn-error-registration=Nem sikerült regisztrálni a biztonsági kulcsot. -webauthn-error-api-get=Nem sikerült a hitelesítés a biztonsági kulccsal. -webauthn-error-different-user=Az elÅ‘ször hitelesített felhasználó nem az, akit a biztonsági kulccsal azonosítottunk. -webauthn-error-auth-verification=A biztonsági kulcs alapú hitelesítés eredménye érvénytelen. -webauthn-error-register-verification=A biztonsági kulcs alapú regisztráció eredménye érvénytelen. -webauthn-error-user-not-found=Ismeretlen felhasználót hitelesítettünk a biztonsági kulcs alapján. - -identity-provider-redirector=Összekötés másik személyazonosság-kezelÅ‘vel diff --git a/deps/keycloak/themes/base/login/messages/messages_it.properties b/deps/keycloak/themes/base/login/messages/messages_it.properties deleted file mode 100644 index ca2cbdb5d..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_it.properties +++ /dev/null @@ -1,352 +0,0 @@ -doLogIn=Accedi -doRegister=Registrati -doCancel=Annulla -doSubmit=Invia -doBack=Indietro -doYes=S\u00ec -doNo=No -doContinue=Continua -doIgnore=Ignora -doAccept=Accetta -doDecline=Nega -doForgotPassword=Password dimenticata? -doClickHere=Clicca qui -doImpersonate=Impersona -doTryAgain=Prova ancora -doTryAnotherWay=Prova in un altro modo -kerberosNotConfigured=Kerberos non configurato -kerberosNotConfiguredTitle=Kerberos non configurato -bypassKerberosDetail=Non sei connesso via Kerberos o il tuo browser non supporta l''autenticazione a Kerberos. Fai clic su Continua per accedere in modo alternativo. -kerberosNotSetUp=Kerberos non \u00e8 configurato. Non puoi effettuare l''accesso. -registerTitle=Registrati -loginTitle=Accedi a {0} -loginTitleHtml={0} -impersonateTitle={0} Impersona utente -impersonateTitleHtml={0} Impersona utente -realmChoice=Realm -unknownUser=Utente sconosciuto -loginTotpTitle=Configura autenticazione mobile -loginProfileTitle=Aggiorna profilo -loginTimeout=Stai impiegando troppo tempo per accedere. Il processo di autenticazione verr\u00e0 riavviato. -oauthGrantTitle=Autenticazione concessa -oauthGrantTitleHtml={0} -errorTitle=Siamo spiacenti\u2026 -errorTitleHtml=Siamo spiacenti... -emailVerifyTitle=Verifica l''email -emailForgotTitle=Password dimenticata? -updatePasswordTitle=Aggiorna password -codeSuccessTitle=Codice di successo -codeErrorTitle=Codice di errore\: {0} -displayUnsupported=Tipo display richiesto non supportato -browserRequired=\u00c8 richiesto il browser per il login -browserContinue=\u00c8 richiesto il browser per continuare il login -browserContinuePrompt=Aprire il browser per continuare il login? [y/n]: -browserContinueAnswer=y - - -termsTitle=Termini e condizioni -termsText=

    Termini e condizioni da definire

    -termsPlainText=Termini e condizioni da definire. - -recaptchaFailed=Recaptcha non valido -recaptchaNotConfigured=Il Recaptcha \u00e8 obbligatorio, ma non configurato -consentDenied=Permesso negato. - -noAccount=Nuovo utente? -username=Username -usernameOrEmail=Username o email -firstName=Nome -givenName=Nome -fullName=Nome completo -lastName=Cognome -familyName=Cognome -email=Email -password=Password -passwordConfirm=Conferma password -passwordNew=Nuova Password -passwordNewConfirm=Conferma nuova password -rememberMe=Ricordami -authenticatorCode=Codice One-time -address=Indirizzo -locality=Citt\u00E0 o Localit\u00e0 -street=Via -region=Stato, Provincia, o Regione -postal_code=CAP -country=Paese -emailVerified=Email verificata -gssDelegationCredential=Credenziali delega GSS - -profileScopeConsentText=Profilo utente -emailScopeConsentText=Indirizzo email -addressScopeConsentText=Indirizzo -phoneScopeConsentText=Numero di telefono -offlineAccessScopeConsentText=Accesso offline -samlRoleListScopeConsentText=I miei ruoli -rolesScopeConsentText=Ruoli utente - -restartLoginTooltip=Riavvia login - -loginTotpIntro=Devi impostare un generatore di OTP (password temporanea valida una volta sola) per accedere a questo account -loginTotpStep1=Installa una delle seguenti applicazioni sul tuo dispositivo mobile -loginTotpStep2=Apri l''applicazione e scansiona il codice QR -loginTotpStep3=Scrivi il codice monouso fornito dall''applicazione e premi Invia per completare il setup -loginTotpStep3DeviceName=Fornisci il nome del dispositivo per aiutarti a gestire i dispositivi di autenticazione. -loginTotpManualStep2=Apri l''applicazione e scrivi la chiave -loginTotpManualStep3=Usa le seguenti impostazioni se l''applicazione lo consente -loginTotpUnableToScan=Non riesci a scansionare il codice QR? -loginTotpScanBarcode=Vuoi scansionare il codice QR? -loginCredential=Credenziali -loginOtpOneTime=Codice monouso -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=Cifre -loginTotpInterval=Intervallo -loginTotpCounter=Contatore -loginTotpDeviceName=Nome del dispositivo di autenticazione - -loginTotp.totp=Basato sull''ora -loginTotp.hotp=Basato sul contatore - -loginChooseAuthenticator=Seleziona il tuo metodo di autenticazione - -oauthGrantRequest=Vuoi assegnare questi privilegi di accesso? -inResource=per - -emailVerifyInstruction1=Ti \u00e8 stata inviata una email con le istruzioni per la verifica della tua email. -emailVerifyInstruction2=Non hai ricevuto un codice di verifica nella tua email? -emailVerifyInstruction3=per rinviare la email. - -emailLinkIdpTitle=Collega {0} -emailLinkIdp1=Ti \u00e8 stata inviata una email con le istruzioni per collegare l''account {0} {1} con il tuo account {2}. -emailLinkIdp2=Non hai ricevuto un codice di verifica nella tua email? -emailLinkIdp3=Per rinviare la email. -emailLinkIdp4=Se hai gi\u00e0 verificato l''indirizzo email in un altro browser -emailLinkIdp5=per continuare. - -backToLogin=« Torna al Login - -emailInstruction=Inserisci la tua username o l''indirizzo email e ti manderemo le istruzioni per creare una nuova password. - -copyCodeInstruction=Copia questo codice e incollalo nella tua applicazione: - -pageExpiredTitle=La pagina \u00e8 scaduta -pageExpiredMsg1=Per ripetere il login -pageExpiredMsg2=Per continuare con il login - -personalInfo=Informazioni personali: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Crea realm -role_create-client=Crea client -role_view-realm=Visualizza realm -role_view-users=Visualizza utenti -role_view-applications=Visualizza applicazioni -role_view-clients=Visualizza client -role_view-events=Visualizza eventi -role_view-identity-providers=Visualizza identity provider -role_manage-realm=Gestisci realm -role_manage-users=Gestisci utenti -role_manage-applications=Gestisci applicazioni -role_manage-identity-providers=Gestisci identity provider -role_manage-clients=Gestisci client -role_manage-events=Gestisci eventi -role_view-profile=Visualizza profilo -role_manage-account=Gestisci account -role_manage-account-links=Gestisci i link per l''account -role_read-token=Leggi il token -role_offline-access=Accesso offline -client_account=Account -client_account-console=Console account -client_security-admin-console=Console di amministrazione di sicurezza -client_admin-cli=Admin CLI -client_realm-management=Gestione realm -client_broker=Broker - -requiredFields=Campi obbligatori - -invalidUserMessage=Username o password non validi. -invalidUsernameMessage=Username non valido. -invalidUsernameOrEmailMessage=Username o email non validi. -invalidPasswordMessage=Password non valida. -invalidEmailMessage=Indirizzo email non valido. -accountDisabledMessage=L''account \u00e8 disabilitato, contatta il tuo amministratore. -accountTemporarilyDisabledMessage=L''account \u00e8 temporaneamente disabilitato; contatta il tuo amministratore o prova pi\u00f9 tardi. -expiredCodeMessage=Login scaduto. Riprovare. -expiredActionMessage=Azione scaduta. Continuare adesso con in login. -expiredActionTokenNoSessionMessage=Azione scaduta. -expiredActionTokenSessionExistsMessage=Azione scaduta. Ricominciare. - -missingFirstNameMessage=Inserisci il nome. -missingLastNameMessage=Inserisci il cognome. -missingEmailMessage=Inserisci l''email. -missingUsernameMessage=Inserisci l''username. -missingPasswordMessage=Inserisci la password. -missingTotpMessage=Inserisci il codice di autenticazione. -missingTotpDeviceNameMessage=Inserisci il nome del dispositivo di autenticazione. -notMatchPasswordMessage=Le password non coincidono. - -invalidPasswordExistingMessage=Password esistente non valida. -invalidPasswordBlacklistedMessage=Password non valida: la password non \u00e8 consentita. -invalidPasswordConfirmMessage=La password di conferma non coincide. -invalidTotpMessage=Codice di autenticazione non valido. - -usernameExistsMessage=Username gi\u00e0 esistente. -emailExistsMessage=Email gi\u00e0 esistente. - -federatedIdentityExistsMessage=L''utente con {0} {1} esiste gi\u00e0. Effettua il login nella gestione account per associare l''account. - -confirmLinkIdpTitle=Account gi\u00e0 esistente -federatedIdentityConfirmLinkMessage=L''utente con {0} {1} esiste gi\u00e0. Come vuoi procedere? -federatedIdentityConfirmReauthenticateMessage=Autenticati per associare il tuo account con {0} -confirmLinkIdpReviewProfile=Rivedi profilo -confirmLinkIdpContinue=Aggiungi all''account esistente - -configureTotpMessage=Devi impostare un autenticatore per attivare il tuo account. -updateProfileMessage=Devi aggiornare il tuo profilo utente per attivare il tuo account. -updatePasswordMessage=Devi cambiare la password per attivare il tuo account. -resetPasswordMessage=Devi cambiare la password. -verifyEmailMessage=Devi verificare il tuo indirizzo email per attivare il tuo account. -linkIdpMessage=Devi verificare il tuo indirizzo email per associare il tuo account con {0}. - -emailSentMessage=Riceverai a breve una email con maggiori istruzioni. -emailSendErrorMessage=Invio email fallito, riprova pi\u00f9 tardi. - -accountUpdatedMessage=Il tuo account \u00e8 stato aggiornato. -accountPasswordUpdatedMessage=La tua password \u00e8 stata aggiornata. - -delegationCompleteHeader=Login completato -delegationCompleteMessage=Puoi chiudere questa finestra del browser e tornare alla tua applicazione. -delegationFailedHeader=Login fallito -delegationFailedMessage=Puoi chiudere questa finestra del browser e tornare alla tua applicazione per provare ad accedere nuovamente. - -noAccessMessage=Nessun accesso - -invalidPasswordMinLengthMessage=Password non valida: lunghezza minima {0}. -invalidPasswordMinDigitsMessage=Password non valida: deve contenere almeno {0} numeri. -invalidPasswordMinLowerCaseCharsMessage=Password non valida: deve contenere almeno {0} caratteri minuscoli. -invalidPasswordMinUpperCaseCharsMessage= Password non valida: deve contenere almeno {0} caratteri maiuscoli. -invalidPasswordMinSpecialCharsMessage= Password non valida: deve contenere almeno {0} caratteri speciali. -invalidPasswordNotUsernameMessage=Password non valida: non deve essere uguale alla username. -invalidPasswordRegexPatternMessage=Password non valida: fallito il match con una o pi\u00f9 espressioni regolari. -invalidPasswordHistoryMessage=Password non valida: non deve essere uguale ad una delle ultime {0} password. -invalidPasswordGenericMessage=Password non valida: la nuova password non rispetta le indicazioni previste. - -failedToProcessResponseMessage=Fallimento nell''elaborazione della risposta -httpsRequiredMessage=HTTPS richiesto -realmNotEnabledMessage=Realm non abilitato -invalidRequestMessage=Richiesta non valida -failedLogout=Logout fallito -unknownLoginRequesterMessage=Richiedente di Login non riconosciuto -loginRequesterNotEnabledMessage=Richiedente di Login non abilitato -bearerOnlyMessage=Alle applicazioni di tipo Bearer-only non \u00e8 consentito di effettuare il login tramite browser -standardFlowDisabledMessage=Al client non \u00e8 consentito di effettuare il login tramite browser con questo response_type. Standard flow \u00e8 stato disabilitato per il client. -implicitFlowDisabledMessage=Al client non \u00e8 consentito di effettuare il login tramite browser con questo response_type. Implicit flow \u00e8 stato disabilitato per il client. -invalidRedirectUriMessage=Redirect uri non valido -unsupportedNameIdFormatMessage=NameIDFormat non supportato -invalidRequesterMessage=Richiedente non valido -registrationNotAllowedMessage=Registrazione non permessa -resetCredentialNotAllowedMessage=Reimpostazione della credenziale non permessa - -permissionNotApprovedMessage=Permesso non approvato. -noRelayStateInResponseMessage=Nessun relay state in risposta dall''identity provider. -insufficientPermissionMessage=Permessi insufficienti per associare le identit\u00e0. -couldNotProceedWithAuthenticationRequestMessage=Impossibile procedere con la richiesta di autenticazione all''identity provider -couldNotObtainTokenMessage=Non posso ottenere un token dall''identity provider. -unexpectedErrorRetrievingTokenMessage=Errore inaspettato nel recupero del token dall''identity provider. -unexpectedErrorHandlingResponseMessage=Errore inaspettato nella gestione della risposta dall''identity provider. -identityProviderAuthenticationFailedMessage=Autenticazione fallita. Non posso effettuare l''autenticazione con l''identity provider. -couldNotSendAuthenticationRequestMessage=Impossibile inviare la richiesta di autenticazione all''identity provider. -unexpectedErrorHandlingRequestMessage=Errore inaspettato nella gestione della richiesta di autenticazione all''identity provider. -invalidAccessCodeMessage=Codice di accesso non valido. -sessionNotActiveMessage=Sessione non attiva. -invalidCodeMessage=Si \u00e8 verificato un errore, effettua di nuovo il login nella tua applicazione. -identityProviderUnexpectedErrorMessage=Errore imprevisto durante l''autenticazione con identity provider -identityProviderNotFoundMessage=Non posso trovare un identity provider con l''identificativo. -identityProviderLinkSuccess=Hai verificato con successo la tua email. Torna al tuo browser iniziale e continua da l\u00ec con il login. -staleCodeMessage=Questa pagina non \u00e8 pi\u00f9 valida, torna alla tua applicazione ed effettua nuovamente l''accesso -realmSupportsNoCredentialsMessage=Il realm non supporta nessun tipo di credenziali. -credentialSetupRequired=Impossibile effettuare il login, \u00e8 richiesto il setup delle credenziali. -identityProviderNotUniqueMessage=Il realm supporta pi\u00f9 di un identity provider. Impossibile determinare quale identity provider deve essere utilizzato per autenticarti. -emailVerifiedMessage=Il tuo indirizzo email \u00e8 stato verificato. -staleEmailVerificationLink=Il link che hai cliccato \u00e8 un link scaduto e non \u00e8 pi\u00f9 valido. Forse hai gi\u00e0 verificato la tua email? -identityProviderAlreadyLinkedMessage=L''identit\u00e0 federata restituita dall''identity provider {0} \u00e8 gi\u00e0 associata ad un altro utente. -confirmAccountLinking=Conferma il collegamento per l''account {0} dell''identity provider {1} con il tuo account. -confirmEmailAddressVerification=Conferma la validit\u00e0 dell''indirizzo email {0}. -confirmExecutionOfActions=Esegui la/le seguenti azione/i -locale_it=Italiano - -backToApplication=« Torna all''applicazione -missingParameterMessage=Parametri mancanti\: {0} -clientNotFoundMessage=Client non trovato. -clientDisabledMessage=Client disabilitato. -invalidParameterMessage=Parametro non valido\: {0} -alreadyLoggedIn=Sei gi\u00e0 connesso. -differentUserAuthenticated=Se gi\u00e0 autenticato con l''utente ''{0}'' in questa sessione. Per favore, fai prima il logout. -brokerLinkingSessionExpired=\u00c8 stato richiesta un''associazione a un account broker, ma la sessione corrente non \u00e8 pi\u00f9 valida. -proceedWithAction=» Clicca qui per continuare - -requiredAction.CONFIGURE_TOTP=Configura OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiornamento password -requiredAction.UPDATE_PROFILE=Aggiornamento profilo -requiredAction.VERIFY_EMAIL=Verifica dell''indirizzo email - -doX509Login=Sarai connesso come\: -clientCertificate=Certificato client X509\: -noCertificate=[Nessun certificato] - - -pageNotFound=Pagina non trovata -internalServerError=Si \u00e8 verificato un errore interno del server - -console-username=Username: -console-password=Password: -console-otp=One-time password: -console-new-password=Nuova password: -console-confirm-password=Conferma password: -console-update-password=\u00c8 richiesto l''aggiornamento della tua password. -console-verify-email=Devi verificare il tuo indirizzo email. \u00c8 stata inviata una email a {0} che contiene un codice di verifica. Per favore inserisci il codice nella casella di testo seguente. -console-email-code=Codice email: -console-accept-terms=Accetti i termini? [y/n]: -console-accept=y - -# Openshift messages -openshift.scope.user_info=Informazioni utente -openshift.scope.user_check-access=Informazioni di accesso per l''utente -openshift.scope.user_full=Accesso completo -openshift.scope.list-projects=Elenca i progetti - -# SAML authentication -saml.post-form.title=Reindirizzamento per l''autenticazione -saml.post-form.message=Reindirizzamento, attendere per favore. -saml.post-form.js-disabled=JavaScript \u00e8 disabilitato. \u00c8 fortemente consigliato abilitarlo. Clicca sul bottone seguente per continuare. - -#authenticators -otp-display-name=Applicazione di autenticazione -otp-help-text=Inserire un codice di verifica fornito dall''applicazione di autenticazione. -password-display-name=Password -password-help-text=Accedi inserendo la tua password. -auth-username-form-display-name=Username -auth-username-form-help-text=Inizia il login inserendo la tua username -auth-username-password-form-display-name=Username e password -auth-username-password-form-help-text=Accedi inserendo la tua username e la password. - -# WebAuthn -webauthn-display-name=Chiave di sicurezza -webauthn-help-text=Utilizza la tua chiave di sicurezza per accedere. -webauthn-passwordless-display-name=Chiave di sicurezza -webauthn-passwordless-help-text=Utilizza la tua chiave di sicurezza per l''accesso senza password. -webauthn-login-title=Login con chiave di sicurezza -webauthn-registration-title=Registrazione chiave di sicurezza -webauthn-available-authenticators=Autenticatori disponibili - -# WebAuthn Error -webauthn-error-title=Errore della chiave di sicurezza -webauthn-error-registration=Impossibile registrare la tua chiave di sicurezza. -webauthn-error-api-get=Autenticazione con la chiave di sicurezza fallita. -webauthn-error-different-user=Il primo utente autenticato non \u00e8 quello autenticato tramite la chiave di sicurezza. -webauthn-error-auth-verification=Il risultato dell''autenticazione con la chiave di sicurezza non \u00e8 valido. -webauthn-error-register-verification=Il risultato della registrazione della chiave di sicurezza non \u00e8 valido. -webauthn-error-user-not-found=Utente sconosciuto autenticato con la chiave di sicurezza. - -identity-provider-redirector=Connettiti con un altro identity provider. diff --git a/deps/keycloak/themes/base/login/messages/messages_ja.properties b/deps/keycloak/themes/base/login/messages/messages_ja.properties deleted file mode 100644 index 9e00b3fbc..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_ja.properties +++ /dev/null @@ -1,353 +0,0 @@ -# encoding: utf-8 -doLogIn=ログイン -doRegister=登録 -doCancel=キャンセル -doSubmit=é€ä¿¡ -doBack=戻る -doYes=ã¯ã„ -doNo=ã„ã„㈠-doContinue=続ã‘ã‚‹ -doIgnore=無視 -doAccept=承諾 -doDecline=å´ä¸‹ -doForgotPassword=パスワードをãŠå¿˜ã‚Œã§ã™ã‹? -doClickHere=クリックã—ã¦ãã ã•ã„ -doImpersonate=代ç†ãƒ­ã‚°ã‚¤ãƒ³ -doTryAgain=å†è©¦è¡Œã—ã¦ãã ã•ã„ -doTryAnotherWay=別ã®æ–¹æ³•ã‚’試ã—ã¦ãã ã•ã„ -kerberosNotConfigured=Kerberosã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ -kerberosNotConfiguredTitle=Kerberosã¯è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ -bypassKerberosDetail=Kerberosã§ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ãªã„ã‹ã€ãƒ–ラウザーã§Kerberosログインã®è¨­å®šãŒã•ã‚Œã¦ã„ã¾ã›ã‚“。他ã®æ‰‹æ®µã§ãƒ­ã‚°ã‚¤ãƒ³ã™ã‚‹ã«ã¯ã€Œç¶šã‘ã‚‹ã€ã‚’クリックã—ã¦ãã ã•ã„。 -kerberosNotSetUp=KerberosãŒè¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“。ログインã§ãã¾ã›ã‚“。 -registerTitle=登録 -loginTitle={0}ã«ãƒ­ã‚°ã‚¤ãƒ³ -loginTitleHtml={0} -impersonateTitle={0}ユーザーã®ä»£ç† -impersonateTitleHtml={0}ユーザーã®ä»£ç† -realmChoice=レルム -unknownUser=ä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ãƒ¼ -loginTotpTitle=モãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ— -loginProfileTitle=アカウント情報ã®æ›´æ–° -loginTimeout=ログイン試行ãŒã‚¿ã‚¤ãƒ ã‚¢ã‚¦ãƒˆã—ã¾ã—ãŸã€‚ログインã¯æœ€åˆã‹ã‚‰é–‹å§‹ã•ã‚Œã¾ã™ã€‚ -oauthGrantTitle={0}ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’è¨±å¯ -oauthGrantTitleHtml={0} -errorTitle=申ã—訳ã”ã–ã„ã¾ã›ã‚“ -errorTitleHtml=申ã—訳ã”ã–ã„ã¾ã›ã‚“ -emailVerifyTitle=Eãƒ¡ãƒ¼ãƒ«ç¢ºèª -emailForgotTitle=パスワードをãŠå¿˜ã‚Œã§ã™ã‹? -updatePasswordTitle=パスワードã®æ›´æ–° -codeSuccessTitle=æˆåŠŸã‚³ãƒ¼ãƒ‰ -codeErrorTitle=エラーコード\: {0} -displayUnsupported=è¦æ±‚ã•ã‚ŒãŸè¡¨ç¤ºã‚¿ã‚¤ãƒ—ãŒã‚µãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ã¾ã›ã‚“ -browserRequired=ログインã«å¿…è¦ãªãƒ–ラウザー -browserContinue=ログインを完了ã™ã‚‹ãŸã‚ã«å¿…è¦ãªãƒ–ラウザー -browserContinuePrompt=ブラウザーを開ã„ã¦ãƒ­ã‚°ã‚¤ãƒ³ã‚’続行ã—ã¾ã™ã‹ï¼Ÿ [y/n]: -browserContinueAnswer=y - - -termsTitle=利用è¦ç´„ -termsText=

    利用è¦ç´„ã¯ã“ã“ã§è¨­å®šã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™

    -termsPlainText=定義ã•ã‚Œã‚‹åˆ©ç”¨è¦ç´„。 - -recaptchaFailed=無効ãªreCAPTCHA -recaptchaNotConfigured=reCAPTCHAãŒå¿…é ˆã§ã™ãŒã€è¨­å®šã•ã‚Œã¦ã„ã¾ã›ã‚“ -consentDenied=åŒæ„ãŒæ‹’å¦ã•ã‚Œã¾ã—ãŸã€‚ - -noAccount=æ–°è¦ãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã™ã‹? -username=ユーザーå -usernameOrEmail=ユーザーåã¾ãŸã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ -firstName=å -givenName=å -fullName=æ°å -lastName=姓 -familyName=姓 -email=Eメール -password=パスワード -passwordConfirm=パスワード(確èªï¼‰ -passwordNew=æ–°ã—ã„パスワード -passwordNewConfirm=æ–°ã—ã„パスワード(確èªï¼‰ -rememberMe=ログイン状態ã®ä¿å­˜ -authenticatorCode=ワンタイムコード -address=ä½æ‰€ -street=番地 -locality=å¸‚åŒºç”ºæ‘ -region=都é“府県 -postal_code=éƒµä¾¿ç•ªå· -country=国 -emailVerified=確èªæ¸ˆã¿Eメール -gssDelegationCredential=GSS委譲クレデンシャル - -profileScopeConsentText=ユーザー・プロファイル -emailScopeConsentText=メールアドレス -addressScopeConsentText=アドレス -phoneScopeConsentText=é›»è©±ç•ªå· -offlineAccessScopeConsentText=オフライン・アクセス -samlRoleListScopeConsentText=ロール -rolesScopeConsentText=ユーザーロール - -restartLoginTooltip=ログインをå†é–‹ - -loginTotpIntro=ã“ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã«ã¯ã€ãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ãƒ»ãƒ‘スワード・ジェãƒãƒ¬ãƒ¼ã‚¿ãƒ¼ã‚’設定ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ -loginTotpStep1=次ã®ã„ãšã‚Œã‹ã®ã‚¢ãƒ—リケーションをモãƒã‚¤ãƒ«ã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¾ã™ã€‚ -loginTotpStep2=アプリケーションを開ãã€ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¾ã™ã€‚ -loginTotpStep3=アプリケーションã‹ã‚‰æä¾›ã•ã‚ŒãŸãƒ¯ãƒ³ã‚¿ã‚¤ãƒ ã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã€é€ä¿¡ã‚’クリックã—ã¦ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—を終了ã—ã¾ã™ã€‚ -loginTotpStep3DeviceName=OTPデãƒã‚¤ã‚¹ã®ç®¡ç†ã«å½¹ç«‹ã¤ãƒ‡ãƒã‚¤ã‚¹åを指定ã—ã¾ã™ã€‚ -loginTotpManualStep2=アプリケーションを開ãã€ã‚­ãƒ¼ã‚’入力ã—ã¾ã™ï¼š -loginTotpManualStep3=アプリケーションã§è¨­å®šã§ãã‚‹å ´åˆã¯ã€æ¬¡ã®è¨­å®šå€¤ã‚’使用ã—ã¾ã™ã€‚ -loginTotpUnableToScan=スキャンã§ãã¾ã›ã‚“ã‹ï¼Ÿ -loginTotpScanBarcode=ãƒãƒ¼ã‚³ãƒ¼ãƒ‰ã‚’スキャンã—ã¾ã™ã‹ï¼Ÿ -loginCredential=クレデンシャル -loginOtpOneTime=ワンタイムコード -loginTotpType=タイプ -loginTotpAlgorithm=アルゴリズム -loginTotpDigits=æ¡ -loginTotpInterval=é–“éš” -loginTotpCounter=カウンター -loginTotpDeviceName=デãƒã‚¤ã‚¹å - -loginTotp.totp=時間ベース -loginTotp.hotp=カウンターベース - -loginChooseAuthenticator=ログイン方法をé¸æŠžã—ã¦ãã ã•ã„ - -oauthGrantRequest=ã“れらã®ã‚¢ã‚¯ã‚»ã‚¹æ¨©é™ã‚’付与ã—ã¾ã™ã‹ï¼Ÿ -inResource=in - -emailVerifyInstruction1=メールアドレスを確èªã™ã‚‹æ‰‹é †ã‚’記載ã—ãŸEメールをé€ä¿¡ã—ã¾ã—ãŸã€‚ -emailVerifyInstruction2=Eメールã§ç¢ºèªã‚³ãƒ¼ãƒ‰ã‚’å—ã‘å–ã£ã¦ã„ã¾ã›ã‚“ã‹? -emailVerifyInstruction3=Eメールをå†é€ä¿¡ã—ã¾ã™ã€‚ - -emailLinkIdpTitle=リンク {0} -emailLinkIdp1={0}ã®{1}アカウントをã‚ãªãŸã®{2}アカウントã¨ãƒªãƒ³ã‚¯ã™ã‚‹ãŸã‚ã®æ‰‹é †ã‚’記載ã—ãŸEメールをé€ä¿¡ã—ã¾ã—ãŸã€‚ -emailLinkIdp2=Eメールã§ç¢ºèªã‚³ãƒ¼ãƒ‰ã‚’å—ã‘å–ã£ã¦ã„ã¾ã›ã‚“ã‹? -emailLinkIdp3=Eメールをå†é€ä¿¡ã—ã¾ã™ã€‚ -emailLinkIdp4=別ã®ãƒ–ラウザーã§ãƒ¡ãƒ¼ãƒ«ã‚’確èªæ¸ˆã¿ã®å ´åˆ -emailLinkIdp5=続ã‘ã‚‹ã«ã¯ - -backToLogin=« ログインã«æˆ»ã‚‹ - -emailInstruction=ユーザーåã¾ãŸãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’入力ã—ã¦ãã ã•ã„。新ã—ã„パスワードã®è¨­å®šæ–¹æ³•ã‚’ã”案内ã„ãŸã—ã¾ã™ã€‚ - -copyCodeInstruction=ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’コピーã—ã€ã‚ãªãŸã®ã‚¢ãƒ—リケーションã«ãƒšãƒ¼ã‚¹ãƒˆã—ã¦ãã ã•ã„: - -pageExpiredTitle=ページã®æœ‰åŠ¹æœŸé™ãŒåˆ‡ã‚Œã¦ã„ã¾ã™ -pageExpiredMsg1=ログインプロセスをå†é–‹ã™ã‚‹ã«ã¯ -pageExpiredMsg2=ログイン処ç†ã‚’続行ã™ã‚‹ã«ã¯ - -personalInfo=個人情報: -role_admin=管ç†è€… -role_realm-admin=レルム管ç†è€… -role_create-realm=レルムã®ä½œæˆ -role_create-client=クライアントã®ä½œæˆ -role_view-realm=レルムã®å‚ç…§ -role_view-users=ユーザーã®å‚ç…§ -role_view-applications=アプリケーションã®å‚ç…§ -role_view-clients=クライアントã®å‚ç…§ -role_view-events=イベントã®å‚ç…§ -role_view-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®å‚ç…§ -role_manage-realm=レルムã®ç®¡ç† -role_manage-users=ユーザーã®ç®¡ç† -role_manage-applications=アプリケーションã®ç®¡ç† -role_manage-identity-providers=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã®ç®¡ç† -role_manage-clients=クライアントã®ç®¡ç† -role_manage-events=イベントã®ç®¡ç† -role_view-profile=プロファイルã®å‚ç…§ -role_manage-account=アカウントã®ç®¡ç† -role_manage-account-links=アカウントリンクã®ç®¡ç† -role_read-token=トークンã®å‚ç…§ -role_offline-access=オフライン・アクセス -client_account=アカウント -client_account-console=アカウント・コンソール -client_security-admin-console=セキュリティー管ç†ã‚³ãƒ³ã‚½ãƒ¼ãƒ« -client_admin-cli=管ç†CLI -client_realm-management=ãƒ¬ãƒ«ãƒ ç®¡ç† -client_broker=ブローカー - -requiredFields=必須フィールド - -invalidUserMessage=無効ãªãƒ¦ãƒ¼ã‚¶ãƒ¼åã¾ãŸã¯ãƒ‘スワードã§ã™ã€‚ -invalidUsernameMessage=ユーザーåãŒç„¡åŠ¹ã§ã™ã€‚ -invalidUsernameOrEmailMessage=ユーザーåã¾ãŸã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒç„¡åŠ¹ã§ã™ã€‚ -invalidPasswordMessage=パスワードãŒç„¡åŠ¹ã§ã™ã€‚ -invalidEmailMessage=無効ãªãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã§ã™ã€‚ -accountDisabledMessage=アカウントãŒç„¡åŠ¹ã§ã™ã€‚管ç†è€…ã«é€£çµ¡ã—ã¦ãã ã•ã„。 -accountTemporarilyDisabledMessage=アカウントãŒä¸€æ™‚çš„ã«ç„¡åŠ¹ã§ã™ã€‚管ç†è€…ã«é€£çµ¡ã™ã‚‹ã‹ã€ã—ã°ã‚‰ã時間をãŠã„ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 -expiredCodeMessage=ログイン・タイムアウトãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 -expiredActionMessage=アクションã¯æœŸé™åˆ‡ã‚Œã§ã™ã€‚今ã™ãログインã—ã¦ãã ã•ã„。 -expiredActionTokenNoSessionMessage=アクションã¯æœŸé™åˆ‡ã‚Œã§ã™ã€‚ -expiredActionTokenSessionExistsMessage=アクションã¯æœŸé™åˆ‡ã‚Œã§ã™ã€‚ã‚‚ã†ä¸€åº¦ã‚„ã‚Šç›´ã—ã¦ãã ã•ã„。 - -missingFirstNameMessage=åを指定ã—ã¦ãã ã•ã„。 -missingLastNameMessage=姓を指定ã—ã¦ãã ã•ã„。 -missingEmailMessage=Eメールを指定ã—ã¦ãã ã•ã„。 -missingUsernameMessage=ユーザーåを指定ã—ã¦ãã ã•ã„。 -missingPasswordMessage=パスワードを指定ã—ã¦ãã ã•ã„。 -missingTotpMessage=オーセンティケーター・コードを指定ã—ã¦ãã ã•ã„。 -missingTotpDeviceNameMessage=デãƒã‚¤ã‚¹åを指定ã—ã¦ãã ã•ã„。 -notMatchPasswordMessage=パスワードãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 - -invalidPasswordExistingMessage=既存ã®ãƒ‘スワードãŒä¸æ­£ã§ã™ã€‚ -invalidPasswordBlacklistedMessage=無効ãªãƒ‘スワード: パスワードãŒãƒ–ラックリストã«å«ã¾ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordConfirmMessage=パスワード確èªãŒä¸€è‡´ã—ã¦ã„ã¾ã›ã‚“。 -invalidTotpMessage=無効ãªã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ãƒ»ã‚³ãƒ¼ãƒ‰ã§ã™ã€‚ - -usernameExistsMessage=æ—¢ã«å­˜åœ¨ã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼åã§ã™ã€‚ -emailExistsMessage=æ—¢ã«å­˜åœ¨ã™ã‚‹Eメールã§ã™ã€‚ - -federatedIdentityExistsMessage={0}{1}ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚ãã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’リンクã™ã‚‹ã«ã¯ã‚¢ã‚«ã‚¦ãƒ³ãƒˆç®¡ç†ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 - -confirmLinkIdpTitle=æ—¢ã«å­˜åœ¨ã™ã‚‹ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã§ã™ã€‚ -federatedIdentityConfirmLinkMessage={0}{1}ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯æ—¢ã«å­˜åœ¨ã—ã¾ã™ã€‚継続ã—ã¾ã™ã‹? -federatedIdentityConfirmReauthenticateMessage={1}ã§ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã‚’リンクã™ã‚‹ãŸã‚ã«{0}ã¨ã—ã¦èªè¨¼ã—ã¾ã™ -nestedFirstBrokerFlowMessage={0}ユーザー{1}ã¯æ—¢çŸ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。 -confirmLinkIdpReviewProfile=プロファイルã®ç¢ºèª -confirmLinkIdpContinue=既存ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã«è¿½åŠ ã™ã‚‹ - -configureTotpMessage=アカウントを有効ã«ã™ã‚‹ã«ã¯ãƒ¢ãƒã‚¤ãƒ«ãƒ»ã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒå¿…è¦ã§ã™ã€‚ -updateProfileMessage=アカウントを有効ã«ã™ã‚‹ã«ã¯ãƒ¦ãƒ¼ã‚¶ãƒ¼ãƒ»ãƒ—ロファイルã®æ›´æ–°ãŒå¿…è¦ã§ã™ã€‚ -updatePasswordMessage=アカウントを有効ã«ã™ã‚‹ã«ã¯ãƒ‘スワードã®æ›´æ–°ãŒå¿…è¦ã§ã™ã€‚ -resetPasswordMessage=パスワードを変更ã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -verifyEmailMessage=アカウントを有効ã«ã™ã‚‹ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªãŒå¿…è¦ã§ã™ã€‚ -linkIdpMessage=アカウントを{0}ã¨ãƒªãƒ³ã‚¯ã™ã‚‹ã«ã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã®ç¢ºèªãŒå¿…è¦ã§ã™ã€‚ - -emailSentMessage=詳細ãªæ‰‹é †ã‚’記載ã—ãŸEメールをã™ãã«å—ä¿¡ã—ã¦ãã ã•ã„。 -emailSendErrorMessage=Eメールã®é€ä¿¡ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ã—ã°ã‚‰ã時間をãŠã„ã¦ã‹ã‚‰å†åº¦ãŠè©¦ã—ãã ã•ã„。 - -accountUpdatedMessage=アカウントãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ -accountPasswordUpdatedMessage=パスワードãŒæ›´æ–°ã•ã‚Œã¾ã—ãŸã€‚ - -delegationCompleteHeader=ログインã«æˆåŠŸã—ã¾ã—㟠-delegationCompleteMessage=ã“ã®ãƒ–ラウザーã®ã‚¦ã‚£ãƒ³ãƒ‰ã‚¦ã‚’é–‰ã˜ã¦ã€ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ»ã‚¢ãƒ—リケーションã«æˆ»ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ -delegationFailedHeader=ログインã«å¤±æ•—ã—ã¾ã—㟠-delegationFailedMessage=ã“ã®ãƒ–ラウザー・ウィンドウを閉ã˜ã¦ã‚³ãƒ³ã‚½ãƒ¼ãƒ«ãƒ»ã‚¢ãƒ—リケーションã«æˆ»ã‚Šã€å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã‚’試ã¿ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚ - -noAccessMessage=アクセスãŒã‚ã‚Šã¾ã›ã‚“ - -invalidPasswordMinLengthMessage=無効ãªãƒ‘スワード: 最å°{0}ã®é•·ã•ãŒå¿…è¦ã§ã™ã€‚ -invalidPasswordMinDigitsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®æ•°å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinLowerCaseCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®å°æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinUpperCaseCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®å¤§æ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordMinSpecialCharsMessage=無効ãªãƒ‘スワード: å°‘ãªãã¨ã‚‚{0}文字ã®ç‰¹æ®Šæ–‡å­—ã‚’å«ã‚€å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ -invalidPasswordNotUsernameMessage=無効ãªãƒ‘スワード: ユーザーåã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordRegexPatternMessage=無効ãªãƒ‘スワード: æ­£è¦è¡¨ç¾ãƒ‘ターンã¨ä¸€è‡´ã—ã¾ã›ã‚“。 -invalidPasswordHistoryMessage=無効ãªãƒ‘スワード: 最近ã®{0}パスワードã®ã„ãšã‚Œã‹ã¨åŒã˜ãƒ‘スワードã¯ç¦æ­¢ã•ã‚Œã¦ã„ã¾ã™ã€‚ -invalidPasswordGenericMessage=無効ãªãƒ‘スワード: æ–°ã—ã„パスワードã¯ãƒ‘スワード・ãƒãƒªã‚·ãƒ¼ã¨ä¸€è‡´ã—ã¾ã›ã‚“。 - -failedToProcessResponseMessage=応答を処ç†ã§ãã¾ã›ã‚“ã§ã—㟠-httpsRequiredMessage=HTTPSãŒå¿…é ˆã§ã™ -realmNotEnabledMessage=レルムãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“ -invalidRequestMessage=無効ãªãƒªã‚¯ã‚¨ã‚¹ãƒˆã§ã™ -failedLogout=ログアウトã«å¤±æ•—ã—ã¾ã—㟠-unknownLoginRequesterMessage=ä¸æ˜Žãªãƒ­ã‚°ã‚¤ãƒ³è¦æ±‚å…ƒã§ã™ -loginRequesterNotEnabledMessage=ログインè¦æ±‚å…ƒã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“ -bearerOnlyMessage=bearer-onlyã®ã‚¢ãƒ—リケーションã¯ãƒ–ラウザー・ログインを開始ã™ã‚‹ã“ã¨ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“ -standardFlowDisabledMessage=与ãˆã‚‰ã‚ŒãŸresponse_typeã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ–ラウザー・ログインを開始ã™ã‚‹ã“ã¨ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。標準フローã¯ç„¡åŠ¹ã§ã™ã€‚ -implicitFlowDisabledMessage=与ãˆã‚‰ã‚ŒãŸresponse_typeã§ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ãƒ–ラウザー・ログインを開始ã™ã‚‹ã“ã¨ãŒè¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“。インプリシット・フローã¯ç„¡åŠ¹ã§ã™ã€‚ -invalidRedirectUriMessage=無効ãªãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆURIã§ã™ -unsupportedNameIdFormatMessage=サãƒãƒ¼ãƒˆã•ã‚Œã¦ã„ãªã„NameID Formatã§ã™ -invalidRequesterMessage=無効ãªè¦æ±‚å…ƒã§ã™ -registrationNotAllowedMessage=登録ã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“ -resetCredentialNotAllowedMessage=クレデンシャルã®ãƒªã‚»ãƒƒãƒˆã¯è¨±å¯ã•ã‚Œã¦ã„ã¾ã›ã‚“ - -permissionNotApprovedMessage=パーミッションã¯æ‰¿èªã•ã‚Œã¦ã„ã¾ã›ã‚“。 -noRelayStateInResponseMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ã®å¿œç­”ã«RelayStateãŒã‚ã‚Šã¾ã›ã‚“。 -insufficientPermissionMessage=アイデンティティーã«ãƒªãƒ³ã‚¯ã™ã‚‹ã«ã¯ä¸å分ãªãƒ‘ーミッションã§ã™ã€‚ -couldNotProceedWithAuthenticationRequestMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã¸ã®èªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’続行ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -couldNotObtainTokenMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å–å¾—ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -unexpectedErrorRetrievingTokenMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ã®ãƒˆãƒ¼ã‚¯ãƒ³å–å¾—ã§äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ -unexpectedErrorHandlingResponseMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‹ã‚‰ã®å¿œç­”を処ç†ã™ã‚‹éš›ã«äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ -identityProviderAuthenticationFailedMessage=èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸã€‚アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã‚’使用ã—ã¦èªè¨¼ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -couldNotSendAuthenticationRequestMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã«èªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’é€ä¿¡ã™ã‚‹ã“ã¨ãŒã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -unexpectedErrorHandlingRequestMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã¸ã®èªè¨¼ãƒªã‚¯ã‚¨ã‚¹ãƒˆã‚’処ç†ã™ã‚‹éš›ã«äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚ -invalidAccessCodeMessage=無効ãªã‚¢ã‚¯ã‚»ã‚¹ã‚³ãƒ¼ãƒ‰ã§ã™ã€‚ -sessionNotActiveMessage=セッションãŒæœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 -invalidCodeMessage=エラーãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚アプリケーションを介ã—ã¦å†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 -identityProviderUnexpectedErrorMessage=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼ã«ã‚ˆã‚‹èªè¨¼ã®éš›ã«äºˆæœŸã›ã¬ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠-identityProviderNotFoundMessage=該当ã®è­˜åˆ¥å­ã‚’æŒã¤ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚ -identityProviderLinkSuccess=Eメールを正常ã«ç¢ºèªã—ã¾ã—ãŸã€‚å…ƒã®ãƒ–ラウザーã«æˆ»ã£ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 -staleCodeMessage=ã“ã®ãƒšãƒ¼ã‚¸ã¯ã‚‚ã¯ã‚„有効ã§ã¯ã‚ã‚Šã¾ã›ã‚“ã®ã§ã€ã‚¢ãƒ—リケーションã«æˆ»ã‚Šå†åº¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„ -realmSupportsNoCredentialsMessage=レルムã¯ã‚¯ãƒ¬ãƒ‡ãƒ³ã‚·ãƒ£ãƒ«ãƒ»ã‚¿ã‚¤ãƒ—をサãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã›ã‚“。 -credentialSetupRequired=ログインã§ãã¾ã›ã‚“。クレデンシャルã®ã‚»ãƒƒãƒˆã‚¢ãƒƒãƒ—ãŒå¿…è¦ã§ã™ã€‚ -identityProviderNotUniqueMessage=レルムã¯è¤‡æ•°ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã‚’サãƒãƒ¼ãƒˆã—ã¦ã„ã¾ã™ã€‚ã©ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ãŒèªè¨¼ã«ä½¿ç”¨ã•ã‚Œã‚‹ã¹ãã‹åˆ¤æ–­ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -emailVerifiedMessage=メールアドレスãŒç¢ºèªã§ãã¾ã—ãŸã€‚ -staleEmailVerificationLink=クリックã—ãŸãƒªãƒ³ã‚¯ã¯å¤ã„リンクã§ã‚ã‚Šã€æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。ãŠãらãã€ã™ã§ã«ãƒ¡ãƒ¼ãƒ«ã‚’確èªã—ã¦ã„ã¾ã™ã€‚ -identityProviderAlreadyLinkedMessage={0}ã«ã‚ˆã£ã¦è¿”ã•ã‚ŒãŸé€£æºæ¸ˆã¿ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ã¯ã€ã™ã§ã«åˆ¥ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã«ãƒªãƒ³ã‚¯ã•ã‚Œã¦ã„ã¾ã™ã€‚ -confirmAccountLinking=アイデンティティー・プロãƒã‚¤ãƒ€ãƒ¼{1}ã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆ{0}ã¨ã‚ãªãŸã®ã‚¢ã‚«ã‚¦ãƒ³ãƒˆã¨ã®ãƒªãƒ³ã‚¯ã‚’確èªã—ã¦ãã ã•ã„。 -confirmEmailAddressVerification=Eメールアドレス{0}ã®æœ‰åŠ¹æ€§ã‚’確èªã—ã¦ãã ã•ã„。 -confirmExecutionOfActions=次ã®æ“作を実行ã—ã¾ã™ã€‚ - -backToApplication=« アプリケーションã«æˆ»ã‚‹ -missingParameterMessage=ä¸è¶³ãƒ‘ラメーター\: {0} -clientNotFoundMessage=クライアントãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“。 -clientDisabledMessage=クライアントãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚ -invalidParameterMessage=無効ãªãƒ‘ラメーター\: {0} -alreadyLoggedIn=æ—¢ã«ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ã„ã¾ã™ã€‚ -differentUserAuthenticated=ã™ã§ã«ã“ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ç•°ãªã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ¼''{0}''ã¨ã—ã¦èªè¨¼ã•ã‚Œã¦ã„ã¾ã™ã€‚ã¾ãšãƒ­ã‚°ã‚¢ã‚¦ãƒˆã—ã¦ãã ã•ã„。 -brokerLinkingSessionExpired=è¦æ±‚ã•ã‚ŒãŸãƒ–ローカー・アカウントã®ãƒªãƒ³ã‚¯ã¯ã€ç¾åœ¨ã®ã‚»ãƒƒã‚·ãƒ§ãƒ³ã§ã¯æœ‰åŠ¹ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 -proceedWithAction=» 続行ã™ã‚‹ã«ã¯ã“ã“をクリックã—ã¦ãã ã•ã„ - -requiredAction.CONFIGURE_TOTP=OTPã®è¨­å®š -requiredAction.terms_and_conditions=利用è¦ç´„ -requiredAction.UPDATE_PASSWORD=パスワードã®æ›´æ–° -requiredAction.UPDATE_PROFILE=プロファイルã®æ›´æ–° -requiredAction.VERIFY_EMAIL=Eメールã®ç¢ºèª - -doX509Login=次ã®ãƒ¦ãƒ¼ã‚¶ãƒ¼ã¨ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™\: -clientCertificate=X509クライアント証明書\: -noCertificate=[証明書ãªã—] - - -pageNotFound=ページãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ -internalServerError=内部サーãƒãƒ¼ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—㟠- -console-username=ユーザーå: -console-password=パスワード: -console-otp=ワンタイム・パスワード: -console-new-password=æ–°ã—ã„パスワード: -console-confirm-password=パスワードã®ç¢ºèª: -console-update-password=パスワードã®æ›´æ–°ãŒå¿…è¦ã§ã™ã€‚ -console-verify-email=メールアドレスを確èªã™ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚確èªã‚³ãƒ¼ãƒ‰ã‚’å«ã‚€ãƒ¡ãƒ¼ãƒ«ã‚’{0}ã«é€ä¿¡ã—ã¾ã—ãŸã€‚ã“ã®ã‚³ãƒ¼ãƒ‰ã‚’以下ã«å…¥åŠ›ã—ã¦ãã ã•ã„。 -console-email-code=Eメールコード: -console-accept-terms=利用è¦ç´„ã«åŒæ„ã—ã¾ã™ã‹ï¼Ÿ [y/n]: -console-accept=y - -# Openshift messages -openshift.scope.user_info=ユーザー情報 -openshift.scope.user_check-access=ユーザーアクセス情報 -openshift.scope.user_full=フルアクセス -openshift.scope.list-projects=プロジェクトã®ä¸€è¦§è¡¨ç¤º - -# SAML authentication -saml.post-form.title=èªè¨¼ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆ -saml.post-form.message=リダイレクトã—ã¦ã„ã¾ã™ã€‚ãŠå¾…ã¡ãã ã•ã„。 -saml.post-form.js-disabled=JavaScriptãŒç„¡åŠ¹ã«ãªã£ã¦ã„ã¾ã™ã€‚有効ã«ã™ã‚‹ã“ã¨ã‚’å¼·ããŠå‹§ã‚ã—ã¾ã™ã€‚継続ã™ã‚‹ã«ã¯ã€ä¸‹ã®ãƒœã‚¿ãƒ³ã‚’クリックã—ã¦ãã ã•ã„。 - -#authenticators -otp-display-name=オーセンティケーター・アプリケーション -otp-help-text=オーセンティケーター・アプリケーションã‹ã‚‰å–å¾—ã—ãŸç¢ºèªã‚³ãƒ¼ãƒ‰ã‚’入力ã—ã¦ãã ã•ã„。 -password-display-name=パスワード -password-help-text=パスワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¾ã™ã€‚ -auth-username-form-display-name=ユーザーå -auth-username-form-help-text=ユーザーåを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã‚’開始ã—ã¾ã™ -auth-username-password-form-display-name=ユーザーåã¨ãƒ‘スワード -auth-username-password-form-help-text=ユーザーåã¨ãƒ‘スワードを入力ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 - -# WebAuthn -webauthn-display-name=セキュリティーキー -webauthn-help-text=セキュリティーキーを使用ã—ã¦ãƒ­ã‚°ã‚¤ãƒ³ã—ã¦ãã ã•ã„。 -webauthn-passwordless-display-name=セキュリティーキー -webauthn-passwordless-help-text=パスワードレス・ログインã«ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚­ãƒ¼ã‚’使用ã—ã¾ã™ã€‚ -webauthn-login-title=セキュリティーキー・ログイン -webauthn-registration-title=セキュリティーキーã®ç™»éŒ² -webauthn-available-authenticators=利用å¯èƒ½ãªã‚ªãƒ¼ã‚»ãƒ³ãƒ†ã‚£ã‚±ãƒ¼ã‚¿ãƒ¼ - -# WebAuthn Error -webauthn-error-title=セキュリティーキー・エラー -webauthn-error-registration=セキュリティーキーを登録ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚ -webauthn-error-api-get=セキュリティーキーã«ã‚ˆã‚‹èªè¨¼ã«å¤±æ•—ã—ã¾ã—ãŸã€‚ -webauthn-error-different-user=最åˆã«èªè¨¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã¯ã€ã‚»ã‚­ãƒ¥ãƒªãƒ†ã‚£ãƒ¼ã‚­ãƒ¼ã«ã‚ˆã£ã¦èªè¨¼ã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ¼ã§ã¯ã‚ã‚Šã¾ã›ã‚“。 -webauthn-error-auth-verification=セキュリティーキーã®èªè¨¼çµæžœãŒç„¡åŠ¹ã§ã™ã€‚ -webauthn-error-register-verification=セキュリティーキーã®ç™»éŒ²çµæžœãŒç„¡åŠ¹ã§ã™ã€‚ -webauthn-error-user-not-found=セキュリティーキーã§èªè¨¼ã•ã‚ŒãŸä¸æ˜Žãªãƒ¦ãƒ¼ã‚¶ãƒ¼ã€‚ - -identity-provider-redirector=別ã®ã‚¢ã‚¤ãƒ‡ãƒ³ãƒ†ã‚£ãƒ†ã‚£ãƒ¼ãƒ»ãƒ—ロãƒã‚¤ãƒ€ãƒ¼ã¨æŽ¥ç¶šã™ã‚‹ \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/messages/messages_lt.properties b/deps/keycloak/themes/base/login/messages/messages_lt.properties deleted file mode 100644 index 9181b8ea7..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_lt.properties +++ /dev/null @@ -1,216 +0,0 @@ -# encoding: utf-8 -doLogIn=Prisijungti -doRegister=Registruotis -doCancel=AtÅ¡aukti -doSubmit=Patvirtinti -doYes=Taip -doNo=Ne -doContinue=TÄ™sti -doAccept=Patvirtinti -doDecline=AtÅ¡aukti -doForgotPassword=PamirÅ¡ote slaptažodį? -doClickHere=Spauskite Äia -doImpersonate=Apsimesti kaip -kerberosNotConfigured=Kerberos nesukonfigÅ«ruotas -kerberosNotConfiguredTitle=Kerberos nesukonfigÅ«ruotas -bypassKerberosDetail=JÅ«s neprisijungÄ™s per Kerberos arba JÅ«sų narÅ¡yklÄ— nesukonfigÅ«ruota Kerberos prisijungimui. TÄ™skite ir pasirinkite kitÄ… prisijungimo bÅ«dÄ… -kerberosNotSetUp=Kerberos nesukonfigÅ«ruotas. JÅ«s negalite prisijungti. -registerWithTitle=Registruotis su {0} -registerWithTitleHtml={0} -loginTitle=Prisijungti su {0} -loginTitleHtml={0} -impersonateTitle=Apsimesti kaip naudotojas {0} -impersonateTitleHtml=Apsimesti kaip {0} -realmChoice=Sritis -unknownUser=Nežinomas naudotojas -loginTotpTitle=Mobilaus autentifikatoriaus nustatymas -loginProfileTitle=Atnaujinti paskyros informacijÄ… -loginTimeout=Užtrukote per ilgai. Prisijungimo procesas pradedamas iÅ¡ naujo. -oauthGrantTitle=Suteitikti prieigÄ… -oauthGrantTitleHtml={0} -errorTitle=AtsipraÅ¡ome ... -errorTitleHtml=AtsipraÅ¡ome ... -emailVerifyTitle=El. paÅ¡to adreso patvirtinimas -emailForgotTitle=PamirÅ¡ote slaptažodį? -updatePasswordTitle=Atnaujinti slaptažodį -codeSuccessTitle=SÄ—kmÄ— -codeErrorTitle=Klaidos kodas\: {0} - -termsTitle=Naudojimo sÄ…lygos -termsTitleHtml=Naudojimo sÄ…lygos -termsText=

    Naudojimo sÄ…lygos nenurodytos

    - -recaptchaFailed=Recaptcha neteisingas -recaptchaNotConfigured=Reikalingas Recaptcha nesukonfigÅ«ruotas -consentDenied=Prieiga draudžiama. - -noAccount=Dar neturite paskyros? -username=Naudotojo vardas -usernameOrEmail=Naudotojo vardas arba el. paÅ¡to adresas -firstName=Vardas -givenName=Vardas -fullName=PavardÄ— -lastName=PavardÄ— -familyName=PavardÄ— -email=El. paÅ¡tas -password=Slaptažodis -passwordConfirm=Pakartotas slaptažodis -passwordNew=Naujas slaptažodis -passwordNewConfirm=Pakartotas naujas slaptažodis -rememberMe=Prisiminti mane -authenticatorCode=Vienkartinis kodas -address=Adresas -street=GatvÄ— -locality=Miestas arba vietovÄ— -region=Rajonas -postal_code=PaÅ¡to kodas -country=Å alis -emailVerified=El. paÅ¡to adresas patvirtintas -gssDelegationCredential=GSS prisijungimo duomenų delegavimas - -loginTotpStep1=Ä®diekite FreeOTP arba Google Authenticator savo įrenginyje. ProgramÄ—lÄ—s prieinamos Google Play ir Apple App Store. -loginTotpStep2=Atidarykite programÄ—lÄ™ ir nuskenuokite barkodÄ… arba įveskite kodÄ…. -loginTotpStep3=Ä®veskite programÄ—lÄ—je sugeneruotÄ… vienÄ… kartÄ… galiojantį kodÄ… ir paspauskite Saugoti norÄ—dami prisijungti. -loginOtpOneTime=Vienkartinis kodas - -oauthGrantRequest=Ar JÅ«s suteikiate Å¡ias prieigos teises? -inResource=į - -emailVerifyInstruction1=El. paÅ¡tas su instrukcijomis ir patvirtinimo nuoroda nusiųsti į JÅ«sų el. paÅ¡tÄ…. -emailVerifyInstruction2=El. paÅ¡tu negavote patvirtinimo kodo? -emailVerifyInstruction3=pakartotoinai siųsti el. laiÅ¡kÄ…. - -emailLinkIdpTitle=Susieti {0} -emailLinkIdp1=El. paÅ¡to laiÅ¡kas su instrukcijomis susieti {0} paskyrÄ… {1} su {2} buvo nusiųstas. -emailLinkIdp2=Negavote patvirtinimo kodo el. paÅ¡tu? -emailLinkIdp3=pakartotoinai siųsti el. laiÅ¡kÄ…. - -backToLogin=« Grįžti į prisijungimo langÄ… - -emailInstruction=Ä®veskite naudotojo vardÄ… arba slaptažodį ir slaptažodžio pakeitimo instrukcijos bus atsiųstos Jums el. paÅ¡tu - -copyCodeInstruction=Nukopijuokite šį kodÄ… į JÅ«sų programÄ…: - -personalInfo=AsmeninÄ— informacija: -role_admin=Administratorius -role_realm-admin=Srities administravimas -role_create-realm=Kurti sritį -role_create-client=Kurti programÄ… -role_view-realm=PeržiÅ«rÄ—ti sritį -role_view-users=PeržiÅ«rÄ—ti naudotojus -role_view-applications=PeržiÅ«rÄ—ti programas -role_view-clients=PeržiÅ«rÄ—ti klientines programas -role_view-events=PeržiÅ«rÄ—ti įvykių žurnalÄ… -role_view-identity-providers=PeržiÅ«rÄ—ti tapatybÄ—s teikÄ—jus -role_manage-realm=Valdyti sritis -role_manage-users=Valdyti naudotojus -role_manage-applications=Valdyti programas -role_manage-identity-providers=Valdyti tapatybÄ—s teikÄ—jus -role_manage-clients=Valdyti programas -role_manage-events=Valdyti įvykius -role_view-profile=PeržiÅ«rÄ—ti paskyrÄ… -role_manage-account=Valdyti paskyrÄ… -role_read-token=Skaityti prieigos rakÅ¡Ä… -role_offline-access=Darbas neprisijungus -client_account=Paskyra -client_security-admin-console=Saugumo administravimo konsolÄ— -client_admin-cli=Administravimo CLI -client_realm-management=Srities valdymas -client_broker=Tarpininkas - -invalidUserMessage=Neteisingas naudotojo vardas arba slaptažodis. -invalidEmailMessage=Neteisingas el. paÅ¡to adresas. -accountDisabledMessage=Paskyros galiojimas sustabdytas, kreipkitÄ—s į administratorių. -accountTemporarilyDisabledMessage=Paskyros galiojimas laikinai sustabdytas. KreipkitÄ—s į administratorių arba pabandykite vÄ—liau. -expiredCodeMessage=Prisijungimo laikas baigÄ—si. Bandykite dar kartÄ…. - -missingFirstNameMessage=PraÅ¡ome įvesti vardÄ…. -missingLastNameMessage=PraÅ¡ome įvesti pavardÄ™. -missingEmailMessage=PraÅ¡ome įvesti el. paÅ¡to adresÄ…. -missingUsernameMessage=PraÅ¡ome įvesti naudotojo vardÄ…. -missingPasswordMessage=PraÅ¡ome įvesti slaptažodį. -missingTotpMessage=PraÅ¡ome įvesti autentifikacijos kodÄ…. -notMatchPasswordMessage=Slaptažodžiai nesutampa. - -invalidPasswordExistingMessage=Neteisingas dabartinis slaptažodis. -invalidPasswordConfirmMessage=Pakartotas slaptažodis nesutampa. -invalidTotpMessage=Neteisingas autentifikacijos kodas. - -usernameExistsMessage=Toks naudotojas jau egzistuoja. -emailExistsMessage=El. paÅ¡to adresas jau egzistuoja. - -federatedIdentityExistsMessage=Naudotojas {0} {1} jau egzistuoja. PraÅ¡ome prsijungti prie naudotojų valdymo posistemÄ—s paskyrų susiejimui. - -confirmLinkIdpTitle=Paskyra jau egzistuoja -federatedIdentityConfirmLinkMessage=Naudotojas {0} {1} jau egzistuoja. Ar tÄ™sti? -federatedIdentityConfirmReauthenticateMessage=Prisijunkite norÄ—dami susieti paskyrÄ… su {0} -confirmLinkIdpReviewProfile=PeržiÅ«rÄ—ti naudotojo profilio informacijÄ… -confirmLinkIdpContinue=Susieti su egzistuojanÄia paskyra - -configureTotpMessage=Paskyros aktyvavimui Jums reikalingas Mobilus autentifikatorius. -updateProfileMessage=Paskyros aktyvavimui Jums reikia atnaujinti profilio informacijÄ…. -updatePasswordMessage=Paskyros aktyvavimui Jums reikia pakeisti slaptažodį. -verifyEmailMessage=Paskyros aktyvavimui Jums reikia patvirtinti el. paÅ¡to adresÄ…. -linkIdpMessage=El. paÅ¡to adreso susiejimui su JÅ«su paskyra {0} reikalingas patvirtinimas. - -emailSentMessage=Netrukus turÄ—tumÄ—te gauti el. paÅ¡to adresÄ… su instrukcijomis. -emailSendErrorMessage=Klaida siunÄiant el. paÅ¡tÄ…, bandykite vÄ—liau. - -accountUpdatedMessage=Jųsų paskyros informacija atnaujinta. -accountPasswordUpdatedMessage=JÅ«sų slaptažodis pakeistas. - -noAccessMessage=Prieiga negalima - -invalidPasswordMinLengthMessage=Neteisingas slaptažodis: privalomi bent {0} simboliai. -invalidPasswordMinDigitsMessage=Neteisingas slaptažodis: privalomi bent {0} skaitmenys. -invalidPasswordMinLowerCaseCharsMessage=Neteisingas slaptažodis: privalomos bent {0} mažosios raidÄ—s. -invalidPasswordMinUpperCaseCharsMessage=Neteisingas slaptažodis: privalomos bent {0} didžiosios raidÄ—s. -invalidPasswordMinSpecialCharsMessage=Neteisingas slaptažodis: privalomi bent {0} specialÅ«s simboliai. -invalidPasswordNotUsernameMessage=Neteisingas slaptažodis: negali sutapti su naudotojo vardu. -invalidPasswordRegexPatternMessage=Neteisingas slaptažodis: neatitinka regexp taisyklÄ—s. -invalidPasswordHistoryMessage=Neteisingas slaptažodis: negali sutapti su prieÅ¡ tai naudotais {0} slaptažodžiais. - -failedToProcessResponseMessage=Klaida apdorojant atsakymÄ… -httpsRequiredMessage=Privalomas HTTPS -realmNotEnabledMessage=Srities galiojimas iÅ¡jungtas -invalidRequestMessage=Neteisinga užklausa -failedLogout=Nepavyko užbaigti sesijos -unknownLoginRequesterMessage=Nežinomas prisijungimo praÅ¡ytojas -loginRequesterNotEnabledMessage=Prisijungimo praÅ¡ytojo galiojimas iÅ¡jungtas -bearerOnlyMessage=Programos, sukonfigÅ«ruotos tik kaip perdavÄ—jai, negali inicijuoti prisijungimÄ… per narÅ¡yklÄ™. -standardFlowDisabledMessage=Su pateiktu atsakymo tipu prisijungimas per narÅ¡yklÄ™ Å¡iam klientui negalimas. Å iam klientui neįgalinta standartinÄ— seka. -implicitFlowDisabledMessage=Su pateiktu atsakymo tipu prisijungimas per narÅ¡yklÄ™ Å¡iam klientui negalimas. Å iam klientui neįgalinta iÅ¡reikÅ¡tinÄ— seka. -invalidRedirectUriMessage=Neteisinga nukreipimo nuoroda -unsupportedNameIdFormatMessage=Nepalaikomas NameIDFormat -invalidRequesterMessage=Neteisingas praÅ¡ytojas -registrationNotAllowedMessage=Registracija negalima -resetCredentialNotAllowedMessage=Prisijungimo duomenų atkÅ«rimas negalimas - -permissionNotApprovedMessage=Teisį nepatvirtinta. -noRelayStateInResponseMessage=TapatybÄ—s teikÄ—jo atsakyme trÅ«ksta perdavimo bÅ«senos. -insufficientPermissionMessage=TrÅ«ksta teisių tapatybių susiejimui. -couldNotProceedWithAuthenticationRequestMessage=Nepavyksta pradÄ—ti tapatybÄ—s teikÄ—jo autentifikacijos užklausos. -couldNotObtainTokenMessage=Negaunamas prieigos raktas iÅ¡ tapatybÄ—s teikÄ—jo. -unexpectedErrorRetrievingTokenMessage=Prieigos rakÅ¡o gavimo iÅ¡ tapatybÄ—s teikÄ—jo metu įvyko netikÄ—ta klaida. -unexpectedErrorHandlingResponseMessage=TapatybÄ—s teikÄ—jo atsakymo apdorojimo metu įvyko netikÄ—ta klaida. -identityProviderAuthenticationFailedMessage=Autentifikacijos klaida. Nepavyksta autentifikacija su tapatybÄ—s teikÄ—ju. -couldNotSendAuthenticationRequestMessage=TapatybÄ—s teikÄ—jui nepavyksta nusiųsti autentifikacijos užklausos. -unexpectedErrorHandlingRequestMessage=Užklausos tapatybÄ—s teikÄ—jui formavimo metu įvyko netikÄ—ta klaida. -invalidAccessCodeMessage=Neteisingas prieigos kodas. -sessionNotActiveMessage=Sesija neaktyvi. -invalidCodeMessage=Ä®vyko klaida. PraÅ¡ome bandyti prisijungti dar kartÄ…. -identityProviderUnexpectedErrorMessage=Autentifikavimo su iÅ¡oriniu tapatybÄ—s teikÄ—ju metu įvyko netikÄ—ta klaida. -identityProviderNotFoundMessage=Su nurodytu identifikatoriumi nerastas tapatybÄ—s teikÄ—jas. -identityProviderLinkSuccess=JÅ«sų naudotojo paskyra buvo sÄ—kmingai susieta su {0} paskyra {1} . -staleCodeMessage=Å is puslapis nebegalioja. PraÅ¡ome grįžti į programÄ… ir bandyti prisijungti iÅ¡ naujo. -realmSupportsNoCredentialsMessage=Sritis nepalaiko prisijungimų naudojant prisijungimo duomenis. -identityProviderNotUniqueMessage=Sritis palaiko daugiau nei vienÄ… tapatybÄ—s teikÄ—jÄ…. Negalima nustatyti kuris tapatybÄ—s teikÄ—jas turi bÅ«ti naudojamas autentifikacijai. -emailVerifiedMessage=JÅ«sų el. paÅ¡to adresas patvirtintas. -staleEmailVerificationLink=Nuoroda, kuriÄ… paspaudÄ—te nebegalioja? GalbÅ«t JÅ«s jau patvirtinote el. paÅ¡to adresÄ…? - -backToApplication=« Grįžti į programÄ… -missingParameterMessage=Nenurodytas parametras\: {0} -clientNotFoundMessage=Nenurodytas klientas. -clientDisabledMessage=Kliento galiojimas iÅ¡jungtas. -invalidParameterMessage=Neteisingas parametras\: {0} -alreadyLoggedIn=JÅ«s jau esate prisijungÄ™. diff --git a/deps/keycloak/themes/base/login/messages/messages_nl.properties b/deps/keycloak/themes/base/login/messages/messages_nl.properties deleted file mode 100644 index 46c2c027c..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_nl.properties +++ /dev/null @@ -1,294 +0,0 @@ -# encoding: utf-8 -doLogIn=Inloggen -doRegister=Registreer -doCancel=Annuleer -doSubmit=Verzenden -doYes=Ja -doNo=Nee -doContinue=Doorgaan -doIgnore=Negeer -doAccept=Accepteren -doDecline=Afwijzen -doForgotPassword=Wachtwoord vergeten? -doClickHere=Klik hier -doImpersonate=Identiteit overnemen -kerberosNotConfigured=Kerberos is niet geconfigureerd -kerberosNotConfiguredTitle=Kerberos is niet geconfigureerd -bypassKerberosDetail=U bent niet ingelogd via Kerberos of uw browser kan niet met Kerberos inloggen. Klik op 'doorgaan' om via een andere manier in te loggen -kerberosNotSetUp=Kerberos is onjuist geconfigureerd. U kunt niet inloggen. -registerTitle=Registreer -loginTitle=Log in met {0} -loginTitleHtml={0} -impersonateTitle={0} Identiteit overnemen -impersonateTitleHtml={0} Identiteit overnemen -realmChoice=Realm -unknownUser=Onbekende gebruiker -loginTotpTitle=Mobile Authenticator Setup -loginProfileTitle=Update accountinformatie -loginTimeout=U bent te lang bezig geweest met inloggen. Het inlogproces begint opnieuw. -oauthGrantTitle=Verleen Toegang -oauthGrantTitleHtml={0} -errorTitle=Er is een fout opgetreden... -errorTitleHtml=Er is een fout opgetreden... -emailVerifyTitle=E-mailadres-verificatie -emailForgotTitle=Wachtwoord vergeten? -updatePasswordTitle=Wachtwoord updaten -codeSuccessTitle=Succescode -codeErrorTitle=Foutcode: {0} -displayUnsupported=Opgevraagde weergave type is niet ondersteund -browserRequired=Om in te loggen is een browser vereist -browserContinue=Om het loginproces af te ronden is een browser vereist -browserContinuePrompt=Open een browser en ga door met inloggen? [y/n]: -browserContinueAnswer=y - - -termsTitle=Voorwaarden -termsText=

    Gedefinieerde voorwaarden

    -termsPlainText=Voorwaarden - -recaptchaFailed=Ongeldige Recaptcha -recaptchaNotConfigured=Recaptcha is verplicht, maar niet geconfigureerd -consentDenied=Toestemming geweigerd. - -noAccount=Nieuwe gebruiker? -username=Gebruikersnaam -usernameOrEmail=Gebruikersnaam of e-mailadres -firstName=Voornaam -givenName=Voornaam -fullName=Volledige naam -lastName=Achternaam -familyName=Familienaam -email=E-mailadres -password=Wachtwoord -passwordConfirm=Bevestig wachtwoord -passwordNew=Nieuw wachtwoord -passwordNewConfirm=Bevestiging nieuwe wachtwoord -rememberMe=Ingelogd blijven -authenticatorCode=Authenticatiecode -address=Adres -street=Straat -locality=Woonplaats -region=Provincie of regio -postal_code=Postcode -country=Land -emailVerified=E-mailadres geverifieerd -gssDelegationCredential=GSS delegatie Credential - -profileScopeConsentText=Gebruikersprofiel -emailScopeConsentText=E-mailadres -addressScopeConsentText=Adres -phoneScopeConsentText=Telefoonnummer -offlineAccessScopeConsentText=Offline toegang -samlRoleListScopeConsentText=Mijn rollen -rolesScopeConsentText=Gebruikersrollen - -loginTotpIntro=U bent verplicht om tweefactor-authenticatie in te stellen om dit account te kunnen gebruiken -loginTotpStep1=Installeer een van de volgende applicaties op uw mobile telefoon -loginTotpStep2=Open de applicatie en scan de barcode -loginTotpStep3=Voer de eenmalige code die door de applicatie is aangeleverd in en klik op 'Verzenden' om de setup te voltooien -loginTotpManualStep2=Open de applicatie en voer de sleutel in -loginTotpManualStep3=Gebruik de volgende configuratiewaarden (als de applicatie dit ondersteund) -loginTotpUnableToScan=Lukt het scannen niet? -loginTotpScanBarcode=Scan barcode? -loginOtpOneTime=Eenmalige code -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Cijfers -loginTotpInterval=Interval -loginTotpCounter=Teller - -loginTotp.totp=Time-based -loginTotp.hotp=Counter-based - - -oauthGrantRequest=Wilt u deze toegangsrechten verlenen? -inResource=in - -emailVerifyInstruction1=Een e-mail met instructies om uw e-mailadres te verifiëren is zojuist verzonden. -emailVerifyInstruction2=Heeft u geen verificatiecode ontvangen in uw e-mail? -emailVerifyInstruction3=om opnieuw een e-mail te versturen. - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=Er is een e-mail met instructies verzonden om {0} account {1} te koppelen met uw {2} account. -emailLinkIdp2=Heeft u geen verificatiecode in uw e-mail ontvangen? -emailLinkIdp3=om opnieuw een e-mail te versturen. -emailLinkIdp4=Als u deze mail al geverifieerd hebt in een andere browser -emailLinkIdp5=om door te gaan. - -backToLogin=« Terug naar Inloggen - -emailInstruction=Voer uw gebruikersnaam of e-mailadres in en wij sturen u een e-mailbericht met instructies voor het aanmaken van een nieuw wachtwoord. - -copyCodeInstruction=Kopieer deze code en plak deze in uw applicatie: - -pageExpiredTitle=Sessie is verlopen -pageExpiredMsg1=Om het loginproces opnieuw te doen -pageExpiredMsg2=Om door te gaan met het loginproces - -personalInfo=Persoonlijke informatie: -role_admin=Admin -role_realm-admin=Realm beheren -role_create-realm=Realm aanmaken -role_create-client=Client aanmaken -role_view-realm=Bekijk realm -role_view-users=Bekijk gebruikers -role_view-applications=Bekijk applicaties -role_view-clients=Bekijk clients -role_view-events=Bekijk gebeurtenissen -role_view-identity-providers=Bekijk identity providers -role_manage-realm=Beheer realm -role_manage-users=Gebruikers beheren -role_manage-applications=Beheer applicaties -role_manage-identity-providers=Beheer identity providers -role_manage-clients=Beheer clients -role_manage-events=Beheer gebeurtenissen -role_view-profile=Profiel bekijken -role_manage-account=Beheer account -role_manage-account-links=Beheer accountlinks -role_read-token=Token lezen -role_offline-access=Offline toegang -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm-beheer -client_broker=Broker - -invalidUserMessage=Ongeldige gebruikersnaam of wachtwoord. -invalidEmailMessage=Ongeldig e-mailadres. -accountDisabledMessage=Account is uitgeschakeld, neem contact op met beheer. -accountTemporarilyDisabledMessage=Account is tijdelijk uitgeschakeld, neem contact op met beheer of probeer het later opnieuw. -expiredCodeMessage=Logintijd verlopen. Gelieve opnieuw in te loggen. -expiredActionMessage=Actietijd verlopen. Log daarom opnieuw in. -expiredActionTokenNoSessionMessage=Actietijd verlopen. -expiredActionTokenSessionExistsMessage=Actietijd verlopen. Gelieve de actie opnieuw doen. - -missingFirstNameMessage=Voer uw voornaam in. -missingLastNameMessage=Voer uw achternaam in. -missingEmailMessage=Voer uw e-mailadres in. -missingUsernameMessage=Voer uw gebruikersnaam in. -missingPasswordMessage=Voer uw wachtwoord in. -missingTotpMessage=Voer uw authenticatiecode in. -notMatchPasswordMessage=Wachtwoorden komen niet overeen. - -invalidPasswordExistingMessage=Ongeldig bestaand wachtwoord. -invalidPasswordBlacklistedMessage=Ongeldig wachtwoord: wachtwoord is geblacklist. -invalidPasswordConfirmMessage=Wachtwoord komt niet overeen met wachtwoordbevestiging. -invalidTotpMessage=Ongeldige authenticatiecode. - -usernameExistsMessage=Gebruikersnaam bestaat al. -emailExistsMessage=E-mailadres bestaat al. - -federatedIdentityExistsMessage=Gebruiker met {0} {1} bestaat al. Log in met het beheerdersaccount om het account te koppelen. - -confirmLinkIdpTitle=Account bestaat al -federatedIdentityConfirmLinkMessage=Gebruiker met {0} {1} bestaat al. Hoe wilt u doorgaan? -federatedIdentityConfirmReauthenticateMessage=Authenticeer om uw account te koppelen {0} -confirmLinkIdpReviewProfile=Nalopen profiel -confirmLinkIdpContinue=Voeg toe aan bestaande account - -configureTotpMessage=U moet de Mobile Authenticator configuren om uw account te activeren. -updateProfileMessage=U moet uw gebruikersprofiel bijwerken om uw account te activeren. -updatePasswordMessage=U moet uw wachtwoord wijzigen om uw account te activeren. -resetPasswordMessage=U moet uw wachtwoord wijzigen. -verifyEmailMessage=U moet uw e-mailadres verifiëren om uw account te activeren. -linkIdpMessage=U moet uw e-mailadres verifiëren om uw account te koppelen aan {0}. - -emailSentMessage=U ontvangt binnenkort een e-mail met verdere instructies. -emailSendErrorMessage=Het versturen van de e-mail is mislukt, probeer het later opnieuw. - -accountUpdatedMessage=Uw account is gewijzigd. -accountPasswordUpdatedMessage=Uw wachtwoord is gewijzigd. - -delegationCompleteHeader=Login gelukt -delegationCompleteMessage=U mag uw browser sluiten en terug gaan naar uw console applicatie -delegationFailedHeader=Login mislukt -delegationFailedMessage=U mag uw browser sluiten en terug gaan naar uw console applicatie om daar het loginproces nogmaalt te proberen. - -noAccessMessage=Geen toegang - -invalidPasswordMinLengthMessage=Ongeldig wachtwoord, de minimumlengte is {0} karakters. -invalidPasswordMinDigitsMessage=Ongeldig wachtwoord, deze moet minstens {0} cijfers bevatten. -invalidPasswordMinLowerCaseCharsMessage=Ongeldig wachtwoord, deze moet minstens {0} kleine letters bevatten. -invalidPasswordMinUpperCaseCharsMessage=Ongeldig wachtwoord, deze moet minstens {0} hoofdletters bevatten. -invalidPasswordMinSpecialCharsMessage=Ongeldig wachtwoord, deze moet minstens {0} speciale tekens bevatten. -invalidPasswordNotUsernameMessage=Ongeldig wachtwoord, deze mag niet overeen komen met de gebruikersnaam. -invalidPasswordRegexPatternMessage=Ongeldig wachtwoord, deze komt niet overeen met opgegeven reguliere expressie(s). -invalidPasswordHistoryMessage=Ongeldig wachtwoord, deze mag niet overeen komen met een van de laatste {0} wachtwoorden. -invalidPasswordGenericMessage=Ongeldig wachtwoord: het nieuwe wachtwoord voldoet niet aan de opgestelde eisen. - -failedToProcessResponseMessage=Het verwerken van de respons is mislukt -httpsRequiredMessage=HTTPS vereist -realmNotEnabledMessage=Realm niet geactiveerd -invalidRequestMessage=Ongeldige request -failedLogout=Afmelden is mislukt -unknownLoginRequesterMessage=De login requester is onbekend -loginRequesterNotEnabledMessage=De login requester is niet geactiveerd -bearerOnlyMessage=Bearer-only applicaties mogen geen browserlogin initiëren -standardFlowDisabledMessage=Client mag geen browserlogin starten met het opgegeven response_type. Standard flow is uitgeschakeld voor de client. -implicitFlowDisabledMessage=Client mag geen browserlogin starten met opgegeven response_type. Implicit flow is uitgeschakeld voor de klant. -invalidRedirectUriMessage=Ongeldige redirect-URI -unsupportedNameIdFormatMessage=Niet-ondersteunde NameIDFormat -invalidRequesterMessage=Ongeldige requester -registrationNotAllowedMessage=Registratie is niet toegestaan -resetCredentialNotAllowedMessage=Het opnieuw instellen van de aanmeldgegevens is niet toegestaan - -permissionNotApprovedMessage=Recht verworpen. -noRelayStateInResponseMessage=Geen relay state in antwoord van de identity provider. -insufficientPermissionMessage=Onvoldoende rechten om identiteiten te koppelen. -couldNotProceedWithAuthenticationRequestMessage=Het authenticatieverzoek naar de identity provider wordt afgebroken. -couldNotObtainTokenMessage=Kon geen token bemachtigen van de identity provider. -unexpectedErrorRetrievingTokenMessage=Onverwachte fout bij het ophalen van de token van de identity provider. -unexpectedErrorHandlingResponseMessage=Onverwachte fout bij het verwerken van de respons van de identity provider. -identityProviderAuthenticationFailedMessage=Verificatie mislukt. Er kon niet worden geauthenticeerd met de identity provider. -couldNotSendAuthenticationRequestMessage=Kan het authenticatieverzoek niet verzenden naar de identity provider. -unexpectedErrorHandlingRequestMessage=Onverwachte fout bij het verwerken van het authenticatieverzoek naar de identity provider. -invalidAccessCodeMessage=Ongeldige toegangscode. -sessionNotActiveMessage=Sessie inactief. -invalidCodeMessage=Er is een fout opgetreden, probeer nogmaals in te loggen. -identityProviderUnexpectedErrorMessage=Onverwachte fout tijdens de authenticatie met de identity provider -identityProviderNotFoundMessage=Geen identity provider gevonden met deze naam. -identityProviderLinkSuccess=Uw account is met succes gekoppeld aan {0} account {1}. -staleCodeMessage=Deze pagina is verlopen. Keer terug naar uw applicatie om opnieuw in te loggen. -realmSupportsNoCredentialsMessage=Realm ondersteunt geen enkel soort aanmeldgegeven. -identityProviderNotUniqueMessage=Realm ondersteunt meerdere identity providers. Er kon niet bepaald worden welke identity provider er gebruikt zou moeten worden tijdens de authenticatie. -emailVerifiedMessage=Uw e-mailadres is geverifieerd. -staleEmailVerificationLink=De link die u gebruikt is verlopen, wellicht omdat u uw e-mailadres al eerder geverifieerd heeft. -identityProviderAlreadyLinkedMessage=De door {0} teruggegeven gefedereerde identiteit is al aan een andere gebruiker gekoppeld. -confirmAccountLinking=Bevestig dat het account {0} van identity provider {1} overeenkomt met uw account. -confirmEmailAddressVerification=Bevestig dat e-mailadres {0} valide is. -confirmExecutionOfActions=Voer de volgende actie(s) uit - -backToApplication=« Terug naar de applicatie -missingParameterMessage=Missende parameters: {0} -clientNotFoundMessage=Client niet gevonden. -clientDisabledMessage=Client is inactief. -invalidParameterMessage=Ongeldige parameter: {0} -alreadyLoggedIn=U bent al ingelogd. -differentUserAuthenticated=U bent in deze sessie al als de gebruiker "{0}" aangemeld. Log eerst uit. -brokerLinkingSessionExpired=Broker account linking aangevraagd, maar de huidige sessie in verlopen. -proceedWithAction=» Klik hier om verder te gaan - -requiredAction.CONFIGURE_TOTP=Configureer OTP -requiredAction.terms_and_conditions=Voorwaarden -requiredAction.UPDATE_PASSWORD=Update wachtwoord -requiredAction.UPDATE_PROFILE=Update profiel -requiredAction.VERIFY_EMAIL=Verifieer e-mail - -doX509Login=U wordt ingelogd als\: -clientCertificate=X509 client certificate\: -noCertificate=[No Certificate] - - -pageNotFound=Pagina niet gevonden -internalServerError=Er is een interne serverfout opgetreden - -console-username=Gebruikersnaam: -console-password=Wachtwoord: -console-otp=Eenmalige code: -console-new-password=Nieuw wachtwoord: -console-confirm-password=Bevestig wachtwoord: -console-update-password=Een update van uw wachtwoord is verplicht. -console-verify-email=U bent verplicht om uw e-mailadres te verifiëren. Een e-mail met de verificatiecode is naar {0} gestuurd. Voer deze code hieronder in. -console-email-code=E-mail Code: -console-accept-terms=Accepteert u de voorwaarden? [y/n]: -console-accept=y diff --git a/deps/keycloak/themes/base/login/messages/messages_no.properties b/deps/keycloak/themes/base/login/messages/messages_no.properties deleted file mode 100644 index 8f1d4d4c3..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_no.properties +++ /dev/null @@ -1,214 +0,0 @@ -doLogIn=Logg inn -doRegister=Registrer deg -doCancel=Avbryt -doSubmit=Send inn -doYes=Ja -doNo=Nei -doContinue=Fortsett -doAccept=Aksepter -doDecline=Avsl\u00E5 -doForgotPassword=Glemt passord? -doClickHere=Klikk her -doImpersonate=Utgi deg for \u00E5 v\u00E6re en annen bruker -kerberosNotConfigured=Kerberos er ikke konfigurert -kerberosNotConfiguredTitle=Kerberos er ikke konfigurert -bypassKerberosDetail=Enten er du ikke logget inn via Kerberos eller s\u00E5 st\u00F8tter ikke nettleseren innlogging med Kerberos. Vennligst klikk Fortsett for \u00E5 logge inn p\u00E5 andre m\u00E5ter -kerberosNotSetUp=Kerberos er ikke konfigurert. Du kan ikke logge inn. -registerWithTitle=Registrer deg med {0} -registerWithTitleHtml={0} -loginTitle=Logg inn p\u00E5 {0} -loginTitleHtml={0} -impersonateTitle={0} Gi deg ut for \u00E5 v\u00E6re en annen bruker -impersonateTitleHtml={0} Gi deg ut for \u00E5 v\u00E6re en annen bruker -realmChoice=Sikkerhetsdomene -unknownUser=Ukjent bruker -loginTotpTitle=Konfigurer autentifikator for mobil -loginProfileTitle=Oppdater konto -loginTimeout=Du brukte for lang tid p\u00E5 \u00E5 logge inn. Vennligst pr\u00F8v igjen. -oauthGrantTitle=Gi tilgang -oauthGrantTitleHtml={0} -errorTitle=Vi beklager... -errorTitleHtml=Vi beklager ... -emailVerifyTitle=E-postbekreftelse -emailForgotTitle=Glemt passord? -updatePasswordTitle=Oppdater passord -codeSuccessTitle=Suksesskode -codeErrorTitle=Feilkode\: {0} - -termsTitle=Vilk\u00E5r og betingelser -termsTitleHtml=Vilk\u00E5r og betingelser -termsText=

    Vilk\u00E5r og betingelser kommer

    - -recaptchaFailed=Ugyldig Bildebekreftelse -recaptchaNotConfigured=Bildebekreftelse er p\u00E5krevet, men er ikke konfigurert -consentDenied=Samtykke avsl\u00E5tt. - -noAccount=Ny bruker? -username=Brukernavn -usernameOrEmail=Brukernavn eller e-postadresse -firstName=Fornavn -givenName=Fornavn -fullName=Fullstendig navn -lastName=Etternavn -familyName=Etternavn -email=E-postadresse -password=Passord -passwordConfirm=Bekreft passord -passwordNew=Nytt passord -passwordNewConfirm=Bekreft nytt Passord -rememberMe=Husk meg -authenticatorCode=Engangskode -address=Adresse -street=Gate-/veinavn + husnummer -locality=By -region=Fylke -postal_code=Postnummer -country=Land -emailVerified=E-postadresse bekreftet -gssDelegationCredential=GSS legitimasjons-delegering - -loginTotpStep1=Installer FreeOTP eller Google Authenticator p\u00E5 din mobiltelefon. Begge applikasjoner er tilgjengelige p\u00E5 Google Play og Apple App Store. -loginTotpStep2=\u00C5pne applikasjonen og skann strekkoden eller skriv inn koden -loginTotpStep3=Skriv inn engangskoden fra applikasjonen og klikk send inn for \u00E5 fullf\u00F8re -loginOtpOneTime=Engangskode - -oauthGrantRequest=Vil du gi disse tilgangsrettighetene? -inResource=i - -emailVerifyInstruction1=En e-post med instruksjoner for \u00E5 bekrefte din e-postadresse har blitt sendt til deg. -emailVerifyInstruction2=Ikke mottatt en bekreftelseskode i e-posten vi sendte til deg? -emailVerifyInstruction3=for \u00E5 sende e-post p\u00E5 nytt. - -emailLinkIdpTitle=Lenke {0} -emailLinkIdp1=En e-post med instruksjoner for \u00E5 koble {0} konto med din {2} konto har blitt sendt til deg. -emailLinkIdp2=Ikke mottatt en bekreftelseskode i e-posten vi sendte til deg? -emailLinkIdp3=for \u00E5 sende e-post p\u00E5 nytt. - -backToLogin=« Tilbake til innlogging -emailInstruction=Skriv inn e-postadressen din og vi vil sende deg instruksjoner for hvordan du oppretter et nytt passord. - -copyCodeInstruction=Vennligst kopier denne koden og lim den inn i applikasjonen din: - -personalInfo=Personlig informasjon: -role_admin=Administrator -role_realm-admin=Administrator for sikkerhetsdomene -role_create-realm=Opprette sikkerhetsdomene -role_create-client=Opprette klient -role_view-realm=Se sikkerhetsdomene -role_view-users=Se brukere -role_view-applications=Se applikasjoner -role_view-clients=Se klienter -role_view-events=Se hendelser -role_view-identity-providers=Se identitetsleverand\u00F8rer -role_manage-realm=Administrere sikkerhetsdomene -role_manage-users=Administrere brukere -role_manage-applications=Administrere applikasjoner -role_manage-identity-providers=Administrere identitetsleverand\u00F8rer -role_manage-clients=Administrere klienter -role_manage-events=Administrere hendelser -role_view-profile=Se profil -role_manage-account=Administrere konto -role_read-token=Lese token -role_offline-access=Frakoblet tilgang -role_uma_authorization=Skaffe tillatelser -client_account=Konto -client_security-admin-console=Sikkerthetsadministrasjonskonsoll -client_realm-management=Sikkerhetsdomene-administrasjon -client_broker=Broker - -invalidUserMessage=Ugyldig brukernavn eller passord. -invalidEmailMessage=Ugyldig e-postadresse. -accountDisabledMessage=Konto er deaktivert, kontakt administrator. -accountTemporarilyDisabledMessage=Konto er midlertidig deaktivert, kontakt administrator eller pr\u00F8v p\u00E5 nytt senere. -expiredCodeMessage=Login ble tidsavbrutt. Vennligst logg inn p\u00E5 nytt. - -missingFirstNameMessage=Vennligst oppgi fornavn. -missingLastNameMessage=Vennligst oppgi etternavn. -missingEmailMessage=Vennligst oppgi e-postadresse. -missingUsernameMessage=Vennligst oppgi brukernavn. -missingPasswordMessage=Vennligst oppgi passord. -missingTotpMessage=Vennligst oppgi autentiseringskode. -notMatchPasswordMessage=Passordene er ikke like. - -invalidPasswordExistingMessage=Ugyldig eksisterende passord. -invalidPasswordConfirmMessage=Passord er ikke like. -invalidTotpMessage=Ugyldig engangskode. - -usernameExistsMessage=Brukernavnet finnes allerede. -emailExistsMessage=E-post finnes allerede. - -federatedIdentityExistsMessage=Bruker med {0} {1} finnes allerede. Vennligst logg inn p\u00E5 kontoadministratsjon for \u00E5 koble sammen kontoene. - -confirmLinkIdpTitle=Kontoen finnes allerede -federatedIdentityConfirmLinkMessage=Bruker med {0} {1} finnes allerede. Hvordan vil du fortsette? -#federatedIdentityConfirmReauthenticateMessage=Bekreft at du er {0} for \u00E5 koble din konto med {1} -confirmLinkIdpReviewProfile=Se over og bekreft profil -confirmLinkIdpContinue=Legg til eksisterende konto - -configureTotpMessage=Du m\u00E5 sette opp en engangskode-generator for \u00E5 aktivere konto. -updateProfileMessage=Du m\u00E5 oppdatere brukerprofilen din for \u00E5 aktivere konto. -updatePasswordMessage=Du m\u00E5 skifte passord for \u00E5 aktivere kontoen din. -verifyEmailMessage=Du m\u00E5 bekrefte e-postadressen din for \u00E5 aktivere konto. -linkIdpMessage=You need to verify your email address to link your account with {0}. - -emailSentMessage=Du vil straks motta en e-post med ytterlige instruksjoner. -emailSendErrorMessage=Mislyktes \u00E5 sende e-post, vennligst pr\u00F8v igjen senere. - -accountUpdatedMessage=Din konto har blitt oppdatert. -accountPasswordUpdatedMessage=Ditt passord har blitt oppdatert. - -noAccessMessage=Ingen tilgang - -invalidPasswordMinLengthMessage=Ugyldig passord: minimum lengde {0}. -invalidPasswordMinDigitsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} sifre. -invalidPasswordMinLowerCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} sm\u00E5 bokstaver. -invalidPasswordMinUpperCaseCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} store bokstaver. -invalidPasswordMinSpecialCharsMessage=Ugyldig passord: m\u00E5 inneholde minimum {0} spesialtegn. -invalidPasswordNotUsernameMessage=Ugyldig passord: kan ikke v\u00E6re likt brukernavn. -invalidPasswordRegexPatternMessage=Ugyldig passord: tilfredsstiller ikke kravene for passord-m\u00F8nster. -invalidPasswordHistoryMessage=Ugyldig passord: kan ikke v\u00E6re likt noen av de {0} foreg\u00E5ende passordene. - -failedToProcessResponseMessage=Kunne ikke behandle svar -httpsRequiredMessage=HTTPS p\u00E5krevd -realmNotEnabledMessage=Sikkerhetsdomene er ikke aktivert -invalidRequestMessage=Ugyldig foresp\u00F8rsel -failedLogout=Utlogging feilet -unknownLoginRequesterMessage=Ukjent anmoder for innlogging -loginRequesterNotEnabledMessage=Anmoder for innlogging er ikke aktivert -bearerOnlyMessage=Bearer-only applikasjoner har ikke lov til \u00E5 initiere innlogging via nettleser -standardFlowDisabledMessage=Klienten har ikke lov til \u00E5 initiere innlogging via nettleser med gitt response_type. Standard flow er deaktivert for denne klienten. -implicitFlowDisabledMessage=Klienten har ikke lov til \u00E5 initiere innlogging via nettleser med gitt response_type. Implicit flow er deaktivert for denne klienten. -invalidRedirectUriMessage=Ugyldig redirect uri -unsupportedNameIdFormatMessage=NameIDFormat er ikke st\u00F8ttet -invalidRequesterMessage=Ugyldig sender av foresp\u00F8rsel -registrationNotAllowedMessage=Registrering er ikke lov -resetCredentialNotAllowedMessage=Tilbakestilling av innloggingsdata er ikke lov - -permissionNotApprovedMessage=Tillatelse ikke godkjent. -noRelayStateInResponseMessage=Ingen relay state i svar fra identitetsleverand\u00F8r. -insufficientPermissionMessage=Utilstrekkelige rettigheter for \u00E5 koble identiteter. -couldNotProceedWithAuthenticationRequestMessage=Kunne ikke g\u00E5 videre med autentiseringsforesp\u00F8rsel til identitetsleverand\u00F8r. -couldNotObtainTokenMessage=Klarte ikke \u00E5 innhente token fra identitetsleverand\u00F8r. -unexpectedErrorRetrievingTokenMessage=Uventet feil ved henting av token fra identitetsleverand\u00F8r. -unexpectedErrorHandlingResponseMessage=Uventet feil ved h\u00E5ndtering av svar fra identitetsleverand\u00F8r. -identityProviderAuthenticationFailedMessage=Autentisering feilet. Kunne ikke autentisere med identitetsleverand\u00F8r. -couldNotSendAuthenticationRequestMessage=Kunne ikke sende autentiseringsforesp\u00F8rsel til identitetsleverand\u00F8r. -unexpectedErrorHandlingRequestMessage=Uventet feil ved h\u00E5ndtering av autentiseringsforesp\u00F8rsel til identitetsleverand\u00F8r. -invalidAccessCodeMessage=Ugyldig tilgangskode. -sessionNotActiveMessage=Sesjonen er ikke aktiv. -invalidCodeMessage=En feil oppstod, vennligst logg inn p\u00E5 nytt i din applikasjon. -identityProviderUnexpectedErrorMessage=Uventet feil ved autentisering med identitetsleverand\u00F8r -identityProviderNotFoundMessage=Kunne ikke finne en identitetsleverand\u00F8r med identifikatoren. -identityProviderLinkSuccess=Din konto ble suksessfullt koblet med {0} konto {1}. -staleCodeMessage=Denne siden er ikke lenger gyldig. Vennligst g\u00E5 tilbake til applikasjonen din og logg inn p\u00E5 nytt. -realmSupportsNoCredentialsMessage=Sikkerhetsdomene st\u00F8tter ingen legitimasjonstyper. -identityProviderNotUniqueMessage=Sikkerhetsdomene st\u00F8tter flere identitetsleverand\u00F8rer. Kunne ikke avgj\u00F8re hvilken identitetsleverand\u00F8r som burde brukes for autentisering. -emailVerifiedMessage=Din e-postadresse har blitt verifisert. -staleEmailVerificationLink=Lenken du klikket er utg\u00E5tt og er ikke lenger gyldig. Har du kanskje allerede bekreftet e-postadressen din? - -backToApplication=« Tilbake til applikasjonen -missingParameterMessage=Manglende parameter\: {0} -clientNotFoundMessage=Klient ikke funnet. -clientDisabledMessage=Klient deaktivert. -invalidParameterMessage=Ugyldig parameter\: {0} -alreadyLoggedIn=Du er allerede innlogget. diff --git a/deps/keycloak/themes/base/login/messages/messages_pl.properties b/deps/keycloak/themes/base/login/messages/messages_pl.properties deleted file mode 100644 index a754996c0..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_pl.properties +++ /dev/null @@ -1,316 +0,0 @@ -# encoding: UTF-8 -doLogIn=Logowanie -doRegister=Rejestracja -doCancel=Anuluj -doSubmit=Zatwierdź -doBack=Cofnij -doYes=Tak -doNo=Nie -doContinue=Kontynuuj -doIgnore=Ignoruj -doAccept=Akceptuj -doDecline=Odrzuć -doForgotPassword=Nie pamiÄ™tasz hasÅ‚a? -doClickHere=Kliknij tutaj -doImpersonate=Wciel siÄ™ -doTryAgain=Spróbuj ponownie -doTryAnotherWay=Spróbuj innÄ… metodÄ… -kerberosNotConfigured=Kerberos nie jest skonfigurowany -kerberosNotConfiguredTitle=Kerberos nie jest skonfigurowany -bypassKerberosDetail=Albo nie jesteÅ› zalogowany przez Kerberos albo twoja przeglÄ…darka nie jest skonfigurowana do logowania Kerberos. Kliknij kontynuuj by zalogować siÄ™ w inny sposób. -kerberosNotSetUp=Kerberos nie jest skonfigurowany. Nie można siÄ™ zalogować. -registerTitle=Rejestracja -loginTitle=Zaloguj siÄ™ do {0} -loginTitleHtml={0} -impersonateTitle=Wcielenie {0} -impersonateTitleHtml=Wcielenie {0} -realmChoice=Strefa -unknownUser=Nieznany użytkownik -loginTotpTitle=Konfiguracja dla Mobile Authenticator -loginProfileTitle=Zaktualizuj informacje konta -loginTimeout=Zbyt dużo czasu zajęło logowanie. Proces logowania rozpocznie siÄ™ od nowa. -oauthGrantTitle=Przydziel dostÄ™p dla {0} -oauthGrantTitleHtml={0} -errorTitle=Przykro nam... -errorTitleHtml=Przykro nam... -emailVerifyTitle=Weryfikacja e-maila -emailForgotTitle=Nie pamiÄ™tasz hasÅ‚a? -updatePasswordTitle=Aktualizacja hasÅ‚a -codeSuccessTitle=Kod sukcesu -codeErrorTitle=Kod bÅ‚Ä™du\: {0} -displayUnsupported=Żądany typ wyÅ›wietlania jest nieobsÅ‚ugiwany -browserRequired=Do zalogowania wymagana jest przeglÄ…darka -browserContinue=PrzeglÄ…darka jest wymagana by dokoÅ„czyć logowanie -browserContinuePrompt=Otworzyć przeglÄ…darkÄ™ i kontynuować logowanie? [t/n]\: -browserContinueAnswer=t - - -termsTitle=Regulamin -termsText=

    Regulamin, który należy zdefiniować

    -termsPlainText=Regulamin, który należy zdefiniować. - -recaptchaFailed=BÅ‚Ä™dna Recaptcha -recaptchaNotConfigured=Recaptcha jest wymagana, ale nie skonfigurowana -consentDenied=Zgoda odrzucona. - -noAccount=Nie masz konta? -username=Nazwa użytkownika (login) -usernameOrEmail=Nazwa użytkownika lub e-mail (login) -firstName=ImiÄ™ -givenName=Nadane imiÄ™ -fullName=PeÅ‚ne imiÄ™ i nazwisko -lastName=Nazwisko -familyName=Nazwisko rodowe -email=E-mail -password=HasÅ‚o -passwordConfirm=Potwierdź hasÅ‚o -passwordNew=Nowe hasÅ‚o -passwordNewConfirm=Potwierdzenie nowego hasÅ‚a -rememberMe=ZapamiÄ™taj mnie -authenticatorCode=Kod jednorazowy -address=Adres -street=Ulica -locality=Miejscowość -region=Województwo -postal_code=Kod pocztowy -country=PaÅ„stwo -emailVerified=Email zweryfikowany -website=Strona internetowa -phoneNumber=Nr telefonu -phoneNumberVerified=Nr telefonu zweryfikowany -gender=PÅ‚eć -birthday=Data urodzenia -zoneinfo=Strefa czasowa -gssDelegationCredential=Åšwiadectwo przekazania uprawnieÅ„ GSS - -profileScopeConsentText=Profil użytkownika -emailScopeConsentText=Adres email -addressScopeConsentText=Adres -phoneScopeConsentText=Numer telefonu -offlineAccessScopeConsentText=DostÄ™p offline -samlRoleListScopeConsentText=Moje role -rolesScopeConsentText=Role użytkownika - -restartLoginTooltip=Restart logowania - -loginTotpIntro=Aby uzyskać dostÄ™p do tego konta, musisz skonfigurować generator haseÅ‚ jednorazowych -loginTotpStep1=Zainstaluj jednÄ… z nastÄ™pujÄ…cych aplikacji na telefonie komórkowym -loginTotpStep2=Otwórz aplikacjÄ™ i zeskanuj kod kreskowy -loginTotpStep3=Wprowadź jednorazowy kod podany przez aplikacjÄ™ i kliknij PrzeÅ›lij aby zakoÅ„czyć konfiguracjÄ™ -loginTotpManualStep2=Otwórz aplikacjÄ™ i wprowadź klucz -loginTotpManualStep3=Użyj poniższych wartoÅ›ci konfiguracji, jeÅ›li aplikacja pozwala na ich ustawienie -loginTotpUnableToScan=Nie można skanować? -loginTotpScanBarcode=Zeskanować kod paskowy? -loginCredential=PoÅ›wiadczenia -loginOtpOneTime=Kod jednorazowy -loginTotpType=Typ -loginTotpAlgorithm=Algorytm -loginTotpDigits=Cyfry -loginTotpInterval=InterwaÅ‚ -loginTotpCounter=Licznik -loginTotpDeviceName=Nazwa urzÄ…dzenia - -loginTotp.totp=Oparte o czas -loginTotp.hotp=Oparte o licznik - -loginChooseAuthenticator=Wybierz metodÄ™ logowania - -oauthGrantRequest=Czy przyznajesz te uprawnienia dostÄ™pu? -inResource=w - -emailVerifyInstruction1=ZostaÅ‚a wysÅ‚ana do Ciebie wiadomość e-mail z instrukcjami jak zweryfikować swój adres e-mail. -emailVerifyInstruction2=Nie otrzymaÅ‚em kodu weryfikacyjnego w wiadomoÅ›ci e-mail? -emailVerifyInstruction3=aby ponownie wysÅ‚ać wiadomość e-mail. - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=Wiadomość e-mail z instrukcjami, aby powiÄ…zać konto {0} {1} z kontem {2} zostaÅ‚a wysÅ‚ana do Ciebie. -emailLinkIdp2=Nie otrzymaÅ‚em kodu weryfikacyjnego w wiadomoÅ›ci e-mail? -emailLinkIdp3=aby ponownie wysÅ‚ać wiadomość e-mail. -emailLinkIdp4=JeÅ›li już zweryfikowana e-mail w innej przeglÄ…darce -emailLinkIdp5=aby kontynuować. - -backToLogin=« Powrót do logowania - -emailInstruction=Wpisz swój adres e-mail lub nazwÄ™ użytkownika a wyÅ›lemy do Ciebie instrukcje, jak utworzyć nowe hasÅ‚o. - -copyCodeInstruction=ProszÄ™ skopiować ten kod i wklej go do aplikacji\: - -pageExpiredTitle=Strona wygasÅ‚a -pageExpiredMsg1=Aby ponownie uruchomić proces logowania -pageExpiredMsg2=Aby kontynuować proces logowania - -personalInfo=Informacje osobiste\: -role_admin=Admin -role_realm-admin=Strefa Admin -role_create-realm=Utwórz strefÄ™ -role_create-client=Utwórz klienta -role_view-realm=WyÅ›wietl strefÄ™ -role_view-users=WyÅ›wietl użytkowników -role_view-applications=WyÅ›wietl aplikacje -role_view-clients=WyÅ›wietl klientów -role_view-events=WyÅ›wietl zdarzenia -role_view-identity-providers=WyÅ›wietl dostawców tożsamoÅ›ci -role_manage-realm=ZarzÄ…dzaj strefÄ… -role_manage-users=ZarzÄ…dzaj użytkownikami -role_manage-applications=ZarzÄ…dzaj aplikacjami -role_manage-identity-providers=ZarzÄ…dzaj dostawcami tożsamoÅ›ci -role_manage-clients=ZarzÄ…dzaj klientami -role_manage-events=ZarzÄ…dzaj zdarzeniami -role_view-profile=Zobacz profil -role_manage-account=ZarzÄ…dzaj kontem -role_manage-account-links=ZarzÄ…dzanie Å‚Ä…czami konta -role_read-token=Odczytu tokenu -role_offline-access=DostÄ™p offline -client_account=Konto -client_account-console=Konsola konta -client_security-admin-console=Konsola administratora bezpieczeÅ„stwa -client_admin-cli=Admin CLI -client_realm-management=ZarzÄ…dzanie strefÄ… -client_broker=Broker - -requiredFields=Wymagane pola - -invalidUserMessage=NieprawidÅ‚owa nazwa użytkownika lub hasÅ‚o. -invalidUsernameMessage=NieprawidÅ‚owa nazwa użytkownika. -invalidUsernameOrEmailMessage=NieprawidÅ‚owa nazwa użytkownika lub hasÅ‚o. -invalidPasswordMessage=NieprawidÅ‚owe hasÅ‚o. -invalidEmailMessage=NieprawidÅ‚owy adres e-mail. -accountDisabledMessage=Konto jest wyÅ‚Ä…czone, skontaktuj siÄ™ z administratorem. -accountTemporarilyDisabledMessage=Konto jest tymczasowo wyÅ‚Ä…czone, skontaktuj siÄ™ z administratorem lub spróbuj ponownie później. -expiredCodeMessage=Przekroczono limit czasu logowania. ProszÄ™ Zaloguj siÄ™ ponownie. -expiredActionMessage=Akcja wygasÅ‚a. ProszÄ™ kontynuować logowanie. -expiredActionTokenNoSessionMessage=Akcja wygasÅ‚a. -expiredActionTokenSessionExistsMessage=Akcja wygasÅ‚a. ProszÄ™ uruchomić ponownie. - -missingFirstNameMessage=ProszÄ™ podać imiÄ™. -missingLastNameMessage=ProszÄ™ podać nazwisko. -missingEmailMessage=ProszÄ™ podać e-mail. -missingUsernameMessage=ProszÄ™ podać nazwÄ™ użytkownika. -missingPasswordMessage=ProszÄ™ podać hasÅ‚o. -missingTotpMessage=ProszÄ™ podać kod uwierzytelniajÄ…cy. -missingTotpDeviceNameMessage=ProszÄ™ podać nazwÄ™ urzÄ…dzenia. -notMatchPasswordMessage=HasÅ‚a nie sÄ… zgodne. - -invalidPasswordExistingMessage=NieprawidÅ‚owe istniejÄ…ce hasÅ‚o. -invalidPasswordBlacklistedMessage=NieprawidÅ‚owe hasÅ‚o\: hasÅ‚o jest na czarnej liÅ›cie. -invalidPasswordConfirmMessage=Potwierdzenie hasÅ‚a nie pasuje. -invalidTotpMessage=NieprawidÅ‚owy kod uwierzytelnienia. - -usernameExistsMessage=Nazwa użytkownika już istnieje. -emailExistsMessage=Email już istnieje. - -federatedIdentityExistsMessage=Użytkownik z {0} {1} już istnieje. Zaloguj siÄ™ do zarzÄ…dzania kontem aby poÅ‚Ä…czyć konto. - -confirmLinkIdpTitle=Konto już istnieje -federatedIdentityConfirmLinkMessage=Użytkownik z {0} {1} już istnieje. Co chcesz zrobić? -federatedIdentityConfirmReauthenticateMessage=Uwierzytelnij siÄ™ aby poÅ‚Ä…czyć swoje konto z {0} -nestedFirstBrokerFlowMessage=Użytkownik {0} {1} nie jest powiÄ…zany z żadnym znanym użytkownikiem. -confirmLinkIdpReviewProfile=Przejrzyj profil -confirmLinkIdpContinue=Dodaj do istniejÄ…cego konta - -configureTotpMessage=Musisz skonfigurować Mobile Authenticator aby aktywować swoje konto. -updateProfileMessage=Musisz zaktualizować profilu użytkownika aby aktywować swoje konto. -updatePasswordMessage=Musisz zmienić swoje hasÅ‚o aby aktywować swoje konto. -resetPasswordMessage=Musisz zmienić swoje hasÅ‚o. -verifyEmailMessage=Musisz zweryfikować swój adres e-mail aby aktywować swoje konto. -linkIdpMessage=Musisz zweryfikować swój adres e-mail, aby poÅ‚Ä…czyć swoje konto z {0}. - -emailSentMessage=PowinieneÅ› otrzymywać wkrótce pocztÄ™ z dalszymi instrukcjami. -emailSendErrorMessage=Nie można wysÅ‚ać wiadomoÅ›ci e-mail, proszÄ™ spróbować ponownie później. - -accountUpdatedMessage=Twoje konto zostaÅ‚o zaktualizowane. -accountPasswordUpdatedMessage=Twoje hasÅ‚o zostaÅ‚o zaktualizowane. - -delegationCompleteHeader=Logowanie udane -delegationCompleteMessage=Możesz zamknąć okno przeglÄ…darki i przejść wstecz do aplikacji konsoli. -delegationFailedHeader=Logowanie nie powiodÅ‚o siÄ™ -delegationFailedMessage=Możesz zamknąć okno przeglÄ…darki, wrócić do aplikacji konsoli i spróbować zalogować siÄ™ ponownie. - -noAccessMessage=Brak dostÄ™pu - -invalidPasswordMinLengthMessage=NieprawidÅ‚owe hasÅ‚o\: minimalna dÅ‚ugość {0}. -invalidPasswordMinDigitsMessage=NieprawidÅ‚owe hasÅ‚o\: musi zawierać przynajmniej {0} cyfr. -invalidPasswordMinLowerCaseCharsMessage=NieprawidÅ‚owe hasÅ‚o\: musi zawierać co najmniej {0} maÅ‚ych liter. -invalidPasswordMinUpperCaseCharsMessage=NieprawidÅ‚owe hasÅ‚o\: musi zawierać co najmniej {0} wielkich liter. -invalidPasswordMinSpecialCharsMessage=NieprawidÅ‚owe hasÅ‚o\: musi zawierać przynajmniej {0} znaków specjalnych. -invalidPasswordNotUsernameMessage=NieprawidÅ‚owe hasÅ‚o\: nie może być nazwÄ… użytkownika. -invalidPasswordRegexPatternMessage=NieprawidÅ‚owe hasÅ‚o\: brak zgodnoÅ›ci z wyrażeniem regularnym. -invalidPasswordHistoryMessage=NieprawidÅ‚owe hasÅ‚o\: nie może być takie jak {0} ostatnich haseÅ‚. -invalidPasswordGenericMessage=NieprawidÅ‚owe hasÅ‚o\: nowe hasÅ‚o nie jest zgodne z zasadami haseÅ‚. - -failedToProcessResponseMessage=Nie można przetworzyć odpowiedzi -httpsRequiredMessage=Wymagany HTTPS -realmNotEnabledMessage=Strefa nie jest aktywna -invalidRequestMessage=NieprawidÅ‚owe żądanie -failedLogout=Wylogowanie nie powiodÅ‚o siÄ™ -unknownLoginRequesterMessage=Nieznany żądajÄ…cy logowania -loginRequesterNotEnabledMessage=ŻądajÄ…cy logowania nie jest aktywny -bearerOnlyMessage=Klienci bearer-only nie mogÄ… inicjować logowania przez przeglÄ…darkÄ™ -standardFlowDisabledMessage=Klient nie może zainicjować logowania przez przeglÄ…darkÄ™ z podanym response_type. Standardowy przepÅ‚yw jest wyÅ‚Ä…czony dla klienta. -implicitFlowDisabledMessage=Klient nie może zainicjować logowania przez przeglÄ…darkÄ™ z podanym response_type. Niejawny przepÅ‚yw jest wyÅ‚Ä…czony dla klienta. -invalidRedirectUriMessage=NieprawidÅ‚owy uri przekierowania -unsupportedNameIdFormatMessage=NieobsÅ‚ugiwany NameIDFormat -invalidRequesterMessage=NieprawidÅ‚owy żądajÄ…cy -registrationNotAllowedMessage=Rejestracja nie jest dozwolona -resetCredentialNotAllowedMessage=Zresetowanie poÅ›wiadczeÅ„ nie jest dozwolone - -permissionNotApprovedMessage=Uprawnienie nie zatwierdzone. -noRelayStateInResponseMessage=Brak przekazanego stanu w odpowiedzi dostawcy tożsamoÅ›ci. -insufficientPermissionMessage=NiewystarczajÄ…ce uprawnienia do Å‚Ä…czenia tożsamoÅ›ci. -couldNotProceedWithAuthenticationRequestMessage=Nie można kontynuować żądania uwierzytelnienia do dostawcy tożsamoÅ›ci. -couldNotObtainTokenMessage=Nie można uzyskać tokenu od dostawcy tożsamoÅ›ci. -unexpectedErrorRetrievingTokenMessage=Nieoczekiwany bÅ‚Ä…d podczas pobierania tokenu od dostawcy tożsamoÅ›ci. -unexpectedErrorHandlingResponseMessage=Nieoczekiwany bÅ‚Ä…d podczas obsÅ‚ugi odpowiedzi od dostawcy tożsamoÅ›ci. -identityProviderAuthenticationFailedMessage=Uwierzytelnianie nie powiodÅ‚o siÄ™. Nie można uwierzytelnić za pomocÄ… dostawcy tożsamoÅ›ci. -couldNotSendAuthenticationRequestMessage=Nie może wysyÅ‚ać żądania uwierzytelniania do dostawcy tożsamoÅ›ci. -unexpectedErrorHandlingRequestMessage=Nieoczekiwany bÅ‚Ä…d podczas obsÅ‚ugi żądania uwierzytelnienia do dostawcy tożsamoÅ›ci. -invalidAccessCodeMessage=NieprawidÅ‚owy kod dostÄ™pu. -sessionNotActiveMessage=Sesja nie jest aktywna. -invalidCodeMessage=WystÄ…piÅ‚ bÅ‚Ä…d, zaloguj siÄ™ ponownie za poÅ›rednictwem aplikacji. -identityProviderUnexpectedErrorMessage=Nieoczekiwany bÅ‚Ä…d podczas uwierzytelniania u dostawcy tożsamoÅ›ci -identityProviderNotFoundMessage=Nie można odnaleźć dostawcy tożsamoÅ›ci z tym identyfikatorem. -identityProviderLinkSuccess=PomyÅ›lnie zweryfikowano e-mail. Wróć do oryginalnej przeglÄ…darki i tam kontynuuj logowanie. -staleCodeMessage=Ta strona nie jest już ważna, proszÄ™ wrócić do aplikacji i zalogować siÄ™ ponownie -realmSupportsNoCredentialsMessage=Strefa nie obsÅ‚uguje dowolnego typu poÅ›wiadczeÅ„. -identityProviderNotUniqueMessage=Strefa obsÅ‚uguje wielu dostawców tożsamoÅ›ci. Nie można okreÅ›lić dostawcy tożsamoÅ›ci, który powinien być używany do uwierzytelniania. -emailVerifiedMessage=Twój adres e-mail zostaÅ‚ zweryfikowany. -staleEmailVerificationLink=Użyto nieaktualny link stanu, który straciÅ‚ ważność. Może e-mail zostaÅ‚ już zweryfikowany? -identityProviderAlreadyLinkedMessage=Stowarzyszona tożsamość, zwrócona przez {0} jest już poÅ‚Ä…czona z innym użytkownikiem. -confirmAccountLinking=Potwierdź powiÄ…zanie konta {0} dostawcy tożsamoÅ›ci {1} z twoim kontem. -confirmEmailAddressVerification=Potwierdź ważność adresu e-mail {0}. -confirmExecutionOfActions=Wykonaj nastÄ™pujÄ…ce akcje - -backToApplication=« Powrót do aplikacji -missingParameterMessage=BrakujÄ…ce parametry\: {0} -clientNotFoundMessage=Klient nie znaleziony. -clientDisabledMessage=Klient nieaktywny. -invalidParameterMessage=NieprawidÅ‚owy parametr\: {0} -alreadyLoggedIn=JesteÅ› już zalogowany. -differentUserAuthenticated=JesteÅ› już uwierzytelniona/y jako inny użytkownik ''{0}'' w tej sesji. Najpierw siÄ™ wyloguj. -brokerLinkingSessionExpired=Żądano Å‚Ä…czenia kont brokera, ale bieżąca sesja już jest nieważna. -proceedWithAction=» kliknij tutaj, aby przejść - -requiredAction.CONFIGURE_TOTP=Skonfiguruj OTP -requiredAction.terms_and_conditions=Regulamin -requiredAction.UPDATE_PASSWORD=Zaktualizuj hasÅ‚o -requiredAction.UPDATE_PROFILE=Zaktualizuj profil -requiredAction.VERIFY_EMAIL=Zweryfikuj adres e-mail - -doX509Login=Użytkownik bÄ™dzie zalogowany jako\: -clientCertificate=X509 certyfikat klienta\: -noCertificate=[brak certyfikatu] - - -pageNotFound=Nie znaleziono strony -internalServerError=WystÄ…piÅ‚ bÅ‚Ä…d wewnÄ™trzny serwera - -console-username=Nazwa użytkownika\: -console-password=HasÅ‚o\: -console-otp=HasÅ‚o jednorazowe\: -console-new-password=Nowe hasÅ‚o\: -console-confirm-password=Potwierdź hasÅ‚o\: -console-update-password=Aktualizacja hasÅ‚a jest wymagana. -console-verify-email=Musisz zweryfikować swój adres e-mail. Wiadomość e-mail z kodem weryfikacyjnym zostaÅ‚a wysÅ‚ana do {0}. Podaj ten kod poniżej. -console-email-code=Kod z e-mail\: -console-accept-terms=Akceptujesz warunki? [t/n]\: -console-accept=t diff --git a/deps/keycloak/themes/base/login/messages/messages_pt_BR.properties b/deps/keycloak/themes/base/login/messages/messages_pt_BR.properties deleted file mode 100644 index a16a4a16a..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_pt_BR.properties +++ /dev/null @@ -1,380 +0,0 @@ -doLogIn=Entrar -doRegister=Cadastre-se -doCancel=Cancelar -doSubmit=Ok -doBack=Voltar -doYes=Sim -doNo=N\u00E3o -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceitar -doDecline=Rejeitar -doForgotPassword=Esqueceu sua senha? -doClickHere=Clique aqui -doImpersonate=Personificar -doTryAgain=Tente novamente -doTryAnotherWay=Tente outra forma -doConfirmDelete=Confirmar descadastramento -errorDeletingAccount=Falha ao apagar conta -deletingAccountForbidden=Voc\u00ea n\u00e3o tem permiss\u00f5es para apagar a sua pr\u00f3pria conta, entre em contato com um administrador. -kerberosNotConfigured=Kerberos N\u00E3o Configurado -kerberosNotConfiguredTitle=Kerberos N\u00E3o Configurado -bypassKerberosDetail=Ou voc\u00EA n\u00E3o possui uma sess\u00e3o Kerberos ou o seu navegador n\u00E3o est\u00E1 configurado para usar o acesso do Kerberos. Por favor, clique em continuar para fazer o login no atrav\u00E9s de outros meios -kerberosNotSetUp=Kerberos n\u00E3o est\u00E1 configurado. Voc\u00EA n\u00E3o pode acessar a aplica\u00e7\u00e3o. -registerTitle=Registre-se -loginAccountTitle=Entrar na sua conta -loginTitle=Entrar em {0} -loginTitleHtml={0} -impersonateTitle={0} Personificar Usu\u00E1rio -impersonateTitleHtml={0} Personificar Usu\u00E1rio -realmChoice=Dom\u00EDnio -unknownUser=Usu\u00E1rio desconhecido -loginTotpTitle=Configura\u00E7\u00E3o do autenticador m\u00f3vel -loginProfileTitle=Atualizar Informa\u00E7\u00F5es da Conta -loginTimeout=Voc\u00EA demorou muito para entrar. Por favor, recome\u00e7e o processo de login. -oauthGrantTitle=Ceonceder acesso a {0} -oauthGrantTitleHtml={0} -errorTitle=Sentimos muito... -errorTitleHtml=Sentimos muito ... -emailVerifyTitle=Verifica\u00E7\u00E3o de endere\u00e7o de e-mail -emailForgotTitle=Esqueceu sua senha? -updatePasswordTitle=Atualizar senha -codeSuccessTitle=C\u00F3digo de sucesso -codeErrorTitle=C\u00F3digo de erro\: {0} -displayUnsupported=Tipo de exibi\u00E7\u00E3o solicitado n\u00E3o suportado -browserRequired=Navegador necess\u00E1rio para realizar acesso -browserContinue=Navegador necess\u00E1rio para concluir o login -browserContinuePrompt=Abrir navegador e continuar o login? [s/n]: -browserContinueAnswer=s - - -termsTitle=Termos e Condi\u00E7\u00F5es -termsText=

    Termos e condi\u00E7\u00F5es a serem definidos

    -termsPlainText=Termos e condi\u00E7\u00F5es a serem definidos. - -recaptchaFailed=Recaptcha Inv\u00E1lido -recaptchaNotConfigured=O recaptcha \u00E9 necess\u00e1rio, mas n\u00E3o foi configurado -consentDenied=Consentimento negado. - -noAccount=Novo usu\u00E1rio? -username=Nome de usu\u00E1rio -usernameOrEmail=Nome de usu\u00E1rio ou e-mail -firstName=Primeiro nome -givenName=Primeiro nome -fullName=Nome completo -lastName=Sobrenome -familyName=Sobrenome -email=Endere\u00e7o de e-mail -password=Senha -passwordConfirm=Confirme a senha -passwordNew=Nova senha -passwordNewConfirm=Confirma\u00E7\u00E3o de Nova Senha -rememberMe=Mantenha-me conectado -authenticatorCode=C\u00F3digo autenticador -address=Endere\u00E7o -street=Logradouro -locality=Cidade ou localidade -region=Estado -postal_code=CEP -country=Pa\u00EDs -emailVerified=Endere\u00e7o de e-mail verificado -website=P\u00e1gina da web -phoneNumber=N\u00famero de telefone -phoneNumberVerified=N\u00famero de telefone verificado -gender=G\u00eanero -birthday=Data de nascimento -zoneinfo=Zona hor\u00e1ria -gssDelegationCredential=Delega\u00E7\u00E3o de Credenciais GSS -logoutOtherSessions=Sair dos outros dispositivos - -profileScopeConsentText=Perfil de usu\u00E1rio -emailScopeConsentText=Endere\u00E7o de e-mail -addressScopeConsentText=Endere\u00E7o -phoneScopeConsentText=N\u00FAmero de telefone -offlineAccessScopeConsentText=Acesso Offline -samlRoleListScopeConsentText=Meus Perfis de Acesso -rolesScopeConsentText=Perfis de acesso do usu\u00E1rio - -restartLoginTooltip=Reiniciar o login - -loginTotpIntro=Voc\u00EA precisa configurar um gerador de c\u00F3digo de uso \u00FAnico para acessar esta conta -loginTotpStep1=Instale um dos seguintes aplicativos no seu celular: -loginTotpStep2=Abra o aplicativo e escaneie o c\u00f3digo QR: -loginTotpStep3=Digite o c\u00F3digo de uso \u00FAnico fornecido pelo aplicativo e clique em Ok para concluir a configura\u00E7\u00E3o. -loginTotpStep3DeviceName=Forne\u00E7a um nome de dispositivo para ajud\u00E1-lo a gerenciar seus dispositivos de autentica\u00e7\u00e3o de dois fatores. -loginTotpManualStep2=Abra o aplicativo e digite a chave: -loginTotpManualStep3=Use os seguintes valores de configura\u00E7\u00E3o se o aplicativo permitir defini-los: -loginTotpUnableToScan=N\u00E3o foi poss\u00EDvel ler o c\u00f3digo QR? -loginTotpScanBarcode=Escanear c\u00f3digo QR? -loginCredential=Credencial -loginOtpOneTime=C\u00F3digo de uso \u00fanico -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=D\u00EDgitos -loginTotpInterval=Intervalo -loginTotpCounter=Contador -loginTotpDeviceName=Nome do dispositivo - -loginTotp.totp=Baseado em tempo -loginTotp.hotp=Baseado em contador - -loginChooseAuthenticator=Selecione o m\u00E9todo de login - -oauthGrantRequest=Voc\u00EA concede esses privil\u00E9gios de acesso? -inResource=em - -emailVerifyInstruction1=Um e-mail com instru\u00E7\u00F5es para verificar o seu endere\u00E7o de e-mail foi enviado para voc\u00EA. -emailVerifyInstruction2=N\u00E3o recebeu um c\u00F3digo de verifica\u00E7\u00E3o em seu e-mail? -emailVerifyInstruction3=para reenviar o e-mail. - -emailLinkIdpTitle=Vincular {0} -emailLinkIdp1=Um e-mail com instru\u00E7\u00F5es para vincular a conta {0} {1} com sua conta {2} foi enviado para voc\u00EA. -emailLinkIdp2=N\u00E3o recebeu um c\u00F3digo de verifica\u00E7\u00E3o no e-mail? -emailLinkIdp3=para reenviar o e-mail. -emailLinkIdp4=Se voc\u00EA j\u00E1 verificou o email em outro navegador -emailLinkIdp5=para continuar. - -backToLogin=« Voltar ao Login - -emailInstruction=Digite seu nome de usu\u00E1rio ou endere\u00E7o de e-mail e n\u00F3s lhe enviaremos instru\u00E7\u00F5es sobre como criar uma nova senha. - -copyCodeInstruction=Por favor, copie o c\u00F3digo e cole-o em seu aplicativo: - -pageExpiredTitle=A p\u00E1gina expirou -pageExpiredMsg1=Para reiniciar o processo de login -pageExpiredMsg2=Para continuar o processo de login - -personalInfo=Informa\u00E7\u00F5es Pessoais: -role_admin=Admininstrador -role_realm-admin=Admininstrador do Dom\u00EDnio -role_create-realm=Criar dom\u00EDnio -role_create-client=Criar cliente -role_view-realm=Visualizar dom\u00EDnio -role_view-users=Visualizar usu\u00E1rios -role_view-applications=Visualizar aplicativos -role_view-clients=Visualizar clientes -role_view-events=Visualizar eventos -role_view-identity-providers=Visualizar provedores de identidade -role_manage-realm=Gerenciar dom\u00EDnio -role_manage-users=Gerenciar usu\u00E1rios -role_manage-applications=Gerenciar aplicativos -role_manage-identity-providers=Gerenciar provedores de identidade -role_manage-clients=Gerenciar clientes -role_manage-events=Gerenciar eventos -role_view-profile=Visualizar perfil -role_manage-account=Gerenciar conta -role_manage-account-links=Gerenciar vincula\u00e7\u00f5es de conta -role_read-token=Ler token -role_offline-access=Acesso offline -client_account=Conta -client_account-console=Console da Conta -client_security-admin-console=Console de Administra\u00E7\u00E3o de Seguran\u00E7a -client_admin-cli=CLI de Administra\u00e7\u00e3o -client_realm-management=Gerenciamento de Dom\u00EDnio -client_broker=Provedor de Identidade - -requiredFields=Campos obrigat\u00F3rios - -invalidUserMessage=Nome de usu\u00E1rio ou senha inv\u00E1lida. -invalidUsernameMessage=Nome de usu\u00E1rio inv\u00E1lido. -invalidUsernameOrEmailMessage=Nome de usu\u00E1rio ou endere\u00e7o de e-mail inv\u00E1lido. -invalidPasswordMessage=Senha inv\u00E1lida. -invalidEmailMessage=Endere\u00e7o de e-mail inv\u00E1lido. -accountDisabledMessage=Conta desativada, por favor, contate um administrador. -accountTemporarilyDisabledMessage=Conta temporariamente indispon\u00EDvel, por favor, contate um administrador ou tente novamente mais tarde. -expiredCodeMessage=Tempo de login expirado. Por favor, fa\u00E7a login novamente. -expiredActionMessage=A\u00E7\u00E3o expirada. Por favor, continue com o login agora. -expiredActionTokenNoSessionMessage=A\u00E7\u00E3o expirada. -expiredActionTokenSessionExistsMessage=A\u00E7\u00E3o expirada. Por favor, comece novamente. - -missingFirstNameMessage=Por favor, informe o primeiro nome. -missingLastNameMessage=Por favor, informe o sobrenome. -missingEmailMessage=Por favor, informe o endere\u00e7o de e-mail. -missingUsernameMessage=Por favor, informe o nome de usu\u00E1rio. -missingPasswordMessage=Por favor, informe a senha. -missingTotpMessage=Por favor, informe o c\u00F3digo de uso \u00fanico. -missingTotpDeviceNameMessage=Por favor, informe o nome do dispositivo. -notMatchPasswordMessage=As senhas n\u00E3o coincidem. - -invalidPasswordExistingMessage=Senha atual inv\u00E1lida. -invalidPasswordBlacklistedMessage=Senha inv\u00E1lida, devido a lista de exclus\u00e3o. -invalidPasswordConfirmMessage=Senha de confirma\u00E7\u00E3o n\u00E3o coincide. -invalidTotpMessage=C\u00F3digo de uso \u00fanico inv\u00E1lido. - -usernameExistsMessage=Nome de usu\u00E1rio j\u00E1 existe. -emailExistsMessage=Endere\u00e7o de e-mail j\u00E1 existe. - -federatedIdentityExistsMessage=Usu\u00E1rio com {0} {1} j\u00E1 existe. Por favor, entre no gerenciamento de conta para vincular a conta. -federatedIdentityUnavailableMessage=Usu\u00e1rio {0} autenticado com o provedor de identidade {1} n\u00e3o existe. Por favor, entre em contato com um administrador. - -confirmLinkIdpTitle=Conta j\u00E1 existente -federatedIdentityConfirmLinkMessage=Usu\u00E1rio com {0} {1} j\u00E1 existe. Como voc\u00EA quer continuar? -federatedIdentityConfirmReauthenticateMessage=Autenticar para vincular sua conta com {0} -nestedFirstBrokerFlowMessage=O usu\u00e1rio {0} {1} n\u00e3o est\u00e1 vinculado a nenhum usu\u00e1rio conhecido. -confirmLinkIdpReviewProfile=Revisar informa\u00E7\u00F5es do perfil -confirmLinkIdpContinue=Vincular \u00E0 conta existente - -configureTotpMessage=Voc\u00EA precisa configurar seu celular com o autenticador Mobile para ativar sua conta. -updateProfileMessage=Voc\u00EA precisa atualizar o seu perfil de usu\u00E1rio para ativar sua conta. -updatePasswordMessage=Voc\u00EA precisa mudar sua senha para ativar sua conta. -resetPasswordMessage=Voc\u00EA precisa mudar sua senha. -verifyEmailMessage=Voc\u00EA precisa verificar o seu endere\u00E7o de e-mail para ativar sua conta. -linkIdpMessage=Voc\u00EA precisa confirmar o seu endere\u00E7o de e-mail para vincular sua conta com {0}. - -emailSentMessage=Voc\u00EA dever\u00E1 receber um e-mail em breve com mais instru\u00E7\u00F5es. -emailSendErrorMessage=Falha ao enviar e-mail, por favor, tente novamente mais tarde. - -accountUpdatedMessage=Sua conta foi atualizada. -accountPasswordUpdatedMessage=Sua senha foi atualizada. - -delegationCompleteHeader=Autentica\u00E7\u00E3o Bem Sucedida -delegationCompleteMessage=Voc\u00ea pode fechar esta janela do navegador e voltar ao seu aplicativo. -delegationFailedHeader=Falha na Autentica\u00E7\u00E3o -delegationFailedMessage=Voc\u00EA pode fechar esta janela do navegador e voltar ao aplicativo e tentar fazer login novamente. - -noAccessMessage=Sem acesso - -invalidPasswordMinLengthMessage=Senha inv\u00E1lida\: deve ter pelo menos {0} caracteres. -invalidPasswordMinDigitsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} n\u00FAmero(s). -invalidPasswordMinLowerCaseCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} letra(s) min\u00FAscula(s). -invalidPasswordMinUpperCaseCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} letra(s) mai\u00FAscula(s). -invalidPasswordMinSpecialCharsMessage=Senha inv\u00E1lida\: deve conter pelo menos {0} caractere(s) especial(is). -invalidPasswordNotUsernameMessage=Senha inv\u00E1lida\: n\u00E3o pode ser igual ao nome de usu\u00E1rio -invalidPasswordNotEmailMessage=Senha inv\u00e1lida: n\u00e3o pode ser igual ao endere\u00e7o de e-mail. -invalidPasswordRegexPatternMessage=Senha inv\u00E1lida\: n\u00E3o corresponde ao(s) padr\u00e3o(\u00f5es) de express\u00E3o regular. -invalidPasswordHistoryMessage=Senha inv\u00E1lida\: n\u00E3o pode ser igual a qualquer uma da(s) \u00FAltima(s) {0} senha(s). -invalidPasswordGenericMessage=Senha inv\u00E1lida: a nova senha n\u00E3o cumpre as pol\u00EDticas de senha. - -failedToProcessResponseMessage=Falha ao processar a resposta -httpsRequiredMessage=HTTPS necess\u00e1rio -realmNotEnabledMessage=Dom\u00EDnio desativado -invalidRequestMessage=Solicita\u00e7\u00e3o inv\u00E1lida -failedLogout=Falha ao sair -unknownLoginRequesterMessage=Solicitante de login desconhecido -loginRequesterNotEnabledMessage=Solicitante de login desativado -bearerOnlyMessage=Aplicativos configurados como Bearer-Only n\u00E3o t\u00eam permiss\u00E3o para iniciar o login pelo navegador -standardFlowDisabledMessage=O cliente n\u00E3o tem permiss\u00E3o para iniciar o login com o response_type informado. O fluxo padr\u00E3o est\u00E1 desabilitado para o cliente. -implicitFlowDisabledMessage=O cliente n\u00E3o tem permiss\u00E3o para iniciar o login com o response_type informado. O fluxo impl\u00EDcito est\u00E1 desabilitado para o cliente. -invalidRedirectUriMessage=URI de redirecionamento inv\u00E1lido -unsupportedNameIdFormatMessage=NameIDFormat n\u00E3o suportado -invalidRequesterMessage=Solicitante inv\u00E1lido -registrationNotAllowedMessage=Cadastro n\u00E3o \u00e9 permitido -resetCredentialNotAllowedMessage=Sem permiss\u00e3o de redefini\u00e7\u00e3o de credenciais - -permissionNotApprovedMessage=Permiss\u00E3o n\u00E3o aprovada. -noRelayStateInResponseMessage=Sem estado de retransmiss\u00E3o na resposta do provedor de identidade. -insufficientPermissionMessage=Permiss\u00F5es insuficientes para vincular identidades. -couldNotProceedWithAuthenticationRequestMessage=N\u00E3o foi poss\u00EDvel proceder com a solicita\u00E7\u00E3o de autentica\u00E7\u00E3o ao provedor de identidade. -couldNotObtainTokenMessage=N\u00E3o foi poss\u00EDvel obter token do provedor de identidade. -unexpectedErrorRetrievingTokenMessage=Erro inesperado ao recuperar token do provedor de identidade. -unexpectedErrorHandlingResponseMessage=Erro inesperado ao tratar a resposta do provedor de identidade. -identityProviderAuthenticationFailedMessage=Falha na autentica\u00E7\u00E3o. N\u00E3o foi poss\u00EDvel autenticar com o provedor de identidade. -couldNotSendAuthenticationRequestMessage=N\u00E3o foi poss\u00EDvel enviar a solicita\u00E7\u00E3o de autentica\u00E7\u00E3o ao provedor de identidade. -unexpectedErrorHandlingRequestMessage=Erro inesperado ao tratar o pedido de autentica\u00E7\u00E3o ao provedor de identidade. -invalidAccessCodeMessage=C\u00F3digo de acesso inv\u00E1lido. -sessionNotActiveMessage=Sess\u00E3o inativa. -invalidCodeMessage=Um erro correu, por favor, fa\u00E7a login novamente atrav\u00E9s da aplica\u00E7\u00E3o. -identityProviderUnexpectedErrorMessage=Erro inesperado durante a autentica\u00E7\u00E3o com o provedor de identidade -identityProviderMissingStateMessage=Par\u00e2metro de estado ausente da resposta do provedor de identidades. -identityProviderNotFoundMessage=N\u00E3o foi poss\u00EDvel encontrar um provedor de identidade com o identificador. -identityProviderLinkSuccess=O seu endere\u00e7o de e-mail foi confirmado com sucesso. Por favor, retorne \u00e0 aba original e continue com o login. -staleCodeMessage=Esta p\u00E1gina n\u00E3o \u00E9 mais v\u00E1lida. Por favor, volte \u00e0 aplica\u00e7\u00e3o e fa\u00E7a login novamente -realmSupportsNoCredentialsMessage=O dom\u00EDnio n\u00E3o suporta qualquer tipo de credencial. -credentialSetupRequired=N\u00E3o \u00E9 poss\u00EDvel fazer o login, a configura\u00E7\u00E3o de credencial \u00e9 necess\u00e1ria. -identityProviderNotUniqueMessage=O dom\u00EDnio suporta m\u00FAltiplos provedores de identidade. N\u00E3o foi poss\u00EDvel determinar qual o provedor de identidade deve ser usado para autentica\u00e7\u00e3o. -emailVerifiedMessage=O seu endere\u00E7o de e-mail foi confirmado. -staleEmailVerificationLink=O link em que voc\u00EA clicou \u00E9 um link antigo e n\u00E3o \u00E9 mais v\u00E1lido. Talvez voc\u00EA j\u00E1 tenha confirmado o seu endere\u00e7o de e-mail. -identityProviderAlreadyLinkedMessage=A conta retornada do {0} j\u00E1 est\u00E1 vinculada a outro usu\u00E1rio. -confirmAccountLinking=Confirme o vincula\u00e7\u00e3o da conta {0} do provedor de identidade {1} \u00E0 sua conta. -confirmEmailAddressVerification=Confirme a validade do endere\u00E7o de e-mail {0}. -confirmExecutionOfActions=Execute a(s) seguinte(s) a\u00E7\u00E3o(\u00F5es) - -backToApplication=« Voltar para o aplicativo -missingParameterMessage=Par\u00E2metros ausentes\: {0} -clientNotFoundMessage=Cliente n\u00E3o encontrado. -clientDisabledMessage=Cliente desativado. -invalidParameterMessage=Par\u00E2mentro inv\u00E1lido\: {0} -alreadyLoggedIn=Voc\u00EA j\u00E1 est\u00E1 logado. -differentUserAuthenticated=Voc\u00EA j\u00E1 est\u00E1 autenticado como outro usu\u00E1rio ''{0}'' nesta sess\u00E3o. Por favor, finalize a sess\u00e3o primeiro. -brokerLinkingSessionExpired=A vincul\u00e7\u00e3o de conta do provedor de identidade foi solicitado, mas a sess\u00E3o atual n\u00E3o \u00E9 mais v\u00E1lida. -proceedWithAction=» Clique aqui para continuar - -requiredAction.CONFIGURE_TOTP=Configurar Autentica\u00e7\u00e3o de Dois Fatores -requiredAction.terms_and_conditions=Termos e Condi\u00E7\u00F5es -requiredAction.UPDATE_PASSWORD=Atualizar Senha -requiredAction.UPDATE_PROFILE=Atualizar Perfil -requiredAction.VERIFY_EMAIL=Verificar Endere\u00e7o de E-mail - -doX509Login=Voc\u00EA ser\u00E1 logado como\: -clientCertificate=Certificado X509 do cliente\: -noCertificate=[Sem Certificado] - - -pageNotFound=P\u00E1gina n\u00E3o encontrada -internalServerError=Ocorreu um erro interno no servidor - -console-username=Nome de usu\u00E1rio: -console-password=Senha: -console-otp=C\u00F3digo de uso \u00FAnico: -console-new-password=Nova Senha: -console-confirm-password=Confirma\u00E7\u00E3o de Senha: -console-update-password=Voc\u00ea precisa atualizar a sua senha. -console-verify-email=Voc\u00EA precisa verificar o seu endere\u00E7o de e-mail. Enviamos um e-mail para {0} que cont\u00E9m um c\u00F3digo de verifica\u00E7\u00E3o. Digite o c\u00F3digo enviado no campo abaixo. -console-email-code=C\u00F3digo do e-mail: -console-accept-terms=Aceita os Termos? [s/n]: -console-accept=s - -# Openshift messages -openshift.scope.user_info=Informa\u00e7\u00f5es do usu\u00E1rio -openshift.scope.user_check-access=Informa\u00e7\u00f5es de acesso do usu\u00E1rio -openshift.scope.user_full=Acesso Completo -openshift.scope.list-projects=Listar projetos - -# SAML authentication -saml.post-form.title=Redirecionamento de Autentica\u00E7\u00E3o -saml.post-form.message=Redirecionando... Por favor, aguarde. -saml.post-form.js-disabled=O JavaScript est\u00E1 desabilitado. \u00C9 altamente recomend\u00E1vel habilit\u00E1-lo. Clique no bot\u00E3o abaixo para continuar. - -#authenticators -otp-display-name=Aplicativo Autenticador -otp-help-text=Insira o c\u00F3digo de verifica\u00E7\u00E3o do aplicativo autenticador. -password-display-name=Senha -password-help-text=Fa\u00E7a o login digitando sua senha. -auth-username-form-display-name=Nome de usu\u00E1rio -auth-username-form-help-text=Fa\u00E7a o login digitando seu nome de usu\u00E1rio. -auth-username-password-form-display-name=Nome de usu\u00E1rio e senha -auth-username-password-form-help-text=Fa\u00E7a o login digitando seu nome de usu\u00E1rio e senha. - -# WebAuthn -webauthn-display-name=Chave de Seguran\u00E7a -webauthn-help-text=Use sua chave de seguran\u00E7a para fazer login. -webauthn-passwordless-display-name=Chave de Seguran\u00E7a -webauthn-passwordless-help-text=Use sua chave de seguran\u00E7a para fazer login sem senha. -webauthn-login-title=Login com Chave de Seguran\u00E7a -webauthn-registration-title=Registrar Chave de Seguran\u00E7a -webauthn-available-authenticators=Autenticadores dispon\u00EDveis -webauthn-unsupported-browser-text=WebAuthn n\u00e3o \u00e9 suportada pelo seu navegador. Tente outro navegador ou entre em contato com um administrador. - -# WebAuthn Error -webauthn-error-title=Erro de Chave de Seguran\u00E7a -webauthn-error-registration=Falha ao registrar sua Chave de Seguran\u00E7a. -webauthn-error-api-get=Falha ao autenticar usando a Chave de Seguran\u00E7a. -webauthn-error-different-user=O primeiro usu\u00E1rio autenticado n\u00E3o corresponde \u00e0quele autenticado pela Chave de Seguran\u00E7a. -webauthn-error-auth-verification=O resultado da autentica\u00E7\u00E3o da Chave de Seguran\u00E7a \u00E9 inv\u00E1lido.
    {0} -webauthn-error-register-verification=O resultado do registro da Chave de Seguran\u00E7a \u00E9 inv\u00E1lido.
    {0} -webauthn-error-user-not-found=Usu\u00E1rio desconhecido autenticado pela Chave de Seguran\u00E7a. - -# Identity provider -identity-provider-redirector=Conecte-se com outro Provedor de Identidade -identity-provider-login-label=Ou entre com - -finalDeletionConfirmation=Se voc\u00ea apagar a sua conta, ela n\u00e3o poder\u00e1 ser recuperada. Para manter a sua conta, clique em Cancelar. -irreversibleAction=Esta a\u00e7\u00e3o \u00e9 irrevers\u00edvel -deleteAccountConfirm=Confirma\u00e7\u00e3o de descadastramento - -deletingImplies=Apagar a sua conta implica em: -errasingData=Remover todos os seus dados -loggingOutImmediately=Sair da aplica\u00e7\u00e3o imediatamente -accountUnusable=Qualquer uso subsequente da aplica\u00e7\u00e3o n\u00e3o ser\u00e1 poss\u00edvel com esta conta -userDeletedSuccessfully=Usu\u00e1rio exclu\u00eddo com sucesso - diff --git a/deps/keycloak/themes/base/login/messages/messages_ru.properties b/deps/keycloak/themes/base/login/messages/messages_ru.properties deleted file mode 100644 index 4ca80bf76..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_ru.properties +++ /dev/null @@ -1,217 +0,0 @@ -# encoding: utf-8 -doLogIn=Вход -doRegister=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ -doCancel=Отмена -doSubmit=Подтвердить -doYes=Да -doNo=Ðет -doContinue=Продолжить -doAccept=Подтвердить -doDecline=Отменить -doForgotPassword=Забыли пароль? -doClickHere=Ðажмите Ñюда -doImpersonate=ИмперÑонализироватьÑÑ -kerberosNotConfigured=Kerberos не Ñконфигурирован -kerberosNotConfiguredTitle=Kerberos не Ñконфигурирован -bypassKerberosDetail=Либо вы не вошли в ÑиÑтему Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ Kerberos, либо ваш браузер не наÑтроен Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в ÑиÑтему Kerberos. ПожалуйÑта, нажмите кнопку 'Продолжить' Ð´Ð»Ñ Ð²Ñ…Ð¾Ð´Ð° в Ñ Ð¿Ð¾Ð¼Ð¾Ñ‰ÑŒÑŽ других ÑредÑтв -kerberosNotSetUp=Kerberos не наÑтроен. Ð’Ñ‹ не можете войти. -registerWithTitle=ЗарегиÑтрироватьÑÑ Ñ {0} -registerWithTitleHtml={0} -loginTitle=Log in to {0} -loginTitleHtml={0} -impersonateTitle={0} ИмперÑÐ¾Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -impersonateTitleHtml={0} ИмперÑÐ¾Ð½Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -realmChoice=Realm -unknownUser=ÐеизвеÑтный пользователь -loginTotpTitle=ÐаÑтройка мобильного аутентификатора -loginProfileTitle=Обновление информации учетной запиÑи -loginTimeout=Ð’Ñ‹ Ñлишком долго бездейÑтвовали. ПроцеÑÑ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ начнетÑÑ Ñ Ð½Ð°Ñ‡Ð°Ð»Ð°. -oauthGrantTitle=СоглаÑовать доÑтуп -oauthGrantTitleHtml={0} -errorTitle=Мы Ñожалеем... -errorTitleHtml=Мы Ñожалеем ... -emailVerifyTitle=Подтверждение адреÑа E-mail -emailForgotTitle=Забыли пароль? -updatePasswordTitle=Обновление Ð¿Ð°Ñ€Ð¾Ð»Ñ -codeSuccessTitle=УÑпешный код -codeErrorTitle=Ошибочный код\: {0} - -termsTitle=УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -termsTitleHtml=УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ -termsText=

    УÑÐ»Ð¾Ð²Ð¸Ñ Ð¸ Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ‹ быть определены

    - -recaptchaFailed=ÐÐµÐºÐ¾Ñ€Ñ€ÐµÐºÑ‚Ð½Ð°Ñ Recaptcha -recaptchaNotConfigured=Recaptcha требуетÑÑ, но не Ñконфигурирована -consentDenied=Ð’ ÑоглаÑовании отказано. - -noAccount=Ðовый пользователь? -username=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ -usernameOrEmail=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ E-mail -firstName=Ð˜Ð¼Ñ -givenName=Выданное Ð¸Ð¼Ñ -fullName=Полное Ð¸Ð¼Ñ -lastName=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ -familyName=Ð¤Ð°Ð¼Ð¸Ð»Ð¸Ñ -email=E-mail -password=Пароль -passwordConfirm=Подтверждение Ð¿Ð°Ñ€Ð¾Ð»Ñ -passwordNew=Ðовый пароль -passwordNewConfirm=Подтверждение нового Ð¿Ð°Ñ€Ð¾Ð»Ñ -rememberMe=Запомнить Ð¼ÐµÐ½Ñ -authenticatorCode=Одноразовый код -address=ÐÐ´Ñ€ÐµÑ -street=Улица -locality=Город -region=Регион -postal_code=Почтовый Ð¸Ð½Ð´ÐµÐºÑ -country=Страна -emailVerified=E-mail подтвержден -gssDelegationCredential=Делегирование учетных данных GSS - -loginTotpStep1=УÑтановите FreeOTP или Google Authenticator. Оба Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð´Ð¾Ñтупны в Google Play и Apple App Store. -loginTotpStep2=Откройте приложение и проÑканируйте баркод, либо введите ключ -loginTotpStep3=Введите одноразовый пароль, выданный приложением, и нажмите Ñохранить Ð´Ð»Ñ Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð¸Ñ ÑƒÑтановки -loginOtpOneTime=Одноразовый пароль - -oauthGrantRequest=Ð’Ñ‹ ÑоглаÑуете доÑтуп к Ñтим привилегиÑм? -inResource=в - -emailVerifyInstruction1=Вам было отправлено пиÑьмо Ñ Ð¸Ð½ÑтрукциÑми Ð´Ð»Ñ Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð°Ð´Ñ€ÐµÑа E-mail. -emailVerifyInstruction2=Ðе получили пиÑьмо Ñ ÐºÐ¾Ð´Ð¾Ð¼ подтверждениÑ? -emailVerifyInstruction3=Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð¹ отправки пиÑьма. - -emailLinkIdpTitle=СвÑзать {0} -emailLinkIdp1=Вам было отправлено пиÑьмо Ñ Ð¸Ð½ÑтрукциÑми по объединению {0} учетной запиÑи {1} Ñ Ð²Ð°ÑˆÐµÐ¹ учетной запиÑью {2}. -emailLinkIdp2=Ðе получили код Ð¿Ð¾Ð´Ñ‚Ð²ÐµÑ€Ð¶Ð´ÐµÐ½Ð¸Ñ Ð½Ð° ваш E-mail? -emailLinkIdp3=Ð´Ð»Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð¹ отправки пиÑьма. - -backToLogin=« Ðазад ко входу - -emailInstruction=Введите Ваше Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ E-mail и мы вышлем Вам инÑтрукции по получению нового паролÑ. - -copyCodeInstruction=ПожалуйÑта, Ñкопируйте Ñтот код в приложение: - -personalInfo=ПерÑÐ¾Ð½Ð°Ð»ÑŒÐ½Ð°Ñ Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ: -role_admin=ÐдминиÑтратор -role_realm-admin=ÐдминиÑтратор realm -role_create-realm=Создание realm -role_create-client=Создание клиента -role_view-realm=ПроÑмотр realm -role_view-users=ПроÑмотр пользователей -role_view-applications=ПроÑмотр приложений -role_view-clients=ПроÑмотр клиентов -role_view-events=ПроÑмотр Ñобытий -role_view-identity-providers=ПроÑмотр провайдеров учетных запиÑей -role_manage-realm=Управление realm -role_manage-users=Управление пользователÑми -role_manage-applications=Управление приложениÑми -role_manage-identity-providers=Управление провайдерами учетных запиÑей -role_manage-clients=Управление клиентами -role_manage-events=Управление ÑобытиÑми -role_view-profile=ПроÑмотр Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ -role_manage-account=Управление учетной запиÑью -role_read-token=Чтение токена -role_offline-access=Оффлайн доÑтуп -client_account=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ -client_security-admin-console=КонÑоль админиÑтратора безопаÑноÑти -client_admin-cli=Командный Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратора -client_realm-management=Управление realm -client_broker=Брокер - -invalidUserMessage=Ðеправильное Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ пароль. -invalidEmailMessage=Ðеправильный E-mail. -accountDisabledMessage=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ заблокирована, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором. -accountTemporarilyDisabledMessage=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ временно заблокирована, ÑвÑжитеÑÑŒ Ñ Ð°Ð´Ð¼Ð¸Ð½Ð¸Ñтратором или попробуйте позже. -expiredCodeMessage=Вход проÑрочен по таймауту. ПожалуйÑта, войдите Ñнова. - -missingFirstNameMessage=ПожалуйÑта введите имÑ. -missingLastNameMessage=ПожалуйÑта введите фамилию. -missingEmailMessage=ПожалуйÑта введите E-mail. -missingUsernameMessage=ПожалуйÑта введите Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ. -missingPasswordMessage=ПожалуйÑта введите пароль. -missingTotpMessage=ПожалуйÑта введите код аутентификатора. -notMatchPasswordMessage=Пароли не Ñовпадают. - -invalidPasswordExistingMessage=Ðеверный ÑущеÑтвующий пароль. -invalidPasswordConfirmMessage=Подтверждение Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð½Ðµ Ñовпадает. -invalidTotpMessage=Ðеверный код аутентификатора. - -usernameExistsMessage=Ð˜Ð¼Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ ÑƒÐ¶Ðµ занÑто. -emailExistsMessage=E-mail уже ÑущеÑтвует. - -federatedIdentityExistsMessage=Пользователь Ñ {0} {1} уже ÑущеÑтвует. ПожалуйÑта войдите в управление учетными запиÑÑми, чтобы ÑвÑзать Ñту учетную запиÑÑŒ. - -confirmLinkIdpTitle=Ð£Ñ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ уже ÑущеÑтвует -federatedIdentityConfirmLinkMessage=Пользователь Ñ {0} {1} уже ÑущеÑтует. Хотите продолжить? -federatedIdentityConfirmReauthenticateMessage=ÐутентифицируйтеÑÑŒ, чтобы ÑвÑзать Вашу учетную запиÑÑŒ Ñ {0} -confirmLinkIdpReviewProfile=Обзор Ð¿Ñ€Ð¾Ñ„Ð¸Ð»Ñ -confirmLinkIdpContinue=Добавить в ÑущеÑтвующую учетную запиÑÑŒ - -configureTotpMessage=Вам необходимо наÑтроить аутентификатор в мобильном уÑтройÑтве, чтобы активировать учетную запиÑÑŒ. -updateProfileMessage=Вам необходимо обновить Ñвой профиль, чтобы активировать Вашу учетную запиÑÑŒ. -updatePasswordMessage=Вам необходимо изменить пароль, чтобы активировать Вашу учетную запиÑÑŒ. -verifyEmailMessage=Вам необходимо подтвердить Ваш E-mail, чтобы активировать Вашу учетную запиÑÑŒ. -linkIdpMessage=Вам необходимо подтвердить Ваш E-mail, чтобы ÑвÑзать Вашу учетную запиÑÑŒ Ñ {0}. - -emailSentMessage=Ð’ ближайшее Ð²Ñ€ÐµÐ¼Ñ Ð’Ñ‹ должны получить пиÑьмо Ñ Ð´Ð°Ð»ÑŒÐ½ÐµÐ¹ÑˆÐ¸Ð¼Ð¸ инÑтрукциÑми. -emailSendErrorMessage=Ðе получаетÑÑ Ð¾Ñ‚Ð¿Ñ€Ð°Ð²Ð¸Ñ‚ÑŒ пиÑьмо. ПожалуйÑта, повторите позже. - -accountUpdatedMessage=Ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ уÑпешно обновлена. -accountPasswordUpdatedMessage=Ваш пароль уÑпешно обновлен. - -noAccessMessage=Ðет доÑтупа - -invalidPasswordMinLengthMessage=Ðекорректный пароль: длина Ð¿Ð°Ñ€Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð° быть не менее {0} Ñимволов(а). -invalidPasswordMinDigitsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} цифр(Ñ‹). -invalidPasswordMinLowerCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимволов(а) в нижнем региÑтре. -invalidPasswordMinUpperCaseCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} Ñимволов(а) в верхнем региÑтре. -invalidPasswordMinSpecialCharsMessage=Ðекорректный пароль: пароль должен Ñодержать не менее {0} ÑпецÑимволов(а). -invalidPasswordNotUsernameMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ пользователÑ. -invalidPasswordRegexPatternMessage=Ðекорректный пароль: пароль не прошел проверку по регулÑрному выражению. -invalidPasswordHistoryMessage=Ðекорректный пароль: пароль не должен Ñовпадать Ñ Ð¿Ð¾Ñледним(и) {0} паролем(Ñми). -invalidPasswordGenericMessage=Ðекорректный пароль: новый пароль не ÑоответÑтвует правилам паролÑ. - -failedToProcessResponseMessage=Ðе удалоÑÑŒ обработать ответ -httpsRequiredMessage=ТребуетÑÑ HTTPS -realmNotEnabledMessage=Realm не включен -invalidRequestMessage=Ðеверный Ð·Ð°Ð¿Ñ€Ð¾Ñ -failedLogout=Выйти не удалоÑÑŒ -unknownLoginRequesterMessage=ÐеизвеÑтный клиент -loginRequesterNotEnabledMessage=Клиент отключен -bearerOnlyMessage=Bearer-only приложениÑм не разрешаетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð²Ñ…Ð¾Ð´Ð° через браузер -standardFlowDisabledMessage=Клиенту не разрешаетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ вход через браузер Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ response_type. Standard flow отключен Ð´Ð»Ñ Ñтого клиента. -implicitFlowDisabledMessage=Клиенту не разрешаетÑÑ Ð¸Ð½Ð¸Ñ†Ð¸Ð¸Ñ€Ð¾Ð²Ð°Ñ‚ÑŒ вход через браузер Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ response_type. Implicit flow отключен Ð´Ð»Ñ Ñтого клиента. -invalidRedirectUriMessage=Ðеверный uri Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ°Ð´Ñ€ÐµÑации -unsupportedNameIdFormatMessage=Ðеподдерживаемый NameIDFormat -invalidRequesterMessage=Ðеверный запрашивающий -registrationNotAllowedMessage=РегиÑÑ‚Ñ€Ð°Ñ†Ð¸Ñ Ð½Ðµ разрешена -resetCredentialNotAllowedMessage=Ð¡Ð±Ñ€Ð¾Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¾Ð½Ð½Ñ‹Ñ… данных не разрешен - -permissionNotApprovedMessage=Разрешение не подтверждено. -noRelayStateInResponseMessage=Ðет Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ ÑоÑтоÑÐ½Ð¸Ñ Ð² ответе от провайдера учетных запиÑей. -insufficientPermissionMessage=ÐедоÑтаточно полномочий Ð´Ð»Ñ ÑвÑÐ·Ñ‹Ð²Ð°Ð½Ð¸Ñ Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ‚Ð¾Ñ€Ð¾Ð². -couldNotProceedWithAuthenticationRequestMessage=Ðевозможно обработать аутентификационный Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð² провайдере учетных запиÑей. -couldNotObtainTokenMessage=Ðе удалоÑÑŒ получить токен от провайдера учетных запиÑей. -unexpectedErrorRetrievingTokenMessage=ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при получении токена от провайдера учетных запиÑей. -unexpectedErrorHandlingResponseMessage=ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при обработке ответа от провайдера учетных запиÑей. -identityProviderAuthenticationFailedMessage=ÐÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð¿Ñ€Ð¾Ð²Ð°Ð»ÐµÐ½Ð°. Ðевозможно аутентифицировать Ñ Ð¿Ð¾Ñтавщиком учетных запиÑей. -couldNotSendAuthenticationRequestMessage=Ðе получаетÑÑ Ð²Ñ‹Ð¿Ð¾Ð»Ð½Ð¸Ñ‚ÑŒ Ð·Ð°Ð¿Ñ€Ð¾Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸ к поÑтавщику учетных запиÑей. -unexpectedErrorHandlingRequestMessage=ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при обработке запроÑа аутентификации поÑтавщика учетных запиÑей. -invalidAccessCodeMessage=Ðеверный код доÑтупа. -sessionNotActiveMessage=СеÑÑÐ¸Ñ Ð½Ðµ активна. -invalidCodeMessage=Произошла ошибка. ПожалуйÑта, войдите в ÑиÑтему Ñнова через ваше приложение. -identityProviderUnexpectedErrorMessage=ÐÐµÐ¿Ñ€ÐµÐ´Ð²Ð¸Ð´ÐµÐ½Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° при проверке подлинноÑти поÑтавщика учетных запиÑей. -identityProviderNotFoundMessage=Ðе удалоÑÑŒ найти поÑтавщика учетных запиÑей Ñ Ð´Ð°Ð½Ð½Ñ‹Ð¼ идентификатором. -identityProviderLinkSuccess=Ваша ÑƒÑ‡ÐµÑ‚Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑŒ была уÑпешно Ñоединена Ñ {0} учетной запиÑью {1} . -staleCodeMessage=Эта Ñтраница больше не дейÑтвительна, пожалуйÑта, вернитеÑÑŒ в приложение и Ñнова войдите в ÑиÑтему. -realmSupportsNoCredentialsMessage=Realm не поддерживает никакой тип учетных данных. -identityProviderNotUniqueMessage=Realm поддерживает неÑколько поÑтавщиков учетных запиÑей. Ðе удалоÑÑŒ определить, какой именно поÑтавщик должен иÑпользоватьÑÑ Ð´Ð»Ñ Ð°ÑƒÑ‚ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ð¸. -emailVerifiedMessage=Ваш E-mail был подтвержден. -staleEmailVerificationLink=СÑылка, по которой Ð’Ñ‹ перешли, уÑтарела и больше не дейÑтвует. Может быть, вы уже подтвердили Ñвой E-mail? - -backToApplication=« Ðазад в приложение -missingParameterMessage=Пропущенные параметры\: {0} -clientNotFoundMessage=Клиент не найден. -clientDisabledMessage=Клиент отключен. -invalidParameterMessage=Ðеверный параметр\: {0} -alreadyLoggedIn=Ð’Ñ‹ уже вошли. diff --git a/deps/keycloak/themes/base/login/messages/messages_sk.properties b/deps/keycloak/themes/base/login/messages/messages_sk.properties deleted file mode 100644 index c0b0aaa7e..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_sk.properties +++ /dev/null @@ -1,262 +0,0 @@ -# encoding: utf-8 -doLogIn=Prihlásenie -doRegister=Registrácia -doCancel=ZruÅ¡iÅ¥ -doSubmit=OdoslaÅ¥ -doYes=Ãno -doNo=Nie -doContinue=PokraÄovaÅ¥ -doAccept=PotvrdiÅ¥ -doDecline=OdmietnuÅ¥ -doForgotPassword=Zabudli ste heslo? -doClickHere=Kliknite tu -doImpersonate=PrevteliÅ¥ -kerberosNotConfigured=Kerberos nie je nakonfigurovaný -kerberosNotConfiguredTitle=Kerberos nie je nakonfigurovaný -bypassKerberosDetail=BuÄ nie ste prihlásený cez Kerberos, alebo váš prehliadaÄ nie je nastavený na prihlásenie do Kerberos. Kliknutím na tlaÄidlo PokraÄovaÅ¥ sa prihláste iným spôsobom -kerberosNotSetUp=Kerberos nie je nastavený. Nemôžete sa prihlásiÅ¥. -registerWithTitle=Registrácia s {0} -registerWithTitleHtml={0} -loginTitle=Prihlásenie do {0} -loginTitleHtml={0} -impersonateTitle={0} prevteliÅ¥ sa -impersonateTitleHtml={0} PrevteliÅ¥ sa
    -realmChoice=Realm -unknownUser=Neznámy používateľ -loginTotpTitle=Nastavenie mobilného autentifikátora -loginProfileTitle=Aktualizácia informácií o úÄte -loginTimeout=Prihlasovanie trvalo príliÅ¡ dlho. Prihlasovací proces zaÄína od zaÄiatku. -oauthGrantTitle=Poskytnúť prístup -oauthGrantTitleHtml={0} -errorTitle=Je nám ľúto ... -errorTitleHtml=Ospravedlňujeme sa ... -emailVerifyTitle=Overenie e-mailom -emailForgotTitle=Zabudli ste heslo? -updatePasswordTitle=Aktualizácia hesla -codeSuccessTitle=Kód úspechu -codeErrorTitle=Kód chyby\: {0} - -termsTitle=Zmluvné podmienky -termsTitleHtml=Zmluvné podmienky -termsText=

    Zmluvné podmienky, ktoré sa majú definovať

    - -recaptchaFailed=Neplatné Recaptcha -recaptchaNotConfigured=Recaptcha sa vyžaduje, ale nie je nakonfigurovaná -consentDenied=Súhlas bol zamietnutý. - -noAccount=Nový používateľ? -username=Prihlasovacie meno -usernameOrEmail=Prihlasovacie meno alebo e-mail -firstName=Meno -givenName=Meno pri narodení -fullName=Celé meno -lastName=Priezvisko -familyName=Rodné meno -email=E-mail -password=Heslo -passwordConfirm=Potvrdenie hesla -passwordNew=Nové heslo -passwordNewConfirm=Potvrdenie nového hesla -rememberMe=ZapamätaÅ¥ si ma -authenticatorCode=Jednorazový kód -address=Adresa -street=Ulica -locality=Mesto alebo lokalita -region=Kraj -postal_code=PSÄŒ -country=Å tát -emailVerified=E-mail overený -gssDelegationCredential=GSS delegované oprávnenie - -loginTotpStep1=NainÅ¡talujte FreeOTP alebo Google Authenticator na mobil. Obidve aplikácie sú k dispozícii v Google Play a Apple App Store. -loginTotpStep2=Otvorte aplikáciu a skenujte Äiarový kód alebo zadajte kÄ¾ÃºÄ -loginTotpStep3=Zadajte jednorazový kód poskytnutý aplikáciou a kliknutím na tlaÄidlo OdoslaÅ¥ dokonÄite nastavenie -loginTotpManualStep2=Otvorte aplikáciu a zadajte kÄ¾ÃºÄ -loginTotpManualStep3=Používajte nasledujúce hodnoty konfigurácie, ak aplikácia umožňuje ich nastavenie -loginTotpUnableToScan=Nemožno skenovaÅ¥? -loginTotpScanBarcode=SkenovaÅ¥ Äiarový kód? -loginOtpOneTime=Jednorázový kód -loginTotpType=Typ -loginTotpAlgorithm=Algoritmus -loginTotpDigits=Číslica -loginTotpInterval=Interval -loginTotpCounter=PoÄítadlo - -loginTotp.totp=Založené na Äase -loginTotp.hotp=Založené na poÄítadle - -oauthGrantRequest=Udeľujete tieto prístupové oprávnenia? -inResource=v - -emailVerifyInstruction1=Bol Vám odoslaný e-mail s pokynmi na overenie vaÅ¡ej e-mailovej adresy. -emailVerifyInstruction2=Nezískali ste v e-maili overovací kód? -emailVerifyInstruction3=opätovne odoslaÅ¥ e-mail. - -emailLinkIdpTitle=Odkaz {0} -emailLinkIdp1=Bol vám odoslaný e-mail s pokynmi na prepojenie úÄtu {0} {1} s vaším úÄtom {2}. -emailLinkIdp2=Nezískali ste v e-maili verifikaÄný kód? -emailLinkIdp3=opätovne poslaÅ¥ e-mail. -emailLinkIdp4=Ak ste už overili e-mail v inom prehliadaÄi -emailLinkIdp5=pokraÄovaÅ¥. - -backToLogin=« Späť na prihlásenie - -emailInstruction=Zadajte svoje používateľské meno alebo e-mailovú adresu a my vám zaÅ¡leme pokyny na vytvorenie nového hesla. - -copyCodeInstruction=Prosím skopírujte tento kód a vložte ho do vaÅ¡ej aplikácie: - -pageExpiredTitle=PlatnosÅ¥ stránky vyprÅ¡ala -pageExpiredMsg1=Pre reÅ¡tartovanie prihlasovacieho procesu -pageExpiredMsg2=PokraÄovanie prihlasovacieho procesu - -personalInfo=Osobné informácie: -role_admin=Administrátor -role_realm-admin=Realm administrátor -role_create-realm=VytvoriÅ¥ realm -role_create-client=VytvoriÅ¥ klienta -role_view-realm=ZobraziÅ¥ realm -role_view-users=ZobraziÅ¥ používateľov -role_view-applications=ZobraziÅ¥ aplikácie -role_view-clients=Zobrazenie klientov -role_view-events=ZobraziÅ¥ udalosti -role_view-identity-providers=Zobrazenie poskytovateľov identity -role_manage-realm=SpravovaÅ¥ realm -role_manage-users=SpravovaÅ¥ používateľov -role_manage-applications=SpravovaÅ¥ aplikácie -role_manage-identity-providers=SpravovaÅ¥ poskytovateľov identity -role_manage-clients=SpravovaÅ¥ klientov -role_manage-events=SpravovaÅ¥ udalosti -role_view-profile=ZobraziÅ¥ profil -role_manage-account=SpravovaÅ¥ úÄty -role_manage-account-links=SpravovaÅ¥ odkazy na úÄty -role_read-token=ČítaÅ¥ token -role_offline-access=Offline prístup -client_account=ÚÄet klienta -client_security-admin-console=Administrátorská bezpeÄnostná konzola klienta -client_admin-cli=Správca CLI -client_realm-management=Správa realmov klienta -client_broker=Broker - -invalidUserMessage=Neplatné používateľské meno alebo heslo. -invalidEmailMessage=Neplatná e-mailová adresa. -accountDisabledMessage=ÚÄet je zakázaný, kontaktujte administrátora. -accountTemporarilyDisabledMessage=ÚÄet je doÄasne zakázaný, kontaktujte administrátora alebo skúste neskôr. -expiredCodeMessage=PlatnosÅ¥ prihlásenia vyprÅ¡ala. Prihláste sa znova. -expiredActionMessage=Akcia vyprÅ¡ala. PokraÄujte prihlásením. -expiredActionTokenNoSessionMessage=Akcia vyprÅ¡ala. -expiredActionTokenSessionExistsMessage=PlatnosÅ¥ vyprÅ¡ala. ZaÄnite znova. - -missingFirstNameMessage=Zadajte krstné meno. -missingLastNameMessage=Zadajte priezvisko. -missingEmailMessage=Zadajte e-mail. -missingUsernameMessage=Zadajte používateľské meno. -missingPasswordMessage=Zadajte prosím heslo. -missingTotpMessage=Prosím, zadajte kód autentifikátora. -notMatchPasswordMessage=Heslá sa nezhodujú. - -invalidPasswordExistingMessage=Neplatné existujúce heslo. -invalidPasswordBlacklistedMessage=Neplatné heslo: heslo je na Äiernej listine. -invalidPasswordConfirmMessage=Potvrdenie hesla sa nezhoduje. -invalidTotpMessage=Neplatný kód autentifikátora. - -usernameExistsMessage=Užívateľské meno už existuje. -emailExistsMessage=E-mail už existuje. - -federatedIdentityExistsMessage=Používateľ s {0} {1} už existuje. Ak chcete prepojiÅ¥ úÄet, prihláste sa na správu úÄtov. - -confirmLinkIdpTitle=ÚÄet už existuje -federatedIdentityConfirmLinkMessage=Používateľ s {0} {1} už existuje. Ako chcete pokraÄovaÅ¥? -federatedIdentityConfirmReauthenticateMessage=OveriÅ¥ prepojiÅ¥ váš úÄet s {0} -confirmLinkIdpReviewProfile=Skontrolujte profil -confirmLinkIdpContinue=PridaÅ¥ do existujúceho úÄtu - -configureTotpMessage=Na aktiváciu vášho úÄtu musíte nastaviÅ¥ aplikáciu Mobile Authenticator. -updateProfileMessage=Ak chcete aktivovaÅ¥ svoj úÄet, musíte aktualizovaÅ¥ svoj užívateľský profil. -updatePasswordMessage=Ak chcete aktivovaÅ¥ svoj úÄet, musíte zmeniÅ¥ heslo. -resetPasswordMessage=Potrebujete zmeniÅ¥ svoje heslo. -verifyEmailMessage=Ak chcete aktivovaÅ¥ svoj úÄet, musíte overiÅ¥ svoju e-mailovú adresu. -linkIdpMessage=Potrebujete si overiÅ¥ svoju e-mailovú adresu a prepojiÅ¥ svoj úÄet s {0}. - -emailSentMessage=Zakrátko by ste mali dostaÅ¥ e-mail s Äalšími pokynmi. -emailSendErrorMessage=Nepodarilo sa odoslaÅ¥ e-mail, skúste to znova neskôr. - -accountUpdatedMessage=Váš úÄet bol aktualizovaný. -accountPasswordUpdatedMessage=VaÅ¡e heslo bolo aktualizované. - -noAccessMessage=Žiadny prístup - -invalidPasswordMinLengthMessage=Neplatné heslo: minimálna dĺžka {0}. -invalidPasswordMinDigitsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} Äíslic. -invalidPasswordMinLowerCaseCharsMessage=Neplatné heslo: musí obsahovaÅ¥ minimálne {0} malé písmená. -invalidPasswordMinUpperCaseCharsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} veľké písmená. -invalidPasswordMinSpecialCharsMessage=Neplatné heslo: musí obsahovaÅ¥ aspoň {0} Å¡peciálne znaky. -invalidPasswordNotUsernameMessage=Neplatné heslo: nesmie byÅ¥ rovnaké ako používateľské meno. -invalidPasswordRegexPatternMessage=Neplatné heslo: nezhoduje sa vzormi regulérneho výrazu. -invalidPasswordHistoryMessage=Neplatné heslo: nesmie sa rovnaÅ¥ žiadnemu z posledných {0} hesiel. -invalidPasswordGenericMessage=Neplatné heslo: nové heslo nezodpovedá pravidlám hesiel. - -failedToProcessResponseMessage=Nepodarilo sa spracovaÅ¥ odpoveÄ -httpsRequiredMessage=Vyžaduje sa HTTPS -realmNotEnabledMessage=Realm nie je povolený -invalidRequestMessage=Neplatná požiadavka -failedLogout=Odhlásenie zlyhalo -unknownLoginRequesterMessage=Neznámy žiadateľ o prihlásenie -loginRequesterNotEnabledMessage=Žiadateľ o prihlásenie nie je povolený -bearerOnlyMessage=Aplikácie bearer-only nesmú inicializovaÅ¥ prihlásenie pomocou prehliadaÄa -standardFlowDisabledMessage=Klient nesmie iniciovaÅ¥ prihlásenie do prehliadaÄa s daným typom odpovede. Å tandardný tok je pre klienta zakázaný. -implicitFlowDisabledMessage=Klient nemôže iniciovaÅ¥ prihlásenie do prehliadaÄa s daným typom odpovede. Implicitný tok je pre klienta zakázaný. -invalidRedirectUriMessage=Neplatné redirect uri -unsupportedNameIdFormatMessage=Nepodporovaný NameIDFormat -invalidRequesterMessage=Neplatný žiadateľ -registrationNotAllowedMessage=Registrácia nie je povolená -resetCredentialNotAllowedMessage=Obnovenie poverenia nie je povolené - -permissionNotApprovedMessage=Povolenie nie je schválené. -noRelayStateInResponseMessage=Neexistuje relay state v odpovedi od poskytovateľa identity. -insufficientPermissionMessage=NedostatoÄné povolenia na prepojenie identít. -couldNotProceedWithAuthenticationRequestMessage=Nemožno pokraÄovaÅ¥ s požiadavkou na autentifikáciu poskytovateľa identity. -couldNotObtainTokenMessage=Nemožno získaÅ¥ token od poskytovateľa identity. -unexpectedErrorRetrievingTokenMessage=NeoÄakávaná chyba pri získavaní tokenu od poskytovateľa identity. -unexpectedErrorHandlingResponseMessage=NeoÄakávaná chyba pri spracovaní odpovede od poskytovateľa identity. -identityProviderAuthenticationFailedMessage=Overenie zlyhalo. Nepodarilo sa autentizovaÅ¥ s poskytovateľom identity. -couldNotSendAuthenticationRequestMessage=Nemožno odoslaÅ¥ žiadosÅ¥ o autentifikáciu poskytovateľovi identity. -unexpectedErrorHandlingRequestMessage=NeoÄakávaná chyba pri spracovaní žiadosti o autentifikáciu poskytovateľovi identity. -invalidAccessCodeMessage=Neplatný prístupový kód. -sessionNotActiveMessage=Session nie je aktívna. -invalidCodeMessage=Vyskytla sa chyba, prihláste sa znova prostredníctvom svojej aplikácie. -identityProviderUnexpectedErrorMessage=NeoÄakávaná chyba pri autentifikácii s poskytovateľom identity -identityProviderNotFoundMessage=Nepodarilo sa nájsÅ¥ poskytovateľa identity s identifikátorom. -identityProviderLinkSuccess=Svoj e-mail ste úspeÅ¡ne overili. Vráťte sa späť do pôvodného prehliadaÄa a pokraÄujte tam s prihlasovacími údajmi. -staleCodeMessage=Táto stránka už nie je platná, vráťte sa späť do aplikácie a znova sa prihláste -realmSupportsNoCredentialsMessage=Realm nepodporuje žiadny typ poverenia. -identityProviderNotUniqueMessage=Realm podporuje viacerých poskytovateľov identity. Nepodarilo sa urÄiÅ¥, ktorý poskytovateľ totožnosti sa má používaÅ¥ na autentifikáciu. -emailVerifiedMessage=VaÅ¡a e-mailová adresa bola overená. -staleEmailVerificationLink=Odkaz, na ktorý ste klikli, je starý starý odkaz a už nie je platný. Možno ste už overili svoj e-mail? -identityProviderAlreadyLinkedMessage=Federatívna identita vrátená {0} je už prepojená s iným používateľom. -confirmAccountLinking=PotvrÄte prepojenie úÄtu {0} poskytovateľa totožnosti {1} s vaším úÄtom. -confirmEmailAddressVerification=PotvrÄte platnosÅ¥ e-mailovej adresy {0}. -confirmExecutionOfActions=Vykonajte nasledujúce akcie - -backToApplication=« Späť na aplikáciu -missingParameterMessage=Chýbajúce parametre : {0} -clientNotFoundMessage=Klient sa nenaÅ¡iel. -clientDisabledMessage=Klient bol zneplatnený. -invalidParameterMessage=Neplatný parameter : {0} -alreadyLoggedIn=Už ste prihlásený. -differentUserAuthenticated=V tejto relácii ste už boli overení ako iný používateľ '' {0} ''. Najskôr sa odhláste. -brokerLinkingSessionExpired=Požadované prepojenie s úÄtom brokera, ale aktuálna relácia už nie je platná. -proceedWithAction=» Ak chcete pokraÄovaÅ¥, kliknite sem - -requiredAction.CONFIGURE_TOTP=Konfigurácia OTP -requiredAction.terms_and_conditions=Zmluvné podmienky -requiredAction.UPDATE_PASSWORD=AktualizovaÅ¥ heslo -requiredAction.UPDATE_PROFILE=AktualizovaÅ¥ profil -requiredAction.VERIFY_EMAIL=OveriÅ¥ e-mail - -doX509Login=Budete prihlásení ako\: -clientCertificate=certifikát klienta X509\: -noCertificate=[Bez certifikátu] - - -pageNotFound=Stránka nebola nájdená -internalServerError=Vyskytla sa interná chyba servera diff --git a/deps/keycloak/themes/base/login/messages/messages_sv.properties b/deps/keycloak/themes/base/login/messages/messages_sv.properties deleted file mode 100644 index c08b557be..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_sv.properties +++ /dev/null @@ -1,213 +0,0 @@ -# encoding: utf-8 -doLogIn=Logga in -doRegister=Registrera -doCancel=Avbryt -doSubmit=Skicka -doYes=Ja -doNo=Nej -doContinue=Fortsätt -doAccept=Acceptera -doDecline=Avböj -doForgotPassword=Glömt lösenord? -doClickHere=Klicka här -doImpersonate=Imitera -kerberosNotConfigured=Kerberos är inte konfigurerat -kerberosNotConfiguredTitle=Kerberos är inte konfigurerat -bypassKerberosDetail=Antingen sÃ¥ är du inte inloggad via Kerberos eller sÃ¥ är inte din webbläsare inställd för Kerberosinloggning. Vänligen klicka pÃ¥ fortsätt för att logga in pÃ¥ annat sätt. -kerberosNotSetUp=Kerberos är inte inställt. Du kan inte logga in. -registerWithTitle=Registrera med {0} -registerWithTitleHtml={0} -loginTitle=Logga in till {0} -loginTitleHtml={0} -impersonateTitle={0} Imitera användare -impersonateTitleHtml={0} Imitera användare -realmChoice=Realm -unknownUser=Okänd användare -loginTotpTitle=Inställning av mobilautentiserare -loginProfileTitle=Uppdatera kontoinformation -loginTimeout=Det tog för lÃ¥ng tid att logga in. Inloggningsprocessen börjar om. -oauthGrantTitle=Bevilja Ã¥tkomst -oauthGrantTitleHtml={0} -errorTitle=Vi ber om ursäkt... -errorTitleHtml=Vi ber om ursäkt ... -emailVerifyTitle=E-postverifiering -emailForgotTitle=Glömt ditt lösenord? -updatePasswordTitle=Uppdatera lösenord -codeSuccessTitle=Rätt kod -codeErrorTitle=Felkod\: {0} - -termsTitle=Användarvillkor -termsTitleHtml=Användarvillkor -termsText=

    Användarvillkoren har ännu inte definierats

    - -recaptchaFailed=Ogiltig Recaptcha -recaptchaNotConfigured=Recaptcha krävs, men är inte inställd -consentDenied=Samtycke förnekat. - -noAccount=Ny användare? -username=Användarnamn -usernameOrEmail=Användarnamn eller e-post -firstName=Förnamn -lastName=Efternamn -email=E-post -password=Lösenord -passwordConfirm=Bekräfta lösenord -passwordNew=Nytt lösenord -passwordNewConfirm=Bekräftelse av nytt lösenord -rememberMe=Kom ihÃ¥g mig -authenticatorCode=EngÃ¥ngskod -address=Adress -street=Gata -locality=Postort -region=Stat, Provins eller Region -postal_code=Postnummer -country=Land -emailVerified=E-post verifierad -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Installera FreeOTP eller Google Authenticator pÃ¥ din mobil. BÃ¥da applikationerna finns tillgängliga hos Google Play och Apple App Store. -loginTotpStep2=Öppna applikationen och skanna streckkoden eller skriv i nyckeln -loginTotpStep3=Fyll i engÃ¥ngskoden som tillhandahÃ¥lls av applikationen och klicka pÃ¥ Spara för att avsluta inställningarna -loginOtpOneTime=EngÃ¥ngskod - -oauthGrantRequest=Godkänner du tillgÃ¥ng till de här rättigheterna? -inResource=i - -emailVerifyInstruction1=Ett e-postmeddelande med instruktioner om hur du verifierar din e-postadress har skickats till dig. -emailVerifyInstruction2=Har du inte fÃ¥tt en verifikationskod i din e-post? -emailVerifyInstruction3=för att skicka e-postmeddelandet igen. - -emailLinkIdpTitle=Länkning {0} -emailLinkIdp1=Ett e-postmeddelande med instruktioner om hur du länkar {0} kontot {1} med ditt {2} konto har skickats till dig. -emailLinkIdp2=Har du inte fÃ¥tt en verifikationskod i din e-post? -emailLinkIdp3=för att skicka e-postmeddelandet igen. - -backToLogin=« Tillbaka till inloggningen - -emailInstruction=Fyll i ditt användarnamn eller din e-postadress, sÃ¥ kommer vi att skicka instruktioner för hur du skapar ett nytt lösenord. - -copyCodeInstruction=Vänligen kopiera den här koden och klistra in den i din applikation: - -personalInfo=Personlig information: -role_admin=Administratör -role_realm-admin=Realm-administratör -role_create-realm=Skapa realm -role_create-client=Skapa klient -role_view-realm=Visa realm -role_view-users=Visa användare -role_view-applications=Visa applikationer -role_view-clients=Visa klienter -role_view-events=Visa event -role_view-identity-providers=Visa identitetsleverantörer -role_manage-realm=Hantera realm -role_manage-users=Hantera användare -role_manage-applications=Hantera applikationer -role_manage-identity-providers=Hantera identitetsleverantörer -role_manage-clients=Hantera klienter -role_manage-events=Hantera event -role_view-profile=Visa profil -role_manage-account=Hantera konto -role_read-token=Läs element -role_offline-access=Ã…tkomst offline -client_account=Konto -client_security-admin-console=Säkerhetsadministratörskonsol -client_admin-cli=Administratörs-CLI -client_realm-management=Realmhantering - -invalidUserMessage=Ogiltigt användarnamn eller lösenord. -invalidEmailMessage=Ogiltig e-postadress. -accountDisabledMessage=Kontot är inaktiverat, kontakta administratör. -accountTemporarilyDisabledMessage=Kontot är tillfälligt inaktiverat, kontakta administratör eller försök igen senare. -expiredCodeMessage=Inloggningen nÃ¥dde en maxtidsgräns. Vänligen försök igen. - -missingFirstNameMessage=Vänligen ange förnamn. -missingLastNameMessage=Vänligen ange efternamn. -missingEmailMessage=Vänligen ange e-post. -missingUsernameMessage=Vänligen ange användarnamn. -missingPasswordMessage=Vänligen ange lösenord. -missingTotpMessage=Vänligen ange autentiseringskod. -notMatchPasswordMessage=Lösenorden matchar inte. - -invalidPasswordExistingMessage=Det nuvarande lösenordet är ogiltigt. -invalidPasswordConfirmMessage=Lösenordsbekräftelsen matchar inte. -invalidTotpMessage=Autentiseringskoden är ogiltig. - -usernameExistsMessage=Användarnamnet finns redan. -emailExistsMessage=E-postadressen finns redan. - -federatedIdentityExistsMessage=Användare med {0} {1} finns redan. Vänligen logga in till kontohanteringen för att länka kontot. - -confirmLinkIdpTitle=Kontot finns redan -federatedIdentityConfirmLinkMessage=Användare med {0} {1} finns redan, Hur vill du forsätta? -federatedIdentityConfirmReauthenticateMessage=Autentisera för att länka ditt konto med {0} -confirmLinkIdpReviewProfile=Granska profil -confirmLinkIdpContinue=Lägg till i existerande konto - -configureTotpMessage=Du behöver konfigurera mobilautentiseraren för att aktivera ditt konto. -updateProfileMessage=Du behöver uppdatera din användarprofil för att aktivera ditt konto. -updatePasswordMessage=Du behöver byta ditt lösenord för att aktivera ditt konto. -verifyEmailMessage=Du behöver verifiera din e-postadress för att aktivera ditt konto. -linkIdpMessage=Du behöver verifiera din e-postadress för att länka ditt konto med {0}. - -emailSentMessage=Du bör inom kort motta ett epost-meddelande med ytterligare instruktioner inom kort. -emailSendErrorMessage=E-postmeddelandet kunde inte skickas, försök igen senare. - -accountUpdatedMessage=Ditt konto har uppdaterats. -accountPasswordUpdatedMessage=Ditt lösenord har uppdaterats. - -noAccessMessage=Ingen Ã¥tkomst - -invalidPasswordMinLengthMessage=Ogiltigt lösenord. Minsta längd är {0}. -invalidPasswordMinDigitsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} siffror. -invalidPasswordMinLowerCaseCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} smÃ¥ bokstäver. -invalidPasswordMinUpperCaseCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} stora bokstäver. -invalidPasswordMinSpecialCharsMessage=Ogiltigt lösenord: mÃ¥ste innehÃ¥lla minst {0} specialtecken. -invalidPasswordNotUsernameMessage=Ogiltigt lösenord: FÃ¥r inte vara samma som användarnamnet. -invalidPasswordRegexPatternMessage=Ogiltigt lösenord: matchar inte regex mönstret(en). -invalidPasswordHistoryMessage=Ogiltigt lösenord: FÃ¥r inte vara samma som de senaste {0} lösenorden. -invalidPasswordGenericMessage=Ogiltigt lösenord: Det nya lösenordet stämmer inte med lösenordspolicyn. - -failedToProcessResponseMessage=Misslyckades med att behandla svaret -httpsRequiredMessage=HTTPS krävs -realmNotEnabledMessage=Realm är inte aktiverad -invalidRequestMessage=Ogiltig förfrÃ¥gan -failedLogout=Utloggning misslyckades -unknownLoginRequesterMessage=Okänd inloggningsförfrÃ¥gan -loginRequesterNotEnabledMessage=InloggningsförfrÃ¥garen är inte aktiverad -bearerOnlyMessage=Bearer-only-applikationer tillÃ¥ts inte att initiera inloggning genom webbläsare -standardFlowDisabledMessage=Klienten tillÃ¥ts inte att initiera inloggning genom webbläsare med det givna response_type. Standardflödet är inaktiverat för klienten. -implicitFlowDisabledMessage=Klienten tillÃ¥ts inte att initiera inloggning genom webbläsare med det givna response_type. Villkorslöst flöde är inaktiverat för klienten. -invalidRedirectUriMessage=Ogiltig omdirigeringsadress -unsupportedNameIdFormatMessage=NameIDFormat stöds ej -invalidRequesterMessage=Ogiltig förfrÃ¥gare -registrationNotAllowedMessage=Registrering tillÃ¥ts ej -resetCredentialNotAllowedMessage=Ã…terställning av uppgifter tillÃ¥ts ej - -permissionNotApprovedMessage=Rättigheten ej godkänd. -noRelayStateInResponseMessage=Inget vidarebefordrat tillstÃ¥nd i svaret frÃ¥n identitetsleverantör. -insufficientPermissionMessage=Otillräckliga tillstÃ¥nd för att länka identiteter. -couldNotProceedWithAuthenticationRequestMessage=Kunde inte fortsätta med autentiseringsförfrÃ¥gan till identitetsleverantör. -couldNotObtainTokenMessage=Kunde inte motta element frÃ¥n identitetsleverantör. -unexpectedErrorRetrievingTokenMessage=Oväntat fel när element hämtas frÃ¥n identitetsleverantör. -unexpectedErrorHandlingResponseMessage=Oväntat fel under hantering av svar frÃ¥n frÃ¥n identitetsleverantör. -identityProviderAuthenticationFailedMessage=Autentiseringen misslyckades. Kunde inte autentisera med identitetsleverantör. -couldNotSendAuthenticationRequestMessage=Kunde inte skicka autentiseringsförfrÃ¥gan till identitetsleverantör. -unexpectedErrorHandlingRequestMessage=Oväntat fel under hantering av autentiseringsförfrÃ¥gan till identitetsleverantör. -invalidAccessCodeMessage=Ogiltig tillträdeskod. -sessionNotActiveMessage=Sessionen ej aktiv. -invalidCodeMessage=Ett fel uppstod, vänligen logga in igen genom din applikation. -identityProviderUnexpectedErrorMessage=Oväntat fel under autentiseringen med identitetsleverantör -identityProviderNotFoundMessage=Kunde inte hitta en identitetsleverantör med identifikatorn. -identityProviderLinkSuccess=Ditt konto lyckades med att länka {0} med kontot {1}. -staleCodeMessage=Den här sidan är inte längre giltig, vänligen gÃ¥ tillbaka till din applikation och logga in igen -realmSupportsNoCredentialsMessage=Realmen stödjer inga inloggningstyper. -identityProviderNotUniqueMessage=Realmen stödjer flera identitetsleverantör. Kunde inte avgöra vilken identitetsleverantör som skall användas för autentisering. -emailVerifiedMessage=Din e-postadress har blivit verifierad. -staleEmailVerificationLink=Länken du klickade pÃ¥ är en gammal, inaktuell länk som inte längre är giltig. Kanske har du redan verifierat din e-post? - -backToApplication=« Tillbaka till applikationen -missingParameterMessage=Parametrar som saknas\: {0} -clientNotFoundMessage=Klienten hittades ej. -clientDisabledMessage=Klienten är inaktiverad. -invalidParameterMessage=Ogiltig parameter\: {0} -alreadyLoggedIn=Du är redan inloggad. diff --git a/deps/keycloak/themes/base/login/messages/messages_tr.properties b/deps/keycloak/themes/base/login/messages/messages_tr.properties deleted file mode 100644 index 7d6c7a047..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_tr.properties +++ /dev/null @@ -1,294 +0,0 @@ -doLogIn=Oturum a\u00E7 -doRegister=Kay\u0131t ol -doCancel=\u0130ptal et -doSubmit=G\u00F6nder -doYes=Evet -doNo=Hay\u0131r -doContinue=Devam et -doIgnore=Yoksay -doAccept=Kabul Et -doDecline=Reddet -doForgotPassword=Parolan\u0131z\u0131 m\u0131 unuttunuz? -doClickHere=Buraya T\u0131klay\u0131n -doImpersonate=Ki\u015Fiselle\u015Ftir -kerberosNotConfigured=Kerberos Tan\u0131mlanmam\u0131\u015F -kerberosNotConfiguredTitle=Kerberos Tan\u0131mlanmam\u0131\u015F -bypassKerberosDetail=Ya Kerberos ile giri\u015F yapmad\u0131n\u0131z veya taray\u0131c\u0131n\u0131z Kerberos giri\u015F i\u00E7in ayarlanmam\u0131\u015F. Di\u011Fer yollarla giri\u015F yapmak i\u00E7in l\u00FCtfen devam''a t\u0131klay\u0131n -kerberosNotSetUp=Kerberos kurulmad\u0131. Giri\u015F yapamazs\u0131n. -registerTitle=Kay\u0131t ol -loginTitle={0} adresinde oturum a\u00E7\u0131n -loginTitleHtml={0} -impersonateTitle={0} Kullan\u0131c\u0131 kimli\u011Fine b\u00FCr\u00FCn -impersonateTitleHtml={0} Kullan\u0131c\u0131 kimli\u011Fine b\u00FCr\u00FCn -realmChoice=Realm -unknownUser=Bilinmeyen kullan\u0131c\u0131 -loginTotpTitle=Mobil Kimlik Do\u011Frulama Kurulumu -loginProfileTitle=Hesap bilgilerini G\u00FCncelle -loginTimeout=Giri\u015F yapmak \u00E7ok uzun s\u00FCrd\u00FC. Giri\u015F s\u00FCreci ba\u015Ftan ba\u015Flayacak. -oauthGrantTitle={0} adresine Eri\u015Fim Ver -oauthGrantTitleHtml={0} -errorTitle=\u00DCzg\u00FCn\u00FCz... -errorTitleHtml=\u00DCzg\u00FCn\u00FCz ... -emailVerifyTitle=Eposta Do\u011Frulama -emailForgotTitle=Parolan\u0131z\u0131 m\u0131 unuttunuz? -updatePasswordTitle=\u015Eifre g\u00FCncelle -codeSuccessTitle=Ba\u015Far\u0131l\u0131 i\u015Flem kodu -codeErrorTitle=Hatal\u0131 i\u015Flem kodu\: {0} -displayUnsupported=\u0130stenen g\u00F6sterim t\u00FCr\u00FC desteklenmiyor -browserRequired=Giri\u015F i\u00E7in tary\u0131c\u0131 gerekli -browserContinue=Giri\u015Fe devam etmek i\u00E7in taray\u0131c\u0131 gerekli -browserContinuePrompt=Taray\u0131c\u0131 a\u00E7 ve giri\u015Fe devam et? [e/h]: -browserContinueAnswer=h - - -termsTitle=\u015Eartlar ve ko\u015Fullar -termsText=

    Tan\u0131mlanacak \u015Fartlar ve ko\u015Fullar

    -termsPlainText=Tan\u0131mlanacak \u015Fartlar ve ko\u015Fullar. - -recaptchaFailed=Ge\u00E7ersiz Recaptcha -recaptchaNotConfigured=Recaptcha gerekli, ancak yap\u0131land\u0131r\u0131lmam\u0131\u015F -consentDenied=Onay reddedildi. - -noAccount=Yeni kullan\u0131c\u0131? -username=Kullan\u0131c\u0131 Ad\u0131 -usernameOrEmail=Kullan\u0131c\u0131 ad\u0131 veya E-mail -firstName=Ad -givenName=Ad -fullName=Ad Soyad -lastName=Soyad -familyName=Soyad -email=E-Mail -password=\u015Eifre -passwordConfirm=\u015Eifre Do\u011Frulama -passwordNew=Yeni \u015Eifre -passwordNewConfirm=eni \u015Eifre Do\u011Frulama -rememberMe=Beni Hat\u0131rla -authenticatorCode=Kimlik Do\u011Frulama Kodu -address=Adres -street=Cadde -locality=Semt -region=B\u00F6lge -postal_code=Posta Kodu -country=\u00DClke -emailVerified=E-Mail Do\u011Fruland\u0131 -gssDelegationCredential=GSS Yetki Bilgisi - - -profileScopeConsentText=Kullan\u0131c\u0131 profili -emailScopeConsentText=E-Mai Adresi -addressScopeConsentText=Adres -phoneScopeConsentText=Telefon Numaras\u0131 -offlineAccessScopeConsentText=\u00C7evrimd\u0131\u015F\u0131 Eri\u015Fim -samlRoleListScopeConsentText=Rollerim -rolesScopeConsentText=Kullan\u0131c\u0131 rolleri - -loginTotpIntro=Bu hesaba eri\u015Fmek i\u00E7in bir Tek Kullan\u0131ml\u0131k \u015Eifre olu\u015Fturmal\u0131s\u0131n\u0131z. -loginTotpStep1=Cep telefonunuzda a\u015Fa\u011F\u0131daki uygulamalardan birini y\u00FCkleyin -loginTotpStep2=Uygulamay\u0131 a\u00E7\u0131n ve barkodu taray\u0131n -loginTotpStep3=Uygulama taraf\u0131ndan sa\u011Flanan tek seferlik kodu girin ve kurulumu tamamlamak i\u00E7in G\u00F6nder''i t\u0131klay\u0131n. -loginTotpManualStep2=Uygulamay\u0131 a\u00E7\u0131n ve anahtar\u0131 girin -loginTotpManualStep3=Uygulama bunlar\u0131 ayarlamaya izin veriyorsa a\u015Fa\u011F\u0131daki yap\u0131land\u0131rma de\u011Ferlerini kullan\u0131n. -loginTotpUnableToScan=Taranam\u0131yor? -loginTotpScanBarcode=Barkod tara? -loginOtpOneTime=Tek seferlik kod -loginTotpType=Tip -loginTotpAlgorithm=Algoritma -loginTotpDigits=Basamak -loginTotpInterval=Aral\u0131k -loginTotpCounter=Saya\u00E7 - -loginTotp.totp=Zaman Tabanl\u0131 -loginTotp.hotp=Saya\u00E7 Tabanl\u0131 - - -oauthGrantRequest=Bu eri\u015Fim ayr\u0131cal\u0131klar\u0131 veriyor musunuz? -inResource=i\u00E7inde - -emailVerifyInstruction1=E-posta adresinizi do\u011Frulamak i\u00E7in talimatlar\u0131 i\u00E7eren bir e-posta size g\u00F6nderildi. -emailVerifyInstruction2=E-postan\u0131zda do\u011Frulama kodu almad\u0131n\u0131z m\u0131? -emailVerifyInstruction3=e-postay\u0131 yeniden g\u00F6ndermek i\u00E7in. - -emailLinkIdpTitle=Ba\u011Flant\u0131 {0} -emailLinkIdp1={1} hesab\u0131n\u0131 {2} hesab\u0131n\u0131za ba\u011Flayan talimatlar\u0131 i\u00E7eren bir e-posta size g\u00F6nderildi. -emailLinkIdp2=E-postan\u0131zda do\u011Frulama kodu almad\u0131n\u0131z m\u0131? -emailLinkIdp3=e-postay\u0131 yeniden g\u00F6ndermek i\u00E7in. -emailLinkIdp4=E-postay\u0131 farkl\u0131 taray\u0131c\u0131da zaten do\u011Frulad\u0131ysan\u0131z -emailLinkIdp5=devam etmek. - -backToLogin=« Giri\u015F''e geri d\u00F6n - -emailInstruction=Kullan\u0131c\u0131 ad\u0131n\u0131z\u0131 veya e-posta adresinizi girin ve yeni bir \u015Fifre olu\u015Fturmaya ili\u015Fkin talimatlar\u0131 size g\u00F6nderece\u011Fiz. - -copyCodeInstruction=L\u00FCtfen bu kodu kopyalay\u0131n ve uygulaman\u0131za yap\u0131\u015Ft\u0131r\u0131n: - -pageExpiredTitle=Sayfan\u0131n S\u00FCresi Doldu -pageExpiredMsg1=Giri\u015F i\u015Flemini yeniden ba\u015Flatmak i\u00E7in -pageExpiredMsg2=Giri\u015F i\u015Flemine devam etmek i\u00E7in - -personalInfo=Ki\u015Fisel bilgi: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Realm Olu\u015Ftur -role_create-client=Create client -role_view-realm=Realm g\u00F6r\u00FCnt\u00FCle -role_view-users=Kullan\u0131c\u0131 g\u00F6r\u00FCnt\u00FCle -role_view-applications=Uygulamar\u0131 g\u00F6r -role_view-clients=Clients g\u00F6r\u00FCnt\u00FCle -role_view-events=Events g\u00F6r\u00FCnt\u00FCle -role_view-identity-providers=Kimlik sa\u011Flay\u0131c\u0131lar\u0131n\u0131 g\u00F6r\u00FCnt\u00FCle -role_manage-realm=Realm Y\u00F6net -role_manage-users=Kullan\u0131c\u0131lar\u0131 Y\u00F6net -role_manage-applications=Uygulamalar\u0131 Y\u00F6net -role_manage-identity-providers=Kimlik Sa\u011Flay\u0131c\u0131lar\u0131n\u0131 Y\u00F6net -role_manage-clients=Clients Y\u00F6net -role_manage-events=Events Y\u00F6net -role_view-profile=Profil g\u00F6r\u00FCnt\u00FCle -role_manage-account=Hesap Y\u00F6net -role_manage-account-links=Hesap ba\u011Flant\u0131lar\u0131n\u0131 y\u00F6net -role_read-token=Token oku -role_offline-access=\u00C7evrimd\u0131\u015F\u0131 eri\u015Fim -client_account=Hesap -client_security-admin-console=G\u00FCvenlik Y\u00F6netici Konsolu -client_admin-cli=Admin CLI -client_realm-management=Realm Y\u00F6net -client_broker=Broker - -invalidUserMessage=Ge\u00E7ersiz kullan\u0131c\u0131 ad\u0131 veya \u015Fifre. -invalidEmailMessage=Ge\u00E7ersiz e-posta adresi. -accountDisabledMessage=Hesap devre d\u0131\u015F\u0131, y\u00F6netici ile ileti\u015Fime ge\u00E7in. -accountTemporarilyDisabledMessage=Hesab\u0131n\u0131z ge\u00E7ici olarak kilitlendi, l\u00FCtfen y\u00F6neticiyle ileti\u015Fime ge\u00E7in veya daha sonra tekrar deneyin. -expiredCodeMessage=Oturum zaman a\u015F\u0131m\u0131na u\u011Frad\u0131. L\u00FCtfen tekrar giri\u015F yap\u0131n. -expiredActionMessage=Eylem s\u00FCresi doldu. L\u00FCtfen \u015Fimdi giri\u015F yapmaya devam edin. -expiredActionTokenNoSessionMessage=Eylemin s\u00FCresi doldu. -expiredActionTokenSessionExistsMessage=Eylem s\u00FCresi doldu. L\u00FCtfen tekrar ba\u015Flay\u0131n. - -missingFirstNameMessage=L\u00FCtfen ilk ad\u0131 belirtin. -missingLastNameMessage=L\u00FCtfen soyad\u0131 belirtin. -missingEmailMessage=L\u00FCtfen email belirtin. -missingUsernameMessage=L\u00FCtfen kullan\u0131c\u0131 ad\u0131n\u0131 belirtin. -missingPasswordMessage=L\u00FCtfen \u015Fifre belirtin. -missingTotpMessage=L\u00FCtfen kimlik do\u011Frulama kodunu belirtin. -notMatchPasswordMessage=\u015Eifreler e\u015Fle\u015Fmiyor. - -invalidPasswordExistingMessage=Mevcut \u015Fifre ge\u00E7ersiz. -invalidPasswordBlacklistedMessage=Ge\u00E7ersiz \u015Fifre: \u015Fifre kara listeye al\u0131nd\u0131. -invalidPasswordConfirmMessage=\u015Eifre onay\u0131 e\u015Fle\u015Fmiyor. -invalidTotpMessage=Ge\u00E7ersiz kimlik do\u011Frulama kodu. - -usernameExistsMessage=Kullan\u0131c\u0131 ad\u0131 zaten var. -emailExistsMessage=Bu e-posta zaten var. - -federatedIdentityExistsMessage={0} {1} kullan\u0131c\u0131 zaten var. Hesab\u0131 ba\u011Flamak i\u00E7in l\u00FCtfen hesap y\u00F6netimine giri\u015F yap\u0131n. - -confirmLinkIdpTitle=Bu Hesap Zaten Mevcut -federatedIdentityConfirmLinkMessage={0} {1} kullan\u0131c\u0131 zaten var. Nas\u0131l devam etmek istersin? -#federatedIdentityConfirmReauthenticateMessage=Hesab\u0131n\u0131z\u0131 {1} ile ba\u011Flamak i\u00E7in {0} olarak do\u011Frulay\u0131n -confirmLinkIdpReviewProfile=Profili g\u00F6zden ge\u00E7ir -confirmLinkIdpContinue=Mevcut hesaba ekle - -configureTotpMessage=Hesab\u0131n\u0131z\u0131 etkinle\u015Ftirmek i\u00E7in Mobil Kimlik Do\u011Frulama''y\u0131 ayarlaman\u0131z gerekiyor. -updateProfileMessage=Hesab\u0131n\u0131z\u0131 etkinle\u015Ftirmek i\u00E7in kullan\u0131c\u0131 profilinizi g\u00FCncellemeniz gerekiyor. -updatePasswordMessage=Hesab\u0131n\u0131z\u0131 etkinle\u015Ftirmek i\u00E7in \u015Fifrenizi de\u011Fi\u015Ftirmeniz gerekiyor. -resetPasswordMessage=\u015Eifreni de\u011Fi\u015Ftirmelisin. -verifyEmailMessage=Hesab\u0131n\u0131z\u0131 etkinle\u015Ftirmek i\u00E7in e-posta adresinizi do\u011Frulaman\u0131z gerekiyor. -linkIdpMessage=Hesab\u0131n\u0131z\u0131 {0} ile ba\u011Flamak i\u00E7in e-posta adresinizi do\u011Frulaman\u0131z gerekiyor. - -emailSentMessage=Daha fazla talimatla k\u0131sa s\u00FCrede bir e-posta almal\u0131s\u0131n\u0131z. -emailSendErrorMessage=E-posta g\u00F6nderilemedi, l\u00FCtfen daha sonra tekrar deneyin. - -accountUpdatedMessage=Hesab\u0131n g\u00FCncellendi. -accountPasswordUpdatedMessage=\u015Eifreniz g\u00FCncellenmi\u015Ftir. - -delegationCompleteHeader=Giri\u015F ba\u015Far\u0131l\u0131 -delegationCompleteMessage=Bu taray\u0131c\u0131 penceresini kapatabilir ve konsol uygulaman\u0131za geri d\u00F6nebilirsiniz. -delegationFailedHeader=Giri\u015F ba\u015Far\u0131s\u0131z -delegationFailedMessage=Bu taray\u0131c\u0131 penceresini kapatabilir ve konsol uygulaman\u0131za geri d\u00F6n\u00FCp tekrar giri\u015F yapmay\u0131 deneyebilirsiniz.. - -noAccessMessage=Eri\u015Fim yok - -invalidPasswordMinLengthMessage=Ge\u00E7ersiz \u015Eifre: En az {0} karakter uzunlu\u011Funda olmal\u0131. -invalidPasswordMinDigitsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} say\u0131(lar) i\u00E7ermelidir. -invalidPasswordMinLowerCaseCharsMessage=Ge\u00E7ersiz \u015Eifre \: En az {0} k\u00FC\u00E7\u00FCk harf i\u00E7ermelidir. -invalidPasswordMinUpperCaseCharsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} b\u00FCy\u00FCk harf i\u00E7ermelidir. -invalidPasswordMinSpecialCharsMessage=Ge\u00E7ersiz \u015Eifre: En az {0} \u00F6zel karakter i\u00E7ermelidir. -invalidPasswordNotUsernameMessage=Ge\u00E7ersiz \u015Eifre: Kullan\u0131c\u0131 ad\u0131yla ayn\u0131 olamaz. -invalidPasswordRegexPatternMessage=Ge\u00E7ersiz \u015Eifre: Regex Patternine uygun de\u011Fil. -invalidPasswordHistoryMessage=Ge\u00E7ersiz \u015Eifre: Son {0} \u015Fifreden biri olamaz. -invalidPasswordGenericMessage=Ge\u00E7ersiz \u015Eifre: yeni \u015Fifre \u015Fifre politikalar\u0131yla e\u015Fle\u015Fmiyor. - -failedToProcessResponseMessage=Yan\u0131t i\u015Flenemedi -httpsRequiredMessage=HTTPS zorunlu -realmNotEnabledMessage=Realm aktif de\u011Fil -invalidRequestMessage=Ge\u00E7ersiz \u0130stek -failedLogout=\u00C7\u0131k\u0131\u015F ba\u015Far\u0131s\u0131z -unknownLoginRequesterMessage=Bilinmeyen giri\u015F iste\u011Fi -loginRequesterNotEnabledMessage=Giri\u015F istemi etkin de\u011Fil -bearerOnlyMessage=Yaln\u0131zca ta\u015F\u0131y\u0131c\u0131 uygulamalar\u0131 taray\u0131c\u0131 giri\u015Fini ba\u015Flatmaya izinli de\u011Fil -standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. -implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. -invalidRedirectUriMessage=Ge\u00E7ersiz y\u00F6nlendirme url''i -unsupportedNameIdFormatMessage=Desteklenmeyen NameIDFormat -invalidRequesterMessage=Ge\u00E7ersiz istek -registrationNotAllowedMessage=Kay\u0131t yap\u0131lamaz -resetCredentialNotAllowedMessage=S\u0131f\u0131rlamas\u0131na izin verilmiyor - -permissionNotApprovedMessage=\u0130zin onaylanmad\u0131. -noRelayStateInResponseMessage=Kimlik sa\u011Flay\u0131c\u0131dan yan\u0131t olarak ge\u00E7i\u015F durumu yok. -insufficientPermissionMessage=Kimliklerin ba\u011Flanmas\u0131 i\u00E7in yetersiz izinler. -couldNotProceedWithAuthenticationRequestMessage=Kimlik sa\u011Flay\u0131c\u0131ya kimlik do\u011Frulama iste\u011Fi ile devam edilemedi. -couldNotObtainTokenMessage=Kimlik sa\u011Flay\u0131c\u0131dan token al\u0131namad\u0131. -unexpectedErrorRetrievingTokenMessage=Kimlik sa\u011Flay\u0131c\u0131dan token al\u0131rken beklenmeyen bir hata olu\u015Ftu. -unexpectedErrorHandlingResponseMessage=Kimlik sa\u011Flay\u0131c\u0131dan yan\u0131t al\u0131n\u0131rken beklenmeyen bir hata olu\u015Ftu. -identityProviderAuthenticationFailedMessage=Kimlik do\u011Frulama ba\u015Far\u0131s\u0131z oldu. Kimlik sa\u011Flay\u0131c\u0131yla kimlik do\u011Frulamas\u0131 yap\u0131lamad\u0131. -couldNotSendAuthenticationRequestMessage=Kimlik sa\u011Flay\u0131c\u0131ya kimlik do\u011Frulama iste\u011Fi g\u00F6nderilemedi. -unexpectedErrorHandlingRequestMessage=Kimlik sa\u011Flay\u0131c\u0131ya kimlik do\u011Frulama iste\u011Fi i\u015Flenirken beklenmeyen bir hata olu\u015Ftu. -invalidAccessCodeMessage=Ge\u00E7ersiz giri\u015F kodu. -sessionNotActiveMessage=Oturum etkin de\u011Fil. -invalidCodeMessage=Bir hata olu\u015Ftu, l\u00FCtfen ba\u015Fvurunuz arac\u0131l\u0131\u011F\u0131yla tekrar giri\u015F yap\u0131n. -identityProviderUnexpectedErrorMessage=Kimlik sa\u011Flay\u0131c\u0131yla kimlik do\u011Frulamas\u0131 yap\u0131l\u0131rken beklenmeyen bir hata olu\u015Ftu -identityProviderNotFoundMessage=Tan\u0131mlay\u0131c\u0131 ile kimlik sa\u011Flay\u0131c\u0131 bulunamad\u0131. -identityProviderLinkSuccess=E-postan\u0131z\u0131 ba\u015Far\u0131yla do\u011Frulad\u0131n\u0131z. L\u00FCtfen orijinal taray\u0131c\u0131n\u0131za geri d\u00F6n\u00FCn ve giri\u015F yap\u0131n. -staleCodeMessage=Bu sayfa art\u0131k ge\u00E7erli de\u011Fil, l\u00FCtfen uygulaman\u0131za geri d\u00F6n\u00FCn ve tekrar giri\u015F yap\u0131n -realmSupportsNoCredentialsMessage=Realm herhangi bir kimlik bilgisi t\u00FCr\u00FCn\u00FC desteklemiyor. -identityProviderNotUniqueMessage=Realm \u00E7oklu kimlik sa\u011Flay\u0131c\u0131lar\u0131n\u0131 destekler. Kimlik do\u011Frulamak i\u00E7in hangi kimlik sa\u011Flay\u0131c\u0131s\u0131n\u0131n kullan\u0131lmas\u0131 gerekti\u011Fini belirleyemedi. -emailVerifiedMessage=E-posta adresiniz do\u011Fruland\u0131. -staleEmailVerificationLink=T\u0131klad\u0131\u011F\u0131n\u0131z ba\u011Flant\u0131 eski bir ba\u011Flant\u0131d\u0131r ve art\u0131k ge\u00E7erli de\u011Fil. Belki de e-postan\u0131z\u0131 zaten do\u011Frulad\u0131n\u0131z. -identityProviderAlreadyLinkedMessage={0} taraf\u0131ndan d\u00F6nd\u00FCr\u00FClen birle\u015Fik kimlik, ba\u015Fka bir kullan\u0131c\u0131yla zaten ba\u011Flant\u0131l\u0131. -confirmAccountLinking={1} kimlik sa\u011Flay\u0131c\u0131s\u0131n\u0131n hesab\u0131n\u0131 {0} hesab\u0131n\u0131zla ili\u015Fkilendirmeyi onaylay\u0131n. -confirmEmailAddressVerification={0} e-posta adresinin ge\u00E7erlili\u011Fini onaylay\u0131n. -confirmExecutionOfActions=A\u015Fa\u011F\u0131daki eylemleri ger\u00E7ekle\u015Ftirin - -backToApplication=« Uygulamaya D\u00F6n -missingParameterMessage=Eksik parametreler\: {0} -clientNotFoundMessage=\u0130stemci Bulunamad\u0131. -clientDisabledMessage=\u0130stemci engelli. -invalidParameterMessage=Ge\u00E7ersiz Paremetreler\: {0} -alreadyLoggedIn=Zaten giri\u015F yapt\u0131n\u0131z. -differentUserAuthenticated=Bu oturumda zaten farkl\u0131 kullan\u0131c\u0131 '' {0} '' olarak do\u011Frulanm\u0131\u015Fs\u0131n\u0131z. L\u00FCtfen \u00F6nce \u00E7\u0131k\u0131\u015F yap\u0131n\u0131z. -brokerLinkingSessionExpired=\u0130stenen broker hesab\u0131 ba\u011Flan\u0131yor, ancak mevcut oturum art\u0131k ge\u00E7erli de\u011Fil. -proceedWithAction=» Devam etmek i\u00E7in buraya t\u0131klay\u0131n - -requiredAction.CONFIGURE_TOTP=OTP Ayarla -requiredAction.terms_and_conditions=\u015Eartlar ve Ko\u015Fullar -requiredAction.UPDATE_PASSWORD=\u015Eifre g\u00FCncelle -requiredAction.UPDATE_PROFILE=Profili G\u00FCncelle -requiredAction.VERIFY_EMAIL=E-mail''i do\u011Frula - -doX509Login=Olarak giri\u015F yapacaks\u0131n\u0131z\: -clientCertificate=X509 istemci sertifikas\u0131\: -noCertificate=[Sertifika Yok] - - -pageNotFound=Sayfa Bulunamad\u0131 -internalServerError=Bir i\u00E7 sunucu hatas\u0131 olu\u015Ftu - -console-username=Kullan\u0131c\u0131 ad\u0131: -console-password=Parola: -console-otp=Tek seferlik \u015Fifre: -console-new-password=Yeni \u015Fifre: -console-confirm-password=\u015Eifreyi Onayla: -console-update-password=\u015Eifrenizin g\u00FCncellenmesi gerekiyor. -console-verify-email=E-posta adresinizi do\u011Frulaman\u0131z gerekiyor. Bir do\u011Frulama kodu i\u00E7eren {0} adresine bir e-posta g\u00F6nderildi. L\u00FCtfen bu kodu a\u015Fa\u011F\u0131daki girdiye giriniz. -console-email-code=E-posta Kodu: -console-accept-terms=\u015Eartlar\u0131 kabul et? [e/h]: -console-accept=e diff --git a/deps/keycloak/themes/base/login/messages/messages_zh_CN.properties b/deps/keycloak/themes/base/login/messages/messages_zh_CN.properties deleted file mode 100644 index b669f218d..000000000 --- a/deps/keycloak/themes/base/login/messages/messages_zh_CN.properties +++ /dev/null @@ -1,216 +0,0 @@ -# encoding: utf-8 -doLogIn=登录 -doRegister=注册 -doCancel=å–消 -doSubmit=æ交 -doYes=是 -doNo=å¦ -doContinue=继续 -doAccept=æŽ¥å— -doDecline=æ‹’ç» -doForgotPassword=忘记密ç ? -doClickHere=点击这里 -doImpersonate=模拟 -kerberosNotConfigured=Kerberos 没有é…ç½® -kerberosNotConfiguredTitle=Kerberos 没有é…ç½® -bypassKerberosDetail=您没有通过Kerberos登录 或者您的æµè§ˆå™¨æ²¡æœ‰è®¾ç½®Kerberos登录. 请点击继续通过其他途径登录。 -kerberosNotSetUp=Kerberos没有é…置,您ä¸å¯ä»¥ç™»å½• -registerWithTitle=用 {0} 注册 -registerWithTitleHtml={0} -loginTitle=登录到 {0} -loginTitleHtml={0} -impersonateTitle={0} 模拟用户 -impersonateTitleHtml={0}模拟用户 -realmChoice=域 -unknownUser=未知用户 -loginTotpTitle=手机验è¯è€…é…ç½® -loginProfileTitle=æ›´æ–°è´¦æˆ·ä¿¡æ¯ -loginTimeout=登录超时,请é‡æ–°å¼€å§‹ç™»å½• -oauthGrantTitle=æŽˆæƒ -oauthGrantTitleHtml={0} -errorTitle=很抱歉... -errorTitleHtml=我们很抱歉 ... -emailVerifyTitle=验è¯ç”µå­é‚®ä»¶åœ°å€ -emailForgotTitle=忘记密ç ? -updatePasswordTitle=æ›´æ–°å¯†ç  -codeSuccessTitle=æˆåŠŸç  -codeErrorTitle=错误ç \: {0} - -termsTitle=æ¡æ¬¾ -termsTitleHtml=æ¡æ¬¾ -termsText=

    需è¦ç¡®å®šçš„æ¡æ¬¾

    - -recaptchaFailed=无效的验è¯ç  -recaptchaNotConfigured=需è¦éªŒè¯ç ï¼Œä½†æ˜¯æ²¡æœ‰é…ç½® -consentDenied=许å¯è¢«æ‹’ç»ã€‚ - -noAccount=新用户? -username=用户å -usernameOrEmail=用户å 或 电å­é‚®ç®±åœ°å€ -firstName=å -givenName=姓 -fullName=å…¨å -lastName=姓 -familyName=姓 -email=Email -password=å¯†ç  -passwordConfirm=ç¡®è®¤å¯†ç  -passwordNew=æ–°å¯†ç  -passwordNewConfirm=新密ç ç¡®è®¤ -rememberMe=è®°ä½æˆ‘ -authenticatorCode=一次性验è¯ç  -address=åœ°å€ -street=è¡—é“ -locality=市 -region=çœï¼Œè‡ªæ²»åŒºï¼Œç›´è¾–市 -postal_code=é‚®æ”¿ç¼–ç  -country=国家 -emailVerified=电å­é‚®ä»¶å·²éªŒè¯ -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=在手机安装 FreeOTP 或 Google Authenticator. 这两个应用å¯ä»¥åœ¨ Google Play å’Œ Apple App Store找到. -loginTotpStep2=打开应用扫æ二维ç æˆ–è€…è¾“å…¥ä¸€æ¬¡æ€§ç  -loginTotpStep3=输入应用æ供的一次性ç ç‚¹å‡»æ交完æˆè®¾ç½® -loginOtpOneTime=一次性验è¯ç  - -oauthGrantRequest=您是å¦æƒ³è¦æŽˆäºˆä¸‹åˆ—æƒé™? -inResource=in - -emailVerifyInstruction1=一å°åŒ…å«éªŒè¯é‚®ç®±å…·ä½“步骤的邮件已ç»å‘é€åˆ°æ‚¨çš„邮箱。 -emailVerifyInstruction2=邮箱没有收到验è¯ç ? -emailVerifyInstruction3=é‡æ–°å‘é€ç”µå­é‚®ä»¶ - -emailLinkIdpTitle=链接 {0} -emailLinkIdp1=一å°åŒ…å«é“¾æŽ¥è´¦æˆ· {0} 和账户 {1} 到账户 {2} 的邮件已ç»å‘é€åˆ°æ‚¨çš„邮箱。 -emailLinkIdp2=邮箱没有收到验è¯ç é‚®ä»¶? -emailLinkIdp3=é‡æ–°å‘é€ç”µå­é‚®ä»¶ - -backToLogin=« 回到登录 - -emailInstruction=输入您的用户å和邮箱,我们会å‘é€ä¸€å°å¸¦æœ‰è®¾ç½®æ–°å¯†ç æ­¥éª¤çš„邮件到您的邮箱。 - -copyCodeInstruction=请å¤åˆ¶è¿™æ®µéªŒè¯ç å¹¶ç²˜è´´åˆ°åº”用: - -personalInfo=个人信æ¯\: -role_admin=管ç†å‘˜ -role_realm-admin=域管ç†å‘˜ -role_create-realm=创建域 -role_create-client=创建客户 -role_view-realm=查看域 -role_view-users=查看用户 -role_view-applications=查看应用 -role_view-clients=查看客户 -role_view-events=查看时间 -role_view-identity-providers=查看身份æ供者 -role_manage-realm=管ç†åŸŸ -role_manage-users=管ç†ç”¨æˆ· -role_manage-applications=管ç†åº”用 -role_manage-identity-providers=管ç†èº«ä»½æ供者 -role_manage-clients=管ç†å®¢æˆ· -role_manage-events=管ç†äº‹ä»¶ -role_view-profile=æŸ¥çœ‹ç”¨æˆ·ä¿¡æ¯ -role_manage-account=管ç†è´¦æˆ· -role_read-token=è¯»å– token -role_offline-access=离线访问 -client_account=账户 -client_security-admin-console=安全管ç†æŽ§åˆ¶å° -client_admin-cli=管ç†å‘½ä»¤è¡Œå·¥å…· -client_realm-management=åŸŸç®¡ç† -client_broker=ä»£ç† - -invalidUserMessage=无效的用户å或密ç ã€‚ -invalidEmailMessage=无效的电å­é‚®ä»¶åœ°å€ -accountDisabledMessage=账户被ç¦ç”¨ï¼Œè¯·è”系管ç†å‘˜ã€‚ -accountTemporarilyDisabledMessage=账户被暂时ç¦ç”¨ï¼Œè¯·ç¨åŽå†è¯•æˆ–è”系管ç†å‘˜ã€‚ -expiredCodeMessage=登录超时,请é‡æ–°ç™»å½•ã€‚ - -missingFirstNameMessage=请输入å -missingLastNameMessage=请输入姓 -missingEmailMessage=请输入email. -missingUsernameMessage=请输入用户å -missingPasswordMessage=è¯·è¾“å…¥å¯†ç  -missingTotpMessage=请输入验è¯ç  -notMatchPasswordMessage=密ç ä¸åŒ¹é…。 - -invalidPasswordExistingMessage=æ— æ•ˆçš„æ—§å¯†ç  -invalidPasswordConfirmMessage=确认密ç ä¸ç›¸åŒ -invalidTotpMessage=无效的验è¯ç  - -usernameExistsMessage=用户å已被å ç”¨ -emailExistsMessage=电å­é‚®ä»¶å·²å­˜åœ¨ã€‚ - -federatedIdentityExistsMessage=用户 {0} {1} 已存在. 请登录账户管ç†ç•Œé¢é“¾æŽ¥è´¦æˆ·. - -confirmLinkIdpTitle=账户已存在 -federatedIdentityConfirmLinkMessage=用户{0} {1} 已存在. 怎么继续? -#federatedIdentityConfirmReauthenticateMessage=以 {0} 登录æ¥å°† {1} 连接到您的账户 -confirmLinkIdpReviewProfile=å®¡æŸ¥æ‚¨çš„ä¿¡æ¯ -confirmLinkIdpContinue=添加到已知账户 - -configureTotpMessage=您需è¦è®¾ç½®éªŒè¯ç æ¨¡å—æ¥æ¿€æ´»æ‚¨çš„账户 -updateProfileMessage=您需è¦æ›´æ–°æ‚¨çš„简介æ¥æ¿€æ´»æ‚¨çš„账户 -updatePasswordMessage=您需è¦æ›´æ–°æ‚¨çš„密ç æ¥æ¿€æ´»æ‚¨çš„账户 -verifyEmailMessage=您需è¦éªŒè¯æ‚¨çš„电å­é‚®ç®±æ¥æ¿€æ´»æ‚¨çš„账户 -linkIdpMessage=您需è¦éªŒè¯æ‚¨çš„电å­é‚®ç®±æ¥è¿žæŽ¥åˆ°è´¦æˆ·{0}. - -emailSentMessage=您很快会收到一å°å…³äºŽæŽ¥ä¸‹æ¥æ“作的邮件。 -emailSendErrorMessage=无法å‘é€é‚®ä»¶ï¼Œè¯·ç¨åŽå†è¯• - -accountUpdatedMessage=您的账户已ç»æ›´æ–°ã€‚ -accountPasswordUpdatedMessage=您的密ç å·²ç»æ›´æ–° - -noAccessMessage=æ— æƒé™ - -invalidPasswordMinLengthMessage=无效的密ç ï¼šæœ€çŸ­é•¿åº¦ {0}. -invalidPasswordMinDigitsMessage=无效的密ç ï¼š 至少包å«{0} 个数字 -invalidPasswordMinLowerCaseCharsMessage=无效的密ç ï¼šè‡³å°‘åŒ…å« {0} å°å†™å­—æ¯. -invalidPasswordMinUpperCaseCharsMessage=无效的密ç ï¼šè‡³å°‘åŒ…å« {0} 大写字æ¯. -invalidPasswordMinSpecialCharsMessage=无效的密ç ï¼šè‡³å°‘åŒ…å« {0} 特殊字符. -invalidPasswordNotUsernameMessage=无效的密ç ï¼š ä¸èƒ½ä¸Žç”¨æˆ·å相åŒ. -invalidPasswordRegexPatternMessage=无效的密ç ï¼š 无法与正则表达å¼åŒ¹é…. -invalidPasswordHistoryMessage=无效的密ç ï¼š ä¸èƒ½ä¸Žå‰ {0} 个旧密ç ç›¸åŒ. - -failedToProcessResponseMessage=无法处ç†å›žå¤ -httpsRequiredMessage=需è¦HTTPS -realmNotEnabledMessage=域未å¯ç”¨ -invalidRequestMessage=éžæ³•çš„请求 -failedLogout=无法登出 -unknownLoginRequesterMessage=未知的登录请求å‘èµ·æ–¹ -loginRequesterNotEnabledMessage=登录请求å‘起方为å¯ç”¨ -bearerOnlyMessage=Bearer-only 的应用ä¸å…许通过æµè§ˆå™¨ç™»å½• -standardFlowDisabledMessage=客户程åºä¸å…许å‘起指定返回类型的æµè§ˆå™¨ç™»å½•. 标准的登录æµç¨‹å·²ç¦ç”¨ã€‚ -implicitFlowDisabledMessage=客户程åºä¸å…许å‘起指定返回类型的æµè§ˆå™¨ç™»å½•. éšå¼çš„登录æµç¨‹å·²ç¦ç”¨ã€‚ -invalidRedirectUriMessage=无效的跳转链接 -unsupportedNameIdFormatMessage=ä¸æ”¯æŒçš„ nameIDæ ¼å¼ -invalidRequesterMessage=无效的å‘起者 -registrationNotAllowedMessage=注册ä¸å…许 -resetCredentialNotAllowedMessage=ä¸å…许é‡ç½®å¯†ç  - -permissionNotApprovedMessage=许å¯æ²¡æœ‰æ‰¹å‡† -noRelayStateInResponseMessage=身份æ供者没有返回中继状æ€ä¿¡æ¯ -insufficientPermissionMessage=æƒé™ä¸è¶³ä»¥é“¾æŽ¥æ–°çš„身份 -couldNotProceedWithAuthenticationRequestMessage=无法与身份æ供者处ç†è®¤è¯è¯·æ±‚ -couldNotObtainTokenMessage=未从身份æ供者获得token -unexpectedErrorRetrievingTokenMessage=从身份æ供者获得Tokenæ—¶é‡åˆ°æœªçŸ¥é”™è¯¯ -unexpectedErrorHandlingResponseMessage=从身份æ供者获得回å¤æ—¶é‡åˆ°æœªçŸ¥é”™è¯¯ -identityProviderAuthenticationFailedMessage=认è¯å¤±è´¥ï¼Œæ— æ³•é€šè¿‡èº«ä»½æä¾›è€…è®¤è¯ -couldNotSendAuthenticationRequestMessage=无法å‘身份æ供方å‘é€è®¤è¯è¯·æ±‚ -unexpectedErrorHandlingRequestMessage=在处ç†å‘å‘认è¯æ供方的请求时,出现未知错误。 -invalidAccessCodeMessage=无效的验è¯ç  -sessionNotActiveMessage=会è¯ä¸åœ¨æ´»åŠ¨çŠ¶æ€ -invalidCodeMessage=å‘生错误,请é‡æ–°é€šè¿‡åº”用登录 -identityProviderUnexpectedErrorMessage=在与认è¯æ供者认è¯è¿‡ç¨‹ä¸­å‘生未知错误 -identityProviderNotFoundMessage=无法找到认è¯æ供方 -identityProviderLinkSuccess=您的账户已ç»å°†è´¦æˆ·{0} 与账户 {1} 链接. -staleCodeMessage=当å‰é¡µé¢å·²æ— æ•ˆï¼Œè¯·åˆ°ç™»å½•ç•Œé¢é‡æ–°ç™»å½• -realmSupportsNoCredentialsMessage=域ä¸æ”¯æŒç‰¹å®šç±»åž‹å¯†ç  -identityProviderNotUniqueMessage=域支æŒé€šè¿‡å¤šä¸ªèº«ä»½æ供者登录,ä¸çŸ¥é“应用哪一ç§æ–¹å¼ç™»å½• -emailVerifiedMessage=您的电å­é‚®ç®±å·²ç»éªŒè¯ã€‚ -staleEmailVerificationLink=您点击的链接已无效。å¯èƒ½æ‚¨å·²ç»éªŒè¯è¿‡æ‚¨çš„电å­é‚®ç®±? - -backToApplication=« 回到应用 -missingParameterMessage=缺少å‚æ•° \: {0} -clientNotFoundMessage=客户端未找到 -clientDisabledMessage=客户端已ç¦ç”¨ -invalidParameterMessage=无效的å‚æ•° \: {0} -alreadyLoggedIn=您已ç»ç™»å½• diff --git a/deps/keycloak/themes/base/login/register.ftl b/deps/keycloak/themes/base/login/register.ftl deleted file mode 100644 index db5098479..000000000 --- a/deps/keycloak/themes/base/login/register.ftl +++ /dev/null @@ -1,141 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('firstName','lastName','email','username','password','password-confirm'); section> - <#if section = "header"> - ${msg("registerTitle")} - <#elseif section = "form"> -
    -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('firstName')> - - ${kcSanitize(messagesPerField.get('firstName'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('lastName')> - - ${kcSanitize(messagesPerField.get('lastName'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('email')> - - ${kcSanitize(messagesPerField.get('email'))?no_esc} - - -
    -
    - - <#if !realm.registrationEmailAsUsername> -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('username')> - - ${kcSanitize(messagesPerField.get('username'))?no_esc} - - -
    -
    - - - <#if passwordRequired??> -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('password')> - - ${kcSanitize(messagesPerField.get('password'))?no_esc} - - -
    -
    - -
    -
    - -
    -
    - - - <#if messagesPerField.existsError('password-confirm')> - - ${kcSanitize(messagesPerField.get('password-confirm'))?no_esc} - - -
    -
    - - - <#if recaptchaRequired??> -
    -
    -
    -
    -
    - - - -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/resources/js/base64url.js b/deps/keycloak/themes/base/login/resources/js/base64url.js deleted file mode 100644 index 64555bfbd..000000000 --- a/deps/keycloak/themes/base/login/resources/js/base64url.js +++ /dev/null @@ -1,114 +0,0 @@ -// for embedded scripts, quoted and modified from https://github.com/swansontec/rfc4648.js by William Swanson -'use strict'; -var base64url = base64url || {}; -(function(base64url) { - - function parse (string, encoding, opts = {}) { - // Build the character lookup table: - if (!encoding.codes) { - encoding.codes = {}; - for (let i = 0; i < encoding.chars.length; ++i) { - encoding.codes[encoding.chars[i]] = i; - } - } - - // The string must have a whole number of bytes: - if (!opts.loose && (string.length * encoding.bits) & 7) { - throw new SyntaxError('Invalid padding'); - } - - // Count the padding bytes: - let end = string.length; - while (string[end - 1] === '=') { - --end; - - // If we get a whole number of bytes, there is too much padding: - if (!opts.loose && !(((string.length - end) * encoding.bits) & 7)) { - throw new SyntaxError('Invalid padding'); - } - } - - // Allocate the output: - const out = new (opts.out || Uint8Array)(((end * encoding.bits) / 8) | 0); - - // Parse the data: - let bits = 0; // Number of bits currently in the buffer - let buffer = 0; // Bits waiting to be written out, MSB first - let written = 0; // Next byte to write - for (let i = 0; i < end; ++i) { - // Read one character from the string: - const value = encoding.codes[string[i]]; - if (value === void 0) { - throw new SyntaxError('Invalid character ' + string[i]); - } - - // Append the bits to the buffer: - buffer = (buffer << encoding.bits) | value; - bits += encoding.bits; - - // Write out some bits if the buffer has a byte's worth: - if (bits >= 8) { - bits -= 8; - out[written++] = 0xff & (buffer >> bits); - } - } - - // Verify that we have received just enough bits: - if (bits >= encoding.bits || 0xff & (buffer << (8 - bits))) { - throw new SyntaxError('Unexpected end of data'); - } - - return out - } - - function stringify (data, encoding, opts = {}) { - const { pad = true } = opts; - const mask = (1 << encoding.bits) - 1; - let out = ''; - - let bits = 0; // Number of bits currently in the buffer - let buffer = 0; // Bits waiting to be written out, MSB first - for (let i = 0; i < data.length; ++i) { - // Slurp data into the buffer: - buffer = (buffer << 8) | (0xff & data[i]); - bits += 8; - - // Write out as much as we can: - while (bits > encoding.bits) { - bits -= encoding.bits; - out += encoding.chars[mask & (buffer >> bits)]; - } - } - - // Partial character: - if (bits) { - out += encoding.chars[mask & (buffer << (encoding.bits - bits))]; - } - - // Add padding characters until we hit a byte boundary: - if (pad) { - while ((out.length * encoding.bits) & 7) { - out += '='; - } - } - - return out - } - - const encoding = { - chars: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_', - bits: 6 - } - - base64url.decode = function (string, opts) { - return parse(string, encoding, opts); - } - - base64url.encode = function (data, opts) { - return stringify(data, encoding, opts) - } - - return base64url; -}(base64url)); - - diff --git a/deps/keycloak/themes/base/login/saml-post-form.ftl b/deps/keycloak/themes/base/login/saml-post-form.ftl deleted file mode 100644 index 94b0c30fc..000000000 --- a/deps/keycloak/themes/base/login/saml-post-form.ftl +++ /dev/null @@ -1,25 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout; section> - <#if section = "header"> - ${msg("saml.post-form.title")} - <#elseif section = "form"> - -

    ${msg("saml.post-form.message")}

    -
    - <#if samlPost.SAMLRequest??> - - - <#if samlPost.SAMLResponse??> - - - <#if samlPost.relayState??> - - - - -
    - - diff --git a/deps/keycloak/themes/base/login/select-authenticator.ftl b/deps/keycloak/themes/base/login/select-authenticator.ftl deleted file mode 100644 index c4097dbe1..000000000 --- a/deps/keycloak/themes/base/login/select-authenticator.ftl +++ /dev/null @@ -1,43 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=false; section> - <#if section = "header" || section = "show-username"> - - <#if section = "header"> - ${msg("loginChooseAuthenticator")} - - <#elseif section = "form"> - -
    -
    - <#list auth.authenticationSelections as authenticationSelection> -
    - -
    - -
    -
    -
    - ${msg('${authenticationSelection.displayName}')} -
    -
    - ${msg('${authenticationSelection.helpText}')} -
    -
    -
    -
    - -
    -
    - - -
    -
    - - - - diff --git a/deps/keycloak/themes/base/login/template.ftl b/deps/keycloak/themes/base/login/template.ftl deleted file mode 100644 index fa1d05cd6..000000000 --- a/deps/keycloak/themes/base/login/template.ftl +++ /dev/null @@ -1,152 +0,0 @@ -<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true displayRequiredFields=false showAnotherWayIfPresent=true> - - - - - - - - - <#if properties.meta?has_content> - <#list properties.meta?split(' ') as meta> - - - - ${msg("loginTitle",(realm.displayName!''))} - - <#if properties.stylesCommon?has_content> - <#list properties.stylesCommon?split(' ') as style> - - - - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - <#if properties.scripts?has_content> - <#list properties.scripts?split(' ') as script> - - - - <#if scripts??> - <#list scripts as script> - - - - - - -
    -
    -
    ${kcSanitize(msg("loginTitleHtml",(realm.displayNameHtml!'')))?no_esc}
    -
    -
    -
    - <#if realm.internationalizationEnabled && locale.supported?size gt 1> -
    -
    -
    - ${locale.current} -
      - <#list locale.supported as l> -
    • - ${l.label} -
    • - -
    -
    -
    -
    - - <#if !(auth?has_content && auth.showUsername() && !auth.showResetCredentials())> - <#if displayRequiredFields> -
    -
    - * ${msg("requiredFields")} -
    -
    -

    <#nested "header">

    -
    -
    - <#else> -

    <#nested "header">

    - - <#else> - <#if displayRequiredFields> -
    -
    - * ${msg("requiredFields")} -
    -
    - <#nested "show-username"> -
    - - - - -
    -
    -
    - <#else> - <#nested "show-username"> -
    - - - - -
    - - -
    -
    -
    - - <#-- App-initiated actions should not see warning messages about the need to complete the action --> - <#-- during login. --> - <#if displayMessage && message?has_content && (message.type != 'warning' || !isAppInitiatedAction??)> -
    -
    - <#if message.type = 'success'> - <#if message.type = 'warning'> - <#if message.type = 'error'> - <#if message.type = 'info'> -
    - ${kcSanitize(message.summary)?no_esc} -
    - - - <#nested "form"> - - <#if auth?has_content && auth.showTryAnotherWayLink() && showAnotherWayIfPresent> -
    - -
    - - - <#if displayInfo> -
    -
    - <#nested "info"> -
    -
    - -
    -
    - -
    -
    - - - diff --git a/deps/keycloak/themes/base/login/terms.ftl b/deps/keycloak/themes/base/login/terms.ftl deleted file mode 100644 index 687b192c9..000000000 --- a/deps/keycloak/themes/base/login/terms.ftl +++ /dev/null @@ -1,15 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "header"> - ${msg("termsTitle")} - <#elseif section = "form"> -
    - ${kcSanitize(msg("termsText"))?no_esc} -
    -
    - - -
    -
    - - diff --git a/deps/keycloak/themes/base/login/theme.properties b/deps/keycloak/themes/base/login/theme.properties deleted file mode 100644 index d537a8bf4..000000000 --- a/deps/keycloak/themes/base/login/theme.properties +++ /dev/null @@ -1 +0,0 @@ -locales=ca,cs,da,de,en,es,fr,hu,it,ja,lt,nl,no,pl,pt-BR,ru,sk,sv,tr,zh-CN diff --git a/deps/keycloak/themes/base/login/verify-profile.ftl b/deps/keycloak/themes/base/login/verify-profile.ftl deleted file mode 100644 index 29b061c0d..000000000 --- a/deps/keycloak/themes/base/login/verify-profile.ftl +++ /dev/null @@ -1,47 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','email','firstName','lastName'); section> - <#if section = "header"> - ${msg("loginProfileTitle")} - <#elseif section = "form"> -
    - - <#list profile.attributes as attribute> -
    -
    - - <#if attribute.required>* -
    -
    - disabled - /> - - <#if messagesPerField.existsError('${attribute.name}')> - - ${kcSanitize(messagesPerField.get('${attribute.name}'))?no_esc} - - -
    -
    - - -
    -
    -
    -
    -
    - -
    - <#if isAppInitiatedAction??> - - - <#else> - - -
    -
    -
    - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/webauthn-authenticate.ftl b/deps/keycloak/themes/base/login/webauthn-authenticate.ftl deleted file mode 100644 index 8c7d5a119..000000000 --- a/deps/keycloak/themes/base/login/webauthn-authenticate.ftl +++ /dev/null @@ -1,123 +0,0 @@ - <#import "template.ftl" as layout> - <@layout.registrationLayout; section> - <#if section = "title"> - title - <#elseif section = "header"> - ${kcSanitize(msg("webauthn-login-title"))?no_esc} - <#elseif section = "form"> - -
    -
    - - - - - - -
    -
    - - <#if authenticators??> -
    - <#list authenticators.authenticators as authenticator> - - -
    - - -
    -
    -
    - -
    -
    -
    - - - - - <#elseif section = "info"> - - - diff --git a/deps/keycloak/themes/base/login/webauthn-error.ftl b/deps/keycloak/themes/base/login/webauthn-error.ftl deleted file mode 100644 index ed904f9b7..000000000 --- a/deps/keycloak/themes/base/login/webauthn-error.ftl +++ /dev/null @@ -1,55 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=true; section> - <#if section = "header"> - ${kcSanitize(msg("webauthn-error-title"))?no_esc} - <#elseif section = "form"> - - - -
    - - -
    - - <#if authenticators??> - - - - - - - - <#list authenticators.authenticators as authenticator> - - - - - -
    ${kcSanitize(msg("webauthn-available-authenticators"))?no_esc}
    - ${kcSanitize(authenticator.label)?no_esc} -
    - - - - - <#if isAppInitiatedAction??> -
    - -
    - - - - \ No newline at end of file diff --git a/deps/keycloak/themes/base/login/webauthn-register.ftl b/deps/keycloak/themes/base/login/webauthn-register.ftl deleted file mode 100644 index f1d9e326f..000000000 --- a/deps/keycloak/themes/base/login/webauthn-register.ftl +++ /dev/null @@ -1,170 +0,0 @@ - <#import "template.ftl" as layout> - <@layout.registrationLayout; section> - <#if section = "title"> - title - <#elseif section = "header"> - - ${kcSanitize(msg("webauthn-registration-title"))?no_esc} - <#elseif section = "form"> - -
    -
    - - - - - -
    -
    - - - - - - - - <#if !isSetRetry?has_content && isAppInitiatedAction?has_content> -
    - -
    - - - - \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/index.ftl b/deps/keycloak/themes/keycloak.v2/account/index.ftl deleted file mode 100644 index c5975c7cb..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/index.ftl +++ /dev/null @@ -1,279 +0,0 @@ - - - - ${msg("accountManagementTitle")} - - - - - - - - - <#if properties.favIcon?has_content> - - <#else> - - - - - - <#if properties.developmentMode?has_content && properties.developmentMode == "true"> - - - - - - - <#if properties.extensions?has_content> - <#list properties.extensions?split(' ') as script> - <#if properties.developmentMode?has_content && properties.developmentMode == "true"> - - <#else> - - - - - - <#if properties.scripts?has_content> - <#list properties.scripts?split(' ') as script> - - - - - - - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - - - - - - - - - - - - -
    -
    - <#if properties.logo?has_content> - Logo - <#else> - Logo - -

    ${msg("loadingMessage")}

    -
    - - - - -
    -
    -
    -
    -
    - - - - - - - diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ca.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_cs.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_da.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_da.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_da.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_de.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_de.properties deleted file mode 100644 index a65149268..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_de.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Put new messages for Account Console Here -# Feel free to use any existing messages from the base theme -pageNotFound=Seite nicht gefunden -forbidden=Verboten -needAccessRights=Sie haben keine Zugriffsrechte auf diese Anfrage. Wenden Sie sich an Ihren Administrator. -invalidRoute={0} ist keine valide Route. -actionRequiresIDP=Diese Aktion erfordert eine Umleitung zu Ihrem Identit\u00E4tsanbieter. -actionNotDefined=Keine Aktion festgelegt -continue=Fortfahren -refreshPage=Aktualisiere die Seite -done=Fertig -cancel=Abbrechen -remove=Entfernen -update=Aktualisieren -status=Status -loadingMessage=Accountkonsole l\u00E4dt ... -unknownUser=Unbekannter Nutzer -fullName={0} {1} - -selectLocale=Sprache ausw\u00E4hlen -doSignIn=Anmelden - -# Device Activity Page -signedInDevices=Angemeldete Ger\u00E4te -signedInDevicesExplanation=Melde ein unbekanntes Ger\u00E4t ab. -signOutWarning=Session abmelden? -signOutAllDevices=Alle Ger\u00E4te abmelden -signOutAllDevicesWarning=Diese Aktion meldet alle Ger\u00E4te ab, die sich bei Ihrem Konto angemeldet haben, einschlie\u00DFlich des aktuellen Ger\u00E4ts, das Sie verwenden. -recentlyUsedDevices=K\u00FCrzlich verwendete Ger\u00E4te -recentlyUsedDevicesExplanation=Ger\u00E4te die im letzten Monat verwendet wurden, aber derzeit nicht angemeldet sind. -lastAccess=Letzter Zugriff -unknownOperatingSystem=Unbekanntes Betriebssystem -currentDevice=Aktuelles Ger\u00E4t -currentSession=Aktuelle Sitzung -signedOutSession=Abgemeldet {0}/{1} -lastAccessedOn=Zuletzt zugegriffen am -clients=Clients -startedAt=Gestartet am -expiresAt=L\u00E4uft ab am -ipAddress=IP Adresse - -# Resources Page -resourceName=Ressourcenname -nextPage=N\u00E4chste -previousPage=Vorherige -firstPage=Erste Seite -resourceSharedWith=Ressource ist freigegeben mit {0} -and=\ und {0} anderen Nutzern -add=Hinzuf\u00FCgen -share=Freigeben -edit=Editieren -close=Schlie\u00DFen -unShare=Alle Freigaben aufheben -shareSuccess=Ressource erfolgreich freigegeben. -unShareSuccess=Freigabe erfolgreich aufgehoben. -updateSuccess=Ressource erfolgreich aktualisiert. -resourceAlreadyShared=Ressource ist bereits an diesen Nutzer freigegeben. -resourceNotShared=Diese Ressource ist nicht freigegeben. -permissionRequests=Zugriffsanfragen -permissions=Zugriffsrechte -unShareAllConfirm=Wollen Sie wirklich alle Freigaben aufheben? -userNotFound=Kein Nutzer mit dem Namen oder E-Mail gefunden {0} - -# Linked Accounts Page -linkedAccountsTitle=Verbundene Konten -linkedAccountsIntroMessage=Verwalten Sie Anmeldungen \u00FCber Konten von Drittanbietern. -linkedLoginProviders=Verbundene Login Anbieter -unlinkedLoginProviders=Getrennte Login Anbieter -linkedEmpty=Keine verbundenen Anbieter -unlinkedEmpty=Keine getrennten Anbieter -socialLogin=Social Login -systemDefined=Systemdefiniert -link=Account verbinden -unLink=Account trennen - -# Signing In Page -signingIn=Anmeldung -signingInSubMessage=Konfigurieren Sie die Anmeldem\u00F6glichkeiten. -credentialCreatedAt=Erstellt -successRemovedMessage={0} wurde entfernt. -stopUsingCred={0} nicht mehr verwenden? -removeCred={0} entfernen -setUpNew={0} einrichten -notSetUp={0} ist nicht eingerichtet. -two-factor=Zwei-Faktor Authentifizierung -passwordless=Kennwortlos -unknown=Unbekannt -password-display-name=Passwort -password-help-text=Mit einem Passwort anmelden. -password=Mein Passwort -otp-display-name=Authenticator-Anwendung -otp-help-text=Geben Sie einen Verifizierungscode aus der Authenticator-Anwendung ein. -webauthn-display-name=Security-Token -webauthn-help-text=Verwenden Sie Ihr Security-Token zur Anmeldung. -webauthn-passwordless-display-name=Security-Token -webauthn-passwordless-help-text=Verwenden Sie Ihr Security-Token zur kennwortlosen Anmeldung. -basic-authentication=Standardauthentifizierung -invalidRequestMessage=Ung\u00FCltige Anfrage - -# Applications page -applicationsPageTitle=Anwendungen -internalApp=Intern -thirdPartyApp=Drittanbieter -offlineAccess=Offline Zugriff -inUse=In Benutzung -notInUse=Nicht in Benutzung -applicationDetails=Anwendungsdetails -client=Client -description=Beschreibung -baseUrl=URL -accessGrantedOn=Zugriff gew\u00E4hrt am -removeButton=Zugriff entfernen -removeModalTitle=Zugriff entfernen -removeModalMessage=Dadurch wird die aktuell gew\u00E4hrte Zugriffsberechtigung f\u00FCr {0} entfernt. Sie m\u00FCssen den Zugriff erneut gew\u00E4hren, wenn Sie diese Anwendung verwenden m\u00F6chten. -confirmButton=Best\u00E4tigen -infoMessage=Indem Sie auf "Zugriff entfernen" klicken, entfernen Sie gew\u00E4hrte Berechtigungen dieser Anwendung. Diese Anwendung wird Ihre Informationen nicht mehr verwenden. - -#Delete Account page -doDelete=L\u00F6schen -deleteAccountSummary=Wenn Sie Ihr Konto l\u00F6schen, werden alle Ihre Daten gel\u00F6scht und Sie werden sofort abgemeldet. -deleteAccount=Konto l\u00F6schen -deleteAccountWarning=Dies ist unwiderruflich. Alle Ihre Daten werden dauerhaft gel\u00F6scht und k\u00F6nnen nicht wiederhergestellt werden. diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_en.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_en.properties deleted file mode 100644 index e05311a9a..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_en.properties +++ /dev/null @@ -1,134 +0,0 @@ -# Put new messages for Account Console Here -# Feel free to use any existing messages from the base theme -pageNotFound=Page Not Found -forbidden=Forbidden -needAccessRights=You do not have access rights to this request. Contact your administrator. -invalidRoute={0} is not a valid route. -actionRequiresIDP=This action requires redirection to your identity provider. -actionNotDefined=No Action defined -continue=Continue -refreshPage=Refresh the page -done=Done -cancel=Cancel -remove=Remove -update=Update -loadingMessage=Account Console loading ... -unknownUser=Anonymous -fullName={0} {1} - -selectLocale=Select a locale -doSignIn=Sign In - -# Device Activity Page -signedInDevices=Signed In Devices -signedInDevicesExplanation=Sign out any device that is unfamiliar. -signOutWarning=Sign out the session? -signOutAllDevices=Sign Out All Devices -signOutAllDevicesWarning=This action will sign out all the devices that have signed in to your account, including the current device you are using. -recentlyUsedDevices=Recently Used Devices -recentlyUsedDevicesExplanation=Devices used in the last month, but not currently logged in. -lastAccess=Last Access -unknownOperatingSystem=Unknown Operating System -currentDevice=Current Device -currentSession=Current Session -signedOutSession=Signed out {0}/{1} -lastAccessedOn=Last accessed on -clients=Clients -startedAt=Started at -expiresAt=Expires at -ipAddress=IP Address - -# Resources Page -resourceName=Resource Name -nextPage=Next -previousPage=Previous -firstPage=First Page -resourceSharedWith=Resource is shared with {0} -and=\ and {0} other users -add=Add -share=Share -edit=Edit -close=Close -unShare=Unshare all -shareSuccess=Resource successfully shared. -unShareSuccess=Resource successfully un-shared. -updateSuccess=Resource successfully updated. -resourceAlreadyShared=Resource is already shared with this user. -resourceNotShared=This resource is not shared. -permissionRequests=Permission requests -permissions=Permissions -unShareAllConfirm=Are you sure you want to completely remove all shares? -userNotFound=No user found with name or email {0} - -# Linked Accounts Page -linkedAccountsTitle=Linked Accounts -linkedAccountsIntroMessage=Manage logins through third-party accounts. -linkedLoginProviders=Linked Login Providers -unlinkedLoginProviders=Unlinked Login Providers -linkedEmpty=No Linked Providers -unlinkedEmpty=No Unlinked Providers -socialLogin=Social Login -systemDefined=System Defined -link=Link Account -unLink=Unlink Account - -# Signing In Page -signingIn=Signing In -signingInSubMessage=Configure ways to sign in. -credentialCreatedAt=Created -successRemovedMessage={0} was removed. -stopUsingCred=Stop using {0}? -removeCred=Remove {0} -setUpNew=Set up {0} -notSetUp={0} is not set up. -two-factor=Two-Factor Authentication -passwordless=Passwordless -unknown=Unknown -password-display-name=Password -password-help-text=Log in by entering your password. -password=My Password -otp-display-name=Authenticator Application -otp-help-text=Enter a verification code from authenticator application. -webauthn-display-name=Security Key -webauthn-help-text=Use your security key to log in. -webauthn-passwordless-display-name=Security Key -webauthn-passwordless-help-text=Use your security key for passwordless log in. -basic-authentication=Basic Authentication -invalidRequestMessage=Invalid Request - -# Applications page -applicationsPageTitle=Applications -internalApp=Internal -thirdPartyApp=Third-party -offlineAccess=Offline Access -inUse=In use -notInUse=Not in use -applicationDetails=Application Details -client=Client -description=Description -baseUrl=URL -accessGrantedOn=Access granted on -removeButton=Remove access -removeModalTitle=Remove Access -removeModalMessage=This will remove the currently granted access permission for {0}. You will need to grant access again if you want to use this app. -confirmButton=Confirm -infoMessage=By clicking 'Remove Access', you will remove granted permissions of this application. This application will no longer use your information. - -#Delete Account page -doDelete=Delete -deleteAccountSummary=Deleting your account will erase all your data and log you out immediately. -deleteAccount=Delete Account -deleteAccountWarning=This is irreversible. All your data will be permanently destroyed, and irretrievable. - -error-invalid-value=''{0}'' has invalid value. -error-invalid-blank=Please specify value of ''{0}''. -error-empty=Please specify value of ''{0}''. -error-invalid-length=''{0}'' must have a length between {1} and {2}. -error-invalid-email=Invalid email address. -error-invalid-number=''{0}'' is invalid number. -error-number-out-of-range=''{0}'' must be a number between {1} and {2}. -error-pattern-no-match=''{0}'' doesn''t match required format. -error-invalid-uri=''{0}'' is invalid URL. -error-invalid-uri-scheme=''{0}'' has invalid URL scheme. -error-invalid-uri-fragment=''{0}'' is invalid URL fragment. -error-user-attribute-required=Please specify ''{0}''. \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_es.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_es.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_es.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties deleted file mode 100644 index 812464bfe..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_fr.properties +++ /dev/null @@ -1,32 +0,0 @@ -fullName={0} {1} -loadingMessage=Gestion du compte en cours de chargement ... - -# Personal informations page -selectLocale=Choisissez une langue - -# Authentication page -signingIn=Authentification -signingInSubMessage=Configurez les m\u00e9thodes d''authentification. -basic-authentication=Authentification de Base -password-display-name=Mot de passe -password-help-text=Authentifiez-vous en saisissant votre mot de passe -credentialCreatedAt=Cr\u00e9\u00e9 le -two-factor=Authentification \u00e0 Deux Facteurs -otp-display-name=Application d''authentification -otp-help-text=Entrez un code de v\u00e9rification \u00e0 usage unique fourni par l''application d''authentification. -notSetUp={0} non configur\u00e9(e). - -# Device Activity page -signedInDevices=Appareils Connect\u00e9s -signedInDevicesExplanation=D\u00e9connectez les appareils que vous ne reconnaissez pas. -currentSession=Session Courante -lastAccessedOn=Dernier acc\u00e8s le -startedAt=D\u00e9marr\u00e9(e) le -expiresAt=Expire le - -# Applications page -internalApp=Interne -thirdPartyApp=Tierce -inUse=Utilis\u00e9(e) -notInUse=Non utilis\u00e9(e) -setUpNew=Configurer {0} diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_hu.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_it.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_it.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_it.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ja.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_lt.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_nl.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_no.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_no.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_no.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_pl.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties deleted file mode 100644 index 3e056f97e..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_pt_BR.properties +++ /dev/null @@ -1,121 +0,0 @@ -# Put new messages for Account Console Here -# Feel free to use any existing messages from the base theme -pageNotFound=P\u00e1gina N\u00e3o Encontrada -forbidden=Proibido -needAccessRights=Voc\u00ea n\u00e3o tem as permiss\u00f5es de acesso para esta solicita\u00e7\u00e3o. Entre em contato com um administrador. -invalidRoute={0} n\u00e3o \u00e9 uma rota v\u00e1lida. -actionRequiresIDP=Esta a\u00e7\u00e3o requer uma redire\u00e7\u00e3o do seu provedor de identidades. -actionNotDefined=Nenhuma a\u00e7\u00e3o definida -continue=Continuar -refreshPage=Atualizar p\u00e1gina -done=Pronto -cancel=Cancelar -remove=Remover -update=Atualizar -loadingMessage=Carregando console de conta... -unknownUser=An\u00f4nimo -fullName={0} {1} - -selectLocale=Selecionar l\u00edngua -doSignIn=Entrar - -# Device Activity Page -signedInDevices=Dispositivos autenticados -signedInDevicesExplanation=Saia de qualquer dispositivo que n\u00e3o reconhe\u00e7a. -signOutWarning=Finalizar todas as sess\u00f5es? -signOutAllDevices=Finalizar Sess\u00e3o em Todos os Dispositivos -signOutAllDevicesWarning=Esta a\u00e7\u00e3o ir\u00e1 finalizar a sess\u00e3o de todos os dispositivos logados na sua conta, incluindo o dispositivo que est\u00e1 sendo utilizado atualmente. -recentlyUsedDevices=Dispositivos Utilizados Recentemente -recentlyUsedDevicesExplanation=Dispositivos utilizados no \u00faltimo m\u00eas, mas sem sess\u00e3o ativa atualmente. -lastAccess=\u00daltimo Acesso -unknownOperatingSystem=Sistema Operacional Desconhecido -currentDevice=Dispositivo Atual -currentSession=Sess\u00e3o Atual -signedOutSession=Deslogado {0}/{1} -lastAccessedOn=\u00daltimo acesso em -clients=Clientes -startedAt=Iniciado em -expiresAt=Expira em -ipAddress=Endere\u00e7o IP - -# Resources Page -resourceName=Nome do Recurso -nextPage=Avan\u00e7ar -previousPage=Voltar -firstPage=Primeira P\u00e1gina -resourceSharedWith=O recurso \u00e9 compartilhado com {0} -and=\ e {0} outros usu\u00e1rios -add=Adicionar -share=Compartilhar -edit=Editar -close=Fechar -unShare=Descompartilhar tudo -shareSuccess=O recurso foi compartilhado com sucesso. -unShareSuccess=O recurso foi descompartilhado com sucesso. -updateSuccess=O recurso foi atualizado com sucesso. -resourceAlreadyShared=O recurso j\u00e1 foi compartilhado com este usu\u00e1rio. -resourceNotShared=O recurso n\u00e3o foi compartilhado. -permissionRequests=Pedidos de permiss\u00e3o -permissions=Permiss\u00f5es -unShareAllConfirm=Tem certeza de que quer remover todos os compartilhamentos? -userNotFound=Usu\u00e1rio com o nome ou e-mail {0} n\u00e3o foi encontrado - -# Linked Accounts Page -linkedAccountsTitle=Contas conectadas -linkedAccountsIntroMessage=Gerenciar acessos por contas de outras aplica\u00e7\u00f5es. -linkedLoginProviders=Provedores de Acesso Conectados -unlinkedLoginProviders=Provedores de Acesso N\u00e3o-Conectados -linkedEmpty=Nenhum Provedor Conectado -unlinkedEmpty=Nenhum Provedor N\u00e3o-Conectado -socialLogin=Login Social -systemDefined=Definido pelo Sistema -link=Conectar Conta -unLink=Desconectar Conta - -# Signing In Page -signingIn=Entrando na Conta -signingInSubMessage=Configure maneiras de entrar na conta. -credentialCreatedAt=Criada em -successRemovedMessage={0} removida com sucesso. -stopUsingCred=Para de usar {0}? -removeCred=Remover {0} -setUpNew=Configurar {0} -notSetUp={0} n\u00e3o est\u00e1 configurada. -two-factor=Autentica\u00e7\u00e3o de Dois Fatores -passwordless=Sem Senha -unknown=Desconhecida -password-display-name=Senha -password-help-text=Entre inserindo a sua senha. -password=Minha Senha -otp-display-name=App Autenticador -otp-help-text=Insira o c\u00f3digo de verifica\u00e7\u00e3o do app autenticador. -webauthn-display-name=Chave de Seguran\u00e7a -webauthn-help-text=Use a sua chave de seguran\u00e7a para entrar. -webauthn-passwordless-display-name=Chave de Seguran\u00e7a -webauthn-passwordless-help-text=Use a sua chave de seguran\u00e7a para entrar sem senha. -basic-authentication=Autentica\u00e7\u00e3o B\u00e1sica -invalidRequestMessage=Solicita\u00e7\u00e3o Inv\u00e1lida - -# Applications page -applicationsPageTitle=Aplica\u00e7\u00f5es -internalApp=Interna -thirdPartyApp=De Terceiros -offlineAccess=Acesso Offline -inUse=Em uso -notInUse=N\u00e3o utilizado -applicationDetails=Detalhes da Aplica\u00e7\u00e3o -client=Cliente -description=Descri\u00e7\u00e3o -baseUrl=URL -accessGrantedOn=Acesso concedido em -removeButton=Remover acesso -removeModalTitle=Remover Acesso -removeModalMessage=Isto ir\u00e1 remover a permiss\u00e3o atual de acesso concedido para {0}. Voc\u00ea precisar\u00e1 repetir o processo de concess\u00e3o se for utilizar o app novamente. -confirmButton=Confirmar -infoMessage=Ao clicar em 'Remover Acesso', voc\u00ea ir\u00e1 remover as permiss\u00f5es concedidas a esta aplica\u00e7\u00e3o. Ela n\u00e3o poder\u00e1 mais utilizar as suas informa\u00e7\u00f5es. - -#Delete Account page -doDelete=Apagar -deleteAccountSummary=Apagar a sua conta ir\u00e1 remover todos os seus dados e finalizar a sess\u00e3o imediatamente. -deleteAccount=Apagar Conta -deleteAccountWarning=Esta a\u00e7\u00e3o \u00e9 irrevers\u00edvel. Todos os seus dados ser\u00e3o apagados permanentemente e n\u00e3o poder\u00e3o ser recuperados. diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_ru.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_sk.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_sv.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_tr.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties b/deps/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties deleted file mode 100644 index 2e929f289..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/messages/messages_zh_CN.properties +++ /dev/null @@ -1 +0,0 @@ -fullName={0} {1} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/App.js b/deps/keycloak/themes/keycloak.v2/account/resources/App.js deleted file mode 100644 index 74c5923b9..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/App.js +++ /dev/null @@ -1,80 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../common/keycloak/web_modules/react.js"; -import { PageNav } from "./PageNav.js"; -import { PageToolbar } from "./PageToolbar.js"; -import { makeRoutes } from "./ContentPages.js"; -import { Brand, Page, PageHeader, PageSection, PageSidebar } from "../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { KeycloakContext } from "./keycloak-service/KeycloakContext.js"; -; -export class App extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - this.context = context; - toggleReact(); - } - - render() { - toggleReact(); // check login - - if (!this.context.authenticated() && !isWelcomePage()) { - this.context.login(); - } - - const username = React.createElement("span", { - style: { - marginLeft: '10px' - }, - id: "loggedInUser" - }, loggedInUserName()); - const Header = React.createElement(PageHeader, { - logo: React.createElement("a", { - id: "brandLink", - href: brandUrl - }, React.createElement(Brand, { - src: brandImg, - alt: "Logo", - className: "brand" - })), - toolbar: React.createElement(PageToolbar, null), - avatar: username, - showNavToggle: true - }); - const Sidebar = React.createElement(PageSidebar, { - nav: React.createElement(PageNav, null) - }); - return React.createElement("span", { - style: { - height: '100%' - } - }, React.createElement(Page, { - header: Header, - sidebar: Sidebar, - isManagedSidebar: true - }, React.createElement(PageSection, null, makeRoutes()))); - } - -} - -_defineProperty(App, "contextType", KeycloakContext); - -; -//# sourceMappingURL=App.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/App.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/App.js.map deleted file mode 100644 index 7b3c2e871..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/App.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/app/App.tsx"],"names":["React","PageNav","PageToolbar","makeRoutes","Brand","Page","PageHeader","PageSection","PageSidebar","KeycloakContext","App","Component","constructor","props","context","toggleReact","render","authenticated","isWelcomePage","login","username","marginLeft","loggedInUserName","Header","brandUrl","brandImg","Sidebar","height"],"mappings":";;AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAIA,SAAQC,OAAR;AACA,SAAQC,WAAR;AACA,SAAQC,UAAR;AAEA,SACIC,KADJ,EAEIC,IAFJ,EAGIC,UAHJ,EAIIC,WAJJ,EAKIC,WALJ;AAQA,SAASC,eAAT;AAS4B;AAC5B,OAAO,MAAMC,GAAN,SAAkBV,KAAK,CAACW,SAAxB,CAA4C;AAIxCC,EAAAA,WAAP,CAAmBC,KAAnB,EAAoCC,OAApC,EAAwF;AACpF,UAAMD,KAAN;;AADoF;;AAEpF,SAAKC,OAAL,GAAeA,OAAf;AACAC,IAAAA,WAAW;AACd;;AAEMC,EAAAA,MAAP,GAAiC;AAC7BD,IAAAA,WAAW,GADkB,CAG7B;;AACA,QAAI,CAAC,KAAKD,OAAL,CAAcG,aAAd,EAAD,IAAkC,CAACC,aAAa,EAApD,EAAwD;AACpD,WAAKJ,OAAL,CAAcK,KAAd;AACH;;AAED,UAAMC,QAAQ,GACV;AAAM,MAAA,KAAK,EAAE;AAACC,QAAAA,UAAU,EAAE;AAAb,OAAb;AAAmC,MAAA,EAAE,EAAC;AAAtC,OAAsDC,gBAAgB,EAAtE,CADJ;AAGA,UAAMC,MAAM,GACR,oBAAC,UAAD;AACI,MAAA,IAAI,EAAE;AAAG,QAAA,EAAE,EAAC,WAAN;AAAkB,QAAA,IAAI,EAAEC;AAAxB,SAAkC,oBAAC,KAAD;AAAO,QAAA,GAAG,EAAEC,QAAZ;AAAsB,QAAA,GAAG,EAAC,MAA1B;AAAiC,QAAA,SAAS,EAAC;AAA3C,QAAlC,CADV;AAEI,MAAA,OAAO,EAAE,oBAAC,WAAD,OAFb;AAGI,MAAA,MAAM,EAAEL,QAHZ;AAII,MAAA,aAAa;AAJjB,MADJ;AASA,UAAMM,OAAO,GAAG,oBAAC,WAAD;AAAa,MAAA,GAAG,EAAE,oBAAC,OAAD;AAAlB,MAAhB;AAEA,WACI;AAAM,MAAA,KAAK,EAAE;AAAEC,QAAAA,MAAM,EAAE;AAAV;AAAb,OACI,oBAAC,IAAD;AAAM,MAAA,MAAM,EAAEJ,MAAd;AAAsB,MAAA,OAAO,EAAEG,OAA/B;AAAwC,MAAA,gBAAgB;AAAxD,OACI,oBAAC,WAAD,QACKvB,UAAU,EADf,CADJ,CADJ,CADJ;AASH;;AAzC8C;;gBAAtCO,G,iBACYD,e;;AAyCxB","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {KeycloakService} from './keycloak-service/keycloak.service';\n\nimport {PageNav} from './PageNav';\nimport {PageToolbar} from './PageToolbar';\nimport {makeRoutes} from './ContentPages';\n\nimport {\n Brand,\n Page,\n PageHeader,\n PageSection,\n PageSidebar,\n} from '@patternfly/react-core';\n\nimport { KeycloakContext } from './keycloak-service/KeycloakContext';\n\ndeclare function toggleReact(): void;\ndeclare function isWelcomePage(): boolean;\ndeclare function loggedInUserName(): string;\n\ndeclare const brandImg: string;\ndeclare const brandUrl: string;\n\nexport interface AppProps {};\nexport class App extends React.Component {\n static contextType = KeycloakContext;\n context: React.ContextType;\n\n public constructor(props: AppProps, context: React.ContextType) {\n super(props);\n this.context = context;\n toggleReact();\n }\n\n public render(): React.ReactNode {\n toggleReact();\n\n // check login\n if (!this.context!.authenticated() && !isWelcomePage()) {\n this.context!.login();\n }\n\n const username = (\n {loggedInUserName()}\n );\n const Header = (\n }\n toolbar={}\n avatar={username}\n showNavToggle\n />\n );\n\n const Sidebar = } />;\n\n return (\n \n \n \n {makeRoutes()}\n \n \n \n );\n }\n};"],"file":"App.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js b/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js deleted file mode 100644 index 476904f5d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js +++ /dev/null @@ -1,157 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../common/keycloak/web_modules/react.js"; -import { Route, Switch } from "../../common/keycloak/web_modules/react-router-dom.js"; -import { NavItem, NavExpandable } from "../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { Msg } from "./widgets/Msg.js"; -import { PageNotFound } from "./content/page-not-found/PageNotFound.js"; -import { ForbiddenPage } from "./content/forbidden-page/ForbiddenPage.js"; -; -export function isModulePageDef(item) { - return item.modulePath !== undefined; -} -export function isExpansion(contentItem) { - return contentItem.content !== undefined; -} - -function groupId(group) { - return 'grp-' + group; -} - -function itemId(group, item) { - return 'grp-' + group + '_itm-' + item; -} - -function isChildOf(parent, child) { - for (var item of parent.content) { - if (isExpansion(item) && isChildOf(item, child)) return true; - if (parent.groupId === child.groupId) return true; - } - - return false; -} - -function createNavItems(activePage, contentParam, groupNum) { - if (typeof content === 'undefined') return React.createElement(React.Fragment, null); - const links = contentParam.map(item => { - const navLinkId = `nav-link-${item.id}`; - - if (isExpansion(item)) { - return React.createElement(NavExpandable, { - id: navLinkId, - groupId: item.groupId, - key: item.groupId, - title: Msg.localize(item.label, item.labelParams), - isExpanded: isChildOf(item, activePage) - }, createNavItems(activePage, item.content, groupNum + 1)); - } else { - const page = item; - return React.createElement(NavItem, { - id: navLinkId, - groupId: item.groupId, - itemId: item.itemId, - key: item.itemId, - to: '#/' + page.path, - isActive: activePage.itemId === item.itemId, - type: "button" - }, Msg.localize(page.label, page.labelParams)); - } - }); - return React.createElement(React.Fragment, null, links); -} - -export function makeNavItems(activePage) { - console.log({ - activePage - }); - return createNavItems(activePage, content, 0); -} - -function setIds(contentParam, groupNum) { - if (typeof contentParam === 'undefined') return groupNum; - let expansionGroupNum = groupNum; - - for (let i = 0; i < contentParam.length; i++) { - const item = contentParam[i]; - - if (isExpansion(item)) { - item.itemId = itemId(groupNum, i); - expansionGroupNum = expansionGroupNum + 1; - item.groupId = groupId(expansionGroupNum); - expansionGroupNum = setIds(item.content, expansionGroupNum); - console.log('currentGroup=' + expansionGroupNum); - } else { - item.groupId = groupId(groupNum); - item.itemId = itemId(groupNum, i); - } - } - - ; - return expansionGroupNum; -} - -export function initGroupAndItemIds() { - setIds(content, 0); - console.log({ - content - }); -} // get rid of Expansions and put all PageDef items into a single array - -export function flattenContent(pageDefs) { - const flat = []; - - for (let item of pageDefs) { - if (isExpansion(item)) { - flat.push(...flattenContent(item.content)); - } else { - flat.push(item); - } - } - - return flat; -} -export function makeRoutes() { - if (typeof content === 'undefined') return React.createElement("span", null); - const pageDefs = flattenContent(content); - const routes = pageDefs.map(page => { - if (isModulePageDef(page)) { - const node = React.createElement(page.module[page.componentName], { - 'pageDef': page - }); - return React.createElement(Route, { - key: page.itemId, - path: '/' + page.path, - exact: true, - render: () => node - }); - } else { - const pageDef = page; - return React.createElement(Route, { - key: page.itemId, - path: '/' + page.path, - exact: true, - component: pageDef.component - }); - } - }); - return React.createElement(Switch, null, routes, React.createElement(Route, { - path: "/forbidden", - component: ForbiddenPage - }), React.createElement(Route, { - component: PageNotFound - })); -} -//# sourceMappingURL=ContentPages.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map deleted file mode 100644 index 4f12877ae..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/ContentPages.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/app/ContentPages.tsx"],"names":["React","Route","Switch","NavItem","NavExpandable","Msg","PageNotFound","ForbiddenPage","isModulePageDef","item","modulePath","undefined","isExpansion","contentItem","content","groupId","group","itemId","isChildOf","parent","child","createNavItems","activePage","contentParam","groupNum","links","map","navLinkId","id","localize","label","labelParams","page","path","makeNavItems","console","log","setIds","expansionGroupNum","i","length","initGroupAndItemIds","flattenContent","pageDefs","flat","push","makeRoutes","routes","node","createElement","module","componentName","pageDef","component"],"mappings":"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","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {Route, Switch} from 'react-router-dom';\nimport {NavItem, NavExpandable} from '@patternfly/react-core';\nimport {Msg} from './widgets/Msg';\nimport {PageNotFound} from './content/page-not-found/PageNotFound';\nimport { ForbiddenPage } from './content/forbidden-page/ForbiddenPage';\n\nexport interface ContentItem {\n id?: string;\n label: string;\n labelParams?: string[];\n hidden?: string;\n groupId: string; // computed value\n itemId: string; // computed value\n};\n\nexport interface Expansion extends ContentItem {\n content: ContentItem[];\n}\n\nexport interface PageDef extends ContentItem {\n path: string;\n}\n\nexport interface ComponentPageDef extends PageDef {\n component: React.ComponentType;\n}\n\nexport interface ModulePageDef extends PageDef {\n modulePath: string;\n componentName: string;\n module: React.Component; // computed value\n}\n\nexport function isModulePageDef(item: ContentItem): item is ModulePageDef {\n return (item as ModulePageDef).modulePath !== undefined;\n}\n\nexport function isExpansion(contentItem: ContentItem): contentItem is Expansion {\n return (contentItem as Expansion).content !== undefined;\n}\n\ndeclare const content: ContentItem[];\n\nfunction groupId(group: number): string {\n return 'grp-' + group;\n}\n\nfunction itemId(group: number, item: number): string {\n return 'grp-' + group + '_itm-' + item;\n}\n\nfunction isChildOf(parent: Expansion, child: PageDef): boolean {\n for (var item of parent.content) {\n if (isExpansion(item) && isChildOf(item, child)) return true;\n if (parent.groupId === child.groupId) return true;\n }\n\n return false;\n}\n\nfunction createNavItems(activePage: PageDef, contentParam: ContentItem[], groupNum: number): React.ReactNode {\n if (typeof content === 'undefined') return ();\n\n const links: React.ReactElement[] = contentParam.map((item: ContentItem) => {\n const navLinkId = `nav-link-${item.id}`;\n if (isExpansion(item)) {\n return \n {createNavItems(activePage, item.content, groupNum + 1)}\n \n } else {\n const page: PageDef = item as PageDef;\n return \n {Msg.localize(page.label, page.labelParams)}\n \n }\n });\n\n return ({links});\n}\n\nexport function makeNavItems(activePage: PageDef): React.ReactNode {\n console.log({activePage});\n return createNavItems(activePage, content, 0);\n}\n\nfunction setIds(contentParam: ContentItem[], groupNum: number): number {\n if (typeof contentParam === 'undefined') return groupNum;\n let expansionGroupNum = groupNum;\n\n for (let i = 0; i < contentParam.length; i++) {\n const item: ContentItem = contentParam[i];\n if (isExpansion(item)) {\n item.itemId = itemId(groupNum, i);\n expansionGroupNum = expansionGroupNum + 1;\n item.groupId = groupId(expansionGroupNum);\n expansionGroupNum = setIds(item.content, expansionGroupNum);\n console.log('currentGroup=' + (expansionGroupNum));\n } else {\n item.groupId = groupId(groupNum);\n item.itemId = itemId(groupNum, i);\n }\n };\n\n return expansionGroupNum;\n}\n\nexport function initGroupAndItemIds(): void {\n setIds(content, 0);\n console.log({content});\n}\n\n// get rid of Expansions and put all PageDef items into a single array\nexport function flattenContent(pageDefs: ContentItem[]): PageDef[] {\n const flat: PageDef[] = [];\n\n for (let item of pageDefs) {\n if (isExpansion(item)) {\n flat.push(...flattenContent(item.content));\n } else {\n flat.push(item as PageDef);\n }\n }\n\n return flat;\n}\n\nexport function makeRoutes(): React.ReactNode {\n if (typeof content === 'undefined') return ();\n\n const pageDefs: PageDef[] = flattenContent(content);\n\n const routes: React.ReactElement[] = pageDefs.map((page: PageDef) => {\n if (isModulePageDef(page)) {\n const node: React.ReactNode = React.createElement(page.module[page.componentName], {'pageDef': page});\n return node} />;\n } else {\n const pageDef: ComponentPageDef = page as ComponentPageDef;\n return ;\n }\n });\n\n return (\n {routes}\n \n \n );\n}\n"],"file":"ContentPages.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/Main.js b/deps/keycloak/themes/keycloak.v2/account/resources/Main.js deleted file mode 100644 index f0f366a1c..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/Main.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../common/keycloak/web_modules/react.js"; -import * as ReactDOM from "../../common/keycloak/web_modules/react-dom.js"; -import { HashRouter } from "../../common/keycloak/web_modules/react-router-dom.js"; -import { App } from "./App.js"; -import { flattenContent, initGroupAndItemIds, isExpansion, isModulePageDef } from "./ContentPages.js"; -import { KeycloakService } from "./keycloak-service/keycloak.service.js"; -import { KeycloakContext } from "./keycloak-service/KeycloakContext.js"; -import { AccountServiceClient } from "./account-service/account.service.js"; -import { AccountServiceContext } from "./account-service/AccountServiceContext.js"; -export class Main extends React.Component { - constructor(props) { - super(props); - } - - componentDidMount() { - isReactLoading = false; - toggleReact(); - } - - render() { - const keycloakService = new KeycloakService(keycloak); - return React.createElement(HashRouter, null, React.createElement(KeycloakContext.Provider, { - value: keycloakService - }, React.createElement(AccountServiceContext.Provider, { - value: new AccountServiceClient(keycloakService) - }, React.createElement(App, null)))); - } - -} -; -const e = React.createElement; - -function removeHidden(items) { - const visible = []; - - for (let item of items) { - if (item.hidden && eval(item.hidden)) continue; - - if (isExpansion(item)) { - visible.push(item); - item.content = removeHidden(item.content); - - if (item.content.length === 0) { - visible.pop(); // remove empty expansion - } - } else { - visible.push(item); - } - } - - return visible; -} - -content = removeHidden(content); -initGroupAndItemIds(); - -function loadModule(modulePage) { - return new Promise((resolve, reject) => { - console.log('loading: ' + resourceUrl + modulePage.modulePath); - import(resourceUrl + modulePage.modulePath).then(module => { - modulePage.module = module; - resolve(modulePage); - }).catch(error => { - console.warn('Unable to load ' + modulePage.label + ' because ' + error.message); - reject(modulePage); - }); - }); -} - -; -const moduleLoaders = []; -flattenContent(content).forEach(item => { - if (isModulePageDef(item)) { - moduleLoaders.push(loadModule(item)); - } -}); // load content modules and start - -Promise.all(moduleLoaders).then(() => { - const domContainer = document.querySelector('#main_react_container'); - ReactDOM.render(e(Main), domContainer); -}); -//# sourceMappingURL=Main.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/Main.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/Main.js.map deleted file mode 100644 index d17e3b9fc..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/Main.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/app/Main.tsx"],"names":["React","ReactDOM","HashRouter","App","flattenContent","initGroupAndItemIds","isExpansion","isModulePageDef","KeycloakService","KeycloakContext","AccountServiceClient","AccountServiceContext","Main","Component","constructor","props","componentDidMount","isReactLoading","toggleReact","render","keycloakService","keycloak","e","createElement","removeHidden","items","visible","item","hidden","eval","push","content","length","pop","loadModule","modulePage","Promise","resolve","reject","console","log","resourceUrl","modulePath","then","module","catch","error","warn","label","message","moduleLoaders","forEach","all","domContainer","document","querySelector"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n\nimport {HashRouter} from 'react-router-dom';\n\nimport {App} from './App';\nimport {ContentItem, ModulePageDef, flattenContent, initGroupAndItemIds, isExpansion, isModulePageDef} from './ContentPages';\n\nimport { KeycloakClient, KeycloakService } from './keycloak-service/keycloak.service';\nimport { KeycloakContext } from './keycloak-service/KeycloakContext';\nimport { AccountServiceClient } from './account-service/account.service';\nimport { AccountServiceContext } from './account-service/AccountServiceContext';\n\ndeclare const keycloak: KeycloakClient;\n\ndeclare let isReactLoading: boolean;\ndeclare function toggleReact(): void;\ndeclare const features: { [key: string]: boolean; };\n\nexport interface MainProps {}\nexport class Main extends React.Component {\n\n public constructor(props: MainProps) {\n super(props);\n }\n\n public componentDidMount(): void {\n isReactLoading = false;\n toggleReact();\n }\n\n public render(): React.ReactNode {\n const keycloakService = new KeycloakService(keycloak);\n return (\n \n \n \n \n \n \n \n );\n }\n};\n\ndeclare const resourceUrl: string;\ndeclare let content: ContentItem[];\nconst e = React.createElement;\n\nfunction removeHidden(items: ContentItem[]): ContentItem[] {\n const visible: ContentItem[] = [];\n\n for (let item of items) {\n if (item.hidden && eval(item.hidden)) continue;\n\n if (isExpansion(item)) {\n visible.push(item);\n item.content = removeHidden(item.content);\n if (item.content.length === 0) {\n visible.pop(); // remove empty expansion\n }\n } else {\n visible.push(item);\n }\n }\n\n return visible;\n}\n\ncontent = removeHidden(content);\ninitGroupAndItemIds();\n\nfunction loadModule(modulePage: ModulePageDef): Promise {\n return new Promise ((resolve, reject) => {\n console.log('loading: ' + resourceUrl + modulePage.modulePath);\n import(resourceUrl + modulePage.modulePath).then( (module: React.Component) => {\n modulePage.module = module;\n resolve(modulePage);\n }).catch((error: Error) => {\n console.warn('Unable to load ' + modulePage.label + ' because ' + error.message);\n reject(modulePage);\n });\n });\n};\n\nconst moduleLoaders: Promise[] = [];\nflattenContent(content).forEach((item: ContentItem) => {\n if (isModulePageDef(item)) {\n moduleLoaders.push(loadModule(item));\n }\n});\n\n// load content modules and start\nPromise.all(moduleLoaders).then(() => {\n const domContainer = document.querySelector('#main_react_container');\n ReactDOM.render(e(Main), domContainer);\n});"],"file":"Main.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js b/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js deleted file mode 100644 index 16ea966ea..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../common/keycloak/web_modules/react.js"; -import { withRouter } from "../../common/keycloak/web_modules/react-router-dom.js"; -import { Nav, NavList } from "../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { makeNavItems, flattenContent } from "./ContentPages.js"; - -class PageNavigation extends React.Component { - constructor(props) { - super(props); - } - - findActiveItem() { - const currentPath = this.props.location.pathname; - const items = flattenContent(content); - const firstItem = items[0]; - - for (let item of items) { - const itemPath = '/' + item.path; - - if (itemPath === currentPath) { - return item; - } - } - - ; - return firstItem; - } - - render() { - const activeItem = this.findActiveItem(); - return React.createElement(Nav, null, React.createElement(NavList, null, makeNavItems(activeItem))); - } - -} - -export const PageNav = withRouter(PageNavigation); -//# sourceMappingURL=PageNav.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map deleted file mode 100644 index f751a0a62..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/PageNav.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/app/PageNav.tsx"],"names":["React","withRouter","Nav","NavList","makeNavItems","flattenContent","PageNavigation","Component","constructor","props","findActiveItem","currentPath","location","pathname","items","content","firstItem","item","itemPath","path","render","activeItem","PageNav"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SAAQC,UAAR;AACA,SAAQC,GAAR,EAAaC,OAAb;AAEA,SAAQC,YAAR,EAAsBC,cAAtB;;AAQA,MAAMC,cAAN,SAA6BN,KAAK,CAACO,SAAnC,CAAyE;AAE9DC,EAAAA,WAAP,CAAmBC,KAAnB,EAAwC;AACpC,UAAMA,KAAN;AACH;;AAEOC,EAAAA,cAAR,GAAkC;AAC9B,UAAMC,WAAmB,GAAG,KAAKF,KAAL,CAAWG,QAAX,CAAoBC,QAAhD;AACA,UAAMC,KAAgB,GAAGT,cAAc,CAACU,OAAD,CAAvC;AACA,UAAMC,SAAS,GAAGF,KAAK,CAAC,CAAD,CAAvB;;AACA,SAAK,IAAIG,IAAT,IAAiBH,KAAjB,EAAwB;AACpB,YAAMI,QAAgB,GAAG,MAAMD,IAAI,CAACE,IAApC;;AACA,UAAID,QAAQ,KAAKP,WAAjB,EAA8B;AAC1B,eAAOM,IAAP;AACH;AACJ;;AAAA;AAED,WAAOD,SAAP;AACH;;AAEMI,EAAAA,MAAP,GAAiC;AAC7B,UAAMC,UAAmB,GAAG,KAAKX,cAAL,EAA5B;AACA,WACI,oBAAC,GAAD,QACI,oBAAC,OAAD,QACKN,YAAY,CAACiB,UAAD,CADjB,CADJ,CADJ;AAOH;;AA7BoE;;AAgCzE,OAAO,MAAMC,OAAO,GAAGrB,UAAU,CAACK,cAAD,CAA1B","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Nav, NavList} from '@patternfly/react-core';\n\nimport {makeNavItems, flattenContent, ContentItem, PageDef} from './ContentPages';\n\ndeclare const content: ContentItem[];\n\nexport interface PageNavProps extends RouteComponentProps {}\n\nexport interface PageNavState {}\n\nclass PageNavigation extends React.Component {\n\n public constructor(props: PageNavProps) {\n super(props);\n }\n\n private findActiveItem(): PageDef {\n const currentPath: string = this.props.location.pathname;\n const items: PageDef[] = flattenContent(content);\n const firstItem = items[0];\n for (let item of items) {\n const itemPath: string = '/' + item.path;\n if (itemPath === currentPath) {\n return item;\n }\n };\n\n return firstItem;\n }\n\n public render(): React.ReactNode {\n const activeItem: PageDef = this.findActiveItem();\n return (\n \n );\n }\n}\n\nexport const PageNav = withRouter(PageNavigation);\n"],"file":"PageNav.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js b/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js deleted file mode 100644 index 01c5973ff..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js +++ /dev/null @@ -1,78 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../common/keycloak/web_modules/react.js"; -import { Dropdown, KebabToggle, Toolbar, ToolbarGroup, ToolbarItem } from "../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { ReferrerDropdownItem } from "./widgets/ReferrerDropdownItem.js"; -import { ReferrerLink } from "./widgets/ReferrerLink.js"; -import { LogoutButton, LogoutDropdownItem } from "./widgets/Logout.js"; -export class PageToolbar extends React.Component { - constructor(props) { - super(props); - - _defineProperty(this, "hasReferrer", typeof referrerName !== 'undefined'); - - _defineProperty(this, "onKebabDropdownToggle", isKebabDropdownOpen => { - this.setState({ - isKebabDropdownOpen - }); - }); - - this.state = { - isKebabDropdownOpen: false - }; - } - - render() { - const kebabDropdownItems = []; - - if (this.hasReferrer) { - kebabDropdownItems.push(React.createElement(ReferrerDropdownItem, { - key: "referrerDropdownItem" - })); - } - - kebabDropdownItems.push(React.createElement(LogoutDropdownItem, { - key: "LogoutDropdownItem" - })); - return React.createElement(Toolbar, null, this.hasReferrer && React.createElement(ToolbarGroup, { - key: "referrerGroup" - }, React.createElement(ToolbarItem, { - className: "pf-m-icons", - key: "referrer" - }, React.createElement(ReferrerLink, null))), React.createElement(ToolbarGroup, { - key: "secondGroup" - }, React.createElement(ToolbarItem, { - className: "pf-m-icons", - key: "logout" - }, React.createElement(LogoutButton, null)), React.createElement(ToolbarItem, { - key: "kebab", - className: "pf-m-mobile" - }, React.createElement(Dropdown, { - isPlain: true, - position: "right", - toggle: React.createElement(KebabToggle, { - id: "mobileKebab", - onToggle: this.onKebabDropdownToggle - }), - isOpen: this.state.isKebabDropdownOpen, - dropdownItems: kebabDropdownItems - })))); - } - -} -//# sourceMappingURL=PageToolbar.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map deleted file mode 100644 index 5d85e1d40..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/PageToolbar.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../src/app/PageToolbar.tsx"],"names":["React","Dropdown","KebabToggle","Toolbar","ToolbarGroup","ToolbarItem","ReferrerDropdownItem","ReferrerLink","LogoutButton","LogoutDropdownItem","PageToolbar","Component","constructor","props","referrerName","isKebabDropdownOpen","setState","state","render","kebabDropdownItems","hasReferrer","push","onKebabDropdownToggle"],"mappings":";;AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAEA,SAAQC,QAAR,EAAkBC,WAAlB,EAA+BC,OAA/B,EAAwCC,YAAxC,EAAsDC,WAAtD;AAEA,SAAQC,oBAAR;AACA,SAAQC,YAAR;AAEA,SAAQC,YAAR,EAAqBC,kBAArB;AAOA,OAAO,MAAMC,WAAN,SAA0BV,KAAK,CAACW,SAAhC,CAA8E;AAG1EC,EAAAA,WAAP,CAAmBC,KAAnB,EAA4C;AACxC,UAAMA,KAAN;;AADwC,yCAFb,OAAOC,YAAP,KAAwB,WAEX;;AAAA,mDAQXC,mBAAD,IAAkC;AAC9D,WAAKC,QAAL,CAAc;AACVD,QAAAA;AADU,OAAd;AAGH,KAZ2C;;AAGxC,SAAKE,KAAL,GAAa;AACTF,MAAAA,mBAAmB,EAAE;AADZ,KAAb;AAGH;;AAQMG,EAAAA,MAAP,GAAiC;AAC7B,UAAMC,kBAAkB,GAAG,EAA3B;;AACA,QAAI,KAAKC,WAAT,EAAsB;AAClBD,MAAAA,kBAAkB,CAACE,IAAnB,CACI,oBAAC,oBAAD;AAAsB,QAAA,GAAG,EAAC;AAA1B,QADJ;AAGH;;AAEDF,IAAAA,kBAAkB,CAACE,IAAnB,CAAwB,oBAAC,kBAAD;AAAoB,MAAA,GAAG,EAAC;AAAxB,MAAxB;AAEA,WACI,oBAAC,OAAD,QACK,KAAKD,WAAL,IACG,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAC;AAAlB,OACI,oBAAC,WAAD;AAAa,MAAA,SAAS,EAAC,YAAvB;AAAoC,MAAA,GAAG,EAAC;AAAxC,OACI,oBAAC,YAAD,OADJ,CADJ,CAFR,EASI,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAC;AAAlB,OACI,oBAAC,WAAD;AAAa,MAAA,SAAS,EAAC,YAAvB;AAAoC,MAAA,GAAG,EAAC;AAAxC,OACI,oBAAC,YAAD,OADJ,CADJ,EAKI,oBAAC,WAAD;AAAa,MAAA,GAAG,EAAC,OAAjB;AAAyB,MAAA,SAAS,EAAC;AAAnC,OACI,oBAAC,QAAD;AACI,MAAA,OAAO,MADX;AAEI,MAAA,QAAQ,EAAC,OAFb;AAGI,MAAA,MAAM,EAAE,oBAAC,WAAD;AAAa,QAAA,EAAE,EAAC,aAAhB;AAA8B,QAAA,QAAQ,EAAE,KAAKE;AAA7C,QAHZ;AAII,MAAA,MAAM,EAAE,KAAKL,KAAL,CAAWF,mBAJvB;AAKI,MAAA,aAAa,EAAEI;AALnB,MADJ,CALJ,CATJ,CADJ;AA2BH;;AAtDgF","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Dropdown, KebabToggle, Toolbar, ToolbarGroup, ToolbarItem} from '@patternfly/react-core';\n\nimport {ReferrerDropdownItem} from './widgets/ReferrerDropdownItem';\nimport {ReferrerLink} from './widgets/ReferrerLink';\nimport {Features} from './widgets/features';\nimport {LogoutButton,LogoutDropdownItem} from './widgets/Logout';\n\ndeclare const referrerName: string;\ndeclare const features: Features;\n\ninterface PageToolbarProps {}\ninterface PageToolbarState {isKebabDropdownOpen: boolean}\nexport class PageToolbar extends React.Component {\n private hasReferrer: boolean = typeof referrerName !== 'undefined';\n\n public constructor(props: PageToolbarProps) {\n super(props);\n\n this.state = {\n isKebabDropdownOpen: false,\n };\n }\n\n private onKebabDropdownToggle = (isKebabDropdownOpen: boolean) => {\n this.setState({\n isKebabDropdownOpen\n });\n };\n\n public render(): React.ReactNode {\n const kebabDropdownItems = [];\n if (this.hasReferrer) {\n kebabDropdownItems.push(\n \n )\n }\n\n kebabDropdownItems.push();\n\n return (\n \n {this.hasReferrer &&\n \n \n \n \n \n }\n\n \n \n \n \n\n \n }\n isOpen={this.state.isKebabDropdownOpen}\n dropdownItems={kebabDropdownItems}\n />\n \n \n \n );\n }\n}\n"],"file":"PageToolbar.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js b/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js deleted file mode 100644 index a5aec7bb1..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from "../../../common/keycloak/web_modules/react.js"; -export const AccountServiceContext = React.createContext(undefined); -//# sourceMappingURL=AccountServiceContext.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map deleted file mode 100644 index 1fa9f2ba1..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/AccountServiceContext.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/account-service/AccountServiceContext.tsx"],"names":["React","AccountServiceContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAGA,OAAO,MAAMC,qBAAqB,GAAGD,KAAK,CAACE,aAAN,CAAsDC,SAAtD,CAA9B","sourcesContent":["import * as React from 'react';\nimport { AccountServiceClient } from './account.service';\n\nexport const AccountServiceContext = React.createContext(undefined);"],"file":"AccountServiceContext.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js b/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js deleted file mode 100644 index 407156d8d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js +++ /dev/null @@ -1,149 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat Inc. and/or its affiliates and other contributors - * as indicated by the @author tags. All rights reserved. - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not - * use this file except in compliance with the License. You may obtain a copy of - * the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the - * License for the specific language governing permissions and limitations under - * the License. - */ -import { ContentAlert } from "../content/ContentAlert.js"; -export class AccountServiceError extends Error { - constructor(response) { - super(response.statusText); - this.response = response; - } - -} -/** - * - * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc. - */ - -export class AccountServiceClient { - constructor(keycloakService) { - _defineProperty(this, "kcSvc", void 0); - - _defineProperty(this, "accountUrl", void 0); - - this.kcSvc = keycloakService; - this.accountUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/account'; - } - - async doGet(endpoint, config) { - return this.doRequest(endpoint, { ...config, - method: 'get' - }); - } - - async doDelete(endpoint, config) { - return this.doRequest(endpoint, { ...config, - method: 'delete' - }); - } - - async doPost(endpoint, body, config) { - return this.doRequest(endpoint, { ...config, - body: JSON.stringify(body), - method: 'post' - }); - } - - async doPut(endpoint, body, config) { - return this.doRequest(endpoint, { ...config, - body: JSON.stringify(body), - method: 'put' - }); - } - - async doRequest(endpoint, config) { - const response = await fetch(this.makeUrl(endpoint, config).toString(), (await this.makeConfig(config))); - - try { - response.data = await response.json(); - } catch (e) {} // ignore. Might be empty - - - if (!response.ok) { - this.handleError(response); - throw new AccountServiceError(response); - } - - return response; - } - - handleError(response) { - if (response !== null && response.status === 401) { - if (this.kcSvc.authenticated() && !this.kcSvc.audiencePresent()) { - // authenticated and the audience is not present => not allowed - window.location.href = baseUrl + '#/forbidden'; - } else { - // session timed out? - this.kcSvc.login(); - } - } - - if (response !== null && response.status === 403) { - window.location.href = baseUrl + '#/forbidden'; - } - - if (response !== null && response.data != null) { - if (response.data['errors'] != null) { - for (let err of response.data['errors']) ContentAlert.danger(err['errorMessage'], err['params']); - } else { - ContentAlert.danger(`${response.statusText}: ${response.data['errorMessage'] ? response.data['errorMessage'] : ''} ${response.data['error'] ? response.data['error'] : ''}`); - } - - ; - } else { - ContentAlert.danger(response.statusText); - } - } - - makeUrl(endpoint, config) { - if (endpoint.startsWith('http')) return new URL(endpoint); - const url = new URL(this.accountUrl + endpoint); // add request params - - if (config && config.hasOwnProperty('params')) { - const params = config.params || {}; - Object.keys(params).forEach(key => url.searchParams.append(key, params[key])); - } - - return url; - } - - makeConfig(config = {}) { - return new Promise(resolve => { - this.kcSvc.getToken().then(token => { - resolve({ ...config, - headers: { - 'Content-Type': 'application/json', - ...config.headers, - Authorization: 'Bearer ' + token - } - }); - }).catch(() => { - this.kcSvc.login(); - }); - }); - } - -} -window.addEventListener("unhandledrejection", event => { - event.promise.catch(error => { - if (error instanceof AccountServiceError) { - // We already handled the error. Ignore unhandled rejection. - event.preventDefault(); - } - }); -}); -//# sourceMappingURL=account.service.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map deleted file mode 100644 index 55ee214d7..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/account-service/account.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/account-service/account.service.ts"],"names":["ContentAlert","AccountServiceError","Error","constructor","response","statusText","AccountServiceClient","keycloakService","kcSvc","accountUrl","authServerUrl","realm","doGet","endpoint","config","doRequest","method","doDelete","doPost","body","JSON","stringify","doPut","fetch","makeUrl","toString","makeConfig","data","json","e","ok","handleError","status","authenticated","audiencePresent","window","location","href","baseUrl","login","err","danger","startsWith","URL","url","hasOwnProperty","params","Object","keys","forEach","key","searchParams","append","Promise","resolve","getToken","then","token","headers","Authorization","catch","addEventListener","event","promise","error","preventDefault"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat Inc. and/or its affiliates and other contributors\n * as indicated by the @author tags. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\n * use this file except in compliance with the License. You may obtain a copy of\n * the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\nimport {ContentAlert} from '../content/ContentAlert';\n\ndeclare const baseUrl: string;\n\ntype ConfigResolve = (config: RequestInit) => void;\n\nexport interface HttpResponse extends Response {\n data?: T;\n}\n\nexport interface RequestInitWithParams extends RequestInit {\n params?: {[name: string]: string | number};\n}\n\nexport class AccountServiceError extends Error {\n constructor(public response: HttpResponse) {\n super(response.statusText);\n }\n}\n\n/**\n *\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountServiceClient {\n private kcSvc: KeycloakService;\n private accountUrl: string;\n\n public constructor(keycloakService: KeycloakService) {\n this.kcSvc = keycloakService;\n this.accountUrl = this.kcSvc.authServerUrl() + 'realms/' + this.kcSvc.realm() + '/account';\n }\n\n public async doGet(endpoint: string,\n config?: RequestInitWithParams): Promise> {\n return this.doRequest(endpoint, {...config, method: 'get'});\n }\n\n public async doDelete(endpoint: string,\n config?: RequestInitWithParams): Promise> {\n return this.doRequest(endpoint, {...config, method: 'delete'});\n }\n\n public async doPost(endpoint: string,\n body: string | {},\n config?: RequestInitWithParams): Promise> {\n return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'post'});\n }\n\n public async doPut(endpoint: string,\n body: string | {},\n config?: RequestInitWithParams): Promise> {\n return this.doRequest(endpoint, {...config, body: JSON.stringify(body), method: 'put'});\n }\n\n public async doRequest(endpoint: string,\n config?: RequestInitWithParams): Promise> {\n\n const response: HttpResponse = await fetch(this.makeUrl(endpoint, config).toString(),\n await this.makeConfig(config));\n\n try {\n response.data = await response.json();\n } catch (e) {} // ignore. Might be empty\n\n if (!response.ok) {\n this.handleError(response);\n throw new AccountServiceError(response);\n }\n\n return response;\n }\n\n private handleError(response: HttpResponse): void {\n if (response !== null && response.status === 401) {\n if (this.kcSvc.authenticated() && !this.kcSvc.audiencePresent()) {\n // authenticated and the audience is not present => not allowed\n window.location.href = baseUrl + '#/forbidden';\n } else {\n // session timed out?\n this.kcSvc.login();\n }\n }\n\n if (response !== null && response.status === 403) {\n window.location.href = baseUrl + '#/forbidden';\n }\n\n if (response !== null && response.data != null) {\n if (response.data['errors'] != null) {\n for(let err of response.data['errors'])\n ContentAlert.danger(err['errorMessage'], err['params']);\n } else {\n ContentAlert.danger(\n `${response.statusText}: ${response.data['errorMessage'] ? response.data['errorMessage'] : ''} ${response.data['error'] ? response.data['error'] : ''}`);\n };\n } else {\n ContentAlert.danger(response.statusText);\n }\n }\n\n private makeUrl(endpoint: string, config?: RequestInitWithParams): URL {\n if (endpoint.startsWith('http')) return new URL(endpoint);\n const url = new URL(this.accountUrl + endpoint);\n\n // add request params\n if (config && config.hasOwnProperty('params')) {\n const params: {[name: string]: string} = config.params as {} || {};\n Object.keys(params).forEach(key => url.searchParams.append(key, params[key]))\n }\n\n return url;\n }\n\n private makeConfig(config: RequestInit = {}): Promise {\n return new Promise( (resolve: ConfigResolve) => {\n this.kcSvc.getToken()\n .then( (token: string) => {\n resolve( {\n ...config,\n headers: {'Content-Type': 'application/json',\n ...config.headers,\n Authorization: 'Bearer ' + token}\n });\n }).catch(() => {\n this.kcSvc.login();\n });\n });\n }\n\n}\n\nwindow.addEventListener(\"unhandledrejection\", (event: PromiseRejectionEvent) => {\n event.promise.catch(error => {\n if (error instanceof AccountServiceError) {\n // We already handled the error. Ignore unhandled rejection.\n event.preventDefault();\n }\n });\n});\n"],"file":"account.service.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content.json b/deps/keycloak/themes/keycloak.v2/account/resources/content.json deleted file mode 100644 index ee4098103..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content.json +++ /dev/null @@ -1,60 +0,0 @@ -[ - { - "id": "personal-info", - "path": "personal-info", - "icon": "pf-icon-user", - "label": "personalInfoHtmlTitle", - "descriptionLabel": "personalInfoIntroMessage", - "modulePath": "/content/account-page/AccountPage.js", - "componentName": "AccountPage" - }, - { - "id": "security", - "icon": "pf-icon-security", - "label": "accountSecurityTitle", - "descriptionLabel": "accountSecurityIntroMessage", - "content": [ - { - "id": "signingin", - "path": "security/signingin", - "label": "signingIn", - "modulePath": "/content/signingin-page/SigningInPage.js", - "componentName": "SigningInPage" - }, - { - "id": "device-activity", - "path": "security/device-activity", - "label": "device-activity", - "modulePath": "/content/device-activity-page/DeviceActivityPage.js", - "componentName": "DeviceActivityPage" - }, - { - "id": "linked-accounts", - "path": "security/linked-accounts", - "label": "linkedAccountsHtmlTitle", - "modulePath": "/content/linked-accounts-page/LinkedAccountsPage.js", - "componentName": "LinkedAccountsPage", - "hidden": "!features.isLinkedAccountsEnabled" - } - ] - }, - { - "id": "applications", - "icon": "pf-icon-applications", - "path": "applications", - "label": "applications", - "descriptionLabel": "applicationsIntroMessage", - "modulePath": "/content/applications-page/ApplicationsPage.js", - "componentName": "ApplicationsPage" - }, - { - "id": "resources", - "icon": "pf-icon-repository", - "path": "resources", - "label": "resources", - "descriptionLabel": "resourceIntroMessage", - "modulePath": "/content/my-resources-page/MyResourcesPage.js", - "componentName": "MyResourcesPage", - "hidden": "!features.isMyResourcesEnabled" - } -] \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js deleted file mode 100644 index cc0640595..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js +++ /dev/null @@ -1,113 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Alert, AlertActionCloseButton, AlertGroup, AlertVariant } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { Msg } from "../widgets/Msg.js"; -export class ContentAlert extends React.Component { - constructor(props) { - super(props); - - _defineProperty(this, "hideAlert", key => { - this.setState({ - alerts: [...this.state.alerts.filter(el => el.key !== key)] - }); - }); - - _defineProperty(this, "getUniqueId", () => new Date().getTime()); - - _defineProperty(this, "postAlert", (variant, message, params) => { - const alerts = this.state.alerts; - const key = this.getUniqueId(); - alerts.push({ - key, - message: Msg.localize(message, params), - variant - }); - this.setState({ - alerts - }); - - if (variant !== AlertVariant.danger) { - setTimeout(() => this.hideAlert(key), 8000); - } - }); - - this.state = { - alerts: [] - }; - ContentAlert.instance = this; - } - /** - * @param message A literal text message or localization key. - */ - - - static success(message, params) { - ContentAlert.instance.postAlert(AlertVariant.success, message, params); - } - /** - * @param message A literal text message or localization key. - */ - - - static danger(message, params) { - ContentAlert.instance.postAlert(AlertVariant.danger, message, params); - } - /** - * @param message A literal text message or localization key. - */ - - - static warning(message, params) { - ContentAlert.instance.postAlert(AlertVariant.warning, message, params); - } - /** - * @param message A literal text message or localization key. - */ - - - static info(message, params) { - ContentAlert.instance.postAlert(AlertVariant.info, message, params); - } - - render() { - return React.createElement(AlertGroup, { - isToast: true, - "aria-live": "assertive" - }, this.state.alerts.map(({ - key, - variant, - message - }) => React.createElement(Alert, { - "aria-details": message, - isLiveRegion: true, - variant: variant, - title: message, - action: React.createElement(AlertActionCloseButton, { - title: message, - variantLabel: `${variant} alert`, - onClose: () => this.hideAlert(key) - }), - key: key - }))); - } - -} - -_defineProperty(ContentAlert, "instance", void 0); -//# sourceMappingURL=ContentAlert.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map deleted file mode 100644 index 0b177db09..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentAlert.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/content/ContentAlert.tsx"],"names":["React","Alert","AlertActionCloseButton","AlertGroup","AlertVariant","Msg","ContentAlert","Component","constructor","props","key","setState","alerts","state","filter","el","Date","getTime","variant","message","params","getUniqueId","push","localize","danger","setTimeout","hideAlert","instance","success","postAlert","warning","info","render","map"],"mappings":";;AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SAASC,KAAT,EAAgBC,sBAAhB,EAAwCC,UAAxC,EAAoDC,YAApD;AACA,SAASC,GAAT;AAWA,OAAO,MAAMC,YAAN,SAA2BN,KAAK,CAACO,SAAjC,CAAiF;AAG5EC,EAAAA,WAAR,CAAoBC,KAApB,EAA8C;AAC1C,UAAMA,KAAN;;AAD0C,uCAqCzBC,GAAD,IAAiB;AACjC,WAAKC,QAAL,CAAc;AAAEC,QAAAA,MAAM,EAAE,CAAC,GAAG,KAAKC,KAAL,CAAWD,MAAX,CAAkBE,MAAlB,CAAyBC,EAAE,IAAIA,EAAE,CAACL,GAAH,KAAWA,GAA1C,CAAJ;AAAV,OAAd;AACH,KAvC6C;;AAAA,yCAyCxB,MAAO,IAAIM,IAAJ,GAAWC,OAAX,EAzCiB;;AAAA,uCA2C1B,CAACC,OAAD,EAAwBC,OAAxB,EAAyCC,MAAzC,KAA+D;AAC/E,YAAMR,MAAM,GAAG,KAAKC,KAAL,CAAWD,MAA1B;AACA,YAAMF,GAAG,GAAG,KAAKW,WAAL,EAAZ;AACAT,MAAAA,MAAM,CAACU,IAAP,CAAY;AACRZ,QAAAA,GADQ;AAERS,QAAAA,OAAO,EAAEd,GAAG,CAACkB,QAAJ,CAAaJ,OAAb,EAAsBC,MAAtB,CAFD;AAGRF,QAAAA;AAHQ,OAAZ;AAKA,WAAKP,QAAL,CAAc;AAAEC,QAAAA;AAAF,OAAd;;AAEA,UAAIM,OAAO,KAAKd,YAAY,CAACoB,MAA7B,EAAqC;AACjCC,QAAAA,UAAU,CAAC,MAAM,KAAKC,SAAL,CAAehB,GAAf,CAAP,EAA4B,IAA5B,CAAV;AACH;AACJ,KAxD6C;;AAG1C,SAAKG,KAAL,GAAa;AACTD,MAAAA,MAAM,EAAE;AADC,KAAb;AAGAN,IAAAA,YAAY,CAACqB,QAAb,GAAwB,IAAxB;AACH;AAED;;;;;AAGA,SAAcC,OAAd,CAAsBT,OAAtB,EAAuCC,MAAvC,EAAgE;AAC5Dd,IAAAA,YAAY,CAACqB,QAAb,CAAsBE,SAAtB,CAAgCzB,YAAY,CAACwB,OAA7C,EAAsDT,OAAtD,EAA+DC,MAA/D;AACH;AAED;;;;;AAGA,SAAcI,MAAd,CAAqBL,OAArB,EAAsCC,MAAtC,EAA+D;AAC3Dd,IAAAA,YAAY,CAACqB,QAAb,CAAsBE,SAAtB,CAAgCzB,YAAY,CAACoB,MAA7C,EAAqDL,OAArD,EAA8DC,MAA9D;AACH;AAED;;;;;AAGA,SAAcU,OAAd,CAAsBX,OAAtB,EAAuCC,MAAvC,EAAgE;AAC5Dd,IAAAA,YAAY,CAACqB,QAAb,CAAsBE,SAAtB,CAAgCzB,YAAY,CAAC0B,OAA7C,EAAsDX,OAAtD,EAA+DC,MAA/D;AACH;AAED;;;;;AAGA,SAAcW,IAAd,CAAmBZ,OAAnB,EAAoCC,MAApC,EAA6D;AACzDd,IAAAA,YAAY,CAACqB,QAAb,CAAsBE,SAAtB,CAAgCzB,YAAY,CAAC2B,IAA7C,EAAmDZ,OAAnD,EAA4DC,MAA5D;AACH;;AAuBMY,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,UAAD;AAAY,MAAA,OAAO,MAAnB;AAAoB,mBAAU;AAA9B,OACK,KAAKnB,KAAL,CAAWD,MAAX,CAAkBqB,GAAlB,CAAsB,CAAC;AAAEvB,MAAAA,GAAF;AAAOQ,MAAAA,OAAP;AAAgBC,MAAAA;AAAhB,KAAD,KACnB,oBAAC,KAAD;AACI,sBAAcA,OADlB;AAEI,MAAA,YAAY,MAFhB;AAGI,MAAA,OAAO,EAAED,OAHb;AAII,MAAA,KAAK,EAAEC,OAJX;AAKI,MAAA,MAAM,EACF,oBAAC,sBAAD;AACI,QAAA,KAAK,EAAEA,OADX;AAEI,QAAA,YAAY,EAAG,GAAED,OAAQ,QAF7B;AAGI,QAAA,OAAO,EAAE,MAAM,KAAKQ,SAAL,CAAehB,GAAf;AAHnB,QANR;AAYI,MAAA,GAAG,EAAEA;AAZT,MADH,CADL,CADJ;AAmBH;;AAjFmF;;gBAA3EJ,Y","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport { Alert, AlertActionCloseButton, AlertGroup, AlertVariant } from '@patternfly/react-core';\nimport { Msg } from '../widgets/Msg';\n\ninterface ContentAlertProps { }\n\ninterface ContentAlertState {\n alerts: {\n key: number;\n message: string;\n variant: AlertVariant;\n }[];\n}\nexport class ContentAlert extends React.Component {\n private static instance: ContentAlert;\n\n private constructor(props: ContentAlertProps) {\n super(props);\n\n this.state = {\n alerts: []\n };\n ContentAlert.instance = this;\n }\n\n /**\n * @param message A literal text message or localization key.\n */\n public static success(message: string, params?: string[]): void {\n ContentAlert.instance.postAlert(AlertVariant.success, message, params);\n }\n\n /**\n * @param message A literal text message or localization key.\n */\n public static danger(message: string, params?: string[]): void {\n ContentAlert.instance.postAlert(AlertVariant.danger, message, params);\n }\n\n /**\n * @param message A literal text message or localization key.\n */\n public static warning(message: string, params?: string[]): void {\n ContentAlert.instance.postAlert(AlertVariant.warning, message, params);\n }\n\n /**\n * @param message A literal text message or localization key.\n */\n public static info(message: string, params?: string[]): void {\n ContentAlert.instance.postAlert(AlertVariant.info, message, params);\n }\n\n private hideAlert = (key: number) => {\n this.setState({ alerts: [...this.state.alerts.filter(el => el.key !== key)] });\n }\n\n private getUniqueId = () => (new Date().getTime());\n\n private postAlert = (variant: AlertVariant, message: string, params?: string[]) => {\n const alerts = this.state.alerts;\n const key = this.getUniqueId();\n alerts.push({\n key,\n message: Msg.localize(message, params),\n variant\n });\n this.setState({ alerts });\n\n if (variant !== AlertVariant.danger) {\n setTimeout(() => this.hideAlert(key), 8000);\n }\n }\n\n public render(): React.ReactNode {\n return (\n \n {this.state.alerts.map(({ key, variant, message }) => (\n this.hideAlert(key)}\n />\n }\n key={key} />\n ))}\n \n );\n }\n}"],"file":"ContentAlert.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js deleted file mode 100644 index baa0dda64..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Button, Grid, GridItem, Title, Tooltip } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { RedoIcon } from "../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { Msg } from "../widgets/Msg.js"; -import { ContentAlert } from "./ContentAlert.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc. - */ -export class ContentPage extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement(React.Fragment, null, React.createElement(ContentAlert, null), React.createElement("section", { - id: "page-heading", - className: "pf-c-page__main-section pf-m-light" - }, React.createElement(Grid, null, React.createElement(GridItem, { - span: 11 - }, React.createElement(Title, { - headingLevel: "h1", - size: "3xl" - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: this.props.title - })))), this.props.onRefresh && React.createElement(GridItem, { - span: 1 - }, React.createElement(Tooltip, { - content: React.createElement(Msg, { - msgKey: "refreshPage" - }) - }, React.createElement(Button, { - "aria-describedby": "refresh page", - id: "refresh-page", - variant: "plain", - onClick: this.props.onRefresh - }, React.createElement(RedoIcon, { - size: "sm" - })))), this.props.introMessage && React.createElement(GridItem, { - span: 12 - }, " ", React.createElement(Msg, { - msgKey: this.props.introMessage - })))), React.createElement("section", { - className: "pf-c-page__main-section pf-m-no-padding-mobile" - }, this.props.children)); - } - -} -; -//# sourceMappingURL=ContentPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map deleted file mode 100644 index d69799936..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/ContentPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/content/ContentPage.tsx"],"names":["React","Button","Grid","GridItem","Title","Tooltip","RedoIcon","Msg","ContentAlert","ContentPage","Component","constructor","props","render","title","onRefresh","introMessage","children"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SAAQC,MAAR,EAAgBC,IAAhB,EAAsBC,QAAtB,EAAgCC,KAAhC,EAAuCC,OAAvC;AACA,SAAQC,QAAR;AAEA,SAAQC,GAAR;AACA,SAAQC,YAAR;;AASA;;;AAGA,OAAO,MAAMC,WAAN,SAA0BT,KAAK,CAACU,SAAhC,CAA4D;AAExDC,EAAAA,WAAP,CAAmBC,KAAnB,EAA4C;AACxC,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,KAAD,CAAO,QAAP,QACI,oBAAC,YAAD,OADJ,EAEI;AAAS,MAAA,EAAE,EAAC,cAAZ;AAA2B,MAAA,SAAS,EAAC;AAArC,OACI,oBAAC,IAAD,QACI,oBAAC,QAAD;AAAU,MAAA,IAAI,EAAE;AAAhB,OAAoB,oBAAC,KAAD;AAAO,MAAA,YAAY,EAAC,IAApB;AAAyB,MAAA,IAAI,EAAC;AAA9B,OAAoC,oCAAQ,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKD,KAAL,CAAWE;AAAxB,MAAR,CAApC,CAApB,CADJ,EAEK,KAAKF,KAAL,CAAWG,SAAX,IACG,oBAAC,QAAD;AAAU,MAAA,IAAI,EAAE;AAAhB,OACI,oBAAC,OAAD;AAAS,MAAA,OAAO,EAAE,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAC;AAAZ;AAAlB,OACI,oBAAC,MAAD;AAAQ,0BAAiB,cAAzB;AAAwC,MAAA,EAAE,EAAC,cAA3C;AAA0D,MAAA,OAAO,EAAC,OAAlE;AAA0E,MAAA,OAAO,EAAE,KAAKH,KAAL,CAAWG;AAA9F,OACI,oBAAC,QAAD;AAAU,MAAA,IAAI,EAAC;AAAf,MADJ,CADJ,CADJ,CAHR,EAWK,KAAKH,KAAL,CAAWI,YAAX,IAA2B,oBAAC,QAAD;AAAU,MAAA,IAAI,EAAE;AAAhB,YAAqB,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKJ,KAAL,CAAWI;AAAxB,MAArB,CAXhC,CADJ,CAFJ,EAkBI;AAAS,MAAA,SAAS,EAAC;AAAnB,OACK,KAAKJ,KAAL,CAAWK,QADhB,CAlBJ,CADJ;AAwBH;;AA/B8D;AAgClE","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {Button, Grid, GridItem, Title, Tooltip} from '@patternfly/react-core';\nimport {RedoIcon} from '@patternfly/react-icons';\n\nimport {Msg} from '../widgets/Msg';\nimport {ContentAlert} from './ContentAlert';\n\ninterface ContentPageProps {\n title: string; // Literal title or key into message bundle\n introMessage?: string; // Literal message or key into message bundle\n onRefresh?: () => void;\n children: React.ReactNode;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.\n */\nexport class ContentPage extends React.Component {\n\n public constructor(props: ContentPageProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n \n \n
    \n \n <strong><Msg msgKey={this.props.title}/></strong>\n {this.props.onRefresh &&\n \n }>\n \n \n \n }\n {this.props.introMessage && }\n \n
    \n\n
    \n {this.props.children}\n
    \n
    \n );\n }\n};"],"file":"ContentPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js deleted file mode 100644 index fad043d21..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js +++ /dev/null @@ -1,273 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { ActionGroup, Button, Form, FormGroup, TextInput, Grid, GridItem, Expandable } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContentPage } from "../ContentPage.js"; -import { ContentAlert } from "../ContentAlert.js"; -import { LocaleSelector } from "../../widgets/LocaleSelectors.js"; -import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js"; -import { AIACommand } from "../../util/AIACommand.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc. - */ -export class AccountPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "isRegistrationEmailAsUsername", features.isRegistrationEmailAsUsername); - - _defineProperty(this, "isEditUserNameAllowed", features.isEditUserNameAllowed); - - _defineProperty(this, "isDeleteAccountAllowed", features.deleteAccountAllowed); - - _defineProperty(this, "DEFAULT_STATE", { - errors: { - username: '', - firstName: '', - lastName: '', - email: '' - }, - formFields: { - username: '', - firstName: '', - lastName: '', - email: '', - attributes: {} - } - }); - - _defineProperty(this, "state", this.DEFAULT_STATE); - - _defineProperty(this, "handleCancel", () => { - this.fetchPersonalInfo(); - }); - - _defineProperty(this, "handleChange", (value, event) => { - const target = event.currentTarget; - const name = target.name; - this.setState({ - errors: { ...this.state.errors, - [name]: target.validationMessage - }, - formFields: { ...this.state.formFields, - [name]: value - } - }); - }); - - _defineProperty(this, "handleSubmit", event => { - event.preventDefault(); - const form = event.target; - const isValid = form.checkValidity(); - - if (isValid) { - const reqData = { ...this.state.formFields - }; - this.context.doPost("/", reqData).then(() => { - ContentAlert.success('accountUpdatedMessage'); - - if (locale !== this.state.formFields.attributes.locale[0]) { - window.location.reload(); - } - }); - } else { - const formData = new FormData(form); - const validationMessages = Array.from(formData.keys()).reduce((acc, key) => { - acc[key] = form.elements[key].validationMessage; - return acc; - }, {}); - this.setState({ - errors: { ...validationMessages - }, - formFields: this.state.formFields - }); - } - }); - - _defineProperty(this, "handleDelete", keycloak => { - new AIACommand(keycloak, "delete_account").execute(); - }); - - _defineProperty(this, "UsernameInput", () => React.createElement(TextInput, { - isRequired: true, - type: "text", - id: "user-name", - name: "username", - maxLength: 254, - value: this.state.formFields.username, - onChange: this.handleChange, - isValid: this.state.errors.username === '' - })); - - _defineProperty(this, "RestrictedUsernameInput", () => React.createElement(TextInput, { - isDisabled: true, - type: "text", - id: "user-name", - name: "username", - value: this.state.formFields.username - })); - - this.context = context; - this.fetchPersonalInfo(); - } - - fetchPersonalInfo() { - this.context.doGet("/").then(response => { - this.setState(this.DEFAULT_STATE); - const formFields = response.data; - - if (!formFields.attributes) { - formFields.attributes = { - locale: [locale] - }; - } else if (!formFields.attributes.locale) { - formFields.attributes.locale = [locale]; - } - - this.setState({ ...{ - formFields: formFields - } - }); - }); - } - - render() { - const fields = this.state.formFields; - return React.createElement(ContentPage, { - title: "personalInfoHtmlTitle", - introMessage: "personalSubMessage" - }, React.createElement(Form, { - isHorizontal: true, - onSubmit: event => this.handleSubmit(event) - }, !this.isRegistrationEmailAsUsername && React.createElement(FormGroup, { - label: Msg.localize('username'), - isRequired: true, - fieldId: "user-name", - helperTextInvalid: this.state.errors.username, - isValid: this.state.errors.username === '' - }, this.isEditUserNameAllowed && React.createElement(this.UsernameInput, null), !this.isEditUserNameAllowed && React.createElement(this.RestrictedUsernameInput, null)), React.createElement(FormGroup, { - label: Msg.localize('email'), - isRequired: true, - fieldId: "email-address", - helperTextInvalid: this.state.errors.email, - isValid: this.state.errors.email === '' - }, React.createElement(TextInput, { - isRequired: true, - type: "email", - id: "email-address", - name: "email", - maxLength: 254, - value: fields.email, - onChange: this.handleChange, - isValid: this.state.errors.email === '' - })), React.createElement(FormGroup, { - label: Msg.localize('firstName'), - isRequired: true, - fieldId: "first-name", - helperTextInvalid: this.state.errors.firstName, - isValid: this.state.errors.firstName === '' - }, React.createElement(TextInput, { - isRequired: true, - type: "text", - id: "first-name", - name: "firstName", - maxLength: 254, - value: fields.firstName, - onChange: this.handleChange, - isValid: this.state.errors.firstName === '' - })), React.createElement(FormGroup, { - label: Msg.localize('lastName'), - isRequired: true, - fieldId: "last-name", - helperTextInvalid: this.state.errors.lastName, - isValid: this.state.errors.lastName === '' - }, React.createElement(TextInput, { - isRequired: true, - type: "text", - id: "last-name", - name: "lastName", - maxLength: 254, - value: fields.lastName, - onChange: this.handleChange, - isValid: this.state.errors.lastName === '' - })), features.isInternationalizationEnabled && React.createElement(FormGroup, { - label: Msg.localize('selectLocale'), - isRequired: true, - fieldId: "locale" - }, React.createElement(LocaleSelector, { - id: "locale-selector", - value: fields.attributes.locale || '', - onChange: value => this.setState({ - errors: this.state.errors, - formFields: { ...this.state.formFields, - attributes: { ...this.state.formFields.attributes, - locale: [value] - } - } - }) - })), React.createElement(ActionGroup, null, React.createElement(Button, { - type: "submit", - id: "save-btn", - variant: "primary", - isDisabled: Object.values(this.state.errors).filter(e => e !== '').length !== 0 - }, React.createElement(Msg, { - msgKey: "doSave" - })), React.createElement(Button, { - id: "cancel-btn", - variant: "secondary", - onClick: this.handleCancel - }, React.createElement(Msg, { - msgKey: "doCancel" - })))), this.isDeleteAccountAllowed && React.createElement("div", { - id: "delete-account", - style: { - marginTop: "30px" - } - }, React.createElement(Expandable, { - toggleText: "Delete Account" - }, React.createElement(Grid, { - gutter: "sm" - }, React.createElement(GridItem, { - span: 6 - }, React.createElement("p", null, React.createElement(Msg, { - msgKey: "deleteAccountWarning" - }))), React.createElement(GridItem, { - span: 4 - }, React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(Button, { - id: "delete-account-btn", - variant: "danger", - onClick: () => this.handleDelete(keycloak), - className: "delete-button" - }, React.createElement(Msg, { - msgKey: "doDelete" - })))), React.createElement(GridItem, { - span: 2 - }))))); - } - -} - -_defineProperty(AccountPage, "contextType", AccountServiceContext); - -; -//# sourceMappingURL=AccountPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map deleted file mode 100644 index 5a689cea7..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/account-page/AccountPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/account-page/AccountPage.tsx"],"names":["React","ActionGroup","Button","Form","FormGroup","TextInput","Grid","GridItem","Expandable","AccountServiceContext","Msg","ContentPage","ContentAlert","LocaleSelector","KeycloakContext","AIACommand","AccountPage","Component","constructor","props","context","features","isRegistrationEmailAsUsername","isEditUserNameAllowed","deleteAccountAllowed","errors","username","firstName","lastName","email","formFields","attributes","DEFAULT_STATE","fetchPersonalInfo","value","event","target","currentTarget","name","setState","state","validationMessage","preventDefault","form","isValid","checkValidity","reqData","doPost","then","success","locale","window","location","reload","formData","FormData","validationMessages","Array","from","keys","reduce","acc","key","elements","keycloak","execute","handleChange","doGet","response","data","render","fields","handleSubmit","localize","isInternationalizationEnabled","Object","values","filter","e","length","handleCancel","isDeleteAccountAllowed","marginTop","handleDelete"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\nimport { ActionGroup, Button, Form, FormGroup, TextInput, Grid, GridItem, Expandable} from '@patternfly/react-core';\n\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Features } from '../../widgets/features';\nimport { Msg } from '../../widgets/Msg';\nimport { ContentPage } from '../ContentPage';\nimport { ContentAlert } from '../ContentAlert';\nimport { LocaleSelector } from '../../widgets/LocaleSelectors';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\nimport { KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { AIACommand } from '../../util/AIACommand';\n\ndeclare const features: Features;\ndeclare const locale: string;\n\ninterface AccountPageProps {\n}\n\ninterface FormFields {\n readonly username?: string;\n readonly firstName?: string;\n readonly lastName?: string;\n readonly email?: string;\n attributes?: { locale?: [string] };\n}\n\ninterface AccountPageState {\n readonly errors: FormFields;\n readonly formFields: FormFields;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class AccountPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n private isRegistrationEmailAsUsername: boolean = features.isRegistrationEmailAsUsername;\n private isEditUserNameAllowed: boolean = features.isEditUserNameAllowed;\n private isDeleteAccountAllowed: boolean = features.deleteAccountAllowed;\n private readonly DEFAULT_STATE: AccountPageState = {\n errors: {\n username: '',\n firstName: '',\n lastName: '',\n email: ''\n },\n formFields: {\n username: '',\n firstName: '',\n lastName: '',\n email: '',\n attributes: {}\n }\n };\n\n public state: AccountPageState = this.DEFAULT_STATE;\n\n public constructor(props: AccountPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.fetchPersonalInfo();\n }\n\n private fetchPersonalInfo(): void {\n this.context!.doGet(\"/\")\n .then((response: HttpResponse) => {\n this.setState(this.DEFAULT_STATE);\n const formFields = response.data;\n if (!formFields!.attributes) {\n formFields!.attributes = { locale: [locale] };\n }\n else if (!formFields!.attributes.locale) {\n formFields!.attributes.locale = [locale];\n }\n\n this.setState({...{ formFields: formFields as FormFields }});\n });\n }\n\n private handleCancel = (): void => {\n this.fetchPersonalInfo();\n }\n\n private handleChange = (value: string, event: React.FormEvent) => {\n const target = event.currentTarget;\n const name = target.name;\n\n this.setState({\n errors: { ...this.state.errors, [name]: target.validationMessage },\n formFields: { ...this.state.formFields, [name]: value }\n });\n }\n\n private handleSubmit = (event: React.FormEvent): void => {\n event.preventDefault();\n const form = event.target as HTMLFormElement;\n const isValid = form.checkValidity();\n if (isValid) {\n const reqData: FormFields = { ...this.state.formFields };\n this.context!.doPost(\"/\", reqData)\n .then(() => {\n ContentAlert.success('accountUpdatedMessage');\n if (locale !== this.state.formFields.attributes!.locale![0]) {\n window.location.reload();\n }\n });\n } else {\n const formData = new FormData(form);\n const validationMessages = Array.from(formData.keys()).reduce((acc, key) => {\n acc[key] = form.elements[key].validationMessage\n return acc\n }, {});\n this.setState({\n errors: { ...validationMessages },\n formFields: this.state.formFields\n });\n }\n\n }\n\n private handleDelete = (keycloak: KeycloakService): void => {\n new AIACommand(keycloak, \"delete_account\").execute();\n }\n\n public render(): React.ReactNode {\n const fields: FormFields = this.state.formFields;\n return (\n \n
    this.handleSubmit(event)}>\n {!this.isRegistrationEmailAsUsername &&\n \n {this.isEditUserNameAllowed && }\n {!this.isEditUserNameAllowed && }\n \n }\n \n \n \n \n \n \n \n \n \n \n \n \n {features.isInternationalizationEnabled && \n this.setState({\n errors: this.state.errors,\n formFields: { ...this.state.formFields, attributes: { ...this.state.formFields.attributes, locale: [value] }}\n })}\n />\n }\n \n e !== '').length !== 0}\n >\n \n \n \n \n \n \n \n\n { this.isDeleteAccountAllowed && \n
    \n \n \n \n

    \n \n

    \n
    \n \n \n { (keycloak: KeycloakService) => (\n \n )}\n \n \n \n \n
    \n \n
    \n
    }\n
    \n );\n }\n\n private UsernameInput = () => (\n \n \n );\n\n private RestrictedUsernameInput = () => (\n \n \n );\n};"],"file":"AccountPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js deleted file mode 100644 index dc76d3774..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js +++ /dev/null @@ -1,70 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js"; -import { AIACommand } from "../../util/AIACommand.js"; -import { Msg } from "../../widgets/Msg.js"; -import { Title, TitleLevel, Button, EmptyState, EmptyStateVariant, EmptyStateIcon, EmptyStateBody } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { PassportIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js"; // Note: This class demonstrates two features of the ContentPages framework: -// 1) The PageDef is available as a React property. -// 2) You can add additional custom properties to the PageDef. In this case, -// we add a value called kcAction in content.js and access it by extending the -// PageDef interface. - -/** - * @author Stan Silvert - */ -class ApplicationInitiatedActionPage extends React.Component { - constructor(props) { - super(props); - - _defineProperty(this, "handleClick", keycloak => { - new AIACommand(keycloak, this.props.pageDef.kcAction).execute(); - }); - } - - render() { - return React.createElement(EmptyState, { - variant: EmptyStateVariant.full - }, React.createElement(EmptyStateIcon, { - icon: PassportIcon - }), React.createElement(Title, { - headingLevel: TitleLevel.h5, - size: "lg" - }, React.createElement(Msg, { - msgKey: this.props.pageDef.label, - params: this.props.pageDef.labelParams - })), React.createElement(EmptyStateBody, null, React.createElement(Msg, { - msgKey: "actionRequiresIDP" - })), React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(Button, { - variant: "primary", - onClick: () => this.handleClick(keycloak), - target: "_blank" - }, React.createElement(Msg, { - msgKey: "continue" - })))); - } - -} - -; // Note that the class name is not exported above. To get access to the router, -// we use withRouter() and export a different name. - -export const AppInitiatedActionPage = withRouter(ApplicationInitiatedActionPage); -//# sourceMappingURL=AppInitiatedActionPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map deleted file mode 100644 index a54863426..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/aia-page/AppInitiatedActionPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/aia-page/AppInitiatedActionPage.tsx"],"names":["React","withRouter","AIACommand","Msg","Title","TitleLevel","Button","EmptyState","EmptyStateVariant","EmptyStateIcon","EmptyStateBody","PassportIcon","KeycloakContext","ApplicationInitiatedActionPage","Component","constructor","props","keycloak","pageDef","kcAction","execute","render","full","h5","label","labelParams","handleClick","AppInitiatedActionPage"],"mappings":";;AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SAAQC,UAAR;AAEA,SAAQC,UAAR;AAEA,SAAQC,GAAR;AAEA,SACEC,KADF,EAEEC,UAFF,EAGEC,MAHF,EAIEC,UAJF,EAKEC,iBALF,EAMEC,cANF,EAOEC,cAPF;AASA,SAASC,YAAT;AAEA,SAASC,eAAT,oD,CAEA;AACA;AACA;AACA;AACA;;AAYA;;;AAGA,MAAMC,8BAAN,SAA6Cb,KAAK,CAACc,SAAnD,CAA0F;AAE/EC,EAAAA,WAAP,CAAmBC,KAAnB,EAAuD;AACnD,UAAMA,KAAN;;AADmD,yCAIhCC,QAAD,IAAqC;AACvD,UAAIf,UAAJ,CAAee,QAAf,EAAyB,KAAKD,KAAL,CAAWE,OAAX,CAAmBC,QAA5C,EAAsDC,OAAtD;AACH,KANsD;AAEtD;;AAMMC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,UAAD;AAAY,MAAA,OAAO,EAAEb,iBAAiB,CAACc;AAAvC,OACI,oBAAC,cAAD;AAAgB,MAAA,IAAI,EAAEX;AAAtB,MADJ,EAEI,oBAAC,KAAD;AAAO,MAAA,YAAY,EAAEN,UAAU,CAACkB,EAAhC;AAAoC,MAAA,IAAI,EAAC;AAAzC,OACE,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKP,KAAL,CAAWE,OAAX,CAAmBM,KAAhC;AAAuC,MAAA,MAAM,EAAE,KAAKR,KAAL,CAAWE,OAAX,CAAmBO;AAAlE,MADF,CAFJ,EAKI,oBAAC,cAAD,QACE,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MADF,CALJ,EAQI,oBAAC,eAAD,CAAiB,QAAjB,QACER,QAAQ,IACN,oBAAC,MAAD;AAAQ,MAAA,OAAO,EAAC,SAAhB;AACQ,MAAA,OAAO,EAAE,MAAM,KAAKS,WAAL,CAAiBT,QAAjB,CADvB;AAEQ,MAAA,MAAM,EAAC;AAFf,OAEwB,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MAFxB,CAFJ,CARJ,CADJ;AAmBH;;AA9BqF;;AA+BzF,C,CAED;AACA;;AACA,OAAO,MAAMU,sBAAsB,GAAG1B,UAAU,CAACY,8BAAD,CAAzC","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\n\nimport {AIACommand} from '../../util/AIACommand';\nimport {PageDef} from '../../ContentPages';\nimport {Msg} from '../../widgets/Msg';\n\nimport {\n Title,\n TitleLevel,\n Button,\n EmptyState,\n EmptyStateVariant,\n EmptyStateIcon,\n EmptyStateBody\n} from '@patternfly/react-core';\nimport { PassportIcon } from '@patternfly/react-icons';\nimport { KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\n\n// Note: This class demonstrates two features of the ContentPages framework:\n// 1) The PageDef is available as a React property.\n// 2) You can add additional custom properties to the PageDef. In this case,\n// we add a value called kcAction in content.js and access it by extending the\n// PageDef interface.\ninterface ActionPageDef extends PageDef {\n kcAction: string;\n}\n\n// Extend RouteComponentProps to get access to router information such as\n// the hash-routed path associated with this page. See this.props.location.pathname\n// as used below.\ninterface AppInitiatedActionPageProps extends RouteComponentProps {\n pageDef: ActionPageDef;\n}\n\n/**\n * @author Stan Silvert\n */\nclass ApplicationInitiatedActionPage extends React.Component {\n\n public constructor(props: AppInitiatedActionPageProps) {\n super(props);\n }\n\n private handleClick = (keycloak: KeycloakService): void => {\n new AIACommand(keycloak, this.props.pageDef.kcAction).execute();\n }\n\n public render(): React.ReactNode {\n return (\n \n \n \n <Msg msgKey={this.props.pageDef.label} params={this.props.pageDef.labelParams}/>\n \n \n \n \n \n { keycloak => (\n \n )}\n \n \n \n );\n }\n};\n\n// Note that the class name is not exported above. To get access to the router,\n// we use withRouter() and export a different name.\nexport const AppInitiatedActionPage = withRouter(ApplicationInitiatedActionPage);"],"file":"AppInitiatedActionPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js deleted file mode 100644 index 6c85caf7d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js +++ /dev/null @@ -1,182 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, Grid, GridItem, Button } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { InfoAltIcon, CheckIcon, ExternalLinkAltIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { ContentPage } from "../ContentPage.js"; -import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Msg } from "../../widgets/Msg.js"; -export class ApplicationsPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "removeConsent", clientId => { - this.context.doDelete("/applications/" + clientId + "/consent").then(() => { - this.fetchApplications(); - }); - }); - - _defineProperty(this, "onToggle", row => { - const newIsRowOpen = this.state.isRowOpen; - newIsRowOpen[row] = !newIsRowOpen[row]; - this.setState({ - isRowOpen: newIsRowOpen - }); - }); - - this.context = context; - this.state = { - isRowOpen: [], - applications: [] - }; - this.fetchApplications(); - } - - fetchApplications() { - this.context.doGet("/applications").then(response => { - const applications = response.data || []; - this.setState({ - isRowOpen: new Array(applications.length).fill(false), - applications: applications - }); - }); - } - - elementId(item, application) { - return `application-${item}-${application.clientId}`; - } - - render() { - return React.createElement(ContentPage, { - title: Msg.localize('applicationsPageTitle') - }, React.createElement(DataList, { - id: "applications-list", - "aria-label": Msg.localize('applicationsPageTitle'), - isCompact: true - }, React.createElement(DataListItem, { - id: "applications-list-header", - "aria-labelledby": "Columns names" - }, React.createElement(DataListItemRow, null, "// invisible toggle allows headings to line up properly", React.createElement("span", { - style: { - visibility: 'hidden' - } - }, React.createElement(DataListToggle, { - isExpanded: false, - id: "applications-list-header-invisible-toggle", - "aria-controls": "hidden" - })), React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "applications-list-client-id-header", - width: 2 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "applicationName" - }))), React.createElement(DataListCell, { - key: "applications-list-app-type-header", - width: 2 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "applicationType" - }))), React.createElement(DataListCell, { - key: "applications-list-status", - width: 2 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "status" - })))] - }))), this.state.applications.map((application, appIndex) => { - return React.createElement(DataListItem, { - id: this.elementId("client-id", application), - key: 'application-' + appIndex, - "aria-labelledby": "applications-list", - isExpanded: this.state.isRowOpen[appIndex] - }, React.createElement(DataListItemRow, null, React.createElement(DataListToggle, { - onClick: () => this.onToggle(appIndex), - isExpanded: this.state.isRowOpen[appIndex], - id: this.elementId('toggle', application), - "aria-controls": this.elementId("expandable", application) - }), React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - id: this.elementId('name', application), - width: 2, - key: 'app-' + appIndex - }, React.createElement(Button, { - component: "a", - variant: "link", - onClick: () => window.open(application.effectiveUrl) - }, application.clientName || application.clientId, " ", React.createElement(ExternalLinkAltIcon, null))), React.createElement(DataListCell, { - id: this.elementId('internal', application), - width: 2, - key: 'internal-' + appIndex - }, application.userConsentRequired ? Msg.localize('thirdPartyApp') : Msg.localize('internalApp'), application.offlineAccess ? ', ' + Msg.localize('offlineAccess') : ''), React.createElement(DataListCell, { - id: this.elementId('status', application), - width: 2, - key: 'status-' + appIndex - }, application.inUse ? Msg.localize('inUse') : Msg.localize('notInUse'))] - })), React.createElement(DataListContent, { - noPadding: false, - "aria-label": Msg.localize('applicationDetails'), - id: this.elementId("expandable", application), - isHidden: !this.state.isRowOpen[appIndex] - }, React.createElement(Grid, { - sm: 12, - md: 12, - lg: 12 - }, React.createElement("div", { - className: "pf-c-content" - }, React.createElement(GridItem, null, React.createElement("strong", null, Msg.localize('client') + ': '), " ", application.clientId), application.description && React.createElement(GridItem, null, React.createElement("strong", null, Msg.localize('description') + ': '), " ", application.description), React.createElement(GridItem, null, React.createElement("strong", null, "URL: "), " ", React.createElement("span", { - id: this.elementId('effectiveurl', application) - }, application.effectiveUrl.split('"'))), application.consent && React.createElement(React.Fragment, null, React.createElement(GridItem, { - span: 12 - }, React.createElement("strong", null, "Has access to:")), application.consent.grantedScopes.map((scope, scopeIndex) => { - return React.createElement(React.Fragment, { - key: 'scope-' + scopeIndex - }, React.createElement(GridItem, { - offset: 1 - }, React.createElement(CheckIcon, null), " ", scope.name)); - }), React.createElement(GridItem, null, React.createElement("strong", null, Msg.localize('accessGrantedOn') + ': '), new Intl.DateTimeFormat(locale, { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: 'numeric', - minute: 'numeric', - second: 'numeric' - }).format(application.consent.createDate))))), (application.consent || application.offlineAccess) && React.createElement(Grid, { - gutter: "sm" - }, React.createElement("hr", null), React.createElement(GridItem, null, React.createElement(React.Fragment, null, React.createElement(ContinueCancelModal, { - buttonTitle: Msg.localize('removeButton') // required - , - buttonVariant: "secondary" // defaults to 'primary' - , - modalTitle: Msg.localize('removeModalTitle') // required - , - modalMessage: Msg.localize('removeModalMessage', [application.clientId]), - modalContinueButtonLabel: Msg.localize('confirmButton') // defaults to 'Continue' - , - onContinue: () => this.removeConsent(application.clientId) // required - - }))), React.createElement(GridItem, null, React.createElement(InfoAltIcon, null), " ", Msg.localize('infoMessage'))))); - }))); - } - -} - -_defineProperty(ApplicationsPage, "contextType", AccountServiceContext); - -; -//# sourceMappingURL=ApplicationsPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map deleted file mode 100644 index b6b85395e..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/applications-page/ApplicationsPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/applications-page/ApplicationsPage.tsx"],"names":["React","DataList","DataListItem","DataListItemRow","DataListCell","DataListToggle","DataListContent","DataListItemCells","Grid","GridItem","Button","InfoAltIcon","CheckIcon","ExternalLinkAltIcon","ContentPage","ContinueCancelModal","AccountServiceContext","Msg","ApplicationsPage","Component","constructor","props","context","clientId","doDelete","then","fetchApplications","row","newIsRowOpen","state","isRowOpen","setState","applications","doGet","response","data","Array","length","fill","elementId","item","application","render","localize","visibility","map","appIndex","onToggle","window","open","effectiveUrl","clientName","userConsentRequired","offlineAccess","inUse","description","split","consent","grantedScopes","scope","scopeIndex","name","Intl","DateTimeFormat","locale","year","month","day","hour","minute","second","format","createDate","removeConsent"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListToggle,\n DataListContent,\n DataListItemCells,\n Grid,\n GridItem,\n Button,\n} from '@patternfly/react-core';\n\nimport { InfoAltIcon, CheckIcon, BuilderImageIcon, ExternalLinkAltIcon } from '@patternfly/react-icons';\nimport { ContentPage } from '../ContentPage';\nimport { ContinueCancelModal } from '../../widgets/ContinueCancelModal';\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Msg } from '../../widgets/Msg';\n\ndeclare const locale: string;\n\nexport interface ApplicationsPageProps {\n}\n\nexport interface ApplicationsPageState {\n isRowOpen: boolean[];\n applications: Application[];\n}\n\nexport interface GrantedScope {\n displayTest: string;\n id: string;\n name: string;\n}\n\nexport interface Consent {\n createDate: number;\n grantedScopes: GrantedScope[];\n lastUpdatedDate: number;\n}\n\ninterface Application {\n effectiveUrl: string;\n clientId: string;\n clientName: string;\n consent: Consent;\n description: string;\n inUse: boolean;\n offlineAccess: boolean;\n userConsentRequired: boolean;\n scope: string[];\n}\n\nexport class ApplicationsPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: ApplicationsPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n this.state = {\n isRowOpen: [],\n applications: []\n };\n\n this.fetchApplications();\n }\n\n private removeConsent = (clientId: string) => {\n this.context!.doDelete(\"/applications/\" + clientId + \"/consent\")\n .then(() => {\n this.fetchApplications();\n });\n }\n\n private onToggle = (row: number): void => {\n const newIsRowOpen: boolean[] = this.state.isRowOpen;\n newIsRowOpen[row] = !newIsRowOpen[row];\n this.setState({ isRowOpen: newIsRowOpen });\n };\n\n private fetchApplications(): void {\n this.context!.doGet(\"/applications\")\n .then((response: HttpResponse) => {\n const applications = response.data || [];\n this.setState({\n isRowOpen: new Array(applications.length).fill(false),\n applications: applications\n });\n });\n }\n\n private elementId(item: string, application: Application): string {\n return `application-${item}-${application.clientId}`;\n }\n\n public render(): React.ReactNode {\n return (\n \n \n \n \n // invisible toggle allows headings to line up properly\n \n \n \n \n \n ,\n \n \n ,\n \n \n ,\n ]}\n />\n \n \n {this.state.applications.map((application: Application, appIndex: number) => {\n return (\n \n \n this.onToggle(appIndex)}\n isExpanded={this.state.isRowOpen[appIndex]}\n id={this.elementId('toggle', application)}\n aria-controls={this.elementId(\"expandable\", application)}\n />\n \n \n ,\n \n {application.userConsentRequired ? Msg.localize('thirdPartyApp') : Msg.localize('internalApp')}\n {application.offlineAccess ? ', ' + Msg.localize('offlineAccess') : ''}\n ,\n \n {application.inUse ? Msg.localize('inUse') : Msg.localize('notInUse')}\n \n ]}\n />\n \n \n \n
    \n {Msg.localize('client') + ': '} {application.clientId}\n {application.description &&\n {Msg.localize('description') + ': '} {application.description}\n }\n URL: {application.effectiveUrl.split('\"')}\n {application.consent &&\n \n \n Has access to:\n \n {application.consent.grantedScopes.map((scope: GrantedScope, scopeIndex: number) => {\n return (\n \n {scope.name}\n \n )\n })}\n {Msg.localize('accessGrantedOn') + ': '}\n {new Intl.DateTimeFormat(locale, {\n year: 'numeric',\n month: 'long',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric'\n }).format(application.consent.createDate)}\n \n \n }\n
    \n
    \n {(application.consent || application.offlineAccess) &&\n \n
    \n \n \n this.removeConsent(application.clientId)} // required\n />\n \n \n {Msg.localize('infoMessage')}\n
    \n }\n \n
    \n )\n })}\n
    \n
    \n );\n }\n};\n"],"file":"ApplicationsPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js deleted file mode 100644 index aa0e210fd..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -export class AuthenticatorPage extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement("div", null, React.createElement("h2", null, "Hello Authenticator Page")); - } - -} -; -//# sourceMappingURL=AuthenticatorPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map deleted file mode 100644 index 68f08c066..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/authenticator-page/AuthenticatorPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/authenticator-page/AuthenticatorPage.tsx"],"names":["React","AuthenticatorPage","Component","constructor","props","render"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAKA,OAAO,MAAMC,iBAAN,SAAgCD,KAAK,CAACE,SAAtC,CAAwE;AAEpEC,EAAAA,WAAP,CAAmBC,KAAnB,EAAkD;AAC9C,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,WACI,iCACE,2DADF,CADJ;AAKH;;AAZ0E;AAa9E","sourcesContent":["/* \n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n \nexport interface AuthenticatorPageProps {\n}\n \nexport class AuthenticatorPage extends React.Component {\n \n public constructor(props: AuthenticatorPageProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n
    \n

    Hello Authenticator Page

    \n
    \n );\n }\n};"],"file":"AuthenticatorPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js deleted file mode 100644 index 3ef8f1163..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js +++ /dev/null @@ -1,264 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import TimeUtil from "../../util/TimeUtil.js"; -import { Bullseye, DataList, DataListItem, DataListItemRow, DataListCell, DataListItemCells, Grid, GridItem, Stack, StackItem } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { AmazonIcon, ChromeIcon, EdgeIcon, FirefoxIcon, GlobeIcon, InternetExplorerIcon, OperaIcon, SafariIcon, YandexInternationalIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js"; -import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js"; -import { ContentPage } from "../ContentPage.js"; -import { ContentAlert } from "../ContentAlert.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc. - */ -export class DeviceActivityPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "signOutAll", keycloakService => { - this.context.doDelete("/sessions").then(() => { - keycloakService.logout(); - }); - }); - - _defineProperty(this, "signOutSession", (device, session) => { - this.context.doDelete("/sessions/" + session.id).then(() => { - this.fetchDevices(); - ContentAlert.success('signedOutSession', [session.browser, device.os]); - }); - }); - - this.context = context; - this.state = { - devices: [] - }; - this.fetchDevices(); - } - - fetchDevices() { - this.context.doGet("/sessions/devices").then(response => { - console.log({ - response - }); - let devices = this.moveCurrentToTop(response.data); - this.setState({ - devices: devices - }); - }); - } // current device and session should display at the top of their respective lists - - - moveCurrentToTop(devices) { - let currentDevice = devices[0]; - devices.forEach((device, index) => { - if (device.current) { - currentDevice = device; - devices.splice(index, 1); - devices.unshift(device); - } - }); - currentDevice.sessions.forEach((session, index) => { - if (session.current) { - const currentSession = currentDevice.sessions.splice(index, 1); - currentDevice.sessions.unshift(currentSession[0]); - } - }); - return devices; - } - - time(time) { - return TimeUtil.format(time * 1000); - } - - elementId(item, session) { - return `session-${session.id.substring(0, 7)}-${item}`; - } - - findBrowserIcon(session) { - const browserName = session.browser.toLowerCase(); - if (browserName.includes("chrom")) return React.createElement(ChromeIcon, { - id: this.elementId('icon-chrome', session), - size: "lg" - }); // chrome or chromium - - if (browserName.includes("firefox")) return React.createElement(FirefoxIcon, { - id: this.elementId('icon-firefox', session), - size: "lg" - }); - if (browserName.includes("edge")) return React.createElement(EdgeIcon, { - id: this.elementId('icon-edge', session), - size: "lg" - }); - if (browserName.startsWith("ie/")) return React.createElement(InternetExplorerIcon, { - id: this.elementId('icon-ie', session), - size: "lg" - }); - if (browserName.includes("safari")) return React.createElement(SafariIcon, { - id: this.elementId('icon-safari', session), - size: "lg" - }); - if (browserName.includes("opera")) return React.createElement(OperaIcon, { - id: this.elementId('icon-opera', session), - size: "lg" - }); - if (browserName.includes("yandex")) return React.createElement(YandexInternationalIcon, { - id: this.elementId('icon-yandex', session), - size: "lg" - }); - if (browserName.includes("amazon")) return React.createElement(AmazonIcon, { - id: this.elementId('icon-amazon', session), - size: "lg" - }); - return React.createElement(GlobeIcon, { - id: this.elementId('icon-default', session), - size: "lg" - }); - } - - findOS(device) { - if (device.os.toLowerCase().includes('unknown')) return Msg.localize('unknownOperatingSystem'); - return device.os; - } - - findOSVersion(device) { - if (device.osVersion.toLowerCase().includes('unknown')) return ''; - return device.osVersion; - } - - makeClientsString(clients) { - let clientsString = ""; - clients.forEach((client, index) => { - let clientName; - - if (client.hasOwnProperty('clientName') && client.clientName !== undefined && client.clientName !== '') { - clientName = Msg.localize(client.clientName); - } else { - clientName = client.clientId; - } - - clientsString += clientName; - if (clients.length > index + 1) clientsString += ', '; - }); - return clientsString; - } - - isShowSignOutAll(devices) { - if (devices.length === 0) return false; - if (devices.length > 1) return true; - if (devices[0].sessions.length > 1) return true; - return false; - } - - render() { - return React.createElement(ContentPage, { - title: "device-activity", - onRefresh: this.fetchDevices.bind(this) - }, React.createElement(Stack, { - gutter: "md" - }, React.createElement(StackItem, { - isFilled: true - }, React.createElement(DataList, { - "aria-label": Msg.localize('signedInDevices') - }, React.createElement(DataListItem, { - key: "SignedInDevicesHeader", - "aria-labelledby": "signedInDevicesTitle", - isExpanded: false - }, React.createElement(DataListItemRow, null, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "signedInDevicesTitle", - width: 4 - }, React.createElement("div", { - id: "signedInDevicesTitle", - className: "pf-c-content" - }, React.createElement("h2", null, React.createElement(Msg, { - msgKey: "signedInDevices" - })), React.createElement("p", null, React.createElement(Msg, { - msgKey: "signedInDevicesExplanation" - })))), React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(DataListCell, { - key: "signOutAllButton", - width: 1 - }, this.isShowSignOutAll(this.state.devices) && React.createElement(ContinueCancelModal, { - buttonTitle: "signOutAllDevices", - buttonId: "sign-out-all", - modalTitle: "signOutAllDevices", - modalMessage: "signOutAllDevicesWarning", - onContinue: () => this.signOutAll(keycloak) - })))] - }))), React.createElement(DataListItem, { - "aria-labelledby": "sessions" - }, React.createElement(DataListItemRow, null, React.createElement(Grid, { - gutter: "sm" - }, React.createElement(GridItem, { - span: 12 - }), " ", this.state.devices.map((device, deviceIndex) => { - return React.createElement(React.Fragment, null, device.sessions.map((session, sessionIndex) => { - return React.createElement(React.Fragment, { - key: 'device-' + deviceIndex + '-session-' + sessionIndex - }, React.createElement(GridItem, { - md: 3 - }, React.createElement(Stack, null, React.createElement(StackItem, { - isFilled: false - }, React.createElement(Bullseye, null, this.findBrowserIcon(session))), React.createElement(StackItem, { - isFilled: false - }, React.createElement(Bullseye, { - id: this.elementId('ip', session) - }, session.ipAddress)), session.current && React.createElement(StackItem, { - isFilled: false - }, React.createElement(Bullseye, { - id: this.elementId('current-badge', session) - }, React.createElement("strong", { - className: "pf-c-badge pf-m-read" - }, React.createElement(Msg, { - msgKey: "currentSession" - })))))), React.createElement(GridItem, { - md: 9 - }, !session.browser.toLowerCase().includes('unknown') && React.createElement("p", { - id: this.elementId('browser', session) - }, React.createElement("strong", null, session.browser, " / ", this.findOS(device), " ", this.findOSVersion(device))), React.createElement("p", { - id: this.elementId('last-access', session) - }, React.createElement("strong", null, Msg.localize('lastAccessedOn')), " ", this.time(session.lastAccess)), React.createElement("p", { - id: this.elementId('clients', session) - }, React.createElement("strong", null, Msg.localize('clients')), " ", this.makeClientsString(session.clients)), React.createElement("p", { - id: this.elementId('started', session) - }, React.createElement("strong", null, Msg.localize('startedAt')), " ", this.time(session.started)), React.createElement("p", { - id: this.elementId('expires', session) - }, React.createElement("strong", null, Msg.localize('expiresAt')), " ", this.time(session.expires)), !session.current && React.createElement(ContinueCancelModal, { - buttonTitle: "doSignOut", - buttonId: this.elementId('sign-out', session), - modalTitle: "doSignOut", - buttonVariant: "secondary", - modalMessage: "signOutWarning", - onContinue: () => this.signOutSession(device, session) - }))); - })); - }), React.createElement(GridItem, { - span: 12 - }), " "))))))); - } - -} - -_defineProperty(DeviceActivityPage, "contextType", AccountServiceContext); - -; -//# sourceMappingURL=DeviceActivityPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map deleted file mode 100644 index a9adaa22c..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/device-activity-page/DeviceActivityPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/device-activity-page/DeviceActivityPage.tsx"],"names":["React","AccountServiceContext","TimeUtil","Bullseye","DataList","DataListItem","DataListItemRow","DataListCell","DataListItemCells","Grid","GridItem","Stack","StackItem","AmazonIcon","ChromeIcon","EdgeIcon","FirefoxIcon","GlobeIcon","InternetExplorerIcon","OperaIcon","SafariIcon","YandexInternationalIcon","Msg","ContinueCancelModal","KeycloakContext","ContentPage","ContentAlert","DeviceActivityPage","Component","constructor","props","context","keycloakService","doDelete","then","logout","device","session","id","fetchDevices","success","browser","os","state","devices","doGet","response","console","log","moveCurrentToTop","data","setState","currentDevice","forEach","index","current","splice","unshift","sessions","currentSession","time","format","elementId","item","substring","findBrowserIcon","browserName","toLowerCase","includes","startsWith","findOS","localize","findOSVersion","osVersion","makeClientsString","clients","clientsString","client","clientName","hasOwnProperty","undefined","clientId","length","isShowSignOutAll","render","bind","keycloak","signOutAll","map","deviceIndex","sessionIndex","ipAddress","lastAccess","started","expires","signOutSession"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {HttpResponse} from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport TimeUtil from '../../util/TimeUtil';\n\nimport {\n Bullseye,\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListItemCells,\n Grid,\n GridItem,\n Stack,\n StackItem\n} from '@patternfly/react-core';\n\nimport {\n AmazonIcon,\n ChromeIcon,\n EdgeIcon,\n FirefoxIcon,\n GlobeIcon,\n InternetExplorerIcon,\n OperaIcon,\n SafariIcon,\n YandexInternationalIcon,\n} from '@patternfly/react-icons';\n\nimport {Msg} from '../../widgets/Msg';\nimport {ContinueCancelModal} from '../../widgets/ContinueCancelModal';\nimport { KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\n\nimport {ContentPage} from '../ContentPage';\nimport { ContentAlert } from '../ContentAlert';\n\nexport interface DeviceActivityPageProps {\n}\n\nexport interface DeviceActivityPageState {\n devices: Device[];\n}\n\ninterface Device {\n browser: string;\n current: boolean;\n device: string;\n ipAddress: string;\n lastAccess: number;\n mobile: boolean;\n os: string;\n osVersion: string;\n sessions: Session[];\n}\n\ninterface Session {\n browser: string;\n current: boolean;\n clients: Client[];\n expires: number;\n id: string;\n ipAddress: string;\n lastAccess: number;\n started: number;\n}\n\ninterface Client {\n clientId: string;\n clientName: string;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.\n */\nexport class DeviceActivityPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: DeviceActivityPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.state = {\n devices: []\n };\n\n this.fetchDevices();\n }\n\n private signOutAll = (keycloakService: KeycloakService) => {\n this.context!.doDelete(\"/sessions\")\n .then( () => {\n keycloakService.logout();\n });\n }\n\n private signOutSession = (device: Device, session: Session) => {\n this.context!.doDelete(\"/sessions/\" + session.id)\n .then (() => {\n this.fetchDevices();\n ContentAlert.success('signedOutSession', [session.browser, device.os]);\n });\n }\n\n private fetchDevices(): void {\n this.context!.doGet(\"/sessions/devices\")\n .then((response: HttpResponse) => {\n console.log({response});\n\n let devices: Device[] = this.moveCurrentToTop(response.data as Device[]);\n\n this.setState({\n devices: devices\n });\n\n });\n }\n\n // current device and session should display at the top of their respective lists\n private moveCurrentToTop(devices: Device[]): Device[] {\n let currentDevice: Device = devices[0];\n\n devices.forEach((device: Device, index: number) => {\n if (device.current) {\n currentDevice = device;\n devices.splice(index, 1);\n devices.unshift(device);\n }\n });\n\n currentDevice.sessions.forEach((session: Session, index: number) => {\n if (session.current) {\n const currentSession: Session[] = currentDevice.sessions.splice(index, 1);\n currentDevice.sessions.unshift(currentSession[0]);\n }\n });\n\n return devices;\n }\n\n private time(time: number): string {\n return TimeUtil.format(time * 1000);\n }\n\n private elementId(item: string, session: Session): string {\n return `session-${session.id.substring(0,7)}-${item}`;\n }\n\n private findBrowserIcon(session: Session): React.ReactNode {\n const browserName: string = session.browser.toLowerCase();\n if (browserName.includes(\"chrom\")) return (); // chrome or chromium\n if (browserName.includes(\"firefox\")) return ();\n if (browserName.includes(\"edge\")) return ();\n if (browserName.startsWith(\"ie/\")) return ();\n if (browserName.includes(\"safari\")) return ();\n if (browserName.includes(\"opera\")) return ();\n if (browserName.includes(\"yandex\")) return ();\n if (browserName.includes(\"amazon\")) return ();\n\n return ();\n }\n\n private findOS(device: Device): string {\n if (device.os.toLowerCase().includes('unknown')) return Msg.localize('unknownOperatingSystem');\n\n return device.os;\n }\n\n private findOSVersion(device: Device): string {\n if (device.osVersion.toLowerCase().includes('unknown')) return '';\n\n return device.osVersion;\n }\n\n private makeClientsString(clients: Client[]): string {\n let clientsString = \"\";\n clients.forEach( (client: Client, index: number) => {\n let clientName: string;\n if (client.hasOwnProperty('clientName') && (client.clientName !== undefined) && (client.clientName !== '')) {\n clientName = Msg.localize(client.clientName);\n } else {\n clientName = client.clientId;\n }\n\n clientsString += clientName;\n\n if (clients.length > index + 1) clientsString += ', ';\n })\n\n return clientsString;\n }\n\n private isShowSignOutAll(devices: Device[]): boolean {\n if (devices.length === 0) return false;\n if (devices.length > 1) return true;\n if (devices[0].sessions.length > 1) return true;\n\n return false;\n }\n\n public render(): React.ReactNode {\n\n return (\n \n \n \n \n \n \n \n
    \n

    \n

    \n \n

    \n
    \n ,\n \n { (keycloak: KeycloakService) => (\n \n {this.isShowSignOutAll(this.state.devices) &&\n this.signOutAll(keycloak)}\n />\n }\n \n )}\n \n ]}\n />\n
    \n
    \n\n \n \n \n {/* <-- top spacing */}\n {this.state.devices.map((device: Device, deviceIndex: number) => {\n return (\n \n {device.sessions.map((session: Session, sessionIndex: number) => {\n return (\n \n\n \n \n \n {this.findBrowserIcon(session)}\n \n \n {session.ipAddress}\n \n {session.current &&\n \n \n \n }\n \n \n \n {!session.browser.toLowerCase().includes('unknown') &&\n

    {session.browser} / {this.findOS(device)} {this.findOSVersion(device)}

    }\n

    {Msg.localize('lastAccessedOn')} {this.time(session.lastAccess)}

    \n

    {Msg.localize('clients')} {this.makeClientsString(session.clients)}

    \n

    {Msg.localize('startedAt')} {this.time(session.started)}

    \n

    {Msg.localize('expiresAt')} {this.time(session.expires)}

    \n {!session.current &&\n this.signOutSession(device, session)}\n />\n }\n\n
    \n
    \n );\n\n })}\n
    \n )\n })}\n {/* <-- bottom spacing */}\n
    \n
    \n
    \n
    \n
    \n\n
    \n
    \n );\n }\n};"],"file":"DeviceActivityPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js deleted file mode 100644 index b130bad39..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { WarningTriangleIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { Msg } from "../../widgets/Msg.js"; -import EmptyMessageState from "../../widgets/EmptyMessageState.js"; -export class ForbiddenPage extends React.Component { - constructor() { - super({}); - } - - render() { - return React.createElement(EmptyMessageState, { - icon: WarningTriangleIcon, - messageKey: "forbidden" - }, React.createElement(Msg, { - msgKey: "needAccessRights" - })); - } - -} -; -//# sourceMappingURL=ForbiddenPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map deleted file mode 100644 index 98fd32274..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/forbidden-page/ForbiddenPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/forbidden-page/ForbiddenPage.tsx"],"names":["React","WarningTriangleIcon","Msg","EmptyMessageState","ForbiddenPage","Component","constructor","render"],"mappings":"AAAA;;;;;;;;;;;;;;;AAeA,OAAO,KAAKA,KAAZ;AAEA,SAASC,mBAAT;AACA,SAAQC,GAAR;AACA,OAAOC,iBAAP;AAGA,OAAO,MAAMC,aAAN,SAA4BJ,KAAK,CAACK,SAAlC,CAA4C;AAExCC,EAAAA,WAAP,GAAqB;AACjB,UAAM,EAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,iBAAD;AAAmB,MAAA,IAAI,EAAEN,mBAAzB;AAA8C,MAAA,UAAU,EAAC;AAAzD,OACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MADJ,CADJ;AAKH;;AAZ8C;AAalD","sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\n\nexport class ForbiddenPage extends React.Component {\n\n public constructor() {\n super({});\n }\n\n public render(): React.ReactNode {\n return (\n \n \n \n );\n }\n};"],"file":"ForbiddenPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js deleted file mode 100644 index 95f9f325d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js +++ /dev/null @@ -1,272 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js"; -import { Badge, Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItemRow, Stack, StackItem, Title, TitleLevel, DataListItem } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { BitbucketIcon, CubeIcon, FacebookIcon, GithubIcon, GitlabIcon, GoogleIcon, InstagramIcon, LinkIcon, LinkedinIcon, MicrosoftIcon, OpenshiftIcon, PaypalIcon, StackOverflowIcon, TwitterIcon, UnlinkIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContentPage } from "../ContentPage.js"; -import { createRedirect } from "../../util/RedirectUri.js"; - -/** - * @author Stan Silvert - */ -class LinkedAccountsPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - this.context = context; - this.state = { - linkedAccounts: [], - unLinkedAccounts: [] - }; - this.getLinkedAccounts(); - } - - getLinkedAccounts() { - this.context.doGet("/linked-accounts").then(response => { - console.log({ - response - }); - const linkedAccounts = response.data.filter(account => account.connected); - const unLinkedAccounts = response.data.filter(account => !account.connected); - this.setState({ - linkedAccounts: linkedAccounts, - unLinkedAccounts: unLinkedAccounts - }); - }); - } - - unLinkAccount(account) { - const url = '/linked-accounts/' + account.providerName; - this.context.doDelete(url).then(response => { - console.log({ - response - }); - this.getLinkedAccounts(); - }); - } - - linkAccount(account) { - const url = '/linked-accounts/' + account.providerName; - const redirectUri = createRedirect(this.props.location.pathname); - this.context.doGet(url, { - params: { - providerId: account.providerName, - redirectUri - } - }).then(response => { - console.log({ - response - }); - window.location.href = response.data.accountLinkUri; - }); - } - - render() { - return React.createElement(ContentPage, { - title: Msg.localize('linkedAccountsTitle'), - introMessage: Msg.localize('linkedAccountsIntroMessage') - }, React.createElement(Stack, { - gutter: "md" - }, React.createElement(StackItem, { - isFilled: true - }, React.createElement(Title, { - headingLevel: TitleLevel.h2, - size: "2xl" - }, React.createElement(Msg, { - msgKey: "linkedLoginProviders" - })), React.createElement(DataList, { - id: "linked-idps", - "aria-label": "foo" - }, this.makeRows(this.state.linkedAccounts, true))), React.createElement(StackItem, { - isFilled: true - }), React.createElement(StackItem, { - isFilled: true - }, React.createElement(Title, { - headingLevel: TitleLevel.h2, - size: "2xl" - }, React.createElement(Msg, { - msgKey: "unlinkedLoginProviders" - })), React.createElement(DataList, { - id: "unlinked-idps", - "aria-label": "foo" - }, this.makeRows(this.state.unLinkedAccounts, false))))); - } - - emptyRow(isLinked) { - let isEmptyMessage = ''; - - if (isLinked) { - isEmptyMessage = Msg.localize('linkedEmpty'); - } else { - isEmptyMessage = Msg.localize('unlinkedEmpty'); - } - - return React.createElement(DataListItem, { - key: "emptyItem", - "aria-labelledby": "empty-item" - }, React.createElement(DataListItemRow, { - key: "emptyRow" - }, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "empty" - }, React.createElement("strong", null, isEmptyMessage))] - }))); - } - - makeRows(accounts, isLinked) { - if (accounts.length === 0) { - return this.emptyRow(isLinked); - } - - return React.createElement(React.Fragment, null, " ", accounts.map(account => React.createElement(DataListItem, { - id: `${account.providerAlias}-idp`, - key: account.providerName, - "aria-labelledby": "simple-item1" - }, React.createElement(DataListItemRow, { - key: account.providerName - }, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "idp" - }, React.createElement(Stack, null, React.createElement(StackItem, { - isFilled: true - }, this.findIcon(account)), React.createElement(StackItem, { - id: `${account.providerAlias}-idp-name`, - isFilled: true - }, React.createElement("h2", null, React.createElement("strong", null, account.displayName))))), React.createElement(DataListCell, { - key: "badge" - }, React.createElement(Stack, null, React.createElement(StackItem, { - isFilled: true - }), React.createElement(StackItem, { - id: `${account.providerAlias}-idp-badge`, - isFilled: true - }, this.badge(account)))), React.createElement(DataListCell, { - key: "username" - }, React.createElement(Stack, null, React.createElement(StackItem, { - isFilled: true - }), React.createElement(StackItem, { - id: `${account.providerAlias}-idp-username`, - isFilled: true - }, account.linkedUsername)))] - }), React.createElement(DataListAction, { - "aria-labelledby": "foo", - "aria-label": "foo action", - id: "setPasswordAction" - }, isLinked && React.createElement(Button, { - id: `${account.providerAlias}-idp-unlink`, - variant: "link", - onClick: () => this.unLinkAccount(account) - }, React.createElement(UnlinkIcon, { - size: "sm" - }), " ", React.createElement(Msg, { - msgKey: "unLink" - })), !isLinked && React.createElement(Button, { - id: `${account.providerAlias}-idp-link`, - variant: "link", - onClick: () => this.linkAccount(account) - }, React.createElement(LinkIcon, { - size: "sm" - }), " ", React.createElement(Msg, { - msgKey: "link" - })))))), " "); - } - - badge(account) { - if (account.social) { - return React.createElement(Badge, null, React.createElement(Msg, { - msgKey: "socialLogin" - })); - } - - return React.createElement(Badge, { - style: { - backgroundColor: "green" - } - }, React.createElement(Msg, { - msgKey: "systemDefined" - })); - } - - findIcon(account) { - const socialIconId = `${account.providerAlias}-idp-icon-social`; - if (account.providerName.toLowerCase().includes('github')) return React.createElement(GithubIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('linkedin')) return React.createElement(LinkedinIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('facebook')) return React.createElement(FacebookIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('google')) return React.createElement(GoogleIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('instagram')) return React.createElement(InstagramIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('microsoft')) return React.createElement(MicrosoftIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('bitbucket')) return React.createElement(BitbucketIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('twitter')) return React.createElement(TwitterIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('openshift')) return React.createElement(OpenshiftIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('gitlab')) return React.createElement(GitlabIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('paypal')) return React.createElement(PaypalIcon, { - id: socialIconId, - size: "xl" - }); - if (account.providerName.toLowerCase().includes('stackoverflow')) return React.createElement(StackOverflowIcon, { - id: socialIconId, - size: "xl" - }); - return React.createElement(CubeIcon, { - id: `${account.providerAlias}-idp-icon-default`, - size: "xl" - }); - } - -} - -_defineProperty(LinkedAccountsPage, "contextType", AccountServiceContext); - -; -const LinkedAccountsPagewithRouter = withRouter(LinkedAccountsPage); -export { LinkedAccountsPagewithRouter as LinkedAccountsPage }; -//# sourceMappingURL=LinkedAccountsPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map deleted file mode 100644 index 541517908..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/linked-accounts-page/LinkedAccountsPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/linked-accounts-page/LinkedAccountsPage.tsx"],"names":["React","withRouter","Badge","Button","DataList","DataListAction","DataListItemCells","DataListCell","DataListItemRow","Stack","StackItem","Title","TitleLevel","DataListItem","BitbucketIcon","CubeIcon","FacebookIcon","GithubIcon","GitlabIcon","GoogleIcon","InstagramIcon","LinkIcon","LinkedinIcon","MicrosoftIcon","OpenshiftIcon","PaypalIcon","StackOverflowIcon","TwitterIcon","UnlinkIcon","AccountServiceContext","Msg","ContentPage","createRedirect","LinkedAccountsPage","Component","constructor","props","context","state","linkedAccounts","unLinkedAccounts","getLinkedAccounts","doGet","then","response","console","log","data","filter","account","connected","setState","unLinkAccount","url","providerName","doDelete","linkAccount","redirectUri","location","pathname","params","providerId","window","href","accountLinkUri","render","localize","h2","makeRows","emptyRow","isLinked","isEmptyMessage","accounts","length","map","providerAlias","findIcon","displayName","badge","linkedUsername","social","backgroundColor","socialIconId","toLowerCase","includes","LinkedAccountsPagewithRouter"],"mappings":"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","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\n\nimport {\n Badge,\n Button,\n DataList,\n DataListAction,\n DataListItemCells,\n DataListCell,\n DataListItemRow,\n Stack,\n StackItem,\n Title,\n TitleLevel,\n DataListItem,\n} from '@patternfly/react-core';\n\nimport {\n BitbucketIcon,\n CubeIcon,\n FacebookIcon,\n GithubIcon,\n GitlabIcon,\n GoogleIcon,\n InstagramIcon,\n LinkIcon,\n LinkedinIcon,\n MicrosoftIcon,\n OpenshiftIcon,\n PaypalIcon,\n StackOverflowIcon,\n TwitterIcon,\n UnlinkIcon\n} from '@patternfly/react-icons';\n\nimport {HttpResponse} from '../../account-service/account.service';\nimport {AccountServiceContext} from '../../account-service/AccountServiceContext';\nimport {Msg} from '../../widgets/Msg';\nimport {ContentPage} from '../ContentPage';\nimport {createRedirect} from '../../util/RedirectUri';\n\ninterface LinkedAccount {\n connected: boolean;\n social: boolean;\n providerAlias: string;\n providerName: string;\n displayName: string;\n linkedUsername: string;\n}\n\ninterface LinkedAccountsPageProps extends RouteComponentProps {\n}\n\ninterface LinkedAccountsPageState {\n linkedAccounts: LinkedAccount[];\n unLinkedAccounts: LinkedAccount[];\n}\n\n/**\n * @author Stan Silvert\n */\nclass LinkedAccountsPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: LinkedAccountsPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.state = {\n linkedAccounts: [],\n unLinkedAccounts: []\n }\n\n this.getLinkedAccounts();\n }\n\n private getLinkedAccounts(): void {\n this.context!.doGet(\"/linked-accounts\")\n .then((response: HttpResponse) => {\n console.log({response});\n const linkedAccounts = response.data!.filter((account) => account.connected);\n const unLinkedAccounts = response.data!.filter((account) => !account.connected);\n this.setState({linkedAccounts: linkedAccounts, unLinkedAccounts: unLinkedAccounts});\n });\n }\n\n private unLinkAccount(account: LinkedAccount): void {\n const url = '/linked-accounts/' + account.providerName;\n\n this.context!.doDelete(url)\n .then((response: HttpResponse) => {\n console.log({response});\n this.getLinkedAccounts();\n });\n }\n\n private linkAccount(account: LinkedAccount): void {\n const url = '/linked-accounts/' + account.providerName;\n\n const redirectUri: string = createRedirect(this.props.location.pathname);\n\n this.context!.doGet<{accountLinkUri: string}>(url, { params: {providerId: account.providerName, redirectUri}})\n .then((response: HttpResponse<{accountLinkUri: string}>) => {\n console.log({response});\n window.location.href = response.data!.accountLinkUri;\n });\n }\n\n public render(): React.ReactNode {\n\n return (\n \n \n \n \n <Msg msgKey='linkedLoginProviders'/>\n \n \n {this.makeRows(this.state.linkedAccounts, true)}\n \n \n \n \n \n <Msg msgKey='unlinkedLoginProviders'/>\n \n \n {this.makeRows(this.state.unLinkedAccounts, false)}\n \n \n \n \n );\n }\n\n private emptyRow(isLinked: boolean): React.ReactNode {\n let isEmptyMessage = '';\n if (isLinked) {\n isEmptyMessage = Msg.localize('linkedEmpty');\n } else {\n isEmptyMessage = Msg.localize('unlinkedEmpty');\n }\n\n return (\n \n \n {isEmptyMessage}\n ]}/>\n \n \n )\n }\n\n private makeRows(accounts: LinkedAccount[], isLinked: boolean): React.ReactNode {\n if (accounts.length === 0) {\n return this.emptyRow(isLinked);\n }\n\n return (\n <> {\n\n accounts.map( (account: LinkedAccount) => (\n \n \n {this.findIcon(account)}

    {account.displayName}

    ,\n {this.badge(account)},\n {account.linkedUsername},\n ]}/>\n \n {isLinked && }\n {!isLinked && }\n \n
    \n
    \n ))\n\n } \n\n )\n }\n\n private badge(account: LinkedAccount): React.ReactNode {\n if (account.social) {\n return ();\n }\n\n return ();\n }\n\n private findIcon(account: LinkedAccount): React.ReactNode {\n const socialIconId = `${account.providerAlias}-idp-icon-social`;\n if (account.providerName.toLowerCase().includes('github')) return ();\n if (account.providerName.toLowerCase().includes('linkedin')) return ();\n if (account.providerName.toLowerCase().includes('facebook')) return ();\n if (account.providerName.toLowerCase().includes('google')) return ();\n if (account.providerName.toLowerCase().includes('instagram')) return ();\n if (account.providerName.toLowerCase().includes('microsoft')) return ();\n if (account.providerName.toLowerCase().includes('bitbucket')) return ();\n if (account.providerName.toLowerCase().includes('twitter')) return ();\n if (account.providerName.toLowerCase().includes('openshift')) return ();\n if (account.providerName.toLowerCase().includes('gitlab')) return ();\n if (account.providerName.toLowerCase().includes('paypal')) return ();\n if (account.providerName.toLowerCase().includes('stackoverflow')) return ();\n\n return ();\n }\n\n};\n\nconst LinkedAccountsPagewithRouter = withRouter(LinkedAccountsPage);\nexport {LinkedAccountsPagewithRouter as LinkedAccountsPage};"],"file":"LinkedAccountsPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js deleted file mode 100644 index ef2c977ba..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js +++ /dev/null @@ -1,40 +0,0 @@ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { Msg } from "../../widgets/Msg.js"; -export class AbstractResourcesTable extends React.Component { - hasPermissions(row) { - return this.state.permissions.has(row) && this.state.permissions.get(row).length > 0; - } - - firstUser(row) { - if (!this.hasPermissions(row)) return 'ERROR!!!!'; // should never happen - - return this.state.permissions.get(row)[0].username; - } - - numOthers(row) { - if (!this.hasPermissions(row)) return -1; // should never happen - - return this.state.permissions.get(row).length - 1; - } - - sharedWithUsersMessage(row) { - if (!this.hasPermissions(row)) return React.createElement(React.Fragment, null, React.createElement(Msg, { - msgKey: "resourceNotShared" - })); - return React.createElement(React.Fragment, null, React.createElement(Msg, { - msgKey: "resourceSharedWith" - }, React.createElement("strong", null, this.firstUser(row))), this.numOthers(row) > 0 && React.createElement(Msg, { - msgKey: "and" - }, React.createElement("strong", null, this.numOthers(row))), "."); - } - - getClientName(client) { - if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') { - return Msg.localize(client.name); - } else { - return client.clientId; - } - } - -} -//# sourceMappingURL=AbstractResourceTable.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map deleted file mode 100644 index 5a166d412..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/AbstractResourceTable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/AbstractResourceTable.tsx"],"names":["React","Msg","AbstractResourcesTable","Component","hasPermissions","row","state","permissions","has","get","length","firstUser","username","numOthers","sharedWithUsersMessage","getClientName","client","hasOwnProperty","name","localize","clientId"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAEA,SAASC,GAAT;AAUA,OAAO,MAAeC,sBAAf,SAA6EF,KAAK,CAACG,SAAnF,CAAqH;AAEhHC,EAAAA,cAAV,CAAyBC,GAAzB,EAA+C;AAC7C,WAAQ,KAAKC,KAAL,CAAWC,WAAX,CAAuBC,GAAvB,CAA2BH,GAA3B,CAAD,IAAsC,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiCK,MAAjC,GAA0C,CAAvF;AACD;;AAEOC,EAAAA,SAAR,CAAkBN,GAAlB,EAAuC;AACrC,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,OAAO,WAAP,CADM,CACc;;AAEnD,WAAO,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiC,CAAjC,EAAoCO,QAA3C;AACD;;AAESC,EAAAA,SAAV,CAAoBR,GAApB,EAAyC;AACvC,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,OAAO,CAAC,CAAR,CADQ,CACG;;AAE1C,WAAO,KAAKC,KAAL,CAAWC,WAAX,CAAuBE,GAAvB,CAA2BJ,GAA3B,EAAiCK,MAAjC,GAA0C,CAAjD;AACD;;AAEMI,EAAAA,sBAAP,CAA8BT,GAA9B,EAA4D;AAC1D,QAAI,CAAC,KAAKD,cAAL,CAAoBC,GAApB,CAAL,EAA+B,OAAQ,oBAAC,KAAD,CAAO,QAAP,QAAgB,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MAAhB,CAAR;AAE/B,WACE,oBAAC,KAAD,CAAO,QAAP,QACE,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,OACE,oCAAS,KAAKM,SAAL,CAAeN,GAAf,CAAT,CADF,CADF,EAIG,KAAKQ,SAAL,CAAeR,GAAf,IAAsB,CAAtB,IAA2B,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,OAC1B,oCAAS,KAAKQ,SAAL,CAAeR,GAAf,CAAT,CAD0B,CAJ9B,MADF;AAUD;;AAESU,EAAAA,aAAV,CAAwBC,MAAxB,EAAgD;AAC9C,QAAIA,MAAM,CAACC,cAAP,CAAsB,MAAtB,KAAiCD,MAAM,CAACE,IAAP,KAAgB,IAAjD,IAAyDF,MAAM,CAACE,IAAP,KAAgB,EAA7E,EAAiF;AAC/E,aAAOjB,GAAG,CAACkB,QAAJ,CAAaH,MAAM,CAACE,IAApB,CAAP;AACD,KAFD,MAEO;AACL,aAAOF,MAAM,CAACI,QAAd;AACD;AACF;;AAvCyH","sourcesContent":["import * as React from 'react';\nimport { Permission, PaginatedResources, Client } from './resource-model';\nimport { Msg } from '../../widgets/Msg';\n\nexport interface ResourcesTableProps {\n resources: PaginatedResources;\n}\n\nexport interface ResourcesTableState {\n permissions: Map;\n}\n\nexport abstract class AbstractResourcesTable extends React.Component {\n\n protected hasPermissions(row: number): boolean {\n return (this.state.permissions.has(row)) && (this.state.permissions.get(row)!.length > 0);\n }\n\n private firstUser(row: number): string {\n if (!this.hasPermissions(row)) return 'ERROR!!!!'; // should never happen\n\n return this.state.permissions.get(row)![0].username;\n }\n\n protected numOthers(row: number): number {\n if (!this.hasPermissions(row)) return -1; // should never happen\n\n return this.state.permissions.get(row)!.length - 1;\n }\n\n public sharedWithUsersMessage(row: number): React.ReactNode {\n if (!this.hasPermissions(row)) return ();\n\n return (\n \n \n {this.firstUser(row)}\n \n {this.numOthers(row) > 0 && \n {this.numOthers(row)}\n }.\n \n );\n }\n\n protected getClientName(client: Client): string {\n if (client.hasOwnProperty('name') && client.name !== null && client.name !== '') {\n return Msg.localize(client.name!);\n } else {\n return client.clientId;\n }\n }\n}\n"],"file":"AbstractResourceTable.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js deleted file mode 100644 index f9a792712..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js +++ /dev/null @@ -1,120 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { Button, Modal, Form, FormGroup, TextInput, InputGroup } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { OkIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { Scope } from "./resource-model.js"; -import { Msg } from "../../widgets/Msg.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { ContentAlert } from "../ContentAlert.js"; -import { PermissionSelect } from "./PermissionSelect.js"; -export class EditTheResource extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "handleToggleDialog", () => { - if (this.state.isOpen) { - this.setState({ - isOpen: false - }); - this.props.onClose(); - } else { - this.clearState(); - this.setState({ - isOpen: true - }); - } - }); - - _defineProperty(this, "updateChanged", row => { - const changed = this.state.changed; - changed[row] = !changed[row]; - this.setState({ - changed - }); - }); - - this.context = context; - this.state = { - changed: [], - isOpen: false - }; - } - - clearState() { - this.setState({}); - } - - async savePermission(permission) { - await this.context.doPut(`/resources/${this.props.resource._id}/permissions`, [permission]); - ContentAlert.success(Msg.localize('updateSuccess')); - } - - render() { - return React.createElement(React.Fragment, null, this.props.children(this.handleToggleDialog), React.createElement(Modal, { - title: 'Edit the resource - ' + this.props.resource.name, - isLarge: true, - isOpen: this.state.isOpen, - onClose: this.handleToggleDialog, - actions: [React.createElement(Button, { - key: "done", - variant: "link", - id: "done", - onClick: this.handleToggleDialog - }, React.createElement(Msg, { - msgKey: "done" - }))] - }, React.createElement(Form, { - isHorizontal: true - }, this.props.permissions.map((p, row) => React.createElement(React.Fragment, null, React.createElement(FormGroup, { - fieldId: `username-${row}`, - label: Msg.localize('User') - }, React.createElement(TextInput, { - id: `username-${row}`, - type: "text", - value: p.username, - isDisabled: true - })), React.createElement(FormGroup, { - fieldId: `permissions-${row}`, - label: Msg.localize('permissions'), - isRequired: true - }, React.createElement(InputGroup, null, React.createElement(PermissionSelect, { - scopes: this.props.resource.scopes, - selected: p.scopes.map(s => new Scope(s)), - direction: row === this.props.permissions.length - 1 ? "up" : "down", - onSelect: selection => { - p.scopes = selection.map(s => s.name); - this.updateChanged(row); - } - }), React.createElement(Button, { - id: `save-${row}`, - isDisabled: !this.state.changed[row], - onClick: () => this.savePermission(p) - }, React.createElement(OkIcon, null)))), React.createElement("hr", null)))))); - } - -} - -_defineProperty(EditTheResource, "defaultProps", { - permissions: [] -}); - -_defineProperty(EditTheResource, "contextType", AccountServiceContext); -//# sourceMappingURL=EditTheResource.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map deleted file mode 100644 index 91308cf6b..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/EditTheResource.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/EditTheResource.tsx"],"names":["React","Button","Modal","Form","FormGroup","TextInput","InputGroup","OkIcon","Scope","Msg","AccountServiceContext","ContentAlert","PermissionSelect","EditTheResource","Component","constructor","props","context","state","isOpen","setState","onClose","clearState","row","changed","savePermission","permission","doPut","resource","_id","success","localize","render","children","handleToggleDialog","name","permissions","map","p","username","scopes","s","length","selection","updateChanged"],"mappings":"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","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {\n Button,\n Modal,\n Form,\n FormGroup,\n TextInput,\n InputGroup\n} from '@patternfly/react-core';\nimport { OkIcon } from '@patternfly/react-icons';\n\nimport { Resource, Permission, Scope } from './resource-model';\nimport { Msg } from '../../widgets/Msg';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { ContentAlert } from '../ContentAlert';\nimport { PermissionSelect } from './PermissionSelect';\n\ninterface EditTheResourceProps {\n resource: Resource;\n permissions: Permission[];\n onClose: () => void;\n children: (toggle: () => void) => void;\n}\n\ninterface EditTheResourceState {\n changed: boolean[];\n isOpen: boolean;\n}\n\nexport class EditTheResource extends React.Component {\n protected static defaultProps = { permissions: [] };\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: EditTheResourceProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.state = {\n changed: [],\n isOpen: false,\n };\n }\n\n private clearState(): void {\n this.setState({});\n }\n\n private handleToggleDialog = () => {\n if (this.state.isOpen) {\n this.setState({ isOpen: false });\n this.props.onClose();\n } else {\n this.clearState();\n this.setState({ isOpen: true });\n }\n };\n\n private updateChanged = (row: number) => {\n const changed = this.state.changed;\n changed[row] = !changed[row];\n this.setState({ changed });\n }\n\n async savePermission(permission: Permission): Promise {\n await this.context!.doPut(`/resources/${this.props.resource._id}/permissions`, [permission]);\n ContentAlert.success(Msg.localize('updateSuccess'));\n }\n\n public render(): React.ReactNode {\n return (\n \n {this.props.children(this.handleToggleDialog)}\n\n \n \n ,\n ]}\n >\n
    \n {this.props.permissions.map((p, row) => (\n \n \n \n\n \n \n \n new Scope(s))}\n direction={row === this.props.permissions.length - 1 ? \"up\" : \"down\"}\n onSelect={selection => {\n p.scopes = selection.map(s => s.name);\n this.updateChanged(row);\n }}\n />\n this.savePermission(p)}\n >\n \n \n \n \n
    \n
    \n ))}\n
    \n \n
    \n );\n }\n}"],"file":"EditTheResource.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js deleted file mode 100644 index 73884f6ee..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js +++ /dev/null @@ -1,282 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import parse from "../../util/ParseLink.js"; -import { Button, Level, LevelItem, Stack, StackItem, Tab, Tabs, TextInput } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Scope } from "./resource-model.js"; -import { ResourcesTable } from "./ResourcesTable.js"; -import { ContentPage } from "../ContentPage.js"; -import { Msg } from "../../widgets/Msg.js"; -import { SharedResourcesTable } from "./SharedResourcesTable.js"; -const MY_RESOURCES_TAB = 0; -const SHARED_WITH_ME_TAB = 1; -export class MyResourcesPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "first", 0); - - _defineProperty(this, "max", 5); - - _defineProperty(this, "makeScopeObj", scope => { - return new Scope(scope.name, scope.displayName); - }); - - _defineProperty(this, "fetchPermissionRequests", () => { - this.state.myResources.data.forEach(resource => { - this.fetchShareRequests(resource); - }); - }); - - _defineProperty(this, "fetchPending", async () => { - const response = await this.context.doGet(`/resources/pending-requests`); - const resources = response.data || []; - resources.forEach(pendingRequest => { - this.state.sharedWithMe.data.forEach(resource => { - if (resource._id === pendingRequest._id) { - resource.shareRequests = [{ - username: 'me', - scopes: pendingRequest.scopes - }]; - this.forceUpdate(); - } - }); - }); - }); - - _defineProperty(this, "handleFilterRequest", value => { - this.setState({ - nameFilter: value - }); - this.fetchFilteredResources({ - name: value - }); - }); - - _defineProperty(this, "handleFirstPageClick", () => { - this.fetchInitialResources(); - }); - - _defineProperty(this, "handleNextClick", () => { - if (this.isSharedWithMeTab()) { - this.fetchResources(this.state.sharedWithMe.nextUrl); - } else { - this.fetchResources(this.state.myResources.nextUrl); - } - }); - - _defineProperty(this, "handlePreviousClick", () => { - if (this.isSharedWithMeTab()) { - this.fetchResources(this.state.sharedWithMe.prevUrl); - } else { - this.fetchResources(this.state.myResources.prevUrl); - } - }); - - _defineProperty(this, "handleTabClick", (event, tabIndex) => { - if (this.state.activeTabKey === tabIndex) return; - this.setState({ - nameFilter: '', - activeTabKey: tabIndex - }, () => { - this.fetchInitialResources(); - }); - }); - - this.context = context; - this.state = { - activeTabKey: MY_RESOURCES_TAB, - nameFilter: '', - isModalOpen: false, - myResources: { - nextUrl: '', - prevUrl: '', - data: [] - }, - sharedWithMe: { - nextUrl: '', - prevUrl: '', - data: [] - } - }; - this.fetchInitialResources(); - } - - isSharedWithMeTab() { - return this.state.activeTabKey === SHARED_WITH_ME_TAB; - } - - hasNext() { - if (this.isSharedWithMeTab()) { - return this.state.sharedWithMe.nextUrl !== null && this.state.sharedWithMe.nextUrl !== ''; - } else { - return this.state.myResources.nextUrl !== null && this.state.myResources.nextUrl !== ''; - } - } - - hasPrevious() { - if (this.isSharedWithMeTab()) { - return this.state.sharedWithMe.prevUrl !== null && this.state.sharedWithMe.prevUrl !== ''; - } else { - return this.state.myResources.prevUrl !== null && this.state.myResources.prevUrl !== ''; - } - } - - fetchInitialResources() { - if (this.isSharedWithMeTab()) { - this.fetchResources("/resources/shared-with-me"); - } else { - this.fetchResources("/resources", { - first: this.first, - max: this.max - }); - } - } - - fetchFilteredResources(params) { - if (this.isSharedWithMeTab()) { - this.fetchResources("/resources/shared-with-me", params); - } else { - this.fetchResources("/resources", { ...params, - first: this.first, - max: this.max - }); - } - } - - fetchResources(url, extraParams) { - this.context.doGet(url, { - params: extraParams - }).then(response => { - const resources = response.data || []; - resources.forEach(resource => resource.shareRequests = []); // serialize the Scope objects from JSON so that toString() will work. - - resources.forEach(resource => resource.scopes = resource.scopes.map(this.makeScopeObj)); - - if (this.isSharedWithMeTab()) { - this.setState({ - sharedWithMe: this.parseResourceResponse(response) - }, this.fetchPending); - } else { - this.setState({ - myResources: this.parseResourceResponse(response) - }, this.fetchPermissionRequests); - } - }); - } - - fetchShareRequests(resource) { - this.context.doGet('/resources/' + resource._id + '/permissions/requests').then(response => { - resource.shareRequests = response.data || []; - - if (resource.shareRequests.length > 0) { - this.forceUpdate(); - } - }); - } - - parseResourceResponse(response) { - const links = response.headers.get('link') || undefined; - const parsed = parse(links); - let next = ''; - let prev = ''; - - if (parsed !== null) { - if (parsed.next) next = parsed.next; - if (parsed.prev) prev = parsed.prev; - } - - const resources = response.data || []; - return { - nextUrl: next, - prevUrl: prev, - data: resources - }; - } - - makeTab(eventKey, title, resources, sharedResourcesTab) { - return React.createElement(Tab, { - id: title, - eventKey: eventKey, - title: Msg.localize(title) - }, React.createElement(Stack, { - gutter: "md" - }, React.createElement(StackItem, { - isFilled: true - }, React.createElement("span", null)), React.createElement(StackItem, { - isFilled: true - }, React.createElement(Level, { - gutter: "md" - }, React.createElement(LevelItem, null, React.createElement(TextInput, { - value: this.state.nameFilter, - onChange: this.handleFilterRequest, - id: 'filter-' + title, - type: "text", - placeholder: Msg.localize('filterByName') - })))), React.createElement(StackItem, { - isFilled: true - }, !sharedResourcesTab && React.createElement(ResourcesTable, { - resources: resources - }), sharedResourcesTab && React.createElement(SharedResourcesTable, { - resources: resources - })))); - } - - render() { - return React.createElement(ContentPage, { - title: "resources", - onRefresh: this.fetchInitialResources.bind(this) - }, React.createElement(Tabs, { - isFilled: true, - activeKey: this.state.activeTabKey, - onSelect: this.handleTabClick - }, this.makeTab(0, 'myResources', this.state.myResources, false), this.makeTab(1, 'sharedwithMe', this.state.sharedWithMe, true)), React.createElement(Level, { - gutter: "md" - }, React.createElement(LevelItem, null, this.hasPrevious() && React.createElement(Button, { - onClick: this.handlePreviousClick - }, "<", React.createElement(Msg, { - msgKey: "previousPage" - }))), React.createElement(LevelItem, null, this.hasPrevious() && React.createElement(Button, { - onClick: this.handleFirstPageClick - }, React.createElement(Msg, { - msgKey: "firstPage" - }))), React.createElement(LevelItem, null, this.hasNext() && React.createElement(Button, { - onClick: this.handleNextClick - }, React.createElement(Msg, { - msgKey: "nextPage" - }), ">")))); - } - - clearNextPrev() { - const newMyResources = this.state.myResources; - newMyResources.nextUrl = ''; - newMyResources.prevUrl = ''; - this.setState({ - myResources: newMyResources - }); - } - -} - -_defineProperty(MyResourcesPage, "contextType", AccountServiceContext); - -; -//# sourceMappingURL=MyResourcesPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map deleted file mode 100644 index e20d08306..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/MyResourcesPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/MyResourcesPage.tsx"],"names":["React","parse","Button","Level","LevelItem","Stack","StackItem","Tab","Tabs","TextInput","AccountServiceContext","Scope","ResourcesTable","ContentPage","Msg","SharedResourcesTable","MY_RESOURCES_TAB","SHARED_WITH_ME_TAB","MyResourcesPage","Component","constructor","props","context","scope","name","displayName","state","myResources","data","forEach","resource","fetchShareRequests","response","doGet","resources","pendingRequest","sharedWithMe","_id","shareRequests","username","scopes","forceUpdate","value","setState","nameFilter","fetchFilteredResources","fetchInitialResources","isSharedWithMeTab","fetchResources","nextUrl","prevUrl","event","tabIndex","activeTabKey","isModalOpen","hasNext","hasPrevious","first","max","params","url","extraParams","then","map","makeScopeObj","parseResourceResponse","fetchPending","fetchPermissionRequests","length","links","headers","get","undefined","parsed","next","prev","makeTab","eventKey","title","sharedResourcesTab","localize","handleFilterRequest","render","bind","handleTabClick","handlePreviousClick","handleFirstPageClick","handleNextClick","clearNextPrev","newMyResources"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport parse from '../../util/ParseLink';\n\nimport { Button, Level, LevelItem, Stack, StackItem, Tab, Tabs, TextInput } from '@patternfly/react-core';\n\nimport {HttpResponse} from '../../account-service/account.service';\nimport {AccountServiceContext} from '../../account-service/AccountServiceContext';\n\nimport { PaginatedResources, Resource, Scope, Permission } from './resource-model';\nimport {ResourcesTable} from './ResourcesTable';\nimport {ContentPage} from '../ContentPage';\nimport {Msg} from '../../widgets/Msg';\nimport { SharedResourcesTable } from './SharedResourcesTable';\n\nexport interface MyResourcesPageProps {\n}\n\nexport interface MyResourcesPageState {\n activeTabKey: number;\n isModalOpen: boolean;\n nameFilter: string;\n myResources: PaginatedResources;\n sharedWithMe: PaginatedResources;\n}\n\nconst MY_RESOURCES_TAB = 0;\nconst SHARED_WITH_ME_TAB = 1;\n\nexport class MyResourcesPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n private first = 0;\n private max = 5;\n\n public constructor(props: MyResourcesPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.state = {\n activeTabKey: MY_RESOURCES_TAB,\n nameFilter: '',\n isModalOpen: false,\n myResources: {nextUrl: '', prevUrl: '', data: []},\n sharedWithMe: {nextUrl: '', prevUrl: '', data: []}\n };\n\n this.fetchInitialResources();\n }\n\n private isSharedWithMeTab(): boolean {\n return this.state.activeTabKey === SHARED_WITH_ME_TAB;\n }\n\n private hasNext(): boolean {\n if (this.isSharedWithMeTab()) {\n return (this.state.sharedWithMe.nextUrl !== null) && (this.state.sharedWithMe.nextUrl !== '');\n } else {\n return (this.state.myResources.nextUrl !== null) && (this.state.myResources.nextUrl !== '');\n }\n }\n\n private hasPrevious(): boolean {\n if (this.isSharedWithMeTab()) {\n return (this.state.sharedWithMe.prevUrl !== null) && (this.state.sharedWithMe.prevUrl !== '');\n } else {\n return (this.state.myResources.prevUrl !== null) && (this.state.myResources.prevUrl !== '');\n }\n }\n\n private fetchInitialResources(): void {\n if (this.isSharedWithMeTab()) {\n this.fetchResources(\"/resources/shared-with-me\");\n } else {\n this.fetchResources(\"/resources\", {first: this.first, max: this.max});\n }\n }\n\n private fetchFilteredResources(params: Record): void {\n if (this.isSharedWithMeTab()) {\n this.fetchResources(\"/resources/shared-with-me\", params);\n } else {\n this.fetchResources(\"/resources\", {...params, first: this.first, max: this.max});\n }\n }\n\n private fetchResources(url: string, extraParams?: Record): void {\n this.context!.doGet(url, {params: extraParams})\n .then((response: HttpResponse) => {\n const resources: Resource[] = response.data || [];\n resources.forEach((resource: Resource) => resource.shareRequests = []);\n\n // serialize the Scope objects from JSON so that toString() will work.\n resources.forEach((resource: Resource) => resource.scopes = resource.scopes.map(this.makeScopeObj));\n\n if (this.isSharedWithMeTab()) {\n this.setState({sharedWithMe: this.parseResourceResponse(response)}, this.fetchPending);\n } else {\n this.setState({myResources: this.parseResourceResponse(response)}, this.fetchPermissionRequests);\n }\n });\n }\n\n private makeScopeObj = (scope: Scope): Scope => {\n return new Scope(scope.name, scope.displayName);\n }\n\n private fetchPermissionRequests = () => {\n this.state.myResources.data.forEach((resource: Resource) => {\n this.fetchShareRequests(resource);\n });\n }\n\n private fetchShareRequests(resource: Resource): void {\n this.context!.doGet('/resources/' + resource._id + '/permissions/requests')\n .then((response: HttpResponse) => {\n resource.shareRequests = response.data || [];\n if (resource.shareRequests.length > 0) {\n this.forceUpdate();\n }\n });\n }\n\n private fetchPending = async () => {\n const response: HttpResponse = await this.context!.doGet(`/resources/pending-requests`);\n const resources: Resource[] = response.data || [];\n resources.forEach((pendingRequest: Resource) => {\n this.state.sharedWithMe.data.forEach(resource => {\n if (resource._id === pendingRequest._id) {\n resource.shareRequests = [{username: 'me', scopes: pendingRequest.scopes}]\n this.forceUpdate();\n }\n });\n });\n }\n\n private parseResourceResponse(response: HttpResponse): PaginatedResources {\n const links: string | undefined = response.headers.get('link') || undefined;\n const parsed = parse(links);\n\n let next = '';\n let prev = '';\n\n if (parsed !== null) {\n if (parsed.next) next = parsed.next;\n if (parsed.prev) prev = parsed.prev;\n }\n\n const resources: Resource[] = response.data || [];\n\n return {nextUrl: next, prevUrl: prev, data: resources};\n }\n\n private makeTab(eventKey: number, title: string, resources: PaginatedResources, sharedResourcesTab: boolean): React.ReactNode {\n return (\n \n \n \n \n \n \n \n \n \n \n \n {!sharedResourcesTab && }\n {sharedResourcesTab && }\n \n \n \n )\n }\n\n public render(): React.ReactNode {\n return (\n \n \n {this.makeTab(0, 'myResources', this.state.myResources, false)}\n {this.makeTab(1, 'sharedwithMe', this.state.sharedWithMe, true)}\n \n\n \n \n {this.hasPrevious() && }\n \n\n \n {this.hasPrevious() && }\n \n\n \n {this.hasNext() && }\n \n \n \n );\n }\n\n private handleFilterRequest = (value: string) => {\n this.setState({nameFilter: value});\n this.fetchFilteredResources({name: value});\n }\n\n private clearNextPrev(): void {\n const newMyResources: PaginatedResources = this.state.myResources;\n newMyResources.nextUrl = '';\n newMyResources.prevUrl = '';\n this.setState({myResources: newMyResources});\n }\n\n private handleFirstPageClick = () => {\n this.fetchInitialResources();\n }\n\n private handleNextClick = () => {\n if (this.isSharedWithMeTab()) {\n this.fetchResources(this.state.sharedWithMe.nextUrl);\n } else {\n this.fetchResources(this.state.myResources.nextUrl);\n }\n }\n\n private handlePreviousClick = () => {\n if (this.isSharedWithMeTab()) {\n this.fetchResources(this.state.sharedWithMe.prevUrl);\n } else {\n this.fetchResources(this.state.myResources.prevUrl);\n }\n }\n\n private handleTabClick = (event: React.MouseEvent, tabIndex: number) => {\n if (this.state.activeTabKey === tabIndex) return;\n\n this.setState({\n nameFilter: '',\n activeTabKey: tabIndex\n }, () => {this.fetchInitialResources()});\n };\n};\n"],"file":"MyResourcesPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js deleted file mode 100644 index 7224f5028..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js +++ /dev/null @@ -1,151 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { Button, Modal, Text, Badge, DataListItem, DataList, TextVariants, DataListItemRow, DataListItemCells, DataListCell, Chip, Split, SplitItem } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { UserCheckIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContentAlert } from "../ContentAlert.js"; -export class PermissionRequest extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "handleApprove", async (shareRequest, index) => { - this.handle(shareRequest.username, shareRequest.scopes, true); - this.props.resource.shareRequests.splice(index, 1); - }); - - _defineProperty(this, "handleDeny", async (shareRequest, index) => { - this.handle(shareRequest.username, shareRequest.scopes); - this.props.resource.shareRequests.splice(index, 1); - }); - - _defineProperty(this, "handle", async (username, scopes, approve = false) => { - const id = this.props.resource._id; - this.handleToggleDialog(); - const permissionsRequest = await this.context.doGet(`/resources/${id}/permissions`); - const permissions = permissionsRequest.data || []; - const foundPermission = permissions.find(p => p.username === username); - const userScopes = foundPermission ? foundPermission.scopes : []; - - if (approve) { - userScopes.push(...scopes); - } - - try { - await this.context.doPut(`/resources/${id}/permissions`, [{ - username: username, - scopes: userScopes - }]); - ContentAlert.success(Msg.localize('shareSuccess')); - this.props.onClose(); - } catch (e) { - console.error('Could not update permissions', e.error); - } - }); - - _defineProperty(this, "handleToggleDialog", () => { - this.setState({ - isOpen: !this.state.isOpen - }); - }); - - this.context = context; - this.state = { - isOpen: false - }; - } - - render() { - const id = `shareRequest-${this.props.resource.name.replace(/\s/, '-')}`; - return React.createElement(React.Fragment, null, React.createElement(Button, { - id: id, - variant: "link", - onClick: this.handleToggleDialog - }, React.createElement(UserCheckIcon, { - size: "lg" - }), React.createElement(Badge, null, this.props.resource.shareRequests.length)), React.createElement(Modal, { - id: `modal-${id}`, - title: Msg.localize('permissionRequests') + ' - ' + this.props.resource.name, - isLarge: true, - isOpen: this.state.isOpen, - onClose: this.handleToggleDialog, - actions: [React.createElement(Button, { - id: `close-${id}`, - key: "close", - variant: "link", - onClick: this.handleToggleDialog - }, React.createElement(Msg, { - msgKey: "close" - }))] - }, React.createElement(DataList, { - "aria-label": Msg.localize('permissionRequests') - }, React.createElement(DataListItemRow, null, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "permissions-name-header", - width: 5 - }, React.createElement("strong", null, "Requestor")), React.createElement(DataListCell, { - key: "permissions-requested-header", - width: 5 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "permissionRequests" - }))), React.createElement(DataListCell, { - key: "permission-request-header", - width: 5 - })] - })), this.props.resource.shareRequests.map((shareRequest, i) => React.createElement(DataListItem, { - key: i, - "aria-labelledby": "requestor" - }, React.createElement(DataListItemRow, null, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - id: `requestor${i}`, - key: `requestor${i}` - }, React.createElement("span", null, shareRequest.firstName, " ", shareRequest.lastName, " ", shareRequest.lastName ? '' : shareRequest.username), React.createElement("br", null), React.createElement(Text, { - component: TextVariants.small - }, shareRequest.email)), React.createElement(DataListCell, { - id: `permissions${i}`, - key: `permissions${i}` - }, shareRequest.scopes.map((scope, j) => React.createElement(Chip, { - key: j, - isReadOnly: true - }, scope))), React.createElement(DataListCell, { - key: `actions${i}` - }, React.createElement(Split, { - gutter: "sm" - }, React.createElement(SplitItem, null, React.createElement(Button, { - id: `accept-${i}-${id}`, - onClick: () => this.handleApprove(shareRequest, i) - }, "Accept")), React.createElement(SplitItem, null, React.createElement(Button, { - id: `deny-${i}-${id}`, - variant: "danger", - onClick: () => this.handleDeny(shareRequest, i) - }, "Deny"))))] - }))))))); - } - -} - -_defineProperty(PermissionRequest, "defaultProps", { - permissions: [], - row: 0 -}); - -_defineProperty(PermissionRequest, "contextType", AccountServiceContext); -//# sourceMappingURL=PermissionRequest.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map deleted file mode 100644 index 4a20f5358..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionRequest.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/PermissionRequest.tsx"],"names":["React","Button","Modal","Text","Badge","DataListItem","DataList","TextVariants","DataListItemRow","DataListItemCells","DataListCell","Chip","Split","SplitItem","UserCheckIcon","AccountServiceContext","Msg","ContentAlert","PermissionRequest","Component","constructor","props","context","shareRequest","index","handle","username","scopes","resource","shareRequests","splice","approve","id","_id","handleToggleDialog","permissionsRequest","doGet","permissions","data","foundPermission","find","p","userScopes","push","doPut","success","localize","onClose","e","console","error","setState","isOpen","state","render","name","replace","length","map","i","firstName","lastName","small","email","scope","j","handleApprove","handleDeny","row"],"mappings":"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","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\nimport {\n Button,\n Modal,\n Text,\n Badge,\n DataListItem,\n DataList,\n TextVariants,\n DataListItemRow,\n DataListItemCells,\n DataListCell,\n Chip,\n Split,\n SplitItem\n} from '@patternfly/react-core';\nimport { UserCheckIcon } from '@patternfly/react-icons';\n\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Msg } from '../../widgets/Msg';\nimport { ContentAlert } from '../ContentAlert';\nimport { Resource, Scope, Permission } from './resource-model';\n\n\ninterface PermissionRequestProps {\n resource: Resource;\n onClose: () => void;\n}\n\ninterface PermissionRequestState {\n isOpen: boolean;\n}\n\nexport class PermissionRequest extends React.Component {\n protected static defaultProps = { permissions: [], row: 0 };\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: PermissionRequestProps, context: React.ContextType) {\n super(props);\n this.context = context;\n \n this.state = {\n isOpen: false,\n };\n }\n\n private handleApprove = async (shareRequest: Permission, index: number) => {\n this.handle(shareRequest.username, shareRequest.scopes as Scope[], true);\n this.props.resource.shareRequests.splice(index, 1);\n };\n\n private handleDeny = async (shareRequest: Permission, index: number) => {\n this.handle(shareRequest.username, shareRequest.scopes as Scope[]);\n this.props.resource.shareRequests.splice(index, 1)\n };\n\n private handle = async (username: string, scopes: Scope[], approve: boolean = false) => {\n const id = this.props.resource._id\n this.handleToggleDialog();\n\n const permissionsRequest: HttpResponse = await this.context!.doGet(`/resources/${id}/permissions`);\n const permissions = permissionsRequest.data || [];\n const foundPermission = permissions.find(p => p.username === username);\n const userScopes = foundPermission ? (foundPermission.scopes as Scope[]): [];\n if (approve) {\n userScopes.push(...scopes);\n }\n try {\n await this.context!.doPut(`/resources/${id}/permissions`, [{ username: username, scopes: userScopes }] )\n ContentAlert.success(Msg.localize('shareSuccess'));\n this.props.onClose();\n } catch (e) {\n console.error('Could not update permissions', e.error);\n }\n };\n\n private handleToggleDialog = () => {\n this.setState({ isOpen: !this.state.isOpen });\n };\n\n public render(): React.ReactNode {\n const id = `shareRequest-${this.props.resource.name.replace(/\\s/, '-')}`;\n return (\n \n \n\n \n \n ,\n ]}\n >\n \n \n \n Requestor\n ,\n \n \n ,\n \n \n ]}\n />\n \n {this.props.resource.shareRequests.map((shareRequest, i) =>\n \n \n \n \n {shareRequest.firstName} {shareRequest.lastName} {shareRequest.lastName ? '' : shareRequest.username}\n
    \n {shareRequest.email}\n ,\n \n {(shareRequest.scopes as Scope[]).map((scope, j) => {scope})}\n ,\n \n \n \n this.handleApprove(shareRequest, i)}\n >\n Accept\n \n \n \n this.handleDeny(shareRequest, i)}\n >\n Deny\n \n \n \n \n ]}\n />\n
    \n
    \n )}\n
    \n \n
    \n );\n }\n}"],"file":"PermissionRequest.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js deleted file mode 100644 index ffffbf882..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js +++ /dev/null @@ -1,100 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { Select, SelectOption, SelectVariant } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; - -class ScopeValue { - constructor(value) { - _defineProperty(this, "value", void 0); - - this.value = value; - } - - toString() { - return this.value.displayName ? this.value.displayName : this.value.name; - } - - compareTo(selectOption) { - return selectOption.name === this.value.name; - } - -} - -export class PermissionSelect extends React.Component { - constructor(props) { - super(props); - - _defineProperty(this, "onSelect", (_event, selection) => { - const { - selected - } = this.state; - const { - onSelect - } = this.props; - - if (selected.includes(selection)) { - this.setState(prevState => ({ - selected: prevState.selected.filter(item => item !== selection) - }), () => onSelect(this.state.selected.map(sv => sv.value))); - } else { - this.setState(prevState => ({ - selected: [...prevState.selected, selection] - }), () => onSelect(this.state.selected.map(sv => sv.value))); - } - }); - - _defineProperty(this, "onToggle", isExpanded => { - this.setState({ - isExpanded - }); - }); - - _defineProperty(this, "clearSelection", () => { - this.setState({ - selected: [], - isExpanded: false - }); - this.props.onSelect([]); - }); - - let values = []; - - if (this.props.selected) { - values = this.props.selected.map(s => new ScopeValue(s)); - } - - this.state = { - isExpanded: false, - selected: values, - scopes: this.props.scopes.map((option, index) => React.createElement(SelectOption, { - key: index, - value: values.find(s => s.compareTo(option)) || new ScopeValue(option) - })) - }; - } - - render() { - const { - isExpanded, - selected - } = this.state; - const titleId = 'permission-id'; - return React.createElement("div", null, React.createElement("span", { - id: titleId, - hidden: true - }, "Select the permissions"), React.createElement(Select, { - direction: this.props.direction || 'down', - variant: SelectVariant.typeaheadMulti, - ariaLabelTypeAhead: "Select the permissions", - onToggle: this.onToggle, - onSelect: this.onSelect, - onClear: this.clearSelection, - selections: selected, - isExpanded: isExpanded, - ariaLabelledBy: titleId, - placeholderText: "Select the permissions" - }, this.state.scopes)); - } - -} -//# sourceMappingURL=PermissionSelect.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map deleted file mode 100644 index 8ffa4db9a..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/PermissionSelect.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/PermissionSelect.tsx"],"names":["React","Select","SelectOption","SelectVariant","ScopeValue","constructor","value","toString","displayName","name","compareTo","selectOption","PermissionSelect","Component","props","_event","selection","selected","state","onSelect","includes","setState","prevState","filter","item","map","sv","isExpanded","values","s","scopes","option","index","find","render","titleId","direction","typeaheadMulti","onToggle","clearSelection"],"mappings":"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","sourcesContent":["import * as React from 'react';\n\nimport { Select, SelectOption, SelectVariant, SelectOptionObject } from '@patternfly/react-core';\nimport { Scope } from './resource-model';\n\ninterface PermissionSelectState {\n selected: ScopeValue[];\n isExpanded: boolean;\n scopes: JSX.Element[];\n}\n\ninterface PermissionSelectProps {\n scopes: Scope[];\n selected?: Scope[];\n direction?: 'up' | 'down';\n onSelect: (selected: Scope[]) => void;\n}\n\nclass ScopeValue implements SelectOptionObject {\n value: Scope;\n constructor(value: Scope) {\n this.value = value;\n }\n\n toString() {\n return this.value.displayName ? this.value.displayName : this.value.name;\n }\n\n compareTo(selectOption: Scope): boolean {\n return selectOption.name === this.value.name;\n }\n}\n\nexport class PermissionSelect extends React.Component {\n constructor(props: PermissionSelectProps) {\n super(props);\n\n let values: ScopeValue[] = [];\n if (this.props.selected) {\n values = this.props.selected!.map(s => new ScopeValue(s))\n }\n\n this.state = {\n isExpanded: false,\n selected: values,\n scopes: this.props.scopes.map((option, index) => (\n s.compareTo(option)) || new ScopeValue(option)} />\n ))\n };\n }\n\n private onSelect = (_event: React.MouseEvent | React.ChangeEvent, selection: ScopeValue): void => {\n const { selected } = this.state;\n const { onSelect } = this.props;\n if (selected.includes(selection)) {\n this.setState(\n prevState => ({ selected: prevState.selected.filter(item => item !== selection) }),\n () => onSelect(this.state.selected.map(sv => sv.value))\n );\n } else {\n this.setState(\n prevState => ({ selected: [...prevState.selected, selection] }),\n () => onSelect(this.state.selected.map(sv => sv.value))\n );\n }\n }\n\n private onToggle = (isExpanded: boolean) => {\n this.setState({\n isExpanded\n });\n }\n\n private clearSelection = () => {\n this.setState({\n selected: [],\n isExpanded: false\n });\n this.props.onSelect([]);\n };\n\n render() {\n const { isExpanded, selected } = this.state;\n const titleId = 'permission-id';\n\n return (\n
    \n \n \n {this.state.scopes}\n \n
    \n );\n }\n}"],"file":"PermissionSelect.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js deleted file mode 100644 index c56d5080b..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js +++ /dev/null @@ -1,309 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { DataList, DataListItem, DataListItemRow, DataListCell, DataListToggle, DataListContent, DataListItemCells, Level, LevelItem, Button, DataListAction, DataListActionVisibility, Dropdown, DropdownPosition, DropdownItem, KebabToggle } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { css } from "../../../../common/keycloak/web_modules/@patternfly/react-styles.js"; -import { Remove2Icon, RepositoryIcon, ShareAltIcon, EditAltIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { PermissionRequest } from "./PermissionRequest.js"; -import { ShareTheResource } from "./ShareTheResource.js"; -import { Msg } from "../../widgets/Msg.js"; -import { AbstractResourcesTable } from "./AbstractResourceTable.js"; -import { EditTheResource } from "./EditTheResource.js"; -import { ContentAlert } from "../ContentAlert.js"; -import EmptyMessageState from "../../widgets/EmptyMessageState.js"; -import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js"; -export class ResourcesTable extends AbstractResourcesTable { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "onToggle", row => { - const newIsRowOpen = this.state.isRowOpen; - newIsRowOpen[row] = !newIsRowOpen[row]; - if (newIsRowOpen[row]) this.fetchPermissions(this.props.resources.data[row], row); - this.setState({ - isRowOpen: newIsRowOpen - }); - }); - - _defineProperty(this, "onContextToggle", (row, isOpen) => { - if (this.state.isModalActive) return; - const data = this.props.resources.data; - const contextOpen = this.state.contextOpen; - contextOpen[row] = isOpen; - - if (isOpen) { - const index = row > data.length ? row - data.length - 1 : row; - this.fetchPermissions(data[index], index); - } - - this.setState({ - contextOpen - }); - }); - - this.context = context; - this.state = { - isRowOpen: [], - contextOpen: [], - isModalActive: false, - permissions: new Map() - }; - } - - fetchPermissions(resource, row) { - this.context.doGet(`/resources/${resource._id}/permissions`).then(response => { - const newPermissions = new Map(this.state.permissions); - newPermissions.set(row, response.data || []); - this.setState({ - permissions: newPermissions - }); - }); - } - - removeShare(resource, row) { - const permissions = this.state.permissions.get(row).map(a => ({ - username: a.username, - scopes: [] - })); - return this.context.doPut(`/resources/${resource._id}/permissions`, permissions).then(() => { - ContentAlert.success(Msg.localize('unShareSuccess')); - }); - } - - render() { - if (this.props.resources.data.length === 0) { - return React.createElement(EmptyMessageState, { - icon: RepositoryIcon, - messageKey: "notHaveAnyResource" - }); - } - - return React.createElement(DataList, { - "aria-label": Msg.localize('resources'), - id: "resourcesList" - }, React.createElement(DataListItem, { - key: "resource-header", - "aria-labelledby": "resource-header" - }, React.createElement(DataListItemRow, null, "// invisible toggle allows headings to line up properly", React.createElement("span", { - style: { - visibility: 'hidden' - } - }, React.createElement(DataListToggle, { - isExpanded: false, - id: "resource-header-invisible-toggle", - "aria-controls": "ex-expand1" - })), React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "resource-name-header", - width: 5 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "resourceName" - }))), React.createElement(DataListCell, { - key: "application-name-header", - width: 5 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "application" - }))), React.createElement(DataListCell, { - key: "permission-request-header", - width: 5 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "permissionRequests" - })))] - }))), this.props.resources.data.map((resource, row) => React.createElement(DataListItem, { - key: 'resource-' + row, - "aria-labelledby": resource.name, - isExpanded: this.state.isRowOpen[row] - }, React.createElement(DataListItemRow, null, React.createElement(DataListToggle, { - onClick: () => this.onToggle(row), - isExpanded: this.state.isRowOpen[row], - id: 'resourceToggle-' + row, - "aria-controls": "ex-expand1" - }), React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - id: 'resourceName-' + row, - key: 'resourceName-' + row, - width: 5 - }, React.createElement(Msg, { - msgKey: resource.name - })), React.createElement(DataListCell, { - id: 'resourceClient-' + row, - key: 'resourceClient-' + row, - width: 5 - }, React.createElement("a", { - href: resource.client.baseUrl - }, this.getClientName(resource.client))), React.createElement(DataListCell, { - id: 'resourceRequests-' + row, - key: 'permissionRequests-' + row, - width: 5 - }, resource.shareRequests.length > 0 && React.createElement(PermissionRequest, { - resource: resource, - onClose: () => this.fetchPermissions(resource, row) - }))] - }), React.createElement(DataListAction, { - className: DataListActionVisibility.hiddenOnLg, - "aria-labelledby": "check-action-item3 check-action-action3", - id: "check-action-action3", - "aria-label": "Actions" - }, React.createElement(Dropdown, { - isPlain: true, - position: DropdownPosition.right, - onSelect: () => this.setState({ - isModalActive: true - }), - toggle: React.createElement(KebabToggle, { - onToggle: isOpen => this.onContextToggle(row + this.props.resources.data.length + 1, isOpen) - }), - isOpen: this.state.contextOpen[row + this.props.resources.data.length + 1], - dropdownItems: [React.createElement(ShareTheResource, { - resource: resource, - permissions: this.state.permissions.get(row), - sharedWithUsersMsg: this.sharedWithUsersMessage(row), - onClose: () => { - this.setState({ - isModalActive: false - }, () => { - this.onContextToggle(row + this.props.resources.data.length + 1, false); - this.fetchPermissions(resource, row + this.props.resources.data.length + 1); - }); - } - }, toggle => React.createElement(DropdownItem, { - id: 'mob-share-' + row, - key: "mob-share", - onClick: toggle - }, React.createElement(ShareAltIcon, null), " ", React.createElement(Msg, { - msgKey: "share" - }))), React.createElement(EditTheResource, { - resource: resource, - permissions: this.state.permissions.get(row), - onClose: () => { - this.setState({ - isModalActive: false - }, () => { - this.onContextToggle(row + this.props.resources.data.length + 1, false); - this.fetchPermissions(resource, row + this.props.resources.data.length + 1); - }); - } - }, toggle => React.createElement(DropdownItem, { - id: 'mob-edit-' + row, - key: "mob-edit", - isDisabled: this.numOthers(row) < 0, - onClick: toggle - }, React.createElement(EditAltIcon, null), " ", React.createElement(Msg, { - msgKey: "edit" - }))), React.createElement(ContinueCancelModal, { - render: toggle => React.createElement(DropdownItem, { - id: 'mob-remove-' + row, - key: "mob-remove", - isDisabled: this.numOthers(row) < 0, - onClick: toggle - }, React.createElement(Remove2Icon, null), " ", React.createElement(Msg, { - msgKey: "unShare" - })), - modalTitle: "unShare", - modalMessage: "unShareAllConfirm", - onClose: () => this.setState({ - isModalActive: false - }, () => { - this.onContextToggle(row + this.props.resources.data.length + 1, false); - }), - onContinue: () => this.removeShare(resource, row).then(() => this.fetchPermissions(resource, row + this.props.resources.data.length + 1)) - })] - })), React.createElement(DataListAction, { - id: `actions-${row}`, - className: css(DataListActionVisibility.visibleOnLg, DataListActionVisibility.hidden), - "aria-labelledby": "Row actions", - "aria-label": "Actions" - }, React.createElement(ShareTheResource, { - resource: resource, - permissions: this.state.permissions.get(row), - sharedWithUsersMsg: this.sharedWithUsersMessage(row), - onClose: () => this.fetchPermissions(resource, row) - }, toggle => React.createElement(Button, { - id: `share-${row}`, - variant: "link", - onClick: toggle - }, React.createElement(ShareAltIcon, null), " ", React.createElement(Msg, { - msgKey: "share" - }))), React.createElement(Dropdown, { - id: `action-menu-${row}`, - isPlain: true, - position: DropdownPosition.right, - toggle: React.createElement(KebabToggle, { - onToggle: isOpen => this.onContextToggle(row, isOpen) - }), - onSelect: () => this.setState({ - isModalActive: true - }), - isOpen: this.state.contextOpen[row], - dropdownItems: [React.createElement(EditTheResource, { - resource: resource, - permissions: this.state.permissions.get(row), - onClose: () => { - this.setState({ - isModalActive: false - }, () => { - this.onContextToggle(row, false); - this.fetchPermissions(resource, row); - }); - } - }, toggle => React.createElement(DropdownItem, { - id: 'edit-' + row, - key: "edit", - component: "button", - isDisabled: this.numOthers(row) < 0, - onClick: toggle - }, React.createElement(EditAltIcon, null), " ", React.createElement(Msg, { - msgKey: "edit" - }))), React.createElement(ContinueCancelModal, { - render: toggle => React.createElement(DropdownItem, { - id: 'remove-' + row, - key: "remove", - component: "button", - isDisabled: this.numOthers(row) < 0, - onClick: toggle - }, React.createElement(Remove2Icon, null), " ", React.createElement(Msg, { - msgKey: "unShare" - })), - modalTitle: "unShare", - modalMessage: "unShareAllConfirm", - onClose: () => this.setState({ - isModalActive: false - }, () => { - this.onContextToggle(row, false); - }), - onContinue: () => this.removeShare(resource, row).then(() => this.fetchPermissions(resource, row)) - })] - }))), React.createElement(DataListContent, { - noPadding: false, - "aria-label": "Session Details", - id: 'ex-expand' + row, - isHidden: !this.state.isRowOpen[row] - }, React.createElement(Level, { - gutter: "md" - }, React.createElement(LevelItem, null, React.createElement("span", null)), React.createElement(LevelItem, { - id: 'shared-with-user-message-' + row - }, this.sharedWithUsersMessage(row)), React.createElement(LevelItem, null, React.createElement("span", null))))))); - } - -} - -_defineProperty(ResourcesTable, "contextType", AccountServiceContext); -//# sourceMappingURL=ResourcesTable.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map deleted file mode 100644 index d6a5dea6e..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ResourcesTable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/ResourcesTable.tsx"],"names":["React","DataList","DataListItem","DataListItemRow","DataListCell","DataListToggle","DataListContent","DataListItemCells","Level","LevelItem","Button","DataListAction","DataListActionVisibility","Dropdown","DropdownPosition","DropdownItem","KebabToggle","css","Remove2Icon","RepositoryIcon","ShareAltIcon","EditAltIcon","AccountServiceContext","PermissionRequest","ShareTheResource","Msg","AbstractResourcesTable","EditTheResource","ContentAlert","EmptyMessageState","ContinueCancelModal","ResourcesTable","constructor","props","context","row","newIsRowOpen","state","isRowOpen","fetchPermissions","resources","data","setState","isOpen","isModalActive","contextOpen","index","length","permissions","Map","resource","doGet","_id","then","response","newPermissions","set","removeShare","get","map","a","username","scopes","doPut","success","localize","render","visibility","name","onToggle","client","baseUrl","getClientName","shareRequests","hiddenOnLg","right","onContextToggle","sharedWithUsersMessage","toggle","numOthers","visibleOnLg","hidden"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListToggle,\n DataListContent,\n DataListItemCells,\n Level,\n LevelItem,\n Button,\n DataListAction,\n DataListActionVisibility,\n Dropdown,\n DropdownPosition,\n DropdownItem,\n KebabToggle\n} from '@patternfly/react-core';\nimport { css } from '@patternfly/react-styles';\n\nimport { Remove2Icon, RepositoryIcon, ShareAltIcon, EditAltIcon } from '@patternfly/react-icons';\n\nimport { HttpResponse } from '../../account-service/account.service';\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { PermissionRequest } from \"./PermissionRequest\";\nimport { ShareTheResource } from \"./ShareTheResource\";\nimport { Permission, Resource } from \"./resource-model\";\nimport { Msg } from '../../widgets/Msg';\nimport { ResourcesTableState, ResourcesTableProps, AbstractResourcesTable } from './AbstractResourceTable';\nimport { EditTheResource } from './EditTheResource';\nimport { ContentAlert } from '../ContentAlert';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\nimport { ContinueCancelModal } from '../../widgets/ContinueCancelModal';\n\nexport interface CollapsibleResourcesTableState extends ResourcesTableState {\n isRowOpen: boolean[];\n contextOpen: boolean[];\n isModalActive: boolean;\n}\n\nexport class ResourcesTable extends AbstractResourcesTable {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: ResourcesTableProps, context: React.ContextType) {\n super(props);\n this.context = context;\n\n this.state = {\n isRowOpen: [],\n contextOpen: [],\n isModalActive: false,\n permissions: new Map()\n }\n }\n\n private onToggle = (row: number): void => {\n const newIsRowOpen: boolean[] = this.state.isRowOpen;\n newIsRowOpen[row] = !newIsRowOpen[row];\n if (newIsRowOpen[row]) this.fetchPermissions(this.props.resources.data[row], row);\n this.setState({ isRowOpen: newIsRowOpen });\n };\n\n private onContextToggle = (row: number, isOpen: boolean): void => {\n if (this.state.isModalActive) return;\n const data = this.props.resources.data;\n const contextOpen = this.state.contextOpen;\n contextOpen[row] = isOpen;\n if (isOpen) {\n const index = row > data.length ? row - data.length - 1 : row;\n this.fetchPermissions(data[index], index);\n }\n this.setState({ contextOpen });\n }\n\n private fetchPermissions(resource: Resource, row: number): void {\n this.context!.doGet(`/resources/${resource._id}/permissions`)\n .then((response: HttpResponse) => {\n const newPermissions: Map = new Map(this.state.permissions);\n newPermissions.set(row, response.data || []);\n this.setState({ permissions: newPermissions });\n });\n }\n\n private removeShare(resource: Resource, row: number): Promise {\n const permissions = this.state.permissions.get(row)!.map(a => ({ username: a.username, scopes: [] }));\n return this.context!.doPut(`/resources/${resource._id}/permissions`, permissions)\n .then(() => {\n ContentAlert.success(Msg.localize('unShareSuccess'));\n });\n }\n\n public render(): React.ReactNode {\n if (this.props.resources.data.length === 0) {\n return (\n \n );\n }\n return (\n \n \n \n // invisible toggle allows headings to line up properly\n \n \n \n \n \n ,\n \n \n ,\n \n \n ,\n ]}\n />\n \n \n {this.props.resources.data.map((resource: Resource, row: number) => (\n \n \n this.onToggle(row)}\n isExpanded={this.state.isRowOpen[row]}\n id={'resourceToggle-' + row}\n aria-controls=\"ex-expand1\"\n />\n \n \n ,\n \n {this.getClientName(resource.client)}\n ,\n \n {resource.shareRequests.length > 0 &&\n this.fetchPermissions(resource, row)}\n >\n }\n \n ]}\n />\n \n this.setState({ isModalActive: true })}\n toggle={ this.onContextToggle(row + this.props.resources.data.length + 1, isOpen)} />}\n isOpen={this.state.contextOpen[row + this.props.resources.data.length + 1]}\n dropdownItems={[\n {\n this.setState({ isModalActive: false }, () => {\n this.onContextToggle(row + this.props.resources.data.length + 1, false);\n this.fetchPermissions(resource, row + this.props.resources.data.length + 1);\n });\n }}\n >\n {\n (toggle: () => void) => (\n \n \n )\n }\n ,\n {\n this.setState({ isModalActive: false }, () => {\n this.onContextToggle(row + this.props.resources.data.length + 1, false);\n this.fetchPermissions(resource, row + this.props.resources.data.length + 1);\n });\n }}\n >\n {\n (toggle: () => void) => (\n \n \n )\n }\n ,\n void) => (\n \n \n \n )}\n modalTitle=\"unShare\"\n modalMessage=\"unShareAllConfirm\"\n onClose={() =>\n this.setState({ isModalActive: false }, () => {\n this.onContextToggle(row + this.props.resources.data.length + 1, false);\n })\n }\n onContinue={() => this.removeShare(resource, row)\n .then(() => this.fetchPermissions(resource, row + this.props.resources.data.length + 1))}\n />\n ]}\n />\n \n \n this.fetchPermissions(resource, row)}\n >\n {\n (toggle: () => void) => (\n \n )\n }\n \n this.onContextToggle(row, isOpen)} />}\n onSelect={() => this.setState({ isModalActive: true })}\n isOpen={this.state.contextOpen[row]}\n dropdownItems={[\n {\n this.setState({ isModalActive: false }, () => {\n this.onContextToggle(row, false);\n this.fetchPermissions(resource, row);\n });\n }}\n >\n {\n (toggle: () => void) => (\n \n \n )\n }\n ,\n void) => (\n \n \n \n )}\n modalTitle=\"unShare\"\n modalMessage='unShareAllConfirm'\n onClose={() =>\n this.setState({ isModalActive: false }, () => {\n this.onContextToggle(row, false);\n })\n }\n onContinue={() => this.removeShare(resource, row).then(() => this.fetchPermissions(resource, row))}\n />\n ]}\n />\n \n\n \n \n \n \n {this.sharedWithUsersMessage(row)}\n \n \n \n \n ))}\n \n );\n }\n}"],"file":"ResourcesTable.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js deleted file mode 100644 index 94feae35a..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js +++ /dev/null @@ -1,227 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { Button, Chip, ChipGroup, ChipGroupToolbarItem, Form, FormGroup, Gallery, GalleryItem, Modal, Stack, StackItem, TextInput } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContentAlert } from "../ContentAlert.js"; -import { PermissionSelect } from "./PermissionSelect.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc. - */ -export class ShareTheResource extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "handleAddPermission", () => { - const rscId = this.props.resource._id; - const newPermissions = []; - - for (const permission of this.state.permissionsSelected) { - newPermissions.push(permission.name); - } - - const permissions = []; - - for (const username of this.state.usernames) { - permissions.push({ - username: username, - scopes: newPermissions - }); - } - - this.handleToggleDialog(); - this.context.doPut(`/resources/${rscId}/permissions`, permissions).then(() => { - ContentAlert.success('shareSuccess'); - this.props.onClose(); - }); - }); - - _defineProperty(this, "handleToggleDialog", () => { - if (this.state.isOpen) { - this.setState({ - isOpen: false - }); - this.props.onClose(); - } else { - this.clearState(); - this.setState({ - isOpen: true - }); - } - }); - - _defineProperty(this, "handleUsernameChange", username => { - this.setState({ - usernameInput: username - }); - }); - - _defineProperty(this, "handleAddUsername", async () => { - if (this.state.usernameInput !== '' && !this.state.usernames.includes(this.state.usernameInput)) { - const response = await this.context.doGet(`/resources/${this.props.resource._id}/user`, { - params: { - value: this.state.usernameInput - } - }); - - if (response.data && response.data.username) { - this.setState({ - usernameInput: '', - usernames: [...this.state.usernames, this.state.usernameInput] - }); - } else { - ContentAlert.info('userNotFound', [this.state.usernameInput]); - } - } - }); - - _defineProperty(this, "handleEnterKeyInAddField", event => { - if (event.key === "Enter") { - event.preventDefault(); - this.handleAddUsername(); - } - }); - - _defineProperty(this, "handleDeleteUsername", username => { - const newUsernames = this.state.usernames.filter(user => user !== username); - this.setState({ - usernames: newUsernames - }); - }); - - this.context = context; - this.state = { - isOpen: false, - permissionsSelected: [], - permissionsUnSelected: this.props.resource.scopes, - usernames: [], - usernameInput: '' - }; - } - - clearState() { - this.setState({ - permissionsSelected: [], - permissionsUnSelected: this.props.resource.scopes, - usernames: [], - usernameInput: '' - }); - } - - isAddDisabled() { - return this.state.usernameInput === '' || this.isAlreadyShared(); - } - - isAlreadyShared() { - for (let permission of this.props.permissions) { - if (permission.username === this.state.usernameInput) return true; - } - - return false; - } - - isFormInvalid() { - return this.state.usernames.length === 0 || this.state.permissionsSelected.length === 0; - } - - render() { - return React.createElement(React.Fragment, null, this.props.children(this.handleToggleDialog), React.createElement(Modal, { - title: 'Share the resource - ' + this.props.resource.name, - isLarge: true, - isOpen: this.state.isOpen, - onClose: this.handleToggleDialog, - actions: [React.createElement(Button, { - key: "cancel", - variant: "link", - onClick: this.handleToggleDialog - }, React.createElement(Msg, { - msgKey: "cancel" - })), React.createElement(Button, { - key: "confirm", - variant: "primary", - id: "done", - onClick: this.handleAddPermission, - isDisabled: this.isFormInvalid() - }, React.createElement(Msg, { - msgKey: "done" - }))] - }, React.createElement(Stack, { - gutter: "md" - }, React.createElement(StackItem, { - isFilled: true - }, React.createElement(Form, null, React.createElement(FormGroup, { - label: "Add users to share your resource with", - type: "string", - helperTextInvalid: Msg.localize('resourceAlreadyShared'), - fieldId: "username", - isRequired: true, - isValid: !this.isAlreadyShared() - }, React.createElement(Gallery, { - gutter: "sm" - }, React.createElement(GalleryItem, null, React.createElement(TextInput, { - value: this.state.usernameInput, - isValid: !this.isAlreadyShared(), - id: "username", - "aria-describedby": "username-helper", - placeholder: "Username or email", - onChange: this.handleUsernameChange, - onKeyPress: this.handleEnterKeyInAddField - })), React.createElement(GalleryItem, null, React.createElement(Button, { - key: "add-user", - variant: "primary", - id: "add", - onClick: this.handleAddUsername, - isDisabled: this.isAddDisabled() - }, React.createElement(Msg, { - msgKey: "add" - })))), React.createElement(ChipGroup, { - withToolbar: true - }, React.createElement(ChipGroupToolbarItem, { - key: "users-selected", - categoryName: "Share with " - }, this.state.usernames.map(currentChip => React.createElement(Chip, { - key: currentChip, - onClick: () => this.handleDeleteUsername(currentChip) - }, currentChip))))), React.createElement(FormGroup, { - label: "", - fieldId: "permissions-selected" - }, React.createElement(PermissionSelect, { - scopes: this.state.permissionsUnSelected, - onSelect: selection => this.setState({ - permissionsSelected: selection - }), - direction: "up" - })))), React.createElement(StackItem, { - isFilled: true - }, React.createElement("br", null)), React.createElement(StackItem, { - isFilled: true - }, this.props.sharedWithUsersMsg)))); - } - -} - -_defineProperty(ShareTheResource, "defaultProps", { - permissions: [] -}); - -_defineProperty(ShareTheResource, "contextType", AccountServiceContext); -//# sourceMappingURL=ShareTheResource.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map deleted file mode 100644 index 36af16b44..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/ShareTheResource.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/ShareTheResource.tsx"],"names":["React","Button","Chip","ChipGroup","ChipGroupToolbarItem","Form","FormGroup","Gallery","GalleryItem","Modal","Stack","StackItem","TextInput","AccountServiceContext","Msg","ContentAlert","PermissionSelect","ShareTheResource","Component","constructor","props","context","rscId","resource","_id","newPermissions","permission","state","permissionsSelected","push","name","permissions","username","usernames","scopes","handleToggleDialog","doPut","then","success","onClose","isOpen","setState","clearState","usernameInput","includes","response","doGet","params","value","data","info","event","key","preventDefault","handleAddUsername","newUsernames","filter","user","permissionsUnSelected","isAddDisabled","isAlreadyShared","isFormInvalid","length","render","children","handleAddPermission","localize","handleUsernameChange","handleEnterKeyInAddField","map","currentChip","handleDeleteUsername","selection","sharedWithUsersMsg"],"mappings":"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","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {\n Button,\n Chip,\n ChipGroup,\n ChipGroupToolbarItem,\n Form,\n FormGroup,\n Gallery,\n GalleryItem,\n Modal,\n Stack,\n StackItem,\n TextInput\n} from '@patternfly/react-core';\n\nimport { AccountServiceContext } from '../../account-service/AccountServiceContext';\nimport { Resource, Permission, Scope } from './resource-model';\nimport { Msg } from '../../widgets/Msg';\nimport {ContentAlert} from '../ContentAlert';\nimport { PermissionSelect } from './PermissionSelect';\n\ninterface ShareTheResourceProps {\n resource: Resource;\n permissions: Permission[];\n sharedWithUsersMsg: React.ReactNode;\n onClose: () => void;\n children: (toggle: () => void) => void;\n}\n\ninterface ShareTheResourceState {\n isOpen: boolean;\n permissionsSelected: Scope[];\n permissionsUnSelected: Scope[];\n usernames: string[];\n usernameInput: string;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.\n */\nexport class ShareTheResource extends React.Component {\n protected static defaultProps = {permissions: []};\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: ShareTheResourceProps, context: React.ContextType) {\n super(props);\n this.context = context;\n \n this.state = {\n isOpen: false,\n permissionsSelected: [],\n permissionsUnSelected: this.props.resource.scopes,\n usernames: [],\n usernameInput: ''\n };\n }\n\n private clearState(): void {\n this.setState({\n permissionsSelected: [],\n permissionsUnSelected: this.props.resource.scopes,\n usernames: [],\n usernameInput: ''\n });\n }\n\n private handleAddPermission = () => {\n const rscId: string = this.props.resource._id;\n const newPermissions: string[] = [];\n\n for (const permission of this.state.permissionsSelected) {\n newPermissions.push(permission.name);\n }\n\n const permissions = [];\n\n for (const username of this.state.usernames) {\n permissions.push({username: username, scopes: newPermissions});\n }\n\n this.handleToggleDialog();\n\n this.context!.doPut(`/resources/${rscId}/permissions`, permissions)\n .then(() => {\n ContentAlert.success('shareSuccess');\n this.props.onClose();\n })\n };\n\n private handleToggleDialog = () => {\n if (this.state.isOpen) {\n this.setState({isOpen: false});\n this.props.onClose();\n } else {\n this.clearState();\n this.setState({isOpen: true});\n }\n };\n\n private handleUsernameChange = (username: string) => {\n this.setState({usernameInput: username});\n }\n\n private handleAddUsername = async () => {\n if ((this.state.usernameInput !== '') && (!this.state.usernames.includes(this.state.usernameInput))) {\n const response = await this.context!.doGet<{username: string}>(`/resources/${this.props.resource._id}/user`, { params: { value: this.state.usernameInput } });\n if (response.data && response.data.username) {\n this.setState({ usernameInput: '', usernames: [...this.state.usernames, this.state.usernameInput] });\n } else {\n ContentAlert.info('userNotFound', [this.state.usernameInput]);\n }\n }\n }\n\n private handleEnterKeyInAddField = (event: React.KeyboardEvent) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n this.handleAddUsername();\n }\n }\n\n private handleDeleteUsername = (username: string) => {\n const newUsernames: string[] = this.state.usernames.filter(user => user !== username);\n this.setState({usernames: newUsernames});\n }\n\n private isAddDisabled(): boolean {\n return this.state.usernameInput === '' || this.isAlreadyShared();\n }\n\n private isAlreadyShared(): boolean {\n for (let permission of this.props.permissions) {\n if (permission.username === this.state.usernameInput) return true;\n }\n\n return false;\n }\n\n private isFormInvalid(): boolean {\n return (this.state.usernames.length === 0) || (this.state.permissionsSelected.length === 0);\n }\n\n public render(): React.ReactNode {\n return (\n \n {this.props.children(this.handleToggleDialog)}\n\n \n \n ,\n \n ]}\n >\n \n \n
    \n \n \n \n \n \n \n \n \n\n \n \n \n {this.state.usernames.map((currentChip: string) => (\n this.handleDeleteUsername(currentChip)}>\n {currentChip}\n \n ))}\n \n \n \n \n this.setState({ permissionsSelected: selection })}\n direction=\"up\"\n />\n \n \n
    \n
    \n \n {this.props.sharedWithUsersMsg}\n \n\n
    \n \n
    \n );\n }\n}"],"file":"ShareTheResource.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js deleted file mode 100644 index 8d31eaaa4..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { DataList, DataListItem, DataListItemRow, DataListCell, DataListItemCells, ChipGroup, ChipGroupToolbarItem, Chip } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { RepositoryIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { Msg } from "../../widgets/Msg.js"; -import { AbstractResourcesTable } from "./AbstractResourceTable.js"; -import EmptyMessageState from "../../widgets/EmptyMessageState.js"; -export class SharedResourcesTable extends AbstractResourcesTable { - constructor(props) { - super(props); - this.state = { - permissions: new Map() - }; - } - - render() { - if (this.props.resources.data.length === 0) { - return React.createElement(EmptyMessageState, { - icon: RepositoryIcon, - messageKey: "noResourcesSharedWithYou" - }); - } - - return React.createElement(DataList, { - "aria-label": Msg.localize('resources'), - id: "sharedResourcesList" - }, React.createElement(DataListItem, { - key: "resource-header", - "aria-labelledby": "resource-header" - }, React.createElement(DataListItemRow, null, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: "resource-name-header", - width: 2 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "resourceName" - }))), React.createElement(DataListCell, { - key: "application-name-header", - width: 2 - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "application" - }))), React.createElement(DataListCell, { - key: "permission-header", - width: 2 - }), React.createElement(DataListCell, { - key: "requests-header", - width: 2 - })] - }))), this.props.resources.data.map((resource, row) => React.createElement(DataListItem, { - key: 'resource-' + row, - "aria-labelledby": resource.name - }, React.createElement(DataListItemRow, null, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: 'resourceName-' + row, - width: 2 - }, React.createElement(Msg, { - msgKey: resource.name - })), React.createElement(DataListCell, { - key: 'resourceClient-' + row, - width: 2 - }, React.createElement("a", { - href: resource.client.baseUrl - }, this.getClientName(resource.client))), React.createElement(DataListCell, { - key: 'permissions-' + row, - width: 2 - }, resource.scopes.length > 0 && React.createElement(ChipGroup, { - withToolbar: true - }, React.createElement(ChipGroupToolbarItem, { - key: "permissions", - categoryName: Msg.localize('permissions') - }, resource.scopes.map(scope => React.createElement(Chip, { - key: scope.name, - isReadOnly: true - }, scope.displayName || scope.name))))), React.createElement(DataListCell, { - key: 'pending-' + row, - width: 2 - }, resource.shareRequests.length > 0 && React.createElement(ChipGroup, { - withToolbar: true - }, React.createElement(ChipGroupToolbarItem, { - key: "permissions", - categoryName: Msg.localize('pending') - }, resource.shareRequests[0].scopes.map(scope => React.createElement(Chip, { - key: scope.name, - isReadOnly: true - }, scope.displayName || scope.name)))))] - }))))); - } - -} -//# sourceMappingURL=SharedResourcesTable.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map deleted file mode 100644 index 5c71d8569..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/SharedResourcesTable.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/SharedResourcesTable.tsx"],"names":["React","DataList","DataListItem","DataListItemRow","DataListCell","DataListItemCells","ChipGroup","ChipGroupToolbarItem","Chip","RepositoryIcon","Msg","AbstractResourcesTable","EmptyMessageState","SharedResourcesTable","constructor","props","state","permissions","Map","render","resources","data","length","localize","map","resource","row","name","client","baseUrl","getClientName","scopes","scope","displayName","shareRequests"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAEA,SACIC,QADJ,EAEIC,YAFJ,EAGIC,eAHJ,EAIIC,YAJJ,EAKIC,iBALJ,EAMIC,SANJ,EAOIC,oBAPJ,EAQIC,IARJ;AAUA,SAASC,cAAT;AAIA,SAASC,GAAT;AACA,SAASC,sBAAT;AACA,OAAOC,iBAAP;AAOA,OAAO,MAAMC,oBAAN,SAAmCF,sBAAnC,CAA+E;AAE3EG,EAAAA,WAAP,CAAmBC,KAAnB,EAA+C;AAC3C,UAAMA,KAAN;AACA,SAAKC,KAAL,GAAa;AACTC,MAAAA,WAAW,EAAE,IAAIC,GAAJ;AADJ,KAAb;AAGH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,QAAI,KAAKJ,KAAL,CAAWK,SAAX,CAAqBC,IAArB,CAA0BC,MAA1B,KAAqC,CAAzC,EAA4C;AACxC,aACI,oBAAC,iBAAD;AAAmB,QAAA,IAAI,EAAEb,cAAzB;AAAyC,QAAA,UAAU,EAAC;AAApD,QADJ;AAGH;;AACD,WACI,oBAAC,QAAD;AAAU,oBAAYC,GAAG,CAACa,QAAJ,CAAa,WAAb,CAAtB;AAAiD,MAAA,EAAE,EAAC;AAApD,OACI,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAC,iBAAlB;AAAoC,yBAAgB;AAApD,OACI,oBAAC,eAAD,QACI,oBAAC,iBAAD;AACI,MAAA,aAAa,EAAE,CACX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAC,sBAAlB;AAAyC,QAAA,KAAK,EAAE;AAAhD,SACI,oCAAQ,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAC;AAAZ,QAAR,CADJ,CADW,EAIX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAC,yBAAlB;AAA4C,QAAA,KAAK,EAAE;AAAnD,SACI,oCAAQ,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAC;AAAZ,QAAR,CADJ,CAJW,EAOX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAC,mBAAlB;AAAsC,QAAA,KAAK,EAAE;AAA7C,QAPW,EAQX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAC,iBAAlB;AAAoC,QAAA,KAAK,EAAE;AAA3C,QARW;AADnB,MADJ,CADJ,CADJ,EAiBK,KAAKR,KAAL,CAAWK,SAAX,CAAqBC,IAArB,CAA0BG,GAA1B,CAA8B,CAACC,QAAD,EAAqBC,GAArB,KAC3B,oBAAC,YAAD;AAAc,MAAA,GAAG,EAAE,cAAcA,GAAjC;AAAsC,yBAAiBD,QAAQ,CAACE;AAAhE,OACI,oBAAC,eAAD,QACI,oBAAC,iBAAD;AACI,MAAA,aAAa,EAAE,CACX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAE,kBAAkBD,GAArC;AAA0C,QAAA,KAAK,EAAE;AAAjD,SACI,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAED,QAAQ,CAACE;AAAtB,QADJ,CADW,EAIX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAE,oBAAoBD,GAAvC;AAA4C,QAAA,KAAK,EAAE;AAAnD,SACI;AAAG,QAAA,IAAI,EAAED,QAAQ,CAACG,MAAT,CAAgBC;AAAzB,SAAmC,KAAKC,aAAL,CAAmBL,QAAQ,CAACG,MAA5B,CAAnC,CADJ,CAJW,EAOX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAE,iBAAiBF,GAApC;AAAyC,QAAA,KAAK,EAAE;AAAhD,SACMD,QAAQ,CAACM,MAAT,CAAgBT,MAAhB,GAAyB,CAAzB,IACF,oBAAC,SAAD;AAAW,QAAA,WAAW;AAAtB,SACI,oBAAC,oBAAD;AAAsB,QAAA,GAAG,EAAC,aAA1B;AAAwC,QAAA,YAAY,EAAEZ,GAAG,CAACa,QAAJ,CAAa,aAAb;AAAtD,SAEQE,QAAQ,CAACM,MAAT,CAAgBP,GAAhB,CAAoBQ,KAAK,IACrB,oBAAC,IAAD;AAAM,QAAA,GAAG,EAAEA,KAAK,CAACL,IAAjB;AAAuB,QAAA,UAAU;AAAjC,SACKK,KAAK,CAACC,WAAN,IAAqBD,KAAK,CAACL,IADhC,CADJ,CAFR,CADJ,CAFJ,CAPW,EAqBX,oBAAC,YAAD;AAAc,QAAA,GAAG,EAAE,aAAaD,GAAhC;AAAqC,QAAA,KAAK,EAAE;AAA5C,SACKD,QAAQ,CAACS,aAAT,CAAuBZ,MAAvB,GAAgC,CAAhC,IACD,oBAAC,SAAD;AAAW,QAAA,WAAW;AAAtB,SACI,oBAAC,oBAAD;AAAsB,QAAA,GAAG,EAAC,aAA1B;AAAwC,QAAA,YAAY,EAAEZ,GAAG,CAACa,QAAJ,CAAa,SAAb;AAAtD,SAESE,QAAQ,CAACS,aAAT,CAAuB,CAAvB,EAA0BH,MAA3B,CAA8CP,GAA9C,CAAkDQ,KAAK,IACnD,oBAAC,IAAD;AAAM,QAAA,GAAG,EAAEA,KAAK,CAACL,IAAjB;AAAuB,QAAA,UAAU;AAAjC,SACKK,KAAK,CAACC,WAAN,IAAqBD,KAAK,CAACL,IADhC,CADJ,CAFR,CADJ,CAFJ,CArBW;AADnB,MADJ,CADJ,CADH,CAjBL,CADJ;AAiEH;;AAhFiF","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {\n DataList,\n DataListItem,\n DataListItemRow,\n DataListCell,\n DataListItemCells,\n ChipGroup,\n ChipGroupToolbarItem,\n Chip\n } from '@patternfly/react-core';\nimport { RepositoryIcon } from '@patternfly/react-icons';\n\n\nimport { PaginatedResources, Resource, Scope } from \"./resource-model\";\nimport { Msg } from '../../widgets/Msg';\nimport { AbstractResourcesTable, ResourcesTableState } from './AbstractResourceTable';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\nexport interface ResourcesTableProps {\n resources: PaginatedResources;\n noResourcesMessage: string;\n}\n\nexport class SharedResourcesTable extends AbstractResourcesTable {\n\n public constructor(props: ResourcesTableProps) {\n super(props);\n this.state = {\n permissions: new Map()\n }\n }\n\n public render(): React.ReactNode {\n if (this.props.resources.data.length === 0) {\n return (\n \n );\n }\n return (\n \n \n \n \n \n ,\n \n \n ,\n ,\n ,\n ]}\n />\n \n \n {this.props.resources.data.map((resource: Resource, row: number) => (\n \n \n \n \n ,\n \n {this.getClientName(resource.client)}\n ,\n \n { resource.scopes.length > 0 &&\n \n \n {\n resource.scopes.map(scope => (\n \n {scope.displayName || scope.name}\n \n ))\n }\n \n }\n ,\n \n {resource.shareRequests.length > 0 &&\n \n \n {\n (resource.shareRequests[0].scopes as Scope[]).map(scope => (\n \n {scope.displayName || scope.name}\n \n ))\n }\n \n \n }\n \n ]}\n />\n \n \n ))}\n \n );\n }\n}"],"file":"SharedResourcesTable.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js deleted file mode 100644 index 2ab8c4edf..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js +++ /dev/null @@ -1,16 +0,0 @@ -export class Scope { - constructor(name, displayName) { - this.name = name; - this.displayName = displayName; - } - - toString() { - if (this.hasOwnProperty('displayName') && this.displayName) { - return this.displayName; - } else { - return this.name; - } - } - -} -//# sourceMappingURL=resource-model.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map deleted file mode 100644 index 347ef743d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/my-resources-page/resource-model.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/my-resources-page/resource-model.ts"],"names":["Scope","constructor","name","displayName","toString","hasOwnProperty"],"mappings":"AAeA,OAAO,MAAMA,KAAN,CAAY;AACVC,EAAAA,WAAP,CAA0BC,IAA1B,EAA+CC,WAA/C,EAAqE;AAAA,SAA3CD,IAA2C,GAA3CA,IAA2C;AAAA,SAAtBC,WAAsB,GAAtBA,WAAsB;AAAE;;AAEhEC,EAAAA,QAAP,GAA0B;AACtB,QAAI,KAAKC,cAAL,CAAoB,aAApB,KAAuC,KAAKF,WAAhD,EAA8D;AAC1D,aAAO,KAAKA,WAAZ;AACH,KAFD,MAEO;AACH,aAAO,KAAKD,IAAZ;AACH;AACJ;;AATgB","sourcesContent":["export interface Resource {\n _id: string;\n name: string;\n client: Client;\n scopes: Scope[];\n uris: string[];\n shareRequests: Permission[];\n}\n\nexport interface Client {\n baseUrl: string;\n clientId: string;\n name?: string;\n}\n\nexport class Scope {\n public constructor(public name: string, public displayName?: string) {}\n\n public toString(): string {\n if (this.hasOwnProperty('displayName') && (this.displayName)) {\n return this.displayName;\n } else {\n return this.name;\n }\n }\n}\n\nexport interface PaginatedResources {\n nextUrl: string;\n prevUrl: string;\n data: Resource[];\n}\n\nexport interface Permission {\n email?: string;\n firstName?: string;\n lastName?: string;\n scopes: Scope[] | string[]; // this should be Scope[] - fix API\n username: string;\n}\n"],"file":"resource-model.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js deleted file mode 100644 index f36cb6035..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js +++ /dev/null @@ -1,31 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { WarningTriangleIcon } from "../../../../common/keycloak/web_modules/@patternfly/react-icons.js"; -import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js"; -import { Msg } from "../../widgets/Msg.js"; -import EmptyMessageState from "../../widgets/EmptyMessageState.js"; - -class PgNotFound extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement(EmptyMessageState, { - icon: WarningTriangleIcon, - messageKey: "pageNotFound" - }, React.createElement(Msg, { - msgKey: "invalidRoute", - params: [this.props.location.pathname] - })); - } - -} - -; -export const PageNotFound = withRouter(PgNotFound); -//# sourceMappingURL=PageNotFound.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map deleted file mode 100644 index 11246e588..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/page-not-found/PageNotFound.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/page-not-found/PageNotFound.tsx"],"names":["React","WarningTriangleIcon","withRouter","Msg","EmptyMessageState","PgNotFound","Component","constructor","props","render","location","pathname","PageNotFound"],"mappings":"AAAA;;;;;AAMA,OAAO,KAAKA,KAAZ;AAEA,SAASC,mBAAT;AACA,SAAQC,UAAR;AACA,SAAQC,GAAR;AACA,OAAOC,iBAAP;;AAIA,MAAMC,UAAN,SAAyBL,KAAK,CAACM,SAA/B,CAA4D;AAEjDC,EAAAA,WAAP,CAAmBC,KAAnB,EAA6C;AACzC,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,iBAAD;AAAmB,MAAA,IAAI,EAAER,mBAAzB;AAA8C,MAAA,UAAU,EAAC;AAAzD,OACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC,cAAZ;AAA2B,MAAA,MAAM,EAAE,CAAC,KAAKO,KAAL,CAAWE,QAAX,CAAoBC,QAArB;AAAnC,MADJ,CADJ;AAKH;;AAZuD;;AAa3D;AAED,OAAO,MAAMC,YAAY,GAAGV,UAAU,CAACG,UAAD,CAA/B","sourcesContent":["/*\n * To change this license header, choose License Headers in Project Properties.\n * To change this template file, choose Tools | Templates\n * and open the template in the editor.\n */\n\nimport * as React from 'react';\n\nimport { WarningTriangleIcon } from '@patternfly/react-icons';\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {Msg} from '../../widgets/Msg';\nimport EmptyMessageState from '../../widgets/EmptyMessageState';\n\nexport interface PageNotFoundProps extends RouteComponentProps {}\n\nclass PgNotFound extends React.Component {\n\n public constructor(props: PageNotFoundProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n \n \n \n );\n }\n};\n\nexport const PageNotFound = withRouter(PgNotFound);"],"file":"PageNotFound.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js b/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js deleted file mode 100644 index 3f9366926..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js +++ /dev/null @@ -1,331 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../../common/keycloak/web_modules/react.js"; -import { withRouter } from "../../../../common/keycloak/web_modules/react-router-dom.js"; -import { Button, DataList, DataListAction, DataListItemCells, DataListCell, DataListItem, DataListItemRow, Stack, StackItem, Title, TitleLevel, DataListActionVisibility, Dropdown, DropdownPosition, KebabToggle } from "../../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { AIACommand } from "../../util/AIACommand.js"; -import TimeUtil from "../../util/TimeUtil.js"; -import { AccountServiceContext } from "../../account-service/AccountServiceContext.js"; -import { ContinueCancelModal } from "../../widgets/ContinueCancelModal.js"; -import { Msg } from "../../widgets/Msg.js"; -import { ContentPage } from "../ContentPage.js"; -import { ContentAlert } from "../ContentAlert.js"; -import { KeycloakContext } from "../../keycloak-service/KeycloakContext.js"; -import { css } from "../../../../common/keycloak/web_modules/@patternfly/react-styles.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc. - */ -class SigningInPage extends React.Component { - constructor(props, context) { - super(props); - - _defineProperty(this, "context", void 0); - - _defineProperty(this, "handleRemove", (credentialId, userLabel) => { - this.context.doDelete("/credentials/" + credentialId).then(() => { - this.getCredentialContainers(); - ContentAlert.success('successRemovedMessage', [userLabel]); - }); - }); - - this.context = context; - this.state = { - credentialContainers: new Map() - }; - this.getCredentialContainers(); - } - - getCredentialContainers() { - this.context.doGet("/credentials").then(response => { - const allContainers = new Map(); - const containers = response.data || []; - containers.forEach(container => { - let categoryMap = allContainers.get(container.category); - - if (!categoryMap) { - categoryMap = new Map(); - allContainers.set(container.category, categoryMap); - } - - categoryMap.set(container.type, container); - }); - this.setState({ - credentialContainers: allContainers - }); - console.log({ - allContainers - }); - }); - } - - static credElementId(credType, credId, item) { - return `${credType}-${item}-${credId.substring(0, 8)}`; - } - - render() { - return React.createElement(ContentPage, { - title: "signingIn", - introMessage: "signingInSubMessage" - }, React.createElement(Stack, { - gutter: "md" - }, this.renderCategories())); - } - - renderCategories() { - return React.createElement(React.Fragment, null, " ", Array.from(this.state.credentialContainers.keys()).map(category => React.createElement(StackItem, { - key: category, - isFilled: true - }, React.createElement(Title, { - id: `${category}-categ-title`, - headingLevel: TitleLevel.h2, - size: "2xl" - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: category - }))), React.createElement(DataList, { - "aria-label": "foo" - }, this.renderTypes(this.state.credentialContainers.get(category)))))); - } - - renderTypes(credTypeMap) { - return React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(React.Fragment, null, Array.from(credTypeMap.keys()).map((credType, index, typeArray) => [this.renderCredTypeTitle(credTypeMap.get(credType), keycloak), this.renderUserCredentials(credTypeMap, credType, keycloak), this.renderEmptyRow(credTypeMap.get(credType).type, index === typeArray.length - 1)]))); - } - - renderEmptyRow(type, isLast) { - if (isLast) return; // don't put empty row at the end - - return React.createElement(DataListItem, { - "aria-labelledby": 'empty-list-item-' + type - }, React.createElement(DataListItemRow, { - key: 'empty-row-' + type - }, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, null)] - }))); - } - - renderUserCredentials(credTypeMap, credType, keycloak) { - const credContainer = credTypeMap.get(credType); - const userCredentials = credContainer.userCredentials; - const removeable = credContainer.removeable; - const type = credContainer.type; - const displayName = credContainer.displayName; - - if (!userCredentials || userCredentials.length === 0) { - const localizedDisplayName = Msg.localize(displayName); - return React.createElement(DataListItem, { - key: "no-credentials-list-item", - "aria-labelledby": "no-credentials-list-item" - }, React.createElement(DataListItemRow, { - key: "no-credentials-list-item-row" - }, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - key: 'no-credentials-cell-0' - }), React.createElement("strong", { - id: `${type}-not-set-up`, - key: 'no-credentials-cell-1' - }, React.createElement(Msg, { - msgKey: "notSetUp", - params: [localizedDisplayName] - })), React.createElement(DataListCell, { - key: 'no-credentials-cell-2' - })] - }))); - } - - userCredentials.forEach(credential => { - if (!credential.userLabel) credential.userLabel = Msg.localize(credential.type); - - if (credential.hasOwnProperty('createdDate') && credential.createdDate && credential.createdDate > 0) { - credential.strCreatedDate = TimeUtil.format(credential.createdDate); - } - }); - let updateAIA; - - if (credContainer.updateAction) { - updateAIA = new AIACommand(keycloak, credContainer.updateAction); - } - - return React.createElement(React.Fragment, { - key: "userCredentials" - }, " ", userCredentials.map(credential => React.createElement(DataListItem, { - id: `${SigningInPage.credElementId(type, credential.id, 'row')}`, - key: 'credential-list-item-' + credential.id, - "aria-labelledby": 'credential-list-item-' + credential.userLabel - }, React.createElement(DataListItemRow, { - key: 'userCredentialRow-' + credential.id - }, React.createElement(DataListItemCells, { - dataListCells: this.credentialRowCells(credential, type) - }), React.createElement(CredentialAction, { - credential: credential, - removeable: removeable, - updateAction: updateAIA, - credRemover: this.handleRemove - }))))); - } - - credentialRowCells(credential, type) { - const credRowCells = []; - credRowCells.push(React.createElement(DataListCell, { - id: `${SigningInPage.credElementId(type, credential.id, 'label')}`, - key: 'userLabel-' + credential.id - }, credential.userLabel)); - - if (credential.strCreatedDate) { - credRowCells.push(React.createElement(DataListCell, { - id: `${SigningInPage.credElementId(type, credential.id, 'created-at')}`, - key: 'created-' + credential.id - }, React.createElement("strong", null, React.createElement(Msg, { - msgKey: "credentialCreatedAt" - }), ": "), credential.strCreatedDate)); - credRowCells.push(React.createElement(DataListCell, { - key: 'spacer-' + credential.id - })); - } - - return credRowCells; - } - - renderCredTypeTitle(credContainer, keycloak) { - if (!credContainer.hasOwnProperty('helptext') && !credContainer.hasOwnProperty('createAction')) return; - let setupAction; - - if (credContainer.createAction) { - setupAction = new AIACommand(keycloak, credContainer.createAction); - } - - const credContainerDisplayName = Msg.localize(credContainer.displayName); - return React.createElement(React.Fragment, { - key: 'credTypeTitle-' + credContainer.type - }, React.createElement(DataListItem, { - "aria-labelledby": 'type-datalistitem-' + credContainer.type - }, React.createElement(DataListItemRow, { - key: 'credTitleRow-' + credContainer.type - }, React.createElement(DataListItemCells, { - dataListCells: [React.createElement(DataListCell, { - width: 5, - key: 'credTypeTitle-' + credContainer.type - }, React.createElement(Title, { - headingLevel: TitleLevel.h3, - size: "2xl" - }, React.createElement("strong", { - id: `${credContainer.type}-cred-title` - }, React.createElement(Msg, { - msgKey: credContainer.displayName - }))), React.createElement("span", { - id: `${credContainer.type}-cred-help` - }, credContainer.helptext && React.createElement(Msg, { - msgKey: credContainer.helptext - })))] - }), credContainer.createAction && React.createElement(DataListAction, { - "aria-labelledby": "create", - "aria-label": "create action", - id: 'mob-setUpAction-' + credContainer.type, - className: DataListActionVisibility.hiddenOnLg - }, React.createElement(Dropdown, { - isPlain: true, - position: DropdownPosition.right, - toggle: React.createElement(KebabToggle, { - onToggle: isOpen => { - credContainer.open = isOpen; - this.setState({ - credentialContainers: new Map(this.state.credentialContainers) - }); - } - }), - isOpen: credContainer.open, - dropdownItems: [React.createElement("button", { - id: `mob-${credContainer.type}-set-up`, - className: "pf-c-button pf-m-link", - type: "button", - onClick: () => setupAction.execute() - }, React.createElement("span", { - className: "pf-c-button__icon" - }, React.createElement("i", { - className: "fas fa-plus-circle", - "aria-hidden": "true" - })), React.createElement(Msg, { - msgKey: "setUpNew", - params: [credContainerDisplayName] - }))] - })), credContainer.createAction && React.createElement(DataListAction, { - "aria-labelledby": "create", - "aria-label": "create action", - id: 'setUpAction-' + credContainer.type, - className: css(DataListActionVisibility.visibleOnLg, DataListActionVisibility.hidden) - }, React.createElement("button", { - id: `${credContainer.type}-set-up`, - className: "pf-c-button pf-m-link", - type: "button", - onClick: () => setupAction.execute() - }, React.createElement("span", { - className: "pf-c-button__icon" - }, React.createElement("i", { - className: "fas fa-plus-circle", - "aria-hidden": "true" - })), React.createElement(Msg, { - msgKey: "setUpNew", - params: [credContainerDisplayName] - })))))); - } - -} - -_defineProperty(SigningInPage, "contextType", AccountServiceContext); - -; -; - -class CredentialAction extends React.Component { - render() { - if (this.props.updateAction) { - return React.createElement(DataListAction, { - "aria-labelledby": "foo", - "aria-label": "foo action", - id: 'updateAction-' + this.props.credential.id - }, React.createElement(Button, { - id: `${SigningInPage.credElementId(this.props.credential.type, this.props.credential.id, 'update')}`, - variant: "primary", - onClick: () => this.props.updateAction.execute() - }, React.createElement(Msg, { - msgKey: "update" - }))); - } - - if (this.props.removeable) { - const userLabel = this.props.credential.userLabel; - return React.createElement(DataListAction, { - "aria-labelledby": "foo", - "aria-label": "foo action", - id: 'removeAction-' + this.props.credential.id - }, React.createElement(ContinueCancelModal, { - buttonTitle: "remove", - buttonId: `${SigningInPage.credElementId(this.props.credential.type, this.props.credential.id, 'remove')}`, - modalTitle: Msg.localize('removeCred', [userLabel]), - modalMessage: Msg.localize('stopUsingCred', [userLabel]), - onContinue: () => this.props.credRemover(this.props.credential.id, userLabel) - })); - } - - return React.createElement(React.Fragment, null); - } - -} - -const SigningInPageWithRouter = withRouter(SigningInPage); -export { SigningInPageWithRouter as SigningInPage }; -//# sourceMappingURL=SigningInPage.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map deleted file mode 100644 index cc7f4cb58..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/content/signingin-page/SigningInPage.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../../src/app/content/signingin-page/SigningInPage.tsx"],"names":["React","withRouter","Button","DataList","DataListAction","DataListItemCells","DataListCell","DataListItem","DataListItemRow","Stack","StackItem","Title","TitleLevel","DataListActionVisibility","Dropdown","DropdownPosition","KebabToggle","AIACommand","TimeUtil","AccountServiceContext","ContinueCancelModal","Msg","ContentPage","ContentAlert","KeycloakContext","css","SigningInPage","Component","constructor","props","context","credentialId","userLabel","doDelete","then","getCredentialContainers","success","state","credentialContainers","Map","doGet","response","allContainers","containers","data","forEach","container","categoryMap","get","category","set","type","setState","console","log","credElementId","credType","credId","item","substring","render","renderCategories","Array","from","keys","map","h2","renderTypes","credTypeMap","keycloak","index","typeArray","renderCredTypeTitle","renderUserCredentials","renderEmptyRow","length","isLast","credContainer","userCredentials","removeable","displayName","localizedDisplayName","localize","credential","hasOwnProperty","createdDate","strCreatedDate","format","updateAIA","updateAction","id","credentialRowCells","handleRemove","credRowCells","push","setupAction","createAction","credContainerDisplayName","h3","helptext","hiddenOnLg","right","isOpen","open","execute","visibleOnLg","hidden","CredentialAction","credRemover","SigningInPageWithRouter"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {withRouter, RouteComponentProps} from 'react-router-dom';\nimport {\n Button,\n DataList,\n DataListAction,\n DataListItemCells,\n DataListCell,\n DataListItem,\n DataListItemRow,\n Stack,\n StackItem,\n Title,\n TitleLevel,\n DataListActionVisibility,\n Dropdown,\n DropdownPosition,\n KebabToggle,\n } from '@patternfly/react-core';\n\nimport {AIACommand} from '../../util/AIACommand';\nimport TimeUtil from '../../util/TimeUtil';\nimport {HttpResponse, AccountServiceClient} from '../../account-service/account.service';\nimport {AccountServiceContext} from '../../account-service/AccountServiceContext';\nimport {ContinueCancelModal} from '../../widgets/ContinueCancelModal';\nimport {Features} from '../../widgets/features';\nimport {Msg} from '../../widgets/Msg';\nimport {ContentPage} from '../ContentPage';\nimport {ContentAlert} from '../ContentAlert';\nimport { KeycloakContext } from '../../keycloak-service/KeycloakContext';\nimport { KeycloakService } from '../../keycloak-service/keycloak.service';\nimport { css } from '@patternfly/react-styles';\n\ndeclare const features: Features;\n\ninterface PasswordDetails {\n registered: boolean;\n lastUpdate: number;\n}\n\ntype CredCategory = 'password' | 'two-factor' | 'passwordless';\ntype CredType = string;\ntype CredTypeMap = Map;\ntype CredContainerMap = Map;\n\ninterface UserCredential {\n id: string;\n type: string;\n userLabel: string;\n createdDate?: number;\n strCreatedDate?: string;\n}\n\n// A CredentialContainer is unique by combo of credential type and credential category\ninterface CredentialContainer {\n category: CredCategory;\n type: CredType;\n displayName: string;\n helptext?: string;\n createAction?: string;\n updateAction?: string;\n removeable: boolean;\n userCredentials: UserCredential[];\n open: boolean;\n}\n\ninterface SigningInPageProps extends RouteComponentProps {\n}\n\ninterface SigningInPageState {\n // Credential containers organized by category then type\n credentialContainers: CredContainerMap;\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nclass SigningInPage extends React.Component {\n static contextType = AccountServiceContext;\n context: React.ContextType;\n\n public constructor(props: SigningInPageProps, context: React.ContextType) {\n super(props);\n this.context = context;\n \n this.state = {\n credentialContainers: new Map(),\n }\n\n this.getCredentialContainers();\n }\n\n private getCredentialContainers(): void {\n this.context!.doGet(\"/credentials\")\n .then((response: HttpResponse) => {\n\n const allContainers: CredContainerMap = new Map();\n const containers: CredentialContainer[] = response.data || [];\n containers.forEach(container => {\n let categoryMap = allContainers.get(container.category);\n if (!categoryMap) {\n categoryMap = new Map();\n allContainers.set(container.category, categoryMap);\n }\n categoryMap.set(container.type, container);\n });\n\n this.setState({credentialContainers: allContainers});\n console.log({allContainers})\n });\n }\n\n private handleRemove = (credentialId: string, userLabel: string) => {\n this.context!.doDelete(\"/credentials/\" + credentialId)\n .then(() => {\n this.getCredentialContainers();\n ContentAlert.success('successRemovedMessage', [userLabel]);\n });\n }\n\n public static credElementId(credType: CredType, credId: string, item: string): string {\n return `${credType}-${item}-${credId.substring(0,8)}`;\n }\n\n public render(): React.ReactNode {\n return (\n \n \n {this.renderCategories()}\n \n \n );\n }\n\n private renderCategories(): React.ReactNode {\n return (<> {\n Array.from(this.state.credentialContainers.keys()).map(category => (\n \n \n <strong><Msg msgKey={category}/></strong>\n \n \n {this.renderTypes(this.state.credentialContainers.get(category)!)}\n \n \n ))\n\n })\n }\n\n private renderTypes(credTypeMap: CredTypeMap): React.ReactNode {\n return (\n \n { keycloak => (\n <>{\n Array.from(credTypeMap.keys()).map((credType: CredType, index: number, typeArray: string[]) => ([\n this.renderCredTypeTitle(credTypeMap.get(credType)!, keycloak!),\n this.renderUserCredentials(credTypeMap, credType, keycloak!),\n this.renderEmptyRow(credTypeMap.get(credType)!.type, index === typeArray.length - 1)\n ]))\n }\n )}\n \n );\n }\n\n private renderEmptyRow(type: string, isLast: boolean): React.ReactNode {\n if (isLast) return; // don't put empty row at the end\n\n return (\n \n \n ]}/>\n \n \n )\n }\n\n private renderUserCredentials(credTypeMap: CredTypeMap, credType: CredType, keycloak: KeycloakService): React.ReactNode {\n const credContainer: CredentialContainer = credTypeMap.get(credType)!;\n const userCredentials: UserCredential[] = credContainer.userCredentials;\n const removeable: boolean = credContainer.removeable;\n const type: string = credContainer.type;\n const displayName: string = credContainer.displayName;\n\n if (!userCredentials || userCredentials.length === 0) {\n const localizedDisplayName = Msg.localize(displayName);\n return (\n \n \n ,\n ,\n \n ]}/>\n \n \n );\n }\n\n userCredentials.forEach(credential => {\n if (!credential.userLabel) credential.userLabel = Msg.localize(credential.type);\n if (credential.hasOwnProperty('createdDate') && credential.createdDate && credential.createdDate! > 0) {\n credential.strCreatedDate = TimeUtil.format(credential.createdDate as number);\n }\n });\n\n let updateAIA: AIACommand;\n if (credContainer.updateAction) {\n updateAIA = new AIACommand(keycloak, credContainer.updateAction);\n }\n\n return (\n {\n userCredentials.map(credential => (\n \n \n \n\n \n \n \n ))\n }\n )\n }\n\n private credentialRowCells(credential: UserCredential, type: string): React.ReactNode[] {\n const credRowCells: React.ReactNode[] = [];\n credRowCells.push({credential.userLabel});\n if (credential.strCreatedDate) {\n credRowCells.push(: {credential.strCreatedDate});\n credRowCells.push();\n }\n\n return credRowCells;\n }\n\n private renderCredTypeTitle(credContainer: CredentialContainer, keycloak: KeycloakService): React.ReactNode {\n if (!credContainer.hasOwnProperty('helptext') && !credContainer.hasOwnProperty('createAction')) return;\n\n let setupAction: AIACommand;\n if (credContainer.createAction) {\n setupAction = new AIACommand(keycloak, credContainer.createAction);\n }\n const credContainerDisplayName: string = Msg.localize(credContainer.displayName);\n\n return (\n \n \n \n \n \n <strong id={`${credContainer.type}-cred-title`}><Msg msgKey={credContainer.displayName}/></strong>\n \n \n {credContainer.helptext && }\n \n ,\n\n ]}/>\n {credContainer.createAction &&\n \n {\n credContainer.open = isOpen;\n this.setState({ credentialContainers: new Map(this.state.credentialContainers) });\n }} />}\n isOpen={credContainer.open}\n dropdownItems={[\n ]}\n />\n }\n {credContainer.createAction &&\n \n \n }\n \n \n
    \n )\n }\n\n};\n\ntype CredRemover = (credentialId: string, userLabel: string) => void;\ninterface CredentialActionProps {credential: UserCredential;\n removeable: boolean;\n updateAction: AIACommand;\n credRemover: CredRemover;};\nclass CredentialAction extends React.Component {\n\n render(): React.ReactNode {\n if (this.props.updateAction) {\n return (\n \n \n \n )\n }\n\n if (this.props.removeable) {\n const userLabel: string = this.props.credential.userLabel;\n return (\n \n this.props.credRemover(this.props.credential.id, userLabel)}\n />\n \n )\n }\n\n return (<>)\n }\n}\n\nconst SigningInPageWithRouter = withRouter(SigningInPage);\nexport { SigningInPageWithRouter as SigningInPage};"],"file":"SigningInPage.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js b/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js deleted file mode 100644 index bf8578508..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as React from "../../../common/keycloak/web_modules/react.js"; -export const KeycloakContext = React.createContext(undefined); -//# sourceMappingURL=KeycloakContext.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map deleted file mode 100644 index b693feeb9..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/KeycloakContext.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/keycloak-service/KeycloakContext.tsx"],"names":["React","KeycloakContext","createContext","undefined"],"mappings":"AAAA,OAAO,KAAKA,KAAZ;AAGA,OAAO,MAAMC,eAAe,GAAGD,KAAK,CAACE,aAAN,CAAiDC,SAAjD,CAAxB","sourcesContent":["import * as React from 'react';\nimport { KeycloakService } from './keycloak.service';\n\nexport const KeycloakContext = React.createContext(undefined);"],"file":"KeycloakContext.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js b/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js deleted file mode 100644 index 7eb32999e..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js +++ /dev/null @@ -1,77 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2017 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -export class KeycloakService { - constructor(keycloak) { - _defineProperty(this, "keycloakAuth", void 0); - - this.keycloakAuth = keycloak; - } - - authenticated() { - return this.keycloakAuth.authenticated ? this.keycloakAuth.authenticated : false; - } - - audiencePresent() { - if (this.keycloakAuth.tokenParsed) { - const audience = this.keycloakAuth.tokenParsed['aud']; - return audience === 'account' || Array.isArray(audience) && audience.indexOf('account') >= 0; - } - - return false; - } - - login(options) { - this.keycloakAuth.login(options); - } - - logout(redirectUri = baseUrl) { - this.keycloakAuth.logout({ - redirectUri: redirectUri - }); - } - - account() { - this.keycloakAuth.accountManagement(); - } - - authServerUrl() { - const authServerUrl = this.keycloakAuth.authServerUrl; - return authServerUrl.charAt(authServerUrl.length - 1) === '/' ? authServerUrl : authServerUrl + '/'; - } - - realm() { - return this.keycloakAuth.realm; - } - - getToken() { - return new Promise((resolve, reject) => { - if (this.keycloakAuth.token) { - this.keycloakAuth.updateToken(5).success(() => { - resolve(this.keycloakAuth.token); - }).error(() => { - reject('Failed to refresh token'); - }); - } else { - reject('Not logged in'); - } - }); - } - -} -//# sourceMappingURL=keycloak.service.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map deleted file mode 100644 index 52a15bb88..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/keycloak-service/keycloak.service.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/keycloak-service/keycloak.service.ts"],"names":["KeycloakService","constructor","keycloak","keycloakAuth","authenticated","audiencePresent","tokenParsed","audience","Array","isArray","indexOf","login","options","logout","redirectUri","baseUrl","account","accountManagement","authServerUrl","charAt","length","realm","getToken","Promise","resolve","reject","token","updateToken","success","error"],"mappings":";;AAAA;;;;;;;;;;;;;;;;AAqBA,OAAO,MAAMA,eAAN,CAAsB;AAGlBC,EAAAA,WAAP,CAAmBC,QAAnB,EAA6C;AAAA;;AACzC,SAAKC,YAAL,GAAoBD,QAApB;AACH;;AAEME,EAAAA,aAAP,GAAgC;AAC5B,WAAO,KAAKD,YAAL,CAAkBC,aAAlB,GAAkC,KAAKD,YAAL,CAAkBC,aAApD,GAAoE,KAA3E;AACH;;AAEMC,EAAAA,eAAP,GAAkC;AAC9B,QAAI,KAAKF,YAAL,CAAkBG,WAAtB,EAAmC;AAC/B,YAAMC,QAAQ,GAAG,KAAKJ,YAAL,CAAkBG,WAAlB,CAA8B,KAA9B,CAAjB;AACA,aAAOC,QAAQ,KAAK,SAAb,IAA2BC,KAAK,CAACC,OAAN,CAAcF,QAAd,KAA2BA,QAAQ,CAACG,OAAT,CAAiB,SAAjB,KAA+B,CAA5F;AACH;;AACD,WAAO,KAAP;AACH;;AAEMC,EAAAA,KAAP,CAAaC,OAAb,EAAmD;AAC/C,SAAKT,YAAL,CAAkBQ,KAAlB,CAAwBC,OAAxB;AACH;;AAEMC,EAAAA,MAAP,CAAcC,WAAmB,GAAGC,OAApC,EAAmD;AAC/C,SAAKZ,YAAL,CAAkBU,MAAlB,CAAyB;AAACC,MAAAA,WAAW,EAAEA;AAAd,KAAzB;AACH;;AAEME,EAAAA,OAAP,GAAuB;AACnB,SAAKb,YAAL,CAAkBc,iBAAlB;AACH;;AAEMC,EAAAA,aAAP,GAA2C;AACvC,UAAMA,aAAa,GAAG,KAAKf,YAAL,CAAkBe,aAAxC;AACA,WAAOA,aAAa,CAAEC,MAAf,CAAsBD,aAAa,CAAEE,MAAf,GAAwB,CAA9C,MAAqD,GAArD,GAA2DF,aAA3D,GAA2EA,aAAa,GAAG,GAAlG;AACH;;AAEMG,EAAAA,KAAP,GAAmC;AAC/B,WAAO,KAAKlB,YAAL,CAAkBkB,KAAzB;AACH;;AAEMC,EAAAA,QAAP,GAAmC;AAC/B,WAAO,IAAIC,OAAJ,CAAoB,CAACC,OAAD,EAAUC,MAAV,KAAqB;AAC5C,UAAI,KAAKtB,YAAL,CAAkBuB,KAAtB,EAA6B;AACzB,aAAKvB,YAAL,CACKwB,WADL,CACiB,CADjB,EAEKC,OAFL,CAEa,MAAM;AACXJ,UAAAA,OAAO,CAAC,KAAKrB,YAAL,CAAkBuB,KAAnB,CAAP;AACH,SAJL,EAKKG,KALL,CAKW,MAAM;AACTJ,UAAAA,MAAM,CAAC,yBAAD,CAAN;AACH,SAPL;AAQH,OATD,MASO;AACHA,QAAAA,MAAM,CAAC,eAAD,CAAN;AACH;AACJ,KAbM,CAAP;AAcH;;AAvDwB","sourcesContent":["/*\n * Copyright 2017 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport {KeycloakLoginOptions} from \"../../../../../../../../../../adapters/oidc/js/src/main/resources/keycloak\";\n\ndeclare const baseUrl: string;\nexport type KeycloakClient = Keycloak.KeycloakInstance;\n\nexport class KeycloakService {\n private keycloakAuth: KeycloakClient;\n\n public constructor(keycloak: KeycloakClient) {\n this.keycloakAuth = keycloak;\n }\n\n public authenticated(): boolean {\n return this.keycloakAuth.authenticated ? this.keycloakAuth.authenticated : false;\n }\n\n public audiencePresent(): boolean {\n if (this.keycloakAuth.tokenParsed) {\n const audience = this.keycloakAuth.tokenParsed['aud'];\n return audience === 'account' || (Array.isArray(audience) && audience.indexOf('account') >= 0);\n }\n return false;\n }\n\n public login(options?: KeycloakLoginOptions): void {\n this.keycloakAuth.login(options);\n }\n\n public logout(redirectUri: string = baseUrl): void {\n this.keycloakAuth.logout({redirectUri: redirectUri});\n }\n\n public account(): void {\n this.keycloakAuth.accountManagement();\n }\n\n public authServerUrl(): string | undefined {\n const authServerUrl = this.keycloakAuth.authServerUrl;\n return authServerUrl!.charAt(authServerUrl!.length - 1) === '/' ? authServerUrl : authServerUrl + '/';\n }\n\n public realm(): string | undefined {\n return this.keycloakAuth.realm;\n }\n\n public getToken(): Promise {\n return new Promise((resolve, reject) => {\n if (this.keycloakAuth.token) {\n this.keycloakAuth\n .updateToken(5)\n .success(() => {\n resolve(this.keycloakAuth.token as string);\n })\n .error(() => {\n reject('Failed to refresh token');\n });\n } else {\n reject('Not logged in');\n }\n });\n }\n}\n"],"file":"keycloak.service.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/public/favicon.ico b/deps/keycloak/themes/keycloak.v2/account/resources/public/favicon.ico deleted file mode 100644 index 48188dedaaed851f39dcf435d3bde8e0dce753fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 627 zcmV-(0*w8MP)fnm`u?`7EDZT zU@#004h&*6qDT$3A+1HARIlxQw0Gw~Fqjw}@R{Bx@00f{&kMVRw3Fz%ejPaV7yTE* zFfRVFfUfKNfww^PA5AYAhLPDOVn^Z@5Uq#8eCj{K^1uiH-%|sWPn^Z+JGia8uj_ip zZxduPnQOLfKTs5fNvoYXN5LH&;bDG;iSDDcboJ0G%bfWzLoC#S@B5!sRW1H1Fh4(U zCK8G8Z0;+U=JG_6dl~BMWvaKyqfNox4TZyDm6NS?PHPsf>mtkY)(X?p)044SEDSKQ zTqY7~#q8?iUXO?Cx}0ybNC=-sv&nO(ja);Zsw$GSbv}_!r^h5o;>pJq=GIKi)BxwS zIvtLQX_~mM%k55!1cRzr-Bk6$hn3YADC!p(StiU*sn$CQ!;;MuB0(GzS&ySNfE*{22sK>&cF zD98ZA!^0c7Ty9jX6mNc<6~^+fSY63eDwURie5q8*?sVcL zaG@TFvod&`Xu~G?W|nd+MRD*L$@~KG!Vkeycloak_deliverables \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js b/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js deleted file mode 100644 index 1e423e926..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @author Stan Silvert - */ -export class AIACommand { - constructor(keycloak, action) { - this.keycloak = keycloak; - this.action = action; - } - - execute() { - this.keycloak.login({ - action: this.action - }); - } - -} -//# sourceMappingURL=AIACommand.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map deleted file mode 100644 index 4bec2c912..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/AIACommand.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/util/AIACommand.ts"],"names":["AIACommand","constructor","keycloak","action","execute","login"],"mappings":"AAAA;;;;;;;;;;;;;;;;AAkBA;;;AAGA,OAAO,MAAMA,UAAN,CAAiB;AAEpBC,EAAAA,WAAW,CAASC,QAAT,EAA4CC,MAA5C,EAA4D;AAAA,SAAnDD,QAAmD,GAAnDA,QAAmD;AAAA,SAAhBC,MAAgB,GAAhBA,MAAgB;AAAE;;AAElEC,EAAAA,OAAP,GAAuB;AACnB,SAAKF,QAAL,CAAcG,KAAd,CAAoB;AAChBF,MAAAA,MAAM,EAAE,KAAKA;AADG,KAApB;AAIH;;AATmB","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\n\n/**\n * @author Stan Silvert\n */\nexport class AIACommand {\n\n constructor(private keycloak: KeycloakService, private action: string) {}\n\n public execute(): void {\n this.keycloak.login({\n action: this.action,\n })\n\n }\n}"],"file":"AIACommand.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js b/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js deleted file mode 100644 index 96d123fde..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js +++ /dev/null @@ -1,19 +0,0 @@ -function parse(linkHeader) { - if (!linkHeader) return {}; - const links = linkHeader.split(/,\s* { - const matcher = link.match(/]*)>(.*)/); - if (!matcher) return {}; - const linkUrl = matcher[1]; - const rel = matcher[2].match(/\s*(.+)\s*=\s*"?([^"]+)"?/); - - if (rel) { - acc[rel[2]] = linkUrl; - } - - return acc; - }, {}); -} - -export default parse; -//# sourceMappingURL=ParseLink.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map deleted file mode 100644 index 2532f0839..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/ParseLink.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/util/ParseLink.ts"],"names":["parse","linkHeader","links","split","reduce","acc","link","matcher","match","linkUrl","rel"],"mappings":"AAMA,SAASA,KAAT,CAAeC,UAAf,EAAsD;AACpD,MAAI,CAACA,UAAL,EAAiB,OAAO,EAAP;AACjB,QAAMC,KAAK,GAAGD,UAAU,CAACE,KAAX,CAAiB,OAAjB,CAAd;AACA,SAAOD,KAAK,CAACE,MAAN,CAAoB,CAACC,GAAD,EAAaC,IAAb,KAAqC;AAC9D,UAAMC,OAAO,GAAGD,IAAI,CAACE,KAAL,CAAW,gBAAX,CAAhB;AACA,QAAI,CAACD,OAAL,EAAc,OAAO,EAAP;AACd,UAAME,OAAO,GAAGF,OAAO,CAAC,CAAD,CAAvB;AACA,UAAMG,GAAG,GAAGH,OAAO,CAAC,CAAD,CAAP,CAAWC,KAAX,CAAiB,2BAAjB,CAAZ;;AACA,QAAIE,GAAJ,EAAS;AACLL,MAAAA,GAAG,CAACK,GAAG,CAAC,CAAD,CAAJ,CAAH,GAAcD,OAAd;AACH;;AACD,WAAOJ,GAAP;AACD,GATM,EASJ,EATI,CAAP;AAUD;;AAED,eAAeL,KAAf","sourcesContent":["\nexport interface Links {\n prev?: string;\n next?: string;\n}\n\nfunction parse(linkHeader: string | undefined): Links {\n if (!linkHeader) return {};\n const links = linkHeader.split(/,\\s*((acc: Links, link: string): Links => {\n const matcher = link.match(/]*)>(.*)/);\n if (!matcher) return {};\n const linkUrl = matcher[1];\n const rel = matcher[2].match(/\\s*(.+)\\s*=\\s*\"?([^\"]+)\"?/);\n if (rel) {\n acc[rel[2]] = linkUrl;\n }\n return acc;\n }, {});\n}\n\nexport default parse;"],"file":"ParseLink.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js b/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js deleted file mode 100644 index 2cdfd98ae..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates - * and other contributors as indicated by the @author tags. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * Create a redirect uri that can return to this application with referrer and referrer_uri intact. - * - * @param currentLocation The ReactRouter location to return to. - * - * @author Stan Silvert - */ -export const createRedirect = currentLocation => { - let redirectUri = baseUrl; - - if (typeof referrer !== 'undefined') { - // '_hash_' is a workaround for when uri encoding is not - // sufficient to escape the # character properly. - // The problem is that both the redirect and the application URL contain a hash. - // The browser will consider anything after the first hash to be client-side. So - // it sees the hash in the redirect param and stops. - redirectUri += "?referrer=" + referrer + "&referrer_uri=" + referrerUri.replace('#', '_hash_'); - } - - return encodeURIComponent(redirectUri) + encodeURIComponent("/#" + currentLocation); -}; -//# sourceMappingURL=RedirectUri.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map deleted file mode 100644 index b9c72f68b..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/RedirectUri.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/util/RedirectUri.ts"],"names":["createRedirect","currentLocation","redirectUri","baseUrl","referrer","referrerUri","replace","encodeURIComponent"],"mappings":"AAAA;;;;;;;;;;;;;;;;;AAqBA;;;;;;;AAOA,OAAO,MAAMA,cAAc,GAAIC,eAAD,IAAqC;AAC/D,MAAIC,WAAmB,GAAGC,OAA1B;;AAEA,MAAI,OAAOC,QAAP,KAAoB,WAAxB,EAAqC;AACjC;AACA;AACA;AACA;AACA;AACAF,IAAAA,WAAW,IAAI,eAAeE,QAAf,GAA0B,gBAA1B,GAA6CC,WAAW,CAACC,OAAZ,CAAoB,GAApB,EAAyB,QAAzB,CAA5D;AACH;;AAED,SAAOC,kBAAkB,CAACL,WAAD,CAAlB,GAAkCK,kBAAkB,CAAC,OAAON,eAAR,CAA3D;AACH,CAbM","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates\n * and other contributors as indicated by the @author tags.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const baseUrl: string;\ndeclare const referrer: string;\ndeclare const referrerUri: string;\n\n/**\n * Create a redirect uri that can return to this application with referrer and referrer_uri intact.\n * \n * @param currentLocation The ReactRouter location to return to.\n * \n * @author Stan Silvert\n */\nexport const createRedirect = (currentLocation: string): string => {\n let redirectUri: string = baseUrl;\n \n if (typeof referrer !== 'undefined') {\n // '_hash_' is a workaround for when uri encoding is not\n // sufficient to escape the # character properly.\n // The problem is that both the redirect and the application URL contain a hash.\n // The browser will consider anything after the first hash to be client-side. So\n // it sees the hash in the redirect param and stops.\n redirectUri += \"?referrer=\" + referrer + \"&referrer_uri=\" + referrerUri.replace('#', '_hash_');\n }\n\n return encodeURIComponent(redirectUri) + encodeURIComponent(\"/#\" + currentLocation); \n}"],"file":"RedirectUri.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js b/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js deleted file mode 100644 index 1097c922f..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js +++ /dev/null @@ -1,50 +0,0 @@ -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2020 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/** - * @author Stan Silvert - */ -class TimeUtil { - constructor() { - _defineProperty(this, "options", { - year: 'numeric', - month: 'long', - day: 'numeric', - hour: 'numeric', - minute: 'numeric' - }); - - _defineProperty(this, "formatter", void 0); - - try { - this.formatter = new Intl.DateTimeFormat(locale, this.options); - } catch (e) { - // unknown locale falling back to English - this.formatter = new Intl.DateTimeFormat('en', this.options); - } - } - - format(time) { - return this.formatter.format(time); - } - -} - -const TimeUtilInstance = new TimeUtil(); -export default TimeUtilInstance; -//# sourceMappingURL=TimeUtil.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map deleted file mode 100644 index cd346a73e..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/util/TimeUtil.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/util/TimeUtil.ts"],"names":["TimeUtil","constructor","year","month","day","hour","minute","formatter","Intl","DateTimeFormat","locale","options","e","format","time","TimeUtilInstance"],"mappings":";;AAAA;;;;;;;;;;;;;;;;AAkBA;;;AAGA,MAAMA,QAAN,CAAe;AAIXC,EAAAA,WAAW,GAAG;AAAA,qCAHI;AAAEC,MAAAA,IAAI,EAAE,SAAR;AAAmBC,MAAAA,KAAK,EAAE,MAA1B;AAAkCC,MAAAA,GAAG,EAAE,SAAvC;AAAkDC,MAAAA,IAAI,EAAE,SAAxD;AAAmEC,MAAAA,MAAM,EAAE;AAA3E,KAGJ;;AAAA;;AACV,QAAI;AACA,WAAKC,SAAL,GAAiB,IAAIC,IAAI,CAACC,cAAT,CAAwBC,MAAxB,EAAgC,KAAKC,OAArC,CAAjB;AACH,KAFD,CAEE,OAAMC,CAAN,EAAS;AACP;AACA,WAAKL,SAAL,GAAiB,IAAIC,IAAI,CAACC,cAAT,CAAwB,IAAxB,EAA8B,KAAKE,OAAnC,CAAjB;AACH;AACJ;;AAEDE,EAAAA,MAAM,CAACC,IAAD,EAAuB;AACzB,WAAO,KAAKP,SAAL,CAAeM,MAAf,CAAsBC,IAAtB,CAAP;AACH;;AAfU;;AAkBf,MAAMC,gBAA0B,GAAG,IAAIf,QAAJ,EAAnC;AACA,eAAee,gBAAf","sourcesContent":["/*\n * Copyright 2020 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\ndeclare const locale: string;\n\n/**\n * @author Stan Silvert\n */\nclass TimeUtil {\n private options = { year: 'numeric', month: 'long', day: 'numeric', hour: 'numeric', minute: 'numeric' };\n private formatter: Intl.DateTimeFormat;\n\n constructor() {\n try {\n this.formatter = new Intl.DateTimeFormat(locale, this.options);\n } catch(e) {\n // unknown locale falling back to English\n this.formatter = new Intl.DateTimeFormat('en', this.options);\n }\n }\n\n format(time: number): string {\n return this.formatter.format(time);\n }\n}\n\nconst TimeUtilInstance: TimeUtil = new TimeUtil();\nexport default TimeUtilInstance as TimeUtil;"],"file":"TimeUtil.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js b/deps/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js deleted file mode 100644 index 1ad130e66..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/welcome-page-scripts.js +++ /dev/null @@ -1,89 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -var isWelcomePage = function () { - var winHash = window.location.hash; - return winHash === '#/'; -}; - -var toggleReact = function () { - var welcomeScreen = document.getElementById("welcomeScreen"); - var spinnerScreen = document.getElementById("spinner_screen"); - var reactScreen = document.getElementById("main_react_container"); - - if (!isWelcomePage() && !isReactLoading) { - if (welcomeScreen) welcomeScreen.style.display = 'none'; - if (spinnerScreen) spinnerScreen.style.display = 'none'; - if (reactScreen) reactScreen.style.display = 'block'; - if (reactScreen) reactScreen.style.height = '100%'; - } else if (!isWelcomePage() && isReactLoading) { - if (welcomeScreen) welcomeScreen.style.display = 'none'; - if (reactScreen) reactScreen.style.display = 'none'; - if (spinnerScreen) spinnerScreen.style.display = 'block'; - if (spinnerScreen) spinnerScreen.style.height = '100%'; - } else { - if (reactScreen) reactScreen.style.display = 'none'; - if (spinnerScreen) spinnerScreen.style.display = 'none'; - if (welcomeScreen) welcomeScreen.style.display = 'block'; - if (welcomeScreen) welcomeScreen.style.height = '100%'; - } -}; - -function loggedInUserName() { - let userName = l18nMsg['unknownUser']; - if (keycloak.tokenParsed) { - const givenName = keycloak.tokenParsed.given_name; - const familyName = keycloak.tokenParsed.family_name; - const preferredUsername = keycloak.tokenParsed.preferred_username; - if (givenName && familyName) { - userName = [givenName, familyName].reduce((acc, value, index) => - acc.replace('{{param_'+ index + '}}', value), l18nMsg['fullName'] - ); - } else { - userName = (givenName || familyName) || preferredUsername || userName; - } - } - return sanitize(userName); -} - -function sanitize(dirtyString) { - let element = document.createElement("span"); - element.textContent = dirtyString; - return element.innerHTML; -} - -var toggleMobileDropdown = function () { - var mobileDropdown = document.getElementById("landingMobileDropdown"); - var mobileKebab = document.getElementById("landingMobileKebab"); - var mobileKebabButton = document.getElementById("landingMobileKebabButton"); - if (mobileDropdown.style.display === 'none') { - mobileDropdown.style.display = 'block'; - mobileKebab.classList.add("pf-m-expanded"); - mobileKebabButton.setAttribute("aria-expanded", "true"); - } else { - mobileDropdown.style.display = 'none'; - mobileKebab.classList.remove("pf-m-expanded"); - mobileKebabButton.setAttribute("aria-expanded", "false"); - } -} - -var loadjs = function (url, loadListener) { - const script = document.createElement("script"); - script.src = resourceUrl + url; - script.type = "module"; - if (loadListener) - script.addEventListener("load", loadListener); - document.head.appendChild(script); -}; diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js deleted file mode 100644 index 36428d1f4..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js +++ /dev/null @@ -1,103 +0,0 @@ -function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } - -function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } - -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Modal, Button } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { Msg } from "./Msg.js"; -/** - * For any of these properties that are strings, you can - * pass in a localization key instead of a static string. - */ - -/** - * This class renders a button that provides a continue/cancel modal dialog when clicked. If the user selects 'Continue' - * then the onContinue function is executed. - * - * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc. - */ -export class ContinueCancelModal extends React.Component { - constructor(props) { - super(props); - - _defineProperty(this, "handleModalToggle", () => { - this.setState(({ - isModalOpen - }) => ({ - isModalOpen: !isModalOpen - })); - if (this.props.onClose) this.props.onClose(); - }); - - _defineProperty(this, "handleContinue", () => { - this.handleModalToggle(); - this.props.onContinue(); - }); - - this.state = { - isModalOpen: false - }; - } - - render() { - const { - isModalOpen - } = this.state; - return React.createElement(React.Fragment, null, !this.props.render && React.createElement(Button, { - id: this.props.buttonId, - variant: this.props.buttonVariant, - onClick: this.handleModalToggle, - isDisabled: this.props.isDisabled - }, React.createElement(Msg, { - msgKey: this.props.buttonTitle - })), this.props.render && this.props.render(this.handleModalToggle), React.createElement(Modal, _extends({}, this.props, { - title: Msg.localize(this.props.modalTitle), - isOpen: isModalOpen, - onClose: this.handleModalToggle, - actions: [React.createElement(Button, { - id: "modal-cancel", - key: "cancel", - variant: "secondary", - onClick: this.handleModalToggle - }, React.createElement(Msg, { - msgKey: this.props.modalCancelButtonLabel - })), React.createElement(Button, { - id: "modal-confirm", - key: "confirm", - variant: "primary", - onClick: this.handleContinue - }, React.createElement(Msg, { - msgKey: this.props.modalContinueButtonLabel - }))] - }), !this.props.modalMessage && this.props.children, this.props.modalMessage && React.createElement(Msg, { - msgKey: this.props.modalMessage - }))); - } - -} - -_defineProperty(ContinueCancelModal, "defaultProps", { - buttonVariant: 'primary', - modalContinueButtonLabel: 'continue', - modalCancelButtonLabel: 'doCancel', - isDisabled: false, - isSmall: true -}); - -; -//# sourceMappingURL=ContinueCancelModal.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map deleted file mode 100644 index 400933e7c..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ContinueCancelModal.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/ContinueCancelModal.tsx"],"names":["React","Modal","Button","Msg","ContinueCancelModal","Component","constructor","props","setState","isModalOpen","onClose","handleModalToggle","onContinue","state","render","buttonId","buttonVariant","isDisabled","buttonTitle","localize","modalTitle","modalCancelButtonLabel","handleContinue","modalContinueButtonLabel","modalMessage","children","isSmall"],"mappings":";;;;AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SAASC,KAAT,EAAgBC,MAAhB;AACA,SAAQC,GAAR;AAEA;;;;;AAuBA;;;;;;AAMA,OAAO,MAAMC,mBAAN,SAAkCJ,KAAK,CAACK,SAAxC,CAAsG;AASlGC,EAAAA,WAAP,CAAmBC,KAAnB,EAAoD;AAChD,UAAMA,KAAN;;AADgD,+CAOxB,MAAM;AAC9B,WAAKC,QAAL,CAAc,CAAC;AAAEC,QAAAA;AAAF,OAAD,MAAsB;AAChCA,QAAAA,WAAW,EAAE,CAACA;AADkB,OAAtB,CAAd;AAGA,UAAI,KAAKF,KAAL,CAAWG,OAAf,EAAwB,KAAKH,KAAL,CAAWG,OAAX;AAC3B,KAZmD;;AAAA,4CAc3B,MAAM;AAC3B,WAAKC,iBAAL;AACA,WAAKJ,KAAL,CAAWK,UAAX;AACH,KAjBmD;;AAEhD,SAAKC,KAAL,GAAa;AACTJ,MAAAA,WAAW,EAAE;AADJ,KAAb;AAGH;;AAcMK,EAAAA,MAAP,GAAiC;AAC7B,UAAM;AAAEL,MAAAA;AAAF,QAAkB,KAAKI,KAA7B;AAEA,WACI,oBAAC,KAAD,CAAO,QAAP,QACK,CAAC,KAAKN,KAAL,CAAWO,MAAZ,IACD,oBAAC,MAAD;AAAQ,MAAA,EAAE,EAAE,KAAKP,KAAL,CAAWQ,QAAvB;AAAiC,MAAA,OAAO,EAAE,KAAKR,KAAL,CAAWS,aAArD;AAAoE,MAAA,OAAO,EAAE,KAAKL,iBAAlF;AAAqG,MAAA,UAAU,EAAE,KAAKJ,KAAL,CAAWU;AAA5H,OACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKV,KAAL,CAAWW;AAAxB,MADJ,CAFJ,EAKK,KAAKX,KAAL,CAAWO,MAAX,IAAqB,KAAKP,KAAL,CAAWO,MAAX,CAAkB,KAAKH,iBAAvB,CAL1B,EAMI,oBAAC,KAAD,eACQ,KAAKJ,KADb;AAEI,MAAA,KAAK,EAAEJ,GAAG,CAACgB,QAAJ,CAAa,KAAKZ,KAAL,CAAWa,UAAxB,CAFX;AAGI,MAAA,MAAM,EAAEX,WAHZ;AAII,MAAA,OAAO,EAAE,KAAKE,iBAJlB;AAKI,MAAA,OAAO,EAAE,CACL,oBAAC,MAAD;AAAQ,QAAA,EAAE,EAAC,cAAX;AAA0B,QAAA,GAAG,EAAC,QAA9B;AAAuC,QAAA,OAAO,EAAC,WAA/C;AAA2D,QAAA,OAAO,EAAE,KAAKA;AAAzE,SACI,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAE,KAAKJ,KAAL,CAAWc;AAAxB,QADJ,CADK,EAIL,oBAAC,MAAD;AAAQ,QAAA,EAAE,EAAC,eAAX;AAA2B,QAAA,GAAG,EAAC,SAA/B;AAAyC,QAAA,OAAO,EAAC,SAAjD;AAA2D,QAAA,OAAO,EAAE,KAAKC;AAAzE,SACI,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAE,KAAKf,KAAL,CAAWgB;AAAxB,QADJ,CAJK;AALb,QAcM,CAAC,KAAKhB,KAAL,CAAWiB,YAAZ,IAA4B,KAAKjB,KAAL,CAAWkB,QAd7C,EAeM,KAAKlB,KAAL,CAAWiB,YAAX,IAA2B,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKjB,KAAL,CAAWiB;AAAxB,MAfjC,CANJ,CADJ;AA0BH;;AAzDwG;;gBAAhGpB,mB,kBACuB;AAC5BY,EAAAA,aAAa,EAAE,SADa;AAE5BO,EAAAA,wBAAwB,EAAE,UAFE;AAG5BF,EAAAA,sBAAsB,EAAE,UAHI;AAI5BJ,EAAAA,UAAU,EAAE,KAJgB;AAK5BS,EAAAA,OAAO,EAAE;AALmB,C;;AAyDnC","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport { Modal, Button, ButtonProps } from '@patternfly/react-core';\nimport {Msg} from './Msg';\n\n/**\n * For any of these properties that are strings, you can\n * pass in a localization key instead of a static string.\n */\ninterface ContinueCancelModalProps {\n buttonTitle?: string;\n buttonVariant?: ButtonProps['variant'];\n buttonId?: string;\n render?(toggle: () => void): React.ReactNode;\n modalTitle: string;\n modalMessage?: string;\n modalContinueButtonLabel?: string;\n modalCancelButtonLabel?: string;\n onContinue: () => void;\n onClose?: () => void;\n isDisabled?: boolean;\n isLarge?: boolean;\n}\n\ninterface ContinueCancelModalState {\n isModalOpen: boolean;\n}\n\n/**\n * This class renders a button that provides a continue/cancel modal dialog when clicked. If the user selects 'Continue'\n * then the onContinue function is executed.\n *\n * @author Stan Silvert ssilvert@redhat.com (C) 2019 Red Hat Inc.\n */\nexport class ContinueCancelModal extends React.Component {\n protected static defaultProps = {\n buttonVariant: 'primary',\n modalContinueButtonLabel: 'continue',\n modalCancelButtonLabel: 'doCancel',\n isDisabled: false,\n isSmall: true\n };\n\n public constructor(props: ContinueCancelModalProps) {\n super(props);\n this.state = {\n isModalOpen: false\n };\n }\n\n private handleModalToggle = () => {\n this.setState(({ isModalOpen }) => ({\n isModalOpen: !isModalOpen\n }));\n if (this.props.onClose) this.props.onClose();\n };\n\n private handleContinue = () => {\n this.handleModalToggle();\n this.props.onContinue();\n }\n\n public render(): React.ReactNode {\n const { isModalOpen } = this.state;\n\n return (\n \n {!this.props.render &&\n }\n {this.props.render && this.props.render(this.handleModalToggle)}\n \n \n ,\n \n ]}\n >\n { !this.props.modalMessage && this.props.children}\n { this.props.modalMessage && }\n \n \n );\n }\n};"],"file":"ContinueCancelModal.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js deleted file mode 100644 index f5ff45e1d..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { EmptyState, EmptyStateVariant, Title, EmptyStateIcon, TitleLevel, EmptyStateBody } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { Msg } from "./Msg.js"; -export default class EmptyMessageState extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement(EmptyState, { - variant: EmptyStateVariant.full - }, React.createElement(EmptyStateIcon, { - icon: this.props.icon - }), React.createElement(Title, { - headingLevel: TitleLevel.h5, - size: "lg" - }, React.createElement(Msg, { - msgKey: this.props.messageKey - })), React.createElement(EmptyStateBody, null, this.props.children)); - } - -} -//# sourceMappingURL=EmptyMessageState.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map deleted file mode 100644 index fd29a9f36..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/EmptyMessageState.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/EmptyMessageState.tsx"],"names":["React","EmptyState","EmptyStateVariant","Title","EmptyStateIcon","TitleLevel","EmptyStateBody","Msg","EmptyMessageState","Component","constructor","props","render","full","icon","h5","messageKey","children"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AACA,SACIC,UADJ,EAEIC,iBAFJ,EAGIC,KAHJ,EAIIC,cAJJ,EAKIC,UALJ,EAMIC,cANJ;AAUA,SAASC,GAAT;AAOA,eAAe,MAAMC,iBAAN,SAAgCR,KAAK,CAACS,SAAtC,CAA4E;AACvFC,EAAAA,WAAW,CAACC,KAAD,EAAgC;AACvC,UAAMA,KAAN;AACH;;AAEDC,EAAAA,MAAM,GAAG;AACL,WACI,oBAAC,UAAD;AAAY,MAAA,OAAO,EAAEV,iBAAiB,CAACW;AAAvC,OACI,oBAAC,cAAD;AAAgB,MAAA,IAAI,EAAE,KAAKF,KAAL,CAAWG;AAAjC,MADJ,EAEI,oBAAC,KAAD;AAAO,MAAA,YAAY,EAAET,UAAU,CAACU,EAAhC;AAAoC,MAAA,IAAI,EAAC;AAAzC,OACI,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAE,KAAKJ,KAAL,CAAWK;AAAxB,MADJ,CAFJ,EAKI,oBAAC,cAAD,QACK,KAAKL,KAAL,CAAWM,QADhB,CALJ,CADJ;AAWH;;AAjBsF","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\nimport {\n EmptyState,\n EmptyStateVariant,\n Title,\n EmptyStateIcon,\n TitleLevel,\n EmptyStateBody,\n IconProps,\n} from '@patternfly/react-core'\n\nimport { Msg } from './Msg';\n\nexport interface EmptyMessageStateProps {\n icon: React.FunctionComponent;\n messageKey: string;\n}\n\nexport default class EmptyMessageState extends React.Component {\n constructor(props: EmptyMessageStateProps) {\n super(props);\n }\n\n render() {\n return (\n \n \n \n <Msg msgKey={this.props.messageKey} />\n \n \n {this.props.children}\n \n \n );\n }\n}"],"file":"EmptyMessageState.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js deleted file mode 100644 index 2eceeec5b..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2019 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { FormSelect, FormSelectOption } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { Msg } from "./Msg.js"; -; -export class LocaleSelector extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement(FormSelect, { - id: "locale-select", - value: this.props.value, - onChange: (value, event) => { - if (this.props.onChange) this.props.onChange(value, event); - }, - "aria-label": Msg.localize('selectLocale') - }, availableLocales.map((locale, index) => React.createElement(FormSelectOption, { - key: index, - value: locale.locale, - label: locale.label - }))); - } - -} -//# sourceMappingURL=LocaleSelectors.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map deleted file mode 100644 index dedd82fcf..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/LocaleSelectors.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/LocaleSelectors.tsx"],"names":["React","FormSelect","FormSelectOption","Msg","LocaleSelector","Component","constructor","props","render","value","event","onChange","localize","availableLocales","map","locale","index","label"],"mappings":"AAAA;;;;;;;;;;;;;;;AAeA,OAAO,KAAKA,KAAZ;AAEA,SACIC,UADJ,EAEIC,gBAFJ;AAKA,SAASC,GAAT;AAKC;AAKD,OAAO,MAAMC,cAAN,SAA6BJ,KAAK,CAACK,SAAnC,CAAuF;AAE1FC,EAAAA,WAAW,CAACC,KAAD,EAA6B;AACpC,UAAMA,KAAN;AACH;;AAEDC,EAAAA,MAAM,GAAoB;AACtB,WACI,oBAAC,UAAD;AACI,MAAA,EAAE,EAAC,eADP;AAEI,MAAA,KAAK,EAAE,KAAKD,KAAL,CAAWE,KAFtB;AAGI,MAAA,QAAQ,EAAE,CAACA,KAAD,EAAQC,KAAR,KAAkB;AAAE,YAAI,KAAKH,KAAL,CAAWI,QAAf,EAAyB,KAAKJ,KAAL,CAAWI,QAAX,CAAoBF,KAApB,EAA2BC,KAA3B;AAAmC,OAH9F;AAII,oBAAYP,GAAG,CAACS,QAAJ,CAAa,cAAb;AAJhB,OAMKC,gBAAgB,CAACC,GAAjB,CAAqB,CAACC,MAAD,EAASC,KAAT,KAClB,oBAAC,gBAAD;AACI,MAAA,GAAG,EAAEA,KADT;AAEI,MAAA,KAAK,EAAED,MAAM,CAACA,MAFlB;AAGI,MAAA,KAAK,EAAEA,MAAM,CAACE;AAHlB,MADH,CANL,CADJ;AAgBH;;AAvByF","sourcesContent":["/*\n * Copyright 2019 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport * as React from 'react';\n\nimport {\n FormSelect,\n FormSelectOption,\n FormSelectProps\n} from '@patternfly/react-core';\nimport { Msg } from './Msg';\n\ninterface AvailableLocale {\n locale: string;\n label: string;\n};\ndeclare const availableLocales: [AvailableLocale];\n\ninterface LocaleSelectorProps extends Omit { }\ninterface LocaleSelectorState { }\nexport class LocaleSelector extends React.Component {\n\n constructor(props: LocaleSelectorProps) {\n super(props);\n }\n\n render(): React.ReactNode {\n return (\n { if (this.props.onChange) this.props.onChange(value, event) }}\n aria-label={Msg.localize('selectLocale')}\n >\n {availableLocales.map((locale, index) =>\n )\n }\n \n );\n }\n}"],"file":"LocaleSelectors.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js deleted file mode 100644 index d7454f1c8..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Msg } from "./Msg.js"; -import { KeycloakContext } from "../keycloak-service/KeycloakContext.js"; -import { Button, DropdownItem } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; - -function handleLogout(keycloak) { - keycloak.logout(); -} - -export class LogoutButton extends React.Component { - render() { - return React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(Button, { - id: "signOutButton", - onClick: () => handleLogout(keycloak) - }, React.createElement(Msg, { - msgKey: "doSignOut" - }))); - } - -} -export class LogoutDropdownItem extends React.Component { - render() { - return React.createElement(KeycloakContext.Consumer, null, keycloak => React.createElement(DropdownItem, { - id: "signOutLink", - key: "logout", - onClick: () => handleLogout(keycloak) - }, Msg.localize('doSignOut'))); - } - -} -//# sourceMappingURL=Logout.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map deleted file mode 100644 index adebe3891..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Logout.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/Logout.tsx"],"names":["React","Msg","KeycloakContext","Button","DropdownItem","handleLogout","keycloak","logout","LogoutButton","Component","render","LogoutDropdownItem","localize"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAEA,SAAQC,GAAR;AAEA,SAASC,eAAT;AAEA,SAAQC,MAAR,EAAgBC,YAAhB;;AAEA,SAASC,YAAT,CAAsBC,QAAtB,EAAuD;AACnDA,EAAAA,QAAQ,CAACC,MAAT;AACH;;AAGD,OAAO,MAAMC,YAAN,SAA2BR,KAAK,CAACS,SAAjC,CAAwD;AACpDC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,eAAD,CAAiB,QAAjB,QACEJ,QAAQ,IACN,oBAAC,MAAD;AAAQ,MAAA,EAAE,EAAC,eAAX;AAA2B,MAAA,OAAO,EAAE,MAAMD,YAAY,CAACC,QAAD;AAAtD,OAAmE,oBAAC,GAAD;AAAK,MAAA,MAAM,EAAC;AAAZ,MAAnE,CAFJ,CADJ;AAQH;;AAV0D;AAc/D,OAAO,MAAMK,kBAAN,SAAiCX,KAAK,CAACS,SAAvC,CAA0E;AACtEC,EAAAA,MAAP,GAAiC;AAC7B,WACI,oBAAC,eAAD,CAAiB,QAAjB,QACMJ,QAAQ,IACV,oBAAC,YAAD;AAAc,MAAA,EAAE,EAAC,aAAjB;AAA+B,MAAA,GAAG,EAAC,QAAnC;AAA4C,MAAA,OAAO,EAAE,MAAMD,YAAY,CAACC,QAAD;AAAvE,OACKL,GAAG,CAACW,QAAJ,CAAa,WAAb,CADL,CAFJ,CADJ;AASH;;AAX4E","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Msg} from './Msg';\nimport {KeycloakService} from '../keycloak-service/keycloak.service';\nimport { KeycloakContext } from '../keycloak-service/KeycloakContext';\n\nimport {Button, DropdownItem} from '@patternfly/react-core';\n\nfunction handleLogout(keycloak: KeycloakService): void {\n keycloak.logout();\n}\n\ninterface LogoutProps {}\nexport class LogoutButton extends React.Component {\n public render(): React.ReactNode {\n return (\n \n { keycloak => (\n \n )}\n \n\n );\n }\n}\n\ninterface LogoutDropdownItemProps {}\nexport class LogoutDropdownItem extends React.Component {\n public render(): React.ReactNode {\n return (\n \n { keycloak => (\n handleLogout(keycloak!)}>\n {Msg.localize('doSignOut')}\n \n )}\n \n );\n }\n}"],"file":"Logout.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js deleted file mode 100644 index cdae6f9a9..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -export class Msg extends React.Component { - constructor(props) { - super(props); - } - - render() { - if (this.props.children) { - return Msg.localizeWithChildren(this.props.msgKey, this.props.children); - } - - return React.createElement(React.Fragment, null, Msg.localize(this.props.msgKey, this.props.params)); - } - - static localizeWithChildren(msgKey, children) { - const message = l18nMsg[this.processKey(msgKey)]; - const parts = message.split(/\{\{param_\d*}}/); - const count = React.Children.count(children); - return React.Children.map(children, (child, i) => [parts[i], child, count === i + 1 ? parts[count] : '']); - } - - static localize(msgKey, params) { - let message = l18nMsg[this.processKey(msgKey)]; - if (message === undefined) message = msgKey; - - if (params !== undefined && params.length > 0) { - params.forEach((value, index) => { - value = this.processParam(value); - message = message.replace('{{param_' + index + '}}', value); - }); - } - - return unescape(message); - } // if the message key has Freemarker syntax, remove it - - - static processKey(msgKey) { - if (!(msgKey.startsWith('${') && msgKey.endsWith('}'))) return msgKey; // remove Freemarker syntax - - return msgKey.substring(2, msgKey.length - 1); - } // if the param has Freemarker syntax, try to look up its value - - - static processParam(param) { - if (!(param.startsWith('${') && param.endsWith('}'))) return param; // remove Freemarker syntax - - const key = param.substring(2, param.length - 1); - let value = l18nMsg[key]; - if (value === undefined) return param; - return value; - } - -} -//# sourceMappingURL=Msg.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map deleted file mode 100644 index 18c5d013a..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/Msg.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/Msg.tsx"],"names":["React","Msg","Component","constructor","props","render","children","localizeWithChildren","msgKey","localize","params","message","l18nMsg","processKey","parts","split","count","Children","map","child","i","undefined","length","forEach","value","index","processParam","replace","unescape","startsWith","endsWith","substring","param","key"],"mappings":"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","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\ndeclare const l18nMsg: {[key: string]: string};\n\nexport interface MsgProps {\n readonly msgKey: string;\n readonly params?: string[];\n}\n\nexport class Msg extends React.Component {\n\n public constructor(props: MsgProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n if (this.props.children) {\n return Msg.localizeWithChildren(this.props.msgKey, this.props.children);\n }\n return (\n {Msg.localize(this.props.msgKey, this.props.params)}\n );\n }\n\n private static localizeWithChildren(msgKey: string, children: React.ReactNode): React.ReactNode {\n const message: string = l18nMsg[this.processKey(msgKey)];\n const parts = message.split(/\\{\\{param_\\d*}}/);\n const count = React.Children.count(children);\n return React.Children.map(children, (child, i) =>\n [parts[i], child, count === i + 1 ? parts[count] : '']\n );\n }\n\n public static localize(msgKey: string, params?: string[]): string {\n let message: string = l18nMsg[this.processKey(msgKey)];\n if (message === undefined) message = msgKey;\n\n if ((params !== undefined) && (params.length > 0)) {\n params.forEach((value: string, index: number) => {\n value = this.processParam(value);\n message = message.replace('{{param_'+ index + '}}', value);\n })\n }\n\n return unescape(message);\n }\n\n // if the message key has Freemarker syntax, remove it\n private static processKey(msgKey: string): string {\n if (!(msgKey.startsWith('${') && msgKey.endsWith('}'))) return msgKey;\n\n // remove Freemarker syntax\n return msgKey.substring(2, msgKey.length - 1);\n }\n\n // if the param has Freemarker syntax, try to look up its value\n private static processParam(param: string): string {\n if (!(param.startsWith('${') && param.endsWith('}'))) return param;\n\n // remove Freemarker syntax\n const key: string = param.substring(2, param.length - 1);\n\n let value: string = l18nMsg[key];\n if (value === undefined) return param;\n\n return value;\n }\n}\n"],"file":"Msg.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js deleted file mode 100644 index 3bb39c968..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Msg } from "./Msg.js"; -import { DropdownItem } from "../../../common/keycloak/web_modules/@patternfly/react-core.js"; -import { ArrowIcon } from "../../../common/keycloak/web_modules/@patternfly/react-icons.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc. - */ -export class ReferrerDropdownItem extends React.Component { - constructor(props) { - super(props); - } - - render() { - return React.createElement(DropdownItem, { - id: "referrerMobileLink", - href: referrerUri - }, React.createElement(ArrowIcon, null), " ", Msg.localize('backTo', [referrerName])); - } - -} -; -//# sourceMappingURL=ReferrerDropdownItem.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map deleted file mode 100644 index 53ae24b3b..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerDropdownItem.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/ReferrerDropdownItem.tsx"],"names":["React","Msg","DropdownItem","ArrowIcon","ReferrerDropdownItem","Component","constructor","props","render","referrerUri","localize","referrerName"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAEA,SAAQC,GAAR;AAEA,SAAQC,YAAR;AACA,SAAQC,SAAR;;AAQA;;;AAGA,OAAO,MAAMC,oBAAN,SAAmCJ,KAAK,CAACK,SAAzC,CAA8E;AAE1EC,EAAAA,WAAP,CAAmBC,KAAnB,EAAqD;AACjD,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAE7B,WACI,oBAAC,YAAD;AAAc,MAAA,EAAE,EAAC,oBAAjB;AAAsC,MAAA,IAAI,EAAEC;AAA5C,OACI,oBAAC,SAAD,OADJ,OACmBR,GAAG,CAACS,QAAJ,CAAa,QAAb,EAAuB,CAACC,YAAD,CAAvB,CADnB,CADJ;AAKH;;AAbgF;AAcpF","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Msg} from '../widgets/Msg';\n\nimport {DropdownItem} from '@patternfly/react-core';\nimport {ArrowIcon} from '@patternfly/react-icons';\n\ndeclare const referrerName: string;\ndeclare const referrerUri: string;\n\nexport interface ReferrerDropdownItemProps {\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class ReferrerDropdownItem extends React.Component {\n\n public constructor(props: ReferrerDropdownItemProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n\n return (\n \n {Msg.localize('backTo', [referrerName])}\n \n );\n }\n};"],"file":"ReferrerDropdownItem.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js deleted file mode 100644 index 76a1db076..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2018 Red Hat, Inc. and/or its affiliates. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -import * as React from "../../../common/keycloak/web_modules/react.js"; -import { Msg } from "./Msg.js"; -import { ArrowIcon } from "../../../common/keycloak/web_modules/@patternfly/react-icons.js"; - -/** - * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc. - */ -export class ReferrerLink extends React.Component { - constructor(props) { - super(props); - } - - render() { - return (// '_hash_' is a workaround for when uri encoding is not - // sufficient to escape the # character properly. - // See AppInitiatedActionPage for more details. - React.createElement("a", { - id: "referrerLink", - href: referrerUri.replace('_hash_', '#') - }, React.createElement(ArrowIcon, null), " ", React.createElement(Msg, { - msgKey: "backTo", - params: [referrerName] - })) - ); - } - -} -; -//# sourceMappingURL=ReferrerLink.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map deleted file mode 100644 index 5329df023..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/ReferrerLink.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/app/widgets/ReferrerLink.tsx"],"names":["React","Msg","ArrowIcon","ReferrerLink","Component","constructor","props","render","referrerUri","replace","referrerName"],"mappings":"AAAA;;;;;;;;;;;;;;;AAgBA,OAAO,KAAKA,KAAZ;AAEA,SAAQC,GAAR;AAEA,SAAQC,SAAR;;AAQA;;;AAGA,OAAO,MAAMC,YAAN,SAA2BH,KAAK,CAACI,SAAjC,CAA8D;AAE1DC,EAAAA,WAAP,CAAmBC,KAAnB,EAA6C;AACzC,UAAMA,KAAN;AACH;;AAEMC,EAAAA,MAAP,GAAiC;AAC7B,WACI;AACA;AACA;AACA;AAAG,QAAA,EAAE,EAAC,cAAN;AAAqB,QAAA,IAAI,EAAEC,WAAW,CAACC,OAAZ,CAAoB,QAApB,EAA8B,GAA9B;AAA3B,SACG,oBAAC,SAAD,OADH,OACgB,oBAAC,GAAD;AAAK,QAAA,MAAM,EAAC,QAAZ;AAAqB,QAAA,MAAM,EAAE,CAACC,YAAD;AAA7B,QADhB;AAJJ;AAQH;;AAfgE;AAgBpE","sourcesContent":["/*\n * Copyright 2018 Red Hat, Inc. and/or its affiliates.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport * as React from 'react';\n\nimport {Msg} from './Msg';\n\nimport {ArrowIcon} from '@patternfly/react-icons';\n \ndeclare const referrerName: string;\ndeclare const referrerUri: string;\n\nexport interface ReferrerLinkProps {\n}\n\n/**\n * @author Stan Silvert ssilvert@redhat.com (C) 2018 Red Hat Inc.\n */\nexport class ReferrerLink extends React.Component {\n\n public constructor(props: ReferrerLinkProps) {\n super(props);\n }\n\n public render(): React.ReactNode {\n return (\n // '_hash_' is a workaround for when uri encoding is not\n // sufficient to escape the # character properly.\n // See AppInitiatedActionPage for more details.\n \n \n \n );\n }\n};"],"file":"ReferrerLink.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js deleted file mode 100644 index ae7446a80..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js +++ /dev/null @@ -1,2 +0,0 @@ - -//# sourceMappingURL=features.js.map \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map b/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map deleted file mode 100644 index d74cab803..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/resources/widgets/features.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"features.js"} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak.v2/account/theme.properties b/deps/keycloak/themes/keycloak.v2/account/theme.properties deleted file mode 100644 index b41dd5bd9..000000000 --- a/deps/keycloak/themes/keycloak.v2/account/theme.properties +++ /dev/null @@ -1,16 +0,0 @@ -parent=base -deprecatedMode=false -scripts=welcome-page-scripts.js -developmentMode=false - -# This is the logo in upper lefthand corner. -# It must be a relative path. -logo=/public/logo.svg - -# This is the link followed when clicking on the logo. -# It can be any valid URL, including an external site. -logoUrl=./ - -# This is the icon for the account console. -# It must be a relative path. -favIcon=/public/favicon.ico diff --git a/deps/keycloak/themes/keycloak/account/resources/css/account.css b/deps/keycloak/themes/keycloak/account/resources/css/account.css deleted file mode 100644 index 3878e43ac..000000000 --- a/deps/keycloak/themes/keycloak/account/resources/css/account.css +++ /dev/null @@ -1,277 +0,0 @@ -html { - height: 100%; -} - -body { - background-color: #F9F9F9; - margin: 0; - padding: 0; - height: 100%; -} - -header .navbar { - margin-bottom: 0; - min-height: inherit; -} - -.header .container { - position: relative; -} - -.navbar-title { - background-image: url('../img/logo.png'); - height: 25px; - background-repeat: no-repeat; - width: 123px; - margin: 3px 10px 5px; - text-indent: -99999px; -} - -.navbar-pf .navbar-utility { - right: 20px; - top: -34px; - font-size: 12px; -} - -.navbar-pf .navbar-utility > li > a { - color: #fff !important; - padding-bottom: 12px; - padding-top: 11px; - border-left: medium none; -} - -.container { - height: 100%; -} - -.content-area { - background-color: #fff; - border-color: #CECECE; - border-style: solid; - border-width: 0 1px; - height: 100%; - padding: 0 30px; -} - -.margin-bottom { - margin-bottom: 10px; -} - -/* Sidebar */ - -.bs-sidebar { - background-color: #f9f9f9; - padding-top: 44px; - padding-right: 0; - padding-left: 0; - z-index: 20; -} -.bs-sidebar ul { - list-style: none; - padding-left: 12px; -} - -.bs-sidebar ul li { - margin-bottom: 0.5em; - margin-left: -1em; -} -.bs-sidebar ul li a { - font-size: 14px; - padding-left: 25px; - color: #4d5258; - line-height: 28px; - display: block; - border-width: 1px 0 1px 1px; - border-style: solid; - border-color: #f9f9f9; -} -.bs-sidebar ul li a:hover, -.bs-sidebar ul li a:focus { - text-decoration: none; - color: #777777; - border-right: 2px solid #aaa; -} -.bs-sidebar ul li.active a { - background-color: #c7e5f0; - border-color: #56bae0; - font-weight: bold; - background-image: url(../img/icon-sidebar-active.png); - background-repeat: no-repeat; - background-position: right center; -} - -.bs-sidebar ul li.active a:hover { - border-right: none; -} - - -.content-area h2 { - font-family: "Open Sans", sans-serif; - font-weight: 100; - font-size: 24px; - margin-bottom: 25px; - margin-top: 25px; -} - -.subtitle { - text-align: right; - margin-top: 30px; - color: #909090; -} - -.required { - color: #CB2915; -} - - -.alert { - margin-top: 30px; - margin-bottom: 0; -} - -.feedback-aligner .alert { - background-position: 1.27273em center; - background-repeat: no-repeat; - border-radius: 2px; - border-width: 1px; - color: #4D5258; - display: inline-block; - font-size: 1.1em; - line-height: 1.4em; - margin: 0; - padding: 0.909091em 3.63636em; - position: relative; - text-align: left; -} -.alert.alert-success { - background-color: #E4F1E1; - border-color: #4B9E39; -} -.alert.alert-error { - background-color: #F8E7E7; - border-color: #B91415; -} -.alert.alert-warning { - background-color: #FEF1E9; - border-color: #F17528; -} -.alert.alert-info { - background-color: #E4F3FA; - border-color: #5994B2; -} - -.form-horizontal { - border-top: 1px solid #E9E8E8; - padding-top: 23px; -} - -.form-horizontal .control-label { - color: #909090; - line-height: 1.4em; - padding-top: 5px; - position: relative; - text-align: right; - width: 100%; -} - -.form-group { - position: relative; -} - -.control-label + .required { - position: absolute; - right: -2px; - top: 0; -} - -#kc-form-buttons { - text-align: right; - margin-top: 10px; -} - -#kc-form-buttons .btn-primary { - float: right; - margin-left: 8px; -} - -/* Authenticator page */ - -ol { - padding-left: 40px; -} - -ol li { - font-size: 13px; - margin-bottom: 10px; - position: relative; -} - -ol li img { - margin-top: 15px; - margin-bottom: 5px; - border: 1px solid #eee; -} - -hr + .form-horizontal { - border: none; - padding-top: 0; -} - -.kc-dropdown{ - position: relative; -} -.kc-dropdown > a{ - display:block; - padding: 11px 10px 12px; - line-height: 12px; - font-size: 12px; - color: #fff !important; - text-decoration: none; -} -.kc-dropdown > a::after{ - content: "\2c5"; - margin-left: 4px; -} -.kc-dropdown:hover > a{ - background-color: rgba(0,0,0,0.2); -} -.kc-dropdown ul li a{ - padding: 1px 11px; - font-size: 12px; - color: #000 !important; - border: 1px solid #fff; - text-decoration: none; - display:block; - line-height: 20px; -} -.kc-dropdown ul li a:hover{ - color: #4d5258; - background-color: #d4edfa; - border-color: #b3d3e7; -} -.kc-dropdown ul{ - position: absolute; - z-index: 2000; - list-style:none; - display:none; - padding: 5px 0px; - margin: 0px; - background-color: #fff !important; - border: 1px solid #b6b6b6; - border-radius: 1px; - -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); - background-clip: padding-box; - min-width: 100px; -} -.kc-dropdown:hover ul{ - display:block; -} - - -#kc-totp-secret-key { - border: 1px solid #eee; - font-size: 16px; - padding: 10px; - margin: 50px 0; -} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/account/resources/img/icon-sidebar-active.png b/deps/keycloak/themes/keycloak/account/resources/img/icon-sidebar-active.png deleted file mode 100644 index e7b9b082836b728286e1962f7d2efc81ddbe0b71..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 202 zcmeAS@N?(olHy`uVBq!ia0vp^;y}#D!3HFcd~W{?q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c73FxkIEGZ*N=jIun2<7~^e}_RcjiI`=UK zVCeYHtShu&-DyXLq!)E7W+-p1Ilz&A@c@&Xh}=}&gd+kA7qR+CC9YLuAP#kTzP zOOabP0l+XkKxNbyD diff --git a/deps/keycloak/themes/keycloak/account/resources/img/keycloak-logo.png b/deps/keycloak/themes/keycloak/account/resources/img/keycloak-logo.png deleted file mode 100644 index 955574855d493cc248e112b7d755a95d641613f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5213 zcmaJ_cT^MW_6;H;A{{Ig2}nmmLJ1`F5)_dlMWjee0)&ua5}GuDDd;Q004kV_lCCd z$(VTZ2%kN3@~%d%Rh$f$DTuoi6M`ef!=8i&XrKrVXrM06-U)4twnus0Z$~Qw0JK6F z)4P7-%Op7um(2nhVUq`w07 z_5c4+9PaOEGQ}AEU%mfGOg8l*qNR<|WP%$Bd2(=$SAVA>!nH_fdkTSMN+7uY)kPy` z0);?!CJ=#ICQzW5zC99y|GgppCqiEzu8SvA?D0snuC|Kc2?q#+LBX|UWWZoeZ72)@ zg+L$(Sr|k|3!$T^2!(*XZGXTKaqpPi9>N&b(&ER87tvY^vYr8#_^(_0gHjoST ztL*JvNpJBQXJ6LA>U7*SmPZn6gY;%Trx`1aEF{92?&t|>aF*R{Lt@SgJ>)!V1r*rV zk!imrQ*pdX5}8OI6Ox70rM3C2eKY9ZOCcZs`qG`k`c^$GbCZ_eDAAa~Q(z<|dG_Ty zb^s^9kJj2LufQBClr7P8K}4)?!{+w1&14>G{=#Q~$0_9xRY(ID##RI-@^ z|8ACygkMTDWj5lc#T@!u`Sacx@>ax_W*55PN8yj^fUQr%>;eA}c(ZUZ*Iv_iYR5Gs+>vonoU5g>S zt*a{%H2>WA*AoGiWUIxOLvo21kL|k9M2}o%nmW1F)KnDMoGn2jFTd~)5_u!kCEsl2 zio?s}MChGmXF#t+0d@yjLw`EVVfj=l^U4G7O7KvsLv4y*gUp$;m-ox*oFm)5G^Mal zxAd*c*JpTT?MG)YtIH(4^7aJO?loTZzwyOzJIDaKRy^ zS$c^q9uPm{Wv6!^DT$^W3*R)*3i*UnXVnC?PGP#TOq{6)k7LcP4e(cN@=Jn`DJHa* zdHtqZY>h_;Se#PH4=LjO7wwq!CwMyg;|7E;^Ad5zw4kqlxAmpHF9u1HFdKehR{D8l zYDMQr$JR9zhs4`(sHxplfd?Ch0IweJ^|+7igz$Me_?_OgTB}uC3ki6;^mBDKtE#dx zx%FGj<*a>^`eHUYsA|BG*LK)BF+{rl;kBcLPR9pcSQ*^TcL46eJAsj<46zR1Zunm85wPJ0O|mSWx#K=Z~fbFhw(o|XkxXhG-s{^JC-faw;d8h&mW z4!eE%;~Ul zt&Qm@7&N8x;vQ>n9SG84`L6Gq3BN5~Zq?dr_W-jo+5UY7A1y+!Kdq^_MNqApzxW)!@(|3!{l%?*?%D$P2r zTb*lYK6*4}{d1d`MTb>QKZriJr+j!m!KG`k)Vmt!wYBA@(&t!fYApec;!pK`uc)LTd*Qw963t}nZelff%`S@Mto_3F3IF0Ww zJHkj}^6=6(ru&on4*trI+GFlTc|p_V$+oV)TvJMoEG@&l>Ie6nmqf*UGX<^R+ksZk zVy_kC4QbwkpB{*S1brVs<|d_dPPWECLCLoU?i|GxUobP$u!wUpP!P)Q|KiB9md0%foVFL z=5MU}@U*P&^qP!r-Tf|Y)Gvm}eBtfZ)YGev&c{7q3{oySRg~aX7Hk!IzsMmOXkT4^ z*?VX(YRSVs0+(Fy=IwA)P!}Xk=?RsSK4Xl|mosJGf$i{$oxgSdzV_05#ck1s1|A~G z)Rm>$#*zUj*Ijdley1;dL!_^_PQ|%pB%WhP!*8N|rEIU1PgbT(4SiM?O~kT`OM^ z_x6kKjPmWMeau%S?{;hRNx4Bca&{#{lNpYFbPzRDRLw1AksFbfWsz!Q<3cgBGMNdi zd%aj6Ncx;iLDbZ|e0>w5ko0X*&uvDV*huzF@4B1kcM(;ZZm`OEHQNk_#;KHQCE2`I zdI%#^MpFhBCWxaz)U5NNK|d@>=Qx$QZ8y69KR7dXRh ztt(wuxTzJ4we`;2xEnAXTieRw96cZ9@pj`9qt$NvwXQ*-9j~vUF?=~DPi@wIZr2Un ztY81Y@>+CH$kj+EvVAkMlFf3X%AymZ+4}Ue$f6GltX?Om)S1bLp+y+f#>x#Clvqa^ zm4Tr5lU_witBrWsPP8OGEswoEGm{maHcpk?Syy1M|ACS~To3MTZmbob(Ntx6yr7As z*VdBVHhr7jmZB0`K<$P-d2D@`u$*~|O1(Uxsw%3j_8dCLF`!*)my{N;5eD7+pnRqi zY5ztXd#l=Ot>9) zvKAYjsZ7f`kSg2<4*A|Q%z~sKkHxR`vS?_~xv}--W(Fip1N%joRuGKChfHjF7xgdY zpV6wPX*e1R7FGVx)8jeY64^2TQ9L+uWZ3eYO}7H?mRo=Ij))<`wnn&B@i~|on|Ivn zA|HDX6=Ewo>e}vle{<7J$yu%rGm2EXI=kLfjlZ#6tq@Z%ptn}6d2EfNX}LyH?*?y{ zXr;BT@1}3Et|ckdyN1I1s?>IX{j-%n_b27qNI9dvWaghRqjy$wcR; zjFJ?MhE!I{&T!$+@|QxFB^@MT^M z?QH+b+v$I4*as4v1U}~5{W@2ou(;{X<}1R0lVicDvbPWDJW&`e)lma=Uu(@8=S&e> z%TyeW#qjJAI2#+CH&evW+sk#*$?ojjw-_fBz(?~V!$00X?o+DYNwk@G_Y~UFlOwhN zq<@gDY!T+v6cv<7buJ28DlmDDS&u*D?6irpkA3|U@+GR-dy)zZo?7^ZMi(Zg z^+GbR4fQe6#kXkb6t43j*oUFlA#)?2h9>U_B^c-MMO#~Zj}d90wsGs}8cETGy)g)X z!h#-fxray;(&J6|9IC-H+2LNya`t@TBkO~QR6X@YX&*UQ<5K=S?K_HX>9%I)`g?GK z{;gN}Y-85<27QKK7kRh0eo`;sPk0qGx^t)CtqwNkX|K}yo9{{bdf(fsJx8|>v^d9M z$!Ud(J5C{16;@ru8K_nsZU)`vU>R3W<5(DZRb@6m{ayTPo+`pY_7JH zO;=Y7f9}n>GMqQ{hB=~^v2(udkE4USVacL$HI^$(sxNDP6-~xOPGuP7@M#bAobdy-KSQ4a|9$Omt{j}fk zdsx^BIu7MrQPz^cZ*Jq&jqJQEFbg+)4j%I^(4C>sTT*u(q2Bchlj|&Gjwlr<08MAOBVKg2JRYd6*G6v^$#WAObvg#?#6cSOLPwJ z$n4pePe>=E>yYL_&H^vw-O}-T;*R~1?Dp4(LSJMyPwWB;VOVZS+~l#x3}roKz_CBt z>g(u~>G(BUE?39pyIWIxHQQapj}W3Hnp)?Ra^YZge{py&_#-95&fm5}vN(O_^YHgR z+oOnSktZ)5cJN$lRV~U#GLd1+2FD%ZK)u?yGryj^OrtETe?3xtRg$g0FYDYiAPeh2 z(bUqEZXbafk0s;cW7oc1V(72JqKt^d%dmD3iTGD zAHA30s^{QkpFW*%Rh^^VQZ*Fqw2}8h>4WG)?@_^OY1ubC0ZT3#S*Cqe-5CK~0 zfP36pr50(3z(?fbsyWwse7O*nXxintDlAGF1<297V-yU0e6hrWrHrp=B(q0yS9o*( z?HA{9lL4Mo*G;R)?WI@iKg15=Y55J(u6s2WRg2&4iFRygUd4BvXJC}NubF!Yt>LME zSU#g(&8|8_hu#RdB~0ojp?!_>mszTX7Lw}^#a_KCT@xr3yf5Gx!Et$#WrY3mZGs5D zaka|MWJmQlJr1b1TNW6RSDHSBU-N48ZZHgrG|=|(SKnYw)YGG<*o54VjX1^@s65&Kat00004b3#c}2nYxW zd-{Qv*}8FWQhbW?9;ba!ELWdL_~cP?peYja~^ zaAhuUa%Y?FJQ@H154lN1K~!jg?OJ_sRYjKnoxbZ*79oIc%s&gnj<`!%5jl$MrWVy!&@Agd*w^Pt8U z(|6;>jo}~AwiQ1SR7(VF?OgmYLjyo($8mo11KYOZCjvEBIdbI4K>*%siT*v|TWf#5 zVZ(;1A0eX^7ZB&H>@j1;H~^l(k25p?1eH>Aex!_6TtGNYD|+?nbsvBU>2-$+i}7)f zD{;JIA=(lnv!O0UJ9=p`qBoC4^18JCl`*PrLQU>2?K(6!yjb!D9f5FM8_)uz%3)ILQRv`4WUn%D~yVjXDsK zrzcIC6!@tp(u)5ZjkfCb>(}q<)~(xsk2>$7}gdzPC@)aPU9|B3jl~lV+aIXSZkxfV2}g=1P~F?+RrH{C|C{P65p7> zRRacGNfc)RfDb?X@M#gbMQa^YN_~FKHP@8v*s)^)K&5~HN?EJ*DPwFVAVJ^vl~Ss~ zahxZNFc`CaiRwB4uSKKL z2g=LKPdC>t6bfZ!WMo!)o|j2P-iZ_66)#@A*lWsHUS9ql1Kmla{;8*)`dK>dp_wz6 zlgI#TS&Xs!Q!9J*>eZ!1#l-{i^Yf7`yKNBfpNt~YQ8<2aF95*gd`6Fg_Q=oA$F-eu zFsdDc88~j@p7TECqAsTs^78U=(M6q*pP!Eo9XhmW*REY=PP=xQIXUezb8~arY}>ZY z6_M+-)&s?Iarz)X_@MG}0KX=p-j3sRF~&>-03y2Daa5s*6dK>Z)LMHLv+WO{x8pcH znfVH>bGjiR%y`E5dc5!JB5Q4T zBKd8~*hNJ}s}!AG=uvI()V^=xv~HboRAt~|S8#70H|p%+4i;@l@L?3_?ietD6%Cm% z)}(ld2qHKK#uz0cNb44rm6iWOB*|l&5Ydq9ufKjj09b3op67#^AwtKDv7ZB|wwCuO zrK&{auu|&tTW`JfjEKyXc&Aif-|$*eer|62Wg-X|qany8y6u?W=Qgb8}N?Y7xQG zLp7+b_s}sjhRczt%Gf+X$+Riw|@Lt_hsob*Q=A zp2$u2g38K|#)z2bhzQIgfQ%V9aNzc|apffCFq@l)4lUW;oB{w~=+L1H-g;}(!%C@( z9Y+;y+O+8wX8u%b^AE;o0MOal*)v{w<&`1K{Evz8SOT8-_~Vafg+d_)fR!s(c2-Kg z2dH2m;M~ztf9Y7VWJxE0<}%xaSeknO{r4|U($}n6Gx^B3-@Ylr!vHwG)^7mlo1{Pa z3unlV?56T5xD>`efso!*qDm5DwE;Q%%5Kg0P5Li zpUo~VE`Gq;_`p~MH4QN=IamV#=+?bEB5-hJCSyc9NlJh*2FW)6oa3XbD>$No4v2f> zTV5t&jW&U^){e(YK!Ap1U1eou31D9#B3R3?*8FavhuWTQXaFcHE3;lKb_W2HXwYZ&?AhIubfwfIM#n{y<7`gIfwgkZ zMU{wTD-~aX)22U=Z2ZO=87cXACIVHFEWtY7b37q($Yy)x_j%^t-H4*%RBG9kj{70O*d^8kzFEy z=Xu?&<$eG`1mE3u+ig!L*i!jIMljguB$CAB$&>Yj2@}pFzpb^I%oY&g=J<`#Ln*NZ zIgV;}9_8ibr-_`@uBB99C;&YE_~VyrZLR_UA{7SnaDa|_UJP1$gUidyFHM&tA`}P& zAtK6JyEah^0Q2U}o3}EZSM~1I>lcX$AR3M0SbY@hzCH;>3VnO_z{nh6VjiOpd5C#2 z#9~ostznG;^Vzu$%hDLar_f)YMj#SKWz50qh71_XaeiwdiGD~>MY6zk?nuUB5y?pM9zTBk ztETPG2Wc)50YD^O<4(=+eg9C4?MXgO`|1#H>r@z{2>{4ZvqPZ}TjAwOIdB{o$x}u; zm~ApnrgUblJx3Snz<~qXqR}XPKc4vHWw;p8H5UVV7UEN6;addpk;%jt#)U~3%`%@8 zgg4iO@$UYE*mtN3yKEZ(z@1q!s05oa2GK|aT5D+Sqq@2pMASxW4LUcV_uRR2=kJ-Jl3eK$!bqGZ=H3R)Y8$YvrMl{U5q zw{PFx=nN|&I=T9-wWTE`CB-ErCB;J%rKF_fpPE-IzZdUML45GfeASbU~_hM_H+?AzOUi?K78N* z4Ks&~F;miXpdyi2%7|L~nT`|Ba~;>+2d(w_l-(?v z*+CGA)X&m7d7P79tz5P0u}~hgx{P_##rH7?Oixzbh!B%FQ#mq3qZVrdTb;j8HeBXoCev2Uj0F3cx;;grk?|T5? z<+X4B_X`)!Uu`YF>UlAU2r1>R3xz`QdxNBa|Ea8OXqTOx1prDph+2ygN3!sZAq>f4 zgxyT!lf}PhpM;xshCc2Ylx{zah+z~L6=Anzp(vp7`|R%^+&F(pH_$upywhg*@ZpC= z)G6;AmKc4>Yh!Wb0!AWtj z(QCZA7gn7>#4vhwD!?Aef+Ao>*6DLLx#m`tF(xV^a9uZ@kD2*KW6T+A4YbxHw`|$+ zD*#YLgsTfe*#xg z1fCG;qcH%$1}_U=*PcQ+9L7gSPhvw&7>X3k#oZwQZnU-NSa%esPMyN(a2Vn68Pqp4 z_@_^wZiqyqu}CBuYiNi@Z@A$GBO(WwdB0L>Z@Tga4I1>V=Xv9Nt@l}DKR4FiBO+w2 zt)w__HGpansTPrHrBsztYM)Z-OW&A%O^s=-KBBeWXN-S9YhB%xPDFC&op(N9tt}S8 za-~$2<2bcMbV?xWT-O~uY0{)yrcRye#pRg;%s9Zz)k-;^6VV=PxytjrYTx&(Mf3>( zc<{joSJu|nc61!)caGzJqLd0N<$kSwe;W~vtEi~x9SVgGheDxzfKEG(TODxS&9i6E z-rRJI05E&@?AMLa|LwYNH4&V#W5?#iV%`B?`_)RRgXz4_J@?#ao)^2<^J06o)`wZ- zkw(j{w6wInwYCaC$7J1^{La{R$D(RxzVrgfX~hM=InR<3_rlWvw4D2YKls+#hkvAuR$M?d`?_@9x^>$D zy!s<$&u@Kf__u`?pAtKc^DuzO50qPDjCt}0wr#~vg#QKf*2_tH span { - -moz-box-sizing: border-box; - color: white; - float: left; - font-size: 11px; - font-family: "Open Sans", sans-serif; - font-weight: bold; - height: 24px; - line-height: 24px; - padding: 0; - width: 50%; -} -.onoffswitch .onoffswitch-switch { - background-image: linear-gradient(top, #fafafa 0%, #ededed 100%); - background-image: -o-linear-gradient(top, #fafafa 0%, #ededed 100%); - background-image: -moz-linear-gradient(top, #fafafa 0%, #ededed 100%); - background-image: -webkit-linear-gradient(top, #fafafa 0%, #ededed 100%); - background-image: -ms-linear-gradient(top, #fafafa 0%, #ededed 100%); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #fafafa), color-stop(1, 0, #ededed)); - border: 1px solid #aaa; - border-radius: 2px; - bottom: 0; - margin: 0; - position: absolute; - right: 39px; - top: 0; - transition: all 0.3s ease-in 0s; - -webkit-transition: all 0.3s ease-in 0s; - width: 23px; -} -.onoffswitch .onoffswitch-inner .onoffswitch-active { - background-image: linear-gradient(top, #00a9ec 0%, #009bd3 100%); - background-image: -o-linear-gradient(top, #00a9ec 0%, #009bd3 100%); - background-image: -moz-linear-gradient(top, #00a9ec 0%, #009bd3 100%); - background-image: -webkit-linear-gradient(top, #00a9ec 0%, #009bd3 100%); - background-image: -ms-linear-gradient(top, #00a9ec 0%, #009bd3 100%); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0, #00a9ec), color-stop(1, 0, #009bd3)); - color: #FFFFFF; - padding-left: 10px; -} -.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-active, -.onoffswitch-checkbox:disabled + .onoffswitch-label .onoffswitch-inner .onoffswitch-inactive { - background-image: none; - background-color: #e5e5e5; - color: #9d9fa1; -} -.onoffswitch .onoffswitch-inner .onoffswitch-inactive { - background: linear-gradient(#fefefe, #e8e8e8) repeat scroll 0 0 transparent; - color: #4d5258; - padding-right: 10px; - text-align: right; -} -.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-inner { - margin-left: 0; -} -.onoffswitch .onoffswitch-checkbox:checked + .onoffswitch-label .onoffswitch-switch { - right: 0; -} - - -/*********** Select 2 ***********/ - -.select2-container { - width: 100%; -} - -.select2-container-multi .select2-choices .select2-search-field { - height: 26px; -} - -.select2-container-single { - padding: 0; - margin: 0; -} - -.select2-container-single .form-group { - width: 100%; - margin: 0; -} - -.select2-container-single .form-group .input-group { - width: 100%; -} - -/*********** html select ********/ -.overflow-select { - overflow: auto; -} - - -/*********** New Menu ***********/ - - -.sidebar-pf-left{ - background: #292e34; -} - -.sidebar-pf .nav-pills > li a i, .sidebar-pf .nav-pills > li a span{ - color: #72767b; - display: inline-block; - margin-right: 10px; -} -.sidebar-pf .nav-pills > li > a{ - color: #dbdada; - padding: 0px 20px 0 30px!important; - line-height: 30px; - border-left-width: 12px; - border-left-style: solid; - border-left-color: #292e34; - margin-left: -6px; -} - -.sidebar-pf .nav-pills > li > a:hover{ - background: #393f44; - border-color:#292e34; - border-left-color: #393f44; - color: #fff; -} - -.sidebar-pf .nav-pills > li > a:after{ - display: none!important; -} - - -.sidebar-pf .nav-pills > li.active > a { - color: #fff; - background: #393f44!important; - border-bottom: 1px solid #000!important; - border-top: 1px solid #000!important; - border-left-color: #39a5dc!important; -} - -.sidebar-pf .nav-pills > li.active a i, .sidebar-pf .nav-pills > li.active a span{ - color: #39a5dc; -} - -/*********** Realm selector ***********/ - -.realm-selector{ - color: #fff; - margin: 0 -20px; - position: relative; -} - -.realm-dropmenu{ - display: none; - cursor: pointer; - position: absolute; - top: 60px; - left: 0; - right: 0; - z-index: 999; - background: #fff; -} - -.realm-selector:hover .realm-dropmenu{ - display: block; -} - -.realm-add{ - padding: 10px; -} - -.realm-selector h2{ - font-size: 16px; - line-height: 60px; - padding: 0 20px; - margin: 0; - border-bottom: 1px solid #d5d5d6; -} - -.realm-selector h2 i{ - display: inline-block; - float: right; - line-height: 60px; -} - - -.realm-selector ul{ - padding-left: 0; - margin: 0; - list-style: none; - max-height: 200px; - overflow-y:auto; -} - - -.realm-selector ul li a{ - line-height: 60px; - padding: 0 20px; - border-bottom: 1px solid #d5d5d6; - line-height: 39px; - display: block; - font-size: 14px; -} - - -/*********** Overwrites header defaults ***********/ - -.navbar-pf{ - border-top: none!important; -} - -.navbar-pf .navbar-brand { - padding: 0; - height: 56px; - line-height: 56px; - background-position: center center; - background-image: url('../img/keyclok-logo.png'); - background-size: 148px 30px; - background-repeat: no-repeat; - width: 148px; -} - -.navbar-pf .navbar-utility .dropdown-toggle { - padding: 23px !important; -} - -.clickable { - cursor: pointer; -} - -h1 i { - color: #999999; - font-size: 18px; - margin-left: 10px; -} - -/* Action cell */ -.kc-action-cell { - background-color: #eeeeee; - background-image: linear-gradient(to bottom, #fafafa 0%, #ededed 100%); - background-repeat: repeat-x; - - text-align: center; - vertical-align: middle; - - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; - - cursor:pointer; -} - -.kc-action-cell:hover { - background-color: #eeeeee; - background-image: none; -} - -.kc-action-cell-disabled { - background-color: #fafafa; - color: #8b8d8f; - background-image: none; - cursor: not-allowed; -} - -.kc-sorter span { - margin-left: 10px; -} - - -/* Time selector */ - -.time-selector input { - display: inline-block; - width: 120px; - padding-right: 0; - margin-right: 0; -} - -.time-selector select { - display: inline-block; - width: 80px; - margin-left: 0; - padding-left: 0; -} - -.ace_editor { - height: 600px; - width: 100%; -} - -.kc-button-input-file input { - float: left; - width: 73%; -} - -.kc-button-input-file label { - float: left; - margin-left: 2%; - width: 25%; -} - -table.kc-authz-table-expanded { - margin-top: 0px !important; -} - -.no-gutter > [class*='col-'] { - padding-right:0!important; - padding-left:0!important; -} - -.password-conceal { - font-family: 'text-security-disc'; - font-size: 14px; -} - -/* Deactivation styles for user-group membership tree models */ - -div[tree-model] li .deactivate { - color: #4a5053; - opacity: 0.4; -} - -div[tree-model] li .deactivate_selected { - background-color: #dcdcdc; - font-weight: bold; - padding: 1px 5px; -} - -/* search highlighting */ - -div[tree-model] li .highlight { - background-color: #aaddff; -} - -/* Manage credentials */ -table.credentials-table { - margin-top: 0; - margin-bottom: 20px; -} - -table.credentials-table td { - vertical-align: middle !important; -} - -table.credentials-table input[type='text'] { - width: 100%; -} - -td.credential-arrows-cell { - width: 75px; -} - -td.credential-label-cell { - padding: 5px !important; -} - -td.credential-action-cell { - padding: 0px !important; -} - -td.credential-action-cell div.kc-action-cell { - width: 100%; - height: 36px; - line-height: 34px; -} - -td.credential-action-cell.expanded div.kc-action-cell { - border-bottom: 1px solid #d1d1d1; -} - -table.credential-data-table td { - word-break: break-all; -} - -table.credential-data-table tr:first-child td { - border-top: 0; -} - -table.credential-data-table td:first-child { - width: 150px; -} - -table.credential-data-table td.key { - text-align: right; - font-weight: bold; -} - diff --git a/deps/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.png b/deps/keycloak/themes/keycloak/admin/resources/img/keyclok-logo.png deleted file mode 100644 index ca53f0a04ba97029b387ada299ae4b454b54ccd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5268 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 akN*dX+`h$pZtd{^0000 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/keycloak/themes/keycloak/admin/resources/img/select-arrow.png b/deps/keycloak/themes/keycloak/admin/resources/img/select-arrow.png deleted file mode 100644 index a865a6fa7324e054cffa6e1878d69438780b20c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1154 zcmbVMTWHfz7>p*_>aXo9GTd$y`I14I@;lVM5JhweKRY3LHQC7fY1b^;WQwQUZl zZ_DPjwq`A+Q}I<~jVEFP6CjoJ%#!7boBlvw?V=p`?Z&9uZobt9Ob)oP#nEs*8W&c;ICuXx!@E2M)bdlwvIE#@G8ws*Pl;dI?8%xx(sU$BXLTpf}aEyknRX9Ex zim)s%ggGwB*G7`bSSXr`29=P4X)D;YTqMb3NA3NLQ&>ArT2 zA9uH-Ywx;_@dpP62I76EH_hHudfZ-m_3_D@=eypgs=j~y@N$1<+s2d9fz493b7t>b zdi$;G;Cc4Oy<=aF_s6}ZOI9R~$+;sl=AP@Cwm_P2^Y!Ofnm`u?`7EDZT zU@#004h&*6qDT$3A+1HARIlxQw0Gw~Fqjw}@R{Bx@00f{&kMVRw3Fz%ejPaV7yTE* zFfRVFfUfKNfww^PA5AYAhLPDOVn^Z@5Uq#8eCj{K^1uiH-%|sWPn^Z+JGia8uj_ip zZxduPnQOLfKTs5fNvoYXN5LH&;bDG;iSDDcboJ0G%bfWzLoC#S@B5!sRW1H1Fh4(U zCK8G8Z0;+U=JG_6dl~BMWvaKyqfNox4TZyDm6NS?PHPsf>mtkY)(X?p)044SEDSKQ zTqY7~#q8?iUXO?Cx}0ybNC=-sv&nO(ja);Zsw$GSbv}_!r^h5o;>pJq=GIKi)BxwS zIvtLQX_~mM%k55!1cRzr-Bk6$hn3YADC!p(StiU*sn$CQ!;;MuB0(GzS&ySNfE*{22sK>&cF zD98ZA!^0c7Ty9jX6mNc<6~^+fSY63eDwURie5q8*?sVcL zaG@TFvod&`Xu~G?W|nd+MRD*L$@~KG!V to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.","unsafe":"Attempting to use an unsafe value in a safe context.","itype":"Attempted to trust a non-string value in a content requiring a string: Context: {0}"},"ngPattern":{"noregexp":"Expected {0} to be a RegExp but was {1}. Element: {2}"},"$controller":{"ctrlfmt":"Badly formed controller string '{0}'. Must match `__name__ as __id__` or `__name__`.","noscp":"Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`."},"$parse":{"isecfn":"Referencing Function in Angular expressions is disallowed! Expression: {0}","isecwindow":"Referencing the Window in Angular expressions is disallowed! Expression: {0}","ueoe":"Unexpected end of expression: {0}","isecdom":"Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}","lexerr":"Lexer Error: {0} at column{1} in expression [{2}].","esc":"IMPOSSIBLE","isecobj":"Referencing Object in Angular expressions is disallowed! Expression: {0}","lval":"Trying to assing a value to a non l-value","isecff":"Referencing call, apply or bind in Angular expressions is disallowed! Expression: {0}","syntax":"Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].","isecfld":"Attempting to access a disallowed field in Angular expressions! Expression: {0}"},"jqLite":{"offargs":"jqLite#off() does not support the `selector` argument","onargs":"jqLite#on() does not support the `selector` or `eventData` parameters","nosel":"Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element"},"$animate":{"notcsel":"Expecting class selector starting with '.' got '{0}'.","nongcls":"$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the \"{0}\" CSS class."},"$q":{"norslvr":"Expected resolverFn, got '{0}'","qcycle":"Expected promise to be resolved with value other than itself '{0}'"},"$injector":{"pget":"Provider '{0}' must define $get factory method.","cdep":"Circular dependency found: {0}","nomod":"Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.","strictdi":"{0} is not using explicit annotation and cannot be invoked in strict mode","modulerr":"Failed to instantiate module {0} due to:\n{1}","undef":"Provider '{0}' must return a value from $get factory method.","unpr":"Unknown provider: {0}","itkn":"Incorrect injection token! Expected service name as string, got {0}"},"filter":{"notarray":"Expected array but received: {0}"},"ngTransclude":{"orphan":"Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}"},"ngModel":{"nonassign":"Expression '{0}' is non-assignable. Element: {1}","datefmt":"Expected `{0}` to be a date","$asyncValidators":"Expected asynchronous validator to return a promise but got '{0}' instead.","constexpr":"Expected constant expression for `{0}`, but saw `{1}`.","numfmt":"Expected `{0}` to be a number"},"$location":{"nostate":"History API state support is available only in HTML5 mode and only in browsers supporting HTML5 History API","ipthprfx":"Invalid url \"{0}\", missing path prefix \"{1}\".","isrcharg":"The first argument of the `$location#search()` call must be a string or an object.","nobase":"$location in HTML5 mode requires a tag to be present!"},"$cacheFactory":{"iid":"CacheId '{0}' is already taken!"},"$interpolate":{"noconcat":"Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce","interr":"Can't interpolate: {0}\n{1}","nochgmustache":"angular-message-format.js currently does not allow you to use custom start and end symbols for interpolation.","reqcomma":"Expected a comma after the keyword “{0}†at line {1}, column {2} of text “{3}â€","untermstr":"The string beginning at line {0}, column {1} is unterminated in text “{2}â€","badexpr":"Unexpected operator “{0}†at line {1}, column {2} in text. Was expecting “{3}â€. Text: “{4}â€","dupvalue":"The choice “{0}†is specified more than once. Duplicate key is at line {1}, column {2} in text “{3}â€","unsafe":"Use of select/plural MessageFormat syntax is currently disallowed in a secure context ({0}). At line {1}, column {2} of text “{3}â€","reqother":"“other†is a required option.","reqendinterp":"Expecting end of interpolation symbol, “{0}â€, at line {1}, column {2} in text “{3}â€","reqarg":"Expected one of “plural†or “select†at line {0}, column {1} of text “{2}â€","wantstring":"Expected the beginning of a string at line {0}, column {1} in text “{2}â€","logicbug":"The messageformat parser has encountered an internal error. Please file a github issue against the AngularJS project and provide this message text that triggers the bug. Text: “{0}â€","reqopenbrace":"The plural choice “{0}†must be followed by a message in braces at line {1}, column {2} in text “{3}â€","unknarg":"Unsupported keyword “{0}†at line {0}, column {1}. Only “plural†and “select†are currently supported. Text: “{3}â€","reqendbrace":"The plural/select choice “{0}†message starting at line {1}, column {2} does not have an ending closing brace. Text “{3}â€"},"ngOptions":{"iexp":"Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}"},"$rootScope":{"inprog":"{0} already in progress","infdig":"{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}"},"$compile":{"noident":"Cannot bind to controller without identifier for directive '{0}'.","selmulti":"Binding to the 'multiple' attribute is not supported. Element: {0}","nodomevents":"Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.","ctreq":"Controller '{0}', required by directive '{1}', can't be found!","nonassign":"Expression '{0}' used with directive '{1}' is non-assignable!","tplrt":"Template for directive '{0}' must have exactly one root element. {1}","iscp":"Invalid {3} for directive '{0}'. Definition: {... {1}: '{2}' ...}","baddir":"Directive name '{0}' is invalid. The name should not contain leading or trailing whitespaces","noctrl":"Cannot bind to controller without directive '{0}'s controller.","multidir":"Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}","tpload":"Failed to load template: {0} (HTTP status: {1} {2})","uterdir":"Unterminated attribute, found '{0}' but no matching '{1}' found."},"$resource":{"badargs":"Expected up to 4 arguments [params, data, success, error], got {0} arguments","badmember":"Dotted member path \"@{0}\" is invalid.","badname":"hasOwnProperty is not a valid parameter name.","badcfg":"Error in resource configuration for action `{0}`. Expected response to contain an {1} but got an {2} (Request: {3} {4})"},"$route":{"norout":"Tried updating route when with no current route"},"$sanitize":{"badparse":"The sanitizer was unable to parse the following block of html: {0}"}}} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE b/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE deleted file mode 100644 index 514acd345..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Steve - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js b/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js deleted file mode 100644 index 0e6512a1b..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.js +++ /dev/null @@ -1,97 +0,0 @@ -/* - @license Angular Treeview version 0.1.6 - â“’ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview - License: MIT - - - [TREE attribute] - angular-treeview: the treeview directive - tree-id : each tree's unique id. - tree-model : the tree model on $scope. - node-id : each node's id - node-label : each node's label - node-children: each node's children - -
    -
    -*/ - -(function ( angular ) { - 'use strict'; - - angular.module( 'angularTreeview', [] ).directive( 'treeModel', ['$compile', function( $compile ) { - return { - restrict: 'A', - link: function ( scope, element, attrs ) { - //tree id - var treeId = attrs.treeId; - - //tree model - var treeModel = attrs.treeModel; - - //node id - var nodeId = attrs.nodeId || 'id'; - - //node label - var nodeLabel = attrs.nodeLabel || 'label'; - - //children - var nodeChildren = attrs.nodeChildren || 'children'; - - //tree template - - var template = - '
      ' + - '
    • ' + - '' + - '{{node.' + nodeLabel + '}}' + - '
      ' + - '
    • ' + - '
    '; - - - //check tree id, tree model - if( treeId && treeModel ) { - //root node - if( attrs.angularTreeview ) { - - //create tree object if not exists - scope[treeId] = scope[treeId] || {}; - - //if node head clicks, - scope[treeId].selectNodeHead = scope[treeId].selectNodeHead || function( selectedNode ){ - - //Collapse or Expand - selectedNode.collapsed = !selectedNode.collapsed; - scope[treeId].selectNodeLabel(selectedNode); - }; - - //if node label clicks, - scope[treeId].selectNodeLabel = scope[treeId].selectNodeLabel || function( selectedNode ){ - - //remove highlight from previous node - if( scope[treeId].currentNode && scope[treeId].currentNode.selected ) { - scope[treeId].currentNode.selected = undefined; - } - - //set highlight to selected node - selectedNode.selected = 'selected'; - - //set currentNode - scope[treeId].currentNode = selectedNode; - }; - } - - //Rendering template. - element.html('').append( $compile( template )( scope ) ); - } - } - }; - }]); -})( angular ); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js deleted file mode 100644 index e02a85bbb..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/angular/treeview/angular.treeview.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - @license Angular Treeview version 0.1.6 - â“’ 2013 AHN JAE-HA http://github.com/eu81273/angular.treeview - License: MIT -*/ - -(function(f){f.module("angularTreeview",[]).directive("treeModel",function($compile){return{restrict:"A",link:function(b,h,c){var a=c.treeId,g=c.treeModel,e=c.nodeLabel||"label",d=c.nodeChildren||"children",e='
    • {{node.'+e+'}}
      Nn{1`ISV`@iy0WK`GA@ZGfr^Q{|ywBDshb{3C>R|DNig)We7;j%q!9Ja}7}_ zGuAWJGc+*xQnV1Ls?5{HF~q_@`N#kN_7dyg6#nVwKYT?o*@Af$gZ7S1+u2q#x?~?q zWAL1Hk@vurInfPW7a8i#vM|J*wY@EVsIb=8CPGJBozth8;cIT&&89cu6C_TArOaOV zsvtv+;X@XiEBmJXy4KzYB-k?2jTIY$jW*L74G){)!Z!pj3%#L`iUdT1k0gQ7S_~VrE{6o}X)oLYc9i zsh**M!Iz?iKvf-{E{-7<{>eZ7|F?IQSgoKb(OSIY?h|_>w`qr4ANFiLy32t})Zu7= z$%149#%*se+OX`q^5_4-bzBB+<)RU~Vay#YJ9r(+80Bniz2q)4Y>3~eajfm);Z`fQ zGv@;s*<}nR)`;C@*sy;CPHH$418>P78iIN|1ZhV;4m`+Ct6UXE{ZK({e?y85}Sb4q9e0F?+}6aWAK diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js b/deps/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js deleted file mode 100644 index bcca1cd97..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/angular/ui-bootstrap-tpls-0.11.0.js +++ /dev/null @@ -1,4116 +0,0 @@ -/* - * angular-ui-bootstrap - * http://angular-ui.github.io/bootstrap/ - - * Version: 0.11.0 - 2014-05-01 - * License: MIT - */ -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"]); -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"]); -angular.module('ui.bootstrap.transition', []) - -/** - * $transition service provides a consistent interface to trigger CSS 3 transitions and to be informed when they complete. - * @param {DOMElement} element The DOMElement that will be animated. - * @param {string|object|function} trigger The thing that will cause the transition to start: - * - As a string, it represents the css class to be added to the element. - * - As an object, it represents a hash of style attributes to be applied to the element. - * - As a function, it represents a function to be called that will cause the transition to occur. - * @return {Promise} A promise that is resolved when the transition finishes. - */ -.factory('$transition', ['$q', '$timeout', '$rootScope', function($q, $timeout, $rootScope) { - - var $transition = function(element, trigger, options) { - options = options || {}; - var deferred = $q.defer(); - var endEventName = $transition[options.animation ? 'animationEndEventName' : 'transitionEndEventName']; - - var transitionEndHandler = function(event) { - $rootScope.$apply(function() { - element.unbind(endEventName, transitionEndHandler); - deferred.resolve(element); - }); - }; - - if (endEventName) { - element.bind(endEventName, transitionEndHandler); - } - - // Wrap in a timeout to allow the browser time to update the DOM before the transition is to occur - $timeout(function() { - if ( angular.isString(trigger) ) { - element.addClass(trigger); - } else if ( angular.isFunction(trigger) ) { - trigger(element); - } else if ( angular.isObject(trigger) ) { - element.css(trigger); - } - //If browser does not support transitions, instantly resolve - if ( !endEventName ) { - deferred.resolve(element); - } - }); - - // Add our custom cancel function to the promise that is returned - // We can call this if we are about to run a new transition, which we know will prevent this transition from ending, - // i.e. it will therefore never raise a transitionEnd event for that transition - deferred.promise.cancel = function() { - if ( endEventName ) { - element.unbind(endEventName, transitionEndHandler); - } - deferred.reject('Transition cancelled'); - }; - - return deferred.promise; - }; - - // Work out the name of the transitionEnd event - var transElement = document.createElement('trans'); - var transitionEndEventNames = { - 'WebkitTransition': 'webkitTransitionEnd', - 'MozTransition': 'transitionend', - 'OTransition': 'oTransitionEnd', - 'transition': 'transitionend' - }; - var animationEndEventNames = { - 'WebkitTransition': 'webkitAnimationEnd', - 'MozTransition': 'animationend', - 'OTransition': 'oAnimationEnd', - 'transition': 'animationend' - }; - function findEndEventName(endEventNames) { - for (var name in endEventNames){ - if (transElement.style[name] !== undefined) { - return endEventNames[name]; - } - } - } - $transition.transitionEndEventName = findEndEventName(transitionEndEventNames); - $transition.animationEndEventName = findEndEventName(animationEndEventNames); - return $transition; -}]); - -angular.module('ui.bootstrap.collapse', ['ui.bootstrap.transition']) - - .directive('collapse', ['$transition', function ($transition) { - - return { - link: function (scope, element, attrs) { - - var initialAnimSkip = true; - var currentTransition; - - function doTransition(change) { - var newTransition = $transition(element, change); - if (currentTransition) { - currentTransition.cancel(); - } - currentTransition = newTransition; - newTransition.then(newTransitionDone, newTransitionDone); - return newTransition; - - function newTransitionDone() { - // Make sure it's this transition, otherwise, leave it alone. - if (currentTransition === newTransition) { - currentTransition = undefined; - } - } - } - - function expand() { - if (initialAnimSkip) { - initialAnimSkip = false; - expandDone(); - } else { - element.removeClass('collapse').addClass('collapsing'); - doTransition({ height: element[0].scrollHeight + 'px' }).then(expandDone); - } - } - - function expandDone() { - element.removeClass('collapsing'); - element.addClass('collapse in'); - element.css({height: 'auto'}); - } - - function collapse() { - if (initialAnimSkip) { - initialAnimSkip = false; - collapseDone(); - element.css({height: 0}); - } else { - // CSS transitions don't work with height: auto, so we have to manually change the height to a specific value - element.css({ height: element[0].scrollHeight + 'px' }); - //trigger reflow so a browser realizes that height was updated from auto to a specific value - var x = element[0].offsetWidth; - - element.removeClass('collapse in').addClass('collapsing'); - - doTransition({ height: 0 }).then(collapseDone); - } - } - - function collapseDone() { - element.removeClass('collapsing'); - element.addClass('collapse'); - } - - scope.$watch(attrs.collapse, function (shouldCollapse) { - if (shouldCollapse) { - collapse(); - } else { - expand(); - } - }); - } - }; - }]); - -angular.module('ui.bootstrap.accordion', ['ui.bootstrap.collapse']) - -.constant('accordionConfig', { - closeOthers: true -}) - -.controller('AccordionController', ['$scope', '$attrs', 'accordionConfig', function ($scope, $attrs, accordionConfig) { - - // This array keeps track of the accordion groups - this.groups = []; - - // Ensure that all the groups in this accordion are closed, unless close-others explicitly says not to - this.closeOthers = function(openGroup) { - var closeOthers = angular.isDefined($attrs.closeOthers) ? $scope.$eval($attrs.closeOthers) : accordionConfig.closeOthers; - if ( closeOthers ) { - angular.forEach(this.groups, function (group) { - if ( group !== openGroup ) { - group.isOpen = false; - } - }); - } - }; - - // This is called from the accordion-group directive to add itself to the accordion - this.addGroup = function(groupScope) { - var that = this; - this.groups.push(groupScope); - - groupScope.$on('$destroy', function (event) { - that.removeGroup(groupScope); - }); - }; - - // This is called from the accordion-group directive when to remove itself - this.removeGroup = function(group) { - var index = this.groups.indexOf(group); - if ( index !== -1 ) { - this.groups.splice(index, 1); - } - }; - -}]) - -// The accordion directive simply sets up the directive controller -// and adds an accordion CSS class to itself element. -.directive('accordion', function () { - return { - restrict:'EA', - controller:'AccordionController', - transclude: true, - replace: false, - templateUrl: 'template/accordion/accordion.html' - }; -}) - -// The accordion-group directive indicates a block of html that will expand and collapse in an accordion -.directive('accordionGroup', function() { - return { - require:'^accordion', // We need this directive to be inside an accordion - restrict:'EA', - transclude:true, // It transcludes the contents of the directive into the template - replace: true, // The element containing the directive will be replaced with the template - templateUrl:'template/accordion/accordion-group.html', - scope: { - heading: '@', // Interpolate the heading attribute onto this scope - isOpen: '=?', - isDisabled: '=?' - }, - controller: function() { - this.setHeading = function(element) { - this.heading = element; - }; - }, - link: function(scope, element, attrs, accordionCtrl) { - accordionCtrl.addGroup(scope); - - scope.$watch('isOpen', function(value) { - if ( value ) { - accordionCtrl.closeOthers(scope); - } - }); - - scope.toggleOpen = function() { - if ( !scope.isDisabled ) { - scope.isOpen = !scope.isOpen; - } - }; - } - }; -}) - -// Use accordion-heading below an accordion-group to provide a heading containing HTML -// -// Heading containing HTML - -// -.directive('accordionHeading', function() { - return { - restrict: 'EA', - transclude: true, // Grab the contents to be used as the heading - template: '', // In effect remove this element! - replace: true, - require: '^accordionGroup', - link: function(scope, element, attr, accordionGroupCtrl, transclude) { - // Pass the heading to the accordion-group controller - // so that it can be transcluded into the right place in the template - // [The second parameter to transclude causes the elements to be cloned so that they work in ng-repeat] - accordionGroupCtrl.setHeading(transclude(scope, function() {})); - } - }; -}) - -// Use in the accordion-group template to indicate where you want the heading to be transcluded -// You must provide the property on the accordion-group controller that will hold the transcluded element -//
      -// -// ... -//
      -.directive('accordionTransclude', function() { - return { - require: '^accordionGroup', - link: function(scope, element, attr, controller) { - scope.$watch(function() { return controller[attr.accordionTransclude]; }, function(heading) { - if ( heading ) { - element.html(''); - element.append(heading); - } - }); - } - }; -}); - -angular.module('ui.bootstrap.alert', []) - -.controller('AlertController', ['$scope', '$attrs', function ($scope, $attrs) { - $scope.closeable = 'close' in $attrs; -}]) - -.directive('alert', function () { - return { - restrict:'EA', - controller:'AlertController', - templateUrl:'template/alert/alert.html', - transclude:true, - replace:true, - scope: { - type: '@', - close: '&' - } - }; -}); - -angular.module('ui.bootstrap.bindHtml', []) - - .directive('bindHtmlUnsafe', function () { - return function (scope, element, attr) { - element.addClass('ng-binding').data('$binding', attr.bindHtmlUnsafe); - scope.$watch(attr.bindHtmlUnsafe, function bindHtmlUnsafeWatchAction(value) { - element.html(value || ''); - }); - }; - }); -angular.module('ui.bootstrap.buttons', []) - -.constant('buttonConfig', { - activeClass: 'active', - toggleEvent: 'click' -}) - -.controller('ButtonsController', ['buttonConfig', function(buttonConfig) { - this.activeClass = buttonConfig.activeClass || 'active'; - this.toggleEvent = buttonConfig.toggleEvent || 'click'; -}]) - -.directive('btnRadio', function () { - return { - require: ['btnRadio', 'ngModel'], - controller: 'ButtonsController', - link: function (scope, element, attrs, ctrls) { - var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - //model -> UI - ngModelCtrl.$render = function () { - element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, scope.$eval(attrs.btnRadio))); - }; - - //ui->model - element.bind(buttonsCtrl.toggleEvent, function () { - var isActive = element.hasClass(buttonsCtrl.activeClass); - - if (!isActive || angular.isDefined(attrs.uncheckable)) { - scope.$apply(function () { - ngModelCtrl.$setViewValue(isActive ? null : scope.$eval(attrs.btnRadio)); - ngModelCtrl.$render(); - }); - } - }); - } - }; -}) - -.directive('btnCheckbox', function () { - return { - require: ['btnCheckbox', 'ngModel'], - controller: 'ButtonsController', - link: function (scope, element, attrs, ctrls) { - var buttonsCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - function getTrueValue() { - return getCheckboxValue(attrs.btnCheckboxTrue, true); - } - - function getFalseValue() { - return getCheckboxValue(attrs.btnCheckboxFalse, false); - } - - function getCheckboxValue(attributeValue, defaultValue) { - var val = scope.$eval(attributeValue); - return angular.isDefined(val) ? val : defaultValue; - } - - //model -> UI - ngModelCtrl.$render = function () { - element.toggleClass(buttonsCtrl.activeClass, angular.equals(ngModelCtrl.$modelValue, getTrueValue())); - }; - - //ui->model - element.bind(buttonsCtrl.toggleEvent, function () { - scope.$apply(function () { - ngModelCtrl.$setViewValue(element.hasClass(buttonsCtrl.activeClass) ? getFalseValue() : getTrueValue()); - ngModelCtrl.$render(); - }); - }); - } - }; -}); - -/** -* @ngdoc overview -* @name ui.bootstrap.carousel -* -* @description -* AngularJS version of an image carousel. -* -*/ -angular.module('ui.bootstrap.carousel', ['ui.bootstrap.transition']) -.controller('CarouselController', ['$scope', '$timeout', '$transition', function ($scope, $timeout, $transition) { - var self = this, - slides = self.slides = $scope.slides = [], - currentIndex = -1, - currentTimeout, isPlaying; - self.currentSlide = null; - - var destroyed = false; - /* direction: "prev" or "next" */ - self.select = $scope.select = function(nextSlide, direction) { - var nextIndex = slides.indexOf(nextSlide); - //Decide direction if it's not given - if (direction === undefined) { - direction = nextIndex > currentIndex ? 'next' : 'prev'; - } - if (nextSlide && nextSlide !== self.currentSlide) { - if ($scope.$currentTransition) { - $scope.$currentTransition.cancel(); - //Timeout so ng-class in template has time to fix classes for finished slide - $timeout(goNext); - } else { - goNext(); - } - } - function goNext() { - // Scope has been destroyed, stop here. - if (destroyed) { return; } - //If we have a slide to transition from and we have a transition type and we're allowed, go - if (self.currentSlide && angular.isString(direction) && !$scope.noTransition && nextSlide.$element) { - //We shouldn't do class manip in here, but it's the same weird thing bootstrap does. need to fix sometime - nextSlide.$element.addClass(direction); - var reflow = nextSlide.$element[0].offsetWidth; //force reflow - - //Set all other slides to stop doing their stuff for the new transition - angular.forEach(slides, function(slide) { - angular.extend(slide, {direction: '', entering: false, leaving: false, active: false}); - }); - angular.extend(nextSlide, {direction: direction, active: true, entering: true}); - angular.extend(self.currentSlide||{}, {direction: direction, leaving: true}); - - $scope.$currentTransition = $transition(nextSlide.$element, {}); - //We have to create new pointers inside a closure since next & current will change - (function(next,current) { - $scope.$currentTransition.then( - function(){ transitionDone(next, current); }, - function(){ transitionDone(next, current); } - ); - }(nextSlide, self.currentSlide)); - } else { - transitionDone(nextSlide, self.currentSlide); - } - self.currentSlide = nextSlide; - currentIndex = nextIndex; - //every time you change slides, reset the timer - restartTimer(); - } - function transitionDone(next, current) { - angular.extend(next, {direction: '', active: true, leaving: false, entering: false}); - angular.extend(current||{}, {direction: '', active: false, leaving: false, entering: false}); - $scope.$currentTransition = null; - } - }; - $scope.$on('$destroy', function () { - destroyed = true; - }); - - /* Allow outside people to call indexOf on slides array */ - self.indexOfSlide = function(slide) { - return slides.indexOf(slide); - }; - - $scope.next = function() { - var newIndex = (currentIndex + 1) % slides.length; - - //Prevent this user-triggered transition from occurring if there is already one in progress - if (!$scope.$currentTransition) { - return self.select(slides[newIndex], 'next'); - } - }; - - $scope.prev = function() { - var newIndex = currentIndex - 1 < 0 ? slides.length - 1 : currentIndex - 1; - - //Prevent this user-triggered transition from occurring if there is already one in progress - if (!$scope.$currentTransition) { - return self.select(slides[newIndex], 'prev'); - } - }; - - $scope.isActive = function(slide) { - return self.currentSlide === slide; - }; - - $scope.$watch('interval', restartTimer); - $scope.$on('$destroy', resetTimer); - - function restartTimer() { - resetTimer(); - var interval = +$scope.interval; - if (!isNaN(interval) && interval>=0) { - currentTimeout = $timeout(timerFn, interval); - } - } - - function resetTimer() { - if (currentTimeout) { - $timeout.cancel(currentTimeout); - currentTimeout = null; - } - } - - function timerFn() { - if (isPlaying) { - $scope.next(); - restartTimer(); - } else { - $scope.pause(); - } - } - - $scope.play = function() { - if (!isPlaying) { - isPlaying = true; - restartTimer(); - } - }; - $scope.pause = function() { - if (!$scope.noPause) { - isPlaying = false; - resetTimer(); - } - }; - - self.addSlide = function(slide, element) { - slide.$element = element; - slides.push(slide); - //if this is the first slide or the slide is set to active, select it - if(slides.length === 1 || slide.active) { - self.select(slides[slides.length-1]); - if (slides.length == 1) { - $scope.play(); - } - } else { - slide.active = false; - } - }; - - self.removeSlide = function(slide) { - //get the index of the slide inside the carousel - var index = slides.indexOf(slide); - slides.splice(index, 1); - if (slides.length > 0 && slide.active) { - if (index >= slides.length) { - self.select(slides[index-1]); - } else { - self.select(slides[index]); - } - } else if (currentIndex > index) { - currentIndex--; - } - }; - -}]) - -/** - * @ngdoc directive - * @name ui.bootstrap.carousel.directive:carousel - * @restrict EA - * - * @description - * Carousel is the outer container for a set of image 'slides' to showcase. - * - * @param {number=} interval The time, in milliseconds, that it will take the carousel to go to the next slide. - * @param {boolean=} noTransition Whether to disable transitions on the carousel. - * @param {boolean=} noPause Whether to disable pausing on the carousel (by default, the carousel interval pauses on hover). - * - * @example - - - - - - - - - - - - - - - .carousel-indicators { - top: auto; - bottom: 15px; - } - - - */ -.directive('carousel', [function() { - return { - restrict: 'EA', - transclude: true, - replace: true, - controller: 'CarouselController', - require: 'carousel', - templateUrl: 'template/carousel/carousel.html', - scope: { - interval: '=', - noTransition: '=', - noPause: '=' - } - }; -}]) - -/** - * @ngdoc directive - * @name ui.bootstrap.carousel.directive:slide - * @restrict EA - * - * @description - * Creates a slide inside a {@link ui.bootstrap.carousel.directive:carousel carousel}. Must be placed as a child of a carousel element. - * - * @param {boolean=} active Model binding, whether or not this slide is currently active. - * - * @example - - -
      - - - - - - - Interval, in milliseconds: -
      Enter a negative number to stop the interval. -
      -
      - -function CarouselDemoCtrl($scope) { - $scope.myInterval = 5000; -} - - - .carousel-indicators { - top: auto; - bottom: 15px; - } - -
      -*/ - -.directive('slide', function() { - return { - require: '^carousel', - restrict: 'EA', - transclude: true, - replace: true, - templateUrl: 'template/carousel/slide.html', - scope: { - active: '=?' - }, - link: function (scope, element, attrs, carouselCtrl) { - carouselCtrl.addSlide(scope, element); - //when the scope is destroyed then remove the slide from the current slides array - scope.$on('$destroy', function() { - carouselCtrl.removeSlide(scope); - }); - - scope.$watch('active', function(active) { - if (active) { - carouselCtrl.select(scope); - } - }); - } - }; -}); - -angular.module('ui.bootstrap.dateparser', []) - -.service('dateParser', ['$locale', 'orderByFilter', function($locale, orderByFilter) { - - this.parsers = {}; - - var formatCodeToRegex = { - 'yyyy': { - regex: '\\d{4}', - apply: function(value) { this.year = +value; } - }, - 'yy': { - regex: '\\d{2}', - apply: function(value) { this.year = +value + 2000; } - }, - 'y': { - regex: '\\d{1,4}', - apply: function(value) { this.year = +value; } - }, - 'MMMM': { - regex: $locale.DATETIME_FORMATS.MONTH.join('|'), - apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); } - }, - 'MMM': { - regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'), - apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); } - }, - 'MM': { - regex: '0[1-9]|1[0-2]', - apply: function(value) { this.month = value - 1; } - }, - 'M': { - regex: '[1-9]|1[0-2]', - apply: function(value) { this.month = value - 1; } - }, - 'dd': { - regex: '[0-2][0-9]{1}|3[0-1]{1}', - apply: function(value) { this.date = +value; } - }, - 'd': { - regex: '[1-2]?[0-9]{1}|3[0-1]{1}', - apply: function(value) { this.date = +value; } - }, - 'EEEE': { - regex: $locale.DATETIME_FORMATS.DAY.join('|') - }, - 'EEE': { - regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|') - } - }; - - this.createParser = function(format) { - var map = [], regex = format.split(''); - - angular.forEach(formatCodeToRegex, function(data, code) { - var index = format.indexOf(code); - - if (index > -1) { - format = format.split(''); - - regex[index] = '(' + data.regex + ')'; - format[index] = '$'; // Custom symbol to define consumed part of format - for (var i = index + 1, n = index + code.length; i < n; i++) { - regex[i] = ''; - format[i] = '$'; - } - format = format.join(''); - - map.push({ index: index, apply: data.apply }); - } - }); - - return { - regex: new RegExp('^' + regex.join('') + '$'), - map: orderByFilter(map, 'index') - }; - }; - - this.parse = function(input, format) { - if ( !angular.isString(input) ) { - return input; - } - - format = $locale.DATETIME_FORMATS[format] || format; - - if ( !this.parsers[format] ) { - this.parsers[format] = this.createParser(format); - } - - var parser = this.parsers[format], - regex = parser.regex, - map = parser.map, - results = input.match(regex); - - if ( results && results.length ) { - var fields = { year: 1900, month: 0, date: 1, hours: 0 }, dt; - - for( var i = 1, n = results.length; i < n; i++ ) { - var mapper = map[i-1]; - if ( mapper.apply ) { - mapper.apply.call(fields, results[i]); - } - } - - if ( isValid(fields.year, fields.month, fields.date) ) { - dt = new Date( fields.year, fields.month, fields.date, fields.hours); - } - - return dt; - } - }; - - // Check if date is valid for specific month (and year for February). - // Month: 0 = Jan, 1 = Feb, etc - function isValid(year, month, date) { - if ( month === 1 && date > 28) { - return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0); - } - - if ( month === 3 || month === 5 || month === 8 || month === 10) { - return date < 31; - } - - return true; - } -}]); - -angular.module('ui.bootstrap.position', []) - -/** - * A set of utility methods that can be use to retrieve position of DOM elements. - * It is meant to be used where we need to absolute-position DOM elements in - * relation to other, existing elements (this is the case for tooltips, popovers, - * typeahead suggestions etc.). - */ - .factory('$position', ['$document', '$window', function ($document, $window) { - - function getStyle(el, cssprop) { - if (el.currentStyle) { //IE - return el.currentStyle[cssprop]; - } else if ($window.getComputedStyle) { - return $window.getComputedStyle(el)[cssprop]; - } - // finally try and get inline style - return el.style[cssprop]; - } - - /** - * Checks if a given element is statically positioned - * @param element - raw DOM element - */ - function isStaticPositioned(element) { - return (getStyle(element, 'position') || 'static' ) === 'static'; - } - - /** - * returns the closest, non-statically positioned parentOffset of a given element - * @param element - */ - var parentOffsetEl = function (element) { - var docDomEl = $document[0]; - var offsetParent = element.offsetParent || docDomEl; - while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) { - offsetParent = offsetParent.offsetParent; - } - return offsetParent || docDomEl; - }; - - return { - /** - * Provides read-only equivalent of jQuery's position function: - * http://api.jquery.com/position/ - */ - position: function (element) { - var elBCR = this.offset(element); - var offsetParentBCR = { top: 0, left: 0 }; - var offsetParentEl = parentOffsetEl(element[0]); - if (offsetParentEl != $document[0]) { - offsetParentBCR = this.offset(angular.element(offsetParentEl)); - offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop; - offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft; - } - - var boundingClientRect = element[0].getBoundingClientRect(); - return { - width: boundingClientRect.width || element.prop('offsetWidth'), - height: boundingClientRect.height || element.prop('offsetHeight'), - top: elBCR.top - offsetParentBCR.top, - left: elBCR.left - offsetParentBCR.left - }; - }, - - /** - * Provides read-only equivalent of jQuery's offset function: - * http://api.jquery.com/offset/ - */ - offset: function (element) { - var boundingClientRect = element[0].getBoundingClientRect(); - return { - width: boundingClientRect.width || element.prop('offsetWidth'), - height: boundingClientRect.height || element.prop('offsetHeight'), - top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop), - left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft) - }; - }, - - /** - * Provides coordinates for the targetEl in relation to hostEl - */ - positionElements: function (hostEl, targetEl, positionStr, appendToBody) { - - var positionStrParts = positionStr.split('-'); - var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center'; - - var hostElPos, - targetElWidth, - targetElHeight, - targetElPos; - - hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl); - - targetElWidth = targetEl.prop('offsetWidth'); - targetElHeight = targetEl.prop('offsetHeight'); - - var shiftWidth = { - center: function () { - return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2; - }, - left: function () { - return hostElPos.left; - }, - right: function () { - return hostElPos.left + hostElPos.width; - } - }; - - var shiftHeight = { - center: function () { - return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2; - }, - top: function () { - return hostElPos.top; - }, - bottom: function () { - return hostElPos.top + hostElPos.height; - } - }; - - switch (pos0) { - case 'right': - targetElPos = { - top: shiftHeight[pos1](), - left: shiftWidth[pos0]() - }; - break; - case 'left': - targetElPos = { - top: shiftHeight[pos1](), - left: hostElPos.left - targetElWidth - }; - break; - case 'bottom': - targetElPos = { - top: shiftHeight[pos0](), - left: shiftWidth[pos1]() - }; - break; - default: - targetElPos = { - top: hostElPos.top - targetElHeight, - left: shiftWidth[pos1]() - }; - break; - } - - return targetElPos; - } - }; - }]); - -angular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position']) - -.constant('datepickerConfig', { - formatDay: 'dd', - formatMonth: 'MMMM', - formatYear: 'yyyy', - formatDayHeader: 'EEE', - formatDayTitle: 'MMMM yyyy', - formatMonthTitle: 'yyyy', - datepickerMode: 'day', - minMode: 'day', - maxMode: 'year', - showWeeks: true, - startingDay: 0, - yearRange: 20, - minDate: null, - maxDate: null -}) - -.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$timeout', '$log', 'dateFilter', 'datepickerConfig', function($scope, $attrs, $parse, $interpolate, $timeout, $log, dateFilter, datepickerConfig) { - var self = this, - ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl; - - // Modes chain - this.modes = ['day', 'month', 'year']; - - // Configuration attributes - angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle', - 'minMode', 'maxMode', 'showWeeks', 'startingDay', 'yearRange'], function( key, index ) { - self[key] = angular.isDefined($attrs[key]) ? (index < 8 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key]; - }); - - // Watchable attributes - angular.forEach(['minDate', 'maxDate'], function( key ) { - if ( $attrs[key] ) { - $scope.$parent.$watch($parse($attrs[key]), function(value) { - self[key] = value ? new Date(value) : null; - self.refreshView(); - }); - } else { - self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null; - } - }); - - $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode; - $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000); - this.activeDate = angular.isDefined($attrs.initDate) ? $scope.$parent.$eval($attrs.initDate) : new Date(); - - $scope.isActive = function(dateObject) { - if (self.compare(dateObject.date, self.activeDate) === 0) { - $scope.activeDateId = dateObject.uid; - return true; - } - return false; - }; - - this.init = function( ngModelCtrl_ ) { - ngModelCtrl = ngModelCtrl_; - - ngModelCtrl.$render = function() { - self.render(); - }; - }; - - this.render = function() { - if ( ngModelCtrl.$modelValue ) { - var date = new Date( ngModelCtrl.$modelValue ), - isValid = !isNaN(date); - - if ( isValid ) { - this.activeDate = date; - } else { - $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.'); - } - ngModelCtrl.$setValidity('date', isValid); - } - this.refreshView(); - }; - - this.refreshView = function() { - if ( this.element ) { - this._refreshView(); - - var date = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; - ngModelCtrl.$setValidity('date-disabled', !date || (this.element && !this.isDisabled(date))); - } - }; - - this.createDateObject = function(date, format) { - var model = ngModelCtrl.$modelValue ? new Date(ngModelCtrl.$modelValue) : null; - return { - date: date, - label: dateFilter(date, format), - selected: model && this.compare(date, model) === 0, - disabled: this.isDisabled(date), - current: this.compare(date, new Date()) === 0 - }; - }; - - this.isDisabled = function( date ) { - return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode}))); - }; - - // Split array into smaller arrays - this.split = function(arr, size) { - var arrays = []; - while (arr.length > 0) { - arrays.push(arr.splice(0, size)); - } - return arrays; - }; - - $scope.select = function( date ) { - if ( $scope.datepickerMode === self.minMode ) { - var dt = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : new Date(0, 0, 0, 0, 0, 0, 0); - dt.setFullYear( date.getFullYear(), date.getMonth(), date.getDate() ); - ngModelCtrl.$setViewValue( dt ); - ngModelCtrl.$render(); - } else { - self.activeDate = date; - $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) - 1 ]; - } - }; - - $scope.move = function( direction ) { - var year = self.activeDate.getFullYear() + direction * (self.step.years || 0), - month = self.activeDate.getMonth() + direction * (self.step.months || 0); - self.activeDate.setFullYear(year, month, 1); - self.refreshView(); - }; - - $scope.toggleMode = function( direction ) { - direction = direction || 1; - - if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) { - return; - } - - $scope.datepickerMode = self.modes[ self.modes.indexOf( $scope.datepickerMode ) + direction ]; - }; - - // Key event mapper - $scope.keys = { 13:'enter', 32:'space', 33:'pageup', 34:'pagedown', 35:'end', 36:'home', 37:'left', 38:'up', 39:'right', 40:'down' }; - - var focusElement = function() { - $timeout(function() { - self.element[0].focus(); - }, 0 , false); - }; - - // Listen for focus requests from popup directive - $scope.$on('datepicker.focus', focusElement); - - $scope.keydown = function( evt ) { - var key = $scope.keys[evt.which]; - - if ( !key || evt.shiftKey || evt.altKey ) { - return; - } - - evt.preventDefault(); - evt.stopPropagation(); - - if (key === 'enter' || key === 'space') { - if ( self.isDisabled(self.activeDate)) { - return; // do nothing - } - $scope.select(self.activeDate); - focusElement(); - } else if (evt.ctrlKey && (key === 'up' || key === 'down')) { - $scope.toggleMode(key === 'up' ? 1 : -1); - focusElement(); - } else { - self.handleKeyDown(key, evt); - self.refreshView(); - } - }; -}]) - -.directive( 'datepicker', function () { - return { - restrict: 'EA', - replace: true, - templateUrl: 'template/datepicker/datepicker.html', - scope: { - datepickerMode: '=?', - dateDisabled: '&' - }, - require: ['datepicker', '?^ngModel'], - controller: 'DatepickerController', - link: function(scope, element, attrs, ctrls) { - var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - if ( ngModelCtrl ) { - datepickerCtrl.init( ngModelCtrl ); - } - } - }; -}) - -.directive('daypicker', ['dateFilter', function (dateFilter) { - return { - restrict: 'EA', - replace: true, - templateUrl: 'template/datepicker/day.html', - require: '^datepicker', - link: function(scope, element, attrs, ctrl) { - scope.showWeeks = ctrl.showWeeks; - - ctrl.step = { months: 1 }; - ctrl.element = element; - - var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - function getDaysInMonth( year, month ) { - return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month]; - } - - function getDates(startDate, n) { - var dates = new Array(n), current = new Date(startDate), i = 0; - current.setHours(12); // Prevent repeated dates because of timezone bug - while ( i < n ) { - dates[i++] = new Date(current); - current.setDate( current.getDate() + 1 ); - } - return dates; - } - - ctrl._refreshView = function() { - var year = ctrl.activeDate.getFullYear(), - month = ctrl.activeDate.getMonth(), - firstDayOfMonth = new Date(year, month, 1), - difference = ctrl.startingDay - firstDayOfMonth.getDay(), - numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference, - firstDate = new Date(firstDayOfMonth); - - if ( numDisplayedFromPreviousMonth > 0 ) { - firstDate.setDate( - numDisplayedFromPreviousMonth + 1 ); - } - - // 42 is the number of days on a six-month calendar - var days = getDates(firstDate, 42); - for (var i = 0; i < 42; i ++) { - days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), { - secondary: days[i].getMonth() !== month, - uid: scope.uniqueId + '-' + i - }); - } - - scope.labels = new Array(7); - for (var j = 0; j < 7; j++) { - scope.labels[j] = { - abbr: dateFilter(days[j].date, ctrl.formatDayHeader), - full: dateFilter(days[j].date, 'EEEE') - }; - } - - scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle); - scope.rows = ctrl.split(days, 7); - - if ( scope.showWeeks ) { - scope.weekNumbers = []; - var weekNumber = getISO8601WeekNumber( scope.rows[0][0].date ), - numWeeks = scope.rows.length; - while( scope.weekNumbers.push(weekNumber++) < numWeeks ) {} - } - }; - - ctrl.compare = function(date1, date2) { - return (new Date( date1.getFullYear(), date1.getMonth(), date1.getDate() ) - new Date( date2.getFullYear(), date2.getMonth(), date2.getDate() ) ); - }; - - function getISO8601WeekNumber(date) { - var checkDate = new Date(date); - checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday - var time = checkDate.getTime(); - checkDate.setMonth(0); // Compare with Jan 1 - checkDate.setDate(1); - return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1; - } - - ctrl.handleKeyDown = function( key, evt ) { - var date = ctrl.activeDate.getDate(); - - if (key === 'left') { - date = date - 1; // up - } else if (key === 'up') { - date = date - 7; // down - } else if (key === 'right') { - date = date + 1; // down - } else if (key === 'down') { - date = date + 7; - } else if (key === 'pageup' || key === 'pagedown') { - var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1); - ctrl.activeDate.setMonth(month, 1); - date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date); - } else if (key === 'home') { - date = 1; - } else if (key === 'end') { - date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()); - } - ctrl.activeDate.setDate(date); - }; - - ctrl.refreshView(); - } - }; -}]) - -.directive('monthpicker', ['dateFilter', function (dateFilter) { - return { - restrict: 'EA', - replace: true, - templateUrl: 'template/datepicker/month.html', - require: '^datepicker', - link: function(scope, element, attrs, ctrl) { - ctrl.step = { years: 1 }; - ctrl.element = element; - - ctrl._refreshView = function() { - var months = new Array(12), - year = ctrl.activeDate.getFullYear(); - - for ( var i = 0; i < 12; i++ ) { - months[i] = angular.extend(ctrl.createDateObject(new Date(year, i, 1), ctrl.formatMonth), { - uid: scope.uniqueId + '-' + i - }); - } - - scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle); - scope.rows = ctrl.split(months, 3); - }; - - ctrl.compare = function(date1, date2) { - return new Date( date1.getFullYear(), date1.getMonth() ) - new Date( date2.getFullYear(), date2.getMonth() ); - }; - - ctrl.handleKeyDown = function( key, evt ) { - var date = ctrl.activeDate.getMonth(); - - if (key === 'left') { - date = date - 1; // up - } else if (key === 'up') { - date = date - 3; // down - } else if (key === 'right') { - date = date + 1; // down - } else if (key === 'down') { - date = date + 3; - } else if (key === 'pageup' || key === 'pagedown') { - var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1); - ctrl.activeDate.setFullYear(year); - } else if (key === 'home') { - date = 0; - } else if (key === 'end') { - date = 11; - } - ctrl.activeDate.setMonth(date); - }; - - ctrl.refreshView(); - } - }; -}]) - -.directive('yearpicker', ['dateFilter', function (dateFilter) { - return { - restrict: 'EA', - replace: true, - templateUrl: 'template/datepicker/year.html', - require: '^datepicker', - link: function(scope, element, attrs, ctrl) { - var range = ctrl.yearRange; - - ctrl.step = { years: range }; - ctrl.element = element; - - function getStartingYear( year ) { - return parseInt((year - 1) / range, 10) * range + 1; - } - - ctrl._refreshView = function() { - var years = new Array(range); - - for ( var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++ ) { - years[i] = angular.extend(ctrl.createDateObject(new Date(start + i, 0, 1), ctrl.formatYear), { - uid: scope.uniqueId + '-' + i - }); - } - - scope.title = [years[0].label, years[range - 1].label].join(' - '); - scope.rows = ctrl.split(years, 5); - }; - - ctrl.compare = function(date1, date2) { - return date1.getFullYear() - date2.getFullYear(); - }; - - ctrl.handleKeyDown = function( key, evt ) { - var date = ctrl.activeDate.getFullYear(); - - if (key === 'left') { - date = date - 1; // up - } else if (key === 'up') { - date = date - 5; // down - } else if (key === 'right') { - date = date + 1; // down - } else if (key === 'down') { - date = date + 5; - } else if (key === 'pageup' || key === 'pagedown') { - date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years; - } else if (key === 'home') { - date = getStartingYear( ctrl.activeDate.getFullYear() ); - } else if (key === 'end') { - date = getStartingYear( ctrl.activeDate.getFullYear() ) + range - 1; - } - ctrl.activeDate.setFullYear(date); - }; - - ctrl.refreshView(); - } - }; -}]) - -.constant('datepickerPopupConfig', { - datepickerPopup: 'yyyy-MM-dd', - currentText: 'Today', - clearText: 'Clear', - closeText: 'Done', - closeOnDateSelection: true, - appendToBody: false, - showButtonBar: true -}) - -.directive('datepickerPopup', ['$compile', '$parse', '$document', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig', -function ($compile, $parse, $document, $position, dateFilter, dateParser, datepickerPopupConfig) { - return { - restrict: 'EA', - require: 'ngModel', - scope: { - isOpen: '=?', - currentText: '@', - clearText: '@', - closeText: '@', - dateDisabled: '&' - }, - link: function(scope, element, attrs, ngModel) { - var dateFormat, - closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection, - appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody; - - scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar; - - scope.getText = function( key ) { - return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text']; - }; - - attrs.$observe('datepickerPopup', function(value) { - dateFormat = value || datepickerPopupConfig.datepickerPopup; - ngModel.$render(); - }); - - // popup element used to display calendar - var popupEl = angular.element('
      '); - popupEl.attr({ - 'ng-model': 'date', - 'ng-change': 'dateSelection()' - }); - - function cameltoDash( string ){ - return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); }); - } - - // datepicker element - var datepickerEl = angular.element(popupEl.children()[0]); - if ( attrs.datepickerOptions ) { - angular.forEach(scope.$parent.$eval(attrs.datepickerOptions), function( value, option ) { - datepickerEl.attr( cameltoDash(option), value ); - }); - } - - angular.forEach(['minDate', 'maxDate'], function( key ) { - if ( attrs[key] ) { - scope.$parent.$watch($parse(attrs[key]), function(value){ - scope[key] = value; - }); - datepickerEl.attr(cameltoDash(key), key); - } - }); - if (attrs.dateDisabled) { - datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })'); - } - - function parseDate(viewValue) { - if (!viewValue) { - ngModel.$setValidity('date', true); - return null; - } else if (angular.isDate(viewValue) && !isNaN(viewValue)) { - ngModel.$setValidity('date', true); - return viewValue; - } else if (angular.isString(viewValue)) { - var date = dateParser.parse(viewValue, dateFormat) || new Date(viewValue); - if (isNaN(date)) { - ngModel.$setValidity('date', false); - return undefined; - } else { - ngModel.$setValidity('date', true); - return date; - } - } else { - ngModel.$setValidity('date', false); - return undefined; - } - } - ngModel.$parsers.unshift(parseDate); - - // Inner change - scope.dateSelection = function(dt) { - if (angular.isDefined(dt)) { - scope.date = dt; - } - ngModel.$setViewValue(scope.date); - ngModel.$render(); - - if ( closeOnDateSelection ) { - scope.isOpen = false; - element[0].focus(); - } - }; - - element.bind('input change keyup', function() { - scope.$apply(function() { - scope.date = ngModel.$modelValue; - }); - }); - - // Outter change - ngModel.$render = function() { - var date = ngModel.$viewValue ? dateFilter(ngModel.$viewValue, dateFormat) : ''; - element.val(date); - scope.date = parseDate( ngModel.$modelValue ); - }; - - var documentClickBind = function(event) { - if (scope.isOpen && event.target !== element[0]) { - scope.$apply(function() { - scope.isOpen = false; - }); - } - }; - - var keydown = function(evt, noApply) { - scope.keydown(evt); - }; - element.bind('keydown', keydown); - - scope.keydown = function(evt) { - if (evt.which === 27) { - evt.preventDefault(); - evt.stopPropagation(); - scope.close(); - } else if (evt.which === 40 && !scope.isOpen) { - scope.isOpen = true; - } - }; - - scope.$watch('isOpen', function(value) { - if (value) { - scope.$broadcast('datepicker.focus'); - scope.position = appendToBody ? $position.offset(element) : $position.position(element); - scope.position.top = scope.position.top + element.prop('offsetHeight'); - - $document.bind('click', documentClickBind); - } else { - $document.unbind('click', documentClickBind); - } - }); - - scope.select = function( date ) { - if (date === 'today') { - var today = new Date(); - if (angular.isDate(ngModel.$modelValue)) { - date = new Date(ngModel.$modelValue); - date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate()); - } else { - date = new Date(today.setHours(0, 0, 0, 0)); - } - } - scope.dateSelection( date ); - }; - - scope.close = function() { - scope.isOpen = false; - element[0].focus(); - }; - - var $popup = $compile(popupEl)(scope); - if ( appendToBody ) { - $document.find('body').append($popup); - } else { - element.after($popup); - } - - scope.$on('$destroy', function() { - $popup.remove(); - element.unbind('keydown', keydown); - $document.unbind('click', documentClickBind); - }); - } - }; -}]) - -.directive('datepickerPopupWrap', function() { - return { - restrict:'EA', - replace: true, - transclude: true, - templateUrl: 'template/datepicker/popup.html', - link:function (scope, element, attrs) { - element.bind('click', function(event) { - event.preventDefault(); - event.stopPropagation(); - }); - } - }; -}); - -angular.module('ui.bootstrap.dropdown', []) - -.constant('dropdownConfig', { - openClass: 'open' -}) - -.service('dropdownService', ['$document', function($document) { - var openScope = null; - - this.open = function( dropdownScope ) { - if ( !openScope ) { - $document.bind('click', closeDropdown); - $document.bind('keydown', escapeKeyBind); - } - - if ( openScope && openScope !== dropdownScope ) { - openScope.isOpen = false; - } - - openScope = dropdownScope; - }; - - this.close = function( dropdownScope ) { - if ( openScope === dropdownScope ) { - openScope = null; - $document.unbind('click', closeDropdown); - $document.unbind('keydown', escapeKeyBind); - } - }; - - var closeDropdown = function( evt ) { - if (evt && evt.isDefaultPrevented()) { - return; - } - - openScope.$apply(function() { - openScope.isOpen = false; - }); - }; - - var escapeKeyBind = function( evt ) { - if ( evt.which === 27 ) { - openScope.focusToggleElement(); - closeDropdown(); - } - }; -}]) - -.controller('DropdownController', ['$scope', '$attrs', '$parse', 'dropdownConfig', 'dropdownService', '$animate', function($scope, $attrs, $parse, dropdownConfig, dropdownService, $animate) { - var self = this, - scope = $scope.$new(), // create a child scope so we are not polluting original one - openClass = dropdownConfig.openClass, - getIsOpen, - setIsOpen = angular.noop, - toggleInvoker = $attrs.onToggle ? $parse($attrs.onToggle) : angular.noop; - - this.init = function( element ) { - self.$element = element; - - if ( $attrs.isOpen ) { - getIsOpen = $parse($attrs.isOpen); - setIsOpen = getIsOpen.assign; - - $scope.$watch(getIsOpen, function(value) { - scope.isOpen = !!value; - }); - } - }; - - this.toggle = function( open ) { - return scope.isOpen = arguments.length ? !!open : !scope.isOpen; - }; - - // Allow other directives to watch status - this.isOpen = function() { - return scope.isOpen; - }; - - scope.focusToggleElement = function() { - if ( self.toggleElement ) { - self.toggleElement[0].focus(); - } - }; - - scope.$watch('isOpen', function( isOpen, wasOpen ) { - $animate[isOpen ? 'addClass' : 'removeClass'](self.$element, openClass); - - if ( isOpen ) { - scope.focusToggleElement(); - dropdownService.open( scope ); - } else { - dropdownService.close( scope ); - } - - setIsOpen($scope, isOpen); - if (angular.isDefined(isOpen) && isOpen !== wasOpen) { - toggleInvoker($scope, { open: !!isOpen }); - } - }); - - $scope.$on('$locationChangeSuccess', function() { - scope.isOpen = false; - }); - - $scope.$on('$destroy', function() { - scope.$destroy(); - }); -}]) - -.directive('dropdown', function() { - return { - restrict: 'CA', - controller: 'DropdownController', - link: function(scope, element, attrs, dropdownCtrl) { - dropdownCtrl.init( element ); - } - }; -}) - -.directive('dropdownToggle', function() { - return { - restrict: 'CA', - require: '?^dropdown', - link: function(scope, element, attrs, dropdownCtrl) { - if ( !dropdownCtrl ) { - return; - } - - dropdownCtrl.toggleElement = element; - - var toggleDropdown = function(event) { - event.preventDefault(); - - if ( !element.hasClass('disabled') && !attrs.disabled ) { - scope.$apply(function() { - dropdownCtrl.toggle(); - }); - } - }; - - element.bind('click', toggleDropdown); - - // WAI-ARIA - element.attr({ 'aria-haspopup': true, 'aria-expanded': false }); - scope.$watch(dropdownCtrl.isOpen, function( isOpen ) { - element.attr('aria-expanded', !!isOpen); - }); - - scope.$on('$destroy', function() { - element.unbind('click', toggleDropdown); - }); - } - }; -}); - -angular.module('ui.bootstrap.modal', ['ui.bootstrap.transition']) - -/** - * A helper, internal data structure that acts as a map but also allows getting / removing - * elements in the LIFO order - */ - .factory('$$stackedMap', function () { - return { - createNew: function () { - var stack = []; - - return { - add: function (key, value) { - stack.push({ - key: key, - value: value - }); - }, - get: function (key) { - for (var i = 0; i < stack.length; i++) { - if (key == stack[i].key) { - return stack[i]; - } - } - }, - keys: function() { - var keys = []; - for (var i = 0; i < stack.length; i++) { - keys.push(stack[i].key); - } - return keys; - }, - top: function () { - return stack[stack.length - 1]; - }, - remove: function (key) { - var idx = -1; - for (var i = 0; i < stack.length; i++) { - if (key == stack[i].key) { - idx = i; - break; - } - } - return stack.splice(idx, 1)[0]; - }, - removeTop: function () { - return stack.splice(stack.length - 1, 1)[0]; - }, - length: function () { - return stack.length; - } - }; - } - }; - }) - -/** - * A helper directive for the $modal service. It creates a backdrop element. - */ - .directive('modalBackdrop', ['$timeout', function ($timeout) { - return { - restrict: 'EA', - replace: true, - templateUrl: 'template/modal/backdrop.html', - link: function (scope) { - - scope.animate = false; - - //trigger CSS transitions - $timeout(function () { - scope.animate = true; - }); - } - }; - }]) - - .directive('modalWindow', ['$modalStack', '$timeout', function ($modalStack, $timeout) { - return { - restrict: 'EA', - scope: { - index: '@', - animate: '=' - }, - replace: true, - transclude: true, - templateUrl: function(tElement, tAttrs) { - return tAttrs.templateUrl || 'template/modal/window.html'; - }, - link: function (scope, element, attrs) { - element.addClass(attrs.windowClass || ''); - scope.size = attrs.size; - - $timeout(function () { - // trigger CSS transitions - scope.animate = true; - // focus a freshly-opened modal - element[0].focus(); - }); - - scope.close = function (evt) { - var modal = $modalStack.getTop(); - if (modal && modal.value.backdrop && modal.value.backdrop != 'static' && (evt.target === evt.currentTarget)) { - evt.preventDefault(); - evt.stopPropagation(); - $modalStack.dismiss(modal.key, 'backdrop click'); - } - }; - } - }; - }]) - - .factory('$modalStack', ['$transition', '$timeout', '$document', '$compile', '$rootScope', '$$stackedMap', - function ($transition, $timeout, $document, $compile, $rootScope, $$stackedMap) { - - var OPENED_MODAL_CLASS = 'modal-open'; - - var backdropDomEl, backdropScope; - var openedWindows = $$stackedMap.createNew(); - var $modalStack = {}; - - function backdropIndex() { - var topBackdropIndex = -1; - var opened = openedWindows.keys(); - for (var i = 0; i < opened.length; i++) { - if (openedWindows.get(opened[i]).value.backdrop) { - topBackdropIndex = i; - } - } - return topBackdropIndex; - } - - $rootScope.$watch(backdropIndex, function(newBackdropIndex){ - if (backdropScope) { - backdropScope.index = newBackdropIndex; - } - }); - - function removeModalWindow(modalInstance) { - - var body = $document.find('body').eq(0); - var modalWindow = openedWindows.get(modalInstance).value; - - //clean up the stack - openedWindows.remove(modalInstance); - - //remove window DOM element - removeAfterAnimate(modalWindow.modalDomEl, modalWindow.modalScope, 300, function() { - modalWindow.modalScope.$destroy(); - body.toggleClass(OPENED_MODAL_CLASS, openedWindows.length() > 0); - checkRemoveBackdrop(); - }); - } - - function checkRemoveBackdrop() { - //remove backdrop if no longer needed - if (backdropDomEl && backdropIndex() == -1) { - var backdropScopeRef = backdropScope; - removeAfterAnimate(backdropDomEl, backdropScope, 150, function () { - backdropScopeRef.$destroy(); - backdropScopeRef = null; - }); - backdropDomEl = undefined; - backdropScope = undefined; - } - } - - function removeAfterAnimate(domEl, scope, emulateTime, done) { - // Closing animation - scope.animate = false; - - var transitionEndEventName = $transition.transitionEndEventName; - if (transitionEndEventName) { - // transition out - var timeout = $timeout(afterAnimating, emulateTime); - - domEl.bind(transitionEndEventName, function () { - $timeout.cancel(timeout); - afterAnimating(); - scope.$apply(); - }); - } else { - // Ensure this call is async - $timeout(afterAnimating, 0); - } - - function afterAnimating() { - if (afterAnimating.done) { - return; - } - afterAnimating.done = true; - - domEl.remove(); - if (done) { - done(); - } - } - } - - $document.bind('keydown', function (evt) { - var modal; - - if (evt.which === 27) { - modal = openedWindows.top(); - if (modal && modal.value.keyboard) { - evt.preventDefault(); - $rootScope.$apply(function () { - $modalStack.dismiss(modal.key, 'escape key press'); - }); - } - } - }); - - $modalStack.open = function (modalInstance, modal) { - - openedWindows.add(modalInstance, { - deferred: modal.deferred, - modalScope: modal.scope, - backdrop: modal.backdrop, - keyboard: modal.keyboard - }); - - var body = $document.find('body').eq(0), - currBackdropIndex = backdropIndex(); - - if (currBackdropIndex >= 0 && !backdropDomEl) { - backdropScope = $rootScope.$new(true); - backdropScope.index = currBackdropIndex; - backdropDomEl = $compile('
      ')(backdropScope); - body.append(backdropDomEl); - } - - var angularDomEl = angular.element('
      '); - angularDomEl.attr({ - 'template-url': modal.windowTemplateUrl, - 'window-class': modal.windowClass, - 'size': modal.size, - 'index': openedWindows.length() - 1, - 'animate': 'animate' - }).html(modal.content); - - var modalDomEl = $compile(angularDomEl)(modal.scope); - openedWindows.top().value.modalDomEl = modalDomEl; - body.append(modalDomEl); - body.addClass(OPENED_MODAL_CLASS); - }; - - $modalStack.close = function (modalInstance, result) { - var modalWindow = openedWindows.get(modalInstance).value; - if (modalWindow) { - modalWindow.deferred.resolve(result); - removeModalWindow(modalInstance); - } - }; - - $modalStack.dismiss = function (modalInstance, reason) { - var modalWindow = openedWindows.get(modalInstance).value; - if (modalWindow) { - modalWindow.deferred.reject(reason); - removeModalWindow(modalInstance); - } - }; - - $modalStack.dismissAll = function (reason) { - var topModal = this.getTop(); - while (topModal) { - this.dismiss(topModal.key, reason); - topModal = this.getTop(); - } - }; - - $modalStack.getTop = function () { - return openedWindows.top(); - }; - - return $modalStack; - }]) - - .provider('$modal', function () { - - var $modalProvider = { - options: { - backdrop: true, //can be also false or 'static' - keyboard: true - }, - $get: ['$injector', '$rootScope', '$q', '$http', '$templateCache', '$controller', '$modalStack', - function ($injector, $rootScope, $q, $http, $templateCache, $controller, $modalStack) { - - var $modal = {}; - - function getTemplatePromise(options) { - return options.template ? $q.when(options.template) : - $http.get(options.templateUrl, {cache: $templateCache}).then(function (result) { - return result.data; - }); - } - - function getResolvePromises(resolves) { - var promisesArr = []; - angular.forEach(resolves, function (value, key) { - if (angular.isFunction(value) || angular.isArray(value)) { - promisesArr.push($q.when($injector.invoke(value))); - } - }); - return promisesArr; - } - - $modal.open = function (modalOptions) { - - var modalResultDeferred = $q.defer(); - var modalOpenedDeferred = $q.defer(); - - //prepare an instance of a modal to be injected into controllers and returned to a caller - var modalInstance = { - result: modalResultDeferred.promise, - opened: modalOpenedDeferred.promise, - close: function (result) { - $modalStack.close(modalInstance, result); - }, - dismiss: function (reason) { - $modalStack.dismiss(modalInstance, reason); - } - }; - - //merge and clean up options - modalOptions = angular.extend({}, $modalProvider.options, modalOptions); - modalOptions.resolve = modalOptions.resolve || {}; - - //verify options - if (!modalOptions.template && !modalOptions.templateUrl) { - throw new Error('One of template or templateUrl options is required.'); - } - - var templateAndResolvePromise = - $q.all([getTemplatePromise(modalOptions)].concat(getResolvePromises(modalOptions.resolve))); - - - templateAndResolvePromise.then(function resolveSuccess(tplAndVars) { - - var modalScope = (modalOptions.scope || $rootScope).$new(); - modalScope.$close = modalInstance.close; - modalScope.$dismiss = modalInstance.dismiss; - - var ctrlInstance, ctrlLocals = {}; - var resolveIter = 1; - - //controllers - if (modalOptions.controller) { - ctrlLocals.$scope = modalScope; - ctrlLocals.$modalInstance = modalInstance; - angular.forEach(modalOptions.resolve, function (value, key) { - ctrlLocals[key] = tplAndVars[resolveIter++]; - }); - - ctrlInstance = $controller(modalOptions.controller, ctrlLocals); - } - - $modalStack.open(modalInstance, { - scope: modalScope, - deferred: modalResultDeferred, - content: tplAndVars[0], - backdrop: modalOptions.backdrop, - keyboard: modalOptions.keyboard, - windowClass: modalOptions.windowClass, - windowTemplateUrl: modalOptions.windowTemplateUrl, - size: modalOptions.size - }); - - }, function resolveError(reason) { - modalResultDeferred.reject(reason); - }); - - templateAndResolvePromise.then(function () { - modalOpenedDeferred.resolve(true); - }, function () { - modalOpenedDeferred.reject(false); - }); - - return modalInstance; - }; - - return $modal; - }] - }; - - return $modalProvider; - }); - -angular.module('ui.bootstrap.pagination', []) - -.controller('PaginationController', ['$scope', '$attrs', '$parse', function ($scope, $attrs, $parse) { - var self = this, - ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl - setNumPages = $attrs.numPages ? $parse($attrs.numPages).assign : angular.noop; - - this.init = function(ngModelCtrl_, config) { - ngModelCtrl = ngModelCtrl_; - this.config = config; - - ngModelCtrl.$render = function() { - self.render(); - }; - - if ($attrs.itemsPerPage) { - $scope.$parent.$watch($parse($attrs.itemsPerPage), function(value) { - self.itemsPerPage = parseInt(value, 10); - $scope.totalPages = self.calculateTotalPages(); - }); - } else { - this.itemsPerPage = config.itemsPerPage; - } - }; - - this.calculateTotalPages = function() { - var totalPages = this.itemsPerPage < 1 ? 1 : Math.ceil($scope.totalItems / this.itemsPerPage); - return Math.max(totalPages || 0, 1); - }; - - this.render = function() { - $scope.page = parseInt(ngModelCtrl.$viewValue, 10) || 1; - }; - - $scope.selectPage = function(page) { - if ( $scope.page !== page && page > 0 && page <= $scope.totalPages) { - ngModelCtrl.$setViewValue(page); - ngModelCtrl.$render(); - } - }; - - $scope.getText = function( key ) { - return $scope[key + 'Text'] || self.config[key + 'Text']; - }; - $scope.noPrevious = function() { - return $scope.page === 1; - }; - $scope.noNext = function() { - return $scope.page === $scope.totalPages; - }; - - $scope.$watch('totalItems', function() { - $scope.totalPages = self.calculateTotalPages(); - }); - - $scope.$watch('totalPages', function(value) { - setNumPages($scope.$parent, value); // Readonly variable - - if ( $scope.page > value ) { - $scope.selectPage(value); - } else { - ngModelCtrl.$render(); - } - }); -}]) - -.constant('paginationConfig', { - itemsPerPage: 10, - boundaryLinks: false, - directionLinks: true, - firstText: 'First', - previousText: 'Previous', - nextText: 'Next', - lastText: 'Last', - rotate: true -}) - -.directive('pagination', ['$parse', 'paginationConfig', function($parse, paginationConfig) { - return { - restrict: 'EA', - scope: { - totalItems: '=', - firstText: '@', - previousText: '@', - nextText: '@', - lastText: '@' - }, - require: ['pagination', '?ngModel'], - controller: 'PaginationController', - templateUrl: 'template/pagination/pagination.html', - replace: true, - link: function(scope, element, attrs, ctrls) { - var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - if (!ngModelCtrl) { - return; // do nothing if no ng-model - } - - // Setup configuration parameters - var maxSize = angular.isDefined(attrs.maxSize) ? scope.$parent.$eval(attrs.maxSize) : paginationConfig.maxSize, - rotate = angular.isDefined(attrs.rotate) ? scope.$parent.$eval(attrs.rotate) : paginationConfig.rotate; - scope.boundaryLinks = angular.isDefined(attrs.boundaryLinks) ? scope.$parent.$eval(attrs.boundaryLinks) : paginationConfig.boundaryLinks; - scope.directionLinks = angular.isDefined(attrs.directionLinks) ? scope.$parent.$eval(attrs.directionLinks) : paginationConfig.directionLinks; - - paginationCtrl.init(ngModelCtrl, paginationConfig); - - if (attrs.maxSize) { - scope.$parent.$watch($parse(attrs.maxSize), function(value) { - maxSize = parseInt(value, 10); - paginationCtrl.render(); - }); - } - - // Create page object used in template - function makePage(number, text, isActive) { - return { - number: number, - text: text, - active: isActive - }; - } - - function getPages(currentPage, totalPages) { - var pages = []; - - // Default page limits - var startPage = 1, endPage = totalPages; - var isMaxSized = ( angular.isDefined(maxSize) && maxSize < totalPages ); - - // recompute if maxSize - if ( isMaxSized ) { - if ( rotate ) { - // Current page is displayed in the middle of the visible ones - startPage = Math.max(currentPage - Math.floor(maxSize/2), 1); - endPage = startPage + maxSize - 1; - - // Adjust if limit is exceeded - if (endPage > totalPages) { - endPage = totalPages; - startPage = endPage - maxSize + 1; - } - } else { - // Visible pages are paginated with maxSize - startPage = ((Math.ceil(currentPage / maxSize) - 1) * maxSize) + 1; - - // Adjust last page if limit is exceeded - endPage = Math.min(startPage + maxSize - 1, totalPages); - } - } - - // Add page number links - for (var number = startPage; number <= endPage; number++) { - var page = makePage(number, number, number === currentPage); - pages.push(page); - } - - // Add links to move between page sets - if ( isMaxSized && ! rotate ) { - if ( startPage > 1 ) { - var previousPageSet = makePage(startPage - 1, '...', false); - pages.unshift(previousPageSet); - } - - if ( endPage < totalPages ) { - var nextPageSet = makePage(endPage + 1, '...', false); - pages.push(nextPageSet); - } - } - - return pages; - } - - var originalRender = paginationCtrl.render; - paginationCtrl.render = function() { - originalRender(); - if (scope.page > 0 && scope.page <= scope.totalPages) { - scope.pages = getPages(scope.page, scope.totalPages); - } - }; - } - }; -}]) - -.constant('pagerConfig', { - itemsPerPage: 10, - previousText: '« Previous', - nextText: 'Next »', - align: true -}) - -.directive('pager', ['pagerConfig', function(pagerConfig) { - return { - restrict: 'EA', - scope: { - totalItems: '=', - previousText: '@', - nextText: '@' - }, - require: ['pager', '?ngModel'], - controller: 'PaginationController', - templateUrl: 'template/pagination/pager.html', - replace: true, - link: function(scope, element, attrs, ctrls) { - var paginationCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - if (!ngModelCtrl) { - return; // do nothing if no ng-model - } - - scope.align = angular.isDefined(attrs.align) ? scope.$parent.$eval(attrs.align) : pagerConfig.align; - paginationCtrl.init(ngModelCtrl, pagerConfig); - } - }; -}]); - -/** - * The following features are still outstanding: animation as a - * function, placement as a function, inside, support for more triggers than - * just mouse enter/leave, html tooltips, and selector delegation. - */ -angular.module( 'ui.bootstrap.tooltip', [ 'ui.bootstrap.position', 'ui.bootstrap.bindHtml' ] ) - -/** - * The $tooltip service creates tooltip- and popover-like directives as well as - * houses global options for them. - */ -.provider( '$tooltip', function () { - // The default options tooltip and popover. - var defaultOptions = { - placement: 'top', - animation: true, - popupDelay: 0 - }; - - // Default hide triggers for each show trigger - var triggerMap = { - 'mouseenter': 'mouseleave', - 'click': 'click', - 'focus': 'blur' - }; - - // The options specified to the provider globally. - var globalOptions = {}; - - /** - * `options({})` allows global configuration of all tooltips in the - * application. - * - * var app = angular.module( 'App', ['ui.bootstrap.tooltip'], function( $tooltipProvider ) { - * // place tooltips left instead of top by default - * $tooltipProvider.options( { placement: 'left' } ); - * }); - */ - this.options = function( value ) { - angular.extend( globalOptions, value ); - }; - - /** - * This allows you to extend the set of trigger mappings available. E.g.: - * - * $tooltipProvider.setTriggers( 'openTrigger': 'closeTrigger' ); - */ - this.setTriggers = function setTriggers ( triggers ) { - angular.extend( triggerMap, triggers ); - }; - - /** - * This is a helper function for translating camel-case to snake-case. - */ - function snake_case(name){ - var regexp = /[A-Z]/g; - var separator = '-'; - return name.replace(regexp, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); - } - - /** - * Returns the actual instance of the $tooltip service. - * TODO support multiple triggers - */ - this.$get = [ '$window', '$compile', '$timeout', '$parse', '$document', '$position', '$interpolate', function ( $window, $compile, $timeout, $parse, $document, $position, $interpolate ) { - return function $tooltip ( type, prefix, defaultTriggerShow ) { - var options = angular.extend( {}, defaultOptions, globalOptions ); - - /** - * Returns an object of show and hide triggers. - * - * If a trigger is supplied, - * it is used to show the tooltip; otherwise, it will use the `trigger` - * option passed to the `$tooltipProvider.options` method; else it will - * default to the trigger supplied to this directive factory. - * - * The hide trigger is based on the show trigger. If the `trigger` option - * was passed to the `$tooltipProvider.options` method, it will use the - * mapped trigger from `triggerMap` or the passed trigger if the map is - * undefined; otherwise, it uses the `triggerMap` value of the show - * trigger; else it will just use the show trigger. - */ - function getTriggers ( trigger ) { - var show = trigger || options.trigger || defaultTriggerShow; - var hide = triggerMap[show] || show; - return { - show: show, - hide: hide - }; - } - - var directiveName = snake_case( type ); - - var startSym = $interpolate.startSymbol(); - var endSym = $interpolate.endSymbol(); - var template = - '
      '+ - '
      '; - - return { - restrict: 'EA', - scope: true, - compile: function (tElem, tAttrs) { - var tooltipLinker = $compile( template ); - - return function link ( scope, element, attrs ) { - var tooltip; - var transitionTimeout; - var popupTimeout; - var appendToBody = angular.isDefined( options.appendToBody ) ? options.appendToBody : false; - var triggers = getTriggers( undefined ); - var hasEnableExp = angular.isDefined(attrs[prefix+'Enable']); - - var positionTooltip = function () { - - var ttPosition = $position.positionElements(element, tooltip, scope.tt_placement, appendToBody); - ttPosition.top += 'px'; - ttPosition.left += 'px'; - - // Now set the calculated positioning. - tooltip.css( ttPosition ); - }; - - // By default, the tooltip is not open. - // TODO add ability to start tooltip opened - scope.tt_isOpen = false; - - function toggleTooltipBind () { - if ( ! scope.tt_isOpen ) { - showTooltipBind(); - } else { - hideTooltipBind(); - } - } - - // Show the tooltip with delay if specified, otherwise show it immediately - function showTooltipBind() { - if(hasEnableExp && !scope.$eval(attrs[prefix+'Enable'])) { - return; - } - if ( scope.tt_popupDelay ) { - // Do nothing if the tooltip was already scheduled to pop-up. - // This happens if show is triggered multiple times before any hide is triggered. - if (!popupTimeout) { - popupTimeout = $timeout( show, scope.tt_popupDelay, false ); - popupTimeout.then(function(reposition){reposition();}); - } - } else { - show()(); - } - } - - function hideTooltipBind () { - scope.$apply(function () { - hide(); - }); - } - - // Show the tooltip popup element. - function show() { - - popupTimeout = null; - - // If there is a pending remove transition, we must cancel it, lest the - // tooltip be mysteriously removed. - if ( transitionTimeout ) { - $timeout.cancel( transitionTimeout ); - transitionTimeout = null; - } - - // Don't show empty tooltips. - if ( ! scope.tt_content ) { - return angular.noop; - } - - createTooltip(); - - // Set the initial positioning. - tooltip.css({ top: 0, left: 0, display: 'block' }); - - // Now we add it to the DOM because need some info about it. But it's not - // visible yet anyway. - if ( appendToBody ) { - $document.find( 'body' ).append( tooltip ); - } else { - element.after( tooltip ); - } - - positionTooltip(); - - // And show the tooltip. - scope.tt_isOpen = true; - scope.$digest(); // digest required as $apply is not called - - // Return positioning function as promise callback for correct - // positioning after draw. - return positionTooltip; - } - - // Hide the tooltip popup element. - function hide() { - // First things first: we don't show it anymore. - scope.tt_isOpen = false; - - //if tooltip is going to be shown after delay, we must cancel this - $timeout.cancel( popupTimeout ); - popupTimeout = null; - - // And now we remove it from the DOM. However, if we have animation, we - // need to wait for it to expire beforehand. - // FIXME: this is a placeholder for a port of the transitions library. - if ( scope.tt_animation ) { - if (!transitionTimeout) { - transitionTimeout = $timeout(removeTooltip, 500); - } - } else { - removeTooltip(); - } - } - - function createTooltip() { - // There can only be one tooltip element per directive shown at once. - if (tooltip) { - removeTooltip(); - } - tooltip = tooltipLinker(scope, function () {}); - - // Get contents rendered into the tooltip - scope.$digest(); - } - - function removeTooltip() { - transitionTimeout = null; - if (tooltip) { - tooltip.remove(); - tooltip = null; - } - } - - /** - * Observe the relevant attributes. - */ - attrs.$observe( type, function ( val ) { - scope.tt_content = val; - - if (!val && scope.tt_isOpen ) { - hide(); - } - }); - - attrs.$observe( prefix+'Title', function ( val ) { - scope.tt_title = val; - }); - - attrs.$observe( prefix+'Placement', function ( val ) { - scope.tt_placement = angular.isDefined( val ) ? val : options.placement; - }); - - attrs.$observe( prefix+'PopupDelay', function ( val ) { - var delay = parseInt( val, 10 ); - scope.tt_popupDelay = ! isNaN(delay) ? delay : options.popupDelay; - }); - - var unregisterTriggers = function () { - element.unbind(triggers.show, showTooltipBind); - element.unbind(triggers.hide, hideTooltipBind); - }; - - attrs.$observe( prefix+'Trigger', function ( val ) { - unregisterTriggers(); - - triggers = getTriggers( val ); - - if ( triggers.show === triggers.hide ) { - element.bind( triggers.show, toggleTooltipBind ); - } else { - element.bind( triggers.show, showTooltipBind ); - element.bind( triggers.hide, hideTooltipBind ); - } - }); - - var animation = scope.$eval(attrs[prefix + 'Animation']); - scope.tt_animation = angular.isDefined(animation) ? !!animation : options.animation; - - attrs.$observe( prefix+'AppendToBody', function ( val ) { - appendToBody = angular.isDefined( val ) ? $parse( val )( scope ) : appendToBody; - }); - - // if a tooltip is attached to we need to remove it on - // location change as its parent scope will probably not be destroyed - // by the change. - if ( appendToBody ) { - scope.$on('$locationChangeSuccess', function closeTooltipOnLocationChangeSuccess () { - if ( scope.tt_isOpen ) { - hide(); - } - }); - } - - // Make sure tooltip is destroyed and removed. - scope.$on('$destroy', function onDestroyTooltip() { - $timeout.cancel( transitionTimeout ); - $timeout.cancel( popupTimeout ); - unregisterTriggers(); - removeTooltip(); - }); - }; - } - }; - }; - }]; -}) - -.directive( 'tooltipPopup', function () { - return { - restrict: 'EA', - replace: true, - scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, - templateUrl: 'template/tooltip/tooltip-popup.html' - }; -}) - -.directive( 'tooltip', [ '$tooltip', function ( $tooltip ) { - return $tooltip( 'tooltip', 'tooltip', 'mouseenter' ); -}]) - -.directive( 'tooltipHtmlUnsafePopup', function () { - return { - restrict: 'EA', - replace: true, - scope: { content: '@', placement: '@', animation: '&', isOpen: '&' }, - templateUrl: 'template/tooltip/tooltip-html-unsafe-popup.html' - }; -}) - -.directive( 'tooltipHtmlUnsafe', [ '$tooltip', function ( $tooltip ) { - return $tooltip( 'tooltipHtmlUnsafe', 'tooltip', 'mouseenter' ); -}]); - -/** - * The following features are still outstanding: popup delay, animation as a - * function, placement as a function, inside, support for more triggers than - * just mouse enter/leave, html popovers, and selector delegatation. - */ -angular.module( 'ui.bootstrap.popover', [ 'ui.bootstrap.tooltip' ] ) - -.directive( 'popoverPopup', function () { - return { - restrict: 'EA', - replace: true, - scope: { title: '@', content: '@', placement: '@', animation: '&', isOpen: '&' }, - templateUrl: 'template/popover/popover.html' - }; -}) - -.directive( 'popover', [ '$tooltip', function ( $tooltip ) { - return $tooltip( 'popover', 'popover', 'click' ); -}]); - -angular.module('ui.bootstrap.progressbar', []) - -.constant('progressConfig', { - animate: true, - max: 100 -}) - -.controller('ProgressController', ['$scope', '$attrs', 'progressConfig', function($scope, $attrs, progressConfig) { - var self = this, - animate = angular.isDefined($attrs.animate) ? $scope.$parent.$eval($attrs.animate) : progressConfig.animate; - - this.bars = []; - $scope.max = angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : progressConfig.max; - - this.addBar = function(bar, element) { - if ( !animate ) { - element.css({'transition': 'none'}); - } - - this.bars.push(bar); - - bar.$watch('value', function( value ) { - bar.percent = +(100 * value / $scope.max).toFixed(2); - }); - - bar.$on('$destroy', function() { - element = null; - self.removeBar(bar); - }); - }; - - this.removeBar = function(bar) { - this.bars.splice(this.bars.indexOf(bar), 1); - }; -}]) - -.directive('progress', function() { - return { - restrict: 'EA', - replace: true, - transclude: true, - controller: 'ProgressController', - require: 'progress', - scope: {}, - templateUrl: 'template/progressbar/progress.html' - }; -}) - -.directive('bar', function() { - return { - restrict: 'EA', - replace: true, - transclude: true, - require: '^progress', - scope: { - value: '=', - type: '@' - }, - templateUrl: 'template/progressbar/bar.html', - link: function(scope, element, attrs, progressCtrl) { - progressCtrl.addBar(scope, element); - } - }; -}) - -.directive('progressbar', function() { - return { - restrict: 'EA', - replace: true, - transclude: true, - controller: 'ProgressController', - scope: { - value: '=', - type: '@' - }, - templateUrl: 'template/progressbar/progressbar.html', - link: function(scope, element, attrs, progressCtrl) { - progressCtrl.addBar(scope, angular.element(element.children()[0])); - } - }; -}); -angular.module('ui.bootstrap.rating', []) - -.constant('ratingConfig', { - max: 5, - stateOn: null, - stateOff: null -}) - -.controller('RatingController', ['$scope', '$attrs', 'ratingConfig', function($scope, $attrs, ratingConfig) { - var ngModelCtrl = { $setViewValue: angular.noop }; - - this.init = function(ngModelCtrl_) { - ngModelCtrl = ngModelCtrl_; - ngModelCtrl.$render = this.render; - - this.stateOn = angular.isDefined($attrs.stateOn) ? $scope.$parent.$eval($attrs.stateOn) : ratingConfig.stateOn; - this.stateOff = angular.isDefined($attrs.stateOff) ? $scope.$parent.$eval($attrs.stateOff) : ratingConfig.stateOff; - - var ratingStates = angular.isDefined($attrs.ratingStates) ? $scope.$parent.$eval($attrs.ratingStates) : - new Array( angular.isDefined($attrs.max) ? $scope.$parent.$eval($attrs.max) : ratingConfig.max ); - $scope.range = this.buildTemplateObjects(ratingStates); - }; - - this.buildTemplateObjects = function(states) { - for (var i = 0, n = states.length; i < n; i++) { - states[i] = angular.extend({ index: i }, { stateOn: this.stateOn, stateOff: this.stateOff }, states[i]); - } - return states; - }; - - $scope.rate = function(value) { - if ( !$scope.readonly && value >= 0 && value <= $scope.range.length ) { - ngModelCtrl.$setViewValue(value); - ngModelCtrl.$render(); - } - }; - - $scope.enter = function(value) { - if ( !$scope.readonly ) { - $scope.value = value; - } - $scope.onHover({value: value}); - }; - - $scope.reset = function() { - $scope.value = ngModelCtrl.$viewValue; - $scope.onLeave(); - }; - - $scope.onKeydown = function(evt) { - if (/(37|38|39|40)/.test(evt.which)) { - evt.preventDefault(); - evt.stopPropagation(); - $scope.rate( $scope.value + (evt.which === 38 || evt.which === 39 ? 1 : -1) ); - } - }; - - this.render = function() { - $scope.value = ngModelCtrl.$viewValue; - }; -}]) - -.directive('rating', function() { - return { - restrict: 'EA', - require: ['rating', 'ngModel'], - scope: { - readonly: '=?', - onHover: '&', - onLeave: '&' - }, - controller: 'RatingController', - templateUrl: 'template/rating/rating.html', - replace: true, - link: function(scope, element, attrs, ctrls) { - var ratingCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - if ( ngModelCtrl ) { - ratingCtrl.init( ngModelCtrl ); - } - } - }; -}); - -/** - * @ngdoc overview - * @name ui.bootstrap.tabs - * - * @description - * AngularJS version of the tabs directive. - */ - -angular.module('ui.bootstrap.tabs', []) - -.controller('TabsetController', ['$scope', function TabsetCtrl($scope) { - var ctrl = this, - tabs = ctrl.tabs = $scope.tabs = []; - - ctrl.select = function(selectedTab) { - angular.forEach(tabs, function(tab) { - if (tab.active && tab !== selectedTab) { - tab.active = false; - tab.onDeselect(); - } - }); - selectedTab.active = true; - selectedTab.onSelect(); - }; - - ctrl.addTab = function addTab(tab) { - tabs.push(tab); - // we can't run the select function on the first tab - // since that would select it twice - if (tabs.length === 1) { - tab.active = true; - } else if (tab.active) { - ctrl.select(tab); - } - }; - - ctrl.removeTab = function removeTab(tab) { - var index = tabs.indexOf(tab); - //Select a new tab if the tab to be removed is selected - if (tab.active && tabs.length > 1) { - //If this is the last tab, select the previous tab. else, the next tab. - var newActiveIndex = index == tabs.length - 1 ? index - 1 : index + 1; - ctrl.select(tabs[newActiveIndex]); - } - tabs.splice(index, 1); - }; -}]) - -/** - * @ngdoc directive - * @name ui.bootstrap.tabs.directive:tabset - * @restrict EA - * - * @description - * Tabset is the outer container for the tabs directive - * - * @param {boolean=} vertical Whether or not to use vertical styling for the tabs. - * @param {boolean=} justified Whether or not to use justified styling for the tabs. - * - * @example - - - - First Content! - Second Content! - -
      - - First Vertical Content! - Second Vertical Content! - - - First Justified Content! - Second Justified Content! - -
      -
      - */ -.directive('tabset', function() { - return { - restrict: 'EA', - transclude: true, - replace: true, - scope: { - type: '@' - }, - controller: 'TabsetController', - templateUrl: 'template/tabs/tabset.html', - link: function(scope, element, attrs) { - scope.vertical = angular.isDefined(attrs.vertical) ? scope.$parent.$eval(attrs.vertical) : false; - scope.justified = angular.isDefined(attrs.justified) ? scope.$parent.$eval(attrs.justified) : false; - } - }; -}) - -/** - * @ngdoc directive - * @name ui.bootstrap.tabs.directive:tab - * @restrict EA - * - * @param {string=} heading The visible heading, or title, of the tab. Set HTML headings with {@link ui.bootstrap.tabs.directive:tabHeading tabHeading}. - * @param {string=} select An expression to evaluate when the tab is selected. - * @param {boolean=} active A binding, telling whether or not this tab is selected. - * @param {boolean=} disabled A binding, telling whether or not this tab is disabled. - * - * @description - * Creates a tab with a heading and content. Must be placed within a {@link ui.bootstrap.tabs.directive:tabset tabset}. - * - * @example - - -
      - - -
      - - First Tab - - Alert me! - Second Tab, with alert callback and html heading! - - - {{item.content}} - - -
      -
      - - function TabsDemoCtrl($scope) { - $scope.items = [ - { title:"Dynamic Title 1", content:"Dynamic Item 0" }, - { title:"Dynamic Title 2", content:"Dynamic Item 1", disabled: true } - ]; - - $scope.alertMe = function() { - setTimeout(function() { - alert("You've selected the alert tab!"); - }); - }; - }; - -
      - */ - -/** - * @ngdoc directive - * @name ui.bootstrap.tabs.directive:tabHeading - * @restrict EA - * - * @description - * Creates an HTML heading for a {@link ui.bootstrap.tabs.directive:tab tab}. Must be placed as a child of a tab element. - * - * @example - - - - - HTML in my titles?! - And some content, too! - - - Icon heading?!? - That's right. - - - - - */ -.directive('tab', ['$parse', function($parse) { - return { - require: '^tabset', - restrict: 'EA', - replace: true, - templateUrl: 'template/tabs/tab.html', - transclude: true, - scope: { - active: '=?', - heading: '@', - onSelect: '&select', //This callback is called in contentHeadingTransclude - //once it inserts the tab's content into the dom - onDeselect: '&deselect' - }, - controller: function() { - //Empty controller so other directives can require being 'under' a tab - }, - compile: function(elm, attrs, transclude) { - return function postLink(scope, elm, attrs, tabsetCtrl) { - scope.$watch('active', function(active) { - if (active) { - tabsetCtrl.select(scope); - } - }); - - scope.disabled = false; - if ( attrs.disabled ) { - scope.$parent.$watch($parse(attrs.disabled), function(value) { - scope.disabled = !! value; - }); - } - - scope.select = function() { - if ( !scope.disabled ) { - scope.active = true; - } - }; - - tabsetCtrl.addTab(scope); - scope.$on('$destroy', function() { - tabsetCtrl.removeTab(scope); - }); - - //We need to transclude later, once the content container is ready. - //when this link happens, we're inside a tab heading. - scope.$transcludeFn = transclude; - }; - } - }; -}]) - -.directive('tabHeadingTransclude', [function() { - return { - restrict: 'A', - require: '^tab', - link: function(scope, elm, attrs, tabCtrl) { - scope.$watch('headingElement', function updateHeadingElement(heading) { - if (heading) { - elm.html(''); - elm.append(heading); - } - }); - } - }; -}]) - -.directive('tabContentTransclude', function() { - return { - restrict: 'A', - require: '^tabset', - link: function(scope, elm, attrs) { - var tab = scope.$eval(attrs.tabContentTransclude); - - //Now our tab is ready to be transcluded: both the tab heading area - //and the tab content area are loaded. Transclude 'em both. - tab.$transcludeFn(tab.$parent, function(contents) { - angular.forEach(contents, function(node) { - if (isTabHeading(node)) { - //Let tabHeadingTransclude know. - tab.headingElement = node; - } else { - elm.append(node); - } - }); - }); - } - }; - function isTabHeading(node) { - return node.tagName && ( - node.hasAttribute('tab-heading') || - node.hasAttribute('data-tab-heading') || - node.tagName.toLowerCase() === 'tab-heading' || - node.tagName.toLowerCase() === 'data-tab-heading' - ); - } -}) - -; - -angular.module('ui.bootstrap.timepicker', []) - -.constant('timepickerConfig', { - hourStep: 1, - minuteStep: 1, - showMeridian: true, - meridians: null, - readonlyInput: false, - mousewheel: true -}) - -.controller('TimepickerController', ['$scope', '$attrs', '$parse', '$log', '$locale', 'timepickerConfig', function($scope, $attrs, $parse, $log, $locale, timepickerConfig) { - var selected = new Date(), - ngModelCtrl = { $setViewValue: angular.noop }, // nullModelCtrl - meridians = angular.isDefined($attrs.meridians) ? $scope.$parent.$eval($attrs.meridians) : timepickerConfig.meridians || $locale.DATETIME_FORMATS.AMPMS; - - this.init = function( ngModelCtrl_, inputs ) { - ngModelCtrl = ngModelCtrl_; - ngModelCtrl.$render = this.render; - - var hoursInputEl = inputs.eq(0), - minutesInputEl = inputs.eq(1); - - var mousewheel = angular.isDefined($attrs.mousewheel) ? $scope.$parent.$eval($attrs.mousewheel) : timepickerConfig.mousewheel; - if ( mousewheel ) { - this.setupMousewheelEvents( hoursInputEl, minutesInputEl ); - } - - $scope.readonlyInput = angular.isDefined($attrs.readonlyInput) ? $scope.$parent.$eval($attrs.readonlyInput) : timepickerConfig.readonlyInput; - this.setupInputEvents( hoursInputEl, minutesInputEl ); - }; - - var hourStep = timepickerConfig.hourStep; - if ($attrs.hourStep) { - $scope.$parent.$watch($parse($attrs.hourStep), function(value) { - hourStep = parseInt(value, 10); - }); - } - - var minuteStep = timepickerConfig.minuteStep; - if ($attrs.minuteStep) { - $scope.$parent.$watch($parse($attrs.minuteStep), function(value) { - minuteStep = parseInt(value, 10); - }); - } - - // 12H / 24H mode - $scope.showMeridian = timepickerConfig.showMeridian; - if ($attrs.showMeridian) { - $scope.$parent.$watch($parse($attrs.showMeridian), function(value) { - $scope.showMeridian = !!value; - - if ( ngModelCtrl.$error.time ) { - // Evaluate from template - var hours = getHoursFromTemplate(), minutes = getMinutesFromTemplate(); - if (angular.isDefined( hours ) && angular.isDefined( minutes )) { - selected.setHours( hours ); - refresh(); - } - } else { - updateTemplate(); - } - }); - } - - // Get $scope.hours in 24H mode if valid - function getHoursFromTemplate ( ) { - var hours = parseInt( $scope.hours, 10 ); - var valid = ( $scope.showMeridian ) ? (hours > 0 && hours < 13) : (hours >= 0 && hours < 24); - if ( !valid ) { - return undefined; - } - - if ( $scope.showMeridian ) { - if ( hours === 12 ) { - hours = 0; - } - if ( $scope.meridian === meridians[1] ) { - hours = hours + 12; - } - } - return hours; - } - - function getMinutesFromTemplate() { - var minutes = parseInt($scope.minutes, 10); - return ( minutes >= 0 && minutes < 60 ) ? minutes : undefined; - } - - function pad( value ) { - return ( angular.isDefined(value) && value.toString().length < 2 ) ? '0' + value : value; - } - - // Respond on mousewheel spin - this.setupMousewheelEvents = function( hoursInputEl, minutesInputEl ) { - var isScrollingUp = function(e) { - if (e.originalEvent) { - e = e.originalEvent; - } - //pick correct delta variable depending on event - var delta = (e.wheelDelta) ? e.wheelDelta : -e.deltaY; - return (e.detail || delta > 0); - }; - - hoursInputEl.bind('mousewheel wheel', function(e) { - $scope.$apply( (isScrollingUp(e)) ? $scope.incrementHours() : $scope.decrementHours() ); - e.preventDefault(); - }); - - minutesInputEl.bind('mousewheel wheel', function(e) { - $scope.$apply( (isScrollingUp(e)) ? $scope.incrementMinutes() : $scope.decrementMinutes() ); - e.preventDefault(); - }); - - }; - - this.setupInputEvents = function( hoursInputEl, minutesInputEl ) { - if ( $scope.readonlyInput ) { - $scope.updateHours = angular.noop; - $scope.updateMinutes = angular.noop; - return; - } - - var invalidate = function(invalidHours, invalidMinutes) { - ngModelCtrl.$setViewValue( null ); - ngModelCtrl.$setValidity('time', false); - if (angular.isDefined(invalidHours)) { - $scope.invalidHours = invalidHours; - } - if (angular.isDefined(invalidMinutes)) { - $scope.invalidMinutes = invalidMinutes; - } - }; - - $scope.updateHours = function() { - var hours = getHoursFromTemplate(); - - if ( angular.isDefined(hours) ) { - selected.setHours( hours ); - refresh( 'h' ); - } else { - invalidate(true); - } - }; - - hoursInputEl.bind('blur', function(e) { - if ( !$scope.invalidHours && $scope.hours < 10) { - $scope.$apply( function() { - $scope.hours = pad( $scope.hours ); - }); - } - }); - - $scope.updateMinutes = function() { - var minutes = getMinutesFromTemplate(); - - if ( angular.isDefined(minutes) ) { - selected.setMinutes( minutes ); - refresh( 'm' ); - } else { - invalidate(undefined, true); - } - }; - - minutesInputEl.bind('blur', function(e) { - if ( !$scope.invalidMinutes && $scope.minutes < 10 ) { - $scope.$apply( function() { - $scope.minutes = pad( $scope.minutes ); - }); - } - }); - - }; - - this.render = function() { - var date = ngModelCtrl.$modelValue ? new Date( ngModelCtrl.$modelValue ) : null; - - if ( isNaN(date) ) { - ngModelCtrl.$setValidity('time', false); - $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.'); - } else { - if ( date ) { - selected = date; - } - makeValid(); - updateTemplate(); - } - }; - - // Call internally when we know that model is valid. - function refresh( keyboardChange ) { - makeValid(); - ngModelCtrl.$setViewValue( new Date(selected) ); - updateTemplate( keyboardChange ); - } - - function makeValid() { - ngModelCtrl.$setValidity('time', true); - $scope.invalidHours = false; - $scope.invalidMinutes = false; - } - - function updateTemplate( keyboardChange ) { - var hours = selected.getHours(), minutes = selected.getMinutes(); - - if ( $scope.showMeridian ) { - hours = ( hours === 0 || hours === 12 ) ? 12 : hours % 12; // Convert 24 to 12 hour system - } - - $scope.hours = keyboardChange === 'h' ? hours : pad(hours); - $scope.minutes = keyboardChange === 'm' ? minutes : pad(minutes); - $scope.meridian = selected.getHours() < 12 ? meridians[0] : meridians[1]; - } - - function addMinutes( minutes ) { - var dt = new Date( selected.getTime() + minutes * 60000 ); - selected.setHours( dt.getHours(), dt.getMinutes() ); - refresh(); - } - - $scope.incrementHours = function() { - addMinutes( hourStep * 60 ); - }; - $scope.decrementHours = function() { - addMinutes( - hourStep * 60 ); - }; - $scope.incrementMinutes = function() { - addMinutes( minuteStep ); - }; - $scope.decrementMinutes = function() { - addMinutes( - minuteStep ); - }; - $scope.toggleMeridian = function() { - addMinutes( 12 * 60 * (( selected.getHours() < 12 ) ? 1 : -1) ); - }; -}]) - -.directive('timepicker', function () { - return { - restrict: 'EA', - require: ['timepicker', '?^ngModel'], - controller:'TimepickerController', - replace: true, - scope: {}, - templateUrl: 'template/timepicker/timepicker.html', - link: function(scope, element, attrs, ctrls) { - var timepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1]; - - if ( ngModelCtrl ) { - timepickerCtrl.init( ngModelCtrl, element.find('input') ); - } - } - }; -}); - -angular.module('ui.bootstrap.typeahead', ['ui.bootstrap.position', 'ui.bootstrap.bindHtml']) - -/** - * A helper service that can parse typeahead's syntax (string provided by users) - * Extracted to a separate service for ease of unit testing - */ - .factory('typeaheadParser', ['$parse', function ($parse) { - - // 00000111000000000000022200000000000000003333333333333330000000000044000 - var TYPEAHEAD_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?\s+for\s+(?:([\$\w][\$\w\d]*))\s+in\s+(.*)$/; - - return { - parse:function (input) { - - var match = input.match(TYPEAHEAD_REGEXP); - if (!match) { - throw new Error( - 'Expected typeahead specification in form of "_modelValue_ (as _label_)? for _item_ in _collection_"' + - ' but got "' + input + '".'); - } - - return { - itemName:match[3], - source:$parse(match[4]), - viewMapper:$parse(match[2] || match[1]), - modelMapper:$parse(match[1]) - }; - } - }; -}]) - - .directive('typeahead', ['$compile', '$parse', '$q', '$timeout', '$document', '$position', 'typeaheadParser', - function ($compile, $parse, $q, $timeout, $document, $position, typeaheadParser) { - - var HOT_KEYS = [9, 13, 27, 38, 40]; - - return { - require:'ngModel', - link:function (originalScope, element, attrs, modelCtrl) { - - //SUPPORTED ATTRIBUTES (OPTIONS) - - //minimal no of characters that needs to be entered before typeahead kicks-in - var minSearch = originalScope.$eval(attrs.typeaheadMinLength) || 1; - - //minimal wait time after last character typed before typehead kicks-in - var waitTime = originalScope.$eval(attrs.typeaheadWaitMs) || 0; - - //should it restrict model values to the ones selected from the popup only? - var isEditable = originalScope.$eval(attrs.typeaheadEditable) !== false; - - //binding to a variable that indicates if matches are being retrieved asynchronously - var isLoadingSetter = $parse(attrs.typeaheadLoading).assign || angular.noop; - - //a callback executed when a match is selected - var onSelectCallback = $parse(attrs.typeaheadOnSelect); - - var inputFormatter = attrs.typeaheadInputFormatter ? $parse(attrs.typeaheadInputFormatter) : undefined; - - var appendToBody = attrs.typeaheadAppendToBody ? originalScope.$eval(attrs.typeaheadAppendToBody) : false; - - //INTERNAL VARIABLES - - //model setter executed upon match selection - var $setModelValue = $parse(attrs.ngModel).assign; - - //expressions used by typeahead - var parserResult = typeaheadParser.parse(attrs.typeahead); - - var hasFocus; - - //create a child scope for the typeahead directive so we are not polluting original scope - //with typeahead-specific data (matches, query etc.) - var scope = originalScope.$new(); - originalScope.$on('$destroy', function(){ - scope.$destroy(); - }); - - // WAI-ARIA - var popupId = 'typeahead-' + scope.$id + '-' + Math.floor(Math.random() * 10000); - element.attr({ - 'aria-autocomplete': 'list', - 'aria-expanded': false, - 'aria-owns': popupId - }); - - //pop-up element used to display matches - var popUpEl = angular.element('
      '); - popUpEl.attr({ - id: popupId, - matches: 'matches', - active: 'activeIdx', - select: 'select(activeIdx)', - query: 'query', - position: 'position' - }); - //custom item template - if (angular.isDefined(attrs.typeaheadTemplateUrl)) { - popUpEl.attr('template-url', attrs.typeaheadTemplateUrl); - } - - var resetMatches = function() { - scope.matches = []; - scope.activeIdx = -1; - element.attr('aria-expanded', false); - }; - - var getMatchId = function(index) { - return popupId + '-option-' + index; - }; - - // Indicate that the specified match is the active (pre-selected) item in the list owned by this typeahead. - // This attribute is added or removed automatically when the `activeIdx` changes. - scope.$watch('activeIdx', function(index) { - if (index < 0) { - element.removeAttr('aria-activedescendant'); - } else { - element.attr('aria-activedescendant', getMatchId(index)); - } - }); - - var getMatchesAsync = function(inputValue) { - - var locals = {$viewValue: inputValue}; - isLoadingSetter(originalScope, true); - $q.when(parserResult.source(originalScope, locals)).then(function(matches) { - - //it might happen that several async queries were in progress if a user were typing fast - //but we are interested only in responses that correspond to the current view value - var onCurrentRequest = (inputValue === modelCtrl.$viewValue); - if (onCurrentRequest && hasFocus) { - if (matches.length > 0) { - - scope.activeIdx = 0; - scope.matches.length = 0; - - //transform labels - for(var i=0; i= minSearch) { - if (waitTime > 0) { - if (timeoutPromise) { - $timeout.cancel(timeoutPromise);//cancel previous timeout - } - timeoutPromise = $timeout(function () { - getMatchesAsync(inputValue); - }, waitTime); - } else { - getMatchesAsync(inputValue); - } - } else { - isLoadingSetter(originalScope, false); - resetMatches(); - } - - if (isEditable) { - return inputValue; - } else { - if (!inputValue) { - // Reset in case user had typed something previously. - modelCtrl.$setValidity('editable', true); - return inputValue; - } else { - modelCtrl.$setValidity('editable', false); - return undefined; - } - } - }); - - modelCtrl.$formatters.push(function (modelValue) { - - var candidateViewValue, emptyViewValue; - var locals = {}; - - if (inputFormatter) { - - locals['$model'] = modelValue; - return inputFormatter(originalScope, locals); - - } else { - - //it might happen that we don't have enough info to properly render input value - //we need to check for this situation and simply return model value if we can't apply custom formatting - locals[parserResult.itemName] = modelValue; - candidateViewValue = parserResult.viewMapper(originalScope, locals); - locals[parserResult.itemName] = undefined; - emptyViewValue = parserResult.viewMapper(originalScope, locals); - - return candidateViewValue!== emptyViewValue ? candidateViewValue : modelValue; - } - }); - - scope.select = function (activeIdx) { - //called from within the $digest() cycle - var locals = {}; - var model, item; - - locals[parserResult.itemName] = item = scope.matches[activeIdx].model; - model = parserResult.modelMapper(originalScope, locals); - $setModelValue(originalScope, model); - modelCtrl.$setValidity('editable', true); - - onSelectCallback(originalScope, { - $item: item, - $model: model, - $label: parserResult.viewMapper(originalScope, locals) - }); - - resetMatches(); - - //return focus to the input element if a match was selected via a mouse click event - // use timeout to avoid $rootScope:inprog error - $timeout(function() { element[0].focus(); }, 0, false); - }; - - //bind keyboard events: arrows up(38) / down(40), enter(13) and tab(9), esc(27) - element.bind('keydown', function (evt) { - - //typeahead is open and an "interesting" key was pressed - if (scope.matches.length === 0 || HOT_KEYS.indexOf(evt.which) === -1) { - return; - } - - evt.preventDefault(); - - if (evt.which === 40) { - scope.activeIdx = (scope.activeIdx + 1) % scope.matches.length; - scope.$digest(); - - } else if (evt.which === 38) { - scope.activeIdx = (scope.activeIdx ? scope.activeIdx : scope.matches.length) - 1; - scope.$digest(); - - } else if (evt.which === 13 || evt.which === 9) { - scope.$apply(function () { - scope.select(scope.activeIdx); - }); - - } else if (evt.which === 27) { - evt.stopPropagation(); - - resetMatches(); - scope.$digest(); - } - }); - - element.bind('blur', function (evt) { - hasFocus = false; - }); - - // Keep reference to click handler to unbind it. - var dismissClickHandler = function (evt) { - if (element[0] !== evt.target) { - resetMatches(); - scope.$digest(); - } - }; - - $document.bind('click', dismissClickHandler); - - originalScope.$on('$destroy', function(){ - $document.unbind('click', dismissClickHandler); - }); - - var $popup = $compile(popUpEl)(scope); - if ( appendToBody ) { - $document.find('body').append($popup); - } else { - element.after($popup); - } - } - }; - -}]) - - .directive('typeaheadPopup', function () { - return { - restrict:'EA', - scope:{ - matches:'=', - query:'=', - active:'=', - position:'=', - select:'&' - }, - replace:true, - templateUrl:'template/typeahead/typeahead-popup.html', - link:function (scope, element, attrs) { - - scope.templateUrl = attrs.templateUrl; - - scope.isOpen = function () { - return scope.matches.length > 0; - }; - - scope.isActive = function (matchIdx) { - return scope.active == matchIdx; - }; - - scope.selectActive = function (matchIdx) { - scope.active = matchIdx; - }; - - scope.selectMatch = function (activeIdx) { - scope.select({activeIdx:activeIdx}); - }; - } - }; - }) - - .directive('typeaheadMatch', ['$http', '$templateCache', '$compile', '$parse', function ($http, $templateCache, $compile, $parse) { - return { - restrict:'EA', - scope:{ - index:'=', - match:'=', - query:'=' - }, - link:function (scope, element, attrs) { - var tplUrl = $parse(attrs.templateUrl)(scope.$parent) || 'template/typeahead/typeahead-match.html'; - $http.get(tplUrl, {cache: $templateCache}).success(function(tplContent){ - element.replaceWith($compile(tplContent.trim())(scope)); - }); - } - }; - }]) - - .filter('typeaheadHighlight', function() { - - function escapeRegexp(queryToEscape) { - return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1'); - } - - return function(matchItem, query) { - return query ? ('' + matchItem).replace(new RegExp(escapeRegexp(query), 'gi'), '$&') : matchItem; - }; - }); - -angular.module("template/accordion/accordion-group.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/accordion/accordion-group.html", - "
      \n" + - "
      \n" + - "

      \n" + - " {{heading}}\n" + - "

      \n" + - "
      \n" + - "
      \n" + - "
      \n" + - "
      \n" + - "
      "); -}]); - -angular.module("template/accordion/accordion.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/accordion/accordion.html", - "
      "); -}]); - -angular.module("template/alert/alert.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/alert/alert.html", - "
      \n" + - " \n" + - "
      \n" + - "
      \n" + - ""); -}]); - -angular.module("template/carousel/carousel.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/carousel/carousel.html", - "
      \n" + - "
        1\">\n" + - "
      1. \n" + - "
      \n" + - "
      \n" + - " 1\">\n" + - " 1\">\n" + - "
      \n" + - ""); -}]); - -angular.module("template/carousel/slide.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/carousel/slide.html", - "
      \n" + - ""); -}]); - -angular.module("template/datepicker/datepicker.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/datepicker/datepicker.html", - "
      \n" + - " \n" + - " \n" + - " \n" + - "
      "); -}]); - -angular.module("template/datepicker/day.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/datepicker/day.html", - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
      {{label.abbr}}
      {{ weekNumbers[$index] }}\n" + - " \n" + - "
      \n" + - ""); -}]); - -angular.module("template/datepicker/month.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/datepicker/month.html", - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
      \n" + - " \n" + - "
      \n" + - ""); -}]); - -angular.module("template/datepicker/popup.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/datepicker/popup.html", - "
        \n" + - "
      • \n" + - "
      • \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
      • \n" + - "
      \n" + - ""); -}]); - -angular.module("template/datepicker/year.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/datepicker/year.html", - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
      \n" + - " \n" + - "
      \n" + - ""); -}]); - -angular.module("template/modal/backdrop.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/modal/backdrop.html", - "
      \n" + - ""); -}]); - -angular.module("template/modal/window.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/modal/window.html", - "
      \n" + - "
      \n" + - "
      "); -}]); - -angular.module("template/pagination/pager.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/pagination/pager.html", - ""); -}]); - -angular.module("template/pagination/pagination.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/pagination/pagination.html", - ""); -}]); - -angular.module("template/tooltip/tooltip-html-unsafe-popup.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/tooltip/tooltip-html-unsafe-popup.html", - "
      \n" + - "
      \n" + - "
      \n" + - "
      \n" + - ""); -}]); - -angular.module("template/tooltip/tooltip-popup.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/tooltip/tooltip-popup.html", - "
      \n" + - "
      \n" + - "
      \n" + - "
      \n" + - ""); -}]); - -angular.module("template/popover/popover.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/popover/popover.html", - "
      \n" + - "
      \n" + - "\n" + - "
      \n" + - "

      \n" + - "
      \n" + - "
      \n" + - "
      \n" + - ""); -}]); - -angular.module("template/progressbar/bar.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/progressbar/bar.html", - "
      "); -}]); - -angular.module("template/progressbar/progress.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/progressbar/progress.html", - "
      "); -}]); - -angular.module("template/progressbar/progressbar.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/progressbar/progressbar.html", - "
      \n" + - "
      \n" + - "
      "); -}]); - -angular.module("template/rating/rating.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/rating/rating.html", - "\n" + - " \n" + - " ({{ $index < value ? '*' : ' ' }})\n" + - " \n" + - ""); -}]); - -angular.module("template/tabs/tab.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/tabs/tab.html", - "
    • \n" + - " {{heading}}\n" + - "
    • \n" + - ""); -}]); - -angular.module("template/tabs/tabset-titles.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/tabs/tabset-titles.html", - "
        \n" + - "
      \n" + - ""); -}]); - -angular.module("template/tabs/tabset.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/tabs/tabset.html", - "\n" + - "
      \n" + - "
        \n" + - "
        \n" + - "
        \n" + - "
        \n" + - "
        \n" + - "
        \n" + - ""); -}]); - -angular.module("template/timepicker/timepicker.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/timepicker/timepicker.html", - "\n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - "
         
        \n" + - " \n" + - " :\n" + - " \n" + - "
         
        \n" + - ""); -}]); - -angular.module("template/typeahead/typeahead-match.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/typeahead/typeahead-match.html", - ""); -}]); - -angular.module("template/typeahead/typeahead-popup.html", []).run(["$templateCache", function($templateCache) { - $templateCache.put("template/typeahead/typeahead-popup.html", - "
          \n" + - "
        • \n" + - "
          \n" + - "
        • \n" + - "
        "); -}]); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/angular/version.json b/deps/keycloak/themes/keycloak/common/resources/lib/angular/version.json deleted file mode 100644 index 7325f62f7..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/angular/version.json +++ /dev/null @@ -1 +0,0 @@ -{"raw":"v1.4.4","major":1,"minor":4,"patch":4,"prerelease":[],"build":[],"version":"1.4.4","codeName":"pylon-requirement","full":"1.4.4","branch":"v1.4.x","cdn":{"raw":"v1.4.3","major":1,"minor":4,"patch":3,"prerelease":[],"build":[],"version":"1.4.3","docsUrl":"http://code.angularjs.org/1.4.3/docs"}} \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js b/deps/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js deleted file mode 100644 index fb7149425..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/filesaver/FileSaver.js +++ /dev/null @@ -1,188 +0,0 @@ -/* FileSaver.js - * A saveAs() FileSaver implementation. - * 1.3.2 - * 2016-06-16 18:25:19 - * - * By Eli Grey, http://eligrey.com - * License: MIT - * See https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md - */ - -/*global self */ -/*jslint bitwise: true, indent: 4, laxbreak: true, laxcomma: true, smarttabs: true, plusplus: true */ - -/*! @source http://purl.eligrey.com/github/FileSaver.js/blob/master/FileSaver.js */ - -var saveAs = saveAs || (function(view) { - "use strict"; - // IE <10 is explicitly unsupported - if (typeof view === "undefined" || typeof navigator !== "undefined" && /MSIE [1-9]\./.test(navigator.userAgent)) { - return; - } - var - doc = view.document - // only get URL when necessary in case Blob.js hasn't overridden it yet - , get_URL = function() { - return view.URL || view.webkitURL || view; - } - , save_link = doc.createElementNS("http://www.w3.org/1999/xhtml", "a") - , can_use_save_link = "download" in save_link - , click = function(node) { - var event = new MouseEvent("click"); - node.dispatchEvent(event); - } - , is_safari = /constructor/i.test(view.HTMLElement) || view.safari - , is_chrome_ios =/CriOS\/[\d]+/.test(navigator.userAgent) - , throw_outside = function(ex) { - (view.setImmediate || view.setTimeout)(function() { - throw ex; - }, 0); - } - , force_saveable_type = "application/octet-stream" - // the Blob API is fundamentally broken as there is no "downloadfinished" event to subscribe to - , arbitrary_revoke_timeout = 1000 * 40 // in ms - , revoke = function(file) { - var revoker = function() { - if (typeof file === "string") { // file is an object URL - get_URL().revokeObjectURL(file); - } else { // file is a File - file.remove(); - } - }; - setTimeout(revoker, arbitrary_revoke_timeout); - } - , dispatch = function(filesaver, event_types, event) { - event_types = [].concat(event_types); - var i = event_types.length; - while (i--) { - var listener = filesaver["on" + event_types[i]]; - if (typeof listener === "function") { - try { - listener.call(filesaver, event || filesaver); - } catch (ex) { - throw_outside(ex); - } - } - } - } - , auto_bom = function(blob) { - // prepend BOM for UTF-8 XML and text/* types (including HTML) - // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF - if (/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { - return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}); - } - return blob; - } - , FileSaver = function(blob, name, no_auto_bom) { - if (!no_auto_bom) { - blob = auto_bom(blob); - } - // First try a.download, then web filesystem, then object URLs - var - filesaver = this - , type = blob.type - , force = type === force_saveable_type - , object_url - , dispatch_all = function() { - dispatch(filesaver, "writestart progress write writeend".split(" ")); - } - // on any filesys errors revert to saving with object URLs - , fs_error = function() { - if ((is_chrome_ios || (force && is_safari)) && view.FileReader) { - // Safari doesn't allow downloading of blob urls - var reader = new FileReader(); - reader.onloadend = function() { - var url = is_chrome_ios ? reader.result : reader.result.replace(/^data:[^;]*;/, 'data:attachment/file;'); - var popup = view.open(url, '_blank'); - if(!popup) view.location.href = url; - url=undefined; // release reference before dispatching - filesaver.readyState = filesaver.DONE; - dispatch_all(); - }; - reader.readAsDataURL(blob); - filesaver.readyState = filesaver.INIT; - return; - } - // don't create more object URLs than needed - if (!object_url) { - object_url = get_URL().createObjectURL(blob); - } - if (force) { - view.location.href = object_url; - } else { - var opened = view.open(object_url, "_blank"); - if (!opened) { - // Apple does not allow window.open, see https://developer.apple.com/library/safari/documentation/Tools/Conceptual/SafariExtensionGuide/WorkingwithWindowsandTabs/WorkingwithWindowsandTabs.html - view.location.href = object_url; - } - } - filesaver.readyState = filesaver.DONE; - dispatch_all(); - revoke(object_url); - } - ; - filesaver.readyState = filesaver.INIT; - - if (can_use_save_link) { - object_url = get_URL().createObjectURL(blob); - setTimeout(function() { - save_link.href = object_url; - save_link.download = name; - click(save_link); - dispatch_all(); - revoke(object_url); - filesaver.readyState = filesaver.DONE; - }); - return; - } - - fs_error(); - } - , FS_proto = FileSaver.prototype - , saveAs = function(blob, name, no_auto_bom) { - return new FileSaver(blob, name || blob.name || "download", no_auto_bom); - } - ; - // IE 10+ (native saveAs) - if (typeof navigator !== "undefined" && navigator.msSaveOrOpenBlob) { - return function(blob, name, no_auto_bom) { - name = name || blob.name || "download"; - - if (!no_auto_bom) { - blob = auto_bom(blob); - } - return navigator.msSaveOrOpenBlob(blob, name); - }; - } - - FS_proto.abort = function(){}; - FS_proto.readyState = FS_proto.INIT = 0; - FS_proto.WRITING = 1; - FS_proto.DONE = 2; - - FS_proto.error = - FS_proto.onwritestart = - FS_proto.onprogress = - FS_proto.onwrite = - FS_proto.onabort = - FS_proto.onerror = - FS_proto.onwriteend = - null; - - return saveAs; -}( - typeof self !== "undefined" && self - || typeof window !== "undefined" && window - || this.content -)); -// `self` is undefined in Firefox for Android content script context -// while `this` is nsIContentFrameMessageManager -// with an attribute `content` that corresponds to the window - -if (typeof module !== "undefined" && module.exports) { - module.exports.saveAs = saveAs; -} else if ((typeof define !== "undefined" && define !== null) && (define.amd !== null)) { - define("FileSaver.js", function() { - return saveAs; - }); -} diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js deleted file mode 100644 index 7cc0ff4cf..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/FileAPI.min.js +++ /dev/null @@ -1,72 +0,0 @@ -/**! - * FileAPI — a set of tools for working with files - * - * @author RubaXa - * @build lib/canvas-to-blob lib/FileAPI.core lib/FileAPI.Image lib/FileAPI.Form lib/FileAPI.XHR lib/FileAPI.Flash - */ -(function(a){var k=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,g;if(g=a.Blob)try{g=Boolean(new Blob)}catch(j){g=!1}var m=g;if(g=m)if(g=a.Uint8Array)try{g=100===(new Blob([new Uint8Array(100)])).size}catch(f){g=!1}var c=g,e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,q=(m||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var l,f,u,g;l=0<=a.split(",")[0].indexOf("base64")?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]);f=new ArrayBuffer(l.length);u=new Uint8Array(f); -for(g=0;g= -a&&!c&&n.end()},isFail:function(){return c},fail:function(){!c&&b(c=!0)},end:function(){e||(e=!0,b())}};return n},each:g,afor:function(b,d){var a=0,c=b.length;l(b)&&c--?function B(){d(c!=a&&B,b[a],a++)}():d(!1)},extend:function(b){g(arguments,function(d){g(d,function(d,a){b[a]=d})});return b},isFile:function(b){return x&&b&&b instanceof v},isCanvas:function(b){return b&&U.test(b.nodeName)},getFilesFilter:function(b){return(b="string"==typeof b?b:b.getAttribute&&b.getAttribute("accept")||"")?RegExp("("+ -b.replace(/\./g,"\\.").replace(/,/g,"|")+")$","i"):/./},readAsDataURL:function(b,d){h.isCanvas(b)?c(b,d,"load",h.toDataURL(b)):e(b,d,"DataURL")},readAsBinaryString:function(b,d){p&&p.prototype.readAsBinaryString?e(b,d,"BinaryString"):e(b,function(b){if("load"==b.type)try{b.result=h.toBinaryString(b.result)}catch(a){b.type="error",b.message=a.toString()}d(b)},"DataURL")},readAsArrayBuffer:function(b,d){e(b,d,"ArrayBuffer")},readAsText:function(b,d,a){a||(a=d,d="utf-8");e(b,a,"Text",d)},toDataURL:function(b){if("string"== -typeof b)return b;if(b.toDataURL)return b.toDataURL("image/png")},toBinaryString:function(b){return a.atob(h.toDataURL(b).replace(I,""))},readAsImage:function(b,d,a){if(h.isFile(b))if(y){var e=y.createObjectURL(b);e===k?c(b,d,"error"):h.readAsImage(e,d,a)}else h.readAsDataURL(b,function(e){"load"==e.type?h.readAsImage(e.result,d,a):(a||"error"==e.type)&&c(b,d,e,null,{loaded:e.loaded,total:e.total})});else h.isCanvas(b)?c(b,d,"load",b):T.test(b.nodeName)?b.complete?c(b,d,"load",b):f(b,"error abort load", -function B(a){"load"==a.type&&y&&y.revokeObjectURL(b.src);m(b,"error abort load",B);c(b,d,a,b)}):b.iframe?c(b,d,{type:"error"}):(e=new Image,e.src=b.dataURL||b,h.readAsImage(e,d,a))},checkFileObj:function(b){var d={},a=h.accept;"object"==typeof b?d=b:d.name=(b+"").split(/\\|\//g).pop();null==d.type&&(d.type=d.name.split(".").pop());g(a,function(b,a){b=RegExp(b.replace(/\s/g,"|"),"i");b.test(d.type)&&(d.type=a.split("/")[0]+"/"+d.type)});return d},getDropFiles:function(b,d){var a=[],c=(b.originalEvent|| -b||"").dataTransfer||{},e=l(c.items)&&c.items[0]&&q(c.items[0]),n=h.queue(function(){d(a)});g((e?c.items:c.files)||[],function(b){n.inc();if(e)t(b,function(b,d){!b&&a.push.apply(a,d);n.next()});else{var d=function(d){d&&a.push(b);n.next()};if(!b.type&&0==b.size%4096&&102400>=b.size)if(p)try{var c=new p;f(c,K,function(b){b="error"!=b.type;d(b);b&&c.abort()});c.readAsDataURL(b)}catch(l){d(!1)}else d(null);else d(!0)}});n.check()},getFiles:function(b,d,a){var c=[];if(a)return h.filterFiles(h.getFiles(b), -d,a),null;b.jquery&&(b.each(function(){c=c.concat(h.getFiles(this))}),b=c,c=[]);"string"==typeof d&&(d=h.getFilesFilter(d));b.originalEvent?b=A(b.originalEvent):b.srcElement&&(b=A(b));b.dataTransfer?b=b.dataTransfer:b.target&&(b=b.target);b.files?c=b.files:!x&&L.test(b&&b.tagName)?h.trim(b.value)&&(c=[h.checkFileObj(b.value)],c[0].blob=b,c[0].iframe=!0):l(b)&&(c=b);return h.filter(c,function(b){return!d||d.test(b.name)})},getInfo:function(b,d){var a={},c=O.concat();h.isFile(b)?function B(){var e= -c.shift();e?e.test(b.type)?e(b,function(b,c){b?d(b):(h.extend(a,c),B())}):B():d(!1,a)}():d("not_support",a)},addInfoReader:function(b,d){d.test=function(d){return b.test(d)};O.push(d)},filter:function(b,d){for(var a=[],c=0,e=b.length,n;c>2,c=(c&3)<<4|e>>4;isNaN(e)?e=n=64:(e=(e&15)<<2|n>>6,n=isNaN(n)?64:n&63);d+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(l)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(c)+ -"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(e)+"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=".charAt(n)}return d}};h.addInfoReader(/^image/,function(b,d){if(!b.__dimensions){var a=b.__dimensions=h.defer();h.readAsImage(b,function(b){var d=b.target;a.resolve("load"==b.type?!1:"error",{width:d.width,height:d.height})})}b.__dimensions.then(d)});h.event.dnd=function(b,d,a){var c,e;a||(a=d,d=h.F);p?(j(b,"dragenter dragleave dragover",function(b){for(var a= -((b.originalEvent||b||"").dataTransfer||{}).types,n=a&&a.length;n--;)~a[n].indexOf("File")&&(b.preventDefault(),e!==b.type&&(e=b.type,"dragleave"!=e&&d.call(b.currentTarget,!0,b),clearTimeout(c),c=setTimeout(function(){d.call(b.currentTarget,"dragleave"!=e,b)},50)))}),j(b,"drop",function(b){b.preventDefault();e=0;d.call(b.currentTarget,!1,b);h.getDropFiles(b,function(d){a.call(b.currentTarget,d,b)})})):h.log("Drag'n'Drop -- not supported")};n&&!n.fn.dnd&&(n.fn.dnd=function(b,d){return this.each(function(){h.event.dnd(this, -b,d)})});a.FileAPI=h.extend(h,a.FileAPI);h.flashUrl||(h.flashUrl=h.staticPath+"FileAPI.flash.swf");h.flashImageUrl||(h.flashImageUrl=h.staticPath+"FileAPI.flash.image.swf")})(window); -(function(a,k,g){function j(a,c){if(!(this instanceof j))return new j(a);this.file=a;this.better=!c;this.matrix={sx:0,sy:0,sw:0,sh:0,dx:0,dy:0,dw:0,dh:0,resize:0,deg:0}}var m=Math.min,f=Math.round,c=!1,e={8:270,3:180,6:90};try{c=-1=s?(s=g,r=s/j):(r=c,s=r*j),s!=g||r!=c)e.sx=~~((g-s)/2),e.sy=~~((c-r)/2),g=s,c=r}else r&&("min"==r?(q=f(s=j?m(g,q):k*s),k=f(s>=j?q/s:m(c,k))));e.sw=g;e.sh=c;e.dw=q;e.dh=k;return e},_trans:function(a){this._load(this.file,function(c,e){c?a(c):this._apply(e,a)})},get:function(c){if(a.support.transform){var f=this;"auto"==f.matrix.deg?a.getInfo(this.file,function(a,g){f.matrix.deg= -e[g&&g.exif&&g.exif.Orientation]||0;f._trans(c)}):f._trans(c)}else c("not_support")},toData:function(a){this.get(a)}};j.exifOrientation=e;j.transform=function(c,e,f,q){a.getInfo(c,function(m,k){var y={},r=a.queue(function(a){q(a,y)});m?r.fail():a.each(e,function(a,e){if(!r.isFail()){var l=j(k.nodeType?k:c);if("function"==typeof a)a(k,l);else if(a.width)l[a.preview?"preview":"resize"](a.width,a.height,a.type);else a.maxWidth&&(k.width>a.maxWidth||k.height>a.maxHeight)&&l.resize(a.maxWidth,a.maxHeight, -"max");a.rotate===g&&f&&(a.rotate="auto");l.rotate(a.rotate);r.inc();l.toData(function(d,a){d?r.fail():(y[e]=a,r.next())})}})})};a.support.canvas=a.support.transform=c;a.Image=j})(FileAPI,document); -(function(a,k,g){var j=k.encodeURIComponent,m=k.FormData;k=function(){this.items=[]};k.prototype={append:function(a,c,e,g){this.items.push({name:a,blob:c&&c.blob||(void 0==c?"":c),file:c&&(e||c.name),type:c&&(g||c.type)})},each:function(a){for(var c=0,e=this.items.length;c',c.xhr.abort=function(){var a=e.getElementsByName("iframe")[0];if(a)try{a.stop?a.stop():a.contentWindow.stop?a.contentWindow.stop():a.contentWindow.document.execCommand("Stop")}catch(c){}e=null},j=e.getElementsByTagName("form")[0], -j.appendChild(f),k.log(j.parentNode.innerHTML),document.body.appendChild(e),c.xhr.node=e,a[q]=function(a,f,g){c.readyState=4;c.responseText=g;c.end(a,f);e=null},c.readyState=2,j.submit(),j=null):this.xhr&&this.xhr.aborted?k.log("Error: already aborted"):(e=c.xhr=k.getXHR(),f.params&&(j+=(0>j.indexOf("?")?"?":"&")+f.params.join("&")),e.open("POST",j,!0),k.withCredentials&&(e.withCredentials="true"),(!g.headers||!g.headers["X-Requested-With"])&&e.setRequestHeader("X-Requested-With","XMLHttpRequest"), -k.each(g.headers,function(a,c){e.setRequestHeader(c,a)}),g._chunked?(e.upload&&e.upload.addEventListener("progress",function(a){f.retry||g.progress({type:a.type,total:f.size,loaded:f.start+a.loaded,totalSize:f.size},c,g)},!1),e.onreadystatechange=function(){c.status=e.status;c.statusText=e.statusText;c.readyState=e.readyState;if(4==e.readyState){for(var a in{"":1,XML:1,Text:1,Body:1})c["response"+a]=e["response"+a];e.onreadystatechange=null;if(!e.status||0').replace(/#(\w+)#/ig,function(c,e){return a[e]})},t=function(a,c){if(a&&a.style){var e,f;for(e in c){f=c[e];"number"==typeof f&&(f+="px");try{a.style[e]=f}catch(g){}}}},l=function(d,c){a.each(c,function(a,c){var e=d[c];d[c]=function(){this.parent=e;return a.apply(this,arguments)}})},A=function(d){var c=d.wid=a.uid();p._fn[c]=d;return"FileAPI.Flash._fn."+c}, -u=function(a){try{p._fn[a.wid]=null,delete p._fn[a.wid]}catch(c){}},C=function(a,c){if(!v.test(a)){if(/^\.\//.test(a)||"/"!=a.charAt(0)){var e=location.pathname,e=e.substr(0,e.lastIndexOf("/"));a=(e+"/"+a).replace("/./","/")}"//"!=a.substr(0,2)&&(a="//"+location.host+a);v.test(a)||(a=location.protocol+a)}c&&(a+=(/\?/.test(a)?"&":"?")+c);return a},s=a.uid(),y=0,r={},v=/^https?:/i,p={_fn:{},init:function(){var d=g.body&&g.body.firstChild;if(d){do if(1==d.nodeType){a.log("FlashAPI.Flash.init...");var c= -g.createElement("div");t(c,{top:1,right:1,width:5,height:5,position:"absolute"});d.parentNode.insertBefore(c,d);p.publish(c,s);return}while(d=d.nextSibling)}10>y&&setTimeout(p.init,50*++y)},publish:function(d,c){d.innerHTML=q({id:c,src:C(a.flashUrl,"r="+a.version),wmode:"transparent",flashvars:"callback=FileAPI.Flash.event&flashId="+c+"&storeKey="+navigator.userAgent.match(/\d/ig).join("")+"_"+a.version+(p.isReady||(a.pingUrl?"&ping="+a.pingUrl:""))})},ready:function(){p.ready=a.F;p.isReady=!0;p.patch(); -a.event.on(g,"mouseover",p.mouseover);a.event.on(g,"click",function(a){p.mouseover(a)&&(a.preventDefault?a.preventDefault():a.returnValue=!0)})},getWrapper:function(a){do if(/js-fileapi-wrapper/.test(a.className))return a;while((a=a.parentNode)&&a!==g.body)},mouseover:function(d){d=a.event.fix(d).target;if(/input/i.test(d.nodeName)&&"file"==d.type){var c=d.getAttribute(s);if("i"==c||"r"==c)return!1;if("p"!=c){d.setAttribute(s,"i");var c=g.createElement("div"),e=p.getWrapper(d);if(!e){a.log("flash.mouseover.error: js-fileapi-wrapper not found"); -return}t(c,{top:0,left:0,width:d.offsetWidth+100,height:d.offsetHeight+100,zIndex:"1000000",position:"absolute"});e.appendChild(c);p.publish(c,a.uid());d.setAttribute(s,"p")}return!0}},event:function(d){var c=d.type;if("ready"==c){try{p.getInput(d.flashId).setAttribute(s,"r")}catch(e){}p.ready();setTimeout(function(){p.mouseenter(d)},50);return!0}"ping"===c?a.log("(flash -> js).ping:",[d.status,d.savedStatus],d.error):"log"===c?a.log("(flash -> js).log:",d.target):c in p&&setTimeout(function(){a.log("Flash.event."+ -d.type+":",d);p[c](d)},1)},mouseenter:function(d){var c=p.getInput(d.flashId);if(c){p.cmd(d,"multiple",null!=c.getAttribute("multiple"));var e=[],f={};a.each((c.getAttribute("accept")||"").split(/,\s*/),function(d){a.accept[d]&&a.each(a.accept[d].split(" "),function(a){f[a]=1})});a.each(f,function(a,d){e.push(d)});p.cmd(d,"accept",e.length?e.join(",")+","+e.join(",").toUpperCase():"*")}},get:function(a){return g[a]||k[a]||g.embeds[a]},getInput:function(d){try{var c=p.getWrapper(p.get(d));if(c)return c.getElementsByTagName("input")[0]}catch(e){a.log('Can not find "input" by flashId:', -d,e)}},select:function(d){var c=p.getInput(d.flashId),e=a.uid(c);d=d.target.files;a.each(d,function(d){a.checkFileObj(d)});r[e]=d;g.createEvent?(e=g.createEvent("Event"),e.initEvent("change",!0,!1),c.dispatchEvent(e)):g.createEventObject&&(e=g.createEventObject(),c.fireEvent("onchange",e))},cmd:function(d,c,e,f){try{return a.log("(js -> flash)."+c+":",e),p.get(d.flashId||d).cmd(c,e)}catch(g){a.log("(js -> flash).onError:",g),f||setTimeout(function(){p.cmd(d,c,e,!0)},50)}},patch:function(){a.flashEngine= -a.support.transform=!0;l(a,{getFiles:function(d,c,e){if(e)return a.filterFiles(a.getFiles(d),c,e),null;var f=a.isArray(d)?d:r[a.uid(d.target||d.srcElement||d)];if(!f)return this.parent.apply(this,arguments);c&&(c=a.getFilesFilter(c),f=a.filter(f,function(a){return c.test(a.name)}));return f},getInfo:function(d,c){if(d&&!d.flashId)this.parent.apply(this,arguments);else{if(!d.__info){var e=d.__info=a.defer();p.cmd(d,"getFileInfo",{id:d.id,callback:A(function F(a,c){u(F);e.resolve(a,d.info=c)})})}d.__info.then(c)}}}); -a.support.transform=!0;a.Image&&l(a.Image.prototype,{get:function(a,c){this.set({scaleMode:c||"noScale"});this.parent(a)},_load:function(d,c){a.log("FileAPI.Image._load:",d);if(d&&!d.flashId)this.parent.apply(this,arguments);else{var e=this;a.getInfo(d,function(a){c.call(e,a,d)})}},_apply:function(d,c){a.log("FileAPI.Image._apply:",d);if(d&&!d.flashId)this.parent.apply(this,arguments);else{var e=this.getMatrix(d.info);p.cmd(d,"imageTransform",{id:d.id,matrix:e,callback:A(function F(f,k){a.log("FileAPI.Image._apply.callback:", -f);u(F);if(f)c(f);else if(!a.support.dataURI||3E4 - * @version 1.1.10 - */ -if (window.XMLHttpRequest) { - if (window.FormData) { - // allow access to Angular XHR private field: https://github.com/angular/angular.js/issues/1934 - XMLHttpRequest = (function(origXHR) { - return function() { - var xhr = new origXHR(); - xhr.send = (function(orig) { - return function() { - if (arguments[0] instanceof FormData && arguments[0].__setXHR_) { - var formData = arguments[0]; - formData.__setXHR_(xhr); - } - orig.apply(xhr, arguments); - } - })(xhr.send); - return xhr; - } - })(XMLHttpRequest); - } -} diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js deleted file mode 100644 index 64d918237..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-html5-shim.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! 1.1.10 */ -window.XMLHttpRequest&&window.FormData&&(XMLHttpRequest=function(a){return function(){var b=new a;return b.send=function(a){return function(){if(arguments[0]instanceof FormData&&arguments[0].__setXHR_){var c=arguments[0];c.__setXHR_(b)}a.apply(b,arguments)}}(b.send),b}}(XMLHttpRequest)); \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js deleted file mode 100644 index f526e58a8..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.js +++ /dev/null @@ -1,215 +0,0 @@ -/**! - * AngularJS file upload shim for HTML5 FormData - * @author Danial - * @version 1.1.10 - */ -(function() { - -if (window.XMLHttpRequest) { - if (window.FormData) { - // allow access to Angular XHR private field: https://github.com/angular/angular.js/issues/1934 - XMLHttpRequest = (function(origXHR) { - return function() { - var xhr = new origXHR(); - xhr.send = (function(orig) { - return function() { - if (arguments[0] instanceof FormData && arguments[0].__setXHR_) { - var formData = arguments[0]; - formData.__setXHR_(xhr); - } - orig.apply(xhr, arguments); - } - })(xhr.send); - return xhr; - } - })(XMLHttpRequest); - } else { - XMLHttpRequest = (function(origXHR) { - return function() { - var xhr = new origXHR(); - var origSend = xhr.send; - xhr.__requestHeaders = []; - xhr.open = (function(orig) { - xhr.upload = { - addEventListener: function(t, fn, b) { - if (t == 'progress') { - xhr.__progress = fn; - } - } - }; - return function(m, url, b) { - orig.apply(xhr, [m, url, b]); - xhr.__url = url; - } - })(xhr.open); - xhr.getResponseHeader = (function(orig) { - return function(h) { - return xhr.__fileApiXHR ? xhr.__fileApiXHR.getResponseHeader(h) : orig.apply(xhr, [h]); - } - })(xhr.getResponseHeader); - xhr.getAllResponseHeaders = (function(orig) { - return function() { - return xhr.__fileApiXHR ? xhr.__fileApiXHR.getAllResponseHeaders() : orig.apply(xhr); - } - })(xhr.getAllResponseHeaders); - xhr.abort = (function(orig) { - return function() { - return xhr.__fileApiXHR ? xhr.__fileApiXHR.abort() : (orig == null ? null : orig.apply(xhr)); - } - })(xhr.abort); - xhr.send = function() { - if (arguments[0] != null && arguments[0].__isShim && arguments[0].__setXHR_) { - var formData = arguments[0]; - if (arguments[0].__setXHR_) { - var formData = arguments[0]; - formData.__setXHR_(xhr); - } - var config = { - url: xhr.__url, - complete: function(err, fileApiXHR) { - Object.defineProperty(xhr, 'status', {get: function() {return fileApiXHR.status}}); - Object.defineProperty(xhr, 'statusText', {get: function() {return fileApiXHR.statusText}}); - Object.defineProperty(xhr, 'readyState', {get: function() {return 4}}); - Object.defineProperty(xhr, 'response', {get: function() {return fileApiXHR.response}}); - Object.defineProperty(xhr, 'responseText', {get: function() {return fileApiXHR.responseText}}); - xhr.__fileApiXHR = fileApiXHR; - xhr.onreadystatechange(); - }, - progress: function(e) { - xhr.__progress(e); - }, - headers: xhr.__requestHeaders - } - config.data = {}; - config.files = {} - for (var i = 0; i < formData.data.length; i++) { - var item = formData.data[i]; - if (item.val != null && item.val.name != null && item.val.size != null && item.val.type != null) { - config.files[item.key] = item.val; - } else { - config.data[item.key] = item.val; - } - } - - setTimeout(function() { - xhr.__fileApiXHR = FileAPI.upload(config); - }, 1); - } else { - origSend.apply(xhr, arguments); - } - } - return xhr; - } - })(XMLHttpRequest); - } -} - -if (!window.FormData) { - var hasFlash = false; - try { - var fo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash'); - if (fo) hasFlash = true; - } catch(e) { - if (navigator.mimeTypes["application/x-shockwave-flash"] != undefined) hasFlash = true; - } - var wrapFileApi = function(elem) { - if (!elem.__isWrapped && (elem.getAttribute('ng-file-select') != null || elem.getAttribute('data-ng-file-select') != null)) { - var wrap = document.createElement('div'); - wrap.innerHTML = '
        '; - wrap = wrap.firstChild; - var parent = elem.parentNode; - parent.insertBefore(wrap, elem); - parent.removeChild(elem); - wrap.appendChild(elem); - if (!hasFlash) { - wrap.appendChild(document.createTextNode('Flash is required')); - } - elem.__isWrapped = true; - } - }; - var changeFnWrapper = function(fn) { - return function(evt) { - var files = FileAPI.getFiles(evt); - if (!evt.target) { - evt.target = {}; - } - evt.target.files = files; - evt.target.files.item = function(i) { - return evt.target.files[i] || null; - } - fn(evt); - }; - }; - var isFileChange = function(elem, e) { - return (e.toLowerCase() === 'change' || e.toLowerCase() === 'onchange') && elem.getAttribute('type') == 'file'; - } - if (HTMLInputElement.prototype.addEventListener) { - HTMLInputElement.prototype.addEventListener = (function(origAddEventListener) { - return function(e, fn, b, d) { - if (isFileChange(this, e)) { - wrapFileApi(this); - origAddEventListener.apply(this, [e, changeFnWrapper(fn), b, d]); - } else { - origAddEventListener.apply(this, [e, fn, b, d]); - } - } - })(HTMLInputElement.prototype.addEventListener); - } - if (HTMLInputElement.prototype.attachEvent) { - HTMLInputElement.prototype.attachEvent = (function(origAttachEvent) { - return function(e, fn) { - if (isFileChange(this, e)) { - wrapFileApi(this); - origAttachEvent.apply(this, [e, changeFnWrapper(fn)]); - } else { - origAttachEvent.apply(this, [e, fn]); - } - } - })(HTMLInputElement.prototype.attachEvent); - } - - window.FormData = FormData = function() { - return { - append: function(key, val, name) { - this.data.push({ - key: key, - val: val, - name: name - }); - }, - data: [], - __isShim: true - }; - }; - - (function () { - //load FileAPI - if (!window.FileAPI || !FileAPI.upload) { - var base = '', script = document.createElement('script'), allScripts = document.getElementsByTagName('script'), i, index, src; - if (window.FileAPI && window.FileAPI.jsPath) { - base = window.FileAPI.jsPath; - } else { - for (i = 0; i < allScripts.length; i++) { - src = allScripts[i].src; - index = src.indexOf('angular-file-upload-shim.js') - if (index == -1) { - index = src.indexOf('angular-file-upload-shim.min.js'); - } - if (index > -1) { - base = src.substring(0, index); - break; - } - } - } - - if (!window.FileAPI || FileAPI.staticPath == null) { - FileAPI = { - staticPath: base - } - } - - script.setAttribute('src', base + "FileAPI.min.js"); - document.getElementsByTagName('head')[0].appendChild(script); - } - })(); -}})(); \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js deleted file mode 100644 index e76e175e1..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload-shim.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! 1.1.10 */ -!function(){if(window.XMLHttpRequest&&(XMLHttpRequest=window.FormData?function(a){return function(){var b=new a;return b.send=function(a){return function(){if(arguments[0]instanceof FormData&&arguments[0].__setXHR_){var c=arguments[0];c.__setXHR_(b)}a.apply(b,arguments)}}(b.send),b}}(XMLHttpRequest):function(a){return function(){var b=new a,c=b.send;return b.__requestHeaders=[],b.open=function(a){return b.upload={addEventListener:function(a,c){"progress"==a&&(b.__progress=c)}},function(c,d,e){a.apply(b,[c,d,e]),b.__url=d}}(b.open),b.getResponseHeader=function(a){return function(c){return b.__fileApiXHR?b.__fileApiXHR.getResponseHeader(c):a.apply(b,[c])}}(b.getResponseHeader),b.getAllResponseHeaders=function(a){return function(){return b.__fileApiXHR?b.__fileApiXHR.getAllResponseHeaders():a.apply(b)}}(b.getAllResponseHeaders),b.abort=function(a){return function(){return b.__fileApiXHR?b.__fileApiXHR.abort():null==a?null:a.apply(b)}}(b.abort),b.send=function(){if(null!=arguments[0]&&arguments[0].__isShim&&arguments[0].__setXHR_){var a=arguments[0];if(arguments[0].__setXHR_){var a=arguments[0];a.__setXHR_(b)}var d={url:b.__url,complete:function(a,c){Object.defineProperty(b,"status",{get:function(){return c.status}}),Object.defineProperty(b,"statusText",{get:function(){return c.statusText}}),Object.defineProperty(b,"readyState",{get:function(){return 4}}),Object.defineProperty(b,"response",{get:function(){return c.response}}),Object.defineProperty(b,"responseText",{get:function(){return c.responseText}}),b.__fileApiXHR=c,b.onreadystatechange()},progress:function(a){b.__progress(a)},headers:b.__requestHeaders};d.data={},d.files={};for(var e=0;e
      ',c=c.firstChild;var d=b.parentNode;d.insertBefore(c,b),d.removeChild(b),c.appendChild(b),a||c.appendChild(document.createTextNode("Flash is required")),b.__isWrapped=!0}},e=function(a){return function(b){var c=FileAPI.getFiles(b);b.target||(b.target={}),b.target.files=c,b.target.files.item=function(a){return b.target.files[a]||null},a(b)}},f=function(a,b){return("change"===b.toLowerCase()||"onchange"===b.toLowerCase())&&"file"==a.getAttribute("type")};HTMLInputElement.prototype.addEventListener&&(HTMLInputElement.prototype.addEventListener=function(a){return function(b,c,g,h){f(this,b)?(d(this),a.apply(this,[b,e(c),g,h])):a.apply(this,[b,c,g,h])}}(HTMLInputElement.prototype.addEventListener)),HTMLInputElement.prototype.attachEvent&&(HTMLInputElement.prototype.attachEvent=function(a){return function(b,c){f(this,b)?(d(this),a.apply(this,[b,e(c)])):a.apply(this,[b,c])}}(HTMLInputElement.prototype.attachEvent)),window.FormData=FormData=function(){return{append:function(a,b,c){this.data.push({key:a,val:b,name:c})},data:[],__isShim:!0}},function(){if(!window.FileAPI||!FileAPI.upload){var a,b,c,d="",e=document.createElement("script"),f=document.getElementsByTagName("script");if(window.FileAPI&&window.FileAPI.jsPath)d=window.FileAPI.jsPath;else for(a=0;a-1){d=c.substring(0,b);break}window.FileAPI&&null!=FileAPI.staticPath||(FileAPI={staticPath:d}),e.setAttribute("src",d+"FileAPI.min.js"),document.getElementsByTagName("head")[0].appendChild(e)}}()}}(); \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js deleted file mode 100644 index 0daaa6905..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.js +++ /dev/null @@ -1,156 +0,0 @@ -/**! - * AngularJS file upload/drop directive with http post and progress - * @author Danial - * @version 1.1.10 - */ -(function() { - -var angularFileUpload = angular.module('angularFileUpload', []); - -angularFileUpload.service('$upload', ['$http', '$rootScope', '$timeout', function($http, $rootScope, $timeout) { - this.upload = function(config) { - config.method = config.method || 'POST'; - config.headers = config.headers || {}; - config.headers['Content-Type'] = undefined; - config.transformRequest = config.transformRequest || $http.defaults.transformRequest; - var formData = new FormData(); - if (config.data) { - for (var key in config.data) { - var val = config.data[key]; - if (!config.formDataAppender) { - if (typeof config.transformRequest == 'function') { - val = config.transformRequest(val); - } else { - for (var i = 0; i < config.transformRequest.length; i++) { - var fn = config.transformRequest[i]; - if (typeof fn == 'function') { - val = fn(val); - } - } - } - formData.append(key, val); - } else { - config.formDataAppender(formData, key, val); - } - } - } - config.transformRequest = angular.identity; - formData.append(config.fileFormDataName || 'file', config.file, config.file.name); - - formData['__setXHR_'] = function(xhr) { - config.__XHR = xhr; - xhr.upload.addEventListener('progress', function(e) { - if (config.progress) { - $timeout(function() { - config.progress(e); - }); - } - }, false); - //fix for firefox not firing upload progress end - xhr.upload.addEventListener('load', function(e) { - if (e.lengthComputable) { - $timeout(function() { - config.progress(e); - }); - } - }, false); - }; - - config.data = formData; - - var promise = $http(config); - - promise.progress = function(fn) { - config.progress = fn; - return promise; - }; - - promise.abort = function() { - if (config.__XHR) { - $timeout(function() { - config.__XHR.abort(); - }); - } - return promise; - }; - promise.then = (function(promise, origThen) { - return function(s, e, p) { - config.progress = p || config.progress; - origThen.apply(promise, [s, e, p]); - return promise; - }; - })(promise, promise.then); - - return promise; - }; -}]); - -angularFileUpload.directive('ngFileSelect', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) { - return function(scope, elem, attr) { - var fn = $parse(attr['ngFileSelect']); - elem.bind('change', function(evt) { - var files = [], fileList, i; - fileList = evt.target.files; - if (fileList != null) { - for (i = 0; i < fileList.length; i++) { - files.push(fileList.item(i)); - } - } - $timeout(function() { - fn(scope, { - $files : files, - $event : evt - }); - }); - }); - elem.bind('click', function(){ - this.value = null; - }); - }; -} ]); - -angularFileUpload.directive('ngFileDropAvailable', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) { - return function(scope, elem, attr) { - if ('draggable' in document.createElement('span')) { - var fn = $parse(attr['ngFileDropAvailable']); - $timeout(function() { - fn(scope); - }); - } - }; -} ]); - -angularFileUpload.directive('ngFileDrop', [ '$parse', '$http', '$timeout', function($parse, $http, $timeout) { - return function(scope, elem, attr) { - if ('draggable' in document.createElement('span')) { - var fn = $parse(attr['ngFileDrop']); - elem[0].addEventListener("dragover", function(evt) { - evt.stopPropagation(); - evt.preventDefault(); - elem.addClass(attr['ngFileDragOverClass'] || "dragover"); - }, false); - elem[0].addEventListener("dragleave", function(evt) { - elem.removeClass(attr['ngFileDragOverClass'] || "dragover"); - }, false); - elem[0].addEventListener("drop", function(evt) { - evt.stopPropagation(); - evt.preventDefault(); - elem.removeClass(attr['ngFileDragOverClass'] || "dragover"); - var files = [], fileList = evt.dataTransfer.files, i; - if (fileList != null) { - for (i = 0; i < fileList.length; i++) { - files.push(fileList.item(i)); - } - } - $timeout(function() { - fn(scope, { - $files : files, - $event : evt - }); - }); - }, false); - } - }; -} ]); - -})(); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js deleted file mode 100644 index ae51b1f3c..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/fileupload/angular-file-upload.min.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! 1.1.10 */ -!function(){var a=angular.module("angularFileUpload",[]);a.service("$upload",["$http","$rootScope","$timeout",function(a,b,c){this.upload=function(b){b.method=b.method||"POST",b.headers=b.headers||{},b.headers["Content-Type"]=void 0,b.transformRequest=b.transformRequest||a.defaults.transformRequest;var d=new FormData;if(b.data)for(var e in b.data){var f=b.data[e];if(b.formDataAppender)b.formDataAppender(d,e,f);else{if("function"==typeof b.transformRequest)f=b.transformRequest(f);else for(var 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 diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ace.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ace.js deleted file mode 100644 index 2cd64635a..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ace.js +++ /dev/null @@ -1,18673 +0,0 @@ -/* ***** BEGIN LICENSE BLOCK ***** - * Distributed under the BSD license: - * - * Copyright (c) 2010, Ajax.org B.V. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Ajax.org B.V. nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY - * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ***** END LICENSE BLOCK ***** */ - -/** - * Define a module along with a payload - * @param module a name for the payload - * @param payload a function to call with (require, exports, module) params - */ - -(function() { - -var ACE_NAMESPACE = "ace"; - -var global = (function() { return this; })(); -if (!global && typeof window != "undefined") global = window; // strict mode - - -if (!ACE_NAMESPACE && typeof requirejs !== "undefined") - return; - - -var define = function(module, deps, payload) { - if (typeof module !== "string") { - if (define.original) - define.original.apply(this, arguments); - else { - console.error("dropping module because define wasn\'t a string."); - console.trace(); - } - return; - } - if (arguments.length == 2) - payload = deps; - if (!define.modules[module]) { - define.payloads[module] = payload; - define.modules[module] = null; - } -}; - -define.modules = {}; -define.payloads = {}; - -/** - * Get at functionality define()ed using the function above - */ -var _require = function(parentId, module, callback) { - if (typeof module === "string") { - var payload = lookup(parentId, module); - if (payload != undefined) { - callback && callback(); - return payload; - } - } else if (Object.prototype.toString.call(module) === "[object Array]") { - var params = []; - for (var i = 0, l = module.length; i < l; ++i) { - var dep = lookup(parentId, module[i]); - if (dep == undefined && require.original) - return; - params.push(dep); - } - return callback && callback.apply(null, params) || true; - } -}; - -var require = function(module, callback) { - var packagedModule = _require("", module, callback); - if (packagedModule == undefined && require.original) - return require.original.apply(this, arguments); - return packagedModule; -}; - -var normalizeModule = function(parentId, moduleName) { - // normalize plugin requires - if (moduleName.indexOf("!") !== -1) { - var chunks = moduleName.split("!"); - return normalizeModule(parentId, chunks[0]) + "!" + normalizeModule(parentId, chunks[1]); - } - // normalize relative requires - if (moduleName.charAt(0) == ".") { - var base = parentId.split("/").slice(0, -1).join("/"); - moduleName = base + "/" + moduleName; - - while(moduleName.indexOf(".") !== -1 && previous != moduleName) { - var previous = moduleName; - moduleName = moduleName.replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); - } - } - return moduleName; -}; - -/** - * Internal function to lookup moduleNames and resolve them by calling the - * definition function if needed. - */ -var lookup = function(parentId, moduleName) { - moduleName = normalizeModule(parentId, moduleName); - - var module = define.modules[moduleName]; - if (!module) { - module = define.payloads[moduleName]; - if (typeof module === 'function') { - var exports = {}; - var mod = { - id: moduleName, - uri: '', - exports: exports, - packaged: true - }; - - var req = function(module, callback) { - return _require(moduleName, module, callback); - }; - - var returnValue = module(req, exports, mod); - exports = returnValue || mod.exports; - define.modules[moduleName] = exports; - delete define.payloads[moduleName]; - } - module = define.modules[moduleName] = exports || module; - } - return module; -}; - -function exportAce(ns) { - var root = global; - if (ns) { - if (!global[ns]) - global[ns] = {}; - root = global[ns]; - } - - if (!root.define || !root.define.packaged) { - define.original = root.define; - root.define = define; - root.define.packaged = true; - } - - if (!root.require || !root.require.packaged) { - require.original = root.require; - root.require = require; - root.require.packaged = true; - } -} - -exportAce(ACE_NAMESPACE); - -})(); - -ace.define("ace/lib/regexp",["require","exports","module"], function(require, exports, module) { -"use strict"; - - var real = { - exec: RegExp.prototype.exec, - test: RegExp.prototype.test, - match: String.prototype.match, - replace: String.prototype.replace, - split: String.prototype.split - }, - compliantExecNpcg = real.exec.call(/()??/, "")[1] === undefined, // check `exec` handling of nonparticipating capturing groups - compliantLastIndexIncrement = function () { - var x = /^/g; - real.test.call(x, ""); - return !x.lastIndex; - }(); - - if (compliantLastIndexIncrement && compliantExecNpcg) - return; - RegExp.prototype.exec = function (str) { - var match = real.exec.apply(this, arguments), - name, r2; - if ( typeof(str) == 'string' && match) { - if (!compliantExecNpcg && match.length > 1 && indexOf(match, "") > -1) { - r2 = RegExp(this.source, real.replace.call(getNativeFlags(this), "g", "")); - real.replace.call(str.slice(match.index), r2, function () { - for (var i = 1; i < arguments.length - 2; i++) { - if (arguments[i] === undefined) - match[i] = undefined; - } - }); - } - if (this._xregexp && this._xregexp.captureNames) { - for (var i = 1; i < match.length; i++) { - name = this._xregexp.captureNames[i - 1]; - if (name) - match[name] = match[i]; - } - } - if (!compliantLastIndexIncrement && this.global && !match[0].length && (this.lastIndex > match.index)) - this.lastIndex--; - } - return match; - }; - if (!compliantLastIndexIncrement) { - RegExp.prototype.test = function (str) { - var match = real.exec.call(this, str); - if (match && this.global && !match[0].length && (this.lastIndex > match.index)) - this.lastIndex--; - return !!match; - }; - } - - function getNativeFlags (regex) { - return (regex.global ? "g" : "") + - (regex.ignoreCase ? "i" : "") + - (regex.multiline ? "m" : "") + - (regex.extended ? "x" : "") + // Proposed for ES4; included in AS3 - (regex.sticky ? "y" : ""); - } - - function indexOf (array, item, from) { - if (Array.prototype.indexOf) // Use the native array method if available - return array.indexOf(item, from); - for (var i = from || 0; i < array.length; i++) { - if (array[i] === item) - return i; - } - return -1; - } - -}); - -ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { - -function Empty() {} - -if (!Function.prototype.bind) { - Function.prototype.bind = function bind(that) { // .length is 1 - var target = this; - if (typeof target != "function") { - throw new TypeError("Function.prototype.bind called on incompatible " + target); - } - var args = slice.call(arguments, 1); // for normal call - var bound = function () { - - if (this instanceof bound) { - - var result = target.apply( - this, - args.concat(slice.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - - } else { - return target.apply( - that, - args.concat(slice.call(arguments)) - ); - - } - - }; - if(target.prototype) { - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - return bound; - }; -} -var call = Function.prototype.call; -var prototypeOfArray = Array.prototype; -var prototypeOfObject = Object.prototype; -var slice = prototypeOfArray.slice; -var _toString = call.bind(prototypeOfObject.toString); -var owns = call.bind(prototypeOfObject.hasOwnProperty); -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} -if ([1,2].splice(0).length != 2) { - if(function() { // test IE < 9 to splice bug - see issue #138 - function makeArray(l) { - var a = new Array(l+2); - a[0] = a[1] = 0; - return a; - } - var array = [], lengthBefore; - - array.splice.apply(array, makeArray(20)); - array.splice.apply(array, makeArray(26)); - - lengthBefore = array.length; //46 - array.splice(5, 0, "XXX"); // add one element - - lengthBefore + 1 == array.length - - if (lengthBefore + 1 == array.length) { - return true;// has right splice implementation without bugs - } - }()) {//IE 6/7 - var array_splice = Array.prototype.splice; - Array.prototype.splice = function(start, deleteCount) { - if (!arguments.length) { - return []; - } else { - return array_splice.apply(this, [ - start === void 0 ? 0 : start, - deleteCount === void 0 ? (this.length - start) : deleteCount - ].concat(slice.call(arguments, 2))) - } - }; - } else {//IE8 - Array.prototype.splice = function(pos, removeCount){ - var length = this.length; - if (pos > 0) { - if (pos > length) - pos = length; - } else if (pos == void 0) { - pos = 0; - } else if (pos < 0) { - pos = Math.max(length + pos, 0); - } - - if (!(pos+removeCount < length)) - removeCount = length - pos; - - var removed = this.slice(pos, pos+removeCount); - var insert = slice.call(arguments, 2); - var add = insert.length; - if (pos === length) { - if (add) { - this.push.apply(this, insert); - } - } else { - var remove = Math.min(removeCount, length - pos); - var tailOldPos = pos + remove; - var tailNewPos = tailOldPos + add - remove; - var tailCount = length - tailOldPos; - var lengthAfterRemove = length - remove; - - if (tailNewPos < tailOldPos) { // case A - for (var i = 0; i < tailCount; ++i) { - this[tailNewPos+i] = this[tailOldPos+i]; - } - } else if (tailNewPos > tailOldPos) { // case B - for (i = tailCount; i--; ) { - this[tailNewPos+i] = this[tailOldPos+i]; - } - } // else, add == remove (nothing to do) - - if (add && pos === lengthAfterRemove) { - this.length = lengthAfterRemove; // truncate array - this.push.apply(this, insert); - } else { - this.length = lengthAfterRemove + add; // reserves space - for (i = 0; i < add; ++i) { - this[pos+i] = insert[i]; - } - } - } - return removed; - }; - } -} -if (!Array.isArray) { - Array.isArray = function isArray(obj) { - return _toString(obj) == "[object Array]"; - }; -} -var boxedString = Object("a"), - splitString = boxedString[0] != "a" || !(0 in boxedString); - -if (!Array.prototype.forEach) { - Array.prototype.forEach = function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(); // TODO message - } - - while (++i < length) { - if (i in self) { - fun.call(thisp, self[i], i, object); - } - } - }; -} -if (!Array.prototype.map) { - Array.prototype.map = function map(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = Array(length), - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) - result[i] = fun.call(thisp, self[i], i, object); - } - return result; - }; -} -if (!Array.prototype.filter) { - Array.prototype.filter = function filter(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = [], - value, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) { - value = self[i]; - if (fun.call(thisp, value, i, object)) { - result.push(value); - } - } - } - return result; - }; -} -if (!Array.prototype.every) { - Array.prototype.every = function every(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && !fun.call(thisp, self[i], i, object)) { - return false; - } - } - return true; - }; -} -if (!Array.prototype.some) { - Array.prototype.some = function some(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && fun.call(thisp, self[i], i, object)) { - return true; - } - } - return false; - }; -} -if (!Array.prototype.reduce) { - Array.prototype.reduce = function reduce(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - if (!length && arguments.length == 1) { - throw new TypeError("reduce of empty array with no initial value"); - } - - var i = 0; - var result; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i++]; - break; - } - if (++i >= length) { - throw new TypeError("reduce of empty array with no initial value"); - } - } while (true); - } - - for (; i < length; i++) { - if (i in self) { - result = fun.call(void 0, result, self[i], i, object); - } - } - - return result; - }; -} -if (!Array.prototype.reduceRight) { - Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - if (!length && arguments.length == 1) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - - var result, i = length - 1; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i--]; - break; - } - if (--i < 0) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - } while (true); - } - - do { - if (i in this) { - result = fun.call(void 0, result, self[i], i, object); - } - } while (i--); - - return result; - }; -} -if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { - Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { - var self = splitString && _toString(this) == "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - - var i = 0; - if (arguments.length > 1) { - i = toInteger(arguments[1]); - } - i = i >= 0 ? i : Math.max(0, length + i); - for (; i < length; i++) { - if (i in self && self[i] === sought) { - return i; - } - } - return -1; - }; -} -if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { - Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { - var self = splitString && _toString(this) == "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - var i = length - 1; - if (arguments.length > 1) { - i = Math.min(i, toInteger(arguments[1])); - } - i = i >= 0 ? i : length - Math.abs(i); - for (; i >= 0; i--) { - if (i in self && sought === self[i]) { - return i; - } - } - return -1; - }; -} -if (!Object.getPrototypeOf) { - Object.getPrototypeOf = function getPrototypeOf(object) { - return object.__proto__ || ( - object.constructor ? - object.constructor.prototype : - prototypeOfObject - ); - }; -} -if (!Object.getOwnPropertyDescriptor) { - var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + - "non-object: "; - Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { - if ((typeof object != "object" && typeof object != "function") || object === null) - throw new TypeError(ERR_NON_OBJECT + object); - if (!owns(object, property)) - return; - - var descriptor, getter, setter; - descriptor = { enumerable: true, configurable: true }; - if (supportsAccessors) { - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - - var getter = lookupGetter(object, property); - var setter = lookupSetter(object, property); - object.__proto__ = prototype; - - if (getter || setter) { - if (getter) descriptor.get = getter; - if (setter) descriptor.set = setter; - return descriptor; - } - } - descriptor.value = object[property]; - return descriptor; - }; -} -if (!Object.getOwnPropertyNames) { - Object.getOwnPropertyNames = function getOwnPropertyNames(object) { - return Object.keys(object); - }; -} -if (!Object.create) { - var createEmpty; - if (Object.prototype.__proto__ === null) { - createEmpty = function () { - return { "__proto__": null }; - }; - } else { - createEmpty = function () { - var empty = {}; - for (var i in empty) - empty[i] = null; - empty.constructor = - empty.hasOwnProperty = - empty.propertyIsEnumerable = - empty.isPrototypeOf = - empty.toLocaleString = - empty.toString = - empty.valueOf = - empty.__proto__ = null; - return empty; - } - } - - Object.create = function create(prototype, properties) { - var object; - if (prototype === null) { - object = createEmpty(); - } else { - if (typeof prototype != "object") - throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); - var Type = function () {}; - Type.prototype = prototype; - object = new Type(); - object.__proto__ = prototype; - } - if (properties !== void 0) - Object.defineProperties(object, properties); - return object; - }; -} - -function doesDefinePropertyWork(object) { - try { - Object.defineProperty(object, "sentinel", {}); - return "sentinel" in object; - } catch (exception) { - } -} -if (Object.defineProperty) { - var definePropertyWorksOnObject = doesDefinePropertyWork({}); - var definePropertyWorksOnDom = typeof document == "undefined" || - doesDefinePropertyWork(document.createElement("div")); - if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { - var definePropertyFallback = Object.defineProperty; - } -} - -if (!Object.defineProperty || definePropertyFallback) { - var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; - var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " - var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + - "on this javascript engine"; - - Object.defineProperty = function defineProperty(object, property, descriptor) { - if ((typeof object != "object" && typeof object != "function") || object === null) - throw new TypeError(ERR_NON_OBJECT_TARGET + object); - if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) - throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); - if (definePropertyFallback) { - try { - return definePropertyFallback.call(Object, object, property, descriptor); - } catch (exception) { - } - } - if (owns(descriptor, "value")) { - - if (supportsAccessors && (lookupGetter(object, property) || - lookupSetter(object, property))) - { - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - delete object[property]; - object[property] = descriptor.value; - object.__proto__ = prototype; - } else { - object[property] = descriptor.value; - } - } else { - if (!supportsAccessors) - throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); - if (owns(descriptor, "get")) - defineGetter(object, property, descriptor.get); - if (owns(descriptor, "set")) - defineSetter(object, property, descriptor.set); - } - - return object; - }; -} -if (!Object.defineProperties) { - Object.defineProperties = function defineProperties(object, properties) { - for (var property in properties) { - if (owns(properties, property)) - Object.defineProperty(object, property, properties[property]); - } - return object; - }; -} -if (!Object.seal) { - Object.seal = function seal(object) { - return object; - }; -} -if (!Object.freeze) { - Object.freeze = function freeze(object) { - return object; - }; -} -try { - Object.freeze(function () {}); -} catch (exception) { - Object.freeze = (function freeze(freezeObject) { - return function freeze(object) { - if (typeof object == "function") { - return object; - } else { - return freezeObject(object); - } - }; - })(Object.freeze); -} -if (!Object.preventExtensions) { - Object.preventExtensions = function preventExtensions(object) { - return object; - }; -} -if (!Object.isSealed) { - Object.isSealed = function isSealed(object) { - return false; - }; -} -if (!Object.isFrozen) { - Object.isFrozen = function isFrozen(object) { - return false; - }; -} -if (!Object.isExtensible) { - Object.isExtensible = function isExtensible(object) { - if (Object(object) === object) { - throw new TypeError(); // TODO message - } - var name = ''; - while (owns(object, name)) { - name += '?'; - } - object[name] = true; - var returnValue = owns(object, name); - delete object[name]; - return returnValue; - }; -} -if (!Object.keys) { - var hasDontEnumBug = true, - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - dontEnumsLength = dontEnums.length; - - for (var key in {"toString": null}) { - hasDontEnumBug = false; - } - - Object.keys = function keys(object) { - - if ( - (typeof object != "object" && typeof object != "function") || - object === null - ) { - throw new TypeError("Object.keys called on a non-object"); - } - - var keys = []; - for (var name in object) { - if (owns(object, name)) { - keys.push(name); - } - } - - if (hasDontEnumBug) { - for (var i = 0, ii = dontEnumsLength; i < ii; i++) { - var dontEnum = dontEnums[i]; - if (owns(object, dontEnum)) { - keys.push(dontEnum); - } - } - } - return keys; - }; - -} -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + - "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + - "\u2029\uFEFF"; -if (!String.prototype.trim || ws.trim()) { - ws = "[" + ws + "]"; - var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), - trimEndRegexp = new RegExp(ws + ws + "*$"); - String.prototype.trim = function trim() { - return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); - }; -} - -function toInteger(n) { - n = +n; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function isPrimitive(input) { - var type = typeof input; - return ( - input === null || - type === "undefined" || - type === "boolean" || - type === "number" || - type === "string" - ); -} - -function toPrimitive(input) { - var val, valueOf, toString; - if (isPrimitive(input)) { - return input; - } - valueOf = input.valueOf; - if (typeof valueOf === "function") { - val = valueOf.call(input); - if (isPrimitive(val)) { - return val; - } - } - toString = input.toString; - if (typeof toString === "function") { - val = toString.call(input); - if (isPrimitive(val)) { - return val; - } - } - throw new TypeError(); -} -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert "+o+" to object"); - } - return Object(o); -}; - -}); - -ace.define("ace/lib/fixoldbrowsers",["require","exports","module","ace/lib/regexp","ace/lib/es5-shim"], function(require, exports, module) { -"use strict"; - -require("./regexp"); -require("./es5-shim"); - -}); - -ace.define("ace/lib/dom",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var XHTML_NS = "http://www.w3.org/1999/xhtml"; - -exports.getDocumentHead = function(doc) { - if (!doc) - doc = document; - return doc.head || doc.getElementsByTagName("head")[0] || doc.documentElement; -}; - -exports.createElement = function(tag, ns) { - return document.createElementNS ? - document.createElementNS(ns || XHTML_NS, tag) : - document.createElement(tag); -}; - -exports.hasCssClass = function(el, name) { - var classes = (el.className || "").split(/\s+/g); - return classes.indexOf(name) !== -1; -}; -exports.addCssClass = function(el, name) { - if (!exports.hasCssClass(el, name)) { - el.className += " " + name; - } -}; -exports.removeCssClass = function(el, name) { - var classes = el.className.split(/\s+/g); - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; - } - classes.splice(index, 1); - } - el.className = classes.join(" "); -}; - -exports.toggleCssClass = function(el, name) { - var classes = el.className.split(/\s+/g), add = true; - while (true) { - var index = classes.indexOf(name); - if (index == -1) { - break; - } - add = false; - classes.splice(index, 1); - } - if (add) - classes.push(name); - - el.className = classes.join(" "); - return add; -}; -exports.setCssClass = function(node, className, include) { - if (include) { - exports.addCssClass(node, className); - } else { - exports.removeCssClass(node, className); - } -}; - -exports.hasCssString = function(id, doc) { - var index = 0, sheets; - doc = doc || document; - - if (doc.createStyleSheet && (sheets = doc.styleSheets)) { - while (index < sheets.length) - if (sheets[index++].owningElement.id === id) return true; - } else if ((sheets = doc.getElementsByTagName("style"))) { - while (index < sheets.length) - if (sheets[index++].id === id) return true; - } - - return false; -}; - -exports.importCssString = function importCssString(cssText, id, doc) { - doc = doc || document; - if (id && exports.hasCssString(id, doc)) - return null; - - var style; - - if (id) - cssText += "\n/*# sourceURL=ace/css/" + id + " */"; - - if (doc.createStyleSheet) { - style = doc.createStyleSheet(); - style.cssText = cssText; - if (id) - style.owningElement.id = id; - } else { - style = exports.createElement("style"); - style.appendChild(doc.createTextNode(cssText)); - if (id) - style.id = id; - - exports.getDocumentHead(doc).appendChild(style); - } -}; - -exports.importCssStylsheet = function(uri, doc) { - if (doc.createStyleSheet) { - doc.createStyleSheet(uri); - } else { - var link = exports.createElement('link'); - link.rel = 'stylesheet'; - link.href = uri; - - exports.getDocumentHead(doc).appendChild(link); - } -}; - -exports.getInnerWidth = function(element) { - return ( - parseInt(exports.computedStyle(element, "paddingLeft"), 10) + - parseInt(exports.computedStyle(element, "paddingRight"), 10) + - element.clientWidth - ); -}; - -exports.getInnerHeight = function(element) { - return ( - parseInt(exports.computedStyle(element, "paddingTop"), 10) + - parseInt(exports.computedStyle(element, "paddingBottom"), 10) + - element.clientHeight - ); -}; - -exports.scrollbarWidth = function(document) { - var inner = exports.createElement("ace_inner"); - inner.style.width = "100%"; - inner.style.minWidth = "0px"; - inner.style.height = "200px"; - inner.style.display = "block"; - - var outer = exports.createElement("ace_outer"); - var style = outer.style; - - style.position = "absolute"; - style.left = "-10000px"; - style.overflow = "hidden"; - style.width = "200px"; - style.minWidth = "0px"; - style.height = "150px"; - style.display = "block"; - - outer.appendChild(inner); - - var body = document.documentElement; - body.appendChild(outer); - - var noScrollbar = inner.offsetWidth; - - style.overflow = "scroll"; - var withScrollbar = inner.offsetWidth; - - if (noScrollbar == withScrollbar) { - withScrollbar = outer.clientWidth; - } - - body.removeChild(outer); - - return noScrollbar-withScrollbar; -}; - -if (typeof document == "undefined") { - exports.importCssString = function() {}; - return; -} - -if (window.pageYOffset !== undefined) { - exports.getPageScrollTop = function() { - return window.pageYOffset; - }; - - exports.getPageScrollLeft = function() { - return window.pageXOffset; - }; -} -else { - exports.getPageScrollTop = function() { - return document.body.scrollTop; - }; - - exports.getPageScrollLeft = function() { - return document.body.scrollLeft; - }; -} - -if (window.getComputedStyle) - exports.computedStyle = function(element, style) { - if (style) - return (window.getComputedStyle(element, "") || {})[style] || ""; - return window.getComputedStyle(element, "") || {}; - }; -else - exports.computedStyle = function(element, style) { - if (style) - return element.currentStyle[style]; - return element.currentStyle; - }; -exports.setInnerHtml = function(el, innerHtml) { - var element = el.cloneNode(false);//document.createElement("div"); - element.innerHTML = innerHtml; - el.parentNode.replaceChild(element, el); - return element; -}; - -if ("textContent" in document.documentElement) { - exports.setInnerText = function(el, innerText) { - el.textContent = innerText; - }; - - exports.getInnerText = function(el) { - return el.textContent; - }; -} -else { - exports.setInnerText = function(el, innerText) { - el.innerText = innerText; - }; - - exports.getInnerText = function(el) { - return el.innerText; - }; -} - -exports.getParentWindow = function(document) { - return document.defaultView || document.parentWindow; -}; - -}); - -ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { -"use strict"; - -exports.inherits = function(ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); -}; - -exports.mixin = function(obj, mixin) { - for (var key in mixin) { - obj[key] = mixin[key]; - } - return obj; -}; - -exports.implement = function(proto, mixin) { - exports.mixin(proto, mixin); -}; - -}); - -ace.define("ace/lib/keys",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop"], function(require, exports, module) { -"use strict"; - -require("./fixoldbrowsers"); - -var oop = require("./oop"); -var Keys = (function() { - var ret = { - MODIFIER_KEYS: { - 16: 'Shift', 17: 'Ctrl', 18: 'Alt', 224: 'Meta' - }, - - KEY_MODS: { - "ctrl": 1, "alt": 2, "option" : 2, "shift": 4, - "super": 8, "meta": 8, "command": 8, "cmd": 8 - }, - - FUNCTION_KEYS : { - 8 : "Backspace", - 9 : "Tab", - 13 : "Return", - 19 : "Pause", - 27 : "Esc", - 32 : "Space", - 33 : "PageUp", - 34 : "PageDown", - 35 : "End", - 36 : "Home", - 37 : "Left", - 38 : "Up", - 39 : "Right", - 40 : "Down", - 44 : "Print", - 45 : "Insert", - 46 : "Delete", - 96 : "Numpad0", - 97 : "Numpad1", - 98 : "Numpad2", - 99 : "Numpad3", - 100: "Numpad4", - 101: "Numpad5", - 102: "Numpad6", - 103: "Numpad7", - 104: "Numpad8", - 105: "Numpad9", - '-13': "NumpadEnter", - 112: "F1", - 113: "F2", - 114: "F3", - 115: "F4", - 116: "F5", - 117: "F6", - 118: "F7", - 119: "F8", - 120: "F9", - 121: "F10", - 122: "F11", - 123: "F12", - 144: "Numlock", - 145: "Scrolllock" - }, - - PRINTABLE_KEYS: { - 32: ' ', 48: '0', 49: '1', 50: '2', 51: '3', 52: '4', 53: '5', - 54: '6', 55: '7', 56: '8', 57: '9', 59: ';', 61: '=', 65: 'a', - 66: 'b', 67: 'c', 68: 'd', 69: 'e', 70: 'f', 71: 'g', 72: 'h', - 73: 'i', 74: 'j', 75: 'k', 76: 'l', 77: 'm', 78: 'n', 79: 'o', - 80: 'p', 81: 'q', 82: 'r', 83: 's', 84: 't', 85: 'u', 86: 'v', - 87: 'w', 88: 'x', 89: 'y', 90: 'z', 107: '+', 109: '-', 110: '.', - 186: ';', 187: '=', 188: ',', 189: '-', 190: '.', 191: '/', 192: '`', - 219: '[', 220: '\\',221: ']', 222: "'", 111: '/', 106: '*' - } - }; - var name, i; - for (i in ret.FUNCTION_KEYS) { - name = ret.FUNCTION_KEYS[i].toLowerCase(); - ret[name] = parseInt(i, 10); - } - for (i in ret.PRINTABLE_KEYS) { - name = ret.PRINTABLE_KEYS[i].toLowerCase(); - ret[name] = parseInt(i, 10); - } - oop.mixin(ret, ret.MODIFIER_KEYS); - oop.mixin(ret, ret.PRINTABLE_KEYS); - oop.mixin(ret, ret.FUNCTION_KEYS); - ret.enter = ret["return"]; - ret.escape = ret.esc; - ret.del = ret["delete"]; - ret[173] = '-'; - - (function() { - var mods = ["cmd", "ctrl", "alt", "shift"]; - for (var i = Math.pow(2, mods.length); i--;) { - ret.KEY_MODS[i] = mods.filter(function(x) { - return i & ret.KEY_MODS[x]; - }).join("-") + "-"; - } - })(); - - ret.KEY_MODS[0] = ""; - ret.KEY_MODS[-1] = "input-"; - - return ret; -})(); -oop.mixin(exports, Keys); - -exports.keyCodeToString = function(keyCode) { - var keyString = Keys[keyCode]; - if (typeof keyString != "string") - keyString = String.fromCharCode(keyCode); - return keyString.toLowerCase(); -}; - -}); - -ace.define("ace/lib/useragent",["require","exports","module"], function(require, exports, module) { -"use strict"; -exports.OS = { - LINUX: "LINUX", - MAC: "MAC", - WINDOWS: "WINDOWS" -}; -exports.getOS = function() { - if (exports.isMac) { - return exports.OS.MAC; - } else if (exports.isLinux) { - return exports.OS.LINUX; - } else { - return exports.OS.WINDOWS; - } -}; -if (typeof navigator != "object") - return; - -var os = (navigator.platform.match(/mac|win|linux/i) || ["other"])[0].toLowerCase(); -var ua = navigator.userAgent; -exports.isWin = (os == "win"); -exports.isMac = (os == "mac"); -exports.isLinux = (os == "linux"); -exports.isIE = - (navigator.appName == "Microsoft Internet Explorer" || navigator.appName.indexOf("MSAppHost") >= 0) - ? parseFloat((ua.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]) - : parseFloat((ua.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]); // for ie - -exports.isOldIE = exports.isIE && exports.isIE < 9; -exports.isGecko = exports.isMozilla = (window.Controllers || window.controllers) && window.navigator.product === "Gecko"; -exports.isOldGecko = exports.isGecko && parseInt((ua.match(/rv\:(\d+)/)||[])[1], 10) < 4; -exports.isOpera = window.opera && Object.prototype.toString.call(window.opera) == "[object Opera]"; -exports.isWebKit = parseFloat(ua.split("WebKit/")[1]) || undefined; - -exports.isChrome = parseFloat(ua.split(" Chrome/")[1]) || undefined; - -exports.isAIR = ua.indexOf("AdobeAIR") >= 0; - -exports.isIPad = ua.indexOf("iPad") >= 0; - -exports.isTouchPad = ua.indexOf("TouchPad") >= 0; - -exports.isChromeOS = ua.indexOf(" CrOS ") >= 0; - -}); - -ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { -"use strict"; - -var keys = require("./keys"); -var useragent = require("./useragent"); - -var pressedKeys = null; -var ts = 0; - -exports.addListener = function(elem, type, callback) { - if (elem.addEventListener) { - return elem.addEventListener(type, callback, false); - } - if (elem.attachEvent) { - var wrapper = function() { - callback.call(elem, window.event); - }; - callback._wrapper = wrapper; - elem.attachEvent("on" + type, wrapper); - } -}; - -exports.removeListener = function(elem, type, callback) { - if (elem.removeEventListener) { - return elem.removeEventListener(type, callback, false); - } - if (elem.detachEvent) { - elem.detachEvent("on" + type, callback._wrapper || callback); - } -}; -exports.stopEvent = function(e) { - exports.stopPropagation(e); - exports.preventDefault(e); - return false; -}; - -exports.stopPropagation = function(e) { - if (e.stopPropagation) - e.stopPropagation(); - else - e.cancelBubble = true; -}; - -exports.preventDefault = function(e) { - if (e.preventDefault) - e.preventDefault(); - else - e.returnValue = false; -}; -exports.getButton = function(e) { - if (e.type == "dblclick") - return 0; - if (e.type == "contextmenu" || (useragent.isMac && (e.ctrlKey && !e.altKey && !e.shiftKey))) - return 2; - if (e.preventDefault) { - return e.button; - } - else { - return {1:0, 2:2, 4:1}[e.button]; - } -}; - -exports.capture = function(el, eventHandler, releaseCaptureHandler) { - function onMouseUp(e) { - eventHandler && eventHandler(e); - releaseCaptureHandler && releaseCaptureHandler(e); - - exports.removeListener(document, "mousemove", eventHandler, true); - exports.removeListener(document, "mouseup", onMouseUp, true); - exports.removeListener(document, "dragstart", onMouseUp, true); - } - - exports.addListener(document, "mousemove", eventHandler, true); - exports.addListener(document, "mouseup", onMouseUp, true); - exports.addListener(document, "dragstart", onMouseUp, true); - - return onMouseUp; -}; - -exports.addTouchMoveListener = function (el, callback) { - if ("ontouchmove" in el) { - var startx, starty; - exports.addListener(el, "touchstart", function (e) { - var touchObj = e.changedTouches[0]; - startx = touchObj.clientX; - starty = touchObj.clientY; - }); - exports.addListener(el, "touchmove", function (e) { - var factor = 1, - touchObj = e.changedTouches[0]; - - e.wheelX = -(touchObj.clientX - startx) / factor; - e.wheelY = -(touchObj.clientY - starty) / factor; - - startx = touchObj.clientX; - starty = touchObj.clientY; - - callback(e); - }); - } -}; - -exports.addMouseWheelListener = function(el, callback) { - if ("onmousewheel" in el) { - exports.addListener(el, "mousewheel", function(e) { - var factor = 8; - if (e.wheelDeltaX !== undefined) { - e.wheelX = -e.wheelDeltaX / factor; - e.wheelY = -e.wheelDeltaY / factor; - } else { - e.wheelX = 0; - e.wheelY = -e.wheelDelta / factor; - } - callback(e); - }); - } else if ("onwheel" in el) { - exports.addListener(el, "wheel", function(e) { - var factor = 0.35; - switch (e.deltaMode) { - case e.DOM_DELTA_PIXEL: - e.wheelX = e.deltaX * factor || 0; - e.wheelY = e.deltaY * factor || 0; - break; - case e.DOM_DELTA_LINE: - case e.DOM_DELTA_PAGE: - e.wheelX = (e.deltaX || 0) * 5; - e.wheelY = (e.deltaY || 0) * 5; - break; - } - - callback(e); - }); - } else { - exports.addListener(el, "DOMMouseScroll", function(e) { - if (e.axis && e.axis == e.HORIZONTAL_AXIS) { - e.wheelX = (e.detail || 0) * 5; - e.wheelY = 0; - } else { - e.wheelX = 0; - e.wheelY = (e.detail || 0) * 5; - } - callback(e); - }); - } -}; - -exports.addMultiMouseDownListener = function(elements, timeouts, eventHandler, callbackName) { - var clicks = 0; - var startX, startY, timer; - var eventNames = { - 2: "dblclick", - 3: "tripleclick", - 4: "quadclick" - }; - - function onMousedown(e) { - if (exports.getButton(e) !== 0) { - clicks = 0; - } else if (e.detail > 1) { - clicks++; - if (clicks > 4) - clicks = 1; - } else { - clicks = 1; - } - if (useragent.isIE) { - var isNewClick = Math.abs(e.clientX - startX) > 5 || Math.abs(e.clientY - startY) > 5; - if (!timer || isNewClick) - clicks = 1; - if (timer) - clearTimeout(timer); - timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); - - if (clicks == 1) { - startX = e.clientX; - startY = e.clientY; - } - } - - e._clicks = clicks; - - eventHandler[callbackName]("mousedown", e); - - if (clicks > 4) - clicks = 0; - else if (clicks > 1) - return eventHandler[callbackName](eventNames[clicks], e); - } - function onDblclick(e) { - clicks = 2; - if (timer) - clearTimeout(timer); - timer = setTimeout(function() {timer = null}, timeouts[clicks - 1] || 600); - eventHandler[callbackName]("mousedown", e); - eventHandler[callbackName](eventNames[clicks], e); - } - if (!Array.isArray(elements)) - elements = [elements]; - elements.forEach(function(el) { - exports.addListener(el, "mousedown", onMousedown); - if (useragent.isOldIE) - exports.addListener(el, "dblclick", onDblclick); - }); -}; - -var getModifierHash = useragent.isMac && useragent.isOpera && !("KeyboardEvent" in window) - ? function(e) { - return 0 | (e.metaKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.ctrlKey ? 8 : 0); - } - : function(e) { - return 0 | (e.ctrlKey ? 1 : 0) | (e.altKey ? 2 : 0) | (e.shiftKey ? 4 : 0) | (e.metaKey ? 8 : 0); - }; - -exports.getModifierString = function(e) { - return keys.KEY_MODS[getModifierHash(e)]; -}; - -function normalizeCommandKeys(callback, e, keyCode) { - var hashId = getModifierHash(e); - - if (!useragent.isMac && pressedKeys) { - if (pressedKeys.OSKey) - hashId |= 8; - if (pressedKeys.altGr) { - if ((3 & hashId) != 3) - pressedKeys.altGr = 0; - else - return; - } - if (keyCode === 18 || keyCode === 17) { - var location = "location" in e ? e.location : e.keyLocation; - if (keyCode === 17 && location === 1) { - if (pressedKeys[keyCode] == 1) - ts = e.timeStamp; - } else if (keyCode === 18 && hashId === 3 && location === 2) { - var dt = e.timeStamp - ts; - if (dt < 50) - pressedKeys.altGr = true; - } - } - } - - if (keyCode in keys.MODIFIER_KEYS) { - keyCode = -1; - } - if (hashId & 8 && (keyCode >= 91 && keyCode <= 93)) { - keyCode = -1; - } - - if (!hashId && keyCode === 13) { - var location = "location" in e ? e.location : e.keyLocation; - if (location === 3) { - callback(e, hashId, -keyCode); - if (e.defaultPrevented) - return; - } - } - - if (useragent.isChromeOS && hashId & 8) { - callback(e, hashId, keyCode); - if (e.defaultPrevented) - return; - else - hashId &= ~8; - } - if (!hashId && !(keyCode in keys.FUNCTION_KEYS) && !(keyCode in keys.PRINTABLE_KEYS)) { - return false; - } - - return callback(e, hashId, keyCode); -} - - -exports.addCommandKeyListener = function(el, callback) { - var addListener = exports.addListener; - if (useragent.isOldGecko || (useragent.isOpera && !("KeyboardEvent" in window))) { - var lastKeyDownKeyCode = null; - addListener(el, "keydown", function(e) { - lastKeyDownKeyCode = e.keyCode; - }); - addListener(el, "keypress", function(e) { - return normalizeCommandKeys(callback, e, lastKeyDownKeyCode); - }); - } else { - var lastDefaultPrevented = null; - - addListener(el, "keydown", function(e) { - var keyCode = e.keyCode; - pressedKeys[keyCode] = (pressedKeys[keyCode] || 0) + 1; - if (keyCode == 91 || keyCode == 92) { - pressedKeys.OSKey = true; - } else if (pressedKeys.OSKey) { - if (e.timeStamp - pressedKeys.lastT > 200 && pressedKeys.count == 1) - resetPressedKeys(); - } - if (pressedKeys[keyCode] == 1) - pressedKeys.count++; - pressedKeys.lastT = e.timeStamp; - var result = normalizeCommandKeys(callback, e, keyCode); - lastDefaultPrevented = e.defaultPrevented; - return result; - }); - - addListener(el, "keypress", function(e) { - if (lastDefaultPrevented && (e.ctrlKey || e.altKey || e.shiftKey || e.metaKey)) { - exports.stopEvent(e); - lastDefaultPrevented = null; - } - }); - - addListener(el, "keyup", function(e) { - var keyCode = e.keyCode; - if (!pressedKeys[keyCode]) { - resetPressedKeys(); - } else { - pressedKeys.count = Math.max(pressedKeys.count - 1, 0); - } - if (keyCode == 91 || keyCode == 92) { - pressedKeys.OSKey = false; - } - pressedKeys[keyCode] = null; - }); - - if (!pressedKeys) { - resetPressedKeys(); - addListener(window, "focus", resetPressedKeys); - } - } -}; -function resetPressedKeys() { - pressedKeys = Object.create(null); - pressedKeys.count = 0; - pressedKeys.lastT = 0; -} - -if (typeof window == "object" && window.postMessage && !useragent.isOldIE) { - var postMessageId = 1; - exports.nextTick = function(callback, win) { - win = win || window; - var messageName = "zero-timeout-message-" + postMessageId; - exports.addListener(win, "message", function listener(e) { - if (e.data == messageName) { - exports.stopPropagation(e); - exports.removeListener(win, "message", listener); - callback(); - } - }); - win.postMessage(messageName, "*"); - }; -} - - -exports.nextFrame = typeof window == "object" && (window.requestAnimationFrame - || window.mozRequestAnimationFrame - || window.webkitRequestAnimationFrame - || window.msRequestAnimationFrame - || window.oRequestAnimationFrame); - -if (exports.nextFrame) - exports.nextFrame = exports.nextFrame.bind(window); -else - exports.nextFrame = function(callback) { - setTimeout(callback, 17); - }; -}); - -ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { -"use strict"; - -exports.last = function(a) { - return a[a.length - 1]; -}; - -exports.stringReverse = function(string) { - return string.split("").reverse().join(""); -}; - -exports.stringRepeat = function (string, count) { - var result = ''; - while (count > 0) { - if (count & 1) - result += string; - - if (count >>= 1) - string += string; - } - return result; -}; - -var trimBeginRegexp = /^\s\s*/; -var trimEndRegexp = /\s\s*$/; - -exports.stringTrimLeft = function (string) { - return string.replace(trimBeginRegexp, ''); -}; - -exports.stringTrimRight = function (string) { - return string.replace(trimEndRegexp, ''); -}; - -exports.copyObject = function(obj) { - var copy = {}; - for (var key in obj) { - copy[key] = obj[key]; - } - return copy; -}; - -exports.copyArray = function(array){ - var copy = []; - for (var i=0, l=array.length; i 1); - return ev.preventDefault(); - }; - - this.startSelect = function(pos, waitForClickSelection) { - pos = pos || this.editor.renderer.screenToTextCoordinates(this.x, this.y); - var editor = this.editor; - editor.$blockScrolling++; - if (this.mousedownEvent.getShiftKey()) - editor.selection.selectToPosition(pos); - else if (!waitForClickSelection) - editor.selection.moveToPosition(pos); - if (!waitForClickSelection) - this.select(); - if (editor.renderer.scroller.setCapture) { - editor.renderer.scroller.setCapture(); - } - editor.setStyle("ace_selecting"); - this.setState("select"); - editor.$blockScrolling--; - }; - - this.select = function() { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - editor.$blockScrolling++; - if (this.$clickSelection) { - var cmp = this.$clickSelection.comparePoint(cursor); - - if (cmp == -1) { - anchor = this.$clickSelection.end; - } else if (cmp == 1) { - anchor = this.$clickSelection.start; - } else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; - } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); - } - editor.selection.selectToPosition(cursor); - editor.$blockScrolling--; - editor.renderer.scrollCursorIntoView(); - }; - - this.extendSelectionBy = function(unitName) { - var anchor, editor = this.editor; - var cursor = editor.renderer.screenToTextCoordinates(this.x, this.y); - var range = editor.selection[unitName](cursor.row, cursor.column); - editor.$blockScrolling++; - if (this.$clickSelection) { - var cmpStart = this.$clickSelection.comparePoint(range.start); - var cmpEnd = this.$clickSelection.comparePoint(range.end); - - if (cmpStart == -1 && cmpEnd <= 0) { - anchor = this.$clickSelection.end; - if (range.end.row != cursor.row || range.end.column != cursor.column) - cursor = range.start; - } else if (cmpEnd == 1 && cmpStart >= 0) { - anchor = this.$clickSelection.start; - if (range.start.row != cursor.row || range.start.column != cursor.column) - cursor = range.end; - } else if (cmpStart == -1 && cmpEnd == 1) { - cursor = range.end; - anchor = range.start; - } else { - var orientedRange = calcRangeOrientation(this.$clickSelection, cursor); - cursor = orientedRange.cursor; - anchor = orientedRange.anchor; - } - editor.selection.setSelectionAnchor(anchor.row, anchor.column); - } - editor.selection.selectToPosition(cursor); - editor.$blockScrolling--; - editor.renderer.scrollCursorIntoView(); - }; - - this.selectEnd = - this.selectAllEnd = - this.selectByWordsEnd = - this.selectByLinesEnd = function() { - this.$clickSelection = null; - this.editor.unsetStyle("ace_selecting"); - if (this.editor.renderer.scroller.releaseCapture) { - this.editor.renderer.scroller.releaseCapture(); - } - }; - - this.focusWait = function() { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - var time = Date.now(); - - if (distance > DRAG_OFFSET || time - this.mousedownEvent.time > this.$focusTimout) - this.startSelect(this.mousedownEvent.getDocumentPosition()); - }; - - this.onDoubleClick = function(ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - var session = editor.session; - - var range = session.getBracketRange(pos); - if (range) { - if (range.isEmpty()) { - range.start.column--; - range.end.column++; - } - this.setState("select"); - } else { - range = editor.selection.getWordRange(pos.row, pos.column); - this.setState("selectByWords"); - } - this.$clickSelection = range; - this.select(); - }; - - this.onTripleClick = function(ev) { - var pos = ev.getDocumentPosition(); - var editor = this.editor; - - this.setState("selectByLines"); - var range = editor.getSelectionRange(); - if (range.isMultiLine() && range.contains(pos.row, pos.column)) { - this.$clickSelection = editor.selection.getLineRange(range.start.row); - this.$clickSelection.end = editor.selection.getLineRange(range.end.row).end; - } else { - this.$clickSelection = editor.selection.getLineRange(pos.row); - } - this.select(); - }; - - this.onQuadClick = function(ev) { - var editor = this.editor; - - editor.selectAll(); - this.$clickSelection = editor.getSelectionRange(); - this.setState("selectAll"); - }; - - this.onMouseWheel = function(ev) { - if (ev.getAccelKey()) - return; - if (ev.getShiftKey() && ev.wheelY && !ev.wheelX) { - ev.wheelX = ev.wheelY; - ev.wheelY = 0; - } - - var t = ev.domEvent.timeStamp; - var dt = t - (this.$lastScrollTime||0); - - var editor = this.editor; - var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - if (isScrolable || dt < 200) { - this.$lastScrollTime = t; - editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - return ev.stop(); - } - }; - - this.onTouchMove = function (ev) { - var t = ev.domEvent.timeStamp; - var dt = t - (this.$lastScrollTime || 0); - - var editor = this.editor; - var isScrolable = editor.renderer.isScrollableBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - if (isScrolable || dt < 200) { - this.$lastScrollTime = t; - editor.renderer.scrollBy(ev.wheelX * ev.speed, ev.wheelY * ev.speed); - return ev.stop(); - } - }; - -}).call(DefaultHandlers.prototype); - -exports.DefaultHandlers = DefaultHandlers; - -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} - -function calcRangeOrientation(range, cursor) { - if (range.start.row == range.end.row) - var cmp = 2 * cursor.column - range.start.column - range.end.column; - else if (range.start.row == range.end.row - 1 && !range.start.column && !range.end.column) - var cmp = cursor.column - 4; - else - var cmp = 2 * cursor.row - range.start.row - range.end.row; - - if (cmp < 0) - return {cursor: range.start, anchor: range.end}; - else - return {cursor: range.end, anchor: range.start}; -} - -}); - -ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -function Tooltip (parentNode) { - this.isOpen = false; - this.$element = null; - this.$parentNode = parentNode; -} - -(function() { - this.$init = function() { - this.$element = dom.createElement("div"); - this.$element.className = "ace_tooltip"; - this.$element.style.display = "none"; - this.$parentNode.appendChild(this.$element); - return this.$element; - }; - this.getElement = function() { - return this.$element || this.$init(); - }; - this.setText = function(text) { - dom.setInnerText(this.getElement(), text); - }; - this.setHtml = function(html) { - this.getElement().innerHTML = html; - }; - this.setPosition = function(x, y) { - this.getElement().style.left = x + "px"; - this.getElement().style.top = y + "px"; - }; - this.setClassName = function(className) { - dom.addCssClass(this.getElement(), className); - }; - this.show = function(text, x, y) { - if (text != null) - this.setText(text); - if (x != null && y != null) - this.setPosition(x, y); - if (!this.isOpen) { - this.getElement().style.display = "block"; - this.isOpen = true; - } - }; - - this.hide = function() { - if (this.isOpen) { - this.getElement().style.display = "none"; - this.isOpen = false; - } - }; - this.getHeight = function() { - return this.getElement().offsetHeight; - }; - this.getWidth = function() { - return this.getElement().offsetWidth; - }; - -}).call(Tooltip.prototype); - -exports.Tooltip = Tooltip; -}); - -ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"], function(require, exports, module) { -"use strict"; -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var event = require("../lib/event"); -var Tooltip = require("../tooltip").Tooltip; - -function GutterHandler(mouseHandler) { - var editor = mouseHandler.editor; - var gutter = editor.renderer.$gutterLayer; - var tooltip = new GutterTooltip(editor.container); - - mouseHandler.editor.setDefaultHandler("guttermousedown", function(e) { - if (!editor.isFocused() || e.getButton() != 0) - return; - var gutterRegion = gutter.getRegion(e); - - if (gutterRegion == "foldWidgets") - return; - - var row = e.getDocumentPosition().row; - var selection = editor.session.selection; - - if (e.getShiftKey()) - selection.selectTo(row, 0); - else { - if (e.domEvent.detail == 2) { - editor.selectAll(); - return e.preventDefault(); - } - mouseHandler.$clickSelection = editor.selection.getLineRange(row); - } - mouseHandler.setState("selectByLines"); - mouseHandler.captureMouse(e); - return e.preventDefault(); - }); - - - var tooltipTimeout, mouseEvent, tooltipAnnotation; - - function showTooltip() { - var row = mouseEvent.getDocumentPosition().row; - var annotation = gutter.$annotations[row]; - if (!annotation) - return hideTooltip(); - - var maxRow = editor.session.getLength(); - if (row == maxRow) { - var screenRow = editor.renderer.pixelToScreenCoordinates(0, mouseEvent.y).row; - var pos = mouseEvent.$pos; - if (screenRow > editor.session.documentToScreenRow(pos.row, pos.column)) - return hideTooltip(); - } - - if (tooltipAnnotation == annotation) - return; - tooltipAnnotation = annotation.text.join("
      "); - - tooltip.setHtml(tooltipAnnotation); - tooltip.show(); - editor.on("mousewheel", hideTooltip); - - if (mouseHandler.$tooltipFollowsMouse) { - moveTooltip(mouseEvent); - } else { - var gutterElement = mouseEvent.domEvent.target; - var rect = gutterElement.getBoundingClientRect(); - var style = tooltip.getElement().style; - style.left = rect.right + "px"; - style.top = rect.bottom + "px"; - } - } - - function hideTooltip() { - if (tooltipTimeout) - tooltipTimeout = clearTimeout(tooltipTimeout); - if (tooltipAnnotation) { - tooltip.hide(); - tooltipAnnotation = null; - editor.removeEventListener("mousewheel", hideTooltip); - } - } - - function moveTooltip(e) { - tooltip.setPosition(e.x, e.y); - } - - mouseHandler.editor.setDefaultHandler("guttermousemove", function(e) { - var target = e.domEvent.target || e.domEvent.srcElement; - if (dom.hasCssClass(target, "ace_fold-widget")) - return hideTooltip(); - - if (tooltipAnnotation && mouseHandler.$tooltipFollowsMouse) - moveTooltip(e); - - mouseEvent = e; - if (tooltipTimeout) - return; - tooltipTimeout = setTimeout(function() { - tooltipTimeout = null; - if (mouseEvent && !mouseHandler.isMousePressed) - showTooltip(); - else - hideTooltip(); - }, 50); - }); - - event.addListener(editor.renderer.$gutter, "mouseout", function(e) { - mouseEvent = null; - if (!tooltipAnnotation || tooltipTimeout) - return; - - tooltipTimeout = setTimeout(function() { - tooltipTimeout = null; - hideTooltip(); - }, 50); - }); - - editor.on("changeSession", hideTooltip); -} - -function GutterTooltip(parentNode) { - Tooltip.call(this, parentNode); -} - -oop.inherits(GutterTooltip, Tooltip); - -(function(){ - this.setPosition = function(x, y) { - var windowWidth = window.innerWidth || document.documentElement.clientWidth; - var windowHeight = window.innerHeight || document.documentElement.clientHeight; - var width = this.getWidth(); - var height = this.getHeight(); - x += 15; - y += 15; - if (x + width > windowWidth) { - x -= (x + width) - windowWidth; - } - if (y + height > windowHeight) { - y -= 20 + height; - } - Tooltip.prototype.setPosition.call(this, x, y); - }; - -}).call(GutterTooltip.prototype); - - - -exports.GutterHandler = GutterHandler; - -}); - -ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { -"use strict"; - -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -var MouseEvent = exports.MouseEvent = function(domEvent, editor) { - this.domEvent = domEvent; - this.editor = editor; - - this.x = this.clientX = domEvent.clientX; - this.y = this.clientY = domEvent.clientY; - - this.$pos = null; - this.$inSelection = null; - - this.propagationStopped = false; - this.defaultPrevented = false; -}; - -(function() { - - this.stopPropagation = function() { - event.stopPropagation(this.domEvent); - this.propagationStopped = true; - }; - - this.preventDefault = function() { - event.preventDefault(this.domEvent); - this.defaultPrevented = true; - }; - - this.stop = function() { - this.stopPropagation(); - this.preventDefault(); - }; - this.getDocumentPosition = function() { - if (this.$pos) - return this.$pos; - - this.$pos = this.editor.renderer.screenToTextCoordinates(this.clientX, this.clientY); - return this.$pos; - }; - this.inSelection = function() { - if (this.$inSelection !== null) - return this.$inSelection; - - var editor = this.editor; - - - var selectionRange = editor.getSelectionRange(); - if (selectionRange.isEmpty()) - this.$inSelection = false; - else { - var pos = this.getDocumentPosition(); - this.$inSelection = selectionRange.contains(pos.row, pos.column); - } - - return this.$inSelection; - }; - this.getButton = function() { - return event.getButton(this.domEvent); - }; - this.getShiftKey = function() { - return this.domEvent.shiftKey; - }; - - this.getAccelKey = useragent.isMac - ? function() { return this.domEvent.metaKey; } - : function() { return this.domEvent.ctrlKey; }; - -}).call(MouseEvent.prototype); - -}); - -ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { -"use strict"; - -var dom = require("../lib/dom"); -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); - -var AUTOSCROLL_DELAY = 200; -var SCROLL_CURSOR_DELAY = 200; -var SCROLL_CURSOR_HYSTERESIS = 5; - -function DragdropHandler(mouseHandler) { - - var editor = mouseHandler.editor; - - var blankImage = dom.createElement("img"); - blankImage.src = "data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="; - if (useragent.isOpera) - blankImage.style.cssText = "width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;"; - - var exports = ["dragWait", "dragWaitEnd", "startDrag", "dragReadyEnd", "onMouseDrag"]; - - exports.forEach(function(x) { - mouseHandler[x] = this[x]; - }, this); - editor.addEventListener("mousedown", this.onMouseDown.bind(mouseHandler)); - - - var mouseTarget = editor.container; - var dragSelectionMarker, x, y; - var timerId, range; - var dragCursor, counter = 0; - var dragOperation; - var isInternal; - var autoScrollStartTime; - var cursorMovedTime; - var cursorPointOnCaretMoved; - - this.onDragStart = function(e) { - if (this.cancelDrag || !mouseTarget.draggable) { - var self = this; - setTimeout(function(){ - self.startSelect(); - self.captureMouse(e); - }, 0); - return e.preventDefault(); - } - range = editor.getSelectionRange(); - - var dataTransfer = e.dataTransfer; - dataTransfer.effectAllowed = editor.getReadOnly() ? "copy" : "copyMove"; - if (useragent.isOpera) { - editor.container.appendChild(blankImage); - blankImage.scrollTop = 0; - } - dataTransfer.setDragImage && dataTransfer.setDragImage(blankImage, 0, 0); - if (useragent.isOpera) { - editor.container.removeChild(blankImage); - } - dataTransfer.clearData(); - dataTransfer.setData("Text", editor.session.getTextRange()); - - isInternal = true; - this.setState("drag"); - }; - - this.onDragEnd = function(e) { - mouseTarget.draggable = false; - isInternal = false; - this.setState(null); - if (!editor.getReadOnly()) { - var dropEffect = e.dataTransfer.dropEffect; - if (!dragOperation && dropEffect == "move") - editor.session.remove(editor.getSelectionRange()); - editor.renderer.$cursorLayer.setBlinking(true); - } - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); - }; - - this.onDragEnter = function(e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) - addDragMarker(); - counter++; - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); - }; - - this.onDragOver = function(e) { - if (editor.getReadOnly() || !canAccept(e.dataTransfer)) - return; - x = e.clientX; - y = e.clientY; - if (!dragSelectionMarker) { - addDragMarker(); - counter++; - } - if (onMouseMoveTimer !== null) - onMouseMoveTimer = null; - - e.dataTransfer.dropEffect = dragOperation = getDropEffect(e); - return event.preventDefault(e); - }; - - this.onDragLeave = function(e) { - counter--; - if (counter <= 0 && dragSelectionMarker) { - clearDragMarker(); - dragOperation = null; - return event.preventDefault(e); - } - }; - - this.onDrop = function(e) { - if (!dragCursor) - return; - var dataTransfer = e.dataTransfer; - if (isInternal) { - switch (dragOperation) { - case "move": - if (range.contains(dragCursor.row, dragCursor.column)) { - range = { - start: dragCursor, - end: dragCursor - }; - } else { - range = editor.moveText(range, dragCursor); - } - break; - case "copy": - range = editor.moveText(range, dragCursor, true); - break; - } - } else { - var dropData = dataTransfer.getData('Text'); - range = { - start: dragCursor, - end: editor.session.insert(dragCursor, dropData) - }; - editor.focus(); - dragOperation = null; - } - clearDragMarker(); - return event.preventDefault(e); - }; - - event.addListener(mouseTarget, "dragstart", this.onDragStart.bind(mouseHandler)); - event.addListener(mouseTarget, "dragend", this.onDragEnd.bind(mouseHandler)); - event.addListener(mouseTarget, "dragenter", this.onDragEnter.bind(mouseHandler)); - event.addListener(mouseTarget, "dragover", this.onDragOver.bind(mouseHandler)); - event.addListener(mouseTarget, "dragleave", this.onDragLeave.bind(mouseHandler)); - event.addListener(mouseTarget, "drop", this.onDrop.bind(mouseHandler)); - - function scrollCursorIntoView(cursor, prevCursor) { - var now = Date.now(); - var vMovement = !prevCursor || cursor.row != prevCursor.row; - var hMovement = !prevCursor || cursor.column != prevCursor.column; - if (!cursorMovedTime || vMovement || hMovement) { - editor.$blockScrolling += 1; - editor.moveCursorToPosition(cursor); - editor.$blockScrolling -= 1; - cursorMovedTime = now; - cursorPointOnCaretMoved = {x: x, y: y}; - } else { - var distance = calcDistance(cursorPointOnCaretMoved.x, cursorPointOnCaretMoved.y, x, y); - if (distance > SCROLL_CURSOR_HYSTERESIS) { - cursorMovedTime = null; - } else if (now - cursorMovedTime >= SCROLL_CURSOR_DELAY) { - editor.renderer.scrollCursorIntoView(); - cursorMovedTime = null; - } - } - } - - function autoScroll(cursor, prevCursor) { - var now = Date.now(); - var lineHeight = editor.renderer.layerConfig.lineHeight; - var characterWidth = editor.renderer.layerConfig.characterWidth; - var editorRect = editor.renderer.scroller.getBoundingClientRect(); - var offsets = { - x: { - left: x - editorRect.left, - right: editorRect.right - x - }, - y: { - top: y - editorRect.top, - bottom: editorRect.bottom - y - } - }; - var nearestXOffset = Math.min(offsets.x.left, offsets.x.right); - var nearestYOffset = Math.min(offsets.y.top, offsets.y.bottom); - var scrollCursor = {row: cursor.row, column: cursor.column}; - if (nearestXOffset / characterWidth <= 2) { - scrollCursor.column += (offsets.x.left < offsets.x.right ? -3 : +2); - } - if (nearestYOffset / lineHeight <= 1) { - scrollCursor.row += (offsets.y.top < offsets.y.bottom ? -1 : +1); - } - var vScroll = cursor.row != scrollCursor.row; - var hScroll = cursor.column != scrollCursor.column; - var vMovement = !prevCursor || cursor.row != prevCursor.row; - if (vScroll || (hScroll && !vMovement)) { - if (!autoScrollStartTime) - autoScrollStartTime = now; - else if (now - autoScrollStartTime >= AUTOSCROLL_DELAY) - editor.renderer.scrollCursorIntoView(scrollCursor); - } else { - autoScrollStartTime = null; - } - } - - function onDragInterval() { - var prevCursor = dragCursor; - dragCursor = editor.renderer.screenToTextCoordinates(x, y); - scrollCursorIntoView(dragCursor, prevCursor); - autoScroll(dragCursor, prevCursor); - } - - function addDragMarker() { - range = editor.selection.toOrientedRange(); - dragSelectionMarker = editor.session.addMarker(range, "ace_selection", editor.getSelectionStyle()); - editor.clearSelection(); - if (editor.isFocused()) - editor.renderer.$cursorLayer.setBlinking(false); - clearInterval(timerId); - onDragInterval(); - timerId = setInterval(onDragInterval, 20); - counter = 0; - event.addListener(document, "mousemove", onMouseMove); - } - - function clearDragMarker() { - clearInterval(timerId); - editor.session.removeMarker(dragSelectionMarker); - dragSelectionMarker = null; - editor.$blockScrolling += 1; - editor.selection.fromOrientedRange(range); - editor.$blockScrolling -= 1; - if (editor.isFocused() && !isInternal) - editor.renderer.$cursorLayer.setBlinking(!editor.getReadOnly()); - range = null; - dragCursor = null; - counter = 0; - autoScrollStartTime = null; - cursorMovedTime = null; - event.removeListener(document, "mousemove", onMouseMove); - } - var onMouseMoveTimer = null; - function onMouseMove() { - if (onMouseMoveTimer == null) { - onMouseMoveTimer = setTimeout(function() { - if (onMouseMoveTimer != null && dragSelectionMarker) - clearDragMarker(); - }, 20); - } - } - - function canAccept(dataTransfer) { - var types = dataTransfer.types; - return !types || Array.prototype.some.call(types, function(type) { - return type == 'text/plain' || type == 'Text'; - }); - } - - function getDropEffect(e) { - var copyAllowed = ['copy', 'copymove', 'all', 'uninitialized']; - var moveAllowed = ['move', 'copymove', 'linkmove', 'all', 'uninitialized']; - - var copyModifierState = useragent.isMac ? e.altKey : e.ctrlKey; - var effectAllowed = "uninitialized"; - try { - effectAllowed = e.dataTransfer.effectAllowed.toLowerCase(); - } catch (e) {} - var dropEffect = "none"; - - if (copyModifierState && copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - else if (moveAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "move"; - else if (copyAllowed.indexOf(effectAllowed) >= 0) - dropEffect = "copy"; - - return dropEffect; - } -} - -(function() { - - this.dragWait = function() { - var interval = Date.now() - this.mousedownEvent.time; - if (interval > this.editor.getDragDelay()) - this.startDrag(); - }; - - this.dragWaitEnd = function() { - var target = this.editor.container; - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - this.selectEnd(); - }; - - this.dragReadyEnd = function(e) { - this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()); - this.editor.unsetStyle("ace_dragging"); - this.editor.renderer.setCursorStyle(""); - this.dragWaitEnd(); - }; - - this.startDrag = function(){ - this.cancelDrag = false; - var editor = this.editor; - var target = editor.container; - target.draggable = true; - editor.renderer.$cursorLayer.setBlinking(false); - editor.setStyle("ace_dragging"); - var cursorStyle = useragent.isWin ? "default" : "move"; - editor.renderer.setCursorStyle(cursorStyle); - this.setState("dragReady"); - }; - - this.onMouseDrag = function(e) { - var target = this.editor.container; - if (useragent.isIE && this.state == "dragReady") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 3) - target.dragDrop(); - } - if (this.state === "dragWait") { - var distance = calcDistance(this.mousedownEvent.x, this.mousedownEvent.y, this.x, this.y); - if (distance > 0) { - target.draggable = false; - this.startSelect(this.mousedownEvent.getDocumentPosition()); - } - } - }; - - this.onMouseDown = function(e) { - if (!this.$dragEnabled) - return; - this.mousedownEvent = e; - var editor = this.editor; - - var inSelection = e.inSelection(); - var button = e.getButton(); - var clickCount = e.domEvent.detail || 1; - if (clickCount === 1 && button === 0 && inSelection) { - if (e.editor.inMultiSelectMode && (e.getAccelKey() || e.getShiftKey())) - return; - this.mousedownEvent.time = Date.now(); - var eventTarget = e.domEvent.target || e.domEvent.srcElement; - if ("unselectable" in eventTarget) - eventTarget.unselectable = "on"; - if (editor.getDragDelay()) { - if (useragent.isWebKit) { - this.cancelDrag = true; - var mouseTarget = editor.container; - mouseTarget.draggable = true; - } - this.setState("dragWait"); - } else { - this.startDrag(); - } - this.captureMouse(e, this.onMouseDrag.bind(this)); - e.defaultPrevented = true; - } - }; - -}).call(DragdropHandler.prototype); - - -function calcDistance(ax, ay, bx, by) { - return Math.sqrt(Math.pow(bx - ax, 2) + Math.pow(by - ay, 2)); -} - -exports.DragdropHandler = DragdropHandler; - -}); - -ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"], function(require, exports, module) { -"use strict"; -var dom = require("./dom"); - -exports.get = function (url, callback) { - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, true); - xhr.onreadystatechange = function () { - if (xhr.readyState === 4) { - callback(xhr.responseText); - } - }; - xhr.send(null); -}; - -exports.loadScript = function(path, callback) { - var head = dom.getDocumentHead(); - var s = document.createElement('script'); - - s.src = path; - head.appendChild(s); - - s.onload = s.onreadystatechange = function(_, isAbort) { - if (isAbort || !s.readyState || s.readyState == "loaded" || s.readyState == "complete") { - s = s.onload = s.onreadystatechange = null; - if (!isAbort) - callback(); - } - }; -}; -exports.qualifyURL = function(url) { - var a = document.createElement('a'); - a.href = url; - return a.href; -} - -}); - -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i 1) - base = parts[parts.length - 2]; - var path = options[component + "Path"]; - if (path == null) { - path = options.basePath; - } else if (sep == "/") { - component = sep = ""; - } - if (path && path.slice(-1) != "/") - path += "/"; - return path + component + sep + base + this.get("suffix"); -}; - -exports.setModuleUrl = function(name, subst) { - return options.$moduleUrls[name] = subst; -}; - -exports.$loading = {}; -exports.loadModule = function(moduleName, onLoad) { - var module, moduleType; - if (Array.isArray(moduleName)) { - moduleType = moduleName[0]; - moduleName = moduleName[1]; - } - - try { - module = require(moduleName); - } catch (e) {} - if (module && !exports.$loading[moduleName]) - return onLoad && onLoad(module); - - if (!exports.$loading[moduleName]) - exports.$loading[moduleName] = []; - - exports.$loading[moduleName].push(onLoad); - - if (exports.$loading[moduleName].length > 1) - return; - - var afterLoad = function() { - require([moduleName], function(module) { - exports._emit("load.module", {name: moduleName, module: module}); - var listeners = exports.$loading[moduleName]; - exports.$loading[moduleName] = null; - listeners.forEach(function(onLoad) { - onLoad && onLoad(module); - }); - }); - }; - - if (!exports.get("packaged")) - return afterLoad(); - net.loadScript(exports.moduleUrl(moduleName, moduleType), afterLoad); -}; -init(true);function init(packaged) { - - if (!global || !global.document) - return; - - options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged); - - var scriptOptions = {}; - var scriptUrl = ""; - var currentScript = (document.currentScript || document._currentScript ); // native or polyfill - var currentDocument = currentScript && currentScript.ownerDocument || document; - - var scripts = currentDocument.getElementsByTagName("script"); - for (var i=0; i [" + this.end.row + "/" + this.end.column + "]"); - }; - - this.contains = function(row, column) { - return this.compare(row, column) == 0; - }; - this.compareRange = function(range) { - var cmp, - end = range.end, - start = range.start; - - cmp = this.compare(end.row, end.column); - if (cmp == 1) { - cmp = this.compare(start.row, start.column); - if (cmp == 1) { - return 2; - } else if (cmp == 0) { - return 1; - } else { - return 0; - } - } else if (cmp == -1) { - return -2; - } else { - cmp = this.compare(start.row, start.column); - if (cmp == -1) { - return -1; - } else if (cmp == 1) { - return 42; - } else { - return 0; - } - } - }; - this.comparePoint = function(p) { - return this.compare(p.row, p.column); - }; - this.containsRange = function(range) { - return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; - }; - this.intersects = function(range) { - var cmp = this.compareRange(range); - return (cmp == -1 || cmp == 0 || cmp == 1); - }; - this.isEnd = function(row, column) { - return this.end.row == row && this.end.column == column; - }; - this.isStart = function(row, column) { - return this.start.row == row && this.start.column == column; - }; - this.setStart = function(row, column) { - if (typeof row == "object") { - this.start.column = row.column; - this.start.row = row.row; - } else { - this.start.row = row; - this.start.column = column; - } - }; - this.setEnd = function(row, column) { - if (typeof row == "object") { - this.end.column = row.column; - this.end.row = row.row; - } else { - this.end.row = row; - this.end.column = column; - } - }; - this.inside = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column) || this.isStart(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.insideStart = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.insideEnd = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isStart(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.compare = function(row, column) { - if (!this.isMultiLine()) { - if (row === this.start.row) { - return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); - } - } - - if (row < this.start.row) - return -1; - - if (row > this.end.row) - return 1; - - if (this.start.row === row) - return column >= this.start.column ? 0 : -1; - - if (this.end.row === row) - return column <= this.end.column ? 0 : 1; - - return 0; - }; - this.compareStart = function(row, column) { - if (this.start.row == row && this.start.column == column) { - return -1; - } else { - return this.compare(row, column); - } - }; - this.compareEnd = function(row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } else { - return this.compare(row, column); - } - }; - this.compareInside = function(row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } else if (this.start.row == row && this.start.column == column) { - return -1; - } else { - return this.compare(row, column); - } - }; - this.clipRows = function(firstRow, lastRow) { - if (this.end.row > lastRow) - var end = {row: lastRow + 1, column: 0}; - else if (this.end.row < firstRow) - var end = {row: firstRow, column: 0}; - - if (this.start.row > lastRow) - var start = {row: lastRow + 1, column: 0}; - else if (this.start.row < firstRow) - var start = {row: firstRow, column: 0}; - - return Range.fromPoints(start || this.start, end || this.end); - }; - this.extend = function(row, column) { - var cmp = this.compare(row, column); - - if (cmp == 0) - return this; - else if (cmp == -1) - var start = {row: row, column: column}; - else - var end = {row: row, column: column}; - - return Range.fromPoints(start || this.start, end || this.end); - }; - - this.isEmpty = function() { - return (this.start.row === this.end.row && this.start.column === this.end.column); - }; - this.isMultiLine = function() { - return (this.start.row !== this.end.row); - }; - this.clone = function() { - return Range.fromPoints(this.start, this.end); - }; - this.collapseRows = function() { - if (this.end.column == 0) - return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) - else - return new Range(this.start.row, 0, this.end.row, 0) - }; - this.toScreenRange = function(session) { - var screenPosStart = session.documentToScreenPosition(this.start); - var screenPosEnd = session.documentToScreenPosition(this.end); - - return new Range( - screenPosStart.row, screenPosStart.column, - screenPosEnd.row, screenPosEnd.column - ); - }; - this.moveBy = function(row, column) { - this.start.row += row; - this.start.column += column; - this.end.row += row; - this.end.column += column; - }; - -}).call(Range.prototype); -Range.fromPoints = function(start, end) { - return new Range(start.row, start.column, end.row, end.column); -}; -Range.comparePoints = comparePoints; - -Range.comparePoints = function(p1, p2) { - return p1.row - p2.row || p1.column - p2.column; -}; - - -exports.Range = Range; -}); - -ace.define("ace/selection",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter","ace/range"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var lang = require("./lib/lang"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Selection = function(session) { - this.session = session; - this.doc = session.getDocument(); - - this.clearSelection(); - this.lead = this.selectionLead = this.doc.createAnchor(0, 0); - this.anchor = this.selectionAnchor = this.doc.createAnchor(0, 0); - - var self = this; - this.lead.on("change", function(e) { - self._emit("changeCursor"); - if (!self.$isEmpty) - self._emit("changeSelection"); - if (!self.$keepDesiredColumnOnChange && e.old.column != e.value.column) - self.$desiredColumn = null; - }); - - this.selectionAnchor.on("change", function() { - if (!self.$isEmpty) - self._emit("changeSelection"); - }); -}; - -(function() { - - oop.implement(this, EventEmitter); - this.isEmpty = function() { - return (this.$isEmpty || ( - this.anchor.row == this.lead.row && - this.anchor.column == this.lead.column - )); - }; - this.isMultiLine = function() { - if (this.isEmpty()) { - return false; - } - - return this.getRange().isMultiLine(); - }; - this.getCursor = function() { - return this.lead.getPosition(); - }; - this.setSelectionAnchor = function(row, column) { - this.anchor.setPosition(row, column); - - if (this.$isEmpty) { - this.$isEmpty = false; - this._emit("changeSelection"); - } - }; - this.getSelectionAnchor = function() { - if (this.$isEmpty) - return this.getSelectionLead(); - else - return this.anchor.getPosition(); - }; - this.getSelectionLead = function() { - return this.lead.getPosition(); - }; - this.shiftSelection = function(columns) { - if (this.$isEmpty) { - this.moveCursorTo(this.lead.row, this.lead.column + columns); - return; - } - - var anchor = this.getSelectionAnchor(); - var lead = this.getSelectionLead(); - - var isBackwards = this.isBackwards(); - - if (!isBackwards || anchor.column !== 0) - this.setSelectionAnchor(anchor.row, anchor.column + columns); - - if (isBackwards || lead.column !== 0) { - this.$moveSelection(function() { - this.moveCursorTo(lead.row, lead.column + columns); - }); - } - }; - this.isBackwards = function() { - var anchor = this.anchor; - var lead = this.lead; - return (anchor.row > lead.row || (anchor.row == lead.row && anchor.column > lead.column)); - }; - this.getRange = function() { - var anchor = this.anchor; - var lead = this.lead; - - if (this.isEmpty()) - return Range.fromPoints(lead, lead); - - if (this.isBackwards()) { - return Range.fromPoints(lead, anchor); - } - else { - return Range.fromPoints(anchor, lead); - } - }; - this.clearSelection = function() { - if (!this.$isEmpty) { - this.$isEmpty = true; - this._emit("changeSelection"); - } - }; - this.selectAll = function() { - var lastRow = this.doc.getLength() - 1; - this.setSelectionAnchor(0, 0); - this.moveCursorTo(lastRow, this.doc.getLine(lastRow).length); - }; - this.setRange = - this.setSelectionRange = function(range, reverse) { - if (reverse) { - this.setSelectionAnchor(range.end.row, range.end.column); - this.selectTo(range.start.row, range.start.column); - } else { - this.setSelectionAnchor(range.start.row, range.start.column); - this.selectTo(range.end.row, range.end.column); - } - if (this.getRange().isEmpty()) - this.$isEmpty = true; - this.$desiredColumn = null; - }; - - this.$moveSelection = function(mover) { - var lead = this.lead; - if (this.$isEmpty) - this.setSelectionAnchor(lead.row, lead.column); - - mover.call(this); - }; - this.selectTo = function(row, column) { - this.$moveSelection(function() { - this.moveCursorTo(row, column); - }); - }; - this.selectToPosition = function(pos) { - this.$moveSelection(function() { - this.moveCursorToPosition(pos); - }); - }; - this.moveTo = function(row, column) { - this.clearSelection(); - this.moveCursorTo(row, column); - }; - this.moveToPosition = function(pos) { - this.clearSelection(); - this.moveCursorToPosition(pos); - }; - this.selectUp = function() { - this.$moveSelection(this.moveCursorUp); - }; - this.selectDown = function() { - this.$moveSelection(this.moveCursorDown); - }; - this.selectRight = function() { - this.$moveSelection(this.moveCursorRight); - }; - this.selectLeft = function() { - this.$moveSelection(this.moveCursorLeft); - }; - this.selectLineStart = function() { - this.$moveSelection(this.moveCursorLineStart); - }; - this.selectLineEnd = function() { - this.$moveSelection(this.moveCursorLineEnd); - }; - this.selectFileEnd = function() { - this.$moveSelection(this.moveCursorFileEnd); - }; - this.selectFileStart = function() { - this.$moveSelection(this.moveCursorFileStart); - }; - this.selectWordRight = function() { - this.$moveSelection(this.moveCursorWordRight); - }; - this.selectWordLeft = function() { - this.$moveSelection(this.moveCursorWordLeft); - }; - this.getWordRange = function(row, column) { - if (typeof column == "undefined") { - var cursor = row || this.lead; - row = cursor.row; - column = cursor.column; - } - return this.session.getWordRange(row, column); - }; - this.selectWord = function() { - this.setSelectionRange(this.getWordRange()); - }; - this.selectAWord = function() { - var cursor = this.getCursor(); - var range = this.session.getAWordRange(cursor.row, cursor.column); - this.setSelectionRange(range); - }; - - this.getLineRange = function(row, excludeLastChar) { - var rowStart = typeof row == "number" ? row : this.lead.row; - var rowEnd; - - var foldLine = this.session.getFoldLine(rowStart); - if (foldLine) { - rowStart = foldLine.start.row; - rowEnd = foldLine.end.row; - } else { - rowEnd = rowStart; - } - if (excludeLastChar === true) - return new Range(rowStart, 0, rowEnd, this.session.getLine(rowEnd).length); - else - return new Range(rowStart, 0, rowEnd + 1, 0); - }; - this.selectLine = function() { - this.setSelectionRange(this.getLineRange()); - }; - this.moveCursorUp = function() { - this.moveCursorBy(-1, 0); - }; - this.moveCursorDown = function() { - this.moveCursorBy(1, 0); - }; - this.moveCursorLeft = function() { - var cursor = this.lead.getPosition(), - fold; - - if (fold = this.session.getFoldAt(cursor.row, cursor.column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - } else if (cursor.column === 0) { - if (cursor.row > 0) { - this.moveCursorTo(cursor.row - 1, this.doc.getLine(cursor.row - 1).length); - } - } - else { - var tabSize = this.session.getTabSize(); - if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column-tabSize, cursor.column).split(" ").length-1 == tabSize) - this.moveCursorBy(0, -tabSize); - else - this.moveCursorBy(0, -1); - } - }; - this.moveCursorRight = function() { - var cursor = this.lead.getPosition(), - fold; - if (fold = this.session.getFoldAt(cursor.row, cursor.column, 1)) { - this.moveCursorTo(fold.end.row, fold.end.column); - } - else if (this.lead.column == this.doc.getLine(this.lead.row).length) { - if (this.lead.row < this.doc.getLength() - 1) { - this.moveCursorTo(this.lead.row + 1, 0); - } - } - else { - var tabSize = this.session.getTabSize(); - var cursor = this.lead; - if (this.session.isTabStop(cursor) && this.doc.getLine(cursor.row).slice(cursor.column, cursor.column+tabSize).split(" ").length-1 == tabSize) - this.moveCursorBy(0, tabSize); - else - this.moveCursorBy(0, 1); - } - }; - this.moveCursorLineStart = function() { - var row = this.lead.row; - var column = this.lead.column; - var screenRow = this.session.documentToScreenRow(row, column); - var firstColumnPosition = this.session.screenToDocumentPosition(screenRow, 0); - var beforeCursor = this.session.getDisplayLine( - row, null, firstColumnPosition.row, - firstColumnPosition.column - ); - - var leadingSpace = beforeCursor.match(/^\s*/); - if (leadingSpace[0].length != column && !this.session.$useEmacsStyleLineStart) - firstColumnPosition.column += leadingSpace[0].length; - this.moveCursorToPosition(firstColumnPosition); - }; - this.moveCursorLineEnd = function() { - var lead = this.lead; - var lineEnd = this.session.getDocumentLastRowColumnPosition(lead.row, lead.column); - if (this.lead.column == lineEnd.column) { - var line = this.session.getLine(lineEnd.row); - if (lineEnd.column == line.length) { - var textEnd = line.search(/\s+$/); - if (textEnd > 0) - lineEnd.column = textEnd; - } - } - - this.moveCursorTo(lineEnd.row, lineEnd.column); - }; - this.moveCursorFileEnd = function() { - var row = this.doc.getLength() - 1; - var column = this.doc.getLine(row).length; - this.moveCursorTo(row, column); - }; - this.moveCursorFileStart = function() { - this.moveCursorTo(0, 0); - }; - this.moveCursorLongWordRight = function() { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - - var match; - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - this.moveCursorTo(fold.end.row, fold.end.column); - return; - } - if (match = this.session.nonTokenRe.exec(rightOfCursor)) { - column += this.session.nonTokenRe.lastIndex; - this.session.nonTokenRe.lastIndex = 0; - rightOfCursor = line.substring(column); - } - if (column >= line.length) { - this.moveCursorTo(row, line.length); - this.moveCursorRight(); - if (row < this.doc.getLength() - 1) - this.moveCursorWordRight(); - return; - } - if (match = this.session.tokenRe.exec(rightOfCursor)) { - column += this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - - this.moveCursorTo(row, column); - }; - this.moveCursorLongWordLeft = function() { - var row = this.lead.row; - var column = this.lead.column; - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) { - this.moveCursorTo(fold.start.row, fold.start.column); - return; - } - - var str = this.session.getFoldStringAt(row, column, -1); - if (str == null) { - str = this.doc.getLine(row).substring(0, column); - } - - var leftOfCursor = lang.stringReverse(str); - var match; - this.session.nonTokenRe.lastIndex = 0; - this.session.tokenRe.lastIndex = 0; - if (match = this.session.nonTokenRe.exec(leftOfCursor)) { - column -= this.session.nonTokenRe.lastIndex; - leftOfCursor = leftOfCursor.slice(this.session.nonTokenRe.lastIndex); - this.session.nonTokenRe.lastIndex = 0; - } - if (column <= 0) { - this.moveCursorTo(row, 0); - this.moveCursorLeft(); - if (row > 0) - this.moveCursorWordLeft(); - return; - } - if (match = this.session.tokenRe.exec(leftOfCursor)) { - column -= this.session.tokenRe.lastIndex; - this.session.tokenRe.lastIndex = 0; - } - - this.moveCursorTo(row, column); - }; - - this.$shortWordEndIndex = function(rightOfCursor) { - var match, index = 0, ch; - var whitespaceRe = /\s/; - var tokenRe = this.session.tokenRe; - - tokenRe.lastIndex = 0; - if (match = this.session.tokenRe.exec(rightOfCursor)) { - index = this.session.tokenRe.lastIndex; - } else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index ++; - - if (index < 1) { - tokenRe.lastIndex = 0; - while ((ch = rightOfCursor[index]) && !tokenRe.test(ch)) { - tokenRe.lastIndex = 0; - index ++; - if (whitespaceRe.test(ch)) { - if (index > 2) { - index--; - break; - } else { - while ((ch = rightOfCursor[index]) && whitespaceRe.test(ch)) - index ++; - if (index > 2) - break; - } - } - } - } - } - tokenRe.lastIndex = 0; - - return index; - }; - - this.moveCursorShortWordRight = function() { - var row = this.lead.row; - var column = this.lead.column; - var line = this.doc.getLine(row); - var rightOfCursor = line.substring(column); - - var fold = this.session.getFoldAt(row, column, 1); - if (fold) - return this.moveCursorTo(fold.end.row, fold.end.column); - - if (column == line.length) { - var l = this.doc.getLength(); - do { - row++; - rightOfCursor = this.doc.getLine(row); - } while (row < l && /^\s*$/.test(rightOfCursor)); - - if (!/^\s+/.test(rightOfCursor)) - rightOfCursor = ""; - column = 0; - } - - var index = this.$shortWordEndIndex(rightOfCursor); - - this.moveCursorTo(row, column + index); - }; - - this.moveCursorShortWordLeft = function() { - var row = this.lead.row; - var column = this.lead.column; - - var fold; - if (fold = this.session.getFoldAt(row, column, -1)) - return this.moveCursorTo(fold.start.row, fold.start.column); - - var line = this.session.getLine(row).substring(0, column); - if (column === 0) { - do { - row--; - line = this.doc.getLine(row); - } while (row > 0 && /^\s*$/.test(line)); - - column = line.length; - if (!/\s+$/.test(line)) - line = ""; - } - - var leftOfCursor = lang.stringReverse(line); - var index = this.$shortWordEndIndex(leftOfCursor); - - return this.moveCursorTo(row, column - index); - }; - - this.moveCursorWordRight = function() { - if (this.session.$selectLongWords) - this.moveCursorLongWordRight(); - else - this.moveCursorShortWordRight(); - }; - - this.moveCursorWordLeft = function() { - if (this.session.$selectLongWords) - this.moveCursorLongWordLeft(); - else - this.moveCursorShortWordLeft(); - }; - this.moveCursorBy = function(rows, chars) { - var screenPos = this.session.documentToScreenPosition( - this.lead.row, - this.lead.column - ); - - if (chars === 0) { - if (this.$desiredColumn) - screenPos.column = this.$desiredColumn; - else - this.$desiredColumn = screenPos.column; - } - - var docPos = this.session.screenToDocumentPosition(screenPos.row + rows, screenPos.column); - - if (rows !== 0 && chars === 0 && docPos.row === this.lead.row && docPos.column === this.lead.column) { - if (this.session.lineWidgets && this.session.lineWidgets[docPos.row]) { - if (docPos.row > 0 || rows > 0) - docPos.row++; - } - } - this.moveCursorTo(docPos.row, docPos.column + chars, chars === 0); - }; - this.moveCursorToPosition = function(position) { - this.moveCursorTo(position.row, position.column); - }; - this.moveCursorTo = function(row, column, keepDesiredColumn) { - var fold = this.session.getFoldAt(row, column, 1); - if (fold) { - row = fold.start.row; - column = fold.start.column; - } - - this.$keepDesiredColumnOnChange = true; - this.lead.setPosition(row, column); - this.$keepDesiredColumnOnChange = false; - - if (!keepDesiredColumn) - this.$desiredColumn = null; - }; - this.moveCursorToScreen = function(row, column, keepDesiredColumn) { - var pos = this.session.screenToDocumentPosition(row, column); - this.moveCursorTo(pos.row, pos.column, keepDesiredColumn); - }; - this.detach = function() { - this.lead.detach(); - this.anchor.detach(); - this.session = this.doc = null; - }; - - this.fromOrientedRange = function(range) { - this.setSelectionRange(range, range.cursor == range.start); - this.$desiredColumn = range.desiredColumn || this.$desiredColumn; - }; - - this.toOrientedRange = function(range) { - var r = this.getRange(); - if (range) { - range.start.column = r.start.column; - range.start.row = r.start.row; - range.end.column = r.end.column; - range.end.row = r.end.row; - } else { - range = r; - } - - range.cursor = this.isBackwards() ? range.start : range.end; - range.desiredColumn = this.$desiredColumn; - return range; - }; - this.getRangeOfMovements = function(func) { - var start = this.getCursor(); - try { - func(this); - var end = this.getCursor(); - return Range.fromPoints(start,end); - } catch(e) { - return Range.fromPoints(start,start); - } finally { - this.moveCursorToPosition(start); - } - }; - - this.toJSON = function() { - if (this.rangeCount) { - var data = this.ranges.map(function(r) { - var r1 = r.clone(); - r1.isBackwards = r.cursor == r.start; - return r1; - }); - } else { - var data = this.getRange(); - data.isBackwards = this.isBackwards(); - } - return data; - }; - - this.fromJSON = function(data) { - if (data.start == undefined) { - if (this.rangeList) { - this.toSingleRange(data[0]); - for (var i = data.length; i--; ) { - var r = Range.fromPoints(data[i].start, data[i].end); - if (data[i].isBackwards) - r.cursor = r.start; - this.addRange(r, true); - } - return; - } else - data = data[0]; - } - if (this.rangeList) - this.toSingleRange(data); - this.setSelectionRange(data, data.isBackwards); - }; - - this.isEqual = function(data) { - if ((data.length || this.rangeCount) && data.length != this.rangeCount) - return false; - if (!data.length || !this.ranges) - return this.getRange().isEqual(data); - - for (var i = this.ranges.length; i--; ) { - if (!this.ranges[i].isEqual(data[i])) - return false; - } - return true; - }; - -}).call(Selection.prototype); - -exports.Selection = Selection; -}); - -ace.define("ace/tokenizer",["require","exports","module","ace/config"], function(require, exports, module) { -"use strict"; - -var config = require("./config"); -var MAX_TOKEN_COUNT = 2000; -var Tokenizer = function(rules) { - this.states = rules; - - this.regExps = {}; - this.matchMappings = {}; - for (var key in this.states) { - var state = this.states[key]; - var ruleRegExps = []; - var matchTotal = 0; - var mapping = this.matchMappings[key] = {defaultToken: "text"}; - var flag = "g"; - - var splitterRurles = []; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.defaultToken) - mapping.defaultToken = rule.defaultToken; - if (rule.caseInsensitive) - flag = "gi"; - if (rule.regex == null) - continue; - - if (rule.regex instanceof RegExp) - rule.regex = rule.regex.toString().slice(1, -1); - var adjustedregex = rule.regex; - var matchcount = new RegExp("(?:(" + adjustedregex + ")|(.))").exec("a").length - 2; - if (Array.isArray(rule.token)) { - if (rule.token.length == 1 || matchcount == 1) { - rule.token = rule.token[0]; - } else if (matchcount - 1 != rule.token.length) { - this.reportError("number of classes and regexp groups doesn't match", { - rule: rule, - groupCount: matchcount - 1 - }); - rule.token = rule.token[0]; - } else { - rule.tokenArray = rule.token; - rule.token = null; - rule.onMatch = this.$arrayTokens; - } - } else if (typeof rule.token == "function" && !rule.onMatch) { - if (matchcount > 1) - rule.onMatch = this.$applyToken; - else - rule.onMatch = rule.token; - } - - if (matchcount > 1) { - if (/\\\d/.test(rule.regex)) { - adjustedregex = rule.regex.replace(/\\([0-9]+)/g, function(match, digit) { - return "\\" + (parseInt(digit, 10) + matchTotal + 1); - }); - } else { - matchcount = 1; - adjustedregex = this.removeCapturingGroups(rule.regex); - } - if (!rule.splitRegex && typeof rule.token != "string") - splitterRurles.push(rule); // flag will be known only at the very end - } - - mapping[matchTotal] = i; - matchTotal += matchcount; - - ruleRegExps.push(adjustedregex); - if (!rule.onMatch) - rule.onMatch = null; - } - - if (!ruleRegExps.length) { - mapping[0] = 0; - ruleRegExps.push("$"); - } - - splitterRurles.forEach(function(rule) { - rule.splitRegex = this.createSplitterRegexp(rule.regex, flag); - }, this); - - this.regExps[key] = new RegExp("(" + ruleRegExps.join(")|(") + ")|($)", flag); - } -}; - -(function() { - this.$setMaxTokenCount = function(m) { - MAX_TOKEN_COUNT = m | 0; - }; - - this.$applyToken = function(str) { - var values = this.splitRegex.exec(str).slice(1); - var types = this.token.apply(this, values); - if (typeof types === "string") - return [{type: types, value: str}]; - - var tokens = []; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i]) - tokens[tokens.length] = { - type: types[i], - value: values[i] - }; - } - return tokens; - }; - - this.$arrayTokens = function(str) { - if (!str) - return []; - var values = this.splitRegex.exec(str); - if (!values) - return "text"; - var tokens = []; - var types = this.tokenArray; - for (var i = 0, l = types.length; i < l; i++) { - if (values[i + 1]) - tokens[tokens.length] = { - type: types[i], - value: values[i + 1] - }; - } - return tokens; - }; - - this.removeCapturingGroups = function(src) { - var r = src.replace( - /\[(?:\\.|[^\]])*?\]|\\.|\(\?[:=!]|(\()/g, - function(x, y) {return y ? "(?:" : x;} - ); - return r; - }; - - this.createSplitterRegexp = function(src, flag) { - if (src.indexOf("(?=") != -1) { - var stack = 0; - var inChClass = false; - var lastCapture = {}; - src.replace(/(\\.)|(\((?:\?[=!])?)|(\))|([\[\]])/g, function( - m, esc, parenOpen, parenClose, square, index - ) { - if (inChClass) { - inChClass = square != "]"; - } else if (square) { - inChClass = true; - } else if (parenClose) { - if (stack == lastCapture.stack) { - lastCapture.end = index+1; - lastCapture.stack = -1; - } - stack--; - } else if (parenOpen) { - stack++; - if (parenOpen.length != 1) { - lastCapture.stack = stack - lastCapture.start = index; - } - } - return m; - }); - - if (lastCapture.end != null && /^\)*$/.test(src.substr(lastCapture.end))) - src = src.substring(0, lastCapture.start) + src.substr(lastCapture.end); - } - if (src.charAt(0) != "^") src = "^" + src; - if (src.charAt(src.length - 1) != "$") src += "$"; - - return new RegExp(src, (flag||"").replace("g", "")); - }; - this.getLineTokens = function(line, startState) { - if (startState && typeof startState != "string") { - var stack = startState.slice(0); - startState = stack[0]; - if (startState === "#tmp") { - stack.shift() - startState = stack.shift() - } - } else - var stack = []; - - var currentState = startState || "start"; - var state = this.states[currentState]; - if (!state) { - currentState = "start"; - state = this.states[currentState]; - } - var mapping = this.matchMappings[currentState]; - var re = this.regExps[currentState]; - re.lastIndex = 0; - - var match, tokens = []; - var lastIndex = 0; - var matchAttempts = 0; - - var token = {type: null, value: ""}; - - while (match = re.exec(line)) { - var type = mapping.defaultToken; - var rule = null; - var value = match[0]; - var index = re.lastIndex; - - if (index - value.length > lastIndex) { - var skipped = line.substring(lastIndex, index - value.length); - if (token.type == type) { - token.value += skipped; - } else { - if (token.type) - tokens.push(token); - token = {type: type, value: skipped}; - } - } - - for (var i = 0; i < match.length-2; i++) { - if (match[i + 1] === undefined) - continue; - - rule = state[mapping[i]]; - - if (rule.onMatch) - type = rule.onMatch(value, currentState, stack); - else - type = rule.token; - - if (rule.next) { - if (typeof rule.next == "string") { - currentState = rule.next; - } else { - currentState = rule.next(currentState, stack); - } - - state = this.states[currentState]; - if (!state) { - this.reportError("state doesn't exist", currentState); - currentState = "start"; - state = this.states[currentState]; - } - mapping = this.matchMappings[currentState]; - lastIndex = index; - re = this.regExps[currentState]; - re.lastIndex = index; - } - break; - } - - if (value) { - if (typeof type === "string") { - if ((!rule || rule.merge !== false) && token.type === type) { - token.value += value; - } else { - if (token.type) - tokens.push(token); - token = {type: type, value: value}; - } - } else if (type) { - if (token.type) - tokens.push(token); - token = {type: null, value: ""}; - for (var i = 0; i < type.length; i++) - tokens.push(type[i]); - } - } - - if (lastIndex == line.length) - break; - - lastIndex = index; - - if (matchAttempts++ > MAX_TOKEN_COUNT) { - if (matchAttempts > 2 * line.length) { - this.reportError("infinite loop with in ace tokenizer", { - startState: startState, - line: line - }); - } - while (lastIndex < line.length) { - if (token.type) - tokens.push(token); - token = { - value: line.substring(lastIndex, lastIndex += 2000), - type: "overflow" - }; - } - currentState = "start"; - stack = []; - break; - } - } - - if (token.type) - tokens.push(token); - - if (stack.length > 1) { - if (stack[0] !== currentState) - stack.unshift("#tmp", currentState); - } - return { - tokens : tokens, - state : stack.length ? stack : currentState - }; - }; - - this.reportError = config.reportError; - -}).call(Tokenizer.prototype); - -exports.Tokenizer = Tokenizer; -}); - -ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"], function(require, exports, module) { -"use strict"; - -var lang = require("../lib/lang"); - -var TextHighlightRules = function() { - - this.$rules = { - "start" : [{ - token : "empty_line", - regex : '^$' - }, { - defaultToken : "text" - }] - }; -}; - -(function() { - - this.addRules = function(rules, prefix) { - if (!prefix) { - for (var key in rules) - this.$rules[key] = rules[key]; - return; - } - for (var key in rules) { - var state = rules[key]; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (rule.next || rule.onMatch) { - if (typeof rule.next == "string") { - if (rule.next.indexOf(prefix) !== 0) - rule.next = prefix + rule.next; - } - if (rule.nextState && rule.nextState.indexOf(prefix) !== 0) - rule.nextState = prefix + rule.nextState; - } - } - this.$rules[prefix + key] = state; - } - }; - - this.getRules = function() { - return this.$rules; - }; - - this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) { - var embedRules = typeof HighlightRules == "function" - ? new HighlightRules().getRules() - : HighlightRules; - if (states) { - for (var i = 0; i < states.length; i++) - states[i] = prefix + states[i]; - } else { - states = []; - for (var key in embedRules) - states.push(prefix + key); - } - - this.addRules(embedRules, prefix); - - if (escapeRules) { - var addRules = Array.prototype[append ? "push" : "unshift"]; - for (var i = 0; i < states.length; i++) - addRules.apply(this.$rules[states[i]], lang.deepCopy(escapeRules)); - } - - if (!this.$embeds) - this.$embeds = []; - this.$embeds.push(prefix); - }; - - this.getEmbeds = function() { - return this.$embeds; - }; - - var pushState = function(currentState, stack) { - if (currentState != "start" || stack.length) - stack.unshift(this.nextState, currentState); - return this.nextState; - }; - var popState = function(currentState, stack) { - stack.shift(); - return stack.shift() || "start"; - }; - - this.normalizeRules = function() { - var id = 0; - var rules = this.$rules; - function processState(key) { - var state = rules[key]; - state.processed = true; - for (var i = 0; i < state.length; i++) { - var rule = state[i]; - if (!rule.regex && rule.start) { - rule.regex = rule.start; - if (!rule.next) - rule.next = []; - rule.next.push({ - defaultToken: rule.token - }, { - token: rule.token + ".end", - regex: rule.end || rule.start, - next: "pop" - }); - rule.token = rule.token + ".start"; - rule.push = true; - } - var next = rule.next || rule.push; - if (next && Array.isArray(next)) { - var stateName = rule.stateName; - if (!stateName) { - stateName = rule.token; - if (typeof stateName != "string") - stateName = stateName[0] || ""; - if (rules[stateName]) - stateName += id++; - } - rules[stateName] = next; - rule.next = stateName; - processState(stateName); - } else if (next == "pop") { - rule.next = popState; - } - - if (rule.push) { - rule.nextState = rule.next || rule.push; - rule.next = pushState; - delete rule.push; - } - - if (rule.rules) { - for (var r in rule.rules) { - if (rules[r]) { - if (rules[r].push) - rules[r].push.apply(rules[r], rule.rules[r]); - } else { - rules[r] = rule.rules[r]; - } - } - } - if (rule.include || typeof rule == "string") { - var includeName = rule.include || rule; - var toInsert = rules[includeName]; - } else if (Array.isArray(rule)) - toInsert = rule; - - if (toInsert) { - var args = [i, 1].concat(toInsert); - if (rule.noEscape) - args = args.filter(function(x) {return !x.next;}); - state.splice.apply(state, args); - i--; - toInsert = null; - } - - if (rule.keywordMap) { - rule.token = this.createKeywordMapper( - rule.keywordMap, rule.defaultToken || "text", rule.caseInsensitive - ); - delete rule.defaultToken; - } - } - } - Object.keys(rules).forEach(processState, this); - }; - - this.createKeywordMapper = function(map, defaultToken, ignoreCase, splitChar) { - var keywords = Object.create(null); - Object.keys(map).forEach(function(className) { - var a = map[className]; - if (ignoreCase) - a = a.toLowerCase(); - var list = a.split(splitChar || "|"); - for (var i = list.length; i--; ) - keywords[list[i]] = className; - }); - if (Object.getPrototypeOf(keywords)) { - keywords.__proto__ = null; - } - this.$keywordList = Object.keys(keywords); - map = null; - return ignoreCase - ? function(value) {return keywords[value.toLowerCase()] || defaultToken } - : function(value) {return keywords[value] || defaultToken }; - }; - - this.getKeywords = function() { - return this.$keywords; - }; - -}).call(TextHighlightRules.prototype); - -exports.TextHighlightRules = TextHighlightRules; -}); - -ace.define("ace/mode/behaviour",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var Behaviour = function() { - this.$behaviours = {}; -}; - -(function () { - - this.add = function (name, action, callback) { - switch (undefined) { - case this.$behaviours: - this.$behaviours = {}; - case this.$behaviours[name]: - this.$behaviours[name] = {}; - } - this.$behaviours[name][action] = callback; - } - - this.addBehaviours = function (behaviours) { - for (var key in behaviours) { - for (var action in behaviours[key]) { - this.add(key, action, behaviours[key][action]); - } - } - } - - this.remove = function (name) { - if (this.$behaviours && this.$behaviours[name]) { - delete this.$behaviours[name]; - } - } - - this.inherit = function (mode, filter) { - if (typeof mode === "function") { - var behaviours = new mode().getBehaviours(filter); - } else { - var behaviours = mode.getBehaviours(filter); - } - this.addBehaviours(behaviours); - } - - this.getBehaviours = function (filter) { - if (!filter) { - return this.$behaviours; - } else { - var ret = {} - for (var i = 0; i < filter.length; i++) { - if (this.$behaviours[filter[i]]) { - ret[filter[i]] = this.$behaviours[filter[i]]; - } - } - return ret; - } - } - -}).call(Behaviour.prototype); - -exports.Behaviour = Behaviour; -}); - -ace.define("ace/unicode",["require","exports","module"], function(require, exports, module) { -"use strict"; -exports.packages = {}; - -addUnicodePackage({ - L: "0041-005A0061-007A00AA00B500BA00C0-00D600D8-00F600F8-02C102C6-02D102E0-02E402EC02EE0370-037403760377037A-037D03860388-038A038C038E-03A103A3-03F503F7-0481048A-05250531-055605590561-058705D0-05EA05F0-05F20621-064A066E066F0671-06D306D506E506E606EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA07F407F507FA0800-0815081A082408280904-0939093D09500958-0961097109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E460E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EC60EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10A0-10C510D0-10FA10FC1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317D717DC1820-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541AA71B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C7D1CE9-1CEC1CEE-1CF11D00-1DBF1E00-1F151F18-1F1D1F20-1F451F48-1F4D1F50-1F571F591F5B1F5D1F5F-1F7D1F80-1FB41FB6-1FBC1FBE1FC2-1FC41FC6-1FCC1FD0-1FD31FD6-1FDB1FE0-1FEC1FF2-1FF41FF6-1FFC2071207F2090-209421022107210A-211321152119-211D212421262128212A-212D212F-2139213C-213F2145-2149214E218321842C00-2C2E2C30-2C5E2C60-2CE42CEB-2CEE2D00-2D252D30-2D652D6F2D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE2E2F300530063031-3035303B303C3041-3096309D-309F30A1-30FA30FC-30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A48CA4D0-A4FDA500-A60CA610-A61FA62AA62BA640-A65FA662-A66EA67F-A697A6A0-A6E5A717-A71FA722-A788A78BA78CA7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2A9CFAA00-AA28AA40-AA42AA44-AA4BAA60-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADB-AADDABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB00-FB06FB13-FB17FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF21-FF3AFF41-FF5AFF66-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", - Ll: "0061-007A00AA00B500BA00DF-00F600F8-00FF01010103010501070109010B010D010F01110113011501170119011B011D011F01210123012501270129012B012D012F01310133013501370138013A013C013E014001420144014601480149014B014D014F01510153015501570159015B015D015F01610163016501670169016B016D016F0171017301750177017A017C017E-0180018301850188018C018D019201950199-019B019E01A101A301A501A801AA01AB01AD01B001B401B601B901BA01BD-01BF01C601C901CC01CE01D001D201D401D601D801DA01DC01DD01DF01E101E301E501E701E901EB01ED01EF01F001F301F501F901FB01FD01FF02010203020502070209020B020D020F02110213021502170219021B021D021F02210223022502270229022B022D022F02310233-0239023C023F0240024202470249024B024D024F-02930295-02AF037103730377037B-037D039003AC-03CE03D003D103D5-03D703D903DB03DD03DF03E103E303E503E703E903EB03ED03EF-03F303F503F803FB03FC0430-045F04610463046504670469046B046D046F04710473047504770479047B047D047F0481048B048D048F04910493049504970499049B049D049F04A104A304A504A704A904AB04AD04AF04B104B304B504B704B904BB04BD04BF04C204C404C604C804CA04CC04CE04CF04D104D304D504D704D904DB04DD04DF04E104E304E504E704E904EB04ED04EF04F104F304F504F704F904FB04FD04FF05010503050505070509050B050D050F05110513051505170519051B051D051F0521052305250561-05871D00-1D2B1D62-1D771D79-1D9A1E011E031E051E071E091E0B1E0D1E0F1E111E131E151E171E191E1B1E1D1E1F1E211E231E251E271E291E2B1E2D1E2F1E311E331E351E371E391E3B1E3D1E3F1E411E431E451E471E491E4B1E4D1E4F1E511E531E551E571E591E5B1E5D1E5F1E611E631E651E671E691E6B1E6D1E6F1E711E731E751E771E791E7B1E7D1E7F1E811E831E851E871E891E8B1E8D1E8F1E911E931E95-1E9D1E9F1EA11EA31EA51EA71EA91EAB1EAD1EAF1EB11EB31EB51EB71EB91EBB1EBD1EBF1EC11EC31EC51EC71EC91ECB1ECD1ECF1ED11ED31ED51ED71ED91EDB1EDD1EDF1EE11EE31EE51EE71EE91EEB1EED1EEF1EF11EF31EF51EF71EF91EFB1EFD1EFF-1F071F10-1F151F20-1F271F30-1F371F40-1F451F50-1F571F60-1F671F70-1F7D1F80-1F871F90-1F971FA0-1FA71FB0-1FB41FB61FB71FBE1FC2-1FC41FC61FC71FD0-1FD31FD61FD71FE0-1FE71FF2-1FF41FF61FF7210A210E210F2113212F21342139213C213D2146-2149214E21842C30-2C5E2C612C652C662C682C6A2C6C2C712C732C742C76-2C7C2C812C832C852C872C892C8B2C8D2C8F2C912C932C952C972C992C9B2C9D2C9F2CA12CA32CA52CA72CA92CAB2CAD2CAF2CB12CB32CB52CB72CB92CBB2CBD2CBF2CC12CC32CC52CC72CC92CCB2CCD2CCF2CD12CD32CD52CD72CD92CDB2CDD2CDF2CE12CE32CE42CEC2CEE2D00-2D25A641A643A645A647A649A64BA64DA64FA651A653A655A657A659A65BA65DA65FA663A665A667A669A66BA66DA681A683A685A687A689A68BA68DA68FA691A693A695A697A723A725A727A729A72BA72DA72F-A731A733A735A737A739A73BA73DA73FA741A743A745A747A749A74BA74DA74FA751A753A755A757A759A75BA75DA75FA761A763A765A767A769A76BA76DA76FA771-A778A77AA77CA77FA781A783A785A787A78CFB00-FB06FB13-FB17FF41-FF5A", - Lu: "0041-005A00C0-00D600D8-00DE01000102010401060108010A010C010E01100112011401160118011A011C011E01200122012401260128012A012C012E01300132013401360139013B013D013F0141014301450147014A014C014E01500152015401560158015A015C015E01600162016401660168016A016C016E017001720174017601780179017B017D018101820184018601870189-018B018E-0191019301940196-0198019C019D019F01A001A201A401A601A701A901AC01AE01AF01B1-01B301B501B701B801BC01C401C701CA01CD01CF01D101D301D501D701D901DB01DE01E001E201E401E601E801EA01EC01EE01F101F401F6-01F801FA01FC01FE02000202020402060208020A020C020E02100212021402160218021A021C021E02200222022402260228022A022C022E02300232023A023B023D023E02410243-02460248024A024C024E03700372037603860388-038A038C038E038F0391-03A103A3-03AB03CF03D2-03D403D803DA03DC03DE03E003E203E403E603E803EA03EC03EE03F403F703F903FA03FD-042F04600462046404660468046A046C046E04700472047404760478047A047C047E0480048A048C048E04900492049404960498049A049C049E04A004A204A404A604A804AA04AC04AE04B004B204B404B604B804BA04BC04BE04C004C104C304C504C704C904CB04CD04D004D204D404D604D804DA04DC04DE04E004E204E404E604E804EA04EC04EE04F004F204F404F604F804FA04FC04FE05000502050405060508050A050C050E05100512051405160518051A051C051E0520052205240531-055610A0-10C51E001E021E041E061E081E0A1E0C1E0E1E101E121E141E161E181E1A1E1C1E1E1E201E221E241E261E281E2A1E2C1E2E1E301E321E341E361E381E3A1E3C1E3E1E401E421E441E461E481E4A1E4C1E4E1E501E521E541E561E581E5A1E5C1E5E1E601E621E641E661E681E6A1E6C1E6E1E701E721E741E761E781E7A1E7C1E7E1E801E821E841E861E881E8A1E8C1E8E1E901E921E941E9E1EA01EA21EA41EA61EA81EAA1EAC1EAE1EB01EB21EB41EB61EB81EBA1EBC1EBE1EC01EC21EC41EC61EC81ECA1ECC1ECE1ED01ED21ED41ED61ED81EDA1EDC1EDE1EE01EE21EE41EE61EE81EEA1EEC1EEE1EF01EF21EF41EF61EF81EFA1EFC1EFE1F08-1F0F1F18-1F1D1F28-1F2F1F38-1F3F1F48-1F4D1F591F5B1F5D1F5F1F68-1F6F1FB8-1FBB1FC8-1FCB1FD8-1FDB1FE8-1FEC1FF8-1FFB21022107210B-210D2110-211221152119-211D212421262128212A-212D2130-2133213E213F214521832C00-2C2E2C602C62-2C642C672C692C6B2C6D-2C702C722C752C7E-2C802C822C842C862C882C8A2C8C2C8E2C902C922C942C962C982C9A2C9C2C9E2CA02CA22CA42CA62CA82CAA2CAC2CAE2CB02CB22CB42CB62CB82CBA2CBC2CBE2CC02CC22CC42CC62CC82CCA2CCC2CCE2CD02CD22CD42CD62CD82CDA2CDC2CDE2CE02CE22CEB2CEDA640A642A644A646A648A64AA64CA64EA650A652A654A656A658A65AA65CA65EA662A664A666A668A66AA66CA680A682A684A686A688A68AA68CA68EA690A692A694A696A722A724A726A728A72AA72CA72EA732A734A736A738A73AA73CA73EA740A742A744A746A748A74AA74CA74EA750A752A754A756A758A75AA75CA75EA760A762A764A766A768A76AA76CA76EA779A77BA77DA77EA780A782A784A786A78BFF21-FF3A", - Lt: "01C501C801CB01F21F88-1F8F1F98-1F9F1FA8-1FAF1FBC1FCC1FFC", - Lm: "02B0-02C102C6-02D102E0-02E402EC02EE0374037A0559064006E506E607F407F507FA081A0824082809710E460EC610FC17D718431AA71C78-1C7D1D2C-1D611D781D9B-1DBF2071207F2090-20942C7D2D6F2E2F30053031-3035303B309D309E30FC-30FEA015A4F8-A4FDA60CA67FA717-A71FA770A788A9CFAA70AADDFF70FF9EFF9F", - Lo: "01BB01C0-01C3029405D0-05EA05F0-05F20621-063F0641-064A066E066F0671-06D306D506EE06EF06FA-06FC06FF07100712-072F074D-07A507B107CA-07EA0800-08150904-0939093D09500958-096109720979-097F0985-098C098F09900993-09A809AA-09B009B209B6-09B909BD09CE09DC09DD09DF-09E109F009F10A05-0A0A0A0F0A100A13-0A280A2A-0A300A320A330A350A360A380A390A59-0A5C0A5E0A72-0A740A85-0A8D0A8F-0A910A93-0AA80AAA-0AB00AB20AB30AB5-0AB90ABD0AD00AE00AE10B05-0B0C0B0F0B100B13-0B280B2A-0B300B320B330B35-0B390B3D0B5C0B5D0B5F-0B610B710B830B85-0B8A0B8E-0B900B92-0B950B990B9A0B9C0B9E0B9F0BA30BA40BA8-0BAA0BAE-0BB90BD00C05-0C0C0C0E-0C100C12-0C280C2A-0C330C35-0C390C3D0C580C590C600C610C85-0C8C0C8E-0C900C92-0CA80CAA-0CB30CB5-0CB90CBD0CDE0CE00CE10D05-0D0C0D0E-0D100D12-0D280D2A-0D390D3D0D600D610D7A-0D7F0D85-0D960D9A-0DB10DB3-0DBB0DBD0DC0-0DC60E01-0E300E320E330E40-0E450E810E820E840E870E880E8A0E8D0E94-0E970E99-0E9F0EA1-0EA30EA50EA70EAA0EAB0EAD-0EB00EB20EB30EBD0EC0-0EC40EDC0EDD0F000F40-0F470F49-0F6C0F88-0F8B1000-102A103F1050-1055105A-105D106110651066106E-10701075-1081108E10D0-10FA1100-1248124A-124D1250-12561258125A-125D1260-1288128A-128D1290-12B012B2-12B512B8-12BE12C012C2-12C512C8-12D612D8-13101312-13151318-135A1380-138F13A0-13F41401-166C166F-167F1681-169A16A0-16EA1700-170C170E-17111720-17311740-17511760-176C176E-17701780-17B317DC1820-18421844-18771880-18A818AA18B0-18F51900-191C1950-196D1970-19741980-19AB19C1-19C71A00-1A161A20-1A541B05-1B331B45-1B4B1B83-1BA01BAE1BAF1C00-1C231C4D-1C4F1C5A-1C771CE9-1CEC1CEE-1CF12135-21382D30-2D652D80-2D962DA0-2DA62DA8-2DAE2DB0-2DB62DB8-2DBE2DC0-2DC62DC8-2DCE2DD0-2DD62DD8-2DDE3006303C3041-3096309F30A1-30FA30FF3105-312D3131-318E31A0-31B731F0-31FF3400-4DB54E00-9FCBA000-A014A016-A48CA4D0-A4F7A500-A60BA610-A61FA62AA62BA66EA6A0-A6E5A7FB-A801A803-A805A807-A80AA80C-A822A840-A873A882-A8B3A8F2-A8F7A8FBA90A-A925A930-A946A960-A97CA984-A9B2AA00-AA28AA40-AA42AA44-AA4BAA60-AA6FAA71-AA76AA7AAA80-AAAFAAB1AAB5AAB6AAB9-AABDAAC0AAC2AADBAADCABC0-ABE2AC00-D7A3D7B0-D7C6D7CB-D7FBF900-FA2DFA30-FA6DFA70-FAD9FB1DFB1F-FB28FB2A-FB36FB38-FB3CFB3EFB40FB41FB43FB44FB46-FBB1FBD3-FD3DFD50-FD8FFD92-FDC7FDF0-FDFBFE70-FE74FE76-FEFCFF66-FF6FFF71-FF9DFFA0-FFBEFFC2-FFC7FFCA-FFCFFFD2-FFD7FFDA-FFDC", - M: "0300-036F0483-04890591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DE-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0903093C093E-094E0951-0955096209630981-098309BC09BE-09C409C709C809CB-09CD09D709E209E30A01-0A030A3C0A3E-0A420A470A480A4B-0A4D0A510A700A710A750A81-0A830ABC0ABE-0AC50AC7-0AC90ACB-0ACD0AE20AE30B01-0B030B3C0B3E-0B440B470B480B4B-0B4D0B560B570B620B630B820BBE-0BC20BC6-0BC80BCA-0BCD0BD70C01-0C030C3E-0C440C46-0C480C4A-0C4D0C550C560C620C630C820C830CBC0CBE-0CC40CC6-0CC80CCA-0CCD0CD50CD60CE20CE30D020D030D3E-0D440D46-0D480D4A-0D4D0D570D620D630D820D830DCA0DCF-0DD40DD60DD8-0DDF0DF20DF30E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F3E0F3F0F71-0F840F860F870F90-0F970F99-0FBC0FC6102B-103E1056-1059105E-10601062-10641067-106D1071-10741082-108D108F109A-109D135F1712-17141732-1734175217531772177317B6-17D317DD180B-180D18A91920-192B1930-193B19B0-19C019C819C91A17-1A1B1A55-1A5E1A60-1A7C1A7F1B00-1B041B34-1B441B6B-1B731B80-1B821BA1-1BAA1C24-1C371CD0-1CD21CD4-1CE81CED1CF21DC0-1DE61DFD-1DFF20D0-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66F-A672A67CA67DA6F0A6F1A802A806A80BA823-A827A880A881A8B4-A8C4A8E0-A8F1A926-A92DA947-A953A980-A983A9B3-A9C0AA29-AA36AA43AA4CAA4DAA7BAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE3-ABEAABECABEDFB1EFE00-FE0FFE20-FE26", - Mn: "0300-036F0483-04870591-05BD05BF05C105C205C405C505C70610-061A064B-065E067006D6-06DC06DF-06E406E706E806EA-06ED07110730-074A07A6-07B007EB-07F30816-0819081B-08230825-08270829-082D0900-0902093C0941-0948094D0951-095509620963098109BC09C1-09C409CD09E209E30A010A020A3C0A410A420A470A480A4B-0A4D0A510A700A710A750A810A820ABC0AC1-0AC50AC70AC80ACD0AE20AE30B010B3C0B3F0B41-0B440B4D0B560B620B630B820BC00BCD0C3E-0C400C46-0C480C4A-0C4D0C550C560C620C630CBC0CBF0CC60CCC0CCD0CE20CE30D41-0D440D4D0D620D630DCA0DD2-0DD40DD60E310E34-0E3A0E47-0E4E0EB10EB4-0EB90EBB0EBC0EC8-0ECD0F180F190F350F370F390F71-0F7E0F80-0F840F860F870F90-0F970F99-0FBC0FC6102D-10301032-10371039103A103D103E10581059105E-10601071-1074108210851086108D109D135F1712-17141732-1734175217531772177317B7-17BD17C617C9-17D317DD180B-180D18A91920-19221927192819321939-193B1A171A181A561A58-1A5E1A601A621A65-1A6C1A73-1A7C1A7F1B00-1B031B341B36-1B3A1B3C1B421B6B-1B731B801B811BA2-1BA51BA81BA91C2C-1C331C361C371CD0-1CD21CD4-1CE01CE2-1CE81CED1DC0-1DE61DFD-1DFF20D0-20DC20E120E5-20F02CEF-2CF12DE0-2DFF302A-302F3099309AA66FA67CA67DA6F0A6F1A802A806A80BA825A826A8C4A8E0-A8F1A926-A92DA947-A951A980-A982A9B3A9B6-A9B9A9BCAA29-AA2EAA31AA32AA35AA36AA43AA4CAAB0AAB2-AAB4AAB7AAB8AABEAABFAAC1ABE5ABE8ABEDFB1EFE00-FE0FFE20-FE26", - Mc: "0903093E-09400949-094C094E0982098309BE-09C009C709C809CB09CC09D70A030A3E-0A400A830ABE-0AC00AC90ACB0ACC0B020B030B3E0B400B470B480B4B0B4C0B570BBE0BBF0BC10BC20BC6-0BC80BCA-0BCC0BD70C01-0C030C41-0C440C820C830CBE0CC0-0CC40CC70CC80CCA0CCB0CD50CD60D020D030D3E-0D400D46-0D480D4A-0D4C0D570D820D830DCF-0DD10DD8-0DDF0DF20DF30F3E0F3F0F7F102B102C10311038103B103C105610571062-10641067-106D108310841087-108C108F109A-109C17B617BE-17C517C717C81923-19261929-192B193019311933-193819B0-19C019C819C91A19-1A1B1A551A571A611A631A641A6D-1A721B041B351B3B1B3D-1B411B431B441B821BA11BA61BA71BAA1C24-1C2B1C341C351CE11CF2A823A824A827A880A881A8B4-A8C3A952A953A983A9B4A9B5A9BAA9BBA9BD-A9C0AA2FAA30AA33AA34AA4DAA7BABE3ABE4ABE6ABE7ABE9ABEAABEC", - Me: "0488048906DE20DD-20E020E2-20E4A670-A672", - N: "0030-003900B200B300B900BC-00BE0660-066906F0-06F907C0-07C90966-096F09E6-09EF09F4-09F90A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BF20C66-0C6F0C78-0C7E0CE6-0CEF0D66-0D750E50-0E590ED0-0ED90F20-0F331040-10491090-10991369-137C16EE-16F017E0-17E917F0-17F91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C5920702074-20792080-20892150-21822185-21892460-249B24EA-24FF2776-27932CFD30073021-30293038-303A3192-31953220-32293251-325F3280-328932B1-32BFA620-A629A6E6-A6EFA830-A835A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", - Nd: "0030-00390660-066906F0-06F907C0-07C90966-096F09E6-09EF0A66-0A6F0AE6-0AEF0B66-0B6F0BE6-0BEF0C66-0C6F0CE6-0CEF0D66-0D6F0E50-0E590ED0-0ED90F20-0F291040-10491090-109917E0-17E91810-18191946-194F19D0-19DA1A80-1A891A90-1A991B50-1B591BB0-1BB91C40-1C491C50-1C59A620-A629A8D0-A8D9A900-A909A9D0-A9D9AA50-AA59ABF0-ABF9FF10-FF19", - Nl: "16EE-16F02160-21822185-218830073021-30293038-303AA6E6-A6EF", - No: "00B200B300B900BC-00BE09F4-09F90BF0-0BF20C78-0C7E0D70-0D750F2A-0F331369-137C17F0-17F920702074-20792080-20892150-215F21892460-249B24EA-24FF2776-27932CFD3192-31953220-32293251-325F3280-328932B1-32BFA830-A835", - P: "0021-00230025-002A002C-002F003A003B003F0040005B-005D005F007B007D00A100AB00B700BB00BF037E0387055A-055F0589058A05BE05C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F3A-0F3D0F850FD0-0FD4104A-104F10FB1361-13681400166D166E169B169C16EB-16ED1735173617D4-17D617D8-17DA1800-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD32010-20272030-20432045-20512053-205E207D207E208D208E2329232A2768-277527C527C627E6-27EF2983-299829D8-29DB29FC29FD2CF9-2CFC2CFE2CFF2E00-2E2E2E302E313001-30033008-30113014-301F3030303D30A030FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFD3EFD3FFE10-FE19FE30-FE52FE54-FE61FE63FE68FE6AFE6BFF01-FF03FF05-FF0AFF0C-FF0FFF1AFF1BFF1FFF20FF3B-FF3DFF3FFF5BFF5DFF5F-FF65", - Pd: "002D058A05BE140018062010-20152E172E1A301C303030A0FE31FE32FE58FE63FF0D", - Ps: "0028005B007B0F3A0F3C169B201A201E2045207D208D23292768276A276C276E27702772277427C527E627E827EA27EC27EE2983298529872989298B298D298F299129932995299729D829DA29FC2E222E242E262E283008300A300C300E3010301430163018301A301DFD3EFE17FE35FE37FE39FE3BFE3DFE3FFE41FE43FE47FE59FE5BFE5DFF08FF3BFF5BFF5FFF62", - Pe: "0029005D007D0F3B0F3D169C2046207E208E232A2769276B276D276F27712773277527C627E727E927EB27ED27EF298429862988298A298C298E2990299229942996299829D929DB29FD2E232E252E272E293009300B300D300F3011301530173019301B301E301FFD3FFE18FE36FE38FE3AFE3CFE3EFE40FE42FE44FE48FE5AFE5CFE5EFF09FF3DFF5DFF60FF63", - Pi: "00AB2018201B201C201F20392E022E042E092E0C2E1C2E20", - Pf: "00BB2019201D203A2E032E052E0A2E0D2E1D2E21", - Pc: "005F203F20402054FE33FE34FE4D-FE4FFF3F", - Po: "0021-00230025-0027002A002C002E002F003A003B003F0040005C00A100B700BF037E0387055A-055F058905C005C305C605F305F40609060A060C060D061B061E061F066A-066D06D40700-070D07F7-07F90830-083E0964096509700DF40E4F0E5A0E5B0F04-0F120F850FD0-0FD4104A-104F10FB1361-1368166D166E16EB-16ED1735173617D4-17D617D8-17DA1800-18051807-180A1944194519DE19DF1A1E1A1F1AA0-1AA61AA8-1AAD1B5A-1B601C3B-1C3F1C7E1C7F1CD3201620172020-20272030-2038203B-203E2041-20432047-205120532055-205E2CF9-2CFC2CFE2CFF2E002E012E06-2E082E0B2E0E-2E162E182E192E1B2E1E2E1F2E2A-2E2E2E302E313001-3003303D30FBA4FEA4FFA60D-A60FA673A67EA6F2-A6F7A874-A877A8CEA8CFA8F8-A8FAA92EA92FA95FA9C1-A9CDA9DEA9DFAA5C-AA5FAADEAADFABEBFE10-FE16FE19FE30FE45FE46FE49-FE4CFE50-FE52FE54-FE57FE5F-FE61FE68FE6AFE6BFF01-FF03FF05-FF07FF0AFF0CFF0EFF0FFF1AFF1BFF1FFF20FF3CFF61FF64FF65", - S: "0024002B003C-003E005E0060007C007E00A2-00A900AC00AE-00B100B400B600B800D700F702C2-02C502D2-02DF02E5-02EB02ED02EF-02FF03750384038503F604820606-0608060B060E060F06E906FD06FE07F609F209F309FA09FB0AF10B700BF3-0BFA0C7F0CF10CF20D790E3F0F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-139917DB194019E0-19FF1B61-1B6A1B74-1B7C1FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE20442052207A-207C208A-208C20A0-20B8210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B2140-2144214A-214D214F2190-2328232B-23E82400-24262440-244A249C-24E92500-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE27C0-27C427C7-27CA27CC27D0-27E527F0-29822999-29D729DC-29FB29FE-2B4C2B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F309B309C319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A700-A716A720A721A789A78AA828-A82BA836-A839AA77-AA79FB29FDFCFDFDFE62FE64-FE66FE69FF04FF0BFF1C-FF1EFF3EFF40FF5CFF5EFFE0-FFE6FFE8-FFEEFFFCFFFD", - Sm: "002B003C-003E007C007E00AC00B100D700F703F60606-060820442052207A-207C208A-208C2140-2144214B2190-2194219A219B21A021A321A621AE21CE21CF21D221D421F4-22FF2308-230B23202321237C239B-23B323DC-23E125B725C125F8-25FF266F27C0-27C427C7-27CA27CC27D0-27E527F0-27FF2900-29822999-29D729DC-29FB29FE-2AFF2B30-2B442B47-2B4CFB29FE62FE64-FE66FF0BFF1C-FF1EFF5CFF5EFFE2FFE9-FFEC", - Sc: "002400A2-00A5060B09F209F309FB0AF10BF90E3F17DB20A0-20B8A838FDFCFE69FF04FFE0FFE1FFE5FFE6", - Sk: "005E006000A800AF00B400B802C2-02C502D2-02DF02E5-02EB02ED02EF-02FF0375038403851FBD1FBF-1FC11FCD-1FCF1FDD-1FDF1FED-1FEF1FFD1FFE309B309CA700-A716A720A721A789A78AFF3EFF40FFE3", - So: "00A600A700A900AE00B000B60482060E060F06E906FD06FE07F609FA0B700BF3-0BF80BFA0C7F0CF10CF20D790F01-0F030F13-0F170F1A-0F1F0F340F360F380FBE-0FC50FC7-0FCC0FCE0FCF0FD5-0FD8109E109F13601390-1399194019E0-19FF1B61-1B6A1B74-1B7C210021012103-21062108210921142116-2118211E-2123212521272129212E213A213B214A214C214D214F2195-2199219C-219F21A121A221A421A521A7-21AD21AF-21CD21D021D121D321D5-21F32300-2307230C-231F2322-2328232B-237B237D-239A23B4-23DB23E2-23E82400-24262440-244A249C-24E92500-25B625B8-25C025C2-25F72600-266E2670-26CD26CF-26E126E326E8-26FF2701-27042706-2709270C-27272729-274B274D274F-27522756-275E2761-276727942798-27AF27B1-27BE2800-28FF2B00-2B2F2B452B462B50-2B592CE5-2CEA2E80-2E992E9B-2EF32F00-2FD52FF0-2FFB300430123013302030363037303E303F319031913196-319F31C0-31E33200-321E322A-32503260-327F328A-32B032C0-32FE3300-33FF4DC0-4DFFA490-A4C6A828-A82BA836A837A839AA77-AA79FDFDFFE4FFE8FFEDFFEEFFFCFFFD", - Z: "002000A01680180E2000-200A20282029202F205F3000", - Zs: "002000A01680180E2000-200A202F205F3000", - Zl: "2028", - Zp: "2029", - C: "0000-001F007F-009F00AD03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-0605061C061D0620065F06DD070E070F074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17B417B517DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF200B-200F202A-202E2060-206F20722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-F8FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFD-FF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFFBFFFEFFFF", - Cc: "0000-001F007F-009F", - Cf: "00AD0600-060306DD070F17B417B5200B-200F202A-202E2060-2064206A-206FFEFFFFF9-FFFB", - Co: "E000-F8FF", - Cs: "D800-DFFF", - Cn: "03780379037F-0383038B038D03A20526-05300557055805600588058B-059005C8-05CF05EB-05EF05F5-05FF06040605061C061D0620065F070E074B074C07B2-07BF07FB-07FF082E082F083F-08FF093A093B094F095609570973-097809800984098D098E0991099209A909B109B3-09B509BA09BB09C509C609C909CA09CF-09D609D8-09DB09DE09E409E509FC-0A000A040A0B-0A0E0A110A120A290A310A340A370A3A0A3B0A3D0A43-0A460A490A4A0A4E-0A500A52-0A580A5D0A5F-0A650A76-0A800A840A8E0A920AA90AB10AB40ABA0ABB0AC60ACA0ACE0ACF0AD1-0ADF0AE40AE50AF00AF2-0B000B040B0D0B0E0B110B120B290B310B340B3A0B3B0B450B460B490B4A0B4E-0B550B58-0B5B0B5E0B640B650B72-0B810B840B8B-0B8D0B910B96-0B980B9B0B9D0BA0-0BA20BA5-0BA70BAB-0BAD0BBA-0BBD0BC3-0BC50BC90BCE0BCF0BD1-0BD60BD8-0BE50BFB-0C000C040C0D0C110C290C340C3A-0C3C0C450C490C4E-0C540C570C5A-0C5F0C640C650C70-0C770C800C810C840C8D0C910CA90CB40CBA0CBB0CC50CC90CCE-0CD40CD7-0CDD0CDF0CE40CE50CF00CF3-0D010D040D0D0D110D290D3A-0D3C0D450D490D4E-0D560D58-0D5F0D640D650D76-0D780D800D810D840D97-0D990DB20DBC0DBE0DBF0DC7-0DC90DCB-0DCE0DD50DD70DE0-0DF10DF5-0E000E3B-0E3E0E5C-0E800E830E850E860E890E8B0E8C0E8E-0E930E980EA00EA40EA60EA80EA90EAC0EBA0EBE0EBF0EC50EC70ECE0ECF0EDA0EDB0EDE-0EFF0F480F6D-0F700F8C-0F8F0F980FBD0FCD0FD9-0FFF10C6-10CF10FD-10FF1249124E124F12571259125E125F1289128E128F12B112B612B712BF12C112C612C712D7131113161317135B-135E137D-137F139A-139F13F5-13FF169D-169F16F1-16FF170D1715-171F1737-173F1754-175F176D17711774-177F17DE17DF17EA-17EF17FA-17FF180F181A-181F1878-187F18AB-18AF18F6-18FF191D-191F192C-192F193C-193F1941-1943196E196F1975-197F19AC-19AF19CA-19CF19DB-19DD1A1C1A1D1A5F1A7D1A7E1A8A-1A8F1A9A-1A9F1AAE-1AFF1B4C-1B4F1B7D-1B7F1BAB-1BAD1BBA-1BFF1C38-1C3A1C4A-1C4C1C80-1CCF1CF3-1CFF1DE7-1DFC1F161F171F1E1F1F1F461F471F4E1F4F1F581F5A1F5C1F5E1F7E1F7F1FB51FC51FD41FD51FDC1FF01FF11FF51FFF2065-206920722073208F2095-209F20B9-20CF20F1-20FF218A-218F23E9-23FF2427-243F244B-245F26CE26E226E4-26E727002705270A270B2728274C274E2753-2755275F27602795-279727B027BF27CB27CD-27CF2B4D-2B4F2B5A-2BFF2C2F2C5F2CF2-2CF82D26-2D2F2D66-2D6E2D70-2D7F2D97-2D9F2DA72DAF2DB72DBF2DC72DCF2DD72DDF2E32-2E7F2E9A2EF4-2EFF2FD6-2FEF2FFC-2FFF3040309730983100-3104312E-3130318F31B8-31BF31E4-31EF321F32FF4DB6-4DBF9FCC-9FFFA48D-A48FA4C7-A4CFA62C-A63FA660A661A674-A67BA698-A69FA6F8-A6FFA78D-A7FAA82C-A82FA83A-A83FA878-A87FA8C5-A8CDA8DA-A8DFA8FC-A8FFA954-A95EA97D-A97FA9CEA9DA-A9DDA9E0-A9FFAA37-AA3FAA4EAA4FAA5AAA5BAA7C-AA7FAAC3-AADAAAE0-ABBFABEEABEFABFA-ABFFD7A4-D7AFD7C7-D7CAD7FC-D7FFFA2EFA2FFA6EFA6FFADA-FAFFFB07-FB12FB18-FB1CFB37FB3DFB3FFB42FB45FBB2-FBD2FD40-FD4FFD90FD91FDC8-FDEFFDFEFDFFFE1A-FE1FFE27-FE2FFE53FE67FE6C-FE6FFE75FEFDFEFEFF00FFBF-FFC1FFC8FFC9FFD0FFD1FFD8FFD9FFDD-FFDFFFE7FFEF-FFF8FFFEFFFF" -}); - -function addUnicodePackage (pack) { - var codePoint = /\w{4}/g; - for (var name in pack) - exports.packages[name] = pack[name].replace(codePoint, "\\u$&"); -} - -}); - -ace.define("ace/token_iterator",["require","exports","module"], function(require, exports, module) { -"use strict"; -var TokenIterator = function(session, initialRow, initialColumn) { - this.$session = session; - this.$row = initialRow; - this.$rowTokens = session.getTokens(initialRow); - - var token = session.getTokenAt(initialRow, initialColumn); - this.$tokenIndex = token ? token.index : -1; -}; - -(function() { - this.stepBackward = function() { - this.$tokenIndex -= 1; - - while (this.$tokenIndex < 0) { - this.$row -= 1; - if (this.$row < 0) { - this.$row = 0; - return null; - } - - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = this.$rowTokens.length - 1; - } - - return this.$rowTokens[this.$tokenIndex]; - }; - this.stepForward = function() { - this.$tokenIndex += 1; - var rowCount; - while (this.$tokenIndex >= this.$rowTokens.length) { - this.$row += 1; - if (!rowCount) - rowCount = this.$session.getLength(); - if (this.$row >= rowCount) { - this.$row = rowCount - 1; - return null; - } - - this.$rowTokens = this.$session.getTokens(this.$row); - this.$tokenIndex = 0; - } - - return this.$rowTokens[this.$tokenIndex]; - }; - this.getCurrentToken = function () { - return this.$rowTokens[this.$tokenIndex]; - }; - this.getCurrentTokenRow = function () { - return this.$row; - }; - this.getCurrentTokenColumn = function() { - var rowTokens = this.$rowTokens; - var tokenIndex = this.$tokenIndex; - var column = rowTokens[tokenIndex].start; - if (column !== undefined) - return column; - - column = 0; - while (tokenIndex > 0) { - tokenIndex -= 1; - column += rowTokens[tokenIndex].value.length; - } - - return column; - }; - this.getCurrentTokenPosition = function() { - return {row: this.$row, column: this.getCurrentTokenColumn()}; - }; - -}).call(TokenIterator.prototype); - -exports.TokenIterator = TokenIterator; -}); - -ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"], function(require, exports, module) { -"use strict"; - -var Tokenizer = require("../tokenizer").Tokenizer; -var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules; -var Behaviour = require("./behaviour").Behaviour; -var unicode = require("../unicode"); -var lang = require("../lib/lang"); -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; - -var Mode = function() { - this.HighlightRules = TextHighlightRules; - this.$behaviour = new Behaviour(); -}; - -(function() { - - this.tokenRe = new RegExp("^[" - + unicode.packages.L - + unicode.packages.Mn + unicode.packages.Mc - + unicode.packages.Nd - + unicode.packages.Pc + "\\$_]+", "g" - ); - - this.nonTokenRe = new RegExp("^(?:[^" - + unicode.packages.L - + unicode.packages.Mn + unicode.packages.Mc - + unicode.packages.Nd - + unicode.packages.Pc + "\\$_]|\\s])+", "g" - ); - - this.getTokenizer = function() { - if (!this.$tokenizer) { - this.$highlightRules = this.$highlightRules || new this.HighlightRules(); - this.$tokenizer = new Tokenizer(this.$highlightRules.getRules()); - } - return this.$tokenizer; - }; - - this.lineCommentStart = ""; - this.blockComment = ""; - - this.toggleCommentLines = function(state, session, startRow, endRow) { - var doc = session.doc; - - var ignoreBlankLines = true; - var shouldRemove = true; - var minIndent = Infinity; - var tabSize = session.getTabSize(); - var insertAtTabStop = false; - - if (!this.lineCommentStart) { - if (!this.blockComment) - return false; - var lineCommentStart = this.blockComment.start; - var lineCommentEnd = this.blockComment.end; - var regexpStart = new RegExp("^(\\s*)(?:" + lang.escapeRegExp(lineCommentStart) + ")"); - var regexpEnd = new RegExp("(?:" + lang.escapeRegExp(lineCommentEnd) + ")\\s*$"); - - var comment = function(line, i) { - if (testRemove(line, i)) - return; - if (!ignoreBlankLines || /\S/.test(line)) { - doc.insertInLine({row: i, column: line.length}, lineCommentEnd); - doc.insertInLine({row: i, column: minIndent}, lineCommentStart); - } - }; - - var uncomment = function(line, i) { - var m; - if (m = line.match(regexpEnd)) - doc.removeInLine(i, line.length - m[0].length, line.length); - if (m = line.match(regexpStart)) - doc.removeInLine(i, m[1].length, m[0].length); - }; - - var testRemove = function(line, row) { - if (regexpStart.test(line)) - return true; - var tokens = session.getTokens(row); - for (var i = 0; i < tokens.length; i++) { - if (tokens[i].type === "comment") - return true; - } - }; - } else { - if (Array.isArray(this.lineCommentStart)) { - var regexpStart = this.lineCommentStart.map(lang.escapeRegExp).join("|"); - var lineCommentStart = this.lineCommentStart[0]; - } else { - var regexpStart = lang.escapeRegExp(this.lineCommentStart); - var lineCommentStart = this.lineCommentStart; - } - regexpStart = new RegExp("^(\\s*)(?:" + regexpStart + ") ?"); - - insertAtTabStop = session.getUseSoftTabs(); - - var uncomment = function(line, i) { - var m = line.match(regexpStart); - if (!m) return; - var start = m[1].length, end = m[0].length; - if (!shouldInsertSpace(line, start, end) && m[0][end - 1] == " ") - end--; - doc.removeInLine(i, start, end); - }; - var commentWithSpace = lineCommentStart + " "; - var comment = function(line, i) { - if (!ignoreBlankLines || /\S/.test(line)) { - if (shouldInsertSpace(line, minIndent, minIndent)) - doc.insertInLine({row: i, column: minIndent}, commentWithSpace); - else - doc.insertInLine({row: i, column: minIndent}, lineCommentStart); - } - }; - var testRemove = function(line, i) { - return regexpStart.test(line); - }; - - var shouldInsertSpace = function(line, before, after) { - var spaces = 0; - while (before-- && line.charAt(before) == " ") - spaces++; - if (spaces % tabSize != 0) - return false; - var spaces = 0; - while (line.charAt(after++) == " ") - spaces++; - if (tabSize > 2) - return spaces % tabSize != tabSize - 1; - else - return spaces % tabSize == 0; - return true; - }; - } - - function iter(fun) { - for (var i = startRow; i <= endRow; i++) - fun(doc.getLine(i), i); - } - - - var minEmptyLength = Infinity; - iter(function(line, i) { - var indent = line.search(/\S/); - if (indent !== -1) { - if (indent < minIndent) - minIndent = indent; - if (shouldRemove && !testRemove(line, i)) - shouldRemove = false; - } else if (minEmptyLength > line.length) { - minEmptyLength = line.length; - } - }); - - if (minIndent == Infinity) { - minIndent = minEmptyLength; - ignoreBlankLines = false; - shouldRemove = false; - } - - if (insertAtTabStop && minIndent % tabSize != 0) - minIndent = Math.floor(minIndent / tabSize) * tabSize; - - iter(shouldRemove ? uncomment : comment); - }; - - this.toggleBlockComment = function(state, session, range, cursor) { - var comment = this.blockComment; - if (!comment) - return; - if (!comment.start && comment[0]) - comment = comment[0]; - - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - - var sel = session.selection; - var initialRange = session.selection.toOrientedRange(); - var startRow, colDiff; - - if (token && /comment/.test(token.type)) { - var startRange, endRange; - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.start); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - startRange = new Range(row, column, row, column + comment.start.length); - break; - } - token = iterator.stepBackward(); - } - - var iterator = new TokenIterator(session, cursor.row, cursor.column); - var token = iterator.getCurrentToken(); - while (token && /comment/.test(token.type)) { - var i = token.value.indexOf(comment.end); - if (i != -1) { - var row = iterator.getCurrentTokenRow(); - var column = iterator.getCurrentTokenColumn() + i; - endRange = new Range(row, column, row, column + comment.end.length); - break; - } - token = iterator.stepForward(); - } - if (endRange) - session.remove(endRange); - if (startRange) { - session.remove(startRange); - startRow = startRange.start.row; - colDiff = -comment.start.length; - } - } else { - colDiff = comment.start.length; - startRow = range.start.row; - session.insert(range.end, comment.end); - session.insert(range.start, comment.start); - } - if (initialRange.start.row == startRow) - initialRange.start.column += colDiff; - if (initialRange.end.row == startRow) - initialRange.end.column += colDiff; - session.selection.fromOrientedRange(initialRange); - }; - - this.getNextLineIndent = function(state, line, tab) { - return this.$getIndent(line); - }; - - this.checkOutdent = function(state, line, input) { - return false; - }; - - this.autoOutdent = function(state, doc, row) { - }; - - this.$getIndent = function(line) { - return line.match(/^\s*/)[0]; - }; - - this.createWorker = function(session) { - return null; - }; - - this.createModeDelegates = function (mapping) { - this.$embeds = []; - this.$modes = {}; - for (var i in mapping) { - if (mapping[i]) { - this.$embeds.push(i); - this.$modes[i] = new mapping[i](); - } - } - - var delegations = ["toggleBlockComment", "toggleCommentLines", "getNextLineIndent", - "checkOutdent", "autoOutdent", "transformAction", "getCompletions"]; - - for (var i = 0; i < delegations.length; i++) { - (function(scope) { - var functionName = delegations[i]; - var defaultHandler = scope[functionName]; - scope[delegations[i]] = function() { - return this.$delegator(functionName, arguments, defaultHandler); - }; - }(this)); - } - }; - - this.$delegator = function(method, args, defaultHandler) { - var state = args[0]; - if (typeof state != "string") - state = state[0]; - for (var i = 0; i < this.$embeds.length; i++) { - if (!this.$modes[this.$embeds[i]]) continue; - - var split = state.split(this.$embeds[i]); - if (!split[0] && split[1]) { - args[0] = split[1]; - var mode = this.$modes[this.$embeds[i]]; - return mode[method].apply(mode, args); - } - } - var ret = defaultHandler.apply(this, args); - return defaultHandler ? ret : undefined; - }; - - this.transformAction = function(state, action, editor, session, param) { - if (this.$behaviour) { - var behaviours = this.$behaviour.getBehaviours(); - for (var key in behaviours) { - if (behaviours[key][action]) { - var ret = behaviours[key][action].apply(this, arguments); - if (ret) { - return ret; - } - } - } - } - }; - - this.getKeywords = function(append) { - if (!this.completionKeywords) { - var rules = this.$tokenizer.rules; - var completionKeywords = []; - for (var rule in rules) { - var ruleItr = rules[rule]; - for (var r = 0, l = ruleItr.length; r < l; r++) { - if (typeof ruleItr[r].token === "string") { - if (/keyword|support|storage/.test(ruleItr[r].token)) - completionKeywords.push(ruleItr[r].regex); - } - else if (typeof ruleItr[r].token === "object") { - for (var a = 0, aLength = ruleItr[r].token.length; a < aLength; a++) { - if (/keyword|support|storage/.test(ruleItr[r].token[a])) { - var rule = ruleItr[r].regex.match(/\(.+?\)/g)[a]; - completionKeywords.push(rule.substr(1, rule.length - 2)); - } - } - } - } - } - this.completionKeywords = completionKeywords; - } - if (!append) - return this.$keywordList; - return completionKeywords.concat(this.$keywordList || []); - }; - - this.$createKeywordList = function() { - if (!this.$highlightRules) - this.getTokenizer(); - return this.$keywordList = this.$highlightRules.$keywordList || []; - }; - - this.getCompletions = function(state, session, pos, prefix) { - var keywords = this.$keywordList || this.$createKeywordList(); - return keywords.map(function(word) { - return { - name: word, - value: word, - score: 0, - meta: "keyword" - }; - }); - }; - - this.$id = "ace/mode/text"; -}).call(Mode.prototype); - -exports.Mode = Mode; -}); - -ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { -"use strict"; - -function throwDeltaError(delta, errorText){ - console.log("Invalid Delta:", delta); - throw "Invalid Delta: " + errorText; -} - -function positionInDocument(docLines, position) { - return position.row >= 0 && position.row < docLines.length && - position.column >= 0 && position.column <= docLines[position.row].length; -} - -function validateDelta(docLines, delta) { - if (delta.action != "insert" && delta.action != "remove") - throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); - if (!(delta.lines instanceof Array)) - throwDeltaError(delta, "delta.lines must be an Array"); - if (!delta.start || !delta.end) - throwDeltaError(delta, "delta.start/end must be an present"); - var start = delta.start; - if (!positionInDocument(docLines, delta.start)) - throwDeltaError(delta, "delta.start must be contained in document"); - var end = delta.end; - if (delta.action == "remove" && !positionInDocument(docLines, end)) - throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); - var numRangeRows = end.row - start.row; - var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); - if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) - throwDeltaError(delta, "delta.range must match delta lines"); -} - -exports.applyDelta = function(docLines, delta, doNotValidate) { - - var row = delta.start.row; - var startColumn = delta.start.column; - var line = docLines[row] || ""; - switch (delta.action) { - case "insert": - var lines = delta.lines; - if (lines.length === 1) { - docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); - } else { - var args = [row, 1].concat(delta.lines); - docLines.splice.apply(docLines, args); - docLines[row] = line.substring(0, startColumn) + docLines[row]; - docLines[row + delta.lines.length - 1] += line.substring(startColumn); - } - break; - case "remove": - var endColumn = delta.end.column; - var endRow = delta.end.row; - if (row === endRow) { - docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); - } else { - docLines.splice( - row, endRow - row + 1, - line.substring(0, startColumn) + docLines[endRow].substring(endColumn) - ); - } - break; - } -} -}); - -ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; - -var Anchor = exports.Anchor = function(doc, row, column) { - this.$onChange = this.onChange.bind(this); - this.attach(doc); - - if (typeof column == "undefined") - this.setPosition(row.row, row.column); - else - this.setPosition(row, column); -}; - -(function() { - - oop.implement(this, EventEmitter); - this.getPosition = function() { - return this.$clipPositionToDocument(this.row, this.column); - }; - this.getDocument = function() { - return this.document; - }; - this.$insertRight = false; - this.onChange = function(delta) { - if (delta.start.row == delta.end.row && delta.start.row != this.row) - return; - - if (delta.start.row > this.row) - return; - - var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); - this.setPosition(point.row, point.column, true); - }; - - function $pointsInOrder(point1, point2, equalPointsInOrder) { - var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; - return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); - } - - function $getTransformedPoint(delta, point, moveIfEqual) { - var deltaIsInsert = delta.action == "insert"; - var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); - var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); - var deltaStart = delta.start; - var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. - if ($pointsInOrder(point, deltaStart, moveIfEqual)) { - return { - row: point.row, - column: point.column - }; - } - if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { - return { - row: point.row + deltaRowShift, - column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) - }; - } - - return { - row: deltaStart.row, - column: deltaStart.column - }; - } - this.setPosition = function(row, column, noClip) { - var pos; - if (noClip) { - pos = { - row: row, - column: column - }; - } else { - pos = this.$clipPositionToDocument(row, column); - } - - if (this.row == pos.row && this.column == pos.column) - return; - - var old = { - row: this.row, - column: this.column - }; - - this.row = pos.row; - this.column = pos.column; - this._signal("change", { - old: old, - value: pos - }); - }; - this.detach = function() { - this.document.removeEventListener("change", this.$onChange); - }; - this.attach = function(doc) { - this.document = doc || this.document; - this.document.on("change", this.$onChange); - }; - this.$clipPositionToDocument = function(row, column) { - var pos = {}; - - if (row >= this.document.getLength()) { - pos.row = Math.max(0, this.document.getLength() - 1); - pos.column = this.document.getLine(pos.row).length; - } - else if (row < 0) { - pos.row = 0; - pos.column = 0; - } - else { - pos.row = row; - pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); - } - - if (column < 0) - pos.column = 0; - - return pos; - }; - -}).call(Anchor.prototype); - -}); - -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var applyDelta = require("./apply_delta").applyDelta; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Anchor = require("./anchor").Anchor; - -var Document = function(textOrLines) { - this.$lines = [""]; - if (textOrLines.length === 0) { - this.$lines = [""]; - } else if (Array.isArray(textOrLines)) { - this.insertMergedLines({row: 0, column: 0}, textOrLines); - } else { - this.insert({row: 0, column:0}, textOrLines); - } -}; - -(function() { - - oop.implement(this, EventEmitter); - this.setValue = function(text) { - var len = this.getLength() - 1; - this.remove(new Range(0, 0, len, this.getLine(len).length)); - this.insert({row: 0, column: 0}, text); - }; - this.getValue = function() { - return this.getAllLines().join(this.getNewLineCharacter()); - }; - this.createAnchor = function(row, column) { - return new Anchor(this, row, column); - }; - if ("aaa".split(/a/).length === 0) { - this.$split = function(text) { - return text.replace(/\r\n|\r/g, "\n").split("\n"); - }; - } else { - this.$split = function(text) { - return text.split(/\r\n|\r|\n/); - }; - } - - - this.$detectNewLine = function(text) { - var match = text.match(/^.*?(\r\n|\r|\n)/m); - this.$autoNewLine = match ? match[1] : "\n"; - this._signal("changeNewLineMode"); - }; - this.getNewLineCharacter = function() { - switch (this.$newLineMode) { - case "windows": - return "\r\n"; - case "unix": - return "\n"; - default: - return this.$autoNewLine || "\n"; - } - }; - - this.$autoNewLine = ""; - this.$newLineMode = "auto"; - this.setNewLineMode = function(newLineMode) { - if (this.$newLineMode === newLineMode) - return; - - this.$newLineMode = newLineMode; - this._signal("changeNewLineMode"); - }; - this.getNewLineMode = function() { - return this.$newLineMode; - }; - this.isNewLine = function(text) { - return (text == "\r\n" || text == "\r" || text == "\n"); - }; - this.getLine = function(row) { - return this.$lines[row] || ""; - }; - this.getLines = function(firstRow, lastRow) { - return this.$lines.slice(firstRow, lastRow + 1); - }; - this.getAllLines = function() { - return this.getLines(0, this.getLength()); - }; - this.getLength = function() { - return this.$lines.length; - }; - this.getTextRange = function(range) { - return this.getLinesForRange(range).join(this.getNewLineCharacter()); - }; - this.getLinesForRange = function(range) { - var lines; - if (range.start.row === range.end.row) { - lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; - } else { - lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - } - return lines; - }; - this.insertLines = function(row, lines) { - console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); - return this.insertFullLines(row, lines); - }; - this.removeLines = function(firstRow, lastRow) { - console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); - return this.removeFullLines(firstRow, lastRow); - }; - this.insertNewLine = function(position) { - console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); - return this.insertMergedLines(position, ["", ""]); - }; - this.insert = function(position, text) { - if (this.getLength() <= 1) - this.$detectNewLine(text); - - return this.insertMergedLines(position, this.$split(text)); - }; - this.insertInLine = function(position, text) { - var start = this.clippedPos(position.row, position.column); - var end = this.pos(position.row, position.column + text.length); - - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: [text] - }, true); - - return this.clonePos(end); - }; - - this.clippedPos = function(row, column) { - var length = this.getLength(); - if (row === undefined) { - row = length; - } else if (row < 0) { - row = 0; - } else if (row >= length) { - row = length - 1; - column = undefined; - } - var line = this.getLine(row); - if (column == undefined) - column = line.length; - column = Math.min(Math.max(column, 0), line.length); - return {row: row, column: column}; - }; - - this.clonePos = function(pos) { - return {row: pos.row, column: pos.column}; - }; - - this.pos = function(row, column) { - return {row: row, column: column}; - }; - - this.$clipPosition = function(position) { - var length = this.getLength(); - if (position.row >= length) { - position.row = Math.max(0, length - 1); - position.column = this.getLine(length - 1).length; - } else { - position.row = Math.max(0, position.row); - position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); - } - return position; - }; - this.insertFullLines = function(row, lines) { - row = Math.min(Math.max(row, 0), this.getLength()); - var column = 0; - if (row < this.getLength()) { - lines = lines.concat([""]); - column = 0; - } else { - lines = [""].concat(lines); - row--; - column = this.$lines[row].length; - } - this.insertMergedLines({row: row, column: column}, lines); - }; - this.insertMergedLines = function(position, lines) { - var start = this.clippedPos(position.row, position.column); - var end = { - row: start.row + lines.length - 1, - column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length - }; - - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: lines - }); - - return this.clonePos(end); - }; - this.remove = function(range) { - var start = this.clippedPos(range.start.row, range.start.column); - var end = this.clippedPos(range.end.row, range.end.column); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({start: start, end: end}) - }); - return this.clonePos(start); - }; - this.removeInLine = function(row, startColumn, endColumn) { - var start = this.clippedPos(row, startColumn); - var end = this.clippedPos(row, endColumn); - - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({start: start, end: end}) - }, true); - - return this.clonePos(start); - }; - this.removeFullLines = function(firstRow, lastRow) { - firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); - lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); - var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; - var deleteLastNewLine = lastRow < this.getLength() - 1; - var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); - var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); - var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); - var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); - var range = new Range(startRow, startCol, endRow, endCol); - var deletedLines = this.$lines.slice(firstRow, lastRow + 1); - - this.applyDelta({ - start: range.start, - end: range.end, - action: "remove", - lines: this.getLinesForRange(range) - }); - return deletedLines; - }; - this.removeNewLine = function(row) { - if (row < this.getLength() - 1 && row >= 0) { - this.applyDelta({ - start: this.pos(row, this.getLine(row).length), - end: this.pos(row + 1, 0), - action: "remove", - lines: ["", ""] - }); - } - }; - this.replace = function(range, text) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - if (text.length === 0 && range.isEmpty()) - return range.start; - if (text == this.getTextRange(range)) - return range.end; - - this.remove(range); - var end; - if (text) { - end = this.insert(range.start, text); - } - else { - end = range.start; - } - - return end; - }; - this.applyDeltas = function(deltas) { - for (var i=0; i=0; i--) { - this.revertDelta(deltas[i]); - } - }; - this.applyDelta = function(delta, doNotValidate) { - var isInsert = delta.action == "insert"; - if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] - : !Range.comparePoints(delta.start, delta.end)) { - return; - } - - if (isInsert && delta.lines.length > 20000) - this.$splitAndapplyLargeDelta(delta, 20000); - applyDelta(this.$lines, delta, doNotValidate); - this._signal("change", delta); - }; - - this.$splitAndapplyLargeDelta = function(delta, MAX) { - var lines = delta.lines; - var l = lines.length; - var row = delta.start.row; - var column = delta.start.column; - var from = 0, to = 0; - do { - from = to; - to += MAX - 1; - var chunk = lines.slice(from, to); - if (to > l) { - delta.lines = chunk; - delta.start.row = row + from; - delta.start.column = column; - break; - } - chunk.push(""); - this.applyDelta({ - start: this.pos(row + from, column), - end: this.pos(row + to, column = 0), - action: delta.action, - lines: chunk - }, true); - } while(true); - }; - this.revertDelta = function(delta) { - this.applyDelta({ - start: this.clonePos(delta.start), - end: this.clonePos(delta.end), - action: (delta.action == "insert" ? "remove" : "insert"), - lines: delta.lines.slice() - }); - }; - this.indexToPosition = function(index, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - for (var i = startRow || 0, l = lines.length; i < l; i++) { - index -= lines[i].length + newlineLength; - if (index < 0) - return {row: i, column: index + lines[i].length + newlineLength}; - } - return {row: l-1, column: lines[l-1].length}; - }; - this.positionToIndex = function(pos, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - var index = 0; - var row = Math.min(pos.row, lines.length); - for (var i = startRow || 0; i < row; ++i) - index += lines[i].length + newlineLength; - - return index + pos.column; - }; - -}).call(Document.prototype); - -exports.Document = Document; -}); - -ace.define("ace/background_tokenizer",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; - -var BackgroundTokenizer = function(tokenizer, editor) { - this.running = false; - this.lines = []; - this.states = []; - this.currentLine = 0; - this.tokenizer = tokenizer; - - var self = this; - - this.$worker = function() { - if (!self.running) { return; } - - var workerStart = new Date(); - var currentLine = self.currentLine; - var endLine = -1; - var doc = self.doc; - - var startLine = currentLine; - while (self.lines[currentLine]) - currentLine++; - - var len = doc.getLength(); - var processedLines = 0; - self.running = false; - while (currentLine < len) { - self.$tokenizeRow(currentLine); - endLine = currentLine; - do { - currentLine++; - } while (self.lines[currentLine]); - processedLines ++; - if ((processedLines % 5 === 0) && (new Date() - workerStart) > 20) { - self.running = setTimeout(self.$worker, 20); - break; - } - } - self.currentLine = currentLine; - - if (startLine <= endLine) - self.fireUpdateEvent(startLine, endLine); - }; -}; - -(function(){ - - oop.implement(this, EventEmitter); - this.setTokenizer = function(tokenizer) { - this.tokenizer = tokenizer; - this.lines = []; - this.states = []; - - this.start(0); - }; - this.setDocument = function(doc) { - this.doc = doc; - this.lines = []; - this.states = []; - - this.stop(); - }; - this.fireUpdateEvent = function(firstRow, lastRow) { - var data = { - first: firstRow, - last: lastRow - }; - this._signal("update", {data: data}); - }; - this.start = function(startRow) { - this.currentLine = Math.min(startRow || 0, this.currentLine, this.doc.getLength()); - this.lines.splice(this.currentLine, this.lines.length); - this.states.splice(this.currentLine, this.states.length); - - this.stop(); - this.running = setTimeout(this.$worker, 700); - }; - - this.scheduleStart = function() { - if (!this.running) - this.running = setTimeout(this.$worker, 700); - } - - this.$updateOnChange = function(delta) { - var startRow = delta.start.row; - var len = delta.end.row - startRow; - - if (len === 0) { - this.lines[startRow] = null; - } else if (delta.action == "remove") { - this.lines.splice(startRow, len + 1, null); - this.states.splice(startRow, len + 1, null); - } else { - var args = Array(len + 1); - args.unshift(startRow, 1); - this.lines.splice.apply(this.lines, args); - this.states.splice.apply(this.states, args); - } - - this.currentLine = Math.min(startRow, this.currentLine, this.doc.getLength()); - - this.stop(); - }; - this.stop = function() { - if (this.running) - clearTimeout(this.running); - this.running = false; - }; - this.getTokens = function(row) { - return this.lines[row] || this.$tokenizeRow(row); - }; - this.getState = function(row) { - if (this.currentLine == row) - this.$tokenizeRow(row); - return this.states[row] || "start"; - }; - - this.$tokenizeRow = function(row) { - var line = this.doc.getLine(row); - var state = this.states[row - 1]; - - var data = this.tokenizer.getLineTokens(line, state, row); - - if (this.states[row] + "" !== data.state + "") { - this.states[row] = data.state; - this.lines[row + 1] = null; - if (this.currentLine > row + 1) - this.currentLine = row + 1; - } else if (this.currentLine == row) { - this.currentLine = row + 1; - } - - return this.lines[row] = data.tokens; - }; - -}).call(BackgroundTokenizer.prototype); - -exports.BackgroundTokenizer = BackgroundTokenizer; -}); - -ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { -"use strict"; - -var lang = require("./lib/lang"); -var oop = require("./lib/oop"); -var Range = require("./range").Range; - -var SearchHighlight = function(regExp, clazz, type) { - this.setRegexp(regExp); - this.clazz = clazz; - this.type = type || "text"; -}; - -(function() { - this.MAX_RANGES = 500; - - this.setRegexp = function(regExp) { - if (this.regExp+"" == regExp+"") - return; - this.regExp = regExp; - this.cache = []; - }; - - this.update = function(html, markerLayer, session, config) { - if (!this.regExp) - return; - var start = config.firstRow, end = config.lastRow; - - for (var i = start; i <= end; i++) { - var ranges = this.cache[i]; - if (ranges == null) { - ranges = lang.getMatchOffsets(session.getLine(i), this.regExp); - if (ranges.length > this.MAX_RANGES) - ranges = ranges.slice(0, this.MAX_RANGES); - ranges = ranges.map(function(match) { - return new Range(i, match.offset, i, match.offset + match.length); - }); - this.cache[i] = ranges.length ? ranges : ""; - } - - for (var j = ranges.length; j --; ) { - markerLayer.drawSingleLineMarker( - html, ranges[j].toScreenRange(session), this.clazz, config); - } - } - }; - -}).call(SearchHighlight.prototype); - -exports.SearchHighlight = SearchHighlight; -}); - -ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"], function(require, exports, module) { -"use strict"; - -var Range = require("../range").Range; -function FoldLine(foldData, folds) { - this.foldData = foldData; - if (Array.isArray(folds)) { - this.folds = folds; - } else { - folds = this.folds = [ folds ]; - } - - var last = folds[folds.length - 1]; - this.range = new Range(folds[0].start.row, folds[0].start.column, - last.end.row, last.end.column); - this.start = this.range.start; - this.end = this.range.end; - - this.folds.forEach(function(fold) { - fold.setFoldLine(this); - }, this); -} - -(function() { - this.shiftRow = function(shift) { - this.start.row += shift; - this.end.row += shift; - this.folds.forEach(function(fold) { - fold.start.row += shift; - fold.end.row += shift; - }); - }; - - this.addFold = function(fold) { - if (fold.sameRow) { - if (fold.start.row < this.startRow || fold.endRow > this.endRow) { - throw new Error("Can't add a fold to this FoldLine as it has no connection"); - } - this.folds.push(fold); - this.folds.sort(function(a, b) { - return -a.range.compareEnd(b.start.row, b.start.column); - }); - if (this.range.compareEnd(fold.start.row, fold.start.column) > 0) { - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } else if (this.range.compareStart(fold.end.row, fold.end.column) < 0) { - this.start.row = fold.start.row; - this.start.column = fold.start.column; - } - } else if (fold.start.row == this.end.row) { - this.folds.push(fold); - this.end.row = fold.end.row; - this.end.column = fold.end.column; - } else if (fold.end.row == this.start.row) { - this.folds.unshift(fold); - this.start.row = fold.start.row; - this.start.column = fold.start.column; - } else { - throw new Error("Trying to add fold to FoldRow that doesn't have a matching row"); - } - fold.foldLine = this; - }; - - this.containsRow = function(row) { - return row >= this.start.row && row <= this.end.row; - }; - - this.walk = function(callback, endRow, endColumn) { - var lastEnd = 0, - folds = this.folds, - fold, - cmp, stop, isNewRow = true; - - if (endRow == null) { - endRow = this.end.row; - endColumn = this.end.column; - } - - for (var i = 0; i < folds.length; i++) { - fold = folds[i]; - - cmp = fold.range.compareStart(endRow, endColumn); - if (cmp == -1) { - callback(null, endRow, endColumn, lastEnd, isNewRow); - return; - } - - stop = callback(null, fold.start.row, fold.start.column, lastEnd, isNewRow); - stop = !stop && callback(fold.placeholder, fold.start.row, fold.start.column, lastEnd); - if (stop || cmp === 0) { - return; - } - isNewRow = !fold.sameRow; - lastEnd = fold.end.column; - } - callback(null, endRow, endColumn, lastEnd, isNewRow); - }; - - this.getNextFoldTo = function(row, column) { - var fold, cmp; - for (var i = 0; i < this.folds.length; i++) { - fold = this.folds[i]; - cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - return { - fold: fold, - kind: "after" - }; - } else if (cmp === 0) { - return { - fold: fold, - kind: "inside" - }; - } - } - return null; - }; - - this.addRemoveChars = function(row, column, len) { - var ret = this.getNextFoldTo(row, column), - fold, folds; - if (ret) { - fold = ret.fold; - if (ret.kind == "inside" - && fold.start.column != column - && fold.start.row != row) - { - window.console && window.console.log(row, column, fold); - } else if (fold.start.row == row) { - folds = this.folds; - var i = folds.indexOf(fold); - if (i === 0) { - this.start.column += len; - } - for (i; i < folds.length; i++) { - fold = folds[i]; - fold.start.column += len; - if (!fold.sameRow) { - return; - } - fold.end.column += len; - } - this.end.column += len; - } - } - }; - - this.split = function(row, column) { - var pos = this.getNextFoldTo(row, column); - - if (!pos || pos.kind == "inside") - return null; - - var fold = pos.fold; - var folds = this.folds; - var foldData = this.foldData; - - var i = folds.indexOf(fold); - var foldBefore = folds[i - 1]; - this.end.row = foldBefore.end.row; - this.end.column = foldBefore.end.column; - folds = folds.splice(i, folds.length - i); - - var newFoldLine = new FoldLine(foldData, folds); - foldData.splice(foldData.indexOf(this) + 1, 0, newFoldLine); - return newFoldLine; - }; - - this.merge = function(foldLineNext) { - var folds = foldLineNext.folds; - for (var i = 0; i < folds.length; i++) { - this.addFold(folds[i]); - } - var foldData = this.foldData; - foldData.splice(foldData.indexOf(foldLineNext), 1); - }; - - this.toString = function() { - var ret = [this.range.toString() + ": [" ]; - - this.folds.forEach(function(fold) { - ret.push(" " + fold.toString()); - }); - ret.push("]"); - return ret.join("\n"); - }; - - this.idxToPosition = function(idx) { - var lastFoldEndColumn = 0; - - for (var i = 0; i < this.folds.length; i++) { - var fold = this.folds[i]; - - idx -= fold.start.column - lastFoldEndColumn; - if (idx < 0) { - return { - row: fold.start.row, - column: fold.start.column + idx - }; - } - - idx -= fold.placeholder.length; - if (idx < 0) { - return fold.start; - } - - lastFoldEndColumn = fold.end.column; - } - - return { - row: this.end.row, - column: this.end.column + idx - }; - }; -}).call(FoldLine.prototype); - -exports.FoldLine = FoldLine; -}); - -ace.define("ace/range_list",["require","exports","module","ace/range"], function(require, exports, module) { -"use strict"; -var Range = require("./range").Range; -var comparePoints = Range.comparePoints; - -var RangeList = function() { - this.ranges = []; -}; - -(function() { - this.comparePoints = comparePoints; - - this.pointIndex = function(pos, excludeEdges, startIndex) { - var list = this.ranges; - - for (var i = startIndex || 0; i < list.length; i++) { - var range = list[i]; - var cmpEnd = comparePoints(pos, range.end); - if (cmpEnd > 0) - continue; - var cmpStart = comparePoints(pos, range.start); - if (cmpEnd === 0) - return excludeEdges && cmpStart !== 0 ? -i-2 : i; - if (cmpStart > 0 || (cmpStart === 0 && !excludeEdges)) - return i; - - return -i-1; - } - return -i - 1; - }; - - this.add = function(range) { - var excludeEdges = !range.isEmpty(); - var startIndex = this.pointIndex(range.start, excludeEdges); - if (startIndex < 0) - startIndex = -startIndex - 1; - - var endIndex = this.pointIndex(range.end, excludeEdges, startIndex); - - if (endIndex < 0) - endIndex = -endIndex - 1; - else - endIndex++; - return this.ranges.splice(startIndex, endIndex - startIndex, range); - }; - - this.addList = function(list) { - var removed = []; - for (var i = list.length; i--; ) { - removed.push.apply(removed, this.add(list[i])); - } - return removed; - }; - - this.substractPoint = function(pos) { - var i = this.pointIndex(pos); - - if (i >= 0) - return this.ranges.splice(i, 1); - }; - this.merge = function() { - var removed = []; - var list = this.ranges; - - list = list.sort(function(a, b) { - return comparePoints(a.start, b.start); - }); - - var next = list[0], range; - for (var i = 1; i < list.length; i++) { - range = next; - next = list[i]; - var cmp = comparePoints(range.end, next.start); - if (cmp < 0) - continue; - - if (cmp == 0 && !range.isEmpty() && !next.isEmpty()) - continue; - - if (comparePoints(range.end, next.end) < 0) { - range.end.row = next.end.row; - range.end.column = next.end.column; - } - - list.splice(i, 1); - removed.push(next); - next = range; - i--; - } - - this.ranges = list; - - return removed; - }; - - this.contains = function(row, column) { - return this.pointIndex({row: row, column: column}) >= 0; - }; - - this.containsPoint = function(pos) { - return this.pointIndex(pos) >= 0; - }; - - this.rangeAtPoint = function(pos) { - var i = this.pointIndex(pos); - if (i >= 0) - return this.ranges[i]; - }; - - - this.clipRows = function(startRow, endRow) { - var list = this.ranges; - if (list[0].start.row > endRow || list[list.length - 1].start.row < startRow) - return []; - - var startIndex = this.pointIndex({row: startRow, column: 0}); - if (startIndex < 0) - startIndex = -startIndex - 1; - var endIndex = this.pointIndex({row: endRow, column: 0}, startIndex); - if (endIndex < 0) - endIndex = -endIndex - 1; - - var clipped = []; - for (var i = startIndex; i < endIndex; i++) { - clipped.push(list[i]); - } - return clipped; - }; - - this.removeAll = function() { - return this.ranges.splice(0, this.ranges.length); - }; - - this.attach = function(session) { - if (this.session) - this.detach(); - - this.session = session; - this.onChange = this.$onChange.bind(this); - - this.session.on('change', this.onChange); - }; - - this.detach = function() { - if (!this.session) - return; - this.session.removeListener('change', this.onChange); - this.session = null; - }; - - this.$onChange = function(delta) { - if (delta.action == "insert"){ - var start = delta.start; - var end = delta.end; - } else { - var end = delta.start; - var start = delta.end; - } - var startRow = start.row; - var endRow = end.row; - var lineDif = endRow - startRow; - - var colDiff = -start.column + end.column; - var ranges = this.ranges; - - for (var i = 0, n = ranges.length; i < n; i++) { - var r = ranges[i]; - if (r.end.row < startRow) - continue; - if (r.start.row > startRow) - break; - - if (r.start.row == startRow && r.start.column >= start.column ) { - if (r.start.column == start.column && this.$insertRight) { - } else { - r.start.column += colDiff; - r.start.row += lineDif; - } - } - if (r.end.row == startRow && r.end.column >= start.column) { - if (r.end.column == start.column && this.$insertRight) { - continue; - } - if (r.end.column == start.column && colDiff > 0 && i < n - 1) { - if (r.end.column > r.start.column && r.end.column == ranges[i+1].start.column) - r.end.column -= colDiff; - } - r.end.column += colDiff; - r.end.row += lineDif; - } - } - - if (lineDif != 0 && i < n) { - for (; i < n; i++) { - var r = ranges[i]; - r.start.row += lineDif; - r.end.row += lineDif; - } - } - }; - -}).call(RangeList.prototype); - -exports.RangeList = RangeList; -}); - -ace.define("ace/edit_session/fold",["require","exports","module","ace/range","ace/range_list","ace/lib/oop"], function(require, exports, module) { -"use strict"; - -var Range = require("../range").Range; -var RangeList = require("../range_list").RangeList; -var oop = require("../lib/oop") -var Fold = exports.Fold = function(range, placeholder) { - this.foldLine = null; - this.placeholder = placeholder; - this.range = range; - this.start = range.start; - this.end = range.end; - - this.sameRow = range.start.row == range.end.row; - this.subFolds = this.ranges = []; -}; - -oop.inherits(Fold, RangeList); - -(function() { - - this.toString = function() { - return '"' + this.placeholder + '" ' + this.range.toString(); - }; - - this.setFoldLine = function(foldLine) { - this.foldLine = foldLine; - this.subFolds.forEach(function(fold) { - fold.setFoldLine(foldLine); - }); - }; - - this.clone = function() { - var range = this.range.clone(); - var fold = new Fold(range, this.placeholder); - this.subFolds.forEach(function(subFold) { - fold.subFolds.push(subFold.clone()); - }); - fold.collapseChildren = this.collapseChildren; - return fold; - }; - - this.addSubFold = function(fold) { - if (this.range.isEqual(fold)) - return; - - if (!this.range.containsRange(fold)) - throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); - consumeRange(fold, this.start); - - var row = fold.start.row, column = fold.start.column; - for (var i = 0, cmp = -1; i < this.subFolds.length; i++) { - cmp = this.subFolds[i].range.compare(row, column); - if (cmp != 1) - break; - } - var afterStart = this.subFolds[i]; - - if (cmp == 0) - return afterStart.addSubFold(fold); - var row = fold.range.end.row, column = fold.range.end.column; - for (var j = i, cmp = -1; j < this.subFolds.length; j++) { - cmp = this.subFolds[j].range.compare(row, column); - if (cmp != 1) - break; - } - var afterEnd = this.subFolds[j]; - - if (cmp == 0) - throw new Error("A fold can't intersect already existing fold" + fold.range + this.range); - - var consumedFolds = this.subFolds.splice(i, j - i, fold); - fold.setFoldLine(this.foldLine); - - return fold; - }; - - this.restoreRange = function(range) { - return restoreRange(range, this.start); - }; - -}).call(Fold.prototype); - -function consumePoint(point, anchor) { - point.row -= anchor.row; - if (point.row == 0) - point.column -= anchor.column; -} -function consumeRange(range, anchor) { - consumePoint(range.start, anchor); - consumePoint(range.end, anchor); -} -function restorePoint(point, anchor) { - if (point.row == 0) - point.column += anchor.column; - point.row += anchor.row; -} -function restoreRange(range, anchor) { - restorePoint(range.start, anchor); - restorePoint(range.end, anchor); -} - -}); - -ace.define("ace/edit_session/folding",["require","exports","module","ace/range","ace/edit_session/fold_line","ace/edit_session/fold","ace/token_iterator"], function(require, exports, module) { -"use strict"; - -var Range = require("../range").Range; -var FoldLine = require("./fold_line").FoldLine; -var Fold = require("./fold").Fold; -var TokenIterator = require("../token_iterator").TokenIterator; - -function Folding() { - this.getFoldAt = function(row, column, side) { - var foldLine = this.getFoldLine(row); - if (!foldLine) - return null; - - var folds = foldLine.folds; - for (var i = 0; i < folds.length; i++) { - var fold = folds[i]; - if (fold.range.contains(row, column)) { - if (side == 1 && fold.range.isEnd(row, column)) { - continue; - } else if (side == -1 && fold.range.isStart(row, column)) { - continue; - } - return fold; - } - } - }; - this.getFoldsInRange = function(range) { - var start = range.start; - var end = range.end; - var foldLines = this.$foldData; - var foundFolds = []; - - start.column += 1; - end.column -= 1; - - for (var i = 0; i < foldLines.length; i++) { - var cmp = foldLines[i].range.compareRange(range); - if (cmp == 2) { - continue; - } - else if (cmp == -2) { - break; - } - - var folds = foldLines[i].folds; - for (var j = 0; j < folds.length; j++) { - var fold = folds[j]; - cmp = fold.range.compareRange(range); - if (cmp == -2) { - break; - } else if (cmp == 2) { - continue; - } else - if (cmp == 42) { - break; - } - foundFolds.push(fold); - } - } - start.column -= 1; - end.column += 1; - - return foundFolds; - }; - - this.getFoldsInRangeList = function(ranges) { - if (Array.isArray(ranges)) { - var folds = []; - ranges.forEach(function(range) { - folds = folds.concat(this.getFoldsInRange(range)); - }, this); - } else { - var folds = this.getFoldsInRange(ranges); - } - return folds; - }; - this.getAllFolds = function() { - var folds = []; - var foldLines = this.$foldData; - - for (var i = 0; i < foldLines.length; i++) - for (var j = 0; j < foldLines[i].folds.length; j++) - folds.push(foldLines[i].folds[j]); - - return folds; - }; - this.getFoldStringAt = function(row, column, trim, foldLine) { - foldLine = foldLine || this.getFoldLine(row); - if (!foldLine) - return null; - - var lastFold = { - end: { column: 0 } - }; - var str, fold; - for (var i = 0; i < foldLine.folds.length; i++) { - fold = foldLine.folds[i]; - var cmp = fold.range.compareEnd(row, column); - if (cmp == -1) { - str = this - .getLine(fold.start.row) - .substring(lastFold.end.column, fold.start.column); - break; - } - else if (cmp === 0) { - return null; - } - lastFold = fold; - } - if (!str) - str = this.getLine(fold.start.row).substring(lastFold.end.column); - - if (trim == -1) - return str.substring(0, column - lastFold.end.column); - else if (trim == 1) - return str.substring(column - lastFold.end.column); - else - return str; - }; - - this.getFoldLine = function(docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.start.row <= docRow && foldLine.end.row >= docRow) { - return foldLine; - } else if (foldLine.end.row > docRow) { - return null; - } - } - return null; - }; - this.getNextFoldLine = function(docRow, startFoldLine) { - var foldData = this.$foldData; - var i = 0; - if (startFoldLine) - i = foldData.indexOf(startFoldLine); - if (i == -1) - i = 0; - for (i; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (foldLine.end.row >= docRow) { - return foldLine; - } - } - return null; - }; - - this.getFoldedRowCount = function(first, last) { - var foldData = this.$foldData, rowCount = last-first+1; - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i], - end = foldLine.end.row, - start = foldLine.start.row; - if (end >= last) { - if (start < last) { - if (start >= first) - rowCount -= last-start; - else - rowCount = 0; // in one fold - } - break; - } else if (end >= first){ - if (start >= first) // fold inside range - rowCount -= end-start; - else - rowCount -= end-first+1; - } - } - return rowCount; - }; - - this.$addFoldLine = function(foldLine) { - this.$foldData.push(foldLine); - this.$foldData.sort(function(a, b) { - return a.start.row - b.start.row; - }); - return foldLine; - }; - this.addFold = function(placeholder, range) { - var foldData = this.$foldData; - var added = false; - var fold; - - if (placeholder instanceof Fold) - fold = placeholder; - else { - fold = new Fold(range, placeholder); - fold.collapseChildren = range.collapseChildren; - } - this.$clipRangeToDocument(fold.range); - - var startRow = fold.start.row; - var startColumn = fold.start.column; - var endRow = fold.end.row; - var endColumn = fold.end.column; - if (!(startRow < endRow || - startRow == endRow && startColumn <= endColumn - 2)) - throw new Error("The range has to be at least 2 characters width"); - - var startFold = this.getFoldAt(startRow, startColumn, 1); - var endFold = this.getFoldAt(endRow, endColumn, -1); - if (startFold && endFold == startFold) - return startFold.addSubFold(fold); - - if (startFold && !startFold.range.isStart(startRow, startColumn)) - this.removeFold(startFold); - - if (endFold && !endFold.range.isEnd(endRow, endColumn)) - this.removeFold(endFold); - var folds = this.getFoldsInRange(fold.range); - if (folds.length > 0) { - this.removeFolds(folds); - folds.forEach(function(subFold) { - fold.addSubFold(subFold); - }); - } - - for (var i = 0; i < foldData.length; i++) { - var foldLine = foldData[i]; - if (endRow == foldLine.start.row) { - foldLine.addFold(fold); - added = true; - break; - } else if (startRow == foldLine.end.row) { - foldLine.addFold(fold); - added = true; - if (!fold.sameRow) { - var foldLineNext = foldData[i + 1]; - if (foldLineNext && foldLineNext.start.row == endRow) { - foldLine.merge(foldLineNext); - break; - } - } - break; - } else if (endRow <= foldLine.start.row) { - break; - } - } - - if (!added) - foldLine = this.$addFoldLine(new FoldLine(this.$foldData, fold)); - - if (this.$useWrapMode) - this.$updateWrapData(foldLine.start.row, foldLine.start.row); - else - this.$updateRowLengthCache(foldLine.start.row, foldLine.start.row); - this.$modified = true; - this._signal("changeFold", { data: fold, action: "add" }); - - return fold; - }; - - this.addFolds = function(folds) { - folds.forEach(function(fold) { - this.addFold(fold); - }, this); - }; - - this.removeFold = function(fold) { - var foldLine = fold.foldLine; - var startRow = foldLine.start.row; - var endRow = foldLine.end.row; - - var foldLines = this.$foldData; - var folds = foldLine.folds; - if (folds.length == 1) { - foldLines.splice(foldLines.indexOf(foldLine), 1); - } else - if (foldLine.range.isEnd(fold.end.row, fold.end.column)) { - folds.pop(); - foldLine.end.row = folds[folds.length - 1].end.row; - foldLine.end.column = folds[folds.length - 1].end.column; - } else - if (foldLine.range.isStart(fold.start.row, fold.start.column)) { - folds.shift(); - foldLine.start.row = folds[0].start.row; - foldLine.start.column = folds[0].start.column; - } else - if (fold.sameRow) { - folds.splice(folds.indexOf(fold), 1); - } else - { - var newFoldLine = foldLine.split(fold.start.row, fold.start.column); - folds = newFoldLine.folds; - folds.shift(); - newFoldLine.start.row = folds[0].start.row; - newFoldLine.start.column = folds[0].start.column; - } - - if (!this.$updating) { - if (this.$useWrapMode) - this.$updateWrapData(startRow, endRow); - else - this.$updateRowLengthCache(startRow, endRow); - } - this.$modified = true; - this._signal("changeFold", { data: fold, action: "remove" }); - }; - - this.removeFolds = function(folds) { - var cloneFolds = []; - for (var i = 0; i < folds.length; i++) { - cloneFolds.push(folds[i]); - } - - cloneFolds.forEach(function(fold) { - this.removeFold(fold); - }, this); - this.$modified = true; - }; - - this.expandFold = function(fold) { - this.removeFold(fold); - fold.subFolds.forEach(function(subFold) { - fold.restoreRange(subFold); - this.addFold(subFold); - }, this); - if (fold.collapseChildren > 0) { - this.foldAll(fold.start.row+1, fold.end.row, fold.collapseChildren-1); - } - fold.subFolds = []; - }; - - this.expandFolds = function(folds) { - folds.forEach(function(fold) { - this.expandFold(fold); - }, this); - }; - - this.unfold = function(location, expandInner) { - var range, folds; - if (location == null) { - range = new Range(0, 0, this.getLength(), 0); - expandInner = true; - } else if (typeof location == "number") - range = new Range(location, 0, location, this.getLine(location).length); - else if ("row" in location) - range = Range.fromPoints(location, location); - else - range = location; - - folds = this.getFoldsInRangeList(range); - if (expandInner) { - this.removeFolds(folds); - } else { - var subFolds = folds; - while (subFolds.length) { - this.expandFolds(subFolds); - subFolds = this.getFoldsInRangeList(range); - } - } - if (folds.length) - return folds; - }; - this.isRowFolded = function(docRow, startFoldRow) { - return !!this.getFoldLine(docRow, startFoldRow); - }; - - this.getRowFoldEnd = function(docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.end.row : docRow; - }; - - this.getRowFoldStart = function(docRow, startFoldRow) { - var foldLine = this.getFoldLine(docRow, startFoldRow); - return foldLine ? foldLine.start.row : docRow; - }; - - this.getFoldDisplayLine = function(foldLine, endRow, endColumn, startRow, startColumn) { - if (startRow == null) - startRow = foldLine.start.row; - if (startColumn == null) - startColumn = 0; - if (endRow == null) - endRow = foldLine.end.row; - if (endColumn == null) - endColumn = this.getLine(endRow).length; - var doc = this.doc; - var textLine = ""; - - foldLine.walk(function(placeholder, row, column, lastColumn) { - if (row < startRow) - return; - if (row == startRow) { - if (column < startColumn) - return; - lastColumn = Math.max(startColumn, lastColumn); - } - - if (placeholder != null) { - textLine += placeholder; - } else { - textLine += doc.getLine(row).substring(lastColumn, column); - } - }, endRow, endColumn); - return textLine; - }; - - this.getDisplayLine = function(row, endColumn, startRow, startColumn) { - var foldLine = this.getFoldLine(row); - - if (!foldLine) { - var line; - line = this.doc.getLine(row); - return line.substring(startColumn || 0, endColumn || line.length); - } else { - return this.getFoldDisplayLine( - foldLine, row, endColumn, startRow, startColumn); - } - }; - - this.$cloneFoldData = function() { - var fd = []; - fd = this.$foldData.map(function(foldLine) { - var folds = foldLine.folds.map(function(fold) { - return fold.clone(); - }); - return new FoldLine(fd, folds); - }); - - return fd; - }; - - this.toggleFold = function(tryToUnfold) { - var selection = this.selection; - var range = selection.getRange(); - var fold; - var bracketPos; - - if (range.isEmpty()) { - var cursor = range.start; - fold = this.getFoldAt(cursor.row, cursor.column); - - if (fold) { - this.expandFold(fold); - return; - } else if (bracketPos = this.findMatchingBracket(cursor)) { - if (range.comparePoint(bracketPos) == 1) { - range.end = bracketPos; - } else { - range.start = bracketPos; - range.start.column++; - range.end.column--; - } - } else if (bracketPos = this.findMatchingBracket({row: cursor.row, column: cursor.column + 1})) { - if (range.comparePoint(bracketPos) == 1) - range.end = bracketPos; - else - range.start = bracketPos; - - range.start.column++; - } else { - range = this.getCommentFoldRange(cursor.row, cursor.column) || range; - } - } else { - var folds = this.getFoldsInRange(range); - if (tryToUnfold && folds.length) { - this.expandFolds(folds); - return; - } else if (folds.length == 1 ) { - fold = folds[0]; - } - } - - if (!fold) - fold = this.getFoldAt(range.start.row, range.start.column); - - if (fold && fold.range.toString() == range.toString()) { - this.expandFold(fold); - return; - } - - var placeholder = "..."; - if (!range.isMultiLine()) { - placeholder = this.getTextRange(range); - if (placeholder.length < 4) - return; - placeholder = placeholder.trim().substring(0, 2) + ".."; - } - - this.addFold(placeholder, range); - }; - - this.getCommentFoldRange = function(row, column, dir) { - var iterator = new TokenIterator(this, row, column); - var token = iterator.getCurrentToken(); - if (token && /^comment|string/.test(token.type)) { - var range = new Range(); - var re = new RegExp(token.type.replace(/\..*/, "\\.")); - if (dir != 1) { - do { - token = iterator.stepBackward(); - } while (token && re.test(token.type)); - iterator.stepForward(); - } - - range.start.row = iterator.getCurrentTokenRow(); - range.start.column = iterator.getCurrentTokenColumn() + 2; - - iterator = new TokenIterator(this, row, column); - - if (dir != -1) { - do { - token = iterator.stepForward(); - } while (token && re.test(token.type)); - token = iterator.stepBackward(); - } else - token = iterator.getCurrentToken(); - - range.end.row = iterator.getCurrentTokenRow(); - range.end.column = iterator.getCurrentTokenColumn() + token.value.length - 2; - return range; - } - }; - - this.foldAll = function(startRow, endRow, depth) { - if (depth == undefined) - depth = 100000; // JSON.stringify doesn't hanle Infinity - var foldWidgets = this.foldWidgets; - if (!foldWidgets) - return; // mode doesn't support folding - endRow = endRow || this.getLength(); - startRow = startRow || 0; - for (var row = startRow; row < endRow; row++) { - if (foldWidgets[row] == null) - foldWidgets[row] = this.getFoldWidget(row); - if (foldWidgets[row] != "start") - continue; - - var range = this.getFoldWidgetRange(row); - if (range && range.isMultiLine() - && range.end.row <= endRow - && range.start.row >= startRow - ) { - row = range.end.row; - try { - var fold = this.addFold("...", range); - if (fold) - fold.collapseChildren = depth; - } catch(e) {} - } - } - }; - this.$foldStyles = { - "manual": 1, - "markbegin": 1, - "markbeginend": 1 - }; - this.$foldStyle = "markbegin"; - this.setFoldStyle = function(style) { - if (!this.$foldStyles[style]) - throw new Error("invalid fold style: " + style + "[" + Object.keys(this.$foldStyles).join(", ") + "]"); - - if (this.$foldStyle == style) - return; - - this.$foldStyle = style; - - if (style == "manual") - this.unfold(); - var mode = this.$foldMode; - this.$setFolding(null); - this.$setFolding(mode); - }; - - this.$setFolding = function(foldMode) { - if (this.$foldMode == foldMode) - return; - - this.$foldMode = foldMode; - - this.off('change', this.$updateFoldWidgets); - this.off('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - this._signal("changeAnnotation"); - - if (!foldMode || this.$foldStyle == "manual") { - this.foldWidgets = null; - return; - } - - this.foldWidgets = []; - this.getFoldWidget = foldMode.getFoldWidget.bind(foldMode, this, this.$foldStyle); - this.getFoldWidgetRange = foldMode.getFoldWidgetRange.bind(foldMode, this, this.$foldStyle); - - this.$updateFoldWidgets = this.updateFoldWidgets.bind(this); - this.$tokenizerUpdateFoldWidgets = this.tokenizerUpdateFoldWidgets.bind(this); - this.on('change', this.$updateFoldWidgets); - this.on('tokenizerUpdate', this.$tokenizerUpdateFoldWidgets); - }; - - this.getParentFoldRangeData = function (row, ignoreCurrent) { - var fw = this.foldWidgets; - if (!fw || (ignoreCurrent && fw[row])) - return {}; - - var i = row - 1, firstRange; - while (i >= 0) { - var c = fw[i]; - if (c == null) - c = fw[i] = this.getFoldWidget(i); - - if (c == "start") { - var range = this.getFoldWidgetRange(i); - if (!firstRange) - firstRange = range; - if (range && range.end.row >= row) - break; - } - i--; - } - - return { - range: i !== -1 && range, - firstRange: firstRange - }; - }; - - this.onFoldWidgetClick = function(row, e) { - e = e.domEvent; - var options = { - children: e.shiftKey, - all: e.ctrlKey || e.metaKey, - siblings: e.altKey - }; - - var range = this.$toggleFoldWidget(row, options); - if (!range) { - var el = (e.target || e.srcElement); - if (el && /ace_fold-widget/.test(el.className)) - el.className += " ace_invalid"; - } - }; - - this.$toggleFoldWidget = function(row, options) { - if (!this.getFoldWidget) - return; - var type = this.getFoldWidget(row); - var line = this.getLine(row); - - var dir = type === "end" ? -1 : 1; - var fold = this.getFoldAt(row, dir === -1 ? 0 : line.length, dir); - - if (fold) { - if (options.children || options.all) - this.removeFold(fold); - else - this.expandFold(fold); - return; - } - - var range = this.getFoldWidgetRange(row, true); - if (range && !range.isMultiLine()) { - fold = this.getFoldAt(range.start.row, range.start.column, 1); - if (fold && range.isEqual(fold.range)) { - this.removeFold(fold); - return; - } - } - - if (options.siblings) { - var data = this.getParentFoldRangeData(row); - if (data.range) { - var startRow = data.range.start.row + 1; - var endRow = data.range.end.row; - } - this.foldAll(startRow, endRow, options.all ? 10000 : 0); - } else if (options.children) { - endRow = range ? range.end.row : this.getLength(); - this.foldAll(row + 1, endRow, options.all ? 10000 : 0); - } else if (range) { - if (options.all) - range.collapseChildren = 10000; - this.addFold("...", range); - } - - return range; - }; - - - - this.toggleFoldWidget = function(toggleParent) { - var row = this.selection.getCursor().row; - row = this.getRowFoldStart(row); - var range = this.$toggleFoldWidget(row, {}); - - if (range) - return; - var data = this.getParentFoldRangeData(row, true); - range = data.range || data.firstRange; - - if (range) { - row = range.start.row; - var fold = this.getFoldAt(row, this.getLine(row).length, 1); - - if (fold) { - this.removeFold(fold); - } else { - this.addFold("...", range); - } - } - }; - - this.updateFoldWidgets = function(delta) { - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - - if (len === 0) { - this.foldWidgets[firstRow] = null; - } else if (delta.action == 'remove') { - this.foldWidgets.splice(firstRow, len + 1, null); - } else { - var args = Array(len + 1); - args.unshift(firstRow, 1); - this.foldWidgets.splice.apply(this.foldWidgets, args); - } - }; - this.tokenizerUpdateFoldWidgets = function(e) { - var rows = e.data; - if (rows.first != rows.last) { - if (this.foldWidgets.length > rows.first) - this.foldWidgets.splice(rows.first, this.foldWidgets.length); - } - }; -} - -exports.Folding = Folding; - -}); - -ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"], function(require, exports, module) { -"use strict"; - -var TokenIterator = require("../token_iterator").TokenIterator; -var Range = require("../range").Range; - - -function BracketMatch() { - - this.findMatchingBracket = function(position, chr) { - if (position.column == 0) return null; - - var charBeforeCursor = chr || this.getLine(position.row).charAt(position.column-1); - if (charBeforeCursor == "") return null; - - var match = charBeforeCursor.match(/([\(\[\{])|([\)\]\}])/); - if (!match) - return null; - - if (match[1]) - return this.$findClosingBracket(match[1], position); - else - return this.$findOpeningBracket(match[2], position); - }; - - this.getBracketRange = function(pos) { - var line = this.getLine(pos.row); - var before = true, range; - - var chr = line.charAt(pos.column-1); - var match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - if (!match) { - chr = line.charAt(pos.column); - pos = {row: pos.row, column: pos.column + 1}; - match = chr && chr.match(/([\(\[\{])|([\)\]\}])/); - before = false; - } - if (!match) - return null; - - if (match[1]) { - var bracketPos = this.$findClosingBracket(match[1], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(pos, bracketPos); - if (!before) { - range.end.column++; - range.start.column--; - } - range.cursor = range.end; - } else { - var bracketPos = this.$findOpeningBracket(match[2], pos); - if (!bracketPos) - return null; - range = Range.fromPoints(bracketPos, pos); - if (!before) { - range.start.column++; - range.end.column--; - } - range.cursor = range.start; - } - - return range; - }; - - this.$brackets = { - ")": "(", - "(": ")", - "]": "[", - "[": "]", - "{": "}", - "}": "{" - }; - - this.$findOpeningBracket = function(bracket, position, typeRe) { - var openBracket = this.$brackets[bracket]; - var depth = 1; - - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - - if (!typeRe){ - typeRe = new RegExp( - "(\\.?" + - token.type.replace(".", "\\.").replace("rparen", ".paren") - .replace(/\b(?:end)\b/, "(?:start|begin|end)") - + ")+" - ); - } - var valueIndex = position.column - iterator.getCurrentTokenColumn() - 2; - var value = token.value; - - while (true) { - - while (valueIndex >= 0) { - var chr = value.charAt(valueIndex); - if (chr == openBracket) { - depth -= 1; - if (depth == 0) { - return {row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn()}; - } - } - else if (chr == bracket) { - depth += 1; - } - valueIndex -= 1; - } - do { - token = iterator.stepBackward(); - } while (token && !typeRe.test(token.type)); - - if (token == null) - break; - - value = token.value; - valueIndex = value.length - 1; - } - - return null; - }; - - this.$findClosingBracket = function(bracket, position, typeRe) { - var closingBracket = this.$brackets[bracket]; - var depth = 1; - - var iterator = new TokenIterator(this, position.row, position.column); - var token = iterator.getCurrentToken(); - if (!token) - token = iterator.stepForward(); - if (!token) - return; - - if (!typeRe){ - typeRe = new RegExp( - "(\\.?" + - token.type.replace(".", "\\.").replace("lparen", ".paren") - .replace(/\b(?:start|begin)\b/, "(?:start|begin|end)") - + ")+" - ); - } - var valueIndex = position.column - iterator.getCurrentTokenColumn(); - - while (true) { - - var value = token.value; - var valueLength = value.length; - while (valueIndex < valueLength) { - var chr = value.charAt(valueIndex); - if (chr == closingBracket) { - depth -= 1; - if (depth == 0) { - return {row: iterator.getCurrentTokenRow(), - column: valueIndex + iterator.getCurrentTokenColumn()}; - } - } - else if (chr == bracket) { - depth += 1; - } - valueIndex += 1; - } - do { - token = iterator.stepForward(); - } while (token && !typeRe.test(token.type)); - - if (token == null) - break; - - valueIndex = 0; - } - - return null; - }; -} -exports.BracketMatch = BracketMatch; - -}); - -ace.define("ace/edit_session",["require","exports","module","ace/lib/oop","ace/lib/lang","ace/config","ace/lib/event_emitter","ace/selection","ace/mode/text","ace/range","ace/document","ace/background_tokenizer","ace/search_highlight","ace/edit_session/folding","ace/edit_session/bracket_match"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var lang = require("./lib/lang"); -var config = require("./config"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Selection = require("./selection").Selection; -var TextMode = require("./mode/text").Mode; -var Range = require("./range").Range; -var Document = require("./document").Document; -var BackgroundTokenizer = require("./background_tokenizer").BackgroundTokenizer; -var SearchHighlight = require("./search_highlight").SearchHighlight; - -var EditSession = function(text, mode) { - this.$breakpoints = []; - this.$decorations = []; - this.$frontMarkers = {}; - this.$backMarkers = {}; - this.$markerId = 1; - this.$undoSelect = true; - - this.$foldData = []; - this.$foldData.toString = function() { - return this.join("\n"); - }; - this.on("changeFold", this.onChangeFold.bind(this)); - this.$onChange = this.onChange.bind(this); - - if (typeof text != "object" || !text.getLine) - text = new Document(text); - - this.setDocument(text); - this.selection = new Selection(this); - - config.resetOptions(this); - this.setMode(mode); - config._signal("session", this); -}; - - -(function() { - - oop.implement(this, EventEmitter); - this.setDocument = function(doc) { - if (this.doc) - this.doc.removeListener("change", this.$onChange); - - this.doc = doc; - doc.on("change", this.$onChange); - - if (this.bgTokenizer) - this.bgTokenizer.setDocument(this.getDocument()); - - this.resetCaches(); - }; - this.getDocument = function() { - return this.doc; - }; - this.$resetRowCache = function(docRow) { - if (!docRow) { - this.$docRowCache = []; - this.$screenRowCache = []; - return; - } - var l = this.$docRowCache.length; - var i = this.$getRowCacheIndex(this.$docRowCache, docRow) + 1; - if (l > i) { - this.$docRowCache.splice(i, l); - this.$screenRowCache.splice(i, l); - } - }; - - this.$getRowCacheIndex = function(cacheArray, val) { - var low = 0; - var hi = cacheArray.length - 1; - - while (low <= hi) { - var mid = (low + hi) >> 1; - var c = cacheArray[mid]; - - if (val > c) - low = mid + 1; - else if (val < c) - hi = mid - 1; - else - return mid; - } - - return low -1; - }; - - this.resetCaches = function() { - this.$modified = true; - this.$wrapData = []; - this.$rowLengthCache = []; - this.$resetRowCache(0); - if (this.bgTokenizer) - this.bgTokenizer.start(0); - }; - - this.onChangeFold = function(e) { - var fold = e.data; - this.$resetRowCache(fold.start.row); - }; - - this.onChange = function(delta) { - this.$modified = true; - - this.$resetRowCache(delta.start.row); - - var removedFolds = this.$updateInternalDataOnChange(delta); - if (!this.$fromUndo && this.$undoManager && !delta.ignore) { - this.$deltasDoc.push(delta); - if (removedFolds && removedFolds.length != 0) { - this.$deltasFold.push({ - action: "removeFolds", - folds: removedFolds - }); - } - - this.$informUndoManager.schedule(); - } - - this.bgTokenizer && this.bgTokenizer.$updateOnChange(delta); - this._signal("change", delta); - }; - this.setValue = function(text) { - this.doc.setValue(text); - this.selection.moveTo(0, 0); - - this.$resetRowCache(0); - this.$deltas = []; - this.$deltasDoc = []; - this.$deltasFold = []; - this.setUndoManager(this.$undoManager); - this.getUndoManager().reset(); - }; - this.getValue = - this.toString = function() { - return this.doc.getValue(); - }; - this.getSelection = function() { - return this.selection; - }; - this.getState = function(row) { - return this.bgTokenizer.getState(row); - }; - this.getTokens = function(row) { - return this.bgTokenizer.getTokens(row); - }; - this.getTokenAt = function(row, column) { - var tokens = this.bgTokenizer.getTokens(row); - var token, c = 0; - if (column == null) { - i = tokens.length - 1; - c = this.getLine(row).length; - } else { - for (var i = 0; i < tokens.length; i++) { - c += tokens[i].value.length; - if (c >= column) - break; - } - } - token = tokens[i]; - if (!token) - return null; - token.index = i; - token.start = c - token.value.length; - return token; - }; - this.setUndoManager = function(undoManager) { - this.$undoManager = undoManager; - this.$deltas = []; - this.$deltasDoc = []; - this.$deltasFold = []; - - if (this.$informUndoManager) - this.$informUndoManager.cancel(); - - if (undoManager) { - var self = this; - - this.$syncInformUndoManager = function() { - self.$informUndoManager.cancel(); - - if (self.$deltasFold.length) { - self.$deltas.push({ - group: "fold", - deltas: self.$deltasFold - }); - self.$deltasFold = []; - } - - if (self.$deltasDoc.length) { - self.$deltas.push({ - group: "doc", - deltas: self.$deltasDoc - }); - self.$deltasDoc = []; - } - - if (self.$deltas.length > 0) { - undoManager.execute({ - action: "aceupdate", - args: [self.$deltas, self], - merge: self.mergeUndoDeltas - }); - } - self.mergeUndoDeltas = false; - self.$deltas = []; - }; - this.$informUndoManager = lang.delayedCall(this.$syncInformUndoManager); - } - }; - this.markUndoGroup = function() { - if (this.$syncInformUndoManager) - this.$syncInformUndoManager(); - }; - - this.$defaultUndoManager = { - undo: function() {}, - redo: function() {}, - reset: function() {} - }; - this.getUndoManager = function() { - return this.$undoManager || this.$defaultUndoManager; - }; - this.getTabString = function() { - if (this.getUseSoftTabs()) { - return lang.stringRepeat(" ", this.getTabSize()); - } else { - return "\t"; - } - }; - this.setUseSoftTabs = function(val) { - this.setOption("useSoftTabs", val); - }; - this.getUseSoftTabs = function() { - return this.$useSoftTabs && !this.$mode.$indentWithTabs; - }; - this.setTabSize = function(tabSize) { - this.setOption("tabSize", tabSize); - }; - this.getTabSize = function() { - return this.$tabSize; - }; - this.isTabStop = function(position) { - return this.$useSoftTabs && (position.column % this.$tabSize === 0); - }; - - this.$overwrite = false; - this.setOverwrite = function(overwrite) { - this.setOption("overwrite", overwrite); - }; - this.getOverwrite = function() { - return this.$overwrite; - }; - this.toggleOverwrite = function() { - this.setOverwrite(!this.$overwrite); - }; - this.addGutterDecoration = function(row, className) { - if (!this.$decorations[row]) - this.$decorations[row] = ""; - this.$decorations[row] += " " + className; - this._signal("changeBreakpoint", {}); - }; - this.removeGutterDecoration = function(row, className) { - this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, ""); - this._signal("changeBreakpoint", {}); - }; - this.getBreakpoints = function() { - return this.$breakpoints; - }; - this.setBreakpoints = function(rows) { - this.$breakpoints = []; - for (var i=0; i 0) - inToken = !!line.charAt(column - 1).match(this.tokenRe); - - if (!inToken) - inToken = !!line.charAt(column).match(this.tokenRe); - - if (inToken) - var re = this.tokenRe; - else if (/^\s+$/.test(line.slice(column-1, column+1))) - var re = /\s/; - else - var re = this.nonTokenRe; - - var start = column; - if (start > 0) { - do { - start--; - } - while (start >= 0 && line.charAt(start).match(re)); - start++; - } - - var end = column; - while (end < line.length && line.charAt(end).match(re)) { - end++; - } - - return new Range(row, start, row, end); - }; - this.getAWordRange = function(row, column) { - var wordRange = this.getWordRange(row, column); - var line = this.getLine(wordRange.end.row); - - while (line.charAt(wordRange.end.column).match(/[ \t]/)) { - wordRange.end.column += 1; - } - return wordRange; - }; - this.setNewLineMode = function(newLineMode) { - this.doc.setNewLineMode(newLineMode); - }; - this.getNewLineMode = function() { - return this.doc.getNewLineMode(); - }; - this.setUseWorker = function(useWorker) { this.setOption("useWorker", useWorker); }; - this.getUseWorker = function() { return this.$useWorker; }; - this.onReloadTokenizer = function(e) { - var rows = e.data; - this.bgTokenizer.start(rows.first); - this._signal("tokenizerUpdate", e); - }; - - this.$modes = {}; - this.$mode = null; - this.$modeId = null; - this.setMode = function(mode, cb) { - if (mode && typeof mode === "object") { - if (mode.getTokenizer) - return this.$onChangeMode(mode); - var options = mode; - var path = options.path; - } else { - path = mode || "ace/mode/text"; - } - if (!this.$modes["ace/mode/text"]) - this.$modes["ace/mode/text"] = new TextMode(); - - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); - cb && cb(); - return; - } - this.$modeId = path; - config.loadModule(["mode", path], function(m) { - if (this.$modeId !== path) - return cb && cb(); - if (this.$modes[path] && !options) { - this.$onChangeMode(this.$modes[path]); - } else if (m && m.Mode) { - m = new m.Mode(options); - if (!options) { - this.$modes[path] = m; - m.$id = path; - } - this.$onChangeMode(m); - } - cb && cb(); - }.bind(this)); - if (!this.$mode) - this.$onChangeMode(this.$modes["ace/mode/text"], true); - }; - - this.$onChangeMode = function(mode, $isPlaceholder) { - if (!$isPlaceholder) - this.$modeId = mode.$id; - if (this.$mode === mode) - return; - - this.$mode = mode; - - this.$stopWorker(); - - if (this.$useWorker) - this.$startWorker(); - - var tokenizer = mode.getTokenizer(); - - if(tokenizer.addEventListener !== undefined) { - var onReloadTokenizer = this.onReloadTokenizer.bind(this); - tokenizer.addEventListener("update", onReloadTokenizer); - } - - if (!this.bgTokenizer) { - this.bgTokenizer = new BackgroundTokenizer(tokenizer); - var _self = this; - this.bgTokenizer.addEventListener("update", function(e) { - _self._signal("tokenizerUpdate", e); - }); - } else { - this.bgTokenizer.setTokenizer(tokenizer); - } - - this.bgTokenizer.setDocument(this.getDocument()); - - this.tokenRe = mode.tokenRe; - this.nonTokenRe = mode.nonTokenRe; - - - if (!$isPlaceholder) { - if (mode.attachToSession) - mode.attachToSession(this); - this.$options.wrapMethod.set.call(this, this.$wrapMethod); - this.$setFolding(mode.foldingRules); - this.bgTokenizer.start(0); - this._emit("changeMode"); - } - }; - - this.$stopWorker = function() { - if (this.$worker) { - this.$worker.terminate(); - this.$worker = null; - } - }; - - this.$startWorker = function() { - try { - this.$worker = this.$mode.createWorker(this); - } catch (e) { - config.warn("Could not load worker", e); - this.$worker = null; - } - }; - this.getMode = function() { - return this.$mode; - }; - - this.$scrollTop = 0; - this.setScrollTop = function(scrollTop) { - if (this.$scrollTop === scrollTop || isNaN(scrollTop)) - return; - - this.$scrollTop = scrollTop; - this._signal("changeScrollTop", scrollTop); - }; - this.getScrollTop = function() { - return this.$scrollTop; - }; - - this.$scrollLeft = 0; - this.setScrollLeft = function(scrollLeft) { - if (this.$scrollLeft === scrollLeft || isNaN(scrollLeft)) - return; - - this.$scrollLeft = scrollLeft; - this._signal("changeScrollLeft", scrollLeft); - }; - this.getScrollLeft = function() { - return this.$scrollLeft; - }; - this.getScreenWidth = function() { - this.$computeWidth(); - if (this.lineWidgets) - return Math.max(this.getLineWidgetMaxWidth(), this.screenWidth); - return this.screenWidth; - }; - - this.getLineWidgetMaxWidth = function() { - if (this.lineWidgetsWidth != null) return this.lineWidgetsWidth; - var width = 0; - this.lineWidgets.forEach(function(w) { - if (w && w.screenWidth > width) - width = w.screenWidth; - }); - return this.lineWidgetWidth = width; - }; - - this.$computeWidth = function(force) { - if (this.$modified || force) { - this.$modified = false; - - if (this.$useWrapMode) - return this.screenWidth = this.$wrapLimit; - - var lines = this.doc.getAllLines(); - var cache = this.$rowLengthCache; - var longestScreenLine = 0; - var foldIndex = 0; - var foldLine = this.$foldData[foldIndex]; - var foldStart = foldLine ? foldLine.start.row : Infinity; - var len = lines.length; - - for (var i = 0; i < len; i++) { - if (i > foldStart) { - i = foldLine.end.row + 1; - if (i >= len) - break; - foldLine = this.$foldData[foldIndex++]; - foldStart = foldLine ? foldLine.start.row : Infinity; - } - - if (cache[i] == null) - cache[i] = this.$getStringScreenWidth(lines[i])[0]; - - if (cache[i] > longestScreenLine) - longestScreenLine = cache[i]; - } - this.screenWidth = longestScreenLine; - } - }; - this.getLine = function(row) { - return this.doc.getLine(row); - }; - this.getLines = function(firstRow, lastRow) { - return this.doc.getLines(firstRow, lastRow); - }; - this.getLength = function() { - return this.doc.getLength(); - }; - this.getTextRange = function(range) { - return this.doc.getTextRange(range || this.selection.getRange()); - }; - this.insert = function(position, text) { - return this.doc.insert(position, text); - }; - this.remove = function(range) { - return this.doc.remove(range); - }; - this.removeFullLines = function(firstRow, lastRow){ - return this.doc.removeFullLines(firstRow, lastRow); - }; - this.undoChanges = function(deltas, dontSelect) { - if (!deltas.length) - return; - - this.$fromUndo = true; - var lastUndoRange = null; - for (var i = deltas.length - 1; i != -1; i--) { - var delta = deltas[i]; - if (delta.group == "doc") { - this.doc.revertDeltas(delta.deltas); - lastUndoRange = - this.$getUndoSelection(delta.deltas, true, lastUndoRange); - } else { - delta.deltas.forEach(function(foldDelta) { - this.addFolds(foldDelta.folds); - }, this); - } - } - this.$fromUndo = false; - lastUndoRange && - this.$undoSelect && - !dontSelect && - this.selection.setSelectionRange(lastUndoRange); - return lastUndoRange; - }; - this.redoChanges = function(deltas, dontSelect) { - if (!deltas.length) - return; - - this.$fromUndo = true; - var lastUndoRange = null; - for (var i = 0; i < deltas.length; i++) { - var delta = deltas[i]; - if (delta.group == "doc") { - this.doc.applyDeltas(delta.deltas); - lastUndoRange = - this.$getUndoSelection(delta.deltas, false, lastUndoRange); - } - } - this.$fromUndo = false; - lastUndoRange && - this.$undoSelect && - !dontSelect && - this.selection.setSelectionRange(lastUndoRange); - return lastUndoRange; - }; - this.setUndoSelect = function(enable) { - this.$undoSelect = enable; - }; - - this.$getUndoSelection = function(deltas, isUndo, lastUndoRange) { - function isInsert(delta) { - return isUndo ? delta.action !== "insert" : delta.action === "insert"; - } - - var delta = deltas[0]; - var range, point; - var lastDeltaIsInsert = false; - if (isInsert(delta)) { - range = Range.fromPoints(delta.start, delta.end); - lastDeltaIsInsert = true; - } else { - range = Range.fromPoints(delta.start, delta.start); - lastDeltaIsInsert = false; - } - - for (var i = 1; i < deltas.length; i++) { - delta = deltas[i]; - if (isInsert(delta)) { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range.setStart(point); - } - point = delta.end; - if (range.compare(point.row, point.column) == 1) { - range.setEnd(point); - } - lastDeltaIsInsert = true; - } else { - point = delta.start; - if (range.compare(point.row, point.column) == -1) { - range = Range.fromPoints(delta.start, delta.start); - } - lastDeltaIsInsert = false; - } - } - if (lastUndoRange != null) { - if (Range.comparePoints(lastUndoRange.start, range.start) === 0) { - lastUndoRange.start.column += range.end.column - range.start.column; - lastUndoRange.end.column += range.end.column - range.start.column; - } - - var cmp = lastUndoRange.compareRange(range); - if (cmp == 1) { - range.setStart(lastUndoRange.start); - } else if (cmp == -1) { - range.setEnd(lastUndoRange.end); - } - } - - return range; - }; - this.replace = function(range, text) { - return this.doc.replace(range, text); - }; - this.moveText = function(fromRange, toPosition, copy) { - var text = this.getTextRange(fromRange); - var folds = this.getFoldsInRange(fromRange); - - var toRange = Range.fromPoints(toPosition, toPosition); - if (!copy) { - this.remove(fromRange); - var rowDiff = fromRange.start.row - fromRange.end.row; - var collDiff = rowDiff ? -fromRange.end.column : fromRange.start.column - fromRange.end.column; - if (collDiff) { - if (toRange.start.row == fromRange.end.row && toRange.start.column > fromRange.end.column) - toRange.start.column += collDiff; - if (toRange.end.row == fromRange.end.row && toRange.end.column > fromRange.end.column) - toRange.end.column += collDiff; - } - if (rowDiff && toRange.start.row >= fromRange.end.row) { - toRange.start.row += rowDiff; - toRange.end.row += rowDiff; - } - } - - toRange.end = this.insert(toRange.start, text); - if (folds.length) { - var oldStart = fromRange.start; - var newStart = toRange.start; - var rowDiff = newStart.row - oldStart.row; - var collDiff = newStart.column - oldStart.column; - this.addFolds(folds.map(function(x) { - x = x.clone(); - if (x.start.row == oldStart.row) - x.start.column += collDiff; - if (x.end.row == oldStart.row) - x.end.column += collDiff; - x.start.row += rowDiff; - x.end.row += rowDiff; - return x; - })); - } - - return toRange; - }; - this.indentRows = function(startRow, endRow, indentString) { - indentString = indentString.replace(/\t/g, this.getTabString()); - for (var row=startRow; row<=endRow; row++) - this.doc.insertInLine({row: row, column: 0}, indentString); - }; - this.outdentRows = function (range) { - var rowRange = range.collapseRows(); - var deleteRange = new Range(0, 0, 0, 0); - var size = this.getTabSize(); - - for (var i = rowRange.start.row; i <= rowRange.end.row; ++i) { - var line = this.getLine(i); - - deleteRange.start.row = i; - deleteRange.end.row = i; - for (var j = 0; j < size; ++j) - if (line.charAt(j) != ' ') - break; - if (j < size && line.charAt(j) == '\t') { - deleteRange.start.column = j; - deleteRange.end.column = j + 1; - } else { - deleteRange.start.column = 0; - deleteRange.end.column = j; - } - this.remove(deleteRange); - } - }; - - this.$moveLines = function(firstRow, lastRow, dir) { - firstRow = this.getRowFoldStart(firstRow); - lastRow = this.getRowFoldEnd(lastRow); - if (dir < 0) { - var row = this.getRowFoldStart(firstRow + dir); - if (row < 0) return 0; - var diff = row-firstRow; - } else if (dir > 0) { - var row = this.getRowFoldEnd(lastRow + dir); - if (row > this.doc.getLength()-1) return 0; - var diff = row-lastRow; - } else { - firstRow = this.$clipRowToDocument(firstRow); - lastRow = this.$clipRowToDocument(lastRow); - var diff = lastRow - firstRow + 1; - } - - var range = new Range(firstRow, 0, lastRow, Number.MAX_VALUE); - var folds = this.getFoldsInRange(range).map(function(x){ - x = x.clone(); - x.start.row += diff; - x.end.row += diff; - return x; - }); - - var lines = dir == 0 - ? this.doc.getLines(firstRow, lastRow) - : this.doc.removeFullLines(firstRow, lastRow); - this.doc.insertFullLines(firstRow+diff, lines); - folds.length && this.addFolds(folds); - return diff; - }; - this.moveLinesUp = function(firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, -1); - }; - this.moveLinesDown = function(firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 1); - }; - this.duplicateLines = function(firstRow, lastRow) { - return this.$moveLines(firstRow, lastRow, 0); - }; - - - this.$clipRowToDocument = function(row) { - return Math.max(0, Math.min(row, this.doc.getLength()-1)); - }; - - this.$clipColumnToRow = function(row, column) { - if (column < 0) - return 0; - return Math.min(this.doc.getLine(row).length, column); - }; - - - this.$clipPositionToDocument = function(row, column) { - column = Math.max(0, column); - - if (row < 0) { - row = 0; - column = 0; - } else { - var len = this.doc.getLength(); - if (row >= len) { - row = len - 1; - column = this.doc.getLine(len-1).length; - } else { - column = Math.min(this.doc.getLine(row).length, column); - } - } - - return { - row: row, - column: column - }; - }; - - this.$clipRangeToDocument = function(range) { - if (range.start.row < 0) { - range.start.row = 0; - range.start.column = 0; - } else { - range.start.column = this.$clipColumnToRow( - range.start.row, - range.start.column - ); - } - - var len = this.doc.getLength() - 1; - if (range.end.row > len) { - range.end.row = len; - range.end.column = this.doc.getLine(len).length; - } else { - range.end.column = this.$clipColumnToRow( - range.end.row, - range.end.column - ); - } - return range; - }; - this.$wrapLimit = 80; - this.$useWrapMode = false; - this.$wrapLimitRange = { - min : null, - max : null - }; - this.setUseWrapMode = function(useWrapMode) { - if (useWrapMode != this.$useWrapMode) { - this.$useWrapMode = useWrapMode; - this.$modified = true; - this.$resetRowCache(0); - if (useWrapMode) { - var len = this.getLength(); - this.$wrapData = Array(len); - this.$updateWrapData(0, len - 1); - } - - this._signal("changeWrapMode"); - } - }; - this.getUseWrapMode = function() { - return this.$useWrapMode; - }; - this.setWrapLimitRange = function(min, max) { - if (this.$wrapLimitRange.min !== min || this.$wrapLimitRange.max !== max) { - this.$wrapLimitRange = { min: min, max: max }; - this.$modified = true; - if (this.$useWrapMode) - this._signal("changeWrapMode"); - } - }; - this.adjustWrapLimit = function(desiredLimit, $printMargin) { - var limits = this.$wrapLimitRange; - if (limits.max < 0) - limits = {min: $printMargin, max: $printMargin}; - var wrapLimit = this.$constrainWrapLimit(desiredLimit, limits.min, limits.max); - if (wrapLimit != this.$wrapLimit && wrapLimit > 1) { - this.$wrapLimit = wrapLimit; - this.$modified = true; - if (this.$useWrapMode) { - this.$updateWrapData(0, this.getLength() - 1); - this.$resetRowCache(0); - this._signal("changeWrapLimit"); - } - return true; - } - return false; - }; - - this.$constrainWrapLimit = function(wrapLimit, min, max) { - if (min) - wrapLimit = Math.max(min, wrapLimit); - - if (max) - wrapLimit = Math.min(max, wrapLimit); - - return wrapLimit; - }; - this.getWrapLimit = function() { - return this.$wrapLimit; - }; - this.setWrapLimit = function (limit) { - this.setWrapLimitRange(limit, limit); - }; - this.getWrapLimitRange = function() { - return { - min : this.$wrapLimitRange.min, - max : this.$wrapLimitRange.max - }; - }; - - this.$updateInternalDataOnChange = function(delta) { - var useWrapMode = this.$useWrapMode; - var action = delta.action; - var start = delta.start; - var end = delta.end; - var firstRow = start.row; - var lastRow = end.row; - var len = lastRow - firstRow; - var removedFolds = null; - - this.$updating = true; - if (len != 0) { - if (action === "remove") { - this[useWrapMode ? "$wrapData" : "$rowLengthCache"].splice(firstRow, len); - - var foldLines = this.$foldData; - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - - var foldLine = this.getFoldLine(end.row); - var idx = 0; - if (foldLine) { - foldLine.addRemoveChars(end.row, end.column, start.column - end.column); - foldLine.shiftRow(-len); - - var foldLineBefore = this.getFoldLine(firstRow); - if (foldLineBefore && foldLineBefore !== foldLine) { - foldLineBefore.merge(foldLine); - foldLine = foldLineBefore; - } - idx = foldLines.indexOf(foldLine) + 1; - } - - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= end.row) { - foldLine.shiftRow(-len); - } - } - - lastRow = firstRow; - } else { - var args = Array(len); - args.unshift(firstRow, 0); - var arr = useWrapMode ? this.$wrapData : this.$rowLengthCache - arr.splice.apply(arr, args); - var foldLines = this.$foldData; - var foldLine = this.getFoldLine(firstRow); - var idx = 0; - if (foldLine) { - var cmp = foldLine.range.compareInside(start.row, start.column); - if (cmp == 0) { - foldLine = foldLine.split(start.row, start.column); - if (foldLine) { - foldLine.shiftRow(len); - foldLine.addRemoveChars(lastRow, 0, end.column - start.column); - } - } else - if (cmp == -1) { - foldLine.addRemoveChars(firstRow, 0, end.column - start.column); - foldLine.shiftRow(len); - } - idx = foldLines.indexOf(foldLine) + 1; - } - - for (idx; idx < foldLines.length; idx++) { - var foldLine = foldLines[idx]; - if (foldLine.start.row >= firstRow) { - foldLine.shiftRow(len); - } - } - } - } else { - len = Math.abs(delta.start.column - delta.end.column); - if (action === "remove") { - removedFolds = this.getFoldsInRange(delta); - this.removeFolds(removedFolds); - - len = -len; - } - var foldLine = this.getFoldLine(firstRow); - if (foldLine) { - foldLine.addRemoveChars(firstRow, start.column, len); - } - } - - if (useWrapMode && this.$wrapData.length != this.doc.getLength()) { - console.error("doc.getLength() and $wrapData.length have to be the same!"); - } - this.$updating = false; - - if (useWrapMode) - this.$updateWrapData(firstRow, lastRow); - else - this.$updateRowLengthCache(firstRow, lastRow); - - return removedFolds; - }; - - this.$updateRowLengthCache = function(firstRow, lastRow, b) { - this.$rowLengthCache[firstRow] = null; - this.$rowLengthCache[lastRow] = null; - }; - - this.$updateWrapData = function(firstRow, lastRow) { - var lines = this.doc.getAllLines(); - var tabSize = this.getTabSize(); - var wrapData = this.$wrapData; - var wrapLimit = this.$wrapLimit; - var tokens; - var foldLine; - - var row = firstRow; - lastRow = Math.min(lastRow, lines.length - 1); - while (row <= lastRow) { - foldLine = this.getFoldLine(row, foldLine); - if (!foldLine) { - tokens = this.$getDisplayTokens(lines[row]); - wrapData[row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row ++; - } else { - tokens = []; - foldLine.walk(function(placeholder, row, column, lastColumn) { - var walkTokens; - if (placeholder != null) { - walkTokens = this.$getDisplayTokens( - placeholder, tokens.length); - walkTokens[0] = PLACEHOLDER_START; - for (var i = 1; i < walkTokens.length; i++) { - walkTokens[i] = PLACEHOLDER_BODY; - } - } else { - walkTokens = this.$getDisplayTokens( - lines[row].substring(lastColumn, column), - tokens.length); - } - tokens = tokens.concat(walkTokens); - }.bind(this), - foldLine.end.row, - lines[foldLine.end.row].length + 1 - ); - - wrapData[foldLine.start.row] = this.$computeWrapSplits(tokens, wrapLimit, tabSize); - row = foldLine.end.row + 1; - } - } - }; - var CHAR = 1, - CHAR_EXT = 2, - PLACEHOLDER_START = 3, - PLACEHOLDER_BODY = 4, - PUNCTUATION = 9, - SPACE = 10, - TAB = 11, - TAB_SPACE = 12; - - - this.$computeWrapSplits = function(tokens, wrapLimit, tabSize) { - if (tokens.length == 0) { - return []; - } - - var splits = []; - var displayLength = tokens.length; - var lastSplit = 0, lastDocSplit = 0; - - var isCode = this.$wrapAsCode; - - var indentedSoftWrap = this.$indentedSoftWrap; - var maxIndent = wrapLimit <= Math.max(2 * tabSize, 8) - || indentedSoftWrap === false ? 0 : Math.floor(wrapLimit / 2); - - function getWrapIndent() { - var indentation = 0; - if (maxIndent === 0) - return indentation; - if (indentedSoftWrap) { - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - if (token == SPACE) - indentation += 1; - else if (token == TAB) - indentation += tabSize; - else if (token == TAB_SPACE) - continue; - else - break; - } - } - if (isCode && indentedSoftWrap !== false) - indentation += tabSize; - return Math.min(indentation, maxIndent); - } - function addSplit(screenPos) { - var displayed = tokens.slice(lastSplit, screenPos); - var len = displayed.length; - displayed.join("") - .replace(/12/g, function() { - len -= 1; - }) - .replace(/2/g, function() { - len -= 1; - }); - - if (!splits.length) { - indent = getWrapIndent(); - splits.indent = indent; - } - lastDocSplit += len; - splits.push(lastDocSplit); - lastSplit = screenPos; - } - var indent = 0; - while (displayLength - lastSplit > wrapLimit - indent) { - var split = lastSplit + wrapLimit - indent; - if (tokens[split - 1] >= SPACE && tokens[split] >= SPACE) { - addSplit(split); - continue; - } - if (tokens[split] == PLACEHOLDER_START || tokens[split] == PLACEHOLDER_BODY) { - for (split; split != lastSplit - 1; split--) { - if (tokens[split] == PLACEHOLDER_START) { - break; - } - } - if (split > lastSplit) { - addSplit(split); - continue; - } - split = lastSplit + wrapLimit; - for (split; split < tokens.length; split++) { - if (tokens[split] != PLACEHOLDER_BODY) { - break; - } - } - if (split == tokens.length) { - break; // Breaks the while-loop. - } - addSplit(split); - continue; - } - var minSplit = Math.max(split - (wrapLimit -(wrapLimit>>2)), lastSplit - 1); - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split --; - } - if (isCode) { - while (split > minSplit && tokens[split] < PLACEHOLDER_START) { - split --; - } - while (split > minSplit && tokens[split] == PUNCTUATION) { - split --; - } - } else { - while (split > minSplit && tokens[split] < SPACE) { - split --; - } - } - if (split > minSplit) { - addSplit(++split); - continue; - } - split = lastSplit + wrapLimit; - if (tokens[split] == CHAR_EXT) - split--; - addSplit(split - indent); - } - return splits; - }; - this.$getDisplayTokens = function(str, offset) { - var arr = []; - var tabSize; - offset = offset || 0; - - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c == 9) { - tabSize = this.getScreenTabSize(arr.length + offset); - arr.push(TAB); - for (var n = 1; n < tabSize; n++) { - arr.push(TAB_SPACE); - } - } - else if (c == 32) { - arr.push(SPACE); - } else if((c > 39 && c < 48) || (c > 57 && c < 64)) { - arr.push(PUNCTUATION); - } - else if (c >= 0x1100 && isFullWidth(c)) { - arr.push(CHAR, CHAR_EXT); - } else { - arr.push(CHAR); - } - } - return arr; - }; - this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { - if (maxScreenColumn == 0) - return [0, 0]; - if (maxScreenColumn == null) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charCodeAt(column); - if (c == 9) { - screenColumn += this.getScreenTabSize(screenColumn); - } - else if (c >= 0x1100 && isFullWidth(c)) { - screenColumn += 2; - } else { - screenColumn += 1; - } - if (screenColumn > maxScreenColumn) { - break; - } - } - - return [screenColumn, column]; - }; - - this.lineWidgets = null; - this.getRowLength = function(row) { - if (this.lineWidgets) - var h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - else - h = 0 - if (!this.$useWrapMode || !this.$wrapData[row]) { - return 1 + h; - } else { - return this.$wrapData[row].length + 1 + h; - } - }; - this.getRowLineCount = function(row) { - if (!this.$useWrapMode || !this.$wrapData[row]) { - return 1; - } else { - return this.$wrapData[row].length + 1; - } - }; - - this.getRowWrapIndent = function(screenRow) { - if (this.$useWrapMode) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - var splits = this.$wrapData[pos.row]; - return splits.length && splits[0] < pos.column ? splits.indent : 0; - } else { - return 0; - } - } - this.getScreenLastRowColumn = function(screenRow) { - var pos = this.screenToDocumentPosition(screenRow, Number.MAX_VALUE); - return this.documentToScreenColumn(pos.row, pos.column); - }; - this.getDocumentLastRowColumn = function(docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.getScreenLastRowColumn(screenRow); - }; - this.getDocumentLastRowColumnPosition = function(docRow, docColumn) { - var screenRow = this.documentToScreenRow(docRow, docColumn); - return this.screenToDocumentPosition(screenRow, Number.MAX_VALUE / 10); - }; - this.getRowSplitData = function(row) { - if (!this.$useWrapMode) { - return undefined; - } else { - return this.$wrapData[row]; - } - }; - this.getScreenTabSize = function(screenColumn) { - return this.$tabSize - screenColumn % this.$tabSize; - }; - - - this.screenToDocumentRow = function(screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).row; - }; - - - this.screenToDocumentColumn = function(screenRow, screenColumn) { - return this.screenToDocumentPosition(screenRow, screenColumn).column; - }; - this.screenToDocumentPosition = function(screenRow, screenColumn) { - if (screenRow < 0) - return {row: 0, column: 0}; - - var line; - var docRow = 0; - var docColumn = 0; - var column; - var row = 0; - var rowLength = 0; - - var rowCache = this.$screenRowCache; - var i = this.$getRowCacheIndex(rowCache, screenRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var docRow = this.$docRowCache[i]; - var doCache = screenRow > rowCache[l - 1]; - } else { - var doCache = !l; - } - - var maxRow = this.getLength() - 1; - var foldLine = this.getNextFoldLine(docRow); - var foldStart = foldLine ? foldLine.start.row : Infinity; - - while (row <= screenRow) { - rowLength = this.getRowLength(docRow); - if (row + rowLength > screenRow || docRow >= maxRow) { - break; - } else { - row += rowLength; - docRow++; - if (docRow > foldStart) { - docRow = foldLine.end.row+1; - foldLine = this.getNextFoldLine(docRow, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - } - - if (doCache) { - this.$docRowCache.push(docRow); - this.$screenRowCache.push(row); - } - } - - if (foldLine && foldLine.start.row <= docRow) { - line = this.getFoldDisplayLine(foldLine); - docRow = foldLine.start.row; - } else if (row + rowLength <= screenRow || docRow > maxRow) { - return { - row: maxRow, - column: this.getLine(maxRow).length - }; - } else { - line = this.getLine(docRow); - foldLine = null; - } - var wrapIndent = 0; - if (this.$useWrapMode) { - var splits = this.$wrapData[docRow]; - if (splits) { - var splitIndex = Math.floor(screenRow - row); - column = splits[splitIndex]; - if(splitIndex > 0 && splits.length) { - wrapIndent = splits.indent; - docColumn = splits[splitIndex - 1] || splits[splits.length - 1]; - line = line.substring(docColumn); - } - } - } - - docColumn += this.$getStringScreenWidth(line, screenColumn - wrapIndent)[1]; - if (this.$useWrapMode && docColumn >= column) - docColumn = column - 1; - - if (foldLine) - return foldLine.idxToPosition(docColumn); - - return {row: docRow, column: docColumn}; - }; - this.documentToScreenPosition = function(docRow, docColumn) { - if (typeof docColumn === "undefined") - var pos = this.$clipPositionToDocument(docRow.row, docRow.column); - else - pos = this.$clipPositionToDocument(docRow, docColumn); - - docRow = pos.row; - docColumn = pos.column; - - var screenRow = 0; - var foldStartRow = null; - var fold = null; - fold = this.getFoldAt(docRow, docColumn, 1); - if (fold) { - docRow = fold.start.row; - docColumn = fold.start.column; - } - - var rowEnd, row = 0; - - - var rowCache = this.$docRowCache; - var i = this.$getRowCacheIndex(rowCache, docRow); - var l = rowCache.length; - if (l && i >= 0) { - var row = rowCache[i]; - var screenRow = this.$screenRowCache[i]; - var doCache = docRow > rowCache[l - 1]; - } else { - var doCache = !l; - } - - var foldLine = this.getNextFoldLine(row); - var foldStart = foldLine ?foldLine.start.row :Infinity; - - while (row < docRow) { - if (row >= foldStart) { - rowEnd = foldLine.end.row + 1; - if (rowEnd > docRow) - break; - foldLine = this.getNextFoldLine(rowEnd, foldLine); - foldStart = foldLine ?foldLine.start.row :Infinity; - } - else { - rowEnd = row + 1; - } - - screenRow += this.getRowLength(row); - row = rowEnd; - - if (doCache) { - this.$docRowCache.push(row); - this.$screenRowCache.push(screenRow); - } - } - var textLine = ""; - if (foldLine && row >= foldStart) { - textLine = this.getFoldDisplayLine(foldLine, docRow, docColumn); - foldStartRow = foldLine.start.row; - } else { - textLine = this.getLine(docRow).substring(0, docColumn); - foldStartRow = docRow; - } - var wrapIndent = 0; - if (this.$useWrapMode) { - var wrapRow = this.$wrapData[foldStartRow]; - if (wrapRow) { - var screenRowOffset = 0; - while (textLine.length >= wrapRow[screenRowOffset]) { - screenRow ++; - screenRowOffset++; - } - textLine = textLine.substring( - wrapRow[screenRowOffset - 1] || 0, textLine.length - ); - wrapIndent = screenRowOffset > 0 ? wrapRow.indent : 0; - } - } - - return { - row: screenRow, - column: wrapIndent + this.$getStringScreenWidth(textLine)[0] - }; - }; - this.documentToScreenColumn = function(row, docColumn) { - return this.documentToScreenPosition(row, docColumn).column; - }; - this.documentToScreenRow = function(docRow, docColumn) { - return this.documentToScreenPosition(docRow, docColumn).row; - }; - this.getScreenLength = function() { - var screenRows = 0; - var fold = null; - if (!this.$useWrapMode) { - screenRows = this.getLength(); - var foldData = this.$foldData; - for (var i = 0; i < foldData.length; i++) { - fold = foldData[i]; - screenRows -= fold.end.row - fold.start.row; - } - } else { - var lastRow = this.$wrapData.length; - var row = 0, i = 0; - var fold = this.$foldData[i++]; - var foldStart = fold ? fold.start.row :Infinity; - - while (row < lastRow) { - var splits = this.$wrapData[row]; - screenRows += splits ? splits.length + 1 : 1; - row ++; - if (row > foldStart) { - row = fold.end.row+1; - fold = this.$foldData[i++]; - foldStart = fold ?fold.start.row :Infinity; - } - } - } - if (this.lineWidgets) - screenRows += this.$getWidgetScreenLength(); - - return screenRows; - }; - this.$setFontMetrics = function(fm) { - if (!this.$enableVarChar) return; - this.$getStringScreenWidth = function(str, maxScreenColumn, screenColumn) { - if (maxScreenColumn === 0) - return [0, 0]; - if (!maxScreenColumn) - maxScreenColumn = Infinity; - screenColumn = screenColumn || 0; - - var c, column; - for (column = 0; column < str.length; column++) { - c = str.charAt(column); - if (c === "\t") { - screenColumn += this.getScreenTabSize(screenColumn); - } else { - screenColumn += fm.getCharacterWidth(c); - } - if (screenColumn > maxScreenColumn) { - break; - } - } - - return [screenColumn, column]; - }; - }; - - this.destroy = function() { - if (this.bgTokenizer) { - this.bgTokenizer.setDocument(null); - this.bgTokenizer = null; - } - this.$stopWorker(); - }; - function isFullWidth(c) { - if (c < 0x1100) - return false; - return c >= 0x1100 && c <= 0x115F || - c >= 0x11A3 && c <= 0x11A7 || - c >= 0x11FA && c <= 0x11FF || - c >= 0x2329 && c <= 0x232A || - c >= 0x2E80 && c <= 0x2E99 || - c >= 0x2E9B && c <= 0x2EF3 || - c >= 0x2F00 && c <= 0x2FD5 || - c >= 0x2FF0 && c <= 0x2FFB || - c >= 0x3000 && c <= 0x303E || - c >= 0x3041 && c <= 0x3096 || - c >= 0x3099 && c <= 0x30FF || - c >= 0x3105 && c <= 0x312D || - c >= 0x3131 && c <= 0x318E || - c >= 0x3190 && c <= 0x31BA || - c >= 0x31C0 && c <= 0x31E3 || - c >= 0x31F0 && c <= 0x321E || - c >= 0x3220 && c <= 0x3247 || - c >= 0x3250 && c <= 0x32FE || - c >= 0x3300 && c <= 0x4DBF || - c >= 0x4E00 && c <= 0xA48C || - c >= 0xA490 && c <= 0xA4C6 || - c >= 0xA960 && c <= 0xA97C || - c >= 0xAC00 && c <= 0xD7A3 || - c >= 0xD7B0 && c <= 0xD7C6 || - c >= 0xD7CB && c <= 0xD7FB || - c >= 0xF900 && c <= 0xFAFF || - c >= 0xFE10 && c <= 0xFE19 || - c >= 0xFE30 && c <= 0xFE52 || - c >= 0xFE54 && c <= 0xFE66 || - c >= 0xFE68 && c <= 0xFE6B || - c >= 0xFF01 && c <= 0xFF60 || - c >= 0xFFE0 && c <= 0xFFE6; - } - -}).call(EditSession.prototype); - -require("./edit_session/folding").Folding.call(EditSession.prototype); -require("./edit_session/bracket_match").BracketMatch.call(EditSession.prototype); - - -config.defineOptions(EditSession.prototype, "session", { - wrap: { - set: function(value) { - if (!value || value == "off") - value = false; - else if (value == "free") - value = true; - else if (value == "printMargin") - value = -1; - else if (typeof value == "string") - value = parseInt(value, 10) || false; - - if (this.$wrap == value) - return; - this.$wrap = value; - if (!value) { - this.setUseWrapMode(false); - } else { - var col = typeof value == "number" ? value : null; - this.setWrapLimitRange(col, col); - this.setUseWrapMode(true); - } - }, - get: function() { - if (this.getUseWrapMode()) { - if (this.$wrap == -1) - return "printMargin"; - if (!this.getWrapLimitRange().min) - return "free"; - return this.$wrap; - } - return "off"; - }, - handlesSet: true - }, - wrapMethod: { - set: function(val) { - val = val == "auto" - ? this.$mode.type != "text" - : val != "text"; - if (val != this.$wrapAsCode) { - this.$wrapAsCode = val; - if (this.$useWrapMode) { - this.$modified = true; - this.$resetRowCache(0); - this.$updateWrapData(0, this.getLength() - 1); - } - } - }, - initialValue: "auto" - }, - indentedSoftWrap: { initialValue: true }, - firstLineNumber: { - set: function() {this._signal("changeBreakpoint");}, - initialValue: 1 - }, - useWorker: { - set: function(useWorker) { - this.$useWorker = useWorker; - - this.$stopWorker(); - if (useWorker) - this.$startWorker(); - }, - initialValue: true - }, - useSoftTabs: {initialValue: true}, - tabSize: { - set: function(tabSize) { - if (isNaN(tabSize) || this.$tabSize === tabSize) return; - - this.$modified = true; - this.$rowLengthCache = []; - this.$tabSize = tabSize; - this._signal("changeTabSize"); - }, - initialValue: 4, - handlesSet: true - }, - overwrite: { - set: function(val) {this._signal("changeOverwrite");}, - initialValue: false - }, - newLineMode: { - set: function(val) {this.doc.setNewLineMode(val)}, - get: function() {return this.doc.getNewLineMode()}, - handlesSet: true - }, - mode: { - set: function(val) { this.setMode(val) }, - get: function() { return this.$modeId } - } -}); - -exports.EditSession = EditSession; -}); - -ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"], function(require, exports, module) { -"use strict"; - -var lang = require("./lib/lang"); -var oop = require("./lib/oop"); -var Range = require("./range").Range; - -var Search = function() { - this.$options = {}; -}; - -(function() { - this.set = function(options) { - oop.mixin(this.$options, options); - return this; - }; - this.getOptions = function() { - return lang.copyObject(this.$options); - }; - this.setOptions = function(options) { - this.$options = options; - }; - this.find = function(session) { - var options = this.$options; - var iterator = this.$matchIterator(session, options); - if (!iterator) - return false; - - var firstRange = null; - iterator.forEach(function(range, row, offset) { - if (!range.start) { - var column = range.offset + (offset || 0); - firstRange = new Range(row, column, row, column + range.length); - if (!range.length && options.start && options.start.start - && options.skipCurrent != false && firstRange.isEqual(options.start) - ) { - firstRange = null; - return false; - } - } else - firstRange = range; - return true; - }); - - return firstRange; - }; - this.findAll = function(session) { - var options = this.$options; - if (!options.needle) - return []; - this.$assembleRegExp(options); - - var range = options.range; - var lines = range - ? session.getLines(range.start.row, range.end.row) - : session.doc.getAllLines(); - - var ranges = []; - var re = options.re; - if (options.$isMultiLine) { - var len = re.length; - var maxRow = lines.length - len; - var prevRange; - outer: for (var row = re.offset || 0; row <= maxRow; row++) { - for (var j = 0; j < len; j++) - if (lines[row + j].search(re[j]) == -1) - continue outer; - - var startLine = lines[row]; - var line = lines[row + len - 1]; - var startIndex = startLine.length - startLine.match(re[0])[0].length; - var endIndex = line.match(re[len - 1])[0].length; - - if (prevRange && prevRange.end.row === row && - prevRange.end.column > startIndex - ) { - continue; - } - ranges.push(prevRange = new Range( - row, startIndex, row + len - 1, endIndex - )); - if (len > 2) - row = row + len - 2; - } - } else { - for (var i = 0; i < lines.length; i++) { - var matches = lang.getMatchOffsets(lines[i], re); - for (var j = 0; j < matches.length; j++) { - var match = matches[j]; - ranges.push(new Range(i, match.offset, i, match.offset + match.length)); - } - } - } - - if (range) { - var startColumn = range.start.column; - var endColumn = range.start.column; - var i = 0, j = ranges.length - 1; - while (i < j && ranges[i].start.column < startColumn && ranges[i].start.row == range.start.row) - i++; - - while (i < j && ranges[j].end.column > endColumn && ranges[j].end.row == range.end.row) - j--; - - ranges = ranges.slice(i, j + 1); - for (i = 0, j = ranges.length; i < j; i++) { - ranges[i].start.row += range.start.row; - ranges[i].end.row += range.start.row; - } - } - - return ranges; - }; - this.replace = function(input, replacement) { - var options = this.$options; - - var re = this.$assembleRegExp(options); - if (options.$isMultiLine) - return replacement; - - if (!re) - return; - - var match = re.exec(input); - if (!match || match[0].length != input.length) - return null; - - replacement = input.replace(re, replacement); - if (options.preserveCase) { - replacement = replacement.split(""); - for (var i = Math.min(input.length, input.length); i--; ) { - var ch = input[i]; - if (ch && ch.toLowerCase() != ch) - replacement[i] = replacement[i].toUpperCase(); - else - replacement[i] = replacement[i].toLowerCase(); - } - replacement = replacement.join(""); - } - - return replacement; - }; - - this.$matchIterator = function(session, options) { - var re = this.$assembleRegExp(options); - if (!re) - return false; - - var callback; - if (options.$isMultiLine) { - var len = re.length; - var matchIterator = function(line, row, offset) { - var startIndex = line.search(re[0]); - if (startIndex == -1) - return; - for (var i = 1; i < len; i++) { - line = session.getLine(row + i); - if (line.search(re[i]) == -1) - return; - } - - var endIndex = line.match(re[len - 1])[0].length; - - var range = new Range(row, startIndex, row + len - 1, endIndex); - if (re.offset == 1) { - range.start.row--; - range.start.column = Number.MAX_VALUE; - } else if (offset) - range.start.column += offset; - - if (callback(range)) - return true; - }; - } else if (options.backwards) { - var matchIterator = function(line, row, startIndex) { - var matches = lang.getMatchOffsets(line, re); - for (var i = matches.length-1; i >= 0; i--) - if (callback(matches[i], row, startIndex)) - return true; - }; - } else { - var matchIterator = function(line, row, startIndex) { - var matches = lang.getMatchOffsets(line, re); - for (var i = 0; i < matches.length; i++) - if (callback(matches[i], row, startIndex)) - return true; - }; - } - - var lineIterator = this.$lineIterator(session, options); - - return { - forEach: function(_callback) { - callback = _callback; - lineIterator.forEach(matchIterator); - } - }; - }; - - this.$assembleRegExp = function(options, $disableFakeMultiline) { - if (options.needle instanceof RegExp) - return options.re = options.needle; - - var needle = options.needle; - - if (!options.needle) - return options.re = false; - - if (!options.regExp) - needle = lang.escapeRegExp(needle); - - if (options.wholeWord) - needle = "\\b" + needle + "\\b"; - - var modifier = options.caseSensitive ? "gm" : "gmi"; - - options.$isMultiLine = !$disableFakeMultiline && /[\n\r]/.test(needle); - if (options.$isMultiLine) - return options.re = this.$assembleMultilineRegExp(needle, modifier); - - try { - var re = new RegExp(needle, modifier); - } catch(e) { - re = false; - } - return options.re = re; - }; - - this.$assembleMultilineRegExp = function(needle, modifier) { - var parts = needle.replace(/\r\n|\r|\n/g, "$\n^").split("\n"); - var re = []; - for (var i = 0; i < parts.length; i++) try { - re.push(new RegExp(parts[i], modifier)); - } catch(e) { - return false; - } - if (parts[0] == "") { - re.shift(); - re.offset = 1; - } else { - re.offset = 0; - } - return re; - }; - - this.$lineIterator = function(session, options) { - var backwards = options.backwards == true; - var skipCurrent = options.skipCurrent != false; - - var range = options.range; - var start = options.start; - if (!start) - start = range ? range[backwards ? "end" : "start"] : session.selection.getRange(); - - if (start.start) - start = start[skipCurrent != backwards ? "end" : "start"]; - - var firstRow = range ? range.start.row : 0; - var lastRow = range ? range.end.row : session.getLength() - 1; - - var forEach = backwards ? function(callback) { - var row = start.row; - - var line = session.getLine(row).substring(0, start.column); - if (callback(line, row)) - return; - - for (row--; row >= firstRow; row--) - if (callback(session.getLine(row), row)) - return; - - if (options.wrap == false) - return; - - for (row = lastRow, firstRow = start.row; row >= firstRow; row--) - if (callback(session.getLine(row), row)) - return; - } : function(callback) { - var row = start.row; - - var line = session.getLine(row).substr(start.column); - if (callback(line, row, start.column)) - return; - - for (row = row+1; row <= lastRow; row++) - if (callback(session.getLine(row), row)) - return; - - if (options.wrap == false) - return; - - for (row = firstRow, lastRow = start.row; row <= lastRow; row++) - if (callback(session.getLine(row), row)) - return; - }; - - return {forEach: forEach}; - }; - -}).call(Search.prototype); - -exports.Search = Search; -}); - -ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"], function(require, exports, module) { -"use strict"; - -var keyUtil = require("../lib/keys"); -var useragent = require("../lib/useragent"); -var KEY_MODS = keyUtil.KEY_MODS; - -function HashHandler(config, platform) { - this.platform = platform || (useragent.isMac ? "mac" : "win"); - this.commands = {}; - this.commandKeyBinding = {}; - this.addCommands(config); - this.$singleCommand = true; -} - -function MultiHashHandler(config, platform) { - HashHandler.call(this, config, platform); - this.$singleCommand = false; -} - -MultiHashHandler.prototype = HashHandler.prototype; - -(function() { - - - this.addCommand = function(command) { - if (this.commands[command.name]) - this.removeCommand(command); - - this.commands[command.name] = command; - - if (command.bindKey) - this._buildKeyHash(command); - }; - - this.removeCommand = function(command, keepCommand) { - var name = command && (typeof command === 'string' ? command : command.name); - command = this.commands[name]; - if (!keepCommand) - delete this.commands[name]; - var ckb = this.commandKeyBinding; - for (var keyId in ckb) { - var cmdGroup = ckb[keyId]; - if (cmdGroup == command) { - delete ckb[keyId]; - } else if (Array.isArray(cmdGroup)) { - var i = cmdGroup.indexOf(command); - if (i != -1) { - cmdGroup.splice(i, 1); - if (cmdGroup.length == 1) - ckb[keyId] = cmdGroup[0]; - } - } - } - }; - - this.bindKey = function(key, command, position) { - if (typeof key == "object" && key) { - if (position == undefined) - position = key.position; - key = key[this.platform]; - } - if (!key) - return; - if (typeof command == "function") - return this.addCommand({exec: command, bindKey: key, name: command.name || key}); - - key.split("|").forEach(function(keyPart) { - var chain = ""; - if (keyPart.indexOf(" ") != -1) { - var parts = keyPart.split(/\s+/); - keyPart = parts.pop(); - parts.forEach(function(keyPart) { - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - chain += (chain ? " " : "") + id; - this._addCommandToBinding(chain, "chainKeys"); - }, this); - chain += " "; - } - var binding = this.parseKeys(keyPart); - var id = KEY_MODS[binding.hashId] + binding.key; - this._addCommandToBinding(chain + id, command, position); - }, this); - }; - - function getPosition(command) { - return typeof command == "object" && command.bindKey - && command.bindKey.position || 0; - } - this._addCommandToBinding = function(keyId, command, position) { - var ckb = this.commandKeyBinding, i; - if (!command) { - delete ckb[keyId]; - } else if (!ckb[keyId] || this.$singleCommand) { - ckb[keyId] = command; - } else { - if (!Array.isArray(ckb[keyId])) { - ckb[keyId] = [ckb[keyId]]; - } else if ((i = ckb[keyId].indexOf(command)) != -1) { - ckb[keyId].splice(i, 1); - } - - if (typeof position != "number") { - if (position || command.isDefault) - position = -100; - else - position = getPosition(command); - } - var commands = ckb[keyId]; - for (i = 0; i < commands.length; i++) { - var other = commands[i]; - var otherPos = getPosition(other); - if (otherPos > position) - break; - } - commands.splice(i, 0, command); - } - }; - - this.addCommands = function(commands) { - commands && Object.keys(commands).forEach(function(name) { - var command = commands[name]; - if (!command) - return; - - if (typeof command === "string") - return this.bindKey(command, name); - - if (typeof command === "function") - command = { exec: command }; - - if (typeof command !== "object") - return; - - if (!command.name) - command.name = name; - - this.addCommand(command); - }, this); - }; - - this.removeCommands = function(commands) { - Object.keys(commands).forEach(function(name) { - this.removeCommand(commands[name]); - }, this); - }; - - this.bindKeys = function(keyList) { - Object.keys(keyList).forEach(function(key) { - this.bindKey(key, keyList[key]); - }, this); - }; - - this._buildKeyHash = function(command) { - this.bindKey(command.bindKey, command); - }; - this.parseKeys = function(keys) { - var parts = keys.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(x){return x}); - var key = parts.pop(); - - var keyCode = keyUtil[key]; - if (keyUtil.FUNCTION_KEYS[keyCode]) - key = keyUtil.FUNCTION_KEYS[keyCode].toLowerCase(); - else if (!parts.length) - return {key: key, hashId: -1}; - else if (parts.length == 1 && parts[0] == "shift") - return {key: key.toUpperCase(), hashId: -1}; - - var hashId = 0; - for (var i = parts.length; i--;) { - var modifier = keyUtil.KEY_MODS[parts[i]]; - if (modifier == null) { - if (typeof console != "undefined") - console.error("invalid modifier " + parts[i] + " in " + keys); - return false; - } - hashId |= modifier; - } - return {key: key, hashId: hashId}; - }; - - this.findKeyCommand = function findKeyCommand(hashId, keyString) { - var key = KEY_MODS[hashId] + keyString; - return this.commandKeyBinding[key]; - }; - - this.handleKeyboard = function(data, hashId, keyString, keyCode) { - if (keyCode < 0) return; - var key = KEY_MODS[hashId] + keyString; - var command = this.commandKeyBinding[key]; - if (data.$keyChain) { - data.$keyChain += " " + key; - command = this.commandKeyBinding[data.$keyChain] || command; - } - - if (command) { - if (command == "chainKeys" || command[command.length - 1] == "chainKeys") { - data.$keyChain = data.$keyChain || key; - return {command: "null"}; - } - } - - if (data.$keyChain) { - if ((!hashId || hashId == 4) && keyString.length == 1) - data.$keyChain = data.$keyChain.slice(0, -key.length - 1); // wait for input - else if (hashId == -1 || keyCode > 0) - data.$keyChain = ""; // reset keyChain - } - return {command: command}; - }; - - this.getStatusText = function(editor, data) { - return data.$keyChain || ""; - }; - -}).call(HashHandler.prototype); - -exports.HashHandler = HashHandler; -exports.MultiHashHandler = MultiHashHandler; -}); - -ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var MultiHashHandler = require("../keyboard/hash_handler").MultiHashHandler; -var EventEmitter = require("../lib/event_emitter").EventEmitter; - -var CommandManager = function(platform, commands) { - MultiHashHandler.call(this, commands, platform); - this.byName = this.commands; - this.setDefaultHandler("exec", function(e) { - return e.command.exec(e.editor, e.args || {}); - }); -}; - -oop.inherits(CommandManager, MultiHashHandler); - -(function() { - - oop.implement(this, EventEmitter); - - this.exec = function(command, editor, args) { - if (Array.isArray(command)) { - for (var i = command.length; i--; ) { - if (this.exec(command[i], editor, args)) return true; - } - return false; - } - - if (typeof command === "string") - command = this.commands[command]; - - if (!command) - return false; - - if (editor && editor.$readOnly && !command.readOnly) - return false; - - var e = {editor: editor, command: command, args: args}; - e.returnValue = this._emit("exec", e); - this._signal("afterExec", e); - - return e.returnValue === false ? false : true; - }; - - this.toggleRecording = function(editor) { - if (this.$inReplay) - return; - - editor && editor._emit("changeStatus"); - if (this.recording) { - this.macro.pop(); - this.removeEventListener("exec", this.$addCommandToMacro); - - if (!this.macro.length) - this.macro = this.oldMacro; - - return this.recording = false; - } - if (!this.$addCommandToMacro) { - this.$addCommandToMacro = function(e) { - this.macro.push([e.command, e.args]); - }.bind(this); - } - - this.oldMacro = this.macro; - this.macro = []; - this.on("exec", this.$addCommandToMacro); - return this.recording = true; - }; - - this.replay = function(editor) { - if (this.$inReplay || !this.macro) - return; - - if (this.recording) - return this.toggleRecording(editor); - - try { - this.$inReplay = true; - this.macro.forEach(function(x) { - if (typeof x == "string") - this.exec(x, editor); - else - this.exec(x[0], editor, x[1]); - }, this); - } finally { - this.$inReplay = false; - } - }; - - this.trimMacro = function(m) { - return m.map(function(x){ - if (typeof x[0] != "string") - x[0] = x[0].name; - if (!x[1]) - x = x[0]; - return x; - }); - }; - -}).call(CommandManager.prototype); - -exports.CommandManager = CommandManager; - -}); - -ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"], function(require, exports, module) { -"use strict"; - -var lang = require("../lib/lang"); -var config = require("../config"); -var Range = require("../range").Range; - -function bindKey(win, mac) { - return {win: win, mac: mac}; -} -exports.commands = [{ - name: "showSettingsMenu", - bindKey: bindKey("Ctrl-,", "Command-,"), - exec: function(editor) { - config.loadModule("ace/ext/settings_menu", function(module) { - module.init(editor); - editor.showSettingsMenu(); - }); - }, - readOnly: true -}, { - name: "goToNextError", - bindKey: bindKey("Alt-E", "Ctrl-E"), - exec: function(editor) { - config.loadModule("ace/ext/error_marker", function(module) { - module.showErrorMarker(editor, 1); - }); - }, - scrollIntoView: "animate", - readOnly: true -}, { - name: "goToPreviousError", - bindKey: bindKey("Alt-Shift-E", "Ctrl-Shift-E"), - exec: function(editor) { - config.loadModule("ace/ext/error_marker", function(module) { - module.showErrorMarker(editor, -1); - }); - }, - scrollIntoView: "animate", - readOnly: true -}, { - name: "selectall", - bindKey: bindKey("Ctrl-A", "Command-A"), - exec: function(editor) { editor.selectAll(); }, - readOnly: true -}, { - name: "centerselection", - bindKey: bindKey(null, "Ctrl-L"), - exec: function(editor) { editor.centerSelection(); }, - readOnly: true -}, { - name: "gotoline", - bindKey: bindKey("Ctrl-L", "Command-L"), - exec: function(editor) { - var line = parseInt(prompt("Enter line number:"), 10); - if (!isNaN(line)) { - editor.gotoLine(line); - } - }, - readOnly: true -}, { - name: "fold", - bindKey: bindKey("Alt-L|Ctrl-F1", "Command-Alt-L|Command-F1"), - exec: function(editor) { editor.session.toggleFold(false); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "unfold", - bindKey: bindKey("Alt-Shift-L|Ctrl-Shift-F1", "Command-Alt-Shift-L|Command-Shift-F1"), - exec: function(editor) { editor.session.toggleFold(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "toggleFoldWidget", - bindKey: bindKey("F2", "F2"), - exec: function(editor) { editor.session.toggleFoldWidget(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "toggleParentFoldWidget", - bindKey: bindKey("Alt-F2", "Alt-F2"), - exec: function(editor) { editor.session.toggleFoldWidget(true); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "foldall", - bindKey: bindKey(null, "Ctrl-Command-Option-0"), - exec: function(editor) { editor.session.foldAll(); }, - scrollIntoView: "center", - readOnly: true -}, { - name: "foldOther", - bindKey: bindKey("Alt-0", "Command-Option-0"), - exec: function(editor) { - editor.session.foldAll(); - editor.session.unfold(editor.selection.getAllRanges()); - }, - scrollIntoView: "center", - readOnly: true -}, { - name: "unfoldall", - bindKey: bindKey("Alt-Shift-0", "Command-Option-Shift-0"), - exec: function(editor) { editor.session.unfold(); }, - scrollIntoView: "center", - readOnly: true -}, { - name: "findnext", - bindKey: bindKey("Ctrl-K", "Command-G"), - exec: function(editor) { editor.findNext(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "findprevious", - bindKey: bindKey("Ctrl-Shift-K", "Command-Shift-G"), - exec: function(editor) { editor.findPrevious(); }, - multiSelectAction: "forEach", - scrollIntoView: "center", - readOnly: true -}, { - name: "selectOrFindNext", - bindKey: bindKey("Alt-K", "Ctrl-G"), - exec: function(editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findNext(); - }, - readOnly: true -}, { - name: "selectOrFindPrevious", - bindKey: bindKey("Alt-Shift-K", "Ctrl-Shift-G"), - exec: function(editor) { - if (editor.selection.isEmpty()) - editor.selection.selectWord(); - else - editor.findPrevious(); - }, - readOnly: true -}, { - name: "find", - bindKey: bindKey("Ctrl-F", "Command-F"), - exec: function(editor) { - config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor)}); - }, - readOnly: true -}, { - name: "overwrite", - bindKey: "Insert", - exec: function(editor) { editor.toggleOverwrite(); }, - readOnly: true -}, { - name: "selecttostart", - bindKey: bindKey("Ctrl-Shift-Home", "Command-Shift-Up"), - exec: function(editor) { editor.getSelection().selectFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" -}, { - name: "gotostart", - bindKey: bindKey("Ctrl-Home", "Command-Home|Command-Up"), - exec: function(editor) { editor.navigateFileStart(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" -}, { - name: "selectup", - bindKey: bindKey("Shift-Up", "Shift-Up"), - exec: function(editor) { editor.getSelection().selectUp(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "golineup", - bindKey: bindKey("Up", "Up|Ctrl-P"), - exec: function(editor, args) { editor.navigateUp(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selecttoend", - bindKey: bindKey("Ctrl-Shift-End", "Command-Shift-Down"), - exec: function(editor) { editor.getSelection().selectFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" -}, { - name: "gotoend", - bindKey: bindKey("Ctrl-End", "Command-End|Command-Down"), - exec: function(editor) { editor.navigateFileEnd(); }, - multiSelectAction: "forEach", - readOnly: true, - scrollIntoView: "animate", - aceCommandGroup: "fileJump" -}, { - name: "selectdown", - bindKey: bindKey("Shift-Down", "Shift-Down"), - exec: function(editor) { editor.getSelection().selectDown(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "golinedown", - bindKey: bindKey("Down", "Down|Ctrl-N"), - exec: function(editor, args) { editor.navigateDown(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectwordleft", - bindKey: bindKey("Ctrl-Shift-Left", "Option-Shift-Left"), - exec: function(editor) { editor.getSelection().selectWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotowordleft", - bindKey: bindKey("Ctrl-Left", "Option-Left"), - exec: function(editor) { editor.navigateWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selecttolinestart", - bindKey: bindKey("Alt-Shift-Left", "Command-Shift-Left"), - exec: function(editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotolinestart", - bindKey: bindKey("Alt-Left|Home", "Command-Left|Home|Ctrl-A"), - exec: function(editor) { editor.navigateLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectleft", - bindKey: bindKey("Shift-Left", "Shift-Left"), - exec: function(editor) { editor.getSelection().selectLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotoleft", - bindKey: bindKey("Left", "Left|Ctrl-B"), - exec: function(editor, args) { editor.navigateLeft(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectwordright", - bindKey: bindKey("Ctrl-Shift-Right", "Option-Shift-Right"), - exec: function(editor) { editor.getSelection().selectWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotowordright", - bindKey: bindKey("Ctrl-Right", "Option-Right"), - exec: function(editor) { editor.navigateWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selecttolineend", - bindKey: bindKey("Alt-Shift-Right", "Command-Shift-Right"), - exec: function(editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotolineend", - bindKey: bindKey("Alt-Right|End", "Command-Right|End|Ctrl-E"), - exec: function(editor) { editor.navigateLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectright", - bindKey: bindKey("Shift-Right", "Shift-Right"), - exec: function(editor) { editor.getSelection().selectRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "gotoright", - bindKey: bindKey("Right", "Right|Ctrl-F"), - exec: function(editor, args) { editor.navigateRight(args.times); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectpagedown", - bindKey: "Shift-PageDown", - exec: function(editor) { editor.selectPageDown(); }, - readOnly: true -}, { - name: "pagedown", - bindKey: bindKey(null, "Option-PageDown"), - exec: function(editor) { editor.scrollPageDown(); }, - readOnly: true -}, { - name: "gotopagedown", - bindKey: bindKey("PageDown", "PageDown|Ctrl-V"), - exec: function(editor) { editor.gotoPageDown(); }, - readOnly: true -}, { - name: "selectpageup", - bindKey: "Shift-PageUp", - exec: function(editor) { editor.selectPageUp(); }, - readOnly: true -}, { - name: "pageup", - bindKey: bindKey(null, "Option-PageUp"), - exec: function(editor) { editor.scrollPageUp(); }, - readOnly: true -}, { - name: "gotopageup", - bindKey: "PageUp", - exec: function(editor) { editor.gotoPageUp(); }, - readOnly: true -}, { - name: "scrollup", - bindKey: bindKey("Ctrl-Up", null), - exec: function(e) { e.renderer.scrollBy(0, -2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true -}, { - name: "scrolldown", - bindKey: bindKey("Ctrl-Down", null), - exec: function(e) { e.renderer.scrollBy(0, 2 * e.renderer.layerConfig.lineHeight); }, - readOnly: true -}, { - name: "selectlinestart", - bindKey: "Shift-Home", - exec: function(editor) { editor.getSelection().selectLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectlineend", - bindKey: "Shift-End", - exec: function(editor) { editor.getSelection().selectLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "togglerecording", - bindKey: bindKey("Ctrl-Alt-E", "Command-Option-E"), - exec: function(editor) { editor.commands.toggleRecording(editor); }, - readOnly: true -}, { - name: "replaymacro", - bindKey: bindKey("Ctrl-Shift-E", "Command-Shift-E"), - exec: function(editor) { editor.commands.replay(editor); }, - readOnly: true -}, { - name: "jumptomatching", - bindKey: bindKey("Ctrl-P", "Ctrl-P"), - exec: function(editor) { editor.jumpToMatching(); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true -}, { - name: "selecttomatching", - bindKey: bindKey("Ctrl-Shift-P", "Ctrl-Shift-P"), - exec: function(editor) { editor.jumpToMatching(true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true -}, { - name: "expandToMatching", - bindKey: bindKey("Ctrl-Shift-M", "Ctrl-Shift-M"), - exec: function(editor) { editor.jumpToMatching(true, true); }, - multiSelectAction: "forEach", - scrollIntoView: "animate", - readOnly: true -}, { - name: "passKeysToBrowser", - bindKey: bindKey(null, null), - exec: function() {}, - passEvent: true, - readOnly: true -}, { - name: "copy", - exec: function(editor) { - }, - readOnly: true -}, -{ - name: "cut", - exec: function(editor) { - var range = editor.getSelectionRange(); - editor._emit("cut", range); - - if (!editor.selection.isEmpty()) { - editor.session.remove(range); - editor.clearSelection(); - } - }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" -}, { - name: "paste", - exec: function(editor, args) { - editor.$handlePaste(args); - }, - scrollIntoView: "cursor" -}, { - name: "removeline", - bindKey: bindKey("Ctrl-D", "Command-D"), - exec: function(editor) { editor.removeLines(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEachLine" -}, { - name: "duplicateSelection", - bindKey: bindKey("Ctrl-Shift-D", "Command-Shift-D"), - exec: function(editor) { editor.duplicateSelection(); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" -}, { - name: "sortlines", - bindKey: bindKey("Ctrl-Alt-S", "Command-Alt-S"), - exec: function(editor) { editor.sortLines(); }, - scrollIntoView: "selection", - multiSelectAction: "forEachLine" -}, { - name: "togglecomment", - bindKey: bindKey("Ctrl-/", "Command-/"), - exec: function(editor) { editor.toggleCommentLines(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" -}, { - name: "toggleBlockComment", - bindKey: bindKey("Ctrl-Shift-/", "Command-Shift-/"), - exec: function(editor) { editor.toggleBlockComment(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" -}, { - name: "modifyNumberUp", - bindKey: bindKey("Ctrl-Shift-Up", "Alt-Shift-Up"), - exec: function(editor) { editor.modifyNumber(1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" -}, { - name: "modifyNumberDown", - bindKey: bindKey("Ctrl-Shift-Down", "Alt-Shift-Down"), - exec: function(editor) { editor.modifyNumber(-1); }, - scrollIntoView: "cursor", - multiSelectAction: "forEach" -}, { - name: "replace", - bindKey: bindKey("Ctrl-H", "Command-Option-F"), - exec: function(editor) { - config.loadModule("ace/ext/searchbox", function(e) {e.Search(editor, true)}); - } -}, { - name: "undo", - bindKey: bindKey("Ctrl-Z", "Command-Z"), - exec: function(editor) { editor.undo(); } -}, { - name: "redo", - bindKey: bindKey("Ctrl-Shift-Z|Ctrl-Y", "Command-Shift-Z|Command-Y"), - exec: function(editor) { editor.redo(); } -}, { - name: "copylinesup", - bindKey: bindKey("Alt-Shift-Up", "Command-Option-Up"), - exec: function(editor) { editor.copyLinesUp(); }, - scrollIntoView: "cursor" -}, { - name: "movelinesup", - bindKey: bindKey("Alt-Up", "Option-Up"), - exec: function(editor) { editor.moveLinesUp(); }, - scrollIntoView: "cursor" -}, { - name: "copylinesdown", - bindKey: bindKey("Alt-Shift-Down", "Command-Option-Down"), - exec: function(editor) { editor.copyLinesDown(); }, - scrollIntoView: "cursor" -}, { - name: "movelinesdown", - bindKey: bindKey("Alt-Down", "Option-Down"), - exec: function(editor) { editor.moveLinesDown(); }, - scrollIntoView: "cursor" -}, { - name: "del", - bindKey: bindKey("Delete", "Delete|Ctrl-D|Shift-Delete"), - exec: function(editor) { editor.remove("right"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "backspace", - bindKey: bindKey( - "Shift-Backspace|Backspace", - "Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H" - ), - exec: function(editor) { editor.remove("left"); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "cut_or_delete", - bindKey: bindKey("Shift-Delete", null), - exec: function(editor) { - if (editor.selection.isEmpty()) { - editor.remove("left"); - } else { - return false; - } - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "removetolinestart", - bindKey: bindKey("Alt-Backspace", "Command-Backspace"), - exec: function(editor) { editor.removeToLineStart(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "removetolineend", - bindKey: bindKey("Alt-Delete", "Ctrl-K"), - exec: function(editor) { editor.removeToLineEnd(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "removewordleft", - bindKey: bindKey("Ctrl-Backspace", "Alt-Backspace|Ctrl-Alt-Backspace"), - exec: function(editor) { editor.removeWordLeft(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "removewordright", - bindKey: bindKey("Ctrl-Delete", "Alt-Delete"), - exec: function(editor) { editor.removeWordRight(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "outdent", - bindKey: bindKey("Shift-Tab", "Shift-Tab"), - exec: function(editor) { editor.blockOutdent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" -}, { - name: "indent", - bindKey: bindKey("Tab", "Tab"), - exec: function(editor) { editor.indent(); }, - multiSelectAction: "forEach", - scrollIntoView: "selectionPart" -}, { - name: "blockoutdent", - bindKey: bindKey("Ctrl-[", "Ctrl-["), - exec: function(editor) { editor.blockOutdent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" -}, { - name: "blockindent", - bindKey: bindKey("Ctrl-]", "Ctrl-]"), - exec: function(editor) { editor.blockIndent(); }, - multiSelectAction: "forEachLine", - scrollIntoView: "selectionPart" -}, { - name: "insertstring", - exec: function(editor, str) { editor.insert(str); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "inserttext", - exec: function(editor, args) { - editor.insert(lang.stringRepeat(args.text || "", args.times || 1)); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "splitline", - bindKey: bindKey(null, "Ctrl-O"), - exec: function(editor) { editor.splitLine(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "transposeletters", - bindKey: bindKey("Ctrl-T", "Ctrl-T"), - exec: function(editor) { editor.transposeLetters(); }, - multiSelectAction: function(editor) {editor.transposeSelections(1); }, - scrollIntoView: "cursor" -}, { - name: "touppercase", - bindKey: bindKey("Ctrl-U", "Ctrl-U"), - exec: function(editor) { editor.toUpperCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "tolowercase", - bindKey: bindKey("Ctrl-Shift-U", "Ctrl-Shift-U"), - exec: function(editor) { editor.toLowerCase(); }, - multiSelectAction: "forEach", - scrollIntoView: "cursor" -}, { - name: "expandtoline", - bindKey: bindKey("Ctrl-Shift-L", "Command-Shift-L"), - exec: function(editor) { - var range = editor.selection.getRange(); - - range.start.column = range.end.column = 0; - range.end.row++; - editor.selection.setRange(range, false); - }, - multiSelectAction: "forEach", - scrollIntoView: "cursor", - readOnly: true -}, { - name: "joinlines", - bindKey: bindKey(null, null), - exec: function(editor) { - var isBackwards = editor.selection.isBackwards(); - var selectionStart = isBackwards ? editor.selection.getSelectionLead() : editor.selection.getSelectionAnchor(); - var selectionEnd = isBackwards ? editor.selection.getSelectionAnchor() : editor.selection.getSelectionLead(); - var firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length; - var selectedText = editor.session.doc.getTextRange(editor.selection.getRange()); - var selectedCount = selectedText.replace(/\n\s*/, " ").length; - var insertLine = editor.session.doc.getLine(selectionStart.row); - - for (var i = selectionStart.row + 1; i <= selectionEnd.row + 1; i++) { - var curLine = lang.stringTrimLeft(lang.stringTrimRight(editor.session.doc.getLine(i))); - if (curLine.length !== 0) { - curLine = " " + curLine; - } - insertLine += curLine; - } - - if (selectionEnd.row + 1 < (editor.session.doc.getLength() - 1)) { - insertLine += editor.session.doc.getNewLineCharacter(); - } - - editor.clearSelection(); - editor.session.doc.replace(new Range(selectionStart.row, 0, selectionEnd.row + 2, 0), insertLine); - - if (selectedCount > 0) { - editor.selection.moveCursorTo(selectionStart.row, selectionStart.column); - editor.selection.selectTo(selectionStart.row, selectionStart.column + selectedCount); - } else { - firstLineEndCol = editor.session.doc.getLine(selectionStart.row).length > firstLineEndCol ? (firstLineEndCol + 1) : firstLineEndCol; - editor.selection.moveCursorTo(selectionStart.row, firstLineEndCol); - } - }, - multiSelectAction: "forEach", - readOnly: true -}, { - name: "invertSelection", - bindKey: bindKey(null, null), - exec: function(editor) { - var endRow = editor.session.doc.getLength() - 1; - var endCol = editor.session.doc.getLine(endRow).length; - var ranges = editor.selection.rangeList.ranges; - var newRanges = []; - if (ranges.length < 1) { - ranges = [editor.selection.getRange()]; - } - - for (var i = 0; i < ranges.length; i++) { - if (i == (ranges.length - 1)) { - if (!(ranges[i].end.row === endRow && ranges[i].end.column === endCol)) { - newRanges.push(new Range(ranges[i].end.row, ranges[i].end.column, endRow, endCol)); - } - } - - if (i === 0) { - if (!(ranges[i].start.row === 0 && ranges[i].start.column === 0)) { - newRanges.push(new Range(0, 0, ranges[i].start.row, ranges[i].start.column)); - } - } else { - newRanges.push(new Range(ranges[i-1].end.row, ranges[i-1].end.column, ranges[i].start.row, ranges[i].start.column)); - } - } - - editor.exitMultiSelectMode(); - editor.clearSelection(); - - for(var i = 0; i < newRanges.length; i++) { - editor.selection.addRange(newRanges[i], false); - } - }, - readOnly: true, - scrollIntoView: "none" -}]; - -}); - -ace.define("ace/editor",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/keyboard/textinput","ace/mouse/mouse_handler","ace/mouse/fold_handler","ace/keyboard/keybinding","ace/edit_session","ace/search","ace/range","ace/lib/event_emitter","ace/commands/command_manager","ace/commands/default_commands","ace/config","ace/token_iterator"], function(require, exports, module) { -"use strict"; - -require("./lib/fixoldbrowsers"); - -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var lang = require("./lib/lang"); -var useragent = require("./lib/useragent"); -var TextInput = require("./keyboard/textinput").TextInput; -var MouseHandler = require("./mouse/mouse_handler").MouseHandler; -var FoldHandler = require("./mouse/fold_handler").FoldHandler; -var KeyBinding = require("./keyboard/keybinding").KeyBinding; -var EditSession = require("./edit_session").EditSession; -var Search = require("./search").Search; -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var CommandManager = require("./commands/command_manager").CommandManager; -var defaultCommands = require("./commands/default_commands").commands; -var config = require("./config"); -var TokenIterator = require("./token_iterator").TokenIterator; -var Editor = function(renderer, session) { - var container = renderer.getContainerElement(); - this.container = container; - this.renderer = renderer; - - this.commands = new CommandManager(useragent.isMac ? "mac" : "win", defaultCommands); - this.textInput = new TextInput(renderer.getTextAreaContainer(), this); - this.renderer.textarea = this.textInput.getElement(); - this.keyBinding = new KeyBinding(this); - this.$mouseHandler = new MouseHandler(this); - new FoldHandler(this); - - this.$blockScrolling = 0; - this.$search = new Search().set({ - wrap: true - }); - - this.$historyTracker = this.$historyTracker.bind(this); - this.commands.on("exec", this.$historyTracker); - - this.$initOperationListeners(); - - this._$emitInputEvent = lang.delayedCall(function() { - this._signal("input", {}); - if (this.session && this.session.bgTokenizer) - this.session.bgTokenizer.scheduleStart(); - }.bind(this)); - - this.on("change", function(_, _self) { - _self._$emitInputEvent.schedule(31); - }); - - this.setSession(session || new EditSession("")); - config.resetOptions(this); - config._signal("editor", this); -}; - -(function(){ - - oop.implement(this, EventEmitter); - - this.$initOperationListeners = function() { - function last(a) {return a[a.length - 1]} - - this.selections = []; - this.commands.on("exec", this.startOperation.bind(this), true); - this.commands.on("afterExec", this.endOperation.bind(this), true); - - this.$opResetTimer = lang.delayedCall(this.endOperation.bind(this)); - - this.on("change", function() { - this.curOp || this.startOperation(); - this.curOp.docChanged = true; - }.bind(this), true); - - this.on("changeSelection", function() { - this.curOp || this.startOperation(); - this.curOp.selectionChanged = true; - }.bind(this), true); - }; - - this.curOp = null; - this.prevOp = {}; - this.startOperation = function(commadEvent) { - if (this.curOp) { - if (!commadEvent || this.curOp.command) - return; - this.prevOp = this.curOp; - } - if (!commadEvent) { - this.previousCommand = null; - commadEvent = {}; - } - - this.$opResetTimer.schedule(); - this.curOp = { - command: commadEvent.command || {}, - args: commadEvent.args, - scrollTop: this.renderer.scrollTop - }; - if (this.curOp.command.name && this.curOp.command.scrollIntoView !== undefined) - this.$blockScrolling++; - }; - - this.endOperation = function(e) { - if (this.curOp) { - if (e && e.returnValue === false) - return this.curOp = null; - this._signal("beforeEndOperation"); - var command = this.curOp.command; - if (command.name && this.$blockScrolling > 0) - this.$blockScrolling--; - var scrollIntoView = command && command.scrollIntoView; - if (scrollIntoView) { - switch (scrollIntoView) { - case "center-animate": - scrollIntoView = "animate"; - case "center": - this.renderer.scrollCursorIntoView(null, 0.5); - break; - case "animate": - case "cursor": - this.renderer.scrollCursorIntoView(); - break; - case "selectionPart": - var range = this.selection.getRange(); - var config = this.renderer.layerConfig; - if (range.start.row >= config.lastRow || range.end.row <= config.firstRow) { - this.renderer.scrollSelectionIntoView(this.selection.anchor, this.selection.lead); - } - break; - default: - break; - } - if (scrollIntoView == "animate") - this.renderer.animateScrolling(this.curOp.scrollTop); - } - - this.prevOp = this.curOp; - this.curOp = null; - } - }; - this.$mergeableCommands = ["backspace", "del", "insertstring"]; - this.$historyTracker = function(e) { - if (!this.$mergeUndoDeltas) - return; - - var prev = this.prevOp; - var mergeableCommands = this.$mergeableCommands; - var shouldMerge = prev.command && (e.command.name == prev.command.name); - if (e.command.name == "insertstring") { - var text = e.args; - if (this.mergeNextCommand === undefined) - this.mergeNextCommand = true; - - shouldMerge = shouldMerge - && this.mergeNextCommand // previous command allows to coalesce with - && (!/\s/.test(text) || /\s/.test(prev.args)); // previous insertion was of same type - - this.mergeNextCommand = true; - } else { - shouldMerge = shouldMerge - && mergeableCommands.indexOf(e.command.name) !== -1; // the command is mergeable - } - - if ( - this.$mergeUndoDeltas != "always" - && Date.now() - this.sequenceStartTime > 2000 - ) { - shouldMerge = false; // the sequence is too long - } - - if (shouldMerge) - this.session.mergeUndoDeltas = true; - else if (mergeableCommands.indexOf(e.command.name) !== -1) - this.sequenceStartTime = Date.now(); - }; - this.setKeyboardHandler = function(keyboardHandler, cb) { - if (keyboardHandler && typeof keyboardHandler === "string") { - this.$keybindingId = keyboardHandler; - var _self = this; - config.loadModule(["keybinding", keyboardHandler], function(module) { - if (_self.$keybindingId == keyboardHandler) - _self.keyBinding.setKeyboardHandler(module && module.handler); - cb && cb(); - }); - } else { - this.$keybindingId = null; - this.keyBinding.setKeyboardHandler(keyboardHandler); - cb && cb(); - } - }; - this.getKeyboardHandler = function() { - return this.keyBinding.getKeyboardHandler(); - }; - this.setSession = function(session) { - if (this.session == session) - return; - if (this.curOp) this.endOperation(); - this.curOp = {}; - - var oldSession = this.session; - if (oldSession) { - this.session.off("change", this.$onDocumentChange); - this.session.off("changeMode", this.$onChangeMode); - this.session.off("tokenizerUpdate", this.$onTokenizerUpdate); - this.session.off("changeTabSize", this.$onChangeTabSize); - this.session.off("changeWrapLimit", this.$onChangeWrapLimit); - this.session.off("changeWrapMode", this.$onChangeWrapMode); - this.session.off("changeFold", this.$onChangeFold); - this.session.off("changeFrontMarker", this.$onChangeFrontMarker); - this.session.off("changeBackMarker", this.$onChangeBackMarker); - this.session.off("changeBreakpoint", this.$onChangeBreakpoint); - this.session.off("changeAnnotation", this.$onChangeAnnotation); - this.session.off("changeOverwrite", this.$onCursorChange); - this.session.off("changeScrollTop", this.$onScrollTopChange); - this.session.off("changeScrollLeft", this.$onScrollLeftChange); - - var selection = this.session.getSelection(); - selection.off("changeCursor", this.$onCursorChange); - selection.off("changeSelection", this.$onSelectionChange); - } - - this.session = session; - if (session) { - this.$onDocumentChange = this.onDocumentChange.bind(this); - session.on("change", this.$onDocumentChange); - this.renderer.setSession(session); - - this.$onChangeMode = this.onChangeMode.bind(this); - session.on("changeMode", this.$onChangeMode); - - this.$onTokenizerUpdate = this.onTokenizerUpdate.bind(this); - session.on("tokenizerUpdate", this.$onTokenizerUpdate); - - this.$onChangeTabSize = this.renderer.onChangeTabSize.bind(this.renderer); - session.on("changeTabSize", this.$onChangeTabSize); - - this.$onChangeWrapLimit = this.onChangeWrapLimit.bind(this); - session.on("changeWrapLimit", this.$onChangeWrapLimit); - - this.$onChangeWrapMode = this.onChangeWrapMode.bind(this); - session.on("changeWrapMode", this.$onChangeWrapMode); - - this.$onChangeFold = this.onChangeFold.bind(this); - session.on("changeFold", this.$onChangeFold); - - this.$onChangeFrontMarker = this.onChangeFrontMarker.bind(this); - this.session.on("changeFrontMarker", this.$onChangeFrontMarker); - - this.$onChangeBackMarker = this.onChangeBackMarker.bind(this); - this.session.on("changeBackMarker", this.$onChangeBackMarker); - - this.$onChangeBreakpoint = this.onChangeBreakpoint.bind(this); - this.session.on("changeBreakpoint", this.$onChangeBreakpoint); - - this.$onChangeAnnotation = this.onChangeAnnotation.bind(this); - this.session.on("changeAnnotation", this.$onChangeAnnotation); - - this.$onCursorChange = this.onCursorChange.bind(this); - this.session.on("changeOverwrite", this.$onCursorChange); - - this.$onScrollTopChange = this.onScrollTopChange.bind(this); - this.session.on("changeScrollTop", this.$onScrollTopChange); - - this.$onScrollLeftChange = this.onScrollLeftChange.bind(this); - this.session.on("changeScrollLeft", this.$onScrollLeftChange); - - this.selection = session.getSelection(); - this.selection.on("changeCursor", this.$onCursorChange); - - this.$onSelectionChange = this.onSelectionChange.bind(this); - this.selection.on("changeSelection", this.$onSelectionChange); - - this.onChangeMode(); - - this.$blockScrolling += 1; - this.onCursorChange(); - this.$blockScrolling -= 1; - - this.onScrollTopChange(); - this.onScrollLeftChange(); - this.onSelectionChange(); - this.onChangeFrontMarker(); - this.onChangeBackMarker(); - this.onChangeBreakpoint(); - this.onChangeAnnotation(); - this.session.getUseWrapMode() && this.renderer.adjustWrapLimit(); - this.renderer.updateFull(); - } else { - this.selection = null; - this.renderer.setSession(session); - } - - this._signal("changeSession", { - session: session, - oldSession: oldSession - }); - - this.curOp = null; - - oldSession && oldSession._signal("changeEditor", {oldEditor: this}); - session && session._signal("changeEditor", {editor: this}); - }; - this.getSession = function() { - return this.session; - }; - this.setValue = function(val, cursorPos) { - this.session.doc.setValue(val); - - if (!cursorPos) - this.selectAll(); - else if (cursorPos == 1) - this.navigateFileEnd(); - else if (cursorPos == -1) - this.navigateFileStart(); - - return val; - }; - this.getValue = function() { - return this.session.getValue(); - }; - this.getSelection = function() { - return this.selection; - }; - this.resize = function(force) { - this.renderer.onResize(force); - }; - this.setTheme = function(theme, cb) { - this.renderer.setTheme(theme, cb); - }; - this.getTheme = function() { - return this.renderer.getTheme(); - }; - this.setStyle = function(style) { - this.renderer.setStyle(style); - }; - this.unsetStyle = function(style) { - this.renderer.unsetStyle(style); - }; - this.getFontSize = function () { - return this.getOption("fontSize") || - dom.computedStyle(this.container, "fontSize"); - }; - this.setFontSize = function(size) { - this.setOption("fontSize", size); - }; - - this.$highlightBrackets = function() { - if (this.session.$bracketHighlight) { - this.session.removeMarker(this.session.$bracketHighlight); - this.session.$bracketHighlight = null; - } - - if (this.$highlightPending) { - return; - } - var self = this; - this.$highlightPending = true; - setTimeout(function() { - self.$highlightPending = false; - var session = self.session; - if (!session || !session.bgTokenizer) return; - var pos = session.findMatchingBracket(self.getCursorPosition()); - if (pos) { - var range = new Range(pos.row, pos.column, pos.row, pos.column + 1); - } else if (session.$mode.getMatching) { - var range = session.$mode.getMatching(self.session); - } - if (range) - session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text"); - }, 50); - }; - this.$highlightTags = function() { - if (this.$highlightTagPending) - return; - var self = this; - this.$highlightTagPending = true; - setTimeout(function() { - self.$highlightTagPending = false; - - var session = self.session; - if (!session || !session.bgTokenizer) return; - - var pos = self.getCursorPosition(); - var iterator = new TokenIterator(self.session, pos.row, pos.column); - var token = iterator.getCurrentToken(); - - if (!token || !/\b(?:tag-open|tag-name)/.test(token.type)) { - session.removeMarker(session.$tagHighlight); - session.$tagHighlight = null; - return; - } - - if (token.type.indexOf("tag-open") != -1) { - token = iterator.stepForward(); - if (!token) - return; - } - - var tag = token.value; - var depth = 0; - var prevToken = iterator.stepBackward(); - - if (prevToken.value == '<'){ - do { - prevToken = token; - token = iterator.stepForward(); - - if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { - if (prevToken.value === '<'){ - depth++; - } else if (prevToken.value === '= 0); - } else { - do { - token = prevToken; - prevToken = iterator.stepBackward(); - - if (token && token.value === tag && token.type.indexOf('tag-name') !== -1) { - if (prevToken.value === '<') { - depth++; - } else if (prevToken.value === ' 1)) - highlight = false; - } - - if (session.$highlightLineMarker && !highlight) { - session.removeMarker(session.$highlightLineMarker.id); - session.$highlightLineMarker = null; - } else if (!session.$highlightLineMarker && highlight) { - var range = new Range(highlight.row, highlight.column, highlight.row, Infinity); - range.id = session.addMarker(range, "ace_active-line", "screenLine"); - session.$highlightLineMarker = range; - } else if (highlight) { - session.$highlightLineMarker.start.row = highlight.row; - session.$highlightLineMarker.end.row = highlight.row; - session.$highlightLineMarker.start.column = highlight.column; - session._signal("changeBackMarker"); - } - }; - - this.onSelectionChange = function(e) { - var session = this.session; - - if (session.$selectionMarker) { - session.removeMarker(session.$selectionMarker); - } - session.$selectionMarker = null; - - if (!this.selection.isEmpty()) { - var range = this.selection.getRange(); - var style = this.getSelectionStyle(); - session.$selectionMarker = session.addMarker(range, "ace_selection", style); - } else { - this.$updateHighlightActiveLine(); - } - - var re = this.$highlightSelectedWord && this.$getSelectionHighLightRegexp(); - this.session.highlight(re); - - this._signal("changeSelection"); - }; - - this.$getSelectionHighLightRegexp = function() { - var session = this.session; - - var selection = this.getSelectionRange(); - if (selection.isEmpty() || selection.isMultiLine()) - return; - - var startOuter = selection.start.column - 1; - var endOuter = selection.end.column + 1; - var line = session.getLine(selection.start.row); - var lineCols = line.length; - var needle = line.substring(Math.max(startOuter, 0), - Math.min(endOuter, lineCols)); - if ((startOuter >= 0 && /^[\w\d]/.test(needle)) || - (endOuter <= lineCols && /[\w\d]$/.test(needle))) - return; - - needle = line.substring(selection.start.column, selection.end.column); - if (!/^[\w\d]+$/.test(needle)) - return; - - var re = this.$search.$assembleRegExp({ - wholeWord: true, - caseSensitive: true, - needle: needle - }); - - return re; - }; - - - this.onChangeFrontMarker = function() { - this.renderer.updateFrontMarkers(); - }; - - this.onChangeBackMarker = function() { - this.renderer.updateBackMarkers(); - }; - - - this.onChangeBreakpoint = function() { - this.renderer.updateBreakpoints(); - }; - - this.onChangeAnnotation = function() { - this.renderer.setAnnotations(this.session.getAnnotations()); - }; - - - this.onChangeMode = function(e) { - this.renderer.updateText(); - this._emit("changeMode", e); - }; - - - this.onChangeWrapLimit = function() { - this.renderer.updateFull(); - }; - - this.onChangeWrapMode = function() { - this.renderer.onResize(true); - }; - - - this.onChangeFold = function() { - this.$updateHighlightActiveLine(); - this.renderer.updateFull(); - }; - this.getSelectedText = function() { - return this.session.getTextRange(this.getSelectionRange()); - }; - this.getCopyText = function() { - var text = this.getSelectedText(); - this._signal("copy", text); - return text; - }; - this.onCopy = function() { - this.commands.exec("copy", this); - }; - this.onCut = function() { - this.commands.exec("cut", this); - }; - this.onPaste = function(text, event) { - var e = {text: text, event: event}; - this.commands.exec("paste", this, e); - }; - - this.$handlePaste = function(e) { - if (typeof e == "string") - e = {text: e}; - this._signal("paste", e); - var text = e.text; - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) { - this.insert(text); - } else { - var lines = text.split(/\r\n|\r|\n/); - var ranges = this.selection.rangeList.ranges; - - if (lines.length > ranges.length || lines.length < 2 || !lines[1]) - return this.commands.exec("insertstring", this, text); - - for (var i = ranges.length; i--;) { - var range = ranges[i]; - if (!range.isEmpty()) - this.session.remove(range); - - this.session.insert(range.start, lines[i]); - } - } - }; - - this.execCommand = function(command, args) { - return this.commands.exec(command, this, args); - }; - this.insert = function(text, pasted) { - var session = this.session; - var mode = session.getMode(); - var cursor = this.getCursorPosition(); - - if (this.getBehavioursEnabled() && !pasted) { - var transform = mode.transformAction(session.getState(cursor.row), 'insertion', this, session, text); - if (transform) { - if (text !== transform.text) { - this.session.mergeUndoDeltas = false; - this.$mergeNextCommand = false; - } - text = transform.text; - - } - } - - if (text == "\t") - text = this.session.getTabString(); - if (!this.selection.isEmpty()) { - var range = this.getSelectionRange(); - cursor = this.session.remove(range); - this.clearSelection(); - } - else if (this.session.getOverwrite()) { - var range = new Range.fromPoints(cursor, cursor); - range.end.column += text.length; - this.session.remove(range); - } - - if (text == "\n" || text == "\r\n") { - var line = session.getLine(cursor.row); - if (cursor.column > line.search(/\S|$/)) { - var d = line.substr(cursor.column).search(/\S|$/); - session.doc.removeInLine(cursor.row, cursor.column, cursor.column + d); - } - } - this.clearSelection(); - - var start = cursor.column; - var lineState = session.getState(cursor.row); - var line = session.getLine(cursor.row); - var shouldOutdent = mode.checkOutdent(lineState, line, text); - var end = session.insert(cursor, text); - - if (transform && transform.selection) { - if (transform.selection.length == 2) { // Transform relative to the current column - this.selection.setSelectionRange( - new Range(cursor.row, start + transform.selection[0], - cursor.row, start + transform.selection[1])); - } else { // Transform relative to the current row. - this.selection.setSelectionRange( - new Range(cursor.row + transform.selection[0], - transform.selection[1], - cursor.row + transform.selection[2], - transform.selection[3])); - } - } - - if (session.getDocument().isNewLine(text)) { - var lineIndent = mode.getNextLineIndent(lineState, line.slice(0, cursor.column), session.getTabString()); - - session.insert({row: cursor.row+1, column: 0}, lineIndent); - } - if (shouldOutdent) - mode.autoOutdent(lineState, session, cursor.row); - }; - - this.onTextInput = function(text) { - this.keyBinding.onTextInput(text); - }; - - this.onCommandKey = function(e, hashId, keyCode) { - this.keyBinding.onCommandKey(e, hashId, keyCode); - }; - this.setOverwrite = function(overwrite) { - this.session.setOverwrite(overwrite); - }; - this.getOverwrite = function() { - return this.session.getOverwrite(); - }; - this.toggleOverwrite = function() { - this.session.toggleOverwrite(); - }; - this.setScrollSpeed = function(speed) { - this.setOption("scrollSpeed", speed); - }; - this.getScrollSpeed = function() { - return this.getOption("scrollSpeed"); - }; - this.setDragDelay = function(dragDelay) { - this.setOption("dragDelay", dragDelay); - }; - this.getDragDelay = function() { - return this.getOption("dragDelay"); - }; - this.setSelectionStyle = function(val) { - this.setOption("selectionStyle", val); - }; - this.getSelectionStyle = function() { - return this.getOption("selectionStyle"); - }; - this.setHighlightActiveLine = function(shouldHighlight) { - this.setOption("highlightActiveLine", shouldHighlight); - }; - this.getHighlightActiveLine = function() { - return this.getOption("highlightActiveLine"); - }; - this.setHighlightGutterLine = function(shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - - this.getHighlightGutterLine = function() { - return this.getOption("highlightGutterLine"); - }; - this.setHighlightSelectedWord = function(shouldHighlight) { - this.setOption("highlightSelectedWord", shouldHighlight); - }; - this.getHighlightSelectedWord = function() { - return this.$highlightSelectedWord; - }; - - this.setAnimatedScroll = function(shouldAnimate){ - this.renderer.setAnimatedScroll(shouldAnimate); - }; - - this.getAnimatedScroll = function(){ - return this.renderer.getAnimatedScroll(); - }; - this.setShowInvisibles = function(showInvisibles) { - this.renderer.setShowInvisibles(showInvisibles); - }; - this.getShowInvisibles = function() { - return this.renderer.getShowInvisibles(); - }; - - this.setDisplayIndentGuides = function(display) { - this.renderer.setDisplayIndentGuides(display); - }; - - this.getDisplayIndentGuides = function() { - return this.renderer.getDisplayIndentGuides(); - }; - this.setShowPrintMargin = function(showPrintMargin) { - this.renderer.setShowPrintMargin(showPrintMargin); - }; - this.getShowPrintMargin = function() { - return this.renderer.getShowPrintMargin(); - }; - this.setPrintMarginColumn = function(showPrintMargin) { - this.renderer.setPrintMarginColumn(showPrintMargin); - }; - this.getPrintMarginColumn = function() { - return this.renderer.getPrintMarginColumn(); - }; - this.setReadOnly = function(readOnly) { - this.setOption("readOnly", readOnly); - }; - this.getReadOnly = function() { - return this.getOption("readOnly"); - }; - this.setBehavioursEnabled = function (enabled) { - this.setOption("behavioursEnabled", enabled); - }; - this.getBehavioursEnabled = function () { - return this.getOption("behavioursEnabled"); - }; - this.setWrapBehavioursEnabled = function (enabled) { - this.setOption("wrapBehavioursEnabled", enabled); - }; - this.getWrapBehavioursEnabled = function () { - return this.getOption("wrapBehavioursEnabled"); - }; - this.setShowFoldWidgets = function(show) { - this.setOption("showFoldWidgets", show); - - }; - this.getShowFoldWidgets = function() { - return this.getOption("showFoldWidgets"); - }; - - this.setFadeFoldWidgets = function(fade) { - this.setOption("fadeFoldWidgets", fade); - }; - - this.getFadeFoldWidgets = function() { - return this.getOption("fadeFoldWidgets"); - }; - this.remove = function(dir) { - if (this.selection.isEmpty()){ - if (dir == "left") - this.selection.selectLeft(); - else - this.selection.selectRight(); - } - - var range = this.getSelectionRange(); - if (this.getBehavioursEnabled()) { - var session = this.session; - var state = session.getState(range.start.row); - var new_range = session.getMode().transformAction(state, 'deletion', this, session, range); - - if (range.end.column === 0) { - var text = session.getTextRange(range); - if (text[text.length - 1] == "\n") { - var line = session.getLine(range.end.row); - if (/^\s+$/.test(line)) { - range.end.column = line.length; - } - } - } - if (new_range) - range = new_range; - } - - this.session.remove(range); - this.clearSelection(); - }; - this.removeWordRight = function() { - if (this.selection.isEmpty()) - this.selection.selectWordRight(); - - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - this.removeWordLeft = function() { - if (this.selection.isEmpty()) - this.selection.selectWordLeft(); - - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - this.removeToLineStart = function() { - if (this.selection.isEmpty()) - this.selection.selectLineStart(); - - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - }; - this.removeToLineEnd = function() { - if (this.selection.isEmpty()) - this.selection.selectLineEnd(); - - var range = this.getSelectionRange(); - if (range.start.column == range.end.column && range.start.row == range.end.row) { - range.end.column = 0; - range.end.row++; - } - - this.session.remove(range); - this.clearSelection(); - }; - this.splitLine = function() { - if (!this.selection.isEmpty()) { - this.session.remove(this.getSelectionRange()); - this.clearSelection(); - } - - var cursor = this.getCursorPosition(); - this.insert("\n"); - this.moveCursorToPosition(cursor); - }; - this.transposeLetters = function() { - if (!this.selection.isEmpty()) { - return; - } - - var cursor = this.getCursorPosition(); - var column = cursor.column; - if (column === 0) - return; - - var line = this.session.getLine(cursor.row); - var swap, range; - if (column < line.length) { - swap = line.charAt(column) + line.charAt(column-1); - range = new Range(cursor.row, column-1, cursor.row, column+1); - } - else { - swap = line.charAt(column-1) + line.charAt(column-2); - range = new Range(cursor.row, column-2, cursor.row, column); - } - this.session.replace(range, swap); - }; - this.toLowerCase = function() { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); - } - - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toLowerCase()); - this.selection.setSelectionRange(originalRange); - }; - this.toUpperCase = function() { - var originalRange = this.getSelectionRange(); - if (this.selection.isEmpty()) { - this.selection.selectWord(); - } - - var range = this.getSelectionRange(); - var text = this.session.getTextRange(range); - this.session.replace(range, text.toUpperCase()); - this.selection.setSelectionRange(originalRange); - }; - this.indent = function() { - var session = this.session; - var range = this.getSelectionRange(); - - if (range.start.row < range.end.row) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; - } else if (range.start.column < range.end.column) { - var text = session.getTextRange(range); - if (!/^\s+$/.test(text)) { - var rows = this.$getSelectedRows(); - session.indentRows(rows.first, rows.last, "\t"); - return; - } - } - - var line = session.getLine(range.start.row); - var position = range.start; - var size = session.getTabSize(); - var column = session.documentToScreenColumn(position.row, position.column); - - if (this.session.getUseSoftTabs()) { - var count = (size - column % size); - var indentString = lang.stringRepeat(" ", count); - } else { - var count = column % size; - while (line[range.start.column] == " " && count) { - range.start.column--; - count--; - } - this.selection.setSelectionRange(range); - indentString = "\t"; - } - return this.insert(indentString); - }; - this.blockIndent = function() { - var rows = this.$getSelectedRows(); - this.session.indentRows(rows.first, rows.last, "\t"); - }; - this.blockOutdent = function() { - var selection = this.session.getSelection(); - this.session.outdentRows(selection.getRange()); - }; - this.sortLines = function() { - var rows = this.$getSelectedRows(); - var session = this.session; - - var lines = []; - for (i = rows.first; i <= rows.last; i++) - lines.push(session.getLine(i)); - - lines.sort(function(a, b) { - if (a.toLowerCase() < b.toLowerCase()) return -1; - if (a.toLowerCase() > b.toLowerCase()) return 1; - return 0; - }); - - var deleteRange = new Range(0, 0, 0, 0); - for (var i = rows.first; i <= rows.last; i++) { - var line = session.getLine(i); - deleteRange.start.row = i; - deleteRange.end.row = i; - deleteRange.end.column = line.length; - session.replace(deleteRange, lines[i-rows.first]); - } - }; - this.toggleCommentLines = function() { - var state = this.session.getState(this.getCursorPosition().row); - var rows = this.$getSelectedRows(); - this.session.getMode().toggleCommentLines(state, this.session, rows.first, rows.last); - }; - - this.toggleBlockComment = function() { - var cursor = this.getCursorPosition(); - var state = this.session.getState(cursor.row); - var range = this.getSelectionRange(); - this.session.getMode().toggleBlockComment(state, this.session, range, cursor); - }; - this.getNumberAt = function(row, column) { - var _numberRx = /[\-]?[0-9]+(?:\.[0-9]+)?/g; - _numberRx.lastIndex = 0; - - var s = this.session.getLine(row); - while (_numberRx.lastIndex < column) { - var m = _numberRx.exec(s); - if(m.index <= column && m.index+m[0].length >= column){ - var number = { - value: m[0], - start: m.index, - end: m.index+m[0].length - }; - return number; - } - } - return null; - }; - this.modifyNumber = function(amount) { - var row = this.selection.getCursor().row; - var column = this.selection.getCursor().column; - var charRange = new Range(row, column-1, row, column); - - var c = this.session.getTextRange(charRange); - if (!isNaN(parseFloat(c)) && isFinite(c)) { - var nr = this.getNumberAt(row, column); - if (nr) { - var fp = nr.value.indexOf(".") >= 0 ? nr.start + nr.value.indexOf(".") + 1 : nr.end; - var decimals = nr.start + nr.value.length - fp; - - var t = parseFloat(nr.value); - t *= Math.pow(10, decimals); - - - if(fp !== nr.end && column < fp){ - amount *= Math.pow(10, nr.end - column - 1); - } else { - amount *= Math.pow(10, nr.end - column); - } - - t += amount; - t /= Math.pow(10, decimals); - var nnr = t.toFixed(decimals); - var replaceRange = new Range(row, nr.start, row, nr.end); - this.session.replace(replaceRange, nnr); - this.moveCursorTo(row, Math.max(nr.start +1, column + nnr.length - nr.value.length)); - - } - } - }; - this.removeLines = function() { - var rows = this.$getSelectedRows(); - this.session.removeFullLines(rows.first, rows.last); - this.clearSelection(); - }; - - this.duplicateSelection = function() { - var sel = this.selection; - var doc = this.session; - var range = sel.getRange(); - var reverse = sel.isBackwards(); - if (range.isEmpty()) { - var row = range.start.row; - doc.duplicateLines(row, row); - } else { - var point = reverse ? range.start : range.end; - var endPoint = doc.insert(point, doc.getTextRange(range), false); - range.start = point; - range.end = endPoint; - - sel.setSelectionRange(range, reverse); - } - }; - this.moveLinesDown = function() { - this.$moveLines(1, false); - }; - this.moveLinesUp = function() { - this.$moveLines(-1, false); - }; - this.moveText = function(range, toPosition, copy) { - return this.session.moveText(range, toPosition, copy); - }; - this.copyLinesUp = function() { - this.$moveLines(-1, true); - }; - this.copyLinesDown = function() { - this.$moveLines(1, true); - }; - this.$moveLines = function(dir, copy) { - var rows, moved; - var selection = this.selection; - if (!selection.inMultiSelectMode || this.inVirtualSelectionMode) { - var range = selection.toOrientedRange(); - rows = this.$getSelectedRows(range); - moved = this.session.$moveLines(rows.first, rows.last, copy ? 0 : dir); - if (copy && dir == -1) moved = 0; - range.moveBy(moved, 0); - selection.fromOrientedRange(range); - } else { - var ranges = selection.rangeList.ranges; - selection.rangeList.detach(this.session); - this.inVirtualSelectionMode = true; - - var diff = 0; - var totalDiff = 0; - var l = ranges.length; - for (var i = 0; i < l; i++) { - var rangeIndex = i; - ranges[i].moveBy(diff, 0); - rows = this.$getSelectedRows(ranges[i]); - var first = rows.first; - var last = rows.last; - while (++i < l) { - if (totalDiff) ranges[i].moveBy(totalDiff, 0); - var subRows = this.$getSelectedRows(ranges[i]); - if (copy && subRows.first != last) - break; - else if (!copy && subRows.first > last + 1) - break; - last = subRows.last; - } - i--; - diff = this.session.$moveLines(first, last, copy ? 0 : dir); - if (copy && dir == -1) rangeIndex = i + 1; - while (rangeIndex <= i) { - ranges[rangeIndex].moveBy(diff, 0); - rangeIndex++; - } - if (!copy) diff = 0; - totalDiff += diff; - } - - selection.fromOrientedRange(selection.ranges[0]); - selection.rangeList.attach(this.session); - this.inVirtualSelectionMode = false; - } - }; - this.$getSelectedRows = function(range) { - range = (range || this.getSelectionRange()).collapseRows(); - - return { - first: this.session.getRowFoldStart(range.start.row), - last: this.session.getRowFoldEnd(range.end.row) - }; - }; - - this.onCompositionStart = function(text) { - this.renderer.showComposition(this.getCursorPosition()); - }; - - this.onCompositionUpdate = function(text) { - this.renderer.setCompositionText(text); - }; - - this.onCompositionEnd = function() { - this.renderer.hideComposition(); - }; - this.getFirstVisibleRow = function() { - return this.renderer.getFirstVisibleRow(); - }; - this.getLastVisibleRow = function() { - return this.renderer.getLastVisibleRow(); - }; - this.isRowVisible = function(row) { - return (row >= this.getFirstVisibleRow() && row <= this.getLastVisibleRow()); - }; - this.isRowFullyVisible = function(row) { - return (row >= this.renderer.getFirstFullyVisibleRow() && row <= this.renderer.getLastFullyVisibleRow()); - }; - this.$getVisibleRowCount = function() { - return this.renderer.getScrollBottomRow() - this.renderer.getScrollTopRow() + 1; - }; - - this.$moveByPage = function(dir, select) { - var renderer = this.renderer; - var config = this.renderer.layerConfig; - var rows = dir * Math.floor(config.height / config.lineHeight); - - this.$blockScrolling++; - if (select === true) { - this.selection.$moveSelection(function(){ - this.moveCursorBy(rows, 0); - }); - } else if (select === false) { - this.selection.moveCursorBy(rows, 0); - this.selection.clearSelection(); - } - this.$blockScrolling--; - - var scrollTop = renderer.scrollTop; - - renderer.scrollBy(0, rows * config.lineHeight); - if (select != null) - renderer.scrollCursorIntoView(null, 0.5); - - renderer.animateScrolling(scrollTop); - }; - this.selectPageDown = function() { - this.$moveByPage(1, true); - }; - this.selectPageUp = function() { - this.$moveByPage(-1, true); - }; - this.gotoPageDown = function() { - this.$moveByPage(1, false); - }; - this.gotoPageUp = function() { - this.$moveByPage(-1, false); - }; - this.scrollPageDown = function() { - this.$moveByPage(1); - }; - this.scrollPageUp = function() { - this.$moveByPage(-1); - }; - this.scrollToRow = function(row) { - this.renderer.scrollToRow(row); - }; - this.scrollToLine = function(line, center, animate, callback) { - this.renderer.scrollToLine(line, center, animate, callback); - }; - this.centerSelection = function() { - var range = this.getSelectionRange(); - var pos = { - row: Math.floor(range.start.row + (range.end.row - range.start.row) / 2), - column: Math.floor(range.start.column + (range.end.column - range.start.column) / 2) - }; - this.renderer.alignCursor(pos, 0.5); - }; - this.getCursorPosition = function() { - return this.selection.getCursor(); - }; - this.getCursorPositionScreen = function() { - return this.session.documentToScreenPosition(this.getCursorPosition()); - }; - this.getSelectionRange = function() { - return this.selection.getRange(); - }; - this.selectAll = function() { - this.$blockScrolling += 1; - this.selection.selectAll(); - this.$blockScrolling -= 1; - }; - this.clearSelection = function() { - this.selection.clearSelection(); - }; - this.moveCursorTo = function(row, column) { - this.selection.moveCursorTo(row, column); - }; - this.moveCursorToPosition = function(pos) { - this.selection.moveCursorToPosition(pos); - }; - this.jumpToMatching = function(select, expand) { - var cursor = this.getCursorPosition(); - var iterator = new TokenIterator(this.session, cursor.row, cursor.column); - var prevToken = iterator.getCurrentToken(); - var token = prevToken || iterator.stepForward(); - - if (!token) return; - var matchType; - var found = false; - var depth = {}; - var i = cursor.column - token.start; - var bracketType; - var brackets = { - ")": "(", - "(": "(", - "]": "[", - "[": "[", - "{": "{", - "}": "{" - }; - - do { - if (token.value.match(/[{}()\[\]]/g)) { - for (; i < token.value.length && !found; i++) { - if (!brackets[token.value[i]]) { - continue; - } - - bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen"); - - if (isNaN(depth[bracketType])) { - depth[bracketType] = 0; - } - - switch (token.value[i]) { - case '(': - case '[': - case '{': - depth[bracketType]++; - break; - case ')': - case ']': - case '}': - depth[bracketType]--; - - if (depth[bracketType] === -1) { - matchType = 'bracket'; - found = true; - } - break; - } - } - } - else if (token && token.type.indexOf('tag-name') !== -1) { - if (isNaN(depth[token.value])) { - depth[token.value] = 0; - } - - if (prevToken.value === '<') { - depth[token.value]++; - } - else if (prevToken.value === '= 0; --i) { - if(this.$tryReplace(ranges[i], replacement)) { - replaced++; - } - } - - this.selection.setSelectionRange(selection); - this.$blockScrolling -= 1; - - return replaced; - }; - - this.$tryReplace = function(range, replacement) { - var input = this.session.getTextRange(range); - replacement = this.$search.replace(input, replacement); - if (replacement !== null) { - range.end = this.session.replace(range, replacement); - return range; - } else { - return null; - } - }; - this.getLastSearchOptions = function() { - return this.$search.getOptions(); - }; - this.find = function(needle, options, animate) { - if (!options) - options = {}; - - if (typeof needle == "string" || needle instanceof RegExp) - options.needle = needle; - else if (typeof needle == "object") - oop.mixin(options, needle); - - var range = this.selection.getRange(); - if (options.needle == null) { - needle = this.session.getTextRange(range) - || this.$search.$options.needle; - if (!needle) { - range = this.session.getWordRange(range.start.row, range.start.column); - needle = this.session.getTextRange(range); - } - this.$search.set({needle: needle}); - } - - this.$search.set(options); - if (!options.start) - this.$search.set({start: range}); - - var newRange = this.$search.find(this.session); - if (options.preventScroll) - return newRange; - if (newRange) { - this.revealRange(newRange, animate); - return newRange; - } - if (options.backwards) - range.start = range.end; - else - range.end = range.start; - this.selection.setRange(range); - }; - this.findNext = function(options, animate) { - this.find({skipCurrent: true, backwards: false}, options, animate); - }; - this.findPrevious = function(options, animate) { - this.find(options, {skipCurrent: true, backwards: true}, animate); - }; - - this.revealRange = function(range, animate) { - this.$blockScrolling += 1; - this.session.unfold(range); - this.selection.setSelectionRange(range); - this.$blockScrolling -= 1; - - var scrollTop = this.renderer.scrollTop; - this.renderer.scrollSelectionIntoView(range.start, range.end, 0.5); - if (animate !== false) - this.renderer.animateScrolling(scrollTop); - }; - this.undo = function() { - this.$blockScrolling++; - this.session.getUndoManager().undo(); - this.$blockScrolling--; - this.renderer.scrollCursorIntoView(null, 0.5); - }; - this.redo = function() { - this.$blockScrolling++; - this.session.getUndoManager().redo(); - this.$blockScrolling--; - this.renderer.scrollCursorIntoView(null, 0.5); - }; - this.destroy = function() { - this.renderer.destroy(); - this._signal("destroy", this); - if (this.session) { - this.session.destroy(); - } - }; - this.setAutoScrollEditorIntoView = function(enable) { - if (!enable) - return; - var rect; - var self = this; - var shouldScroll = false; - if (!this.$scrollAnchor) - this.$scrollAnchor = document.createElement("div"); - var scrollAnchor = this.$scrollAnchor; - scrollAnchor.style.cssText = "position:absolute"; - this.container.insertBefore(scrollAnchor, this.container.firstChild); - var onChangeSelection = this.on("changeSelection", function() { - shouldScroll = true; - }); - var onBeforeRender = this.renderer.on("beforeRender", function() { - if (shouldScroll) - rect = self.renderer.container.getBoundingClientRect(); - }); - var onAfterRender = this.renderer.on("afterRender", function() { - if (shouldScroll && rect && (self.isFocused() - || self.searchBox && self.searchBox.isFocused()) - ) { - var renderer = self.renderer; - var pos = renderer.$cursorLayer.$pixelPos; - var config = renderer.layerConfig; - var top = pos.top - config.offset; - if (pos.top >= 0 && top + rect.top < 0) { - shouldScroll = true; - } else if (pos.top < config.height && - pos.top + rect.top + config.lineHeight > window.innerHeight) { - shouldScroll = false; - } else { - shouldScroll = null; - } - if (shouldScroll != null) { - scrollAnchor.style.top = top + "px"; - scrollAnchor.style.left = pos.left + "px"; - scrollAnchor.style.height = config.lineHeight + "px"; - scrollAnchor.scrollIntoView(shouldScroll); - } - shouldScroll = rect = null; - } - }); - this.setAutoScrollEditorIntoView = function(enable) { - if (enable) - return; - delete this.setAutoScrollEditorIntoView; - this.off("changeSelection", onChangeSelection); - this.renderer.off("afterRender", onAfterRender); - this.renderer.off("beforeRender", onBeforeRender); - }; - }; - - - this.$resetCursorStyle = function() { - var style = this.$cursorStyle || "ace"; - var cursorLayer = this.renderer.$cursorLayer; - if (!cursorLayer) - return; - cursorLayer.setSmoothBlinking(/smooth/.test(style)); - cursorLayer.isBlinking = !this.$readOnly && style != "wide"; - dom.setCssClass(cursorLayer.element, "ace_slim-cursors", /slim/.test(style)); - }; - -}).call(Editor.prototype); - - - -config.defineOptions(Editor.prototype, "editor", { - selectionStyle: { - set: function(style) { - this.onSelectionChange(); - this._signal("changeSelectionStyle", {data: style}); - }, - initialValue: "line" - }, - highlightActiveLine: { - set: function() {this.$updateHighlightActiveLine();}, - initialValue: true - }, - highlightSelectedWord: { - set: function(shouldHighlight) {this.$onSelectionChange();}, - initialValue: true - }, - readOnly: { - set: function(readOnly) { - this.$resetCursorStyle(); - }, - initialValue: false - }, - cursorStyle: { - set: function(val) { this.$resetCursorStyle(); }, - values: ["ace", "slim", "smooth", "wide"], - initialValue: "ace" - }, - mergeUndoDeltas: { - values: [false, true, "always"], - initialValue: true - }, - behavioursEnabled: {initialValue: true}, - wrapBehavioursEnabled: {initialValue: true}, - autoScrollEditorIntoView: { - set: function(val) {this.setAutoScrollEditorIntoView(val)} - }, - keyboardHandler: { - set: function(val) { this.setKeyboardHandler(val); }, - get: function() { return this.keybindingId; }, - handlesSet: true - }, - - hScrollBarAlwaysVisible: "renderer", - vScrollBarAlwaysVisible: "renderer", - highlightGutterLine: "renderer", - animatedScroll: "renderer", - showInvisibles: "renderer", - showPrintMargin: "renderer", - printMarginColumn: "renderer", - printMargin: "renderer", - fadeFoldWidgets: "renderer", - showFoldWidgets: "renderer", - showLineNumbers: "renderer", - showGutter: "renderer", - displayIndentGuides: "renderer", - fontSize: "renderer", - fontFamily: "renderer", - maxLines: "renderer", - minLines: "renderer", - scrollPastEnd: "renderer", - fixedWidthGutter: "renderer", - theme: "renderer", - - scrollSpeed: "$mouseHandler", - dragDelay: "$mouseHandler", - dragEnabled: "$mouseHandler", - focusTimout: "$mouseHandler", - tooltipFollowsMouse: "$mouseHandler", - - firstLineNumber: "session", - overwrite: "session", - newLineMode: "session", - useWorker: "session", - useSoftTabs: "session", - tabSize: "session", - wrap: "session", - indentedSoftWrap: "session", - foldStyle: "session", - mode: "session" -}); - -exports.Editor = Editor; -}); - -ace.define("ace/undomanager",["require","exports","module"], function(require, exports, module) { -"use strict"; -var UndoManager = function() { - this.reset(); -}; - -(function() { - this.execute = function(options) { - var deltaSets = options.args[0]; - this.$doc = options.args[1]; - if (options.merge && this.hasUndo()){ - this.dirtyCounter--; - deltaSets = this.$undoStack.pop().concat(deltaSets); - } - this.$undoStack.push(deltaSets); - this.$redoStack = []; - if (this.dirtyCounter < 0) { - this.dirtyCounter = NaN; - } - this.dirtyCounter++; - }; - this.undo = function(dontSelect) { - var deltaSets = this.$undoStack.pop(); - var undoSelectionRange = null; - if (deltaSets) { - undoSelectionRange = this.$doc.undoChanges(deltaSets, dontSelect); - this.$redoStack.push(deltaSets); - this.dirtyCounter--; - } - - return undoSelectionRange; - }; - this.redo = function(dontSelect) { - var deltaSets = this.$redoStack.pop(); - var redoSelectionRange = null; - if (deltaSets) { - redoSelectionRange = - this.$doc.redoChanges(this.$deserializeDeltas(deltaSets), dontSelect); - this.$undoStack.push(deltaSets); - this.dirtyCounter++; - } - return redoSelectionRange; - }; - this.reset = function() { - this.$undoStack = []; - this.$redoStack = []; - this.dirtyCounter = 0; - }; - this.hasUndo = function() { - return this.$undoStack.length > 0; - }; - this.hasRedo = function() { - return this.$redoStack.length > 0; - }; - this.markClean = function() { - this.dirtyCounter = 0; - }; - this.isClean = function() { - return this.dirtyCounter === 0; - }; - this.$serializeDeltas = function(deltaSets) { - return cloneDeltaSetsObj(deltaSets, $serializeDelta); - }; - this.$deserializeDeltas = function(deltaSets) { - return cloneDeltaSetsObj(deltaSets, $deserializeDelta); - }; - - function $serializeDelta(delta){ - return { - action: delta.action, - start: delta.start, - end: delta.end, - lines: delta.lines.length == 1 ? null : delta.lines, - text: delta.lines.length == 1 ? delta.lines[0] : null - }; - } - - function $deserializeDelta(delta) { - return { - action: delta.action, - start: delta.start, - end: delta.end, - lines: delta.lines || [delta.text] - }; - } - - function cloneDeltaSetsObj(deltaSets_old, fnGetModifiedDelta) { - var deltaSets_new = new Array(deltaSets_old.length); - for (var i = 0; i < deltaSets_old.length; i++) { - var deltaSet_old = deltaSets_old[i]; - var deltaSet_new = { group: deltaSet_old.group, deltas: new Array(deltaSet_old.length)}; - - for (var j = 0; j < deltaSet_old.deltas.length; j++) { - var delta_old = deltaSet_old.deltas[j]; - deltaSet_new.deltas[j] = fnGetModifiedDelta(delta_old); - } - - deltaSets_new[i] = deltaSet_new; - } - return deltaSets_new; - } - -}).call(UndoManager.prototype); - -exports.UndoManager = UndoManager; -}); - -ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var dom = require("../lib/dom"); -var oop = require("../lib/oop"); -var lang = require("../lib/lang"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; - -var Gutter = function(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_gutter-layer"; - parentEl.appendChild(this.element); - this.setShowFoldWidgets(this.$showFoldWidgets); - - this.gutterWidth = 0; - - this.$annotations = []; - this.$updateAnnotations = this.$updateAnnotations.bind(this); - - this.$cells = []; -}; - -(function() { - - oop.implement(this, EventEmitter); - - this.setSession = function(session) { - if (this.session) - this.session.removeEventListener("change", this.$updateAnnotations); - this.session = session; - if (session) - session.on("change", this.$updateAnnotations); - }; - - this.addGutterDecoration = function(row, className){ - if (window.console) - console.warn && console.warn("deprecated use session.addGutterDecoration"); - this.session.addGutterDecoration(row, className); - }; - - this.removeGutterDecoration = function(row, className){ - if (window.console) - console.warn && console.warn("deprecated use session.removeGutterDecoration"); - this.session.removeGutterDecoration(row, className); - }; - - this.setAnnotations = function(annotations) { - this.$annotations = []; - for (var i = 0; i < annotations.length; i++) { - var annotation = annotations[i]; - var row = annotation.row; - var rowInfo = this.$annotations[row]; - if (!rowInfo) - rowInfo = this.$annotations[row] = {text: []}; - - var annoText = annotation.text; - annoText = annoText ? lang.escapeHTML(annoText) : annotation.html || ""; - - if (rowInfo.text.indexOf(annoText) === -1) - rowInfo.text.push(annoText); - - var type = annotation.type; - if (type == "error") - rowInfo.className = " ace_error"; - else if (type == "warning" && rowInfo.className != " ace_error") - rowInfo.className = " ace_warning"; - else if (type == "info" && (!rowInfo.className)) - rowInfo.className = " ace_info"; - } - }; - - this.$updateAnnotations = function (delta) { - if (!this.$annotations.length) - return; - var firstRow = delta.start.row; - var len = delta.end.row - firstRow; - if (len === 0) { - } else if (delta.action == 'remove') { - this.$annotations.splice(firstRow, len + 1, null); - } else { - var args = new Array(len + 1); - args.unshift(firstRow, 1); - this.$annotations.splice.apply(this.$annotations, args); - } - }; - - this.update = function(config) { - var session = this.session; - var firstRow = config.firstRow; - var lastRow = Math.min(config.lastRow + config.gutterOffset, // needed to compensate for hor scollbar - session.getLength() - 1); - var fold = session.getNextFoldLine(firstRow); - var foldStart = fold ? fold.start.row : Infinity; - var foldWidgets = this.$showFoldWidgets && session.foldWidgets; - var breakpoints = session.$breakpoints; - var decorations = session.$decorations; - var firstLineNumber = session.$firstLineNumber; - var lastLineNumber = 0; - - var gutterRenderer = session.gutterRenderer || this.$renderer; - - var cell = null; - var index = -1; - var row = firstRow; - while (true) { - if (row > foldStart) { - row = fold.end.row + 1; - fold = session.getNextFoldLine(row, fold); - foldStart = fold ? fold.start.row : Infinity; - } - if (row > lastRow) { - while (this.$cells.length > index + 1) { - cell = this.$cells.pop(); - this.element.removeChild(cell.element); - } - break; - } - - cell = this.$cells[++index]; - if (!cell) { - cell = {element: null, textNode: null, foldWidget: null}; - cell.element = dom.createElement("div"); - cell.textNode = document.createTextNode(''); - cell.element.appendChild(cell.textNode); - this.element.appendChild(cell.element); - this.$cells[index] = cell; - } - - var className = "ace_gutter-cell "; - if (breakpoints[row]) - className += breakpoints[row]; - if (decorations[row]) - className += decorations[row]; - if (this.$annotations[row]) - className += this.$annotations[row].className; - if (cell.element.className != className) - cell.element.className = className; - - var height = session.getRowLength(row) * config.lineHeight + "px"; - if (height != cell.element.style.height) - cell.element.style.height = height; - - if (foldWidgets) { - var c = foldWidgets[row]; - if (c == null) - c = foldWidgets[row] = session.getFoldWidget(row); - } - - if (c) { - if (!cell.foldWidget) { - cell.foldWidget = dom.createElement("span"); - cell.element.appendChild(cell.foldWidget); - } - var className = "ace_fold-widget ace_" + c; - if (c == "start" && row == foldStart && row < fold.end.row) - className += " ace_closed"; - else - className += " ace_open"; - if (cell.foldWidget.className != className) - cell.foldWidget.className = className; - - var height = config.lineHeight + "px"; - if (cell.foldWidget.style.height != height) - cell.foldWidget.style.height = height; - } else { - if (cell.foldWidget) { - cell.element.removeChild(cell.foldWidget); - cell.foldWidget = null; - } - } - - var text = lastLineNumber = gutterRenderer - ? gutterRenderer.getText(session, row) - : row + firstLineNumber; - if (text != cell.textNode.data) - cell.textNode.data = text; - - row++; - } - - this.element.style.height = config.minHeight + "px"; - - if (this.$fixedWidth || session.$useWrapMode) - lastLineNumber = session.getLength() + firstLineNumber; - - var gutterWidth = gutterRenderer - ? gutterRenderer.getWidth(session, lastLineNumber, config) - : lastLineNumber.toString().length * config.characterWidth; - - var padding = this.$padding || this.$computePadding(); - gutterWidth += padding.left + padding.right; - if (gutterWidth !== this.gutterWidth && !isNaN(gutterWidth)) { - this.gutterWidth = gutterWidth; - this.element.style.width = Math.ceil(this.gutterWidth) + "px"; - this._emit("changeGutterWidth", gutterWidth); - } - }; - - this.$fixedWidth = false; - - this.$showLineNumbers = true; - this.$renderer = ""; - this.setShowLineNumbers = function(show) { - this.$renderer = !show && { - getWidth: function() {return ""}, - getText: function() {return ""} - }; - }; - - this.getShowLineNumbers = function() { - return this.$showLineNumbers; - }; - - this.$showFoldWidgets = true; - this.setShowFoldWidgets = function(show) { - if (show) - dom.addCssClass(this.element, "ace_folding-enabled"); - else - dom.removeCssClass(this.element, "ace_folding-enabled"); - - this.$showFoldWidgets = show; - this.$padding = null; - }; - - this.getShowFoldWidgets = function() { - return this.$showFoldWidgets; - }; - - this.$computePadding = function() { - if (!this.element.firstChild) - return {left: 0, right: 0}; - var style = dom.computedStyle(this.element.firstChild); - this.$padding = {}; - this.$padding.left = parseInt(style.paddingLeft) + 1 || 0; - this.$padding.right = parseInt(style.paddingRight) || 0; - return this.$padding; - }; - - this.getRegion = function(point) { - var padding = this.$padding || this.$computePadding(); - var rect = this.element.getBoundingClientRect(); - if (point.x < padding.left + rect.left) - return "markers"; - if (this.$showFoldWidgets && point.x > rect.right - padding.right) - return "foldWidgets"; - }; - -}).call(Gutter.prototype); - -exports.Gutter = Gutter; - -}); - -ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"], function(require, exports, module) { -"use strict"; - -var Range = require("../range").Range; -var dom = require("../lib/dom"); - -var Marker = function(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_marker-layer"; - parentEl.appendChild(this.element); -}; - -(function() { - - this.$padding = 0; - - this.setPadding = function(padding) { - this.$padding = padding; - }; - this.setSession = function(session) { - this.session = session; - }; - - this.setMarkers = function(markers) { - this.markers = markers; - }; - - this.update = function(config) { - var config = config || this.config; - if (!config) - return; - - this.config = config; - - - var html = []; - for (var key in this.markers) { - var marker = this.markers[key]; - - if (!marker.range) { - marker.update(html, this, this.session, config); - continue; - } - - var range = marker.range.clipRows(config.firstRow, config.lastRow); - if (range.isEmpty()) continue; - - range = range.toScreenRange(this.session); - if (marker.renderer) { - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - marker.renderer(html, range, left, top, config); - } else if (marker.type == "fullLine") { - this.drawFullLineMarker(html, range, marker.clazz, config); - } else if (marker.type == "screenLine") { - this.drawScreenLineMarker(html, range, marker.clazz, config); - } else if (range.isMultiLine()) { - if (marker.type == "text") - this.drawTextMarker(html, range, marker.clazz, config); - else - this.drawMultiLineMarker(html, range, marker.clazz, config); - } else { - this.drawSingleLineMarker(html, range, marker.clazz + " ace_start" + " ace_br15", config); - } - } - this.element.innerHTML = html.join(""); - }; - - this.$getTop = function(row, layerConfig) { - return (row - layerConfig.firstRowScreen) * layerConfig.lineHeight; - }; - - function getBorderClass(tl, tr, br, bl) { - return (tl ? 1 : 0) | (tr ? 2 : 0) | (br ? 4 : 0) | (bl ? 8 : 0); - } - this.drawTextMarker = function(stringBuilder, range, clazz, layerConfig, extraStyle) { - var session = this.session; - var start = range.start.row; - var end = range.end.row; - var row = start; - var prev = 0; - var curr = 0; - var next = session.getScreenLastRowColumn(row); - var lineRange = new Range(row, range.start.column, row, curr); - for (; row <= end; row++) { - lineRange.start.row = lineRange.end.row = row; - lineRange.start.column = row == start ? range.start.column : session.getRowWrapIndent(row); - lineRange.end.column = next; - prev = curr; - curr = next; - next = row + 1 < end ? session.getScreenLastRowColumn(row + 1) : row == end ? 0 : range.end.column; - this.drawSingleLineMarker(stringBuilder, lineRange, - clazz + (row == start ? " ace_start" : "") + " ace_br" - + getBorderClass(row == start || row == start + 1 && range.start.column, prev < curr, curr > next, row == end), - layerConfig, row == end ? 0 : 1, extraStyle); - } - }; - this.drawMultiLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { - var padding = this.$padding; - var height = config.lineHeight; - var top = this.$getTop(range.start.row, config); - var left = padding + range.start.column * config.characterWidth; - extraStyle = extraStyle || ""; - - stringBuilder.push( - "
      " - ); - top = this.$getTop(range.end.row, config); - var width = range.end.column * config.characterWidth; - - stringBuilder.push( - "
      " - ); - height = (range.end.row - range.start.row - 1) * config.lineHeight; - if (height <= 0) - return; - top = this.$getTop(range.start.row + 1, config); - - var radiusClass = (range.start.column ? 1 : 0) | (range.end.column ? 0 : 8); - - stringBuilder.push( - "
      " - ); - }; - this.drawSingleLineMarker = function(stringBuilder, range, clazz, config, extraLength, extraStyle) { - var height = config.lineHeight; - var width = (range.end.column + (extraLength || 0) - range.start.column) * config.characterWidth; - - var top = this.$getTop(range.start.row, config); - var left = this.$padding + range.start.column * config.characterWidth; - - stringBuilder.push( - "
      " - ); - }; - - this.drawFullLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - if (range.start.row != range.end.row) - height += this.$getTop(range.end.row, config) - top; - - stringBuilder.push( - "
      " - ); - }; - - this.drawScreenLineMarker = function(stringBuilder, range, clazz, config, extraStyle) { - var top = this.$getTop(range.start.row, config); - var height = config.lineHeight; - - stringBuilder.push( - "
      " - ); - }; - -}).call(Marker.prototype); - -exports.Marker = Marker; - -}); - -ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var useragent = require("../lib/useragent"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; - -var Text = function(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_text-layer"; - parentEl.appendChild(this.element); - this.$updateEolChar = this.$updateEolChar.bind(this); -}; - -(function() { - - oop.implement(this, EventEmitter); - - this.EOF_CHAR = "\xB6"; - this.EOL_CHAR_LF = "\xAC"; - this.EOL_CHAR_CRLF = "\xa4"; - this.EOL_CHAR = this.EOL_CHAR_LF; - this.TAB_CHAR = "\u2014"; //"\u21E5"; - this.SPACE_CHAR = "\xB7"; - this.$padding = 0; - - this.$updateEolChar = function() { - var EOL_CHAR = this.session.doc.getNewLineCharacter() == "\n" - ? this.EOL_CHAR_LF - : this.EOL_CHAR_CRLF; - if (this.EOL_CHAR != EOL_CHAR) { - this.EOL_CHAR = EOL_CHAR; - return true; - } - } - - this.setPadding = function(padding) { - this.$padding = padding; - this.element.style.padding = "0 " + padding + "px"; - }; - - this.getLineHeight = function() { - return this.$fontMetrics.$characterSize.height || 0; - }; - - this.getCharacterWidth = function() { - return this.$fontMetrics.$characterSize.width || 0; - }; - - this.$setFontMetrics = function(measure) { - this.$fontMetrics = measure; - this.$fontMetrics.on("changeCharacterSize", function(e) { - this._signal("changeCharacterSize", e); - }.bind(this)); - this.$pollSizeChanges(); - } - - this.checkForSizeChanges = function() { - this.$fontMetrics.checkForSizeChanges(); - }; - this.$pollSizeChanges = function() { - return this.$pollSizeChangesTimer = this.$fontMetrics.$pollSizeChanges(); - }; - this.setSession = function(session) { - this.session = session; - if (session) - this.$computeTabString(); - }; - - this.showInvisibles = false; - this.setShowInvisibles = function(showInvisibles) { - if (this.showInvisibles == showInvisibles) - return false; - - this.showInvisibles = showInvisibles; - this.$computeTabString(); - return true; - }; - - this.displayIndentGuides = true; - this.setDisplayIndentGuides = function(display) { - if (this.displayIndentGuides == display) - return false; - - this.displayIndentGuides = display; - this.$computeTabString(); - return true; - }; - - this.$tabStrings = []; - this.onChangeTabSize = - this.$computeTabString = function() { - var tabSize = this.session.getTabSize(); - this.tabSize = tabSize; - var tabStr = this.$tabStrings = [0]; - for (var i = 1; i < tabSize + 1; i++) { - if (this.showInvisibles) { - tabStr.push("" - + lang.stringRepeat(this.TAB_CHAR, i) - + ""); - } else { - tabStr.push(lang.stringRepeat(" ", i)); - } - } - if (this.displayIndentGuides) { - this.$indentGuideRe = /\s\S| \t|\t |\s$/; - var className = "ace_indent-guide"; - var spaceClass = ""; - var tabClass = ""; - if (this.showInvisibles) { - className += " ace_invisible"; - spaceClass = " ace_invisible_space"; - tabClass = " ace_invisible_tab"; - var spaceContent = lang.stringRepeat(this.SPACE_CHAR, this.tabSize); - var tabContent = lang.stringRepeat(this.TAB_CHAR, this.tabSize); - } else{ - var spaceContent = lang.stringRepeat(" ", this.tabSize); - var tabContent = spaceContent; - } - - this.$tabStrings[" "] = "" + spaceContent + ""; - this.$tabStrings["\t"] = "" + tabContent + ""; - } - }; - - this.updateLines = function(config, firstRow, lastRow) { - if (this.config.lastRow != config.lastRow || - this.config.firstRow != config.firstRow) { - this.scrollLines(config); - } - this.config = config; - - var first = Math.max(firstRow, config.firstRow); - var last = Math.min(lastRow, config.lastRow); - - var lineElements = this.element.childNodes; - var lineElementsIdx = 0; - - for (var row = config.firstRow; row < first; row++) { - var foldLine = this.session.getFoldLine(row); - if (foldLine) { - if (foldLine.containsRow(first)) { - first = foldLine.start.row; - break; - } else { - row = foldLine.end.row; - } - } - lineElementsIdx ++; - } - - var row = first; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - - while (true) { - if (row > foldStart) { - row = foldLine.end.row+1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row :Infinity; - } - if (row > last) - break; - - var lineElement = lineElements[lineElementsIdx++]; - if (lineElement) { - var html = []; - this.$renderLine( - html, row, !this.$useLineGroups(), row == foldStart ? foldLine : false - ); - lineElement.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; - lineElement.innerHTML = html.join(""); - } - row++; - } - }; - - this.scrollLines = function(config) { - var oldConfig = this.config; - this.config = config; - - if (!oldConfig || oldConfig.lastRow < config.firstRow) - return this.update(config); - - if (config.lastRow < oldConfig.firstRow) - return this.update(config); - - var el = this.element; - if (oldConfig.firstRow < config.firstRow) - for (var row=this.session.getFoldedRowCount(oldConfig.firstRow, config.firstRow - 1); row>0; row--) - el.removeChild(el.firstChild); - - if (oldConfig.lastRow > config.lastRow) - for (var row=this.session.getFoldedRowCount(config.lastRow + 1, oldConfig.lastRow); row>0; row--) - el.removeChild(el.lastChild); - - if (config.firstRow < oldConfig.firstRow) { - var fragment = this.$renderLinesFragment(config, config.firstRow, oldConfig.firstRow - 1); - if (el.firstChild) - el.insertBefore(fragment, el.firstChild); - else - el.appendChild(fragment); - } - - if (config.lastRow > oldConfig.lastRow) { - var fragment = this.$renderLinesFragment(config, oldConfig.lastRow + 1, config.lastRow); - el.appendChild(fragment); - } - }; - - this.$renderLinesFragment = function(config, firstRow, lastRow) { - var fragment = this.element.ownerDocument.createDocumentFragment(); - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - - while (true) { - if (row > foldStart) { - row = foldLine.end.row+1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row : Infinity; - } - if (row > lastRow) - break; - - var container = dom.createElement("div"); - - var html = []; - this.$renderLine(html, row, false, row == foldStart ? foldLine : false); - container.innerHTML = html.join(""); - if (this.$useLineGroups()) { - container.className = 'ace_line_group'; - fragment.appendChild(container); - container.style.height = config.lineHeight * this.session.getRowLength(row) + "px"; - - } else { - while(container.firstChild) - fragment.appendChild(container.firstChild); - } - - row++; - } - return fragment; - }; - - this.update = function(config) { - this.config = config; - - var html = []; - var firstRow = config.firstRow, lastRow = config.lastRow; - - var row = firstRow; - var foldLine = this.session.getNextFoldLine(row); - var foldStart = foldLine ? foldLine.start.row : Infinity; - - while (true) { - if (row > foldStart) { - row = foldLine.end.row+1; - foldLine = this.session.getNextFoldLine(row, foldLine); - foldStart = foldLine ? foldLine.start.row :Infinity; - } - if (row > lastRow) - break; - - if (this.$useLineGroups()) - html.push("
      ") - - this.$renderLine(html, row, false, row == foldStart ? foldLine : false); - - if (this.$useLineGroups()) - html.push("
      "); // end the line group - - row++; - } - this.element.innerHTML = html.join(""); - }; - - this.$textToken = { - "text": true, - "rparen": true, - "lparen": true - }; - - this.$renderToken = function(stringBuilder, screenColumn, token, value) { - var self = this; - var replaceReg = /\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g; - var replaceFunc = function(c, a, b, tabIdx, idx4) { - if (a) { - return self.showInvisibles - ? "" + lang.stringRepeat(self.SPACE_CHAR, c.length) + "" - : c; - } else if (c == "&") { - return "&"; - } else if (c == "<") { - return "<"; - } else if (c == ">") { - return ">"; - } else if (c == "\t") { - var tabSize = self.session.getScreenTabSize(screenColumn + tabIdx); - screenColumn += tabSize - 1; - return self.$tabStrings[tabSize]; - } else if (c == "\u3000") { - var classToUse = self.showInvisibles ? "ace_cjk ace_invisible ace_invisible_space" : "ace_cjk"; - var space = self.showInvisibles ? self.SPACE_CHAR : ""; - screenColumn += 1; - return "" + space + ""; - } else if (b) { - return "" + self.SPACE_CHAR + ""; - } else { - screenColumn += 1; - return "" + c + ""; - } - }; - - var output = value.replace(replaceReg, replaceFunc); - - if (!this.$textToken[token.type]) { - var classes = "ace_" + token.type.replace(/\./g, " ace_"); - var style = ""; - if (token.type == "fold") - style = " style='width:" + (token.value.length * this.config.characterWidth) + "px;' "; - stringBuilder.push("", output, ""); - } - else { - stringBuilder.push(output); - } - return screenColumn + value.length; - }; - - this.renderIndentGuide = function(stringBuilder, value, max) { - var cols = value.search(this.$indentGuideRe); - if (cols <= 0 || cols >= max) - return value; - if (value[0] == " ") { - cols -= cols % this.tabSize; - stringBuilder.push(lang.stringRepeat(this.$tabStrings[" "], cols/this.tabSize)); - return value.substr(cols); - } else if (value[0] == "\t") { - stringBuilder.push(lang.stringRepeat(this.$tabStrings["\t"], cols)); - return value.substr(cols); - } - return value; - }; - - this.$renderWrappedLine = function(stringBuilder, tokens, splits, onlyContents) { - var chars = 0; - var split = 0; - var splitChars = splits[0]; - var screenColumn = 0; - - for (var i = 0; i < tokens.length; i++) { - var token = tokens[i]; - var value = token.value; - if (i == 0 && this.displayIndentGuides) { - chars = value.length; - value = this.renderIndentGuide(stringBuilder, value, splitChars); - if (!value) - continue; - chars -= value.length; - } - - if (chars + value.length < splitChars) { - screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); - chars += value.length; - } else { - while (chars + value.length >= splitChars) { - screenColumn = this.$renderToken( - stringBuilder, screenColumn, - token, value.substring(0, splitChars - chars) - ); - value = value.substring(splitChars - chars); - chars = splitChars; - - if (!onlyContents) { - stringBuilder.push("
      ", - "
      " - ); - } - - stringBuilder.push(lang.stringRepeat("\xa0", splits.indent)); - - split ++; - screenColumn = 0; - splitChars = splits[split] || Number.MAX_VALUE; - } - if (value.length != 0) { - chars += value.length; - screenColumn = this.$renderToken( - stringBuilder, screenColumn, token, value - ); - } - } - } - }; - - this.$renderSimpleLine = function(stringBuilder, tokens) { - var screenColumn = 0; - var token = tokens[0]; - var value = token.value; - if (this.displayIndentGuides) - value = this.renderIndentGuide(stringBuilder, value); - if (value) - screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); - for (var i = 1; i < tokens.length; i++) { - token = tokens[i]; - value = token.value; - screenColumn = this.$renderToken(stringBuilder, screenColumn, token, value); - } - }; - this.$renderLine = function(stringBuilder, row, onlyContents, foldLine) { - if (!foldLine && foldLine != false) - foldLine = this.session.getFoldLine(row); - - if (foldLine) - var tokens = this.$getFoldLineTokens(row, foldLine); - else - var tokens = this.session.getTokens(row); - - - if (!onlyContents) { - stringBuilder.push( - "
      " - ); - } - - if (tokens.length) { - var splits = this.session.getRowSplitData(row); - if (splits && splits.length) - this.$renderWrappedLine(stringBuilder, tokens, splits, onlyContents); - else - this.$renderSimpleLine(stringBuilder, tokens); - } - - if (this.showInvisibles) { - if (foldLine) - row = foldLine.end.row - - stringBuilder.push( - "", - row == this.session.getLength() - 1 ? this.EOF_CHAR : this.EOL_CHAR, - "" - ); - } - if (!onlyContents) - stringBuilder.push("
      "); - }; - - this.$getFoldLineTokens = function(row, foldLine) { - var session = this.session; - var renderTokens = []; - - function addTokens(tokens, from, to) { - var idx = 0, col = 0; - while ((col + tokens[idx].value.length) < from) { - col += tokens[idx].value.length; - idx++; - - if (idx == tokens.length) - return; - } - if (col != from) { - var value = tokens[idx].value.substring(from - col); - if (value.length > (to - from)) - value = value.substring(0, to - from); - - renderTokens.push({ - type: tokens[idx].type, - value: value - }); - - col = from + value.length; - idx += 1; - } - - while (col < to && idx < tokens.length) { - var value = tokens[idx].value; - if (value.length + col > to) { - renderTokens.push({ - type: tokens[idx].type, - value: value.substring(0, to - col) - }); - } else - renderTokens.push(tokens[idx]); - col += value.length; - idx += 1; - } - } - - var tokens = session.getTokens(row); - foldLine.walk(function(placeholder, row, column, lastColumn, isNewRow) { - if (placeholder != null) { - renderTokens.push({ - type: "fold", - value: placeholder - }); - } else { - if (isNewRow) - tokens = session.getTokens(row); - - if (tokens.length) - addTokens(tokens, lastColumn, column); - } - }, foldLine.end.row, this.session.getLine(foldLine.end.row).length); - - return renderTokens; - }; - - this.$useLineGroups = function() { - return this.session.getUseWrapMode(); - }; - - this.destroy = function() { - clearInterval(this.$pollSizeChangesTimer); - if (this.$measureNode) - this.$measureNode.parentNode.removeChild(this.$measureNode); - delete this.$measureNode; - }; - -}).call(Text.prototype); - -exports.Text = Text; - -}); - -ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"], function(require, exports, module) { -"use strict"; - -var dom = require("../lib/dom"); -var isIE8; - -var Cursor = function(parentEl) { - this.element = dom.createElement("div"); - this.element.className = "ace_layer ace_cursor-layer"; - parentEl.appendChild(this.element); - - if (isIE8 === undefined) - isIE8 = !("opacity" in this.element.style); - - this.isVisible = false; - this.isBlinking = true; - this.blinkInterval = 1000; - this.smoothBlinking = false; - - this.cursors = []; - this.cursor = this.addCursor(); - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.$updateCursors = (isIE8 - ? this.$updateVisibility - : this.$updateOpacity).bind(this); -}; - -(function() { - - this.$updateVisibility = function(val) { - var cursors = this.cursors; - for (var i = cursors.length; i--; ) - cursors[i].style.visibility = val ? "" : "hidden"; - }; - this.$updateOpacity = function(val) { - var cursors = this.cursors; - for (var i = cursors.length; i--; ) - cursors[i].style.opacity = val ? "" : "0"; - }; - - - this.$padding = 0; - this.setPadding = function(padding) { - this.$padding = padding; - }; - - this.setSession = function(session) { - this.session = session; - }; - - this.setBlinking = function(blinking) { - if (blinking != this.isBlinking){ - this.isBlinking = blinking; - this.restartTimer(); - } - }; - - this.setBlinkInterval = function(blinkInterval) { - if (blinkInterval != this.blinkInterval){ - this.blinkInterval = blinkInterval; - this.restartTimer(); - } - }; - - this.setSmoothBlinking = function(smoothBlinking) { - if (smoothBlinking != this.smoothBlinking && !isIE8) { - this.smoothBlinking = smoothBlinking; - dom.setCssClass(this.element, "ace_smooth-blinking", smoothBlinking); - this.$updateCursors(true); - this.$updateCursors = (this.$updateOpacity).bind(this); - this.restartTimer(); - } - }; - - this.addCursor = function() { - var el = dom.createElement("div"); - el.className = "ace_cursor"; - this.element.appendChild(el); - this.cursors.push(el); - return el; - }; - - this.removeCursor = function() { - if (this.cursors.length > 1) { - var el = this.cursors.pop(); - el.parentNode.removeChild(el); - return el; - } - }; - - this.hideCursor = function() { - this.isVisible = false; - dom.addCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - - this.showCursor = function() { - this.isVisible = true; - dom.removeCssClass(this.element, "ace_hidden-cursors"); - this.restartTimer(); - }; - - this.restartTimer = function() { - var update = this.$updateCursors; - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - if (this.smoothBlinking) { - dom.removeCssClass(this.element, "ace_smooth-blinking"); - } - - update(true); - - if (!this.isBlinking || !this.blinkInterval || !this.isVisible) - return; - - if (this.smoothBlinking) { - setTimeout(function(){ - dom.addCssClass(this.element, "ace_smooth-blinking"); - }.bind(this)); - } - - var blink = function(){ - this.timeoutId = setTimeout(function() { - update(false); - }, 0.6 * this.blinkInterval); - }.bind(this); - - this.intervalId = setInterval(function() { - update(true); - blink(); - }, this.blinkInterval); - - blink(); - }; - - this.getPixelPosition = function(position, onScreen) { - if (!this.config || !this.session) - return {left : 0, top : 0}; - - if (!position) - position = this.session.selection.getCursor(); - var pos = this.session.documentToScreenPosition(position); - var cursorLeft = this.$padding + pos.column * this.config.characterWidth; - var cursorTop = (pos.row - (onScreen ? this.config.firstRowScreen : 0)) * - this.config.lineHeight; - - return {left : cursorLeft, top : cursorTop}; - }; - - this.update = function(config) { - this.config = config; - - var selections = this.session.$selectionMarkers; - var i = 0, cursorIndex = 0; - - if (selections === undefined || selections.length === 0){ - selections = [{cursor: null}]; - } - - for (var i = 0, n = selections.length; i < n; i++) { - var pixelPos = this.getPixelPosition(selections[i].cursor, true); - if ((pixelPos.top > config.height + config.offset || - pixelPos.top < 0) && i > 1) { - continue; - } - - var style = (this.cursors[cursorIndex++] || this.addCursor()).style; - - if (!this.drawCursor) { - style.left = pixelPos.left + "px"; - style.top = pixelPos.top + "px"; - style.width = config.characterWidth + "px"; - style.height = config.lineHeight + "px"; - } else { - this.drawCursor(style, pixelPos, config, selections[i], this.session); - } - } - while (this.cursors.length > cursorIndex) - this.removeCursor(); - - var overwrite = this.session.getOverwrite(); - this.$setOverwrite(overwrite); - this.$pixelPos = pixelPos; - this.restartTimer(); - }; - - this.drawCursor = null; - - this.$setOverwrite = function(overwrite) { - if (overwrite != this.overwrite) { - this.overwrite = overwrite; - if (overwrite) - dom.addCssClass(this.element, "ace_overwrite-cursors"); - else - dom.removeCssClass(this.element, "ace_overwrite-cursors"); - } - }; - - this.destroy = function() { - clearInterval(this.intervalId); - clearTimeout(this.timeoutId); - }; - -}).call(Cursor.prototype); - -exports.Cursor = Cursor; - -}); - -ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var event = require("./lib/event"); -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var ScrollBar = function(parent) { - this.element = dom.createElement("div"); - this.element.className = "ace_scrollbar ace_scrollbar" + this.classSuffix; - - this.inner = dom.createElement("div"); - this.inner.className = "ace_scrollbar-inner"; - this.element.appendChild(this.inner); - - parent.appendChild(this.element); - - this.setVisible(false); - this.skipEvent = false; - - event.addListener(this.element, "scroll", this.onScroll.bind(this)); - event.addListener(this.element, "mousedown", event.preventDefault); -}; - -(function() { - oop.implement(this, EventEmitter); - - this.setVisible = function(isVisible) { - this.element.style.display = isVisible ? "" : "none"; - this.isVisible = isVisible; - }; -}).call(ScrollBar.prototype); -var VScrollBar = function(parent, renderer) { - ScrollBar.call(this, parent); - this.scrollTop = 0; - renderer.$scrollbarWidth = - this.width = dom.scrollbarWidth(parent.ownerDocument); - this.inner.style.width = - this.element.style.width = (this.width || 15) + 5 + "px"; -}; - -oop.inherits(VScrollBar, ScrollBar); - -(function() { - - this.classSuffix = '-v'; - this.onScroll = function() { - if (!this.skipEvent) { - this.scrollTop = this.element.scrollTop; - this._emit("scroll", {data: this.scrollTop}); - } - this.skipEvent = false; - }; - this.getWidth = function() { - return this.isVisible ? this.width : 0; - }; - this.setHeight = function(height) { - this.element.style.height = height + "px"; - }; - this.setInnerHeight = function(height) { - this.inner.style.height = height + "px"; - }; - this.setScrollHeight = function(height) { - this.inner.style.height = height + "px"; - }; - this.setScrollTop = function(scrollTop) { - if (this.scrollTop != scrollTop) { - this.skipEvent = true; - this.scrollTop = this.element.scrollTop = scrollTop; - } - }; - -}).call(VScrollBar.prototype); -var HScrollBar = function(parent, renderer) { - ScrollBar.call(this, parent); - this.scrollLeft = 0; - this.height = renderer.$scrollbarWidth; - this.inner.style.height = - this.element.style.height = (this.height || 15) + 5 + "px"; -}; - -oop.inherits(HScrollBar, ScrollBar); - -(function() { - - this.classSuffix = '-h'; - this.onScroll = function() { - if (!this.skipEvent) { - this.scrollLeft = this.element.scrollLeft; - this._emit("scroll", {data: this.scrollLeft}); - } - this.skipEvent = false; - }; - this.getHeight = function() { - return this.isVisible ? this.height : 0; - }; - this.setWidth = function(width) { - this.element.style.width = width + "px"; - }; - this.setInnerWidth = function(width) { - this.inner.style.width = width + "px"; - }; - this.setScrollWidth = function(width) { - this.inner.style.width = width + "px"; - }; - this.setScrollLeft = function(scrollLeft) { - if (this.scrollLeft != scrollLeft) { - this.skipEvent = true; - this.scrollLeft = this.element.scrollLeft = scrollLeft; - } - }; - -}).call(HScrollBar.prototype); - - -exports.ScrollBar = VScrollBar; // backward compatibility -exports.ScrollBarV = VScrollBar; // backward compatibility -exports.ScrollBarH = HScrollBar; // backward compatibility - -exports.VScrollBar = VScrollBar; -exports.HScrollBar = HScrollBar; -}); - -ace.define("ace/renderloop",["require","exports","module","ace/lib/event"], function(require, exports, module) { -"use strict"; - -var event = require("./lib/event"); - - -var RenderLoop = function(onRender, win) { - this.onRender = onRender; - this.pending = false; - this.changes = 0; - this.window = win || window; -}; - -(function() { - - - this.schedule = function(change) { - this.changes = this.changes | change; - if (!this.pending && this.changes) { - this.pending = true; - var _self = this; - event.nextFrame(function() { - _self.pending = false; - var changes; - while (changes = _self.changes) { - _self.changes = 0; - _self.onRender(changes); - } - }, this.window); - } - }; - -}).call(RenderLoop.prototype); - -exports.RenderLoop = RenderLoop; -}); - -ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"], function(require, exports, module) { - -var oop = require("../lib/oop"); -var dom = require("../lib/dom"); -var lang = require("../lib/lang"); -var useragent = require("../lib/useragent"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; - -var CHAR_COUNT = 0; - -var FontMetrics = exports.FontMetrics = function(parentEl) { - this.el = dom.createElement("div"); - this.$setMeasureNodeStyles(this.el.style, true); - - this.$main = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$main.style); - - this.$measureNode = dom.createElement("div"); - this.$setMeasureNodeStyles(this.$measureNode.style); - - - this.el.appendChild(this.$main); - this.el.appendChild(this.$measureNode); - parentEl.appendChild(this.el); - - if (!CHAR_COUNT) - this.$testFractionalRect(); - this.$measureNode.innerHTML = lang.stringRepeat("X", CHAR_COUNT); - - this.$characterSize = {width: 0, height: 0}; - this.checkForSizeChanges(); -}; - -(function() { - - oop.implement(this, EventEmitter); - - this.$characterSize = {width: 0, height: 0}; - - this.$testFractionalRect = function() { - var el = dom.createElement("div"); - this.$setMeasureNodeStyles(el.style); - el.style.width = "0.2px"; - document.documentElement.appendChild(el); - var w = el.getBoundingClientRect().width; - if (w > 0 && w < 1) - CHAR_COUNT = 50; - else - CHAR_COUNT = 100; - el.parentNode.removeChild(el); - }; - - this.$setMeasureNodeStyles = function(style, isRoot) { - style.width = style.height = "auto"; - style.left = style.top = "0px"; - style.visibility = "hidden"; - style.position = "absolute"; - style.whiteSpace = "pre"; - - if (useragent.isIE < 8) { - style["font-family"] = "inherit"; - } else { - style.font = "inherit"; - } - style.overflow = isRoot ? "hidden" : "visible"; - }; - - this.checkForSizeChanges = function() { - var size = this.$measureSizes(); - if (size && (this.$characterSize.width !== size.width || this.$characterSize.height !== size.height)) { - this.$measureNode.style.fontWeight = "bold"; - var boldSize = this.$measureSizes(); - this.$measureNode.style.fontWeight = ""; - this.$characterSize = size; - this.charSizes = Object.create(null); - this.allowBoldFonts = boldSize && boldSize.width === size.width && boldSize.height === size.height; - this._emit("changeCharacterSize", {data: size}); - } - }; - - this.$pollSizeChanges = function() { - if (this.$pollSizeChangesTimer) - return this.$pollSizeChangesTimer; - var self = this; - return this.$pollSizeChangesTimer = setInterval(function() { - self.checkForSizeChanges(); - }, 500); - }; - - this.setPolling = function(val) { - if (val) { - this.$pollSizeChanges(); - } else if (this.$pollSizeChangesTimer) { - clearInterval(this.$pollSizeChangesTimer); - this.$pollSizeChangesTimer = 0; - } - }; - - this.$measureSizes = function() { - if (CHAR_COUNT === 50) { - var rect = null; - try { - rect = this.$measureNode.getBoundingClientRect(); - } catch(e) { - rect = {width: 0, height:0 }; - } - var size = { - height: rect.height, - width: rect.width / CHAR_COUNT - }; - } else { - var size = { - height: this.$measureNode.clientHeight, - width: this.$measureNode.clientWidth / CHAR_COUNT - }; - } - if (size.width === 0 || size.height === 0) - return null; - return size; - }; - - this.$measureCharWidth = function(ch) { - this.$main.innerHTML = lang.stringRepeat(ch, CHAR_COUNT); - var rect = this.$main.getBoundingClientRect(); - return rect.width / CHAR_COUNT; - }; - - this.getCharacterWidth = function(ch) { - var w = this.charSizes[ch]; - if (w === undefined) { - w = this.charSizes[ch] = this.$measureCharWidth(ch) / this.$characterSize.width; - } - return w; - }; - - this.destroy = function() { - clearInterval(this.$pollSizeChangesTimer); - if (this.el && this.el.parentNode) - this.el.parentNode.removeChild(this.el); - }; - -}).call(FontMetrics.prototype); - -}); - -ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var config = require("./config"); -var useragent = require("./lib/useragent"); -var GutterLayer = require("./layer/gutter").Gutter; -var MarkerLayer = require("./layer/marker").Marker; -var TextLayer = require("./layer/text").Text; -var CursorLayer = require("./layer/cursor").Cursor; -var HScrollBar = require("./scrollbar").HScrollBar; -var VScrollBar = require("./scrollbar").VScrollBar; -var RenderLoop = require("./renderloop").RenderLoop; -var FontMetrics = require("./layer/font_metrics").FontMetrics; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var editorCss = ".ace_editor {\ -position: relative;\ -overflow: hidden;\ -font: 12px/normal 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;\ -direction: ltr;\ -}\ -.ace_scroller {\ -position: absolute;\ -overflow: hidden;\ -top: 0;\ -bottom: 0;\ -background-color: inherit;\ --ms-user-select: none;\ --moz-user-select: none;\ --webkit-user-select: none;\ -user-select: none;\ -cursor: text;\ -}\ -.ace_content {\ -position: absolute;\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -min-width: 100%;\ -}\ -.ace_dragging .ace_scroller:before{\ -position: absolute;\ -top: 0;\ -left: 0;\ -right: 0;\ -bottom: 0;\ -content: '';\ -background: rgba(250, 250, 250, 0.01);\ -z-index: 1000;\ -}\ -.ace_dragging.ace_dark .ace_scroller:before{\ -background: rgba(0, 0, 0, 0.01);\ -}\ -.ace_selecting, .ace_selecting * {\ -cursor: text !important;\ -}\ -.ace_gutter {\ -position: absolute;\ -overflow : hidden;\ -width: auto;\ -top: 0;\ -bottom: 0;\ -left: 0;\ -cursor: default;\ -z-index: 4;\ --ms-user-select: none;\ --moz-user-select: none;\ --webkit-user-select: none;\ -user-select: none;\ -}\ -.ace_gutter-active-line {\ -position: absolute;\ -left: 0;\ -right: 0;\ -}\ -.ace_scroller.ace_scroll-left {\ -box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;\ -}\ -.ace_gutter-cell {\ -padding-left: 19px;\ -padding-right: 6px;\ -background-repeat: no-repeat;\ -}\ -.ace_gutter-cell.ace_error {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==\");\ -background-repeat: no-repeat;\ -background-position: 2px center;\ -}\ -.ace_gutter-cell.ace_warning {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==\");\ -background-position: 2px center;\ -}\ -.ace_gutter-cell.ace_info {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=\");\ -background-position: 2px center;\ -}\ -.ace_dark .ace_gutter-cell.ace_info {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC\");\ -}\ -.ace_scrollbar {\ -position: absolute;\ -right: 0;\ -bottom: 0;\ -z-index: 6;\ -}\ -.ace_scrollbar-inner {\ -position: absolute;\ -cursor: text;\ -left: 0;\ -top: 0;\ -}\ -.ace_scrollbar-v{\ -overflow-x: hidden;\ -overflow-y: scroll;\ -top: 0;\ -}\ -.ace_scrollbar-h {\ -overflow-x: scroll;\ -overflow-y: hidden;\ -left: 0;\ -}\ -.ace_print-margin {\ -position: absolute;\ -height: 100%;\ -}\ -.ace_text-input {\ -position: absolute;\ -z-index: 0;\ -width: 0.5em;\ -height: 1em;\ -opacity: 0;\ -background: transparent;\ --moz-appearance: none;\ -appearance: none;\ -border: none;\ -resize: none;\ -outline: none;\ -overflow: hidden;\ -font: inherit;\ -padding: 0 1px;\ -margin: 0 -1px;\ -text-indent: -1em;\ --ms-user-select: text;\ --moz-user-select: text;\ --webkit-user-select: text;\ -user-select: text;\ -white-space: pre!important;\ -}\ -.ace_text-input.ace_composition {\ -background: inherit;\ -color: inherit;\ -z-index: 1000;\ -opacity: 1;\ -text-indent: 0;\ -}\ -.ace_layer {\ -z-index: 1;\ -position: absolute;\ -overflow: hidden;\ -word-wrap: normal;\ -white-space: pre;\ -height: 100%;\ -width: 100%;\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -pointer-events: none;\ -}\ -.ace_gutter-layer {\ -position: relative;\ -width: auto;\ -text-align: right;\ -pointer-events: auto;\ -}\ -.ace_text-layer {\ -font: inherit !important;\ -}\ -.ace_cjk {\ -display: inline-block;\ -text-align: center;\ -}\ -.ace_cursor-layer {\ -z-index: 4;\ -}\ -.ace_cursor {\ -z-index: 4;\ -position: absolute;\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -border-left: 2px solid;\ -transform: translatez(0);\ -}\ -.ace_slim-cursors .ace_cursor {\ -border-left-width: 1px;\ -}\ -.ace_overwrite-cursors .ace_cursor {\ -border-left-width: 0;\ -border-bottom: 1px solid;\ -}\ -.ace_hidden-cursors .ace_cursor {\ -opacity: 0.2;\ -}\ -.ace_smooth-blinking .ace_cursor {\ --webkit-transition: opacity 0.18s;\ -transition: opacity 0.18s;\ -}\ -.ace_editor.ace_multiselect .ace_cursor {\ -border-left-width: 1px;\ -}\ -.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {\ -position: absolute;\ -z-index: 3;\ -}\ -.ace_marker-layer .ace_selection {\ -position: absolute;\ -z-index: 5;\ -}\ -.ace_marker-layer .ace_bracket {\ -position: absolute;\ -z-index: 6;\ -}\ -.ace_marker-layer .ace_active-line {\ -position: absolute;\ -z-index: 2;\ -}\ -.ace_marker-layer .ace_selected-word {\ -position: absolute;\ -z-index: 4;\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -}\ -.ace_line .ace_fold {\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -display: inline-block;\ -height: 11px;\ -margin-top: -2px;\ -vertical-align: middle;\ -background-image:\ -url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ -url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=\");\ -background-repeat: no-repeat, repeat-x;\ -background-position: center center, top left;\ -color: transparent;\ -border: 1px solid black;\ -border-radius: 2px;\ -cursor: pointer;\ -pointer-events: auto;\ -}\ -.ace_dark .ace_fold {\ -}\ -.ace_fold:hover{\ -background-image:\ -url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII=\"),\ -url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC\");\ -}\ -.ace_tooltip {\ -background-color: #FFF;\ -background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));\ -background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));\ -border: 1px solid gray;\ -border-radius: 1px;\ -box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);\ -color: black;\ -max-width: 100%;\ -padding: 3px 4px;\ -position: fixed;\ -z-index: 999999;\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -cursor: default;\ -white-space: pre;\ -word-wrap: break-word;\ -line-height: normal;\ -font-style: normal;\ -font-weight: normal;\ -letter-spacing: normal;\ -pointer-events: none;\ -}\ -.ace_folding-enabled > .ace_gutter-cell {\ -padding-right: 13px;\ -}\ -.ace_fold-widget {\ --moz-box-sizing: border-box;\ --webkit-box-sizing: border-box;\ -box-sizing: border-box;\ -margin: 0 -12px 0 1px;\ -display: none;\ -width: 11px;\ -vertical-align: top;\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==\");\ -background-repeat: no-repeat;\ -background-position: center;\ -border-radius: 3px;\ -border: 1px solid transparent;\ -cursor: pointer;\ -}\ -.ace_folding-enabled .ace_fold-widget {\ -display: inline-block; \ -}\ -.ace_fold-widget.ace_end {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==\");\ -}\ -.ace_fold-widget.ace_closed {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==\");\ -}\ -.ace_fold-widget:hover {\ -border: 1px solid rgba(0, 0, 0, 0.3);\ -background-color: rgba(255, 255, 255, 0.2);\ -box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);\ -}\ -.ace_fold-widget:active {\ -border: 1px solid rgba(0, 0, 0, 0.4);\ -background-color: rgba(0, 0, 0, 0.05);\ -box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);\ -}\ -.ace_dark .ace_fold-widget {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC\");\ -}\ -.ace_dark .ace_fold-widget.ace_end {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==\");\ -}\ -.ace_dark .ace_fold-widget.ace_closed {\ -background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==\");\ -}\ -.ace_dark .ace_fold-widget:hover {\ -box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ -background-color: rgba(255, 255, 255, 0.1);\ -}\ -.ace_dark .ace_fold-widget:active {\ -box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);\ -}\ -.ace_fold-widget.ace_invalid {\ -background-color: #FFB4B4;\ -border-color: #DE5555;\ -}\ -.ace_fade-fold-widgets .ace_fold-widget {\ --webkit-transition: opacity 0.4s ease 0.05s;\ -transition: opacity 0.4s ease 0.05s;\ -opacity: 0;\ -}\ -.ace_fade-fold-widgets:hover .ace_fold-widget {\ --webkit-transition: opacity 0.05s ease 0.05s;\ -transition: opacity 0.05s ease 0.05s;\ -opacity:1;\ -}\ -.ace_underline {\ -text-decoration: underline;\ -}\ -.ace_bold {\ -font-weight: bold;\ -}\ -.ace_nobold .ace_bold {\ -font-weight: normal;\ -}\ -.ace_italic {\ -font-style: italic;\ -}\ -.ace_error-marker {\ -background-color: rgba(255, 0, 0,0.2);\ -position: absolute;\ -z-index: 9;\ -}\ -.ace_highlight-marker {\ -background-color: rgba(255, 255, 0,0.2);\ -position: absolute;\ -z-index: 8;\ -}\ -.ace_br1 {border-top-left-radius : 3px;}\ -.ace_br2 {border-top-right-radius : 3px;}\ -.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}\ -.ace_br4 {border-bottom-right-radius: 3px;}\ -.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}\ -.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}\ -.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}\ -.ace_br8 {border-bottom-left-radius : 3px;}\ -.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}\ -.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}\ -.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}\ -.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ -.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ -.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ -.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}\ -"; - -dom.importCssString(editorCss, "ace_editor.css"); - -var VirtualRenderer = function(container, theme) { - var _self = this; - - this.container = container || dom.createElement("div"); - this.$keepTextAreaAtCursor = !useragent.isOldIE; - - dom.addCssClass(this.container, "ace_editor"); - - this.setTheme(theme); - - this.$gutter = dom.createElement("div"); - this.$gutter.className = "ace_gutter"; - this.container.appendChild(this.$gutter); - - this.scroller = dom.createElement("div"); - this.scroller.className = "ace_scroller"; - this.container.appendChild(this.scroller); - - this.content = dom.createElement("div"); - this.content.className = "ace_content"; - this.scroller.appendChild(this.content); - - this.$gutterLayer = new GutterLayer(this.$gutter); - this.$gutterLayer.on("changeGutterWidth", this.onGutterResize.bind(this)); - - this.$markerBack = new MarkerLayer(this.content); - - var textLayer = this.$textLayer = new TextLayer(this.content); - this.canvas = textLayer.element; - - this.$markerFront = new MarkerLayer(this.content); - - this.$cursorLayer = new CursorLayer(this.content); - this.$horizScroll = false; - this.$vScroll = false; - - this.scrollBar = - this.scrollBarV = new VScrollBar(this.container, this); - this.scrollBarH = new HScrollBar(this.container, this); - this.scrollBarV.addEventListener("scroll", function(e) { - if (!_self.$scrollAnimation) - _self.session.setScrollTop(e.data - _self.scrollMargin.top); - }); - this.scrollBarH.addEventListener("scroll", function(e) { - if (!_self.$scrollAnimation) - _self.session.setScrollLeft(e.data - _self.scrollMargin.left); - }); - - this.scrollTop = 0; - this.scrollLeft = 0; - - this.cursorPos = { - row : 0, - column : 0 - }; - - this.$fontMetrics = new FontMetrics(this.container); - this.$textLayer.$setFontMetrics(this.$fontMetrics); - this.$textLayer.addEventListener("changeCharacterSize", function(e) { - _self.updateCharacterSize(); - _self.onResize(true, _self.gutterWidth, _self.$size.width, _self.$size.height); - _self._signal("changeCharacterSize", e); - }); - - this.$size = { - width: 0, - height: 0, - scrollerHeight: 0, - scrollerWidth: 0, - $dirty: true - }; - - this.layerConfig = { - width : 1, - padding : 0, - firstRow : 0, - firstRowScreen: 0, - lastRow : 0, - lineHeight : 0, - characterWidth : 0, - minHeight : 1, - maxHeight : 1, - offset : 0, - height : 1, - gutterOffset: 1 - }; - - this.scrollMargin = { - left: 0, - right: 0, - top: 0, - bottom: 0, - v: 0, - h: 0 - }; - - this.$loop = new RenderLoop( - this.$renderChanges.bind(this), - this.container.ownerDocument.defaultView - ); - this.$loop.schedule(this.CHANGE_FULL); - - this.updateCharacterSize(); - this.setPadding(4); - config.resetOptions(this); - config._emit("renderer", this); -}; - -(function() { - - this.CHANGE_CURSOR = 1; - this.CHANGE_MARKER = 2; - this.CHANGE_GUTTER = 4; - this.CHANGE_SCROLL = 8; - this.CHANGE_LINES = 16; - this.CHANGE_TEXT = 32; - this.CHANGE_SIZE = 64; - this.CHANGE_MARKER_BACK = 128; - this.CHANGE_MARKER_FRONT = 256; - this.CHANGE_FULL = 512; - this.CHANGE_H_SCROLL = 1024; - - oop.implement(this, EventEmitter); - - this.updateCharacterSize = function() { - if (this.$textLayer.allowBoldFonts != this.$allowBoldFonts) { - this.$allowBoldFonts = this.$textLayer.allowBoldFonts; - this.setStyle("ace_nobold", !this.$allowBoldFonts); - } - - this.layerConfig.characterWidth = - this.characterWidth = this.$textLayer.getCharacterWidth(); - this.layerConfig.lineHeight = - this.lineHeight = this.$textLayer.getLineHeight(); - this.$updatePrintMargin(); - }; - this.setSession = function(session) { - if (this.session) - this.session.doc.off("changeNewLineMode", this.onChangeNewLineMode); - - this.session = session; - if (session && this.scrollMargin.top && session.getScrollTop() <= 0) - session.setScrollTop(-this.scrollMargin.top); - - this.$cursorLayer.setSession(session); - this.$markerBack.setSession(session); - this.$markerFront.setSession(session); - this.$gutterLayer.setSession(session); - this.$textLayer.setSession(session); - if (!session) - return; - - this.$loop.schedule(this.CHANGE_FULL); - this.session.$setFontMetrics(this.$fontMetrics); - - this.onChangeNewLineMode = this.onChangeNewLineMode.bind(this); - this.onChangeNewLineMode() - this.session.doc.on("changeNewLineMode", this.onChangeNewLineMode); - }; - this.updateLines = function(firstRow, lastRow, force) { - if (lastRow === undefined) - lastRow = Infinity; - - if (!this.$changedLines) { - this.$changedLines = { - firstRow: firstRow, - lastRow: lastRow - }; - } - else { - if (this.$changedLines.firstRow > firstRow) - this.$changedLines.firstRow = firstRow; - - if (this.$changedLines.lastRow < lastRow) - this.$changedLines.lastRow = lastRow; - } - if (this.$changedLines.lastRow < this.layerConfig.firstRow) { - if (force) - this.$changedLines.lastRow = this.layerConfig.lastRow; - else - return; - } - if (this.$changedLines.firstRow > this.layerConfig.lastRow) - return; - this.$loop.schedule(this.CHANGE_LINES); - }; - - this.onChangeNewLineMode = function() { - this.$loop.schedule(this.CHANGE_TEXT); - this.$textLayer.$updateEolChar(); - }; - - this.onChangeTabSize = function() { - this.$loop.schedule(this.CHANGE_TEXT | this.CHANGE_MARKER); - this.$textLayer.onChangeTabSize(); - }; - this.updateText = function() { - this.$loop.schedule(this.CHANGE_TEXT); - }; - this.updateFull = function(force) { - if (force) - this.$renderChanges(this.CHANGE_FULL, true); - else - this.$loop.schedule(this.CHANGE_FULL); - }; - this.updateFontSize = function() { - this.$textLayer.checkForSizeChanges(); - }; - - this.$changes = 0; - this.$updateSizeAsync = function() { - if (this.$loop.pending) - this.$size.$dirty = true; - else - this.onResize(); - }; - this.onResize = function(force, gutterWidth, width, height) { - if (this.resizing > 2) - return; - else if (this.resizing > 0) - this.resizing++; - else - this.resizing = force ? 1 : 0; - var el = this.container; - if (!height) - height = el.clientHeight || el.scrollHeight; - if (!width) - width = el.clientWidth || el.scrollWidth; - var changes = this.$updateCachedSize(force, gutterWidth, width, height); - - - if (!this.$size.scrollerHeight || (!width && !height)) - return this.resizing = 0; - - if (force) - this.$gutterLayer.$padding = null; - - if (force) - this.$renderChanges(changes | this.$changes, true); - else - this.$loop.schedule(changes | this.$changes); - - if (this.resizing) - this.resizing = 0; - this.scrollBarV.scrollLeft = this.scrollBarV.scrollTop = null; - }; - - this.$updateCachedSize = function(force, gutterWidth, width, height) { - height -= (this.$extraHeight || 0); - var changes = 0; - var size = this.$size; - var oldSize = { - width: size.width, - height: size.height, - scrollerHeight: size.scrollerHeight, - scrollerWidth: size.scrollerWidth - }; - if (height && (force || size.height != height)) { - size.height = height; - changes |= this.CHANGE_SIZE; - - size.scrollerHeight = size.height; - if (this.$horizScroll) - size.scrollerHeight -= this.scrollBarH.getHeight(); - this.scrollBarV.element.style.bottom = this.scrollBarH.getHeight() + "px"; - - changes = changes | this.CHANGE_SCROLL; - } - - if (width && (force || size.width != width)) { - changes |= this.CHANGE_SIZE; - size.width = width; - - if (gutterWidth == null) - gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; - - this.gutterWidth = gutterWidth; - - this.scrollBarH.element.style.left = - this.scroller.style.left = gutterWidth + "px"; - size.scrollerWidth = Math.max(0, width - gutterWidth - this.scrollBarV.getWidth()); - - this.scrollBarH.element.style.right = - this.scroller.style.right = this.scrollBarV.getWidth() + "px"; - this.scroller.style.bottom = this.scrollBarH.getHeight() + "px"; - - if (this.session && this.session.getUseWrapMode() && this.adjustWrapLimit() || force) - changes |= this.CHANGE_FULL; - } - - size.$dirty = !width || !height; - - if (changes) - this._signal("resize", oldSize); - - return changes; - }; - - this.onGutterResize = function() { - var gutterWidth = this.$showGutter ? this.$gutter.offsetWidth : 0; - if (gutterWidth != this.gutterWidth) - this.$changes |= this.$updateCachedSize(true, gutterWidth, this.$size.width, this.$size.height); - - if (this.session.getUseWrapMode() && this.adjustWrapLimit()) { - this.$loop.schedule(this.CHANGE_FULL); - } else if (this.$size.$dirty) { - this.$loop.schedule(this.CHANGE_FULL); - } else { - this.$computeLayerConfig(); - this.$loop.schedule(this.CHANGE_MARKER); - } - }; - this.adjustWrapLimit = function() { - var availableWidth = this.$size.scrollerWidth - this.$padding * 2; - var limit = Math.floor(availableWidth / this.characterWidth); - return this.session.adjustWrapLimit(limit, this.$showPrintMargin && this.$printMarginColumn); - }; - this.setAnimatedScroll = function(shouldAnimate){ - this.setOption("animatedScroll", shouldAnimate); - }; - this.getAnimatedScroll = function() { - return this.$animatedScroll; - }; - this.setShowInvisibles = function(showInvisibles) { - this.setOption("showInvisibles", showInvisibles); - }; - this.getShowInvisibles = function() { - return this.getOption("showInvisibles"); - }; - this.getDisplayIndentGuides = function() { - return this.getOption("displayIndentGuides"); - }; - - this.setDisplayIndentGuides = function(display) { - this.setOption("displayIndentGuides", display); - }; - this.setShowPrintMargin = function(showPrintMargin) { - this.setOption("showPrintMargin", showPrintMargin); - }; - this.getShowPrintMargin = function() { - return this.getOption("showPrintMargin"); - }; - this.setPrintMarginColumn = function(showPrintMargin) { - this.setOption("printMarginColumn", showPrintMargin); - }; - this.getPrintMarginColumn = function() { - return this.getOption("printMarginColumn"); - }; - this.getShowGutter = function(){ - return this.getOption("showGutter"); - }; - this.setShowGutter = function(show){ - return this.setOption("showGutter", show); - }; - - this.getFadeFoldWidgets = function(){ - return this.getOption("fadeFoldWidgets") - }; - - this.setFadeFoldWidgets = function(show) { - this.setOption("fadeFoldWidgets", show); - }; - - this.setHighlightGutterLine = function(shouldHighlight) { - this.setOption("highlightGutterLine", shouldHighlight); - }; - - this.getHighlightGutterLine = function() { - return this.getOption("highlightGutterLine"); - }; - - this.$updateGutterLineHighlight = function() { - var pos = this.$cursorLayer.$pixelPos; - var height = this.layerConfig.lineHeight; - if (this.session.getUseWrapMode()) { - var cursor = this.session.selection.getCursor(); - cursor.column = 0; - pos = this.$cursorLayer.getPixelPosition(cursor, true); - height *= this.session.getRowLength(cursor.row); - } - this.$gutterLineHighlight.style.top = pos.top - this.layerConfig.offset + "px"; - this.$gutterLineHighlight.style.height = height + "px"; - }; - - this.$updatePrintMargin = function() { - if (!this.$showPrintMargin && !this.$printMarginEl) - return; - - if (!this.$printMarginEl) { - var containerEl = dom.createElement("div"); - containerEl.className = "ace_layer ace_print-margin-layer"; - this.$printMarginEl = dom.createElement("div"); - this.$printMarginEl.className = "ace_print-margin"; - containerEl.appendChild(this.$printMarginEl); - this.content.insertBefore(containerEl, this.content.firstChild); - } - - var style = this.$printMarginEl.style; - style.left = ((this.characterWidth * this.$printMarginColumn) + this.$padding) + "px"; - style.visibility = this.$showPrintMargin ? "visible" : "hidden"; - - if (this.session && this.session.$wrap == -1) - this.adjustWrapLimit(); - }; - this.getContainerElement = function() { - return this.container; - }; - this.getMouseEventTarget = function() { - return this.scroller; - }; - this.getTextAreaContainer = function() { - return this.container; - }; - this.$moveTextAreaToCursor = function() { - if (!this.$keepTextAreaAtCursor) - return; - var config = this.layerConfig; - var posTop = this.$cursorLayer.$pixelPos.top; - var posLeft = this.$cursorLayer.$pixelPos.left; - posTop -= config.offset; - - var style = this.textarea.style; - var h = this.lineHeight; - if (posTop < 0 || posTop > config.height - h) { - style.top = style.left = "0"; - return; - } - - var w = this.characterWidth; - if (this.$composition) { - var val = this.textarea.value.replace(/^\x01+/, ""); - w *= (this.session.$getStringScreenWidth(val)[0]+2); - h += 2; - } - posLeft -= this.scrollLeft; - if (posLeft > this.$size.scrollerWidth - w) - posLeft = this.$size.scrollerWidth - w; - - posLeft += this.gutterWidth; - style.height = h + "px"; - style.width = w + "px"; - style.left = Math.min(posLeft, this.$size.scrollerWidth - w) + "px"; - style.top = Math.min(posTop, this.$size.height - h) + "px"; - }; - this.getFirstVisibleRow = function() { - return this.layerConfig.firstRow; - }; - this.getFirstFullyVisibleRow = function() { - return this.layerConfig.firstRow + (this.layerConfig.offset === 0 ? 0 : 1); - }; - this.getLastFullyVisibleRow = function() { - var config = this.layerConfig; - var lastRow = config.lastRow - var top = this.session.documentToScreenRow(lastRow, 0) * config.lineHeight; - if (top - this.session.getScrollTop() > config.height - config.lineHeight) - return lastRow - 1; - return lastRow; - }; - this.getLastVisibleRow = function() { - return this.layerConfig.lastRow; - }; - - this.$padding = null; - this.setPadding = function(padding) { - this.$padding = padding; - this.$textLayer.setPadding(padding); - this.$cursorLayer.setPadding(padding); - this.$markerFront.setPadding(padding); - this.$markerBack.setPadding(padding); - this.$loop.schedule(this.CHANGE_FULL); - this.$updatePrintMargin(); - }; - - this.setScrollMargin = function(top, bottom, left, right) { - var sm = this.scrollMargin; - sm.top = top|0; - sm.bottom = bottom|0; - sm.right = right|0; - sm.left = left|0; - sm.v = sm.top + sm.bottom; - sm.h = sm.left + sm.right; - if (sm.top && this.scrollTop <= 0 && this.session) - this.session.setScrollTop(-sm.top); - this.updateFull(); - }; - this.getHScrollBarAlwaysVisible = function() { - return this.$hScrollBarAlwaysVisible; - }; - this.setHScrollBarAlwaysVisible = function(alwaysVisible) { - this.setOption("hScrollBarAlwaysVisible", alwaysVisible); - }; - this.getVScrollBarAlwaysVisible = function() { - return this.$vScrollBarAlwaysVisible; - }; - this.setVScrollBarAlwaysVisible = function(alwaysVisible) { - this.setOption("vScrollBarAlwaysVisible", alwaysVisible); - }; - - this.$updateScrollBarV = function() { - var scrollHeight = this.layerConfig.maxHeight; - var scrollerHeight = this.$size.scrollerHeight; - if (!this.$maxLines && this.$scrollPastEnd) { - scrollHeight -= (scrollerHeight - this.lineHeight) * this.$scrollPastEnd; - if (this.scrollTop > scrollHeight - scrollerHeight) { - scrollHeight = this.scrollTop + scrollerHeight; - this.scrollBarV.scrollTop = null; - } - } - this.scrollBarV.setScrollHeight(scrollHeight + this.scrollMargin.v); - this.scrollBarV.setScrollTop(this.scrollTop + this.scrollMargin.top); - }; - this.$updateScrollBarH = function() { - this.scrollBarH.setScrollWidth(this.layerConfig.width + 2 * this.$padding + this.scrollMargin.h); - this.scrollBarH.setScrollLeft(this.scrollLeft + this.scrollMargin.left); - }; - - this.$frozen = false; - this.freeze = function() { - this.$frozen = true; - }; - - this.unfreeze = function() { - this.$frozen = false; - }; - - this.$renderChanges = function(changes, force) { - if (this.$changes) { - changes |= this.$changes; - this.$changes = 0; - } - if ((!this.session || !this.container.offsetWidth || this.$frozen) || (!changes && !force)) { - this.$changes |= changes; - return; - } - if (this.$size.$dirty) { - this.$changes |= changes; - return this.onResize(true); - } - if (!this.lineHeight) { - this.$textLayer.checkForSizeChanges(); - } - - this._signal("beforeRender"); - var config = this.layerConfig; - if (changes & this.CHANGE_FULL || - changes & this.CHANGE_SIZE || - changes & this.CHANGE_TEXT || - changes & this.CHANGE_LINES || - changes & this.CHANGE_SCROLL || - changes & this.CHANGE_H_SCROLL - ) { - changes |= this.$computeLayerConfig(); - if (config.firstRow != this.layerConfig.firstRow && config.firstRowScreen == this.layerConfig.firstRowScreen) { - var st = this.scrollTop + (config.firstRow - this.layerConfig.firstRow) * this.lineHeight; - if (st > 0) { - this.scrollTop = st; - changes = changes | this.CHANGE_SCROLL; - changes |= this.$computeLayerConfig(); - } - } - config = this.layerConfig; - this.$updateScrollBarV(); - if (changes & this.CHANGE_H_SCROLL) - this.$updateScrollBarH(); - this.$gutterLayer.element.style.marginTop = (-config.offset) + "px"; - this.content.style.marginTop = (-config.offset) + "px"; - this.content.style.width = config.width + 2 * this.$padding + "px"; - this.content.style.height = config.minHeight + "px"; - } - if (changes & this.CHANGE_H_SCROLL) { - this.content.style.marginLeft = -this.scrollLeft + "px"; - this.scroller.className = this.scrollLeft <= 0 ? "ace_scroller" : "ace_scroller ace_scroll-left"; - } - if (changes & this.CHANGE_FULL) { - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this.$highlightGutterLine && this.$updateGutterLineHighlight(); - this._signal("afterRender"); - return; - } - if (changes & this.CHANGE_SCROLL) { - if (changes & this.CHANGE_TEXT || changes & this.CHANGE_LINES) - this.$textLayer.update(config); - else - this.$textLayer.scrollLines(config); - - if (this.$showGutter) - this.$gutterLayer.update(config); - this.$markerBack.update(config); - this.$markerFront.update(config); - this.$cursorLayer.update(config); - this.$highlightGutterLine && this.$updateGutterLineHighlight(); - this.$moveTextAreaToCursor(); - this._signal("afterRender"); - return; - } - - if (changes & this.CHANGE_TEXT) { - this.$textLayer.update(config); - if (this.$showGutter) - this.$gutterLayer.update(config); - } - else if (changes & this.CHANGE_LINES) { - if (this.$updateLines() || (changes & this.CHANGE_GUTTER) && this.$showGutter) - this.$gutterLayer.update(config); - } - else if (changes & this.CHANGE_TEXT || changes & this.CHANGE_GUTTER) { - if (this.$showGutter) - this.$gutterLayer.update(config); - } - - if (changes & this.CHANGE_CURSOR) { - this.$cursorLayer.update(config); - this.$moveTextAreaToCursor(); - this.$highlightGutterLine && this.$updateGutterLineHighlight(); - } - - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_FRONT)) { - this.$markerFront.update(config); - } - - if (changes & (this.CHANGE_MARKER | this.CHANGE_MARKER_BACK)) { - this.$markerBack.update(config); - } - - this._signal("afterRender"); - }; - - - this.$autosize = function() { - var height = this.session.getScreenLength() * this.lineHeight; - var maxHeight = this.$maxLines * this.lineHeight; - var desiredHeight = Math.max( - (this.$minLines||1) * this.lineHeight, - Math.min(maxHeight, height) - ) + this.scrollMargin.v + (this.$extraHeight || 0); - if (this.$horizScroll) - desiredHeight += this.scrollBarH.getHeight(); - var vScroll = height > maxHeight; - - if (desiredHeight != this.desiredHeight || - this.$size.height != this.desiredHeight || vScroll != this.$vScroll) { - if (vScroll != this.$vScroll) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - - var w = this.container.clientWidth; - this.container.style.height = desiredHeight + "px"; - this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); - this.desiredHeight = desiredHeight; - - this._signal("autosize"); - } - }; - - this.$computeLayerConfig = function() { - var session = this.session; - var size = this.$size; - - var hideScrollbars = size.height <= 2 * this.lineHeight; - var screenLines = this.session.getScreenLength(); - var maxHeight = screenLines * this.lineHeight; - - var longestLine = this.$getLongestLine(); - - var horizScroll = !hideScrollbars && (this.$hScrollBarAlwaysVisible || - size.scrollerWidth - longestLine - 2 * this.$padding < 0); - - var hScrollChanged = this.$horizScroll !== horizScroll; - if (hScrollChanged) { - this.$horizScroll = horizScroll; - this.scrollBarH.setVisible(horizScroll); - } - var vScrollBefore = this.$vScroll; // autosize can change vscroll value in which case we need to update longestLine - if (this.$maxLines && this.lineHeight > 1) - this.$autosize(); - - var offset = this.scrollTop % this.lineHeight; - var minHeight = size.scrollerHeight + this.lineHeight; - - var scrollPastEnd = !this.$maxLines && this.$scrollPastEnd - ? (size.scrollerHeight - this.lineHeight) * this.$scrollPastEnd - : 0; - maxHeight += scrollPastEnd; - - var sm = this.scrollMargin; - this.session.setScrollTop(Math.max(-sm.top, - Math.min(this.scrollTop, maxHeight - size.scrollerHeight + sm.bottom))); - - this.session.setScrollLeft(Math.max(-sm.left, Math.min(this.scrollLeft, - longestLine + 2 * this.$padding - size.scrollerWidth + sm.right))); - - var vScroll = !hideScrollbars && (this.$vScrollBarAlwaysVisible || - size.scrollerHeight - maxHeight + scrollPastEnd < 0 || this.scrollTop > sm.top); - var vScrollChanged = vScrollBefore !== vScroll; - if (vScrollChanged) { - this.$vScroll = vScroll; - this.scrollBarV.setVisible(vScroll); - } - - var lineCount = Math.ceil(minHeight / this.lineHeight) - 1; - var firstRow = Math.max(0, Math.round((this.scrollTop - offset) / this.lineHeight)); - var lastRow = firstRow + lineCount; - var firstRowScreen, firstRowHeight; - var lineHeight = this.lineHeight; - firstRow = session.screenToDocumentRow(firstRow, 0); - var foldLine = session.getFoldLine(firstRow); - if (foldLine) { - firstRow = foldLine.start.row; - } - - firstRowScreen = session.documentToScreenRow(firstRow, 0); - firstRowHeight = session.getRowLength(firstRow) * lineHeight; - - lastRow = Math.min(session.screenToDocumentRow(lastRow, 0), session.getLength() - 1); - minHeight = size.scrollerHeight + session.getRowLength(lastRow) * lineHeight + - firstRowHeight; - - offset = this.scrollTop - firstRowScreen * lineHeight; - - var changes = 0; - if (this.layerConfig.width != longestLine) - changes = this.CHANGE_H_SCROLL; - if (hScrollChanged || vScrollChanged) { - changes = this.$updateCachedSize(true, this.gutterWidth, size.width, size.height); - this._signal("scrollbarVisibilityChanged"); - if (vScrollChanged) - longestLine = this.$getLongestLine(); - } - - this.layerConfig = { - width : longestLine, - padding : this.$padding, - firstRow : firstRow, - firstRowScreen: firstRowScreen, - lastRow : lastRow, - lineHeight : lineHeight, - characterWidth : this.characterWidth, - minHeight : minHeight, - maxHeight : maxHeight, - offset : offset, - gutterOffset : Math.max(0, Math.ceil((offset + size.height - size.scrollerHeight) / lineHeight)), - height : this.$size.scrollerHeight - }; - - return changes; - }; - - this.$updateLines = function() { - var firstRow = this.$changedLines.firstRow; - var lastRow = this.$changedLines.lastRow; - this.$changedLines = null; - - var layerConfig = this.layerConfig; - - if (firstRow > layerConfig.lastRow + 1) { return; } - if (lastRow < layerConfig.firstRow) { return; } - if (lastRow === Infinity) { - if (this.$showGutter) - this.$gutterLayer.update(layerConfig); - this.$textLayer.update(layerConfig); - return; - } - this.$textLayer.updateLines(layerConfig, firstRow, lastRow); - return true; - }; - - this.$getLongestLine = function() { - var charCount = this.session.getScreenWidth(); - if (this.showInvisibles && !this.session.$useWrapMode) - charCount += 1; - - return Math.max(this.$size.scrollerWidth - 2 * this.$padding, Math.round(charCount * this.characterWidth)); - }; - this.updateFrontMarkers = function() { - this.$markerFront.setMarkers(this.session.getMarkers(true)); - this.$loop.schedule(this.CHANGE_MARKER_FRONT); - }; - this.updateBackMarkers = function() { - this.$markerBack.setMarkers(this.session.getMarkers()); - this.$loop.schedule(this.CHANGE_MARKER_BACK); - }; - this.addGutterDecoration = function(row, className){ - this.$gutterLayer.addGutterDecoration(row, className); - }; - this.removeGutterDecoration = function(row, className){ - this.$gutterLayer.removeGutterDecoration(row, className); - }; - this.updateBreakpoints = function(rows) { - this.$loop.schedule(this.CHANGE_GUTTER); - }; - this.setAnnotations = function(annotations) { - this.$gutterLayer.setAnnotations(annotations); - this.$loop.schedule(this.CHANGE_GUTTER); - }; - this.updateCursor = function() { - this.$loop.schedule(this.CHANGE_CURSOR); - }; - this.hideCursor = function() { - this.$cursorLayer.hideCursor(); - }; - this.showCursor = function() { - this.$cursorLayer.showCursor(); - }; - - this.scrollSelectionIntoView = function(anchor, lead, offset) { - this.scrollCursorIntoView(anchor, offset); - this.scrollCursorIntoView(lead, offset); - }; - this.scrollCursorIntoView = function(cursor, offset, $viewMargin) { - if (this.$size.scrollerHeight === 0) - return; - - var pos = this.$cursorLayer.getPixelPosition(cursor); - - var left = pos.left; - var top = pos.top; - - var topMargin = $viewMargin && $viewMargin.top || 0; - var bottomMargin = $viewMargin && $viewMargin.bottom || 0; - - var scrollTop = this.$scrollAnimation ? this.session.getScrollTop() : this.scrollTop; - - if (scrollTop + topMargin > top) { - if (offset && scrollTop + topMargin > top + this.lineHeight) - top -= offset * this.$size.scrollerHeight; - if (top === 0) - top = -this.scrollMargin.top; - this.session.setScrollTop(top); - } else if (scrollTop + this.$size.scrollerHeight - bottomMargin < top + this.lineHeight) { - if (offset && scrollTop + this.$size.scrollerHeight - bottomMargin < top - this.lineHeight) - top += offset * this.$size.scrollerHeight; - this.session.setScrollTop(top + this.lineHeight - this.$size.scrollerHeight); - } - - var scrollLeft = this.scrollLeft; - - if (scrollLeft > left) { - if (left < this.$padding + 2 * this.layerConfig.characterWidth) - left = -this.scrollMargin.left; - this.session.setScrollLeft(left); - } else if (scrollLeft + this.$size.scrollerWidth < left + this.characterWidth) { - this.session.setScrollLeft(Math.round(left + this.characterWidth - this.$size.scrollerWidth)); - } else if (scrollLeft <= this.$padding && left - scrollLeft < this.characterWidth) { - this.session.setScrollLeft(0); - } - }; - this.getScrollTop = function() { - return this.session.getScrollTop(); - }; - this.getScrollLeft = function() { - return this.session.getScrollLeft(); - }; - this.getScrollTopRow = function() { - return this.scrollTop / this.lineHeight; - }; - this.getScrollBottomRow = function() { - return Math.max(0, Math.floor((this.scrollTop + this.$size.scrollerHeight) / this.lineHeight) - 1); - }; - this.scrollToRow = function(row) { - this.session.setScrollTop(row * this.lineHeight); - }; - - this.alignCursor = function(cursor, alignment) { - if (typeof cursor == "number") - cursor = {row: cursor, column: 0}; - - var pos = this.$cursorLayer.getPixelPosition(cursor); - var h = this.$size.scrollerHeight - this.lineHeight; - var offset = pos.top - h * (alignment || 0); - - this.session.setScrollTop(offset); - return offset; - }; - - this.STEPS = 8; - this.$calcSteps = function(fromValue, toValue){ - var i = 0; - var l = this.STEPS; - var steps = []; - - var func = function(t, x_min, dx) { - return dx * (Math.pow(t - 1, 3) + 1) + x_min; - }; - - for (i = 0; i < l; ++i) - steps.push(func(i / this.STEPS, fromValue, toValue - fromValue)); - - return steps; - }; - this.scrollToLine = function(line, center, animate, callback) { - var pos = this.$cursorLayer.getPixelPosition({row: line, column: 0}); - var offset = pos.top; - if (center) - offset -= this.$size.scrollerHeight / 2; - - var initialScroll = this.scrollTop; - this.session.setScrollTop(offset); - if (animate !== false) - this.animateScrolling(initialScroll, callback); - }; - - this.animateScrolling = function(fromValue, callback) { - var toValue = this.scrollTop; - if (!this.$animatedScroll) - return; - var _self = this; - - if (fromValue == toValue) - return; - - if (this.$scrollAnimation) { - var oldSteps = this.$scrollAnimation.steps; - if (oldSteps.length) { - fromValue = oldSteps[0]; - if (fromValue == toValue) - return; - } - } - - var steps = _self.$calcSteps(fromValue, toValue); - this.$scrollAnimation = {from: fromValue, to: toValue, steps: steps}; - - clearInterval(this.$timer); - - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - this.$timer = setInterval(function() { - if (steps.length) { - _self.session.setScrollTop(steps.shift()); - _self.session.$scrollTop = toValue; - } else if (toValue != null) { - _self.session.$scrollTop = -1; - _self.session.setScrollTop(toValue); - toValue = null; - } else { - _self.$timer = clearInterval(_self.$timer); - _self.$scrollAnimation = null; - callback && callback(); - } - }, 10); - }; - this.scrollToY = function(scrollTop) { - if (this.scrollTop !== scrollTop) { - this.$loop.schedule(this.CHANGE_SCROLL); - this.scrollTop = scrollTop; - } - }; - this.scrollToX = function(scrollLeft) { - if (this.scrollLeft !== scrollLeft) - this.scrollLeft = scrollLeft; - this.$loop.schedule(this.CHANGE_H_SCROLL); - }; - this.scrollTo = function(x, y) { - this.session.setScrollTop(y); - this.session.setScrollLeft(y); - }; - this.scrollBy = function(deltaX, deltaY) { - deltaY && this.session.setScrollTop(this.session.getScrollTop() + deltaY); - deltaX && this.session.setScrollLeft(this.session.getScrollLeft() + deltaX); - }; - this.isScrollableBy = function(deltaX, deltaY) { - if (deltaY < 0 && this.session.getScrollTop() >= 1 - this.scrollMargin.top) - return true; - if (deltaY > 0 && this.session.getScrollTop() + this.$size.scrollerHeight - - this.layerConfig.maxHeight < -1 + this.scrollMargin.bottom) - return true; - if (deltaX < 0 && this.session.getScrollLeft() >= 1 - this.scrollMargin.left) - return true; - if (deltaX > 0 && this.session.getScrollLeft() + this.$size.scrollerWidth - - this.layerConfig.width < -1 + this.scrollMargin.right) - return true; - }; - - this.pixelToScreenCoordinates = function(x, y) { - var canvasPos = this.scroller.getBoundingClientRect(); - - var offset = (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth; - var row = Math.floor((y + this.scrollTop - canvasPos.top) / this.lineHeight); - var col = Math.round(offset); - - return {row: row, column: col, side: offset - col > 0 ? 1 : -1}; - }; - - this.screenToTextCoordinates = function(x, y) { - var canvasPos = this.scroller.getBoundingClientRect(); - - var col = Math.round( - (x + this.scrollLeft - canvasPos.left - this.$padding) / this.characterWidth - ); - - var row = (y + this.scrollTop - canvasPos.top) / this.lineHeight; - - return this.session.screenToDocumentPosition(row, Math.max(col, 0)); - }; - this.textToScreenCoordinates = function(row, column) { - var canvasPos = this.scroller.getBoundingClientRect(); - var pos = this.session.documentToScreenPosition(row, column); - - var x = this.$padding + Math.round(pos.column * this.characterWidth); - var y = pos.row * this.lineHeight; - - return { - pageX: canvasPos.left + x - this.scrollLeft, - pageY: canvasPos.top + y - this.scrollTop - }; - }; - this.visualizeFocus = function() { - dom.addCssClass(this.container, "ace_focus"); - }; - this.visualizeBlur = function() { - dom.removeCssClass(this.container, "ace_focus"); - }; - this.showComposition = function(position) { - if (!this.$composition) - this.$composition = { - keepTextAreaAtCursor: this.$keepTextAreaAtCursor, - cssText: this.textarea.style.cssText - }; - - this.$keepTextAreaAtCursor = true; - dom.addCssClass(this.textarea, "ace_composition"); - this.textarea.style.cssText = ""; - this.$moveTextAreaToCursor(); - }; - this.setCompositionText = function(text) { - this.$moveTextAreaToCursor(); - }; - this.hideComposition = function() { - if (!this.$composition) - return; - - dom.removeCssClass(this.textarea, "ace_composition"); - this.$keepTextAreaAtCursor = this.$composition.keepTextAreaAtCursor; - this.textarea.style.cssText = this.$composition.cssText; - this.$composition = null; - }; - this.setTheme = function(theme, cb) { - var _self = this; - this.$themeId = theme; - _self._dispatchEvent('themeChange',{theme:theme}); - - if (!theme || typeof theme == "string") { - var moduleName = theme || this.$options.theme.initialValue; - config.loadModule(["theme", moduleName], afterLoad); - } else { - afterLoad(theme); - } - - function afterLoad(module) { - if (_self.$themeId != theme) - return cb && cb(); - if (!module.cssClass) - return; - dom.importCssString( - module.cssText, - module.cssClass, - _self.container.ownerDocument - ); - - if (_self.theme) - dom.removeCssClass(_self.container, _self.theme.cssClass); - - var padding = "padding" in module ? module.padding - : "padding" in (_self.theme || {}) ? 4 : _self.$padding; - if (_self.$padding && padding != _self.$padding) - _self.setPadding(padding); - _self.$theme = module.cssClass; - - _self.theme = module; - dom.addCssClass(_self.container, module.cssClass); - dom.setCssClass(_self.container, "ace_dark", module.isDark); - if (_self.$size) { - _self.$size.width = 0; - _self.$updateSizeAsync(); - } - - _self._dispatchEvent('themeLoaded', {theme:module}); - cb && cb(); - } - }; - this.getTheme = function() { - return this.$themeId; - }; - this.setStyle = function(style, include) { - dom.setCssClass(this.container, style, include !== false); - }; - this.unsetStyle = function(style) { - dom.removeCssClass(this.container, style); - }; - - this.setCursorStyle = function(style) { - if (this.scroller.style.cursor != style) - this.scroller.style.cursor = style; - }; - this.setMouseCursor = function(cursorStyle) { - this.scroller.style.cursor = cursorStyle; - }; - this.destroy = function() { - this.$textLayer.destroy(); - this.$cursorLayer.destroy(); - }; - -}).call(VirtualRenderer.prototype); - - -config.defineOptions(VirtualRenderer.prototype, "renderer", { - animatedScroll: {initialValue: false}, - showInvisibles: { - set: function(value) { - if (this.$textLayer.setShowInvisibles(value)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: false - }, - showPrintMargin: { - set: function() { this.$updatePrintMargin(); }, - initialValue: true - }, - printMarginColumn: { - set: function() { this.$updatePrintMargin(); }, - initialValue: 80 - }, - printMargin: { - set: function(val) { - if (typeof val == "number") - this.$printMarginColumn = val; - this.$showPrintMargin = !!val; - this.$updatePrintMargin(); - }, - get: function() { - return this.$showPrintMargin && this.$printMarginColumn; - } - }, - showGutter: { - set: function(show){ - this.$gutter.style.display = show ? "block" : "none"; - this.$loop.schedule(this.CHANGE_FULL); - this.onGutterResize(); - }, - initialValue: true - }, - fadeFoldWidgets: { - set: function(show) { - dom.setCssClass(this.$gutter, "ace_fade-fold-widgets", show); - }, - initialValue: false - }, - showFoldWidgets: { - set: function(show) {this.$gutterLayer.setShowFoldWidgets(show)}, - initialValue: true - }, - showLineNumbers: { - set: function(show) { - this.$gutterLayer.setShowLineNumbers(show); - this.$loop.schedule(this.CHANGE_GUTTER); - }, - initialValue: true - }, - displayIndentGuides: { - set: function(show) { - if (this.$textLayer.setDisplayIndentGuides(show)) - this.$loop.schedule(this.CHANGE_TEXT); - }, - initialValue: true - }, - highlightGutterLine: { - set: function(shouldHighlight) { - if (!this.$gutterLineHighlight) { - this.$gutterLineHighlight = dom.createElement("div"); - this.$gutterLineHighlight.className = "ace_gutter-active-line"; - this.$gutter.appendChild(this.$gutterLineHighlight); - return; - } - - this.$gutterLineHighlight.style.display = shouldHighlight ? "" : "none"; - if (this.$cursorLayer.$pixelPos) - this.$updateGutterLineHighlight(); - }, - initialValue: false, - value: true - }, - hScrollBarAlwaysVisible: { - set: function(val) { - if (!this.$hScrollBarAlwaysVisible || !this.$horizScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - vScrollBarAlwaysVisible: { - set: function(val) { - if (!this.$vScrollBarAlwaysVisible || !this.$vScroll) - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: false - }, - fontSize: { - set: function(size) { - if (typeof size == "number") - size = size + "px"; - this.container.style.fontSize = size; - this.updateFontSize(); - }, - initialValue: 12 - }, - fontFamily: { - set: function(name) { - this.container.style.fontFamily = name; - this.updateFontSize(); - } - }, - maxLines: { - set: function(val) { - this.updateFull(); - } - }, - minLines: { - set: function(val) { - this.updateFull(); - } - }, - scrollPastEnd: { - set: function(val) { - val = +val || 0; - if (this.$scrollPastEnd == val) - return; - this.$scrollPastEnd = val; - this.$loop.schedule(this.CHANGE_SCROLL); - }, - initialValue: 0, - handlesSet: true - }, - fixedWidthGutter: { - set: function(val) { - this.$gutterLayer.$fixedWidth = !!val; - this.$loop.schedule(this.CHANGE_GUTTER); - } - }, - theme: { - set: function(val) { this.setTheme(val) }, - get: function() { return this.$themeId || this.theme; }, - initialValue: "./theme/textmate", - handlesSet: true - } -}); - -exports.VirtualRenderer = VirtualRenderer; -}); - -ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var net = require("../lib/net"); -var EventEmitter = require("../lib/event_emitter").EventEmitter; -var config = require("../config"); - -var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) { - this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); - this.changeListener = this.changeListener.bind(this); - this.onMessage = this.onMessage.bind(this); - if (require.nameToUrl && !require.toUrl) - require.toUrl = require.nameToUrl; - - if (config.get("packaged") || !require.toUrl) { - workerUrl = workerUrl || config.moduleUrl(mod, "worker"); - } else { - var normalizePath = this.$normalizePath; - workerUrl = workerUrl || normalizePath(require.toUrl("ace/worker/worker.js", null, "_")); - - var tlns = {}; - topLevelNamespaces.forEach(function(ns) { - tlns[ns] = normalizePath(require.toUrl(ns, null, "_").replace(/(\.js)?(\?.*)?$/, "")); - }); - } - - try { - this.$worker = new Worker(workerUrl); - } catch(e) { - if (e instanceof window.DOMException) { - var blob = this.$workerBlob(workerUrl); - var URL = window.URL || window.webkitURL; - var blobURL = URL.createObjectURL(blob); - - this.$worker = new Worker(blobURL); - URL.revokeObjectURL(blobURL); - } else { - throw e; - } - } - this.$worker.postMessage({ - init : true, - tlns : tlns, - module : mod, - classname : classname - }); - - this.callbackId = 1; - this.callbacks = {}; - - this.$worker.onmessage = this.onMessage; -}; - -(function(){ - - oop.implement(this, EventEmitter); - - this.onMessage = function(e) { - var msg = e.data; - switch(msg.type) { - case "event": - this._signal(msg.name, {data: msg.data}); - break; - case "call": - var callback = this.callbacks[msg.id]; - if (callback) { - callback(msg.data); - delete this.callbacks[msg.id]; - } - break; - case "error": - this.reportError(msg.data); - break; - case "log": - window.console && console.log && console.log.apply(console, msg.data); - break; - } - }; - - this.reportError = function(err) { - window.console && console.error && console.error(err); - }; - - this.$normalizePath = function(path) { - return net.qualifyURL(path); - }; - - this.terminate = function() { - this._signal("terminate", {}); - this.deltaQueue = null; - this.$worker.terminate(); - this.$worker = null; - if (this.$doc) - this.$doc.off("change", this.changeListener); - this.$doc = null; - }; - - this.send = function(cmd, args) { - this.$worker.postMessage({command: cmd, args: args}); - }; - - this.call = function(cmd, args, callback) { - if (callback) { - var id = this.callbackId++; - this.callbacks[id] = callback; - args.push(id); - } - this.send(cmd, args); - }; - - this.emit = function(event, data) { - try { - this.$worker.postMessage({event: event, data: {data: data.data}}); - } - catch(ex) { - console.error(ex.stack); - } - }; - - this.attachToDocument = function(doc) { - if(this.$doc) - this.terminate(); - - this.$doc = doc; - this.call("setValue", [doc.getValue()]); - doc.on("change", this.changeListener); - }; - - this.changeListener = function(delta) { - if (!this.deltaQueue) { - this.deltaQueue = []; - setTimeout(this.$sendDeltaQueue, 0); - } - if (delta.action == "insert") - this.deltaQueue.push(delta.start, delta.lines); - else - this.deltaQueue.push(delta.start, delta.end); - }; - - this.$sendDeltaQueue = function() { - var q = this.deltaQueue; - if (!q) return; - this.deltaQueue = null; - if (q.length > 50 && q.length > this.$doc.getLength() >> 1) { - this.call("setValue", [this.$doc.getValue()]); - } else - this.emit("change", {data: q}); - }; - - this.$workerBlob = function(workerUrl) { - var script = "importScripts('" + net.qualifyURL(workerUrl) + "');"; - try { - return new Blob([script], {"type": "application/javascript"}); - } catch (e) { // Backwards-compatibility - var BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder; - var blobBuilder = new BlobBuilder(); - blobBuilder.append(script); - return blobBuilder.getBlob("application/javascript"); - } - }; - -}).call(WorkerClient.prototype); - - -var UIWorkerClient = function(topLevelNamespaces, mod, classname) { - this.$sendDeltaQueue = this.$sendDeltaQueue.bind(this); - this.changeListener = this.changeListener.bind(this); - this.callbackId = 1; - this.callbacks = {}; - this.messageBuffer = []; - - var main = null; - var emitSync = false; - var sender = Object.create(EventEmitter); - var _self = this; - - this.$worker = {}; - this.$worker.terminate = function() {}; - this.$worker.postMessage = function(e) { - _self.messageBuffer.push(e); - if (main) { - if (emitSync) - setTimeout(processNext); - else - processNext(); - } - }; - this.setEmitSync = function(val) { emitSync = val }; - - var processNext = function() { - var msg = _self.messageBuffer.shift(); - if (msg.command) - main[msg.command].apply(main, msg.args); - else if (msg.event) - sender._signal(msg.event, msg.data); - }; - - sender.postMessage = function(msg) { - _self.onMessage({data: msg}); - }; - sender.callback = function(data, callbackId) { - this.postMessage({type: "call", id: callbackId, data: data}); - }; - sender.emit = function(name, data) { - this.postMessage({type: "event", name: name, data: data}); - }; - - config.loadModule(["worker", mod], function(Main) { - main = new Main[classname](sender); - while (_self.messageBuffer.length) - processNext(); - }); -}; - -UIWorkerClient.prototype = WorkerClient.prototype; - -exports.UIWorkerClient = UIWorkerClient; -exports.WorkerClient = WorkerClient; - -}); - -ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"], function(require, exports, module) { -"use strict"; - -var Range = require("./range").Range; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var oop = require("./lib/oop"); - -var PlaceHolder = function(session, length, pos, others, mainClass, othersClass) { - var _self = this; - this.length = length; - this.session = session; - this.doc = session.getDocument(); - this.mainClass = mainClass; - this.othersClass = othersClass; - this.$onUpdate = this.onUpdate.bind(this); - this.doc.on("change", this.$onUpdate); - this.$others = others; - - this.$onCursorChange = function() { - setTimeout(function() { - _self.onCursorChange(); - }); - }; - - this.$pos = pos; - var undoStack = session.getUndoManager().$undoStack || session.getUndoManager().$undostack || {length: -1}; - this.$undoStackDepth = undoStack.length; - this.setup(); - - session.selection.on("changeCursor", this.$onCursorChange); -}; - -(function() { - - oop.implement(this, EventEmitter); - this.setup = function() { - var _self = this; - var doc = this.doc; - var session = this.session; - - this.selectionBefore = session.selection.toJSON(); - if (session.selection.inMultiSelectMode) - session.selection.toSingleRange(); - - this.pos = doc.createAnchor(this.$pos.row, this.$pos.column); - var pos = this.pos; - pos.$insertRight = true; - pos.detach(); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); - this.others = []; - this.$others.forEach(function(other) { - var anchor = doc.createAnchor(other.row, other.column); - anchor.$insertRight = true; - anchor.detach(); - _self.others.push(anchor); - }); - session.setUndoSelect(false); - }; - this.showOtherMarkers = function() { - if (this.othersActive) return; - var session = this.session; - var _self = this; - this.othersActive = true; - this.others.forEach(function(anchor) { - anchor.markerId = session.addMarker(new Range(anchor.row, anchor.column, anchor.row, anchor.column+_self.length), _self.othersClass, null, false); - }); - }; - this.hideOtherMarkers = function() { - if (!this.othersActive) return; - this.othersActive = false; - for (var i = 0; i < this.others.length; i++) { - this.session.removeMarker(this.others[i].markerId); - } - }; - this.onUpdate = function(delta) { - if (this.$updating) - return this.updateAnchors(delta); - - var range = delta; - if (range.start.row !== range.end.row) return; - if (range.start.row !== this.pos.row) return; - this.$updating = true; - var lengthDiff = delta.action === "insert" ? range.end.column - range.start.column : range.start.column - range.end.column; - var inMainRange = range.start.column >= this.pos.column && range.start.column <= this.pos.column + this.length + 1; - var distanceFromStart = range.start.column - this.pos.column; - - this.updateAnchors(delta); - - if (inMainRange) - this.length += lengthDiff; - - if (inMainRange && !this.session.$fromUndo) { - if (delta.action === 'insert') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; - this.doc.insertMergedLines(newPos, delta.lines); - } - } else if (delta.action === 'remove') { - for (var i = this.others.length - 1; i >= 0; i--) { - var otherPos = this.others[i]; - var newPos = {row: otherPos.row, column: otherPos.column + distanceFromStart}; - this.doc.remove(new Range(newPos.row, newPos.column, newPos.row, newPos.column - lengthDiff)); - } - } - } - - this.$updating = false; - this.updateMarkers(); - }; - - this.updateAnchors = function(delta) { - this.pos.onChange(delta); - for (var i = this.others.length; i--;) - this.others[i].onChange(delta); - this.updateMarkers(); - }; - - this.updateMarkers = function() { - if (this.$updating) - return; - var _self = this; - var session = this.session; - var updateMarker = function(pos, className) { - session.removeMarker(pos.markerId); - pos.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column+_self.length), className, null, false); - }; - updateMarker(this.pos, this.mainClass); - for (var i = this.others.length; i--;) - updateMarker(this.others[i], this.othersClass); - }; - - this.onCursorChange = function(event) { - if (this.$updating || !this.session) return; - var pos = this.session.selection.getCursor(); - if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { - this.showOtherMarkers(); - this._emit("cursorEnter", event); - } else { - this.hideOtherMarkers(); - this._emit("cursorLeave", event); - } - }; - this.detach = function() { - this.session.removeMarker(this.pos && this.pos.markerId); - this.hideOtherMarkers(); - this.doc.removeEventListener("change", this.$onUpdate); - this.session.selection.removeEventListener("changeCursor", this.$onCursorChange); - this.session.setUndoSelect(true); - this.session = null; - }; - this.cancel = function() { - if (this.$undoStackDepth === -1) - return; - var undoManager = this.session.getUndoManager(); - var undosRequired = (undoManager.$undoStack || undoManager.$undostack).length - this.$undoStackDepth; - for (var i = 0; i < undosRequired; i++) { - undoManager.undo(true); - } - if (this.selectionBefore) - this.session.selection.fromJSON(this.selectionBefore); - }; -}).call(PlaceHolder.prototype); - - -exports.PlaceHolder = PlaceHolder; -}); - -ace.define("ace/mouse/multi_select_handler",["require","exports","module","ace/lib/event","ace/lib/useragent"], function(require, exports, module) { - -var event = require("../lib/event"); -var useragent = require("../lib/useragent"); -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} - -function onMouseDown(e) { - var ev = e.domEvent; - var alt = ev.altKey; - var shift = ev.shiftKey; - var ctrl = ev.ctrlKey; - var accel = e.getAccelKey(); - var button = e.getButton(); - - if (ctrl && useragent.isMac) - button = ev.button; - - if (e.editor.inMultiSelectMode && button == 2) { - e.editor.textInput.onContextMenu(e.domEvent); - return; - } - - if (!ctrl && !alt && !accel) { - if (button === 0 && e.editor.inMultiSelectMode) - e.editor.exitMultiSelectMode(); - return; - } - - if (button !== 0) - return; - - var editor = e.editor; - var selection = editor.selection; - var isMultiSelect = editor.inMultiSelectMode; - var pos = e.getDocumentPosition(); - var cursor = selection.getCursor(); - var inSelection = e.inSelection() || (selection.isEmpty() && isSamePoint(pos, cursor)); - - var mouseX = e.x, mouseY = e.y; - var onMouseSelection = function(e) { - mouseX = e.clientX; - mouseY = e.clientY; - }; - - var session = editor.session; - var screenAnchor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var screenCursor = screenAnchor; - - var selectionMode; - if (editor.$mouseHandler.$enableJumpToDef) { - if (ctrl && alt || accel && alt) - selectionMode = shift ? "block" : "add"; - else if (alt && editor.$blockSelectEnabled) - selectionMode = "block"; - } else { - if (accel && !alt) { - selectionMode = "add"; - if (!isMultiSelect && shift) - return; - } else if (alt && editor.$blockSelectEnabled) { - selectionMode = "block"; - } - } - - if (selectionMode && useragent.isMac && ev.ctrlKey) { - editor.$mouseHandler.cancelContextMenu(); - } - - if (selectionMode == "add") { - if (!isMultiSelect && inSelection) - return; // dragging - - if (!isMultiSelect) { - var range = selection.toOrientedRange(); - editor.addSelectionMarker(range); - } - - var oldRange = selection.rangeList.rangeAtPoint(pos); - - - editor.$blockScrolling++; - editor.inVirtualSelectionMode = true; - - if (shift) { - oldRange = null; - range = selection.ranges[0] || range; - editor.removeSelectionMarker(range); - } - editor.once("mouseup", function() { - var tmpSel = selection.toOrientedRange(); - - if (oldRange && tmpSel.isEmpty() && isSamePoint(oldRange.cursor, tmpSel.cursor)) - selection.substractPoint(tmpSel.cursor); - else { - if (shift) { - selection.substractPoint(range.cursor); - } else if (range) { - editor.removeSelectionMarker(range); - selection.addRange(range); - } - selection.addRange(tmpSel); - } - editor.$blockScrolling--; - editor.inVirtualSelectionMode = false; - }); - - } else if (selectionMode == "block") { - e.stop(); - editor.inVirtualSelectionMode = true; - var initialRange; - var rectSel = []; - var blockSelect = function() { - var newCursor = editor.renderer.pixelToScreenCoordinates(mouseX, mouseY); - var cursor = session.screenToDocumentPosition(newCursor.row, newCursor.column); - - if (isSamePoint(screenCursor, newCursor) && isSamePoint(cursor, selection.lead)) - return; - screenCursor = newCursor; - - editor.$blockScrolling++; - editor.selection.moveToPosition(cursor); - editor.renderer.scrollCursorIntoView(); - - editor.removeSelectionMarkers(rectSel); - rectSel = selection.rectangularRangeBlock(screenCursor, screenAnchor); - if (editor.$mouseHandler.$clickSelection && rectSel.length == 1 && rectSel[0].isEmpty()) - rectSel[0] = editor.$mouseHandler.$clickSelection.clone(); - rectSel.forEach(editor.addSelectionMarker, editor); - editor.updateSelectionMarkers(); - editor.$blockScrolling--; - }; - editor.$blockScrolling++; - if (isMultiSelect && !accel) { - selection.toSingleRange(); - } else if (!isMultiSelect && accel) { - initialRange = selection.toOrientedRange(); - editor.addSelectionMarker(initialRange); - } - - if (shift) - screenAnchor = session.documentToScreenPosition(selection.lead); - else - selection.moveToPosition(pos); - editor.$blockScrolling--; - - screenCursor = {row: -1, column: -1}; - - var onMouseSelectionEnd = function(e) { - clearInterval(timerId); - editor.removeSelectionMarkers(rectSel); - if (!rectSel.length) - rectSel = [selection.toOrientedRange()]; - editor.$blockScrolling++; - if (initialRange) { - editor.removeSelectionMarker(initialRange); - selection.toSingleRange(initialRange); - } - for (var i = 0; i < rectSel.length; i++) - selection.addRange(rectSel[i]); - editor.inVirtualSelectionMode = false; - editor.$mouseHandler.$clickSelection = null; - editor.$blockScrolling--; - }; - - var onSelectionInterval = blockSelect; - - event.capture(editor.container, onMouseSelection, onMouseSelectionEnd); - var timerId = setInterval(function() {onSelectionInterval();}, 20); - - return e.preventDefault(); - } -} - - -exports.onMouseDown = onMouseDown; - -}); - -ace.define("ace/commands/multi_select_commands",["require","exports","module","ace/keyboard/hash_handler"], function(require, exports, module) { -exports.defaultCommands = [{ - name: "addCursorAbove", - exec: function(editor) { editor.selectMoreLines(-1); }, - bindKey: {win: "Ctrl-Alt-Up", mac: "Ctrl-Alt-Up"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "addCursorBelow", - exec: function(editor) { editor.selectMoreLines(1); }, - bindKey: {win: "Ctrl-Alt-Down", mac: "Ctrl-Alt-Down"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "addCursorAboveSkipCurrent", - exec: function(editor) { editor.selectMoreLines(-1, true); }, - bindKey: {win: "Ctrl-Alt-Shift-Up", mac: "Ctrl-Alt-Shift-Up"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "addCursorBelowSkipCurrent", - exec: function(editor) { editor.selectMoreLines(1, true); }, - bindKey: {win: "Ctrl-Alt-Shift-Down", mac: "Ctrl-Alt-Shift-Down"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectMoreBefore", - exec: function(editor) { editor.selectMore(-1); }, - bindKey: {win: "Ctrl-Alt-Left", mac: "Ctrl-Alt-Left"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectMoreAfter", - exec: function(editor) { editor.selectMore(1); }, - bindKey: {win: "Ctrl-Alt-Right", mac: "Ctrl-Alt-Right"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectNextBefore", - exec: function(editor) { editor.selectMore(-1, true); }, - bindKey: {win: "Ctrl-Alt-Shift-Left", mac: "Ctrl-Alt-Shift-Left"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "selectNextAfter", - exec: function(editor) { editor.selectMore(1, true); }, - bindKey: {win: "Ctrl-Alt-Shift-Right", mac: "Ctrl-Alt-Shift-Right"}, - scrollIntoView: "cursor", - readOnly: true -}, { - name: "splitIntoLines", - exec: function(editor) { editor.multiSelect.splitIntoLines(); }, - bindKey: {win: "Ctrl-Alt-L", mac: "Ctrl-Alt-L"}, - readOnly: true -}, { - name: "alignCursors", - exec: function(editor) { editor.alignCursors(); }, - bindKey: {win: "Ctrl-Alt-A", mac: "Ctrl-Alt-A"}, - scrollIntoView: "cursor" -}, { - name: "findAll", - exec: function(editor) { editor.findAll(); }, - bindKey: {win: "Ctrl-Alt-K", mac: "Ctrl-Alt-G"}, - scrollIntoView: "cursor", - readOnly: true -}]; -exports.multiSelectCommands = [{ - name: "singleSelection", - bindKey: "esc", - exec: function(editor) { editor.exitMultiSelectMode(); }, - scrollIntoView: "cursor", - readOnly: true, - isAvailable: function(editor) {return editor && editor.inMultiSelectMode} -}]; - -var HashHandler = require("../keyboard/hash_handler").HashHandler; -exports.keyboardHandler = new HashHandler(exports.multiSelectCommands); - -}); - -ace.define("ace/multi_select",["require","exports","module","ace/range_list","ace/range","ace/selection","ace/mouse/multi_select_handler","ace/lib/event","ace/lib/lang","ace/commands/multi_select_commands","ace/search","ace/edit_session","ace/editor","ace/config"], function(require, exports, module) { - -var RangeList = require("./range_list").RangeList; -var Range = require("./range").Range; -var Selection = require("./selection").Selection; -var onMouseDown = require("./mouse/multi_select_handler").onMouseDown; -var event = require("./lib/event"); -var lang = require("./lib/lang"); -var commands = require("./commands/multi_select_commands"); -exports.commands = commands.defaultCommands.concat(commands.multiSelectCommands); -var Search = require("./search").Search; -var search = new Search(); - -function find(session, needle, dir) { - search.$options.wrap = true; - search.$options.needle = needle; - search.$options.backwards = dir == -1; - return search.find(session); -} -var EditSession = require("./edit_session").EditSession; -(function() { - this.getSelectionMarkers = function() { - return this.$selectionMarkers; - }; -}).call(EditSession.prototype); -(function() { - this.ranges = null; - this.rangeList = null; - this.addRange = function(range, $blockChangeEvents) { - if (!range) - return; - - if (!this.inMultiSelectMode && this.rangeCount === 0) { - var oldRange = this.toOrientedRange(); - this.rangeList.add(oldRange); - this.rangeList.add(range); - if (this.rangeList.ranges.length != 2) { - this.rangeList.removeAll(); - return $blockChangeEvents || this.fromOrientedRange(range); - } - this.rangeList.removeAll(); - this.rangeList.add(oldRange); - this.$onAddRange(oldRange); - } - - if (!range.cursor) - range.cursor = range.end; - - var removed = this.rangeList.add(range); - - this.$onAddRange(range); - - if (removed.length) - this.$onRemoveRange(removed); - - if (this.rangeCount > 1 && !this.inMultiSelectMode) { - this._signal("multiSelect"); - this.inMultiSelectMode = true; - this.session.$undoSelect = false; - this.rangeList.attach(this.session); - } - - return $blockChangeEvents || this.fromOrientedRange(range); - }; - - this.toSingleRange = function(range) { - range = range || this.ranges[0]; - var removed = this.rangeList.removeAll(); - if (removed.length) - this.$onRemoveRange(removed); - - range && this.fromOrientedRange(range); - }; - this.substractPoint = function(pos) { - var removed = this.rangeList.substractPoint(pos); - if (removed) { - this.$onRemoveRange(removed); - return removed[0]; - } - }; - this.mergeOverlappingRanges = function() { - var removed = this.rangeList.merge(); - if (removed.length) - this.$onRemoveRange(removed); - else if(this.ranges[0]) - this.fromOrientedRange(this.ranges[0]); - }; - - this.$onAddRange = function(range) { - this.rangeCount = this.rangeList.ranges.length; - this.ranges.unshift(range); - this._signal("addRange", {range: range}); - }; - - this.$onRemoveRange = function(removed) { - this.rangeCount = this.rangeList.ranges.length; - if (this.rangeCount == 1 && this.inMultiSelectMode) { - var lastRange = this.rangeList.ranges.pop(); - removed.push(lastRange); - this.rangeCount = 0; - } - - for (var i = removed.length; i--; ) { - var index = this.ranges.indexOf(removed[i]); - this.ranges.splice(index, 1); - } - - this._signal("removeRange", {ranges: removed}); - - if (this.rangeCount === 0 && this.inMultiSelectMode) { - this.inMultiSelectMode = false; - this._signal("singleSelect"); - this.session.$undoSelect = true; - this.rangeList.detach(this.session); - } - - lastRange = lastRange || this.ranges[0]; - if (lastRange && !lastRange.isEqual(this.getRange())) - this.fromOrientedRange(lastRange); - }; - this.$initRangeList = function() { - if (this.rangeList) - return; - - this.rangeList = new RangeList(); - this.ranges = []; - this.rangeCount = 0; - }; - this.getAllRanges = function() { - return this.rangeCount ? this.rangeList.ranges.concat() : [this.getRange()]; - }; - - this.splitIntoLines = function () { - if (this.rangeCount > 1) { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - } else { - var range = this.getRange(); - var isBackwards = this.isBackwards(); - var startRow = range.start.row; - var endRow = range.end.row; - if (startRow == endRow) { - if (isBackwards) - var start = range.end, end = range.start; - else - var start = range.start, end = range.end; - - this.addRange(Range.fromPoints(end, end)); - this.addRange(Range.fromPoints(start, start)); - return; - } - - var rectSel = []; - var r = this.getLineRange(startRow, true); - r.start.column = range.start.column; - rectSel.push(r); - - for (var i = startRow + 1; i < endRow; i++) - rectSel.push(this.getLineRange(i, true)); - - r = this.getLineRange(endRow, true); - r.end.column = range.end.column; - rectSel.push(r); - - rectSel.forEach(this.addRange, this); - } - }; - this.toggleBlockSelection = function () { - if (this.rangeCount > 1) { - var ranges = this.rangeList.ranges; - var lastRange = ranges[ranges.length - 1]; - var range = Range.fromPoints(ranges[0].start, lastRange.end); - - this.toSingleRange(); - this.setSelectionRange(range, lastRange.cursor == lastRange.start); - } else { - var cursor = this.session.documentToScreenPosition(this.selectionLead); - var anchor = this.session.documentToScreenPosition(this.selectionAnchor); - - var rectSel = this.rectangularRangeBlock(cursor, anchor); - rectSel.forEach(this.addRange, this); - } - }; - this.rectangularRangeBlock = function(screenCursor, screenAnchor, includeEmptyLines) { - var rectSel = []; - - var xBackwards = screenCursor.column < screenAnchor.column; - if (xBackwards) { - var startColumn = screenCursor.column; - var endColumn = screenAnchor.column; - } else { - var startColumn = screenAnchor.column; - var endColumn = screenCursor.column; - } - - var yBackwards = screenCursor.row < screenAnchor.row; - if (yBackwards) { - var startRow = screenCursor.row; - var endRow = screenAnchor.row; - } else { - var startRow = screenAnchor.row; - var endRow = screenCursor.row; - } - - if (startColumn < 0) - startColumn = 0; - if (startRow < 0) - startRow = 0; - - if (startRow == endRow) - includeEmptyLines = true; - - for (var row = startRow; row <= endRow; row++) { - var range = Range.fromPoints( - this.session.screenToDocumentPosition(row, startColumn), - this.session.screenToDocumentPosition(row, endColumn) - ); - if (range.isEmpty()) { - if (docEnd && isSamePoint(range.end, docEnd)) - break; - var docEnd = range.end; - } - range.cursor = xBackwards ? range.start : range.end; - rectSel.push(range); - } - - if (yBackwards) - rectSel.reverse(); - - if (!includeEmptyLines) { - var end = rectSel.length - 1; - while (rectSel[end].isEmpty() && end > 0) - end--; - if (end > 0) { - var start = 0; - while (rectSel[start].isEmpty()) - start++; - } - for (var i = end; i >= start; i--) { - if (rectSel[i].isEmpty()) - rectSel.splice(i, 1); - } - } - - return rectSel; - }; -}).call(Selection.prototype); -var Editor = require("./editor").Editor; -(function() { - this.updateSelectionMarkers = function() { - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - this.addSelectionMarker = function(orientedRange) { - if (!orientedRange.cursor) - orientedRange.cursor = orientedRange.end; - - var style = this.getSelectionStyle(); - orientedRange.marker = this.session.addMarker(orientedRange, "ace_selection", style); - - this.session.$selectionMarkers.push(orientedRange); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - return orientedRange; - }; - this.removeSelectionMarker = function(range) { - if (!range.marker) - return; - this.session.removeMarker(range.marker); - var index = this.session.$selectionMarkers.indexOf(range); - if (index != -1) - this.session.$selectionMarkers.splice(index, 1); - this.session.selectionMarkerCount = this.session.$selectionMarkers.length; - }; - - this.removeSelectionMarkers = function(ranges) { - var markerList = this.session.$selectionMarkers; - for (var i = ranges.length; i--; ) { - var range = ranges[i]; - if (!range.marker) - continue; - this.session.removeMarker(range.marker); - var index = markerList.indexOf(range); - if (index != -1) - markerList.splice(index, 1); - } - this.session.selectionMarkerCount = markerList.length; - }; - - this.$onAddRange = function(e) { - this.addSelectionMarker(e.range); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - - this.$onRemoveRange = function(e) { - this.removeSelectionMarkers(e.ranges); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - - this.$onMultiSelect = function(e) { - if (this.inMultiSelectMode) - return; - this.inMultiSelectMode = true; - - this.setStyle("ace_multiselect"); - this.keyBinding.addKeyboardHandler(commands.keyboardHandler); - this.commands.setDefaultHandler("exec", this.$onMultiSelectExec); - - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - }; - - this.$onSingleSelect = function(e) { - if (this.session.multiSelect.inVirtualMode) - return; - this.inMultiSelectMode = false; - - this.unsetStyle("ace_multiselect"); - this.keyBinding.removeKeyboardHandler(commands.keyboardHandler); - - this.commands.removeDefaultHandler("exec", this.$onMultiSelectExec); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - this._emit("changeSelection"); - }; - - this.$onMultiSelectExec = function(e) { - var command = e.command; - var editor = e.editor; - if (!editor.multiSelect) - return; - if (!command.multiSelectAction) { - var result = command.exec(editor, e.args || {}); - editor.multiSelect.addRange(editor.multiSelect.toOrientedRange()); - editor.multiSelect.mergeOverlappingRanges(); - } else if (command.multiSelectAction == "forEach") { - result = editor.forEachSelection(command, e.args); - } else if (command.multiSelectAction == "forEachLine") { - result = editor.forEachSelection(command, e.args, true); - } else if (command.multiSelectAction == "single") { - editor.exitMultiSelectMode(); - result = command.exec(editor, e.args || {}); - } else { - result = command.multiSelectAction(editor, e.args || {}); - } - return result; - }; - this.forEachSelection = function(cmd, args, options) { - if (this.inVirtualSelectionMode) - return; - var keepOrder = options && options.keepOrder; - var $byLines = options == true || options && options.$byLines - var session = this.session; - var selection = this.selection; - var rangeList = selection.rangeList; - var ranges = (keepOrder ? selection : rangeList).ranges; - var result; - - if (!ranges.length) - return cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - - var reg = selection._eventRegistry; - selection._eventRegistry = {}; - - var tmpSel = new Selection(session); - this.inVirtualSelectionMode = true; - for (var i = ranges.length; i--;) { - if ($byLines) { - while (i > 0 && ranges[i].start.row == ranges[i - 1].end.row) - i--; - } - tmpSel.fromOrientedRange(ranges[i]); - tmpSel.index = i; - this.selection = session.selection = tmpSel; - var cmdResult = cmd.exec ? cmd.exec(this, args || {}) : cmd(this, args || {}); - if (!result && cmdResult !== undefined) - result = cmdResult; - tmpSel.toOrientedRange(ranges[i]); - } - tmpSel.detach(); - - this.selection = session.selection = selection; - this.inVirtualSelectionMode = false; - selection._eventRegistry = reg; - selection.mergeOverlappingRanges(); - - var anim = this.renderer.$scrollAnimation; - this.onCursorChange(); - this.onSelectionChange(); - if (anim && anim.from == anim.to) - this.renderer.animateScrolling(anim.from); - - return result; - }; - this.exitMultiSelectMode = function() { - if (!this.inMultiSelectMode || this.inVirtualSelectionMode) - return; - this.multiSelect.toSingleRange(); - }; - - this.getSelectedText = function() { - var text = ""; - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var ranges = this.multiSelect.rangeList.ranges; - var buf = []; - for (var i = 0; i < ranges.length; i++) { - buf.push(this.session.getTextRange(ranges[i])); - } - var nl = this.session.getDocument().getNewLineCharacter(); - text = buf.join(nl); - if (text.length == (buf.length - 1) * nl.length) - text = ""; - } else if (!this.selection.isEmpty()) { - text = this.session.getTextRange(this.getSelectionRange()); - } - return text; - }; - - this.$checkMultiselectChange = function(e, anchor) { - if (this.inMultiSelectMode && !this.inVirtualSelectionMode) { - var range = this.multiSelect.ranges[0]; - if (this.multiSelect.isEmpty() && anchor == this.multiSelect.anchor) - return; - var pos = anchor == this.multiSelect.anchor - ? range.cursor == range.start ? range.end : range.start - : range.cursor; - if (pos.row != anchor.row - || this.session.$clipPositionToDocument(pos.row, pos.column).column != anchor.column) - this.multiSelect.toSingleRange(this.multiSelect.toOrientedRange()); - } - }; - this.findAll = function(needle, options, additive) { - options = options || {}; - options.needle = needle || options.needle; - if (options.needle == undefined) { - var range = this.selection.isEmpty() - ? this.selection.getWordRange() - : this.selection.getRange(); - options.needle = this.session.getTextRange(range); - } - this.$search.set(options); - - var ranges = this.$search.findAll(this.session); - if (!ranges.length) - return 0; - - this.$blockScrolling += 1; - var selection = this.multiSelect; - - if (!additive) - selection.toSingleRange(ranges[0]); - - for (var i = ranges.length; i--; ) - selection.addRange(ranges[i], true); - if (range && selection.rangeList.rangeAtPoint(range.start)) - selection.addRange(range, true); - - this.$blockScrolling -= 1; - - return ranges.length; - }; - this.selectMoreLines = function(dir, skip) { - var range = this.selection.toOrientedRange(); - var isBackwards = range.cursor == range.end; - - var screenLead = this.session.documentToScreenPosition(range.cursor); - if (this.selection.$desiredColumn) - screenLead.column = this.selection.$desiredColumn; - - var lead = this.session.screenToDocumentPosition(screenLead.row + dir, screenLead.column); - - if (!range.isEmpty()) { - var screenAnchor = this.session.documentToScreenPosition(isBackwards ? range.end : range.start); - var anchor = this.session.screenToDocumentPosition(screenAnchor.row + dir, screenAnchor.column); - } else { - var anchor = lead; - } - - if (isBackwards) { - var newRange = Range.fromPoints(lead, anchor); - newRange.cursor = newRange.start; - } else { - var newRange = Range.fromPoints(anchor, lead); - newRange.cursor = newRange.end; - } - - newRange.desiredColumn = screenLead.column; - if (!this.selection.inMultiSelectMode) { - this.selection.addRange(range); - } else { - if (skip) - var toRemove = range.cursor; - } - - this.selection.addRange(newRange); - if (toRemove) - this.selection.substractPoint(toRemove); - }; - this.transposeSelections = function(dir) { - var session = this.session; - var sel = session.multiSelect; - var all = sel.ranges; - - for (var i = all.length; i--; ) { - var range = all[i]; - if (range.isEmpty()) { - var tmp = session.getWordRange(range.start.row, range.start.column); - range.start.row = tmp.start.row; - range.start.column = tmp.start.column; - range.end.row = tmp.end.row; - range.end.column = tmp.end.column; - } - } - sel.mergeOverlappingRanges(); - - var words = []; - for (var i = all.length; i--; ) { - var range = all[i]; - words.unshift(session.getTextRange(range)); - } - - if (dir < 0) - words.unshift(words.pop()); - else - words.push(words.shift()); - - for (var i = all.length; i--; ) { - var range = all[i]; - var tmp = range.clone(); - session.replace(range, words[i]); - range.start.row = tmp.start.row; - range.start.column = tmp.start.column; - } - }; - this.selectMore = function(dir, skip, stopAtFirst) { - var session = this.session; - var sel = session.multiSelect; - - var range = sel.toOrientedRange(); - if (range.isEmpty()) { - range = session.getWordRange(range.start.row, range.start.column); - range.cursor = dir == -1 ? range.start : range.end; - this.multiSelect.addRange(range); - if (stopAtFirst) - return; - } - var needle = session.getTextRange(range); - - var newRange = find(session, needle, dir); - if (newRange) { - newRange.cursor = dir == -1 ? newRange.start : newRange.end; - this.$blockScrolling += 1; - this.session.unfold(newRange); - this.multiSelect.addRange(newRange); - this.$blockScrolling -= 1; - this.renderer.scrollCursorIntoView(null, 0.5); - } - if (skip) - this.multiSelect.substractPoint(range.cursor); - }; - this.alignCursors = function() { - var session = this.session; - var sel = session.multiSelect; - var ranges = sel.ranges; - var row = -1; - var sameRowRanges = ranges.filter(function(r) { - if (r.cursor.row == row) - return true; - row = r.cursor.row; - }); - - if (!ranges.length || sameRowRanges.length == ranges.length - 1) { - var range = this.selection.getRange(); - var fr = range.start.row, lr = range.end.row; - var guessRange = fr == lr; - if (guessRange) { - var max = this.session.getLength(); - var line; - do { - line = this.session.getLine(lr); - } while (/[=:]/.test(line) && ++lr < max); - do { - line = this.session.getLine(fr); - } while (/[=:]/.test(line) && --fr > 0); - - if (fr < 0) fr = 0; - if (lr >= max) lr = max - 1; - } - var lines = this.session.removeFullLines(fr, lr); - lines = this.$reAlignText(lines, guessRange); - this.session.insert({row: fr, column: 0}, lines.join("\n") + "\n"); - if (!guessRange) { - range.start.column = 0; - range.end.column = lines[lines.length - 1].length; - } - this.selection.setRange(range); - } else { - sameRowRanges.forEach(function(r) { - sel.substractPoint(r.cursor); - }); - - var maxCol = 0; - var minSpace = Infinity; - var spaceOffsets = ranges.map(function(r) { - var p = r.cursor; - var line = session.getLine(p.row); - var spaceOffset = line.substr(p.column).search(/\S/g); - if (spaceOffset == -1) - spaceOffset = 0; - - if (p.column > maxCol) - maxCol = p.column; - if (spaceOffset < minSpace) - minSpace = spaceOffset; - return spaceOffset; - }); - ranges.forEach(function(r, i) { - var p = r.cursor; - var l = maxCol - p.column; - var d = spaceOffsets[i] - minSpace; - if (l > d) - session.insert(p, lang.stringRepeat(" ", l - d)); - else - session.remove(new Range(p.row, p.column, p.row, p.column - l + d)); - - r.start.column = r.end.column = maxCol; - r.start.row = r.end.row = p.row; - r.cursor = r.end; - }); - sel.fromOrientedRange(ranges[0]); - this.renderer.updateCursor(); - this.renderer.updateBackMarkers(); - } - }; - - this.$reAlignText = function(lines, forceLeft) { - var isLeftAligned = true, isRightAligned = true; - var startW, textW, endW; - - return lines.map(function(line) { - var m = line.match(/(\s*)(.*?)(\s*)([=:].*)/); - if (!m) - return [line]; - - if (startW == null) { - startW = m[1].length; - textW = m[2].length; - endW = m[3].length; - return m; - } - - if (startW + textW + endW != m[1].length + m[2].length + m[3].length) - isRightAligned = false; - if (startW != m[1].length) - isLeftAligned = false; - - if (startW > m[1].length) - startW = m[1].length; - if (textW < m[2].length) - textW = m[2].length; - if (endW > m[3].length) - endW = m[3].length; - - return m; - }).map(forceLeft ? alignLeft : - isLeftAligned ? isRightAligned ? alignRight : alignLeft : unAlign); - - function spaces(n) { - return lang.stringRepeat(" ", n); - } - - function alignLeft(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(textW - m[2].length + endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function alignRight(m) { - return !m[2] ? m[0] : spaces(startW + textW - m[2].length) + m[2] - + spaces(endW, " ") - + m[4].replace(/^([=:])\s+/, "$1 "); - } - function unAlign(m) { - return !m[2] ? m[0] : spaces(startW) + m[2] - + spaces(endW) - + m[4].replace(/^([=:])\s+/, "$1 "); - } - }; -}).call(Editor.prototype); - - -function isSamePoint(p1, p2) { - return p1.row == p2.row && p1.column == p2.column; -} -exports.onSessionChange = function(e) { - var session = e.session; - if (session && !session.multiSelect) { - session.$selectionMarkers = []; - session.selection.$initRangeList(); - session.multiSelect = session.selection; - } - this.multiSelect = session && session.multiSelect; - - var oldSession = e.oldSession; - if (oldSession) { - oldSession.multiSelect.off("addRange", this.$onAddRange); - oldSession.multiSelect.off("removeRange", this.$onRemoveRange); - oldSession.multiSelect.off("multiSelect", this.$onMultiSelect); - oldSession.multiSelect.off("singleSelect", this.$onSingleSelect); - oldSession.multiSelect.lead.off("change", this.$checkMultiselectChange); - oldSession.multiSelect.anchor.off("change", this.$checkMultiselectChange); - } - - if (session) { - session.multiSelect.on("addRange", this.$onAddRange); - session.multiSelect.on("removeRange", this.$onRemoveRange); - session.multiSelect.on("multiSelect", this.$onMultiSelect); - session.multiSelect.on("singleSelect", this.$onSingleSelect); - session.multiSelect.lead.on("change", this.$checkMultiselectChange); - session.multiSelect.anchor.on("change", this.$checkMultiselectChange); - } - - if (session && this.inMultiSelectMode != session.selection.inMultiSelectMode) { - if (session.selection.inMultiSelectMode) - this.$onMultiSelect(); - else - this.$onSingleSelect(); - } -}; -function MultiSelect(editor) { - if (editor.$multiselectOnSessionChange) - return; - editor.$onAddRange = editor.$onAddRange.bind(editor); - editor.$onRemoveRange = editor.$onRemoveRange.bind(editor); - editor.$onMultiSelect = editor.$onMultiSelect.bind(editor); - editor.$onSingleSelect = editor.$onSingleSelect.bind(editor); - editor.$multiselectOnSessionChange = exports.onSessionChange.bind(editor); - editor.$checkMultiselectChange = editor.$checkMultiselectChange.bind(editor); - - editor.$multiselectOnSessionChange(editor); - editor.on("changeSession", editor.$multiselectOnSessionChange); - - editor.on("mousedown", onMouseDown); - editor.commands.addCommands(commands.defaultCommands); - - addAltCursorListeners(editor); -} - -function addAltCursorListeners(editor){ - var el = editor.textInput.getElement(); - var altCursor = false; - event.addListener(el, "keydown", function(e) { - var altDown = e.keyCode == 18 && !(e.ctrlKey || e.shiftKey || e.metaKey); - if (editor.$blockSelectEnabled && altDown) { - if (!altCursor) { - editor.renderer.setMouseCursor("crosshair"); - altCursor = true; - } - } else if (altCursor) { - reset(); - } - }); - - event.addListener(el, "keyup", reset); - event.addListener(el, "blur", reset); - function reset(e) { - if (altCursor) { - editor.renderer.setMouseCursor(""); - altCursor = false; - } - } -} - -exports.MultiSelect = MultiSelect; - - -require("./config").defineOptions(Editor.prototype, "editor", { - enableMultiselect: { - set: function(val) { - MultiSelect(this); - if (val) { - this.on("changeSession", this.$multiselectOnSessionChange); - this.on("mousedown", onMouseDown); - } else { - this.off("changeSession", this.$multiselectOnSessionChange); - this.off("mousedown", onMouseDown); - } - }, - value: true - }, - enableBlockSelect: { - set: function(val) { - this.$blockSelectEnabled = val; - }, - value: true - } -}); - - - -}); - -ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"], function(require, exports, module) { -"use strict"; - -var Range = require("../../range").Range; - -var FoldMode = exports.FoldMode = function() {}; - -(function() { - - this.foldingStartMarker = null; - this.foldingStopMarker = null; - this.getFoldWidget = function(session, foldStyle, row) { - var line = session.getLine(row); - if (this.foldingStartMarker.test(line)) - return "start"; - if (foldStyle == "markbeginend" - && this.foldingStopMarker - && this.foldingStopMarker.test(line)) - return "end"; - return ""; - }; - - this.getFoldWidgetRange = function(session, foldStyle, row) { - return null; - }; - - this.indentationBlock = function(session, row, column) { - var re = /\S/; - var line = session.getLine(row); - var startLevel = line.search(re); - if (startLevel == -1) - return; - - var startColumn = column || line.length; - var maxRow = session.getLength(); - var startRow = row; - var endRow = row; - - while (++row < maxRow) { - var level = session.getLine(row).search(re); - - if (level == -1) - continue; - - if (level <= startLevel) - break; - - endRow = row; - } - - if (endRow > startRow) { - var endColumn = session.getLine(endRow).length; - return new Range(startRow, startColumn, endRow, endColumn); - } - }; - - this.openingBracketBlock = function(session, bracket, row, column, typeRe) { - var start = {row: row, column: column + 1}; - var end = session.$findClosingBracket(bracket, start, typeRe); - if (!end) - return; - - var fw = session.foldWidgets[end.row]; - if (fw == null) - fw = session.getFoldWidget(end.row); - - if (fw == "start" && end.row > start.row) { - end.row --; - end.column = session.getLine(end.row).length; - } - return Range.fromPoints(start, end); - }; - - this.closingBracketBlock = function(session, bracket, row, column, typeRe) { - var end = {row: row, column: column}; - var start = session.$findOpeningBracket(bracket, end); - - if (!start) - return; - - start.column++; - end.column--; - - return Range.fromPoints(start, end); - }; -}).call(FoldMode.prototype); - -}); - -ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"], function(require, exports, module) { -"use strict"; - -exports.isDark = false; -exports.cssClass = "ace-tm"; -exports.cssText = ".ace-tm .ace_gutter {\ -background: #f0f0f0;\ -color: #333;\ -}\ -.ace-tm .ace_print-margin {\ -width: 1px;\ -background: #e8e8e8;\ -}\ -.ace-tm .ace_fold {\ -background-color: #6B72E6;\ -}\ -.ace-tm {\ -background-color: #FFFFFF;\ -color: black;\ -}\ -.ace-tm .ace_cursor {\ -color: black;\ -}\ -.ace-tm .ace_invisible {\ -color: rgb(191, 191, 191);\ -}\ -.ace-tm .ace_storage,\ -.ace-tm .ace_keyword {\ -color: blue;\ -}\ -.ace-tm .ace_constant {\ -color: rgb(197, 6, 11);\ -}\ -.ace-tm .ace_constant.ace_buildin {\ -color: rgb(88, 72, 246);\ -}\ -.ace-tm .ace_constant.ace_language {\ -color: rgb(88, 92, 246);\ -}\ -.ace-tm .ace_constant.ace_library {\ -color: rgb(6, 150, 14);\ -}\ -.ace-tm .ace_invalid {\ -background-color: rgba(255, 0, 0, 0.1);\ -color: red;\ -}\ -.ace-tm .ace_support.ace_function {\ -color: rgb(60, 76, 114);\ -}\ -.ace-tm .ace_support.ace_constant {\ -color: rgb(6, 150, 14);\ -}\ -.ace-tm .ace_support.ace_type,\ -.ace-tm .ace_support.ace_class {\ -color: rgb(109, 121, 222);\ -}\ -.ace-tm .ace_keyword.ace_operator {\ -color: rgb(104, 118, 135);\ -}\ -.ace-tm .ace_string {\ -color: rgb(3, 106, 7);\ -}\ -.ace-tm .ace_comment {\ -color: rgb(76, 136, 107);\ -}\ -.ace-tm .ace_comment.ace_doc {\ -color: rgb(0, 102, 255);\ -}\ -.ace-tm .ace_comment.ace_doc.ace_tag {\ -color: rgb(128, 159, 191);\ -}\ -.ace-tm .ace_constant.ace_numeric {\ -color: rgb(0, 0, 205);\ -}\ -.ace-tm .ace_variable {\ -color: rgb(49, 132, 149);\ -}\ -.ace-tm .ace_xml-pe {\ -color: rgb(104, 104, 91);\ -}\ -.ace-tm .ace_entity.ace_name.ace_function {\ -color: #0000A2;\ -}\ -.ace-tm .ace_heading {\ -color: rgb(12, 7, 255);\ -}\ -.ace-tm .ace_list {\ -color:rgb(185, 6, 144);\ -}\ -.ace-tm .ace_meta.ace_tag {\ -color:rgb(0, 22, 142);\ -}\ -.ace-tm .ace_string.ace_regex {\ -color: rgb(255, 0, 0)\ -}\ -.ace-tm .ace_marker-layer .ace_selection {\ -background: rgb(181, 213, 255);\ -}\ -.ace-tm.ace_multiselect .ace_selection.ace_start {\ -box-shadow: 0 0 3px 0px white;\ -}\ -.ace-tm .ace_marker-layer .ace_step {\ -background: rgb(252, 255, 0);\ -}\ -.ace-tm .ace_marker-layer .ace_stack {\ -background: rgb(164, 229, 101);\ -}\ -.ace-tm .ace_marker-layer .ace_bracket {\ -margin: -1px 0 0 -1px;\ -border: 1px solid rgb(192, 192, 192);\ -}\ -.ace-tm .ace_marker-layer .ace_active-line {\ -background: rgba(0, 0, 0, 0.07);\ -}\ -.ace-tm .ace_gutter-active-line {\ -background-color : #dcdcdc;\ -}\ -.ace-tm .ace_marker-layer .ace_selected-word {\ -background: rgb(250, 250, 255);\ -border: 1px solid rgb(200, 200, 250);\ -}\ -.ace-tm .ace_indent-guide {\ -background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ -}\ -"; - -var dom = require("../lib/dom"); -dom.importCssString(exports.cssText, exports.cssClass); -}); - -ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var dom = require("./lib/dom"); -var Range = require("./range").Range; - - -function LineWidgets(session) { - this.session = session; - this.session.widgetManager = this; - this.session.getRowLength = this.getRowLength; - this.session.$getWidgetScreenLength = this.$getWidgetScreenLength; - this.updateOnChange = this.updateOnChange.bind(this); - this.renderWidgets = this.renderWidgets.bind(this); - this.measureWidgets = this.measureWidgets.bind(this); - this.session._changedWidgets = []; - this.$onChangeEditor = this.$onChangeEditor.bind(this); - - this.session.on("change", this.updateOnChange); - this.session.on("changeFold", this.updateOnFold); - this.session.on("changeEditor", this.$onChangeEditor); -} - -(function() { - this.getRowLength = function(row) { - var h; - if (this.lineWidgets) - h = this.lineWidgets[row] && this.lineWidgets[row].rowCount || 0; - else - h = 0; - if (!this.$useWrapMode || !this.$wrapData[row]) { - return 1 + h; - } else { - return this.$wrapData[row].length + 1 + h; - } - }; - - this.$getWidgetScreenLength = function() { - var screenRows = 0; - this.lineWidgets.forEach(function(w){ - if (w && w.rowCount && !w.hidden) - screenRows += w.rowCount; - }); - return screenRows; - }; - - this.$onChangeEditor = function(e) { - this.attach(e.editor); - }; - - this.attach = function(editor) { - if (editor && editor.widgetManager && editor.widgetManager != this) - editor.widgetManager.detach(); - - if (this.editor == editor) - return; - - this.detach(); - this.editor = editor; - - if (editor) { - editor.widgetManager = this; - editor.renderer.on("beforeRender", this.measureWidgets); - editor.renderer.on("afterRender", this.renderWidgets); - } - }; - this.detach = function(e) { - var editor = this.editor; - if (!editor) - return; - - this.editor = null; - editor.widgetManager = null; - - editor.renderer.off("beforeRender", this.measureWidgets); - editor.renderer.off("afterRender", this.renderWidgets); - var lineWidgets = this.session.lineWidgets; - lineWidgets && lineWidgets.forEach(function(w) { - if (w && w.el && w.el.parentNode) { - w._inDocument = false; - w.el.parentNode.removeChild(w.el); - } - }); - }; - - this.updateOnFold = function(e, session) { - var lineWidgets = session.lineWidgets; - if (!lineWidgets || !e.action) - return; - var fold = e.data; - var start = fold.start.row; - var end = fold.end.row; - var hide = e.action == "add"; - for (var i = start + 1; i < end; i++) { - if (lineWidgets[i]) - lineWidgets[i].hidden = hide; - } - if (lineWidgets[end]) { - if (hide) { - if (!lineWidgets[start]) - lineWidgets[start] = lineWidgets[end]; - else - lineWidgets[end].hidden = hide; - } else { - if (lineWidgets[start] == lineWidgets[end]) - lineWidgets[start] = undefined; - lineWidgets[end].hidden = hide; - } - } - }; - - this.updateOnChange = function(delta) { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) return; - - var startRow = delta.start.row; - var len = delta.end.row - startRow; - - if (len === 0) { - } else if (delta.action == 'remove') { - var removed = lineWidgets.splice(startRow + 1, len); - removed.forEach(function(w) { - w && this.removeLineWidget(w); - }, this); - this.$updateRows(); - } else { - var args = new Array(len); - args.unshift(startRow, 0); - lineWidgets.splice.apply(lineWidgets, args); - this.$updateRows(); - } - }; - - this.$updateRows = function() { - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) return; - var noWidgets = true; - lineWidgets.forEach(function(w, i) { - if (w) { - noWidgets = false; - w.row = i; - while (w.$oldWidget) { - w.$oldWidget.row = i; - w = w.$oldWidget; - } - } - }); - if (noWidgets) - this.session.lineWidgets = null; - }; - - this.addLineWidget = function(w) { - if (!this.session.lineWidgets) - this.session.lineWidgets = new Array(this.session.getLength()); - - var old = this.session.lineWidgets[w.row]; - if (old) { - w.$oldWidget = old; - if (old.el && old.el.parentNode) { - old.el.parentNode.removeChild(old.el); - old._inDocument = false; - } - } - - this.session.lineWidgets[w.row] = w; - - w.session = this.session; - - var renderer = this.editor.renderer; - if (w.html && !w.el) { - w.el = dom.createElement("div"); - w.el.innerHTML = w.html; - } - if (w.el) { - dom.addCssClass(w.el, "ace_lineWidgetContainer"); - w.el.style.position = "absolute"; - w.el.style.zIndex = 5; - renderer.container.appendChild(w.el); - w._inDocument = true; - } - - if (!w.coverGutter) { - w.el.style.zIndex = 3; - } - if (!w.pixelHeight) { - w.pixelHeight = w.el.offsetHeight; - } - if (w.rowCount == null) { - w.rowCount = w.pixelHeight / renderer.layerConfig.lineHeight; - } - - var fold = this.session.getFoldAt(w.row, 0); - w.$fold = fold; - if (fold) { - var lineWidgets = this.session.lineWidgets; - if (w.row == fold.end.row && !lineWidgets[fold.start.row]) - lineWidgets[fold.start.row] = w; - else - w.hidden = true; - } - - this.session._emit("changeFold", {data:{start:{row: w.row}}}); - - this.$updateRows(); - this.renderWidgets(null, renderer); - this.onWidgetChanged(w); - return w; - }; - - this.removeLineWidget = function(w) { - w._inDocument = false; - w.session = null; - if (w.el && w.el.parentNode) - w.el.parentNode.removeChild(w.el); - if (w.editor && w.editor.destroy) try { - w.editor.destroy(); - } catch(e){} - if (this.session.lineWidgets) { - var w1 = this.session.lineWidgets[w.row] - if (w1 == w) { - this.session.lineWidgets[w.row] = w.$oldWidget; - if (w.$oldWidget) - this.onWidgetChanged(w.$oldWidget); - } else { - while (w1) { - if (w1.$oldWidget == w) { - w1.$oldWidget = w.$oldWidget; - break; - } - w1 = w1.$oldWidget; - } - } - } - this.session._emit("changeFold", {data:{start:{row: w.row}}}); - this.$updateRows(); - }; - - this.getWidgetsAtRow = function(row) { - var lineWidgets = this.session.lineWidgets; - var w = lineWidgets && lineWidgets[row]; - var list = []; - while (w) { - list.push(w); - w = w.$oldWidget; - } - return list; - }; - - this.onWidgetChanged = function(w) { - this.session._changedWidgets.push(w); - this.editor && this.editor.renderer.updateFull(); - }; - - this.measureWidgets = function(e, renderer) { - var changedWidgets = this.session._changedWidgets; - var config = renderer.layerConfig; - - if (!changedWidgets || !changedWidgets.length) return; - var min = Infinity; - for (var i = 0; i < changedWidgets.length; i++) { - var w = changedWidgets[i]; - if (!w || !w.el) continue; - if (w.session != this.session) continue; - if (!w._inDocument) { - if (this.session.lineWidgets[w.row] != w) - continue; - w._inDocument = true; - renderer.container.appendChild(w.el); - } - - w.h = w.el.offsetHeight; - - if (!w.fixedWidth) { - w.w = w.el.offsetWidth; - w.screenWidth = Math.ceil(w.w / config.characterWidth); - } - - var rowCount = w.h / config.lineHeight; - if (w.coverLine) { - rowCount -= this.session.getRowLineCount(w.row); - if (rowCount < 0) - rowCount = 0; - } - if (w.rowCount != rowCount) { - w.rowCount = rowCount; - if (w.row < min) - min = w.row; - } - } - if (min != Infinity) { - this.session._emit("changeFold", {data:{start:{row: min}}}); - this.session.lineWidgetWidth = null; - } - this.session._changedWidgets = []; - }; - - this.renderWidgets = function(e, renderer) { - var config = renderer.layerConfig; - var lineWidgets = this.session.lineWidgets; - if (!lineWidgets) - return; - var first = Math.min(this.firstRow, config.firstRow); - var last = Math.max(this.lastRow, config.lastRow, lineWidgets.length); - - while (first > 0 && !lineWidgets[first]) - first--; - - this.firstRow = config.firstRow; - this.lastRow = config.lastRow; - - renderer.$cursorLayer.config = config; - for (var i = first; i <= last; i++) { - var w = lineWidgets[i]; - if (!w || !w.el) continue; - if (w.hidden) { - w.el.style.top = -100 - (w.pixelHeight || 0) + "px"; - continue; - } - if (!w._inDocument) { - w._inDocument = true; - renderer.container.appendChild(w.el); - } - var top = renderer.$cursorLayer.getPixelPosition({row: i, column:0}, true).top; - if (!w.coverLine) - top += config.lineHeight * this.session.getRowLineCount(w.row); - w.el.style.top = top - config.offset + "px"; - - var left = w.coverGutter ? 0 : renderer.gutterWidth; - if (!w.fixedWidth) - left -= renderer.scrollLeft; - w.el.style.left = left + "px"; - - if (w.fullWidth && w.screenWidth) { - w.el.style.minWidth = config.width + 2 * config.padding + "px"; - } - - if (w.fixedWidth) { - w.el.style.right = renderer.scrollBar.getWidth() + "px"; - } else { - w.el.style.right = ""; - } - } - }; - -}).call(LineWidgets.prototype); - - -exports.LineWidgets = LineWidgets; - -}); - -ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"], function(require, exports, module) { -"use strict"; -var LineWidgets = require("../line_widgets").LineWidgets; -var dom = require("../lib/dom"); -var Range = require("../range").Range; - -function binarySearch(array, needle, comparator) { - var first = 0; - var last = array.length - 1; - - while (first <= last) { - var mid = (first + last) >> 1; - var c = comparator(needle, array[mid]); - if (c > 0) - first = mid + 1; - else if (c < 0) - last = mid - 1; - else - return mid; - } - return -(first + 1); -} - -function findAnnotations(session, row, dir) { - var annotations = session.getAnnotations().sort(Range.comparePoints); - if (!annotations.length) - return; - - var i = binarySearch(annotations, {row: row, column: -1}, Range.comparePoints); - if (i < 0) - i = -i - 1; - - if (i >= annotations.length) - i = dir > 0 ? 0 : annotations.length - 1; - else if (i === 0 && dir < 0) - i = annotations.length - 1; - - var annotation = annotations[i]; - if (!annotation || !dir) - return; - - if (annotation.row === row) { - do { - annotation = annotations[i += dir]; - } while (annotation && annotation.row === row); - if (!annotation) - return annotations.slice(); - } - - - var matched = []; - row = annotation.row; - do { - matched[dir < 0 ? "unshift" : "push"](annotation); - annotation = annotations[i += dir]; - } while (annotation && annotation.row == row); - return matched.length && matched; -} - -exports.showErrorMarker = function(editor, dir) { - var session = editor.session; - if (!session.widgetManager) { - session.widgetManager = new LineWidgets(session); - session.widgetManager.attach(editor); - } - - var pos = editor.getCursorPosition(); - var row = pos.row; - var oldWidget = session.widgetManager.getWidgetsAtRow(row).filter(function(w) { - return w.type == "errorMarker"; - })[0]; - if (oldWidget) { - oldWidget.destroy(); - } else { - row -= dir; - } - var annotations = findAnnotations(session, row, dir); - var gutterAnno; - if (annotations) { - var annotation = annotations[0]; - pos.column = (annotation.pos && typeof annotation.column != "number" - ? annotation.pos.sc - : annotation.column) || 0; - pos.row = annotation.row; - gutterAnno = editor.renderer.$gutterLayer.$annotations[pos.row]; - } else if (oldWidget) { - return; - } else { - gutterAnno = { - text: ["Looks good!"], - className: "ace_ok" - }; - } - editor.session.unfold(pos.row); - editor.selection.moveToPosition(pos); - - var w = { - row: pos.row, - fixedWidth: true, - coverGutter: true, - el: dom.createElement("div"), - type: "errorMarker" - }; - var el = w.el.appendChild(dom.createElement("div")); - var arrow = w.el.appendChild(dom.createElement("div")); - arrow.className = "error_widget_arrow " + gutterAnno.className; - - var left = editor.renderer.$cursorLayer - .getPixelPosition(pos).left; - arrow.style.left = left + editor.renderer.gutterWidth - 5 + "px"; - - w.el.className = "error_widget_wrapper"; - el.className = "error_widget " + gutterAnno.className; - el.innerHTML = gutterAnno.text.join("
      "); - - el.appendChild(dom.createElement("div")); - - var kb = function(_, hashId, keyString) { - if (hashId === 0 && (keyString === "esc" || keyString === "return")) { - w.destroy(); - return {command: "null"}; - } - }; - - w.destroy = function() { - if (editor.$mouseHandler.isMousePressed) - return; - editor.keyBinding.removeKeyboardHandler(kb); - session.widgetManager.removeLineWidget(w); - editor.off("changeSelection", w.destroy); - editor.off("changeSession", w.destroy); - editor.off("mouseup", w.destroy); - editor.off("change", w.destroy); - }; - - editor.keyBinding.addKeyboardHandler(kb); - editor.on("changeSelection", w.destroy); - editor.on("changeSession", w.destroy); - editor.on("mouseup", w.destroy); - editor.on("change", w.destroy); - - editor.session.widgetManager.addLineWidget(w); - - w.el.onmousedown = editor.focus.bind(editor); - - editor.renderer.scrollCursorIntoView(null, 0.5, {bottom: w.el.offsetHeight}); -}; - - -dom.importCssString("\ - .error_widget_wrapper {\ - background: inherit;\ - color: inherit;\ - border:none\ - }\ - .error_widget {\ - border-top: solid 2px;\ - border-bottom: solid 2px;\ - margin: 5px 0;\ - padding: 10px 40px;\ - white-space: pre-wrap;\ - }\ - .error_widget.ace_error, .error_widget_arrow.ace_error{\ - border-color: #ff5a5a\ - }\ - .error_widget.ace_warning, .error_widget_arrow.ace_warning{\ - border-color: #F1D817\ - }\ - .error_widget.ace_info, .error_widget_arrow.ace_info{\ - border-color: #5a5a5a\ - }\ - .error_widget.ace_ok, .error_widget_arrow.ace_ok{\ - border-color: #5aaa5a\ - }\ - .error_widget_arrow {\ - position: absolute;\ - border: solid 5px;\ - border-top-color: transparent!important;\ - border-right-color: transparent!important;\ - border-left-color: transparent!important;\ - top: -5px;\ - }\ -", ""); - -}); - -ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"], function(require, exports, module) { -"use strict"; - -require("./lib/fixoldbrowsers"); - -var dom = require("./lib/dom"); -var event = require("./lib/event"); - -var Editor = require("./editor").Editor; -var EditSession = require("./edit_session").EditSession; -var UndoManager = require("./undomanager").UndoManager; -var Renderer = require("./virtual_renderer").VirtualRenderer; -require("./worker/worker_client"); -require("./keyboard/hash_handler"); -require("./placeholder"); -require("./multi_select"); -require("./mode/folding/fold_mode"); -require("./theme/textmate"); -require("./ext/error_marker"); - -exports.config = require("./config"); -exports.require = require; -exports.edit = function(el) { - if (typeof el == "string") { - var _id = el; - el = document.getElementById(_id); - if (!el) - throw new Error("ace.edit can't find div #" + _id); - } - - if (el && el.env && el.env.editor instanceof Editor) - return el.env.editor; - - var value = ""; - if (el && /input|textarea/i.test(el.tagName)) { - var oldNode = el; - value = oldNode.value; - el = dom.createElement("pre"); - oldNode.parentNode.replaceChild(el, oldNode); - } else if (el) { - value = dom.getInnerText(el); - el.innerHTML = ""; - } - - var doc = exports.createEditSession(value); - - var editor = new Editor(new Renderer(el)); - editor.setSession(doc); - - var env = { - document: doc, - editor: editor, - onResize: editor.resize.bind(editor, null) - }; - if (oldNode) env.textarea = oldNode; - event.addListener(window, "resize", env.onResize); - editor.on("destroy", function() { - event.removeListener(window, "resize", env.onResize); - env.editor.container.env = null; // prevent memory leak on old ie - }); - editor.container.env = editor.env = env; - return editor; -}; -exports.createEditSession = function(text, mode) { - var doc = new EditSession(text, mode); - doc.setUndoManager(new UndoManager()); - return doc; -} -exports.EditSession = EditSession; -exports.UndoManager = UndoManager; -exports.version = "1.2.3"; -}); - (function() { - ace.require(["ace/ace"], function(a) { - a && a.config.init(true); - if (!window.ace) - window.ace = a; - for (var key in a) if (a.hasOwnProperty(key)) - window.ace[key] = a[key]; - }); - })(); - \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/ace.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/ace.js deleted file mode 100644 index faa3034d3..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/ace.js +++ /dev/null @@ -1,11 +0,0 @@ -(function(){function o(n){var i=e;n&&(e[n]||(e[n]={}),i=e[n]);if(!i.define||!i.define.packaged)t.original=i.define,i.define=t,i.define.packaged=!0;if(!i.require||!i.require.packaged)r.original=i.require,i.require=r,i.require.packaged=!0}var ACE_NAMESPACE = "ace",e=function(){return this}();!e&&typeof window!="undefined"&&(e=window);if(!ACE_NAMESPACE&&typeof requirejs!="undefined")return;var t=function(e,n,r){if(typeof e!="string"){t.original?t.original.apply(this,arguments):(console.error("dropping module because define wasn't a string."),console.trace());return}arguments.length==2&&(r=n),t.modules[e]||(t.payloads[e]=r,t.modules[e]=null)};t.modules={},t.payloads={};var n=function(e,t,n){if(typeof t=="string"){var i=s(e,t);if(i!=undefined)return n&&n(),i}else if(Object.prototype.toString.call(t)==="[object Array]"){var o=[];for(var u=0,a=t.length;u1&&u(t,"")>-1&&(a=RegExp(this.source,r.replace.call(o(this),"g","")),r.replace.call(e.slice(t.index),a,function(){for(var e=1;et.index&&this.lastIndex--}return t},s||(RegExp.prototype.test=function(e){var t=r.exec.call(this,e);return t&&this.global&&!t[0].length&&this.lastIndex>t.index&&this.lastIndex--,!!t})}),ace.define("ace/lib/es5-shim",["require","exports","module"],function(e,t,n){function r(){}function w(e){try{return Object.defineProperty(e,"sentinel",{}),"sentinel"in e}catch(t){}}function H(e){return e=+e,e!==e?e=0:e!==0&&e!==1/0&&e!==-1/0&&(e=(e>0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n=0?parseFloat((i.match(/(?:MSIE |Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]):parseFloat((i.match(/(?:Trident\/[0-9]+[\.0-9]+;.*rv:)([0-9]+[\.0-9]+)/)||[])[1]),t.isOldIE=t.isIE&&t.isIE<9,t.isGecko=t.isMozilla=(window.Controllers||window.controllers)&&window.navigator.product==="Gecko",t.isOldGecko=t.isGecko&&parseInt((i.match(/rv\:(\d+)/)||[])[1],10)<4,t.isOpera=window.opera&&Object.prototype.toString.call(window.opera)=="[object Opera]",t.isWebKit=parseFloat(i.split("WebKit/")[1])||undefined,t.isChrome=parseFloat(i.split(" Chrome/")[1])||undefined,t.isAIR=i.indexOf("AdobeAIR")>=0,t.isIPad=i.indexOf("iPad")>=0,t.isTouchPad=i.indexOf("TouchPad")>=0,t.isChromeOS=i.indexOf(" CrOS ")>=0}),ace.define("ace/lib/event",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function a(e,t,n){var a=u(t);if(!i.isMac&&s){s.OSKey&&(a|=8);if(s.altGr){if((3&a)==3)return;s.altGr=0}if(n===18||n===17){var f="location"in t?t.location:t.keyLocation;if(n===17&&f===1)s[n]==1&&(o=t.timeStamp);else if(n===18&&a===3&&f===2){var l=t.timeStamp-o;l<50&&(s.altGr=!0)}}}n in r.MODIFIER_KEYS&&(n=-1),a&8&&n>=91&&n<=93&&(n=-1);if(!a&&n===13){var f="location"in t?t.location:t.keyLocation;if(f===3){e(t,a,-n);if(t.defaultPrevented)return}}if(i.isChromeOS&&a&8){e(t,a,n);if(t.defaultPrevented)return;a&=-9}return!!a||n in r.FUNCTION_KEYS||n in r.PRINTABLE_KEYS?e(t,a,n):!1}function f(){s=Object.create(null),s.count=0,s.lastT=0}var r=e("./keys"),i=e("./useragent"),s=null,o=0;t.addListener=function(e,t,n){if(e.addEventListener)return e.addEventListener(t,n,!1);if(e.attachEvent){var r=function(){n.call(e,window.event)};n._wrapper=r,e.attachEvent("on"+t,r)}},t.removeListener=function(e,t,n){if(e.removeEventListener)return e.removeEventListener(t,n,!1);e.detachEvent&&e.detachEvent("on"+t,n._wrapper||n)},t.stopEvent=function(e){return t.stopPropagation(e),t.preventDefault(e),!1},t.stopPropagation=function(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},t.preventDefault=function(e){e.preventDefault?e.preventDefault():e.returnValue=!1},t.getButton=function(e){return e.type=="dblclick"?0:e.type=="contextmenu"||i.isMac&&e.ctrlKey&&!e.altKey&&!e.shiftKey?2:e.preventDefault?e.button:{1:0,2:2,4:1}[e.button]},t.capture=function(e,n,r){function i(e){n&&n(e),r&&r(e),t.removeListener(document,"mousemove",n,!0),t.removeListener(document,"mouseup",i,!0),t.removeListener(document,"dragstart",i,!0)}return t.addListener(document,"mousemove",n,!0),t.addListener(document,"mouseup",i,!0),t.addListener(document,"dragstart",i,!0),i},t.addTouchMoveListener=function(e,n){if("ontouchmove"in e){var r,i;t.addListener(e,"touchstart",function(e){var t=e.changedTouches[0];r=t.clientX,i=t.clientY}),t.addListener(e,"touchmove",function(e){var t=1,s=e.changedTouches[0];e.wheelX=-(s.clientX-r)/t,e.wheelY=-(s.clientY-i)/t,r=s.clientX,i=s.clientY,n(e)})}},t.addMouseWheelListener=function(e,n){"onmousewheel"in e?t.addListener(e,"mousewheel",function(e){var t=8;e.wheelDeltaX!==undefined?(e.wheelX=-e.wheelDeltaX/t,e.wheelY=-e.wheelDeltaY/t):(e.wheelX=0,e.wheelY=-e.wheelDelta/t),n(e)}):"onwheel"in e?t.addListener(e,"wheel",function(e){var t=.35;switch(e.deltaMode){case e.DOM_DELTA_PIXEL:e.wheelX=e.deltaX*t||0,e.wheelY=e.deltaY*t||0;break;case e.DOM_DELTA_LINE:case e.DOM_DELTA_PAGE:e.wheelX=(e.deltaX||0)*5,e.wheelY=(e.deltaY||0)*5}n(e)}):t.addListener(e,"DOMMouseScroll",function(e){e.axis&&e.axis==e.HORIZONTAL_AXIS?(e.wheelX=(e.detail||0)*5,e.wheelY=0):(e.wheelX=0,e.wheelY=(e.detail||0)*5),n(e)})},t.addMultiMouseDownListener=function(e,n,r,s){function c(e){t.getButton(e)!==0?o=0:e.detail>1?(o++,o>4&&(o=1)):o=1;if(i.isIE){var c=Math.abs(e.clientX-u)>5||Math.abs(e.clientY-a)>5;if(!f||c)o=1;f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),o==1&&(u=e.clientX,a=e.clientY)}e._clicks=o,r[s]("mousedown",e);if(o>4)o=0;else if(o>1)return r[s](l[o],e)}function h(e){o=2,f&&clearTimeout(f),f=setTimeout(function(){f=null},n[o-1]||600),r[s]("mousedown",e),r[s](l[o],e)}var o=0,u,a,f,l={2:"dblclick",3:"tripleclick",4:"quadclick"};Array.isArray(e)||(e=[e]),e.forEach(function(e){t.addListener(e,"mousedown",c),i.isOldIE&&t.addListener(e,"dblclick",h)})};var u=!i.isMac||!i.isOpera||"KeyboardEvent"in window?function(e){return 0|(e.ctrlKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.metaKey?8:0)}:function(e){return 0|(e.metaKey?1:0)|(e.altKey?2:0)|(e.shiftKey?4:0)|(e.ctrlKey?8:0)};t.getModifierString=function(e){return r.KEY_MODS[u(e)]},t.addCommandKeyListener=function(e,n){var r=t.addListener;if(i.isOldGecko||i.isOpera&&!("KeyboardEvent"in window)){var o=null;r(e,"keydown",function(e){o=e.keyCode}),r(e,"keypress",function(e){return a(n,e,o)})}else{var u=null;r(e,"keydown",function(e){var t=e.keyCode;s[t]=(s[t]||0)+1,t==91||t==92?s.OSKey=!0:s.OSKey&&e.timeStamp-s.lastT>200&&s.count==1&&f(),s[t]==1&&s.count++,s.lastT=e.timeStamp;var r=a(n,e,t);return u=e.defaultPrevented,r}),r(e,"keypress",function(e){u&&(e.ctrlKey||e.altKey||e.shiftKey||e.metaKey)&&(t.stopEvent(e),u=null)}),r(e,"keyup",function(e){var t=e.keyCode;s[t]?s.count=Math.max(s.count-1,0):f();if(t==91||t==92)s.OSKey=!1;s[t]=null}),s||(f(),r(window,"focus",f))}};if(typeof window=="object"&&window.postMessage&&!i.isOldIE){var l=1;t.nextTick=function(e,n){n=n||window;var r="zero-timeout-message-"+l;t.addListener(n,"message",function i(s){s.data==r&&(t.stopPropagation(s),t.removeListener(n,"message",i),e())}),n.postMessage(r,"*")}}t.nextFrame=typeof window=="object"&&(window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame||window.oRequestAnimationFrame),t.nextFrame?t.nextFrame=t.nextFrame.bind(window):t.nextFrame=function(e){setTimeout(e,17)}}),ace.define("ace/lib/lang",["require","exports","module"],function(e,t,n){"use strict";t.last=function(e){return e[e.length-1]},t.stringReverse=function(e){return e.split("").reverse().join("")},t.stringRepeat=function(e,t){var n="";while(t>0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n1),e.preventDefault()},this.startSelect=function(e,t){e=e||this.editor.renderer.screenToTextCoordinates(this.x,this.y);var n=this.editor;n.$blockScrolling++,this.mousedownEvent.getShiftKey()?n.selection.selectToPosition(e):t||n.selection.moveToPosition(e),t||this.select(),n.renderer.scroller.setCapture&&n.renderer.scroller.setCapture(),n.setStyle("ace_selecting"),this.setState("select"),n.$blockScrolling--},this.select=function(){var e,t=this.editor,n=t.renderer.screenToTextCoordinates(this.x,this.y);t.$blockScrolling++;if(this.$clickSelection){var r=this.$clickSelection.comparePoint(n);if(r==-1)e=this.$clickSelection.end;else if(r==1)e=this.$clickSelection.start;else{var i=f(this.$clickSelection,n);n=i.cursor,e=i.anchor}t.selection.setSelectionAnchor(e.row,e.column)}t.selection.selectToPosition(n),t.$blockScrolling--,t.renderer.scrollCursorIntoView()},this.extendSelectionBy=function(e){var t,n=this.editor,r=n.renderer.screenToTextCoordinates(this.x,this.y),i=n.selection[e](r.row,r.column);n.$blockScrolling++;if(this.$clickSelection){var s=this.$clickSelection.comparePoint(i.start),o=this.$clickSelection.comparePoint(i.end);if(s==-1&&o<=0){t=this.$clickSelection.end;if(i.end.row!=r.row||i.end.column!=r.column)r=i.start}else if(o==1&&s>=0){t=this.$clickSelection.start;if(i.start.row!=r.row||i.start.column!=r.column)r=i.end}else if(s==-1&&o==1)r=i.end,t=i.start;else{var u=f(this.$clickSelection,r);r=u.cursor,t=u.anchor}n.selection.setSelectionAnchor(t.row,t.column)}n.selection.selectToPosition(r),n.$blockScrolling--,n.renderer.scrollCursorIntoView()},this.selectEnd=this.selectAllEnd=this.selectByWordsEnd=this.selectByLinesEnd=function(){this.$clickSelection=null,this.editor.unsetStyle("ace_selecting"),this.editor.renderer.scroller.releaseCapture&&this.editor.renderer.scroller.releaseCapture()},this.focusWait=function(){var e=a(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y),t=Date.now();(e>o||t-this.mousedownEvent.time>this.$focusTimout)&&this.startSelect(this.mousedownEvent.getDocumentPosition())},this.onDoubleClick=function(e){var t=e.getDocumentPosition(),n=this.editor,r=n.session,i=r.getBracketRange(t);i?(i.isEmpty()&&(i.start.column--,i.end.column++),this.setState("select")):(i=n.selection.getWordRange(t.row,t.column),this.setState("selectByWords")),this.$clickSelection=i,this.select()},this.onTripleClick=function(e){var t=e.getDocumentPosition(),n=this.editor;this.setState("selectByLines");var r=n.getSelectionRange();r.isMultiLine()&&r.contains(t.row,t.column)?(this.$clickSelection=n.selection.getLineRange(r.start.row),this.$clickSelection.end=n.selection.getLineRange(r.end.row).end):this.$clickSelection=n.selection.getLineRange(t.row),this.select()},this.onQuadClick=function(e){var t=this.editor;t.selectAll(),this.$clickSelection=t.getSelectionRange(),this.setState("selectAll")},this.onMouseWheel=function(e){if(e.getAccelKey())return;e.getShiftKey()&&e.wheelY&&!e.wheelX&&(e.wheelX=e.wheelY,e.wheelY=0);var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()},this.onTouchMove=function(e){var t=e.domEvent.timeStamp,n=t-(this.$lastScrollTime||0),r=this.editor,i=r.renderer.isScrollableBy(e.wheelX*e.speed,e.wheelY*e.speed);if(i||n<200)return this.$lastScrollTime=t,r.renderer.scrollBy(e.wheelX*e.speed,e.wheelY*e.speed),e.stop()}}).call(u.prototype),t.DefaultHandlers=u}),ace.define("ace/tooltip",["require","exports","module","ace/lib/oop","ace/lib/dom"],function(e,t,n){"use strict";function s(e){this.isOpen=!1,this.$element=null,this.$parentNode=e}var r=e("./lib/oop"),i=e("./lib/dom");(function(){this.$init=function(){return this.$element=i.createElement("div"),this.$element.className="ace_tooltip",this.$element.style.display="none",this.$parentNode.appendChild(this.$element),this.$element},this.getElement=function(){return this.$element||this.$init()},this.setText=function(e){i.setInnerText(this.getElement(),e)},this.setHtml=function(e){this.getElement().innerHTML=e},this.setPosition=function(e,t){this.getElement().style.left=e+"px",this.getElement().style.top=t+"px"},this.setClassName=function(e){i.addCssClass(this.getElement(),e)},this.show=function(e,t,n){e!=null&&this.setText(e),t!=null&&n!=null&&this.setPosition(t,n),this.isOpen||(this.getElement().style.display="block",this.isOpen=!0)},this.hide=function(){this.isOpen&&(this.getElement().style.display="none",this.isOpen=!1)},this.getHeight=function(){return this.getElement().offsetHeight},this.getWidth=function(){return this.getElement().offsetWidth}}).call(s.prototype),t.Tooltip=s}),ace.define("ace/mouse/default_gutter_handler",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/event","ace/tooltip"],function(e,t,n){"use strict";function u(e){function l(){var r=u.getDocumentPosition().row,s=n.$annotations[r];if(!s)return c();var o=t.session.getLength();if(r==o){var a=t.renderer.pixelToScreenCoordinates(0,u.y).row,l=u.$pos;if(a>t.session.documentToScreenRow(l.row,l.column))return c()}if(f==s)return;f=s.text.join("
      "),i.setHtml(f),i.show(),t.on("mousewheel",c);if(e.$tooltipFollowsMouse)h(u);else{var p=u.domEvent.target,d=p.getBoundingClientRect(),v=i.getElement().style;v.left=d.right+"px",v.top=d.bottom+"px"}}function c(){o&&(o=clearTimeout(o)),f&&(i.hide(),f=null,t.removeEventListener("mousewheel",c))}function h(e){i.setPosition(e.x,e.y)}var t=e.editor,n=t.renderer.$gutterLayer,i=new a(t.container);e.editor.setDefaultHandler("guttermousedown",function(r){if(!t.isFocused()||r.getButton()!=0)return;var i=n.getRegion(r);if(i=="foldWidgets")return;var s=r.getDocumentPosition().row,o=t.session.selection;if(r.getShiftKey())o.selectTo(s,0);else{if(r.domEvent.detail==2)return t.selectAll(),r.preventDefault();e.$clickSelection=t.selection.getLineRange(s)}return e.setState("selectByLines"),e.captureMouse(r),r.preventDefault()});var o,u,f;e.editor.setDefaultHandler("guttermousemove",function(t){var n=t.domEvent.target||t.domEvent.srcElement;if(r.hasCssClass(n,"ace_fold-widget"))return c();f&&e.$tooltipFollowsMouse&&h(t),u=t;if(o)return;o=setTimeout(function(){o=null,u&&!e.isMousePressed?l():c()},50)}),s.addListener(t.renderer.$gutter,"mouseout",function(e){u=null;if(!f||o)return;o=setTimeout(function(){o=null,c()},50)}),t.on("changeSession",c)}function a(e){o.call(this,e)}var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/event"),o=e("../tooltip").Tooltip;i.inherits(a,o),function(){this.setPosition=function(e,t){var n=window.innerWidth||document.documentElement.clientWidth,r=window.innerHeight||document.documentElement.clientHeight,i=this.getWidth(),s=this.getHeight();e+=15,t+=15,e+i>n&&(e-=e+i-n),t+s>r&&(t-=20+s),o.prototype.setPosition.call(this,e,t)}}.call(a.prototype),t.GutterHandler=u}),ace.define("ace/mouse/mouse_event",["require","exports","module","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=t.MouseEvent=function(e,t){this.domEvent=e,this.editor=t,this.x=this.clientX=e.clientX,this.y=this.clientY=e.clientY,this.$pos=null,this.$inSelection=null,this.propagationStopped=!1,this.defaultPrevented=!1};(function(){this.stopPropagation=function(){r.stopPropagation(this.domEvent),this.propagationStopped=!0},this.preventDefault=function(){r.preventDefault(this.domEvent),this.defaultPrevented=!0},this.stop=function(){this.stopPropagation(),this.preventDefault()},this.getDocumentPosition=function(){return this.$pos?this.$pos:(this.$pos=this.editor.renderer.screenToTextCoordinates(this.clientX,this.clientY),this.$pos)},this.inSelection=function(){if(this.$inSelection!==null)return this.$inSelection;var e=this.editor,t=e.getSelectionRange();if(t.isEmpty())this.$inSelection=!1;else{var n=this.getDocumentPosition();this.$inSelection=t.contains(n.row,n.column)}return this.$inSelection},this.getButton=function(){return r.getButton(this.domEvent)},this.getShiftKey=function(){return this.domEvent.shiftKey},this.getAccelKey=i.isMac?function(){return this.domEvent.metaKey}:function(){return this.domEvent.ctrlKey}}).call(s.prototype)}),ace.define("ace/mouse/dragdrop_handler",["require","exports","module","ace/lib/dom","ace/lib/event","ace/lib/useragent"],function(e,t,n){"use strict";function f(e){function T(e,n){var r=Date.now(),i=!n||e.row!=n.row,s=!n||e.column!=n.column;if(!S||i||s)t.$blockScrolling+=1,t.moveCursorToPosition(e),t.$blockScrolling-=1,S=r,x={x:p,y:d};else{var o=l(x.x,x.y,p,d);o>a?S=null:r-S>=u&&(t.renderer.scrollCursorIntoView(),S=null)}}function N(e,n){var r=Date.now(),i=t.renderer.layerConfig.lineHeight,s=t.renderer.layerConfig.characterWidth,u=t.renderer.scroller.getBoundingClientRect(),a={x:{left:p-u.left,right:u.right-p},y:{top:d-u.top,bottom:u.bottom-d}},f=Math.min(a.x.left,a.x.right),l=Math.min(a.y.top,a.y.bottom),c={row:e.row,column:e.column};f/s<=2&&(c.column+=a.x.left=o&&t.renderer.scrollCursorIntoView(c):E=r:E=null}function C(){var e=g;g=t.renderer.screenToTextCoordinates(p,d),T(g,e),N(g,e)}function k(){m=t.selection.toOrientedRange(),h=t.session.addMarker(m,"ace_selection",t.getSelectionStyle()),t.clearSelection(),t.isFocused()&&t.renderer.$cursorLayer.setBlinking(!1),clearInterval(v),C(),v=setInterval(C,20),y=0,i.addListener(document,"mousemove",O)}function L(){clearInterval(v),t.session.removeMarker(h),h=null,t.$blockScrolling+=1,t.selection.fromOrientedRange(m),t.$blockScrolling-=1,t.isFocused()&&!w&&t.renderer.$cursorLayer.setBlinking(!t.getReadOnly()),m=null,g=null,y=0,E=null,S=null,i.removeListener(document,"mousemove",O)}function O(){A==null&&(A=setTimeout(function(){A!=null&&h&&L()},20))}function M(e){var t=e.types;return!t||Array.prototype.some.call(t,function(e){return e=="text/plain"||e=="Text"})}function _(e){var t=["copy","copymove","all","uninitialized"],n=["move","copymove","linkmove","all","uninitialized"],r=s.isMac?e.altKey:e.ctrlKey,i="uninitialized";try{i=e.dataTransfer.effectAllowed.toLowerCase()}catch(e){}var o="none";return r&&t.indexOf(i)>=0?o="copy":n.indexOf(i)>=0?o="move":t.indexOf(i)>=0&&(o="copy"),o}var t=e.editor,n=r.createElement("img");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",s.isOpera&&(n.style.cssText="width:1px;height:1px;position:fixed;top:0;left:0;z-index:2147483647;opacity:0;");var f=["dragWait","dragWaitEnd","startDrag","dragReadyEnd","onMouseDrag"];f.forEach(function(t){e[t]=this[t]},this),t.addEventListener("mousedown",this.onMouseDown.bind(e));var c=t.container,h,p,d,v,m,g,y=0,b,w,E,S,x;this.onDragStart=function(e){if(this.cancelDrag||!c.draggable){var r=this;return setTimeout(function(){r.startSelect(),r.captureMouse(e)},0),e.preventDefault()}m=t.getSelectionRange();var i=e.dataTransfer;i.effectAllowed=t.getReadOnly()?"copy":"copyMove",s.isOpera&&(t.container.appendChild(n),n.scrollTop=0),i.setDragImage&&i.setDragImage(n,0,0),s.isOpera&&t.container.removeChild(n),i.clearData(),i.setData("Text",t.session.getTextRange()),w=!0,this.setState("drag")},this.onDragEnd=function(e){c.draggable=!1,w=!1,this.setState(null);if(!t.getReadOnly()){var n=e.dataTransfer.dropEffect;!b&&n=="move"&&t.session.remove(t.getSelectionRange()),t.renderer.$cursorLayer.setBlinking(!0)}this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle("")},this.onDragEnter=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||k(),y++,e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragOver=function(e){if(t.getReadOnly()||!M(e.dataTransfer))return;return p=e.clientX,d=e.clientY,h||(k(),y++),A!==null&&(A=null),e.dataTransfer.dropEffect=b=_(e),i.preventDefault(e)},this.onDragLeave=function(e){y--;if(y<=0&&h)return L(),b=null,i.preventDefault(e)},this.onDrop=function(e){if(!g)return;var n=e.dataTransfer;if(w)switch(b){case"move":m.contains(g.row,g.column)?m={start:g,end:g}:m=t.moveText(m,g);break;case"copy":m=t.moveText(m,g,!0)}else{var r=n.getData("Text");m={start:g,end:t.session.insert(g,r)},t.focus(),b=null}return L(),i.preventDefault(e)},i.addListener(c,"dragstart",this.onDragStart.bind(e)),i.addListener(c,"dragend",this.onDragEnd.bind(e)),i.addListener(c,"dragenter",this.onDragEnter.bind(e)),i.addListener(c,"dragover",this.onDragOver.bind(e)),i.addListener(c,"dragleave",this.onDragLeave.bind(e)),i.addListener(c,"drop",this.onDrop.bind(e));var A=null}function l(e,t,n,r){return Math.sqrt(Math.pow(n-e,2)+Math.pow(r-t,2))}var r=e("../lib/dom"),i=e("../lib/event"),s=e("../lib/useragent"),o=200,u=200,a=5;(function(){this.dragWait=function(){var e=Date.now()-this.mousedownEvent.time;e>this.editor.getDragDelay()&&this.startDrag()},this.dragWaitEnd=function(){var e=this.editor.container;e.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()),this.selectEnd()},this.dragReadyEnd=function(e){this.editor.renderer.$cursorLayer.setBlinking(!this.editor.getReadOnly()),this.editor.unsetStyle("ace_dragging"),this.editor.renderer.setCursorStyle(""),this.dragWaitEnd()},this.startDrag=function(){this.cancelDrag=!1;var e=this.editor,t=e.container;t.draggable=!0,e.renderer.$cursorLayer.setBlinking(!1),e.setStyle("ace_dragging");var n=s.isWin?"default":"move";e.renderer.setCursorStyle(n),this.setState("dragReady")},this.onMouseDrag=function(e){var t=this.editor.container;if(s.isIE&&this.state=="dragReady"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>3&&t.dragDrop()}if(this.state==="dragWait"){var n=l(this.mousedownEvent.x,this.mousedownEvent.y,this.x,this.y);n>0&&(t.draggable=!1,this.startSelect(this.mousedownEvent.getDocumentPosition()))}},this.onMouseDown=function(e){if(!this.$dragEnabled)return;this.mousedownEvent=e;var t=this.editor,n=e.inSelection(),r=e.getButton(),i=e.domEvent.detail||1;if(i===1&&r===0&&n){if(e.editor.inMultiSelectMode&&(e.getAccelKey()||e.getShiftKey()))return;this.mousedownEvent.time=Date.now();var o=e.domEvent.target||e.domEvent.srcElement;"unselectable"in o&&(o.unselectable="on");if(t.getDragDelay()){if(s.isWebKit){this.cancelDrag=!0;var u=t.container;u.draggable=!0}this.setState("dragWait")}else this.startDrag();this.captureMouse(e,this.onMouseDrag.bind(this)),e.defaultPrevented=!0}}}).call(f.prototype),t.DragdropHandler=f}),ace.define("ace/lib/net",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("./dom");t.get=function(e,t){var n=new XMLHttpRequest;n.open("GET",e,!0),n.onreadystatechange=function(){n.readyState===4&&t(n.responseText)},n.send(null)},t.loadScript=function(e,t){var n=r.getDocumentHead(),i=document.createElement("script");i.src=e,n.appendChild(i),i.onload=i.onreadystatechange=function(e,n){if(n||!i.readyState||i.readyState=="loaded"||i.readyState=="complete")i=i.onload=i.onreadystatechange=null,n||t()}},t.qualifyURL=function(e){var t=document.createElement("a");return t.href=e,t.href}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;o1&&(i=n[n.length-2]);var o=a[t+"Path"];return o==null?o=a.basePath:r=="/"&&(t=r=""),o&&o.slice(-1)!="/"&&(o+="/"),o+t+r+i+this.get("suffix")},t.setModuleUrl=function(e,t){return a.$moduleUrls[e]=t},t.$loading={},t.loadModule=function(n,r){var i,o;Array.isArray(n)&&(o=n[0],n=n[1]);try{i=e(n)}catch(u){}if(i&&!t.$loading[n])return r&&r(i);t.$loading[n]||(t.$loading[n]=[]),t.$loading[n].push(r);if(t.$loading[n].length>1)return;var a=function(){e([n],function(e){t._emit("load.module",{name:n,module:e});var r=t.$loading[n];t.$loading[n]=null,r.forEach(function(t){t&&t(e)})})};if(!t.get("packaged"))return a();s.loadScript(t.moduleUrl(n,o),a)},t.init=f}),ace.define("ace/mouse/mouse_handler",["require","exports","module","ace/lib/event","ace/lib/useragent","ace/mouse/default_handlers","ace/mouse/default_gutter_handler","ace/mouse/mouse_event","ace/mouse/dragdrop_handler","ace/config"],function(e,t,n){"use strict";var r=e("../lib/event"),i=e("../lib/useragent"),s=e("./default_handlers").DefaultHandlers,o=e("./default_gutter_handler").GutterHandler,u=e("./mouse_event").MouseEvent,a=e("./dragdrop_handler").DragdropHandler,f=e("../config"),l=function(e){var t=this;this.editor=e,new s(this),new o(this),new a(this);var n=function(t){var n=!document.hasFocus||!document.hasFocus()||!e.isFocused()&&document.activeElement==(e.textInput&&e.textInput.getElement());n&&window.focus(),e.focus()},u=e.renderer.getMouseEventTarget();r.addListener(u,"click",this.onMouseEvent.bind(this,"click")),r.addListener(u,"mousemove",this.onMouseMove.bind(this,"mousemove")),r.addMultiMouseDownListener([u,e.renderer.scrollBarV&&e.renderer.scrollBarV.inner,e.renderer.scrollBarH&&e.renderer.scrollBarH.inner,e.textInput&&e.textInput.getElement()].filter(Boolean),[400,300,250],this,"onMouseEvent"),r.addMouseWheelListener(e.container,this.onMouseWheel.bind(this,"mousewheel")),r.addTouchMoveListener(e.container,this.onTouchMove.bind(this,"touchmove"));var f=e.renderer.$gutter;r.addListener(f,"mousedown",this.onMouseEvent.bind(this,"guttermousedown")),r.addListener(f,"click",this.onMouseEvent.bind(this,"gutterclick")),r.addListener(f,"dblclick",this.onMouseEvent.bind(this,"gutterdblclick")),r.addListener(f,"mousemove",this.onMouseEvent.bind(this,"guttermousemove")),r.addListener(u,"mousedown",n),r.addListener(f,"mousedown",n),i.isIE&&e.renderer.scrollBarV&&(r.addListener(e.renderer.scrollBarV.element,"mousedown",n),r.addListener(e.renderer.scrollBarH.element,"mousedown",n)),e.on("mousemove",function(n){if(t.state||t.$dragDelay||!t.$dragEnabled)return;var r=e.renderer.screenToTextCoordinates(n.x,n.y),i=e.session.selection.getRange(),s=e.renderer;!i.isEmpty()&&i.insideStart(r.row,r.column)?s.setCursorStyle("default"):s.setCursorStyle("")})};(function(){this.onMouseEvent=function(e,t){this.editor._emit(e,new u(t,this.editor))},this.onMouseMove=function(e,t){var n=this.editor._eventRegistry&&this.editor._eventRegistry.mousemove;if(!n||!n.length)return;this.editor._emit(e,new u(t,this.editor))},this.onMouseWheel=function(e,t){var n=new u(t,this.editor);n.speed=this.$scrollSpeed*2,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.onTouchMove=function(e,t){var n=new u(t,this.editor);n.speed=1,n.wheelX=t.wheelX,n.wheelY=t.wheelY,this.editor._emit(e,n)},this.setState=function(e){this.state=e},this.captureMouse=function(e,t){this.x=e.x,this.y=e.y,this.isMousePressed=!0;var n=this.editor.renderer;n.$keepTextAreaAtCursor&&(n.$keepTextAreaAtCursor=null);var s=this,o=function(e){if(!e)return;if(i.isWebKit&&!e.which&&s.releaseMouse)return s.releaseMouse();s.x=e.clientX,s.y=e.clientY,t&&t(e),s.mouseEvent=new u(e,s.editor),s.$mouseMoved=!0},a=function(e){clearInterval(l),f(),s[s.state+"End"]&&s[s.state+"End"](e),s.state="",n.$keepTextAreaAtCursor==null&&(n.$keepTextAreaAtCursor=!0,n.$moveTextAreaToCursor()),s.isMousePressed=!1,s.$onCaptureMouseMove=s.releaseMouse=null,e&&s.onMouseEvent("mouseup",e)},f=function(){s[s.state]&&s[s.state](),s.$mouseMoved=!1};if(i.isOldIE&&e.domEvent.type=="dblclick")return setTimeout(function(){a(e)});s.$onCaptureMouseMove=o,s.releaseMouse=r.capture(this.editor.container,o,a);var l=setInterval(f,20)},this.releaseMouse=null,this.cancelContextMenu=function(){var e=function(t){if(t&&t.domEvent&&t.domEvent.type!="contextmenu")return;this.editor.off("nativecontextmenu",e),t&&t.domEvent&&r.stopEvent(t.domEvent)}.bind(this);setTimeout(e,10),this.editor.on("nativecontextmenu",e)}}).call(l.prototype),f.defineOptions(l.prototype,"mouseHandler",{scrollSpeed:{initialValue:2},dragDelay:{initialValue:i.isMac?150:0},dragEnabled:{initialValue:!0},focusTimout:{initialValue:0},tooltipFollowsMouse:{initialValue:!0}}),t.MouseHandler=l}),ace.define("ace/mouse/fold_handler",["require","exports","module"],function(e,t,n){"use strict";function r(e){e.on("click",function(t){var n=t.getDocumentPosition(),r=e.session,i=r.getFoldAt(n.row,n.column,1);i&&(t.getAccelKey()?r.removeFold(i):r.expandFold(i),t.stop())}),e.on("gutterclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session;i.foldWidgets&&i.foldWidgets[r]&&e.session.onFoldWidgetClick(r,t),e.isFocused()||e.focus(),t.stop()}}),e.on("gutterdblclick",function(t){var n=e.renderer.$gutterLayer.getRegion(t);if(n=="foldWidgets"){var r=t.getDocumentPosition().row,i=e.session,s=i.getParentFoldRangeData(r,!0),o=s.range||s.firstRange;if(o){r=o.start.row;var u=i.getFoldAt(r,i.getLine(r).length,1);u?i.removeFold(u):(i.addFold("...",o),e.renderer.scrollCursorIntoView({row:o.start.row,column:0}))}t.stop()}})}t.FoldHandler=r}),ace.define("ace/keyboard/keybinding",["require","exports","module","ace/lib/keys","ace/lib/event"],function(e,t,n){"use strict";var r=e("../lib/keys"),i=e("../lib/event"),s=function(e){this.$editor=e,this.$data={editor:e},this.$handlers=[],this.setDefaultHandler(e.commands)};(function(){this.setDefaultHandler=function(e){this.removeKeyboardHandler(this.$defaultHandler),this.$defaultHandler=e,this.addKeyboardHandler(e,0)},this.setKeyboardHandler=function(e){var t=this.$handlers;if(t[t.length-1]==e)return;while(t[t.length-1]&&t[t.length-1]!=this.$defaultHandler)this.removeKeyboardHandler(t[t.length-1]);this.addKeyboardHandler(e,1)},this.addKeyboardHandler=function(e,t){if(!e)return;typeof e=="function"&&!e.handleKeyboard&&(e.handleKeyboard=e);var n=this.$handlers.indexOf(e);n!=-1&&this.$handlers.splice(n,1),t==undefined?this.$handlers.push(e):this.$handlers.splice(t,0,e),n==-1&&e.attach&&e.attach(this.$editor)},this.removeKeyboardHandler=function(e){var t=this.$handlers.indexOf(e);return t==-1?!1:(this.$handlers.splice(t,1),e.detach&&e.detach(this.$editor),!0)},this.getKeyboardHandler=function(){return this.$handlers[this.$handlers.length-1]},this.getStatusText=function(){var e=this.$data,t=e.editor;return this.$handlers.map(function(n){return n.getStatusText&&n.getStatusText(t,e)||""}).filter(Boolean).join(" ")},this.$callKeyboardHandlers=function(e,t,n,r){var s,o=!1,u=this.$editor.commands;for(var a=this.$handlers.length;a--;){s=this.$handlers[a].handleKeyboard(this.$data,e,t,n,r);if(!s||!s.command)continue;s.command=="null"?o=!0:o=u.exec(s.command,this.$editor,s.args,r),o&&r&&e!=-1&&s.passEvent!=1&&s.command.passEvent!=1&&i.stopEvent(r);if(o)break}return!o&&e==-1&&(s={command:"insertstring"},o=u.exec("insertstring",this.$editor,t)),o&&this.$editor._signal("keyboardActivity",s),o},this.onCommandKey=function(e,t,n){var i=r.keyCodeToString(n);this.$callKeyboardHandlers(t,i,n,e)},this.onTextInput=function(e){this.$callKeyboardHandlers(-1,e)}}).call(s.prototype),t.KeyBinding=s}),ace.define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.rowt.row||e.row==t.row&&e.column>t.column},this.getRange=function(){var e=this.anchor,t=this.lead;return this.isEmpty()?o.fromPoints(t,t):this.isBackwards()?o.fromPoints(t,e):o.fromPoints(e,t)},this.clearSelection=function(){this.$isEmpty||(this.$isEmpty=!0,this._emit("changeSelection"))},this.selectAll=function(){var e=this.doc.getLength()-1;this.setSelectionAnchor(0,0),this.moveCursorTo(e,this.doc.getLine(e).length)},this.setRange=this.setSelectionRange=function(e,t){t?(this.setSelectionAnchor(e.end.row,e.end.column),this.selectTo(e.start.row,e.start.column)):(this.setSelectionAnchor(e.start.row,e.start.column),this.selectTo(e.end.row,e.end.column)),this.getRange().isEmpty()&&(this.$isEmpty=!0),this.$desiredColumn=null},this.$moveSelection=function(e){var t=this.lead;this.$isEmpty&&this.setSelectionAnchor(t.row,t.column),e.call(this)},this.selectTo=function(e,t){this.$moveSelection(function(){this.moveCursorTo(e,t)})},this.selectToPosition=function(e){this.$moveSelection(function(){this.moveCursorToPosition(e)})},this.moveTo=function(e,t){this.clearSelection(),this.moveCursorTo(e,t)},this.moveToPosition=function(e){this.clearSelection(),this.moveCursorToPosition(e)},this.selectUp=function(){this.$moveSelection(this.moveCursorUp)},this.selectDown=function(){this.$moveSelection(this.moveCursorDown)},this.selectRight=function(){this.$moveSelection(this.moveCursorRight)},this.selectLeft=function(){this.$moveSelection(this.moveCursorLeft)},this.selectLineStart=function(){this.$moveSelection(this.moveCursorLineStart)},this.selectLineEnd=function(){this.$moveSelection(this.moveCursorLineEnd)},this.selectFileEnd=function(){this.$moveSelection(this.moveCursorFileEnd)},this.selectFileStart=function(){this.$moveSelection(this.moveCursorFileStart)},this.selectWordRight=function(){this.$moveSelection(this.moveCursorWordRight)},this.selectWordLeft=function(){this.$moveSelection(this.moveCursorWordLeft)},this.getWordRange=function(e,t){if(typeof t=="undefined"){var n=e||this.lead;e=n.row,t=n.column}return this.session.getWordRange(e,t)},this.selectWord=function(){this.setSelectionRange(this.getWordRange())},this.selectAWord=function(){var e=this.getCursor(),t=this.session.getAWordRange(e.row,e.column);this.setSelectionRange(t)},this.getLineRange=function(e,t){var n=typeof e=="number"?e:this.lead.row,r,i=this.session.getFoldLine(n);return i?(n=i.start.row,r=i.end.row):r=n,t===!0?new o(n,0,r,this.session.getLine(r).length):new o(n,0,r+1,0)},this.selectLine=function(){this.setSelectionRange(this.getLineRange())},this.moveCursorUp=function(){this.moveCursorBy(-1,0)},this.moveCursorDown=function(){this.moveCursorBy(1,0)},this.moveCursorLeft=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,-1))this.moveCursorTo(t.start.row,t.start.column);else if(e.column===0)e.row>0&&this.moveCursorTo(e.row-1,this.doc.getLine(e.row-1).length);else{var n=this.session.getTabSize();this.session.isTabStop(e)&&this.doc.getLine(e.row).slice(e.column-n,e.column).split(" ").length-1==n?this.moveCursorBy(0,-n):this.moveCursorBy(0,-1)}},this.moveCursorRight=function(){var e=this.lead.getPosition(),t;if(t=this.session.getFoldAt(e.row,e.column,1))this.moveCursorTo(t.end.row,t.end.column);else if(this.lead.column==this.doc.getLine(this.lead.row).length)this.lead.row0&&(t.column=r)}}this.moveCursorTo(t.row,t.column)},this.moveCursorFileEnd=function(){var e=this.doc.getLength()-1,t=this.doc.getLine(e).length;this.moveCursorTo(e,t)},this.moveCursorFileStart=function(){this.moveCursorTo(0,0)},this.moveCursorLongWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i;this.session.nonTokenRe.lastIndex=0,this.session.tokenRe.lastIndex=0;var s=this.session.getFoldAt(e,t,1);if(s){this.moveCursorTo(s.end.row,s.end.column);return}if(i=this.session.nonTokenRe.exec(r))t+=this.session.nonTokenRe.lastIndex,this.session.nonTokenRe.lastIndex=0,r=n.substring(t);if(t>=n.length){this.moveCursorTo(e,n.length),this.moveCursorRight(),e0&&this.moveCursorWordLeft();return}if(o=this.session.tokenRe.exec(s))t-=this.session.tokenRe.lastIndex,this.session.tokenRe.lastIndex=0;this.moveCursorTo(e,t)},this.$shortWordEndIndex=function(e){var t,n=0,r,i=/\s/,s=this.session.tokenRe;s.lastIndex=0;if(t=this.session.tokenRe.exec(e))n=this.session.tokenRe.lastIndex;else{while((r=e[n])&&i.test(r))n++;if(n<1){s.lastIndex=0;while((r=e[n])&&!s.test(r)){s.lastIndex=0,n++;if(i.test(r)){if(n>2){n--;break}while((r=e[n])&&i.test(r))n++;if(n>2)break}}}}return s.lastIndex=0,n},this.moveCursorShortWordRight=function(){var e=this.lead.row,t=this.lead.column,n=this.doc.getLine(e),r=n.substring(t),i=this.session.getFoldAt(e,t,1);if(i)return this.moveCursorTo(i.end.row,i.end.column);if(t==n.length){var s=this.doc.getLength();do e++,r=this.doc.getLine(e);while(e0&&/^\s*$/.test(r));t=r.length,/\s+$/.test(r)||(r="")}var s=i.stringReverse(r),o=this.$shortWordEndIndex(s);return this.moveCursorTo(e,t-o)},this.moveCursorWordRight=function(){this.session.$selectLongWords?this.moveCursorLongWordRight():this.moveCursorShortWordRight()},this.moveCursorWordLeft=function(){this.session.$selectLongWords?this.moveCursorLongWordLeft():this.moveCursorShortWordLeft()},this.moveCursorBy=function(e,t){var n=this.session.documentToScreenPosition(this.lead.row,this.lead.column);t===0&&(this.$desiredColumn?n.column=this.$desiredColumn:this.$desiredColumn=n.column);var r=this.session.screenToDocumentPosition(n.row+e,n.column);e!==0&&t===0&&r.row===this.lead.row&&r.column===this.lead.column&&this.session.lineWidgets&&this.session.lineWidgets[r.row]&&(r.row>0||e>0)&&r.row++,this.moveCursorTo(r.row,r.column+t,t===0)},this.moveCursorToPosition=function(e){this.moveCursorTo(e.row,e.column)},this.moveCursorTo=function(e,t,n){var r=this.session.getFoldAt(e,t,1);r&&(e=r.start.row,t=r.start.column),this.$keepDesiredColumnOnChange=!0,this.lead.setPosition(e,t),this.$keepDesiredColumnOnChange=!1,n||(this.$desiredColumn=null)},this.moveCursorToScreen=function(e,t,n){var r=this.session.screenToDocumentPosition(e,t);this.moveCursorTo(r.row,r.column,n)},this.detach=function(){this.lead.detach(),this.anchor.detach(),this.session=this.doc=null},this.fromOrientedRange=function(e){this.setSelectionRange(e,e.cursor==e.start),this.$desiredColumn=e.desiredColumn||this.$desiredColumn},this.toOrientedRange=function(e){var t=this.getRange();return e?(e.start.column=t.start.column,e.start.row=t.start.row,e.end.column=t.end.column,e.end.row=t.end.row):e=t,e.cursor=this.isBackwards()?e.start:e.end,e.desiredColumn=this.$desiredColumn,e},this.getRangeOfMovements=function(e){var t=this.getCursor();try{e(this);var n=this.getCursor();return o.fromPoints(t,n)}catch(r){return o.fromPoints(t,t)}finally{this.moveCursorToPosition(t)}},this.toJSON=function(){if(this.rangeCount)var e=this.ranges.map(function(e){var t=e.clone();return t.isBackwards=e.cursor==e.start,t});else{var e=this.getRange();e.isBackwards=this.isBackwards()}return e},this.fromJSON=function(e){if(e.start==undefined){if(this.rangeList){this.toSingleRange(e[0]);for(var t=e.length;t--;){var n=o.fromPoints(e[t].start,e[t].end);e[t].isBackwards&&(n.cursor=n.start),this.addRange(n,!0)}return}e=e[0]}this.rangeList&&this.toSingleRange(e),this.setSelectionRange(e,e.isBackwards)},this.isEqual=function(e){if((e.length||this.rangeCount)&&e.length!=this.rangeCount)return!1;if(!e.length||!this.ranges)return this.getRange().isEqual(e);for(var t=this.ranges.length;t--;)if(!this.ranges[t].isEqual(e[t]))return!1;return!0}}).call(u.prototype),t.Selection=u}),ace.define("ace/tokenizer",["require","exports","module","ace/config"],function(e,t,n){"use strict";var r=e("./config"),i=2e3,s=function(e){this.states=e,this.regExps={},this.matchMappings={};for(var t in this.states){var n=this.states[t],r=[],i=0,s=this.matchMappings[t]={defaultToken:"text"},o="g",u=[];for(var a=0;a1?f.onMatch=this.$applyToken:f.onMatch=f.token),c>1&&(/\\\d/.test(f.regex)?l=f.regex.replace(/\\([0-9]+)/g,function(e,t){return"\\"+(parseInt(t,10)+i+1)}):(c=1,l=this.removeCapturingGroups(f.regex)),!f.splitRegex&&typeof f.token!="string"&&u.push(f)),s[i]=a,i+=c,r.push(l),f.onMatch||(f.onMatch=null)}r.length||(s[0]=0,r.push("$")),u.forEach(function(e){e.splitRegex=this.createSplitterRegexp(e.regex,o)},this),this.regExps[t]=new RegExp("("+r.join(")|(")+")|($)",o)}};(function(){this.$setMaxTokenCount=function(e){i=e|0},this.$applyToken=function(e){var t=this.splitRegex.exec(e).slice(1),n=this.token.apply(this,t);if(typeof n=="string")return[{type:n,value:e}];var r=[];for(var i=0,s=n.length;il){var g=e.substring(l,m-v.length);h.type==p?h.value+=g:(h.type&&f.push(h),h={type:p,value:g})}for(var y=0;yi){c>2*e.length&&this.reportError("infinite loop with in ace tokenizer",{startState:t,line:e});while(l1&&n[0]!==r&&n.unshift("#tmp",r),{tokens:f,state:n.length?n:r}},this.reportError=r.reportError}).call(s.prototype),t.Tokenizer=s}),ace.define("ace/mode/text_highlight_rules",["require","exports","module","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../lib/lang"),i=function(){this.$rules={start:[{token:"empty_line",regex:"^$"},{defaultToken:"text"}]}};(function(){this.addRules=function(e,t){if(!t){for(var n in e)this.$rules[n]=e[n];return}for(var n in e){var r=e[n];for(var i=0;i=this.$rowTokens.length){this.$row+=1,e||(e=this.$session.getLength());if(this.$row>=e)return this.$row=e-1,null;this.$rowTokens=this.$session.getTokens(this.$row),this.$tokenIndex=0}return this.$rowTokens[this.$tokenIndex]},this.getCurrentToken=function(){return this.$rowTokens[this.$tokenIndex]},this.getCurrentTokenRow=function(){return this.$row},this.getCurrentTokenColumn=function(){var e=this.$rowTokens,t=this.$tokenIndex,n=e[t].start;if(n!==undefined)return n;n=0;while(t>0)t-=1,n+=e[t].value.length;return n},this.getCurrentTokenPosition=function(){return{row:this.$row,column:this.getCurrentTokenColumn()}}}).call(r.prototype),t.TokenIterator=r}),ace.define("ace/mode/text",["require","exports","module","ace/tokenizer","ace/mode/text_highlight_rules","ace/mode/behaviour","ace/unicode","ace/lib/lang","ace/token_iterator","ace/range"],function(e,t,n){"use strict";var r=e("../tokenizer").Tokenizer,i=e("./text_highlight_rules").TextHighlightRules,s=e("./behaviour").Behaviour,o=e("../unicode"),u=e("../lib/lang"),a=e("../token_iterator").TokenIterator,f=e("../range").Range,l=function(){this.HighlightRules=i,this.$behaviour=new s};(function(){this.tokenRe=new RegExp("^["+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]+","g"),this.nonTokenRe=new RegExp("^(?:[^"+o.packages.L+o.packages.Mn+o.packages.Mc+o.packages.Nd+o.packages.Pc+"\\$_]|\\s])+","g"),this.getTokenizer=function(){return this.$tokenizer||(this.$highlightRules=this.$highlightRules||new this.HighlightRules,this.$tokenizer=new r(this.$highlightRules.getRules())),this.$tokenizer},this.lineCommentStart="",this.blockComment="",this.toggleCommentLines=function(e,t,n,r){function w(e){for(var t=n;t<=r;t++)e(i.getLine(t),t)}var i=t.doc,s=!0,o=!0,a=Infinity,f=t.getTabSize(),l=!1;if(!this.lineCommentStart){if(!this.blockComment)return!1;var c=this.blockComment.start,h=this.blockComment.end,p=new RegExp("^(\\s*)(?:"+u.escapeRegExp(c)+")"),d=new RegExp("(?:"+u.escapeRegExp(h)+")\\s*$"),v=function(e,t){if(g(e,t))return;if(!s||/\S/.test(e))i.insertInLine({row:t,column:e.length},h),i.insertInLine({row:t,column:a},c)},m=function(e,t){var n;(n=e.match(d))&&i.removeInLine(t,e.length-n[0].length,e.length),(n=e.match(p))&&i.removeInLine(t,n[1].length,n[0].length)},g=function(e,n){if(p.test(e))return!0;var r=t.getTokens(n);for(var i=0;i2?r%f!=f-1:r%f==0}}var E=Infinity;w(function(e,t){var n=e.search(/\S/);n!==-1?(ne.length&&(E=e.length)}),a==Infinity&&(a=E,s=!1,o=!1),l&&a%f!=0&&(a=Math.floor(a/f)*f),w(o?m:v)},this.toggleBlockComment=function(e,t,n,r){var i=this.blockComment;if(!i)return;!i.start&&i[0]&&(i=i[0]);var s=new a(t,r.row,r.column),o=s.getCurrentToken(),u=t.selection,l=t.selection.toOrientedRange(),c,h;if(o&&/comment/.test(o.type)){var p,d;while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.start);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;p=new f(m,g,m,g+i.start.length);break}o=s.stepBackward()}var s=new a(t,r.row,r.column),o=s.getCurrentToken();while(o&&/comment/.test(o.type)){var v=o.value.indexOf(i.end);if(v!=-1){var m=s.getCurrentTokenRow(),g=s.getCurrentTokenColumn()+v;d=new f(m,g,m,g+i.end.length);break}o=s.stepForward()}d&&t.remove(d),p&&(t.remove(p),c=p.start.row,h=-i.start.length)}else h=i.start.length,c=n.start.row,t.insert(n.end,i.end),t.insert(n.start,i.start);l.start.row==c&&(l.start.column+=h),l.end.row==c&&(l.end.column+=h),t.selection.fromOrientedRange(l)},this.getNextLineIndent=function(e,t,n){return this.$getIndent(t)},this.checkOutdent=function(e,t,n){return!1},this.autoOutdent=function(e,t,n){},this.$getIndent=function(e){return e.match(/^\s*/)[0]},this.createWorker=function(e){return null},this.createModeDelegates=function(e){this.$embeds=[],this.$modes={};for(var t in e)e[t]&&(this.$embeds.push(t),this.$modes[t]=new e[t]);var n=["toggleBlockComment","toggleCommentLines","getNextLineIndent","checkOutdent","autoOutdent","transformAction","getCompletions"];for(var t=0;t=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define("ace/anchor",["require","exports","module","ace/lib/oop","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/event_emitter").EventEmitter,s=t.Anchor=function(e,t,n){this.$onChange=this.onChange.bind(this),this.attach(e),typeof n=="undefined"?this.setPosition(t.row,t.column):this.setPosition(t,n)};(function(){function e(e,t,n){var r=n?e.column<=t.column:e.columnthis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal("change",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(""),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action=="insert"?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i20){n.running=setTimeout(n.$worker,20);break}}n.currentLine=t,s<=r&&n.fireUpdateEvent(s,r)}};(function(){r.implement(this,i),this.setTokenizer=function(e){this.tokenizer=e,this.lines=[],this.states=[],this.start(0)},this.setDocument=function(e){this.doc=e,this.lines=[],this.states=[],this.stop()},this.fireUpdateEvent=function(e,t){var n={first:e,last:t};this._signal("update",{data:n})},this.start=function(e){this.currentLine=Math.min(e||0,this.currentLine,this.doc.getLength()),this.lines.splice(this.currentLine,this.lines.length),this.states.splice(this.currentLine,this.states.length),this.stop(),this.running=setTimeout(this.$worker,700)},this.scheduleStart=function(){this.running||(this.running=setTimeout(this.$worker,700))},this.$updateOnChange=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.lines[t]=null;else if(e.action=="remove")this.lines.splice(t,n+1,null),this.states.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.lines.splice.apply(this.lines,r),this.states.splice.apply(this.states,r)}this.currentLine=Math.min(t,this.currentLine,this.doc.getLength()),this.stop()},this.stop=function(){this.running&&clearTimeout(this.running),this.running=!1},this.getTokens=function(e){return this.lines[e]||this.$tokenizeRow(e)},this.getState=function(e){return this.currentLine==e&&this.$tokenizeRow(e),this.states[e]||"start"},this.$tokenizeRow=function(e){var t=this.doc.getLine(e),n=this.states[e-1],r=this.tokenizer.getLineTokens(t,n,e);return this.states[e]+""!=r.state+""?(this.states[e]=r.state,this.lines[e+1]=null,this.currentLine>e+1&&(this.currentLine=e+1)):this.currentLine==e&&(this.currentLine=e+1),this.lines[e]=r.tokens}}).call(s.prototype),t.BackgroundTokenizer=s}),ace.define("ace/search_highlight",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(e,t,n){this.setRegexp(e),this.clazz=t,this.type=n||"text"};(function(){this.MAX_RANGES=500,this.setRegexp=function(e){if(this.regExp+""==e+"")return;this.regExp=e,this.cache=[]},this.update=function(e,t,n,i){if(!this.regExp)return;var o=i.firstRow,u=i.lastRow;for(var a=o;a<=u;a++){var f=this.cache[a];f==null&&(f=r.getMatchOffsets(n.getLine(a),this.regExp),f.length>this.MAX_RANGES&&(f=f.slice(0,this.MAX_RANGES)),f=f.map(function(e){return new s(a,e.offset,a,e.offset+e.length)}),this.cache[a]=f.length?f:"");for(var l=f.length;l--;)t.drawSingleLineMarker(e,f[l].toScreenRange(n),this.clazz,i)}}}).call(o.prototype),t.SearchHighlight=o}),ace.define("ace/edit_session/fold_line",["require","exports","module","ace/range"],function(e,t,n){"use strict";function i(e,t){this.foldData=e,Array.isArray(t)?this.folds=t:t=this.folds=[t];var n=t[t.length-1];this.range=new r(t[0].start.row,t[0].start.column,n.end.row,n.end.column),this.start=this.range.start,this.end=this.range.end,this.folds.forEach(function(e){e.setFoldLine(this)},this)}var r=e("../range").Range;(function(){this.shiftRow=function(e){this.start.row+=e,this.end.row+=e,this.folds.forEach(function(t){t.start.row+=e,t.end.row+=e})},this.addFold=function(e){if(e.sameRow){if(e.start.rowthis.endRow)throw new Error("Can't add a fold to this FoldLine as it has no connection");this.folds.push(e),this.folds.sort(function(e,t){return-e.range.compareEnd(t.start.row,t.start.column)}),this.range.compareEnd(e.start.row,e.start.column)>0?(this.end.row=e.end.row,this.end.column=e.end.column):this.range.compareStart(e.end.row,e.end.column)<0&&(this.start.row=e.start.row,this.start.column=e.start.column)}else if(e.start.row==this.end.row)this.folds.push(e),this.end.row=e.end.row,this.end.column=e.end.column;else{if(e.end.row!=this.start.row)throw new Error("Trying to add fold to FoldRow that doesn't have a matching row");this.folds.unshift(e),this.start.row=e.start.row,this.start.column=e.start.column}e.foldLine=this},this.containsRow=function(e){return e>=this.start.row&&e<=this.end.row},this.walk=function(e,t,n){var r=0,i=this.folds,s,o,u,a=!0;t==null&&(t=this.end.row,n=this.end.column);for(var f=0;f0)continue;var a=i(e,o.start);return u===0?t&&a!==0?-s-2:s:a>0||a===0&&!t?s:-s-1}return-s-1},this.add=function(e){var t=!e.isEmpty(),n=this.pointIndex(e.start,t);n<0&&(n=-n-1);var r=this.pointIndex(e.end,t,n);return r<0?r=-r-1:r++,this.ranges.splice(n,r-n,e)},this.addList=function(e){var t=[];for(var n=e.length;n--;)t.push.apply(t,this.add(e[n]));return t},this.substractPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges.splice(t,1)},this.merge=function(){var e=[],t=this.ranges;t=t.sort(function(e,t){return i(e.start,t.start)});var n=t[0],r;for(var s=1;s=0},this.containsPoint=function(e){return this.pointIndex(e)>=0},this.rangeAtPoint=function(e){var t=this.pointIndex(e);if(t>=0)return this.ranges[t]},this.clipRows=function(e,t){var n=this.ranges;if(n[0].start.row>t||n[n.length-1].start.rowr)break;l.start.row==r&&l.start.column>=t.column&&(l.start.column!=t.column||!this.$insertRight)&&(l.start.column+=o,l.start.row+=s);if(l.end.row==r&&l.end.column>=t.column){if(l.end.column==t.column&&this.$insertRight)continue;l.end.column==t.column&&o>0&&al.start.column&&l.end.column==u[a+1].start.column&&(l.end.column-=o),l.end.column+=o,l.end.row+=s}}if(s!=0&&a=e)return i;if(i.end.row>e)return null}return null},this.getNextFoldLine=function(e,t){var n=this.$foldData,r=0;t&&(r=n.indexOf(t)),r==-1&&(r=0);for(r;r=e)return i}return null},this.getFoldedRowCount=function(e,t){var n=this.$foldData,r=t-e+1;for(var i=0;i=t){u=e?r-=t-u:r=0);break}o>=e&&(u>=e?r-=o-u:r-=o-e+1)}return r},this.$addFoldLine=function(e){return this.$foldData.push(e),this.$foldData.sort(function(e,t){return e.start.row-t.start.row}),e},this.addFold=function(e,t){var n=this.$foldData,r=!1,o;e instanceof s?o=e:(o=new s(t,e),o.collapseChildren=t.collapseChildren),this.$clipRangeToDocument(o.range);var u=o.start.row,a=o.start.column,f=o.end.row,l=o.end.column;if(u0&&(this.removeFolds(p),p.forEach(function(e){o.addSubFold(e)}));for(var d=0;d0&&this.foldAll(e.start.row+1,e.end.row,e.collapseChildren-1),e.subFolds=[]},this.expandFolds=function(e){e.forEach(function(e){this.expandFold(e)},this)},this.unfold=function(e,t){var n,i;e==null?(n=new r(0,0,this.getLength(),0),t=!0):typeof e=="number"?n=new r(e,0,e,this.getLine(e).length):"row"in e?n=r.fromPoints(e,e):n=e,i=this.getFoldsInRangeList(n);if(t)this.removeFolds(i);else{var s=i;while(s.length)this.expandFolds(s),s=this.getFoldsInRangeList(n)}if(i.length)return i},this.isRowFolded=function(e,t){return!!this.getFoldLine(e,t)},this.getRowFoldEnd=function(e,t){var n=this.getFoldLine(e,t);return n?n.end.row:e},this.getRowFoldStart=function(e,t){var n=this.getFoldLine(e,t);return n?n.start.row:e},this.getFoldDisplayLine=function(e,t,n,r,i){r==null&&(r=e.start.row),i==null&&(i=0),t==null&&(t=e.end.row),n==null&&(n=this.getLine(t).length);var s=this.doc,o="";return e.walk(function(e,t,n,u){if(t=e){i=s.end.row;try{var o=this.addFold("...",s);o&&(o.collapseChildren=n)}catch(u){}}}},this.$foldStyles={manual:1,markbegin:1,markbeginend:1},this.$foldStyle="markbegin",this.setFoldStyle=function(e){if(!this.$foldStyles[e])throw new Error("invalid fold style: "+e+"["+Object.keys(this.$foldStyles).join(", ")+"]");if(this.$foldStyle==e)return;this.$foldStyle=e,e=="manual"&&this.unfold();var t=this.$foldMode;this.$setFolding(null),this.$setFolding(t)},this.$setFolding=function(e){if(this.$foldMode==e)return;this.$foldMode=e,this.off("change",this.$updateFoldWidgets),this.off("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets),this._signal("changeAnnotation");if(!e||this.$foldStyle=="manual"){this.foldWidgets=null;return}this.foldWidgets=[],this.getFoldWidget=e.getFoldWidget.bind(e,this,this.$foldStyle),this.getFoldWidgetRange=e.getFoldWidgetRange.bind(e,this,this.$foldStyle),this.$updateFoldWidgets=this.updateFoldWidgets.bind(this),this.$tokenizerUpdateFoldWidgets=this.tokenizerUpdateFoldWidgets.bind(this),this.on("change",this.$updateFoldWidgets),this.on("tokenizerUpdate",this.$tokenizerUpdateFoldWidgets)},this.getParentFoldRangeData=function(e,t){var n=this.foldWidgets;if(!n||t&&n[e])return{};var r=e-1,i;while(r>=0){var s=n[r];s==null&&(s=n[r]=this.getFoldWidget(r));if(s=="start"){var o=this.getFoldWidgetRange(r);i||(i=o);if(o&&o.end.row>=e)break}r--}return{range:r!==-1&&o,firstRange:i}},this.onFoldWidgetClick=function(e,t){t=t.domEvent;var n={children:t.shiftKey,all:t.ctrlKey||t.metaKey,siblings:t.altKey},r=this.$toggleFoldWidget(e,n);if(!r){var i=t.target||t.srcElement;i&&/ace_fold-widget/.test(i.className)&&(i.className+=" ace_invalid")}},this.$toggleFoldWidget=function(e,t){if(!this.getFoldWidget)return;var n=this.getFoldWidget(e),r=this.getLine(e),i=n==="end"?-1:1,s=this.getFoldAt(e,i===-1?0:r.length,i);if(s){t.children||t.all?this.removeFold(s):this.expandFold(s);return}var o=this.getFoldWidgetRange(e,!0);if(o&&!o.isMultiLine()){s=this.getFoldAt(o.start.row,o.start.column,1);if(s&&o.isEqual(s.range)){this.removeFold(s);return}}if(t.siblings){var u=this.getParentFoldRangeData(e);if(u.range)var a=u.range.start.row+1,f=u.range.end.row;this.foldAll(a,f,t.all?1e4:0)}else t.children?(f=o?o.end.row:this.getLength(),this.foldAll(e+1,f,t.all?1e4:0)):o&&(t.all&&(o.collapseChildren=1e4),this.addFold("...",o));return o},this.toggleFoldWidget=function(e){var t=this.selection.getCursor().row;t=this.getRowFoldStart(t);var n=this.$toggleFoldWidget(t,{});if(n)return;var r=this.getParentFoldRangeData(t,!0);n=r.range||r.firstRange;if(n){t=n.start.row;var i=this.getFoldAt(t,this.getLine(t).length,1);i?this.removeFold(i):this.addFold("...",n)}},this.updateFoldWidgets=function(e){var t=e.start.row,n=e.end.row-t;if(n===0)this.foldWidgets[t]=null;else if(e.action=="remove")this.foldWidgets.splice(t,n+1,null);else{var r=Array(n+1);r.unshift(t,1),this.foldWidgets.splice.apply(this.foldWidgets,r)}},this.tokenizerUpdateFoldWidgets=function(e){var t=e.data;t.first!=t.last&&this.foldWidgets.length>t.first&&this.foldWidgets.splice(t.first,this.foldWidgets.length)}}var r=e("../range").Range,i=e("./fold_line").FoldLine,s=e("./fold").Fold,o=e("../token_iterator").TokenIterator;t.Folding=u}),ace.define("ace/edit_session/bracket_match",["require","exports","module","ace/token_iterator","ace/range"],function(e,t,n){"use strict";function s(){this.findMatchingBracket=function(e,t){if(e.column==0)return null;var n=t||this.getLine(e.row).charAt(e.column-1);if(n=="")return null;var r=n.match(/([\(\[\{])|([\)\]\}])/);return r?r[1]?this.$findClosingBracket(r[1],e):this.$findOpeningBracket(r[2],e):null},this.getBracketRange=function(e){var t=this.getLine(e.row),n=!0,r,s=t.charAt(e.column-1),o=s&&s.match(/([\(\[\{])|([\)\]\}])/);o||(s=t.charAt(e.column),e={row:e.row,column:e.column+1},o=s&&s.match(/([\(\[\{])|([\)\]\}])/),n=!1);if(!o)return null;if(o[1]){var u=this.$findClosingBracket(o[1],e);if(!u)return null;r=i.fromPoints(e,u),n||(r.end.column++,r.start.column--),r.cursor=r.end}else{var u=this.$findOpeningBracket(o[2],e);if(!u)return null;r=i.fromPoints(u,e),n||(r.start.column++,r.end.column--),r.cursor=r.start}return r},this.$brackets={")":"(","(":")","]":"[","[":"]","{":"}","}":"{"},this.$findOpeningBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("rparen",".paren").replace(/\b(?:end)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn()-2,f=u.value;for(;;){while(a>=0){var l=f.charAt(a);if(l==i){s-=1;if(s==0)return{row:o.getCurrentTokenRow(),column:a+o.getCurrentTokenColumn()}}else l==e&&(s+=1);a-=1}do u=o.stepBackward();while(u&&!n.test(u.type));if(u==null)break;f=u.value,a=f.length-1}return null},this.$findClosingBracket=function(e,t,n){var i=this.$brackets[e],s=1,o=new r(this,t.row,t.column),u=o.getCurrentToken();u||(u=o.stepForward());if(!u)return;n||(n=new RegExp("(\\.?"+u.type.replace(".","\\.").replace("lparen",".paren").replace(/\b(?:start|begin)\b/,"(?:start|begin|end)")+")+"));var a=t.column-o.getCurrentTokenColumn();for(;;){var f=u.value,l=f.length;while(a=4352&&e<=4447||e>=4515&&e<=4519||e>=4602&&e<=4607||e>=9001&&e<=9002||e>=11904&&e<=11929||e>=11931&&e<=12019||e>=12032&&e<=12245||e>=12272&&e<=12283||e>=12288&&e<=12350||e>=12353&&e<=12438||e>=12441&&e<=12543||e>=12549&&e<=12589||e>=12593&&e<=12686||e>=12688&&e<=12730||e>=12736&&e<=12771||e>=12784&&e<=12830||e>=12832&&e<=12871||e>=12880&&e<=13054||e>=13056&&e<=19903||e>=19968&&e<=42124||e>=42128&&e<=42182||e>=43360&&e<=43388||e>=44032&&e<=55203||e>=55216&&e<=55238||e>=55243&&e<=55291||e>=63744&&e<=64255||e>=65040&&e<=65049||e>=65072&&e<=65106||e>=65108&&e<=65126||e>=65128&&e<=65131||e>=65281&&e<=65376||e>=65504&&e<=65510}r.implement(this,o),this.setDocument=function(e){this.doc&&this.doc.removeListener("change",this.$onChange),this.doc=e,e.on("change",this.$onChange),this.bgTokenizer&&this.bgTokenizer.setDocument(this.getDocument()),this.resetCaches()},this.getDocument=function(){return this.doc},this.$resetRowCache=function(e){if(!e){this.$docRowCache=[],this.$screenRowCache=[];return}var t=this.$docRowCache.length,n=this.$getRowCacheIndex(this.$docRowCache,e)+1;t>n&&(this.$docRowCache.splice(n,t),this.$screenRowCache.splice(n,t))},this.$getRowCacheIndex=function(e,t){var n=0,r=e.length-1;while(n<=r){var i=n+r>>1,s=e[i];if(t>s)n=i+1;else{if(!(t=t)break}return r=n[s],r?(r.index=s,r.start=i-r.value.length,r):null},this.setUndoManager=function(e){this.$undoManager=e,this.$deltas=[],this.$deltasDoc=[],this.$deltasFold=[],this.$informUndoManager&&this.$informUndoManager.cancel();if(e){var t=this;this.$syncInformUndoManager=function(){t.$informUndoManager.cancel(),t.$deltasFold.length&&(t.$deltas.push({group:"fold",deltas:t.$deltasFold}),t.$deltasFold=[]),t.$deltasDoc.length&&(t.$deltas.push({group:"doc",deltas:t.$deltasDoc}),t.$deltasDoc=[]),t.$deltas.length>0&&e.execute({action:"aceupdate",args:[t.$deltas,t],merge:t.mergeUndoDeltas}),t.mergeUndoDeltas=!1,t.$deltas=[]},this.$informUndoManager=i.delayedCall(this.$syncInformUndoManager)}},this.markUndoGroup=function(){this.$syncInformUndoManager&&this.$syncInformUndoManager()},this.$defaultUndoManager={undo:function(){},redo:function(){},reset:function(){}},this.getUndoManager=function(){return this.$undoManager||this.$defaultUndoManager},this.getTabString=function(){return this.getUseSoftTabs()?i.stringRepeat(" ",this.getTabSize()):" "},this.setUseSoftTabs=function(e){this.setOption("useSoftTabs",e)},this.getUseSoftTabs=function(){return this.$useSoftTabs&&!this.$mode.$indentWithTabs},this.setTabSize=function(e){this.setOption("tabSize",e)},this.getTabSize=function(){return this.$tabSize},this.isTabStop=function(e){return this.$useSoftTabs&&e.column%this.$tabSize===0},this.$overwrite=!1,this.setOverwrite=function(e){this.setOption("overwrite",e)},this.getOverwrite=function(){return this.$overwrite},this.toggleOverwrite=function(){this.setOverwrite(!this.$overwrite)},this.addGutterDecoration=function(e,t){this.$decorations[e]||(this.$decorations[e]=""),this.$decorations[e]+=" "+t,this._signal("changeBreakpoint",{})},this.removeGutterDecoration=function(e,t){this.$decorations[e]=(this.$decorations[e]||"").replace(" "+t,""),this._signal("changeBreakpoint",{})},this.getBreakpoints=function(){return this.$breakpoints},this.setBreakpoints=function(e){this.$breakpoints=[];for(var t=0;t0&&(r=!!n.charAt(t-1).match(this.tokenRe)),r||(r=!!n.charAt(t).match(this.tokenRe));if(r)var i=this.tokenRe;else if(/^\s+$/.test(n.slice(t-1,t+1)))var i=/\s/;else var i=this.nonTokenRe;var s=t;if(s>0){do s--;while(s>=0&&n.charAt(s).match(i));s++}var o=t;while(oe&&(e=t.screenWidth)}),this.lineWidgetWidth=e},this.$computeWidth=function(e){if(this.$modified||e){this.$modified=!1;if(this.$useWrapMode)return this.screenWidth=this.$wrapLimit;var t=this.doc.getAllLines(),n=this.$rowLengthCache,r=0,i=0,s=this.$foldData[i],o=s?s.start.row:Infinity,u=t.length;for(var a=0;ao){a=s.end.row+1;if(a>=u)break;s=this.$foldData[i++],o=s?s.start.row:Infinity}n[a]==null&&(n[a]=this.$getStringScreenWidth(t[a])[0]),n[a]>r&&(r=n[a])}this.screenWidth=r}},this.getLine=function(e){return this.doc.getLine(e)},this.getLines=function(e,t){return this.doc.getLines(e,t)},this.getLength=function(){return this.doc.getLength()},this.getTextRange=function(e){return this.doc.getTextRange(e||this.selection.getRange())},this.insert=function(e,t){return this.doc.insert(e,t)},this.remove=function(e){return this.doc.remove(e)},this.removeFullLines=function(e,t){return this.doc.removeFullLines(e,t)},this.undoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=e.length-1;r!=-1;r--){var i=e[r];i.group=="doc"?(this.doc.revertDeltas(i.deltas),n=this.$getUndoSelection(i.deltas,!0,n)):i.deltas.forEach(function(e){this.addFolds(e.folds)},this)}return this.$fromUndo=!1,n&&this.$undoSelect&&!t&&this.selection.setSelectionRange(n),n},this.redoChanges=function(e,t){if(!e.length)return;this.$fromUndo=!0;var n=null;for(var r=0;re.end.column&&(s.start.column+=u),s.end.row==e.end.row&&s.end.column>e.end.column&&(s.end.column+=u)),o&&s.start.row>=e.end.row&&(s.start.row+=o,s.end.row+=o)}s.end=this.insert(s.start,r);if(i.length){var a=e.start,l=s.start,o=l.row-a.row,u=l.column-a.column;this.addFolds(i.map(function(e){return e=e.clone(),e.start.row==a.row&&(e.start.column+=u),e.end.row==a.row&&(e.end.column+=u),e.start.row+=o,e.end.row+=o,e}))}return s},this.indentRows=function(e,t,n){n=n.replace(/\t/g,this.getTabString());for(var r=e;r<=t;r++)this.doc.insertInLine({row:r,column:0},n)},this.outdentRows=function(e){var t=e.collapseRows(),n=new f(0,0,0,0),r=this.getTabSize();for(var i=t.start.row;i<=t.end.row;++i){var s=this.getLine(i);n.start.row=i,n.end.row=i;for(var o=0;o0){var r=this.getRowFoldEnd(t+n);if(r>this.doc.getLength()-1)return 0;var i=r-t}else{e=this.$clipRowToDocument(e),t=this.$clipRowToDocument(t);var i=t-e+1}var s=new f(e,0,t,Number.MAX_VALUE),o=this.getFoldsInRange(s).map(function(e){return e=e.clone(),e.start.row+=i,e.end.row+=i,e}),u=n==0?this.doc.getLines(e,t):this.doc.removeFullLines(e,t);return this.doc.insertFullLines(e+i,u),o.length&&this.addFolds(o),i},this.moveLinesUp=function(e,t){return this.$moveLines(e,t,-1)},this.moveLinesDown=function(e,t){return this.$moveLines(e,t,1)},this.duplicateLines=function(e,t){return this.$moveLines(e,t,0)},this.$clipRowToDocument=function(e){return Math.max(0,Math.min(e,this.doc.getLength()-1))},this.$clipColumnToRow=function(e,t){return t<0?0:Math.min(this.doc.getLine(e).length,t)},this.$clipPositionToDocument=function(e,t){t=Math.max(0,t);if(e<0)e=0,t=0;else{var n=this.doc.getLength();e>=n?(e=n-1,t=this.doc.getLine(n-1).length):t=Math.min(this.doc.getLine(e).length,t)}return{row:e,column:t}},this.$clipRangeToDocument=function(e){e.start.row<0?(e.start.row=0,e.start.column=0):e.start.column=this.$clipColumnToRow(e.start.row,e.start.column);var t=this.doc.getLength()-1;return e.end.row>t?(e.end.row=t,e.end.column=this.doc.getLine(t).length):e.end.column=this.$clipColumnToRow(e.end.row,e.end.column),e},this.$wrapLimit=80,this.$useWrapMode=!1,this.$wrapLimitRange={min:null,max:null},this.setUseWrapMode=function(e){if(e!=this.$useWrapMode){this.$useWrapMode=e,this.$modified=!0,this.$resetRowCache(0);if(e){var t=this.getLength();this.$wrapData=Array(t),this.$updateWrapData(0,t-1)}this._signal("changeWrapMode")}},this.getUseWrapMode=function(){return this.$useWrapMode},this.setWrapLimitRange=function(e,t){if(this.$wrapLimitRange.min!==e||this.$wrapLimitRange.max!==t)this.$wrapLimitRange={min:e,max:t},this.$modified=!0,this.$useWrapMode&&this._signal("changeWrapMode")},this.adjustWrapLimit=function(e,t){var n=this.$wrapLimitRange;n.max<0&&(n={min:t,max:t});var r=this.$constrainWrapLimit(e,n.min,n.max);return r!=this.$wrapLimit&&r>1?(this.$wrapLimit=r,this.$modified=!0,this.$useWrapMode&&(this.$updateWrapData(0,this.getLength()-1),this.$resetRowCache(0),this._signal("changeWrapLimit")),!0):!1},this.$constrainWrapLimit=function(e,t,n){return t&&(e=Math.max(t,e)),n&&(e=Math.min(n,e)),e},this.getWrapLimit=function(){return this.$wrapLimit},this.setWrapLimit=function(e){this.setWrapLimitRange(e,e)},this.getWrapLimitRange=function(){return{min:this.$wrapLimitRange.min,max:this.$wrapLimitRange.max}},this.$updateInternalDataOnChange=function(e){var t=this.$useWrapMode,n=e.action,r=e.start,i=e.end,s=r.row,o=i.row,u=o-s,a=null;this.$updating=!0;if(u!=0)if(n==="remove"){this[t?"$wrapData":"$rowLengthCache"].splice(s,u);var f=this.$foldData;a=this.getFoldsInRange(e),this.removeFolds(a);var l=this.getFoldLine(i.row),c=0;if(l){l.addRemoveChars(i.row,i.column,r.column-i.column),l.shiftRow(-u);var h=this.getFoldLine(s);h&&h!==l&&(h.merge(l),l=h),c=f.indexOf(l)+1}for(c;c=i.row&&l.shiftRow(-u)}o=s}else{var p=Array(u);p.unshift(s,0);var d=t?this.$wrapData:this.$rowLengthCache;d.splice.apply(d,p);var f=this.$foldData,l=this.getFoldLine(s),c=0;if(l){var v=l.range.compareInside(r.row,r.column);v==0?(l=l.split(r.row,r.column),l&&(l.shiftRow(u),l.addRemoveChars(o,0,i.column-r.column))):v==-1&&(l.addRemoveChars(s,0,i.column-r.column),l.shiftRow(u)),c=f.indexOf(l)+1}for(c;c=s&&l.shiftRow(u)}}else{u=Math.abs(e.start.column-e.end.column),n==="remove"&&(a=this.getFoldsInRange(e),this.removeFolds(a),u=-u);var l=this.getFoldLine(s);l&&l.addRemoveChars(s,r.column,u)}return t&&this.$wrapData.length!=this.doc.getLength()&&console.error("doc.getLength() and $wrapData.length have to be the same!"),this.$updating=!1,t?this.$updateWrapData(s,o):this.$updateRowLengthCache(s,o),a},this.$updateRowLengthCache=function(e,t,n){this.$rowLengthCache[e]=null,this.$rowLengthCache[t]=null},this.$updateWrapData=function(e,t){var r=this.doc.getAllLines(),i=this.getTabSize(),s=this.$wrapData,o=this.$wrapLimit,a,f,l=e;t=Math.min(t,r.length-1);while(l<=t)f=this.getFoldLine(l,f),f?(a=[],f.walk(function(e,t,i,s){var o;if(e!=null){o=this.$getDisplayTokens(e,a.length),o[0]=n;for(var f=1;fr-b){var w=a+r-b;if(e[w-1]>=p&&e[w]>=p){y(w);continue}if(e[w]==n||e[w]==u){for(w;w!=a-1;w--)if(e[w]==n)break;if(w>a){y(w);continue}w=a+r;for(w;w>2)),a-1);while(w>E&&e[w]E&&e[w]E&&e[w]==l)w--}else while(w>E&&e[w]E){y(++w);continue}w=a+r,e[w]==t&&w--,y(w-b)}return s},this.$getDisplayTokens=function(n,r){var i=[],s;r=r||0;for(var o=0;o39&&u<48||u>57&&u<64?i.push(l):u>=4352&&m(u)?i.push(e,t):i.push(e)}return i},this.$getStringScreenWidth=function(e,t,n){if(t==0)return[0,0];t==null&&(t=Infinity),n=n||0;var r,i;for(i=0;i=4352&&m(r)?n+=2:n+=1;if(n>t)break}return[n,i]},this.lineWidgets=null,this.getRowLength=function(e){if(this.lineWidgets)var t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0;else t=0;return!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.getRowLineCount=function(e){return!this.$useWrapMode||!this.$wrapData[e]?1:this.$wrapData[e].length+1},this.getRowWrapIndent=function(e){if(this.$useWrapMode){var t=this.screenToDocumentPosition(e,Number.MAX_VALUE),n=this.$wrapData[t.row];return n.length&&n[0]=0)var o=a[f],r=this.$docRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getLength()-1,p=this.getNextFoldLine(r),d=p?p.start.row:Infinity;while(o<=e){u=this.getRowLength(r);if(o+u>e||r>=h)break;o+=u,r++,r>d&&(r=p.end.row+1,p=this.getNextFoldLine(r,p),d=p?p.start.row:Infinity),c&&(this.$docRowCache.push(r),this.$screenRowCache.push(o))}if(p&&p.start.row<=r)n=this.getFoldDisplayLine(p),r=p.start.row;else{if(o+u<=e||r>h)return{row:h,column:this.getLine(h).length};n=this.getLine(r),p=null}var v=0;if(this.$useWrapMode){var m=this.$wrapData[r];if(m){var g=Math.floor(e-o);s=m[g],g>0&&m.length&&(v=m.indent,i=m[g-1]||m[m.length-1],n=n.substring(i))}}return i+=this.$getStringScreenWidth(n,t-v)[1],this.$useWrapMode&&i>=s&&(i=s-1),p?p.idxToPosition(i):{row:r,column:i}},this.documentToScreenPosition=function(e,t){if(typeof t=="undefined")var n=this.$clipPositionToDocument(e.row,e.column);else n=this.$clipPositionToDocument(e,t);e=n.row,t=n.column;var r=0,i=null,s=null;s=this.getFoldAt(e,t,1),s&&(e=s.start.row,t=s.start.column);var o,u=0,a=this.$docRowCache,f=this.$getRowCacheIndex(a,e),l=a.length;if(l&&f>=0)var u=a[f],r=this.$screenRowCache[f],c=e>a[l-1];else var c=!l;var h=this.getNextFoldLine(u),p=h?h.start.row:Infinity;while(u=p){o=h.end.row+1;if(o>e)break;h=this.getNextFoldLine(o,h),p=h?h.start.row:Infinity}else o=u+1;r+=this.getRowLength(u),u=o,c&&(this.$docRowCache.push(u),this.$screenRowCache.push(r))}var d="";h&&u>=p?(d=this.getFoldDisplayLine(h,e,t),i=h.start.row):(d=this.getLine(e).substring(0,t),i=e);var v=0;if(this.$useWrapMode){var m=this.$wrapData[i];if(m){var g=0;while(d.length>=m[g])r++,g++;d=d.substring(m[g-1]||0,d.length),v=g>0?m.indent:0}}return{row:r,column:v+this.$getStringScreenWidth(d)[0]}},this.documentToScreenColumn=function(e,t){return this.documentToScreenPosition(e,t).column},this.documentToScreenRow=function(e,t){return this.documentToScreenPosition(e,t).row},this.getScreenLength=function(){var e=0,t=null;if(!this.$useWrapMode){e=this.getLength();var n=this.$foldData;for(var r=0;ro&&(s=t.end.row+1,t=this.$foldData[r++],o=t?t.start.row:Infinity)}}return this.lineWidgets&&(e+=this.$getWidgetScreenLength()),e},this.$setFontMetrics=function(e){if(!this.$enableVarChar)return;this.$getStringScreenWidth=function(t,n,r){if(n===0)return[0,0];n||(n=Infinity),r=r||0;var i,s;for(s=0;sn)break}return[r,s]}},this.destroy=function(){this.bgTokenizer&&(this.bgTokenizer.setDocument(null),this.bgTokenizer=null),this.$stopWorker()}}).call(p.prototype),e("./edit_session/folding").Folding.call(p.prototype),e("./edit_session/bracket_match").BracketMatch.call(p.prototype),s.defineOptions(p.prototype,"session",{wrap:{set:function(e){!e||e=="off"?e=!1:e=="free"?e=!0:e=="printMargin"?e=-1:typeof e=="string"&&(e=parseInt(e,10)||!1);if(this.$wrap==e)return;this.$wrap=e;if(!e)this.setUseWrapMode(!1);else{var t=typeof e=="number"?e:null;this.setWrapLimitRange(t,t),this.setUseWrapMode(!0)}},get:function(){return this.getUseWrapMode()?this.$wrap==-1?"printMargin":this.getWrapLimitRange().min?this.$wrap:"free":"off"},handlesSet:!0},wrapMethod:{set:function(e){e=e=="auto"?this.$mode.type!="text":e!="text",e!=this.$wrapAsCode&&(this.$wrapAsCode=e,this.$useWrapMode&&(this.$modified=!0,this.$resetRowCache(0),this.$updateWrapData(0,this.getLength()-1)))},initialValue:"auto"},indentedSoftWrap:{initialValue:!0},firstLineNumber:{set:function(){this._signal("changeBreakpoint")},initialValue:1},useWorker:{set:function(e){this.$useWorker=e,this.$stopWorker(),e&&this.$startWorker()},initialValue:!0},useSoftTabs:{initialValue:!0},tabSize:{set:function(e){if(isNaN(e)||this.$tabSize===e)return;this.$modified=!0,this.$rowLengthCache=[],this.$tabSize=e,this._signal("changeTabSize")},initialValue:4,handlesSet:!0},overwrite:{set:function(e){this._signal("changeOverwrite")},initialValue:!1},newLineMode:{set:function(e){this.doc.setNewLineMode(e)},get:function(){return this.doc.getNewLineMode()},handlesSet:!0},mode:{set:function(e){this.setMode(e)},get:function(){return this.$modeId}}}),t.EditSession=p}),ace.define("ace/search",["require","exports","module","ace/lib/lang","ace/lib/oop","ace/range"],function(e,t,n){"use strict";var r=e("./lib/lang"),i=e("./lib/oop"),s=e("./range").Range,o=function(){this.$options={}};(function(){this.set=function(e){return i.mixin(this.$options,e),this},this.getOptions=function(){return r.copyObject(this.$options)},this.setOptions=function(e){this.$options=e},this.find=function(e){var t=this.$options,n=this.$matchIterator(e,t);if(!n)return!1;var r=null;return n.forEach(function(e,n,i){if(!e.start){var o=e.offset+(i||0);r=new s(n,o,n,o+e.length);if(!e.length&&t.start&&t.start.start&&t.skipCurrent!=0&&r.isEqual(t.start))return r=null,!1}else r=e;return!0}),r},this.findAll=function(e){var t=this.$options;if(!t.needle)return[];this.$assembleRegExp(t);var n=t.range,i=n?e.getLines(n.start.row,n.end.row):e.doc.getAllLines(),o=[],u=t.re;if(t.$isMultiLine){var a=u.length,f=i.length-a,l;e:for(var c=u.offset||0;c<=f;c++){for(var h=0;hv)continue;o.push(l=new s(c,v,c+a-1,m)),a>2&&(c=c+a-2)}}else for(var g=0;gE&&o[h].end.row==n.end.row)h--;o=o.slice(g,h+1);for(g=0,h=o.length;g=0;u--)if(i(o[u],t,s))return!0};else var u=function(e,t,s){var o=r.getMatchOffsets(e,n);for(var u=0;u=o;r--)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=u,o=s.row;r>=o;r--)if(n(e.getLine(r),r))return}:function(n){var r=s.row,i=e.getLine(r).substr(s.column);if(n(i,r,s.column))return;for(r+=1;r<=u;r++)if(n(e.getLine(r),r))return;if(t.wrap==0)return;for(r=o,u=s.row;r<=u;r++)if(n(e.getLine(r),r))return};return{forEach:a}}}).call(o.prototype),t.Search=o}),ace.define("ace/keyboard/hash_handler",["require","exports","module","ace/lib/keys","ace/lib/useragent"],function(e,t,n){"use strict";function o(e,t){this.platform=t||(i.isMac?"mac":"win"),this.commands={},this.commandKeyBinding={},this.addCommands(e),this.$singleCommand=!0}function u(e,t){o.call(this,e,t),this.$singleCommand=!1}var r=e("../lib/keys"),i=e("../lib/useragent"),s=r.KEY_MODS;u.prototype=o.prototype,function(){function e(e){return typeof e=="object"&&e.bindKey&&e.bindKey.position||0}this.addCommand=function(e){this.commands[e.name]&&this.removeCommand(e),this.commands[e.name]=e,e.bindKey&&this._buildKeyHash(e)},this.removeCommand=function(e,t){var n=e&&(typeof e=="string"?e:e.name);e=this.commands[n],t||delete this.commands[n];var r=this.commandKeyBinding;for(var i in r){var s=r[i];if(s==e)delete r[i];else if(Array.isArray(s)){var o=s.indexOf(e);o!=-1&&(s.splice(o,1),s.length==1&&(r[i]=s[0]))}}},this.bindKey=function(e,t,n){typeof e=="object"&&e&&(n==undefined&&(n=e.position),e=e[this.platform]);if(!e)return;if(typeof t=="function")return this.addCommand({exec:t,bindKey:e,name:t.name||e});e.split("|").forEach(function(e){var r="";if(e.indexOf(" ")!=-1){var i=e.split(/\s+/);e=i.pop(),i.forEach(function(e){var t=this.parseKeys(e),n=s[t.hashId]+t.key;r+=(r?" ":"")+n,this._addCommandToBinding(r,"chainKeys")},this),r+=" "}var o=this.parseKeys(e),u=s[o.hashId]+o.key;this._addCommandToBinding(r+u,t,n)},this)},this._addCommandToBinding=function(t,n,r){var i=this.commandKeyBinding,s;if(!n)delete i[t];else if(!i[t]||this.$singleCommand)i[t]=n;else{Array.isArray(i[t])?(s=i[t].indexOf(n))!=-1&&i[t].splice(s,1):i[t]=[i[t]],typeof r!="number"&&(r||n.isDefault?r=-100:r=e(n));var o=i[t];for(s=0;sr)break}o.splice(s,0,n)}},this.addCommands=function(e){e&&Object.keys(e).forEach(function(t){var n=e[t];if(!n)return;if(typeof n=="string")return this.bindKey(n,t);typeof n=="function"&&(n={exec:n});if(typeof n!="object")return;n.name||(n.name=t),this.addCommand(n)},this)},this.removeCommands=function(e){Object.keys(e).forEach(function(t){this.removeCommand(e[t])},this)},this.bindKeys=function(e){Object.keys(e).forEach(function(t){this.bindKey(t,e[t])},this)},this._buildKeyHash=function(e){this.bindKey(e.bindKey,e)},this.parseKeys=function(e){var t=e.toLowerCase().split(/[\-\+]([\-\+])?/).filter(function(e){return e}),n=t.pop(),i=r[n];if(r.FUNCTION_KEYS[i])n=r.FUNCTION_KEYS[i].toLowerCase();else{if(!t.length)return{key:n,hashId:-1};if(t.length==1&&t[0]=="shift")return{key:n.toUpperCase(),hashId:-1}}var s=0;for(var o=t.length;o--;){var u=r.KEY_MODS[t[o]];if(u==null)return typeof console!="undefined"&&console.error("invalid modifier "+t[o]+" in "+e),!1;s|=u}return{key:n,hashId:s}},this.findKeyCommand=function(t,n){var r=s[t]+n;return this.commandKeyBinding[r]},this.handleKeyboard=function(e,t,n,r){if(r<0)return;var i=s[t]+n,o=this.commandKeyBinding[i];e.$keyChain&&(e.$keyChain+=" "+i,o=this.commandKeyBinding[e.$keyChain]||o);if(o)if(o=="chainKeys"||o[o.length-1]=="chainKeys")return e.$keyChain=e.$keyChain||i,{command:"null"};if(e.$keyChain)if(!!t&&t!=4||n.length!=1){if(t==-1||r>0)e.$keyChain=""}else e.$keyChain=e.$keyChain.slice(0,-i.length-1);return{command:o}},this.getStatusText=function(e,t){return t.$keyChain||""}}.call(o.prototype),t.HashHandler=o,t.MultiHashHandler=u}),ace.define("ace/commands/command_manager",["require","exports","module","ace/lib/oop","ace/keyboard/hash_handler","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../keyboard/hash_handler").MultiHashHandler,s=e("../lib/event_emitter").EventEmitter,o=function(e,t){i.call(this,t,e),this.byName=this.commands,this.setDefaultHandler("exec",function(e){return e.command.exec(e.editor,e.args||{})})};r.inherits(o,i),function(){r.implement(this,s),this.exec=function(e,t,n){if(Array.isArray(e)){for(var r=e.length;r--;)if(this.exec(e[r],t,n))return!0;return!1}typeof e=="string"&&(e=this.commands[e]);if(!e)return!1;if(t&&t.$readOnly&&!e.readOnly)return!1;var i={editor:t,command:e,args:n};return i.returnValue=this._emit("exec",i),this._signal("afterExec",i),i.returnValue===!1?!1:!0},this.toggleRecording=function(e){if(this.$inReplay)return;return e&&e._emit("changeStatus"),this.recording?(this.macro.pop(),this.removeEventListener("exec",this.$addCommandToMacro),this.macro.length||(this.macro=this.oldMacro),this.recording=!1):(this.$addCommandToMacro||(this.$addCommandToMacro=function(e){this.macro.push([e.command,e.args])}.bind(this)),this.oldMacro=this.macro,this.macro=[],this.on("exec",this.$addCommandToMacro),this.recording=!0)},this.replay=function(e){if(this.$inReplay||!this.macro)return;if(this.recording)return this.toggleRecording(e);try{this.$inReplay=!0,this.macro.forEach(function(t){typeof t=="string"?this.exec(t,e):this.exec(t[0],e,t[1])},this)}finally{this.$inReplay=!1}},this.trimMacro=function(e){return e.map(function(e){return typeof e[0]!="string"&&(e[0]=e[0].name),e[1]||(e=e[0]),e})}}.call(o.prototype),t.CommandManager=o}),ace.define("ace/commands/default_commands",["require","exports","module","ace/lib/lang","ace/config","ace/range"],function(e,t,n){"use strict";function o(e,t){return{win:e,mac:t}}var r=e("../lib/lang"),i=e("../config"),s=e("../range").Range;t.commands=[{name:"showSettingsMenu",bindKey:o("Ctrl-,","Command-,"),exec:function(e){i.loadModule("ace/ext/settings_menu",function(t){t.init(e),e.showSettingsMenu()})},readOnly:!0},{name:"goToNextError",bindKey:o("Alt-E","Ctrl-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,1)})},scrollIntoView:"animate",readOnly:!0},{name:"goToPreviousError",bindKey:o("Alt-Shift-E","Ctrl-Shift-E"),exec:function(e){i.loadModule("ace/ext/error_marker",function(t){t.showErrorMarker(e,-1)})},scrollIntoView:"animate",readOnly:!0},{name:"selectall",bindKey:o("Ctrl-A","Command-A"),exec:function(e){e.selectAll()},readOnly:!0},{name:"centerselection",bindKey:o(null,"Ctrl-L"),exec:function(e){e.centerSelection()},readOnly:!0},{name:"gotoline",bindKey:o("Ctrl-L","Command-L"),exec:function(e){var t=parseInt(prompt("Enter line number:"),10);isNaN(t)||e.gotoLine(t)},readOnly:!0},{name:"fold",bindKey:o("Alt-L|Ctrl-F1","Command-Alt-L|Command-F1"),exec:function(e){e.session.toggleFold(!1)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"unfold",bindKey:o("Alt-Shift-L|Ctrl-Shift-F1","Command-Alt-Shift-L|Command-Shift-F1"),exec:function(e){e.session.toggleFold(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleFoldWidget",bindKey:o("F2","F2"),exec:function(e){e.session.toggleFoldWidget()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"toggleParentFoldWidget",bindKey:o("Alt-F2","Alt-F2"),exec:function(e){e.session.toggleFoldWidget(!0)},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"foldall",bindKey:o(null,"Ctrl-Command-Option-0"),exec:function(e){e.session.foldAll()},scrollIntoView:"center",readOnly:!0},{name:"foldOther",bindKey:o("Alt-0","Command-Option-0"),exec:function(e){e.session.foldAll(),e.session.unfold(e.selection.getAllRanges())},scrollIntoView:"center",readOnly:!0},{name:"unfoldall",bindKey:o("Alt-Shift-0","Command-Option-Shift-0"),exec:function(e){e.session.unfold()},scrollIntoView:"center",readOnly:!0},{name:"findnext",bindKey:o("Ctrl-K","Command-G"),exec:function(e){e.findNext()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"findprevious",bindKey:o("Ctrl-Shift-K","Command-Shift-G"),exec:function(e){e.findPrevious()},multiSelectAction:"forEach",scrollIntoView:"center",readOnly:!0},{name:"selectOrFindNext",bindKey:o("Alt-K","Ctrl-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findNext()},readOnly:!0},{name:"selectOrFindPrevious",bindKey:o("Alt-Shift-K","Ctrl-Shift-G"),exec:function(e){e.selection.isEmpty()?e.selection.selectWord():e.findPrevious()},readOnly:!0},{name:"find",bindKey:o("Ctrl-F","Command-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e)})},readOnly:!0},{name:"overwrite",bindKey:"Insert",exec:function(e){e.toggleOverwrite()},readOnly:!0},{name:"selecttostart",bindKey:o("Ctrl-Shift-Home","Command-Shift-Up"),exec:function(e){e.getSelection().selectFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotostart",bindKey:o("Ctrl-Home","Command-Home|Command-Up"),exec:function(e){e.navigateFileStart()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectup",bindKey:o("Shift-Up","Shift-Up"),exec:function(e){e.getSelection().selectUp()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golineup",bindKey:o("Up","Up|Ctrl-P"),exec:function(e,t){e.navigateUp(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttoend",bindKey:o("Ctrl-Shift-End","Command-Shift-Down"),exec:function(e){e.getSelection().selectFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"gotoend",bindKey:o("Ctrl-End","Command-End|Command-Down"),exec:function(e){e.navigateFileEnd()},multiSelectAction:"forEach",readOnly:!0,scrollIntoView:"animate",aceCommandGroup:"fileJump"},{name:"selectdown",bindKey:o("Shift-Down","Shift-Down"),exec:function(e){e.getSelection().selectDown()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"golinedown",bindKey:o("Down","Down|Ctrl-N"),exec:function(e,t){e.navigateDown(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordleft",bindKey:o("Ctrl-Shift-Left","Option-Shift-Left"),exec:function(e){e.getSelection().selectWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordleft",bindKey:o("Ctrl-Left","Option-Left"),exec:function(e){e.navigateWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolinestart",bindKey:o("Alt-Shift-Left","Command-Shift-Left"),exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolinestart",bindKey:o("Alt-Left|Home","Command-Left|Home|Ctrl-A"),exec:function(e){e.navigateLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectleft",bindKey:o("Shift-Left","Shift-Left"),exec:function(e){e.getSelection().selectLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoleft",bindKey:o("Left","Left|Ctrl-B"),exec:function(e,t){e.navigateLeft(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectwordright",bindKey:o("Ctrl-Shift-Right","Option-Shift-Right"),exec:function(e){e.getSelection().selectWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotowordright",bindKey:o("Ctrl-Right","Option-Right"),exec:function(e){e.navigateWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selecttolineend",bindKey:o("Alt-Shift-Right","Command-Shift-Right"),exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotolineend",bindKey:o("Alt-Right|End","Command-Right|End|Ctrl-E"),exec:function(e){e.navigateLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectright",bindKey:o("Shift-Right","Shift-Right"),exec:function(e){e.getSelection().selectRight()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"gotoright",bindKey:o("Right","Right|Ctrl-F"),exec:function(e,t){e.navigateRight(t.times)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectpagedown",bindKey:"Shift-PageDown",exec:function(e){e.selectPageDown()},readOnly:!0},{name:"pagedown",bindKey:o(null,"Option-PageDown"),exec:function(e){e.scrollPageDown()},readOnly:!0},{name:"gotopagedown",bindKey:o("PageDown","PageDown|Ctrl-V"),exec:function(e){e.gotoPageDown()},readOnly:!0},{name:"selectpageup",bindKey:"Shift-PageUp",exec:function(e){e.selectPageUp()},readOnly:!0},{name:"pageup",bindKey:o(null,"Option-PageUp"),exec:function(e){e.scrollPageUp()},readOnly:!0},{name:"gotopageup",bindKey:"PageUp",exec:function(e){e.gotoPageUp()},readOnly:!0},{name:"scrollup",bindKey:o("Ctrl-Up",null),exec:function(e){e.renderer.scrollBy(0,-2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"scrolldown",bindKey:o("Ctrl-Down",null),exec:function(e){e.renderer.scrollBy(0,2*e.renderer.layerConfig.lineHeight)},readOnly:!0},{name:"selectlinestart",bindKey:"Shift-Home",exec:function(e){e.getSelection().selectLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"selectlineend",bindKey:"Shift-End",exec:function(e){e.getSelection().selectLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"togglerecording",bindKey:o("Ctrl-Alt-E","Command-Option-E"),exec:function(e){e.commands.toggleRecording(e)},readOnly:!0},{name:"replaymacro",bindKey:o("Ctrl-Shift-E","Command-Shift-E"),exec:function(e){e.commands.replay(e)},readOnly:!0},{name:"jumptomatching",bindKey:o("Ctrl-P","Ctrl-P"),exec:function(e){e.jumpToMatching()},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"selecttomatching",bindKey:o("Ctrl-Shift-P","Ctrl-Shift-P"),exec:function(e){e.jumpToMatching(!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"expandToMatching",bindKey:o("Ctrl-Shift-M","Ctrl-Shift-M"),exec:function(e){e.jumpToMatching(!0,!0)},multiSelectAction:"forEach",scrollIntoView:"animate",readOnly:!0},{name:"passKeysToBrowser",bindKey:o(null,null),exec:function(){},passEvent:!0,readOnly:!0},{name:"copy",exec:function(e){},readOnly:!0},{name:"cut",exec:function(e){var t=e.getSelectionRange();e._emit("cut",t),e.selection.isEmpty()||(e.session.remove(t),e.clearSelection())},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"paste",exec:function(e,t){e.$handlePaste(t)},scrollIntoView:"cursor"},{name:"removeline",bindKey:o("Ctrl-D","Command-D"),exec:function(e){e.removeLines()},scrollIntoView:"cursor",multiSelectAction:"forEachLine"},{name:"duplicateSelection",bindKey:o("Ctrl-Shift-D","Command-Shift-D"),exec:function(e){e.duplicateSelection()},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"sortlines",bindKey:o("Ctrl-Alt-S","Command-Alt-S"),exec:function(e){e.sortLines()},scrollIntoView:"selection",multiSelectAction:"forEachLine"},{name:"togglecomment",bindKey:o("Ctrl-/","Command-/"),exec:function(e){e.toggleCommentLines()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"toggleBlockComment",bindKey:o("Ctrl-Shift-/","Command-Shift-/"),exec:function(e){e.toggleBlockComment()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"modifyNumberUp",bindKey:o("Ctrl-Shift-Up","Alt-Shift-Up"),exec:function(e){e.modifyNumber(1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"modifyNumberDown",bindKey:o("Ctrl-Shift-Down","Alt-Shift-Down"),exec:function(e){e.modifyNumber(-1)},scrollIntoView:"cursor",multiSelectAction:"forEach"},{name:"replace",bindKey:o("Ctrl-H","Command-Option-F"),exec:function(e){i.loadModule("ace/ext/searchbox",function(t){t.Search(e,!0)})}},{name:"undo",bindKey:o("Ctrl-Z","Command-Z"),exec:function(e){e.undo()}},{name:"redo",bindKey:o("Ctrl-Shift-Z|Ctrl-Y","Command-Shift-Z|Command-Y"),exec:function(e){e.redo()}},{name:"copylinesup",bindKey:o("Alt-Shift-Up","Command-Option-Up"),exec:function(e){e.copyLinesUp()},scrollIntoView:"cursor"},{name:"movelinesup",bindKey:o("Alt-Up","Option-Up"),exec:function(e){e.moveLinesUp()},scrollIntoView:"cursor"},{name:"copylinesdown",bindKey:o("Alt-Shift-Down","Command-Option-Down"),exec:function(e){e.copyLinesDown()},scrollIntoView:"cursor"},{name:"movelinesdown",bindKey:o("Alt-Down","Option-Down"),exec:function(e){e.moveLinesDown()},scrollIntoView:"cursor"},{name:"del",bindKey:o("Delete","Delete|Ctrl-D|Shift-Delete"),exec:function(e){e.remove("right")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"backspace",bindKey:o("Shift-Backspace|Backspace","Ctrl-Backspace|Shift-Backspace|Backspace|Ctrl-H"),exec:function(e){e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"cut_or_delete",bindKey:o("Shift-Delete",null),exec:function(e){if(!e.selection.isEmpty())return!1;e.remove("left")},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolinestart",bindKey:o("Alt-Backspace","Command-Backspace"),exec:function(e){e.removeToLineStart()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removetolineend",bindKey:o("Alt-Delete","Ctrl-K"),exec:function(e){e.removeToLineEnd()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordleft",bindKey:o("Ctrl-Backspace","Alt-Backspace|Ctrl-Alt-Backspace"),exec:function(e){e.removeWordLeft()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"removewordright",bindKey:o("Ctrl-Delete","Alt-Delete"),exec:function(e){e.removeWordRight()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"outdent",bindKey:o("Shift-Tab","Shift-Tab"),exec:function(e){e.blockOutdent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"indent",bindKey:o("Tab","Tab"),exec:function(e){e.indent()},multiSelectAction:"forEach",scrollIntoView:"selectionPart"},{name:"blockoutdent",bindKey:o("Ctrl-[","Ctrl-["),exec:function(e){e.blockOutdent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"blockindent",bindKey:o("Ctrl-]","Ctrl-]"),exec:function(e){e.blockIndent()},multiSelectAction:"forEachLine",scrollIntoView:"selectionPart"},{name:"insertstring",exec:function(e,t){e.insert(t)},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"inserttext",exec:function(e,t){e.insert(r.stringRepeat(t.text||"",t.times||1))},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"splitline",bindKey:o(null,"Ctrl-O"),exec:function(e){e.splitLine()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"transposeletters",bindKey:o("Ctrl-T","Ctrl-T"),exec:function(e){e.transposeLetters()},multiSelectAction:function(e){e.transposeSelections(1)},scrollIntoView:"cursor"},{name:"touppercase",bindKey:o("Ctrl-U","Ctrl-U"),exec:function(e){e.toUpperCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"tolowercase",bindKey:o("Ctrl-Shift-U","Ctrl-Shift-U"),exec:function(e){e.toLowerCase()},multiSelectAction:"forEach",scrollIntoView:"cursor"},{name:"expandtoline",bindKey:o("Ctrl-Shift-L","Command-Shift-L"),exec:function(e){var t=e.selection.getRange();t.start.column=t.end.column=0,t.end.row++,e.selection.setRange(t,!1)},multiSelectAction:"forEach",scrollIntoView:"cursor",readOnly:!0},{name:"joinlines",bindKey:o(null,null),exec:function(e){var t=e.selection.isBackwards(),n=t?e.selection.getSelectionLead():e.selection.getSelectionAnchor(),i=t?e.selection.getSelectionAnchor():e.selection.getSelectionLead(),o=e.session.doc.getLine(n.row).length,u=e.session.doc.getTextRange(e.selection.getRange()),a=u.replace(/\n\s*/," ").length,f=e.session.doc.getLine(n.row);for(var l=n.row+1;l<=i.row+1;l++){var c=r.stringTrimLeft(r.stringTrimRight(e.session.doc.getLine(l)));c.length!==0&&(c=" "+c),f+=c}i.row+10?(e.selection.moveCursorTo(n.row,n.column),e.selection.selectTo(n.row,n.column+a)):(o=e.session.doc.getLine(n.row).length>o?o+1:o,e.selection.moveCursorTo(n.row,o))},multiSelectAction:"forEach",readOnly:!0},{name:"invertSelection",bindKey:o(null,null),exec:function(e){var t=e.session.doc.getLength()-1,n=e.session.doc.getLine(t).length,r=e.selection.rangeList.ranges,i=[];r.length<1&&(r=[e.selection.getRange()]);for(var o=0;o0&&this.$blockScrolling--;var n=t&&t.scrollIntoView;if(n){switch(n){case"center-animate":n="animate";case"center":this.renderer.scrollCursorIntoView(null,.5);break;case"animate":case"cursor":this.renderer.scrollCursorIntoView();break;case"selectionPart":var r=this.selection.getRange(),i=this.renderer.layerConfig;(r.start.row>=i.lastRow||r.end.row<=i.firstRow)&&this.renderer.scrollSelectionIntoView(this.selection.anchor,this.selection.lead);break;default:}n=="animate"&&this.renderer.animateScrolling(this.curOp.scrollTop)}this.prevOp=this.curOp,this.curOp=null}},this.$mergeableCommands=["backspace","del","insertstring"],this.$historyTracker=function(e){if(!this.$mergeUndoDeltas)return;var t=this.prevOp,n=this.$mergeableCommands,r=t.command&&e.command.name==t.command.name;if(e.command.name=="insertstring"){var i=e.args;this.mergeNextCommand===undefined&&(this.mergeNextCommand=!0),r=r&&this.mergeNextCommand&&(!/\s/.test(i)||/\s/.test(t.args)),this.mergeNextCommand=!0}else r=r&&n.indexOf(e.command.name)!==-1;this.$mergeUndoDeltas!="always"&&Date.now()-this.sequenceStartTime>2e3&&(r=!1),r?this.session.mergeUndoDeltas=!0:n.indexOf(e.command.name)!==-1&&(this.sequenceStartTime=Date.now())},this.setKeyboardHandler=function(e,t){if(e&&typeof e=="string"){this.$keybindingId=e;var n=this;g.loadModule(["keybinding",e],function(r){n.$keybindingId==e&&n.keyBinding.setKeyboardHandler(r&&r.handler),t&&t()})}else this.$keybindingId=null,this.keyBinding.setKeyboardHandler(e),t&&t()},this.getKeyboardHandler=function(){return this.keyBinding.getKeyboardHandler()},this.setSession=function(e){if(this.session==e)return;this.curOp&&this.endOperation(),this.curOp={};var t=this.session;if(t){this.session.off("change",this.$onDocumentChange),this.session.off("changeMode",this.$onChangeMode),this.session.off("tokenizerUpdate",this.$onTokenizerUpdate),this.session.off("changeTabSize",this.$onChangeTabSize),this.session.off("changeWrapLimit",this.$onChangeWrapLimit),this.session.off("changeWrapMode",this.$onChangeWrapMode),this.session.off("changeFold",this.$onChangeFold),this.session.off("changeFrontMarker",this.$onChangeFrontMarker),this.session.off("changeBackMarker",this.$onChangeBackMarker),this.session.off("changeBreakpoint",this.$onChangeBreakpoint),this.session.off("changeAnnotation",this.$onChangeAnnotation),this.session.off("changeOverwrite",this.$onCursorChange),this.session.off("changeScrollTop",this.$onScrollTopChange),this.session.off("changeScrollLeft",this.$onScrollLeftChange);var n=this.session.getSelection();n.off("changeCursor",this.$onCursorChange),n.off("changeSelection",this.$onSelectionChange)}this.session=e,e?(this.$onDocumentChange=this.onDocumentChange.bind(this),e.on("change",this.$onDocumentChange),this.renderer.setSession(e),this.$onChangeMode=this.onChangeMode.bind(this),e.on("changeMode",this.$onChangeMode),this.$onTokenizerUpdate=this.onTokenizerUpdate.bind(this),e.on("tokenizerUpdate",this.$onTokenizerUpdate),this.$onChangeTabSize=this.renderer.onChangeTabSize.bind(this.renderer),e.on("changeTabSize",this.$onChangeTabSize),this.$onChangeWrapLimit=this.onChangeWrapLimit.bind(this),e.on("changeWrapLimit",this.$onChangeWrapLimit),this.$onChangeWrapMode=this.onChangeWrapMode.bind(this),e.on("changeWrapMode",this.$onChangeWrapMode),this.$onChangeFold=this.onChangeFold.bind(this),e.on("changeFold",this.$onChangeFold),this.$onChangeFrontMarker=this.onChangeFrontMarker.bind(this),this.session.on("changeFrontMarker",this.$onChangeFrontMarker),this.$onChangeBackMarker=this.onChangeBackMarker.bind(this),this.session.on("changeBackMarker",this.$onChangeBackMarker),this.$onChangeBreakpoint=this.onChangeBreakpoint.bind(this),this.session.on("changeBreakpoint",this.$onChangeBreakpoint),this.$onChangeAnnotation=this.onChangeAnnotation.bind(this),this.session.on("changeAnnotation",this.$onChangeAnnotation),this.$onCursorChange=this.onCursorChange.bind(this),this.session.on("changeOverwrite",this.$onCursorChange),this.$onScrollTopChange=this.onScrollTopChange.bind(this),this.session.on("changeScrollTop",this.$onScrollTopChange),this.$onScrollLeftChange=this.onScrollLeftChange.bind(this),this.session.on("changeScrollLeft",this.$onScrollLeftChange),this.selection=e.getSelection(),this.selection.on("changeCursor",this.$onCursorChange),this.$onSelectionChange=this.onSelectionChange.bind(this),this.selection.on("changeSelection",this.$onSelectionChange),this.onChangeMode(),this.$blockScrolling+=1,this.onCursorChange(),this.$blockScrolling-=1,this.onScrollTopChange(),this.onScrollLeftChange(),this.onSelectionChange(),this.onChangeFrontMarker(),this.onChangeBackMarker(),this.onChangeBreakpoint(),this.onChangeAnnotation(),this.session.getUseWrapMode()&&this.renderer.adjustWrapLimit(),this.renderer.updateFull()):(this.selection=null,this.renderer.setSession(e)),this._signal("changeSession",{session:e,oldSession:t}),this.curOp=null,t&&t._signal("changeEditor",{oldEditor:this}),e&&e._signal("changeEditor",{editor:this})},this.getSession=function(){return this.session},this.setValue=function(e,t){return this.session.doc.setValue(e),t?t==1?this.navigateFileEnd():t==-1&&this.navigateFileStart():this.selectAll(),e},this.getValue=function(){return this.session.getValue()},this.getSelection=function(){return this.selection},this.resize=function(e){this.renderer.onResize(e)},this.setTheme=function(e,t){this.renderer.setTheme(e,t)},this.getTheme=function(){return this.renderer.getTheme()},this.setStyle=function(e){this.renderer.setStyle(e)},this.unsetStyle=function(e){this.renderer.unsetStyle(e)},this.getFontSize=function(){return this.getOption("fontSize")||i.computedStyle(this.container,"fontSize")},this.setFontSize=function(e){this.setOption("fontSize",e)},this.$highlightBrackets=function(){this.session.$bracketHighlight&&(this.session.removeMarker(this.session.$bracketHighlight),this.session.$bracketHighlight=null);if(this.$highlightPending)return;var e=this;this.$highlightPending=!0,setTimeout(function(){e.$highlightPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=t.findMatchingBracket(e.getCursorPosition());if(n)var r=new p(n.row,n.column,n.row,n.column+1);else if(t.$mode.getMatching)var r=t.$mode.getMatching(e.session);r&&(t.$bracketHighlight=t.addMarker(r,"ace_bracket","text"))},50)},this.$highlightTags=function(){if(this.$highlightTagPending)return;var e=this;this.$highlightTagPending=!0,setTimeout(function(){e.$highlightTagPending=!1;var t=e.session;if(!t||!t.bgTokenizer)return;var n=e.getCursorPosition(),r=new y(e.session,n.row,n.column),i=r.getCurrentToken();if(!i||!/\b(?:tag-open|tag-name)/.test(i.type)){t.removeMarker(t.$tagHighlight),t.$tagHighlight=null;return}if(i.type.indexOf("tag-open")!=-1){i=r.stepForward();if(!i)return}var s=i.value,o=0,u=r.stepBackward();if(u.value=="<"){do u=i,i=r.stepForward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="=0)}else{do i=u,u=r.stepBackward(),i&&i.value===s&&i.type.indexOf("tag-name")!==-1&&(u.value==="<"?o++:u.value==="1)&&(t=!1)}if(e.$highlightLineMarker&&!t)e.removeMarker(e.$highlightLineMarker.id),e.$highlightLineMarker=null;else if(!e.$highlightLineMarker&&t){var n=new p(t.row,t.column,t.row,Infinity);n.id=e.addMarker(n,"ace_active-line","screenLine"),e.$highlightLineMarker=n}else t&&(e.$highlightLineMarker.start.row=t.row,e.$highlightLineMarker.end.row=t.row,e.$highlightLineMarker.start.column=t.column,e._signal("changeBackMarker"))},this.onSelectionChange=function(e){var t=this.session;t.$selectionMarker&&t.removeMarker(t.$selectionMarker),t.$selectionMarker=null;if(!this.selection.isEmpty()){var n=this.selection.getRange(),r=this.getSelectionStyle();t.$selectionMarker=t.addMarker(n,"ace_selection",r)}else this.$updateHighlightActiveLine();var i=this.$highlightSelectedWord&&this.$getSelectionHighLightRegexp();this.session.highlight(i),this._signal("changeSelection")},this.$getSelectionHighLightRegexp=function(){var e=this.session,t=this.getSelectionRange();if(t.isEmpty()||t.isMultiLine())return;var n=t.start.column-1,r=t.end.column+1,i=e.getLine(t.start.row),s=i.length,o=i.substring(Math.max(n,0),Math.min(r,s));if(n>=0&&/^[\w\d]/.test(o)||r<=s&&/[\w\d]$/.test(o))return;o=i.substring(t.start.column,t.end.column);if(!/^[\w\d]+$/.test(o))return;var u=this.$search.$assembleRegExp({wholeWord:!0,caseSensitive:!0,needle:o});return u},this.onChangeFrontMarker=function(){this.renderer.updateFrontMarkers()},this.onChangeBackMarker=function(){this.renderer.updateBackMarkers()},this.onChangeBreakpoint=function(){this.renderer.updateBreakpoints()},this.onChangeAnnotation=function(){this.renderer.setAnnotations(this.session.getAnnotations())},this.onChangeMode=function(e){this.renderer.updateText(),this._emit("changeMode",e)},this.onChangeWrapLimit=function(){this.renderer.updateFull()},this.onChangeWrapMode=function(){this.renderer.onResize(!0)},this.onChangeFold=function(){this.$updateHighlightActiveLine(),this.renderer.updateFull()},this.getSelectedText=function(){return this.session.getTextRange(this.getSelectionRange())},this.getCopyText=function(){var e=this.getSelectedText();return this._signal("copy",e),e},this.onCopy=function(){this.commands.exec("copy",this)},this.onCut=function(){this.commands.exec("cut",this)},this.onPaste=function(e,t){var n={text:e,event:t};this.commands.exec("paste",this,n)},this.$handlePaste=function(e){typeof e=="string"&&(e={text:e}),this._signal("paste",e);var t=e.text;if(!this.inMultiSelectMode||this.inVirtualSelectionMode)this.insert(t);else{var n=t.split(/\r\n|\r|\n/),r=this.selection.rangeList.ranges;if(n.length>r.length||n.length<2||!n[1])return this.commands.exec("insertstring",this,t);for(var i=r.length;i--;){var s=r[i];s.isEmpty()||this.session.remove(s),this.session.insert(s.start,n[i])}}},this.execCommand=function(e,t){return this.commands.exec(e,this,t)},this.insert=function(e,t){var n=this.session,r=n.getMode(),i=this.getCursorPosition();if(this.getBehavioursEnabled()&&!t){var s=r.transformAction(n.getState(i.row),"insertion",this,n,e);s&&(e!==s.text&&(this.session.mergeUndoDeltas=!1,this.$mergeNextCommand=!1),e=s.text)}e==" "&&(e=this.session.getTabString());if(!this.selection.isEmpty()){var o=this.getSelectionRange();i=this.session.remove(o),this.clearSelection()}else if(this.session.getOverwrite()){var o=new p.fromPoints(i,i);o.end.column+=e.length,this.session.remove(o)}if(e=="\n"||e=="\r\n"){var u=n.getLine(i.row);if(i.column>u.search(/\S|$/)){var a=u.substr(i.column).search(/\S|$/);n.doc.removeInLine(i.row,i.column,i.column+a)}}this.clearSelection();var f=i.column,l=n.getState(i.row),u=n.getLine(i.row),c=r.checkOutdent(l,u,e),h=n.insert(i,e);s&&s.selection&&(s.selection.length==2?this.selection.setSelectionRange(new p(i.row,f+s.selection[0],i.row,f+s.selection[1])):this.selection.setSelectionRange(new p(i.row+s.selection[0],s.selection[1],i.row+s.selection[2],s.selection[3])));if(n.getDocument().isNewLine(e)){var d=r.getNextLineIndent(l,u.slice(0,i.column),n.getTabString());n.insert({row:i.row+1,column:0},d)}c&&r.autoOutdent(l,n,i.row)},this.onTextInput=function(e){this.keyBinding.onTextInput(e)},this.onCommandKey=function(e,t,n){this.keyBinding.onCommandKey(e,t,n)},this.setOverwrite=function(e){this.session.setOverwrite(e)},this.getOverwrite=function(){return this.session.getOverwrite()},this.toggleOverwrite=function(){this.session.toggleOverwrite()},this.setScrollSpeed=function(e){this.setOption("scrollSpeed",e)},this.getScrollSpeed=function(){return this.getOption("scrollSpeed")},this.setDragDelay=function(e){this.setOption("dragDelay",e)},this.getDragDelay=function(){return this.getOption("dragDelay")},this.setSelectionStyle=function(e){this.setOption("selectionStyle",e)},this.getSelectionStyle=function(){return this.getOption("selectionStyle")},this.setHighlightActiveLine=function(e){this.setOption("highlightActiveLine",e)},this.getHighlightActiveLine=function(){return this.getOption("highlightActiveLine")},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.setHighlightSelectedWord=function(e){this.setOption("highlightSelectedWord",e)},this.getHighlightSelectedWord=function(){return this.$highlightSelectedWord},this.setAnimatedScroll=function(e){this.renderer.setAnimatedScroll(e)},this.getAnimatedScroll=function(){return this.renderer.getAnimatedScroll()},this.setShowInvisibles=function(e){this.renderer.setShowInvisibles(e)},this.getShowInvisibles=function(){return this.renderer.getShowInvisibles()},this.setDisplayIndentGuides=function(e){this.renderer.setDisplayIndentGuides(e)},this.getDisplayIndentGuides=function(){return this.renderer.getDisplayIndentGuides()},this.setShowPrintMargin=function(e){this.renderer.setShowPrintMargin(e)},this.getShowPrintMargin=function(){return this.renderer.getShowPrintMargin()},this.setPrintMarginColumn=function(e){this.renderer.setPrintMarginColumn(e)},this.getPrintMarginColumn=function(){return this.renderer.getPrintMarginColumn()},this.setReadOnly=function(e){this.setOption("readOnly",e)},this.getReadOnly=function(){return this.getOption("readOnly")},this.setBehavioursEnabled=function(e){this.setOption("behavioursEnabled",e)},this.getBehavioursEnabled=function(){return this.getOption("behavioursEnabled")},this.setWrapBehavioursEnabled=function(e){this.setOption("wrapBehavioursEnabled",e)},this.getWrapBehavioursEnabled=function(){return this.getOption("wrapBehavioursEnabled")},this.setShowFoldWidgets=function(e){this.setOption("showFoldWidgets",e)},this.getShowFoldWidgets=function(){return this.getOption("showFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.remove=function(e){this.selection.isEmpty()&&(e=="left"?this.selection.selectLeft():this.selection.selectRight());var t=this.getSelectionRange();if(this.getBehavioursEnabled()){var n=this.session,r=n.getState(t.start.row),i=n.getMode().transformAction(r,"deletion",this,n,t);if(t.end.column===0){var s=n.getTextRange(t);if(s[s.length-1]=="\n"){var o=n.getLine(t.end.row);/^\s+$/.test(o)&&(t.end.column=o.length)}}i&&(t=i)}this.session.remove(t),this.clearSelection()},this.removeWordRight=function(){this.selection.isEmpty()&&this.selection.selectWordRight(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeWordLeft=function(){this.selection.isEmpty()&&this.selection.selectWordLeft(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineStart=function(){this.selection.isEmpty()&&this.selection.selectLineStart(),this.session.remove(this.getSelectionRange()),this.clearSelection()},this.removeToLineEnd=function(){this.selection.isEmpty()&&this.selection.selectLineEnd();var e=this.getSelectionRange();e.start.column==e.end.column&&e.start.row==e.end.row&&(e.end.column=0,e.end.row++),this.session.remove(e),this.clearSelection()},this.splitLine=function(){this.selection.isEmpty()||(this.session.remove(this.getSelectionRange()),this.clearSelection());var e=this.getCursorPosition();this.insert("\n"),this.moveCursorToPosition(e)},this.transposeLetters=function(){if(!this.selection.isEmpty())return;var e=this.getCursorPosition(),t=e.column;if(t===0)return;var n=this.session.getLine(e.row),r,i;tt.toLowerCase()?1:0});var r=new p(0,0,0,0);for(var i=e.first;i<=e.last;i++){var s=t.getLine(i);r.start.row=i,r.end.row=i,r.end.column=s.length,t.replace(r,n[i-e.first])}},this.toggleCommentLines=function(){var e=this.session.getState(this.getCursorPosition().row),t=this.$getSelectedRows();this.session.getMode().toggleCommentLines(e,this.session,t.first,t.last)},this.toggleBlockComment=function(){var e=this.getCursorPosition(),t=this.session.getState(e.row),n=this.getSelectionRange();this.session.getMode().toggleBlockComment(t,this.session,n,e)},this.getNumberAt=function(e,t){var n=/[\-]?[0-9]+(?:\.[0-9]+)?/g;n.lastIndex=0;var r=this.session.getLine(e);while(n.lastIndex=t){var s={value:i[0],start:i.index,end:i.index+i[0].length};return s}}return null},this.modifyNumber=function(e){var t=this.selection.getCursor().row,n=this.selection.getCursor().column,r=new p(t,n-1,t,n),i=this.session.getTextRange(r);if(!isNaN(parseFloat(i))&&isFinite(i)){var s=this.getNumberAt(t,n);if(s){var o=s.value.indexOf(".")>=0?s.start+s.value.indexOf(".")+1:s.end,u=s.start+s.value.length-o,a=parseFloat(s.value);a*=Math.pow(10,u),o!==s.end&&np+1)break;p=d.last}l--,u=this.session.$moveLines(h,p,t?0:e),t&&e==-1&&(c=l+1);while(c<=l)o[c].moveBy(u,0),c++;t||(u=0),a+=u}i.fromOrientedRange(i.ranges[0]),i.rangeList.attach(this.session),this.inVirtualSelectionMode=!1}},this.$getSelectedRows=function(e){return e=(e||this.getSelectionRange()).collapseRows(),{first:this.session.getRowFoldStart(e.start.row),last:this.session.getRowFoldEnd(e.end.row)}},this.onCompositionStart=function(e){this.renderer.showComposition(this.getCursorPosition())},this.onCompositionUpdate=function(e){this.renderer.setCompositionText(e)},this.onCompositionEnd=function(){this.renderer.hideComposition()},this.getFirstVisibleRow=function(){return this.renderer.getFirstVisibleRow()},this.getLastVisibleRow=function(){return this.renderer.getLastVisibleRow()},this.isRowVisible=function(e){return e>=this.getFirstVisibleRow()&&e<=this.getLastVisibleRow()},this.isRowFullyVisible=function(e){return e>=this.renderer.getFirstFullyVisibleRow()&&e<=this.renderer.getLastFullyVisibleRow()},this.$getVisibleRowCount=function(){return this.renderer.getScrollBottomRow()-this.renderer.getScrollTopRow()+1},this.$moveByPage=function(e,t){var n=this.renderer,r=this.renderer.layerConfig,i=e*Math.floor(r.height/r.lineHeight);this.$blockScrolling++,t===!0?this.selection.$moveSelection(function(){this.moveCursorBy(i,0)}):t===!1&&(this.selection.moveCursorBy(i,0),this.selection.clearSelection()),this.$blockScrolling--;var s=n.scrollTop;n.scrollBy(0,i*r.lineHeight),t!=null&&n.scrollCursorIntoView(null,.5),n.animateScrolling(s)},this.selectPageDown=function(){this.$moveByPage(1,!0)},this.selectPageUp=function(){this.$moveByPage(-1,!0)},this.gotoPageDown=function(){this.$moveByPage(1,!1)},this.gotoPageUp=function(){this.$moveByPage(-1,!1)},this.scrollPageDown=function(){this.$moveByPage(1)},this.scrollPageUp=function(){this.$moveByPage(-1)},this.scrollToRow=function(e){this.renderer.scrollToRow(e)},this.scrollToLine=function(e,t,n,r){this.renderer.scrollToLine(e,t,n,r)},this.centerSelection=function(){var e=this.getSelectionRange(),t={row:Math.floor(e.start.row+(e.end.row-e.start.row)/2),column:Math.floor(e.start.column+(e.end.column-e.start.column)/2)};this.renderer.alignCursor(t,.5)},this.getCursorPosition=function(){return this.selection.getCursor()},this.getCursorPositionScreen=function(){return this.session.documentToScreenPosition(this.getCursorPosition())},this.getSelectionRange=function(){return this.selection.getRange()},this.selectAll=function(){this.$blockScrolling+=1,this.selection.selectAll(),this.$blockScrolling-=1},this.clearSelection=function(){this.selection.clearSelection()},this.moveCursorTo=function(e,t){this.selection.moveCursorTo(e,t)},this.moveCursorToPosition=function(e){this.selection.moveCursorToPosition(e)},this.jumpToMatching=function(e,t){var n=this.getCursorPosition(),r=new y(this.session,n.row,n.column),i=r.getCurrentToken(),s=i||r.stepForward();if(!s)return;var o,u=!1,a={},f=n.column-s.start,l,c={")":"(","(":"(","]":"[","[":"[","{":"{","}":"{"};do{if(s.value.match(/[{}()\[\]]/g))for(;f=0;--s)this.$tryReplace(n[s],e)&&r++;return this.selection.setSelectionRange(i),this.$blockScrolling-=1,r},this.$tryReplace=function(e,t){var n=this.session.getTextRange(e);return t=this.$search.replace(n,t),t!==null?(e.end=this.session.replace(e,t),e):null},this.getLastSearchOptions=function(){return this.$search.getOptions()},this.find=function(e,t,n){t||(t={}),typeof e=="string"||e instanceof RegExp?t.needle=e:typeof e=="object"&&r.mixin(t,e);var i=this.selection.getRange();t.needle==null&&(e=this.session.getTextRange(i)||this.$search.$options.needle,e||(i=this.session.getWordRange(i.start.row,i.start.column),e=this.session.getTextRange(i)),this.$search.set({needle:e})),this.$search.set(t),t.start||this.$search.set({start:i});var s=this.$search.find(this.session);if(t.preventScroll)return s;if(s)return this.revealRange(s,n),s;t.backwards?i.start=i.end:i.end=i.start,this.selection.setRange(i)},this.findNext=function(e,t){this.find({skipCurrent:!0,backwards:!1},e,t)},this.findPrevious=function(e,t){this.find(e,{skipCurrent:!0,backwards:!0},t)},this.revealRange=function(e,t){this.$blockScrolling+=1,this.session.unfold(e),this.selection.setSelectionRange(e),this.$blockScrolling-=1;var n=this.renderer.scrollTop;this.renderer.scrollSelectionIntoView(e.start,e.end,.5),t!==!1&&this.renderer.animateScrolling(n)},this.undo=function(){this.$blockScrolling++,this.session.getUndoManager().undo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.redo=function(){this.$blockScrolling++,this.session.getUndoManager().redo(),this.$blockScrolling--,this.renderer.scrollCursorIntoView(null,.5)},this.destroy=function(){this.renderer.destroy(),this._signal("destroy",this),this.session&&this.session.destroy()},this.setAutoScrollEditorIntoView=function(e){if(!e)return;var t,n=this,r=!1;this.$scrollAnchor||(this.$scrollAnchor=document.createElement("div"));var i=this.$scrollAnchor;i.style.cssText="position:absolute",this.container.insertBefore(i,this.container.firstChild);var s=this.on("changeSelection",function(){r=!0}),o=this.renderer.on("beforeRender",function(){r&&(t=n.renderer.container.getBoundingClientRect())}),u=this.renderer.on("afterRender",function(){if(r&&t&&(n.isFocused()||n.searchBox&&n.searchBox.isFocused())){var e=n.renderer,s=e.$cursorLayer.$pixelPos,o=e.layerConfig,u=s.top-o.offset;s.top>=0&&u+t.top<0?r=!0:s.topwindow.innerHeight?r=!1:r=null,r!=null&&(i.style.top=u+"px",i.style.left=s.left+"px",i.style.height=o.lineHeight+"px",i.scrollIntoView(r)),r=t=null}});this.setAutoScrollEditorIntoView=function(e){if(e)return;delete this.setAutoScrollEditorIntoView,this.off("changeSelection",s),this.renderer.off("afterRender",u),this.renderer.off("beforeRender",o)}},this.$resetCursorStyle=function(){var e=this.$cursorStyle||"ace",t=this.renderer.$cursorLayer;if(!t)return;t.setSmoothBlinking(/smooth/.test(e)),t.isBlinking=!this.$readOnly&&e!="wide",i.setCssClass(t.element,"ace_slim-cursors",/slim/.test(e))}}).call(b.prototype),g.defineOptions(b.prototype,"editor",{selectionStyle:{set:function(e){this.onSelectionChange(),this._signal("changeSelectionStyle",{data:e})},initialValue:"line"},highlightActiveLine:{set:function(){this.$updateHighlightActiveLine()},initialValue:!0},highlightSelectedWord:{set:function(e){this.$onSelectionChange()},initialValue:!0},readOnly:{set:function(e){this.$resetCursorStyle()},initialValue:!1},cursorStyle:{set:function(e){this.$resetCursorStyle()},values:["ace","slim","smooth","wide"],initialValue:"ace"},mergeUndoDeltas:{values:[!1,!0,"always"],initialValue:!0},behavioursEnabled:{initialValue:!0},wrapBehavioursEnabled:{initialValue:!0},autoScrollEditorIntoView:{set:function(e){this.setAutoScrollEditorIntoView(e)}},keyboardHandler:{set:function(e){this.setKeyboardHandler(e)},get:function(){return this.keybindingId},handlesSet:!0},hScrollBarAlwaysVisible:"renderer",vScrollBarAlwaysVisible:"renderer",highlightGutterLine:"renderer",animatedScroll:"renderer",showInvisibles:"renderer",showPrintMargin:"renderer",printMarginColumn:"renderer",printMargin:"renderer",fadeFoldWidgets:"renderer",showFoldWidgets:"renderer",showLineNumbers:"renderer",showGutter:"renderer",displayIndentGuides:"renderer",fontSize:"renderer",fontFamily:"renderer",maxLines:"renderer",minLines:"renderer",scrollPastEnd:"renderer",fixedWidthGutter:"renderer",theme:"renderer",scrollSpeed:"$mouseHandler",dragDelay:"$mouseHandler",dragEnabled:"$mouseHandler",focusTimout:"$mouseHandler",tooltipFollowsMouse:"$mouseHandler",firstLineNumber:"session",overwrite:"session",newLineMode:"session",useWorker:"session",useSoftTabs:"session",tabSize:"session",wrap:"session",indentedSoftWrap:"session",foldStyle:"session",mode:"session"}),t.Editor=b}),ace.define("ace/undomanager",["require","exports","module"],function(e,t,n){"use strict";var r=function(){this.reset()};(function(){function e(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines.length==1?null:e.lines,text:e.lines.length==1?e.lines[0]:null}}function t(e){return{action:e.action,start:e.start,end:e.end,lines:e.lines||[e.text]}}function n(e,t){var n=new Array(e.length);for(var r=0;r0},this.hasRedo=function(){return this.$redoStack.length>0},this.markClean=function(){this.dirtyCounter=0},this.isClean=function(){return this.dirtyCounter===0},this.$serializeDeltas=function(t){return n(t,e)},this.$deserializeDeltas=function(e){return n(e,t)}}).call(r.prototype),t.UndoManager=r}),ace.define("ace/layer/gutter",["require","exports","module","ace/lib/dom","ace/lib/oop","ace/lib/lang","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/dom"),i=e("../lib/oop"),s=e("../lib/lang"),o=e("../lib/event_emitter").EventEmitter,u=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_gutter-layer",e.appendChild(this.element),this.setShowFoldWidgets(this.$showFoldWidgets),this.gutterWidth=0,this.$annotations=[],this.$updateAnnotations=this.$updateAnnotations.bind(this),this.$cells=[]};(function(){i.implement(this,o),this.setSession=function(e){this.session&&this.session.removeEventListener("change",this.$updateAnnotations),this.session=e,e&&e.on("change",this.$updateAnnotations)},this.addGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.addGutterDecoration"),this.session.addGutterDecoration(e,t)},this.removeGutterDecoration=function(e,t){window.console&&console.warn&&console.warn("deprecated use session.removeGutterDecoration"),this.session.removeGutterDecoration(e,t)},this.setAnnotations=function(e){this.$annotations=[];for(var t=0;to&&(v=s.end.row+1,s=t.getNextFoldLine(v,s),o=s?s.start.row:Infinity);if(v>i){while(this.$cells.length>d+1)p=this.$cells.pop(),this.element.removeChild(p.element);break}p=this.$cells[++d],p||(p={element:null,textNode:null,foldWidget:null},p.element=r.createElement("div"),p.textNode=document.createTextNode(""),p.element.appendChild(p.textNode),this.element.appendChild(p.element),this.$cells[d]=p);var m="ace_gutter-cell ";a[v]&&(m+=a[v]),f[v]&&(m+=f[v]),this.$annotations[v]&&(m+=this.$annotations[v].className),p.element.className!=m&&(p.element.className=m);var g=t.getRowLength(v)*e.lineHeight+"px";g!=p.element.style.height&&(p.element.style.height=g);if(u){var y=u[v];y==null&&(y=u[v]=t.getFoldWidget(v))}if(y){p.foldWidget||(p.foldWidget=r.createElement("span"),p.element.appendChild(p.foldWidget));var m="ace_fold-widget ace_"+y;y=="start"&&v==o&&vn.right-t.right)return"foldWidgets"}}).call(u.prototype),t.Gutter=u}),ace.define("ace/layer/marker",["require","exports","module","ace/range","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../range").Range,i=e("../lib/dom"),s=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_marker-layer",e.appendChild(this.element)};(function(){function e(e,t,n,r){return(e?1:0)|(t?2:0)|(n?4:0)|(r?8:0)}this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setMarkers=function(e){this.markers=e},this.update=function(e){var e=e||this.config;if(!e)return;this.config=e;var t=[];for(var n in this.markers){var r=this.markers[n];if(!r.range){r.update(t,this,this.session,e);continue}var i=r.range.clipRows(e.firstRow,e.lastRow);if(i.isEmpty())continue;i=i.toScreenRange(this.session);if(r.renderer){var s=this.$getTop(i.start.row,e),o=this.$padding+i.start.column*e.characterWidth;r.renderer(t,i,o,s,e)}else r.type=="fullLine"?this.drawFullLineMarker(t,i,r.clazz,e):r.type=="screenLine"?this.drawScreenLineMarker(t,i,r.clazz,e):i.isMultiLine()?r.type=="text"?this.drawTextMarker(t,i,r.clazz,e):this.drawMultiLineMarker(t,i,r.clazz,e):this.drawSingleLineMarker(t,i,r.clazz+" ace_start"+" ace_br15",e)}this.element.innerHTML=t.join("")},this.$getTop=function(e,t){return(e-t.firstRowScreen)*t.lineHeight},this.drawTextMarker=function(t,n,i,s,o){var u=this.session,a=n.start.row,f=n.end.row,l=a,c=0,h=0,p=u.getScreenLastRowColumn(l),d=new r(l,n.start.column,l,h);for(;l<=f;l++)d.start.row=d.end.row=l,d.start.column=l==a?n.start.column:u.getRowWrapIndent(l),d.end.column=p,c=h,h=p,p=l+1p,l==f),s,l==f?0:1,o)},this.drawMultiLineMarker=function(e,t,n,r,i){var s=this.$padding,o=r.lineHeight,u=this.$getTop(t.start.row,r),a=s+t.start.column*r.characterWidth;i=i||"",e.push("
      "),u=this.$getTop(t.end.row,r);var f=t.end.column*r.characterWidth;e.push("
      "),o=(t.end.row-t.start.row-1)*r.lineHeight;if(o<=0)return;u=this.$getTop(t.start.row+1,r);var l=(t.start.column?1:0)|(t.end.column?0:8);e.push("
      ")},this.drawSingleLineMarker=function(e,t,n,r,i,s){var o=r.lineHeight,u=(t.end.column+(i||0)-t.start.column)*r.characterWidth,a=this.$getTop(t.start.row,r),f=this.$padding+t.start.column*r.characterWidth;e.push("
      ")},this.drawFullLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;t.start.row!=t.end.row&&(o+=this.$getTop(t.end.row,r)-s),e.push("
      ")},this.drawScreenLineMarker=function(e,t,n,r,i){var s=this.$getTop(t.start.row,r),o=r.lineHeight;e.push("
      ")}}).call(s.prototype),t.Marker=s}),ace.define("ace/layer/text",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=function(e){this.element=i.createElement("div"),this.element.className="ace_layer ace_text-layer",e.appendChild(this.element),this.$updateEolChar=this.$updateEolChar.bind(this)};(function(){r.implement(this,u),this.EOF_CHAR="\u00b6",this.EOL_CHAR_LF="\u00ac",this.EOL_CHAR_CRLF="\u00a4",this.EOL_CHAR=this.EOL_CHAR_LF,this.TAB_CHAR="\u2014",this.SPACE_CHAR="\u00b7",this.$padding=0,this.$updateEolChar=function(){var e=this.session.doc.getNewLineCharacter()=="\n"?this.EOL_CHAR_LF:this.EOL_CHAR_CRLF;if(this.EOL_CHAR!=e)return this.EOL_CHAR=e,!0},this.setPadding=function(e){this.$padding=e,this.element.style.padding="0 "+e+"px"},this.getLineHeight=function(){return this.$fontMetrics.$characterSize.height||0},this.getCharacterWidth=function(){return this.$fontMetrics.$characterSize.width||0},this.$setFontMetrics=function(e){this.$fontMetrics=e,this.$fontMetrics.on("changeCharacterSize",function(e){this._signal("changeCharacterSize",e)}.bind(this)),this.$pollSizeChanges()},this.checkForSizeChanges=function(){this.$fontMetrics.checkForSizeChanges()},this.$pollSizeChanges=function(){return this.$pollSizeChangesTimer=this.$fontMetrics.$pollSizeChanges()},this.setSession=function(e){this.session=e,e&&this.$computeTabString()},this.showInvisibles=!1,this.setShowInvisibles=function(e){return this.showInvisibles==e?!1:(this.showInvisibles=e,this.$computeTabString(),!0)},this.displayIndentGuides=!0,this.setDisplayIndentGuides=function(e){return this.displayIndentGuides==e?!1:(this.displayIndentGuides=e,this.$computeTabString(),!0)},this.$tabStrings=[],this.onChangeTabSize=this.$computeTabString=function(){var e=this.session.getTabSize();this.tabSize=e;var t=this.$tabStrings=[0];for(var n=1;n"+s.stringRepeat(this.TAB_CHAR,n)+""):t.push(s.stringRepeat(" ",n));if(this.displayIndentGuides){this.$indentGuideRe=/\s\S| \t|\t |\s$/;var r="ace_indent-guide",i="",o="";if(this.showInvisibles){r+=" ace_invisible",i=" ace_invisible_space",o=" ace_invisible_tab";var u=s.stringRepeat(this.SPACE_CHAR,this.tabSize),a=s.stringRepeat(this.TAB_CHAR,this.tabSize)}else var u=s.stringRepeat(" ",this.tabSize),a=u;this.$tabStrings[" "]=""+u+"",this.$tabStrings[" "]=""+a+""}},this.updateLines=function(e,t,n){(this.config.lastRow!=e.lastRow||this.config.firstRow!=e.firstRow)&&this.scrollLines(e),this.config=e;var r=Math.max(t,e.firstRow),i=Math.min(n,e.lastRow),s=this.element.childNodes,o=0;for(var u=e.firstRow;uf&&(u=a.end.row+1,a=this.session.getNextFoldLine(u,a),f=a?a.start.row:Infinity);if(u>i)break;var l=s[o++];if(l){var c=[];this.$renderLine(c,u,!this.$useLineGroups(),u==f?a:!1),l.style.height=e.lineHeight*this.session.getRowLength(u)+"px",l.innerHTML=c.join("")}u++}},this.scrollLines=function(e){var t=this.config;this.config=e;if(!t||t.lastRow0;r--)n.removeChild(n.firstChild);if(t.lastRow>e.lastRow)for(var r=this.session.getFoldedRowCount(e.lastRow+1,t.lastRow);r>0;r--)n.removeChild(n.lastChild);if(e.firstRowt.lastRow){var i=this.$renderLinesFragment(e,t.lastRow+1,e.lastRow);n.appendChild(i)}},this.$renderLinesFragment=function(e,t,n){var r=this.element.ownerDocument.createDocumentFragment(),s=t,o=this.session.getNextFoldLine(s),u=o?o.start.row:Infinity;for(;;){s>u&&(s=o.end.row+1,o=this.session.getNextFoldLine(s,o),u=o?o.start.row:Infinity);if(s>n)break;var a=i.createElement("div"),f=[];this.$renderLine(f,s,!1,s==u?o:!1),a.innerHTML=f.join("");if(this.$useLineGroups())a.className="ace_line_group",r.appendChild(a),a.style.height=e.lineHeight*this.session.getRowLength(s)+"px";else while(a.firstChild)r.appendChild(a.firstChild);s++}return r},this.update=function(e){this.config=e;var t=[],n=e.firstRow,r=e.lastRow,i=n,s=this.session.getNextFoldLine(i),o=s?s.start.row:Infinity;for(;;){i>o&&(i=s.end.row+1,s=this.session.getNextFoldLine(i,s),o=s?s.start.row:Infinity);if(i>r)break;this.$useLineGroups()&&t.push("
      "),this.$renderLine(t,i,!1,i==o?s:!1),this.$useLineGroups()&&t.push("
      "),i++}this.element.innerHTML=t.join("")},this.$textToken={text:!0,rparen:!0,lparen:!0},this.$renderToken=function(e,t,n,r){var i=this,o=/\t|&|<|>|( +)|([\x00-\x1f\x80-\xa0\xad\u1680\u180E\u2000-\u200f\u2028\u2029\u202F\u205F\u3000\uFEFF\uFFF9-\uFFFC])|[\u1100-\u115F\u11A3-\u11A7\u11FA-\u11FF\u2329-\u232A\u2E80-\u2E99\u2E9B-\u2EF3\u2F00-\u2FD5\u2FF0-\u2FFB\u3000-\u303E\u3041-\u3096\u3099-\u30FF\u3105-\u312D\u3131-\u318E\u3190-\u31BA\u31C0-\u31E3\u31F0-\u321E\u3220-\u3247\u3250-\u32FE\u3300-\u4DBF\u4E00-\uA48C\uA490-\uA4C6\uA960-\uA97C\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFAFF\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE66\uFE68-\uFE6B\uFF01-\uFF60\uFFE0-\uFFE6]/g,u=function(e,n,r,o,u){if(n)return i.showInvisibles?""+s.stringRepeat(i.SPACE_CHAR,e.length)+"":e;if(e=="&")return"&";if(e=="<")return"<";if(e==">")return">";if(e==" "){var a=i.session.getScreenTabSize(t+o);return t+=a-1,i.$tabStrings[a]}if(e=="\u3000"){var f=i.showInvisibles?"ace_cjk ace_invisible ace_invisible_space":"ace_cjk",l=i.showInvisibles?i.SPACE_CHAR:"";return t+=1,""+l+""}return r?""+i.SPACE_CHAR+"":(t+=1,""+e+"")},a=r.replace(o,u);if(!this.$textToken[n.type]){var f="ace_"+n.type.replace(/\./g," ace_"),l="";n.type=="fold"&&(l=" style='width:"+n.value.length*this.config.characterWidth+"px;' "),e.push("",a,"")}else e.push(a);return t+r.length},this.renderIndentGuide=function(e,t,n){var r=t.search(this.$indentGuideRe);return r<=0||r>=n?t:t[0]==" "?(r-=r%this.tabSize,e.push(s.stringRepeat(this.$tabStrings[" "],r/this.tabSize)),t.substr(r)):t[0]==" "?(e.push(s.stringRepeat(this.$tabStrings[" "],r)),t.substr(r)):t},this.$renderWrappedLine=function(e,t,n,r){var i=0,o=0,u=n[0],a=0;for(var f=0;f=u)a=this.$renderToken(e,a,l,c.substring(0,u-i)),c=c.substring(u-i),i=u,r||e.push("
      ","
      "),e.push(s.stringRepeat("\u00a0",n.indent)),o++,a=0,u=n[o]||Number.MAX_VALUE;c.length!=0&&(i+=c.length,a=this.$renderToken(e,a,l,c))}}},this.$renderSimpleLine=function(e,t){var n=0,r=t[0],i=r.value;this.displayIndentGuides&&(i=this.renderIndentGuide(e,i)),i&&(n=this.$renderToken(e,n,r,i));for(var s=1;s");if(i.length){var s=this.session.getRowSplitData(t);s&&s.length?this.$renderWrappedLine(e,i,s,n):this.$renderSimpleLine(e,i)}this.showInvisibles&&(r&&(t=r.end.row),e.push("",t==this.session.getLength()-1?this.EOF_CHAR:this.EOL_CHAR,"")),n||e.push("
      ")},this.$getFoldLineTokens=function(e,t){function i(e,t,n){var i=0,s=0;while(s+e[i].value.lengthn-t&&(o=o.substring(0,n-t)),r.push({type:e[i].type,value:o}),s=t+o.length,i+=1}while(sn?r.push({type:e[i].type,value:o.substring(0,n-s)}):r.push(e[i]),s+=o.length,i+=1}}var n=this.session,r=[],s=n.getTokens(e);return t.walk(function(e,t,o,u,a){e!=null?r.push({type:"fold",value:e}):(a&&(s=n.getTokens(t)),s.length&&i(s,u,o))},t.end.row,this.session.getLine(t.end.row).length),r},this.$useLineGroups=function(){return this.session.getUseWrapMode()},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.$measureNode&&this.$measureNode.parentNode.removeChild(this.$measureNode),delete this.$measureNode}}).call(a.prototype),t.Text=a}),ace.define("ace/layer/cursor",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";var r=e("../lib/dom"),i,s=function(e){this.element=r.createElement("div"),this.element.className="ace_layer ace_cursor-layer",e.appendChild(this.element),i===undefined&&(i=!("opacity"in this.element.style)),this.isVisible=!1,this.isBlinking=!0,this.blinkInterval=1e3,this.smoothBlinking=!1,this.cursors=[],this.cursor=this.addCursor(),r.addCssClass(this.element,"ace_hidden-cursors"),this.$updateCursors=(i?this.$updateVisibility:this.$updateOpacity).bind(this)};(function(){this.$updateVisibility=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.visibility=e?"":"hidden"},this.$updateOpacity=function(e){var t=this.cursors;for(var n=t.length;n--;)t[n].style.opacity=e?"":"0"},this.$padding=0,this.setPadding=function(e){this.$padding=e},this.setSession=function(e){this.session=e},this.setBlinking=function(e){e!=this.isBlinking&&(this.isBlinking=e,this.restartTimer())},this.setBlinkInterval=function(e){e!=this.blinkInterval&&(this.blinkInterval=e,this.restartTimer())},this.setSmoothBlinking=function(e){e!=this.smoothBlinking&&!i&&(this.smoothBlinking=e,r.setCssClass(this.element,"ace_smooth-blinking",e),this.$updateCursors(!0),this.$updateCursors=this.$updateOpacity.bind(this),this.restartTimer())},this.addCursor=function(){var e=r.createElement("div");return e.className="ace_cursor",this.element.appendChild(e),this.cursors.push(e),e},this.removeCursor=function(){if(this.cursors.length>1){var e=this.cursors.pop();return e.parentNode.removeChild(e),e}},this.hideCursor=function(){this.isVisible=!1,r.addCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.showCursor=function(){this.isVisible=!0,r.removeCssClass(this.element,"ace_hidden-cursors"),this.restartTimer()},this.restartTimer=function(){var e=this.$updateCursors;clearInterval(this.intervalId),clearTimeout(this.timeoutId),this.smoothBlinking&&r.removeCssClass(this.element,"ace_smooth-blinking"),e(!0);if(!this.isBlinking||!this.blinkInterval||!this.isVisible)return;this.smoothBlinking&&setTimeout(function(){r.addCssClass(this.element,"ace_smooth-blinking")}.bind(this));var t=function(){this.timeoutId=setTimeout(function(){e(!1)},.6*this.blinkInterval)}.bind(this);this.intervalId=setInterval(function(){e(!0),t()},this.blinkInterval),t()},this.getPixelPosition=function(e,t){if(!this.config||!this.session)return{left:0,top:0};e||(e=this.session.selection.getCursor());var n=this.session.documentToScreenPosition(e),r=this.$padding+n.column*this.config.characterWidth,i=(n.row-(t?this.config.firstRowScreen:0))*this.config.lineHeight;return{left:r,top:i}},this.update=function(e){this.config=e;var t=this.session.$selectionMarkers,n=0,r=0;if(t===undefined||t.length===0)t=[{cursor:null}];for(var n=0,i=t.length;ne.height+e.offset||s.top<0)&&n>1)continue;var o=(this.cursors[r++]||this.addCursor()).style;this.drawCursor?this.drawCursor(o,s,e,t[n],this.session):(o.left=s.left+"px",o.top=s.top+"px",o.width=e.characterWidth+"px",o.height=e.lineHeight+"px")}while(this.cursors.length>r)this.removeCursor();var u=this.session.getOverwrite();this.$setOverwrite(u),this.$pixelPos=s,this.restartTimer()},this.drawCursor=null,this.$setOverwrite=function(e){e!=this.overwrite&&(this.overwrite=e,e?r.addCssClass(this.element,"ace_overwrite-cursors"):r.removeCssClass(this.element,"ace_overwrite-cursors"))},this.destroy=function(){clearInterval(this.intervalId),clearTimeout(this.timeoutId)}}).call(s.prototype),t.Cursor=s}),ace.define("ace/scrollbar",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/event","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./lib/event"),o=e("./lib/event_emitter").EventEmitter,u=function(e){this.element=i.createElement("div"),this.element.className="ace_scrollbar ace_scrollbar"+this.classSuffix,this.inner=i.createElement("div"),this.inner.className="ace_scrollbar-inner",this.element.appendChild(this.inner),e.appendChild(this.element),this.setVisible(!1),this.skipEvent=!1,s.addListener(this.element,"scroll",this.onScroll.bind(this)),s.addListener(this.element,"mousedown",s.preventDefault)};(function(){r.implement(this,o),this.setVisible=function(e){this.element.style.display=e?"":"none",this.isVisible=e}}).call(u.prototype);var a=function(e,t){u.call(this,e),this.scrollTop=0,t.$scrollbarWidth=this.width=i.scrollbarWidth(e.ownerDocument),this.inner.style.width=this.element.style.width=(this.width||15)+5+"px"};r.inherits(a,u),function(){this.classSuffix="-v",this.onScroll=function(){this.skipEvent||(this.scrollTop=this.element.scrollTop,this._emit("scroll",{data:this.scrollTop})),this.skipEvent=!1},this.getWidth=function(){return this.isVisible?this.width:0},this.setHeight=function(e){this.element.style.height=e+"px"},this.setInnerHeight=function(e){this.inner.style.height=e+"px"},this.setScrollHeight=function(e){this.inner.style.height=e+"px"},this.setScrollTop=function(e){this.scrollTop!=e&&(this.skipEvent=!0,this.scrollTop=this.element.scrollTop=e)}}.call(a.prototype);var f=function(e,t){u.call(this,e),this.scrollLeft=0,this.height=t.$scrollbarWidth,this.inner.style.height=this.element.style.height=(this.height||15)+5+"px"};r.inherits(f,u),function(){this.classSuffix="-h",this.onScroll=function(){this.skipEvent||(this.scrollLeft=this.element.scrollLeft,this._emit("scroll",{data:this.scrollLeft})),this.skipEvent=!1},this.getHeight=function(){return this.isVisible?this.height:0},this.setWidth=function(e){this.element.style.width=e+"px"},this.setInnerWidth=function(e){this.inner.style.width=e+"px"},this.setScrollWidth=function(e){this.inner.style.width=e+"px"},this.setScrollLeft=function(e){this.scrollLeft!=e&&(this.skipEvent=!0,this.scrollLeft=this.element.scrollLeft=e)}}.call(f.prototype),t.ScrollBar=a,t.ScrollBarV=a,t.ScrollBarH=f,t.VScrollBar=a,t.HScrollBar=f}),ace.define("ace/renderloop",["require","exports","module","ace/lib/event"],function(e,t,n){"use strict";var r=e("./lib/event"),i=function(e,t){this.onRender=e,this.pending=!1,this.changes=0,this.window=t||window};(function(){this.schedule=function(e){this.changes=this.changes|e;if(!this.pending&&this.changes){this.pending=!0;var t=this;r.nextFrame(function(){t.pending=!1;var e;while(e=t.changes)t.changes=0,t.onRender(e)},this.window)}}}).call(i.prototype),t.RenderLoop=i}),ace.define("ace/layer/font_metrics",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/lib/lang","ace/lib/useragent","ace/lib/event_emitter"],function(e,t,n){var r=e("../lib/oop"),i=e("../lib/dom"),s=e("../lib/lang"),o=e("../lib/useragent"),u=e("../lib/event_emitter").EventEmitter,a=0,f=t.FontMetrics=function(e){this.el=i.createElement("div"),this.$setMeasureNodeStyles(this.el.style,!0),this.$main=i.createElement("div"),this.$setMeasureNodeStyles(this.$main.style),this.$measureNode=i.createElement("div"),this.$setMeasureNodeStyles(this.$measureNode.style),this.el.appendChild(this.$main),this.el.appendChild(this.$measureNode),e.appendChild(this.el),a||this.$testFractionalRect(),this.$measureNode.innerHTML=s.stringRepeat("X",a),this.$characterSize={width:0,height:0},this.checkForSizeChanges()};(function(){r.implement(this,u),this.$characterSize={width:0,height:0},this.$testFractionalRect=function(){var e=i.createElement("div");this.$setMeasureNodeStyles(e.style),e.style.width="0.2px",document.documentElement.appendChild(e);var t=e.getBoundingClientRect().width;t>0&&t<1?a=50:a=100,e.parentNode.removeChild(e)},this.$setMeasureNodeStyles=function(e,t){e.width=e.height="auto",e.left=e.top="0px",e.visibility="hidden",e.position="absolute",e.whiteSpace="pre",o.isIE<8?e["font-family"]="inherit":e.font="inherit",e.overflow=t?"hidden":"visible"},this.checkForSizeChanges=function(){var e=this.$measureSizes();if(e&&(this.$characterSize.width!==e.width||this.$characterSize.height!==e.height)){this.$measureNode.style.fontWeight="bold";var t=this.$measureSizes();this.$measureNode.style.fontWeight="",this.$characterSize=e,this.charSizes=Object.create(null),this.allowBoldFonts=t&&t.width===e.width&&t.height===e.height,this._emit("changeCharacterSize",{data:e})}},this.$pollSizeChanges=function(){if(this.$pollSizeChangesTimer)return this.$pollSizeChangesTimer;var e=this;return this.$pollSizeChangesTimer=setInterval(function(){e.checkForSizeChanges()},500)},this.setPolling=function(e){e?this.$pollSizeChanges():this.$pollSizeChangesTimer&&(clearInterval(this.$pollSizeChangesTimer),this.$pollSizeChangesTimer=0)},this.$measureSizes=function(){if(a===50){var e=null;try{e=this.$measureNode.getBoundingClientRect()}catch(t){e={width:0,height:0}}var n={height:e.height,width:e.width/a}}else var n={height:this.$measureNode.clientHeight,width:this.$measureNode.clientWidth/a};return n.width===0||n.height===0?null:n},this.$measureCharWidth=function(e){this.$main.innerHTML=s.stringRepeat(e,a);var t=this.$main.getBoundingClientRect();return t.width/a},this.getCharacterWidth=function(e){var t=this.charSizes[e];return t===undefined&&(t=this.charSizes[e]=this.$measureCharWidth(e)/this.$characterSize.width),t},this.destroy=function(){clearInterval(this.$pollSizeChangesTimer),this.el&&this.el.parentNode&&this.el.parentNode.removeChild(this.el)}}).call(f.prototype)}),ace.define("ace/virtual_renderer",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/config","ace/lib/useragent","ace/layer/gutter","ace/layer/marker","ace/layer/text","ace/layer/cursor","ace/scrollbar","ace/scrollbar","ace/renderloop","ace/layer/font_metrics","ace/lib/event_emitter"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./config"),o=e("./lib/useragent"),u=e("./layer/gutter").Gutter,a=e("./layer/marker").Marker,f=e("./layer/text").Text,l=e("./layer/cursor").Cursor,c=e("./scrollbar").HScrollBar,h=e("./scrollbar").VScrollBar,p=e("./renderloop").RenderLoop,d=e("./layer/font_metrics").FontMetrics,v=e("./lib/event_emitter").EventEmitter,m='.ace_editor {position: relative;overflow: hidden;font: 12px/normal \'Monaco\', \'Menlo\', \'Ubuntu Mono\', \'Consolas\', \'source-code-pro\', monospace;direction: ltr;}.ace_scroller {position: absolute;overflow: hidden;top: 0;bottom: 0;background-color: inherit;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;cursor: text;}.ace_content {position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;min-width: 100%;}.ace_dragging .ace_scroller:before{position: absolute;top: 0;left: 0;right: 0;bottom: 0;content: \'\';background: rgba(250, 250, 250, 0.01);z-index: 1000;}.ace_dragging.ace_dark .ace_scroller:before{background: rgba(0, 0, 0, 0.01);}.ace_selecting, .ace_selecting * {cursor: text !important;}.ace_gutter {position: absolute;overflow : hidden;width: auto;top: 0;bottom: 0;left: 0;cursor: default;z-index: 4;-ms-user-select: none;-moz-user-select: none;-webkit-user-select: none;user-select: none;}.ace_gutter-active-line {position: absolute;left: 0;right: 0;}.ace_scroller.ace_scroll-left {box-shadow: 17px 0 16px -16px rgba(0, 0, 0, 0.4) inset;}.ace_gutter-cell {padding-left: 19px;padding-right: 6px;background-repeat: no-repeat;}.ace_gutter-cell.ace_error {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAABOFBMVEX/////////QRswFAb/Ui4wFAYwFAYwFAaWGAfDRymzOSH/PxswFAb/SiUwFAYwFAbUPRvjQiDllog5HhHdRybsTi3/Tyv9Tir+Syj/UC3////XurebMBIwFAb/RSHbPx/gUzfdwL3kzMivKBAwFAbbvbnhPx66NhowFAYwFAaZJg8wFAaxKBDZurf/RB6mMxb/SCMwFAYwFAbxQB3+RB4wFAb/Qhy4Oh+4QifbNRcwFAYwFAYwFAb/QRzdNhgwFAYwFAbav7v/Uy7oaE68MBK5LxLewr/r2NXewLswFAaxJw4wFAbkPRy2PyYwFAaxKhLm1tMwFAazPiQwFAaUGAb/QBrfOx3bvrv/VC/maE4wFAbRPBq6MRO8Qynew8Dp2tjfwb0wFAbx6eju5+by6uns4uH9/f36+vr/GkHjAAAAYnRSTlMAGt+64rnWu/bo8eAA4InH3+DwoN7j4eLi4xP99Nfg4+b+/u9B/eDs1MD1mO7+4PHg2MXa347g7vDizMLN4eG+Pv7i5evs/v79yu7S3/DV7/498Yv24eH+4ufQ3Ozu/v7+y13sRqwAAADLSURBVHjaZc/XDsFgGIBhtDrshlitmk2IrbHFqL2pvXf/+78DPokj7+Fz9qpU/9UXJIlhmPaTaQ6QPaz0mm+5gwkgovcV6GZzd5JtCQwgsxoHOvJO15kleRLAnMgHFIESUEPmawB9ngmelTtipwwfASilxOLyiV5UVUyVAfbG0cCPHig+GBkzAENHS0AstVF6bacZIOzgLmxsHbt2OecNgJC83JERmePUYq8ARGkJx6XtFsdddBQgZE2nPR6CICZhawjA4Fb/chv+399kfR+MMMDGOQAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: 2px center;}.ace_gutter-cell.ace_warning {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAmVBMVEX///8AAAD///8AAAAAAABPSzb/5sAAAAB/blH/73z/ulkAAAAAAAD85pkAAAAAAAACAgP/vGz/rkDerGbGrV7/pkQICAf////e0IsAAAD/oED/qTvhrnUAAAD/yHD/njcAAADuv2r/nz//oTj/p064oGf/zHAAAAA9Nir/tFIAAAD/tlTiuWf/tkIAAACynXEAAAAAAAAtIRW7zBpBAAAAM3RSTlMAABR1m7RXO8Ln31Z36zT+neXe5OzooRDfn+TZ4p3h2hTf4t3k3ucyrN1K5+Xaks52Sfs9CXgrAAAAjklEQVR42o3PbQ+CIBQFYEwboPhSYgoYunIqqLn6/z8uYdH8Vmdnu9vz4WwXgN/xTPRD2+sgOcZjsge/whXZgUaYYvT8QnuJaUrjrHUQreGczuEafQCO/SJTufTbroWsPgsllVhq3wJEk2jUSzX3CUEDJC84707djRc5MTAQxoLgupWRwW6UB5fS++NV8AbOZgnsC7BpEAAAAABJRU5ErkJggg==");background-position: 2px center;}.ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAAAAAA6mKC9AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAJ0Uk5TAAB2k804AAAAPklEQVQY02NgIB68QuO3tiLznjAwpKTgNyDbMegwisCHZUETUZV0ZqOquBpXj2rtnpSJT1AEnnRmL2OgGgAAIKkRQap2htgAAAAASUVORK5CYII=");background-position: 2px center;}.ace_dark .ace_gutter-cell.ace_info {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAJFBMVEUAAAChoaGAgIAqKiq+vr6tra1ZWVmUlJSbm5s8PDxubm56enrdgzg3AAAAAXRSTlMAQObYZgAAAClJREFUeNpjYMAPdsMYHegyJZFQBlsUlMFVCWUYKkAZMxZAGdxlDMQBAG+TBP4B6RyJAAAAAElFTkSuQmCC");}.ace_scrollbar {position: absolute;right: 0;bottom: 0;z-index: 6;}.ace_scrollbar-inner {position: absolute;cursor: text;left: 0;top: 0;}.ace_scrollbar-v{overflow-x: hidden;overflow-y: scroll;top: 0;}.ace_scrollbar-h {overflow-x: scroll;overflow-y: hidden;left: 0;}.ace_print-margin {position: absolute;height: 100%;}.ace_text-input {position: absolute;z-index: 0;width: 0.5em;height: 1em;opacity: 0;background: transparent;-moz-appearance: none;appearance: none;border: none;resize: none;outline: none;overflow: hidden;font: inherit;padding: 0 1px;margin: 0 -1px;text-indent: -1em;-ms-user-select: text;-moz-user-select: text;-webkit-user-select: text;user-select: text;white-space: pre!important;}.ace_text-input.ace_composition {background: inherit;color: inherit;z-index: 1000;opacity: 1;text-indent: 0;}.ace_layer {z-index: 1;position: absolute;overflow: hidden;word-wrap: normal;white-space: pre;height: 100%;width: 100%;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;pointer-events: none;}.ace_gutter-layer {position: relative;width: auto;text-align: right;pointer-events: auto;}.ace_text-layer {font: inherit !important;}.ace_cjk {display: inline-block;text-align: center;}.ace_cursor-layer {z-index: 4;}.ace_cursor {z-index: 4;position: absolute;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;border-left: 2px solid;transform: translatez(0);}.ace_slim-cursors .ace_cursor {border-left-width: 1px;}.ace_overwrite-cursors .ace_cursor {border-left-width: 0;border-bottom: 1px solid;}.ace_hidden-cursors .ace_cursor {opacity: 0.2;}.ace_smooth-blinking .ace_cursor {-webkit-transition: opacity 0.18s;transition: opacity 0.18s;}.ace_editor.ace_multiselect .ace_cursor {border-left-width: 1px;}.ace_marker-layer .ace_step, .ace_marker-layer .ace_stack {position: absolute;z-index: 3;}.ace_marker-layer .ace_selection {position: absolute;z-index: 5;}.ace_marker-layer .ace_bracket {position: absolute;z-index: 6;}.ace_marker-layer .ace_active-line {position: absolute;z-index: 2;}.ace_marker-layer .ace_selected-word {position: absolute;z-index: 4;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;}.ace_line .ace_fold {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;display: inline-block;height: 11px;margin-top: -2px;vertical-align: middle;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACJJREFUeNpi+P//fxgTAwPDBxDxD078RSX+YeEyDFMCIMAAI3INmXiwf2YAAAAASUVORK5CYII=");background-repeat: no-repeat, repeat-x;background-position: center center, top left;color: transparent;border: 1px solid black;border-radius: 2px;cursor: pointer;pointer-events: auto;}.ace_dark .ace_fold {}.ace_fold:hover{background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAAJCAYAAADU6McMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJpJREFUeNpi/P//PwOlgAXGYGRklAVSokD8GmjwY1wasKljQpYACtpCFeADcHVQfQyMQAwzwAZI3wJKvCLkfKBaMSClBlR7BOQikCFGQEErIH0VqkabiGCAqwUadAzZJRxQr/0gwiXIal8zQQPnNVTgJ1TdawL0T5gBIP1MUJNhBv2HKoQHHjqNrA4WO4zY0glyNKLT2KIfIMAAQsdgGiXvgnYAAAAASUVORK5CYII="),url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA3CAYAAADNNiA5AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACBJREFUeNpi+P//fz4TAwPDZxDxD5X4i5fLMEwJgAADAEPVDbjNw87ZAAAAAElFTkSuQmCC");}.ace_tooltip {background-color: #FFF;background-image: -webkit-linear-gradient(top, transparent, rgba(0, 0, 0, 0.1));background-image: linear-gradient(to bottom, transparent, rgba(0, 0, 0, 0.1));border: 1px solid gray;border-radius: 1px;box-shadow: 0 1px 2px rgba(0, 0, 0, 0.3);color: black;max-width: 100%;padding: 3px 4px;position: fixed;z-index: 999999;-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;cursor: default;white-space: pre;word-wrap: break-word;line-height: normal;font-style: normal;font-weight: normal;letter-spacing: normal;pointer-events: none;}.ace_folding-enabled > .ace_gutter-cell {padding-right: 13px;}.ace_fold-widget {-moz-box-sizing: border-box;-webkit-box-sizing: border-box;box-sizing: border-box;margin: 0 -12px 0 1px;display: none;width: 11px;vertical-align: top;background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42mWKsQ0AMAzC8ixLlrzQjzmBiEjp0A6WwBCSPgKAXoLkqSot7nN3yMwR7pZ32NzpKkVoDBUxKAAAAABJRU5ErkJggg==");background-repeat: no-repeat;background-position: center;border-radius: 3px;border: 1px solid transparent;cursor: pointer;}.ace_folding-enabled .ace_fold-widget {display: inline-block; }.ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAANElEQVR42m3HwQkAMAhD0YzsRchFKI7sAikeWkrxwScEB0nh5e7KTPWimZki4tYfVbX+MNl4pyZXejUO1QAAAABJRU5ErkJggg==");}.ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAGCAYAAAAG5SQMAAAAOUlEQVR42jXKwQkAMAgDwKwqKD4EwQ26sSOkVWjgIIHAzPiCgaqiqnJHZnKICBERHN194O5b9vbLuAVRL+l0YWnZAAAAAElFTkSuQmCCXA==");}.ace_fold-widget:hover {border: 1px solid rgba(0, 0, 0, 0.3);background-color: rgba(255, 255, 255, 0.2);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.7);}.ace_fold-widget:active {border: 1px solid rgba(0, 0, 0, 0.4);background-color: rgba(0, 0, 0, 0.05);box-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);}.ace_dark .ace_fold-widget {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHklEQVQIW2P4//8/AzoGEQ7oGCaLLAhWiSwB146BAQCSTPYocqT0AAAAAElFTkSuQmCC");}.ace_dark .ace_fold-widget.ace_end {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAH0lEQVQIW2P4//8/AxQ7wNjIAjDMgC4AxjCVKBirIAAF0kz2rlhxpAAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget.ace_closed {background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAMAAAAFCAYAAACAcVaiAAAAHElEQVQIW2P4//+/AxAzgDADlOOAznHAKgPWAwARji8UIDTfQQAAAABJRU5ErkJggg==");}.ace_dark .ace_fold-widget:hover {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);background-color: rgba(255, 255, 255, 0.1);}.ace_dark .ace_fold-widget:active {box-shadow: 0 1px 1px rgba(255, 255, 255, 0.2);}.ace_fold-widget.ace_invalid {background-color: #FFB4B4;border-color: #DE5555;}.ace_fade-fold-widgets .ace_fold-widget {-webkit-transition: opacity 0.4s ease 0.05s;transition: opacity 0.4s ease 0.05s;opacity: 0;}.ace_fade-fold-widgets:hover .ace_fold-widget {-webkit-transition: opacity 0.05s ease 0.05s;transition: opacity 0.05s ease 0.05s;opacity:1;}.ace_underline {text-decoration: underline;}.ace_bold {font-weight: bold;}.ace_nobold .ace_bold {font-weight: normal;}.ace_italic {font-style: italic;}.ace_error-marker {background-color: rgba(255, 0, 0,0.2);position: absolute;z-index: 9;}.ace_highlight-marker {background-color: rgba(255, 255, 0,0.2);position: absolute;z-index: 8;}.ace_br1 {border-top-left-radius : 3px;}.ace_br2 {border-top-right-radius : 3px;}.ace_br3 {border-top-left-radius : 3px; border-top-right-radius: 3px;}.ace_br4 {border-bottom-right-radius: 3px;}.ace_br5 {border-top-left-radius : 3px; border-bottom-right-radius: 3px;}.ace_br6 {border-top-right-radius : 3px; border-bottom-right-radius: 3px;}.ace_br7 {border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px;}.ace_br8 {border-bottom-left-radius : 3px;}.ace_br9 {border-top-left-radius : 3px; border-bottom-left-radius: 3px;}.ace_br10{border-top-right-radius : 3px; border-bottom-left-radius: 3px;}.ace_br11{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br12{border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br13{border-top-left-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br14{border-top-right-radius : 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}.ace_br15{border-top-left-radius : 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px;}';i.importCssString(m,"ace_editor.css");var g=function(e,t){var n=this;this.container=e||i.createElement("div"),this.$keepTextAreaAtCursor=!o.isOldIE,i.addCssClass(this.container,"ace_editor"),this.setTheme(t),this.$gutter=i.createElement("div"),this.$gutter.className="ace_gutter",this.container.appendChild(this.$gutter),this.scroller=i.createElement("div"),this.scroller.className="ace_scroller",this.container.appendChild(this.scroller),this.content=i.createElement("div"),this.content.className="ace_content",this.scroller.appendChild(this.content),this.$gutterLayer=new u(this.$gutter),this.$gutterLayer.on("changeGutterWidth",this.onGutterResize.bind(this)),this.$markerBack=new a(this.content);var r=this.$textLayer=new f(this.content);this.canvas=r.element,this.$markerFront=new a(this.content),this.$cursorLayer=new l(this.content),this.$horizScroll=!1,this.$vScroll=!1,this.scrollBar=this.scrollBarV=new h(this.container,this),this.scrollBarH=new c(this.container,this),this.scrollBarV.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollTop(e.data-n.scrollMargin.top)}),this.scrollBarH.addEventListener("scroll",function(e){n.$scrollAnimation||n.session.setScrollLeft(e.data-n.scrollMargin.left)}),this.scrollTop=0,this.scrollLeft=0,this.cursorPos={row:0,column:0},this.$fontMetrics=new d(this.container),this.$textLayer.$setFontMetrics(this.$fontMetrics),this.$textLayer.addEventListener("changeCharacterSize",function(e){n.updateCharacterSize(),n.onResize(!0,n.gutterWidth,n.$size.width,n.$size.height),n._signal("changeCharacterSize",e)}),this.$size={width:0,height:0,scrollerHeight:0,scrollerWidth:0,$dirty:!0},this.layerConfig={width:1,padding:0,firstRow:0,firstRowScreen:0,lastRow:0,lineHeight:0,characterWidth:0,minHeight:1,maxHeight:1,offset:0,height:1,gutterOffset:1},this.scrollMargin={left:0,right:0,top:0,bottom:0,v:0,h:0},this.$loop=new p(this.$renderChanges.bind(this),this.container.ownerDocument.defaultView),this.$loop.schedule(this.CHANGE_FULL),this.updateCharacterSize(),this.setPadding(4),s.resetOptions(this),s._emit("renderer",this)};(function(){this.CHANGE_CURSOR=1,this.CHANGE_MARKER=2,this.CHANGE_GUTTER=4,this.CHANGE_SCROLL=8,this.CHANGE_LINES=16,this.CHANGE_TEXT=32,this.CHANGE_SIZE=64,this.CHANGE_MARKER_BACK=128,this.CHANGE_MARKER_FRONT=256,this.CHANGE_FULL=512,this.CHANGE_H_SCROLL=1024,r.implement(this,v),this.updateCharacterSize=function(){this.$textLayer.allowBoldFonts!=this.$allowBoldFonts&&(this.$allowBoldFonts=this.$textLayer.allowBoldFonts,this.setStyle("ace_nobold",!this.$allowBoldFonts)),this.layerConfig.characterWidth=this.characterWidth=this.$textLayer.getCharacterWidth(),this.layerConfig.lineHeight=this.lineHeight=this.$textLayer.getLineHeight(),this.$updatePrintMargin()},this.setSession=function(e){this.session&&this.session.doc.off("changeNewLineMode",this.onChangeNewLineMode),this.session=e,e&&this.scrollMargin.top&&e.getScrollTop()<=0&&e.setScrollTop(-this.scrollMargin.top),this.$cursorLayer.setSession(e),this.$markerBack.setSession(e),this.$markerFront.setSession(e),this.$gutterLayer.setSession(e),this.$textLayer.setSession(e);if(!e)return;this.$loop.schedule(this.CHANGE_FULL),this.session.$setFontMetrics(this.$fontMetrics),this.onChangeNewLineMode=this.onChangeNewLineMode.bind(this),this.onChangeNewLineMode(),this.session.doc.on("changeNewLineMode",this.onChangeNewLineMode)},this.updateLines=function(e,t,n){t===undefined&&(t=Infinity),this.$changedLines?(this.$changedLines.firstRow>e&&(this.$changedLines.firstRow=e),this.$changedLines.lastRowthis.layerConfig.lastRow)return;this.$loop.schedule(this.CHANGE_LINES)},this.onChangeNewLineMode=function(){this.$loop.schedule(this.CHANGE_TEXT),this.$textLayer.$updateEolChar()},this.onChangeTabSize=function(){this.$loop.schedule(this.CHANGE_TEXT|this.CHANGE_MARKER),this.$textLayer.onChangeTabSize()},this.updateText=function(){this.$loop.schedule(this.CHANGE_TEXT)},this.updateFull=function(e){e?this.$renderChanges(this.CHANGE_FULL,!0):this.$loop.schedule(this.CHANGE_FULL)},this.updateFontSize=function(){this.$textLayer.checkForSizeChanges()},this.$changes=0,this.$updateSizeAsync=function(){this.$loop.pending?this.$size.$dirty=!0:this.onResize()},this.onResize=function(e,t,n,r){if(this.resizing>2)return;this.resizing>0?this.resizing++:this.resizing=e?1:0;var i=this.container;r||(r=i.clientHeight||i.scrollHeight),n||(n=i.clientWidth||i.scrollWidth);var s=this.$updateCachedSize(e,t,n,r);if(!this.$size.scrollerHeight||!n&&!r)return this.resizing=0;e&&(this.$gutterLayer.$padding=null),e?this.$renderChanges(s|this.$changes,!0):this.$loop.schedule(s|this.$changes),this.resizing&&(this.resizing=0),this.scrollBarV.scrollLeft=this.scrollBarV.scrollTop=null},this.$updateCachedSize=function(e,t,n,r){r-=this.$extraHeight||0;var i=0,s=this.$size,o={width:s.width,height:s.height,scrollerHeight:s.scrollerHeight,scrollerWidth:s.scrollerWidth};r&&(e||s.height!=r)&&(s.height=r,i|=this.CHANGE_SIZE,s.scrollerHeight=s.height,this.$horizScroll&&(s.scrollerHeight-=this.scrollBarH.getHeight()),this.scrollBarV.element.style.bottom=this.scrollBarH.getHeight()+"px",i|=this.CHANGE_SCROLL);if(n&&(e||s.width!=n)){i|=this.CHANGE_SIZE,s.width=n,t==null&&(t=this.$showGutter?this.$gutter.offsetWidth:0),this.gutterWidth=t,this.scrollBarH.element.style.left=this.scroller.style.left=t+"px",s.scrollerWidth=Math.max(0,n-t-this.scrollBarV.getWidth()),this.scrollBarH.element.style.right=this.scroller.style.right=this.scrollBarV.getWidth()+"px",this.scroller.style.bottom=this.scrollBarH.getHeight()+"px";if(this.session&&this.session.getUseWrapMode()&&this.adjustWrapLimit()||e)i|=this.CHANGE_FULL}return s.$dirty=!n||!r,i&&this._signal("resize",o),i},this.onGutterResize=function(){var e=this.$showGutter?this.$gutter.offsetWidth:0;e!=this.gutterWidth&&(this.$changes|=this.$updateCachedSize(!0,e,this.$size.width,this.$size.height)),this.session.getUseWrapMode()&&this.adjustWrapLimit()?this.$loop.schedule(this.CHANGE_FULL):this.$size.$dirty?this.$loop.schedule(this.CHANGE_FULL):(this.$computeLayerConfig(),this.$loop.schedule(this.CHANGE_MARKER))},this.adjustWrapLimit=function(){var e=this.$size.scrollerWidth-this.$padding*2,t=Math.floor(e/this.characterWidth);return this.session.adjustWrapLimit(t,this.$showPrintMargin&&this.$printMarginColumn)},this.setAnimatedScroll=function(e){this.setOption("animatedScroll",e)},this.getAnimatedScroll=function(){return this.$animatedScroll},this.setShowInvisibles=function(e){this.setOption("showInvisibles",e)},this.getShowInvisibles=function(){return this.getOption("showInvisibles")},this.getDisplayIndentGuides=function(){return this.getOption("displayIndentGuides")},this.setDisplayIndentGuides=function(e){this.setOption("displayIndentGuides",e)},this.setShowPrintMargin=function(e){this.setOption("showPrintMargin",e)},this.getShowPrintMargin=function(){return this.getOption("showPrintMargin")},this.setPrintMarginColumn=function(e){this.setOption("printMarginColumn",e)},this.getPrintMarginColumn=function(){return this.getOption("printMarginColumn")},this.getShowGutter=function(){return this.getOption("showGutter")},this.setShowGutter=function(e){return this.setOption("showGutter",e)},this.getFadeFoldWidgets=function(){return this.getOption("fadeFoldWidgets")},this.setFadeFoldWidgets=function(e){this.setOption("fadeFoldWidgets",e)},this.setHighlightGutterLine=function(e){this.setOption("highlightGutterLine",e)},this.getHighlightGutterLine=function(){return this.getOption("highlightGutterLine")},this.$updateGutterLineHighlight=function(){var e=this.$cursorLayer.$pixelPos,t=this.layerConfig.lineHeight;if(this.session.getUseWrapMode()){var n=this.session.selection.getCursor();n.column=0,e=this.$cursorLayer.getPixelPosition(n,!0),t*=this.session.getRowLength(n.row)}this.$gutterLineHighlight.style.top=e.top-this.layerConfig.offset+"px",this.$gutterLineHighlight.style.height=t+"px"},this.$updatePrintMargin=function(){if(!this.$showPrintMargin&&!this.$printMarginEl)return;if(!this.$printMarginEl){var e=i.createElement("div");e.className="ace_layer ace_print-margin-layer",this.$printMarginEl=i.createElement("div"),this.$printMarginEl.className="ace_print-margin",e.appendChild(this.$printMarginEl),this.content.insertBefore(e,this.content.firstChild)}var t=this.$printMarginEl.style;t.left=this.characterWidth*this.$printMarginColumn+this.$padding+"px",t.visibility=this.$showPrintMargin?"visible":"hidden",this.session&&this.session.$wrap==-1&&this.adjustWrapLimit()},this.getContainerElement=function(){return this.container},this.getMouseEventTarget=function(){return this.scroller},this.getTextAreaContainer=function(){return this.container},this.$moveTextAreaToCursor=function(){if(!this.$keepTextAreaAtCursor)return;var e=this.layerConfig,t=this.$cursorLayer.$pixelPos.top,n=this.$cursorLayer.$pixelPos.left;t-=e.offset;var r=this.textarea.style,i=this.lineHeight;if(t<0||t>e.height-i){r.top=r.left="0";return}var s=this.characterWidth;if(this.$composition){var o=this.textarea.value.replace(/^\x01+/,"");s*=this.session.$getStringScreenWidth(o)[0]+2,i+=2}n-=this.scrollLeft,n>this.$size.scrollerWidth-s&&(n=this.$size.scrollerWidth-s),n+=this.gutterWidth,r.height=i+"px",r.width=s+"px",r.left=Math.min(n,this.$size.scrollerWidth-s)+"px",r.top=Math.min(t,this.$size.height-i)+"px"},this.getFirstVisibleRow=function(){return this.layerConfig.firstRow},this.getFirstFullyVisibleRow=function(){return this.layerConfig.firstRow+(this.layerConfig.offset===0?0:1)},this.getLastFullyVisibleRow=function(){var e=this.layerConfig,t=e.lastRow,n=this.session.documentToScreenRow(t,0)*e.lineHeight;return n-this.session.getScrollTop()>e.height-e.lineHeight?t-1:t},this.getLastVisibleRow=function(){return this.layerConfig.lastRow},this.$padding=null,this.setPadding=function(e){this.$padding=e,this.$textLayer.setPadding(e),this.$cursorLayer.setPadding(e),this.$markerFront.setPadding(e),this.$markerBack.setPadding(e),this.$loop.schedule(this.CHANGE_FULL),this.$updatePrintMargin()},this.setScrollMargin=function(e,t,n,r){var i=this.scrollMargin;i.top=e|0,i.bottom=t|0,i.right=r|0,i.left=n|0,i.v=i.top+i.bottom,i.h=i.left+i.right,i.top&&this.scrollTop<=0&&this.session&&this.session.setScrollTop(-i.top),this.updateFull()},this.getHScrollBarAlwaysVisible=function(){return this.$hScrollBarAlwaysVisible},this.setHScrollBarAlwaysVisible=function(e){this.setOption("hScrollBarAlwaysVisible",e)},this.getVScrollBarAlwaysVisible=function(){return this.$vScrollBarAlwaysVisible},this.setVScrollBarAlwaysVisible=function(e){this.setOption("vScrollBarAlwaysVisible",e)},this.$updateScrollBarV=function(){var e=this.layerConfig.maxHeight,t=this.$size.scrollerHeight;!this.$maxLines&&this.$scrollPastEnd&&(e-=(t-this.lineHeight)*this.$scrollPastEnd,this.scrollTop>e-t&&(e=this.scrollTop+t,this.scrollBarV.scrollTop=null)),this.scrollBarV.setScrollHeight(e+this.scrollMargin.v),this.scrollBarV.setScrollTop(this.scrollTop+this.scrollMargin.top)},this.$updateScrollBarH=function(){this.scrollBarH.setScrollWidth(this.layerConfig.width+2*this.$padding+this.scrollMargin.h),this.scrollBarH.setScrollLeft(this.scrollLeft+this.scrollMargin.left)},this.$frozen=!1,this.freeze=function(){this.$frozen=!0},this.unfreeze=function(){this.$frozen=!1},this.$renderChanges=function(e,t){this.$changes&&(e|=this.$changes,this.$changes=0);if(!this.session||!this.container.offsetWidth||this.$frozen||!e&&!t){this.$changes|=e;return}if(this.$size.$dirty)return this.$changes|=e,this.onResize(!0);this.lineHeight||this.$textLayer.checkForSizeChanges(),this._signal("beforeRender");var n=this.layerConfig;if(e&this.CHANGE_FULL||e&this.CHANGE_SIZE||e&this.CHANGE_TEXT||e&this.CHANGE_LINES||e&this.CHANGE_SCROLL||e&this.CHANGE_H_SCROLL){e|=this.$computeLayerConfig();if(n.firstRow!=this.layerConfig.firstRow&&n.firstRowScreen==this.layerConfig.firstRowScreen){var r=this.scrollTop+(n.firstRow-this.layerConfig.firstRow)*this.lineHeight;r>0&&(this.scrollTop=r,e|=this.CHANGE_SCROLL,e|=this.$computeLayerConfig())}n=this.layerConfig,this.$updateScrollBarV(),e&this.CHANGE_H_SCROLL&&this.$updateScrollBarH(),this.$gutterLayer.element.style.marginTop=-n.offset+"px",this.content.style.marginTop=-n.offset+"px",this.content.style.width=n.width+2*this.$padding+"px",this.content.style.height=n.minHeight+"px"}e&this.CHANGE_H_SCROLL&&(this.content.style.marginLeft=-this.scrollLeft+"px",this.scroller.className=this.scrollLeft<=0?"ace_scroller":"ace_scroller ace_scroll-left");if(e&this.CHANGE_FULL){this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this._signal("afterRender");return}if(e&this.CHANGE_SCROLL){e&this.CHANGE_TEXT||e&this.CHANGE_LINES?this.$textLayer.update(n):this.$textLayer.scrollLines(n),this.$showGutter&&this.$gutterLayer.update(n),this.$markerBack.update(n),this.$markerFront.update(n),this.$cursorLayer.update(n),this.$highlightGutterLine&&this.$updateGutterLineHighlight(),this.$moveTextAreaToCursor(),this._signal("afterRender");return}e&this.CHANGE_TEXT?(this.$textLayer.update(n),this.$showGutter&&this.$gutterLayer.update(n)):e&this.CHANGE_LINES?(this.$updateLines()||e&this.CHANGE_GUTTER&&this.$showGutter)&&this.$gutterLayer.update(n):(e&this.CHANGE_TEXT||e&this.CHANGE_GUTTER)&&this.$showGutter&&this.$gutterLayer.update(n),e&this.CHANGE_CURSOR&&(this.$cursorLayer.update(n),this.$moveTextAreaToCursor(),this.$highlightGutterLine&&this.$updateGutterLineHighlight()),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_FRONT)&&this.$markerFront.update(n),e&(this.CHANGE_MARKER|this.CHANGE_MARKER_BACK)&&this.$markerBack.update(n),this._signal("afterRender")},this.$autosize=function(){var e=this.session.getScreenLength()*this.lineHeight,t=this.$maxLines*this.lineHeight,n=Math.max((this.$minLines||1)*this.lineHeight,Math.min(t,e))+this.scrollMargin.v+(this.$extraHeight||0);this.$horizScroll&&(n+=this.scrollBarH.getHeight());var r=e>t;if(n!=this.desiredHeight||this.$size.height!=this.desiredHeight||r!=this.$vScroll){r!=this.$vScroll&&(this.$vScroll=r,this.scrollBarV.setVisible(r));var i=this.container.clientWidth;this.container.style.height=n+"px",this.$updateCachedSize(!0,this.$gutterWidth,i,n),this.desiredHeight=n,this._signal("autosize")}},this.$computeLayerConfig=function(){var e=this.session,t=this.$size,n=t.height<=2*this.lineHeight,r=this.session.getScreenLength(),i=r*this.lineHeight,s=this.$getLongestLine(),o=!n&&(this.$hScrollBarAlwaysVisible||t.scrollerWidth-s-2*this.$padding<0),u=this.$horizScroll!==o;u&&(this.$horizScroll=o,this.scrollBarH.setVisible(o));var a=this.$vScroll;this.$maxLines&&this.lineHeight>1&&this.$autosize();var f=this.scrollTop%this.lineHeight,l=t.scrollerHeight+this.lineHeight,c=!this.$maxLines&&this.$scrollPastEnd?(t.scrollerHeight-this.lineHeight)*this.$scrollPastEnd:0;i+=c;var h=this.scrollMargin;this.session.setScrollTop(Math.max(-h.top,Math.min(this.scrollTop,i-t.scrollerHeight+h.bottom))),this.session.setScrollLeft(Math.max(-h.left,Math.min(this.scrollLeft,s+2*this.$padding-t.scrollerWidth+h.right)));var p=!n&&(this.$vScrollBarAlwaysVisible||t.scrollerHeight-i+c<0||this.scrollTop>h.top),d=a!==p;d&&(this.$vScroll=p,this.scrollBarV.setVisible(p));var v=Math.ceil(l/this.lineHeight)-1,m=Math.max(0,Math.round((this.scrollTop-f)/this.lineHeight)),g=m+v,y,b,w=this.lineHeight;m=e.screenToDocumentRow(m,0);var E=e.getFoldLine(m);E&&(m=E.start.row),y=e.documentToScreenRow(m,0),b=e.getRowLength(m)*w,g=Math.min(e.screenToDocumentRow(g,0),e.getLength()-1),l=t.scrollerHeight+e.getRowLength(g)*w+b,f=this.scrollTop-y*w;var S=0;this.layerConfig.width!=s&&(S=this.CHANGE_H_SCROLL);if(u||d)S=this.$updateCachedSize(!0,this.gutterWidth,t.width,t.height),this._signal("scrollbarVisibilityChanged"),d&&(s=this.$getLongestLine());return this.layerConfig={width:s,padding:this.$padding,firstRow:m,firstRowScreen:y,lastRow:g,lineHeight:w,characterWidth:this.characterWidth,minHeight:l,maxHeight:i,offset:f,gutterOffset:Math.max(0,Math.ceil((f+t.height-t.scrollerHeight)/w)),height:this.$size.scrollerHeight},S},this.$updateLines=function(){var e=this.$changedLines.firstRow,t=this.$changedLines.lastRow;this.$changedLines=null;var n=this.layerConfig;if(e>n.lastRow+1)return;if(ts?(t&&a+o>s+this.lineHeight&&(s-=t*this.$size.scrollerHeight),s===0&&(s=-this.scrollMargin.top),this.session.setScrollTop(s)):a+this.$size.scrollerHeight-ui?(i=1-this.scrollMargin.top)return!0;if(t>0&&this.session.getScrollTop()+this.$size.scrollerHeight-this.layerConfig.maxHeight<-1+this.scrollMargin.bottom)return!0;if(e<0&&this.session.getScrollLeft()>=1-this.scrollMargin.left)return!0;if(e>0&&this.session.getScrollLeft()+this.$size.scrollerWidth-this.layerConfig.width<-1+this.scrollMargin.right)return!0},this.pixelToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=(e+this.scrollLeft-n.left-this.$padding)/this.characterWidth,i=Math.floor((t+this.scrollTop-n.top)/this.lineHeight),s=Math.round(r);return{row:i,column:s,side:r-s>0?1:-1}},this.screenToTextCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=Math.round((e+this.scrollLeft-n.left-this.$padding)/this.characterWidth),i=(t+this.scrollTop-n.top)/this.lineHeight;return this.session.screenToDocumentPosition(i,Math.max(r,0))},this.textToScreenCoordinates=function(e,t){var n=this.scroller.getBoundingClientRect(),r=this.session.documentToScreenPosition(e,t),i=this.$padding+Math.round(r.column*this.characterWidth),s=r.row*this.lineHeight;return{pageX:n.left+i-this.scrollLeft,pageY:n.top+s-this.scrollTop}},this.visualizeFocus=function(){i.addCssClass(this.container,"ace_focus")},this.visualizeBlur=function(){i.removeCssClass(this.container,"ace_focus")},this.showComposition=function(e){this.$composition||(this.$composition={keepTextAreaAtCursor:this.$keepTextAreaAtCursor,cssText:this.textarea.style.cssText}),this.$keepTextAreaAtCursor=!0,i.addCssClass(this.textarea,"ace_composition"),this.textarea.style.cssText="",this.$moveTextAreaToCursor()},this.setCompositionText=function(e){this.$moveTextAreaToCursor()},this.hideComposition=function(){if(!this.$composition)return;i.removeCssClass(this.textarea,"ace_composition"),this.$keepTextAreaAtCursor=this.$composition.keepTextAreaAtCursor,this.textarea.style.cssText=this.$composition.cssText,this.$composition=null},this.setTheme=function(e,t){function o(r){if(n.$themeId!=e)return t&&t();if(!r.cssClass)return;i.importCssString(r.cssText,r.cssClass,n.container.ownerDocument),n.theme&&i.removeCssClass(n.container,n.theme.cssClass);var s="padding"in r?r.padding:"padding"in(n.theme||{})?4:n.$padding;n.$padding&&s!=n.$padding&&n.setPadding(s),n.$theme=r.cssClass,n.theme=r,i.addCssClass(n.container,r.cssClass),i.setCssClass(n.container,"ace_dark",r.isDark),n.$size&&(n.$size.width=0,n.$updateSizeAsync()),n._dispatchEvent("themeLoaded",{theme:r}),t&&t()}var n=this;this.$themeId=e,n._dispatchEvent("themeChange",{theme:e});if(!e||typeof e=="string"){var r=e||this.$options.theme.initialValue;s.loadModule(["theme",r],o)}else o(e)},this.getTheme=function(){return this.$themeId},this.setStyle=function(e,t){i.setCssClass(this.container,e,t!==!1)},this.unsetStyle=function(e){i.removeCssClass(this.container,e)},this.setCursorStyle=function(e){this.scroller.style.cursor!=e&&(this.scroller.style.cursor=e)},this.setMouseCursor=function(e){this.scroller.style.cursor=e},this.destroy=function(){this.$textLayer.destroy(),this.$cursorLayer.destroy()}}).call(g.prototype),s.defineOptions(g.prototype,"renderer",{animatedScroll:{initialValue:!1},showInvisibles:{set:function(e){this.$textLayer.setShowInvisibles(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!1},showPrintMargin:{set:function(){this.$updatePrintMargin()},initialValue:!0},printMarginColumn:{set:function(){this.$updatePrintMargin()},initialValue:80},printMargin:{set:function(e){typeof e=="number"&&(this.$printMarginColumn=e),this.$showPrintMargin=!!e,this.$updatePrintMargin()},get:function(){return this.$showPrintMargin&&this.$printMarginColumn}},showGutter:{set:function(e){this.$gutter.style.display=e?"block":"none",this.$loop.schedule(this.CHANGE_FULL),this.onGutterResize()},initialValue:!0},fadeFoldWidgets:{set:function(e){i.setCssClass(this.$gutter,"ace_fade-fold-widgets",e)},initialValue:!1},showFoldWidgets:{set:function(e){this.$gutterLayer.setShowFoldWidgets(e)},initialValue:!0},showLineNumbers:{set:function(e){this.$gutterLayer.setShowLineNumbers(e),this.$loop.schedule(this.CHANGE_GUTTER)},initialValue:!0},displayIndentGuides:{set:function(e){this.$textLayer.setDisplayIndentGuides(e)&&this.$loop.schedule(this.CHANGE_TEXT)},initialValue:!0},highlightGutterLine:{set:function(e){if(!this.$gutterLineHighlight){this.$gutterLineHighlight=i.createElement("div"),this.$gutterLineHighlight.className="ace_gutter-active-line",this.$gutter.appendChild(this.$gutterLineHighlight);return}this.$gutterLineHighlight.style.display=e?"":"none",this.$cursorLayer.$pixelPos&&this.$updateGutterLineHighlight()},initialValue:!1,value:!0},hScrollBarAlwaysVisible:{set:function(e){(!this.$hScrollBarAlwaysVisible||!this.$horizScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},vScrollBarAlwaysVisible:{set:function(e){(!this.$vScrollBarAlwaysVisible||!this.$vScroll)&&this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:!1},fontSize:{set:function(e){typeof e=="number"&&(e+="px"),this.container.style.fontSize=e,this.updateFontSize()},initialValue:12},fontFamily:{set:function(e){this.container.style.fontFamily=e,this.updateFontSize()}},maxLines:{set:function(e){this.updateFull()}},minLines:{set:function(e){this.updateFull()}},scrollPastEnd:{set:function(e){e=+e||0;if(this.$scrollPastEnd==e)return;this.$scrollPastEnd=e,this.$loop.schedule(this.CHANGE_SCROLL)},initialValue:0,handlesSet:!0},fixedWidthGutter:{set:function(e){this.$gutterLayer.$fixedWidth=!!e,this.$loop.schedule(this.CHANGE_GUTTER)}},theme:{set:function(e){this.setTheme(e)},get:function(){return this.$themeId||this.theme},initialValue:"./theme/textmate",handlesSet:!0}}),t.VirtualRenderer=g}),ace.define("ace/worker/worker_client",["require","exports","module","ace/lib/oop","ace/lib/net","ace/lib/event_emitter","ace/config"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("../lib/net"),s=e("../lib/event_emitter").EventEmitter,o=e("../config"),u=function(t,n,r,i){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.onMessage=this.onMessage.bind(this),e.nameToUrl&&!e.toUrl&&(e.toUrl=e.nameToUrl);if(o.get("packaged")||!e.toUrl)i=i||o.moduleUrl(n,"worker");else{var s=this.$normalizePath;i=i||s(e.toUrl("ace/worker/worker.js",null,"_"));var u={};t.forEach(function(t){u[t]=s(e.toUrl(t,null,"_").replace(/(\.js)?(\?.*)?$/,""))})}try{this.$worker=new Worker(i)}catch(a){if(!(a instanceof window.DOMException))throw a;var f=this.$workerBlob(i),l=window.URL||window.webkitURL,c=l.createObjectURL(f);this.$worker=new Worker(c),l.revokeObjectURL(c)}this.$worker.postMessage({init:!0,tlns:u,module:n,classname:r}),this.callbackId=1,this.callbacks={},this.$worker.onmessage=this.onMessage};(function(){r.implement(this,s),this.onMessage=function(e){var t=e.data;switch(t.type){case"event":this._signal(t.name,{data:t.data});break;case"call":var n=this.callbacks[t.id];n&&(n(t.data),delete this.callbacks[t.id]);break;case"error":this.reportError(t.data);break;case"log":window.console&&console.log&&console.log.apply(console,t.data)}},this.reportError=function(e){window.console&&console.error&&console.error(e)},this.$normalizePath=function(e){return i.qualifyURL(e)},this.terminate=function(){this._signal("terminate",{}),this.deltaQueue=null,this.$worker.terminate(),this.$worker=null,this.$doc&&this.$doc.off("change",this.changeListener),this.$doc=null},this.send=function(e,t){this.$worker.postMessage({command:e,args:t})},this.call=function(e,t,n){if(n){var r=this.callbackId++;this.callbacks[r]=n,t.push(r)}this.send(e,t)},this.emit=function(e,t){try{this.$worker.postMessage({event:e,data:{data:t.data}})}catch(n){console.error(n.stack)}},this.attachToDocument=function(e){this.$doc&&this.terminate(),this.$doc=e,this.call("setValue",[e.getValue()]),e.on("change",this.changeListener)},this.changeListener=function(e){this.deltaQueue||(this.deltaQueue=[],setTimeout(this.$sendDeltaQueue,0)),e.action=="insert"?this.deltaQueue.push(e.start,e.lines):this.deltaQueue.push(e.start,e.end)},this.$sendDeltaQueue=function(){var e=this.deltaQueue;if(!e)return;this.deltaQueue=null,e.length>50&&e.length>this.$doc.getLength()>>1?this.call("setValue",[this.$doc.getValue()]):this.emit("change",{data:e})},this.$workerBlob=function(e){var t="importScripts('"+i.qualifyURL(e)+"');";try{return new Blob([t],{type:"application/javascript"})}catch(n){var r=window.BlobBuilder||window.WebKitBlobBuilder||window.MozBlobBuilder,s=new r;return s.append(t),s.getBlob("application/javascript")}}}).call(u.prototype);var a=function(e,t,n){this.$sendDeltaQueue=this.$sendDeltaQueue.bind(this),this.changeListener=this.changeListener.bind(this),this.callbackId=1,this.callbacks={},this.messageBuffer=[];var r=null,i=!1,u=Object.create(s),a=this;this.$worker={},this.$worker.terminate=function(){},this.$worker.postMessage=function(e){a.messageBuffer.push(e),r&&(i?setTimeout(f):f())},this.setEmitSync=function(e){i=e};var f=function(){var e=a.messageBuffer.shift();e.command?r[e.command].apply(r,e.args):e.event&&u._signal(e.event,e.data)};u.postMessage=function(e){a.onMessage({data:e})},u.callback=function(e,t){this.postMessage({type:"call",id:t,data:e})},u.emit=function(e,t){this.postMessage({type:"event",name:e,data:t})},o.loadModule(["worker",t],function(e){r=new e[n](u);while(a.messageBuffer.length)f()})};a.prototype=u.prototype,t.UIWorkerClient=a,t.WorkerClient=u}),ace.define("ace/placeholder",["require","exports","module","ace/range","ace/lib/event_emitter","ace/lib/oop"],function(e,t,n){"use strict";var r=e("./range").Range,i=e("./lib/event_emitter").EventEmitter,s=e("./lib/oop"),o=function(e,t,n,r,i,s){var o=this;this.length=t,this.session=e,this.doc=e.getDocument(),this.mainClass=i,this.othersClass=s,this.$onUpdate=this.onUpdate.bind(this),this.doc.on("change",this.$onUpdate),this.$others=r,this.$onCursorChange=function(){setTimeout(function(){o.onCursorChange()})},this.$pos=n;var u=e.getUndoManager().$undoStack||e.getUndoManager().$undostack||{length:-1};this.$undoStackDepth=u.length,this.setup(),e.selection.on("changeCursor",this.$onCursorChange)};(function(){s.implement(this,i),this.setup=function(){var e=this,t=this.doc,n=this.session;this.selectionBefore=n.selection.toJSON(),n.selection.inMultiSelectMode&&n.selection.toSingleRange(),this.pos=t.createAnchor(this.$pos.row,this.$pos.column);var i=this.pos;i.$insertRight=!0,i.detach(),i.markerId=n.addMarker(new r(i.row,i.column,i.row,i.column+this.length),this.mainClass,null,!1),this.others=[],this.$others.forEach(function(n){var r=t.createAnchor(n.row,n.column);r.$insertRight=!0,r.detach(),e.others.push(r)}),n.setUndoSelect(!1)},this.showOtherMarkers=function(){if(this.othersActive)return;var e=this.session,t=this;this.othersActive=!0,this.others.forEach(function(n){n.markerId=e.addMarker(new r(n.row,n.column,n.row,n.column+t.length),t.othersClass,null,!1)})},this.hideOtherMarkers=function(){if(!this.othersActive)return;this.othersActive=!1;for(var e=0;e=this.pos.column&&t.start.column<=this.pos.column+this.length+1,s=t.start.column-this.pos.column;this.updateAnchors(e),i&&(this.length+=n);if(i&&!this.session.$fromUndo)if(e.action==="insert")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.insertMergedLines(a,e.lines)}else if(e.action==="remove")for(var o=this.others.length-1;o>=0;o--){var u=this.others[o],a={row:u.row,column:u.column+s};this.doc.remove(new r(a.row,a.column,a.row,a.column-n))}this.$updating=!1,this.updateMarkers()},this.updateAnchors=function(e){this.pos.onChange(e);for(var t=this.others.length;t--;)this.others[t].onChange(e);this.updateMarkers()},this.updateMarkers=function(){if(this.$updating)return;var e=this,t=this.session,n=function(n,i){t.removeMarker(n.markerId),n.markerId=t.addMarker(new r(n.row,n.column,n.row,n.column+e.length),i,null,!1)};n(this.pos,this.mainClass);for(var i=this.others.length;i--;)n(this.others[i],this.othersClass)},this.onCursorChange=function(e){if(this.$updating||!this.session)return;var t=this.session.selection.getCursor();t.row===this.pos.row&&t.column>=this.pos.column&&t.column<=this.pos.column+this.length?(this.showOtherMarkers(),this._emit("cursorEnter",e)):(this.hideOtherMarkers(),this._emit("cursorLeave",e))},this.detach=function(){this.session.removeMarker(this.pos&&this.pos.markerId),this.hideOtherMarkers(),this.doc.removeEventListener("change",this.$onUpdate),this.session.selection.removeEventListener("changeCursor",this.$onCursorChange),this.session.setUndoSelect(!0),this.session=null},this.cancel=function(){if(this.$undoStackDepth===-1)return;var e=this.session.getUndoManager(),t=(e.$undoStack||e.$undostack).length-this.$undoStackDepth;for(var n=0;n1&&!this.inMultiSelectMode&&(this._signal("multiSelect"),this.inMultiSelectMode=!0,this.session.$undoSelect=!1,this.rangeList.attach(this.session)),t||this.fromOrientedRange(e)},this.toSingleRange=function(e){e=e||this.ranges[0];var t=this.rangeList.removeAll();t.length&&this.$onRemoveRange(t),e&&this.fromOrientedRange(e)},this.substractPoint=function(e){var t=this.rangeList.substractPoint(e);if(t)return this.$onRemoveRange(t),t[0]},this.mergeOverlappingRanges=function(){var e=this.rangeList.merge();e.length?this.$onRemoveRange(e):this.ranges[0]&&this.fromOrientedRange(this.ranges[0])},this.$onAddRange=function(e){this.rangeCount=this.rangeList.ranges.length,this.ranges.unshift(e),this._signal("addRange",{range:e})},this.$onRemoveRange=function(e){this.rangeCount=this.rangeList.ranges.length;if(this.rangeCount==1&&this.inMultiSelectMode){var t=this.rangeList.ranges.pop();e.push(t),this.rangeCount=0}for(var n=e.length;n--;){var r=this.ranges.indexOf(e[n]);this.ranges.splice(r,1)}this._signal("removeRange",{ranges:e}),this.rangeCount===0&&this.inMultiSelectMode&&(this.inMultiSelectMode=!1,this._signal("singleSelect"),this.session.$undoSelect=!0,this.rangeList.detach(this.session)),t=t||this.ranges[0],t&&!t.isEqual(this.getRange())&&this.fromOrientedRange(t)},this.$initRangeList=function(){if(this.rangeList)return;this.rangeList=new r,this.ranges=[],this.rangeCount=0},this.getAllRanges=function(){return this.rangeCount?this.rangeList.ranges.concat():[this.getRange()]},this.splitIntoLines=function(){if(this.rangeCount>1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var n=this.getRange(),r=this.isBackwards(),s=n.start.row,o=n.end.row;if(s==o){if(r)var u=n.end,a=n.start;else var u=n.start,a=n.end;this.addRange(i.fromPoints(a,a)),this.addRange(i.fromPoints(u,u));return}var f=[],l=this.getLineRange(s,!0);l.start.column=n.start.column,f.push(l);for(var c=s+1;c1){var e=this.rangeList.ranges,t=e[e.length-1],n=i.fromPoints(e[0].start,t.end);this.toSingleRange(),this.setSelectionRange(n,t.cursor==t.start)}else{var r=this.session.documentToScreenPosition(this.selectionLead),s=this.session.documentToScreenPosition(this.selectionAnchor),o=this.rectangularRangeBlock(r,s);o.forEach(this.addRange,this)}},this.rectangularRangeBlock=function(e,t,n){var r=[],s=e.column0)d--;if(d>0){var m=0;while(r[m].isEmpty())m++}for(var g=d;g>=m;g--)r[g].isEmpty()&&r.splice(g,1)}return r}}.call(s.prototype);var d=e("./editor").Editor;(function(){this.updateSelectionMarkers=function(){this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.addSelectionMarker=function(e){e.cursor||(e.cursor=e.end);var t=this.getSelectionStyle();return e.marker=this.session.addMarker(e,"ace_selection",t),this.session.$selectionMarkers.push(e),this.session.selectionMarkerCount=this.session.$selectionMarkers.length,e},this.removeSelectionMarker=function(e){if(!e.marker)return;this.session.removeMarker(e.marker);var t=this.session.$selectionMarkers.indexOf(e);t!=-1&&this.session.$selectionMarkers.splice(t,1),this.session.selectionMarkerCount=this.session.$selectionMarkers.length},this.removeSelectionMarkers=function(e){var t=this.session.$selectionMarkers;for(var n=e.length;n--;){var r=e[n];if(!r.marker)continue;this.session.removeMarker(r.marker);var i=t.indexOf(r);i!=-1&&t.splice(i,1)}this.session.selectionMarkerCount=t.length},this.$onAddRange=function(e){this.addSelectionMarker(e.range),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onRemoveRange=function(e){this.removeSelectionMarkers(e.ranges),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onMultiSelect=function(e){if(this.inMultiSelectMode)return;this.inMultiSelectMode=!0,this.setStyle("ace_multiselect"),this.keyBinding.addKeyboardHandler(f.keyboardHandler),this.commands.setDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers()},this.$onSingleSelect=function(e){if(this.session.multiSelect.inVirtualMode)return;this.inMultiSelectMode=!1,this.unsetStyle("ace_multiselect"),this.keyBinding.removeKeyboardHandler(f.keyboardHandler),this.commands.removeDefaultHandler("exec",this.$onMultiSelectExec),this.renderer.updateCursor(),this.renderer.updateBackMarkers(),this._emit("changeSelection")},this.$onMultiSelectExec=function(e){var t=e.command,n=e.editor;if(!n.multiSelect)return;if(!t.multiSelectAction){var r=t.exec(n,e.args||{});n.multiSelect.addRange(n.multiSelect.toOrientedRange()),n.multiSelect.mergeOverlappingRanges()}else t.multiSelectAction=="forEach"?r=n.forEachSelection(t,e.args):t.multiSelectAction=="forEachLine"?r=n.forEachSelection(t,e.args,!0):t.multiSelectAction=="single"?(n.exitMultiSelectMode(),r=t.exec(n,e.args||{})):r=t.multiSelectAction(n,e.args||{});return r},this.forEachSelection=function(e,t,n){if(this.inVirtualSelectionMode)return;var r=n&&n.keepOrder,i=n==1||n&&n.$byLines,o=this.session,u=this.selection,a=u.rangeList,f=(r?u:a).ranges,l;if(!f.length)return e.exec?e.exec(this,t||{}):e(this,t||{});var c=u._eventRegistry;u._eventRegistry={};var h=new s(o);this.inVirtualSelectionMode=!0;for(var p=f.length;p--;){if(i)while(p>0&&f[p].start.row==f[p-1].end.row)p--;h.fromOrientedRange(f[p]),h.index=p,this.selection=o.selection=h;var d=e.exec?e.exec(this,t||{}):e(this,t||{});!l&&d!==undefined&&(l=d),h.toOrientedRange(f[p])}h.detach(),this.selection=o.selection=u,this.inVirtualSelectionMode=!1,u._eventRegistry=c,u.mergeOverlappingRanges();var v=this.renderer.$scrollAnimation;return this.onCursorChange(),this.onSelectionChange(),v&&v.from==v.to&&this.renderer.animateScrolling(v.from),l},this.exitMultiSelectMode=function(){if(!this.inMultiSelectMode||this.inVirtualSelectionMode)return;this.multiSelect.toSingleRange()},this.getSelectedText=function(){var e="";if(this.inMultiSelectMode&&!this.inVirtualSelectionMode){var t=this.multiSelect.rangeList.ranges,n=[];for(var r=0;r0);u<0&&(u=0),f>=c&&(f=c-1)}var p=this.session.removeFullLines(u,f);p=this.$reAlignText(p,l),this.session.insert({row:u,column:0},p.join("\n")+"\n"),l||(o.start.column=0,o.end.column=p[p.length-1].length),this.selection.setRange(o)}else{s.forEach(function(e){t.substractPoint(e.cursor)});var d=0,v=Infinity,m=n.map(function(t){var n=t.cursor,r=e.getLine(n.row),i=r.substr(n.column).search(/\S/g);return i==-1&&(i=0),n.column>d&&(d=n.column),io?e.insert(r,a.stringRepeat(" ",s-o)):e.remove(new i(r.row,r.column,r.row,r.column-s+o)),t.start.column=t.end.column=d,t.start.row=t.end.row=r.row,t.cursor=t.end}),t.fromOrientedRange(n[0]),this.renderer.updateCursor(),this.renderer.updateBackMarkers()}},this.$reAlignText=function(e,t){function u(e){return a.stringRepeat(" ",e)}function f(e){return e[2]?u(i)+e[2]+u(s-e[2].length+o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function l(e){return e[2]?u(i+s-e[2].length)+e[2]+u(o," ")+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}function c(e){return e[2]?u(i)+e[2]+u(o)+e[4].replace(/^([=:])\s+/,"$1 "):e[0]}var n=!0,r=!0,i,s,o;return e.map(function(e){var t=e.match(/(\s*)(.*?)(\s*)([=:].*)/);return t?i==null?(i=t[1].length,s=t[2].length,o=t[3].length,t):(i+s+o!=t[1].length+t[2].length+t[3].length&&(r=!1),i!=t[1].length&&(n=!1),i>t[1].length&&(i=t[1].length),st[3].length&&(o=t[3].length),t):[e]}).map(t?f:n?r?l:f:c)}}).call(d.prototype),t.onSessionChange=function(e){var t=e.session;t&&!t.multiSelect&&(t.$selectionMarkers=[],t.selection.$initRangeList(),t.multiSelect=t.selection),this.multiSelect=t&&t.multiSelect;var n=e.oldSession;n&&(n.multiSelect.off("addRange",this.$onAddRange),n.multiSelect.off("removeRange",this.$onRemoveRange),n.multiSelect.off("multiSelect",this.$onMultiSelect),n.multiSelect.off("singleSelect",this.$onSingleSelect),n.multiSelect.lead.off("change",this.$checkMultiselectChange),n.multiSelect.anchor.off("change",this.$checkMultiselectChange)),t&&(t.multiSelect.on("addRange",this.$onAddRange),t.multiSelect.on("removeRange",this.$onRemoveRange),t.multiSelect.on("multiSelect",this.$onMultiSelect),t.multiSelect.on("singleSelect",this.$onSingleSelect),t.multiSelect.lead.on("change",this.$checkMultiselectChange),t.multiSelect.anchor.on("change",this.$checkMultiselectChange)),t&&this.inMultiSelectMode!=t.selection.inMultiSelectMode&&(t.selection.inMultiSelectMode?this.$onMultiSelect():this.$onSingleSelect())},t.MultiSelect=m,e("./config").defineOptions(d.prototype,"editor",{enableMultiselect:{set:function(e){m(this),e?(this.on("changeSession",this.$multiselectOnSessionChange),this.on("mousedown",o)):(this.off("changeSession",this.$multiselectOnSessionChange),this.off("mousedown",o))},value:!0},enableBlockSelect:{set:function(e){this.$blockSelectEnabled=e},value:!0}})}),ace.define("ace/mode/folding/fold_mode",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../../range").Range,i=t.FoldMode=function(){};(function(){this.foldingStartMarker=null,this.foldingStopMarker=null,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);return this.foldingStartMarker.test(r)?"start":t=="markbeginend"&&this.foldingStopMarker&&this.foldingStopMarker.test(r)?"end":""},this.getFoldWidgetRange=function(e,t,n){return null},this.indentationBlock=function(e,t,n){var i=/\S/,s=e.getLine(t),o=s.search(i);if(o==-1)return;var u=n||s.length,a=e.getLength(),f=t,l=t;while(++tf){var h=e.getLine(l).length;return new r(f,u,l,h)}},this.openingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i+1},u=e.$findClosingBracket(t,o,s);if(!u)return;var a=e.foldWidgets[u.row];return a==null&&(a=e.getFoldWidget(u.row)),a=="start"&&u.row>o.row&&(u.row--,u.column=e.getLine(u.row).length),r.fromPoints(o,u)},this.closingBracketBlock=function(e,t,n,i,s){var o={row:n,column:i},u=e.$findOpeningBracket(t,o);if(!u)return;return u.column++,o.column--,r.fromPoints(u,o)}}).call(i.prototype)}),ace.define("ace/theme/textmate",["require","exports","module","ace/lib/dom"],function(e,t,n){"use strict";t.isDark=!1,t.cssClass="ace-tm",t.cssText='.ace-tm .ace_gutter {background: #f0f0f0;color: #333;}.ace-tm .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-tm .ace_fold {background-color: #6B72E6;}.ace-tm {background-color: #FFFFFF;color: black;}.ace-tm .ace_cursor {color: black;}.ace-tm .ace_invisible {color: rgb(191, 191, 191);}.ace-tm .ace_storage,.ace-tm .ace_keyword {color: blue;}.ace-tm .ace_constant {color: rgb(197, 6, 11);}.ace-tm .ace_constant.ace_buildin {color: rgb(88, 72, 246);}.ace-tm .ace_constant.ace_language {color: rgb(88, 92, 246);}.ace-tm .ace_constant.ace_library {color: rgb(6, 150, 14);}.ace-tm .ace_invalid {background-color: rgba(255, 0, 0, 0.1);color: red;}.ace-tm .ace_support.ace_function {color: rgb(60, 76, 114);}.ace-tm .ace_support.ace_constant {color: rgb(6, 150, 14);}.ace-tm .ace_support.ace_type,.ace-tm .ace_support.ace_class {color: rgb(109, 121, 222);}.ace-tm .ace_keyword.ace_operator {color: rgb(104, 118, 135);}.ace-tm .ace_string {color: rgb(3, 106, 7);}.ace-tm .ace_comment {color: rgb(76, 136, 107);}.ace-tm .ace_comment.ace_doc {color: rgb(0, 102, 255);}.ace-tm .ace_comment.ace_doc.ace_tag {color: rgb(128, 159, 191);}.ace-tm .ace_constant.ace_numeric {color: rgb(0, 0, 205);}.ace-tm .ace_variable {color: rgb(49, 132, 149);}.ace-tm .ace_xml-pe {color: rgb(104, 104, 91);}.ace-tm .ace_entity.ace_name.ace_function {color: #0000A2;}.ace-tm .ace_heading {color: rgb(12, 7, 255);}.ace-tm .ace_list {color:rgb(185, 6, 144);}.ace-tm .ace_meta.ace_tag {color:rgb(0, 22, 142);}.ace-tm .ace_string.ace_regex {color: rgb(255, 0, 0)}.ace-tm .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-tm.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-tm .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-tm .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-tm .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-tm .ace_marker-layer .ace_active-line {background: rgba(0, 0, 0, 0.07);}.ace-tm .ace_gutter-active-line {background-color : #dcdcdc;}.ace-tm .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-tm .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}),ace.define("ace/line_widgets",["require","exports","module","ace/lib/oop","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e){this.session=e,this.session.widgetManager=this,this.session.getRowLength=this.getRowLength,this.session.$getWidgetScreenLength=this.$getWidgetScreenLength,this.updateOnChange=this.updateOnChange.bind(this),this.renderWidgets=this.renderWidgets.bind(this),this.measureWidgets=this.measureWidgets.bind(this),this.session._changedWidgets=[],this.$onChangeEditor=this.$onChangeEditor.bind(this),this.session.on("change",this.updateOnChange),this.session.on("changeFold",this.updateOnFold),this.session.on("changeEditor",this.$onChangeEditor)}var r=e("./lib/oop"),i=e("./lib/dom"),s=e("./range").Range;(function(){this.getRowLength=function(e){var t;return this.lineWidgets?t=this.lineWidgets[e]&&this.lineWidgets[e].rowCount||0:t=0,!this.$useWrapMode||!this.$wrapData[e]?1+t:this.$wrapData[e].length+1+t},this.$getWidgetScreenLength=function(){var e=0;return this.lineWidgets.forEach(function(t){t&&t.rowCount&&!t.hidden&&(e+=t.rowCount)}),e},this.$onChangeEditor=function(e){this.attach(e.editor)},this.attach=function(e){e&&e.widgetManager&&e.widgetManager!=this&&e.widgetManager.detach();if(this.editor==e)return;this.detach(),this.editor=e,e&&(e.widgetManager=this,e.renderer.on("beforeRender",this.measureWidgets),e.renderer.on("afterRender",this.renderWidgets))},this.detach=function(e){var t=this.editor;if(!t)return;this.editor=null,t.widgetManager=null,t.renderer.off("beforeRender",this.measureWidgets),t.renderer.off("afterRender",this.renderWidgets);var n=this.session.lineWidgets;n&&n.forEach(function(e){e&&e.el&&e.el.parentNode&&(e._inDocument=!1,e.el.parentNode.removeChild(e.el))})},this.updateOnFold=function(e,t){var n=t.lineWidgets;if(!n||!e.action)return;var r=e.data,i=r.start.row,s=r.end.row,o=e.action=="add";for(var u=i+1;u0&&!r[i])i--;this.firstRow=n.firstRow,this.lastRow=n.lastRow,t.$cursorLayer.config=n;for(var o=i;o<=s;o++){var u=r[o];if(!u||!u.el)continue;if(u.hidden){u.el.style.top=-100-(u.pixelHeight||0)+"px";continue}u._inDocument||(u._inDocument=!0,t.container.appendChild(u.el));var a=t.$cursorLayer.getPixelPosition({row:o,column:0},!0).top;u.coverLine||(a+=n.lineHeight*this.session.getRowLineCount(u.row)),u.el.style.top=a-n.offset+"px";var f=u.coverGutter?0:t.gutterWidth;u.fixedWidth||(f-=t.scrollLeft),u.el.style.left=f+"px",u.fullWidth&&u.screenWidth&&(u.el.style.minWidth=n.width+2*n.padding+"px"),u.fixedWidth?u.el.style.right=t.scrollBar.getWidth()+"px":u.el.style.right=""}}}).call(o.prototype),t.LineWidgets=o}),ace.define("ace/ext/error_marker",["require","exports","module","ace/line_widgets","ace/lib/dom","ace/range"],function(e,t,n){"use strict";function o(e,t,n){var r=0,i=e.length-1;while(r<=i){var s=r+i>>1,o=n(t,e[s]);if(o>0)r=s+1;else{if(!(o<0))return s;i=s-1}}return-(r+1)}function u(e,t,n){var r=e.getAnnotations().sort(s.comparePoints);if(!r.length)return;var i=o(r,{row:t,column:-1},s.comparePoints);i<0&&(i=-i-1),i>=r.length?i=n>0?0:r.length-1:i===0&&n<0&&(i=r.length-1);var u=r[i];if(!u||!n)return;if(u.row===t){do u=r[i+=n];while(u&&u.row===t);if(!u)return r.slice()}var a=[];t=u.row;do a[n<0?"unshift":"push"](u),u=r[i+=n];while(u&&u.row==t);return a.length&&a}var r=e("../line_widgets").LineWidgets,i=e("../lib/dom"),s=e("../range").Range;t.showErrorMarker=function(e,t){var n=e.session;n.widgetManager||(n.widgetManager=new r(n),n.widgetManager.attach(e));var s=e.getCursorPosition(),o=s.row,a=n.widgetManager.getWidgetsAtRow(o).filter(function(e){return e.type=="errorMarker"})[0];a?a.destroy():o-=t;var f=u(n,o,t),l;if(f){var c=f[0];s.column=(c.pos&&typeof c.column!="number"?c.pos.sc:c.column)||0,s.row=c.row,l=e.renderer.$gutterLayer.$annotations[s.row]}else{if(a)return;l={text:["Looks good!"],className:"ace_ok"}}e.session.unfold(s.row),e.selection.moveToPosition(s);var h={row:s.row,fixedWidth:!0,coverGutter:!0,el:i.createElement("div"),type:"errorMarker"},p=h.el.appendChild(i.createElement("div")),d=h.el.appendChild(i.createElement("div"));d.className="error_widget_arrow "+l.className;var v=e.renderer.$cursorLayer.getPixelPosition(s).left;d.style.left=v+e.renderer.gutterWidth-5+"px",h.el.className="error_widget_wrapper",p.className="error_widget "+l.className,p.innerHTML=l.text.join("
      "),p.appendChild(i.createElement("div"));var m=function(e,t,n){if(t===0&&(n==="esc"||n==="return"))return h.destroy(),{command:"null"}};h.destroy=function(){if(e.$mouseHandler.isMousePressed)return;e.keyBinding.removeKeyboardHandler(m),n.widgetManager.removeLineWidget(h),e.off("changeSelection",h.destroy),e.off("changeSession",h.destroy),e.off("mouseup",h.destroy),e.off("change",h.destroy)},e.keyBinding.addKeyboardHandler(m),e.on("changeSelection",h.destroy),e.on("changeSession",h.destroy),e.on("mouseup",h.destroy),e.on("change",h.destroy),e.session.widgetManager.addLineWidget(h),h.el.onmousedown=e.focus.bind(e),e.renderer.scrollCursorIntoView(null,.5,{bottom:h.el.offsetHeight})},i.importCssString(" .error_widget_wrapper { background: inherit; color: inherit; border:none } .error_widget { border-top: solid 2px; border-bottom: solid 2px; margin: 5px 0; padding: 10px 40px; white-space: pre-wrap; } .error_widget.ace_error, .error_widget_arrow.ace_error{ border-color: #ff5a5a } .error_widget.ace_warning, .error_widget_arrow.ace_warning{ border-color: #F1D817 } .error_widget.ace_info, .error_widget_arrow.ace_info{ border-color: #5a5a5a } .error_widget.ace_ok, .error_widget_arrow.ace_ok{ border-color: #5aaa5a } .error_widget_arrow { position: absolute; border: solid 5px; border-top-color: transparent!important; border-right-color: transparent!important; border-left-color: transparent!important; top: -5px; }","")}),ace.define("ace/ace",["require","exports","module","ace/lib/fixoldbrowsers","ace/lib/dom","ace/lib/event","ace/editor","ace/edit_session","ace/undomanager","ace/virtual_renderer","ace/worker/worker_client","ace/keyboard/hash_handler","ace/placeholder","ace/multi_select","ace/mode/folding/fold_mode","ace/theme/textmate","ace/ext/error_marker","ace/config"],function(e,t,n){"use strict";e("./lib/fixoldbrowsers");var r=e("./lib/dom"),i=e("./lib/event"),s=e("./editor").Editor,o=e("./edit_session").EditSession,u=e("./undomanager").UndoManager,a=e("./virtual_renderer").VirtualRenderer;e("./worker/worker_client"),e("./keyboard/hash_handler"),e("./placeholder"),e("./multi_select"),e("./mode/folding/fold_mode"),e("./theme/textmate"),e("./ext/error_marker"),t.config=e("./config"),t.require=e,t.edit=function(e){if(typeof e=="string"){var n=e;e=document.getElementById(n);if(!e)throw new Error("ace.edit can't find div #"+n)}if(e&&e.env&&e.env.editor instanceof s)return e.env.editor;var o="";if(e&&/input|textarea/i.test(e.tagName)){var u=e;o=u.value,e=r.createElement("pre"),u.parentNode.replaceChild(e,u)}else e&&(o=r.getInnerText(e),e.innerHTML="");var f=t.createEditSession(o),l=new s(new a(e));l.setSession(f);var c={document:f,editor:l,onResize:l.resize.bind(l,null)};return u&&(c.textarea=u),i.addListener(window,"resize",c.onResize),l.on("destroy",function(){i.removeListener(window,"resize",c.onResize),c.editor.container.env=null}),l.container.env=l.env=c,l},t.createEditSession=function(e,t){var n=new o(e,t);return n.setUndoManager(new u),n},t.EditSession=o,t.UndoManager=u,t.version="1.2.3"}); - (function() { - ace.require(["ace/ace"], function(a) { - a && a.config.init(true); - if (!window.ace) - window.ace = a; - for (var key in a) if (a.hasOwnProperty(key)) - window.ace[key] = a[key]; - }); - })(); - \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/mode-javascript.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/mode-javascript.js deleted file mode 100644 index 26a8bdc86..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/mode-javascript.js +++ /dev/null @@ -1 +0,0 @@ -ace.define("ace/mode/doc_comment_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text_highlight_rules").TextHighlightRules,s=function(){this.$rules={start:[{token:"comment.doc.tag",regex:"@[\\w\\d_]+"},s.getTagRule(),{defaultToken:"comment.doc",caseInsensitive:!0}]}};r.inherits(s,i),s.getTagRule=function(e){return{token:"comment.doc.tag.storage.type",regex:"\\b(?:TODO|FIXME|XXX|HACK)\\b"}},s.getStartRule=function(e){return{token:"comment.doc",regex:"\\/\\*(?=\\*)",next:e}},s.getEndRule=function(e){return{token:"comment.doc",regex:"\\*\\/",next:e}},t.DocCommentHighlightRules=s}),ace.define("ace/mode/javascript_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/doc_comment_highlight_rules","ace/mode/text_highlight_rules"],function(e,t,n){"use strict";function a(){var e=o.replace("\\d","\\d\\-"),t={onMatch:function(e,t,n){var r=e.charAt(1)=="/"?2:1;if(r==1)t!=this.nextState?n.unshift(this.next,this.nextState,0):n.unshift(this.next),n[2]++;else if(r==2&&t==this.nextState){n[1]--;if(!n[1]||n[1]<0)n.shift(),n.shift()}return[{type:"meta.tag.punctuation."+(r==1?"":"end-")+"tag-open.xml",value:e.slice(0,r)},{type:"meta.tag.tag-name.xml",value:e.substr(r)}]},regex:"",onMatch:function(e,t,n){return t==n[0]&&n.shift(),e.length==2&&(n[0]==this.nextState&&n[1]--,(!n[1]||n[1]<0)&&n.splice(0,2)),this.next=n[0]||"start",[{type:this.token,value:e}]},nextState:"jsx"},n,f("jsxAttributes"),{token:"entity.other.attribute-name.xml",regex:e},{token:"keyword.operator.attribute-equals.xml",regex:"="},{token:"text.tag-whitespace.xml",regex:"\\s+"},{token:"string.attribute-value.xml",regex:"'",stateName:"jsx_attr_q",push:[{token:"string.attribute-value.xml",regex:"'",next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},{token:"string.attribute-value.xml",regex:'"',stateName:"jsx_attr_qq",push:[{token:"string.attribute-value.xml",regex:'"',next:"pop"},{include:"reference"},{defaultToken:"string.attribute-value.xml"}]},t],this.$rules.reference=[{token:"constant.language.escape.reference.xml",regex:"(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)"}]}function f(e){return[{token:"comment",regex:/\/\*/,next:[i.getTagRule(),{token:"comment",regex:"\\*\\/",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]},{token:"comment",regex:"\\/\\/",next:[i.getTagRule(),{token:"comment",regex:"$|^",next:e||"pop"},{defaultToken:"comment",caseInsensitive:!0}]}]}var r=e("../lib/oop"),i=e("./doc_comment_highlight_rules").DocCommentHighlightRules,s=e("./text_highlight_rules").TextHighlightRules,o="[a-zA-Z\\$_\u00a1-\uffff][a-zA-Z\\d\\$_\u00a1-\uffff]*\\b",u=function(e){var t=this.createKeywordMapper({"variable.language":"Array|Boolean|Date|Function|Iterator|Number|Object|RegExp|String|Proxy|Namespace|QName|XML|XMLList|ArrayBuffer|Float32Array|Float64Array|Int16Array|Int32Array|Int8Array|Uint16Array|Uint32Array|Uint8Array|Uint8ClampedArray|Error|EvalError|InternalError|RangeError|ReferenceError|StopIteration|SyntaxError|TypeError|URIError|decodeURI|decodeURIComponent|encodeURI|encodeURIComponent|eval|isFinite|isNaN|parseFloat|parseInt|JSON|Math|this|arguments|prototype|window|document",keyword:"const|yield|import|get|set|break|case|catch|continue|default|delete|do|else|finally|for|function|if|in|instanceof|new|return|switch|throw|try|typeof|let|var|while|with|debugger|__parent__|__count__|escape|unescape|with|__proto__|class|enum|extends|super|export|implements|private|public|interface|package|protected|static","storage.type":"const|let|var|function","constant.language":"null|Infinity|NaN|undefined","support.function":"alert","constant.language.boolean":"true|false"},"identifier"),n="case|do|else|finally|in|instanceof|return|throw|try|typeof|yield|void",r="\\\\(?:x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|u{[0-9a-fA-F]{1,6}}|[0-2][0-7]{0,2}|3[0-7][0-7]?|[4-7][0-7]?|.)";this.$rules={no_regex:[i.getStartRule("doc-start"),f("no_regex"),{token:"string",regex:"'(?=.)",next:"qstring"},{token:"string",regex:'"(?=.)',next:"qqstring"},{token:"constant.numeric",regex:/0(?:[xX][0-9a-fA-F]+|[bB][01]+)\b/},{token:"constant.numeric",regex:/[+-]?\d[\d_]*(?:(?:\.\d*)?(?:[eE][+-]?\d+)?)?\b/},{token:["storage.type","punctuation.operator","support.function","punctuation.operator","entity.name.function","text","keyword.operator"],regex:"("+o+")(\\.)(prototype)(\\.)("+o+")(\\s*)(=)",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","keyword.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(=)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(\\s+)(\\w+)(\\s*)(\\()",next:"function_arguments"},{token:["storage.type","text","entity.name.function","text","paren.lparen"],regex:"(function)(\\s+)("+o+")(\\s*)(\\()",next:"function_arguments"},{token:["entity.name.function","text","punctuation.operator","text","storage.type","text","paren.lparen"],regex:"("+o+")(\\s*)(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:["text","text","storage.type","text","paren.lparen"],regex:"(:)(\\s*)(function)(\\s*)(\\()",next:"function_arguments"},{token:"keyword",regex:"(?:"+n+")\\b",next:"start"},{token:["support.constant"],regex:/that\b/},{token:["storage.type","punctuation.operator","support.function.firebug"],regex:/(console)(\.)(warn|info|log|error|time|trace|timeEnd|assert)\b/},{token:t,regex:o},{token:"punctuation.operator",regex:/[.](?![.])/,next:"property"},{token:"keyword.operator",regex:/--|\+\+|\.{3}|===|==|=|!=|!==|<+=?|>+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/,next:"start"},{token:"punctuation.operator",regex:/[?:,;.]/,next:"start"},{token:"paren.lparen",regex:/[\[({]/,next:"start"},{token:"paren.rparen",regex:/[\])}]/},{token:"comment",regex:/^#!.*$/}],property:[{token:"text",regex:"\\s+"},{token:["storage.type","punctuation.operator","entity.name.function","text","keyword.operator","text","storage.type","text","entity.name.function","text","paren.lparen"],regex:"("+o+")(\\.)("+o+")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()",next:"function_arguments"},{token:"punctuation.operator",regex:/[.](?![.])/},{token:"support.function",regex:/(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/},{token:"support.function.dom",regex:/(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/},{token:"support.constant",regex:/(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/},{token:"identifier",regex:o},{regex:"",token:"empty",next:"no_regex"}],start:[i.getStartRule("doc-start"),f("start"),{token:"string.regexp",regex:"\\/",next:"regex"},{token:"text",regex:"\\s+|^$",next:"start"},{token:"empty",regex:"",next:"no_regex"}],regex:[{token:"regexp.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"string.regexp",regex:"/[sxngimy]*",next:"no_regex"},{token:"invalid",regex:/\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/},{token:"constant.language.escape",regex:/\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/},{token:"constant.language.delimiter",regex:/\|/},{token:"constant.language.escape",regex:/\[\^?/,next:"regex_character_class"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp"}],regex_character_class:[{token:"regexp.charclass.keyword.operator",regex:"\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)"},{token:"constant.language.escape",regex:"]",next:"regex"},{token:"constant.language.escape",regex:"-"},{token:"empty",regex:"$",next:"no_regex"},{defaultToken:"string.regexp.charachterclass"}],function_arguments:[{token:"variable.parameter",regex:o},{token:"punctuation.operator",regex:"[, ]+"},{token:"punctuation.operator",regex:"$"},{token:"empty",regex:"",next:"no_regex"}],qqstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qqstring"},{token:"string",regex:'"|$',next:"no_regex"},{defaultToken:"string"}],qstring:[{token:"constant.language.escape",regex:r},{token:"string",regex:"\\\\$",next:"qstring"},{token:"string",regex:"'|$",next:"no_regex"},{defaultToken:"string"}]};if(!e||!e.noES6)this.$rules.no_regex.unshift({regex:"[{}]",onMatch:function(e,t,n){this.next=e=="{"?this.nextState:"";if(e=="{"&&n.length)n.unshift("start",t);else if(e=="}"&&n.length){n.shift(),this.next=n.shift();if(this.next.indexOf("string")!=-1||this.next.indexOf("jsx")!=-1)return"paren.quasi.end"}return e=="{"?"paren.lparen":"paren.rparen"},nextState:"start"},{token:"string.quasi.start",regex:/`/,push:[{token:"constant.language.escape",regex:r},{token:"paren.quasi.start",regex:/\${/,push:"start"},{token:"string.quasi.end",regex:/`/,next:"pop"},{defaultToken:"string.quasi"}]}),(!e||!e.noJSX)&&a.call(this);this.embedRules(i,"doc-",[i.getEndRule("no_regex")]),this.normalizeRules()};r.inherits(u,s),t.JavaScriptHighlightRules=u}),ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"],function(e,t,n){"use strict";var r=e("../range").Range,i=function(){};(function(){this.checkOutdent=function(e,t){return/^\s+$/.test(e)?/^\s*\}/.test(t):!1},this.autoOutdent=function(e,t){var n=e.getLine(t),i=n.match(/^(\s*\})/);if(!i)return 0;var s=i[1].length,o=e.findMatchingBracket({row:t,column:s});if(!o||o.row==t)return 0;var u=this.$getIndent(e.getLine(o.row));e.replace(new r(t,0,t,s-1),u)},this.$getIndent=function(e){return e.match(/^\s*/)[0]}}).call(i.prototype),t.MatchingBraceOutdent=i}),ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../behaviour").Behaviour,s=e("../../token_iterator").TokenIterator,o=e("../../lib/lang"),u=["text","paren.rparen","punctuation.operator"],a=["text","paren.rparen","punctuation.operator","comment"],f,l={},c=function(e){var t=-1;e.multiSelect&&(t=e.selection.index,l.rangeCount!=e.multiSelect.rangeCount&&(l={rangeCount:e.multiSelect.rangeCount}));if(l[t])return f=l[t];f=l[t]={autoInsertedBrackets:0,autoInsertedRow:-1,autoInsertedLineEnd:"",maybeInsertedBrackets:0,maybeInsertedRow:-1,maybeInsertedLineStart:"",maybeInsertedLineEnd:""}},h=function(e,t,n,r){var i=e.end.row-e.start.row;return{text:n+t+r,selection:[0,e.start.column+1,i,e.end.column+(i?0:1)]}},p=function(){this.add("braces","insertion",function(e,t,n,r,i){var s=n.getCursorPosition(),u=r.doc.getLine(s.row);if(i=="{"){c(n);var a=n.getSelectionRange(),l=r.doc.getTextRange(a);if(l!==""&&l!=="{"&&n.getWrapBehavioursEnabled())return h(a,l,"{","}");if(p.isSaneInsertion(n,r))return/[\]\}\)]/.test(u[s.column])||n.inMultiSelectMode?(p.recordAutoInsert(n,r,"}"),{text:"{}",selection:[1,1]}):(p.recordMaybeInsert(n,r,"{"),{text:"{",selection:[1,1]})}else if(i=="}"){c(n);var d=u.substring(s.column,s.column+1);if(d=="}"){var v=r.$findOpeningBracket("}",{column:s.column+1,row:s.row});if(v!==null&&p.isAutoInsertedClosing(s,u,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}else{if(i=="\n"||i=="\r\n"){c(n);var m="";p.isMaybeInsertedClosing(s,u)&&(m=o.stringRepeat("}",f.maybeInsertedBrackets),p.clearMaybeInsertedClosing());var d=u.substring(s.column,s.column+1);if(d==="}"){var g=r.findMatchingBracket({row:s.row,column:s.column+1},"}");if(!g)return null;var y=this.$getIndent(r.getLine(g.row))}else{if(!m){p.clearMaybeInsertedClosing();return}var y=this.$getIndent(u)}var b=y+r.getTabString();return{text:"\n"+b+"\n"+y+m,selection:[1,b.length,1,b.length]}}p.clearMaybeInsertedClosing()}}),this.add("braces","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="{"){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.end.column,i.end.column+1);if(u=="}")return i.end.column++,i;f.maybeInsertedBrackets--}}),this.add("parens","insertion",function(e,t,n,r,i){if(i=="("){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"(",")");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,")"),{text:"()",selection:[1,1]}}else if(i==")"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f==")"){var l=r.$findOpeningBracket(")",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("parens","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="("){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==")")return i.end.column++,i}}),this.add("brackets","insertion",function(e,t,n,r,i){if(i=="["){c(n);var s=n.getSelectionRange(),o=r.doc.getTextRange(s);if(o!==""&&n.getWrapBehavioursEnabled())return h(s,o,"[","]");if(p.isSaneInsertion(n,r))return p.recordAutoInsert(n,r,"]"),{text:"[]",selection:[1,1]}}else if(i=="]"){c(n);var u=n.getCursorPosition(),a=r.doc.getLine(u.row),f=a.substring(u.column,u.column+1);if(f=="]"){var l=r.$findOpeningBracket("]",{column:u.column+1,row:u.row});if(l!==null&&p.isAutoInsertedClosing(u,a,i))return p.popAutoInsertedClosing(),{text:"",selection:[1,1]}}}}),this.add("brackets","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&s=="["){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u=="]")return i.end.column++,i}}),this.add("string_dquotes","insertion",function(e,t,n,r,i){if(i=='"'||i=="'"){c(n);var s=i,o=n.getSelectionRange(),u=r.doc.getTextRange(o);if(u!==""&&u!=="'"&&u!='"'&&n.getWrapBehavioursEnabled())return h(o,u,s,s);if(!u){var a=n.getCursorPosition(),f=r.doc.getLine(a.row),l=f.substring(a.column-1,a.column),p=f.substring(a.column,a.column+1),d=r.getTokenAt(a.row,a.column),v=r.getTokenAt(a.row,a.column+1);if(l=="\\"&&d&&/escape/.test(d.type))return null;var m=d&&/string|escape/.test(d.type),g=!v||/string|escape/.test(v.type),y;if(p==s)y=m!==g;else{if(m&&!g)return null;if(m&&g)return null;var b=r.$mode.tokenRe;b.lastIndex=0;var w=b.test(l);b.lastIndex=0;var E=b.test(l);if(w||E)return null;if(p&&!/[\s;,.})\]\\]/.test(p))return null;y=!0}return{text:y?s+s:"",selection:[1,1]}}}}),this.add("string_dquotes","deletion",function(e,t,n,r,i){var s=r.doc.getTextRange(i);if(!i.isMultiLine()&&(s=='"'||s=="'")){c(n);var o=r.doc.getLine(i.start.row),u=o.substring(i.start.column+1,i.start.column+2);if(u==s)return i.end.column++,i}})};p.isSaneInsertion=function(e,t){var n=e.getCursorPosition(),r=new s(t,n.row,n.column);if(!this.$matchTokenType(r.getCurrentToken()||"text",u)){var i=new s(t,n.row,n.column+1);if(!this.$matchTokenType(i.getCurrentToken()||"text",u))return!1}return r.stepForward(),r.getCurrentTokenRow()!==n.row||this.$matchTokenType(r.getCurrentToken()||"text",a)},p.$matchTokenType=function(e,t){return t.indexOf(e.type||e)>-1},p.recordAutoInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isAutoInsertedClosing(r,i,f.autoInsertedLineEnd[0])||(f.autoInsertedBrackets=0),f.autoInsertedRow=r.row,f.autoInsertedLineEnd=n+i.substr(r.column),f.autoInsertedBrackets++},p.recordMaybeInsert=function(e,t,n){var r=e.getCursorPosition(),i=t.doc.getLine(r.row);this.isMaybeInsertedClosing(r,i)||(f.maybeInsertedBrackets=0),f.maybeInsertedRow=r.row,f.maybeInsertedLineStart=i.substr(0,r.column)+n,f.maybeInsertedLineEnd=i.substr(r.column),f.maybeInsertedBrackets++},p.isAutoInsertedClosing=function(e,t,n){return f.autoInsertedBrackets>0&&e.row===f.autoInsertedRow&&n===f.autoInsertedLineEnd[0]&&t.substr(e.column)===f.autoInsertedLineEnd},p.isMaybeInsertedClosing=function(e,t){return f.maybeInsertedBrackets>0&&e.row===f.maybeInsertedRow&&t.substr(e.column)===f.maybeInsertedLineEnd&&t.substr(0,e.column)==f.maybeInsertedLineStart},p.popAutoInsertedClosing=function(){f.autoInsertedLineEnd=f.autoInsertedLineEnd.substr(1),f.autoInsertedBrackets--},p.clearMaybeInsertedClosing=function(){f&&(f.maybeInsertedBrackets=0,f.maybeInsertedRow=-1)},r.inherits(p,i),t.CstyleBehaviour=p}),ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"],function(e,t,n){"use strict";var r=e("../../lib/oop"),i=e("../../range").Range,s=e("./fold_mode").FoldMode,o=t.FoldMode=function(e){e&&(this.foldingStartMarker=new RegExp(this.foldingStartMarker.source.replace(/\|[^|]*?$/,"|"+e.start)),this.foldingStopMarker=new RegExp(this.foldingStopMarker.source.replace(/\|[^|]*?$/,"|"+e.end)))};r.inherits(o,s),function(){this.foldingStartMarker=/(\{|\[)[^\}\]]*$|^\s*(\/\*)/,this.foldingStopMarker=/^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/,this.singleLineBlockCommentRe=/^\s*(\/\*).*\*\/\s*$/,this.tripleStarBlockCommentRe=/^\s*(\/\*\*\*).*\*\/\s*$/,this.startRegionRe=/^\s*(\/\*|\/\/)#?region\b/,this._getFoldWidgetBase=this.getFoldWidget,this.getFoldWidget=function(e,t,n){var r=e.getLine(n);if(this.singleLineBlockCommentRe.test(r)&&!this.startRegionRe.test(r)&&!this.tripleStarBlockCommentRe.test(r))return"";var i=this._getFoldWidgetBase(e,t,n);return!i&&this.startRegionRe.test(r)?"start":i},this.getFoldWidgetRange=function(e,t,n,r){var i=e.getLine(n);if(this.startRegionRe.test(i))return this.getCommentRegionBlock(e,i,n);var s=i.match(this.foldingStartMarker);if(s){var o=s.index;if(s[1])return this.openingBracketBlock(e,s[1],n,o);var u=e.getCommentFoldRange(n,o+s[0].length,1);return u&&!u.isMultiLine()&&(r?u=this.getSectionRange(e,n):t!="all"&&(u=null)),u}if(t==="markbegin")return;var s=i.match(this.foldingStopMarker);if(s){var o=s.index+s[0].length;return s[1]?this.closingBracketBlock(e,s[1],n,o):e.getCommentFoldRange(n,o,-1)}},this.getSectionRange=function(e,t){var n=e.getLine(t),r=n.search(/\S/),s=t,o=n.length;t+=1;var u=t,a=e.getLength();while(++tf)break;var l=this.getFoldWidgetRange(e,"all",t);if(l){if(l.start.row<=s)break;if(l.isMultiLine())t=l.end.row;else if(r==f)break}u=t}return new i(s,o,u,e.getLine(u).length)},this.getCommentRegionBlock=function(e,t,n){var r=t.search(/\s*$/),s=e.getLength(),o=n,u=/^\s*(?:\/\*|\/\/|--)#?(end)?region\b/,a=1;while(++no)return new i(o,r,l,t.length)}}.call(o.prototype)}),ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"],function(e,t,n){"use strict";var r=e("../lib/oop"),i=e("./text").Mode,s=e("./javascript_highlight_rules").JavaScriptHighlightRules,o=e("./matching_brace_outdent").MatchingBraceOutdent,u=e("../range").Range,a=e("../worker/worker_client").WorkerClient,f=e("./behaviour/cstyle").CstyleBehaviour,l=e("./folding/cstyle").FoldMode,c=function(){this.HighlightRules=s,this.$outdent=new o,this.$behaviour=new f,this.foldingRules=new l};r.inherits(c,i),function(){this.lineCommentStart="//",this.blockComment={start:"/*",end:"*/"},this.getNextLineIndent=function(e,t,n){var r=this.$getIndent(t),i=this.getTokenizer().getLineTokens(t,e),s=i.tokens,o=i.state;if(s.length&&s[s.length-1].type=="comment")return r;if(e=="start"||e=="no_regex"){var u=t.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/);u&&(r+=n)}else if(e=="doc-start"){if(o=="start"||o=="no_regex")return"";var u=t.match(/^\s*(\/?)\*/);u&&(u[1]&&(r+=" "),r+="* ")}return r},this.checkOutdent=function(e,t,n){return this.$outdent.checkOutdent(t,n)},this.autoOutdent=function(e,t,n){this.$outdent.autoOutdent(t,n)},this.createWorker=function(e){var t=new a(["ace"],"ace/mode/javascript_worker","JavaScriptWorker");return t.attachToDocument(e.getDocument()),t.on("annotate",function(t){e.setAnnotations(t.data)}),t.on("terminate",function(){e.clearAnnotations()}),t},this.$id="ace/mode/javascript"}.call(c.prototype),t.Mode=c}) \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/theme-github.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/theme-github.js deleted file mode 100644 index 2401002c0..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/theme-github.js +++ /dev/null @@ -1 +0,0 @@ -ace.define("ace/theme/github",["require","exports","module","ace/lib/dom"],function(e,t,n){t.isDark=!1,t.cssClass="ace-github",t.cssText='.ace-github .ace_gutter {background: #e8e8e8;color: #AAA;}.ace-github {background: #fff;color: #000;}.ace-github .ace_keyword {font-weight: bold;}.ace-github .ace_string {color: #D14;}.ace-github .ace_variable.ace_class {color: teal;}.ace-github .ace_constant.ace_numeric {color: #099;}.ace-github .ace_constant.ace_buildin {color: #0086B3;}.ace-github .ace_support.ace_function {color: #0086B3;}.ace-github .ace_comment {color: #998;font-style: italic;}.ace-github .ace_variable.ace_language {color: #0086B3;}.ace-github .ace_paren {font-weight: bold;}.ace-github .ace_boolean {font-weight: bold;}.ace-github .ace_string.ace_regexp {color: #009926;font-weight: normal;}.ace-github .ace_variable.ace_instance {color: teal;}.ace-github .ace_constant.ace_language {font-weight: bold;}.ace-github .ace_cursor {color: black;}.ace-github.ace_focus .ace_marker-layer .ace_active-line {background: rgb(255, 255, 204);}.ace-github .ace_marker-layer .ace_active-line {background: rgb(245, 245, 245);}.ace-github .ace_marker-layer .ace_selection {background: rgb(181, 213, 255);}.ace-github.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px white;}.ace-github.ace_nobold .ace_line > span {font-weight: normal !important;}.ace-github .ace_marker-layer .ace_step {background: rgb(252, 255, 0);}.ace-github .ace_marker-layer .ace_stack {background: rgb(164, 229, 101);}.ace-github .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid rgb(192, 192, 192);}.ace-github .ace_gutter-active-line {background-color : rgba(0, 0, 0, 0.07);}.ace-github .ace_marker-layer .ace_selected-word {background: rgb(250, 250, 255);border: 1px solid rgb(200, 200, 250);}.ace-github .ace_invisible {color: #BFBFBF}.ace-github .ace_print-margin {width: 1px;background: #e8e8e8;}.ace-github .ace_indent-guide {background: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==") right repeat-y;}';var r=e("../lib/dom");r.importCssString(t.cssText,t.cssClass)}) \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/worker-javascript.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/worker-javascript.js deleted file mode 100644 index bca38f057..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/min/worker-javascript.js +++ /dev/null @@ -1 +0,0 @@ -"no use strict";(function(e){function t(e,t){var n=e,r="";while(n){var i=t[n];if(typeof i=="string")return i+r;if(i)return i.location.replace(/\/*$/,"/")+(r||i.main||i.name);if(i===!1)return"";var s=n.lastIndexOf("/");if(s===-1)break;r=n.substr(s)+r,n=n.slice(0,s)}return e}if(typeof e.window!="undefined"&&e.document)return;if(e.require&&e.define)return;e.console||(e.console=function(){var e=Array.prototype.slice.call(arguments,0);postMessage({type:"log",data:e})},e.console.error=e.console.warn=e.console.log=e.console.trace=e.console),e.window=e,e.ace=e,e.onerror=function(e,t,n,r,i){postMessage({type:"error",data:{message:e,data:i.data,file:t,line:n,col:r,stack:i.stack}})},e.normalizeModule=function(t,n){if(n.indexOf("!")!==-1){var r=n.split("!");return e.normalizeModule(t,r[0])+"!"+e.normalizeModule(t,r[1])}if(n.charAt(0)=="."){var i=t.split("/").slice(0,-1).join("/");n=(i?i+"/":"")+n;while(n.indexOf(".")!==-1&&s!=n){var s=n;n=n.replace(/^\.\//,"").replace(/\/\.\//,"/").replace(/[^\/]+\/\.\.\//,"")}}return n},e.require=function(r,i){i||(i=r,r=null);if(!i.charAt)throw new Error("worker.js require() accepts only (parentId, id) as arguments");i=e.normalizeModule(r,i);var s=e.require.modules[i];if(s)return s.initialized||(s.initialized=!0,s.exports=s.factory().exports),s.exports;if(!e.require.tlns)return console.log("unable to load "+i);var o=t(i,e.require.tlns);return o.slice(-3)!=".js"&&(o+=".js"),e.require.id=i,e.require.modules[i]={},importScripts(o),e.require(r,i)},e.require.modules={},e.require.tlns={},e.define=function(t,n,r){arguments.length==2?(r=n,typeof t!="string"&&(n=t,t=e.require.id)):arguments.length==1&&(r=t,n=[],t=e.require.id);if(typeof r!="function"){e.require.modules[t]={exports:r,initialized:!0};return}n.length||(n=["require","exports","module"]);var i=function(n){return e.require(t,n)};e.require.modules[t]={exports:{},factory:function(){var e=this,t=r.apply(this,n.map(function(t){switch(t){case"require":return i;case"exports":return e.exports;case"module":return e;default:return i(t)}}));return t&&(e.exports=t),e}}},e.define.amd={},require.tlns={},e.initBaseUrls=function(t){for(var n in t)require.tlns[n]=t[n]},e.initSender=function(){var n=e.require("ace/lib/event_emitter").EventEmitter,r=e.require("ace/lib/oop"),i=function(){};return function(){r.implement(this,n),this.callback=function(e,t){postMessage({type:"call",id:t,data:e})},this.emit=function(e,t){postMessage({type:"event",name:e,data:t})}}.call(i.prototype),new i};var n=e.main=null,r=e.sender=null;e.onmessage=function(t){var i=t.data;if(i.event&&r)r._signal(i.event,i.data);else if(i.command)if(n[i.command])n[i.command].apply(n,i.args);else{if(!e[i.command])throw new Error("Unknown command:"+i.command);e[i.command].apply(e,i.args)}else if(i.init){e.initBaseUrls(i.tlns),require("ace/lib/es5-shim"),r=e.sender=e.initSender();var s=require(i.module)[i.classname];n=e.main=new s(r)}}})(this),ace.define("ace/lib/oop",["require","exports","module"],function(e,t,n){"use strict";t.inherits=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})},t.mixin=function(e,t){for(var n in t)e[n]=t[n];return e},t.implement=function(e,n){t.mixin(e,n)}}),ace.define("ace/range",["require","exports","module"],function(e,t,n){"use strict";var r=function(e,t){return e.row-t.row||e.column-t.column},i=function(e,t,n,r){this.start={row:e,column:t},this.end={row:n,column:r}};(function(){this.isEqual=function(e){return this.start.row===e.start.row&&this.end.row===e.end.row&&this.start.column===e.start.column&&this.end.column===e.end.column},this.toString=function(){return"Range: ["+this.start.row+"/"+this.start.column+"] -> ["+this.end.row+"/"+this.end.column+"]"},this.contains=function(e,t){return this.compare(e,t)==0},this.compareRange=function(e){var t,n=e.end,r=e.start;return t=this.compare(n.row,n.column),t==1?(t=this.compare(r.row,r.column),t==1?2:t==0?1:0):t==-1?-2:(t=this.compare(r.row,r.column),t==-1?-1:t==1?42:0)},this.comparePoint=function(e){return this.compare(e.row,e.column)},this.containsRange=function(e){return this.comparePoint(e.start)==0&&this.comparePoint(e.end)==0},this.intersects=function(e){var t=this.compareRange(e);return t==-1||t==0||t==1},this.isEnd=function(e,t){return this.end.row==e&&this.end.column==t},this.isStart=function(e,t){return this.start.row==e&&this.start.column==t},this.setStart=function(e,t){typeof e=="object"?(this.start.column=e.column,this.start.row=e.row):(this.start.row=e,this.start.column=t)},this.setEnd=function(e,t){typeof e=="object"?(this.end.column=e.column,this.end.row=e.row):(this.end.row=e,this.end.column=t)},this.inside=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)||this.isStart(e,t)?!1:!0:!1},this.insideStart=function(e,t){return this.compare(e,t)==0?this.isEnd(e,t)?!1:!0:!1},this.insideEnd=function(e,t){return this.compare(e,t)==0?this.isStart(e,t)?!1:!0:!1},this.compare=function(e,t){return!this.isMultiLine()&&e===this.start.row?tthis.end.column?1:0:ethis.end.row?1:this.start.row===e?t>=this.start.column?0:-1:this.end.row===e?t<=this.end.column?0:1:0},this.compareStart=function(e,t){return this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.compareEnd=function(e,t){return this.end.row==e&&this.end.column==t?1:this.compare(e,t)},this.compareInside=function(e,t){return this.end.row==e&&this.end.column==t?1:this.start.row==e&&this.start.column==t?-1:this.compare(e,t)},this.clipRows=function(e,t){if(this.end.row>t)var n={row:t+1,column:0};else if(this.end.rowt)var r={row:t+1,column:0};else if(this.start.row=0&&t.row=0&&t.column<=e[t.row].length}function s(e,t){t.action!="insert"&&t.action!="remove"&&r(t,"delta.action must be 'insert' or 'remove'"),t.lines instanceof Array||r(t,"delta.lines must be an Array"),(!t.start||!t.end)&&r(t,"delta.start/end must be an present");var n=t.start;i(e,t.start)||r(t,"delta.start must be contained in document");var s=t.end;t.action=="remove"&&!i(e,s)&&r(t,"delta.end must contained in document for 'remove' actions");var o=s.row-n.row,u=s.column-(o==0?n.column:0);(o!=t.lines.length-1||t.lines[o].length!=u)&&r(t,"delta.range must match delta lines")}t.applyDelta=function(e,t,n){var r=t.start.row,i=t.start.column,s=e[r]||"";switch(t.action){case"insert":var o=t.lines;if(o.length===1)e[r]=s.substring(0,i)+t.lines[0]+s.substring(i);else{var u=[r,1].concat(t.lines);e.splice.apply(e,u),e[r]=s.substring(0,i)+e[r],e[r+t.lines.length-1]+=s.substring(i)}break;case"remove":var a=t.end.column,f=t.end.row;r===f?e[r]=s.substring(0,i)+s.substring(a):e.splice(r,f-r+1,s.substring(0,i)+e[f].substring(a))}}}),ace.define("ace/lib/event_emitter",["require","exports","module"],function(e,t,n){"use strict";var r={},i=function(){this.propagationStopped=!0},s=function(){this.defaultPrevented=!0};r._emit=r._dispatchEvent=function(e,t){this._eventRegistry||(this._eventRegistry={}),this._defaultHandlers||(this._defaultHandlers={});var n=this._eventRegistry[e]||[],r=this._defaultHandlers[e];if(!n.length&&!r)return;if(typeof t!="object"||!t)t={};t.type||(t.type=e),t.stopPropagation||(t.stopPropagation=i),t.preventDefault||(t.preventDefault=s),n=n.slice();for(var o=0;othis.row)return;var n=t(e,{row:this.row,column:this.column},this.$insertRight);this.setPosition(n.row,n.column,!0)},this.setPosition=function(e,t,n){var r;n?r={row:e,column:t}:r=this.$clipPositionToDocument(e,t);if(this.row==r.row&&this.column==r.column)return;var i={row:this.row,column:this.column};this.row=r.row,this.column=r.column,this._signal("change",{old:i,value:r})},this.detach=function(){this.document.removeEventListener("change",this.$onChange)},this.attach=function(e){this.document=e||this.document,this.document.on("change",this.$onChange)},this.$clipPositionToDocument=function(e,t){var n={};return e>=this.document.getLength()?(n.row=Math.max(0,this.document.getLength()-1),n.column=this.document.getLine(n.row).length):e<0?(n.row=0,n.column=0):(n.row=e,n.column=Math.min(this.document.getLine(n.row).length,Math.max(0,t))),t<0&&(n.column=0),n}}).call(s.prototype)}),ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"],function(e,t,n){"use strict";var r=e("./lib/oop"),i=e("./apply_delta").applyDelta,s=e("./lib/event_emitter").EventEmitter,o=e("./range").Range,u=e("./anchor").Anchor,a=function(e){this.$lines=[""],e.length===0?this.$lines=[""]:Array.isArray(e)?this.insertMergedLines({row:0,column:0},e):this.insert({row:0,column:0},e)};(function(){r.implement(this,s),this.setValue=function(e){var t=this.getLength()-1;this.remove(new o(0,0,t,this.getLine(t).length)),this.insert({row:0,column:0},e)},this.getValue=function(){return this.getAllLines().join(this.getNewLineCharacter())},this.createAnchor=function(e,t){return new u(this,e,t)},"aaa".split(/a/).length===0?this.$split=function(e){return e.replace(/\r\n|\r/g,"\n").split("\n")}:this.$split=function(e){return e.split(/\r\n|\r|\n/)},this.$detectNewLine=function(e){var t=e.match(/^.*?(\r\n|\r|\n)/m);this.$autoNewLine=t?t[1]:"\n",this._signal("changeNewLineMode")},this.getNewLineCharacter=function(){switch(this.$newLineMode){case"windows":return"\r\n";case"unix":return"\n";default:return this.$autoNewLine||"\n"}},this.$autoNewLine="",this.$newLineMode="auto",this.setNewLineMode=function(e){if(this.$newLineMode===e)return;this.$newLineMode=e,this._signal("changeNewLineMode")},this.getNewLineMode=function(){return this.$newLineMode},this.isNewLine=function(e){return e=="\r\n"||e=="\r"||e=="\n"},this.getLine=function(e){return this.$lines[e]||""},this.getLines=function(e,t){return this.$lines.slice(e,t+1)},this.getAllLines=function(){return this.getLines(0,this.getLength())},this.getLength=function(){return this.$lines.length},this.getTextRange=function(e){return this.getLinesForRange(e).join(this.getNewLineCharacter())},this.getLinesForRange=function(e){var t;if(e.start.row===e.end.row)t=[this.getLine(e.start.row).substring(e.start.column,e.end.column)];else{t=this.getLines(e.start.row,e.end.row),t[0]=(t[0]||"").substring(e.start.column);var n=t.length-1;e.end.row-e.start.row==n&&(t[n]=t[n].substring(0,e.end.column))}return t},this.insertLines=function(e,t){return console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."),this.insertFullLines(e,t)},this.removeLines=function(e,t){return console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."),this.removeFullLines(e,t)},this.insertNewLine=function(e){return console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, ['', '']) instead."),this.insertMergedLines(e,["",""])},this.insert=function(e,t){return this.getLength()<=1&&this.$detectNewLine(t),this.insertMergedLines(e,this.$split(t))},this.insertInLine=function(e,t){var n=this.clippedPos(e.row,e.column),r=this.pos(e.row,e.column+t.length);return this.applyDelta({start:n,end:r,action:"insert",lines:[t]},!0),this.clonePos(r)},this.clippedPos=function(e,t){var n=this.getLength();e===undefined?e=n:e<0?e=0:e>=n&&(e=n-1,t=undefined);var r=this.getLine(e);return t==undefined&&(t=r.length),t=Math.min(Math.max(t,0),r.length),{row:e,column:t}},this.clonePos=function(e){return{row:e.row,column:e.column}},this.pos=function(e,t){return{row:e,column:t}},this.$clipPosition=function(e){var t=this.getLength();return e.row>=t?(e.row=Math.max(0,t-1),e.column=this.getLine(t-1).length):(e.row=Math.max(0,e.row),e.column=Math.min(Math.max(e.column,0),this.getLine(e.row).length)),e},this.insertFullLines=function(e,t){e=Math.min(Math.max(e,0),this.getLength());var n=0;e0,r=t=0&&this.applyDelta({start:this.pos(e,this.getLine(e).length),end:this.pos(e+1,0),action:"remove",lines:["",""]})},this.replace=function(e,t){e instanceof o||(e=o.fromPoints(e.start,e.end));if(t.length===0&&e.isEmpty())return e.start;if(t==this.getTextRange(e))return e.end;this.remove(e);var n;return t?n=this.insert(e.start,t):n=e.start,n},this.applyDeltas=function(e){for(var t=0;t=0;t--)this.revertDelta(e[t])},this.applyDelta=function(e,t){var n=e.action=="insert";if(n?e.lines.length<=1&&!e.lines[0]:!o.comparePoints(e.start,e.end))return;n&&e.lines.length>2e4&&this.$splitAndapplyLargeDelta(e,2e4),i(this.$lines,e,t),this._signal("change",e)},this.$splitAndapplyLargeDelta=function(e,t){var n=e.lines,r=n.length,i=e.start.row,s=e.start.column,o=0,u=0;do{o=u,u+=t-1;var a=n.slice(o,u);if(u>r){e.lines=a,e.start.row=i+o,e.start.column=s;break}a.push(""),this.applyDelta({start:this.pos(i+o,s),end:this.pos(i+u,s=0),action:e.action,lines:a},!0)}while(!0)},this.revertDelta=function(e){this.applyDelta({start:this.clonePos(e.start),end:this.clonePos(e.end),action:e.action=="insert"?"remove":"insert",lines:e.lines.slice()})},this.indexToPosition=function(e,t){var n=this.$lines||this.getAllLines(),r=this.getNewLineCharacter().length;for(var i=t||0,s=n.length;i0){t&1&&(n+=e);if(t>>=1)e+=e}return n};var r=/^\s\s*/,i=/\s\s*$/;t.stringTrimLeft=function(e){return e.replace(r,"")},t.stringTrimRight=function(e){return e.replace(i,"")},t.copyObject=function(e){var t={};for(var n in e)t[n]=e[n];return t},t.copyArray=function(e){var t=[];for(var n=0,r=e.length;n0&&this._events[e].length>n&&(this._events[e].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[e].length),typeof console.trace=="function"&&console.trace())}return this},r.prototype.on=r.prototype.addListener,r.prototype.once=function(e,t){function r(){this.removeListener(e,r),n||(n=!0,t.apply(this,arguments))}if(!i(t))throw TypeError("listener must be a function");var n=!1;return r.listener=t,this.on(e,r),this},r.prototype.removeListener=function(e,t){var n,r,s,u;if(!i(t))throw TypeError("listener must be a function");if(!this._events||!this._events[e])return this;n=this._events[e],s=n.length,r=-1;if(n===t||i(n.listener)&&n.listener===t)delete this._events[e],this._events.removeListener&&this.emit("removeListener",e,t);else if(o(n)){for(u=s;u-->0;)if(n[u]===t||n[u].listener&&n[u].listener===t){r=u;break}if(r<0)return this;n.length===1?(n.length=0,delete this._events[e]):n.splice(r,1),this._events.removeListener&&this.emit("removeListener",e,t)}return this},r.prototype.removeAllListeners=function(e){var t,n;if(!this._events)return this;if(!this._events.removeListener)return arguments.length===0?this._events={}:this._events[e]&&delete this._events[e],this;if(arguments.length===0){for(t in this._events){if(t==="removeListener")continue;this.removeAllListeners(t)}return this.removeAllListeners("removeListener"),this._events={},this}n=this._events[e];if(i(n))this.removeListener(e,n);else while(n.length)this.removeListener(e,n[n.length-1]);return delete this._events[e],this},r.prototype.listeners=function(e){var t;return!this._events||!this._events[e]?t=[]:i(this._events[e])?t=[this._events[e]]:t=this._events[e].slice(),t},r.listenerCount=function(e,t){var n;return!e._events||!e._events[t]?n=0:i(e._events[t])?n=1:n=e._events[t].length,n}},{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(e,t,n){var r=[];for(var i=0;i<128;i++)r[i]=i===36||i>=65&&i<=90||i===95||i>=97&&i<=122;var s=[];for(var i=0;i<128;i++)s[i]=r[i]||i>=48&&i<=57;t.exports={asciiIdentifierStartTable:r,asciiIdentifierPartTable:s}},{}],"/node_modules/jshint/lodash.js":[function(e,t,n){(function(e){(function(){function $(e,t,n){var r=e.length,i=n?r:-1;while(n?i--:++ir&&(r=i)}return r}function Dt(e,t){var n=-1,r=e.length;while(++ns?0:s+t),n=n===r||n>s?s:+n||0,n<0&&(n+=s),s=t>n?0:n-t>>>0,t>>>=0;var o=Array(s);while(++i>>1,o=e[s];(n?o<=t:o2&&n[i-2],o=i>2&&n[2],u=i>1&&n[i-1];typeof s=="function"?(s=on(s,u,5),i-=2):(s=typeof u=="function"?u:null,i-=s?1:0),o&&Tn(n[0],n[1],o)&&(s=i<3?null:s,i=1);while(++rf))return!1;while(c&&++a-1&&e%1==0&&e-1&&e%1==0&&e<=Nt}function kn(e){return e===e&&(e===0?1/e>0:!Jn(e))}function Ln(e){var t,n=Ct.support;if(!Y(e)||rt.call(e)!=d||!nt.call(e,"constructor")&&(t=e.constructor,typeof t=="function"&&!(t instanceof t)))return!1;var i;return Ut(e,function(e,t){i=t}),i===r||nt.call(e,i)}function An(e){var t=ir(e),n=t.length,r=n&&e.length,i=Ct.support,s=r&&Cn(r)&&(Xn(e)||i.nonEnumArgs&&Wn(e)),o=-1,u=[];while(++o>>0,r=Array(n);while(++t-1:gn(e,t,n)>-1):!1}function qn(e,t,n){var r=Xn(e)?Ot:qt;return t=mn(t,n,3),r(e,function(e,n,r){return!t(e,n,r)})}function Rn(e,t,n){var i=Xn(e)?Dt:tn;n&&Tn(e,t,n)&&(t=null);if(typeof t!="function"||n!==r)t=mn(t,n,3);return i(e,t)}function Un(e,t){if(typeof e!="function")throw new TypeError(s);return t=yt(t===r?e.length-1:+t||0,0),function(){var n=arguments,r=-1,i=yt(n.length-t,0),s=Array(i);while(++r0;while(++r>>1,Tt=dt?dt.BYTES_PER_ELEMENT:0,Nt=Math.pow(2,53)-1,kt=Ct.support={};(function(e){var t=function(){this.x=e},n={0:e,length:e},r=[];t.prototype={valueOf:e,y:e};for(var i in new t)r.push(i);kt.funcDecomp=/\bthis\b/.test(function(){return this}),kt.funcNames=typeof Function.name=="string";try{kt.nonEnumArgs=!ht.call(arguments,1)}catch(s){kt.nonEnumArgs=!0}})(1,0);var Ht=vt||function(e,t){return t==null?e:Bt(t,bn(t),Bt(t,rr(t),e))},It=fn(zt),Rt=ln();ot||(un=!st||!pt?fr(null):function(e){var t=e.byteLength,n=dt?ut(t/Tt):0,r=n*Tt,i=new st(t);if(n){var s=new dt(i,0,n);s.set(new dt(e,0,n))}return t!=r&&(s=new pt(i,r),s.set(new pt(e,r))),i});var yn=Yt("length"),bn=at?function(e){return at(On(e))}:fr([]),_n=cn(!0),jn=Un(Bn),Fn=hn(At,It),Xn=mt||function(e){return Y(e)&&Cn(e.length)&&rt.call(e)==u},$n=K(/x/)||pt&&!K(pt)?function(e){return rt.call(e)==c}:K,Gn=ft?function(e){if(!e||rt.call(e)!=d)return!1;var t=e.valueOf,n=Kn(t)&&(n=ft(t))&&ft(n);return n?e==n||ft(e)==n:Ln(e)}:Ln,tr=an(function(e,t,n){return n?Pt(e,t,n):Ht(e,t)}),rr=gt?function(e){if(e)var t=e.constructor,n=e.length;return typeof t=="function"&&t.prototype===e||typeof e!="function"&&Cn(n)?An(e):Jn(e)?gt(e):[]}:An,sr=an(Qt);Ct.assign=tr,Ct.callback=ar,Ct.constant=fr,Ct.forEach=Fn,Ct.keys=rr,Ct.keysIn=ir,Ct.merge=sr,Ct.property=cr,Ct.reject=qn,Ct.restParam=Un,Ct.slice=Hn,Ct.toPlainObject=er,Ct.unzip=Bn,Ct.values=or,Ct.zip=jn,Ct.each=Fn,Ct.extend=tr,Ct.iteratee=ar,Ct.clone=zn,Ct.escapeRegExp=ur,Ct.findLastIndex=_n,Ct.has=nr,Ct.identity=lr,Ct.includes=In,Ct.indexOf=Dn,Ct.isArguments=Wn,Ct.isArray=Xn,Ct.isEmpty=Vn,Ct.isFunction=$n,Ct.isNative=Kn,Ct.isNumber=Qn,Ct.isObject=Jn,Ct.isPlainObject=Gn,Ct.isString=Yn,Ct.isTypedArray=Zn,Ct.last=Pn,Ct.some=Rn,Ct.any=Rn,Ct.contains=In,Ct.include=In,Ct.VERSION=i,q&&R?X?(R.exports=Ct)._=Ct:q._=Ct:V._=Ct}).call(this)}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{}],"/node_modules/jshint/src/jshint.js":[function(e,t,n){var r=e("../lodash"),i=e("events"),s=e("./vars.js"),o=e("./messages.js"),u=e("./lex.js").Lexer,a=e("./reg.js"),f=e("./state.js").state,l=e("./style.js"),c=e("./options.js"),h=e("./scope-manager.js"),p=function(){"use strict";function k(e,t){return e=e.trim(),/^[+-]W\d{3}$/g.test(e)?!0:c.validNames.indexOf(e)===-1&&t.type!=="jslint"&&!r.has(c.removed,e)?(q("E001",t,e),!1):!0}function L(e){return Object.prototype.toString.call(e)==="[object String]"}function A(e,t){return e?!e.identifier||e.value!==t?!1:!0:!1}function O(e){if(!e.reserved)return!1;var t=e.meta;if(t&&t.isFutureReservedWord&&f.inES5()){if(!t.es5)return!1;if(t.strictOnly&&!f.option.strict&&!f.isStrict())return!1;if(e.isProperty)return!1}return!0}function M(e,t){return e.replace(/\{([^{}]*)\}/g,function(e,n){var r=t[n];return typeof r=="string"||typeof r=="number"?r:e})}function D(e,t){Object.keys(t).forEach(function(n){if(r.has(p.blacklist,n))return;e[n]=t[n]})}function P(){if(f.option.enforceall){for(var e in c.bool.enforcing)f.option[e]===undefined&&!c.noenforceall[e]&&(f.option[e]=!0);for(var t in c.bool.relaxing)f.option[t]===undefined&&(f.option[t]=!1)}}function H(){P(),!f.option.esversion&&!f.option.moz&&(f.option.es3?f.option.esversion=3:f.option.esnext?f.option.esversion=6:f.option.esversion=5),f.inES5()&&D(S,s.ecmaIdentifiers[5]),f.inES6()&&D(S,s.ecmaIdentifiers[6]),f.option.module&&(f.option.strict===!0&&(f.option.strict="global"),f.inES6()||F("W134",f.tokens.next,"module",6)),f.option.couch&&D(S,s.couch),f.option.qunit&&D(S,s.qunit),f.option.rhino&&D(S,s.rhino),f.option.shelljs&&(D(S,s.shelljs),D(S,s.node)),f.option.typed&&D(S,s.typed),f.option.phantom&&(D(S,s.phantom),f.option.strict===!0&&(f.option.strict="global")),f.option.prototypejs&&D(S,s.prototypejs),f.option.node&&(D(S,s.node),D(S,s.typed),f.option.strict===!0&&(f.option.strict="global")),f.option.devel&&D(S,s.devel),f.option.dojo&&D(S,s.dojo),f.option.browser&&(D(S,s.browser),D(S,s.typed)),f.option.browserify&&(D(S,s.browser),D(S,s.typed),D(S,s.browserify),f.option.strict===!0&&(f.option.strict="global")),f.option.nonstandard&&D(S,s.nonstandard),f.option.jasmine&&D(S,s.jasmine),f.option.jquery&&D(S,s.jquery),f.option.mootools&&D(S,s.mootools),f.option.worker&&D(S,s.worker),f.option.wsh&&D(S,s.wsh),f.option.globalstrict&&f.option.strict!==!1&&(f.option.strict="global"),f.option.yui&&D(S,s.yui),f.option.mocha&&D(S,s.mocha)}function B(e,t,n){var r=Math.floor(t/f.lines.length*100),i=o.errors[e].desc;throw{name:"JSHintError",line:t,character:n,message:i+" ("+r+"% scanned).",raw:i,code:e}}function j(){var e=f.ignoredLines;if(r.isEmpty(e))return;p.errors=r.reject(p.errors,function(t){return e[t.line]})}function F(e,t,n,r,i,s){var u,a,l,c;if(/^W\d{3}$/.test(e)){if(f.ignored[e])return;c=o.warnings[e]}else/E\d{3}/.test(e)?c=o.errors[e]:/I\d{3}/.test(e)&&(c=o.info[e]);return t=t||f.tokens.next||{},t.id==="(end)"&&(t=f.tokens.curr),a=t.line||0,u=t.from||0,l={id:"(error)",raw:c.desc,code:c.code,evidence:f.lines[a-1]||"",line:a,character:u,scope:p.scope,a:n,b:r,c:i,d:s},l.reason=M(c.desc,l),p.errors.push(l),j(),p.errors.length>=f.option.maxerr&&B("E043",a,u),l}function I(e,t,n,r,i,s,o){return F(e,{line:t,from:n},r,i,s,o)}function q(e,t,n,r,i,s){F(e,t,n,r,i,s)}function R(e,t,n,r,i,s,o){return q(e,{line:t,from:n},r,i,s,o)}function U(e,t){var n;return n={id:"(internal)",elem:e,value:t},p.internals.push(n),n}function z(){var e=f.tokens.next,t=e.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g)||[],i={};if(e.type==="globals"){t.forEach(function(n,r){n=n.split(":");var s=(n[0]||"").trim(),o=(n[1]||"").trim();if(s==="-"||!s.length){if(r>0&&r===t.length-1)return;q("E002",e);return}s.charAt(0)==="-"?(s=s.slice(1),o=!1,p.blacklist[s]=s,delete S[s]):i[s]=o==="true"}),D(S,i);for(var s in i)r.has(i,s)&&(n[s]=e)}e.type==="exported"&&t.forEach(function(n,r){if(!n.length){if(r>0&&r===t.length-1)return;q("E002",e);return}f.funct["(scope)"].addExported(n)}),e.type==="members"&&(E=E||{},t.forEach(function(e){var t=e.charAt(0),n=e.charAt(e.length-1);t===n&&(t==='"'||t==="'")&&(e=e.substr(1,e.length-2).replace('\\"','"')),E[e]=!1}));var o=["maxstatements","maxparams","maxdepth","maxcomplexity","maxerr","maxlen","indent"];if(e.type==="jshint"||e.type==="jslint")t.forEach(function(t){t=t.split(":");var n=(t[0]||"").trim(),i=(t[1]||"").trim();if(!k(n,e))return;if(o.indexOf(n)>=0){if(i!=="false"){i=+i;if(typeof i!="number"||!isFinite(i)||i<=0||Math.floor(i)!==i){q("E032",e,t[1].trim());return}f.option[n]=i}else f.option[n]=n==="indent"?4:!1;return}if(n==="validthis"){if(f.funct["(global)"])return void q("E009");if(i!=="true"&&i!=="false")return void q("E002",e);f.option.validthis=i==="true";return}if(n==="quotmark"){switch(i){case"true":case"false":f.option.quotmark=i==="true";break;case"double":case"single":f.option.quotmark=i;break;default:q("E002",e)}return}if(n==="shadow"){switch(i){case"true":f.option.shadow=!0;break;case"outer":f.option.shadow="outer";break;case"false":case"inner":f.option.shadow="inner";break;default:q("E002",e)}return}if(n==="unused"){switch(i){case"true":f.option.unused=!0;break;case"false":f.option.unused=!1;break;case"vars":case"strict":f.option.unused=i;break;default:q("E002",e)}return}if(n==="latedef"){switch(i){case"true":f.option.latedef=!0;break;case"false":f.option.latedef=!1;break;case"nofunc":f.option.latedef="nofunc";break;default:q("E002",e)}return}if(n==="ignore"){switch(i){case"line":f.ignoredLines[e.line]=!0,j();break;default:q("E002",e)}return}if(n==="strict"){switch(i){case"true":f.option.strict=!0;break;case"false":f.option.strict=!1;break;case"func":case"global":case"implied":f.option.strict=i;break;default:q("E002",e)}return}n==="module"&&(zt(f.funct)||q("E055",f.tokens.next,"module"));var s={es3:3,es5:5,esnext:6};if(r.has(s,n)){switch(i){case"true":f.option.moz=!1,f.option.esversion=s[n];break;case"false":f.option.moz||(f.option.esversion=5);break;default:q("E002",e)}return}if(n==="esversion"){switch(i){case"5":f.inES5(!0)&&F("I003");case"3":case"6":f.option.moz=!1,f.option.esversion=+i;break;case"2015":f.option.moz=!1,f.option.esversion=6;break;default:q("E002",e)}zt(f.funct)||q("E055",f.tokens.next,"esversion");return}var u=/^([+-])(W\d{3})$/g.exec(n);if(u){f.ignored[u[2]]=u[1]==="-";return}var a;if(i==="true"||i==="false"){e.type==="jslint"?(a=c.renamed[n]||n,f.option[a]=i==="true",c.inverted[a]!==undefined&&(f.option[a]=!f.option[a])):f.option[n]=i==="true",n==="newcap"&&(f.option["(explicitNewcap)"]=!0);return}q("E002",e)}),H()}function W(e){var t=e||0,n=y.length,r;if(t="a"&&t<="z"||t>="A"&&t<="Z")e.identifier=e.reserved=!0;return e}function ut(e,t){var n=nt(e,150);return ot(n),n.nud=typeof t=="function"?t:function(){this.arity="unary",this.right=Q(150);if(this.id==="++"||this.id==="--")f.option.plusplus?F("W016",this,this.id):this.right&&(!this.right.identifier||O(this.right))&&this.right.id!=="."&&this.right.id!=="["&&F("W017",this),this.right&&this.right.isMetaProperty?q("E031",this):this.right&&this.right.identifier&&f.funct["(scope)"].block.modify(this.right.value,this);return this},n}function at(e,t){var n=rt(e);return n.type=e,n.nud=t,n}function ft(e,t){var n=at(e,t);return n.identifier=!0,n.reserved=!0,n}function lt(e,t){var n=at(e,t&&t.nud||function(){return this});return t=t||{},t.isFutureReservedWord=!0,n.value=e,n.identifier=!0,n.reserved=!0,n.meta=t,n}function ct(e,t){return ft(e,function(){return typeof t=="function"&&t(this),this})}function ht(e,t,n,r){var i=nt(e,n);return ot(i),i.infix=!0,i.led=function(i){return r||Y(f.tokens.prev,f.tokens.curr),(e==="in"||e==="instanceof")&&i.id==="!"&&F("W018",i,"!"),typeof t=="function"?t(i,this):(this.left=i,this.right=Q(n),this)},i}function pt(e){var t=nt(e,42);return t.led=function(e){return Y(f.tokens.prev,f.tokens.curr),this.left=e,this.right=Xt({type:"arrow",loneArg:e}),this},t}function dt(e,t){var n=nt(e,100);return n.led=function(e){Y(f.tokens.prev,f.tokens.curr),this.left=e;var n=this.right=Q(100);return A(e,"NaN")||A(n,"NaN")?F("W019",this):t&&t.apply(this,[e,n]),(!e||!n)&&B("E041",f.tokens.curr.line),e.id==="!"&&F("W018",e,"!"),n.id==="!"&&F("W018",n,"!"),this},n}function vt(e){return e&&(e.type==="(number)"&&+e.value===0||e.type==="(string)"&&e.value===""||e.type==="null"&&!f.option.eqnull||e.type==="true"||e.type==="false"||e.type==="undefined")}function gt(e,t,n){var i;return n.option.notypeof?!1:!e||!t?!1:(i=n.inES6()?mt.es6:mt.es3,t.type==="(identifier)"&&t.value==="typeof"&&e.type==="(string)"?!r.contains(i,e.value):!1)}function yt(e,t){var n=!1;return e.type==="this"&&t.funct["(context)"]===null?n=!0:e.type==="(identifier)"&&(t.option.node&&e.value==="global"?n=!0:t.option.browser&&(e.value==="window"||e.value==="document")&&(n=!0)),n}function bt(e){function n(e){if(typeof e!="object")return;return e.right==="prototype"?e:n(e.left)}function r(e){while(!e.identifier&&typeof e.left=="object")e=e.left;if(e.identifier&&t.indexOf(e.value)>=0)return e.value}var t=["Array","ArrayBuffer","Boolean","Collator","DataView","Date","DateTimeFormat","Error","EvalError","Float32Array","Float64Array","Function","Infinity","Intl","Int16Array","Int32Array","Int8Array","Iterator","Number","NumberFormat","Object","RangeError","ReferenceError","RegExp","StopIteration","String","SyntaxError","TypeError","Uint16Array","Uint32Array","Uint8Array","Uint8ClampedArray","URIError"],i=n(e);if(i)return r(i)}function wt(e,t,n){var r=n&&n.allowDestructuring;t=t||e;if(f.option.freeze){var i=bt(e);i&&F("W121",e,i)}return e.identifier&&!e.isMetaProperty&&f.funct["(scope)"].block.reassign(e.value,e),e.id==="."?((!e.left||e.left.value==="arguments"&&!f.isStrict())&&F("E031",t),f.nameStack.set(f.tokens.prev),!0):e.id==="{"||e.id==="["?(r&&f.tokens.curr.left.destructAssign?f.tokens.curr.left.destructAssign.forEach(function(e){e.id&&f.funct["(scope)"].block.modify(e.id,e.token)}):e.id==="{"||!e.left?F("E031",t):e.left.value==="arguments"&&!f.isStrict()&&F("E031",t),e.id==="["&&f.nameStack.set(e.right),!0):e.isMetaProperty?(q("E031",t),!0):e.identifier&&!O(e)?(f.funct["(scope)"].labeltype(e.value)==="exception"&&F("W022",e),f.nameStack.set(e),!0):(e===f.syntax["function"]&&F("W023",f.tokens.curr),!1)}function Et(e,t,n){var r=ht(e,typeof t=="function"?t:function(e,t){t.left=e;if(e&&wt(e,t,{allowDestructuring:!0}))return t.right=Q(10),t;q("E031",t)},n);return r.exps=!0,r.assign=!0,r}function St(e,t,n){var r=nt(e,n);return ot(r),r.led=typeof t=="function"?t:function(e){return f.option.bitwise&&F("W016",this,this.id),this.left=e,this.right=Q(n),this},r}function xt(e){return Et(e,function(e,t){f.option.bitwise&&F("W016",t,t.id);if(e&&wt(e,t))return t.right=Q(10),t;q("E031",t)},20)}function Tt(e){var t=nt(e,150);return t.led=function(e){return f.option.plusplus?F("W016",this,this.id):(!e.identifier||O(e))&&e.id!=="."&&e.id!=="["&&F("W017",this),e.isMetaProperty?q("E031",this):e&&e.identifier&&f.funct["(scope)"].block.modify(e.value,e),this.left=e,this},t}function Nt(e,t,n){if(!f.tokens.next.identifier)return;n||V();var r=f.tokens.curr,i=f.tokens.curr.value;return O(r)?t&&f.inES5()?i:e&&i==="undefined"?i:(F("W024",f.tokens.curr,f.tokens.curr.id),i):i}function Ct(e,t){var n=Nt(e,t,!1);if(n)return n;if(f.tokens.next.value==="..."){f.inES6(!0)||F("W119",f.tokens.next,"spread/rest operator","6"),V();if(pn(f.tokens.next,"...")){F("E024",f.tokens.next,"...");while(pn(f.tokens.next,"..."))V()}if(!f.tokens.next.identifier){F("E024",f.tokens.curr,"...");return}return Ct(e,t)}q("E030",f.tokens.next,f.tokens.next.value),f.tokens.next.id!==";"&&V()}function kt(e){var t=0,n;if(f.tokens.next.id!==";"||e.inBracelessBlock)return;for(;;){do n=W(t),t+=1;while(n.id!=="(end)"&&n.id==="(comment)");if(n.reach)return;if(n.id!=="(endline)"){if(n.id==="function"){f.option.latedef===!0&&F("W026",n);break}F("W027",n,n.value,e.value);break}}}function Lt(){if(f.tokens.next.id!==";"){if(f.tokens.next.isUnclosed)return V();var e=G(f.tokens.next)===f.tokens.curr.line&&f.tokens.next.id!=="(end)",t=pn(f.tokens.next,"}");e&&!t?R("E058",f.tokens.curr.line,f.tokens.curr.character):f.option.asi||(t&&!f.option.lastsemic||!e)&&I("W033",f.tokens.curr.line,f.tokens.curr.character)}else V(";")}function At(){var e=g,t,n=f.tokens.next,r=!1;if(n.id===";"){V(";");return}var i=O(n);i&&n.meta&&n.meta.isFutureReservedWord&&W().id===":"&&(F("W024",n,n.id),i=!1),n.identifier&&!i&&W().id===":"&&(V(),V(":"),r=!0,f.funct["(scope)"].stack(),f.funct["(scope)"].block.addBreakLabel(n.value,{token:f.tokens.curr}),!f.tokens.next.labelled&&f.tokens.next.value!=="{"&&F("W028",f.tokens.next,n.value,f.tokens.next.value),f.tokens.next.label=n.value,n=f.tokens.next);if(n.id==="{"){var s=f.funct["(verb)"]==="case"&&f.tokens.curr.value===":";_t(!0,!0,!1,!1,s);return}return t=Q(0,!0),t&&(!t.identifier||t.value!=="function")&&(t.type!=="(punctuator)"||!t.left||!t.left.identifier||t.left.value!=="function")&&!f.isStrict()&&f.option.strict==="global"&&F("E007"),n.block||(!f.option.expr&&(!t||!t.exps)?F("W030",f.tokens.curr):f.option.nonew&&t&&t.left&&t.id==="("&&t.left.id==="new"&&F("W031",n),Lt()),g=e,r&&f.funct["(scope)"].unstack(),t}function Ot(){var e=[],t;while(!f.tokens.next.reach&&f.tokens.next.id!=="(end)")f.tokens.next.id===";"?(t=W(),(!t||t.id!=="("&&t.id!=="[")&&F("W032"),V(";")):e.push(At());return e}function Mt(){var e,t,n;while(f.tokens.next.id==="(string)"){t=W(0);if(t.id==="(endline)"){e=1;do n=W(e++);while(n.id==="(endline)");if(n.id===";")t=n;else{if(n.value==="["||n.value===".")break;(!f.option.asi||n.value==="(")&&F("W033",f.tokens.next)}}else{if(t.id==="."||t.id==="[")break;t.id!==";"&&F("W033",t)}V();var r=f.tokens.curr.value;(f.directive[r]||r==="use strict"&&f.option.strict==="implied")&&F("W034",f.tokens.curr,r),f.directive[r]=!0,t.id===";"&&V(";")}f.isStrict()&&(f.option["(explicitNewcap)"]||(f.option.newcap=!0),f.option.undef=!0)}function _t(e,t,n,i,s){var o,u=m,a=g,l,c,h,p;m=e,c=f.tokens.next;var d=f.funct["(metrics)"];d.nestedBlockDepth+=1,d.verifyMaxNestedBlockDepthPerFunction();if(f.tokens.next.id==="{"){V("{"),f.funct["(scope)"].stack(),h=f.tokens.curr.line;if(f.tokens.next.id!=="}"){g+=f.option.indent;while(!e&&f.tokens.next.from>g)g+=f.option.indent;if(n){l={};for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Mt(),f.option.strict&&f.funct["(context)"]["(global)"]&&!l["use strict"]&&!f.isStrict()&&F("E007")}o=Ot(),d.statementCount+=o.length,g-=f.option.indent}V("}",c),n&&(f.funct["(scope)"].validateParams(),l&&(f.directive=l)),f.funct["(scope)"].unstack(),g=a}else if(!e)if(n){f.funct["(scope)"].stack(),l={},t&&!i&&!f.inMoz()&&q("W118",f.tokens.curr,"function closure expressions");if(!t)for(p in f.directive)r.has(f.directive,p)&&(l[p]=f.directive[p]);Q(10),f.option.strict&&f.funct["(context)"]["(global)"]&&!l["use strict"]&&!f.isStrict()&&F("E007"),f.funct["(scope)"].unstack()}else q("E021",f.tokens.next,"{",f.tokens.next.value);else f.funct["(noblockscopedvar)"]=f.tokens.next.id!=="for",f.funct["(scope)"].stack(),(!t||f.option.curly)&&F("W116",f.tokens.next,"{",f.tokens.next.value),f.tokens.next.inBracelessBlock=!0,g+=f.option.indent,o=[At()],g-=f.option.indent,f.funct["(scope)"].unstack(),delete f.funct["(noblockscopedvar)"];switch(f.funct["(verb)"]){case"break":case"continue":case"return":case"throw":if(s)break;default:f.funct["(verb)"]=null}return m=u,e&&f.option.noempty&&(!o||o.length===0)&&F("W035",f.tokens.prev),d.nestedBlockDepth-=1,o}function Dt(e){E&&typeof E[e]!="boolean"&&F("W036",f.tokens.curr,e),typeof w[e]=="number"?w[e]+=1:w[e]=1}function Bt(){var e={};e.exps=!0,f.funct["(comparray)"].stack();var t=!1;return f.tokens.next.value!=="for"&&(t=!0,f.inMoz()||F("W116",f.tokens.next,"for",f.tokens.next.value),f.funct["(comparray)"].setState("use"),e.right=Q(10)),V("for"),f.tokens.next.value==="each"&&(V("each"),f.inMoz()||F("W118",f.tokens.curr,"for each")),V("("),f.funct["(comparray)"].setState("define"),e.left=Q(130),r.contains(["in","of"],f.tokens.next.value)?V():q("E045",f.tokens.curr),f.funct["(comparray)"].setState("generate"),Q(10),V(")"),f.tokens.next.value==="if"&&(V("if"),V("("),f.funct["(comparray)"].setState("filter"),e.filter=Q(10),V(")")),t||(f.funct["(comparray)"].setState("use"),e.right=Q(10)),V("]"),f.funct["(comparray)"].unstack(),e}function jt(){return f.funct["(statement)"]&&f.funct["(statement)"].type==="class"||f.funct["(context)"]&&f.funct["(context)"]["(verb)"]==="class"}function Ft(e){return e.identifier||e.id==="(string)"||e.id==="(number)"}function It(e){var t,n=!0;return typeof e=="object"?t=e:(n=e,t=Nt(!1,!0,n)),t?typeof t=="object"&&(t.id==="(string)"||t.id==="(identifier)"?t=t.value:t.id==="(number)"&&(t=t.value.toString())):f.tokens.next.id==="(string)"?(t=f.tokens.next.value,n||V()):f.tokens.next.id==="(number)"&&(t=f.tokens.next.value.toString(),n||V()),t==="hasOwnProperty"&&F("W001"),t}function qt(e){function h(e){f.funct["(scope)"].addParam.apply(f.funct["(scope)"],e)}var t,n=[],i,s=[],o,u=!1,a=!1,l=0,c=e&&e.loneArg;if(c&&c.identifier===!0)return f.funct["(scope)"].addParam(c.value,c),{arity:1,params:[c.value]};t=f.tokens.next,(!e||!e.parsedOpening)&&V("(");if(f.tokens.next.id===")"){V(")");return}for(;;){l++;var p=[];if(r.contains(["{","["],f.tokens.next.id)){s=Gt();for(o in s)o=s[o],o.id&&(n.push(o.id),p.push([o.id,o.token]))}else{pn(f.tokens.next,"...")&&(a=!0),i=Ct(!0);if(i)n.push(i),p.push([i,f.tokens.curr]);else while(!hn(f.tokens.next,[",",")"]))V()}u&&f.tokens.next.id!=="="&&q("W138",f.tokens.current),f.tokens.next.id==="="&&(f.inES6()||F("W119",f.tokens.next,"default parameters","6"),V("="),u=!0,Q(10)),p.forEach(h);if(f.tokens.next.id!==",")return V(")",t),{arity:l,params:n};a&&F("W131",f.tokens.next),tt()}}function Rt(e,t,n){var i={"(name)":e,"(breakage)":0,"(loopage)":0,"(tokens)":{},"(properties)":{},"(catch)":!1,"(global)":!1,"(line)":null,"(character)":null,"(metrics)":null,"(statement)":null,"(context)":null,"(scope)":null,"(comparray)":null,"(generator)":null,"(arrow)":null,"(params)":null};return t&&r.extend(i,{"(line)":t.line,"(character)":t.character,"(metrics)":Vt(t)}),r.extend(i,n),i["(context)"]&&(i["(scope)"]=i["(context)"]["(scope)"],i["(comparray)"]=i["(context)"]["(comparray)"]),i}function Ut(e){return"(scope)"in e}function zt(e){return e["(global)"]&&!e["(verb)"]}function Wt(e){function i(){if(f.tokens.curr.template&&f.tokens.curr.tail&&f.tokens.curr.context===t)return!0;var e=f.tokens.next.template&&f.tokens.next.tail&&f.tokens.next.context===t;return e&&V(),e||f.tokens.next.isUnclosed}var t=this.context,n=this.noSubst,r=this.depth;if(!n)while(!i())!f.tokens.next.template||f.tokens.next.depth>r?Q(0):V();return{id:"(template)",type:"(template)",tag:e}}function Xt(e){var t,n,r,i,s,o,u,a,l=f.option,c=f.ignored;e&&(r=e.name,i=e.statement,s=e.classExprBinding,o=e.type==="generator",u=e.type==="arrow",a=e.ignoreLoopFunc),f.option=Object.create(f.option),f.ignored=Object.create(f.ignored),f.funct=Rt(r||f.nameStack.infer(),f.tokens.next,{"(statement)":i,"(context)":f.funct,"(arrow)":u,"(generator)":o}),t=f.funct,n=f.tokens.curr,n.funct=f.funct,v.push(f.funct),f.funct["(scope)"].stack("functionouter");var h=r||s;h&&f.funct["(scope)"].block.add(h,s?"class":"function",f.tokens.curr,!1),f.funct["(scope)"].stack("functionparams");var p=qt(e);return p?(f.funct["(params)"]=p.params,f.funct["(metrics)"].arity=p.arity,f.funct["(metrics)"].verifyMaxParametersPerFunction()):f.funct["(metrics)"].arity=0,u&&(f.inES6(!0)||F("W119",f.tokens.curr,"arrow function syntax (=>)","6"),e.loneArg||V("=>")),_t(!1,!0,!0,u),!f.option.noyield&&o&&f.funct["(generator)"]!=="yielded"&&F("W124",f.tokens.curr),f.funct["(metrics)"].verifyMaxStatementsPerFunction(),f.funct["(metrics)"].verifyMaxComplexityPerFunction(),f.funct["(unusedOption)"]=f.option.unused,f.option=l,f.ignored=c,f.funct["(last)"]=f.tokens.curr.line,f.funct["(lastcharacter)"]=f.tokens.curr.character,f.funct["(scope)"].unstack(),f.funct["(scope)"].unstack(),f.funct=f.funct["(context)"],!a&&!f.option.loopfunc&&f.funct["(loopage)"]&&t["(isCapturing)"]&&F("W083",n),t}function Vt(e){return{statementCount:0,nestedBlockDepth:-1,ComplexityCount:1,arity:0,verifyMaxStatementsPerFunction:function(){f.option.maxstatements&&this.statementCount>f.option.maxstatements&&F("W071",e,this.statementCount)},verifyMaxParametersPerFunction:function(){r.isNumber(f.option.maxparams)&&this.arity>f.option.maxparams&&F("W072",e,this.arity)},verifyMaxNestedBlockDepthPerFunction:function(){f.option.maxdepth&&this.nestedBlockDepth>0&&this.nestedBlockDepth===f.option.maxdepth+1&&F("W073",null,this.nestedBlockDepth)},verifyMaxComplexityPerFunction:function(){var t=f.option.maxcomplexity,n=this.ComplexityCount;t&&n>t&&F("W074",e,n)}}}function $t(){f.funct["(metrics)"].ComplexityCount+=1}function Jt(e){var t,n;e&&(t=e.id,n=e.paren,t===","&&(e=e.exprs[e.exprs.length-1])&&(t=e.id,n=n||e.paren));switch(t){case"=":case"+=":case"-=":case"*=":case"%=":case"&=":case"|=":case"^=":case"/=":!n&&!f.option.boss&&F("W084")}}function Kt(e){if(f.inES5())for(var t in e)e[t]&&e[t].setterToken&&!e[t].getterToken&&F("W078",e[t].setterToken)}function Qt(e,t){if(pn(f.tokens.next,".")){var n=f.tokens.curr.id;V(".");var r=Ct();return f.tokens.curr.isMetaProperty=!0,e!==r?q("E057",f.tokens.prev,n,r):t(),f.tokens.curr}}function Gt(e){var t=e&&e.assignment;return f.inES6()||F("W104",f.tokens.curr,t?"destructuring assignment":"destructuring binding","6"),Yt(e)}function Yt(e){var t,n=[],r=e&&e.openingParsed,i=e&&e.assignment,s=i?{assignment:i}:null,o=r?f.tokens.curr:f.tokens.next,u=function(){var e;if(hn(f.tokens.next,["[","{"])){t=Yt(s);for(var r in t)r=t[r],n.push({id:r.id,token:r.token})}else if(pn(f.tokens.next,","))n.push({id:null,token:f.tokens.curr});else{if(!pn(f.tokens.next,"(")){var o=pn(f.tokens.next,"...");if(i){var a=o?W(0):f.tokens.next;a.identifier||F("E030",a,a.value);var l=Q(155);l&&(wt(l),l.identifier&&(e=l.value))}else e=Ct();return e&&n.push({id:e,token:f.tokens.curr}),o}V("("),u(),V(")")}return!1},a=function(){var e;pn(f.tokens.next,"[")?(V("["),Q(10),V("]"),V(":"),u()):f.tokens.next.id==="(string)"||f.tokens.next.id==="(number)"?(V(),V(":"),u()):(e=Ct(),pn(f.tokens.next,":")?(V(":"),u()):e&&(i&&wt(f.tokens.curr),n.push({id:e,token:f.tokens.curr})))};if(pn(o,"[")){r||V("["),pn(f.tokens.next,"]")&&F("W137",f.tokens.curr);var l=!1;while(!pn(f.tokens.next,"]"))u()&&!l&&pn(f.tokens.next,",")&&(F("W130",f.tokens.next),l=!0),pn(f.tokens.next,"=")&&(pn(f.tokens.prev,"...")?V("]"):V("="),f.tokens.next.id==="undefined"&&F("W080",f.tokens.prev,f.tokens.prev.value),Q(10)),pn(f.tokens.next,"]")||V(",");V("]")}else if(pn(o,"{")){r||V("{"),pn(f.tokens.next,"}")&&F("W137",f.tokens.curr);while(!pn(f.tokens.next,"}")){a(),pn(f.tokens.next,"=")&&(V("="),f.tokens.next.id==="undefined"&&F("W080",f.tokens.prev,f.tokens.prev.value),Q(10));if(!pn(f.tokens.next,"}")){V(",");if(pn(f.tokens.next,"}"))break}}V("}")}return n}function Zt(e,t){var n=t.first;if(!n)return;r.zip(e,Array.isArray(n)?n:[n]).forEach(function(e){var t=e[0],n=e[1];t&&n?t.first=n:t&&t.first&&!n&&F("W080",t.first,t.first.value)})}function en(e,t,n){var i=n&&n.prefix,s=n&&n.inexport,o=e==="let",u=e==="const",a,l,c,h;f.inES6()||F("W104",f.tokens.curr,e,"6"),o&&f.tokens.next.value==="("?(f.inMoz()||F("W118",f.tokens.next,"let block"),V("("),f.funct["(scope)"].stack(),h=!0):f.funct["(noblockscopedvar)"]&&q("E048",f.tokens.curr,u?"Const":"Let"),t.first=[];for(;;){var p=[];r.contains(["{","["],f.tokens.next.value)?(a=Gt(),l=!1):(a=[{id:Ct(),token:f.tokens.curr}],l=!0),!i&&u&&f.tokens.next.id!=="="&&F("E012",f.tokens.curr,f.tokens.curr.value);for(var d in a)a.hasOwnProperty(d)&&(d=a[d],f.funct["(scope)"].block.isGlobal()&&S[d.id]===!1&&F("W079",d.token,d.id),d.id&&!f.funct["(noblockscopedvar)"]&&(f.funct["(scope)"].addlabel(d.id,{type:e,token:d.token}),p.push(d.token),l&&s&&f.funct["(scope)"].setExported(d.token.value,d.token)));f.tokens.next.id==="="&&(V("="),!i&&f.tokens.next.id==="undefined"&&F("W080",f.tokens.prev,f.tokens.prev.value),!i&&W(0).id==="="&&f.tokens.next.identifier&&F("W120",f.tokens.next,f.tokens.next.value),c=Q(i?120:10),l?a[0].first=c:Zt(p,c)),t.first=t.first.concat(p);if(f.tokens.next.id!==",")break;tt()}return h&&(V(")"),_t(!0,!0),t.block=!0,f.funct["(scope)"].unstack()),t}function sn(e){return f.inES6()||F("W104",f.tokens.curr,"class","6"),e?(this.name=Ct(),f.funct["(scope)"].addlabel(this.name,{type:"class",token:f.tokens.curr})):f.tokens.next.identifier&&f.tokens.next.value!=="extends"?(this.name=Ct(),this.namedExpr=!0):this.name=f.nameStack.infer(),on(this),this}function on(e){var t=f.inClassBody;f.tokens.next.value==="extends"&&(V("extends"),e.heritage=Q(10)),f.inClassBody=!0,V("{"),e.body=un(e),V("}"),f.inClassBody=t}function un(e){var t,n,r,i,s=Object.create(null),o=Object.create(null),u;for(var a=0;f.tokens.next.id!=="}";++a){t=f.tokens.next,n=!1,r=!1,i=null;if(t.id===";"){F("W032"),V(";");continue}t.id==="*"&&(r=!0,V("*"),t=f.tokens.next);if(t.id==="[")t=cn(),u=!0;else{if(!Ft(t)){F("W052",f.tokens.next,f.tokens.next.value||f.tokens.next.type),V();continue}V(),u=!1;if(t.identifier&&t.value==="static"){pn(f.tokens.next,"*")&&(r=!0,V("*"));if(Ft(f.tokens.next)||f.tokens.next.id==="[")u=f.tokens.next.id==="[",n=!0,t=f.tokens.next,f.tokens.next.id==="["?t=cn():V()}t.identifier&&(t.value==="get"||t.value==="set")&&(Ft(f.tokens.next)||f.tokens.next.id==="[")&&(u=f.tokens.next.id==="[",i=t,t=f.tokens.next,f.tokens.next.id==="["?t=cn():V())}if(!pn(f.tokens.next,"(")){q("E054",f.tokens.next,f.tokens.next.value);while(f.tokens.next.id!=="}"&&!pn(f.tokens.next,"("))V();f.tokens.next.value!=="("&&Xt({statement:e})}u||(i?ln(i.value,n?o:s,t.value,t,!0,n):(t.value==="constructor"?f.nameStack.set(e):f.nameStack.set(t),fn(n?o:s,t.value,t,!0,n)));if(i&&t.value==="constructor"){var l=i.value==="get"?"class getter method":"class setter method";q("E049",t,l,"constructor")}else t.value==="prototype"&&q("E049",t,"class method","prototype");It(t),Xt({statement:e,type:r?"generator":null,classExprBinding:e.namedExpr?e.name:null})}Kt(s)}function fn(e,t,n,r,i){var s=["key","class method","static class method"];s=s[(r||!1)+(i||!1)],n.identifier&&(t=n.value),e[t]&&t!=="__proto__"?F("W075",f.tokens.next,s,t):e[t]=Object.create(null),e[t].basic=!0,e[t].basictkn=n}function ln(e,t,n,r,i,s){var o=e==="get"?"getterToken":"setterToken",u="";i?(s&&(u+="static "),u+=e+"ter method"):u="key",f.tokens.curr.accessorType=e,f.nameStack.set(r),t[n]?(t[n].basic||t[n][o])&&n!=="__proto__"&&F("W075",f.tokens.next,u,n):t[n]=Object.create(null),t[n][o]=r}function cn(){V("["),f.inES6()||F("W119",f.tokens.curr,"computed property names","6");var e=Q(10);return V("]"),e}function hn(e,t){return e.type==="(punctuator)"?r.contains(t,e.value):!1}function pn(e,t){return e.type==="(punctuator)"&&e.value===t}function dn(){var e=an();e.notJson?(!f.inES6()&&e.isDestAssign&&F("W104",f.tokens.curr,"destructuring assignment","6"),Ot()):(f.option.laxbreak=!0,f.jsonMode=!0,mn())}function mn(){function e(){var e={},t=f.tokens.next;V("{");if(f.tokens.next.id!=="}")for(;;){if(f.tokens.next.id==="(end)")q("E026",f.tokens.next,t.line);else{if(f.tokens.next.id==="}"){F("W094",f.tokens.curr);break}f.tokens.next.id===","?q("E028",f.tokens.next):f.tokens.next.id!=="(string)"&&F("W095",f.tokens.next,f.tokens.next.value)}e[f.tokens.next.value]===!0?F("W075",f.tokens.next,"key",f.tokens.next.value):f.tokens.next.value==="__proto__"&&!f.option.proto||f.tokens.next.value==="__iterator__"&&!f.option.iterator?F("W096",f.tokens.next,f.tokens.next.value):e[f.tokens.next.value]=!0,V(),V(":"),mn();if(f.tokens.next.id!==",")break;V(",")}V("}")}function t(){var e=f.tokens.next;V("[");if(f.tokens.next.id!=="]")for(;;){if(f.tokens.next.id==="(end)")q("E027",f.tokens.next,e.line);else{if(f.tokens.next.id==="]"){F("W094",f.tokens.curr);break}f.tokens.next.id===","&&q("E028",f.tokens.next)}mn();if(f.tokens.next.id!==",")break;V(",")}V("]")}switch(f.tokens.next.id){case"{":e();break;case"[":t();break;case"true":case"false":case"null":case"(number)":case"(string)":V();break;case"-":V("-"),V("(number)");break;default:q("E003",f.tokens.next)}}var e,t={"<":!0,"<=":!0,"==":!0,"===":!0,"!==":!0,"!=":!0,">":!0,">=":!0,"+":!0,"-":!0,"*":!0,"/":!0,"%":!0},n,d=["closure","exception","global","label","outer","unused","var"],v,m,g,y,b,w,E,S,x,T,N=[],C=new i.EventEmitter,mt={};mt.legacy=["xml","unknown"],mt.es3=["undefined","boolean","number","string","function","object"],mt.es3=mt.es3.concat(mt.legacy),mt.es6=mt.es3.concat("symbol"),at("(number)",function(){return this}),at("(string)",function(){return this}),f.syntax["(identifier)"]={type:"(identifier)",lbp:0,identifier:!0,nud:function(){var e=this.value;return f.tokens.next.id==="=>"?this:(f.funct["(comparray)"].check(e)||f.funct["(scope)"].block.use(e,f.tokens.curr),this)},led:function(){q("E033",f.tokens.next,f.tokens.next.value)}};var Pt={lbp:0,identifier:!1,template:!0};f.syntax["(template)"]=r.extend({type:"(template)",nud:Wt,led:Wt,noSubst:!1},Pt),f.syntax["(template middle)"]=r.extend({type:"(template middle)",middle:!0,noSubst:!1},Pt),f.syntax["(template tail)"]=r.extend({type:"(template tail)",tail:!0,noSubst:!1},Pt),f.syntax["(no subst template)"]=r.extend({type:"(template)",nud:Wt,led:Wt,noSubst:!0,tail:!0},Pt),at("(regexp)",function(){return this}),rt("(endline)"),rt("(begin)"),rt("(end)").reach=!0,rt("(error)").reach=!0,rt("}").reach=!0,rt(")"),rt("]"),rt('"').reach=!0,rt("'").reach=!0,rt(";"),rt(":").reach=!0,rt("#"),ft("else"),ft("case").reach=!0,ft("catch"),ft("default").reach=!0,ft("finally"),ct("arguments",function(e){f.isStrict()&&f.funct["(global)"]&&F("E008",e)}),ct("eval"),ct("false"),ct("Infinity"),ct("null"),ct("this",function(e){f.isStrict()&&!jt()&&!f.option.validthis&&(f.funct["(statement)"]&&f.funct["(name)"].charAt(0)>"Z"||f.funct["(global)"])&&F("W040",e)}),ct("true"),ct("undefined"),Et("=","assign",20),Et("+=","assignadd",20),Et("-=","assignsub",20),Et("*=","assignmult",20),Et("/=","assigndiv",20).nud=function(){q("E014")},Et("%=","assignmod",20),xt("&="),xt("|="),xt("^="),xt("<<="),xt(">>="),xt(">>>="),ht(",",function(e,t){var n;t.exprs=[e],f.option.nocomma&&F("W127");if(!tt({peek:!0}))return t;for(;;){if(!(n=Q(10)))break;t.exprs.push(n);if(f.tokens.next.value!==","||!tt())break}return t},10,!0),ht("?",function(e,t){return $t(),t.left=e,t.right=Q(10),V(":"),t["else"]=Q(10),t},30);var Ht=40;ht("||",function(e,t){return $t(),t.left=e,t.right=Q(Ht),t},Ht),ht("&&","and",50),St("|","bitor",70),St("^","bitxor",80),St("&","bitand",90),dt("==",function(e,t){var n=f.option.eqnull&&((e&&e.value)==="null"||(t&&t.value)==="null");switch(!0){case!n&&f.option.eqeqeq:this.from=this.character,F("W116",this,"===","==");break;case vt(e):F("W041",this,"===",e.value);break;case vt(t):F("W041",this,"===",t.value);break;case gt(t,e,f):F("W122",this,t.value);break;case gt(e,t,f):F("W122",this,e.value)}return this}),dt("===",function(e,t){return gt(t,e,f)?F("W122",this,t.value):gt(e,t,f)&&F("W122",this,e.value),this}),dt("!=",function(e,t){var n=f.option.eqnull&&((e&&e.value)==="null"||(t&&t.value)==="null");return!n&&f.option.eqeqeq?(this.from=this.character,F("W116",this,"!==","!=")):vt(e)?F("W041",this,"!==",e.value):vt(t)?F("W041",this,"!==",t.value):gt(t,e,f)?F("W122",this,t.value):gt(e,t,f)&&F("W122",this,e.value),this}),dt("!==",function(e,t){return gt(t,e,f)?F("W122",this,t.value):gt(e,t,f)&&F("W122",this,e.value),this}),dt("<"),dt(">"),dt("<="),dt(">="),St("<<","shiftleft",120),St(">>","shiftright",120),St(">>>","shiftrightunsigned",120),ht("in","in",120),ht("instanceof","instanceof",120),ht("+",function(e,t){var n;return t.left=e,t.right=n=Q(130),e&&n&&e.id==="(string)"&&n.id==="(string)"?(e.value+=n.value,e.character=n.character,!f.option.scripturl&&a.javascriptURL.test(e.value)&&F("W050",e),e):t},130),ut("+","num"),ut("+++",function(){return F("W007"),this.arity="unary",this.right=Q(150),this}),ht("+++",function(e){return F("W007"),this.left=e,this.right=Q(130),this},130),ht("-","sub",130),ut("-","neg"),ut("---",function(){return F("W006"),this.arity="unary",this.right=Q(150),this}),ht("---",function(e){return F("W006"),this.left=e,this.right=Q(130),this},130),ht("*","mult",140),ht("/","div",140),ht("%","mod",140),Tt("++"),ut("++","preinc"),f.syntax["++"].exps=!0,Tt("--"),ut("--","predec"),f.syntax["--"].exps=!0,ut("delete",function(){var e=Q(10);return e?(e.id!=="."&&e.id!=="["&&F("W051"),this.first=e,e.identifier&&!f.isStrict()&&(e.forgiveUndef=!0),this):this}).exps=!0,ut("~",function(){return f.option.bitwise&&F("W016",this,"~"),this.arity="unary",this.right=Q(150),this}),ut("...",function(){return f.inES6(!0)||F("W119",this,"spread/rest operator","6"),!f.tokens.next.identifier&&f.tokens.next.type!=="(string)"&&!hn(f.tokens.next,["[","("])&&q("E030",f.tokens.next,f.tokens.next.value),Q(150),this}),ut("!",function(){return this.arity="unary",this.right=Q(150),this.right||B("E041",this.line||0),t[this.right.id]===!0&&F("W018",this,"!"),this}),ut("typeof",function(){var e=Q(150);return this.first=this.right=e,e||B("E041",this.line||0,this.character||0),e.identifier&&(e.forgiveUndef=!0),this}),ut("new",function(){var e=Qt("target",function(){f.inES6(!0)||F("W119",f.tokens.prev,"new.target","6");var e,t=f.funct;while(t){e=!t["(global)"];if(!t["(arrow)"])break;t=t["(context)"]}e||F("W136",f.tokens.prev,"new.target")});if(e)return e;var t=Q(155),n;if(t&&t.id!=="function")if(t.identifier){t["new"]=!0;switch(t.value){case"Number":case"String":case"Boolean":case"Math":case"JSON":F("W053",f.tokens.prev,t.value);break;case"Symbol":f.inES6()&&F("W053",f.tokens.prev,t.value);break;case"Function":f.option.evil||F("W054");break;case"Date":case"RegExp":case"this":break;default:t.id!=="function"&&(n=t.value.substr(0,1),f.option.newcap&&(n<"A"||n>"Z")&&!f.funct["(scope)"].isPredefined(t.value)&&F("W055",f.tokens.curr))}}else t.id!=="."&&t.id!=="["&&t.id!=="("&&F("W056",f.tokens.curr);else f.option.supernew||F("W057",this);return f.tokens.next.id!=="("&&!f.option.supernew&&F("W058",f.tokens.curr,f.tokens.curr.value),this.first=this.right=t,this}),f.syntax["new"].exps=!0,ut("void").exps=!0,ht(".",function(e,t){var n=Ct(!1,!0);return typeof n=="string"&&Dt(n),t.left=e,t.right=n,n&&n==="hasOwnProperty"&&f.tokens.next.value==="="&&F("W001"),!e||e.value!=="arguments"||n!=="callee"&&n!=="caller"?!f.option.evil&&e&&e.value==="document"&&(n==="write"||n==="writeln")&&F("W060",e):f.option.noarg?F("W059",e,n):f.isStrict()&&q("E008"),!f.option.evil&&(n==="eval"||n==="execScript")&&yt(e,f)&&F("W061"),t},160,!0),ht("(",function(e,t){f.option.immed&&e&&!e.immed&&e.id==="function"&&F("W062");var n=0,r=[];e&&e.type==="(identifier)"&&e.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)&&"Array Number String Boolean Date Object Error Symbol".indexOf(e.value)===-1&&(e.value==="Math"?F("W063",e):f.option.newcap&&F("W064",e));if(f.tokens.next.id!==")")for(;;){r[r.length]=Q(10),n+=1;if(f.tokens.next.id!==",")break;tt()}return V(")"),typeof e=="object"&&(!f.inES5()&&e.value==="parseInt"&&n===1&&F("W065",f.tokens.curr),f.option.evil||(e.value==="eval"||e.value==="Function"||e.value==="execScript"?(F("W061",e),r[0]&&[0].id==="(string)"&&U(e,r[0].value)):!r[0]||r[0].id!=="(string)"||e.value!=="setTimeout"&&e.value!=="setInterval"?r[0]&&r[0].id==="(string)"&&e.value==="."&&e.left.value==="window"&&(e.right==="setTimeout"||e.right==="setInterval")&&(F("W066",e),U(e,r[0].value)):(F("W066",e),U(e,r[0].value))),!e.identifier&&e.id!=="."&&e.id!=="["&&e.id!=="=>"&&e.id!=="("&&e.id!=="&&"&&e.id!=="||"&&e.id!=="?"&&(!f.inES6()||!e["(name)"])&&F("W067",t)),t.left=e,t},155,!0).exps=!0,ut("(",function(){var e=f.tokens.next,t,n=-1,r,i,s,o,u=1,a=f.tokens.curr,l=f.tokens.prev,c=!f.option.singleGroups;do e.value==="("?u+=1:e.value===")"&&(u-=1),n+=1,t=e,e=W(n);while((u!==0||t.value!==")")&&e.value!==";"&&e.type!=="(end)");f.tokens.next.id==="function"&&(i=f.tokens.next.immed=!0);if(e.value==="=>")return Xt({type:"arrow",parsedOpening:!0});var h=[];if(f.tokens.next.id!==")")for(;;){h.push(Q(10));if(f.tokens.next.id!==",")break;f.option.nocomma&&F("W127"),tt()}V(")",this),f.option.immed&&h[0]&&h[0].id==="function"&&f.tokens.next.id!=="("&&f.tokens.next.id!=="."&&f.tokens.next.id!=="["&&F("W068",this);if(!h.length)return;return h.length>1?(r=Object.create(f.syntax[","]),r.exprs=h,s=h[0],o=h[h.length-1],c||(c=l.assign||l.delim)):(r=s=o=h[0],c||(c=a.beginsStmt&&(r.id==="{"||i||Ut(r))||i&&(!J()||f.tokens.prev.id!=="}")||Ut(r)&&!J()||r.id==="{"&&l.id==="=>"||r.type==="(number)"&&pn(e,".")&&/^\d+$/.test(r.value))),r&&(!c&&(s.left||s.right||r.exprs)&&(c=!K(l)&&s.lbp<=l.lbp||!J()&&o.lbp"),ht("[",function(e,t){var n=Q(10),r;return n&&n.type==="(string)"&&(!f.option.evil&&(n.value==="eval"||n.value==="execScript")&&yt(e,f)&&F("W061"),Dt(n.value),!f.option.sub&&a.identifier.test(n.value)&&(r=f.syntax[n.value],(!r||!O(r))&&F("W069",f.tokens.prev,n.value))),V("]",t),n&&n.value==="hasOwnProperty"&&f.tokens.next.value==="="&&F("W001"),t.left=e,t.right=n,t},160,!0),ut("[",function(){var e=an();if(e.isCompArray)return!f.option.esnext&&!f.inMoz()&&F("W118",f.tokens.curr,"array comprehension"),Bt();if(e.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;var t=f.tokens.curr.line!==G(f.tokens.next);this.first=[],t&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));while(f.tokens.next.id!=="(end)"){while(f.tokens.next.id===","){if(!f.option.elision){if(!!f.inES5()){F("W128");do V(",");while(f.tokens.next.id===",");continue}F("W070")}V(",")}if(f.tokens.next.id==="]")break;this.first.push(Q(10));if(f.tokens.next.id!==",")break;tt({allowTrailing:!0});if(f.tokens.next.id==="]"&&!f.inES5()){F("W070",f.tokens.curr);break}}return t&&(g-=f.option.indent),V("]",this),this}),function(e){e.nud=function(){var e,t,n,r,i,s=!1,o,u=Object.create(null);e=f.tokens.curr.line!==G(f.tokens.next),e&&(g+=f.option.indent,f.tokens.next.from===g+f.option.indent&&(g+=f.option.indent));var a=an();if(a.isDestAssign)return this.destructAssign=Gt({openingParsed:!0,assignment:!0}),this;for(;;){if(f.tokens.next.id==="}")break;o=f.tokens.next.value;if(!f.tokens.next.identifier||X().id!==","&&X().id!=="}")if(W().id===":"||o!=="get"&&o!=="set"){f.tokens.next.value==="*"&&f.tokens.next.type==="(punctuator)"?(f.inES6()||F("W104",f.tokens.next,"generator functions","6"),V("*"),s=!0):s=!1;if(f.tokens.next.id==="[")n=cn(),f.nameStack.set(n);else{f.nameStack.set(f.tokens.next),n=It(),fn(u,n,f.tokens.next);if(typeof n!="string")break}f.tokens.next.value==="("?(f.inES6()||F("W104",f.tokens.curr,"concise methods","6"),Xt({type:s?"generator":null})):(V(":"),Q(10))}else V(o),f.inES5()||q("E034"),n=It(),!n&&!f.inES6()&&q("E035"),n&&ln(o,u,n,f.tokens.curr),i=f.tokens.next,t=Xt(),r=t["(params)"],o==="get"&&n&&r?F("W076",i,r[0],n):o==="set"&&n&&(!r||r.length!==1)&&F("W077",i,n);else f.inES6()||F("W104",f.tokens.next,"object short notation","6"),n=It(!0),fn(u,n,f.tokens.next),Q(10);Dt(n);if(f.tokens.next.id!==",")break;tt({allowTrailing:!0,property:!0}),f.tokens.next.id===","?F("W070",f.tokens.curr):f.tokens.next.id==="}"&&!f.inES5()&&F("W070",f.tokens.curr)}return e&&(g-=f.option.indent),V("}",this),Kt(u),this},e.fud=function(){q("E036",f.tokens.curr)}}(rt("{"));var tn=it("const",function(e){return en("const",this,e)});tn.exps=!0;var nn=it("let",function(e){return en("let",this,e)});nn.exps=!0;var rn=it("var",function(e){var t=e&&e.prefix,n=e&&e.inexport,i,o,u,a=e&&e.implied,l=!e||!e.ignore;this.first=[];for(;;){var c=[];r.contains(["{","["],f.tokens.next.value)?(i=Gt(),o=!1):(i=[{id:Ct(),token:f.tokens.curr}],o=!0),(!t||!a)&&l&&f.option.varstmt&&F("W132",this),this.first=this.first.concat(c);for(var h in i)i.hasOwnProperty(h)&&(h=i[h],!a&&f.funct["(global)"]&&(S[h.id]===!1?F("W079",h.token,h.id):f.option.futurehostile===!1&&(!f.inES5()&&s.ecmaIdentifiers[5][h.id]===!1||!f.inES6()&&s.ecmaIdentifiers[6][h.id]===!1)&&F("W129",h.token,h.id)),h.id&&(a==="for"?(f.funct["(scope)"].has(h.id)||l&&F("W088",h.token,h.id),f.funct["(scope)"].block.use(h.id,h.token)):(f.funct["(scope)"].addlabel(h.id,{type:"var",token:h.token}),o&&n&&f.funct["(scope)"].setExported(h.id,h.token)),c.push(h.token)));f.tokens.next.id==="="&&(f.nameStack.set(f.tokens.curr),V("="),!t&&l&&!f.funct["(loopage)"]&&f.tokens.next.id==="undefined"&&F("W080",f.tokens.prev,f.tokens.prev.value),W(0).id==="="&&f.tokens.next.identifier&&(!t&&l&&!f.funct["(params)"]||f.funct["(params)"].indexOf(f.tokens.next.value)===-1)&&F("W120",f.tokens.next,f.tokens.next.value),u=Q(t?120:10),o?i[0].first=u:Zt(c,u));if(f.tokens.next.id!==",")break;tt()}return this});rn.exps=!0,st("class",function(){return sn.call(this,!0)}),st("function",function(e){var t=e&&e.inexport,n=!1;f.tokens.next.value==="*"&&(V("*"),f.inES6({strict:!0})?n=!0:F("W119",f.tokens.curr,"function*","6")),m&&F("W082",f.tokens.curr);var r=Nt();return f.funct["(scope)"].addlabel(r,{type:"function",token:f.tokens.curr}),r===undefined?F("W025"):t&&f.funct["(scope)"].setExported(r,f.tokens.prev),Xt({name:r,statement:this,type:n?"generator":null,ignoreLoopFunc:m}),f.tokens.next.id==="("&&f.tokens.next.line===f.tokens.curr.line&&q("E039"),this}),ut("function",function(){var e=!1;f.tokens.next.value==="*"&&(f.inES6()||F("W119",f.tokens.curr,"function*","6"),V("*"),e=!0);var t=Nt();return Xt({name:t,type:e?"generator":null}),this}),st("if",function(){var e=f.tokens.next;$t(),f.condition=!0,V("(");var t=Q(0);Jt(t);var n=null;f.option.forin&&f.forinifcheckneeded&&(f.forinifcheckneeded=!1,n=f.forinifchecks[f.forinifchecks.length-1],t.type==="(punctuator)"&&t.value==="!"?n.type="(negative)":n.type="(positive)"),V(")",e),f.condition=!1;var r=_t(!0,!0);return n&&n.type==="(negative)"&&r&&r[0]&&r[0].type==="(identifier)"&&r[0].value==="continue"&&(n.type="(negative-with-continue)"),f.tokens.next.id==="else"&&(V("else"),f.tokens.next.id==="if"||f.tokens.next.id==="switch"?At():_t(!0,!0)),this}),st("try",function(){function t(){V("catch"),V("("),f.funct["(scope)"].stack("catchparams");if(hn(f.tokens.next,["[","{"])){var e=Gt();r.each(e,function(e){e.id&&f.funct["(scope)"].addParam(e.id,e,"exception")})}else f.tokens.next.type!=="(identifier)"?F("E030",f.tokens.next,f.tokens.next.value):f.funct["(scope)"].addParam(Ct(),f.tokens.curr,"exception");f.tokens.next.value==="if"&&(f.inMoz()||F("W118",f.tokens.curr,"catch filter"),V("if"),Q(0)),V(")"),_t(!1),f.funct["(scope)"].unstack()}var e;_t(!0);while(f.tokens.next.id==="catch")$t(),e&&!f.inMoz()&&F("W118",f.tokens.next,"multiple catch blocks"),t(),e=!0;if(f.tokens.next.id==="finally"){V("finally"),_t(!0);return}return e||q("E021",f.tokens.next,"catch",f.tokens.next.value),this}),st("while",function(){var e=f.tokens.next;return f.funct["(breakage)"]+=1,f.funct["(loopage)"]+=1,$t(),V("("),Jt(Q(0)),V(")",e),_t(!0,!0),f.funct["(breakage)"]-=1,f.funct["(loopage)"]-=1,this}).labelled=!0,st("with",function(){var e=f.tokens.next;return f.isStrict()?q("E010",f.tokens.curr):f.option.withstmt||F("W085",f.tokens.curr),V("("),Q(0),V(")",e),_t(!0,!0),this}),st("switch",function(){var e=f.tokens.next,t=!1,n=!1;f.funct["(breakage)"]+=1,V("("),Jt(Q(0)),V(")",e),e=f.tokens.next,V("{"),f.tokens.next.from===g&&(n=!0),n||(g+=f.option.indent),this.cases=[];for(;;)switch(f.tokens.next.id){case"case":switch(f.funct["(verb)"]){case"yield":case"break":case"case":case"continue":case"return":case"switch":case"throw":break;default:f.tokens.curr.caseFallsThrough||F("W086",f.tokens.curr,"case")}V("case"),this.cases.push(Q(0)),$t(),t=!0,V(":"),f.funct["(verb)"]="case";break;case"default":switch(f.funct["(verb)"]){case"yield":case"break":case"continue":case"return":case"throw":break;default:this.cases.length&&(f.tokens.curr.caseFallsThrough||F("W086",f.tokens.curr,"default"))}V("default"),t=!0,V(":");break;case"}":n||(g-=f.option.indent),V("}",e),f.funct["(breakage)"]-=1,f.funct["(verb)"]=undefined;return;case"(end)":q("E023",f.tokens.next,"}");return;default:g+=f.option.indent;if(t)switch(f.tokens.curr.id){case",":q("E040");return;case":":t=!1,Ot();break;default:q("E025",f.tokens.curr);return}else{if(f.tokens.curr.id!==":"){q("E021",f.tokens.next,"case",f.tokens.next.value);return}V(":"),q("E024",f.tokens.curr,":"),Ot()}g-=f.option.indent}return this}).labelled=!0,it("debugger",function(){return f.option.debug||F("W087",this),this}).exps=!0,function(){var e=it("do",function(){f.funct["(breakage)"]+=1,f.funct["(loopage)"]+=1,$t(),this.first=_t(!0,!0),V("while");var e=f.tokens.next;return V("("),Jt(Q(0)),V(")",e),f.funct["(breakage)"]-=1,f.funct["(loopage)"]-=1,this});e.labelled=!0,e.exps=!0}(),st("for",function(){var e,t=f.tokens.next,n=!1,i=null;t.value==="each"&&(i=t,V("each"),f.inMoz()||F("W118",f.tokens.curr,"for each")),$t(),V("(");var s,o=0,u=["in","of"],a=0,l,c;hn(f.tokens.next,["{","["])&&++a;do{s=W(o),++o,hn(s,["{","["])?++a:hn(s,["}","]"])&&--a;if(a<0)break;a===0&&(!l&&pn(s,",")?l=s:!c&&pn(s,"=")&&(c=s))}while(a>0||!r.contains(u,s.value)&&s.value!==";"&&s.type!=="(end)");if(r.contains(u,s.value)){!f.inES6()&&s.value==="of"&&F("W104",s,"for of","6");var h=!c&&!l;c&&q("W133",l,s.value,"initializer is forbidden"),l&&q("W133",l,s.value,"more than one ForBinding"),f.tokens.next.id==="var"?(V("var"),f.tokens.curr.fud({prefix:!0})):f.tokens.next.id==="let"||f.tokens.next.id==="const"?(V(f.tokens.next.id),n=!0,f.funct["(scope)"].stack(),f.tokens.curr.fud({prefix:!0})):Object.create(rn).fud({prefix:!0,implied:"for",ignore:!h}),V(s.value),Q(20),V(")",t),s.value==="in"&&f.option.forin&&(f.forinifcheckneeded=!0,f.forinifchecks===undefined&&(f.forinifchecks=[]),f.forinifchecks.push({type:"(none)"})),f.funct["(breakage)"]+=1,f.funct["(loopage)"]+=1,e=_t(!0,!0);if(s.value==="in"&&f.option.forin){if(f.forinifchecks&&f.forinifchecks.length>0){var p=f.forinifchecks.pop();(e&&e.length>0&&(typeof e[0]!="object"||e[0].value!=="if")||p.type==="(positive)"&&e.length>1||p.type==="(negative)")&&F("W089",this)}f.forinifcheckneeded=!1}f.funct["(breakage)"]-=1,f.funct["(loopage)"]-=1}else{i&&q("E045",i);if(f.tokens.next.id!==";")if(f.tokens.next.id==="var")V("var"),f.tokens.curr.fud();else if(f.tokens.next.id==="let")V("let"),n=!0,f.funct["(scope)"].stack(),f.tokens.curr.fud();else for(;;){Q(0,"for");if(f.tokens.next.id!==",")break;l()}Z(f.tokens.curr),V(";"),f.funct["(loopage)"]+=1,f.tokens.next.id!==";"&&Jt(Q(0)),Z(f.tokens.curr),V(";"),f.tokens.next.id===";"&&q("E021",f.tokens.next,")",";");if(f.tokens.next.id!==")")for(;;){Q(0,"for");if(f.tokens.next.id!==",")break;l()}V(")",t),f.funct["(breakage)"]+=1,_t(!0,!0),f.funct["(breakage)"]-=1,f.funct["(loopage)"]-=1}return n&&f.funct["(scope)"].unstack(),this}).labelled=!0,it("break",function(){var e=f.tokens.next.value;return f.option.asi||Z(this),f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)?(f.funct["(scope)"].funct.hasBreakLabel(e)||F("W090",f.tokens.next,e),this.first=f.tokens.next,V()):f.funct["(breakage)"]===0&&F("W052",f.tokens.next,this.value),kt(this),this}).exps=!0,it("continue",function(){var e=f.tokens.next.value;return f.funct["(breakage)"]===0&&F("W052",f.tokens.next,this.value),f.funct["(loopage)"]||F("W052",f.tokens.next,this.value),f.option.asi||Z(this),f.tokens.next.id!==";"&&!f.tokens.next.reach&&f.tokens.curr.line===G(f.tokens.next)&&(f.funct["(scope)"].funct.hasBreakLabel(e)||F("W090",f.tokens.next,e),this.first=f.tokens.next,V()),kt(this),this}).exps=!0,it("return",function(){return this.line===G(f.tokens.next)?f.tokens.next.id!==";"&&!f.tokens.next.reach&&(this.first=Q(0),this.first&&this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&I("W093",this.first.line,this.first.character)):f.tokens.next.type==="(punctuator)"&&["[","{","+","-"].indexOf(f.tokens.next.value)>-1&&Z(this),kt(this),this}).exps=!0,function(e){e.exps=!0,e.lbp=25}(ut("yield",function(){var e=f.tokens.prev;f.inES6(!0)&&!f.funct["(generator)"]?("(catch)"!==f.funct["(name)"]||!f.funct["(context)"]["(generator)"])&&q("E046",f.tokens.curr,"yield"):f.inES6()||F("W104",f.tokens.curr,"yield","6"),f.funct["(generator)"]="yielded";var t=!1;f.tokens.next.value==="*"&&(t=!0,V("*"));if(this.line===G(f.tokens.next)||!f.inMoz()){if(t||f.tokens.next.id!==";"&&!f.option.asi&&!f.tokens.next.reach&&f.tokens.next.nud)Y(f.tokens.curr,f.tokens.next),this.first=Q(10),this.first.type==="(punctuator)"&&this.first.value==="="&&!this.first.paren&&!f.option.boss&&I("W093",this.first.line,this.first.character);f.inMoz()&&f.tokens.next.id!==")"&&(e.lbp>30||!e.assign&&!J()||e.id==="yield")&&q("E050",this)}else f.option.asi||Z(this);return this})),it("throw",function(){return Z(this),this.first=Q(20),kt(this),this}).exps=!0,it("import",function(){f.inES6()||F("W119",f.tokens.curr,"import","6");if(f.tokens.next.type==="(string)")return V("(string)"),this;if(f.tokens.next.identifier){this.name=Ct(),f.funct["(scope)"].addlabel(this.name,{type:"const",token:f.tokens.curr});if(f.tokens.next.value!==",")return V("from"),V("(string)"),this;V(",")}if(f.tokens.next.id==="*")V("*"),V("as"),f.tokens.next.identifier&&(this.name=Ct(),f.funct["(scope)"].addlabel(this.name,{type:"const",token:f.tokens.curr}));else{V("{");for(;;){if(f.tokens.next.value==="}"){V("}");break}var e;f.tokens.next.type==="default"?(e="default",V("default")):e=Ct(),f.tokens.next.value==="as"&&(V("as"),e=Ct()),f.funct["(scope)"].addlabel(e,{type:"const",token:f.tokens.curr});if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){V("}");break}q("E024",f.tokens.next,f.tokens.next.value);break}V(",")}}return V("from"),V("(string)"),this}).exps=!0,it("export",function(){var e=!0,t,n;f.inES6()||(F("W119",f.tokens.curr,"export","6"),e=!1),f.funct["(scope)"].block.isGlobal()||(q("E053",f.tokens.curr),e=!1);if(f.tokens.next.value==="*")return V("*"),V("from"),V("(string)"),this;if(f.tokens.next.type==="default"){f.nameStack.set(f.tokens.next),V("default");var r=f.tokens.next.id;if(r==="function"||r==="class")this.block=!0;return t=W(),Q(10),n=t.value,this.block&&(f.funct["(scope)"].addlabel(n,{type:r,token:t}),f.funct["(scope)"].setExported(n,t)),this}if(f.tokens.next.value==="{"){V("{");var i=[];for(;;){f.tokens.next.identifier||q("E030",f.tokens.next,f.tokens.next.value),V(),i.push(f.tokens.curr),f.tokens.next.value==="as"&&(V("as"),f.tokens.next.identifier||q("E030",f.tokens.next,f.tokens.next.value),V());if(f.tokens.next.value!==","){if(f.tokens.next.value==="}"){V("}");break}q("E024",f.tokens.next,f.tokens.next.value);break}V(",")}return f.tokens.next.value==="from"?(V("from"),V("(string)")):e&&i.forEach(function(e){f.funct["(scope)"].setExported(e.value,e)}),this}if(f.tokens.next.id==="var")V("var"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id==="let")V("let"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id==="const")V("const"),f.tokens.curr.fud({inexport:!0});else if(f.tokens.next.id==="function")this.block=!0,V("function"),f.syntax["function"].fud({inexport:!0});else if(f.tokens.next.id==="class"){this.block=!0,V("class");var s=f.tokens.next;f.syntax["class"].fud(),f.funct["(scope)"].setExported(s.value,s)}else q("E024",f.tokens.next,f.tokens.next.value);return this}).exps=!0,lt("abstract"),lt("boolean"),lt("byte"),lt("char"),lt("class",{es5:!0,nud:sn}),lt("double"),lt("enum",{es5:!0}),lt("export",{es5:!0}),lt("extends",{es5:!0}),lt("final"),lt("float"),lt("goto"),lt("implements",{es5:!0,strictOnly:!0}),lt("import",{es5:!0}),lt("int"),lt("interface",{es5:!0,strictOnly:!0}),lt("long"),lt("native"),lt("package",{es5:!0,strictOnly:!0}),lt("private",{es5:!0,strictOnly:!0}),lt("protected",{es5:!0,strictOnly:!0}),lt("public",{es5:!0,strictOnly:!0}),lt("short"),lt("static",{es5:!0,strictOnly:!0}),lt("super",{es5:!0}),lt("synchronized"),lt("transient"),lt("volatile");var an=function(){var e,t,n,r=-1,i=0,s={};hn(f.tokens.curr,["[","{"])&&(i+=1);do{n=r===-1?f.tokens.curr:e,e=r===-1?f.tokens.next:W(r),t=W(r+1),r+=1,hn(e,["[","{"])?i+=1:hn(e,["]","}"])&&(i-=1);if(i===1&&e.identifier&&e.value==="for"&&!pn(n,".")){s.isCompArray=!0,s.notJson=!0;break}if(i===0&&hn(e,["}","]"])){if(t.value==="="){s.isDestAssign=!0,s.notJson=!0;break}if(t.value==="."){s.notJson=!0;break}}pn(e,";")&&(s.isBlock=!0,s.notJson=!0)}while(i>0&&e.id!=="(end)");return s},vn=function(){function i(e){var t=n.variables.filter(function(t){if(t.value===e)return t.undef=!1,e}).length;return t!==0}function s(e){var t=n.variables.filter(function(t){if(t.value===e&&!t.undef)return t.unused===!0&&(t.unused=!1),e}).length;return t===0}var e=function(){this.mode="use",this.variables=[]},t=[],n;return{stack:function(){n=new e,t.push(n)},unstack:function(){n.variables.filter(function(e){e.unused&&F("W098",e.token,e.raw_text||e.value),e.undef&&f.funct["(scope)"].block.use(e.value,e.token)}),t.splice(-1,1),n=t[t.length-1]},setState:function(e){r.contains(["use","define","generate","filter"],e)&&(n.mode=e)},check:function(e){if(!n)return;return n&&n.mode==="use"?(s(e)&&n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!0,unused:!1}),!0):n&&n.mode==="define"?(i(e)||n.variables.push({funct:f.funct,token:f.tokens.curr,value:e,undef:!1,unused:!0}),!0):n&&n.mode==="generate"?(f.funct["(scope)"].block.use(e,f.tokens.curr),!0):n&&n.mode==="filter"?(s(e)&&f.funct["(scope)"].block.use(e,f.tokens.curr),!0):!1}}},gn=function(e){return e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&")},yn=function(t,i,o){function U(e,t){if(!e)return;!Array.isArray(e)&&typeof e=="object"&&(e=Object.keys(e)),e.forEach(t)}var a,l,c,d,A,O,M={},P={};i=r.clone(i),f.reset(),i&&i.scope?p.scope=i.scope:(p.errors=[],p.undefs=[],p.internals=[],p.blacklist={},p.scope="(main)"),S=Object.create(null),D(S,s.ecmaIdentifiers[3]),D(S,s.reservedVars),D(S,o||{}),n=Object.create(null);var j=Object.create(null);if(i){U(i.predef||null,function(e){var t,n;e[0]==="-"?(t=e.slice(1),p.blacklist[t]=t,delete S[t]):(n=Object.getOwnPropertyDescriptor(i.predef,e),S[e]=n?n.value:!1)}),U(i.exported||null,function(e){j[e]=!0}),delete i.predef,delete i.exported,O=Object.keys(i);for(c=0;c0&&(e.implieds=u),T.length>0&&(e.urls=T),o=f.funct["(scope)"].getUsedOrDefinedGlobals(),o.length>0&&(e.globals=o);for(r=1;r0&&(e.unused=a);for(s in w)if(typeof w[s]=="number"){e.member=w;break}return e},yn.jshint=yn,yn}();typeof n=="object"&&n&&(n.JSHINT=p)},{"../lodash":"/node_modules/jshint/lodash.js","./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./scope-manager.js":"/node_modules/jshint/src/scope-manager.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/lex.js":[function(e,t,n){"use strict";function h(){var e=[];return{push:function(t){e.push(t)},check:function(){for(var t=0;t0&&this.context[this.context.length-1].type===e},pushContext:function(e){this.context.push({type:e})},popContext:function(){return this.context.pop()},isContext:function(e){return this.context.length>0&&this.context[this.context.length-1]===e},currentContext:function(){return this.context.length>0&&this.context[this.context.length-1]},getLines:function(){return this._lines=o.lines,this._lines},setLines:function(e){this._lines=e,o.lines=this._lines},peek:function(e){return this.input.charAt(e||0)},skip:function(e){e=e||1,this.char+=e,this.input=this.input.slice(e)},on:function(e,t){e.split(" ").forEach(function(e){this.emitter.on(e,t)}.bind(this))},trigger:function(){this.emitter.emit.apply(this.emitter,Array.prototype.slice.call(arguments))},triggerAsync:function(e,t,n,r){n.push(function(){r()&&this.trigger(e,t)}.bind(this))},scanPunctuator:function(){var e=this.peek(),t,n,r;switch(e){case".":if(/^[0-9]$/.test(this.peek(1)))return null;if(this.peek(1)==="."&&this.peek(2)===".")return{type:l.Punctuator,value:"..."};case"(":case")":case";":case",":case"[":case"]":case":":case"~":case"?":return{type:l.Punctuator,value:e};case"{":return this.pushContext(c.Block),{type:l.Punctuator,value:e};case"}":return this.inContext(c.Block)&&this.popContext(),{type:l.Punctuator,value:e};case"#":return{type:l.Punctuator,value:e};case"":return null}return t=this.peek(1),n=this.peek(2),r=this.peek(3),e===">"&&t===">"&&n===">"&&r==="="?{type:l.Punctuator,value:">>>="}:e==="="&&t==="="&&n==="="?{type:l.Punctuator,value:"==="}:e==="!"&&t==="="&&n==="="?{type:l.Punctuator,value:"!=="}:e===">"&&t===">"&&n===">"?{type:l.Punctuator,value:">>>"}:e==="<"&&t==="<"&&n==="="?{type:l.Punctuator,value:"<<="}:e===">"&&t===">"&&n==="="?{type:l.Punctuator,value:">>="}:e==="="&&t===">"?{type:l.Punctuator,value:e+t}:e===t&&"+-<>&|".indexOf(e)>=0?{type:l.Punctuator,value:e+t}:"<>=!+-*%&|^".indexOf(e)>=0?t==="="?{type:l.Punctuator,value:e+t}:{type:l.Punctuator,value:e}:e==="/"?t==="="?{type:l.Punctuator,value:"/="}:{type:l.Punctuator,value:"/"}:null},scanComments:function(){function u(e,t,n){var r=["jshint","jslint","members","member","globals","global","exported"],i=!1,u=e+t,a="plain";return n=n||{},n.isMultiline&&(u+="*/"),t=t.replace(/\n/g," "),e==="/*"&&s.fallsThrough.test(t)&&(i=!0,a="falls through"),r.forEach(function(n){if(i)return;if(e==="//"&&n!=="jshint")return;t.charAt(n.length)===" "&&t.substr(0,n.length)===n&&(i=!0,e+=n,t=t.substr(n.length)),!i&&t.charAt(0)===" "&&t.charAt(n.length+1)===" "&&t.substr(1,n.length)===n&&(i=!0,e=e+" "+n,t=t.substr(n.length+1));if(!i)return;switch(n){case"member":a="members";break;case"global":a="globals";break;default:var r=t.split(":").map(function(e){return e.replace(/^\s+/,"").replace(/\s+$/,"")});if(r.length===2)switch(r[0]){case"ignore":switch(r[1]){case"start":o.ignoringLinterErrors=!0,i=!1;break;case"end":o.ignoringLinterErrors=!1,i=!1}}a=n}}),{type:l.Comment,commentType:a,value:u,body:t,isSpecial:i,isMultiline:n.isMultiline||!1,isMalformed:n.isMalformed||!1}}var e=this.peek(),t=this.peek(1),n=this.input.substr(2),r=this.line,i=this.char,o=this;if(e==="*"&&t==="/")return this.trigger("error",{code:"E018",line:r,character:i}),this.skip(2),null;if(e!=="/"||t!=="*"&&t!=="/")return null;if(t==="/")return this.skip(this.input.length),u("//",n);var a="";if(t==="*"){this.inComment=!0,this.skip(2);while(this.peek()!=="*"||this.peek(1)!=="/")if(this.peek()===""){a+="\n";if(!this.nextLine())return this.trigger("error",{code:"E017",line:r,character:i}),this.inComment=!1,u("/*",a,{isMultiline:!0,isMalformed:!0})}else a+=this.peek(),this.skip();return this.skip(2),this.inComment=!1,u("/*",a,{isMultiline:!0})}},scanKeyword:function(){var e=/^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input),t=["if","in","do","var","for","new","try","let","this","else","case","void","with","enum","while","break","catch","throw","const","yield","class","super","return","typeof","delete","switch","export","import","default","finally","extends","function","continue","debugger","instanceof"];return e&&t.indexOf(e[0])>=0?{type:l.Keyword,value:e[0]}:null},scanIdentifier:function(){function i(e){return e>256}function s(e){return e>256}function o(e){return/^[0-9a-fA-F]$/.test(e)}function p(e){return e.replace(/\\u([0-9a-fA-F]{4})/g,function(e,t){return String.fromCharCode(parseInt(t,16))})}var e="",t=0,n,r,u=function(){t+=1;if(this.peek(t)!=="u")return null;var e=this.peek(t+1),n=this.peek(t+2),r=this.peek(t+3),i=this.peek(t+4),u;return o(e)&&o(n)&&o(r)&&o(i)?(u=parseInt(e+n+r+i,16),f[u]||s(u)?(t+=5,"\\u"+e+n+r+i):null):null}.bind(this),c=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?a[n]?(t+=1,e):null:i(n)?(t+=1,e):null}.bind(this),h=function(){var e=this.peek(t),n=e.charCodeAt(0);return n===92?u():n<128?f[n]?(t+=1,e):null:s(n)?(t+=1,e):null}.bind(this);r=c();if(r===null)return null;e=r;for(;;){r=h();if(r===null)break;e+=r}switch(e){case"true":case"false":n=l.BooleanLiteral;break;case"null":n=l.NullLiteral;break;default:n=l.Identifier}return{type:n,value:p(e),text:e,tokenLength:e.length}},scanNumericLiteral:function(){function f(e){return/^[0-9]$/.test(e)}function c(e){return/^[0-7]$/.test(e)}function h(e){return/^[01]$/.test(e)}function p(e){return/^[0-9a-fA-F]$/.test(e)}function d(e){return e==="$"||e==="_"||e==="\\"||e>="a"&&e<="z"||e>="A"&&e<="Z"}var e=0,t="",n=this.input.length,r=this.peek(e),i,s=f,u=10,a=!1;if(r!=="."&&!f(r))return null;if(r!=="."){t=this.peek(e),e+=1,r=this.peek(e);if(t==="0"){if(r==="x"||r==="X")s=p,u=16,e+=1,t+=r;if(r==="o"||r==="O")s=c,u=8,o.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Octal integer literal","6"]}),e+=1,t+=r;if(r==="b"||r==="B")s=h,u=2,o.inES6(!0)||this.trigger("warning",{code:"W119",line:this.line,character:this.char,data:["Binary integer literal","6"]}),e+=1,t+=r;c(r)&&(s=c,u=8,a=!0,i=!1,e+=1,t+=r),!c(r)&&f(r)&&(e+=1,t+=r)}while(e=0&&i<=7&&o.isStrict()});break;case"u":var s=this.input.substr(1,4),u=parseInt(s,16);isNaN(u)&&this.trigger("warning",{code:"W052",line:this.line,character:this.char,data:["u"+s]}),r=String.fromCharCode(u),n=5;break;case"v":this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\v"]},e,function(){return o.jsonMode}),r=" ";break;case"x":var a=parseInt(this.input.substr(1,2),16);this.triggerAsync("warning",{code:"W114",line:this.line,character:this.char,data:["\\x-"]},e,function(){return o.jsonMode}),r=String.fromCharCode(a),n=3;break;case"\\":r="\\\\";break;case'"':r='\\"';break;case"/":break;case"":t=!0,r=""}return{"char":r,jump:n,allowNewLine:t}},scanTemplateLiteral:function(e){var t,n="",r,i=this.line,s=this.char,u=this.templateStarts.length;if(!o.inES6(!0))return null;if(this.peek()==="`")t=l.TemplateHead,this.templateStarts.push({line:this.line,"char":this.char}),u=this.templateStarts.length,this.skip(1),this.pushContext(c.Template);else{if(!this.inContext(c.Template)||this.peek()!=="}")return null;t=l.TemplateMiddle}while(this.peek()!=="`"){while((r=this.peek())===""){n+="\n";if(!this.nextLine()){var a=this.templateStarts.pop();return this.trigger("error",{code:"E052",line:a.line,character:a.char}),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!0,depth:u,context:this.popContext()}}}if(r==="$"&&this.peek(1)==="{")return n+="${",this.skip(2),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.currentContext()};if(r==="\\"){var f=this.scanEscapeSequence(e);n+=f.char,this.skip(f.jump)}else r!=="`"&&(n+=r,this.skip(1))}return t=t===l.TemplateHead?l.NoSubstTemplate:l.TemplateTail,this.skip(1),this.templateStarts.pop(),{type:t,value:n,startLine:i,startChar:s,isUnclosed:!1,depth:u,context:this.popContext()}},scanStringLiteral:function(e){var t=this.peek();if(t!=='"'&&t!=="'")return null;this.triggerAsync("warning",{code:"W108",line:this.line,character:this.char},e,function(){return o.jsonMode&&t!=='"'});var n="",r=this.line,i=this.char,s=!1;this.skip();while(this.peek()!==t)if(this.peek()===""){s?(s=!1,this.triggerAsync("warning",{code:"W043",line:this.line,character:this.char},e,function(){return!o.option.multistr}),this.triggerAsync("warning",{code:"W042",line:this.line,character:this.char},e,function(){return o.jsonMode&&o.option.multistr})):this.trigger("warning",{code:"W112",line:this.line,character:this.char});if(!this.nextLine())return this.trigger("error",{code:"E029",line:r,character:i}),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!0,quote:t}}else{s=!1;var u=this.peek(),a=1;u<" "&&this.trigger("warning",{code:"W113",line:this.line,character:this.char,data:[""]});if(u==="\\"){var f=this.scanEscapeSequence(e);u=f.char,a=f.jump,s=f.allowNewLine}n+=u,this.skip(a)}return this.skip(),{type:l.StringLiteral,value:n,startLine:r,startChar:i,isUnclosed:!1,quote:t}},scanRegExp:function(){var e=0,t=this.input.length,n=this.peek(),r=n,i="",s=[],o=!1,u=!1,a,f=function(){n<" "&&(o=!0,this.trigger("warning",{code:"W048",line:this.line,character:this.char})),n==="<"&&(o=!0,this.trigger("warning",{code:"W049",line:this.line,character:this.char,data:[n]}))}.bind(this);if(!this.prereg||n!=="/")return null;e+=1,a=!1;while(e=this.getLines().length)return!1;this.input=this.getLines()[this.line],this.line+=1,this.char=1,this.from=1;var t=this.input.trim(),n=function(){return r.some(arguments,function(e){return t.indexOf(e)===0})},i=function(){return r.some(arguments,function(e){return t.indexOf(e,t.length-e.length)!==-1})};this.ignoringLinterErrors===!0&&!n("/*","//")&&(!this.inComment||!i("*/"))&&(this.input=""),e=this.scanNonBreakingSpaces(),e>=0&&this.trigger("warning",{code:"W125",line:this.line,character:e+1}),this.input=this.input.replace(/\t/g,o.tab),e=this.scanUnsafeChars(),e>=0&&this.trigger("warning",{code:"W100",line:this.line,character:e});if(!this.ignoringLinterErrors&&o.option.maxlen&&o.option.maxlen=0;--t){var n=a[t]["(labels)"];if(n[e])return n}}function x(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n["(usages)"][e])return n["(usages)"][e];if(n===l)break}return!1}function T(t,n){if(e.option.shadow!=="outer")return;var r=l["(type)"]==="global",i=u["(type)"]==="functionparams",s=!r;for(var o=0;o1?a[a.length-2]:null,n=u===l,i=u["(type)"]==="functionparams",f=u["(type)"]==="functionouter",p,d,g=u["(usages)"],y=u["(labels)"],E=Object.keys(g);g.__proto__&&E.indexOf("__proto__")===-1&&E.push("__proto__");for(p=0;p=0;s--){var o=a[s];if(o["(labels)"][e]&&(!n||o["(labels)"][e]["(blockscoped)"]))return o["(labels)"][e]["(type)"];var u=r?a[s-1]:o;if(u&&u["(type)"]==="functionparams")return null}return null},hasBreakLabel:function(e){for(var t=a.length-1;t>=0;t--){var n=a[t];if(n["(breakLabels)"][e])return!0;if(n["(type)"]==="functionparams")return!1}return!1},has:function(e,t){return Boolean(this.labeltype(e,t))},add:function(e,t,n,r){u["(labels)"][e]={"(type)":t,"(token)":n,"(blockscoped)":!1,"(function)":l,"(unused)":r}}},block:{isGlobal:function(){return u["(type)"]==="global"},use:function(t,n){var r=l["(parent)"];r&&r["(labels)"][t]&&r["(labels)"][t]["(type)"]==="param"&&(C.funct.has(t,{excludeParams:!0,onlyBlockscoped:!0})||(r["(labels)"][t]["(unused)"]=!1)),n&&(e.ignored.W117||e.option.undef===!1)&&(n.ignoreUndef=!0),g(t),n&&(n["(function)"]=l,u["(usages)"][t]["(tokens)"].push(n))},reassign:function(e,t){this.modify(e,t),u["(usages)"][e]["(reassigned)"].push(t)},modify:function(e,t){g(e),u["(usages)"][e]["(modified)"].push(t)},add:function(e,t,n,r){u["(labels)"][e]={"(type)":t,"(token)":n,"(blockscoped)":!0,"(unused)":r}},addBreakLabel:function(t,n){var r=n.token;C.funct.hasBreakLabel(t)?v("E011",r,t):e.option.shadow==="outer"&&(C.funct.has(t)?v("W004",r,t):T(t,r)),u["(breakLabels)"][t]=r}}};return C};t.exports=o},{"../lodash":"/node_modules/jshint/lodash.js",events:"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/state.js":[function(e,t,n){"use strict";var r=e("./name-stack.js"),i={syntax:{},isStrict:function(){return this.directive["use strict"]||this.inClassBody||this.option.module||this.option.strict==="implied"},inMoz:function(){return this.option.moz},inES6:function(){return this.option.moz||this.option.esversion>=6},inES5:function(e){return e?(!this.option.esversion||this.option.esversion===5)&&!this.option.moz:!this.option.esversion||this.option.esversion>=5||this.option.moz},reset:function(){this.tokens={prev:null,next:null,curr:null},this.option={},this.funct=null,this.ignored={},this.directive={},this.jsonMode=!1,this.jsonWarnings=[],this.lines=[],this.tab="",this.cache={},this.ignoredLines={},this.forinifcheckneeded=!1,this.nameStack=new r,this.inClassBody=!1}};n.state=i},{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(e,t,n){"use strict";n.register=function(e){e.on("Identifier",function(n){if(e.getOption("proto"))return;n.name==="__proto__"&&e.warn("W103",{line:n.line,"char":n.char,data:[n.name,"6"]})}),e.on("Identifier",function(n){if(e.getOption("iterator"))return;n.name==="__iterator__"&&e.warn("W103",{line:n.line,"char":n.char,data:[n.name]})}),e.on("Identifier",function(n){if(!e.getOption("camelcase"))return;n.name.replace(/^_+|_+$/g,"").indexOf("_")>-1&&!n.name.match(/^[A-Z0-9_]*$/)&&e.warn("W106",{line:n.line,"char":n.from,data:[n.name]})}),e.on("String",function(n){var r=e.getOption("quotmark"),i;if(!r)return;r==="single"&&n.quote!=="'"&&(i="W109"),r==="double"&&n.quote!=='"'&&(i="W108"),r===!0&&(e.getCache("quotmark")||e.setCache("quotmark",n.quote),e.getCache("quotmark")!==n.quote&&(i="W110")),i&&e.warn(i,{line:n.line,"char":n.char})}),e.on("Number",function(n){n.value.charAt(0)==="."&&e.warn("W008",{line:n.line,"char":n.char,data:[n.value]}),n.value.substr(n.value.length-1)==="."&&e.warn("W047",{line:n.line,"char":n.char,data:[n.value]}),/^00+/.test(n.value)&&e.warn("W046",{line:n.line,"char":n.char,data:[n.value]})}),e.on("String",function(n){var r=/^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i;if(e.getOption("scripturl"))return;r.test(n.value)&&e.warn("W107",{line:n.line,"char":n.char})})}},{}],"/node_modules/jshint/src/vars.js":[function(e,t,n){"use strict";n.reservedVars={arguments:!1,NaN:!1},n.ecmaIdentifiers={3:{Array:!1,Boolean:!1,Date:!1,decodeURI:!1,decodeURIComponent:!1,encodeURI:!1,encodeURIComponent:!1,Error:!1,eval:!1,EvalError:!1,Function:!1,hasOwnProperty:!1,isFinite:!1,isNaN:!1,Math:!1,Number:!1,Object:!1,parseInt:!1,parseFloat:!1,RangeError:!1,ReferenceError:!1,RegExp:!1,String:!1,SyntaxError:!1,TypeError:!1,URIError:!1},5:{JSON:!1},6:{Map:!1,Promise:!1,Proxy:!1,Reflect:!1,Set:!1,Symbol:!1,WeakMap:!1,WeakSet:!1}},n.browser={Audio:!1,Blob:!1,addEventListener:!1,applicationCache:!1,atob:!1,blur:!1,btoa:!1,cancelAnimationFrame:!1,CanvasGradient:!1,CanvasPattern:!1,CanvasRenderingContext2D:!1,CSS:!1,clearInterval:!1,clearTimeout:!1,close:!1,closed:!1,Comment:!1,CustomEvent:!1,DOMParser:!1,defaultStatus:!1,Document:!1,document:!1,DocumentFragment:!1,Element:!1,ElementTimeControl:!1,Event:!1,event:!1,fetch:!1,FileReader:!1,FormData:!1,focus:!1,frames:!1,getComputedStyle:!1,HTMLElement:!1,HTMLAnchorElement:!1,HTMLBaseElement:!1,HTMLBlockquoteElement:!1,HTMLBodyElement:!1,HTMLBRElement:!1,HTMLButtonElement:!1,HTMLCanvasElement:!1,HTMLCollection:!1,HTMLDirectoryElement:!1,HTMLDivElement:!1,HTMLDListElement:!1,HTMLFieldSetElement:!1,HTMLFontElement:!1,HTMLFormElement:!1,HTMLFrameElement:!1,HTMLFrameSetElement:!1,HTMLHeadElement:!1,HTMLHeadingElement:!1,HTMLHRElement:!1,HTMLHtmlElement:!1,HTMLIFrameElement:!1,HTMLImageElement:!1,HTMLInputElement:!1,HTMLIsIndexElement:!1,HTMLLabelElement:!1,HTMLLayerElement:!1,HTMLLegendElement:!1,HTMLLIElement:!1,HTMLLinkElement:!1,HTMLMapElement:!1,HTMLMenuElement:!1,HTMLMetaElement:!1,HTMLModElement:!1,HTMLObjectElement:!1,HTMLOListElement:!1,HTMLOptGroupElement:!1,HTMLOptionElement:!1,HTMLParagraphElement:!1,HTMLParamElement:!1,HTMLPreElement:!1,HTMLQuoteElement:!1,HTMLScriptElement:!1,HTMLSelectElement:!1,HTMLStyleElement:!1,HTMLTableCaptionElement:!1,HTMLTableCellElement:!1,HTMLTableColElement:!1,HTMLTableElement:!1,HTMLTableRowElement:!1,HTMLTableSectionElement:!1,HTMLTemplateElement:!1,HTMLTextAreaElement:!1,HTMLTitleElement:!1,HTMLUListElement:!1,HTMLVideoElement:!1,history:!1,Image:!1,Intl:!1,length:!1,localStorage:!1,location:!1,matchMedia:!1,MessageChannel:!1,MessageEvent:!1,MessagePort:!1,MouseEvent:!1,moveBy:!1,moveTo:!1,MutationObserver:!1,name:!1,Node:!1,NodeFilter:!1,NodeList:!1,Notification:!1,navigator:!1,onbeforeunload:!0,onblur:!0,onerror:!0,onfocus:!0,onload:!0,onresize:!0,onunload:!0,open:!1,openDatabase:!1,opener:!1,Option:!1,parent:!1,performance:!1,print:!1,Range:!1,requestAnimationFrame:!1,removeEventListener:!1,resizeBy:!1,resizeTo:!1,screen:!1,scroll:!1,scrollBy:!1,scrollTo:!1,sessionStorage:!1,setInterval:!1,setTimeout:!1,SharedWorker:!1,status:!1,SVGAElement:!1,SVGAltGlyphDefElement:!1,SVGAltGlyphElement:!1,SVGAltGlyphItemElement:!1,SVGAngle:!1,SVGAnimateColorElement:!1,SVGAnimateElement:!1,SVGAnimateMotionElement:!1,SVGAnimateTransformElement:!1,SVGAnimatedAngle:!1,SVGAnimatedBoolean:!1,SVGAnimatedEnumeration:!1,SVGAnimatedInteger:!1,SVGAnimatedLength:!1,SVGAnimatedLengthList:!1,SVGAnimatedNumber:!1,SVGAnimatedNumberList:!1,SVGAnimatedPathData:!1,SVGAnimatedPoints:!1,SVGAnimatedPreserveAspectRatio:!1,SVGAnimatedRect:!1,SVGAnimatedString:!1,SVGAnimatedTransformList:!1,SVGAnimationElement:!1,SVGCSSRule:!1,SVGCircleElement:!1,SVGClipPathElement:!1,SVGColor:!1,SVGColorProfileElement:!1,SVGColorProfileRule:!1,SVGComponentTransferFunctionElement:!1,SVGCursorElement:!1,SVGDefsElement:!1,SVGDescElement:!1,SVGDocument:!1,SVGElement:!1,SVGElementInstance:!1,SVGElementInstanceList:!1,SVGEllipseElement:!1,SVGExternalResourcesRequired:!1,SVGFEBlendElement:!1,SVGFEColorMatrixElement:!1,SVGFEComponentTransferElement:!1,SVGFECompositeElement:!1,SVGFEConvolveMatrixElement:!1,SVGFEDiffuseLightingElement:!1,SVGFEDisplacementMapElement:!1,SVGFEDistantLightElement:!1,SVGFEFloodElement:!1,SVGFEFuncAElement:!1,SVGFEFuncBElement:!1,SVGFEFuncGElement:!1,SVGFEFuncRElement:!1,SVGFEGaussianBlurElement:!1,SVGFEImageElement:!1,SVGFEMergeElement:!1,SVGFEMergeNodeElement:!1,SVGFEMorphologyElement:!1,SVGFEOffsetElement:!1,SVGFEPointLightElement:!1,SVGFESpecularLightingElement:!1,SVGFESpotLightElement:!1,SVGFETileElement:!1,SVGFETurbulenceElement:!1,SVGFilterElement:!1,SVGFilterPrimitiveStandardAttributes:!1,SVGFitToViewBox:!1,SVGFontElement:!1,SVGFontFaceElement:!1,SVGFontFaceFormatElement:!1,SVGFontFaceNameElement:!1,SVGFontFaceSrcElement:!1,SVGFontFaceUriElement:!1,SVGForeignObjectElement:!1,SVGGElement:!1,SVGGlyphElement:!1,SVGGlyphRefElement:!1,SVGGradientElement:!1,SVGHKernElement:!1,SVGICCColor:!1,SVGImageElement:!1,SVGLangSpace:!1,SVGLength:!1,SVGLengthList:!1,SVGLineElement:!1,SVGLinearGradientElement:!1,SVGLocatable:!1,SVGMPathElement:!1,SVGMarkerElement:!1,SVGMaskElement:!1,SVGMatrix:!1,SVGMetadataElement:!1,SVGMissingGlyphElement:!1,SVGNumber:!1,SVGNumberList:!1,SVGPaint:!1,SVGPathElement:!1,SVGPathSeg:!1,SVGPathSegArcAbs:!1,SVGPathSegArcRel:!1,SVGPathSegClosePath:!1,SVGPathSegCurvetoCubicAbs:!1,SVGPathSegCurvetoCubicRel:!1,SVGPathSegCurvetoCubicSmoothAbs:!1,SVGPathSegCurvetoCubicSmoothRel:!1,SVGPathSegCurvetoQuadraticAbs:!1,SVGPathSegCurvetoQuadraticRel:!1,SVGPathSegCurvetoQuadraticSmoothAbs:!1,SVGPathSegCurvetoQuadraticSmoothRel:!1,SVGPathSegLinetoAbs:!1,SVGPathSegLinetoHorizontalAbs:!1,SVGPathSegLinetoHorizontalRel:!1,SVGPathSegLinetoRel:!1,SVGPathSegLinetoVerticalAbs:!1,SVGPathSegLinetoVerticalRel:!1,SVGPathSegList:!1,SVGPathSegMovetoAbs:!1,SVGPathSegMovetoRel:!1,SVGPatternElement:!1,SVGPoint:!1,SVGPointList:!1,SVGPolygonElement:!1,SVGPolylineElement:!1,SVGPreserveAspectRatio:!1,SVGRadialGradientElement:!1,SVGRect:!1,SVGRectElement:!1,SVGRenderingIntent:!1,SVGSVGElement:!1,SVGScriptElement:!1,SVGSetElement:!1,SVGStopElement:!1,SVGStringList:!1,SVGStylable:!1,SVGStyleElement:!1,SVGSwitchElement:!1,SVGSymbolElement:!1,SVGTRefElement:!1,SVGTSpanElement:!1,SVGTests:!1,SVGTextContentElement:!1,SVGTextElement:!1,SVGTextPathElement:!1,SVGTextPositioningElement:!1,SVGTitleElement:!1,SVGTransform:!1,SVGTransformList:!1,SVGTransformable:!1,SVGURIReference:!1,SVGUnitTypes:!1,SVGUseElement:!1,SVGVKernElement:!1,SVGViewElement:!1,SVGViewSpec:!1,SVGZoomAndPan:!1,Text:!1,TextDecoder:!1,TextEncoder:!1,TimeEvent:!1,top:!1,URL:!1,WebGLActiveInfo:!1,WebGLBuffer:!1,WebGLContextEvent:!1,WebGLFramebuffer:!1,WebGLProgram:!1,WebGLRenderbuffer:!1,WebGLRenderingContext:!1,WebGLShader:!1,WebGLShaderPrecisionFormat:!1,WebGLTexture:!1,WebGLUniformLocation:!1,WebSocket:!1,window:!1,Window:!1,Worker:!1,XDomainRequest:!1,XMLHttpRequest:!1,XMLSerializer:!1,XPathEvaluator:!1,XPathException:!1,XPathExpression:!1,XPathNamespace:!1,XPathNSResolver:!1,XPathResult:!1},n.devel={alert:!1,confirm:!1,console:!1,Debug:!1,opera:!1,prompt:!1},n.worker={importScripts:!0,postMessage:!0,self:!0,FileReaderSync:!0},n.nonstandard={escape:!1,unescape:!1},n.couch={require:!1,respond:!1,getRow:!1,emit:!1,send:!1,start:!1,sum:!1,log:!1,exports:!1,module:!1,provides:!1},n.node={__filename:!1,__dirname:!1,GLOBAL:!1,global:!1,module:!1,require:!1,Buffer:!0,console:!0,exports:!0,process:!0,setTimeout:!0,clearTimeout:!0,setInterval:!0,clearInterval:!0,setImmediate:!0,clearImmediate:!0},n.browserify={__filename:!1,__dirname:!1,global:!1,module:!1,require:!1,Buffer:!0,exports:!0,process:!0},n.phantom={phantom:!0,require:!0,WebPage:!0,console:!0,exports:!0},n.qunit={asyncTest:!1,deepEqual:!1,equal:!1,expect:!1,module:!1,notDeepEqual:!1,notEqual:!1,notPropEqual:!1,notStrictEqual:!1,ok:!1,propEqual:!1,QUnit:!1,raises:!1,start:!1,stop:!1,strictEqual:!1,test:!1,"throws":!1},n.rhino={defineClass:!1,deserialize:!1,gc:!1,help:!1,importClass:!1,importPackage:!1,java:!1,load:!1,loadClass:!1,Packages:!1,print:!1,quit:!1,readFile:!1,readUrl:!1,runCommand:!1,seal:!1,serialize:!1,spawn:!1,sync:!1,toint32:!1,version:!1},n.shelljs={target:!1,echo:!1,exit:!1,cd:!1,pwd:!1,ls:!1,find:!1,cp:!1,rm:!1,mv:!1,mkdir:!1,test:!1,cat:!1,sed:!1,grep:!1,which:!1,dirs:!1,pushd:!1,popd:!1,env:!1,exec:!1,chmod:!1,config:!1,error:!1,tempdir:!1},n.typed={ArrayBuffer:!1,ArrayBufferView:!1,DataView:!1,Float32Array:!1,Float64Array:!1,Int16Array:!1,Int32Array:!1,Int8Array:!1,Uint16Array:!1,Uint32Array:!1,Uint8Array:!1,Uint8ClampedArray:!1},n.wsh={ActiveXObject:!0,Enumerator:!0,GetObject:!0,ScriptEngine:!0,ScriptEngineBuildVersion:!0,ScriptEngineMajorVersion:!0,ScriptEngineMinorVersion:!0,VBArray:!0,WSH:!0,WScript:!0,XDomainRequest:!0},n.dojo={dojo:!1,dijit:!1,dojox:!1,define:!1,require:!1},n.jquery={$:!1,jQuery:!1},n.mootools={$:!1,$$:!1,Asset:!1,Browser:!1,Chain:!1,Class:!1,Color:!1,Cookie:!1,Core:!1,Document:!1,DomReady:!1,DOMEvent:!1,DOMReady:!1,Drag:!1,Element:!1,Elements:!1,Event:!1,Events:!1,Fx:!1,Group:!1,Hash:!1,HtmlTable:!1,IFrame:!1,IframeShim:!1,InputValidator:!1,instanceOf:!1,Keyboard:!1,Locale:!1,Mask:!1,MooTools:!1,Native:!1,Options:!1,OverText:!1,Request:!1,Scroller:!1,Slick:!1,Slider:!1,Sortables:!1,Spinner:!1,Swiff:!1,Tips:!1,Type:!1,typeOf:!1,URI:!1,Window:!1},n.prototypejs={$:!1,$$:!1,$A:!1,$F:!1,$H:!1,$R:!1,$break:!1,$continue:!1,$w:!1,Abstract:!1,Ajax:!1,Class:!1,Enumerable:!1,Element:!1,Event:!1,Field:!1,Form:!1,Hash:!1,Insertion:!1,ObjectRange:!1,PeriodicalExecuter:!1,Position:!1,Prototype:!1,Selector:!1,Template:!1,Toggle:!1,Try:!1,Autocompleter:!1,Builder:!1,Control:!1,Draggable:!1,Draggables:!1,Droppables:!1,Effect:!1,Sortable:!1,SortableObserver:!1,Sound:!1,Scriptaculous:!1},n.yui={YUI:!1,Y:!1,YUI_config:!1},n.mocha={mocha:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,context:!1,xcontext:!1,before:!1,after:!1,beforeEach:!1,afterEach:!1,suite:!1,test:!1,setup:!1,teardown:!1,suiteSetup:!1,suiteTeardown:!1},n.jasmine={jasmine:!1,describe:!1,xdescribe:!1,it:!1,xit:!1,beforeEach:!1,afterEach:!1,setFixtures:!1,loadFixtures:!1,spyOn:!1,expect:!1,runs:!1,waitsFor:!1,waits:!1,beforeAll:!1,afterAll:!1,fail:!1,fdescribe:!1,fit:!1,pending:!1}},{}]},{},["/node_modules/jshint/src/jshint.js"])}),ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"],function(require,exports,module){"use strict";function startRegex(e){return RegExp("^("+e.join("|")+")")}var oop=require("../lib/oop"),Mirror=require("../worker/mirror").Mirror,lint=require("./javascript/jshint").JSHINT,disabledWarningsRe=startRegex(["Bad for in variable '(.+)'.",'Missing "use strict"']),errorsRe=startRegex(["Unexpected","Expected ","Confusing (plus|minus)","\\{a\\} unterminated regular expression","Unclosed ","Unmatched ","Unbegun comment","Bad invocation","Missing space after","Missing operator at"]),infoRe=startRegex(["Expected an assignment","Bad escapement of EOL","Unexpected comma","Unexpected space","Missing radix parameter.","A leading decimal point can","\\['{a}'\\] is better written in dot notation.","'{a}' used out of scope"]),JavaScriptWorker=exports.JavaScriptWorker=function(e){Mirror.call(this,e),this.setTimeout(500),this.setOptions()};oop.inherits(JavaScriptWorker,Mirror),function(){this.setOptions=function(e){this.options=e||{esnext:!0,moz:!0,devel:!0,browser:!0,node:!0,laxcomma:!0,laxbreak:!0,lastsemic:!0,onevar:!1,passfail:!1,maxerr:100,expr:!0,multistr:!0,globalstrict:!0},this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.changeOptions=function(e){oop.mixin(this.options,e),this.doc.getValue()&&this.deferredUpdate.schedule(100)},this.isValidJS=function(str){try{eval("throw 0;"+str)}catch(e){if(e===0)return!0}return!1},this.onUpdate=function(){var e=this.doc.getValue();e=e.replace(/^#!.*\n/,"\n");if(!e)return this.sender.emit("annotate",[]);var t=[],n=this.isValidJS(e)?"warning":"error";lint(e,this.options);var r=lint.errors,i=!1;for(var s=0;s0||-1)*Math.floor(Math.abs(e))),e}function B(e){var t=typeof e;return e===null||t==="undefined"||t==="boolean"||t==="number"||t==="string"}function j(e){var t,n,r;if(B(e))return e;n=e.valueOf;if(typeof n=="function"){t=n.call(e);if(B(t))return t}r=e.toString;if(typeof r=="function"){t=r.call(e);if(B(t))return t}throw new TypeError}Function.prototype.bind||(Function.prototype.bind=function(t){var n=this;if(typeof n!="function")throw new TypeError("Function.prototype.bind called on incompatible "+n);var i=u.call(arguments,1),s=function(){if(this instanceof s){var e=n.apply(this,i.concat(u.call(arguments)));return Object(e)===e?e:this}return n.apply(t,i.concat(u.call(arguments)))};return n.prototype&&(r.prototype=n.prototype,s.prototype=new r,r.prototype=null),s});var i=Function.prototype.call,s=Array.prototype,o=Object.prototype,u=s.slice,a=i.bind(o.toString),f=i.bind(o.hasOwnProperty),l,c,h,p,d;if(d=f(o,"__defineGetter__"))l=i.bind(o.__defineGetter__),c=i.bind(o.__defineSetter__),h=i.bind(o.__lookupGetter__),p=i.bind(o.__lookupSetter__);if([1,2].splice(0).length!=2)if(!function(){function e(e){var t=new Array(e+2);return t[0]=t[1]=0,t}var t=[],n;t.splice.apply(t,e(20)),t.splice.apply(t,e(26)),n=t.length,t.splice(5,0,"XXX"),n+1==t.length;if(n+1==t.length)return!0}())Array.prototype.splice=function(e,t){var n=this.length;e>0?e>n&&(e=n):e==void 0?e=0:e<0&&(e=Math.max(n+e,0)),e+ta)for(h=l;h--;)this[f+h]=this[a+h];if(s&&e===c)this.length=c,this.push.apply(this,i);else{this.length=c+s;for(h=0;h>>0;if(a(t)!="[object Function]")throw new TypeError;while(++s>>0,s=Array(i),o=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var u=0;u>>0,s=[],o,u=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var f=0;f>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0,s=arguments[1];if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");for(var o=0;o>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduce of empty array with no initial value");var s=0,o;if(arguments.length>=2)o=arguments[1];else do{if(s in r){o=r[s++];break}if(++s>=i)throw new TypeError("reduce of empty array with no initial value")}while(!0);for(;s>>0;if(a(t)!="[object Function]")throw new TypeError(t+" is not a function");if(!i&&arguments.length==1)throw new TypeError("reduceRight of empty array with no initial value");var s,o=i-1;if(arguments.length>=2)s=arguments[1];else do{if(o in r){s=r[o--];break}if(--o<0)throw new TypeError("reduceRight of empty array with no initial value")}while(!0);do o in this&&(s=t.call(void 0,s,r[o],o,n));while(o--);return s});if(!Array.prototype.indexOf||[0,1].indexOf(1,2)!=-1)Array.prototype.indexOf=function(t){var n=g&&a(this)=="[object String]"?this.split(""):F(this),r=n.length>>>0;if(!r)return-1;var i=0;arguments.length>1&&(i=H(arguments[1])),i=i>=0?i:Math.max(0,r+i);for(;i>>0;if(!r)return-1;var i=r-1;arguments.length>1&&(i=Math.min(i,H(arguments[1]))),i=i>=0?i:r-Math.abs(i);for(;i>=0;i--)if(i in n&&t===n[i])return i;return-1};Object.getPrototypeOf||(Object.getPrototypeOf=function(t){return t.__proto__||(t.constructor?t.constructor.prototype:o)});if(!Object.getOwnPropertyDescriptor){var y="Object.getOwnPropertyDescriptor called on a non-object: ";Object.getOwnPropertyDescriptor=function(t,n){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(y+t);if(!f(t,n))return;var r,i,s;r={enumerable:!0,configurable:!0};if(d){var u=t.__proto__;t.__proto__=o;var i=h(t,n),s=p(t,n);t.__proto__=u;if(i||s)return i&&(r.get=i),s&&(r.set=s),r}return r.value=t[n],r}}Object.getOwnPropertyNames||(Object.getOwnPropertyNames=function(t){return Object.keys(t)});if(!Object.create){var b;Object.prototype.__proto__===null?b=function(){return{__proto__:null}}:b=function(){var e={};for(var t in e)e[t]=null;return e.constructor=e.hasOwnProperty=e.propertyIsEnumerable=e.isPrototypeOf=e.toLocaleString=e.toString=e.valueOf=e.__proto__=null,e},Object.create=function(t,n){var r;if(t===null)r=b();else{if(typeof t!="object")throw new TypeError("typeof prototype["+typeof t+"] != 'object'");var i=function(){};i.prototype=t,r=new i,r.__proto__=t}return n!==void 0&&Object.defineProperties(r,n),r}}if(Object.defineProperty){var E=w({}),S=typeof document=="undefined"||w(document.createElement("div"));if(!E||!S)var x=Object.defineProperty}if(!Object.defineProperty||x){var T="Property description must be an object: ",N="Object.defineProperty called on non-object: ",C="getters & setters can not be defined on this javascript engine";Object.defineProperty=function(t,n,r){if(typeof t!="object"&&typeof t!="function"||t===null)throw new TypeError(N+t);if(typeof r!="object"&&typeof r!="function"||r===null)throw new TypeError(T+r);if(x)try{return x.call(Object,t,n,r)}catch(i){}if(f(r,"value"))if(d&&(h(t,n)||p(t,n))){var s=t.__proto__;t.__proto__=o,delete t[n],t[n]=r.value,t.__proto__=s}else t[n]=r.value;else{if(!d)throw new TypeError(C);f(r,"get")&&l(t,n,r.get),f(r,"set")&&c(t,n,r.set)}return t}}Object.defineProperties||(Object.defineProperties=function(t,n){for(var r in n)f(n,r)&&Object.defineProperty(t,r,n[r]);return t}),Object.seal||(Object.seal=function(t){return t}),Object.freeze||(Object.freeze=function(t){return t});try{Object.freeze(function(){})}catch(k){Object.freeze=function(t){return function(n){return typeof n=="function"?n:t(n)}}(Object.freeze)}Object.preventExtensions||(Object.preventExtensions=function(t){return t}),Object.isSealed||(Object.isSealed=function(t){return!1}),Object.isFrozen||(Object.isFrozen=function(t){return!1}),Object.isExtensible||(Object.isExtensible=function(t){if(Object(t)===t)throw new TypeError;var n="";while(f(t,n))n+="?";t[n]=!0;var r=f(t,n);return delete t[n],r});if(!Object.keys){var L=!0,A=["toString","toLocaleString","valueOf","hasOwnProperty","isPrototypeOf","propertyIsEnumerable","constructor"],O=A.length;for(var M in{toString:null})L=!1;Object.keys=function I(e){if(typeof e!="object"&&typeof e!="function"||e===null)throw new TypeError("Object.keys called on a non-object");var I=[];for(var t in e)f(e,t)&&I.push(t);if(L)for(var n=0,r=O;n+=?|!|&&|\|\||\?\:|[!$%&*+\-~\/^]=?/, - next : "start" - }, { - token : "punctuation.operator", - regex : /[?:,;.]/, - next : "start" - }, { - token : "paren.lparen", - regex : /[\[({]/, - next : "start" - }, { - token : "paren.rparen", - regex : /[\])}]/ - }, { - token: "comment", - regex: /^#!.*$/ - } - ], - property: [{ - token : "text", - regex : "\\s+" - }, { - token : [ - "storage.type", "punctuation.operator", "entity.name.function", "text", - "keyword.operator", "text", - "storage.type", "text", "entity.name.function", "text", "paren.lparen" - ], - regex : "(" + identifierRe + ")(\\.)(" + identifierRe +")(\\s*)(=)(\\s*)(function)(?:(\\s+)(\\w+))?(\\s*)(\\()", - next: "function_arguments" - }, { - token : "punctuation.operator", - regex : /[.](?![.])/ - }, { - token : "support.function", - regex : /(s(?:h(?:ift|ow(?:Mod(?:elessDialog|alDialog)|Help))|croll(?:X|By(?:Pages|Lines)?|Y|To)?|t(?:op|rike)|i(?:n|zeToContent|debar|gnText)|ort|u(?:p|b(?:str(?:ing)?)?)|pli(?:ce|t)|e(?:nd|t(?:Re(?:sizable|questHeader)|M(?:i(?:nutes|lliseconds)|onth)|Seconds|Ho(?:tKeys|urs)|Year|Cursor|Time(?:out)?|Interval|ZOptions|Date|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Date|FullYear)|FullYear|Active)|arch)|qrt|lice|avePreferences|mall)|h(?:ome|andleEvent)|navigate|c(?:har(?:CodeAt|At)|o(?:s|n(?:cat|textual|firm)|mpile)|eil|lear(?:Timeout|Interval)?|a(?:ptureEvents|ll)|reate(?:StyleSheet|Popup|EventObject))|t(?:o(?:GMTString|S(?:tring|ource)|U(?:TCString|pperCase)|Lo(?:caleString|werCase))|est|a(?:n|int(?:Enabled)?))|i(?:s(?:NaN|Finite)|ndexOf|talics)|d(?:isableExternalCapture|ump|etachEvent)|u(?:n(?:shift|taint|escape|watch)|pdateCommands)|j(?:oin|avaEnabled)|p(?:o(?:p|w)|ush|lugins.refresh|a(?:ddings|rse(?:Int|Float)?)|r(?:int|ompt|eference))|e(?:scape|nableExternalCapture|val|lementFromPoint|x(?:p|ec(?:Script|Command)?))|valueOf|UTC|queryCommand(?:State|Indeterm|Enabled|Value)|f(?:i(?:nd|le(?:ModifiedDate|Size|CreatedDate|UpdatedDate)|xed)|o(?:nt(?:size|color)|rward)|loor|romCharCode)|watch|l(?:ink|o(?:ad|g)|astIndexOf)|a(?:sin|nchor|cos|t(?:tachEvent|ob|an(?:2)?)|pply|lert|b(?:s|ort))|r(?:ou(?:nd|teEvents)|e(?:size(?:By|To)|calc|turnValue|place|verse|l(?:oad|ease(?:Capture|Events)))|andom)|g(?:o|et(?:ResponseHeader|M(?:i(?:nutes|lliseconds)|onth)|Se(?:conds|lection)|Hours|Year|Time(?:zoneOffset)?|Da(?:y|te)|UTC(?:M(?:i(?:nutes|lliseconds)|onth)|Seconds|Hours|Da(?:y|te)|FullYear)|FullYear|A(?:ttention|llResponseHeaders)))|m(?:in|ove(?:B(?:y|elow)|To(?:Absolute)?|Above)|ergeAttributes|a(?:tch|rgins|x))|b(?:toa|ig|o(?:ld|rderWidths)|link|ack))\b(?=\()/ - }, { - token : "support.function.dom", - regex : /(s(?:ub(?:stringData|mit)|plitText|e(?:t(?:NamedItem|Attribute(?:Node)?)|lect))|has(?:ChildNodes|Feature)|namedItem|c(?:l(?:ick|o(?:se|neNode))|reate(?:C(?:omment|DATASection|aption)|T(?:Head|extNode|Foot)|DocumentFragment|ProcessingInstruction|E(?:ntityReference|lement)|Attribute))|tabIndex|i(?:nsert(?:Row|Before|Cell|Data)|tem)|open|delete(?:Row|C(?:ell|aption)|T(?:Head|Foot)|Data)|focus|write(?:ln)?|a(?:dd|ppend(?:Child|Data))|re(?:set|place(?:Child|Data)|move(?:NamedItem|Child|Attribute(?:Node)?)?)|get(?:NamedItem|Element(?:sBy(?:Name|TagName|ClassName)|ById)|Attribute(?:Node)?)|blur)\b(?=\()/ - }, { - token : "support.constant", - regex : /(s(?:ystemLanguage|cr(?:ipts|ollbars|een(?:X|Y|Top|Left))|t(?:yle(?:Sheets)?|atus(?:Text|bar)?)|ibling(?:Below|Above)|ource|uffixes|e(?:curity(?:Policy)?|l(?:ection|f)))|h(?:istory|ost(?:name)?|as(?:h|Focus))|y|X(?:MLDocument|SLDocument)|n(?:ext|ame(?:space(?:s|URI)|Prop))|M(?:IN_VALUE|AX_VALUE)|c(?:haracterSet|o(?:n(?:structor|trollers)|okieEnabled|lorDepth|mp(?:onents|lete))|urrent|puClass|l(?:i(?:p(?:boardData)?|entInformation)|osed|asses)|alle(?:e|r)|rypto)|t(?:o(?:olbar|p)|ext(?:Transform|Indent|Decoration|Align)|ags)|SQRT(?:1_2|2)|i(?:n(?:ner(?:Height|Width)|put)|ds|gnoreCase)|zIndex|o(?:scpu|n(?:readystatechange|Line)|uter(?:Height|Width)|p(?:sProfile|ener)|ffscreenBuffering)|NEGATIVE_INFINITY|d(?:i(?:splay|alog(?:Height|Top|Width|Left|Arguments)|rectories)|e(?:scription|fault(?:Status|Ch(?:ecked|arset)|View)))|u(?:ser(?:Profile|Language|Agent)|n(?:iqueID|defined)|pdateInterval)|_content|p(?:ixelDepth|ort|ersonalbar|kcs11|l(?:ugins|atform)|a(?:thname|dding(?:Right|Bottom|Top|Left)|rent(?:Window|Layer)?|ge(?:X(?:Offset)?|Y(?:Offset)?))|r(?:o(?:to(?:col|type)|duct(?:Sub)?|mpter)|e(?:vious|fix)))|e(?:n(?:coding|abledPlugin)|x(?:ternal|pando)|mbeds)|v(?:isibility|endor(?:Sub)?|Linkcolor)|URLUnencoded|P(?:I|OSITIVE_INFINITY)|f(?:ilename|o(?:nt(?:Size|Family|Weight)|rmName)|rame(?:s|Element)|gColor)|E|whiteSpace|l(?:i(?:stStyleType|n(?:eHeight|kColor))|o(?:ca(?:tion(?:bar)?|lName)|wsrc)|e(?:ngth|ft(?:Context)?)|a(?:st(?:M(?:odified|atch)|Index|Paren)|yer(?:s|X)|nguage))|a(?:pp(?:MinorVersion|Name|Co(?:deName|re)|Version)|vail(?:Height|Top|Width|Left)|ll|r(?:ity|guments)|Linkcolor|bove)|r(?:ight(?:Context)?|e(?:sponse(?:XML|Text)|adyState))|global|x|m(?:imeTypes|ultiline|enubar|argin(?:Right|Bottom|Top|Left))|L(?:N(?:10|2)|OG(?:10E|2E))|b(?:o(?:ttom|rder(?:Width|RightWidth|BottomWidth|Style|Color|TopWidth|LeftWidth))|ufferDepth|elow|ackground(?:Color|Image)))\b/ - }, { - token : "identifier", - regex : identifierRe - }, { - regex: "", - token: "empty", - next: "no_regex" - } - ], - "start": [ - DocCommentHighlightRules.getStartRule("doc-start"), - comments("start"), - { - token: "string.regexp", - regex: "\\/", - next: "regex" - }, { - token : "text", - regex : "\\s+|^$", - next : "start" - }, { - token: "empty", - regex: "", - next: "no_regex" - } - ], - "regex": [ - { - token: "regexp.keyword.operator", - regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" - }, { - token: "string.regexp", - regex: "/[sxngimy]*", - next: "no_regex" - }, { - token : "invalid", - regex: /\{\d+\b,?\d*\}[+*]|[+*$^?][+*]|[$^][?]|\?{3,}/ - }, { - token : "constant.language.escape", - regex: /\(\?[:=!]|\)|\{\d+\b,?\d*\}|[+*]\?|[()$^+*?.]/ - }, { - token : "constant.language.delimiter", - regex: /\|/ - }, { - token: "constant.language.escape", - regex: /\[\^?/, - next: "regex_character_class" - }, { - token: "empty", - regex: "$", - next: "no_regex" - }, { - defaultToken: "string.regexp" - } - ], - "regex_character_class": [ - { - token: "regexp.charclass.keyword.operator", - regex: "\\\\(?:u[\\da-fA-F]{4}|x[\\da-fA-F]{2}|.)" - }, { - token: "constant.language.escape", - regex: "]", - next: "regex" - }, { - token: "constant.language.escape", - regex: "-" - }, { - token: "empty", - regex: "$", - next: "no_regex" - }, { - defaultToken: "string.regexp.charachterclass" - } - ], - "function_arguments": [ - { - token: "variable.parameter", - regex: identifierRe - }, { - token: "punctuation.operator", - regex: "[, ]+" - }, { - token: "punctuation.operator", - regex: "$" - }, { - token: "empty", - regex: "", - next: "no_regex" - } - ], - "qqstring" : [ - { - token : "constant.language.escape", - regex : escapedRe - }, { - token : "string", - regex : "\\\\$", - next : "qqstring" - }, { - token : "string", - regex : '"|$', - next : "no_regex" - }, { - defaultToken: "string" - } - ], - "qstring" : [ - { - token : "constant.language.escape", - regex : escapedRe - }, { - token : "string", - regex : "\\\\$", - next : "qstring" - }, { - token : "string", - regex : "'|$", - next : "no_regex" - }, { - defaultToken: "string" - } - ] - }; - - - if (!options || !options.noES6) { - this.$rules.no_regex.unshift({ - regex: "[{}]", onMatch: function(val, state, stack) { - this.next = val == "{" ? this.nextState : ""; - if (val == "{" && stack.length) { - stack.unshift("start", state); - } - else if (val == "}" && stack.length) { - stack.shift(); - this.next = stack.shift(); - if (this.next.indexOf("string") != -1 || this.next.indexOf("jsx") != -1) - return "paren.quasi.end"; - } - return val == "{" ? "paren.lparen" : "paren.rparen"; - }, - nextState: "start" - }, { - token : "string.quasi.start", - regex : /`/, - push : [{ - token : "constant.language.escape", - regex : escapedRe - }, { - token : "paren.quasi.start", - regex : /\${/, - push : "start" - }, { - token : "string.quasi.end", - regex : /`/, - next : "pop" - }, { - defaultToken: "string.quasi" - }] - }); - - if (!options || !options.noJSX) - JSX.call(this); - } - - this.embedRules(DocCommentHighlightRules, "doc-", - [ DocCommentHighlightRules.getEndRule("no_regex") ]); - - this.normalizeRules(); -}; - -oop.inherits(JavaScriptHighlightRules, TextHighlightRules); - -function JSX() { - var tagRegex = identifierRe.replace("\\d", "\\d\\-"); - var jsxTag = { - onMatch : function(val, state, stack) { - var offset = val.charAt(1) == "/" ? 2 : 1; - if (offset == 1) { - if (state != this.nextState) - stack.unshift(this.next, this.nextState, 0); - else - stack.unshift(this.next); - stack[2]++; - } else if (offset == 2) { - if (state == this.nextState) { - stack[1]--; - if (!stack[1] || stack[1] < 0) { - stack.shift(); - stack.shift(); - } - } - } - return [{ - type: "meta.tag.punctuation." + (offset == 1 ? "" : "end-") + "tag-open.xml", - value: val.slice(0, offset) - }, { - type: "meta.tag.tag-name.xml", - value: val.substr(offset) - }]; - }, - regex : "", - onMatch : function(value, currentState, stack) { - if (currentState == stack[0]) - stack.shift(); - if (value.length == 2) { - if (stack[0] == this.nextState) - stack[1]--; - if (!stack[1] || stack[1] < 0) { - stack.splice(0, 2); - } - } - this.next = stack[0] || "start"; - return [{type: this.token, value: value}]; - }, - nextState: "jsx" - }, - jsxJsRule, - comments("jsxAttributes"), - { - token : "entity.other.attribute-name.xml", - regex : tagRegex - }, { - token : "keyword.operator.attribute-equals.xml", - regex : "=" - }, { - token : "text.tag-whitespace.xml", - regex : "\\s+" - }, { - token : "string.attribute-value.xml", - regex : "'", - stateName : "jsx_attr_q", - push : [ - {token : "string.attribute-value.xml", regex: "'", next: "pop"}, - {include : "reference"}, - {defaultToken : "string.attribute-value.xml"} - ] - }, { - token : "string.attribute-value.xml", - regex : '"', - stateName : "jsx_attr_qq", - push : [ - {token : "string.attribute-value.xml", regex: '"', next: "pop"}, - {include : "reference"}, - {defaultToken : "string.attribute-value.xml"} - ] - }, - jsxTag - ]; - this.$rules.reference = [{ - token : "constant.language.escape.reference.xml", - regex : "(?:&#[0-9]+;)|(?:&#x[0-9a-fA-F]+;)|(?:&[a-zA-Z0-9_:\\.-]+;)" - }]; -} - -function comments(next) { - return [ - { - token : "comment", // multi line comment - regex : /\/\*/, - next: [ - DocCommentHighlightRules.getTagRule(), - {token : "comment", regex : "\\*\\/", next : next || "pop"}, - {defaultToken : "comment", caseInsensitive: true} - ] - }, { - token : "comment", - regex : "\\/\\/", - next: [ - DocCommentHighlightRules.getTagRule(), - {token : "comment", regex : "$|^", next : next || "pop"}, - {defaultToken : "comment", caseInsensitive: true} - ] - } - ]; -} -exports.JavaScriptHighlightRules = JavaScriptHighlightRules; -}); - -ace.define("ace/mode/matching_brace_outdent",["require","exports","module","ace/range"], function(require, exports, module) { -"use strict"; - -var Range = require("../range").Range; - -var MatchingBraceOutdent = function() {}; - -(function() { - - this.checkOutdent = function(line, input) { - if (! /^\s+$/.test(line)) - return false; - - return /^\s*\}/.test(input); - }; - - this.autoOutdent = function(doc, row) { - var line = doc.getLine(row); - var match = line.match(/^(\s*\})/); - - if (!match) return 0; - - var column = match[1].length; - var openBracePos = doc.findMatchingBracket({row: row, column: column}); - - if (!openBracePos || openBracePos.row == row) return 0; - - var indent = this.$getIndent(doc.getLine(openBracePos.row)); - doc.replace(new Range(row, 0, row, column-1), indent); - }; - - this.$getIndent = function(line) { - return line.match(/^\s*/)[0]; - }; - -}).call(MatchingBraceOutdent.prototype); - -exports.MatchingBraceOutdent = MatchingBraceOutdent; -}); - -ace.define("ace/mode/behaviour/cstyle",["require","exports","module","ace/lib/oop","ace/mode/behaviour","ace/token_iterator","ace/lib/lang"], function(require, exports, module) { -"use strict"; - -var oop = require("../../lib/oop"); -var Behaviour = require("../behaviour").Behaviour; -var TokenIterator = require("../../token_iterator").TokenIterator; -var lang = require("../../lib/lang"); - -var SAFE_INSERT_IN_TOKENS = - ["text", "paren.rparen", "punctuation.operator"]; -var SAFE_INSERT_BEFORE_TOKENS = - ["text", "paren.rparen", "punctuation.operator", "comment"]; - -var context; -var contextCache = {}; -var initContext = function(editor) { - var id = -1; - if (editor.multiSelect) { - id = editor.selection.index; - if (contextCache.rangeCount != editor.multiSelect.rangeCount) - contextCache = {rangeCount: editor.multiSelect.rangeCount}; - } - if (contextCache[id]) - return context = contextCache[id]; - context = contextCache[id] = { - autoInsertedBrackets: 0, - autoInsertedRow: -1, - autoInsertedLineEnd: "", - maybeInsertedBrackets: 0, - maybeInsertedRow: -1, - maybeInsertedLineStart: "", - maybeInsertedLineEnd: "" - }; -}; - -var getWrapped = function(selection, selected, opening, closing) { - var rowDiff = selection.end.row - selection.start.row; - return { - text: opening + selected + closing, - selection: [ - 0, - selection.start.column + 1, - rowDiff, - selection.end.column + (rowDiff ? 0 : 1) - ] - }; -}; - -var CstyleBehaviour = function() { - this.add("braces", "insertion", function(state, action, editor, session, text) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (text == '{') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && selected !== "{" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '{', '}'); - } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - if (/[\]\}\)]/.test(line[cursor.column]) || editor.inMultiSelectMode) { - CstyleBehaviour.recordAutoInsert(editor, session, "}"); - return { - text: '{}', - selection: [1, 1] - }; - } else { - CstyleBehaviour.recordMaybeInsert(editor, session, "{"); - return { - text: '{', - selection: [1, 1] - }; - } - } - } else if (text == '}') { - initContext(editor); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == '}') { - var matching = session.$findOpeningBracket('}', {column: cursor.column + 1, row: cursor.row}); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } else if (text == "\n" || text == "\r\n") { - initContext(editor); - var closing = ""; - if (CstyleBehaviour.isMaybeInsertedClosing(cursor, line)) { - closing = lang.stringRepeat("}", context.maybeInsertedBrackets); - CstyleBehaviour.clearMaybeInsertedClosing(); - } - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar === '}') { - var openBracePos = session.findMatchingBracket({row: cursor.row, column: cursor.column+1}, '}'); - if (!openBracePos) - return null; - var next_indent = this.$getIndent(session.getLine(openBracePos.row)); - } else if (closing) { - var next_indent = this.$getIndent(line); - } else { - CstyleBehaviour.clearMaybeInsertedClosing(); - return; - } - var indent = next_indent + session.getTabString(); - - return { - text: '\n' + indent + '\n' + next_indent + closing, - selection: [1, indent.length, 1, indent.length] - }; - } else { - CstyleBehaviour.clearMaybeInsertedClosing(); - } - }); - - this.add("braces", "deletion", function(state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '{') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.end.column, range.end.column + 1); - if (rightChar == '}') { - range.end.column++; - return range; - } else { - context.maybeInsertedBrackets--; - } - } - }); - - this.add("parens", "insertion", function(state, action, editor, session, text) { - if (text == '(') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '(', ')'); - } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, ")"); - return { - text: '()', - selection: [1, 1] - }; - } - } else if (text == ')') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ')') { - var matching = session.$findOpeningBracket(')', {column: cursor.column + 1, row: cursor.row}); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - }); - - this.add("parens", "deletion", function(state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '(') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ')') { - range.end.column++; - return range; - } - } - }); - - this.add("brackets", "insertion", function(state, action, editor, session, text) { - if (text == '[') { - initContext(editor); - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, '[', ']'); - } else if (CstyleBehaviour.isSaneInsertion(editor, session)) { - CstyleBehaviour.recordAutoInsert(editor, session, "]"); - return { - text: '[]', - selection: [1, 1] - }; - } - } else if (text == ']') { - initContext(editor); - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var rightChar = line.substring(cursor.column, cursor.column + 1); - if (rightChar == ']') { - var matching = session.$findOpeningBracket(']', {column: cursor.column + 1, row: cursor.row}); - if (matching !== null && CstyleBehaviour.isAutoInsertedClosing(cursor, line, text)) { - CstyleBehaviour.popAutoInsertedClosing(); - return { - text: '', - selection: [1, 1] - }; - } - } - } - }); - - this.add("brackets", "deletion", function(state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && selected == '[') { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == ']') { - range.end.column++; - return range; - } - } - }); - - this.add("string_dquotes", "insertion", function(state, action, editor, session, text) { - if (text == '"' || text == "'") { - initContext(editor); - var quote = text; - var selection = editor.getSelectionRange(); - var selected = session.doc.getTextRange(selection); - if (selected !== "" && selected !== "'" && selected != '"' && editor.getWrapBehavioursEnabled()) { - return getWrapped(selection, selected, quote, quote); - } else if (!selected) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - var leftChar = line.substring(cursor.column-1, cursor.column); - var rightChar = line.substring(cursor.column, cursor.column + 1); - - var token = session.getTokenAt(cursor.row, cursor.column); - var rightToken = session.getTokenAt(cursor.row, cursor.column + 1); - if (leftChar == "\\" && token && /escape/.test(token.type)) - return null; - - var stringBefore = token && /string|escape/.test(token.type); - var stringAfter = !rightToken || /string|escape/.test(rightToken.type); - - var pair; - if (rightChar == quote) { - pair = stringBefore !== stringAfter; - } else { - if (stringBefore && !stringAfter) - return null; // wrap string with different quote - if (stringBefore && stringAfter) - return null; // do not pair quotes inside strings - var wordRe = session.$mode.tokenRe; - wordRe.lastIndex = 0; - var isWordBefore = wordRe.test(leftChar); - wordRe.lastIndex = 0; - var isWordAfter = wordRe.test(leftChar); - if (isWordBefore || isWordAfter) - return null; // before or after alphanumeric - if (rightChar && !/[\s;,.})\]\\]/.test(rightChar)) - return null; // there is rightChar and it isn't closing - pair = true; - } - return { - text: pair ? quote + quote : "", - selection: [1,1] - }; - } - } - }); - - this.add("string_dquotes", "deletion", function(state, action, editor, session, range) { - var selected = session.doc.getTextRange(range); - if (!range.isMultiLine() && (selected == '"' || selected == "'")) { - initContext(editor); - var line = session.doc.getLine(range.start.row); - var rightChar = line.substring(range.start.column + 1, range.start.column + 2); - if (rightChar == selected) { - range.end.column++; - return range; - } - } - }); - -}; - - -CstyleBehaviour.isSaneInsertion = function(editor, session) { - var cursor = editor.getCursorPosition(); - var iterator = new TokenIterator(session, cursor.row, cursor.column); - if (!this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) { - var iterator2 = new TokenIterator(session, cursor.row, cursor.column + 1); - if (!this.$matchTokenType(iterator2.getCurrentToken() || "text", SAFE_INSERT_IN_TOKENS)) - return false; - } - iterator.stepForward(); - return iterator.getCurrentTokenRow() !== cursor.row || - this.$matchTokenType(iterator.getCurrentToken() || "text", SAFE_INSERT_BEFORE_TOKENS); -}; - -CstyleBehaviour.$matchTokenType = function(token, types) { - return types.indexOf(token.type || token) > -1; -}; - -CstyleBehaviour.recordAutoInsert = function(editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this.isAutoInsertedClosing(cursor, line, context.autoInsertedLineEnd[0])) - context.autoInsertedBrackets = 0; - context.autoInsertedRow = cursor.row; - context.autoInsertedLineEnd = bracket + line.substr(cursor.column); - context.autoInsertedBrackets++; -}; - -CstyleBehaviour.recordMaybeInsert = function(editor, session, bracket) { - var cursor = editor.getCursorPosition(); - var line = session.doc.getLine(cursor.row); - if (!this.isMaybeInsertedClosing(cursor, line)) - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = cursor.row; - context.maybeInsertedLineStart = line.substr(0, cursor.column) + bracket; - context.maybeInsertedLineEnd = line.substr(cursor.column); - context.maybeInsertedBrackets++; -}; - -CstyleBehaviour.isAutoInsertedClosing = function(cursor, line, bracket) { - return context.autoInsertedBrackets > 0 && - cursor.row === context.autoInsertedRow && - bracket === context.autoInsertedLineEnd[0] && - line.substr(cursor.column) === context.autoInsertedLineEnd; -}; - -CstyleBehaviour.isMaybeInsertedClosing = function(cursor, line) { - return context.maybeInsertedBrackets > 0 && - cursor.row === context.maybeInsertedRow && - line.substr(cursor.column) === context.maybeInsertedLineEnd && - line.substr(0, cursor.column) == context.maybeInsertedLineStart; -}; - -CstyleBehaviour.popAutoInsertedClosing = function() { - context.autoInsertedLineEnd = context.autoInsertedLineEnd.substr(1); - context.autoInsertedBrackets--; -}; - -CstyleBehaviour.clearMaybeInsertedClosing = function() { - if (context) { - context.maybeInsertedBrackets = 0; - context.maybeInsertedRow = -1; - } -}; - - - -oop.inherits(CstyleBehaviour, Behaviour); - -exports.CstyleBehaviour = CstyleBehaviour; -}); - -ace.define("ace/mode/folding/cstyle",["require","exports","module","ace/lib/oop","ace/range","ace/mode/folding/fold_mode"], function(require, exports, module) { -"use strict"; - -var oop = require("../../lib/oop"); -var Range = require("../../range").Range; -var BaseFoldMode = require("./fold_mode").FoldMode; - -var FoldMode = exports.FoldMode = function(commentRegex) { - if (commentRegex) { - this.foldingStartMarker = new RegExp( - this.foldingStartMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.start) - ); - this.foldingStopMarker = new RegExp( - this.foldingStopMarker.source.replace(/\|[^|]*?$/, "|" + commentRegex.end) - ); - } -}; -oop.inherits(FoldMode, BaseFoldMode); - -(function() { - - this.foldingStartMarker = /(\{|\[)[^\}\]]*$|^\s*(\/\*)/; - this.foldingStopMarker = /^[^\[\{]*(\}|\])|^[\s\*]*(\*\/)/; - this.singleLineBlockCommentRe= /^\s*(\/\*).*\*\/\s*$/; - this.tripleStarBlockCommentRe = /^\s*(\/\*\*\*).*\*\/\s*$/; - this.startRegionRe = /^\s*(\/\*|\/\/)#?region\b/; - this._getFoldWidgetBase = this.getFoldWidget; - this.getFoldWidget = function(session, foldStyle, row) { - var line = session.getLine(row); - - if (this.singleLineBlockCommentRe.test(line)) { - if (!this.startRegionRe.test(line) && !this.tripleStarBlockCommentRe.test(line)) - return ""; - } - - var fw = this._getFoldWidgetBase(session, foldStyle, row); - - if (!fw && this.startRegionRe.test(line)) - return "start"; // lineCommentRegionStart - - return fw; - }; - - this.getFoldWidgetRange = function(session, foldStyle, row, forceMultiline) { - var line = session.getLine(row); - - if (this.startRegionRe.test(line)) - return this.getCommentRegionBlock(session, line, row); - - var match = line.match(this.foldingStartMarker); - if (match) { - var i = match.index; - - if (match[1]) - return this.openingBracketBlock(session, match[1], row, i); - - var range = session.getCommentFoldRange(row, i + match[0].length, 1); - - if (range && !range.isMultiLine()) { - if (forceMultiline) { - range = this.getSectionRange(session, row); - } else if (foldStyle != "all") - range = null; - } - - return range; - } - - if (foldStyle === "markbegin") - return; - - var match = line.match(this.foldingStopMarker); - if (match) { - var i = match.index + match[0].length; - - if (match[1]) - return this.closingBracketBlock(session, match[1], row, i); - - return session.getCommentFoldRange(row, i, -1); - } - }; - - this.getSectionRange = function(session, row) { - var line = session.getLine(row); - var startIndent = line.search(/\S/); - var startRow = row; - var startColumn = line.length; - row = row + 1; - var endRow = row; - var maxRow = session.getLength(); - while (++row < maxRow) { - line = session.getLine(row); - var indent = line.search(/\S/); - if (indent === -1) - continue; - if (startIndent > indent) - break; - var subRange = this.getFoldWidgetRange(session, "all", row); - - if (subRange) { - if (subRange.start.row <= startRow) { - break; - } else if (subRange.isMultiLine()) { - row = subRange.end.row; - } else if (startIndent == indent) { - break; - } - } - endRow = row; - } - - return new Range(startRow, startColumn, endRow, session.getLine(endRow).length); - }; - this.getCommentRegionBlock = function(session, line, row) { - var startColumn = line.search(/\s*$/); - var maxRow = session.getLength(); - var startRow = row; - - var re = /^\s*(?:\/\*|\/\/|--)#?(end)?region\b/; - var depth = 1; - while (++row < maxRow) { - line = session.getLine(row); - var m = re.exec(line); - if (!m) continue; - if (m[1]) depth--; - else depth++; - - if (!depth) break; - } - - var endRow = row; - if (endRow > startRow) { - return new Range(startRow, startColumn, endRow, line.length); - } - }; - -}).call(FoldMode.prototype); - -}); - -ace.define("ace/mode/javascript",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/javascript_highlight_rules","ace/mode/matching_brace_outdent","ace/range","ace/worker/worker_client","ace/mode/behaviour/cstyle","ace/mode/folding/cstyle"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var TextMode = require("./text").Mode; -var JavaScriptHighlightRules = require("./javascript_highlight_rules").JavaScriptHighlightRules; -var MatchingBraceOutdent = require("./matching_brace_outdent").MatchingBraceOutdent; -var Range = require("../range").Range; -var WorkerClient = require("../worker/worker_client").WorkerClient; -var CstyleBehaviour = require("./behaviour/cstyle").CstyleBehaviour; -var CStyleFoldMode = require("./folding/cstyle").FoldMode; - -var Mode = function() { - this.HighlightRules = JavaScriptHighlightRules; - - this.$outdent = new MatchingBraceOutdent(); - this.$behaviour = new CstyleBehaviour(); - this.foldingRules = new CStyleFoldMode(); -}; -oop.inherits(Mode, TextMode); - -(function() { - - this.lineCommentStart = "//"; - this.blockComment = {start: "/*", end: "*/"}; - - this.getNextLineIndent = function(state, line, tab) { - var indent = this.$getIndent(line); - - var tokenizedLine = this.getTokenizer().getLineTokens(line, state); - var tokens = tokenizedLine.tokens; - var endState = tokenizedLine.state; - - if (tokens.length && tokens[tokens.length-1].type == "comment") { - return indent; - } - - if (state == "start" || state == "no_regex") { - var match = line.match(/^.*(?:\bcase\b.*\:|[\{\(\[])\s*$/); - if (match) { - indent += tab; - } - } else if (state == "doc-start") { - if (endState == "start" || endState == "no_regex") { - return ""; - } - var match = line.match(/^\s*(\/?)\*/); - if (match) { - if (match[1]) { - indent += " "; - } - indent += "* "; - } - } - - return indent; - }; - - this.checkOutdent = function(state, line, input) { - return this.$outdent.checkOutdent(line, input); - }; - - this.autoOutdent = function(state, doc, row) { - this.$outdent.autoOutdent(doc, row); - }; - - this.createWorker = function(session) { - var worker = new WorkerClient(["ace"], "ace/mode/javascript_worker", "JavaScriptWorker"); - worker.attachToDocument(session.getDocument()); - - worker.on("annotate", function(results) { - session.setAnnotations(results.data); - }); - - worker.on("terminate", function() { - session.clearAnnotations(); - }); - - return worker; - }; - - this.$id = "ace/mode/javascript"; -}).call(Mode.prototype); - -exports.Mode = Mode; -}); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/theme-github.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/theme-github.js deleted file mode 100644 index d19512c6e..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/theme-github.js +++ /dev/null @@ -1,103 +0,0 @@ -ace.define("ace/theme/github",["require","exports","module","ace/lib/dom"], function(require, exports, module) { - -exports.isDark = false; -exports.cssClass = "ace-github"; -exports.cssText = "\ -.ace-github .ace_gutter {\ -background: #e8e8e8;\ -color: #AAA;\ -}\ -.ace-github {\ -background: #fff;\ -color: #000;\ -}\ -.ace-github .ace_keyword {\ -font-weight: bold;\ -}\ -.ace-github .ace_string {\ -color: #D14;\ -}\ -.ace-github .ace_variable.ace_class {\ -color: teal;\ -}\ -.ace-github .ace_constant.ace_numeric {\ -color: #099;\ -}\ -.ace-github .ace_constant.ace_buildin {\ -color: #0086B3;\ -}\ -.ace-github .ace_support.ace_function {\ -color: #0086B3;\ -}\ -.ace-github .ace_comment {\ -color: #998;\ -font-style: italic;\ -}\ -.ace-github .ace_variable.ace_language {\ -color: #0086B3;\ -}\ -.ace-github .ace_paren {\ -font-weight: bold;\ -}\ -.ace-github .ace_boolean {\ -font-weight: bold;\ -}\ -.ace-github .ace_string.ace_regexp {\ -color: #009926;\ -font-weight: normal;\ -}\ -.ace-github .ace_variable.ace_instance {\ -color: teal;\ -}\ -.ace-github .ace_constant.ace_language {\ -font-weight: bold;\ -}\ -.ace-github .ace_cursor {\ -color: black;\ -}\ -.ace-github.ace_focus .ace_marker-layer .ace_active-line {\ -background: rgb(255, 255, 204);\ -}\ -.ace-github .ace_marker-layer .ace_active-line {\ -background: rgb(245, 245, 245);\ -}\ -.ace-github .ace_marker-layer .ace_selection {\ -background: rgb(181, 213, 255);\ -}\ -.ace-github.ace_multiselect .ace_selection.ace_start {\ -box-shadow: 0 0 3px 0px white;\ -}\ -.ace-github.ace_nobold .ace_line > span {\ -font-weight: normal !important;\ -}\ -.ace-github .ace_marker-layer .ace_step {\ -background: rgb(252, 255, 0);\ -}\ -.ace-github .ace_marker-layer .ace_stack {\ -background: rgb(164, 229, 101);\ -}\ -.ace-github .ace_marker-layer .ace_bracket {\ -margin: -1px 0 0 -1px;\ -border: 1px solid rgb(192, 192, 192);\ -}\ -.ace-github .ace_gutter-active-line {\ -background-color : rgba(0, 0, 0, 0.07);\ -}\ -.ace-github .ace_marker-layer .ace_selected-word {\ -background: rgb(250, 250, 255);\ -border: 1px solid rgb(200, 200, 250);\ -}\ -.ace-github .ace_invisible {\ -color: #BFBFBF\ -}\ -.ace-github .ace_print-margin {\ -width: 1px;\ -background: #e8e8e8;\ -}\ -.ace-github .ace_indent-guide {\ -background: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAE0lEQVQImWP4////f4bLly//BwAmVgd1/w11/gAAAABJRU5ErkJggg==\") right repeat-y;\ -}"; - - var dom = require("../lib/dom"); - dom.importCssString(exports.cssText, exports.cssClass); -}); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.js deleted file mode 100644 index a664fb1fd..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.js +++ /dev/null @@ -1,328 +0,0 @@ -'use strict'; - -/** - * Binds a ACE Editor widget - */ -angular.module('ui.ace', []) - .constant('uiAceConfig', {}) - .directive('uiAce', ['uiAceConfig', function (uiAceConfig) { - - if (angular.isUndefined(window.ace)) { - throw new Error('ui-ace need ace to work... (o rly?)'); - } - - /** - * Sets editor options such as the wrapping mode or the syntax checker. - * - * The supported options are: - * - *
        - *
      • showGutter
      • - *
      • useWrapMode
      • - *
      • onLoad
      • - *
      • theme
      • - *
      • mode
      • - *
      - * - * @param acee - * @param session ACE editor session - * @param {object} opts Options to be set - */ - var setOptions = function(acee, session, opts) { - - // sets the ace worker path, if running from concatenated - // or minified source - if (angular.isDefined(opts.workerPath)) { - var config = window.ace.require('ace/config'); - config.set('workerPath', opts.workerPath); - } - // ace requires loading - if (angular.isDefined(opts.require)) { - opts.require.forEach(function (n) { - window.ace.require(n); - }); - } - // Boolean options - if (angular.isDefined(opts.showGutter)) { - acee.renderer.setShowGutter(opts.showGutter); - } - if (angular.isDefined(opts.useWrapMode)) { - session.setUseWrapMode(opts.useWrapMode); - } - if (angular.isDefined(opts.showInvisibles)) { - acee.renderer.setShowInvisibles(opts.showInvisibles); - } - if (angular.isDefined(opts.showIndentGuides)) { - acee.renderer.setDisplayIndentGuides(opts.showIndentGuides); - } - if (angular.isDefined(opts.useSoftTabs)) { - session.setUseSoftTabs(opts.useSoftTabs); - } - if (angular.isDefined(opts.showPrintMargin)) { - acee.setShowPrintMargin(opts.showPrintMargin); - } - - // commands - if (angular.isDefined(opts.disableSearch) && opts.disableSearch) { - acee.commands.addCommands([ - { - name: 'unfind', - bindKey: { - win: 'Ctrl-F', - mac: 'Command-F' - }, - exec: function () { - return false; - }, - readOnly: true - } - ]); - } - - // Basic options - if (angular.isString(opts.theme)) { - acee.setTheme('ace/theme/' + opts.theme); - } - if (angular.isString(opts.mode)) { - session.setMode('ace/mode/' + opts.mode); - } - // Advanced options - if (angular.isDefined(opts.firstLineNumber)) { - if (angular.isNumber(opts.firstLineNumber)) { - session.setOption('firstLineNumber', opts.firstLineNumber); - } else if (angular.isFunction(opts.firstLineNumber)) { - session.setOption('firstLineNumber', opts.firstLineNumber()); - } - } - - // advanced options - var key, obj; - if (angular.isDefined(opts.advanced)) { - for (key in opts.advanced) { - // create a javascript object with the key and value - obj = { name: key, value: opts.advanced[key] }; - // try to assign the option to the ace editor - acee.setOption(obj.name, obj.value); - } - } - - // advanced options for the renderer - if (angular.isDefined(opts.rendererOptions)) { - for (key in opts.rendererOptions) { - // create a javascript object with the key and value - obj = { name: key, value: opts.rendererOptions[key] }; - // try to assign the option to the ace editor - acee.renderer.setOption(obj.name, obj.value); - } - } - - // onLoad callbacks - angular.forEach(opts.callbacks, function (cb) { - if (angular.isFunction(cb)) { - cb(acee); - } - }); - }; - - return { - restrict: 'EA', - require: '?ngModel', - link: function (scope, elm, attrs, ngModel) { - - /** - * Corresponds the uiAceConfig ACE configuration. - * @type object - */ - var options = uiAceConfig.ace || {}; - - /** - * uiAceConfig merged with user options via json in attribute or data binding - * @type object - */ - var opts = angular.extend({}, options, scope.$eval(attrs.uiAce)); - - /** - * ACE editor - * @type object - */ - var acee = window.ace.edit(elm[0]); - - /** - * ACE editor session. - * @type object - * @see [EditSession]{@link http://ace.c9.io/#nav=api&api=edit_session} - */ - var session = acee.getSession(); - - /** - * Reference to a change listener created by the listener factory. - * @function - * @see listenerFactory.onChange - */ - var onChangeListener; - - /** - * Reference to a blur listener created by the listener factory. - * @function - * @see listenerFactory.onBlur - */ - var onBlurListener; - - /** - * Calls a callback by checking its existing. The argument list - * is variable and thus this function is relying on the arguments - * object. - * @throws {Error} If the callback isn't a function - */ - var executeUserCallback = function () { - - /** - * The callback function grabbed from the array-like arguments - * object. The first argument should always be the callback. - * - * @see [arguments]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments} - * @type {*} - */ - var callback = arguments[0]; - - /** - * Arguments to be passed to the callback. These are taken - * from the array-like arguments object. The first argument - * is stripped because that should be the callback function. - * - * @see [arguments]{@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions_and_function_scope/arguments} - * @type {Array} - */ - var args = Array.prototype.slice.call(arguments, 1); - - if (angular.isDefined(callback)) { - scope.$evalAsync(function () { - if (angular.isFunction(callback)) { - callback(args); - } else { - throw new Error('ui-ace use a function as callback.'); - } - }); - } - }; - - /** - * Listener factory. Until now only change listeners can be created. - * @type object - */ - var listenerFactory = { - /** - * Creates a change listener which propagates the change event - * and the editor session to the callback from the user option - * onChange. It might be exchanged during runtime, if this - * happens the old listener will be unbound. - * - * @param callback callback function defined in the user options - * @see onChangeListener - */ - onChange: function (callback) { - return function (e) { - var newValue = session.getValue(); - - if (ngModel && newValue !== ngModel.$viewValue && - // HACK make sure to only trigger the apply outside of the - // digest loop 'cause ACE is actually using this callback - // for any text transformation ! - !scope.$$phase && !scope.$root.$$phase) { - scope.$evalAsync(function () { - ngModel.$setViewValue(newValue); - }); - } - - executeUserCallback(callback, e, acee); - }; - }, - /** - * Creates a blur listener which propagates the editor session - * to the callback from the user option onBlur. It might be - * exchanged during runtime, if this happens the old listener - * will be unbound. - * - * @param callback callback function defined in the user options - * @see onBlurListener - */ - onBlur: function (callback) { - return function () { - executeUserCallback(callback, acee); - }; - } - }; - - attrs.$observe('readonly', function (value) { - acee.setReadOnly(!!value || value === ''); - }); - - // Value Blind - if (ngModel) { - ngModel.$formatters.push(function (value) { - if (angular.isUndefined(value) || value === null) { - return ''; - } - else if (angular.isObject(value) || angular.isArray(value)) { - throw new Error('ui-ace cannot use an object or an array as a model'); - } - return value; - }); - - ngModel.$render = function () { - session.setValue(ngModel.$viewValue); - }; - } - - // Listen for option updates - var updateOptions = function (current, previous) { - if (current === previous) return; - opts = angular.extend({}, options, scope.$eval(attrs.uiAce)); - - opts.callbacks = [ opts.onLoad ]; - if (opts.onLoad !== options.onLoad) { - // also call the global onLoad handler - opts.callbacks.unshift(options.onLoad); - } - - // EVENTS - - // unbind old change listener - session.removeListener('change', onChangeListener); - - // bind new change listener - onChangeListener = listenerFactory.onChange(opts.onChange); - session.on('change', onChangeListener); - - // unbind old blur listener - //session.removeListener('blur', onBlurListener); - acee.removeListener('blur', onBlurListener); - - // bind new blur listener - onBlurListener = listenerFactory.onBlur(opts.onBlur); - acee.on('blur', onBlurListener); - - setOptions(acee, session, opts); - }; - - scope.$watch(attrs.uiAce, updateOptions, /* deep watch */ true); - - // set the options here, even if we try to watch later, if this - // line is missing things go wrong (and the tests will also fail) - updateOptions(options); - - elm.on('$destroy', function () { - acee.session.$stopWorker(); - acee.destroy(); - }); - - scope.$watch(function() { - return [elm[0].offsetWidth, elm[0].offsetHeight]; - }, function() { - acee.resize(); - acee.renderer.updateFull(); - }, true); - - } - }; - }]); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.min.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.min.js deleted file mode 100644 index c69ced86f..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/ui-ace.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * angular-ui-ace - This directive allows you to add ACE editor elements. - * @version v0.2.3 - 2016-02-09 - * @link http://angular-ui.github.com - * @license MIT - */ -"use strict";angular.module("ui.ace",[]).constant("uiAceConfig",{}).directive("uiAce",["uiAceConfig",function(a){if(angular.isUndefined(window.ace))throw new Error("ui-ace need ace to work... (o rly?)");var b=function(a,b,c){if(angular.isDefined(c.workerPath)){var d=window.ace.require("ace/config");d.set("workerPath",c.workerPath)}angular.isDefined(c.require)&&c.require.forEach(function(a){window.ace.require(a)}),angular.isDefined(c.showGutter)&&a.renderer.setShowGutter(c.showGutter),angular.isDefined(c.useWrapMode)&&b.setUseWrapMode(c.useWrapMode),angular.isDefined(c.showInvisibles)&&a.renderer.setShowInvisibles(c.showInvisibles),angular.isDefined(c.showIndentGuides)&&a.renderer.setDisplayIndentGuides(c.showIndentGuides),angular.isDefined(c.useSoftTabs)&&b.setUseSoftTabs(c.useSoftTabs),angular.isDefined(c.showPrintMargin)&&a.setShowPrintMargin(c.showPrintMargin),angular.isDefined(c.disableSearch)&&c.disableSearch&&a.commands.addCommands([{name:"unfind",bindKey:{win:"Ctrl-F",mac:"Command-F"},exec:function(){return!1},readOnly:!0}]),angular.isString(c.theme)&&a.setTheme("ace/theme/"+c.theme),angular.isString(c.mode)&&b.setMode("ace/mode/"+c.mode),angular.isDefined(c.firstLineNumber)&&(angular.isNumber(c.firstLineNumber)?b.setOption("firstLineNumber",c.firstLineNumber):angular.isFunction(c.firstLineNumber)&&b.setOption("firstLineNumber",c.firstLineNumber()));var e,f;if(angular.isDefined(c.advanced))for(e in c.advanced)f={name:e,value:c.advanced[e]},a.setOption(f.name,f.value);if(angular.isDefined(c.rendererOptions))for(e in c.rendererOptions)f={name:e,value:c.rendererOptions[e]},a.renderer.setOption(f.name,f.value);angular.forEach(c.callbacks,function(b){angular.isFunction(b)&&b(a)})};return{restrict:"EA",require:"?ngModel",link:function(c,d,e,f){var g,h,i=a.ace||{},j=angular.extend({},i,c.$eval(e.uiAce)),k=window.ace.edit(d[0]),l=k.getSession(),m=function(){var a=arguments[0],b=Array.prototype.slice.call(arguments,1);angular.isDefined(a)&&c.$evalAsync(function(){if(!angular.isFunction(a))throw new Error("ui-ace use a function as callback.");a(b)})},n={onChange:function(a){return function(b){var d=l.getValue();!f||d===f.$viewValue||c.$$phase||c.$root.$$phase||c.$evalAsync(function(){f.$setViewValue(d)}),m(a,b,k)}},onBlur:function(a){return function(){m(a,k)}}};e.$observe("readonly",function(a){k.setReadOnly(!!a||""===a)}),f&&(f.$formatters.push(function(a){if(angular.isUndefined(a)||null===a)return"";if(angular.isObject(a)||angular.isArray(a))throw new Error("ui-ace cannot use an object or an array as a model");return a}),f.$render=function(){l.setValue(f.$viewValue)});var o=function(a,d){a!==d&&(j=angular.extend({},i,c.$eval(e.uiAce)),j.callbacks=[j.onLoad],j.onLoad!==i.onLoad&&j.callbacks.unshift(i.onLoad),l.removeListener("change",g),g=n.onChange(j.onChange),l.on("change",g),k.removeListener("blur",h),h=n.onBlur(j.onBlur),k.on("blur",h),b(k,l,j))};c.$watch(e.uiAce,o,!0),o(i),d.on("$destroy",function(){k.session.$stopWorker(),k.destroy()}),c.$watch(function(){return[d[0].offsetWidth,d[0].offsetHeight]},function(){k.resize(),k.renderer.updateFull()},!0)}}}]); \ No newline at end of file diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/worker-javascript.js b/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/worker-javascript.js deleted file mode 100644 index 064fbac4b..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/ui-ace/worker-javascript.js +++ /dev/null @@ -1,12530 +0,0 @@ -"no use strict"; -;(function(window) { -if (typeof window.window != "undefined" && window.document) - return; -if (window.require && window.define) - return; - -if (!window.console) { - window.console = function() { - var msgs = Array.prototype.slice.call(arguments, 0); - postMessage({type: "log", data: msgs}); - }; - window.console.error = - window.console.warn = - window.console.log = - window.console.trace = window.console; -} -window.window = window; -window.ace = window; - -window.onerror = function(message, file, line, col, err) { - postMessage({type: "error", data: { - message: message, - data: err.data, - file: file, - line: line, - col: col, - stack: err.stack - }}); -}; - -window.normalizeModule = function(parentId, moduleName) { - // normalize plugin requires - if (moduleName.indexOf("!") !== -1) { - var chunks = moduleName.split("!"); - return window.normalizeModule(parentId, chunks[0]) + "!" + window.normalizeModule(parentId, chunks[1]); - } - // normalize relative requires - if (moduleName.charAt(0) == ".") { - var base = parentId.split("/").slice(0, -1).join("/"); - moduleName = (base ? base + "/" : "") + moduleName; - - while (moduleName.indexOf(".") !== -1 && previous != moduleName) { - var previous = moduleName; - moduleName = moduleName.replace(/^\.\//, "").replace(/\/\.\//, "/").replace(/[^\/]+\/\.\.\//, ""); - } - } - - return moduleName; -}; - -window.require = function require(parentId, id) { - if (!id) { - id = parentId; - parentId = null; - } - if (!id.charAt) - throw new Error("worker.js require() accepts only (parentId, id) as arguments"); - - id = window.normalizeModule(parentId, id); - - var module = window.require.modules[id]; - if (module) { - if (!module.initialized) { - module.initialized = true; - module.exports = module.factory().exports; - } - return module.exports; - } - - if (!window.require.tlns) - return console.log("unable to load " + id); - - var path = resolveModuleId(id, window.require.tlns); - if (path.slice(-3) != ".js") path += ".js"; - - window.require.id = id; - window.require.modules[id] = {}; // prevent infinite loop on broken modules - importScripts(path); - return window.require(parentId, id); -}; -function resolveModuleId(id, paths) { - var testPath = id, tail = ""; - while (testPath) { - var alias = paths[testPath]; - if (typeof alias == "string") { - return alias + tail; - } else if (alias) { - return alias.location.replace(/\/*$/, "/") + (tail || alias.main || alias.name); - } else if (alias === false) { - return ""; - } - var i = testPath.lastIndexOf("/"); - if (i === -1) break; - tail = testPath.substr(i) + tail; - testPath = testPath.slice(0, i); - } - return id; -} -window.require.modules = {}; -window.require.tlns = {}; - -window.define = function(id, deps, factory) { - if (arguments.length == 2) { - factory = deps; - if (typeof id != "string") { - deps = id; - id = window.require.id; - } - } else if (arguments.length == 1) { - factory = id; - deps = []; - id = window.require.id; - } - - if (typeof factory != "function") { - window.require.modules[id] = { - exports: factory, - initialized: true - }; - return; - } - - if (!deps.length) - // If there is no dependencies, we inject "require", "exports" and - // "module" as dependencies, to provide CommonJS compatibility. - deps = ["require", "exports", "module"]; - - var req = function(childId) { - return window.require(id, childId); - }; - - window.require.modules[id] = { - exports: {}, - factory: function() { - var module = this; - var returnExports = factory.apply(this, deps.map(function(dep) { - switch (dep) { - // Because "require", "exports" and "module" aren't actual - // dependencies, we must handle them seperately. - case "require": return req; - case "exports": return module.exports; - case "module": return module; - // But for all other dependencies, we can just go ahead and - // require them. - default: return req(dep); - } - })); - if (returnExports) - module.exports = returnExports; - return module; - } - }; -}; -window.define.amd = {}; -require.tlns = {}; -window.initBaseUrls = function initBaseUrls(topLevelNamespaces) { - for (var i in topLevelNamespaces) - require.tlns[i] = topLevelNamespaces[i]; -}; - -window.initSender = function initSender() { - - var EventEmitter = window.require("ace/lib/event_emitter").EventEmitter; - var oop = window.require("ace/lib/oop"); - - var Sender = function() {}; - - (function() { - - oop.implement(this, EventEmitter); - - this.callback = function(data, callbackId) { - postMessage({ - type: "call", - id: callbackId, - data: data - }); - }; - - this.emit = function(name, data) { - postMessage({ - type: "event", - name: name, - data: data - }); - }; - - }).call(Sender.prototype); - - return new Sender(); -}; - -var main = window.main = null; -var sender = window.sender = null; - -window.onmessage = function(e) { - var msg = e.data; - if (msg.event && sender) { - sender._signal(msg.event, msg.data); - } - else if (msg.command) { - if (main[msg.command]) - main[msg.command].apply(main, msg.args); - else if (window[msg.command]) - window[msg.command].apply(window, msg.args); - else - throw new Error("Unknown command:" + msg.command); - } - else if (msg.init) { - window.initBaseUrls(msg.tlns); - require("ace/lib/es5-shim"); - sender = window.sender = window.initSender(); - var clazz = require(msg.module)[msg.classname]; - main = window.main = new clazz(sender); - } -}; -})(this); - -ace.define("ace/lib/oop",["require","exports","module"], function(require, exports, module) { -"use strict"; - -exports.inherits = function(ctor, superCtor) { - ctor.super_ = superCtor; - ctor.prototype = Object.create(superCtor.prototype, { - constructor: { - value: ctor, - enumerable: false, - writable: true, - configurable: true - } - }); -}; - -exports.mixin = function(obj, mixin) { - for (var key in mixin) { - obj[key] = mixin[key]; - } - return obj; -}; - -exports.implement = function(proto, mixin) { - exports.mixin(proto, mixin); -}; - -}); - -ace.define("ace/range",["require","exports","module"], function(require, exports, module) { -"use strict"; -var comparePoints = function(p1, p2) { - return p1.row - p2.row || p1.column - p2.column; -}; -var Range = function(startRow, startColumn, endRow, endColumn) { - this.start = { - row: startRow, - column: startColumn - }; - - this.end = { - row: endRow, - column: endColumn - }; -}; - -(function() { - this.isEqual = function(range) { - return this.start.row === range.start.row && - this.end.row === range.end.row && - this.start.column === range.start.column && - this.end.column === range.end.column; - }; - this.toString = function() { - return ("Range: [" + this.start.row + "/" + this.start.column + - "] -> [" + this.end.row + "/" + this.end.column + "]"); - }; - - this.contains = function(row, column) { - return this.compare(row, column) == 0; - }; - this.compareRange = function(range) { - var cmp, - end = range.end, - start = range.start; - - cmp = this.compare(end.row, end.column); - if (cmp == 1) { - cmp = this.compare(start.row, start.column); - if (cmp == 1) { - return 2; - } else if (cmp == 0) { - return 1; - } else { - return 0; - } - } else if (cmp == -1) { - return -2; - } else { - cmp = this.compare(start.row, start.column); - if (cmp == -1) { - return -1; - } else if (cmp == 1) { - return 42; - } else { - return 0; - } - } - }; - this.comparePoint = function(p) { - return this.compare(p.row, p.column); - }; - this.containsRange = function(range) { - return this.comparePoint(range.start) == 0 && this.comparePoint(range.end) == 0; - }; - this.intersects = function(range) { - var cmp = this.compareRange(range); - return (cmp == -1 || cmp == 0 || cmp == 1); - }; - this.isEnd = function(row, column) { - return this.end.row == row && this.end.column == column; - }; - this.isStart = function(row, column) { - return this.start.row == row && this.start.column == column; - }; - this.setStart = function(row, column) { - if (typeof row == "object") { - this.start.column = row.column; - this.start.row = row.row; - } else { - this.start.row = row; - this.start.column = column; - } - }; - this.setEnd = function(row, column) { - if (typeof row == "object") { - this.end.column = row.column; - this.end.row = row.row; - } else { - this.end.row = row; - this.end.column = column; - } - }; - this.inside = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column) || this.isStart(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.insideStart = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isEnd(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.insideEnd = function(row, column) { - if (this.compare(row, column) == 0) { - if (this.isStart(row, column)) { - return false; - } else { - return true; - } - } - return false; - }; - this.compare = function(row, column) { - if (!this.isMultiLine()) { - if (row === this.start.row) { - return column < this.start.column ? -1 : (column > this.end.column ? 1 : 0); - } - } - - if (row < this.start.row) - return -1; - - if (row > this.end.row) - return 1; - - if (this.start.row === row) - return column >= this.start.column ? 0 : -1; - - if (this.end.row === row) - return column <= this.end.column ? 0 : 1; - - return 0; - }; - this.compareStart = function(row, column) { - if (this.start.row == row && this.start.column == column) { - return -1; - } else { - return this.compare(row, column); - } - }; - this.compareEnd = function(row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } else { - return this.compare(row, column); - } - }; - this.compareInside = function(row, column) { - if (this.end.row == row && this.end.column == column) { - return 1; - } else if (this.start.row == row && this.start.column == column) { - return -1; - } else { - return this.compare(row, column); - } - }; - this.clipRows = function(firstRow, lastRow) { - if (this.end.row > lastRow) - var end = {row: lastRow + 1, column: 0}; - else if (this.end.row < firstRow) - var end = {row: firstRow, column: 0}; - - if (this.start.row > lastRow) - var start = {row: lastRow + 1, column: 0}; - else if (this.start.row < firstRow) - var start = {row: firstRow, column: 0}; - - return Range.fromPoints(start || this.start, end || this.end); - }; - this.extend = function(row, column) { - var cmp = this.compare(row, column); - - if (cmp == 0) - return this; - else if (cmp == -1) - var start = {row: row, column: column}; - else - var end = {row: row, column: column}; - - return Range.fromPoints(start || this.start, end || this.end); - }; - - this.isEmpty = function() { - return (this.start.row === this.end.row && this.start.column === this.end.column); - }; - this.isMultiLine = function() { - return (this.start.row !== this.end.row); - }; - this.clone = function() { - return Range.fromPoints(this.start, this.end); - }; - this.collapseRows = function() { - if (this.end.column == 0) - return new Range(this.start.row, 0, Math.max(this.start.row, this.end.row-1), 0) - else - return new Range(this.start.row, 0, this.end.row, 0) - }; - this.toScreenRange = function(session) { - var screenPosStart = session.documentToScreenPosition(this.start); - var screenPosEnd = session.documentToScreenPosition(this.end); - - return new Range( - screenPosStart.row, screenPosStart.column, - screenPosEnd.row, screenPosEnd.column - ); - }; - this.moveBy = function(row, column) { - this.start.row += row; - this.start.column += column; - this.end.row += row; - this.end.column += column; - }; - -}).call(Range.prototype); -Range.fromPoints = function(start, end) { - return new Range(start.row, start.column, end.row, end.column); -}; -Range.comparePoints = comparePoints; - -Range.comparePoints = function(p1, p2) { - return p1.row - p2.row || p1.column - p2.column; -}; - - -exports.Range = Range; -}); - -ace.define("ace/apply_delta",["require","exports","module"], function(require, exports, module) { -"use strict"; - -function throwDeltaError(delta, errorText){ - console.log("Invalid Delta:", delta); - throw "Invalid Delta: " + errorText; -} - -function positionInDocument(docLines, position) { - return position.row >= 0 && position.row < docLines.length && - position.column >= 0 && position.column <= docLines[position.row].length; -} - -function validateDelta(docLines, delta) { - if (delta.action != "insert" && delta.action != "remove") - throwDeltaError(delta, "delta.action must be 'insert' or 'remove'"); - if (!(delta.lines instanceof Array)) - throwDeltaError(delta, "delta.lines must be an Array"); - if (!delta.start || !delta.end) - throwDeltaError(delta, "delta.start/end must be an present"); - var start = delta.start; - if (!positionInDocument(docLines, delta.start)) - throwDeltaError(delta, "delta.start must be contained in document"); - var end = delta.end; - if (delta.action == "remove" && !positionInDocument(docLines, end)) - throwDeltaError(delta, "delta.end must contained in document for 'remove' actions"); - var numRangeRows = end.row - start.row; - var numRangeLastLineChars = (end.column - (numRangeRows == 0 ? start.column : 0)); - if (numRangeRows != delta.lines.length - 1 || delta.lines[numRangeRows].length != numRangeLastLineChars) - throwDeltaError(delta, "delta.range must match delta lines"); -} - -exports.applyDelta = function(docLines, delta, doNotValidate) { - - var row = delta.start.row; - var startColumn = delta.start.column; - var line = docLines[row] || ""; - switch (delta.action) { - case "insert": - var lines = delta.lines; - if (lines.length === 1) { - docLines[row] = line.substring(0, startColumn) + delta.lines[0] + line.substring(startColumn); - } else { - var args = [row, 1].concat(delta.lines); - docLines.splice.apply(docLines, args); - docLines[row] = line.substring(0, startColumn) + docLines[row]; - docLines[row + delta.lines.length - 1] += line.substring(startColumn); - } - break; - case "remove": - var endColumn = delta.end.column; - var endRow = delta.end.row; - if (row === endRow) { - docLines[row] = line.substring(0, startColumn) + line.substring(endColumn); - } else { - docLines.splice( - row, endRow - row + 1, - line.substring(0, startColumn) + docLines[endRow].substring(endColumn) - ); - } - break; - } -} -}); - -ace.define("ace/lib/event_emitter",["require","exports","module"], function(require, exports, module) { -"use strict"; - -var EventEmitter = {}; -var stopPropagation = function() { this.propagationStopped = true; }; -var preventDefault = function() { this.defaultPrevented = true; }; - -EventEmitter._emit = -EventEmitter._dispatchEvent = function(eventName, e) { - this._eventRegistry || (this._eventRegistry = {}); - this._defaultHandlers || (this._defaultHandlers = {}); - - var listeners = this._eventRegistry[eventName] || []; - var defaultHandler = this._defaultHandlers[eventName]; - if (!listeners.length && !defaultHandler) - return; - - if (typeof e != "object" || !e) - e = {}; - - if (!e.type) - e.type = eventName; - if (!e.stopPropagation) - e.stopPropagation = stopPropagation; - if (!e.preventDefault) - e.preventDefault = preventDefault; - - listeners = listeners.slice(); - for (var i=0; i this.row) - return; - - var point = $getTransformedPoint(delta, {row: this.row, column: this.column}, this.$insertRight); - this.setPosition(point.row, point.column, true); - }; - - function $pointsInOrder(point1, point2, equalPointsInOrder) { - var bColIsAfter = equalPointsInOrder ? point1.column <= point2.column : point1.column < point2.column; - return (point1.row < point2.row) || (point1.row == point2.row && bColIsAfter); - } - - function $getTransformedPoint(delta, point, moveIfEqual) { - var deltaIsInsert = delta.action == "insert"; - var deltaRowShift = (deltaIsInsert ? 1 : -1) * (delta.end.row - delta.start.row); - var deltaColShift = (deltaIsInsert ? 1 : -1) * (delta.end.column - delta.start.column); - var deltaStart = delta.start; - var deltaEnd = deltaIsInsert ? deltaStart : delta.end; // Collapse insert range. - if ($pointsInOrder(point, deltaStart, moveIfEqual)) { - return { - row: point.row, - column: point.column - }; - } - if ($pointsInOrder(deltaEnd, point, !moveIfEqual)) { - return { - row: point.row + deltaRowShift, - column: point.column + (point.row == deltaEnd.row ? deltaColShift : 0) - }; - } - - return { - row: deltaStart.row, - column: deltaStart.column - }; - } - this.setPosition = function(row, column, noClip) { - var pos; - if (noClip) { - pos = { - row: row, - column: column - }; - } else { - pos = this.$clipPositionToDocument(row, column); - } - - if (this.row == pos.row && this.column == pos.column) - return; - - var old = { - row: this.row, - column: this.column - }; - - this.row = pos.row; - this.column = pos.column; - this._signal("change", { - old: old, - value: pos - }); - }; - this.detach = function() { - this.document.removeEventListener("change", this.$onChange); - }; - this.attach = function(doc) { - this.document = doc || this.document; - this.document.on("change", this.$onChange); - }; - this.$clipPositionToDocument = function(row, column) { - var pos = {}; - - if (row >= this.document.getLength()) { - pos.row = Math.max(0, this.document.getLength() - 1); - pos.column = this.document.getLine(pos.row).length; - } - else if (row < 0) { - pos.row = 0; - pos.column = 0; - } - else { - pos.row = row; - pos.column = Math.min(this.document.getLine(pos.row).length, Math.max(0, column)); - } - - if (column < 0) - pos.column = 0; - - return pos; - }; - -}).call(Anchor.prototype); - -}); - -ace.define("ace/document",["require","exports","module","ace/lib/oop","ace/apply_delta","ace/lib/event_emitter","ace/range","ace/anchor"], function(require, exports, module) { -"use strict"; - -var oop = require("./lib/oop"); -var applyDelta = require("./apply_delta").applyDelta; -var EventEmitter = require("./lib/event_emitter").EventEmitter; -var Range = require("./range").Range; -var Anchor = require("./anchor").Anchor; - -var Document = function(textOrLines) { - this.$lines = [""]; - if (textOrLines.length === 0) { - this.$lines = [""]; - } else if (Array.isArray(textOrLines)) { - this.insertMergedLines({row: 0, column: 0}, textOrLines); - } else { - this.insert({row: 0, column:0}, textOrLines); - } -}; - -(function() { - - oop.implement(this, EventEmitter); - this.setValue = function(text) { - var len = this.getLength() - 1; - this.remove(new Range(0, 0, len, this.getLine(len).length)); - this.insert({row: 0, column: 0}, text); - }; - this.getValue = function() { - return this.getAllLines().join(this.getNewLineCharacter()); - }; - this.createAnchor = function(row, column) { - return new Anchor(this, row, column); - }; - if ("aaa".split(/a/).length === 0) { - this.$split = function(text) { - return text.replace(/\r\n|\r/g, "\n").split("\n"); - }; - } else { - this.$split = function(text) { - return text.split(/\r\n|\r|\n/); - }; - } - - - this.$detectNewLine = function(text) { - var match = text.match(/^.*?(\r\n|\r|\n)/m); - this.$autoNewLine = match ? match[1] : "\n"; - this._signal("changeNewLineMode"); - }; - this.getNewLineCharacter = function() { - switch (this.$newLineMode) { - case "windows": - return "\r\n"; - case "unix": - return "\n"; - default: - return this.$autoNewLine || "\n"; - } - }; - - this.$autoNewLine = ""; - this.$newLineMode = "auto"; - this.setNewLineMode = function(newLineMode) { - if (this.$newLineMode === newLineMode) - return; - - this.$newLineMode = newLineMode; - this._signal("changeNewLineMode"); - }; - this.getNewLineMode = function() { - return this.$newLineMode; - }; - this.isNewLine = function(text) { - return (text == "\r\n" || text == "\r" || text == "\n"); - }; - this.getLine = function(row) { - return this.$lines[row] || ""; - }; - this.getLines = function(firstRow, lastRow) { - return this.$lines.slice(firstRow, lastRow + 1); - }; - this.getAllLines = function() { - return this.getLines(0, this.getLength()); - }; - this.getLength = function() { - return this.$lines.length; - }; - this.getTextRange = function(range) { - return this.getLinesForRange(range).join(this.getNewLineCharacter()); - }; - this.getLinesForRange = function(range) { - var lines; - if (range.start.row === range.end.row) { - lines = [this.getLine(range.start.row).substring(range.start.column, range.end.column)]; - } else { - lines = this.getLines(range.start.row, range.end.row); - lines[0] = (lines[0] || "").substring(range.start.column); - var l = lines.length - 1; - if (range.end.row - range.start.row == l) - lines[l] = lines[l].substring(0, range.end.column); - } - return lines; - }; - this.insertLines = function(row, lines) { - console.warn("Use of document.insertLines is deprecated. Use the insertFullLines method instead."); - return this.insertFullLines(row, lines); - }; - this.removeLines = function(firstRow, lastRow) { - console.warn("Use of document.removeLines is deprecated. Use the removeFullLines method instead."); - return this.removeFullLines(firstRow, lastRow); - }; - this.insertNewLine = function(position) { - console.warn("Use of document.insertNewLine is deprecated. Use insertMergedLines(position, [\'\', \'\']) instead."); - return this.insertMergedLines(position, ["", ""]); - }; - this.insert = function(position, text) { - if (this.getLength() <= 1) - this.$detectNewLine(text); - - return this.insertMergedLines(position, this.$split(text)); - }; - this.insertInLine = function(position, text) { - var start = this.clippedPos(position.row, position.column); - var end = this.pos(position.row, position.column + text.length); - - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: [text] - }, true); - - return this.clonePos(end); - }; - - this.clippedPos = function(row, column) { - var length = this.getLength(); - if (row === undefined) { - row = length; - } else if (row < 0) { - row = 0; - } else if (row >= length) { - row = length - 1; - column = undefined; - } - var line = this.getLine(row); - if (column == undefined) - column = line.length; - column = Math.min(Math.max(column, 0), line.length); - return {row: row, column: column}; - }; - - this.clonePos = function(pos) { - return {row: pos.row, column: pos.column}; - }; - - this.pos = function(row, column) { - return {row: row, column: column}; - }; - - this.$clipPosition = function(position) { - var length = this.getLength(); - if (position.row >= length) { - position.row = Math.max(0, length - 1); - position.column = this.getLine(length - 1).length; - } else { - position.row = Math.max(0, position.row); - position.column = Math.min(Math.max(position.column, 0), this.getLine(position.row).length); - } - return position; - }; - this.insertFullLines = function(row, lines) { - row = Math.min(Math.max(row, 0), this.getLength()); - var column = 0; - if (row < this.getLength()) { - lines = lines.concat([""]); - column = 0; - } else { - lines = [""].concat(lines); - row--; - column = this.$lines[row].length; - } - this.insertMergedLines({row: row, column: column}, lines); - }; - this.insertMergedLines = function(position, lines) { - var start = this.clippedPos(position.row, position.column); - var end = { - row: start.row + lines.length - 1, - column: (lines.length == 1 ? start.column : 0) + lines[lines.length - 1].length - }; - - this.applyDelta({ - start: start, - end: end, - action: "insert", - lines: lines - }); - - return this.clonePos(end); - }; - this.remove = function(range) { - var start = this.clippedPos(range.start.row, range.start.column); - var end = this.clippedPos(range.end.row, range.end.column); - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({start: start, end: end}) - }); - return this.clonePos(start); - }; - this.removeInLine = function(row, startColumn, endColumn) { - var start = this.clippedPos(row, startColumn); - var end = this.clippedPos(row, endColumn); - - this.applyDelta({ - start: start, - end: end, - action: "remove", - lines: this.getLinesForRange({start: start, end: end}) - }, true); - - return this.clonePos(start); - }; - this.removeFullLines = function(firstRow, lastRow) { - firstRow = Math.min(Math.max(0, firstRow), this.getLength() - 1); - lastRow = Math.min(Math.max(0, lastRow ), this.getLength() - 1); - var deleteFirstNewLine = lastRow == this.getLength() - 1 && firstRow > 0; - var deleteLastNewLine = lastRow < this.getLength() - 1; - var startRow = ( deleteFirstNewLine ? firstRow - 1 : firstRow ); - var startCol = ( deleteFirstNewLine ? this.getLine(startRow).length : 0 ); - var endRow = ( deleteLastNewLine ? lastRow + 1 : lastRow ); - var endCol = ( deleteLastNewLine ? 0 : this.getLine(endRow).length ); - var range = new Range(startRow, startCol, endRow, endCol); - var deletedLines = this.$lines.slice(firstRow, lastRow + 1); - - this.applyDelta({ - start: range.start, - end: range.end, - action: "remove", - lines: this.getLinesForRange(range) - }); - return deletedLines; - }; - this.removeNewLine = function(row) { - if (row < this.getLength() - 1 && row >= 0) { - this.applyDelta({ - start: this.pos(row, this.getLine(row).length), - end: this.pos(row + 1, 0), - action: "remove", - lines: ["", ""] - }); - } - }; - this.replace = function(range, text) { - if (!(range instanceof Range)) - range = Range.fromPoints(range.start, range.end); - if (text.length === 0 && range.isEmpty()) - return range.start; - if (text == this.getTextRange(range)) - return range.end; - - this.remove(range); - var end; - if (text) { - end = this.insert(range.start, text); - } - else { - end = range.start; - } - - return end; - }; - this.applyDeltas = function(deltas) { - for (var i=0; i=0; i--) { - this.revertDelta(deltas[i]); - } - }; - this.applyDelta = function(delta, doNotValidate) { - var isInsert = delta.action == "insert"; - if (isInsert ? delta.lines.length <= 1 && !delta.lines[0] - : !Range.comparePoints(delta.start, delta.end)) { - return; - } - - if (isInsert && delta.lines.length > 20000) - this.$splitAndapplyLargeDelta(delta, 20000); - applyDelta(this.$lines, delta, doNotValidate); - this._signal("change", delta); - }; - - this.$splitAndapplyLargeDelta = function(delta, MAX) { - var lines = delta.lines; - var l = lines.length; - var row = delta.start.row; - var column = delta.start.column; - var from = 0, to = 0; - do { - from = to; - to += MAX - 1; - var chunk = lines.slice(from, to); - if (to > l) { - delta.lines = chunk; - delta.start.row = row + from; - delta.start.column = column; - break; - } - chunk.push(""); - this.applyDelta({ - start: this.pos(row + from, column), - end: this.pos(row + to, column = 0), - action: delta.action, - lines: chunk - }, true); - } while(true); - }; - this.revertDelta = function(delta) { - this.applyDelta({ - start: this.clonePos(delta.start), - end: this.clonePos(delta.end), - action: (delta.action == "insert" ? "remove" : "insert"), - lines: delta.lines.slice() - }); - }; - this.indexToPosition = function(index, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - for (var i = startRow || 0, l = lines.length; i < l; i++) { - index -= lines[i].length + newlineLength; - if (index < 0) - return {row: i, column: index + lines[i].length + newlineLength}; - } - return {row: l-1, column: lines[l-1].length}; - }; - this.positionToIndex = function(pos, startRow) { - var lines = this.$lines || this.getAllLines(); - var newlineLength = this.getNewLineCharacter().length; - var index = 0; - var row = Math.min(pos.row, lines.length); - for (var i = startRow || 0; i < row; ++i) - index += lines[i].length + newlineLength; - - return index + pos.column; - }; - -}).call(Document.prototype); - -exports.Document = Document; -}); - -ace.define("ace/lib/lang",["require","exports","module"], function(require, exports, module) { -"use strict"; - -exports.last = function(a) { - return a[a.length - 1]; -}; - -exports.stringReverse = function(string) { - return string.split("").reverse().join(""); -}; - -exports.stringRepeat = function (string, count) { - var result = ''; - while (count > 0) { - if (count & 1) - result += string; - - if (count >>= 1) - string += string; - } - return result; -}; - -var trimBeginRegexp = /^\s\s*/; -var trimEndRegexp = /\s\s*$/; - -exports.stringTrimLeft = function (string) { - return string.replace(trimBeginRegexp, ''); -}; - -exports.stringTrimRight = function (string) { - return string.replace(trimEndRegexp, ''); -}; - -exports.copyObject = function(obj) { - var copy = {}; - for (var key in obj) { - copy[key] = obj[key]; - } - return copy; -}; - -exports.copyArray = function(array){ - var copy = []; - for (var i=0, l=array.length; i 0 && this._events[type].length > m) { - this._events[type].warned = true; - console.error('(node) warning: possible EventEmitter memory ' + - 'leak detected. %d listeners added. ' + - 'Use emitter.setMaxListeners() to increase limit.', - this._events[type].length); - if (typeof console.trace === 'function') { - console.trace(); - } - } - } - - return this; -}; - -EventEmitter.prototype.on = EventEmitter.prototype.addListener; - -EventEmitter.prototype.once = function(type, listener) { - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - var fired = false; - - function g() { - this.removeListener(type, g); - - if (!fired) { - fired = true; - listener.apply(this, arguments); - } - } - - g.listener = listener; - this.on(type, g); - - return this; -}; -EventEmitter.prototype.removeListener = function(type, listener) { - var list, position, length, i; - - if (!isFunction(listener)) - throw TypeError('listener must be a function'); - - if (!this._events || !this._events[type]) - return this; - - list = this._events[type]; - length = list.length; - position = -1; - - if (list === listener || - (isFunction(list.listener) && list.listener === listener)) { - delete this._events[type]; - if (this._events.removeListener) - this.emit('removeListener', type, listener); - - } else if (isObject(list)) { - for (i = length; i-- > 0;) { - if (list[i] === listener || - (list[i].listener && list[i].listener === listener)) { - position = i; - break; - } - } - - if (position < 0) - return this; - - if (list.length === 1) { - list.length = 0; - delete this._events[type]; - } else { - list.splice(position, 1); - } - - if (this._events.removeListener) - this.emit('removeListener', type, listener); - } - - return this; -}; - -EventEmitter.prototype.removeAllListeners = function(type) { - var key, listeners; - - if (!this._events) - return this; - if (!this._events.removeListener) { - if (arguments.length === 0) - this._events = {}; - else if (this._events[type]) - delete this._events[type]; - return this; - } - if (arguments.length === 0) { - for (key in this._events) { - if (key === 'removeListener') continue; - this.removeAllListeners(key); - } - this.removeAllListeners('removeListener'); - this._events = {}; - return this; - } - - listeners = this._events[type]; - - if (isFunction(listeners)) { - this.removeListener(type, listeners); - } else { - while (listeners.length) - this.removeListener(type, listeners[listeners.length - 1]); - } - delete this._events[type]; - - return this; -}; - -EventEmitter.prototype.listeners = function(type) { - var ret; - if (!this._events || !this._events[type]) - ret = []; - else if (isFunction(this._events[type])) - ret = [this._events[type]]; - else - ret = this._events[type].slice(); - return ret; -}; - -EventEmitter.listenerCount = function(emitter, type) { - var ret; - if (!emitter._events || !emitter._events[type]) - ret = 0; - else if (isFunction(emitter._events[type])) - ret = 1; - else - ret = emitter._events[type].length; - return ret; -}; - -function isFunction(arg) { - return typeof arg === 'function'; -} - -function isNumber(arg) { - return typeof arg === 'number'; -} - -function isObject(arg) { - return typeof arg === 'object' && arg !== null; -} - -function isUndefined(arg) { - return arg === void 0; -} - -},{}],"/node_modules/jshint/data/ascii-identifier-data.js":[function(_dereq_,module,exports){ -var identifierStartTable = []; - -for (var i = 0; i < 128; i++) { - identifierStartTable[i] = - i === 36 || // $ - i >= 65 && i <= 90 || // A-Z - i === 95 || // _ - i >= 97 && i <= 122; // a-z -} - -var identifierPartTable = []; - -for (var i = 0; i < 128; i++) { - identifierPartTable[i] = - identifierStartTable[i] || // $, _, A-Z, a-z - i >= 48 && i <= 57; // 0-9 -} - -module.exports = { - asciiIdentifierStartTable: identifierStartTable, - asciiIdentifierPartTable: identifierPartTable -}; - -},{}],"/node_modules/jshint/lodash.js":[function(_dereq_,module,exports){ -(function (global){ -;(function() { - - var undefined; - - var VERSION = '3.7.0'; - - var FUNC_ERROR_TEXT = 'Expected a function'; - - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - mapTag = '[object Map]', - numberTag = '[object Number]', - objectTag = '[object Object]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - var reIsDeepProp = /\.|\[(?:[^[\]]+|(["'])(?:(?!\1)[^\n\\]|\\.)*?)\1\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\n\\]|\\.)*?)\2)\]/g; - - var reRegExpChars = /[.*+?^${}()|[\]\/\\]/g, - reHasRegExpChars = RegExp(reRegExpChars.source); - - var reEscapeChar = /\\(\\)?/g; - - var reFlags = /\w*$/; - - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dateTag] = typedArrayTags[errorTag] = - typedArrayTags[funcTag] = typedArrayTags[mapTag] = - typedArrayTags[numberTag] = typedArrayTags[objectTag] = - typedArrayTags[regexpTag] = typedArrayTags[setTag] = - typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false; - - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[boolTag] = - cloneableTags[dateTag] = cloneableTags[float32Tag] = - cloneableTags[float64Tag] = cloneableTags[int8Tag] = - cloneableTags[int16Tag] = cloneableTags[int32Tag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[stringTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[mapTag] = cloneableTags[setTag] = - cloneableTags[weakMapTag] = false; - - var objectTypes = { - 'function': true, - 'object': true - }; - - var freeExports = objectTypes[typeof exports] && exports && !exports.nodeType && exports; - - var freeModule = objectTypes[typeof module] && module && !module.nodeType && module; - - var freeGlobal = freeExports && freeModule && typeof global == 'object' && global && global.Object && global; - - var freeSelf = objectTypes[typeof self] && self && self.Object && self; - - var freeWindow = objectTypes[typeof window] && window && window.Object && window; - - var moduleExports = freeModule && freeModule.exports === freeExports && freeExports; - - var root = freeGlobal || ((freeWindow !== (this && this.window)) && freeWindow) || freeSelf || this; - - function baseFindIndex(array, predicate, fromRight) { - var length = array.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - function baseIndexOf(array, value, fromIndex) { - if (value !== value) { - return indexOfNaN(array, fromIndex); - } - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - function baseIsFunction(value) { - return typeof value == 'function' || false; - } - - function baseToString(value) { - if (typeof value == 'string') { - return value; - } - return value == null ? '' : (value + ''); - } - - function indexOfNaN(array, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 0 : -1); - - while ((fromRight ? index-- : ++index < length)) { - var other = array[index]; - if (other !== other) { - return index; - } - } - return -1; - } - - function isObjectLike(value) { - return !!value && typeof value == 'object'; - } - - var arrayProto = Array.prototype, - objectProto = Object.prototype; - - var fnToString = Function.prototype.toString; - - var hasOwnProperty = objectProto.hasOwnProperty; - - var objToString = objectProto.toString; - - var reIsNative = RegExp('^' + - escapeRegExp(objToString) - .replace(/toString|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - var ArrayBuffer = isNative(ArrayBuffer = root.ArrayBuffer) && ArrayBuffer, - bufferSlice = isNative(bufferSlice = ArrayBuffer && new ArrayBuffer(0).slice) && bufferSlice, - floor = Math.floor, - getOwnPropertySymbols = isNative(getOwnPropertySymbols = Object.getOwnPropertySymbols) && getOwnPropertySymbols, - getPrototypeOf = isNative(getPrototypeOf = Object.getPrototypeOf) && getPrototypeOf, - push = arrayProto.push, - preventExtensions = isNative(Object.preventExtensions = Object.preventExtensions) && preventExtensions, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - Uint8Array = isNative(Uint8Array = root.Uint8Array) && Uint8Array; - - var Float64Array = (function() { - try { - var func = isNative(func = root.Float64Array) && func, - result = new func(new ArrayBuffer(10), 0, 1) && func; - } catch(e) {} - return result; - }()); - - var nativeAssign = (function() { - var object = { '1': 0 }, - func = preventExtensions && isNative(func = Object.assign) && func; - - try { func(preventExtensions(object), 'xo'); } catch(e) {} - return !object[1] && func; - }()); - - var nativeIsArray = isNative(nativeIsArray = Array.isArray) && nativeIsArray, - nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys, - nativeMax = Math.max, - nativeMin = Math.min; - - var NEGATIVE_INFINITY = Number.NEGATIVE_INFINITY; - - var MAX_ARRAY_LENGTH = Math.pow(2, 32) - 1, - MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, - HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1; - - var FLOAT64_BYTES_PER_ELEMENT = Float64Array ? Float64Array.BYTES_PER_ELEMENT : 0; - - var MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; - - function lodash() { - } - - var support = lodash.support = {}; - - (function(x) { - var Ctor = function() { this.x = x; }, - object = { '0': x, 'length': x }, - props = []; - - Ctor.prototype = { 'valueOf': x, 'y': x }; - for (var key in new Ctor) { props.push(key); } - - support.funcDecomp = /\bthis\b/.test(function() { return this; }); - - support.funcNames = typeof Function.name == 'string'; - - try { - support.nonEnumArgs = !propertyIsEnumerable.call(arguments, 1); - } catch(e) { - support.nonEnumArgs = true; - } - }(1, 0)); - - function arrayCopy(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - function arrayEach(array, iteratee) { - var index = -1, - length = array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - function arrayFilter(array, predicate) { - var index = -1, - length = array.length, - resIndex = -1, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[++resIndex] = value; - } - } - return result; - } - - function arrayMap(array, iteratee) { - var index = -1, - length = array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - function arrayMax(array) { - var index = -1, - length = array.length, - result = NEGATIVE_INFINITY; - - while (++index < length) { - var value = array[index]; - if (value > result) { - result = value; - } - } - return result; - } - - function arraySome(array, predicate) { - var index = -1, - length = array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - function assignWith(object, source, customizer) { - var props = keys(source); - push.apply(props, getSymbols(source)); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index], - value = object[key], - result = customizer(value, source[key], key, object, source); - - if ((result === result ? (result !== value) : (value === value)) || - (value === undefined && !(key in object))) { - object[key] = result; - } - } - return object; - } - - var baseAssign = nativeAssign || function(object, source) { - return source == null - ? object - : baseCopy(source, getSymbols(source), baseCopy(source, keys(source), object)); - }; - - function baseCopy(source, props, object) { - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - object[key] = source[key]; - } - return object; - } - - function baseCallback(func, thisArg, argCount) { - var type = typeof func; - if (type == 'function') { - return thisArg === undefined - ? func - : bindCallback(func, thisArg, argCount); - } - if (func == null) { - return identity; - } - if (type == 'object') { - return baseMatches(func); - } - return thisArg === undefined - ? property(func) - : baseMatchesProperty(func, thisArg); - } - - function baseClone(value, isDeep, customizer, key, object, stackA, stackB) { - var result; - if (customizer) { - result = object ? customizer(value, key, object) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return arrayCopy(value, result); - } - } else { - var tag = objToString.call(value), - isFunc = tag == funcTag; - - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = initCloneObject(isFunc ? {} : value); - if (!isDeep) { - return baseAssign(result, value); - } - } else { - return cloneableTags[tag] - ? initCloneByTag(value, tag, isDeep) - : (object ? value : {}); - } - } - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == value) { - return stackB[length]; - } - } - stackA.push(value); - stackB.push(result); - - (isArr ? arrayEach : baseForOwn)(value, function(subValue, key) { - result[key] = baseClone(subValue, isDeep, customizer, key, value, stackA, stackB); - }); - return result; - } - - var baseEach = createBaseEach(baseForOwn); - - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } - }); - return result; - } - - var baseFor = createBaseFor(); - - function baseForIn(object, iteratee) { - return baseFor(object, iteratee, keysIn); - } - - function baseForOwn(object, iteratee) { - return baseFor(object, iteratee, keys); - } - - function baseGet(object, path, pathKey) { - if (object == null) { - return; - } - if (pathKey !== undefined && pathKey in toObject(object)) { - path = [pathKey]; - } - var index = -1, - length = path.length; - - while (object != null && ++index < length) { - var result = object = object[path[index]]; - } - return result; - } - - function baseIsEqual(value, other, customizer, isLoose, stackA, stackB) { - if (value === other) { - return value !== 0 || (1 / value == 1 / other); - } - var valType = typeof value, - othType = typeof other; - - if ((valType != 'function' && valType != 'object' && othType != 'function' && othType != 'object') || - value == null || other == null) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, baseIsEqual, customizer, isLoose, stackA, stackB); - } - - function baseIsEqualDeep(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = arrayTag, - othTag = arrayTag; - - if (!objIsArr) { - objTag = objToString.call(object); - if (objTag == argsTag) { - objTag = objectTag; - } else if (objTag != objectTag) { - objIsArr = isTypedArray(object); - } - } - if (!othIsArr) { - othTag = objToString.call(other); - if (othTag == argsTag) { - othTag = objectTag; - } else if (othTag != objectTag) { - othIsArr = isTypedArray(other); - } - } - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && !(objIsArr || objIsObj)) { - return equalByTag(object, other, objTag); - } - if (!isLoose) { - var valWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - - if (valWrapped || othWrapped) { - return equalFunc(valWrapped ? object.value() : object, othWrapped ? other.value() : other, customizer, isLoose, stackA, stackB); - } - } - if (!isSameTag) { - return false; - } - stackA || (stackA = []); - stackB || (stackB = []); - - var length = stackA.length; - while (length--) { - if (stackA[length] == object) { - return stackB[length] == other; - } - } - stackA.push(object); - stackB.push(other); - - var result = (objIsArr ? equalArrays : equalObjects)(object, other, equalFunc, customizer, isLoose, stackA, stackB); - - stackA.pop(); - stackB.pop(); - - return result; - } - - function baseIsMatch(object, props, values, strictCompareFlags, customizer) { - var index = -1, - length = props.length, - noCustomizer = !customizer; - - while (++index < length) { - if ((noCustomizer && strictCompareFlags[index]) - ? values[index] !== object[props[index]] - : !(props[index] in object) - ) { - return false; - } - } - index = -1; - while (++index < length) { - var key = props[index], - objValue = object[key], - srcValue = values[index]; - - if (noCustomizer && strictCompareFlags[index]) { - var result = objValue !== undefined || (key in object); - } else { - result = customizer ? customizer(objValue, srcValue, key) : undefined; - if (result === undefined) { - result = baseIsEqual(srcValue, objValue, customizer, true); - } - } - if (!result) { - return false; - } - } - return true; - } - - function baseMatches(source) { - var props = keys(source), - length = props.length; - - if (!length) { - return constant(true); - } - if (length == 1) { - var key = props[0], - value = source[key]; - - if (isStrictComparable(value)) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === value && (value !== undefined || (key in toObject(object))); - }; - } - } - var values = Array(length), - strictCompareFlags = Array(length); - - while (length--) { - value = source[props[length]]; - values[length] = value; - strictCompareFlags[length] = isStrictComparable(value); - } - return function(object) { - return object != null && baseIsMatch(toObject(object), props, values, strictCompareFlags); - }; - } - - function baseMatchesProperty(path, value) { - var isArr = isArray(path), - isCommon = isKey(path) && isStrictComparable(value), - pathKey = (path + ''); - - path = toPath(path); - return function(object) { - if (object == null) { - return false; - } - var key = pathKey; - object = toObject(object); - if ((isArr || !isCommon) && !(key in object)) { - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - if (object == null) { - return false; - } - key = last(path); - object = toObject(object); - } - return object[key] === value - ? (value !== undefined || (key in object)) - : baseIsEqual(value, object[key], null, true); - }; - } - - function baseMerge(object, source, customizer, stackA, stackB) { - if (!isObject(object)) { - return object; - } - var isSrcArr = isLength(source.length) && (isArray(source) || isTypedArray(source)); - if (!isSrcArr) { - var props = keys(source); - push.apply(props, getSymbols(source)); - } - arrayEach(props || source, function(srcValue, key) { - if (props) { - key = srcValue; - srcValue = source[key]; - } - if (isObjectLike(srcValue)) { - stackA || (stackA = []); - stackB || (stackB = []); - baseMergeDeep(object, source, key, baseMerge, customizer, stackA, stackB); - } - else { - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; - - if (isCommon) { - result = srcValue; - } - if ((isSrcArr || result !== undefined) && - (isCommon || (result === result ? (result !== value) : (value === value)))) { - object[key] = result; - } - } - }); - return object; - } - - function baseMergeDeep(object, source, key, mergeFunc, customizer, stackA, stackB) { - var length = stackA.length, - srcValue = source[key]; - - while (length--) { - if (stackA[length] == srcValue) { - object[key] = stackB[length]; - return; - } - } - var value = object[key], - result = customizer ? customizer(value, srcValue, key, object, source) : undefined, - isCommon = result === undefined; - - if (isCommon) { - result = srcValue; - if (isLength(srcValue.length) && (isArray(srcValue) || isTypedArray(srcValue))) { - result = isArray(value) - ? value - : (getLength(value) ? arrayCopy(value) : []); - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - result = isArguments(value) - ? toPlainObject(value) - : (isPlainObject(value) ? value : {}); - } - else { - isCommon = false; - } - } - stackA.push(srcValue); - stackB.push(result); - - if (isCommon) { - object[key] = mergeFunc(result, srcValue, customizer, stackA, stackB); - } else if (result === result ? (result !== value) : (value === value)) { - object[key] = result; - } - } - - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; - }; - } - - function basePropertyDeep(path) { - var pathKey = (path + ''); - path = toPath(path); - return function(object) { - return baseGet(object, path, pathKey); - }; - } - - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - start = start == null ? 0 : (+start || 0); - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = (end === undefined || end > length) ? length : (+end || 0); - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - function baseValues(object, props) { - var index = -1, - length = props.length, - result = Array(length); - - while (++index < length) { - result[index] = object[props[index]]; - } - return result; - } - - function binaryIndex(array, value, retHighest) { - var low = 0, - high = array ? array.length : low; - - if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = (low + high) >>> 1, - computed = array[mid]; - - if (retHighest ? (computed <= value) : (computed < value)) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return binaryIndexBy(array, value, identity, retHighest); - } - - function binaryIndexBy(array, value, iteratee, retHighest) { - value = iteratee(value); - - var low = 0, - high = array ? array.length : 0, - valIsNaN = value !== value, - valIsUndef = value === undefined; - - while (low < high) { - var mid = floor((low + high) / 2), - computed = iteratee(array[mid]), - isReflexive = computed === computed; - - if (valIsNaN) { - var setLow = isReflexive || retHighest; - } else if (valIsUndef) { - setLow = isReflexive && (retHighest || computed !== undefined); - } else { - setLow = retHighest ? (computed <= value) : (computed < value); - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin(high, MAX_ARRAY_INDEX); - } - - function bindCallback(func, thisArg, argCount) { - if (typeof func != 'function') { - return identity; - } - if (thisArg === undefined) { - return func; - } - switch (argCount) { - case 1: return function(value) { - return func.call(thisArg, value); - }; - case 3: return function(value, index, collection) { - return func.call(thisArg, value, index, collection); - }; - case 4: return function(accumulator, value, index, collection) { - return func.call(thisArg, accumulator, value, index, collection); - }; - case 5: return function(value, other, key, object, source) { - return func.call(thisArg, value, other, key, object, source); - }; - } - return function() { - return func.apply(thisArg, arguments); - }; - } - - function bufferClone(buffer) { - return bufferSlice.call(buffer, 0); - } - if (!bufferSlice) { - bufferClone = !(ArrayBuffer && Uint8Array) ? constant(null) : function(buffer) { - var byteLength = buffer.byteLength, - floatLength = Float64Array ? floor(byteLength / FLOAT64_BYTES_PER_ELEMENT) : 0, - offset = floatLength * FLOAT64_BYTES_PER_ELEMENT, - result = new ArrayBuffer(byteLength); - - if (floatLength) { - var view = new Float64Array(result, 0, floatLength); - view.set(new Float64Array(buffer, 0, floatLength)); - } - if (byteLength != offset) { - view = new Uint8Array(result, offset); - view.set(new Uint8Array(buffer, offset)); - } - return result; - }; - } - - function createAssigner(assigner) { - return restParam(function(object, sources) { - var index = -1, - length = object == null ? 0 : sources.length, - customizer = length > 2 && sources[length - 2], - guard = length > 2 && sources[2], - thisArg = length > 1 && sources[length - 1]; - - if (typeof customizer == 'function') { - customizer = bindCallback(customizer, thisArg, 5); - length -= 2; - } else { - customizer = typeof thisArg == 'function' ? thisArg : null; - length -= (customizer ? 1 : 0); - } - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? null : customizer; - length = 1; - } - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, customizer); - } - } - return object; - }); - } - - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - return eachFunc(collection, iteratee); - } - var index = fromRight ? length : -1, - iterable = toObject(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var iterable = toObject(object), - props = keysFunc(object), - length = props.length, - index = fromRight ? length : -1; - - while ((fromRight ? index-- : ++index < length)) { - var key = props[index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - function createFindIndex(fromRight) { - return function(array, predicate, thisArg) { - if (!(array && array.length)) { - return -1; - } - predicate = getCallback(predicate, thisArg, 3); - return baseFindIndex(array, predicate, fromRight); - }; - } - - function createForEach(arrayFunc, eachFunc) { - return function(collection, iteratee, thisArg) { - return (typeof iteratee == 'function' && thisArg === undefined && isArray(collection)) - ? arrayFunc(collection, iteratee) - : eachFunc(collection, bindCallback(iteratee, thisArg, 3)); - }; - } - - function equalArrays(array, other, equalFunc, customizer, isLoose, stackA, stackB) { - var index = -1, - arrLength = array.length, - othLength = other.length, - result = true; - - if (arrLength != othLength && !(isLoose && othLength > arrLength)) { - return false; - } - while (result && ++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - result = undefined; - if (customizer) { - result = isLoose - ? customizer(othValue, arrValue, index) - : customizer(arrValue, othValue, index); - } - if (result === undefined) { - if (isLoose) { - var othIndex = othLength; - while (othIndex--) { - othValue = other[othIndex]; - result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); - if (result) { - break; - } - } - } else { - result = (arrValue && arrValue === othValue) || equalFunc(arrValue, othValue, customizer, isLoose, stackA, stackB); - } - } - } - return !!result; - } - - function equalByTag(object, other, tag) { - switch (tag) { - case boolTag: - case dateTag: - return +object == +other; - - case errorTag: - return object.name == other.name && object.message == other.message; - - case numberTag: - return (object != +object) - ? other != +other - : (object == 0 ? ((1 / object) == (1 / other)) : object == +other); - - case regexpTag: - case stringTag: - return object == (other + ''); - } - return false; - } - - function equalObjects(object, other, equalFunc, customizer, isLoose, stackA, stackB) { - var objProps = keys(object), - objLength = objProps.length, - othProps = keys(other), - othLength = othProps.length; - - if (objLength != othLength && !isLoose) { - return false; - } - var skipCtor = isLoose, - index = -1; - - while (++index < objLength) { - var key = objProps[index], - result = isLoose ? key in other : hasOwnProperty.call(other, key); - - if (result) { - var objValue = object[key], - othValue = other[key]; - - result = undefined; - if (customizer) { - result = isLoose - ? customizer(othValue, objValue, key) - : customizer(objValue, othValue, key); - } - if (result === undefined) { - result = (objValue && objValue === othValue) || equalFunc(objValue, othValue, customizer, isLoose, stackA, stackB); - } - } - if (!result) { - return false; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (!skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - return false; - } - } - return true; - } - - function getCallback(func, thisArg, argCount) { - var result = lodash.callback || callback; - result = result === callback ? baseCallback : result; - return argCount ? result(func, thisArg, argCount) : result; - } - - function getIndexOf(collection, target, fromIndex) { - var result = lodash.indexOf || indexOf; - result = result === indexOf ? baseIndexOf : result; - return collection ? result(collection, target, fromIndex) : result; - } - - var getLength = baseProperty('length'); - - var getSymbols = !getOwnPropertySymbols ? constant([]) : function(object) { - return getOwnPropertySymbols(toObject(object)); - }; - - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - function initCloneObject(object) { - var Ctor = object.constructor; - if (!(typeof Ctor == 'function' && Ctor instanceof Ctor)) { - Ctor = Object; - } - return new Ctor; - } - - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return bufferClone(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - var buffer = object.buffer; - return new Ctor(isDeep ? bufferClone(buffer) : buffer, object.byteOffset, object.length); - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - var result = new Ctor(object.source, reFlags.exec(object)); - result.lastIndex = object.lastIndex; - } - return result; - } - - function isIndex(value, length) { - value = +value; - length = length == null ? MAX_SAFE_INTEGER : length; - return value > -1 && value % 1 == 0 && value < length; - } - - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number') { - var length = getLength(object), - prereq = isLength(length) && isIndex(index, length); - } else { - prereq = type == 'string' && index in object; - } - if (prereq) { - var other = object[index]; - return value === value ? (value === other) : (other !== other); - } - return false; - } - - function isKey(value, object) { - var type = typeof value; - if ((type == 'string' && reIsPlainProp.test(value)) || type == 'number') { - return true; - } - if (isArray(value)) { - return false; - } - var result = !reIsDeepProp.test(value); - return result || (object != null && value in toObject(object)); - } - - function isLength(value) { - return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - function isStrictComparable(value) { - return value === value && (value === 0 ? ((1 / value) > 0) : !isObject(value)); - } - - function shimIsPlainObject(value) { - var Ctor, - support = lodash.support; - - if (!(isObjectLike(value) && objToString.call(value) == objectTag) || - (!hasOwnProperty.call(value, 'constructor') && - (Ctor = value.constructor, typeof Ctor == 'function' && !(Ctor instanceof Ctor)))) { - return false; - } - var result; - baseForIn(value, function(subValue, key) { - result = key; - }); - return result === undefined || hasOwnProperty.call(value, result); - } - - function shimKeys(object) { - var props = keysIn(object), - propsLength = props.length, - length = propsLength && object.length, - support = lodash.support; - - var allowIndexes = length && isLength(length) && - (isArray(object) || (support.nonEnumArgs && isArguments(object))); - - var index = -1, - result = []; - - while (++index < propsLength) { - var key = props[index]; - if ((allowIndexes && isIndex(key, length)) || hasOwnProperty.call(object, key)) { - result.push(key); - } - } - return result; - } - - function toObject(value) { - return isObject(value) ? value : Object(value); - } - - function toPath(value) { - if (isArray(value)) { - return value; - } - var result = []; - baseToString(value).replace(rePropName, function(match, number, quote, string) { - result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - } - - var findLastIndex = createFindIndex(true); - - function indexOf(array, value, fromIndex) { - var length = array ? array.length : 0; - if (!length) { - return -1; - } - if (typeof fromIndex == 'number') { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : fromIndex; - } else if (fromIndex) { - var index = binaryIndex(array, value), - other = array[index]; - - if (value === value ? (value === other) : (other !== other)) { - return index; - } - return -1; - } - return baseIndexOf(array, value, fromIndex || 0); - } - - function last(array) { - var length = array ? array.length : 0; - return length ? array[length - 1] : undefined; - } - - function slice(array, start, end) { - var length = array ? array.length : 0; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - return baseSlice(array, start, end); - } - - function unzip(array) { - var index = -1, - length = (array && array.length && arrayMax(arrayMap(array, getLength))) >>> 0, - result = Array(length); - - while (++index < length) { - result[index] = arrayMap(array, baseProperty(index)); - } - return result; - } - - var zip = restParam(unzip); - - var forEach = createForEach(arrayEach, baseEach); - - function includes(collection, target, fromIndex, guard) { - var length = collection ? getLength(collection) : 0; - if (!isLength(length)) { - collection = values(collection); - length = collection.length; - } - if (!length) { - return false; - } - if (typeof fromIndex != 'number' || (guard && isIterateeCall(target, fromIndex, guard))) { - fromIndex = 0; - } else { - fromIndex = fromIndex < 0 ? nativeMax(length + fromIndex, 0) : (fromIndex || 0); - } - return (typeof collection == 'string' || !isArray(collection) && isString(collection)) - ? (fromIndex < length && collection.indexOf(target, fromIndex) > -1) - : (getIndexOf(collection, target, fromIndex) > -1); - } - - function reject(collection, predicate, thisArg) { - var func = isArray(collection) ? arrayFilter : baseFilter; - predicate = getCallback(predicate, thisArg, 3); - return func(collection, function(value, index, collection) { - return !predicate(value, index, collection); - }); - } - - function some(collection, predicate, thisArg) { - var func = isArray(collection) ? arraySome : baseSome; - if (thisArg && isIterateeCall(collection, predicate, thisArg)) { - predicate = null; - } - if (typeof predicate != 'function' || thisArg !== undefined) { - predicate = getCallback(predicate, thisArg, 3); - } - return func(collection, predicate); - } - - function restParam(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = nativeMax(start === undefined ? (func.length - 1) : (+start || 0), 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - rest = Array(length); - - while (++index < length) { - rest[index] = args[start + index]; - } - switch (start) { - case 0: return func.call(this, rest); - case 1: return func.call(this, args[0], rest); - case 2: return func.call(this, args[0], args[1], rest); - } - var otherArgs = Array(start + 1); - index = -1; - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = rest; - return func.apply(this, otherArgs); - }; - } - - function clone(value, isDeep, customizer, thisArg) { - if (isDeep && typeof isDeep != 'boolean' && isIterateeCall(value, isDeep, customizer)) { - isDeep = false; - } - else if (typeof isDeep == 'function') { - thisArg = customizer; - customizer = isDeep; - isDeep = false; - } - customizer = typeof customizer == 'function' && bindCallback(customizer, thisArg, 1); - return baseClone(value, isDeep, customizer); - } - - function isArguments(value) { - var length = isObjectLike(value) ? value.length : undefined; - return isLength(length) && objToString.call(value) == argsTag; - } - - var isArray = nativeIsArray || function(value) { - return isObjectLike(value) && isLength(value.length) && objToString.call(value) == arrayTag; - }; - - function isEmpty(value) { - if (value == null) { - return true; - } - var length = getLength(value); - if (isLength(length) && (isArray(value) || isString(value) || isArguments(value) || - (isObjectLike(value) && isFunction(value.splice)))) { - return !length; - } - return !keys(value).length; - } - - var isFunction = !(baseIsFunction(/x/) || (Uint8Array && !baseIsFunction(Uint8Array))) ? baseIsFunction : function(value) { - return objToString.call(value) == funcTag; - }; - - function isObject(value) { - var type = typeof value; - return type == 'function' || (!!value && type == 'object'); - } - - function isNative(value) { - if (value == null) { - return false; - } - if (objToString.call(value) == funcTag) { - return reIsNative.test(fnToString.call(value)); - } - return isObjectLike(value) && reIsHostCtor.test(value); - } - - function isNumber(value) { - return typeof value == 'number' || (isObjectLike(value) && objToString.call(value) == numberTag); - } - - var isPlainObject = !getPrototypeOf ? shimIsPlainObject : function(value) { - if (!(value && objToString.call(value) == objectTag)) { - return false; - } - var valueOf = value.valueOf, - objProto = isNative(valueOf) && (objProto = getPrototypeOf(valueOf)) && getPrototypeOf(objProto); - - return objProto - ? (value == objProto || getPrototypeOf(value) == objProto) - : shimIsPlainObject(value); - }; - - function isString(value) { - return typeof value == 'string' || (isObjectLike(value) && objToString.call(value) == stringTag); - } - - function isTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[objToString.call(value)]; - } - - function toPlainObject(value) { - return baseCopy(value, keysIn(value)); - } - - var assign = createAssigner(function(object, source, customizer) { - return customizer - ? assignWith(object, source, customizer) - : baseAssign(object, source); - }); - - function has(object, path) { - if (object == null) { - return false; - } - var result = hasOwnProperty.call(object, path); - if (!result && !isKey(path)) { - path = toPath(path); - object = path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1)); - path = last(path); - result = object != null && hasOwnProperty.call(object, path); - } - return result; - } - - var keys = !nativeKeys ? shimKeys : function(object) { - if (object) { - var Ctor = object.constructor, - length = object.length; - } - if ((typeof Ctor == 'function' && Ctor.prototype === object) || - (typeof object != 'function' && isLength(length))) { - return shimKeys(object); - } - return isObject(object) ? nativeKeys(object) : []; - }; - - function keysIn(object) { - if (object == null) { - return []; - } - if (!isObject(object)) { - object = Object(object); - } - var length = object.length; - length = (length && isLength(length) && - (isArray(object) || (support.nonEnumArgs && isArguments(object))) && length) || 0; - - var Ctor = object.constructor, - index = -1, - isProto = typeof Ctor == 'function' && Ctor.prototype === object, - result = Array(length), - skipIndexes = length > 0; - - while (++index < length) { - result[index] = (index + ''); - } - for (var key in object) { - if (!(skipIndexes && isIndex(key, length)) && - !(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - var merge = createAssigner(baseMerge); - - function values(object) { - return baseValues(object, keys(object)); - } - - function escapeRegExp(string) { - string = baseToString(string); - return (string && reHasRegExpChars.test(string)) - ? string.replace(reRegExpChars, '\\$&') - : string; - } - - function callback(func, thisArg, guard) { - if (guard && isIterateeCall(func, thisArg, guard)) { - thisArg = null; - } - return baseCallback(func, thisArg); - } - - function constant(value) { - return function() { - return value; - }; - } - - function identity(value) { - return value; - } - - function property(path) { - return isKey(path) ? baseProperty(path) : basePropertyDeep(path); - } - lodash.assign = assign; - lodash.callback = callback; - lodash.constant = constant; - lodash.forEach = forEach; - lodash.keys = keys; - lodash.keysIn = keysIn; - lodash.merge = merge; - lodash.property = property; - lodash.reject = reject; - lodash.restParam = restParam; - lodash.slice = slice; - lodash.toPlainObject = toPlainObject; - lodash.unzip = unzip; - lodash.values = values; - lodash.zip = zip; - - lodash.each = forEach; - lodash.extend = assign; - lodash.iteratee = callback; - lodash.clone = clone; - lodash.escapeRegExp = escapeRegExp; - lodash.findLastIndex = findLastIndex; - lodash.has = has; - lodash.identity = identity; - lodash.includes = includes; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isEmpty = isEmpty; - lodash.isFunction = isFunction; - lodash.isNative = isNative; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isPlainObject = isPlainObject; - lodash.isString = isString; - lodash.isTypedArray = isTypedArray; - lodash.last = last; - lodash.some = some; - - lodash.any = some; - lodash.contains = includes; - lodash.include = includes; - - lodash.VERSION = VERSION; - if (freeExports && freeModule) { - if (moduleExports) { - (freeModule.exports = lodash)._ = lodash; - } - else { - freeExports._ = lodash; - } - } - else { - root._ = lodash; - } -}.call(this)); - -}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],"/node_modules/jshint/src/jshint.js":[function(_dereq_,module,exports){ - -var _ = _dereq_("../lodash"); -var events = _dereq_("events"); -var vars = _dereq_("./vars.js"); -var messages = _dereq_("./messages.js"); -var Lexer = _dereq_("./lex.js").Lexer; -var reg = _dereq_("./reg.js"); -var state = _dereq_("./state.js").state; -var style = _dereq_("./style.js"); -var options = _dereq_("./options.js"); -var scopeManager = _dereq_("./scope-manager.js"); - -var JSHINT = (function() { - "use strict"; - - var api, // Extension API - bang = { - "<" : true, - "<=" : true, - "==" : true, - "===": true, - "!==": true, - "!=" : true, - ">" : true, - ">=" : true, - "+" : true, - "-" : true, - "*" : true, - "/" : true, - "%" : true - }, - - declared, // Globals that were declared using /*global ... */ syntax. - - functionicity = [ - "closure", "exception", "global", "label", - "outer", "unused", "var" - ], - - functions, // All of the functions - - inblock, - indent, - lookahead, - lex, - member, - membersOnly, - predefined, // Global variables defined by option - - stack, - urls, - - extraModules = [], - emitter = new events.EventEmitter(); - - function checkOption(name, t) { - name = name.trim(); - - if (/^[+-]W\d{3}$/g.test(name)) { - return true; - } - - if (options.validNames.indexOf(name) === -1) { - if (t.type !== "jslint" && !_.has(options.removed, name)) { - error("E001", t, name); - return false; - } - } - - return true; - } - - function isString(obj) { - return Object.prototype.toString.call(obj) === "[object String]"; - } - - function isIdentifier(tkn, value) { - if (!tkn) - return false; - - if (!tkn.identifier || tkn.value !== value) - return false; - - return true; - } - - function isReserved(token) { - if (!token.reserved) { - return false; - } - var meta = token.meta; - - if (meta && meta.isFutureReservedWord && state.inES5()) { - if (!meta.es5) { - return false; - } - if (meta.strictOnly) { - if (!state.option.strict && !state.isStrict()) { - return false; - } - } - - if (token.isProperty) { - return false; - } - } - - return true; - } - - function supplant(str, data) { - return str.replace(/\{([^{}]*)\}/g, function(a, b) { - var r = data[b]; - return typeof r === "string" || typeof r === "number" ? r : a; - }); - } - - function combine(dest, src) { - Object.keys(src).forEach(function(name) { - if (_.has(JSHINT.blacklist, name)) return; - dest[name] = src[name]; - }); - } - - function processenforceall() { - if (state.option.enforceall) { - for (var enforceopt in options.bool.enforcing) { - if (state.option[enforceopt] === undefined && - !options.noenforceall[enforceopt]) { - state.option[enforceopt] = true; - } - } - for (var relaxopt in options.bool.relaxing) { - if (state.option[relaxopt] === undefined) { - state.option[relaxopt] = false; - } - } - } - } - - function assume() { - processenforceall(); - if (!state.option.esversion && !state.option.moz) { - if (state.option.es3) { - state.option.esversion = 3; - } else if (state.option.esnext) { - state.option.esversion = 6; - } else { - state.option.esversion = 5; - } - } - - if (state.inES5()) { - combine(predefined, vars.ecmaIdentifiers[5]); - } - - if (state.inES6()) { - combine(predefined, vars.ecmaIdentifiers[6]); - } - - if (state.option.module) { - if (state.option.strict === true) { - state.option.strict = "global"; - } - if (!state.inES6()) { - warning("W134", state.tokens.next, "module", 6); - } - } - - if (state.option.couch) { - combine(predefined, vars.couch); - } - - if (state.option.qunit) { - combine(predefined, vars.qunit); - } - - if (state.option.rhino) { - combine(predefined, vars.rhino); - } - - if (state.option.shelljs) { - combine(predefined, vars.shelljs); - combine(predefined, vars.node); - } - if (state.option.typed) { - combine(predefined, vars.typed); - } - - if (state.option.phantom) { - combine(predefined, vars.phantom); - if (state.option.strict === true) { - state.option.strict = "global"; - } - } - - if (state.option.prototypejs) { - combine(predefined, vars.prototypejs); - } - - if (state.option.node) { - combine(predefined, vars.node); - combine(predefined, vars.typed); - if (state.option.strict === true) { - state.option.strict = "global"; - } - } - - if (state.option.devel) { - combine(predefined, vars.devel); - } - - if (state.option.dojo) { - combine(predefined, vars.dojo); - } - - if (state.option.browser) { - combine(predefined, vars.browser); - combine(predefined, vars.typed); - } - - if (state.option.browserify) { - combine(predefined, vars.browser); - combine(predefined, vars.typed); - combine(predefined, vars.browserify); - if (state.option.strict === true) { - state.option.strict = "global"; - } - } - - if (state.option.nonstandard) { - combine(predefined, vars.nonstandard); - } - - if (state.option.jasmine) { - combine(predefined, vars.jasmine); - } - - if (state.option.jquery) { - combine(predefined, vars.jquery); - } - - if (state.option.mootools) { - combine(predefined, vars.mootools); - } - - if (state.option.worker) { - combine(predefined, vars.worker); - } - - if (state.option.wsh) { - combine(predefined, vars.wsh); - } - - if (state.option.globalstrict && state.option.strict !== false) { - state.option.strict = "global"; - } - - if (state.option.yui) { - combine(predefined, vars.yui); - } - - if (state.option.mocha) { - combine(predefined, vars.mocha); - } - } - function quit(code, line, chr) { - var percentage = Math.floor((line / state.lines.length) * 100); - var message = messages.errors[code].desc; - - throw { - name: "JSHintError", - line: line, - character: chr, - message: message + " (" + percentage + "% scanned).", - raw: message, - code: code - }; - } - - function removeIgnoredMessages() { - var ignored = state.ignoredLines; - - if (_.isEmpty(ignored)) return; - JSHINT.errors = _.reject(JSHINT.errors, function(err) { return ignored[err.line] }); - } - - function warning(code, t, a, b, c, d) { - var ch, l, w, msg; - - if (/^W\d{3}$/.test(code)) { - if (state.ignored[code]) - return; - - msg = messages.warnings[code]; - } else if (/E\d{3}/.test(code)) { - msg = messages.errors[code]; - } else if (/I\d{3}/.test(code)) { - msg = messages.info[code]; - } - - t = t || state.tokens.next || {}; - if (t.id === "(end)") { // `~ - t = state.tokens.curr; - } - - l = t.line || 0; - ch = t.from || 0; - - w = { - id: "(error)", - raw: msg.desc, - code: msg.code, - evidence: state.lines[l - 1] || "", - line: l, - character: ch, - scope: JSHINT.scope, - a: a, - b: b, - c: c, - d: d - }; - - w.reason = supplant(msg.desc, w); - JSHINT.errors.push(w); - - removeIgnoredMessages(); - - if (JSHINT.errors.length >= state.option.maxerr) - quit("E043", l, ch); - - return w; - } - - function warningAt(m, l, ch, a, b, c, d) { - return warning(m, { - line: l, - from: ch - }, a, b, c, d); - } - - function error(m, t, a, b, c, d) { - warning(m, t, a, b, c, d); - } - - function errorAt(m, l, ch, a, b, c, d) { - return error(m, { - line: l, - from: ch - }, a, b, c, d); - } - function addInternalSrc(elem, src) { - var i; - i = { - id: "(internal)", - elem: elem, - value: src - }; - JSHINT.internals.push(i); - return i; - } - - function doOption() { - var nt = state.tokens.next; - var body = nt.body.match(/(-\s+)?[^\s,:]+(?:\s*:\s*(-\s+)?[^\s,]+)?/g) || []; - - var predef = {}; - if (nt.type === "globals") { - body.forEach(function(g, idx) { - g = g.split(":"); - var key = (g[0] || "").trim(); - var val = (g[1] || "").trim(); - - if (key === "-" || !key.length) { - if (idx > 0 && idx === body.length - 1) { - return; - } - error("E002", nt); - return; - } - - if (key.charAt(0) === "-") { - key = key.slice(1); - val = false; - - JSHINT.blacklist[key] = key; - delete predefined[key]; - } else { - predef[key] = (val === "true"); - } - }); - - combine(predefined, predef); - - for (var key in predef) { - if (_.has(predef, key)) { - declared[key] = nt; - } - } - } - - if (nt.type === "exported") { - body.forEach(function(e, idx) { - if (!e.length) { - if (idx > 0 && idx === body.length - 1) { - return; - } - error("E002", nt); - return; - } - - state.funct["(scope)"].addExported(e); - }); - } - - if (nt.type === "members") { - membersOnly = membersOnly || {}; - - body.forEach(function(m) { - var ch1 = m.charAt(0); - var ch2 = m.charAt(m.length - 1); - - if (ch1 === ch2 && (ch1 === "\"" || ch1 === "'")) { - m = m - .substr(1, m.length - 2) - .replace("\\\"", "\""); - } - - membersOnly[m] = false; - }); - } - - var numvals = [ - "maxstatements", - "maxparams", - "maxdepth", - "maxcomplexity", - "maxerr", - "maxlen", - "indent" - ]; - - if (nt.type === "jshint" || nt.type === "jslint") { - body.forEach(function(g) { - g = g.split(":"); - var key = (g[0] || "").trim(); - var val = (g[1] || "").trim(); - - if (!checkOption(key, nt)) { - return; - } - - if (numvals.indexOf(key) >= 0) { - if (val !== "false") { - val = +val; - - if (typeof val !== "number" || !isFinite(val) || val <= 0 || Math.floor(val) !== val) { - error("E032", nt, g[1].trim()); - return; - } - - state.option[key] = val; - } else { - state.option[key] = key === "indent" ? 4 : false; - } - - return; - } - - if (key === "validthis") { - - if (state.funct["(global)"]) - return void error("E009"); - - if (val !== "true" && val !== "false") - return void error("E002", nt); - - state.option.validthis = (val === "true"); - return; - } - - if (key === "quotmark") { - switch (val) { - case "true": - case "false": - state.option.quotmark = (val === "true"); - break; - case "double": - case "single": - state.option.quotmark = val; - break; - default: - error("E002", nt); - } - return; - } - - if (key === "shadow") { - switch (val) { - case "true": - state.option.shadow = true; - break; - case "outer": - state.option.shadow = "outer"; - break; - case "false": - case "inner": - state.option.shadow = "inner"; - break; - default: - error("E002", nt); - } - return; - } - - if (key === "unused") { - switch (val) { - case "true": - state.option.unused = true; - break; - case "false": - state.option.unused = false; - break; - case "vars": - case "strict": - state.option.unused = val; - break; - default: - error("E002", nt); - } - return; - } - - if (key === "latedef") { - switch (val) { - case "true": - state.option.latedef = true; - break; - case "false": - state.option.latedef = false; - break; - case "nofunc": - state.option.latedef = "nofunc"; - break; - default: - error("E002", nt); - } - return; - } - - if (key === "ignore") { - switch (val) { - case "line": - state.ignoredLines[nt.line] = true; - removeIgnoredMessages(); - break; - default: - error("E002", nt); - } - return; - } - - if (key === "strict") { - switch (val) { - case "true": - state.option.strict = true; - break; - case "false": - state.option.strict = false; - break; - case "func": - case "global": - case "implied": - state.option.strict = val; - break; - default: - error("E002", nt); - } - return; - } - - if (key === "module") { - if (!hasParsedCode(state.funct)) { - error("E055", state.tokens.next, "module"); - } - } - var esversions = { - es3 : 3, - es5 : 5, - esnext: 6 - }; - if (_.has(esversions, key)) { - switch (val) { - case "true": - state.option.moz = false; - state.option.esversion = esversions[key]; - break; - case "false": - if (!state.option.moz) { - state.option.esversion = 5; - } - break; - default: - error("E002", nt); - } - return; - } - - if (key === "esversion") { - switch (val) { - case "5": - if (state.inES5(true)) { - warning("I003"); - } - case "3": - case "6": - state.option.moz = false; - state.option.esversion = +val; - break; - case "2015": - state.option.moz = false; - state.option.esversion = 6; - break; - default: - error("E002", nt); - } - if (!hasParsedCode(state.funct)) { - error("E055", state.tokens.next, "esversion"); - } - return; - } - - var match = /^([+-])(W\d{3})$/g.exec(key); - if (match) { - state.ignored[match[2]] = (match[1] === "-"); - return; - } - - var tn; - if (val === "true" || val === "false") { - if (nt.type === "jslint") { - tn = options.renamed[key] || key; - state.option[tn] = (val === "true"); - - if (options.inverted[tn] !== undefined) { - state.option[tn] = !state.option[tn]; - } - } else { - state.option[key] = (val === "true"); - } - - if (key === "newcap") { - state.option["(explicitNewcap)"] = true; - } - return; - } - - error("E002", nt); - }); - - assume(); - } - } - - function peek(p) { - var i = p || 0, j = lookahead.length, t; - - if (i < j) { - return lookahead[i]; - } - - while (j <= i) { - t = lookahead[j]; - if (!t) { - t = lookahead[j] = lex.token(); - } - j += 1; - } - if (!t && state.tokens.next.id === "(end)") { - return state.tokens.next; - } - - return t; - } - - function peekIgnoreEOL() { - var i = 0; - var t; - do { - t = peek(i++); - } while (t.id === "(endline)"); - return t; - } - - function advance(id, t) { - - switch (state.tokens.curr.id) { - case "(number)": - if (state.tokens.next.id === ".") { - warning("W005", state.tokens.curr); - } - break; - case "-": - if (state.tokens.next.id === "-" || state.tokens.next.id === "--") { - warning("W006"); - } - break; - case "+": - if (state.tokens.next.id === "+" || state.tokens.next.id === "++") { - warning("W007"); - } - break; - } - - if (id && state.tokens.next.id !== id) { - if (t) { - if (state.tokens.next.id === "(end)") { - error("E019", t, t.id); - } else { - error("E020", state.tokens.next, id, t.id, t.line, state.tokens.next.value); - } - } else if (state.tokens.next.type !== "(identifier)" || state.tokens.next.value !== id) { - warning("W116", state.tokens.next, id, state.tokens.next.value); - } - } - - state.tokens.prev = state.tokens.curr; - state.tokens.curr = state.tokens.next; - for (;;) { - state.tokens.next = lookahead.shift() || lex.token(); - - if (!state.tokens.next) { // No more tokens left, give up - quit("E041", state.tokens.curr.line); - } - - if (state.tokens.next.id === "(end)" || state.tokens.next.id === "(error)") { - return; - } - - if (state.tokens.next.check) { - state.tokens.next.check(); - } - - if (state.tokens.next.isSpecial) { - if (state.tokens.next.type === "falls through") { - state.tokens.curr.caseFallsThrough = true; - } else { - doOption(); - } - } else { - if (state.tokens.next.id !== "(endline)") { - break; - } - } - } - } - - function isInfix(token) { - return token.infix || (!token.identifier && !token.template && !!token.led); - } - - function isEndOfExpr() { - var curr = state.tokens.curr; - var next = state.tokens.next; - if (next.id === ";" || next.id === "}" || next.id === ":") { - return true; - } - if (isInfix(next) === isInfix(curr) || (curr.id === "yield" && state.inMoz())) { - return curr.line !== startLine(next); - } - return false; - } - - function isBeginOfExpr(prev) { - return !prev.left && prev.arity !== "unary"; - } - - function expression(rbp, initial) { - var left, isArray = false, isObject = false, isLetExpr = false; - - state.nameStack.push(); - if (!initial && state.tokens.next.value === "let" && peek(0).value === "(") { - if (!state.inMoz()) { - warning("W118", state.tokens.next, "let expressions"); - } - isLetExpr = true; - state.funct["(scope)"].stack(); - advance("let"); - advance("("); - state.tokens.prev.fud(); - advance(")"); - } - - if (state.tokens.next.id === "(end)") - error("E006", state.tokens.curr); - - var isDangerous = - state.option.asi && - state.tokens.prev.line !== startLine(state.tokens.curr) && - _.contains(["]", ")"], state.tokens.prev.id) && - _.contains(["[", "("], state.tokens.curr.id); - - if (isDangerous) - warning("W014", state.tokens.curr, state.tokens.curr.id); - - advance(); - - if (initial) { - state.funct["(verb)"] = state.tokens.curr.value; - state.tokens.curr.beginsStmt = true; - } - - if (initial === true && state.tokens.curr.fud) { - left = state.tokens.curr.fud(); - } else { - if (state.tokens.curr.nud) { - left = state.tokens.curr.nud(); - } else { - error("E030", state.tokens.curr, state.tokens.curr.id); - } - while ((rbp < state.tokens.next.lbp || state.tokens.next.type === "(template)") && - !isEndOfExpr()) { - isArray = state.tokens.curr.value === "Array"; - isObject = state.tokens.curr.value === "Object"; - if (left && (left.value || (left.first && left.first.value))) { - if (left.value !== "new" || - (left.first && left.first.value && left.first.value === ".")) { - isArray = false; - if (left.value !== state.tokens.curr.value) { - isObject = false; - } - } - } - - advance(); - - if (isArray && state.tokens.curr.id === "(" && state.tokens.next.id === ")") { - warning("W009", state.tokens.curr); - } - - if (isObject && state.tokens.curr.id === "(" && state.tokens.next.id === ")") { - warning("W010", state.tokens.curr); - } - - if (left && state.tokens.curr.led) { - left = state.tokens.curr.led(left); - } else { - error("E033", state.tokens.curr, state.tokens.curr.id); - } - } - } - if (isLetExpr) { - state.funct["(scope)"].unstack(); - } - - state.nameStack.pop(); - - return left; - } - - function startLine(token) { - return token.startLine || token.line; - } - - function nobreaknonadjacent(left, right) { - left = left || state.tokens.curr; - right = right || state.tokens.next; - if (!state.option.laxbreak && left.line !== startLine(right)) { - warning("W014", right, right.value); - } - } - - function nolinebreak(t) { - t = t || state.tokens.curr; - if (t.line !== startLine(state.tokens.next)) { - warning("E022", t, t.value); - } - } - - function nobreakcomma(left, right) { - if (left.line !== startLine(right)) { - if (!state.option.laxcomma) { - if (comma.first) { - warning("I001"); - comma.first = false; - } - warning("W014", left, right.value); - } - } - } - - function comma(opts) { - opts = opts || {}; - - if (!opts.peek) { - nobreakcomma(state.tokens.curr, state.tokens.next); - advance(","); - } else { - nobreakcomma(state.tokens.prev, state.tokens.curr); - } - - if (state.tokens.next.identifier && !(opts.property && state.inES5())) { - switch (state.tokens.next.value) { - case "break": - case "case": - case "catch": - case "continue": - case "default": - case "do": - case "else": - case "finally": - case "for": - case "if": - case "in": - case "instanceof": - case "return": - case "switch": - case "throw": - case "try": - case "var": - case "let": - case "while": - case "with": - error("E024", state.tokens.next, state.tokens.next.value); - return false; - } - } - - if (state.tokens.next.type === "(punctuator)") { - switch (state.tokens.next.value) { - case "}": - case "]": - case ",": - if (opts.allowTrailing) { - return true; - } - case ")": - error("E024", state.tokens.next, state.tokens.next.value); - return false; - } - } - return true; - } - - function symbol(s, p) { - var x = state.syntax[s]; - if (!x || typeof x !== "object") { - state.syntax[s] = x = { - id: s, - lbp: p, - value: s - }; - } - return x; - } - - function delim(s) { - var x = symbol(s, 0); - x.delim = true; - return x; - } - - function stmt(s, f) { - var x = delim(s); - x.identifier = x.reserved = true; - x.fud = f; - return x; - } - - function blockstmt(s, f) { - var x = stmt(s, f); - x.block = true; - return x; - } - - function reserveName(x) { - var c = x.id.charAt(0); - if ((c >= "a" && c <= "z") || (c >= "A" && c <= "Z")) { - x.identifier = x.reserved = true; - } - return x; - } - - function prefix(s, f) { - var x = symbol(s, 150); - reserveName(x); - - x.nud = (typeof f === "function") ? f : function() { - this.arity = "unary"; - this.right = expression(150); - - if (this.id === "++" || this.id === "--") { - if (state.option.plusplus) { - warning("W016", this, this.id); - } else if (this.right && (!this.right.identifier || isReserved(this.right)) && - this.right.id !== "." && this.right.id !== "[") { - warning("W017", this); - } - - if (this.right && this.right.isMetaProperty) { - error("E031", this); - } else if (this.right && this.right.identifier) { - state.funct["(scope)"].block.modify(this.right.value, this); - } - } - - return this; - }; - - return x; - } - - function type(s, f) { - var x = delim(s); - x.type = s; - x.nud = f; - return x; - } - - function reserve(name, func) { - var x = type(name, func); - x.identifier = true; - x.reserved = true; - return x; - } - - function FutureReservedWord(name, meta) { - var x = type(name, (meta && meta.nud) || function() { - return this; - }); - - meta = meta || {}; - meta.isFutureReservedWord = true; - - x.value = name; - x.identifier = true; - x.reserved = true; - x.meta = meta; - - return x; - } - - function reservevar(s, v) { - return reserve(s, function() { - if (typeof v === "function") { - v(this); - } - return this; - }); - } - - function infix(s, f, p, w) { - var x = symbol(s, p); - reserveName(x); - x.infix = true; - x.led = function(left) { - if (!w) { - nobreaknonadjacent(state.tokens.prev, state.tokens.curr); - } - if ((s === "in" || s === "instanceof") && left.id === "!") { - warning("W018", left, "!"); - } - if (typeof f === "function") { - return f(left, this); - } else { - this.left = left; - this.right = expression(p); - return this; - } - }; - return x; - } - - function application(s) { - var x = symbol(s, 42); - - x.led = function(left) { - nobreaknonadjacent(state.tokens.prev, state.tokens.curr); - - this.left = left; - this.right = doFunction({ type: "arrow", loneArg: left }); - return this; - }; - return x; - } - - function relation(s, f) { - var x = symbol(s, 100); - - x.led = function(left) { - nobreaknonadjacent(state.tokens.prev, state.tokens.curr); - this.left = left; - var right = this.right = expression(100); - - if (isIdentifier(left, "NaN") || isIdentifier(right, "NaN")) { - warning("W019", this); - } else if (f) { - f.apply(this, [left, right]); - } - - if (!left || !right) { - quit("E041", state.tokens.curr.line); - } - - if (left.id === "!") { - warning("W018", left, "!"); - } - - if (right.id === "!") { - warning("W018", right, "!"); - } - - return this; - }; - return x; - } - - function isPoorRelation(node) { - return node && - ((node.type === "(number)" && +node.value === 0) || - (node.type === "(string)" && node.value === "") || - (node.type === "null" && !state.option.eqnull) || - node.type === "true" || - node.type === "false" || - node.type === "undefined"); - } - - var typeofValues = {}; - typeofValues.legacy = [ - "xml", - "unknown" - ]; - typeofValues.es3 = [ - "undefined", "boolean", "number", "string", "function", "object", - ]; - typeofValues.es3 = typeofValues.es3.concat(typeofValues.legacy); - typeofValues.es6 = typeofValues.es3.concat("symbol"); - function isTypoTypeof(left, right, state) { - var values; - - if (state.option.notypeof) - return false; - - if (!left || !right) - return false; - - values = state.inES6() ? typeofValues.es6 : typeofValues.es3; - - if (right.type === "(identifier)" && right.value === "typeof" && left.type === "(string)") - return !_.contains(values, left.value); - - return false; - } - - function isGlobalEval(left, state) { - var isGlobal = false; - if (left.type === "this" && state.funct["(context)"] === null) { - isGlobal = true; - } - else if (left.type === "(identifier)") { - if (state.option.node && left.value === "global") { - isGlobal = true; - } - - else if (state.option.browser && (left.value === "window" || left.value === "document")) { - isGlobal = true; - } - } - - return isGlobal; - } - - function findNativePrototype(left) { - var natives = [ - "Array", "ArrayBuffer", "Boolean", "Collator", "DataView", "Date", - "DateTimeFormat", "Error", "EvalError", "Float32Array", "Float64Array", - "Function", "Infinity", "Intl", "Int16Array", "Int32Array", "Int8Array", - "Iterator", "Number", "NumberFormat", "Object", "RangeError", - "ReferenceError", "RegExp", "StopIteration", "String", "SyntaxError", - "TypeError", "Uint16Array", "Uint32Array", "Uint8Array", "Uint8ClampedArray", - "URIError" - ]; - - function walkPrototype(obj) { - if (typeof obj !== "object") return; - return obj.right === "prototype" ? obj : walkPrototype(obj.left); - } - - function walkNative(obj) { - while (!obj.identifier && typeof obj.left === "object") - obj = obj.left; - - if (obj.identifier && natives.indexOf(obj.value) >= 0) - return obj.value; - } - - var prototype = walkPrototype(left); - if (prototype) return walkNative(prototype); - } - function checkLeftSideAssign(left, assignToken, options) { - - var allowDestructuring = options && options.allowDestructuring; - - assignToken = assignToken || left; - - if (state.option.freeze) { - var nativeObject = findNativePrototype(left); - if (nativeObject) - warning("W121", left, nativeObject); - } - - if (left.identifier && !left.isMetaProperty) { - state.funct["(scope)"].block.reassign(left.value, left); - } - - if (left.id === ".") { - if (!left.left || left.left.value === "arguments" && !state.isStrict()) { - warning("E031", assignToken); - } - - state.nameStack.set(state.tokens.prev); - return true; - } else if (left.id === "{" || left.id === "[") { - if (allowDestructuring && state.tokens.curr.left.destructAssign) { - state.tokens.curr.left.destructAssign.forEach(function(t) { - if (t.id) { - state.funct["(scope)"].block.modify(t.id, t.token); - } - }); - } else { - if (left.id === "{" || !left.left) { - warning("E031", assignToken); - } else if (left.left.value === "arguments" && !state.isStrict()) { - warning("E031", assignToken); - } - } - - if (left.id === "[") { - state.nameStack.set(left.right); - } - - return true; - } else if (left.isMetaProperty) { - error("E031", assignToken); - return true; - } else if (left.identifier && !isReserved(left)) { - if (state.funct["(scope)"].labeltype(left.value) === "exception") { - warning("W022", left); - } - state.nameStack.set(left); - return true; - } - - if (left === state.syntax["function"]) { - warning("W023", state.tokens.curr); - } - - return false; - } - - function assignop(s, f, p) { - var x = infix(s, typeof f === "function" ? f : function(left, that) { - that.left = left; - - if (left && checkLeftSideAssign(left, that, { allowDestructuring: true })) { - that.right = expression(10); - return that; - } - - error("E031", that); - }, p); - - x.exps = true; - x.assign = true; - return x; - } - - - function bitwise(s, f, p) { - var x = symbol(s, p); - reserveName(x); - x.led = (typeof f === "function") ? f : function(left) { - if (state.option.bitwise) { - warning("W016", this, this.id); - } - this.left = left; - this.right = expression(p); - return this; - }; - return x; - } - - function bitwiseassignop(s) { - return assignop(s, function(left, that) { - if (state.option.bitwise) { - warning("W016", that, that.id); - } - - if (left && checkLeftSideAssign(left, that)) { - that.right = expression(10); - return that; - } - error("E031", that); - }, 20); - } - - function suffix(s) { - var x = symbol(s, 150); - - x.led = function(left) { - if (state.option.plusplus) { - warning("W016", this, this.id); - } else if ((!left.identifier || isReserved(left)) && left.id !== "." && left.id !== "[") { - warning("W017", this); - } - - if (left.isMetaProperty) { - error("E031", this); - } else if (left && left.identifier) { - state.funct["(scope)"].block.modify(left.value, left); - } - - this.left = left; - return this; - }; - return x; - } - - function optionalidentifier(fnparam, prop, preserve) { - if (!state.tokens.next.identifier) { - return; - } - - if (!preserve) { - advance(); - } - - var curr = state.tokens.curr; - var val = state.tokens.curr.value; - - if (!isReserved(curr)) { - return val; - } - - if (prop) { - if (state.inES5()) { - return val; - } - } - - if (fnparam && val === "undefined") { - return val; - } - - warning("W024", state.tokens.curr, state.tokens.curr.id); - return val; - } - function identifier(fnparam, prop) { - var i = optionalidentifier(fnparam, prop, false); - if (i) { - return i; - } - if (state.tokens.next.value === "...") { - if (!state.inES6(true)) { - warning("W119", state.tokens.next, "spread/rest operator", "6"); - } - advance(); - - if (checkPunctuator(state.tokens.next, "...")) { - warning("E024", state.tokens.next, "..."); - while (checkPunctuator(state.tokens.next, "...")) { - advance(); - } - } - - if (!state.tokens.next.identifier) { - warning("E024", state.tokens.curr, "..."); - return; - } - - return identifier(fnparam, prop); - } else { - error("E030", state.tokens.next, state.tokens.next.value); - if (state.tokens.next.id !== ";") { - advance(); - } - } - } - - - function reachable(controlToken) { - var i = 0, t; - if (state.tokens.next.id !== ";" || controlToken.inBracelessBlock) { - return; - } - for (;;) { - do { - t = peek(i); - i += 1; - } while (t.id !== "(end)" && t.id === "(comment)"); - - if (t.reach) { - return; - } - if (t.id !== "(endline)") { - if (t.id === "function") { - if (state.option.latedef === true) { - warning("W026", t); - } - break; - } - - warning("W027", t, t.value, controlToken.value); - break; - } - } - } - - function parseFinalSemicolon() { - if (state.tokens.next.id !== ";") { - if (state.tokens.next.isUnclosed) return advance(); - - var sameLine = startLine(state.tokens.next) === state.tokens.curr.line && - state.tokens.next.id !== "(end)"; - var blockEnd = checkPunctuator(state.tokens.next, "}"); - - if (sameLine && !blockEnd) { - errorAt("E058", state.tokens.curr.line, state.tokens.curr.character); - } else if (!state.option.asi) { - if ((blockEnd && !state.option.lastsemic) || !sameLine) { - warningAt("W033", state.tokens.curr.line, state.tokens.curr.character); - } - } - } else { - advance(";"); - } - } - - function statement() { - var i = indent, r, t = state.tokens.next, hasOwnScope = false; - - if (t.id === ";") { - advance(";"); - return; - } - var res = isReserved(t); - - if (res && t.meta && t.meta.isFutureReservedWord && peek().id === ":") { - warning("W024", t, t.id); - res = false; - } - - if (t.identifier && !res && peek().id === ":") { - advance(); - advance(":"); - - hasOwnScope = true; - state.funct["(scope)"].stack(); - state.funct["(scope)"].block.addBreakLabel(t.value, { token: state.tokens.curr }); - - if (!state.tokens.next.labelled && state.tokens.next.value !== "{") { - warning("W028", state.tokens.next, t.value, state.tokens.next.value); - } - - state.tokens.next.label = t.value; - t = state.tokens.next; - } - - if (t.id === "{") { - var iscase = (state.funct["(verb)"] === "case" && state.tokens.curr.value === ":"); - block(true, true, false, false, iscase); - return; - } - - r = expression(0, true); - - if (r && !(r.identifier && r.value === "function") && - !(r.type === "(punctuator)" && r.left && - r.left.identifier && r.left.value === "function")) { - if (!state.isStrict() && - state.option.strict === "global") { - warning("E007"); - } - } - - if (!t.block) { - if (!state.option.expr && (!r || !r.exps)) { - warning("W030", state.tokens.curr); - } else if (state.option.nonew && r && r.left && r.id === "(" && r.left.id === "new") { - warning("W031", t); - } - parseFinalSemicolon(); - } - - indent = i; - if (hasOwnScope) { - state.funct["(scope)"].unstack(); - } - return r; - } - - - function statements() { - var a = [], p; - - while (!state.tokens.next.reach && state.tokens.next.id !== "(end)") { - if (state.tokens.next.id === ";") { - p = peek(); - - if (!p || (p.id !== "(" && p.id !== "[")) { - warning("W032"); - } - - advance(";"); - } else { - a.push(statement()); - } - } - return a; - } - function directives() { - var i, p, pn; - - while (state.tokens.next.id === "(string)") { - p = peek(0); - if (p.id === "(endline)") { - i = 1; - do { - pn = peek(i++); - } while (pn.id === "(endline)"); - if (pn.id === ";") { - p = pn; - } else if (pn.value === "[" || pn.value === ".") { - break; - } else if (!state.option.asi || pn.value === "(") { - warning("W033", state.tokens.next); - } - } else if (p.id === "." || p.id === "[") { - break; - } else if (p.id !== ";") { - warning("W033", p); - } - - advance(); - var directive = state.tokens.curr.value; - if (state.directive[directive] || - (directive === "use strict" && state.option.strict === "implied")) { - warning("W034", state.tokens.curr, directive); - } - state.directive[directive] = true; - - if (p.id === ";") { - advance(";"); - } - } - - if (state.isStrict()) { - if (!state.option["(explicitNewcap)"]) { - state.option.newcap = true; - } - state.option.undef = true; - } - } - function block(ordinary, stmt, isfunc, isfatarrow, iscase) { - var a, - b = inblock, - old_indent = indent, - m, - t, - line, - d; - - inblock = ordinary; - - t = state.tokens.next; - - var metrics = state.funct["(metrics)"]; - metrics.nestedBlockDepth += 1; - metrics.verifyMaxNestedBlockDepthPerFunction(); - - if (state.tokens.next.id === "{") { - advance("{"); - state.funct["(scope)"].stack(); - - line = state.tokens.curr.line; - if (state.tokens.next.id !== "}") { - indent += state.option.indent; - while (!ordinary && state.tokens.next.from > indent) { - indent += state.option.indent; - } - - if (isfunc) { - m = {}; - for (d in state.directive) { - if (_.has(state.directive, d)) { - m[d] = state.directive[d]; - } - } - directives(); - - if (state.option.strict && state.funct["(context)"]["(global)"]) { - if (!m["use strict"] && !state.isStrict()) { - warning("E007"); - } - } - } - - a = statements(); - - metrics.statementCount += a.length; - - indent -= state.option.indent; - } - - advance("}", t); - - if (isfunc) { - state.funct["(scope)"].validateParams(); - if (m) { - state.directive = m; - } - } - - state.funct["(scope)"].unstack(); - - indent = old_indent; - } else if (!ordinary) { - if (isfunc) { - state.funct["(scope)"].stack(); - - m = {}; - if (stmt && !isfatarrow && !state.inMoz()) { - error("W118", state.tokens.curr, "function closure expressions"); - } - - if (!stmt) { - for (d in state.directive) { - if (_.has(state.directive, d)) { - m[d] = state.directive[d]; - } - } - } - expression(10); - - if (state.option.strict && state.funct["(context)"]["(global)"]) { - if (!m["use strict"] && !state.isStrict()) { - warning("E007"); - } - } - - state.funct["(scope)"].unstack(); - } else { - error("E021", state.tokens.next, "{", state.tokens.next.value); - } - } else { - state.funct["(noblockscopedvar)"] = state.tokens.next.id !== "for"; - state.funct["(scope)"].stack(); - - if (!stmt || state.option.curly) { - warning("W116", state.tokens.next, "{", state.tokens.next.value); - } - - state.tokens.next.inBracelessBlock = true; - indent += state.option.indent; - a = [statement()]; - indent -= state.option.indent; - - state.funct["(scope)"].unstack(); - delete state.funct["(noblockscopedvar)"]; - } - switch (state.funct["(verb)"]) { - case "break": - case "continue": - case "return": - case "throw": - if (iscase) { - break; - } - default: - state.funct["(verb)"] = null; - } - - inblock = b; - if (ordinary && state.option.noempty && (!a || a.length === 0)) { - warning("W035", state.tokens.prev); - } - metrics.nestedBlockDepth -= 1; - return a; - } - - - function countMember(m) { - if (membersOnly && typeof membersOnly[m] !== "boolean") { - warning("W036", state.tokens.curr, m); - } - if (typeof member[m] === "number") { - member[m] += 1; - } else { - member[m] = 1; - } - } - - type("(number)", function() { - return this; - }); - - type("(string)", function() { - return this; - }); - - state.syntax["(identifier)"] = { - type: "(identifier)", - lbp: 0, - identifier: true, - - nud: function() { - var v = this.value; - if (state.tokens.next.id === "=>") { - return this; - } - - if (!state.funct["(comparray)"].check(v)) { - state.funct["(scope)"].block.use(v, state.tokens.curr); - } - return this; - }, - - led: function() { - error("E033", state.tokens.next, state.tokens.next.value); - } - }; - - var baseTemplateSyntax = { - lbp: 0, - identifier: false, - template: true, - }; - state.syntax["(template)"] = _.extend({ - type: "(template)", - nud: doTemplateLiteral, - led: doTemplateLiteral, - noSubst: false - }, baseTemplateSyntax); - - state.syntax["(template middle)"] = _.extend({ - type: "(template middle)", - middle: true, - noSubst: false - }, baseTemplateSyntax); - - state.syntax["(template tail)"] = _.extend({ - type: "(template tail)", - tail: true, - noSubst: false - }, baseTemplateSyntax); - - state.syntax["(no subst template)"] = _.extend({ - type: "(template)", - nud: doTemplateLiteral, - led: doTemplateLiteral, - noSubst: true, - tail: true // mark as tail, since it's always the last component - }, baseTemplateSyntax); - - type("(regexp)", function() { - return this; - }); - - delim("(endline)"); - delim("(begin)"); - delim("(end)").reach = true; - delim("(error)").reach = true; - delim("}").reach = true; - delim(")"); - delim("]"); - delim("\"").reach = true; - delim("'").reach = true; - delim(";"); - delim(":").reach = true; - delim("#"); - - reserve("else"); - reserve("case").reach = true; - reserve("catch"); - reserve("default").reach = true; - reserve("finally"); - reservevar("arguments", function(x) { - if (state.isStrict() && state.funct["(global)"]) { - warning("E008", x); - } - }); - reservevar("eval"); - reservevar("false"); - reservevar("Infinity"); - reservevar("null"); - reservevar("this", function(x) { - if (state.isStrict() && !isMethod() && - !state.option.validthis && ((state.funct["(statement)"] && - state.funct["(name)"].charAt(0) > "Z") || state.funct["(global)"])) { - warning("W040", x); - } - }); - reservevar("true"); - reservevar("undefined"); - - assignop("=", "assign", 20); - assignop("+=", "assignadd", 20); - assignop("-=", "assignsub", 20); - assignop("*=", "assignmult", 20); - assignop("/=", "assigndiv", 20).nud = function() { - error("E014"); - }; - assignop("%=", "assignmod", 20); - - bitwiseassignop("&="); - bitwiseassignop("|="); - bitwiseassignop("^="); - bitwiseassignop("<<="); - bitwiseassignop(">>="); - bitwiseassignop(">>>="); - infix(",", function(left, that) { - var expr; - that.exprs = [left]; - - if (state.option.nocomma) { - warning("W127"); - } - - if (!comma({ peek: true })) { - return that; - } - while (true) { - if (!(expr = expression(10))) { - break; - } - that.exprs.push(expr); - if (state.tokens.next.value !== "," || !comma()) { - break; - } - } - return that; - }, 10, true); - - infix("?", function(left, that) { - increaseComplexityCount(); - that.left = left; - that.right = expression(10); - advance(":"); - that["else"] = expression(10); - return that; - }, 30); - - var orPrecendence = 40; - infix("||", function(left, that) { - increaseComplexityCount(); - that.left = left; - that.right = expression(orPrecendence); - return that; - }, orPrecendence); - infix("&&", "and", 50); - bitwise("|", "bitor", 70); - bitwise("^", "bitxor", 80); - bitwise("&", "bitand", 90); - relation("==", function(left, right) { - var eqnull = state.option.eqnull && - ((left && left.value) === "null" || (right && right.value) === "null"); - - switch (true) { - case !eqnull && state.option.eqeqeq: - this.from = this.character; - warning("W116", this, "===", "=="); - break; - case isPoorRelation(left): - warning("W041", this, "===", left.value); - break; - case isPoorRelation(right): - warning("W041", this, "===", right.value); - break; - case isTypoTypeof(right, left, state): - warning("W122", this, right.value); - break; - case isTypoTypeof(left, right, state): - warning("W122", this, left.value); - break; - } - - return this; - }); - relation("===", function(left, right) { - if (isTypoTypeof(right, left, state)) { - warning("W122", this, right.value); - } else if (isTypoTypeof(left, right, state)) { - warning("W122", this, left.value); - } - return this; - }); - relation("!=", function(left, right) { - var eqnull = state.option.eqnull && - ((left && left.value) === "null" || (right && right.value) === "null"); - - if (!eqnull && state.option.eqeqeq) { - this.from = this.character; - warning("W116", this, "!==", "!="); - } else if (isPoorRelation(left)) { - warning("W041", this, "!==", left.value); - } else if (isPoorRelation(right)) { - warning("W041", this, "!==", right.value); - } else if (isTypoTypeof(right, left, state)) { - warning("W122", this, right.value); - } else if (isTypoTypeof(left, right, state)) { - warning("W122", this, left.value); - } - return this; - }); - relation("!==", function(left, right) { - if (isTypoTypeof(right, left, state)) { - warning("W122", this, right.value); - } else if (isTypoTypeof(left, right, state)) { - warning("W122", this, left.value); - } - return this; - }); - relation("<"); - relation(">"); - relation("<="); - relation(">="); - bitwise("<<", "shiftleft", 120); - bitwise(">>", "shiftright", 120); - bitwise(">>>", "shiftrightunsigned", 120); - infix("in", "in", 120); - infix("instanceof", "instanceof", 120); - infix("+", function(left, that) { - var right; - that.left = left; - that.right = right = expression(130); - - if (left && right && left.id === "(string)" && right.id === "(string)") { - left.value += right.value; - left.character = right.character; - if (!state.option.scripturl && reg.javascriptURL.test(left.value)) { - warning("W050", left); - } - return left; - } - - return that; - }, 130); - prefix("+", "num"); - prefix("+++", function() { - warning("W007"); - this.arity = "unary"; - this.right = expression(150); - return this; - }); - infix("+++", function(left) { - warning("W007"); - this.left = left; - this.right = expression(130); - return this; - }, 130); - infix("-", "sub", 130); - prefix("-", "neg"); - prefix("---", function() { - warning("W006"); - this.arity = "unary"; - this.right = expression(150); - return this; - }); - infix("---", function(left) { - warning("W006"); - this.left = left; - this.right = expression(130); - return this; - }, 130); - infix("*", "mult", 140); - infix("/", "div", 140); - infix("%", "mod", 140); - - suffix("++"); - prefix("++", "preinc"); - state.syntax["++"].exps = true; - - suffix("--"); - prefix("--", "predec"); - state.syntax["--"].exps = true; - prefix("delete", function() { - var p = expression(10); - if (!p) { - return this; - } - - if (p.id !== "." && p.id !== "[") { - warning("W051"); - } - this.first = p; - if (p.identifier && !state.isStrict()) { - p.forgiveUndef = true; - } - return this; - }).exps = true; - - prefix("~", function() { - if (state.option.bitwise) { - warning("W016", this, "~"); - } - this.arity = "unary"; - this.right = expression(150); - return this; - }); - - prefix("...", function() { - if (!state.inES6(true)) { - warning("W119", this, "spread/rest operator", "6"); - } - if (!state.tokens.next.identifier && - state.tokens.next.type !== "(string)" && - !checkPunctuators(state.tokens.next, ["[", "("])) { - - error("E030", state.tokens.next, state.tokens.next.value); - } - expression(150); - return this; - }); - - prefix("!", function() { - this.arity = "unary"; - this.right = expression(150); - - if (!this.right) { // '!' followed by nothing? Give up. - quit("E041", this.line || 0); - } - - if (bang[this.right.id] === true) { - warning("W018", this, "!"); - } - return this; - }); - - prefix("typeof", (function() { - var p = expression(150); - this.first = this.right = p; - - if (!p) { // 'typeof' followed by nothing? Give up. - quit("E041", this.line || 0, this.character || 0); - } - if (p.identifier) { - p.forgiveUndef = true; - } - return this; - })); - prefix("new", function() { - var mp = metaProperty("target", function() { - if (!state.inES6(true)) { - warning("W119", state.tokens.prev, "new.target", "6"); - } - var inFunction, c = state.funct; - while (c) { - inFunction = !c["(global)"]; - if (!c["(arrow)"]) { break; } - c = c["(context)"]; - } - if (!inFunction) { - warning("W136", state.tokens.prev, "new.target"); - } - }); - if (mp) { return mp; } - - var c = expression(155), i; - if (c && c.id !== "function") { - if (c.identifier) { - c["new"] = true; - switch (c.value) { - case "Number": - case "String": - case "Boolean": - case "Math": - case "JSON": - warning("W053", state.tokens.prev, c.value); - break; - case "Symbol": - if (state.inES6()) { - warning("W053", state.tokens.prev, c.value); - } - break; - case "Function": - if (!state.option.evil) { - warning("W054"); - } - break; - case "Date": - case "RegExp": - case "this": - break; - default: - if (c.id !== "function") { - i = c.value.substr(0, 1); - if (state.option.newcap && (i < "A" || i > "Z") && - !state.funct["(scope)"].isPredefined(c.value)) { - warning("W055", state.tokens.curr); - } - } - } - } else { - if (c.id !== "." && c.id !== "[" && c.id !== "(") { - warning("W056", state.tokens.curr); - } - } - } else { - if (!state.option.supernew) - warning("W057", this); - } - if (state.tokens.next.id !== "(" && !state.option.supernew) { - warning("W058", state.tokens.curr, state.tokens.curr.value); - } - this.first = this.right = c; - return this; - }); - state.syntax["new"].exps = true; - - prefix("void").exps = true; - - infix(".", function(left, that) { - var m = identifier(false, true); - - if (typeof m === "string") { - countMember(m); - } - - that.left = left; - that.right = m; - - if (m && m === "hasOwnProperty" && state.tokens.next.value === "=") { - warning("W001"); - } - - if (left && left.value === "arguments" && (m === "callee" || m === "caller")) { - if (state.option.noarg) - warning("W059", left, m); - else if (state.isStrict()) - error("E008"); - } else if (!state.option.evil && left && left.value === "document" && - (m === "write" || m === "writeln")) { - warning("W060", left); - } - - if (!state.option.evil && (m === "eval" || m === "execScript")) { - if (isGlobalEval(left, state)) { - warning("W061"); - } - } - - return that; - }, 160, true); - - infix("(", function(left, that) { - if (state.option.immed && left && !left.immed && left.id === "function") { - warning("W062"); - } - - var n = 0; - var p = []; - - if (left) { - if (left.type === "(identifier)") { - if (left.value.match(/^[A-Z]([A-Z0-9_$]*[a-z][A-Za-z0-9_$]*)?$/)) { - if ("Array Number String Boolean Date Object Error Symbol".indexOf(left.value) === -1) { - if (left.value === "Math") { - warning("W063", left); - } else if (state.option.newcap) { - warning("W064", left); - } - } - } - } - } - - if (state.tokens.next.id !== ")") { - for (;;) { - p[p.length] = expression(10); - n += 1; - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - } - - advance(")"); - - if (typeof left === "object") { - if (!state.inES5() && left.value === "parseInt" && n === 1) { - warning("W065", state.tokens.curr); - } - if (!state.option.evil) { - if (left.value === "eval" || left.value === "Function" || - left.value === "execScript") { - warning("W061", left); - - if (p[0] && [0].id === "(string)") { - addInternalSrc(left, p[0].value); - } - } else if (p[0] && p[0].id === "(string)" && - (left.value === "setTimeout" || - left.value === "setInterval")) { - warning("W066", left); - addInternalSrc(left, p[0].value); - } else if (p[0] && p[0].id === "(string)" && - left.value === "." && - left.left.value === "window" && - (left.right === "setTimeout" || - left.right === "setInterval")) { - warning("W066", left); - addInternalSrc(left, p[0].value); - } - } - if (!left.identifier && left.id !== "." && left.id !== "[" && left.id !== "=>" && - left.id !== "(" && left.id !== "&&" && left.id !== "||" && left.id !== "?" && - !(state.inES6() && left["(name)"])) { - warning("W067", that); - } - } - - that.left = left; - return that; - }, 155, true).exps = true; - - prefix("(", function() { - var pn = state.tokens.next, pn1, i = -1; - var ret, triggerFnExpr, first, last; - var parens = 1; - var opening = state.tokens.curr; - var preceeding = state.tokens.prev; - var isNecessary = !state.option.singleGroups; - - do { - if (pn.value === "(") { - parens += 1; - } else if (pn.value === ")") { - parens -= 1; - } - - i += 1; - pn1 = pn; - pn = peek(i); - } while (!(parens === 0 && pn1.value === ")") && pn.value !== ";" && pn.type !== "(end)"); - - if (state.tokens.next.id === "function") { - triggerFnExpr = state.tokens.next.immed = true; - } - if (pn.value === "=>") { - return doFunction({ type: "arrow", parsedOpening: true }); - } - - var exprs = []; - - if (state.tokens.next.id !== ")") { - for (;;) { - exprs.push(expression(10)); - - if (state.tokens.next.id !== ",") { - break; - } - - if (state.option.nocomma) { - warning("W127"); - } - - comma(); - } - } - - advance(")", this); - if (state.option.immed && exprs[0] && exprs[0].id === "function") { - if (state.tokens.next.id !== "(" && - state.tokens.next.id !== "." && state.tokens.next.id !== "[") { - warning("W068", this); - } - } - - if (!exprs.length) { - return; - } - if (exprs.length > 1) { - ret = Object.create(state.syntax[","]); - ret.exprs = exprs; - - first = exprs[0]; - last = exprs[exprs.length - 1]; - - if (!isNecessary) { - isNecessary = preceeding.assign || preceeding.delim; - } - } else { - ret = first = last = exprs[0]; - - if (!isNecessary) { - isNecessary = - (opening.beginsStmt && (ret.id === "{" || triggerFnExpr || isFunctor(ret))) || - (triggerFnExpr && - (!isEndOfExpr() || state.tokens.prev.id !== "}")) || - (isFunctor(ret) && !isEndOfExpr()) || - (ret.id === "{" && preceeding.id === "=>") || - (ret.type === "(number)" && - checkPunctuator(pn, ".") && /^\d+$/.test(ret.value)); - } - } - - if (ret) { - if (!isNecessary && (first.left || first.right || ret.exprs)) { - isNecessary = - (!isBeginOfExpr(preceeding) && first.lbp <= preceeding.lbp) || - (!isEndOfExpr() && last.lbp < state.tokens.next.lbp); - } - - if (!isNecessary) { - warning("W126", opening); - } - - ret.paren = true; - } - - return ret; - }); - - application("=>"); - - infix("[", function(left, that) { - var e = expression(10), s; - if (e && e.type === "(string)") { - if (!state.option.evil && (e.value === "eval" || e.value === "execScript")) { - if (isGlobalEval(left, state)) { - warning("W061"); - } - } - - countMember(e.value); - if (!state.option.sub && reg.identifier.test(e.value)) { - s = state.syntax[e.value]; - if (!s || !isReserved(s)) { - warning("W069", state.tokens.prev, e.value); - } - } - } - advance("]", that); - - if (e && e.value === "hasOwnProperty" && state.tokens.next.value === "=") { - warning("W001"); - } - - that.left = left; - that.right = e; - return that; - }, 160, true); - - function comprehensiveArrayExpression() { - var res = {}; - res.exps = true; - state.funct["(comparray)"].stack(); - var reversed = false; - if (state.tokens.next.value !== "for") { - reversed = true; - if (!state.inMoz()) { - warning("W116", state.tokens.next, "for", state.tokens.next.value); - } - state.funct["(comparray)"].setState("use"); - res.right = expression(10); - } - - advance("for"); - if (state.tokens.next.value === "each") { - advance("each"); - if (!state.inMoz()) { - warning("W118", state.tokens.curr, "for each"); - } - } - advance("("); - state.funct["(comparray)"].setState("define"); - res.left = expression(130); - if (_.contains(["in", "of"], state.tokens.next.value)) { - advance(); - } else { - error("E045", state.tokens.curr); - } - state.funct["(comparray)"].setState("generate"); - expression(10); - - advance(")"); - if (state.tokens.next.value === "if") { - advance("if"); - advance("("); - state.funct["(comparray)"].setState("filter"); - res.filter = expression(10); - advance(")"); - } - - if (!reversed) { - state.funct["(comparray)"].setState("use"); - res.right = expression(10); - } - - advance("]"); - state.funct["(comparray)"].unstack(); - return res; - } - - prefix("[", function() { - var blocktype = lookupBlockType(); - if (blocktype.isCompArray) { - if (!state.option.esnext && !state.inMoz()) { - warning("W118", state.tokens.curr, "array comprehension"); - } - return comprehensiveArrayExpression(); - } else if (blocktype.isDestAssign) { - this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true }); - return this; - } - var b = state.tokens.curr.line !== startLine(state.tokens.next); - this.first = []; - if (b) { - indent += state.option.indent; - if (state.tokens.next.from === indent + state.option.indent) { - indent += state.option.indent; - } - } - while (state.tokens.next.id !== "(end)") { - while (state.tokens.next.id === ",") { - if (!state.option.elision) { - if (!state.inES5()) { - warning("W070"); - } else { - warning("W128"); - do { - advance(","); - } while (state.tokens.next.id === ","); - continue; - } - } - advance(","); - } - - if (state.tokens.next.id === "]") { - break; - } - - this.first.push(expression(10)); - if (state.tokens.next.id === ",") { - comma({ allowTrailing: true }); - if (state.tokens.next.id === "]" && !state.inES5()) { - warning("W070", state.tokens.curr); - break; - } - } else { - break; - } - } - if (b) { - indent -= state.option.indent; - } - advance("]", this); - return this; - }); - - - function isMethod() { - return state.funct["(statement)"] && state.funct["(statement)"].type === "class" || - state.funct["(context)"] && state.funct["(context)"]["(verb)"] === "class"; - } - - - function isPropertyName(token) { - return token.identifier || token.id === "(string)" || token.id === "(number)"; - } - - - function propertyName(preserveOrToken) { - var id; - var preserve = true; - if (typeof preserveOrToken === "object") { - id = preserveOrToken; - } else { - preserve = preserveOrToken; - id = optionalidentifier(false, true, preserve); - } - - if (!id) { - if (state.tokens.next.id === "(string)") { - id = state.tokens.next.value; - if (!preserve) { - advance(); - } - } else if (state.tokens.next.id === "(number)") { - id = state.tokens.next.value.toString(); - if (!preserve) { - advance(); - } - } - } else if (typeof id === "object") { - if (id.id === "(string)" || id.id === "(identifier)") id = id.value; - else if (id.id === "(number)") id = id.value.toString(); - } - - if (id === "hasOwnProperty") { - warning("W001"); - } - - return id; - } - function functionparams(options) { - var next; - var paramsIds = []; - var ident; - var tokens = []; - var t; - var pastDefault = false; - var pastRest = false; - var arity = 0; - var loneArg = options && options.loneArg; - - if (loneArg && loneArg.identifier === true) { - state.funct["(scope)"].addParam(loneArg.value, loneArg); - return { arity: 1, params: [ loneArg.value ] }; - } - - next = state.tokens.next; - - if (!options || !options.parsedOpening) { - advance("("); - } - - if (state.tokens.next.id === ")") { - advance(")"); - return; - } - - function addParam(addParamArgs) { - state.funct["(scope)"].addParam.apply(state.funct["(scope)"], addParamArgs); - } - - for (;;) { - arity++; - var currentParams = []; - - if (_.contains(["{", "["], state.tokens.next.id)) { - tokens = destructuringPattern(); - for (t in tokens) { - t = tokens[t]; - if (t.id) { - paramsIds.push(t.id); - currentParams.push([t.id, t.token]); - } - } - } else { - if (checkPunctuator(state.tokens.next, "...")) pastRest = true; - ident = identifier(true); - if (ident) { - paramsIds.push(ident); - currentParams.push([ident, state.tokens.curr]); - } else { - while (!checkPunctuators(state.tokens.next, [",", ")"])) advance(); - } - } - if (pastDefault) { - if (state.tokens.next.id !== "=") { - error("W138", state.tokens.current); - } - } - if (state.tokens.next.id === "=") { - if (!state.inES6()) { - warning("W119", state.tokens.next, "default parameters", "6"); - } - advance("="); - pastDefault = true; - expression(10); - } - currentParams.forEach(addParam); - - if (state.tokens.next.id === ",") { - if (pastRest) { - warning("W131", state.tokens.next); - } - comma(); - } else { - advance(")", next); - return { arity: arity, params: paramsIds }; - } - } - } - - function functor(name, token, overwrites) { - var funct = { - "(name)" : name, - "(breakage)" : 0, - "(loopage)" : 0, - "(tokens)" : {}, - "(properties)": {}, - - "(catch)" : false, - "(global)" : false, - - "(line)" : null, - "(character)" : null, - "(metrics)" : null, - "(statement)" : null, - "(context)" : null, - "(scope)" : null, - "(comparray)" : null, - "(generator)" : null, - "(arrow)" : null, - "(params)" : null - }; - - if (token) { - _.extend(funct, { - "(line)" : token.line, - "(character)": token.character, - "(metrics)" : createMetrics(token) - }); - } - - _.extend(funct, overwrites); - - if (funct["(context)"]) { - funct["(scope)"] = funct["(context)"]["(scope)"]; - funct["(comparray)"] = funct["(context)"]["(comparray)"]; - } - - return funct; - } - - function isFunctor(token) { - return "(scope)" in token; - } - function hasParsedCode(funct) { - return funct["(global)"] && !funct["(verb)"]; - } - - function doTemplateLiteral(left) { - var ctx = this.context; - var noSubst = this.noSubst; - var depth = this.depth; - - if (!noSubst) { - while (!end()) { - if (!state.tokens.next.template || state.tokens.next.depth > depth) { - expression(0); // should probably have different rbp? - } else { - advance(); - } - } - } - - return { - id: "(template)", - type: "(template)", - tag: left - }; - - function end() { - if (state.tokens.curr.template && state.tokens.curr.tail && - state.tokens.curr.context === ctx) return true; - var complete = (state.tokens.next.template && state.tokens.next.tail && - state.tokens.next.context === ctx); - if (complete) advance(); - return complete || state.tokens.next.isUnclosed; - } - } - function doFunction(options) { - var f, token, name, statement, classExprBinding, isGenerator, isArrow, ignoreLoopFunc; - var oldOption = state.option; - var oldIgnored = state.ignored; - - if (options) { - name = options.name; - statement = options.statement; - classExprBinding = options.classExprBinding; - isGenerator = options.type === "generator"; - isArrow = options.type === "arrow"; - ignoreLoopFunc = options.ignoreLoopFunc; - } - - state.option = Object.create(state.option); - state.ignored = Object.create(state.ignored); - - state.funct = functor(name || state.nameStack.infer(), state.tokens.next, { - "(statement)": statement, - "(context)": state.funct, - "(arrow)": isArrow, - "(generator)": isGenerator - }); - - f = state.funct; - token = state.tokens.curr; - token.funct = state.funct; - - functions.push(state.funct); - state.funct["(scope)"].stack("functionouter"); - var internallyAccessibleName = name || classExprBinding; - if (internallyAccessibleName) { - state.funct["(scope)"].block.add(internallyAccessibleName, - classExprBinding ? "class" : "function", state.tokens.curr, false); - } - state.funct["(scope)"].stack("functionparams"); - - var paramsInfo = functionparams(options); - - if (paramsInfo) { - state.funct["(params)"] = paramsInfo.params; - state.funct["(metrics)"].arity = paramsInfo.arity; - state.funct["(metrics)"].verifyMaxParametersPerFunction(); - } else { - state.funct["(metrics)"].arity = 0; - } - - if (isArrow) { - if (!state.inES6(true)) { - warning("W119", state.tokens.curr, "arrow function syntax (=>)", "6"); - } - - if (!options.loneArg) { - advance("=>"); - } - } - - block(false, true, true, isArrow); - - if (!state.option.noyield && isGenerator && - state.funct["(generator)"] !== "yielded") { - warning("W124", state.tokens.curr); - } - - state.funct["(metrics)"].verifyMaxStatementsPerFunction(); - state.funct["(metrics)"].verifyMaxComplexityPerFunction(); - state.funct["(unusedOption)"] = state.option.unused; - state.option = oldOption; - state.ignored = oldIgnored; - state.funct["(last)"] = state.tokens.curr.line; - state.funct["(lastcharacter)"] = state.tokens.curr.character; - state.funct["(scope)"].unstack(); // also does usage and label checks - state.funct["(scope)"].unstack(); - - state.funct = state.funct["(context)"]; - - if (!ignoreLoopFunc && !state.option.loopfunc && state.funct["(loopage)"]) { - if (f["(isCapturing)"]) { - warning("W083", token); - } - } - - return f; - } - - function createMetrics(functionStartToken) { - return { - statementCount: 0, - nestedBlockDepth: -1, - ComplexityCount: 1, - arity: 0, - - verifyMaxStatementsPerFunction: function() { - if (state.option.maxstatements && - this.statementCount > state.option.maxstatements) { - warning("W071", functionStartToken, this.statementCount); - } - }, - - verifyMaxParametersPerFunction: function() { - if (_.isNumber(state.option.maxparams) && - this.arity > state.option.maxparams) { - warning("W072", functionStartToken, this.arity); - } - }, - - verifyMaxNestedBlockDepthPerFunction: function() { - if (state.option.maxdepth && - this.nestedBlockDepth > 0 && - this.nestedBlockDepth === state.option.maxdepth + 1) { - warning("W073", null, this.nestedBlockDepth); - } - }, - - verifyMaxComplexityPerFunction: function() { - var max = state.option.maxcomplexity; - var cc = this.ComplexityCount; - if (max && cc > max) { - warning("W074", functionStartToken, cc); - } - } - }; - } - - function increaseComplexityCount() { - state.funct["(metrics)"].ComplexityCount += 1; - } - - function checkCondAssignment(expr) { - var id, paren; - if (expr) { - id = expr.id; - paren = expr.paren; - if (id === "," && (expr = expr.exprs[expr.exprs.length - 1])) { - id = expr.id; - paren = paren || expr.paren; - } - } - switch (id) { - case "=": - case "+=": - case "-=": - case "*=": - case "%=": - case "&=": - case "|=": - case "^=": - case "/=": - if (!paren && !state.option.boss) { - warning("W084"); - } - } - } - function checkProperties(props) { - if (state.inES5()) { - for (var name in props) { - if (props[name] && props[name].setterToken && !props[name].getterToken) { - warning("W078", props[name].setterToken); - } - } - } - } - - function metaProperty(name, c) { - if (checkPunctuator(state.tokens.next, ".")) { - var left = state.tokens.curr.id; - advance("."); - var id = identifier(); - state.tokens.curr.isMetaProperty = true; - if (name !== id) { - error("E057", state.tokens.prev, left, id); - } else { - c(); - } - return state.tokens.curr; - } - } - - (function(x) { - x.nud = function() { - var b, f, i, p, t, isGeneratorMethod = false, nextVal; - var props = Object.create(null); // All properties, including accessors - - b = state.tokens.curr.line !== startLine(state.tokens.next); - if (b) { - indent += state.option.indent; - if (state.tokens.next.from === indent + state.option.indent) { - indent += state.option.indent; - } - } - - var blocktype = lookupBlockType(); - if (blocktype.isDestAssign) { - this.destructAssign = destructuringPattern({ openingParsed: true, assignment: true }); - return this; - } - - for (;;) { - if (state.tokens.next.id === "}") { - break; - } - - nextVal = state.tokens.next.value; - if (state.tokens.next.identifier && - (peekIgnoreEOL().id === "," || peekIgnoreEOL().id === "}")) { - if (!state.inES6()) { - warning("W104", state.tokens.next, "object short notation", "6"); - } - i = propertyName(true); - saveProperty(props, i, state.tokens.next); - - expression(10); - - } else if (peek().id !== ":" && (nextVal === "get" || nextVal === "set")) { - advance(nextVal); - - if (!state.inES5()) { - error("E034"); - } - - i = propertyName(); - if (!i && !state.inES6()) { - error("E035"); - } - if (i) { - saveAccessor(nextVal, props, i, state.tokens.curr); - } - - t = state.tokens.next; - f = doFunction(); - p = f["(params)"]; - if (nextVal === "get" && i && p) { - warning("W076", t, p[0], i); - } else if (nextVal === "set" && i && (!p || p.length !== 1)) { - warning("W077", t, i); - } - } else { - if (state.tokens.next.value === "*" && state.tokens.next.type === "(punctuator)") { - if (!state.inES6()) { - warning("W104", state.tokens.next, "generator functions", "6"); - } - advance("*"); - isGeneratorMethod = true; - } else { - isGeneratorMethod = false; - } - - if (state.tokens.next.id === "[") { - i = computedPropertyName(); - state.nameStack.set(i); - } else { - state.nameStack.set(state.tokens.next); - i = propertyName(); - saveProperty(props, i, state.tokens.next); - - if (typeof i !== "string") { - break; - } - } - - if (state.tokens.next.value === "(") { - if (!state.inES6()) { - warning("W104", state.tokens.curr, "concise methods", "6"); - } - doFunction({ type: isGeneratorMethod ? "generator" : null }); - } else { - advance(":"); - expression(10); - } - } - - countMember(i); - - if (state.tokens.next.id === ",") { - comma({ allowTrailing: true, property: true }); - if (state.tokens.next.id === ",") { - warning("W070", state.tokens.curr); - } else if (state.tokens.next.id === "}" && !state.inES5()) { - warning("W070", state.tokens.curr); - } - } else { - break; - } - } - if (b) { - indent -= state.option.indent; - } - advance("}", this); - - checkProperties(props); - - return this; - }; - x.fud = function() { - error("E036", state.tokens.curr); - }; - }(delim("{"))); - - function destructuringPattern(options) { - var isAssignment = options && options.assignment; - - if (!state.inES6()) { - warning("W104", state.tokens.curr, - isAssignment ? "destructuring assignment" : "destructuring binding", "6"); - } - - return destructuringPatternRecursive(options); - } - - function destructuringPatternRecursive(options) { - var ids; - var identifiers = []; - var openingParsed = options && options.openingParsed; - var isAssignment = options && options.assignment; - var recursiveOptions = isAssignment ? { assignment: isAssignment } : null; - var firstToken = openingParsed ? state.tokens.curr : state.tokens.next; - - var nextInnerDE = function() { - var ident; - if (checkPunctuators(state.tokens.next, ["[", "{"])) { - ids = destructuringPatternRecursive(recursiveOptions); - for (var id in ids) { - id = ids[id]; - identifiers.push({ id: id.id, token: id.token }); - } - } else if (checkPunctuator(state.tokens.next, ",")) { - identifiers.push({ id: null, token: state.tokens.curr }); - } else if (checkPunctuator(state.tokens.next, "(")) { - advance("("); - nextInnerDE(); - advance(")"); - } else { - var is_rest = checkPunctuator(state.tokens.next, "..."); - - if (isAssignment) { - var identifierToken = is_rest ? peek(0) : state.tokens.next; - if (!identifierToken.identifier) { - warning("E030", identifierToken, identifierToken.value); - } - var assignTarget = expression(155); - if (assignTarget) { - checkLeftSideAssign(assignTarget); - if (assignTarget.identifier) { - ident = assignTarget.value; - } - } - } else { - ident = identifier(); - } - if (ident) { - identifiers.push({ id: ident, token: state.tokens.curr }); - } - return is_rest; - } - return false; - }; - var assignmentProperty = function() { - var id; - if (checkPunctuator(state.tokens.next, "[")) { - advance("["); - expression(10); - advance("]"); - advance(":"); - nextInnerDE(); - } else if (state.tokens.next.id === "(string)" || - state.tokens.next.id === "(number)") { - advance(); - advance(":"); - nextInnerDE(); - } else { - id = identifier(); - if (checkPunctuator(state.tokens.next, ":")) { - advance(":"); - nextInnerDE(); - } else if (id) { - if (isAssignment) { - checkLeftSideAssign(state.tokens.curr); - } - identifiers.push({ id: id, token: state.tokens.curr }); - } - } - }; - if (checkPunctuator(firstToken, "[")) { - if (!openingParsed) { - advance("["); - } - if (checkPunctuator(state.tokens.next, "]")) { - warning("W137", state.tokens.curr); - } - var element_after_rest = false; - while (!checkPunctuator(state.tokens.next, "]")) { - if (nextInnerDE() && !element_after_rest && - checkPunctuator(state.tokens.next, ",")) { - warning("W130", state.tokens.next); - element_after_rest = true; - } - if (checkPunctuator(state.tokens.next, "=")) { - if (checkPunctuator(state.tokens.prev, "...")) { - advance("]"); - } else { - advance("="); - } - if (state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - expression(10); - } - if (!checkPunctuator(state.tokens.next, "]")) { - advance(","); - } - } - advance("]"); - } else if (checkPunctuator(firstToken, "{")) { - - if (!openingParsed) { - advance("{"); - } - if (checkPunctuator(state.tokens.next, "}")) { - warning("W137", state.tokens.curr); - } - while (!checkPunctuator(state.tokens.next, "}")) { - assignmentProperty(); - if (checkPunctuator(state.tokens.next, "=")) { - advance("="); - if (state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - expression(10); - } - if (!checkPunctuator(state.tokens.next, "}")) { - advance(","); - if (checkPunctuator(state.tokens.next, "}")) { - break; - } - } - } - advance("}"); - } - return identifiers; - } - - function destructuringPatternMatch(tokens, value) { - var first = value.first; - - if (!first) - return; - - _.zip(tokens, Array.isArray(first) ? first : [ first ]).forEach(function(val) { - var token = val[0]; - var value = val[1]; - - if (token && value) - token.first = value; - else if (token && token.first && !value) - warning("W080", token.first, token.first.value); - }); - } - - function blockVariableStatement(type, statement, context) { - - var prefix = context && context.prefix; - var inexport = context && context.inexport; - var isLet = type === "let"; - var isConst = type === "const"; - var tokens, lone, value, letblock; - - if (!state.inES6()) { - warning("W104", state.tokens.curr, type, "6"); - } - - if (isLet && state.tokens.next.value === "(") { - if (!state.inMoz()) { - warning("W118", state.tokens.next, "let block"); - } - advance("("); - state.funct["(scope)"].stack(); - letblock = true; - } else if (state.funct["(noblockscopedvar)"]) { - error("E048", state.tokens.curr, isConst ? "Const" : "Let"); - } - - statement.first = []; - for (;;) { - var names = []; - if (_.contains(["{", "["], state.tokens.next.value)) { - tokens = destructuringPattern(); - lone = false; - } else { - tokens = [ { id: identifier(), token: state.tokens.curr } ]; - lone = true; - } - - if (!prefix && isConst && state.tokens.next.id !== "=") { - warning("E012", state.tokens.curr, state.tokens.curr.value); - } - - for (var t in tokens) { - if (tokens.hasOwnProperty(t)) { - t = tokens[t]; - if (state.funct["(scope)"].block.isGlobal()) { - if (predefined[t.id] === false) { - warning("W079", t.token, t.id); - } - } - if (t.id && !state.funct["(noblockscopedvar)"]) { - state.funct["(scope)"].addlabel(t.id, { - type: type, - token: t.token }); - names.push(t.token); - - if (lone && inexport) { - state.funct["(scope)"].setExported(t.token.value, t.token); - } - } - } - } - - if (state.tokens.next.id === "=") { - advance("="); - if (!prefix && state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - if (!prefix && peek(0).id === "=" && state.tokens.next.identifier) { - warning("W120", state.tokens.next, state.tokens.next.value); - } - value = expression(prefix ? 120 : 10); - if (lone) { - tokens[0].first = value; - } else { - destructuringPatternMatch(names, value); - } - } - - statement.first = statement.first.concat(names); - - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - if (letblock) { - advance(")"); - block(true, true); - statement.block = true; - state.funct["(scope)"].unstack(); - } - - return statement; - } - - var conststatement = stmt("const", function(context) { - return blockVariableStatement("const", this, context); - }); - conststatement.exps = true; - - var letstatement = stmt("let", function(context) { - return blockVariableStatement("let", this, context); - }); - letstatement.exps = true; - - var varstatement = stmt("var", function(context) { - var prefix = context && context.prefix; - var inexport = context && context.inexport; - var tokens, lone, value; - var implied = context && context.implied; - var report = !(context && context.ignore); - - this.first = []; - for (;;) { - var names = []; - if (_.contains(["{", "["], state.tokens.next.value)) { - tokens = destructuringPattern(); - lone = false; - } else { - tokens = [ { id: identifier(), token: state.tokens.curr } ]; - lone = true; - } - - if (!(prefix && implied) && report && state.option.varstmt) { - warning("W132", this); - } - - this.first = this.first.concat(names); - - for (var t in tokens) { - if (tokens.hasOwnProperty(t)) { - t = tokens[t]; - if (!implied && state.funct["(global)"]) { - if (predefined[t.id] === false) { - warning("W079", t.token, t.id); - } else if (state.option.futurehostile === false) { - if ((!state.inES5() && vars.ecmaIdentifiers[5][t.id] === false) || - (!state.inES6() && vars.ecmaIdentifiers[6][t.id] === false)) { - warning("W129", t.token, t.id); - } - } - } - if (t.id) { - if (implied === "for") { - - if (!state.funct["(scope)"].has(t.id)) { - if (report) warning("W088", t.token, t.id); - } - state.funct["(scope)"].block.use(t.id, t.token); - } else { - state.funct["(scope)"].addlabel(t.id, { - type: "var", - token: t.token }); - - if (lone && inexport) { - state.funct["(scope)"].setExported(t.id, t.token); - } - } - names.push(t.token); - } - } - } - - if (state.tokens.next.id === "=") { - state.nameStack.set(state.tokens.curr); - - advance("="); - if (!prefix && report && !state.funct["(loopage)"] && - state.tokens.next.id === "undefined") { - warning("W080", state.tokens.prev, state.tokens.prev.value); - } - if (peek(0).id === "=" && state.tokens.next.identifier) { - if (!prefix && report && - !state.funct["(params)"] || - state.funct["(params)"].indexOf(state.tokens.next.value) === -1) { - warning("W120", state.tokens.next, state.tokens.next.value); - } - } - value = expression(prefix ? 120 : 10); - if (lone) { - tokens[0].first = value; - } else { - destructuringPatternMatch(names, value); - } - } - - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - - return this; - }); - varstatement.exps = true; - - blockstmt("class", function() { - return classdef.call(this, true); - }); - - function classdef(isStatement) { - if (!state.inES6()) { - warning("W104", state.tokens.curr, "class", "6"); - } - if (isStatement) { - this.name = identifier(); - - state.funct["(scope)"].addlabel(this.name, { - type: "class", - token: state.tokens.curr }); - } else if (state.tokens.next.identifier && state.tokens.next.value !== "extends") { - this.name = identifier(); - this.namedExpr = true; - } else { - this.name = state.nameStack.infer(); - } - classtail(this); - return this; - } - - function classtail(c) { - var wasInClassBody = state.inClassBody; - if (state.tokens.next.value === "extends") { - advance("extends"); - c.heritage = expression(10); - } - - state.inClassBody = true; - advance("{"); - c.body = classbody(c); - advance("}"); - state.inClassBody = wasInClassBody; - } - - function classbody(c) { - var name; - var isStatic; - var isGenerator; - var getset; - var props = Object.create(null); - var staticProps = Object.create(null); - var computed; - for (var i = 0; state.tokens.next.id !== "}"; ++i) { - name = state.tokens.next; - isStatic = false; - isGenerator = false; - getset = null; - if (name.id === ";") { - warning("W032"); - advance(";"); - continue; - } - - if (name.id === "*") { - isGenerator = true; - advance("*"); - name = state.tokens.next; - } - if (name.id === "[") { - name = computedPropertyName(); - computed = true; - } else if (isPropertyName(name)) { - advance(); - computed = false; - if (name.identifier && name.value === "static") { - if (checkPunctuator(state.tokens.next, "*")) { - isGenerator = true; - advance("*"); - } - if (isPropertyName(state.tokens.next) || state.tokens.next.id === "[") { - computed = state.tokens.next.id === "["; - isStatic = true; - name = state.tokens.next; - if (state.tokens.next.id === "[") { - name = computedPropertyName(); - } else advance(); - } - } - - if (name.identifier && (name.value === "get" || name.value === "set")) { - if (isPropertyName(state.tokens.next) || state.tokens.next.id === "[") { - computed = state.tokens.next.id === "["; - getset = name; - name = state.tokens.next; - if (state.tokens.next.id === "[") { - name = computedPropertyName(); - } else advance(); - } - } - } else { - warning("W052", state.tokens.next, state.tokens.next.value || state.tokens.next.type); - advance(); - continue; - } - - if (!checkPunctuator(state.tokens.next, "(")) { - error("E054", state.tokens.next, state.tokens.next.value); - while (state.tokens.next.id !== "}" && - !checkPunctuator(state.tokens.next, "(")) { - advance(); - } - if (state.tokens.next.value !== "(") { - doFunction({ statement: c }); - } - } - - if (!computed) { - if (getset) { - saveAccessor( - getset.value, isStatic ? staticProps : props, name.value, name, true, isStatic); - } else { - if (name.value === "constructor") { - state.nameStack.set(c); - } else { - state.nameStack.set(name); - } - saveProperty(isStatic ? staticProps : props, name.value, name, true, isStatic); - } - } - - if (getset && name.value === "constructor") { - var propDesc = getset.value === "get" ? "class getter method" : "class setter method"; - error("E049", name, propDesc, "constructor"); - } else if (name.value === "prototype") { - error("E049", name, "class method", "prototype"); - } - - propertyName(name); - - doFunction({ - statement: c, - type: isGenerator ? "generator" : null, - classExprBinding: c.namedExpr ? c.name : null - }); - } - - checkProperties(props); - } - - blockstmt("function", function(context) { - var inexport = context && context.inexport; - var generator = false; - if (state.tokens.next.value === "*") { - advance("*"); - if (state.inES6({ strict: true })) { - generator = true; - } else { - warning("W119", state.tokens.curr, "function*", "6"); - } - } - if (inblock) { - warning("W082", state.tokens.curr); - } - var i = optionalidentifier(); - - state.funct["(scope)"].addlabel(i, { - type: "function", - token: state.tokens.curr }); - - if (i === undefined) { - warning("W025"); - } else if (inexport) { - state.funct["(scope)"].setExported(i, state.tokens.prev); - } - - doFunction({ - name: i, - statement: this, - type: generator ? "generator" : null, - ignoreLoopFunc: inblock // a declaration may already have warned - }); - if (state.tokens.next.id === "(" && state.tokens.next.line === state.tokens.curr.line) { - error("E039"); - } - return this; - }); - - prefix("function", function() { - var generator = false; - - if (state.tokens.next.value === "*") { - if (!state.inES6()) { - warning("W119", state.tokens.curr, "function*", "6"); - } - advance("*"); - generator = true; - } - - var i = optionalidentifier(); - doFunction({ name: i, type: generator ? "generator" : null }); - return this; - }); - - blockstmt("if", function() { - var t = state.tokens.next; - increaseComplexityCount(); - state.condition = true; - advance("("); - var expr = expression(0); - checkCondAssignment(expr); - var forinifcheck = null; - if (state.option.forin && state.forinifcheckneeded) { - state.forinifcheckneeded = false; // We only need to analyze the first if inside the loop - forinifcheck = state.forinifchecks[state.forinifchecks.length - 1]; - if (expr.type === "(punctuator)" && expr.value === "!") { - forinifcheck.type = "(negative)"; - } else { - forinifcheck.type = "(positive)"; - } - } - - advance(")", t); - state.condition = false; - var s = block(true, true); - if (forinifcheck && forinifcheck.type === "(negative)") { - if (s && s[0] && s[0].type === "(identifier)" && s[0].value === "continue") { - forinifcheck.type = "(negative-with-continue)"; - } - } - - if (state.tokens.next.id === "else") { - advance("else"); - if (state.tokens.next.id === "if" || state.tokens.next.id === "switch") { - statement(); - } else { - block(true, true); - } - } - return this; - }); - - blockstmt("try", function() { - var b; - - function doCatch() { - advance("catch"); - advance("("); - - state.funct["(scope)"].stack("catchparams"); - - if (checkPunctuators(state.tokens.next, ["[", "{"])) { - var tokens = destructuringPattern(); - _.each(tokens, function(token) { - if (token.id) { - state.funct["(scope)"].addParam(token.id, token, "exception"); - } - }); - } else if (state.tokens.next.type !== "(identifier)") { - warning("E030", state.tokens.next, state.tokens.next.value); - } else { - state.funct["(scope)"].addParam(identifier(), state.tokens.curr, "exception"); - } - - if (state.tokens.next.value === "if") { - if (!state.inMoz()) { - warning("W118", state.tokens.curr, "catch filter"); - } - advance("if"); - expression(0); - } - - advance(")"); - - block(false); - - state.funct["(scope)"].unstack(); - } - - block(true); - - while (state.tokens.next.id === "catch") { - increaseComplexityCount(); - if (b && (!state.inMoz())) { - warning("W118", state.tokens.next, "multiple catch blocks"); - } - doCatch(); - b = true; - } - - if (state.tokens.next.id === "finally") { - advance("finally"); - block(true); - return; - } - - if (!b) { - error("E021", state.tokens.next, "catch", state.tokens.next.value); - } - - return this; - }); - - blockstmt("while", function() { - var t = state.tokens.next; - state.funct["(breakage)"] += 1; - state.funct["(loopage)"] += 1; - increaseComplexityCount(); - advance("("); - checkCondAssignment(expression(0)); - advance(")", t); - block(true, true); - state.funct["(breakage)"] -= 1; - state.funct["(loopage)"] -= 1; - return this; - }).labelled = true; - - blockstmt("with", function() { - var t = state.tokens.next; - if (state.isStrict()) { - error("E010", state.tokens.curr); - } else if (!state.option.withstmt) { - warning("W085", state.tokens.curr); - } - - advance("("); - expression(0); - advance(")", t); - block(true, true); - - return this; - }); - - blockstmt("switch", function() { - var t = state.tokens.next; - var g = false; - var noindent = false; - - state.funct["(breakage)"] += 1; - advance("("); - checkCondAssignment(expression(0)); - advance(")", t); - t = state.tokens.next; - advance("{"); - - if (state.tokens.next.from === indent) - noindent = true; - - if (!noindent) - indent += state.option.indent; - - this.cases = []; - - for (;;) { - switch (state.tokens.next.id) { - case "case": - switch (state.funct["(verb)"]) { - case "yield": - case "break": - case "case": - case "continue": - case "return": - case "switch": - case "throw": - break; - default: - if (!state.tokens.curr.caseFallsThrough) { - warning("W086", state.tokens.curr, "case"); - } - } - - advance("case"); - this.cases.push(expression(0)); - increaseComplexityCount(); - g = true; - advance(":"); - state.funct["(verb)"] = "case"; - break; - case "default": - switch (state.funct["(verb)"]) { - case "yield": - case "break": - case "continue": - case "return": - case "throw": - break; - default: - if (this.cases.length) { - if (!state.tokens.curr.caseFallsThrough) { - warning("W086", state.tokens.curr, "default"); - } - } - } - - advance("default"); - g = true; - advance(":"); - break; - case "}": - if (!noindent) - indent -= state.option.indent; - - advance("}", t); - state.funct["(breakage)"] -= 1; - state.funct["(verb)"] = undefined; - return; - case "(end)": - error("E023", state.tokens.next, "}"); - return; - default: - indent += state.option.indent; - if (g) { - switch (state.tokens.curr.id) { - case ",": - error("E040"); - return; - case ":": - g = false; - statements(); - break; - default: - error("E025", state.tokens.curr); - return; - } - } else { - if (state.tokens.curr.id === ":") { - advance(":"); - error("E024", state.tokens.curr, ":"); - statements(); - } else { - error("E021", state.tokens.next, "case", state.tokens.next.value); - return; - } - } - indent -= state.option.indent; - } - } - return this; - }).labelled = true; - - stmt("debugger", function() { - if (!state.option.debug) { - warning("W087", this); - } - return this; - }).exps = true; - - (function() { - var x = stmt("do", function() { - state.funct["(breakage)"] += 1; - state.funct["(loopage)"] += 1; - increaseComplexityCount(); - - this.first = block(true, true); - advance("while"); - var t = state.tokens.next; - advance("("); - checkCondAssignment(expression(0)); - advance(")", t); - state.funct["(breakage)"] -= 1; - state.funct["(loopage)"] -= 1; - return this; - }); - x.labelled = true; - x.exps = true; - }()); - - blockstmt("for", function() { - var s, t = state.tokens.next; - var letscope = false; - var foreachtok = null; - - if (t.value === "each") { - foreachtok = t; - advance("each"); - if (!state.inMoz()) { - warning("W118", state.tokens.curr, "for each"); - } - } - - increaseComplexityCount(); - advance("("); - var nextop; // contains the token of the "in" or "of" operator - var i = 0; - var inof = ["in", "of"]; - var level = 0; // BindingPattern "level" --- level 0 === no BindingPattern - var comma; // First comma punctuator at level 0 - var initializer; // First initializer at level 0 - if (checkPunctuators(state.tokens.next, ["{", "["])) ++level; - do { - nextop = peek(i); - ++i; - if (checkPunctuators(nextop, ["{", "["])) ++level; - else if (checkPunctuators(nextop, ["}", "]"])) --level; - if (level < 0) break; - if (level === 0) { - if (!comma && checkPunctuator(nextop, ",")) comma = nextop; - else if (!initializer && checkPunctuator(nextop, "=")) initializer = nextop; - } - } while (level > 0 || !_.contains(inof, nextop.value) && nextop.value !== ";" && - nextop.type !== "(end)"); // Is this a JSCS bug? This looks really weird. - if (_.contains(inof, nextop.value)) { - if (!state.inES6() && nextop.value === "of") { - warning("W104", nextop, "for of", "6"); - } - - var ok = !(initializer || comma); - if (initializer) { - error("W133", comma, nextop.value, "initializer is forbidden"); - } - - if (comma) { - error("W133", comma, nextop.value, "more than one ForBinding"); - } - - if (state.tokens.next.id === "var") { - advance("var"); - state.tokens.curr.fud({ prefix: true }); - } else if (state.tokens.next.id === "let" || state.tokens.next.id === "const") { - advance(state.tokens.next.id); - letscope = true; - state.funct["(scope)"].stack(); - state.tokens.curr.fud({ prefix: true }); - } else { - Object.create(varstatement).fud({ prefix: true, implied: "for", ignore: !ok }); - } - advance(nextop.value); - expression(20); - advance(")", t); - - if (nextop.value === "in" && state.option.forin) { - state.forinifcheckneeded = true; - - if (state.forinifchecks === undefined) { - state.forinifchecks = []; - } - state.forinifchecks.push({ - type: "(none)" - }); - } - - state.funct["(breakage)"] += 1; - state.funct["(loopage)"] += 1; - - s = block(true, true); - - if (nextop.value === "in" && state.option.forin) { - if (state.forinifchecks && state.forinifchecks.length > 0) { - var check = state.forinifchecks.pop(); - - if (// No if statement or not the first statement in loop body - s && s.length > 0 && (typeof s[0] !== "object" || s[0].value !== "if") || - check.type === "(positive)" && s.length > 1 || - check.type === "(negative)") { - warning("W089", this); - } - } - state.forinifcheckneeded = false; - } - - state.funct["(breakage)"] -= 1; - state.funct["(loopage)"] -= 1; - } else { - if (foreachtok) { - error("E045", foreachtok); - } - if (state.tokens.next.id !== ";") { - if (state.tokens.next.id === "var") { - advance("var"); - state.tokens.curr.fud(); - } else if (state.tokens.next.id === "let") { - advance("let"); - letscope = true; - state.funct["(scope)"].stack(); - state.tokens.curr.fud(); - } else { - for (;;) { - expression(0, "for"); - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - } - } - nolinebreak(state.tokens.curr); - advance(";"); - state.funct["(loopage)"] += 1; - if (state.tokens.next.id !== ";") { - checkCondAssignment(expression(0)); - } - nolinebreak(state.tokens.curr); - advance(";"); - if (state.tokens.next.id === ";") { - error("E021", state.tokens.next, ")", ";"); - } - if (state.tokens.next.id !== ")") { - for (;;) { - expression(0, "for"); - if (state.tokens.next.id !== ",") { - break; - } - comma(); - } - } - advance(")", t); - state.funct["(breakage)"] += 1; - block(true, true); - state.funct["(breakage)"] -= 1; - state.funct["(loopage)"] -= 1; - - } - if (letscope) { - state.funct["(scope)"].unstack(); - } - return this; - }).labelled = true; - - - stmt("break", function() { - var v = state.tokens.next.value; - - if (!state.option.asi) - nolinebreak(this); - - if (state.tokens.next.id !== ";" && !state.tokens.next.reach && - state.tokens.curr.line === startLine(state.tokens.next)) { - if (!state.funct["(scope)"].funct.hasBreakLabel(v)) { - warning("W090", state.tokens.next, v); - } - this.first = state.tokens.next; - advance(); - } else { - if (state.funct["(breakage)"] === 0) - warning("W052", state.tokens.next, this.value); - } - - reachable(this); - - return this; - }).exps = true; - - - stmt("continue", function() { - var v = state.tokens.next.value; - - if (state.funct["(breakage)"] === 0) - warning("W052", state.tokens.next, this.value); - if (!state.funct["(loopage)"]) - warning("W052", state.tokens.next, this.value); - - if (!state.option.asi) - nolinebreak(this); - - if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { - if (state.tokens.curr.line === startLine(state.tokens.next)) { - if (!state.funct["(scope)"].funct.hasBreakLabel(v)) { - warning("W090", state.tokens.next, v); - } - this.first = state.tokens.next; - advance(); - } - } - - reachable(this); - - return this; - }).exps = true; - - - stmt("return", function() { - if (this.line === startLine(state.tokens.next)) { - if (state.tokens.next.id !== ";" && !state.tokens.next.reach) { - this.first = expression(0); - - if (this.first && - this.first.type === "(punctuator)" && this.first.value === "=" && - !this.first.paren && !state.option.boss) { - warningAt("W093", this.first.line, this.first.character); - } - } - } else { - if (state.tokens.next.type === "(punctuator)" && - ["[", "{", "+", "-"].indexOf(state.tokens.next.value) > -1) { - nolinebreak(this); // always warn (Line breaking error) - } - } - - reachable(this); - - return this; - }).exps = true; - - (function(x) { - x.exps = true; - x.lbp = 25; - }(prefix("yield", function() { - var prev = state.tokens.prev; - if (state.inES6(true) && !state.funct["(generator)"]) { - if (!("(catch)" === state.funct["(name)"] && state.funct["(context)"]["(generator)"])) { - error("E046", state.tokens.curr, "yield"); - } - } else if (!state.inES6()) { - warning("W104", state.tokens.curr, "yield", "6"); - } - state.funct["(generator)"] = "yielded"; - var delegatingYield = false; - - if (state.tokens.next.value === "*") { - delegatingYield = true; - advance("*"); - } - - if (this.line === startLine(state.tokens.next) || !state.inMoz()) { - if (delegatingYield || - (state.tokens.next.id !== ";" && !state.option.asi && - !state.tokens.next.reach && state.tokens.next.nud)) { - - nobreaknonadjacent(state.tokens.curr, state.tokens.next); - this.first = expression(10); - - if (this.first.type === "(punctuator)" && this.first.value === "=" && - !this.first.paren && !state.option.boss) { - warningAt("W093", this.first.line, this.first.character); - } - } - - if (state.inMoz() && state.tokens.next.id !== ")" && - (prev.lbp > 30 || (!prev.assign && !isEndOfExpr()) || prev.id === "yield")) { - error("E050", this); - } - } else if (!state.option.asi) { - nolinebreak(this); // always warn (Line breaking error) - } - return this; - }))); - - - stmt("throw", function() { - nolinebreak(this); - this.first = expression(20); - - reachable(this); - - return this; - }).exps = true; - - stmt("import", function() { - if (!state.inES6()) { - warning("W119", state.tokens.curr, "import", "6"); - } - - if (state.tokens.next.type === "(string)") { - advance("(string)"); - return this; - } - - if (state.tokens.next.identifier) { - this.name = identifier(); - state.funct["(scope)"].addlabel(this.name, { - type: "const", - token: state.tokens.curr }); - - if (state.tokens.next.value === ",") { - advance(","); - } else { - advance("from"); - advance("(string)"); - return this; - } - } - - if (state.tokens.next.id === "*") { - advance("*"); - advance("as"); - if (state.tokens.next.identifier) { - this.name = identifier(); - state.funct["(scope)"].addlabel(this.name, { - type: "const", - token: state.tokens.curr }); - } - } else { - advance("{"); - for (;;) { - if (state.tokens.next.value === "}") { - advance("}"); - break; - } - var importName; - if (state.tokens.next.type === "default") { - importName = "default"; - advance("default"); - } else { - importName = identifier(); - } - if (state.tokens.next.value === "as") { - advance("as"); - importName = identifier(); - } - state.funct["(scope)"].addlabel(importName, { - type: "const", - token: state.tokens.curr }); - - if (state.tokens.next.value === ",") { - advance(","); - } else if (state.tokens.next.value === "}") { - advance("}"); - break; - } else { - error("E024", state.tokens.next, state.tokens.next.value); - break; - } - } - } - advance("from"); - advance("(string)"); - return this; - }).exps = true; - - stmt("export", function() { - var ok = true; - var token; - var identifier; - - if (!state.inES6()) { - warning("W119", state.tokens.curr, "export", "6"); - ok = false; - } - - if (!state.funct["(scope)"].block.isGlobal()) { - error("E053", state.tokens.curr); - ok = false; - } - - if (state.tokens.next.value === "*") { - advance("*"); - advance("from"); - advance("(string)"); - return this; - } - - if (state.tokens.next.type === "default") { - state.nameStack.set(state.tokens.next); - advance("default"); - var exportType = state.tokens.next.id; - if (exportType === "function" || exportType === "class") { - this.block = true; - } - - token = peek(); - - expression(10); - - identifier = token.value; - - if (this.block) { - state.funct["(scope)"].addlabel(identifier, { - type: exportType, - token: token }); - - state.funct["(scope)"].setExported(identifier, token); - } - - return this; - } - - if (state.tokens.next.value === "{") { - advance("{"); - var exportedTokens = []; - for (;;) { - if (!state.tokens.next.identifier) { - error("E030", state.tokens.next, state.tokens.next.value); - } - advance(); - - exportedTokens.push(state.tokens.curr); - - if (state.tokens.next.value === "as") { - advance("as"); - if (!state.tokens.next.identifier) { - error("E030", state.tokens.next, state.tokens.next.value); - } - advance(); - } - - if (state.tokens.next.value === ",") { - advance(","); - } else if (state.tokens.next.value === "}") { - advance("}"); - break; - } else { - error("E024", state.tokens.next, state.tokens.next.value); - break; - } - } - if (state.tokens.next.value === "from") { - advance("from"); - advance("(string)"); - } else if (ok) { - exportedTokens.forEach(function(token) { - state.funct["(scope)"].setExported(token.value, token); - }); - } - return this; - } - - if (state.tokens.next.id === "var") { - advance("var"); - state.tokens.curr.fud({ inexport:true }); - } else if (state.tokens.next.id === "let") { - advance("let"); - state.tokens.curr.fud({ inexport:true }); - } else if (state.tokens.next.id === "const") { - advance("const"); - state.tokens.curr.fud({ inexport:true }); - } else if (state.tokens.next.id === "function") { - this.block = true; - advance("function"); - state.syntax["function"].fud({ inexport:true }); - } else if (state.tokens.next.id === "class") { - this.block = true; - advance("class"); - var classNameToken = state.tokens.next; - state.syntax["class"].fud(); - state.funct["(scope)"].setExported(classNameToken.value, classNameToken); - } else { - error("E024", state.tokens.next, state.tokens.next.value); - } - - return this; - }).exps = true; - - FutureReservedWord("abstract"); - FutureReservedWord("boolean"); - FutureReservedWord("byte"); - FutureReservedWord("char"); - FutureReservedWord("class", { es5: true, nud: classdef }); - FutureReservedWord("double"); - FutureReservedWord("enum", { es5: true }); - FutureReservedWord("export", { es5: true }); - FutureReservedWord("extends", { es5: true }); - FutureReservedWord("final"); - FutureReservedWord("float"); - FutureReservedWord("goto"); - FutureReservedWord("implements", { es5: true, strictOnly: true }); - FutureReservedWord("import", { es5: true }); - FutureReservedWord("int"); - FutureReservedWord("interface", { es5: true, strictOnly: true }); - FutureReservedWord("long"); - FutureReservedWord("native"); - FutureReservedWord("package", { es5: true, strictOnly: true }); - FutureReservedWord("private", { es5: true, strictOnly: true }); - FutureReservedWord("protected", { es5: true, strictOnly: true }); - FutureReservedWord("public", { es5: true, strictOnly: true }); - FutureReservedWord("short"); - FutureReservedWord("static", { es5: true, strictOnly: true }); - FutureReservedWord("super", { es5: true }); - FutureReservedWord("synchronized"); - FutureReservedWord("transient"); - FutureReservedWord("volatile"); - - var lookupBlockType = function() { - var pn, pn1, prev; - var i = -1; - var bracketStack = 0; - var ret = {}; - if (checkPunctuators(state.tokens.curr, ["[", "{"])) { - bracketStack += 1; - } - do { - prev = i === -1 ? state.tokens.curr : pn; - pn = i === -1 ? state.tokens.next : peek(i); - pn1 = peek(i + 1); - i = i + 1; - if (checkPunctuators(pn, ["[", "{"])) { - bracketStack += 1; - } else if (checkPunctuators(pn, ["]", "}"])) { - bracketStack -= 1; - } - if (bracketStack === 1 && pn.identifier && pn.value === "for" && - !checkPunctuator(prev, ".")) { - ret.isCompArray = true; - ret.notJson = true; - break; - } - if (bracketStack === 0 && checkPunctuators(pn, ["}", "]"])) { - if (pn1.value === "=") { - ret.isDestAssign = true; - ret.notJson = true; - break; - } else if (pn1.value === ".") { - ret.notJson = true; - break; - } - } - if (checkPunctuator(pn, ";")) { - ret.isBlock = true; - ret.notJson = true; - } - } while (bracketStack > 0 && pn.id !== "(end)"); - return ret; - }; - - function saveProperty(props, name, tkn, isClass, isStatic) { - var msg = ["key", "class method", "static class method"]; - msg = msg[(isClass || false) + (isStatic || false)]; - if (tkn.identifier) { - name = tkn.value; - } - - if (props[name] && name !== "__proto__") { - warning("W075", state.tokens.next, msg, name); - } else { - props[name] = Object.create(null); - } - - props[name].basic = true; - props[name].basictkn = tkn; - } - function saveAccessor(accessorType, props, name, tkn, isClass, isStatic) { - var flagName = accessorType === "get" ? "getterToken" : "setterToken"; - var msg = ""; - - if (isClass) { - if (isStatic) { - msg += "static "; - } - msg += accessorType + "ter method"; - } else { - msg = "key"; - } - - state.tokens.curr.accessorType = accessorType; - state.nameStack.set(tkn); - - if (props[name]) { - if ((props[name].basic || props[name][flagName]) && name !== "__proto__") { - warning("W075", state.tokens.next, msg, name); - } - } else { - props[name] = Object.create(null); - } - - props[name][flagName] = tkn; - } - - function computedPropertyName() { - advance("["); - if (!state.inES6()) { - warning("W119", state.tokens.curr, "computed property names", "6"); - } - var value = expression(10); - advance("]"); - return value; - } - function checkPunctuators(token, values) { - if (token.type === "(punctuator)") { - return _.contains(values, token.value); - } - return false; - } - function checkPunctuator(token, value) { - return token.type === "(punctuator)" && token.value === value; - } - function destructuringAssignOrJsonValue() { - - var block = lookupBlockType(); - if (block.notJson) { - if (!state.inES6() && block.isDestAssign) { - warning("W104", state.tokens.curr, "destructuring assignment", "6"); - } - statements(); - } else { - state.option.laxbreak = true; - state.jsonMode = true; - jsonValue(); - } - } - - var arrayComprehension = function() { - var CompArray = function() { - this.mode = "use"; - this.variables = []; - }; - var _carrays = []; - var _current; - function declare(v) { - var l = _current.variables.filter(function(elt) { - if (elt.value === v) { - elt.undef = false; - return v; - } - }).length; - return l !== 0; - } - function use(v) { - var l = _current.variables.filter(function(elt) { - if (elt.value === v && !elt.undef) { - if (elt.unused === true) { - elt.unused = false; - } - return v; - } - }).length; - return (l === 0); - } - return { stack: function() { - _current = new CompArray(); - _carrays.push(_current); - }, - unstack: function() { - _current.variables.filter(function(v) { - if (v.unused) - warning("W098", v.token, v.raw_text || v.value); - if (v.undef) - state.funct["(scope)"].block.use(v.value, v.token); - }); - _carrays.splice(-1, 1); - _current = _carrays[_carrays.length - 1]; - }, - setState: function(s) { - if (_.contains(["use", "define", "generate", "filter"], s)) - _current.mode = s; - }, - check: function(v) { - if (!_current) { - return; - } - if (_current && _current.mode === "use") { - if (use(v)) { - _current.variables.push({ - funct: state.funct, - token: state.tokens.curr, - value: v, - undef: true, - unused: false - }); - } - return true; - } else if (_current && _current.mode === "define") { - if (!declare(v)) { - _current.variables.push({ - funct: state.funct, - token: state.tokens.curr, - value: v, - undef: false, - unused: true - }); - } - return true; - } else if (_current && _current.mode === "generate") { - state.funct["(scope)"].block.use(v, state.tokens.curr); - return true; - } else if (_current && _current.mode === "filter") { - if (use(v)) { - state.funct["(scope)"].block.use(v, state.tokens.curr); - } - return true; - } - return false; - } - }; - }; - - function jsonValue() { - function jsonObject() { - var o = {}, t = state.tokens.next; - advance("{"); - if (state.tokens.next.id !== "}") { - for (;;) { - if (state.tokens.next.id === "(end)") { - error("E026", state.tokens.next, t.line); - } else if (state.tokens.next.id === "}") { - warning("W094", state.tokens.curr); - break; - } else if (state.tokens.next.id === ",") { - error("E028", state.tokens.next); - } else if (state.tokens.next.id !== "(string)") { - warning("W095", state.tokens.next, state.tokens.next.value); - } - if (o[state.tokens.next.value] === true) { - warning("W075", state.tokens.next, "key", state.tokens.next.value); - } else if ((state.tokens.next.value === "__proto__" && - !state.option.proto) || (state.tokens.next.value === "__iterator__" && - !state.option.iterator)) { - warning("W096", state.tokens.next, state.tokens.next.value); - } else { - o[state.tokens.next.value] = true; - } - advance(); - advance(":"); - jsonValue(); - if (state.tokens.next.id !== ",") { - break; - } - advance(","); - } - } - advance("}"); - } - - function jsonArray() { - var t = state.tokens.next; - advance("["); - if (state.tokens.next.id !== "]") { - for (;;) { - if (state.tokens.next.id === "(end)") { - error("E027", state.tokens.next, t.line); - } else if (state.tokens.next.id === "]") { - warning("W094", state.tokens.curr); - break; - } else if (state.tokens.next.id === ",") { - error("E028", state.tokens.next); - } - jsonValue(); - if (state.tokens.next.id !== ",") { - break; - } - advance(","); - } - } - advance("]"); - } - - switch (state.tokens.next.id) { - case "{": - jsonObject(); - break; - case "[": - jsonArray(); - break; - case "true": - case "false": - case "null": - case "(number)": - case "(string)": - advance(); - break; - case "-": - advance("-"); - advance("(number)"); - break; - default: - error("E003", state.tokens.next); - } - } - - var escapeRegex = function(str) { - return str.replace(/[-\/\\^$*+?.()|[\]{}]/g, "\\$&"); - }; - var itself = function(s, o, g) { - var i, k, x, reIgnoreStr, reIgnore; - var optionKeys; - var newOptionObj = {}; - var newIgnoredObj = {}; - - o = _.clone(o); - state.reset(); - - if (o && o.scope) { - JSHINT.scope = o.scope; - } else { - JSHINT.errors = []; - JSHINT.undefs = []; - JSHINT.internals = []; - JSHINT.blacklist = {}; - JSHINT.scope = "(main)"; - } - - predefined = Object.create(null); - combine(predefined, vars.ecmaIdentifiers[3]); - combine(predefined, vars.reservedVars); - - combine(predefined, g || {}); - - declared = Object.create(null); - var exported = Object.create(null); // Variables that live outside the current file - - function each(obj, cb) { - if (!obj) - return; - - if (!Array.isArray(obj) && typeof obj === "object") - obj = Object.keys(obj); - - obj.forEach(cb); - } - - if (o) { - each(o.predef || null, function(item) { - var slice, prop; - - if (item[0] === "-") { - slice = item.slice(1); - JSHINT.blacklist[slice] = slice; - delete predefined[slice]; - } else { - prop = Object.getOwnPropertyDescriptor(o.predef, item); - predefined[item] = prop ? prop.value : false; - } - }); - - each(o.exported || null, function(item) { - exported[item] = true; - }); - - delete o.predef; - delete o.exported; - - optionKeys = Object.keys(o); - for (x = 0; x < optionKeys.length; x++) { - if (/^-W\d{3}$/g.test(optionKeys[x])) { - newIgnoredObj[optionKeys[x].slice(1)] = true; - } else { - var optionKey = optionKeys[x]; - newOptionObj[optionKey] = o[optionKey]; - if ((optionKey === "esversion" && o[optionKey] === 5) || - (optionKey === "es5" && o[optionKey])) { - warning("I003"); - } - - if (optionKeys[x] === "newcap" && o[optionKey] === false) - newOptionObj["(explicitNewcap)"] = true; - } - } - } - - state.option = newOptionObj; - state.ignored = newIgnoredObj; - - state.option.indent = state.option.indent || 4; - state.option.maxerr = state.option.maxerr || 50; - - indent = 1; - - var scopeManagerInst = scopeManager(state, predefined, exported, declared); - scopeManagerInst.on("warning", function(ev) { - warning.apply(null, [ ev.code, ev.token].concat(ev.data)); - }); - - scopeManagerInst.on("error", function(ev) { - error.apply(null, [ ev.code, ev.token ].concat(ev.data)); - }); - - state.funct = functor("(global)", null, { - "(global)" : true, - "(scope)" : scopeManagerInst, - "(comparray)" : arrayComprehension(), - "(metrics)" : createMetrics(state.tokens.next) - }); - - functions = [state.funct]; - urls = []; - stack = null; - member = {}; - membersOnly = null; - inblock = false; - lookahead = []; - - if (!isString(s) && !Array.isArray(s)) { - errorAt("E004", 0); - return false; - } - - api = { - get isJSON() { - return state.jsonMode; - }, - - getOption: function(name) { - return state.option[name] || null; - }, - - getCache: function(name) { - return state.cache[name]; - }, - - setCache: function(name, value) { - state.cache[name] = value; - }, - - warn: function(code, data) { - warningAt.apply(null, [ code, data.line, data.char ].concat(data.data)); - }, - - on: function(names, listener) { - names.split(" ").forEach(function(name) { - emitter.on(name, listener); - }.bind(this)); - } - }; - - emitter.removeAllListeners(); - (extraModules || []).forEach(function(func) { - func(api); - }); - - state.tokens.prev = state.tokens.curr = state.tokens.next = state.syntax["(begin)"]; - - if (o && o.ignoreDelimiters) { - - if (!Array.isArray(o.ignoreDelimiters)) { - o.ignoreDelimiters = [o.ignoreDelimiters]; - } - - o.ignoreDelimiters.forEach(function(delimiterPair) { - if (!delimiterPair.start || !delimiterPair.end) - return; - - reIgnoreStr = escapeRegex(delimiterPair.start) + - "[\\s\\S]*?" + - escapeRegex(delimiterPair.end); - - reIgnore = new RegExp(reIgnoreStr, "ig"); - - s = s.replace(reIgnore, function(match) { - return match.replace(/./g, " "); - }); - }); - } - - lex = new Lexer(s); - - lex.on("warning", function(ev) { - warningAt.apply(null, [ ev.code, ev.line, ev.character].concat(ev.data)); - }); - - lex.on("error", function(ev) { - errorAt.apply(null, [ ev.code, ev.line, ev.character ].concat(ev.data)); - }); - - lex.on("fatal", function(ev) { - quit("E041", ev.line, ev.from); - }); - - lex.on("Identifier", function(ev) { - emitter.emit("Identifier", ev); - }); - - lex.on("String", function(ev) { - emitter.emit("String", ev); - }); - - lex.on("Number", function(ev) { - emitter.emit("Number", ev); - }); - - lex.start(); - for (var name in o) { - if (_.has(o, name)) { - checkOption(name, state.tokens.curr); - } - } - - assume(); - combine(predefined, g || {}); - comma.first = true; - - try { - advance(); - switch (state.tokens.next.id) { - case "{": - case "[": - destructuringAssignOrJsonValue(); - break; - default: - directives(); - - if (state.directive["use strict"]) { - if (state.option.strict !== "global") { - warning("W097", state.tokens.prev); - } - } - - statements(); - } - - if (state.tokens.next.id !== "(end)") { - quit("E041", state.tokens.curr.line); - } - - state.funct["(scope)"].unstack(); - - } catch (err) { - if (err && err.name === "JSHintError") { - var nt = state.tokens.next || {}; - JSHINT.errors.push({ - scope : "(main)", - raw : err.raw, - code : err.code, - reason : err.message, - line : err.line || nt.line, - character : err.character || nt.from - }, null); - } else { - throw err; - } - } - - if (JSHINT.scope === "(main)") { - o = o || {}; - - for (i = 0; i < JSHINT.internals.length; i += 1) { - k = JSHINT.internals[i]; - o.scope = k.elem; - itself(k.value, o, g); - } - } - - return JSHINT.errors.length === 0; - }; - itself.addModule = function(func) { - extraModules.push(func); - }; - - itself.addModule(style.register); - itself.data = function() { - var data = { - functions: [], - options: state.option - }; - - var fu, f, i, j, n, globals; - - if (itself.errors.length) { - data.errors = itself.errors; - } - - if (state.jsonMode) { - data.json = true; - } - - var impliedGlobals = state.funct["(scope)"].getImpliedGlobals(); - if (impliedGlobals.length > 0) { - data.implieds = impliedGlobals; - } - - if (urls.length > 0) { - data.urls = urls; - } - - globals = state.funct["(scope)"].getUsedOrDefinedGlobals(); - if (globals.length > 0) { - data.globals = globals; - } - - for (i = 1; i < functions.length; i += 1) { - f = functions[i]; - fu = {}; - - for (j = 0; j < functionicity.length; j += 1) { - fu[functionicity[j]] = []; - } - - for (j = 0; j < functionicity.length; j += 1) { - if (fu[functionicity[j]].length === 0) { - delete fu[functionicity[j]]; - } - } - - fu.name = f["(name)"]; - fu.param = f["(params)"]; - fu.line = f["(line)"]; - fu.character = f["(character)"]; - fu.last = f["(last)"]; - fu.lastcharacter = f["(lastcharacter)"]; - - fu.metrics = { - complexity: f["(metrics)"].ComplexityCount, - parameters: f["(metrics)"].arity, - statements: f["(metrics)"].statementCount - }; - - data.functions.push(fu); - } - - var unuseds = state.funct["(scope)"].getUnuseds(); - if (unuseds.length > 0) { - data.unused = unuseds; - } - - for (n in member) { - if (typeof member[n] === "number") { - data.member = member; - break; - } - } - - return data; - }; - - itself.jshint = itself; - - return itself; -}()); -if (typeof exports === "object" && exports) { - exports.JSHINT = JSHINT; -} - -},{"../lodash":"/node_modules/jshint/lodash.js","./lex.js":"/node_modules/jshint/src/lex.js","./messages.js":"/node_modules/jshint/src/messages.js","./options.js":"/node_modules/jshint/src/options.js","./reg.js":"/node_modules/jshint/src/reg.js","./scope-manager.js":"/node_modules/jshint/src/scope-manager.js","./state.js":"/node_modules/jshint/src/state.js","./style.js":"/node_modules/jshint/src/style.js","./vars.js":"/node_modules/jshint/src/vars.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/lex.js":[function(_dereq_,module,exports){ - -"use strict"; - -var _ = _dereq_("../lodash"); -var events = _dereq_("events"); -var reg = _dereq_("./reg.js"); -var state = _dereq_("./state.js").state; - -var unicodeData = _dereq_("../data/ascii-identifier-data.js"); -var asciiIdentifierStartTable = unicodeData.asciiIdentifierStartTable; -var asciiIdentifierPartTable = unicodeData.asciiIdentifierPartTable; - -var Token = { - Identifier: 1, - Punctuator: 2, - NumericLiteral: 3, - StringLiteral: 4, - Comment: 5, - Keyword: 6, - NullLiteral: 7, - BooleanLiteral: 8, - RegExp: 9, - TemplateHead: 10, - TemplateMiddle: 11, - TemplateTail: 12, - NoSubstTemplate: 13 -}; - -var Context = { - Block: 1, - Template: 2 -}; - -function asyncTrigger() { - var _checks = []; - - return { - push: function(fn) { - _checks.push(fn); - }, - - check: function() { - for (var check = 0; check < _checks.length; ++check) { - _checks[check](); - } - - _checks.splice(0, _checks.length); - } - }; -} -function Lexer(source) { - var lines = source; - - if (typeof lines === "string") { - lines = lines - .replace(/\r\n/g, "\n") - .replace(/\r/g, "\n") - .split("\n"); - } - - if (lines[0] && lines[0].substr(0, 2) === "#!") { - if (lines[0].indexOf("node") !== -1) { - state.option.node = true; - } - lines[0] = ""; - } - - this.emitter = new events.EventEmitter(); - this.source = source; - this.setLines(lines); - this.prereg = true; - - this.line = 0; - this.char = 1; - this.from = 1; - this.input = ""; - this.inComment = false; - this.context = []; - this.templateStarts = []; - - for (var i = 0; i < state.option.indent; i += 1) { - state.tab += " "; - } - this.ignoreLinterErrors = false; -} - -Lexer.prototype = { - _lines: [], - - inContext: function(ctxType) { - return this.context.length > 0 && this.context[this.context.length - 1].type === ctxType; - }, - - pushContext: function(ctxType) { - this.context.push({ type: ctxType }); - }, - - popContext: function() { - return this.context.pop(); - }, - - isContext: function(context) { - return this.context.length > 0 && this.context[this.context.length - 1] === context; - }, - - currentContext: function() { - return this.context.length > 0 && this.context[this.context.length - 1]; - }, - - getLines: function() { - this._lines = state.lines; - return this._lines; - }, - - setLines: function(val) { - this._lines = val; - state.lines = this._lines; - }, - peek: function(i) { - return this.input.charAt(i || 0); - }, - skip: function(i) { - i = i || 1; - this.char += i; - this.input = this.input.slice(i); - }, - on: function(names, listener) { - names.split(" ").forEach(function(name) { - this.emitter.on(name, listener); - }.bind(this)); - }, - trigger: function() { - this.emitter.emit.apply(this.emitter, Array.prototype.slice.call(arguments)); - }, - triggerAsync: function(type, args, checks, fn) { - checks.push(function() { - if (fn()) { - this.trigger(type, args); - } - }.bind(this)); - }, - scanPunctuator: function() { - var ch1 = this.peek(); - var ch2, ch3, ch4; - - switch (ch1) { - case ".": - if ((/^[0-9]$/).test(this.peek(1))) { - return null; - } - if (this.peek(1) === "." && this.peek(2) === ".") { - return { - type: Token.Punctuator, - value: "..." - }; - } - case "(": - case ")": - case ";": - case ",": - case "[": - case "]": - case ":": - case "~": - case "?": - return { - type: Token.Punctuator, - value: ch1 - }; - case "{": - this.pushContext(Context.Block); - return { - type: Token.Punctuator, - value: ch1 - }; - case "}": - if (this.inContext(Context.Block)) { - this.popContext(); - } - return { - type: Token.Punctuator, - value: ch1 - }; - case "#": - return { - type: Token.Punctuator, - value: ch1 - }; - case "": - return null; - } - - ch2 = this.peek(1); - ch3 = this.peek(2); - ch4 = this.peek(3); - - if (ch1 === ">" && ch2 === ">" && ch3 === ">" && ch4 === "=") { - return { - type: Token.Punctuator, - value: ">>>=" - }; - } - - if (ch1 === "=" && ch2 === "=" && ch3 === "=") { - return { - type: Token.Punctuator, - value: "===" - }; - } - - if (ch1 === "!" && ch2 === "=" && ch3 === "=") { - return { - type: Token.Punctuator, - value: "!==" - }; - } - - if (ch1 === ">" && ch2 === ">" && ch3 === ">") { - return { - type: Token.Punctuator, - value: ">>>" - }; - } - - if (ch1 === "<" && ch2 === "<" && ch3 === "=") { - return { - type: Token.Punctuator, - value: "<<=" - }; - } - - if (ch1 === ">" && ch2 === ">" && ch3 === "=") { - return { - type: Token.Punctuator, - value: ">>=" - }; - } - if (ch1 === "=" && ch2 === ">") { - return { - type: Token.Punctuator, - value: ch1 + ch2 - }; - } - if (ch1 === ch2 && ("+-<>&|".indexOf(ch1) >= 0)) { - return { - type: Token.Punctuator, - value: ch1 + ch2 - }; - } - - if ("<>=!+-*%&|^".indexOf(ch1) >= 0) { - if (ch2 === "=") { - return { - type: Token.Punctuator, - value: ch1 + ch2 - }; - } - - return { - type: Token.Punctuator, - value: ch1 - }; - } - - if (ch1 === "/") { - if (ch2 === "=") { - return { - type: Token.Punctuator, - value: "/=" - }; - } - - return { - type: Token.Punctuator, - value: "/" - }; - } - - return null; - }, - scanComments: function() { - var ch1 = this.peek(); - var ch2 = this.peek(1); - var rest = this.input.substr(2); - var startLine = this.line; - var startChar = this.char; - var self = this; - - function commentToken(label, body, opt) { - var special = ["jshint", "jslint", "members", "member", "globals", "global", "exported"]; - var isSpecial = false; - var value = label + body; - var commentType = "plain"; - opt = opt || {}; - - if (opt.isMultiline) { - value += "*/"; - } - - body = body.replace(/\n/g, " "); - - if (label === "/*" && reg.fallsThrough.test(body)) { - isSpecial = true; - commentType = "falls through"; - } - - special.forEach(function(str) { - if (isSpecial) { - return; - } - if (label === "//" && str !== "jshint") { - return; - } - - if (body.charAt(str.length) === " " && body.substr(0, str.length) === str) { - isSpecial = true; - label = label + str; - body = body.substr(str.length); - } - - if (!isSpecial && body.charAt(0) === " " && body.charAt(str.length + 1) === " " && - body.substr(1, str.length) === str) { - isSpecial = true; - label = label + " " + str; - body = body.substr(str.length + 1); - } - - if (!isSpecial) { - return; - } - - switch (str) { - case "member": - commentType = "members"; - break; - case "global": - commentType = "globals"; - break; - default: - var options = body.split(":").map(function(v) { - return v.replace(/^\s+/, "").replace(/\s+$/, ""); - }); - - if (options.length === 2) { - switch (options[0]) { - case "ignore": - switch (options[1]) { - case "start": - self.ignoringLinterErrors = true; - isSpecial = false; - break; - case "end": - self.ignoringLinterErrors = false; - isSpecial = false; - break; - } - } - } - - commentType = str; - } - }); - - return { - type: Token.Comment, - commentType: commentType, - value: value, - body: body, - isSpecial: isSpecial, - isMultiline: opt.isMultiline || false, - isMalformed: opt.isMalformed || false - }; - } - if (ch1 === "*" && ch2 === "/") { - this.trigger("error", { - code: "E018", - line: startLine, - character: startChar - }); - - this.skip(2); - return null; - } - if (ch1 !== "/" || (ch2 !== "*" && ch2 !== "/")) { - return null; - } - if (ch2 === "/") { - this.skip(this.input.length); // Skip to the EOL. - return commentToken("//", rest); - } - - var body = ""; - if (ch2 === "*") { - this.inComment = true; - this.skip(2); - - while (this.peek() !== "*" || this.peek(1) !== "/") { - if (this.peek() === "") { // End of Line - body += "\n"; - if (!this.nextLine()) { - this.trigger("error", { - code: "E017", - line: startLine, - character: startChar - }); - - this.inComment = false; - return commentToken("/*", body, { - isMultiline: true, - isMalformed: true - }); - } - } else { - body += this.peek(); - this.skip(); - } - } - - this.skip(2); - this.inComment = false; - return commentToken("/*", body, { isMultiline: true }); - } - }, - scanKeyword: function() { - var result = /^[a-zA-Z_$][a-zA-Z0-9_$]*/.exec(this.input); - var keywords = [ - "if", "in", "do", "var", "for", "new", - "try", "let", "this", "else", "case", - "void", "with", "enum", "while", "break", - "catch", "throw", "const", "yield", "class", - "super", "return", "typeof", "delete", - "switch", "export", "import", "default", - "finally", "extends", "function", "continue", - "debugger", "instanceof" - ]; - - if (result && keywords.indexOf(result[0]) >= 0) { - return { - type: Token.Keyword, - value: result[0] - }; - } - - return null; - }, - scanIdentifier: function() { - var id = ""; - var index = 0; - var type, char; - - function isNonAsciiIdentifierStart(code) { - return code > 256; - } - - function isNonAsciiIdentifierPart(code) { - return code > 256; - } - - function isHexDigit(str) { - return (/^[0-9a-fA-F]$/).test(str); - } - - var readUnicodeEscapeSequence = function() { - index += 1; - - if (this.peek(index) !== "u") { - return null; - } - - var ch1 = this.peek(index + 1); - var ch2 = this.peek(index + 2); - var ch3 = this.peek(index + 3); - var ch4 = this.peek(index + 4); - var code; - - if (isHexDigit(ch1) && isHexDigit(ch2) && isHexDigit(ch3) && isHexDigit(ch4)) { - code = parseInt(ch1 + ch2 + ch3 + ch4, 16); - - if (asciiIdentifierPartTable[code] || isNonAsciiIdentifierPart(code)) { - index += 5; - return "\\u" + ch1 + ch2 + ch3 + ch4; - } - - return null; - } - - return null; - }.bind(this); - - var getIdentifierStart = function() { - var chr = this.peek(index); - var code = chr.charCodeAt(0); - - if (code === 92) { - return readUnicodeEscapeSequence(); - } - - if (code < 128) { - if (asciiIdentifierStartTable[code]) { - index += 1; - return chr; - } - - return null; - } - - if (isNonAsciiIdentifierStart(code)) { - index += 1; - return chr; - } - - return null; - }.bind(this); - - var getIdentifierPart = function() { - var chr = this.peek(index); - var code = chr.charCodeAt(0); - - if (code === 92) { - return readUnicodeEscapeSequence(); - } - - if (code < 128) { - if (asciiIdentifierPartTable[code]) { - index += 1; - return chr; - } - - return null; - } - - if (isNonAsciiIdentifierPart(code)) { - index += 1; - return chr; - } - - return null; - }.bind(this); - - function removeEscapeSequences(id) { - return id.replace(/\\u([0-9a-fA-F]{4})/g, function(m0, codepoint) { - return String.fromCharCode(parseInt(codepoint, 16)); - }); - } - - char = getIdentifierStart(); - if (char === null) { - return null; - } - - id = char; - for (;;) { - char = getIdentifierPart(); - - if (char === null) { - break; - } - - id += char; - } - - switch (id) { - case "true": - case "false": - type = Token.BooleanLiteral; - break; - case "null": - type = Token.NullLiteral; - break; - default: - type = Token.Identifier; - } - - return { - type: type, - value: removeEscapeSequences(id), - text: id, - tokenLength: id.length - }; - }, - scanNumericLiteral: function() { - var index = 0; - var value = ""; - var length = this.input.length; - var char = this.peek(index); - var bad; - var isAllowedDigit = isDecimalDigit; - var base = 10; - var isLegacy = false; - - function isDecimalDigit(str) { - return (/^[0-9]$/).test(str); - } - - function isOctalDigit(str) { - return (/^[0-7]$/).test(str); - } - - function isBinaryDigit(str) { - return (/^[01]$/).test(str); - } - - function isHexDigit(str) { - return (/^[0-9a-fA-F]$/).test(str); - } - - function isIdentifierStart(ch) { - return (ch === "$") || (ch === "_") || (ch === "\\") || - (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z"); - } - - if (char !== "." && !isDecimalDigit(char)) { - return null; - } - - if (char !== ".") { - value = this.peek(index); - index += 1; - char = this.peek(index); - - if (value === "0") { - if (char === "x" || char === "X") { - isAllowedDigit = isHexDigit; - base = 16; - - index += 1; - value += char; - } - if (char === "o" || char === "O") { - isAllowedDigit = isOctalDigit; - base = 8; - - if (!state.inES6(true)) { - this.trigger("warning", { - code: "W119", - line: this.line, - character: this.char, - data: [ "Octal integer literal", "6" ] - }); - } - - index += 1; - value += char; - } - if (char === "b" || char === "B") { - isAllowedDigit = isBinaryDigit; - base = 2; - - if (!state.inES6(true)) { - this.trigger("warning", { - code: "W119", - line: this.line, - character: this.char, - data: [ "Binary integer literal", "6" ] - }); - } - - index += 1; - value += char; - } - if (isOctalDigit(char)) { - isAllowedDigit = isOctalDigit; - base = 8; - isLegacy = true; - bad = false; - - index += 1; - value += char; - } - - if (!isOctalDigit(char) && isDecimalDigit(char)) { - index += 1; - value += char; - } - } - - while (index < length) { - char = this.peek(index); - - if (isLegacy && isDecimalDigit(char)) { - bad = true; - } else if (!isAllowedDigit(char)) { - break; - } - value += char; - index += 1; - } - - if (isAllowedDigit !== isDecimalDigit) { - if (!isLegacy && value.length <= 2) { // 0x - return { - type: Token.NumericLiteral, - value: value, - isMalformed: true - }; - } - - if (index < length) { - char = this.peek(index); - if (isIdentifierStart(char)) { - return null; - } - } - - return { - type: Token.NumericLiteral, - value: value, - base: base, - isLegacy: isLegacy, - isMalformed: false - }; - } - } - - if (char === ".") { - value += char; - index += 1; - - while (index < length) { - char = this.peek(index); - if (!isDecimalDigit(char)) { - break; - } - value += char; - index += 1; - } - } - - if (char === "e" || char === "E") { - value += char; - index += 1; - char = this.peek(index); - - if (char === "+" || char === "-") { - value += this.peek(index); - index += 1; - } - - char = this.peek(index); - if (isDecimalDigit(char)) { - value += char; - index += 1; - - while (index < length) { - char = this.peek(index); - if (!isDecimalDigit(char)) { - break; - } - value += char; - index += 1; - } - } else { - return null; - } - } - - if (index < length) { - char = this.peek(index); - if (isIdentifierStart(char)) { - return null; - } - } - - return { - type: Token.NumericLiteral, - value: value, - base: base, - isMalformed: !isFinite(value) - }; - }, - scanEscapeSequence: function(checks) { - var allowNewLine = false; - var jump = 1; - this.skip(); - var char = this.peek(); - - switch (char) { - case "'": - this.triggerAsync("warning", { - code: "W114", - line: this.line, - character: this.char, - data: [ "\\'" ] - }, checks, function() {return state.jsonMode; }); - break; - case "b": - char = "\\b"; - break; - case "f": - char = "\\f"; - break; - case "n": - char = "\\n"; - break; - case "r": - char = "\\r"; - break; - case "t": - char = "\\t"; - break; - case "0": - char = "\\0"; - var n = parseInt(this.peek(1), 10); - this.triggerAsync("warning", { - code: "W115", - line: this.line, - character: this.char - }, checks, - function() { return n >= 0 && n <= 7 && state.isStrict(); }); - break; - case "u": - var hexCode = this.input.substr(1, 4); - var code = parseInt(hexCode, 16); - if (isNaN(code)) { - this.trigger("warning", { - code: "W052", - line: this.line, - character: this.char, - data: [ "u" + hexCode ] - }); - } - char = String.fromCharCode(code); - jump = 5; - break; - case "v": - this.triggerAsync("warning", { - code: "W114", - line: this.line, - character: this.char, - data: [ "\\v" ] - }, checks, function() { return state.jsonMode; }); - - char = "\v"; - break; - case "x": - var x = parseInt(this.input.substr(1, 2), 16); - - this.triggerAsync("warning", { - code: "W114", - line: this.line, - character: this.char, - data: [ "\\x-" ] - }, checks, function() { return state.jsonMode; }); - - char = String.fromCharCode(x); - jump = 3; - break; - case "\\": - char = "\\\\"; - break; - case "\"": - char = "\\\""; - break; - case "/": - break; - case "": - allowNewLine = true; - char = ""; - break; - } - - return { char: char, jump: jump, allowNewLine: allowNewLine }; - }, - scanTemplateLiteral: function(checks) { - var tokenType; - var value = ""; - var ch; - var startLine = this.line; - var startChar = this.char; - var depth = this.templateStarts.length; - - if (!state.inES6(true)) { - return null; - } else if (this.peek() === "`") { - tokenType = Token.TemplateHead; - this.templateStarts.push({ line: this.line, char: this.char }); - depth = this.templateStarts.length; - this.skip(1); - this.pushContext(Context.Template); - } else if (this.inContext(Context.Template) && this.peek() === "}") { - tokenType = Token.TemplateMiddle; - } else { - return null; - } - - while (this.peek() !== "`") { - while ((ch = this.peek()) === "") { - value += "\n"; - if (!this.nextLine()) { - var startPos = this.templateStarts.pop(); - this.trigger("error", { - code: "E052", - line: startPos.line, - character: startPos.char - }); - return { - type: tokenType, - value: value, - startLine: startLine, - startChar: startChar, - isUnclosed: true, - depth: depth, - context: this.popContext() - }; - } - } - - if (ch === '$' && this.peek(1) === '{') { - value += '${'; - this.skip(2); - return { - type: tokenType, - value: value, - startLine: startLine, - startChar: startChar, - isUnclosed: false, - depth: depth, - context: this.currentContext() - }; - } else if (ch === '\\') { - var escape = this.scanEscapeSequence(checks); - value += escape.char; - this.skip(escape.jump); - } else if (ch !== '`') { - value += ch; - this.skip(1); - } - } - tokenType = tokenType === Token.TemplateHead ? Token.NoSubstTemplate : Token.TemplateTail; - this.skip(1); - this.templateStarts.pop(); - - return { - type: tokenType, - value: value, - startLine: startLine, - startChar: startChar, - isUnclosed: false, - depth: depth, - context: this.popContext() - }; - }, - scanStringLiteral: function(checks) { - var quote = this.peek(); - if (quote !== "\"" && quote !== "'") { - return null; - } - this.triggerAsync("warning", { - code: "W108", - line: this.line, - character: this.char // +1? - }, checks, function() { return state.jsonMode && quote !== "\""; }); - - var value = ""; - var startLine = this.line; - var startChar = this.char; - var allowNewLine = false; - - this.skip(); - - while (this.peek() !== quote) { - if (this.peek() === "") { // End Of Line - - if (!allowNewLine) { - this.trigger("warning", { - code: "W112", - line: this.line, - character: this.char - }); - } else { - allowNewLine = false; - - this.triggerAsync("warning", { - code: "W043", - line: this.line, - character: this.char - }, checks, function() { return !state.option.multistr; }); - - this.triggerAsync("warning", { - code: "W042", - line: this.line, - character: this.char - }, checks, function() { return state.jsonMode && state.option.multistr; }); - } - - if (!this.nextLine()) { - this.trigger("error", { - code: "E029", - line: startLine, - character: startChar - }); - - return { - type: Token.StringLiteral, - value: value, - startLine: startLine, - startChar: startChar, - isUnclosed: true, - quote: quote - }; - } - - } else { // Any character other than End Of Line - - allowNewLine = false; - var char = this.peek(); - var jump = 1; // A length of a jump, after we're done - - if (char < " ") { - this.trigger("warning", { - code: "W113", - line: this.line, - character: this.char, - data: [ "" ] - }); - } - if (char === "\\") { - var parsed = this.scanEscapeSequence(checks); - char = parsed.char; - jump = parsed.jump; - allowNewLine = parsed.allowNewLine; - } - - value += char; - this.skip(jump); - } - } - - this.skip(); - return { - type: Token.StringLiteral, - value: value, - startLine: startLine, - startChar: startChar, - isUnclosed: false, - quote: quote - }; - }, - scanRegExp: function() { - var index = 0; - var length = this.input.length; - var char = this.peek(); - var value = char; - var body = ""; - var flags = []; - var malformed = false; - var isCharSet = false; - var terminated; - - var scanUnexpectedChars = function() { - if (char < " ") { - malformed = true; - this.trigger("warning", { - code: "W048", - line: this.line, - character: this.char - }); - } - if (char === "<") { - malformed = true; - this.trigger("warning", { - code: "W049", - line: this.line, - character: this.char, - data: [ char ] - }); - } - }.bind(this); - if (!this.prereg || char !== "/") { - return null; - } - - index += 1; - terminated = false; - - while (index < length) { - char = this.peek(index); - value += char; - body += char; - - if (isCharSet) { - if (char === "]") { - if (this.peek(index - 1) !== "\\" || this.peek(index - 2) === "\\") { - isCharSet = false; - } - } - - if (char === "\\") { - index += 1; - char = this.peek(index); - body += char; - value += char; - - scanUnexpectedChars(); - } - - index += 1; - continue; - } - - if (char === "\\") { - index += 1; - char = this.peek(index); - body += char; - value += char; - - scanUnexpectedChars(); - - if (char === "/") { - index += 1; - continue; - } - - if (char === "[") { - index += 1; - continue; - } - } - - if (char === "[") { - isCharSet = true; - index += 1; - continue; - } - - if (char === "/") { - body = body.substr(0, body.length - 1); - terminated = true; - index += 1; - break; - } - - index += 1; - } - - if (!terminated) { - this.trigger("error", { - code: "E015", - line: this.line, - character: this.from - }); - - return void this.trigger("fatal", { - line: this.line, - from: this.from - }); - } - - while (index < length) { - char = this.peek(index); - if (!/[gim]/.test(char)) { - break; - } - flags.push(char); - value += char; - index += 1; - } - - try { - new RegExp(body, flags.join("")); - } catch (err) { - malformed = true; - this.trigger("error", { - code: "E016", - line: this.line, - character: this.char, - data: [ err.message ] // Platform dependent! - }); - } - - return { - type: Token.RegExp, - value: value, - flags: flags, - isMalformed: malformed - }; - }, - scanNonBreakingSpaces: function() { - return state.option.nonbsp ? - this.input.search(/(\u00A0)/) : -1; - }, - scanUnsafeChars: function() { - return this.input.search(reg.unsafeChars); - }, - next: function(checks) { - this.from = this.char; - var start; - if (/\s/.test(this.peek())) { - start = this.char; - - while (/\s/.test(this.peek())) { - this.from += 1; - this.skip(); - } - } - - var match = this.scanComments() || - this.scanStringLiteral(checks) || - this.scanTemplateLiteral(checks); - - if (match) { - return match; - } - - match = - this.scanRegExp() || - this.scanPunctuator() || - this.scanKeyword() || - this.scanIdentifier() || - this.scanNumericLiteral(); - - if (match) { - this.skip(match.tokenLength || match.value.length); - return match; - } - - return null; - }, - nextLine: function() { - var char; - - if (this.line >= this.getLines().length) { - return false; - } - - this.input = this.getLines()[this.line]; - this.line += 1; - this.char = 1; - this.from = 1; - - var inputTrimmed = this.input.trim(); - - var startsWith = function() { - return _.some(arguments, function(prefix) { - return inputTrimmed.indexOf(prefix) === 0; - }); - }; - - var endsWith = function() { - return _.some(arguments, function(suffix) { - return inputTrimmed.indexOf(suffix, inputTrimmed.length - suffix.length) !== -1; - }); - }; - if (this.ignoringLinterErrors === true) { - if (!startsWith("/*", "//") && !(this.inComment && endsWith("*/"))) { - this.input = ""; - } - } - - char = this.scanNonBreakingSpaces(); - if (char >= 0) { - this.trigger("warning", { code: "W125", line: this.line, character: char + 1 }); - } - - this.input = this.input.replace(/\t/g, state.tab); - char = this.scanUnsafeChars(); - - if (char >= 0) { - this.trigger("warning", { code: "W100", line: this.line, character: char }); - } - - if (!this.ignoringLinterErrors && state.option.maxlen && - state.option.maxlen < this.input.length) { - var inComment = this.inComment || - startsWith.call(inputTrimmed, "//") || - startsWith.call(inputTrimmed, "/*"); - - var shouldTriggerError = !inComment || !reg.maxlenException.test(inputTrimmed); - - if (shouldTriggerError) { - this.trigger("warning", { code: "W101", line: this.line, character: this.input.length }); - } - } - - return true; - }, - start: function() { - this.nextLine(); - }, - token: function() { - var checks = asyncTrigger(); - var token; - - - function isReserved(token, isProperty) { - if (!token.reserved) { - return false; - } - var meta = token.meta; - - if (meta && meta.isFutureReservedWord && state.inES5()) { - if (!meta.es5) { - return false; - } - if (meta.strictOnly) { - if (!state.option.strict && !state.isStrict()) { - return false; - } - } - - if (isProperty) { - return false; - } - } - - return true; - } - var create = function(type, value, isProperty, token) { - var obj; - - if (type !== "(endline)" && type !== "(end)") { - this.prereg = false; - } - - if (type === "(punctuator)") { - switch (value) { - case ".": - case ")": - case "~": - case "#": - case "]": - case "++": - case "--": - this.prereg = false; - break; - default: - this.prereg = true; - } - - obj = Object.create(state.syntax[value] || state.syntax["(error)"]); - } - - if (type === "(identifier)") { - if (value === "return" || value === "case" || value === "typeof") { - this.prereg = true; - } - - if (_.has(state.syntax, value)) { - obj = Object.create(state.syntax[value] || state.syntax["(error)"]); - if (!isReserved(obj, isProperty && type === "(identifier)")) { - obj = null; - } - } - } - - if (!obj) { - obj = Object.create(state.syntax[type]); - } - - obj.identifier = (type === "(identifier)"); - obj.type = obj.type || type; - obj.value = value; - obj.line = this.line; - obj.character = this.char; - obj.from = this.from; - if (obj.identifier && token) obj.raw_text = token.text || token.value; - if (token && token.startLine && token.startLine !== this.line) { - obj.startLine = token.startLine; - } - if (token && token.context) { - obj.context = token.context; - } - if (token && token.depth) { - obj.depth = token.depth; - } - if (token && token.isUnclosed) { - obj.isUnclosed = token.isUnclosed; - } - - if (isProperty && obj.identifier) { - obj.isProperty = isProperty; - } - - obj.check = checks.check; - - return obj; - }.bind(this); - - for (;;) { - if (!this.input.length) { - if (this.nextLine()) { - return create("(endline)", ""); - } - - if (this.exhausted) { - return null; - } - - this.exhausted = true; - return create("(end)", ""); - } - - token = this.next(checks); - - if (!token) { - if (this.input.length) { - this.trigger("error", { - code: "E024", - line: this.line, - character: this.char, - data: [ this.peek() ] - }); - - this.input = ""; - } - - continue; - } - - switch (token.type) { - case Token.StringLiteral: - this.triggerAsync("String", { - line: this.line, - char: this.char, - from: this.from, - startLine: token.startLine, - startChar: token.startChar, - value: token.value, - quote: token.quote - }, checks, function() { return true; }); - - return create("(string)", token.value, null, token); - - case Token.TemplateHead: - this.trigger("TemplateHead", { - line: this.line, - char: this.char, - from: this.from, - startLine: token.startLine, - startChar: token.startChar, - value: token.value - }); - return create("(template)", token.value, null, token); - - case Token.TemplateMiddle: - this.trigger("TemplateMiddle", { - line: this.line, - char: this.char, - from: this.from, - startLine: token.startLine, - startChar: token.startChar, - value: token.value - }); - return create("(template middle)", token.value, null, token); - - case Token.TemplateTail: - this.trigger("TemplateTail", { - line: this.line, - char: this.char, - from: this.from, - startLine: token.startLine, - startChar: token.startChar, - value: token.value - }); - return create("(template tail)", token.value, null, token); - - case Token.NoSubstTemplate: - this.trigger("NoSubstTemplate", { - line: this.line, - char: this.char, - from: this.from, - startLine: token.startLine, - startChar: token.startChar, - value: token.value - }); - return create("(no subst template)", token.value, null, token); - - case Token.Identifier: - this.triggerAsync("Identifier", { - line: this.line, - char: this.char, - from: this.form, - name: token.value, - raw_name: token.text, - isProperty: state.tokens.curr.id === "." - }, checks, function() { return true; }); - case Token.Keyword: - case Token.NullLiteral: - case Token.BooleanLiteral: - return create("(identifier)", token.value, state.tokens.curr.id === ".", token); - - case Token.NumericLiteral: - if (token.isMalformed) { - this.trigger("warning", { - code: "W045", - line: this.line, - character: this.char, - data: [ token.value ] - }); - } - - this.triggerAsync("warning", { - code: "W114", - line: this.line, - character: this.char, - data: [ "0x-" ] - }, checks, function() { return token.base === 16 && state.jsonMode; }); - - this.triggerAsync("warning", { - code: "W115", - line: this.line, - character: this.char - }, checks, function() { - return state.isStrict() && token.base === 8 && token.isLegacy; - }); - - this.trigger("Number", { - line: this.line, - char: this.char, - from: this.from, - value: token.value, - base: token.base, - isMalformed: token.malformed - }); - - return create("(number)", token.value); - - case Token.RegExp: - return create("(regexp)", token.value); - - case Token.Comment: - state.tokens.curr.comment = true; - - if (token.isSpecial) { - return { - id: '(comment)', - value: token.value, - body: token.body, - type: token.commentType, - isSpecial: token.isSpecial, - line: this.line, - character: this.char, - from: this.from - }; - } - - break; - - case "": - break; - - default: - return create("(punctuator)", token.value); - } - } - } -}; - -exports.Lexer = Lexer; -exports.Context = Context; - -},{"../data/ascii-identifier-data.js":"/node_modules/jshint/data/ascii-identifier-data.js","../lodash":"/node_modules/jshint/lodash.js","./reg.js":"/node_modules/jshint/src/reg.js","./state.js":"/node_modules/jshint/src/state.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/messages.js":[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("../lodash"); - -var errors = { - E001: "Bad option: '{a}'.", - E002: "Bad option value.", - E003: "Expected a JSON value.", - E004: "Input is neither a string nor an array of strings.", - E005: "Input is empty.", - E006: "Unexpected early end of program.", - E007: "Missing \"use strict\" statement.", - E008: "Strict violation.", - E009: "Option 'validthis' can't be used in a global scope.", - E010: "'with' is not allowed in strict mode.", - E011: "'{a}' has already been declared.", - E012: "const '{a}' is initialized to 'undefined'.", - E013: "Attempting to override '{a}' which is a constant.", - E014: "A regular expression literal can be confused with '/='.", - E015: "Unclosed regular expression.", - E016: "Invalid regular expression.", - E017: "Unclosed comment.", - E018: "Unbegun comment.", - E019: "Unmatched '{a}'.", - E020: "Expected '{a}' to match '{b}' from line {c} and instead saw '{d}'.", - E021: "Expected '{a}' and instead saw '{b}'.", - E022: "Line breaking error '{a}'.", - E023: "Missing '{a}'.", - E024: "Unexpected '{a}'.", - E025: "Missing ':' on a case clause.", - E026: "Missing '}' to match '{' from line {a}.", - E027: "Missing ']' to match '[' from line {a}.", - E028: "Illegal comma.", - E029: "Unclosed string.", - E030: "Expected an identifier and instead saw '{a}'.", - E031: "Bad assignment.", // FIXME: Rephrase - E032: "Expected a small integer or 'false' and instead saw '{a}'.", - E033: "Expected an operator and instead saw '{a}'.", - E034: "get/set are ES5 features.", - E035: "Missing property name.", - E036: "Expected to see a statement and instead saw a block.", - E037: null, - E038: null, - E039: "Function declarations are not invocable. Wrap the whole function invocation in parens.", - E040: "Each value should have its own case label.", - E041: "Unrecoverable syntax error.", - E042: "Stopping.", - E043: "Too many errors.", - E044: null, - E045: "Invalid for each loop.", - E046: "A yield statement shall be within a generator function (with syntax: `function*`)", - E047: null, - E048: "{a} declaration not directly within block.", - E049: "A {a} cannot be named '{b}'.", - E050: "Mozilla requires the yield expression to be parenthesized here.", - E051: null, - E052: "Unclosed template literal.", - E053: "Export declaration must be in global scope.", - E054: "Class properties must be methods. Expected '(' but instead saw '{a}'.", - E055: "The '{a}' option cannot be set after any executable code.", - E056: "'{a}' was used before it was declared, which is illegal for '{b}' variables.", - E057: "Invalid meta property: '{a}.{b}'.", - E058: "Missing semicolon." -}; - -var warnings = { - W001: "'hasOwnProperty' is a really bad name.", - W002: "Value of '{a}' may be overwritten in IE 8 and earlier.", - W003: "'{a}' was used before it was defined.", - W004: "'{a}' is already defined.", - W005: "A dot following a number can be confused with a decimal point.", - W006: "Confusing minuses.", - W007: "Confusing plusses.", - W008: "A leading decimal point can be confused with a dot: '{a}'.", - W009: "The array literal notation [] is preferable.", - W010: "The object literal notation {} is preferable.", - W011: null, - W012: null, - W013: null, - W014: "Bad line breaking before '{a}'.", - W015: null, - W016: "Unexpected use of '{a}'.", - W017: "Bad operand.", - W018: "Confusing use of '{a}'.", - W019: "Use the isNaN function to compare with NaN.", - W020: "Read only.", - W021: "Reassignment of '{a}', which is is a {b}. " + - "Use 'var' or 'let' to declare bindings that may change.", - W022: "Do not assign to the exception parameter.", - W023: "Expected an identifier in an assignment and instead saw a function invocation.", - W024: "Expected an identifier and instead saw '{a}' (a reserved word).", - W025: "Missing name in function declaration.", - W026: "Inner functions should be listed at the top of the outer function.", - W027: "Unreachable '{a}' after '{b}'.", - W028: "Label '{a}' on {b} statement.", - W030: "Expected an assignment or function call and instead saw an expression.", - W031: "Do not use 'new' for side effects.", - W032: "Unnecessary semicolon.", - W033: "Missing semicolon.", - W034: "Unnecessary directive \"{a}\".", - W035: "Empty block.", - W036: "Unexpected /*member '{a}'.", - W037: "'{a}' is a statement label.", - W038: "'{a}' used out of scope.", - W039: "'{a}' is not allowed.", - W040: "Possible strict violation.", - W041: "Use '{a}' to compare with '{b}'.", - W042: "Avoid EOL escaping.", - W043: "Bad escaping of EOL. Use option multistr if needed.", - W044: "Bad or unnecessary escaping.", /* TODO(caitp): remove W044 */ - W045: "Bad number '{a}'.", - W046: "Don't use extra leading zeros '{a}'.", - W047: "A trailing decimal point can be confused with a dot: '{a}'.", - W048: "Unexpected control character in regular expression.", - W049: "Unexpected escaped character '{a}' in regular expression.", - W050: "JavaScript URL.", - W051: "Variables should not be deleted.", - W052: "Unexpected '{a}'.", - W053: "Do not use {a} as a constructor.", - W054: "The Function constructor is a form of eval.", - W055: "A constructor name should start with an uppercase letter.", - W056: "Bad constructor.", - W057: "Weird construction. Is 'new' necessary?", - W058: "Missing '()' invoking a constructor.", - W059: "Avoid arguments.{a}.", - W060: "document.write can be a form of eval.", - W061: "eval can be harmful.", - W062: "Wrap an immediate function invocation in parens " + - "to assist the reader in understanding that the expression " + - "is the result of a function, and not the function itself.", - W063: "Math is not a function.", - W064: "Missing 'new' prefix when invoking a constructor.", - W065: "Missing radix parameter.", - W066: "Implied eval. Consider passing a function instead of a string.", - W067: "Bad invocation.", - W068: "Wrapping non-IIFE function literals in parens is unnecessary.", - W069: "['{a}'] is better written in dot notation.", - W070: "Extra comma. (it breaks older versions of IE)", - W071: "This function has too many statements. ({a})", - W072: "This function has too many parameters. ({a})", - W073: "Blocks are nested too deeply. ({a})", - W074: "This function's cyclomatic complexity is too high. ({a})", - W075: "Duplicate {a} '{b}'.", - W076: "Unexpected parameter '{a}' in get {b} function.", - W077: "Expected a single parameter in set {a} function.", - W078: "Setter is defined without getter.", - W079: "Redefinition of '{a}'.", - W080: "It's not necessary to initialize '{a}' to 'undefined'.", - W081: null, - W082: "Function declarations should not be placed in blocks. " + - "Use a function expression or move the statement to the top of " + - "the outer function.", - W083: "Don't make functions within a loop.", - W084: "Assignment in conditional expression", - W085: "Don't use 'with'.", - W086: "Expected a 'break' statement before '{a}'.", - W087: "Forgotten 'debugger' statement?", - W088: "Creating global 'for' variable. Should be 'for (var {a} ...'.", - W089: "The body of a for in should be wrapped in an if statement to filter " + - "unwanted properties from the prototype.", - W090: "'{a}' is not a statement label.", - W091: null, - W093: "Did you mean to return a conditional instead of an assignment?", - W094: "Unexpected comma.", - W095: "Expected a string and instead saw {a}.", - W096: "The '{a}' key may produce unexpected results.", - W097: "Use the function form of \"use strict\".", - W098: "'{a}' is defined but never used.", - W099: null, - W100: "This character may get silently deleted by one or more browsers.", - W101: "Line is too long.", - W102: null, - W103: "The '{a}' property is deprecated.", - W104: "'{a}' is available in ES{b} (use 'esversion: {b}') or Mozilla JS extensions (use moz).", - W105: "Unexpected {a} in '{b}'.", - W106: "Identifier '{a}' is not in camel case.", - W107: "Script URL.", - W108: "Strings must use doublequote.", - W109: "Strings must use singlequote.", - W110: "Mixed double and single quotes.", - W112: "Unclosed string.", - W113: "Control character in string: {a}.", - W114: "Avoid {a}.", - W115: "Octal literals are not allowed in strict mode.", - W116: "Expected '{a}' and instead saw '{b}'.", - W117: "'{a}' is not defined.", - W118: "'{a}' is only available in Mozilla JavaScript extensions (use moz option).", - W119: "'{a}' is only available in ES{b} (use 'esversion: {b}').", - W120: "You might be leaking a variable ({a}) here.", - W121: "Extending prototype of native object: '{a}'.", - W122: "Invalid typeof value '{a}'", - W123: "'{a}' is already defined in outer scope.", - W124: "A generator function shall contain a yield statement.", - W125: "This line contains non-breaking spaces: http://jshint.com/doc/options/#nonbsp", - W126: "Unnecessary grouping operator.", - W127: "Unexpected use of a comma operator.", - W128: "Empty array elements require elision=true.", - W129: "'{a}' is defined in a future version of JavaScript. Use a " + - "different variable name to avoid migration issues.", - W130: "Invalid element after rest element.", - W131: "Invalid parameter after rest parameter.", - W132: "`var` declarations are forbidden. Use `let` or `const` instead.", - W133: "Invalid for-{a} loop left-hand-side: {b}.", - W134: "The '{a}' option is only available when linting ECMAScript {b} code.", - W135: "{a} may not be supported by non-browser environments.", - W136: "'{a}' must be in function scope.", - W137: "Empty destructuring.", - W138: "Regular parameters should not come after default parameters." -}; - -var info = { - I001: "Comma warnings can be turned off with 'laxcomma'.", - I002: null, - I003: "ES5 option is now set per default" -}; - -exports.errors = {}; -exports.warnings = {}; -exports.info = {}; - -_.each(errors, function(desc, code) { - exports.errors[code] = { code: code, desc: desc }; -}); - -_.each(warnings, function(desc, code) { - exports.warnings[code] = { code: code, desc: desc }; -}); - -_.each(info, function(desc, code) { - exports.info[code] = { code: code, desc: desc }; -}); - -},{"../lodash":"/node_modules/jshint/lodash.js"}],"/node_modules/jshint/src/name-stack.js":[function(_dereq_,module,exports){ -"use strict"; - -function NameStack() { - this._stack = []; -} - -Object.defineProperty(NameStack.prototype, "length", { - get: function() { - return this._stack.length; - } -}); -NameStack.prototype.push = function() { - this._stack.push(null); -}; -NameStack.prototype.pop = function() { - this._stack.pop(); -}; -NameStack.prototype.set = function(token) { - this._stack[this.length - 1] = token; -}; -NameStack.prototype.infer = function() { - var nameToken = this._stack[this.length - 1]; - var prefix = ""; - var type; - if (!nameToken || nameToken.type === "class") { - nameToken = this._stack[this.length - 2]; - } - - if (!nameToken) { - return "(empty)"; - } - - type = nameToken.type; - - if (type !== "(string)" && type !== "(number)" && type !== "(identifier)" && type !== "default") { - return "(expression)"; - } - - if (nameToken.accessorType) { - prefix = nameToken.accessorType + " "; - } - - return prefix + nameToken.value; -}; - -module.exports = NameStack; - -},{}],"/node_modules/jshint/src/options.js":[function(_dereq_,module,exports){ -"use strict"; -exports.bool = { - enforcing: { - bitwise : true, - freeze : true, - camelcase : true, - curly : true, - eqeqeq : true, - futurehostile: true, - notypeof : true, - es3 : true, - es5 : true, - forin : true, - funcscope : true, - immed : true, - iterator : true, - newcap : true, - noarg : true, - nocomma : true, - noempty : true, - nonbsp : true, - nonew : true, - undef : true, - singleGroups: false, - varstmt: false, - enforceall : false - }, - relaxing: { - asi : true, - multistr : true, - debug : true, - boss : true, - evil : true, - globalstrict: true, - plusplus : true, - proto : true, - scripturl : true, - sub : true, - supernew : true, - laxbreak : true, - laxcomma : true, - validthis : true, - withstmt : true, - moz : true, - noyield : true, - eqnull : true, - lastsemic : true, - loopfunc : true, - expr : true, - esnext : true, - elision : true, - }, - environments: { - mootools : true, - couch : true, - jasmine : true, - jquery : true, - node : true, - qunit : true, - rhino : true, - shelljs : true, - prototypejs : true, - yui : true, - mocha : true, - module : true, - wsh : true, - worker : true, - nonstandard : true, - browser : true, - browserify : true, - devel : true, - dojo : true, - typed : true, - phantom : true - }, - obsolete: { - onecase : true, // if one case switch statements should be allowed - regexp : true, // if the . should not be allowed in regexp literals - regexdash : true // if unescaped first/last dash (-) inside brackets - } -}; -exports.val = { - maxlen : false, - indent : false, - maxerr : false, - predef : false, - globals : false, - quotmark : false, - - scope : false, - maxstatements: false, - maxdepth : false, - maxparams : false, - maxcomplexity: false, - shadow : false, - strict : true, - unused : true, - latedef : false, - - ignore : false, // start/end ignoring lines of code, bypassing the lexer - - ignoreDelimiters: false, // array of start/end delimiters used to ignore - esversion: 5 -}; -exports.inverted = { - bitwise : true, - forin : true, - newcap : true, - plusplus: true, - regexp : true, - undef : true, - eqeqeq : true, - strict : true -}; - -exports.validNames = Object.keys(exports.val) - .concat(Object.keys(exports.bool.relaxing)) - .concat(Object.keys(exports.bool.enforcing)) - .concat(Object.keys(exports.bool.obsolete)) - .concat(Object.keys(exports.bool.environments)); -exports.renamed = { - eqeq : "eqeqeq", - windows: "wsh", - sloppy : "strict" -}; - -exports.removed = { - nomen: true, - onevar: true, - passfail: true, - white: true, - gcl: true, - smarttabs: true, - trailing: true -}; -exports.noenforceall = { - varstmt: true, - strict: true -}; - -},{}],"/node_modules/jshint/src/reg.js":[function(_dereq_,module,exports){ - -"use strict"; -exports.unsafeString = - /@cc|<\/?|script|\]\s*\]|<\s*!|</i; -exports.unsafeChars = - /[\u0000-\u001f\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; -exports.needEsc = - /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/; - -exports.needEscGlobal = - /[\u0000-\u001f&<"\/\\\u007f-\u009f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g; -exports.starSlash = /\*\//; -exports.identifier = /^([a-zA-Z_$][a-zA-Z0-9_$]*)$/; -exports.javascriptURL = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i; -exports.fallsThrough = /^\s*falls?\sthrough\s*$/; -exports.maxlenException = /^(?:(?:\/\/|\/\*|\*) ?)?[^ ]+$/; - -},{}],"/node_modules/jshint/src/scope-manager.js":[function(_dereq_,module,exports){ -"use strict"; - -var _ = _dereq_("../lodash"); -var events = _dereq_("events"); -var marker = {}; -var scopeManager = function(state, predefined, exported, declared) { - - var _current; - var _scopeStack = []; - - function _newScope(type) { - _current = { - "(labels)": Object.create(null), - "(usages)": Object.create(null), - "(breakLabels)": Object.create(null), - "(parent)": _current, - "(type)": type, - "(params)": (type === "functionparams" || type === "catchparams") ? [] : null - }; - _scopeStack.push(_current); - } - - _newScope("global"); - _current["(predefined)"] = predefined; - - var _currentFunctBody = _current; // this is the block after the params = function - - var usedPredefinedAndGlobals = Object.create(null); - var impliedGlobals = Object.create(null); - var unuseds = []; - var emitter = new events.EventEmitter(); - - function warning(code, token) { - emitter.emit("warning", { - code: code, - token: token, - data: _.slice(arguments, 2) - }); - } - - function error(code, token) { - emitter.emit("warning", { - code: code, - token: token, - data: _.slice(arguments, 2) - }); - } - - function _setupUsages(labelName) { - if (!_current["(usages)"][labelName]) { - _current["(usages)"][labelName] = { - "(modified)": [], - "(reassigned)": [], - "(tokens)": [] - }; - } - } - - var _getUnusedOption = function(unused_opt) { - if (unused_opt === undefined) { - unused_opt = state.option.unused; - } - - if (unused_opt === true) { - unused_opt = "last-param"; - } - - return unused_opt; - }; - - var _warnUnused = function(name, tkn, type, unused_opt) { - var line = tkn.line; - var chr = tkn.from; - var raw_name = tkn.raw_text || name; - - unused_opt = _getUnusedOption(unused_opt); - - var warnable_types = { - "vars": ["var"], - "last-param": ["var", "param"], - "strict": ["var", "param", "last-param"] - }; - - if (unused_opt) { - if (warnable_types[unused_opt] && warnable_types[unused_opt].indexOf(type) !== -1) { - warning("W098", { line: line, from: chr }, raw_name); - } - } - if (unused_opt || type === "var") { - unuseds.push({ - name: name, - line: line, - character: chr - }); - } - }; - function _checkForUnused() { - if (_current["(type)"] === "functionparams") { - _checkParams(); - return; - } - var curentLabels = _current["(labels)"]; - for (var labelName in curentLabels) { - if (curentLabels[labelName]) { - if (curentLabels[labelName]["(type)"] !== "exception" && - curentLabels[labelName]["(unused)"]) { - _warnUnused(labelName, curentLabels[labelName]["(token)"], "var"); - } - } - } - } - function _checkParams() { - var params = _current["(params)"]; - - if (!params) { - return; - } - - var param = params.pop(); - var unused_opt; - - while (param) { - var label = _current["(labels)"][param]; - - unused_opt = _getUnusedOption(state.funct["(unusedOption)"]); - if (param === "undefined") - return; - - if (label["(unused)"]) { - _warnUnused(param, label["(token)"], "param", state.funct["(unusedOption)"]); - } else if (unused_opt === "last-param") { - return; - } - - param = params.pop(); - } - } - function _getLabel(labelName) { - for (var i = _scopeStack.length - 1 ; i >= 0; --i) { - var scopeLabels = _scopeStack[i]["(labels)"]; - if (scopeLabels[labelName]) { - return scopeLabels; - } - } - } - - function usedSoFarInCurrentFunction(labelName) { - for (var i = _scopeStack.length - 1; i >= 0; i--) { - var current = _scopeStack[i]; - if (current["(usages)"][labelName]) { - return current["(usages)"][labelName]; - } - if (current === _currentFunctBody) { - break; - } - } - return false; - } - - function _checkOuterShadow(labelName, token) { - if (state.option.shadow !== "outer") { - return; - } - - var isGlobal = _currentFunctBody["(type)"] === "global", - isNewFunction = _current["(type)"] === "functionparams"; - - var outsideCurrentFunction = !isGlobal; - for (var i = 0; i < _scopeStack.length; i++) { - var stackItem = _scopeStack[i]; - - if (!isNewFunction && _scopeStack[i + 1] === _currentFunctBody) { - outsideCurrentFunction = false; - } - if (outsideCurrentFunction && stackItem["(labels)"][labelName]) { - warning("W123", token, labelName); - } - if (stackItem["(breakLabels)"][labelName]) { - warning("W123", token, labelName); - } - } - } - - function _latedefWarning(type, labelName, token) { - if (state.option.latedef) { - if ((state.option.latedef === true && type === "function") || - type !== "function") { - warning("W003", token, labelName); - } - } - } - - var scopeManagerInst = { - - on: function(names, listener) { - names.split(" ").forEach(function(name) { - emitter.on(name, listener); - }); - }, - - isPredefined: function(labelName) { - return !this.has(labelName) && _.has(_scopeStack[0]["(predefined)"], labelName); - }, - stack: function(type) { - var previousScope = _current; - _newScope(type); - - if (!type && previousScope["(type)"] === "functionparams") { - - _current["(isFuncBody)"] = true; - _current["(context)"] = _currentFunctBody; - _currentFunctBody = _current; - } - }, - - unstack: function() { - var subScope = _scopeStack.length > 1 ? _scopeStack[_scopeStack.length - 2] : null; - var isUnstackingFunctionBody = _current === _currentFunctBody, - isUnstackingFunctionParams = _current["(type)"] === "functionparams", - isUnstackingFunctionOuter = _current["(type)"] === "functionouter"; - - var i, j; - var currentUsages = _current["(usages)"]; - var currentLabels = _current["(labels)"]; - var usedLabelNameList = Object.keys(currentUsages); - - if (currentUsages.__proto__ && usedLabelNameList.indexOf("__proto__") === -1) { - usedLabelNameList.push("__proto__"); - } - - for (i = 0; i < usedLabelNameList.length; i++) { - var usedLabelName = usedLabelNameList[i]; - - var usage = currentUsages[usedLabelName]; - var usedLabel = currentLabels[usedLabelName]; - if (usedLabel) { - var usedLabelType = usedLabel["(type)"]; - - if (usedLabel["(useOutsideOfScope)"] && !state.option.funcscope) { - var usedTokens = usage["(tokens)"]; - if (usedTokens) { - for (j = 0; j < usedTokens.length; j++) { - if (usedLabel["(function)"] === usedTokens[j]["(function)"]) { - error("W038", usedTokens[j], usedLabelName); - } - } - } - } - _current["(labels)"][usedLabelName]["(unused)"] = false; - if (usedLabelType === "const" && usage["(modified)"]) { - for (j = 0; j < usage["(modified)"].length; j++) { - error("E013", usage["(modified)"][j], usedLabelName); - } - } - if ((usedLabelType === "function" || usedLabelType === "class") && - usage["(reassigned)"]) { - for (j = 0; j < usage["(reassigned)"].length; j++) { - error("W021", usage["(reassigned)"][j], usedLabelName, usedLabelType); - } - } - continue; - } - - if (isUnstackingFunctionOuter) { - state.funct["(isCapturing)"] = true; - } - - if (subScope) { - if (!subScope["(usages)"][usedLabelName]) { - subScope["(usages)"][usedLabelName] = usage; - if (isUnstackingFunctionBody) { - subScope["(usages)"][usedLabelName]["(onlyUsedSubFunction)"] = true; - } - } else { - var subScopeUsage = subScope["(usages)"][usedLabelName]; - subScopeUsage["(modified)"] = subScopeUsage["(modified)"].concat(usage["(modified)"]); - subScopeUsage["(tokens)"] = subScopeUsage["(tokens)"].concat(usage["(tokens)"]); - subScopeUsage["(reassigned)"] = - subScopeUsage["(reassigned)"].concat(usage["(reassigned)"]); - subScopeUsage["(onlyUsedSubFunction)"] = false; - } - } else { - if (typeof _current["(predefined)"][usedLabelName] === "boolean") { - delete declared[usedLabelName]; - usedPredefinedAndGlobals[usedLabelName] = marker; - if (_current["(predefined)"][usedLabelName] === false && usage["(reassigned)"]) { - for (j = 0; j < usage["(reassigned)"].length; j++) { - warning("W020", usage["(reassigned)"][j]); - } - } - } - else { - if (usage["(tokens)"]) { - for (j = 0; j < usage["(tokens)"].length; j++) { - var undefinedToken = usage["(tokens)"][j]; - if (!undefinedToken.forgiveUndef) { - if (state.option.undef && !undefinedToken.ignoreUndef) { - warning("W117", undefinedToken, usedLabelName); - } - if (impliedGlobals[usedLabelName]) { - impliedGlobals[usedLabelName].line.push(undefinedToken.line); - } else { - impliedGlobals[usedLabelName] = { - name: usedLabelName, - line: [undefinedToken.line] - }; - } - } - } - } - } - } - } - if (!subScope) { - Object.keys(declared) - .forEach(function(labelNotUsed) { - _warnUnused(labelNotUsed, declared[labelNotUsed], "var"); - }); - } - if (subScope && !isUnstackingFunctionBody && - !isUnstackingFunctionParams && !isUnstackingFunctionOuter) { - var labelNames = Object.keys(currentLabels); - for (i = 0; i < labelNames.length; i++) { - - var defLabelName = labelNames[i]; - if (!currentLabels[defLabelName]["(blockscoped)"] && - currentLabels[defLabelName]["(type)"] !== "exception" && - !this.funct.has(defLabelName, { excludeCurrent: true })) { - subScope["(labels)"][defLabelName] = currentLabels[defLabelName]; - if (_currentFunctBody["(type)"] !== "global") { - subScope["(labels)"][defLabelName]["(useOutsideOfScope)"] = true; - } - delete currentLabels[defLabelName]; - } - } - } - - _checkForUnused(); - - _scopeStack.pop(); - if (isUnstackingFunctionBody) { - _currentFunctBody = _scopeStack[_.findLastIndex(_scopeStack, function(scope) { - return scope["(isFuncBody)"] || scope["(type)"] === "global"; - })]; - } - - _current = subScope; - }, - addParam: function(labelName, token, type) { - type = type || "param"; - - if (type === "exception") { - var previouslyDefinedLabelType = this.funct.labeltype(labelName); - if (previouslyDefinedLabelType && previouslyDefinedLabelType !== "exception") { - if (!state.option.node) { - warning("W002", state.tokens.next, labelName); - } - } - } - if (_.has(_current["(labels)"], labelName)) { - _current["(labels)"][labelName].duplicated = true; - } else { - _checkOuterShadow(labelName, token, type); - - _current["(labels)"][labelName] = { - "(type)" : type, - "(token)": token, - "(unused)": true }; - - _current["(params)"].push(labelName); - } - - if (_.has(_current["(usages)"], labelName)) { - var usage = _current["(usages)"][labelName]; - if (usage["(onlyUsedSubFunction)"]) { - _latedefWarning(type, labelName, token); - } else { - warning("E056", token, labelName, type); - } - } - }, - - validateParams: function() { - if (_currentFunctBody["(type)"] === "global") { - return; - } - - var isStrict = state.isStrict(); - var currentFunctParamScope = _currentFunctBody["(parent)"]; - - if (!currentFunctParamScope["(params)"]) { - return; - } - - currentFunctParamScope["(params)"].forEach(function(labelName) { - var label = currentFunctParamScope["(labels)"][labelName]; - - if (label && label.duplicated) { - if (isStrict) { - warning("E011", label["(token)"], labelName); - } else if (state.option.shadow !== true) { - warning("W004", label["(token)"], labelName); - } - } - }); - }, - - getUsedOrDefinedGlobals: function() { - var list = Object.keys(usedPredefinedAndGlobals); - if (usedPredefinedAndGlobals.__proto__ === marker && - list.indexOf("__proto__") === -1) { - list.push("__proto__"); - } - - return list; - }, - getImpliedGlobals: function() { - var values = _.values(impliedGlobals); - var hasProto = false; - if (impliedGlobals.__proto__) { - hasProto = values.some(function(value) { - return value.name === "__proto__"; - }); - - if (!hasProto) { - values.push(impliedGlobals.__proto__); - } - } - - return values; - }, - getUnuseds: function() { - return unuseds; - }, - - has: function(labelName) { - return Boolean(_getLabel(labelName)); - }, - - labeltype: function(labelName) { - var scopeLabels = _getLabel(labelName); - if (scopeLabels) { - return scopeLabels[labelName]["(type)"]; - } - return null; - }, - addExported: function(labelName) { - var globalLabels = _scopeStack[0]["(labels)"]; - if (_.has(declared, labelName)) { - delete declared[labelName]; - } else if (_.has(globalLabels, labelName)) { - globalLabels[labelName]["(unused)"] = false; - } else { - for (var i = 1; i < _scopeStack.length; i++) { - var scope = _scopeStack[i]; - if (!scope["(type)"]) { - if (_.has(scope["(labels)"], labelName) && - !scope["(labels)"][labelName]["(blockscoped)"]) { - scope["(labels)"][labelName]["(unused)"] = false; - return; - } - } else { - break; - } - } - exported[labelName] = true; - } - }, - setExported: function(labelName, token) { - this.block.use(labelName, token); - }, - addlabel: function(labelName, opts) { - - var type = opts.type; - var token = opts.token; - var isblockscoped = type === "let" || type === "const" || type === "class"; - var isexported = (isblockscoped ? _current : _currentFunctBody)["(type)"] === "global" && - _.has(exported, labelName); - _checkOuterShadow(labelName, token, type); - if (isblockscoped) { - - var declaredInCurrentScope = _current["(labels)"][labelName]; - if (!declaredInCurrentScope && _current === _currentFunctBody && - _current["(type)"] !== "global") { - declaredInCurrentScope = !!_currentFunctBody["(parent)"]["(labels)"][labelName]; - } - if (!declaredInCurrentScope && _current["(usages)"][labelName]) { - var usage = _current["(usages)"][labelName]; - if (usage["(onlyUsedSubFunction)"]) { - _latedefWarning(type, labelName, token); - } else { - warning("E056", token, labelName, type); - } - } - if (declaredInCurrentScope) { - warning("E011", token, labelName); - } - else if (state.option.shadow === "outer") { - if (scopeManagerInst.funct.has(labelName)) { - warning("W004", token, labelName); - } - } - - scopeManagerInst.block.add(labelName, type, token, !isexported); - - } else { - - var declaredInCurrentFunctionScope = scopeManagerInst.funct.has(labelName); - if (!declaredInCurrentFunctionScope && usedSoFarInCurrentFunction(labelName)) { - _latedefWarning(type, labelName, token); - } - if (scopeManagerInst.funct.has(labelName, { onlyBlockscoped: true })) { - warning("E011", token, labelName); - } else if (state.option.shadow !== true) { - if (declaredInCurrentFunctionScope && labelName !== "__proto__") { - if (_currentFunctBody["(type)"] !== "global") { - warning("W004", token, labelName); - } - } - } - - scopeManagerInst.funct.add(labelName, type, token, !isexported); - - if (_currentFunctBody["(type)"] === "global") { - usedPredefinedAndGlobals[labelName] = marker; - } - } - }, - - funct: { - labeltype: function(labelName, options) { - var onlyBlockscoped = options && options.onlyBlockscoped; - var excludeParams = options && options.excludeParams; - var currentScopeIndex = _scopeStack.length - (options && options.excludeCurrent ? 2 : 1); - for (var i = currentScopeIndex; i >= 0; i--) { - var current = _scopeStack[i]; - if (current["(labels)"][labelName] && - (!onlyBlockscoped || current["(labels)"][labelName]["(blockscoped)"])) { - return current["(labels)"][labelName]["(type)"]; - } - var scopeCheck = excludeParams ? _scopeStack[ i - 1 ] : current; - if (scopeCheck && scopeCheck["(type)"] === "functionparams") { - return null; - } - } - return null; - }, - hasBreakLabel: function(labelName) { - for (var i = _scopeStack.length - 1; i >= 0; i--) { - var current = _scopeStack[i]; - - if (current["(breakLabels)"][labelName]) { - return true; - } - if (current["(type)"] === "functionparams") { - return false; - } - } - return false; - }, - has: function(labelName, options) { - return Boolean(this.labeltype(labelName, options)); - }, - add: function(labelName, type, tok, unused) { - _current["(labels)"][labelName] = { - "(type)" : type, - "(token)": tok, - "(blockscoped)": false, - "(function)": _currentFunctBody, - "(unused)": unused }; - } - }, - - block: { - isGlobal: function() { - return _current["(type)"] === "global"; - }, - - use: function(labelName, token) { - var paramScope = _currentFunctBody["(parent)"]; - if (paramScope && paramScope["(labels)"][labelName] && - paramScope["(labels)"][labelName]["(type)"] === "param") { - if (!scopeManagerInst.funct.has(labelName, - { excludeParams: true, onlyBlockscoped: true })) { - paramScope["(labels)"][labelName]["(unused)"] = false; - } - } - - if (token && (state.ignored.W117 || state.option.undef === false)) { - token.ignoreUndef = true; - } - - _setupUsages(labelName); - - if (token) { - token["(function)"] = _currentFunctBody; - _current["(usages)"][labelName]["(tokens)"].push(token); - } - }, - - reassign: function(labelName, token) { - - this.modify(labelName, token); - - _current["(usages)"][labelName]["(reassigned)"].push(token); - }, - - modify: function(labelName, token) { - - _setupUsages(labelName); - - _current["(usages)"][labelName]["(modified)"].push(token); - }, - add: function(labelName, type, tok, unused) { - _current["(labels)"][labelName] = { - "(type)" : type, - "(token)": tok, - "(blockscoped)": true, - "(unused)": unused }; - }, - - addBreakLabel: function(labelName, opts) { - var token = opts.token; - if (scopeManagerInst.funct.hasBreakLabel(labelName)) { - warning("E011", token, labelName); - } - else if (state.option.shadow === "outer") { - if (scopeManagerInst.funct.has(labelName)) { - warning("W004", token, labelName); - } else { - _checkOuterShadow(labelName, token); - } - } - _current["(breakLabels)"][labelName] = token; - } - } - }; - return scopeManagerInst; -}; - -module.exports = scopeManager; - -},{"../lodash":"/node_modules/jshint/lodash.js","events":"/node_modules/browserify/node_modules/events/events.js"}],"/node_modules/jshint/src/state.js":[function(_dereq_,module,exports){ -"use strict"; -var NameStack = _dereq_("./name-stack.js"); - -var state = { - syntax: {}, - isStrict: function() { - return this.directive["use strict"] || this.inClassBody || - this.option.module || this.option.strict === "implied"; - }, - - inMoz: function() { - return this.option.moz; - }, - inES6: function() { - return this.option.moz || this.option.esversion >= 6; - }, - inES5: function(strict) { - if (strict) { - return (!this.option.esversion || this.option.esversion === 5) && !this.option.moz; - } - return !this.option.esversion || this.option.esversion >= 5 || this.option.moz; - }, - - - reset: function() { - this.tokens = { - prev: null, - next: null, - curr: null - }; - - this.option = {}; - this.funct = null; - this.ignored = {}; - this.directive = {}; - this.jsonMode = false; - this.jsonWarnings = []; - this.lines = []; - this.tab = ""; - this.cache = {}; // Node.JS doesn't have Map. Sniff. - this.ignoredLines = {}; - this.forinifcheckneeded = false; - this.nameStack = new NameStack(); - this.inClassBody = false; - } -}; - -exports.state = state; - -},{"./name-stack.js":"/node_modules/jshint/src/name-stack.js"}],"/node_modules/jshint/src/style.js":[function(_dereq_,module,exports){ -"use strict"; - -exports.register = function(linter) { - - linter.on("Identifier", function style_scanProto(data) { - if (linter.getOption("proto")) { - return; - } - - if (data.name === "__proto__") { - linter.warn("W103", { - line: data.line, - char: data.char, - data: [ data.name, "6" ] - }); - } - }); - - linter.on("Identifier", function style_scanIterator(data) { - if (linter.getOption("iterator")) { - return; - } - - if (data.name === "__iterator__") { - linter.warn("W103", { - line: data.line, - char: data.char, - data: [ data.name ] - }); - } - }); - - linter.on("Identifier", function style_scanCamelCase(data) { - if (!linter.getOption("camelcase")) { - return; - } - - if (data.name.replace(/^_+|_+$/g, "").indexOf("_") > -1 && !data.name.match(/^[A-Z0-9_]*$/)) { - linter.warn("W106", { - line: data.line, - char: data.from, - data: [ data.name ] - }); - } - }); - - linter.on("String", function style_scanQuotes(data) { - var quotmark = linter.getOption("quotmark"); - var code; - - if (!quotmark) { - return; - } - - if (quotmark === "single" && data.quote !== "'") { - code = "W109"; - } - - if (quotmark === "double" && data.quote !== "\"") { - code = "W108"; - } - - if (quotmark === true) { - if (!linter.getCache("quotmark")) { - linter.setCache("quotmark", data.quote); - } - - if (linter.getCache("quotmark") !== data.quote) { - code = "W110"; - } - } - - if (code) { - linter.warn(code, { - line: data.line, - char: data.char, - }); - } - }); - - linter.on("Number", function style_scanNumbers(data) { - if (data.value.charAt(0) === ".") { - linter.warn("W008", { - line: data.line, - char: data.char, - data: [ data.value ] - }); - } - - if (data.value.substr(data.value.length - 1) === ".") { - linter.warn("W047", { - line: data.line, - char: data.char, - data: [ data.value ] - }); - } - - if (/^00+/.test(data.value)) { - linter.warn("W046", { - line: data.line, - char: data.char, - data: [ data.value ] - }); - } - }); - - linter.on("String", function style_scanJavaScriptURLs(data) { - var re = /^(?:javascript|jscript|ecmascript|vbscript|livescript)\s*:/i; - - if (linter.getOption("scripturl")) { - return; - } - - if (re.test(data.value)) { - linter.warn("W107", { - line: data.line, - char: data.char - }); - } - }); -}; - -},{}],"/node_modules/jshint/src/vars.js":[function(_dereq_,module,exports){ - -"use strict"; - -exports.reservedVars = { - arguments : false, - NaN : false -}; - -exports.ecmaIdentifiers = { - 3: { - Array : false, - Boolean : false, - Date : false, - decodeURI : false, - decodeURIComponent : false, - encodeURI : false, - encodeURIComponent : false, - Error : false, - "eval" : false, - EvalError : false, - Function : false, - hasOwnProperty : false, - isFinite : false, - isNaN : false, - Math : false, - Number : false, - Object : false, - parseInt : false, - parseFloat : false, - RangeError : false, - ReferenceError : false, - RegExp : false, - String : false, - SyntaxError : false, - TypeError : false, - URIError : false - }, - 5: { - JSON : false - }, - 6: { - Map : false, - Promise : false, - Proxy : false, - Reflect : false, - Set : false, - Symbol : false, - WeakMap : false, - WeakSet : false - } -}; - -exports.browser = { - Audio : false, - Blob : false, - addEventListener : false, - applicationCache : false, - atob : false, - blur : false, - btoa : false, - cancelAnimationFrame : false, - CanvasGradient : false, - CanvasPattern : false, - CanvasRenderingContext2D: false, - CSS : false, - clearInterval : false, - clearTimeout : false, - close : false, - closed : false, - Comment : false, - CustomEvent : false, - DOMParser : false, - defaultStatus : false, - Document : false, - document : false, - DocumentFragment : false, - Element : false, - ElementTimeControl : false, - Event : false, - event : false, - fetch : false, - FileReader : false, - FormData : false, - focus : false, - frames : false, - getComputedStyle : false, - HTMLElement : false, - HTMLAnchorElement : false, - HTMLBaseElement : false, - HTMLBlockquoteElement: false, - HTMLBodyElement : false, - HTMLBRElement : false, - HTMLButtonElement : false, - HTMLCanvasElement : false, - HTMLCollection : false, - HTMLDirectoryElement : false, - HTMLDivElement : false, - HTMLDListElement : false, - HTMLFieldSetElement : false, - HTMLFontElement : false, - HTMLFormElement : false, - HTMLFrameElement : false, - HTMLFrameSetElement : false, - HTMLHeadElement : false, - HTMLHeadingElement : false, - HTMLHRElement : false, - HTMLHtmlElement : false, - HTMLIFrameElement : false, - HTMLImageElement : false, - HTMLInputElement : false, - HTMLIsIndexElement : false, - HTMLLabelElement : false, - HTMLLayerElement : false, - HTMLLegendElement : false, - HTMLLIElement : false, - HTMLLinkElement : false, - HTMLMapElement : false, - HTMLMenuElement : false, - HTMLMetaElement : false, - HTMLModElement : false, - HTMLObjectElement : false, - HTMLOListElement : false, - HTMLOptGroupElement : false, - HTMLOptionElement : false, - HTMLParagraphElement : false, - HTMLParamElement : false, - HTMLPreElement : false, - HTMLQuoteElement : false, - HTMLScriptElement : false, - HTMLSelectElement : false, - HTMLStyleElement : false, - HTMLTableCaptionElement: false, - HTMLTableCellElement : false, - HTMLTableColElement : false, - HTMLTableElement : false, - HTMLTableRowElement : false, - HTMLTableSectionElement: false, - HTMLTemplateElement : false, - HTMLTextAreaElement : false, - HTMLTitleElement : false, - HTMLUListElement : false, - HTMLVideoElement : false, - history : false, - Image : false, - Intl : false, - length : false, - localStorage : false, - location : false, - matchMedia : false, - MessageChannel : false, - MessageEvent : false, - MessagePort : false, - MouseEvent : false, - moveBy : false, - moveTo : false, - MutationObserver : false, - name : false, - Node : false, - NodeFilter : false, - NodeList : false, - Notification : false, - navigator : false, - onbeforeunload : true, - onblur : true, - onerror : true, - onfocus : true, - onload : true, - onresize : true, - onunload : true, - open : false, - openDatabase : false, - opener : false, - Option : false, - parent : false, - performance : false, - print : false, - Range : false, - requestAnimationFrame : false, - removeEventListener : false, - resizeBy : false, - resizeTo : false, - screen : false, - scroll : false, - scrollBy : false, - scrollTo : false, - sessionStorage : false, - setInterval : false, - setTimeout : false, - SharedWorker : false, - status : false, - SVGAElement : false, - SVGAltGlyphDefElement: false, - SVGAltGlyphElement : false, - SVGAltGlyphItemElement: false, - SVGAngle : false, - SVGAnimateColorElement: false, - SVGAnimateElement : false, - SVGAnimateMotionElement: false, - SVGAnimateTransformElement: false, - SVGAnimatedAngle : false, - SVGAnimatedBoolean : false, - SVGAnimatedEnumeration: false, - SVGAnimatedInteger : false, - SVGAnimatedLength : false, - SVGAnimatedLengthList: false, - SVGAnimatedNumber : false, - SVGAnimatedNumberList: false, - SVGAnimatedPathData : false, - SVGAnimatedPoints : false, - SVGAnimatedPreserveAspectRatio: false, - SVGAnimatedRect : false, - SVGAnimatedString : false, - SVGAnimatedTransformList: false, - SVGAnimationElement : false, - SVGCSSRule : false, - SVGCircleElement : false, - SVGClipPathElement : false, - SVGColor : false, - SVGColorProfileElement: false, - SVGColorProfileRule : false, - SVGComponentTransferFunctionElement: false, - SVGCursorElement : false, - SVGDefsElement : false, - SVGDescElement : false, - SVGDocument : false, - SVGElement : false, - SVGElementInstance : false, - SVGElementInstanceList: false, - SVGEllipseElement : false, - SVGExternalResourcesRequired: false, - SVGFEBlendElement : false, - SVGFEColorMatrixElement: false, - SVGFEComponentTransferElement: false, - SVGFECompositeElement: false, - SVGFEConvolveMatrixElement: false, - SVGFEDiffuseLightingElement: false, - SVGFEDisplacementMapElement: false, - SVGFEDistantLightElement: false, - SVGFEFloodElement : false, - SVGFEFuncAElement : false, - SVGFEFuncBElement : false, - SVGFEFuncGElement : false, - SVGFEFuncRElement : false, - SVGFEGaussianBlurElement: false, - SVGFEImageElement : false, - SVGFEMergeElement : false, - SVGFEMergeNodeElement: false, - SVGFEMorphologyElement: false, - SVGFEOffsetElement : false, - SVGFEPointLightElement: false, - SVGFESpecularLightingElement: false, - SVGFESpotLightElement: false, - SVGFETileElement : false, - SVGFETurbulenceElement: false, - SVGFilterElement : false, - SVGFilterPrimitiveStandardAttributes: false, - SVGFitToViewBox : false, - SVGFontElement : false, - SVGFontFaceElement : false, - SVGFontFaceFormatElement: false, - SVGFontFaceNameElement: false, - SVGFontFaceSrcElement: false, - SVGFontFaceUriElement: false, - SVGForeignObjectElement: false, - SVGGElement : false, - SVGGlyphElement : false, - SVGGlyphRefElement : false, - SVGGradientElement : false, - SVGHKernElement : false, - SVGICCColor : false, - SVGImageElement : false, - SVGLangSpace : false, - SVGLength : false, - SVGLengthList : false, - SVGLineElement : false, - SVGLinearGradientElement: false, - SVGLocatable : false, - SVGMPathElement : false, - SVGMarkerElement : false, - SVGMaskElement : false, - SVGMatrix : false, - SVGMetadataElement : false, - SVGMissingGlyphElement: false, - SVGNumber : false, - SVGNumberList : false, - SVGPaint : false, - SVGPathElement : false, - SVGPathSeg : false, - SVGPathSegArcAbs : false, - SVGPathSegArcRel : false, - SVGPathSegClosePath : false, - SVGPathSegCurvetoCubicAbs: false, - SVGPathSegCurvetoCubicRel: false, - SVGPathSegCurvetoCubicSmoothAbs: false, - SVGPathSegCurvetoCubicSmoothRel: false, - SVGPathSegCurvetoQuadraticAbs: false, - SVGPathSegCurvetoQuadraticRel: false, - SVGPathSegCurvetoQuadraticSmoothAbs: false, - SVGPathSegCurvetoQuadraticSmoothRel: false, - SVGPathSegLinetoAbs : false, - SVGPathSegLinetoHorizontalAbs: false, - SVGPathSegLinetoHorizontalRel: false, - SVGPathSegLinetoRel : false, - SVGPathSegLinetoVerticalAbs: false, - SVGPathSegLinetoVerticalRel: false, - SVGPathSegList : false, - SVGPathSegMovetoAbs : false, - SVGPathSegMovetoRel : false, - SVGPatternElement : false, - SVGPoint : false, - SVGPointList : false, - SVGPolygonElement : false, - SVGPolylineElement : false, - SVGPreserveAspectRatio: false, - SVGRadialGradientElement: false, - SVGRect : false, - SVGRectElement : false, - SVGRenderingIntent : false, - SVGSVGElement : false, - SVGScriptElement : false, - SVGSetElement : false, - SVGStopElement : false, - SVGStringList : false, - SVGStylable : false, - SVGStyleElement : false, - SVGSwitchElement : false, - SVGSymbolElement : false, - SVGTRefElement : false, - SVGTSpanElement : false, - SVGTests : false, - SVGTextContentElement: false, - SVGTextElement : false, - SVGTextPathElement : false, - SVGTextPositioningElement: false, - SVGTitleElement : false, - SVGTransform : false, - SVGTransformList : false, - SVGTransformable : false, - SVGURIReference : false, - SVGUnitTypes : false, - SVGUseElement : false, - SVGVKernElement : false, - SVGViewElement : false, - SVGViewSpec : false, - SVGZoomAndPan : false, - Text : false, - TextDecoder : false, - TextEncoder : false, - TimeEvent : false, - top : false, - URL : false, - WebGLActiveInfo : false, - WebGLBuffer : false, - WebGLContextEvent : false, - WebGLFramebuffer : false, - WebGLProgram : false, - WebGLRenderbuffer : false, - WebGLRenderingContext: false, - WebGLShader : false, - WebGLShaderPrecisionFormat: false, - WebGLTexture : false, - WebGLUniformLocation : false, - WebSocket : false, - window : false, - Window : false, - Worker : false, - XDomainRequest : false, - XMLHttpRequest : false, - XMLSerializer : false, - XPathEvaluator : false, - XPathException : false, - XPathExpression : false, - XPathNamespace : false, - XPathNSResolver : false, - XPathResult : false -}; - -exports.devel = { - alert : false, - confirm: false, - console: false, - Debug : false, - opera : false, - prompt : false -}; - -exports.worker = { - importScripts : true, - postMessage : true, - self : true, - FileReaderSync : true -}; -exports.nonstandard = { - escape : false, - unescape: false -}; - -exports.couch = { - "require" : false, - respond : false, - getRow : false, - emit : false, - send : false, - start : false, - sum : false, - log : false, - exports : false, - module : false, - provides : false -}; - -exports.node = { - __filename : false, - __dirname : false, - GLOBAL : false, - global : false, - module : false, - require : false, - - Buffer : true, - console : true, - exports : true, - process : true, - setTimeout : true, - clearTimeout : true, - setInterval : true, - clearInterval : true, - setImmediate : true, // v0.9.1+ - clearImmediate: true // v0.9.1+ -}; - -exports.browserify = { - __filename : false, - __dirname : false, - global : false, - module : false, - require : false, - Buffer : true, - exports : true, - process : true -}; - -exports.phantom = { - phantom : true, - require : true, - WebPage : true, - console : true, // in examples, but undocumented - exports : true // v1.7+ -}; - -exports.qunit = { - asyncTest : false, - deepEqual : false, - equal : false, - expect : false, - module : false, - notDeepEqual : false, - notEqual : false, - notPropEqual : false, - notStrictEqual : false, - ok : false, - propEqual : false, - QUnit : false, - raises : false, - start : false, - stop : false, - strictEqual : false, - test : false, - "throws" : false -}; - -exports.rhino = { - defineClass : false, - deserialize : false, - gc : false, - help : false, - importClass : false, - importPackage: false, - "java" : false, - load : false, - loadClass : false, - Packages : false, - print : false, - quit : false, - readFile : false, - readUrl : false, - runCommand : false, - seal : false, - serialize : false, - spawn : false, - sync : false, - toint32 : false, - version : false -}; - -exports.shelljs = { - target : false, - echo : false, - exit : false, - cd : false, - pwd : false, - ls : false, - find : false, - cp : false, - rm : false, - mv : false, - mkdir : false, - test : false, - cat : false, - sed : false, - grep : false, - which : false, - dirs : false, - pushd : false, - popd : false, - env : false, - exec : false, - chmod : false, - config : false, - error : false, - tempdir : false -}; - -exports.typed = { - ArrayBuffer : false, - ArrayBufferView : false, - DataView : false, - Float32Array : false, - Float64Array : false, - Int16Array : false, - Int32Array : false, - Int8Array : false, - Uint16Array : false, - Uint32Array : false, - Uint8Array : false, - Uint8ClampedArray : false -}; - -exports.wsh = { - ActiveXObject : true, - Enumerator : true, - GetObject : true, - ScriptEngine : true, - ScriptEngineBuildVersion : true, - ScriptEngineMajorVersion : true, - ScriptEngineMinorVersion : true, - VBArray : true, - WSH : true, - WScript : true, - XDomainRequest : true -}; - -exports.dojo = { - dojo : false, - dijit : false, - dojox : false, - define : false, - "require": false -}; - -exports.jquery = { - "$" : false, - jQuery : false -}; - -exports.mootools = { - "$" : false, - "$$" : false, - Asset : false, - Browser : false, - Chain : false, - Class : false, - Color : false, - Cookie : false, - Core : false, - Document : false, - DomReady : false, - DOMEvent : false, - DOMReady : false, - Drag : false, - Element : false, - Elements : false, - Event : false, - Events : false, - Fx : false, - Group : false, - Hash : false, - HtmlTable : false, - IFrame : false, - IframeShim : false, - InputValidator: false, - instanceOf : false, - Keyboard : false, - Locale : false, - Mask : false, - MooTools : false, - Native : false, - Options : false, - OverText : false, - Request : false, - Scroller : false, - Slick : false, - Slider : false, - Sortables : false, - Spinner : false, - Swiff : false, - Tips : false, - Type : false, - typeOf : false, - URI : false, - Window : false -}; - -exports.prototypejs = { - "$" : false, - "$$" : false, - "$A" : false, - "$F" : false, - "$H" : false, - "$R" : false, - "$break" : false, - "$continue" : false, - "$w" : false, - Abstract : false, - Ajax : false, - Class : false, - Enumerable : false, - Element : false, - Event : false, - Field : false, - Form : false, - Hash : false, - Insertion : false, - ObjectRange : false, - PeriodicalExecuter: false, - Position : false, - Prototype : false, - Selector : false, - Template : false, - Toggle : false, - Try : false, - Autocompleter : false, - Builder : false, - Control : false, - Draggable : false, - Draggables : false, - Droppables : false, - Effect : false, - Sortable : false, - SortableObserver : false, - Sound : false, - Scriptaculous : false -}; - -exports.yui = { - YUI : false, - Y : false, - YUI_config: false -}; - -exports.mocha = { - mocha : false, - describe : false, - xdescribe : false, - it : false, - xit : false, - context : false, - xcontext : false, - before : false, - after : false, - beforeEach : false, - afterEach : false, - suite : false, - test : false, - setup : false, - teardown : false, - suiteSetup : false, - suiteTeardown : false -}; - -exports.jasmine = { - jasmine : false, - describe : false, - xdescribe : false, - it : false, - xit : false, - beforeEach : false, - afterEach : false, - setFixtures : false, - loadFixtures: false, - spyOn : false, - expect : false, - runs : false, - waitsFor : false, - waits : false, - beforeAll : false, - afterAll : false, - fail : false, - fdescribe : false, - fit : false, - pending : false -}; - -},{}]},{},["/node_modules/jshint/src/jshint.js"]); - -}); - -ace.define("ace/mode/javascript_worker",["require","exports","module","ace/lib/oop","ace/worker/mirror","ace/mode/javascript/jshint"], function(require, exports, module) { -"use strict"; - -var oop = require("../lib/oop"); -var Mirror = require("../worker/mirror").Mirror; -var lint = require("./javascript/jshint").JSHINT; - -function startRegex(arr) { - return RegExp("^(" + arr.join("|") + ")"); -} - -var disabledWarningsRe = startRegex([ - "Bad for in variable '(.+)'.", - 'Missing "use strict"' -]); -var errorsRe = startRegex([ - "Unexpected", - "Expected ", - "Confusing (plus|minus)", - "\\{a\\} unterminated regular expression", - "Unclosed ", - "Unmatched ", - "Unbegun comment", - "Bad invocation", - "Missing space after", - "Missing operator at" -]); -var infoRe = startRegex([ - "Expected an assignment", - "Bad escapement of EOL", - "Unexpected comma", - "Unexpected space", - "Missing radix parameter.", - "A leading decimal point can", - "\\['{a}'\\] is better written in dot notation.", - "'{a}' used out of scope" -]); - -var JavaScriptWorker = exports.JavaScriptWorker = function(sender) { - Mirror.call(this, sender); - this.setTimeout(500); - this.setOptions(); -}; - -oop.inherits(JavaScriptWorker, Mirror); - -(function() { - this.setOptions = function(options) { - this.options = options || { - esnext: true, - moz: true, - devel: true, - browser: true, - node: true, - laxcomma: true, - laxbreak: true, - lastsemic: true, - onevar: false, - passfail: false, - maxerr: 100, - expr: true, - multistr: true, - globalstrict: true - }; - this.doc.getValue() && this.deferredUpdate.schedule(100); - }; - - this.changeOptions = function(newOptions) { - oop.mixin(this.options, newOptions); - this.doc.getValue() && this.deferredUpdate.schedule(100); - }; - - this.isValidJS = function(str) { - try { - eval("throw 0;" + str); - } catch(e) { - if (e === 0) - return true; - } - return false - }; - - this.onUpdate = function() { - var value = this.doc.getValue(); - value = value.replace(/^#!.*\n/, "\n"); - if (!value) - return this.sender.emit("annotate", []); - - var errors = []; - var maxErrorLevel = this.isValidJS(value) ? "warning" : "error"; - lint(value, this.options); - var results = lint.errors; - - var errorAdded = false - for (var i = 0; i < results.length; i++) { - var error = results[i]; - if (!error) - continue; - var raw = error.raw; - var type = "warning"; - - if (raw == "Missing semicolon.") { - var str = error.evidence.substr(error.character); - str = str.charAt(str.search(/\S/)); - if (maxErrorLevel == "error" && str && /[\w\d{(['"]/.test(str)) { - error.reason = 'Missing ";" before statement'; - type = "error"; - } else { - type = "info"; - } - } - else if (disabledWarningsRe.test(raw)) { - continue; - } - else if (infoRe.test(raw)) { - type = "info" - } - else if (errorsRe.test(raw)) { - errorAdded = true; - type = maxErrorLevel; - } - else if (raw == "'{a}' is not defined.") { - type = "warning"; - } - else if (raw == "'{a}' is defined but never used.") { - type = "info"; - } - - errors.push({ - row: error.line-1, - column: error.character-1, - text: error.reason, - type: type, - raw: raw - }); - - if (errorAdded) { - } - } - - this.sender.emit("annotate", errors); - }; - -}).call(JavaScriptWorker.prototype); - -}); - -ace.define("ace/lib/es5-shim",["require","exports","module"], function(require, exports, module) { - -function Empty() {} - -if (!Function.prototype.bind) { - Function.prototype.bind = function bind(that) { // .length is 1 - var target = this; - if (typeof target != "function") { - throw new TypeError("Function.prototype.bind called on incompatible " + target); - } - var args = slice.call(arguments, 1); // for normal call - var bound = function () { - - if (this instanceof bound) { - - var result = target.apply( - this, - args.concat(slice.call(arguments)) - ); - if (Object(result) === result) { - return result; - } - return this; - - } else { - return target.apply( - that, - args.concat(slice.call(arguments)) - ); - - } - - }; - if(target.prototype) { - Empty.prototype = target.prototype; - bound.prototype = new Empty(); - Empty.prototype = null; - } - return bound; - }; -} -var call = Function.prototype.call; -var prototypeOfArray = Array.prototype; -var prototypeOfObject = Object.prototype; -var slice = prototypeOfArray.slice; -var _toString = call.bind(prototypeOfObject.toString); -var owns = call.bind(prototypeOfObject.hasOwnProperty); -var defineGetter; -var defineSetter; -var lookupGetter; -var lookupSetter; -var supportsAccessors; -if ((supportsAccessors = owns(prototypeOfObject, "__defineGetter__"))) { - defineGetter = call.bind(prototypeOfObject.__defineGetter__); - defineSetter = call.bind(prototypeOfObject.__defineSetter__); - lookupGetter = call.bind(prototypeOfObject.__lookupGetter__); - lookupSetter = call.bind(prototypeOfObject.__lookupSetter__); -} -if ([1,2].splice(0).length != 2) { - if(function() { // test IE < 9 to splice bug - see issue #138 - function makeArray(l) { - var a = new Array(l+2); - a[0] = a[1] = 0; - return a; - } - var array = [], lengthBefore; - - array.splice.apply(array, makeArray(20)); - array.splice.apply(array, makeArray(26)); - - lengthBefore = array.length; //46 - array.splice(5, 0, "XXX"); // add one element - - lengthBefore + 1 == array.length - - if (lengthBefore + 1 == array.length) { - return true;// has right splice implementation without bugs - } - }()) {//IE 6/7 - var array_splice = Array.prototype.splice; - Array.prototype.splice = function(start, deleteCount) { - if (!arguments.length) { - return []; - } else { - return array_splice.apply(this, [ - start === void 0 ? 0 : start, - deleteCount === void 0 ? (this.length - start) : deleteCount - ].concat(slice.call(arguments, 2))) - } - }; - } else {//IE8 - Array.prototype.splice = function(pos, removeCount){ - var length = this.length; - if (pos > 0) { - if (pos > length) - pos = length; - } else if (pos == void 0) { - pos = 0; - } else if (pos < 0) { - pos = Math.max(length + pos, 0); - } - - if (!(pos+removeCount < length)) - removeCount = length - pos; - - var removed = this.slice(pos, pos+removeCount); - var insert = slice.call(arguments, 2); - var add = insert.length; - if (pos === length) { - if (add) { - this.push.apply(this, insert); - } - } else { - var remove = Math.min(removeCount, length - pos); - var tailOldPos = pos + remove; - var tailNewPos = tailOldPos + add - remove; - var tailCount = length - tailOldPos; - var lengthAfterRemove = length - remove; - - if (tailNewPos < tailOldPos) { // case A - for (var i = 0; i < tailCount; ++i) { - this[tailNewPos+i] = this[tailOldPos+i]; - } - } else if (tailNewPos > tailOldPos) { // case B - for (i = tailCount; i--; ) { - this[tailNewPos+i] = this[tailOldPos+i]; - } - } // else, add == remove (nothing to do) - - if (add && pos === lengthAfterRemove) { - this.length = lengthAfterRemove; // truncate array - this.push.apply(this, insert); - } else { - this.length = lengthAfterRemove + add; // reserves space - for (i = 0; i < add; ++i) { - this[pos+i] = insert[i]; - } - } - } - return removed; - }; - } -} -if (!Array.isArray) { - Array.isArray = function isArray(obj) { - return _toString(obj) == "[object Array]"; - }; -} -var boxedString = Object("a"), - splitString = boxedString[0] != "a" || !(0 in boxedString); - -if (!Array.prototype.forEach) { - Array.prototype.forEach = function forEach(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - thisp = arguments[1], - i = -1, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(); // TODO message - } - - while (++i < length) { - if (i in self) { - fun.call(thisp, self[i], i, object); - } - } - }; -} -if (!Array.prototype.map) { - Array.prototype.map = function map(fun /*, thisp*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = Array(length), - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) - result[i] = fun.call(thisp, self[i], i, object); - } - return result; - }; -} -if (!Array.prototype.filter) { - Array.prototype.filter = function filter(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - result = [], - value, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self) { - value = self[i]; - if (fun.call(thisp, value, i, object)) { - result.push(value); - } - } - } - return result; - }; -} -if (!Array.prototype.every) { - Array.prototype.every = function every(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && !fun.call(thisp, self[i], i, object)) { - return false; - } - } - return true; - }; -} -if (!Array.prototype.some) { - Array.prototype.some = function some(fun /*, thisp */) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0, - thisp = arguments[1]; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - - for (var i = 0; i < length; i++) { - if (i in self && fun.call(thisp, self[i], i, object)) { - return true; - } - } - return false; - }; -} -if (!Array.prototype.reduce) { - Array.prototype.reduce = function reduce(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - if (!length && arguments.length == 1) { - throw new TypeError("reduce of empty array with no initial value"); - } - - var i = 0; - var result; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i++]; - break; - } - if (++i >= length) { - throw new TypeError("reduce of empty array with no initial value"); - } - } while (true); - } - - for (; i < length; i++) { - if (i in self) { - result = fun.call(void 0, result, self[i], i, object); - } - } - - return result; - }; -} -if (!Array.prototype.reduceRight) { - Array.prototype.reduceRight = function reduceRight(fun /*, initial*/) { - var object = toObject(this), - self = splitString && _toString(this) == "[object String]" ? - this.split("") : - object, - length = self.length >>> 0; - if (_toString(fun) != "[object Function]") { - throw new TypeError(fun + " is not a function"); - } - if (!length && arguments.length == 1) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - - var result, i = length - 1; - if (arguments.length >= 2) { - result = arguments[1]; - } else { - do { - if (i in self) { - result = self[i--]; - break; - } - if (--i < 0) { - throw new TypeError("reduceRight of empty array with no initial value"); - } - } while (true); - } - - do { - if (i in this) { - result = fun.call(void 0, result, self[i], i, object); - } - } while (i--); - - return result; - }; -} -if (!Array.prototype.indexOf || ([0, 1].indexOf(1, 2) != -1)) { - Array.prototype.indexOf = function indexOf(sought /*, fromIndex */ ) { - var self = splitString && _toString(this) == "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - - var i = 0; - if (arguments.length > 1) { - i = toInteger(arguments[1]); - } - i = i >= 0 ? i : Math.max(0, length + i); - for (; i < length; i++) { - if (i in self && self[i] === sought) { - return i; - } - } - return -1; - }; -} -if (!Array.prototype.lastIndexOf || ([0, 1].lastIndexOf(0, -3) != -1)) { - Array.prototype.lastIndexOf = function lastIndexOf(sought /*, fromIndex */) { - var self = splitString && _toString(this) == "[object String]" ? - this.split("") : - toObject(this), - length = self.length >>> 0; - - if (!length) { - return -1; - } - var i = length - 1; - if (arguments.length > 1) { - i = Math.min(i, toInteger(arguments[1])); - } - i = i >= 0 ? i : length - Math.abs(i); - for (; i >= 0; i--) { - if (i in self && sought === self[i]) { - return i; - } - } - return -1; - }; -} -if (!Object.getPrototypeOf) { - Object.getPrototypeOf = function getPrototypeOf(object) { - return object.__proto__ || ( - object.constructor ? - object.constructor.prototype : - prototypeOfObject - ); - }; -} -if (!Object.getOwnPropertyDescriptor) { - var ERR_NON_OBJECT = "Object.getOwnPropertyDescriptor called on a " + - "non-object: "; - Object.getOwnPropertyDescriptor = function getOwnPropertyDescriptor(object, property) { - if ((typeof object != "object" && typeof object != "function") || object === null) - throw new TypeError(ERR_NON_OBJECT + object); - if (!owns(object, property)) - return; - - var descriptor, getter, setter; - descriptor = { enumerable: true, configurable: true }; - if (supportsAccessors) { - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - - var getter = lookupGetter(object, property); - var setter = lookupSetter(object, property); - object.__proto__ = prototype; - - if (getter || setter) { - if (getter) descriptor.get = getter; - if (setter) descriptor.set = setter; - return descriptor; - } - } - descriptor.value = object[property]; - return descriptor; - }; -} -if (!Object.getOwnPropertyNames) { - Object.getOwnPropertyNames = function getOwnPropertyNames(object) { - return Object.keys(object); - }; -} -if (!Object.create) { - var createEmpty; - if (Object.prototype.__proto__ === null) { - createEmpty = function () { - return { "__proto__": null }; - }; - } else { - createEmpty = function () { - var empty = {}; - for (var i in empty) - empty[i] = null; - empty.constructor = - empty.hasOwnProperty = - empty.propertyIsEnumerable = - empty.isPrototypeOf = - empty.toLocaleString = - empty.toString = - empty.valueOf = - empty.__proto__ = null; - return empty; - } - } - - Object.create = function create(prototype, properties) { - var object; - if (prototype === null) { - object = createEmpty(); - } else { - if (typeof prototype != "object") - throw new TypeError("typeof prototype["+(typeof prototype)+"] != 'object'"); - var Type = function () {}; - Type.prototype = prototype; - object = new Type(); - object.__proto__ = prototype; - } - if (properties !== void 0) - Object.defineProperties(object, properties); - return object; - }; -} - -function doesDefinePropertyWork(object) { - try { - Object.defineProperty(object, "sentinel", {}); - return "sentinel" in object; - } catch (exception) { - } -} -if (Object.defineProperty) { - var definePropertyWorksOnObject = doesDefinePropertyWork({}); - var definePropertyWorksOnDom = typeof document == "undefined" || - doesDefinePropertyWork(document.createElement("div")); - if (!definePropertyWorksOnObject || !definePropertyWorksOnDom) { - var definePropertyFallback = Object.defineProperty; - } -} - -if (!Object.defineProperty || definePropertyFallback) { - var ERR_NON_OBJECT_DESCRIPTOR = "Property description must be an object: "; - var ERR_NON_OBJECT_TARGET = "Object.defineProperty called on non-object: " - var ERR_ACCESSORS_NOT_SUPPORTED = "getters & setters can not be defined " + - "on this javascript engine"; - - Object.defineProperty = function defineProperty(object, property, descriptor) { - if ((typeof object != "object" && typeof object != "function") || object === null) - throw new TypeError(ERR_NON_OBJECT_TARGET + object); - if ((typeof descriptor != "object" && typeof descriptor != "function") || descriptor === null) - throw new TypeError(ERR_NON_OBJECT_DESCRIPTOR + descriptor); - if (definePropertyFallback) { - try { - return definePropertyFallback.call(Object, object, property, descriptor); - } catch (exception) { - } - } - if (owns(descriptor, "value")) { - - if (supportsAccessors && (lookupGetter(object, property) || - lookupSetter(object, property))) - { - var prototype = object.__proto__; - object.__proto__ = prototypeOfObject; - delete object[property]; - object[property] = descriptor.value; - object.__proto__ = prototype; - } else { - object[property] = descriptor.value; - } - } else { - if (!supportsAccessors) - throw new TypeError(ERR_ACCESSORS_NOT_SUPPORTED); - if (owns(descriptor, "get")) - defineGetter(object, property, descriptor.get); - if (owns(descriptor, "set")) - defineSetter(object, property, descriptor.set); - } - - return object; - }; -} -if (!Object.defineProperties) { - Object.defineProperties = function defineProperties(object, properties) { - for (var property in properties) { - if (owns(properties, property)) - Object.defineProperty(object, property, properties[property]); - } - return object; - }; -} -if (!Object.seal) { - Object.seal = function seal(object) { - return object; - }; -} -if (!Object.freeze) { - Object.freeze = function freeze(object) { - return object; - }; -} -try { - Object.freeze(function () {}); -} catch (exception) { - Object.freeze = (function freeze(freezeObject) { - return function freeze(object) { - if (typeof object == "function") { - return object; - } else { - return freezeObject(object); - } - }; - })(Object.freeze); -} -if (!Object.preventExtensions) { - Object.preventExtensions = function preventExtensions(object) { - return object; - }; -} -if (!Object.isSealed) { - Object.isSealed = function isSealed(object) { - return false; - }; -} -if (!Object.isFrozen) { - Object.isFrozen = function isFrozen(object) { - return false; - }; -} -if (!Object.isExtensible) { - Object.isExtensible = function isExtensible(object) { - if (Object(object) === object) { - throw new TypeError(); // TODO message - } - var name = ''; - while (owns(object, name)) { - name += '?'; - } - object[name] = true; - var returnValue = owns(object, name); - delete object[name]; - return returnValue; - }; -} -if (!Object.keys) { - var hasDontEnumBug = true, - dontEnums = [ - "toString", - "toLocaleString", - "valueOf", - "hasOwnProperty", - "isPrototypeOf", - "propertyIsEnumerable", - "constructor" - ], - dontEnumsLength = dontEnums.length; - - for (var key in {"toString": null}) { - hasDontEnumBug = false; - } - - Object.keys = function keys(object) { - - if ( - (typeof object != "object" && typeof object != "function") || - object === null - ) { - throw new TypeError("Object.keys called on a non-object"); - } - - var keys = []; - for (var name in object) { - if (owns(object, name)) { - keys.push(name); - } - } - - if (hasDontEnumBug) { - for (var i = 0, ii = dontEnumsLength; i < ii; i++) { - var dontEnum = dontEnums[i]; - if (owns(object, dontEnum)) { - keys.push(dontEnum); - } - } - } - return keys; - }; - -} -if (!Date.now) { - Date.now = function now() { - return new Date().getTime(); - }; -} -var ws = "\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003" + - "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + - "\u2029\uFEFF"; -if (!String.prototype.trim || ws.trim()) { - ws = "[" + ws + "]"; - var trimBeginRegexp = new RegExp("^" + ws + ws + "*"), - trimEndRegexp = new RegExp(ws + ws + "*$"); - String.prototype.trim = function trim() { - return String(this).replace(trimBeginRegexp, "").replace(trimEndRegexp, ""); - }; -} - -function toInteger(n) { - n = +n; - if (n !== n) { // isNaN - n = 0; - } else if (n !== 0 && n !== (1/0) && n !== -(1/0)) { - n = (n > 0 || -1) * Math.floor(Math.abs(n)); - } - return n; -} - -function isPrimitive(input) { - var type = typeof input; - return ( - input === null || - type === "undefined" || - type === "boolean" || - type === "number" || - type === "string" - ); -} - -function toPrimitive(input) { - var val, valueOf, toString; - if (isPrimitive(input)) { - return input; - } - valueOf = input.valueOf; - if (typeof valueOf === "function") { - val = valueOf.call(input); - if (isPrimitive(val)) { - return val; - } - } - toString = input.toString; - if (typeof toString === "function") { - val = toString.call(input); - if (isPrimitive(val)) { - return val; - } - } - throw new TypeError(); -} -var toObject = function (o) { - if (o == null) { // this matches both null and undefined - throw new TypeError("can't convert "+o+" to object"); - } - return Object(o); -}; - -}); diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.eot b/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.eot deleted file mode 100644 index 050bc1c8c61f7c06c43420358a048b54445a7155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25722 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 R!k4!H@E4Qi^Zq}J{|A*CR676w diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.svg b/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.svg deleted file mode 100644 index 33cd59a88..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.svg +++ /dev/null @@ -1,1107 +0,0 @@ - - - - - -Created by FontForge 20150401 at Sat Apr 11 22:32:17 2015 - By zimbatm -Copyright (c) 2015, zimbatm - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.ttf b/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial-regular-webfont.ttf deleted file mode 100644 index e4ae46c6286b2d6c6676b0c3192fc92876778498..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25552 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 diff --git a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial.css b/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial.css deleted file mode 100644 index c55a66eb3..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/lib/zocial/zocial.css +++ /dev/null @@ -1,505 +0,0 @@ -@charset "UTF-8"; - -/*! - Zocial Butons - http://zocial.smcllns.com - by Sam Collins (@smcllns) - License: http://opensource.org/licenses/mit-license.php -*/ - - -/* Button structure */ - -.zocial, -a.zocial { - border: 1px solid #777; - border-color: rgba(0,0,0,0.2); - border-bottom-color: #333; - border-bottom-color: rgba(0,0,0,0.4); - color: #fff; - -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); - -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); - box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.4), inset 0 0 0.1em rgba(255,255,255,0.9); - cursor: pointer; - display: inline-block; - font: bold 100%/2.1 "Lucida Grande", Tahoma, sans-serif; - padding: 0 .95em 0 0; - text-align: center; - text-decoration: none; - text-shadow: 0 1px 0 rgba(0,0,0,0.5); - white-space: nowrap; - - -moz-user-select: none; - -webkit-user-select: none; - user-select: none; - - position: relative; - - -moz-border-radius: .3em; - -webkit-border-radius: .3em; - border-radius: .3em; -} - -.zocial:before { - content: ""; - border-right: 0.075em solid rgba(0,0,0,0.1); - float: left; - font: 120%/1.65 zocial; - font-style: normal; - font-weight: normal; - margin: 0 0.5em 0 0; - padding: 0 0.5em; - text-align: center; - text-decoration: none; - text-transform: none; - - -moz-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); - -webkit-box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); - box-shadow: 0.075em 0 0 rgba(255,255,255,0.25); - - -moz-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - -webkit-font-smoothing: antialiased; - font-smoothing: antialiased; -} - -.zocial:active { - outline: none; /* outline is visible on :focus */ -} - -.zocial:hover, -.zocial:focus { - color: #fff; -} - -/* Buttons can be displayed as standalone icons by adding a class of "icon" */ - -.zocial.icon { - overflow: hidden; - max-width: 2.4em; - padding-left: 0; - padding-right: 0; - max-height: 2.15em; - white-space: nowrap; -} -.zocial.icon:before { - padding: 0; - width: 2em; - height: 2em; - - box-shadow: none; - border: none; -} - -/* Gradients */ - -.zocial { - background-image: -moz-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); - background-image: -ms-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); - background-image: -o-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(49%, rgba(255,255,255,.05)), color-stop(51%, rgba(0,0,0,.05)), to(rgba(0,0,0,.1))); - background-image: -webkit-linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); - background-image: linear-gradient(rgba(255,255,255,.1), rgba(255,255,255,.05) 49%, rgba(0,0,0,.05) 51%, rgba(0,0,0,.1)); -} - -.zocial:hover, .zocial:focus { - background-image: -moz-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); - background-image: -ms-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); - background-image: -o-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.15)), color-stop(49%, rgba(255,255,255,.15)), color-stop(51%, rgba(0,0,0,.1)), to(rgba(0,0,0,.15))); - background-image: -webkit-linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); - background-image: linear-gradient(rgba(255,255,255,.15) 49%, rgba(0,0,0,.1) 51%, rgba(0,0,0,.15)); -} - -.zocial:active { - background-image: -moz-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); - background-image: -ms-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); - background-image: -o-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,.1)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, transparent), to(rgba(0,0,0,.1))); - background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); - background-image: linear-gradient(bottom, rgba(255,255,255,.1), rgba(255,255,255,0) 30%, transparent 50%, rgba(0,0,0,.1)); -} - -/* Adjustments for light background buttons */ - -.zocial.acrobat, -.zocial.bitcoin, -.zocial.cloudapp, -.zocial.dropbox, -.zocial.email, -.zocial.eventful, -.zocial.github, -.zocial.gmail, -.zocial.instapaper, -.zocial.itunes, -.zocial.ninetyninedesigns, -.zocial.openid, -.zocial.plancast, -.zocial.pocket, -.zocial.posterous, -.zocial.reddit, -.zocial.secondary, -.zocial.stackoverflow, -.zocial.viadeo, -.zocial.weibo, -.zocial.wikipedia { - border: 1px solid #aaa; - border-color: rgba(0,0,0,0.3); - border-bottom-color: #777; - border-bottom-color: rgba(0,0,0,0.5); - -moz-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); - -webkit-box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); - box-shadow: inset 0 0.08em 0 rgba(255,255,255,0.7), inset 0 0 0.08em rgba(255,255,255,0.5); - text-shadow: 0 1px 0 rgba(255,255,255,0.8); -} - -/* :hover adjustments for light background buttons */ - -.zocial.acrobat:focus, -.zocial.acrobat:hover, -.zocial.bitcoin:focus, -.zocial.bitcoin:hover, -.zocial.dropbox:focus, -.zocial.dropbox:hover, -.zocial.email:focus, -.zocial.email:hover, -.zocial.eventful:focus, -.zocial.eventful:hover, -.zocial.github:focus, -.zocial.github:hover, -.zocial.gmail:focus, -.zocial.gmail:hover, -.zocial.instapaper:focus, -.zocial.instapaper:hover, -.zocial.itunes:focus, -.zocial.itunes:hover, -.zocial.ninetyninedesigns:focus, -.zocial.ninetyninedesigns:hover, -.zocial.openid:focus, -.zocial.openid:hover, -.zocial.plancast:focus, -.zocial.plancast:hover, -.zocial.pocket:focus, -.zocial.pocket:hover, -.zocial.posterous:focus, -.zocial.posterous:hover, -.zocial.reddit:focus, -.zocial.reddit:hover, -.zocial.secondary:focus, -.zocial.secondary:hover, -.zocial.stackoverflow:focus, -.zocial.stackoverflow:hover, -.zocial.twitter:focus, -.zocial.viadeo:focus, -.zocial.viadeo:hover, -.zocial.weibo:focus, -.zocial.weibo:hover, -.zocial.wikipedia:focus, -.zocial.wikipedia:hover { - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0.5)), color-stop(49%, rgba(255,255,255,0.2)), color-stop(51%, rgba(0,0,0,0.05)), to(rgba(0,0,0,0.15))); - background-image: -moz-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); - background-image: -webkit-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); - background-image: -o-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); - background-image: -ms-linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); - background-image: linear-gradient(top, rgba(255,255,255,0.5), rgba(255,255,255,0.2) 49%, rgba(0,0,0,0.05) 51%, rgba(0,0,0,0.15)); -} - -/* :active adjustments for light background buttons */ - -.zocial.acrobat:active, -.zocial.bitcoin:active, -.zocial.dropbox:active, -.zocial.email:active, -.zocial.eventful:active, -.zocial.github:active, -.zocial.gmail:active, -.zocial.instapaper:active, -.zocial.itunes:active, -.zocial.ninetyninedesigns:active, -.zocial.openid:active, -.zocial.plancast:active, -.zocial.pocket:active, -.zocial.posterous:active, -.zocial.reddit:active, -.zocial.secondary:active, -.zocial.stackoverflow:active, -.zocial.viadeo:active, -.zocial.weibo:active, -.zocial.wikipedia:active { - background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(255,255,255,0)), color-stop(30%, rgba(255,255,255,0)), color-stop(50%, rgba(0,0,0,0)), to(rgba(0,0,0,0.1))); - background-image: -moz-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); - background-image: -webkit-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); - background-image: -o-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); - background-image: -ms-linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); - background-image: linear-gradient(bottom, rgba(255,255,255,0), rgba(255,255,255,0) 30%, rgba(0,0,0,0) 50%, rgba(0,0,0,0.1)); -} - -/* Button icon */ -.zocial.acrobat:before { content: "\f100"; } -.zocial.amazon:before { content: "\f101"; } -.zocial.android:before { content: "\f102"; } -.zocial.angellist:before { content: "\f103"; } -.zocial.aol:before { content: "\f104"; } -.zocial.appnet:before { content: "\f105"; } -.zocial.appstore:before { content: "\f106"; } -.zocial.bitbucket:before { content: "\f107"; } -.zocial.bitcoin:before { content: "\f108"; } -.zocial.blogger:before { content: "\f109"; } -.zocial.buffer:before { content: "\f10a"; } -.zocial.cal:before { content: "\f10b"; } -.zocial.call:before { content: "\f10c"; } -.zocial.cart:before { content: "\f10d"; } -.zocial.chrome:before { content: "\f10e"; } -.zocial.cloudapp:before { content: "\f10f"; } -.zocial.creativecommons:before { content: "\f110"; } -.zocial.delicious:before { content: "\f111"; } -.zocial.digg:before { content: "\f112"; } -.zocial.disqus:before { content: "\f113"; } -.zocial.dribbble:before { content: "\f114"; } -.zocial.dropbox:before { content: "\f115"; } -.zocial.drupal:before { content: "\f116"; } -.zocial.dwolla:before { content: "\f118"; } -.zocial.email:before { content: "\f119"; } -.zocial.eventasaurus:before { content: "\f11a"; } -.zocial.eventbrite:before { content: "\f11b"; } -.zocial.eventful:before { content: "\f11c"; } -.zocial.evernote:before { content: "\f11d"; } -.zocial.facebook:before { content: "\f11e"; } -.zocial.fivehundredpx:before { content: "\f11f"; } -.zocial.flattr:before { content: "\f120"; } -.zocial.flickr:before { content: "\f121"; } -.zocial.forrst:before { content: "\f122"; } -.zocial.foursquare:before { content: "\f123"; } -.zocial.github:before { content: "\f124"; } -.zocial.gmail:before { content: "\f125"; } -.zocial.google:before { content: "\f126"; } -.zocial.googleplay:before { content: "\f127"; } -.zocial.googleplus:before { content: "\f128"; } -.zocial.gowalla:before { content: "\f129"; } -.zocial.grooveshark:before { content: "\f12a"; } -.zocial.guest:before { content: "\f12b"; } -.zocial.html5:before { content: "\f12c"; } -.zocial.ie:before { content: "\f12d"; } -.zocial.instagram:before { content: "\f12e"; } -.zocial.instapaper:before { content: "\f12f"; } -.zocial.intensedebate:before { content: "\f130"; } -.zocial.itunes:before { content: "\f131"; } -.zocial.klout:before { content: "\f132"; } -.zocial.lanyrd:before { content: "\f133"; } -.zocial.lastfm:before { content: "\f134"; } -.zocial.lego:before { content: "\f135"; } -.zocial.linkedin:before { content: "\f136"; } -.zocial.lkdto:before { content: "\f137"; } -.zocial.logmein:before { content: "\f138"; } -.zocial.macstore:before { content: "\f139"; } -.zocial.meetup:before { content: "\f13a"; } -.zocial.myspace:before { content: "\f13b"; } -.zocial.ninetyninedesigns:before { content: "\f13c"; } -.zocial.openid:before { content: "\f13d"; } -.zocial.opentable:before { content: "\f13e"; } -.zocial.paypal:before { content: "\f13f"; } -.zocial.persona:before { content: "\f164"; } -.zocial.pinboard:before { content: "\f140"; } -.zocial.pinterest:before { content: "\f141"; } -.zocial.plancast:before { content: "\f142"; } -.zocial.plurk:before { content: "\f143"; } -.zocial.pocket:before { content: "\f144"; } -.zocial.podcast:before { content: "\f145"; } -.zocial.posterous:before { content: "\f146"; } -.zocial.print:before { content: "\f147"; } -.zocial.quora:before { content: "\f148"; } -.zocial.reddit:before { content: "\f149"; } -.zocial.rss:before { content: "\f14a"; } -.zocial.scribd:before { content: "\f14b"; } -.zocial.skype:before { content: "\f14c"; } -.zocial.smashing:before { content: "\f14d"; } -.zocial.songkick:before { content: "\f14e"; } -.zocial.soundcloud:before { content: "\f14f"; } -.zocial.spotify:before { content: "\f150"; } -.zocial.stackoverflow:before { content: "\f151"; } -.zocial.statusnet:before { content: "\f152"; } -.zocial.steam:before { content: "\f153"; } -.zocial.stripe:before { content: "\f154"; } -.zocial.stumbleupon:before { content: "\f155"; } -.zocial.tumblr:before { content: "\f156"; } -.zocial.twitter:before { content: "\f157"; } -.zocial.viadeo:before { content: "\f158"; } -.zocial.vimeo:before { content: "\f159"; } -.zocial.vk:before { content: "\f15a"; } -.zocial.weibo:before { content: "\f15b"; } -.zocial.wikipedia:before { content: "\f15c"; } -.zocial.windows:before { content: "\f15d"; } -.zocial.wordpress:before { content: "\f15e"; } -.zocial.xing:before { content: "\f15f"; } -.zocial.yahoo:before { content: "\f160"; } -.zocial.ycombinator:before { content: "\f161"; } -.zocial.yelp:before { content: "\f162"; } -.zocial.youtube:before { content: "\f163"; } - -/* Button color */ -.zocial.acrobat:before {color: #FB0000;} -.zocial.bitcoin:before {color: #f7931a;} -.zocial.dropbox:before {color: #1f75cc;} -.zocial.drupal:before {color: #fff;} -.zocial.email:before {color: #312c2a;} -.zocial.eventasaurus:before {color: #9de428;} -.zocial.eventful:before {color: #0066CC;} -.zocial.fivehundredpx:before {color: #29b6ff;} -.zocial.forrst:before {color: #50894f;} -.zocial.gmail:before {color: #f00;} -.zocial.itunes:before {color: #1a6dd2;} -.zocial.lego:before {color:#fff900;} -.zocial.ninetyninedesigns:before {color: #f50;} -.zocial.openid:before {color: #ff921d;} -.zocial.pocket:before {color:#ee4056;} -.zocial.persona:before {color:#fff;} -.zocial.reddit:before {color: red;} -.zocial.scribd:before {color: #00d5ea;} -.zocial.stackoverflow:before {color: #ff7a15;} -.zocial.statusnet:before {color: #fff;} -.zocial.viadeo:before {color: #f59b20;} -.zocial.weibo:before {color: #e6162d;} - -/* Button background and text color */ - -.zocial.acrobat {background-color: #fff; color: #000;} -.zocial.amazon {background-color: #ffad1d; color: #030037; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} -.zocial.android {background-color: #a4c639;} -.zocial.angellist {background-color: #000;} -.zocial.aol {background-color: #f00;} -.zocial.appnet {background-color: #3178bd;} -.zocial.appstore {background-color: #000;} -.zocial.bitbucket {background-color: #205081;} -.zocial.bitcoin {background-color: #efefef; color: #4d4d4d;} -.zocial.blogger {background-color: #ee5a22;} -.zocial.buffer {background-color: #232323;} -.zocial.call {background-color: #008000;} -.zocial.cal {background-color: #d63538;} -.zocial.cart {background-color: #333;} -.zocial.chrome {background-color: #006cd4;} -.zocial.cloudapp {background-color: #fff; color: #312c2a;} -.zocial.creativecommons {background-color: #000;} -.zocial.delicious {background-color: #3271cb;} -.zocial.digg {background-color: #164673;} -.zocial.disqus {background-color: #5d8aad;} -.zocial.dribbble {background-color: #ea4c89;} -.zocial.dropbox {background-color: #fff; color: #312c2a;} -.zocial.drupal {background-color: #0077c0; color: #fff;} -.zocial.dwolla {background-color: #e88c02;} -.zocial.email {background-color: #f0f0eb; color: #312c2a;} -.zocial.eventasaurus {background-color: #192931; color: #fff;} -.zocial.eventbrite {background-color: #ff5616;} -.zocial.eventful {background-color: #fff; color: #47ab15;} -.zocial.evernote {background-color: #6bb130; color: #fff;} -.zocial.facebook {background-color: #4863ae;} -.zocial.fivehundredpx {background-color: #333;} -.zocial.flattr {background-color: #8aba42;} -.zocial.flickr {background-color: #ff0084;} -.zocial.forrst {background-color: #1e360d;} -.zocial.foursquare {background-color: #44a8e0;} -.zocial.github {background-color: #fbfbfb; color: #050505;} -.zocial.gmail {background-color: #efefef; color: #222;} -.zocial.google {background-color: #4e6cf7;} -.zocial.googleplay {background-color: #000;} -.zocial.googleplus {background-color: #dd4b39;} -.zocial.gowalla {background-color: #ff720a;} -.zocial.grooveshark {background-color: #111; color:#eee;} -.zocial.guest {background-color: #1b4d6d;} -.zocial.html5 {background-color: #ff3617;} -.zocial.ie {background-color: #00a1d9;} -.zocial.instapaper {background-color: #eee; color: #222;} -.zocial.instagram {background-color: #3f729b;} -.zocial.intensedebate {background-color: #0099e1;} -.zocial.klout {background-color: #e34a25;} -.zocial.itunes {background-color: #efefeb; color: #312c2a;} -.zocial.lanyrd {background-color: #2e6ac2;} -.zocial.lastfm {background-color: #dc1a23;} -.zocial.lego {background-color: #fb0000;} -.zocial.linkedin {background-color: #0083a8;} -.zocial.lkdto {background-color: #7c786f;} -.zocial.logmein {background-color: #000;} -.zocial.macstore {background-color: #007dcb} -.zocial.meetup {background-color: #ff0026;} -.zocial.myspace {background-color: #000;} -.zocial.ninetyninedesigns {background-color: #fff; color: #072243;} -.zocial.openid {background-color: #f5f5f5; color: #333;} -.zocial.opentable {background-color: #990000;} -.zocial.paypal {background-color: #fff; color: #32689a; text-shadow: 0 1px 0 rgba(255,255,255,0.5);} -.zocial.persona {background-color: #1258a1; color: #fff;} -.zocial.pinboard {background-color: blue;} -.zocial.pinterest {background-color: #c91618;} -.zocial.plancast {background-color: #e7ebed; color: #333;} -.zocial.plurk {background-color: #cf682f;} -.zocial.pocket {background-color: #fff; color: #777;} -.zocial.podcast {background-color: #9365ce;} -.zocial.posterous {background-color: #ffd959; color: #bc7134;} -.zocial.print {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} -.zocial.quora {background-color: #a82400;} -.zocial.reddit {background-color: #fff; color: #222;} -.zocial.rss {background-color: #ff7f25;} -.zocial.scribd {background-color: #231c1a;} -.zocial.skype {background-color: #00a2ed;} -.zocial.smashing {background-color: #ff4f27;} -.zocial.songkick {background-color: #ff0050;} -.zocial.soundcloud {background-color: #ff4500;} -.zocial.spotify {background-color: #60af00;} -.zocial.stackoverflow {background-color: #fff; color: #555;} -.zocial.statusnet {background-color: #829d25;} -.zocial.steam {background-color: #000;} -.zocial.stripe {background-color: #2f7ed6;} -.zocial.stumbleupon {background-color: #eb4924;} -.zocial.tumblr {background-color: #374a61;} -.zocial.twitter {background-color: #46c0fb;} -.zocial.viadeo {background-color: #fff; color: #000;} -.zocial.vimeo {background-color: #00a2cd;} -.zocial.vk {background-color: #45688E;} -.zocial.weibo {background-color: #faf6f1; color: #000;} -.zocial.wikipedia {background-color: #fff; color: #000;} -.zocial.windows {background-color: #0052a4; color: #fff;} -.zocial.wordpress {background-color: #464646;} -.zocial.xing {background-color: #0a5d5e;} -.zocial.yahoo {background-color: #a200c2;} -.zocial.ycombinator {background-color: #ff6600;} -.zocial.yelp {background-color: #e60010;} -.zocial.youtube {background-color: #f00;} - -/* -The Miscellaneous Buttons -These button have no icons and can be general purpose buttons while ensuring consistent button style -Credit to @guillermovs for suggesting -*/ - -.zocial.primary, .zocial.secondary {margin: 0.1em 0; padding: 0 1em;} -.zocial.primary:before, .zocial.secondary:before {display: none;} -.zocial.primary {background-color: #333;} -.zocial.secondary {background-color: #f0f0eb; color: #222; text-shadow: 0 1px 0 rgba(255,255,255,0.8);} - -/* Any browser-specific adjustments */ - -button:-moz-focus-inner { - border: 0; - padding: 0; -} - -/* Reference icons from font-files -** Base 64-encoded version recommended to resolve cross-site font-loading issues -*/ - -@font-face { - font-family: "zocial"; - src: url("./zocial.eot"); - src: url("./zocial.eot?#iefix") format("embedded-opentype"), - url(data:application/x-font-woff;charset=utf-8;base64,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), - url("./zocial.woff") format("woff"), - url("./zocial.ttf") format("truetype"), - url("./zocial.svg#zocial") format("svg"); - font-weight: normal; - font-style: normal; -} - -@media screen and (-webkit-min-device-pixel-ratio:0) { - @font-face { - font-family: "zocial"; - src: url("./zocial.svg#zocial") format("svg"); - } -} diff --git a/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js b/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js deleted file mode 100644 index d26d834ea..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js +++ /dev/null @@ -1,48 +0,0 @@ -import{u as e,c as t}from"../common/_commonjsHelpers-89bea96a.js";import{p as n}from"../common/index-1a6834d2.js";import r,{Component as o,createRef as i,createElement as l,createContext as a,Fragment as s,Children as c,cloneElement as p,isValidElement as u,forwardRef as f}from"../react.js";import{findDOMNode as d,createPortal as m}from"../react-dom.js";import{g,c as h,S as b,p as y}from"../common/StyleSheet-4762b333.js";var O=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={backdrop:"pf-c-backdrop",backdropOpen:"pf-c-backdrop__open",modifiers:{}}})));const v={ARROW_UP:38,ARROW_DOWN:40,ESCAPE_KEY:27,TAB:9,ENTER:13,SPACE:32},x={RIGHT:"right",LEFT:"left",BOTH:"both",NONE:"none"},w={UP:"up",DOWN:"down",RIGHT:"right",LEFT:"left"};let C;!function(e){e.success="success",e.error="error",e.default="default"}(C||(C={}));var j=["input","select","textarea","a[href]","button","[tabindex]","audio[controls]","video[controls]",'[contenteditable]:not([contenteditable="false"])'],P=j.join(","),S="undefined"==typeof Element?function(){}:Element.prototype.matches||Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector;function N(e,t){t=t||{};var n,r,o,i=[],l=[],a=new M(e.ownerDocument||e),s=e.querySelectorAll(P);for(t.includeContainer&&S.call(e,P)&&(s=Array.prototype.slice.apply(s)).unshift(e),n=0;n0){var t=F[F.length-1];t!==e&&t.pause()}var n=F.indexOf(e);-1===n||F.splice(n,1),F.push(e)},deactivateTrap:function(e){var t=F.indexOf(e);-1!==t&&F.splice(t,1),F.length>0&&F[F.length-1].unpause()}});function H(e){return setTimeout(e,0)}var z=function(e,t){var n=document,r="string"==typeof e?n.querySelector(e):e,o=D({returnFocusOnDeactivate:!0,escapeDeactivates:!0},t),i={firstTabbableNode:null,lastTabbableNode:null,nodeFocusedBeforeActivation:null,mostRecentlyFocusedNode:null,active:!1,paused:!1},l={activate:function(e){if(i.active)return;h(),i.active=!0,i.paused=!1,i.nodeFocusedBeforeActivation=n.activeElement;var t=e&&e.onActivate?e.onActivate:o.onActivate;t&&t();return s(),l},deactivate:a,pause:function(){if(i.paused||!i.active)return;i.paused=!0,c()},unpause:function(){if(!i.paused||!i.active)return;i.paused=!1,s()}};return l;function a(e){if(i.active){c(),i.active=!1,i.paused=!1,A.deactivateTrap(l);var t=e&&void 0!==e.onDeactivate?e.onDeactivate:o.onDeactivate;return t&&t(),(e&&void 0!==e.returnFocus?e.returnFocus:o.returnFocusOnDeactivate)&&H((function(){b(i.nodeFocusedBeforeActivation)})),l}}function s(){if(i.active)return A.activateTrap(l),h(),H((function(){b(u())})),n.addEventListener("focusin",d,!0),n.addEventListener("mousedown",f,!0),n.addEventListener("touchstart",f,!0),n.addEventListener("click",g,!0),n.addEventListener("keydown",m,!0),l}function c(){if(i.active)return n.removeEventListener("focusin",d,!0),n.removeEventListener("mousedown",f,!0),n.removeEventListener("touchstart",f,!0),n.removeEventListener("click",g,!0),n.removeEventListener("keydown",m,!0),l}function p(e){var t=o[e],r=t;if(!t)return null;if("string"==typeof t&&!(r=n.querySelector(t)))throw new Error("`"+e+"` refers to no known node");if("function"==typeof t&&!(r=t()))throw new Error("`"+e+"` did not return a node");return r}function u(){var e;if(!(e=null!==p("initialFocus")?p("initialFocus"):r.contains(n.activeElement)?n.activeElement:i.firstTabbableNode||p("fallbackFocus")))throw new Error("You can't have a focus-trap without at least one focusable element");return e}function f(e){r.contains(e.target)||(o.clickOutsideDeactivates?a({returnFocus:!R.isFocusable(e.target)}):e.preventDefault())}function d(e){r.contains(e.target)||e.target instanceof Document||(e.stopImmediatePropagation(),b(i.mostRecentlyFocusedNode||u()))}function m(e){if(!1!==o.escapeDeactivates&&function(e){return"Escape"===e.key||"Esc"===e.key||27===e.keyCode}(e))return e.preventDefault(),void a();(function(e){return"Tab"===e.key||9===e.keyCode})(e)&&function(e){if(h(),e.shiftKey&&e.target===i.firstTabbableNode)return e.preventDefault(),void b(i.lastTabbableNode);if(!e.shiftKey&&e.target===i.lastTabbableNode)e.preventDefault(),b(i.firstTabbableNode)}(e)}function g(e){o.clickOutsideDeactivates||r.contains(e.target)||(e.preventDefault(),e.stopImmediatePropagation())}function h(){var e=R(r);i.firstTabbableNode=e[0]||u(),i.lastTabbableNode=e[e.length-1]||u()}function b(e){e!==n.activeElement&&(e&&e.focus?(e.focus(),i.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):b(u()))}};function q(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function X(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class V extends o{constructor(e){super(e),X(this,"divRef",i()),"undefined"!=typeof document&&(this.previouslyFocusedElement=document.activeElement)}componentDidMount(){this.focusTrap=z(this.divRef.current,function(e){for(var t=1;t{clearTimeout(n),n=setTimeout(()=>e.apply(this,r),t)}}function Z(e,t,n){const r=e.getBoundingClientRect(),o=t.getBoundingClientRect(),i=Math.floor(r.left),l=Math.floor(r.right),a=Math.floor(o.left),s=Math.floor(o.right);return a>=i&&s<=l||n&&(ai||s>l&&ai;let s=x.NONE;return a&&l?s=x.BOTH:a?s=x.RIGHT:l&&(s=x.LEFT),s}function ee(e,t){return new Function(...Object.keys(t),`return \`${e}\`;`)(...Object.values(t))}function te(e,t,n,r,o,i=!1){if(!Array.isArray(o))return;const l=r.filter(e=>e)[0].constructor===Array;let a=e,s=t;if("up"===n?a=0===e?o.length-1:e-1:"down"===n?a=e===o.length-1?0:e+1:"left"===n?s=0===t?r[e].length-1:t-1:"right"===n&&(s=t===r[e].length-1?0:t+1),null===r[a]||void 0===r[a]||l&&(null===r[a][s]||void 0===r[a][s]))te(a,s,n,r,o,i);else if(i){r[a].focus&&r[a].focus();d(r[a]).focus()}else l?r[a][s].focus():r[a].focus()}function ne(e,t,n){let r;if(r="up"===t?0===e?n.length-1:e-1:e===n.length-1?0:e+1,null!==n[r])return r;ne(r,t,n)}function re(e,t,n){return n||(n=t+"s"),`${e||0} ${1===e?t:n}`}const oe=(e,t)=>e.reduce((e,n)=>`${e}${e&&" "}${g(t,`${n.modifier}${n.breakpoint?"-on-"+n.breakpoint:""}`)}`,""),ie=!("undefined"==typeof window||!window.document||!window.document.createElement);var le=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={bullseye:"pf-l-bullseye",modifiers:{}}}))),ae=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={aboutModalBox:"pf-c-about-modal-box",card:"pf-c-card",button:"pf-c-button",aboutModalBoxBrand:"pf-c-about-modal-box__brand",aboutModalBoxBrandImage:"pf-c-about-modal-box__brand-image",aboutModalBoxHeader:"pf-c-about-modal-box__header",aboutModalBoxStrapline:"pf-c-about-modal-box__strapline",aboutModalBoxContent:"pf-c-about-modal-box__content",aboutModalBoxClose:"pf-c-about-modal-box__close",aboutModalBoxHero:"pf-c-about-modal-box__hero",modifiers:{hover:"pf-m-hover"}}}))),se=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={content:"pf-c-content",modifiers:{redhatFont:"pf-m-redhat-font"}}})));function ce(){return(ce=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const ue=e=>{let{children:t,className:n="",trademark:r,id:o,noAboutModalBoxContentContainer:i=!1}=e,a=pe(e,["children","className","trademark","id","noAboutModalBoxContentContainer"]);return l("div",ce({className:h(ae.aboutModalBoxContent,n),id:o},a),l("div",{className:h("pf-c-about-modal-box__body")},i?t:l("div",{className:h(se.content)},t)),l("p",{className:h(ae.aboutModalBoxStrapline)},r))};ue.propTypes={children:n.node.isRequired,className:n.string,id:n.string.isRequired,trademark:n.string.isRequired,noAboutModalBoxContentContainer:n.bool};var fe=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={title:"pf-c-title",modifiers:{"4xl":"pf-m-4xl","3xl":"pf-m-3xl","2xl":"pf-m-2xl",xl:"pf-m-xl",lg:"pf-m-lg",md:"pf-m-md",redhatFont:"pf-m-redhat-font"}}})));function de(){return(de=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let ge;!function(e){e.h1="h1",e.h2="h2",e.h3="h3",e.h4="h4",e.h5="h5",e.h6="h6"}(ge||(ge={}));const he=e=>{let{size:t,className:n="",children:r="",headingLevel:o="h1"}=e,i=me(e,["size","className","children","headingLevel"]);return l(o,de({},i,{className:h(fe.title,g(fe,t),n)}),r)};let be,ye;function Oe(){return(Oe=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}he.propTypes={size:n.oneOfType([n.any,n.oneOf(["xs"]),n.oneOf(["sm"]),n.oneOf(["md"]),n.oneOf(["lg"]),n.oneOf(["xl"]),n.oneOf(["2xl"]),n.oneOf(["3xl"]),n.oneOf(["4xl"])]).isRequired,children:n.node,className:n.string,headingLevel:n.oneOf(["h1","h2","h3","h4","h5","h6"])},function(e){e.xs="xs",e.sm="sm",e.md="md",e.lg="lg",e.xl="xl",e["2xl"]="2xl",e["3xl"]="3xl",e["4xl"]="4xl"}(be||(be={})),function(e){e.sm="Sm",e.md="Md",e.lg="Lg",e.xl="Xl",e.xl2="_2xl"}(ye||(ye={}));const xe=e=>{let{className:t="",productName:n="",id:r}=e,o=ve(e,["className","productName","id"]);return l("div",Oe({className:h(ae.aboutModalBoxHeader,t)},o),l(he,{headingLevel:"h1",size:"4xl",id:r},n))};xe.propTypes={className:n.string,productName:n.string,id:n.string.isRequired};var we="--pf-c-about-modal-box__hero--sm--BackgroundImage";function Ce(){return(Ce=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Pe=e=>{let{className:t,backgroundImageSrc:n}=e,r=je(e,["className","backgroundImageSrc"]);return l("div",Ce({style:""!==n?{[we]:`url(${n})`}:{},className:h(ae.aboutModalBoxHero,t)},r))};function Se(){return(Se=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Pe.propTypes={className:n.string,backgroundImageSrc:n.string};const Te=e=>{let{className:t="",src:n="",alt:r}=e,o=Ne(e,["className","src","alt"]);return l("div",Se({className:h(ae.aboutModalBoxBrand,t)},o),l("img",{className:h(ae.aboutModalBoxBrandImage),src:n,alt:r}))};Te.propTypes={className:n.string,src:n.string,alt:n.string.isRequired};var _e=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={button:"pf-c-button",buttonIcon:"pf-c-button__icon",buttonText:"pf-c-button__text",modifiers:{hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",block:"pf-m-block",primary:"pf-m-primary",secondary:"pf-m-secondary",tertiary:"pf-m-tertiary",danger:"pf-m-danger",link:"pf-m-link",inline:"pf-m-inline",disabled:"pf-m-disabled",control:"pf-m-control",expanded:"pf-m-expanded",plain:"pf-m-plain",redhatFont:"pf-m-redhat-font"}}})));let ke=0;function Ie(){return(Ie=Object.assign||function(e){for(var t=1;tl(Le.Consumer,null,n=>l(Me,{consumerContext:n,component:e,componentProps:t}))}class Me extends o{constructor(e){super(e),this.state={isOuia:!1,ouiaId:null}}componentDidMount(){const{isOuia:e,ouiaId:t}=this.state,{consumerContext:n}=this.props,r=(()=>{try{return"undefined"!=typeof window&&window.localStorage&&window.localStorage.getItem("ouia:enabled")&&"true"===window.localStorage["ouia:enabled"].toLowerCase()||!1}catch(e){return!1}})();(n&&void 0!==n.isOuia&&n.isOuia!==e||r!==e)&&this.setState({isOuia:n&&void 0!==n.isOuia?n.isOuia:r,ouiaId:n&&void 0!==n.ouiaId?n.ouiaId:"undefined"!=typeof window&&window.localStorage["ouia-generate-id"]&&"true"===window.localStorage["ouia-generate-id"].toLowerCase()?ke++:t})}render(){const{isOuia:e,ouiaId:t}=this.state,{component:n,componentProps:r,consumerContext:o}=this.props;return l(Le.Provider,{value:{isOuia:o&&o.isOuia||e,ouiaId:o&&o.ouiaId||t}},l(Le.Consumer,null,e=>l(n,Ie({},r,{ouiaContext:e}))))}}var Re,De,Be;function Fe(){return(Fe=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let He,ze;Re=Me,De="propTypes",Be={component:n.any.isRequired,componentProps:n.any.isRequired,consumerContext:n.shape({isOuia:n.bool,ouiaId:n.oneOfType([n.number,n.string])})},De in Re?Object.defineProperty(Re,De,{value:Be,enumerable:!0,configurable:!0,writable:!0}):Re[De]=Be,function(e){e.primary="primary",e.secondary="secondary",e.tertiary="tertiary",e.danger="danger",e.link="link",e.plain="plain",e.control="control"}(He||(He={})),function(e){e.button="button",e.submit="submit",e.reset="reset"}(ze||(ze={}));const qe=e=>{let{children:t=null,className:n="",component:r="button",isActive:o=!1,isBlock:i=!1,isDisabled:a=!1,isFocus:s=!1,isHover:c=!1,isInline:p=!1,type:u=ze.button,variant:f=He.primary,iconPosition:d="left","aria-label":m=null,icon:b=null,ouiaContext:y=null,ouiaId:O=null,tabIndex:v=null}=e,x=Ae(e,["children","className","component","isActive","isBlock","isDisabled","isFocus","isHover","isInline","type","variant","iconPosition","aria-label","icon","ouiaContext","ouiaId","tabIndex"]);const w="button"===r;return l(r,Fe({},x,{"aria-disabled":w?null:a,"aria-label":m,className:h(_e.button,g(_e.modifiers,f),i&&_e.modifiers.block,a&&!w&&_e.modifiers.disabled,o&&_e.modifiers.active,s&&_e.modifiers.focus,c&&_e.modifiers.hover,p&&f===He.link&&_e.modifiers.inline,n),disabled:w?a:null,tabIndex:a&&!w?-1:v,type:w?u:null},y.isOuia&&{"data-ouia-component-type":"Button","data-ouia-component-id":O||y.ouiaId}),b&&f===He.link&&"left"===d&&l("span",{className:"pf-c-button__icon"},b),f===He.link&&l("span",{className:h(_e.buttonText)},t),f!==He.link&&t,b&&f===He.link&&"right"===d&&l("span",{className:"pf-c-button__icon"},b))};qe.propTypes={children:n.node,className:n.string,component:n.any,isActive:n.bool,isBlock:n.bool,isDisabled:n.bool,isFocus:n.bool,isHover:n.bool,isInline:n.bool,type:n.oneOf(["button","submit","reset"]),variant:n.oneOf(["primary","secondary","tertiary","danger","link","plain","control"]),iconPosition:n.oneOf(["left","right"]),"aria-label":n.string,icon:n.oneOfType([n.node,n.oneOf([null])]),tabIndex:n.number};const Xe=Ee(qe);var Ve=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.getSize=t.defaultProps=t.propTypes=t.IconSize=void 0;var r=function(e){return e&&e.__esModule?e:{default:e}}(n);var o={sm:"sm",md:"md",lg:"lg",xl:"xl"};t.IconSize=o;var i={color:r.default.string,size:r.default.oneOf(Object.keys(o)),title:r.default.string,noVerticalAlign:r.default.bool};t.propTypes=i;var l={color:"currentColor",size:o.sm,title:null,noVerticalAlign:!1};t.defaultProps=l;t.getSize=function(e){switch(e){case o.sm:return"1em";case o.md:return"1.5em";case o.lg:return"2em";case o.xl:return"3em";default:return"1em"}}}));e(Ve);Ve.getSize,Ve.defaultProps,Ve.propTypes,Ve.IconSize;var Ge=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(r);function o(e){return(o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function i(){return(i=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function s(e,t){for(var n=0;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ye=e=>{let{className:t="",onClose:n=(()=>{}),"aria-label":r="Close Dialog"}=e,o=$e(e,["className","onClose","aria-label"]);return l("div",Ue({className:h(ae.aboutModalBoxClose,t)},o),l(Xe,{variant:"plain",onClick:n,"aria-label":r},l(Ke,null)))};function Je(){return(Je=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ye.propTypes={className:n.string,onClose:n.func,"aria-label":n.string};const Qe=e=>{let{children:t,className:n=""}=e,r=Ze(e,["children","className"]);return l("div",Je({role:"dialog","aria-modal":"true",className:h(ae.aboutModalBox,n)},r),t)};function et(){return(et=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Qe.propTypes={children:n.node.isRequired,className:n.string};const nt=e=>{let{children:t=null,className:n=""}=e,r=tt(e,["children","className"]);return l("div",et({},r,{className:h(O.backdrop,n)}),t)};function rt(){return(rt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}nt.propTypes={children:n.node,className:n.string};const it=e=>{let{children:t,className:n="",isOpen:r=!1,onClose:o=(()=>{}),productName:i="",trademark:a,brandImageSrc:s,brandImageAlt:c,backgroundImageSrc:p,ariaLabelledbyId:u,ariaDescribedById:f,closeButtonAriaLabel:d}=e,m=ot(e,["children","className","isOpen","onClose","productName","trademark","brandImageSrc","brandImageAlt","backgroundImageSrc","ariaLabelledbyId","ariaDescribedById","closeButtonAriaLabel"]);return r?l(nt,null,l(V,{focusTrapOptions:{clickOutsideDeactivates:!0},className:h(le.bullseye)},l(Qe,{className:n,"aria-labelledby":u,"aria-describedby":f},l(Te,{src:s,alt:c}),l(Ye,{"aria-label":d,onClose:o}),i&&l(xe,{id:u,productName:i}),l(ue,rt({trademark:a,id:f,noAboutModalBoxContentContainer:!1},m),t),l(Pe,{backgroundImageSrc:p})))):null};function lt(){return(lt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function st(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}it.propTypes={children:n.node.isRequired,className:n.string,isOpen:n.bool,onClose:n.func,productName:n.string,trademark:n.string,brandImageSrc:n.string.isRequired,brandImageAlt:n.string.isRequired,backgroundImageSrc:n.string,ariaLabelledbyId:n.string.isRequired,ariaDescribedById:n.string.isRequired,closeButtonAriaLabel:n.string};class ct extends o{constructor(e){super(e),st(this,"id",ct.currentId++),st(this,"ariaLabelledBy","pf-about-modal-title-"+this.id),st(this,"ariaDescribedBy","pf-about-modal-content-"+this.id),st(this,"handleEscKeyClick",e=>{e.keyCode===v.ESCAPE_KEY&&this.props.isOpen&&this.props.onClose()}),st(this,"toggleSiblingsFromScreenReaders",e=>{const{appendTo:t}=this.props,n=this.getElement(t).children;for(const t of Array.from(n))t!==this.state.container&&(e?t.setAttribute("aria-hidden",""+e):t.removeAttribute("aria-hidden"))}),st(this,"getElement",e=>"function"==typeof e?e():e||document.body),this.state={container:void 0},e.brandImageSrc&&!e.brandImageAlt&&console.error("AboutModal:","brandImageAlt is required when a brandImageSrc is specified")}componentDidMount(){const e=document.createElement("div"),t=this.getElement(this.props.appendTo);this.setState({container:e}),t.appendChild(e),t.addEventListener("keydown",this.handleEscKeyClick,!1),this.props.isOpen?t.classList.add(h(O.backdropOpen)):t.classList.remove(h(O.backdropOpen))}componentDidUpdate(){const e=this.getElement(this.props.appendTo);this.props.isOpen?(e.classList.add(h(O.backdropOpen)),this.toggleSiblingsFromScreenReaders(!0)):(e.classList.remove(h(O.backdropOpen)),this.toggleSiblingsFromScreenReaders(!1))}componentWillUnmount(){const e=this.getElement(this.props.appendTo);this.state.container&&e.removeChild(this.state.container),e.removeEventListener("keydown",this.handleEscKeyClick,!1),e.classList.remove(h(O.backdropOpen))}render(){const e=at(this.props,["appendTo"]),{container:t}=this.state;return ie&&t?m(l(it,lt({ariaLabelledbyId:this.ariaLabelledBy,ariaDescribedById:this.ariaDescribedBy},e)),t):null}}st(ct,"propTypes",{children:n.node.isRequired,className:n.string,isOpen:n.bool,onClose:n.func,productName:n.string,trademark:n.string,brandImageSrc:n.string.isRequired,brandImageAlt:n.string.isRequired,backgroundImageSrc:n.string,noAboutModalBoxContentContainer:n.bool,appendTo:n.oneOfType([n.any,n.func]),closeButtonAriaLabel:n.string}),st(ct,"currentId",0),st(ct,"defaultProps",{className:"",isOpen:!1,onClose:()=>{},productName:"",trademark:"",backgroundImageSrc:"",noAboutModalBoxContentContainer:!1,appendTo:null});var pt=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={accordion:"pf-c-accordion",accordionToggle:"pf-c-accordion__toggle",accordionToggleText:"pf-c-accordion__toggle-text",accordionToggleIcon:"pf-c-accordion__toggle-icon",accordionExpandedContent:"pf-c-accordion__expanded-content",accordionExpandedContentBody:"pf-c-accordion__expanded-content-body",modifiers:{noBoxShadow:"pf-m-no-box-shadow",expanded:"pf-m-expanded",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",fixed:"pf-m-fixed"}}})));const ut=a({});function ft(){return(ft=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const mt=e=>{let{children:t=null,className:n="","aria-label":r="",headingLevel:o="h3",asDefinitionList:i=!0,noBoxShadow:a=!1}=e,s=dt(e,["children","className","aria-label","headingLevel","asDefinitionList","noBoxShadow"]);return l(i?"dl":"div",ft({className:h(pt.accordion,a&&pt.modifiers.noBoxShadow,n),"aria-label":r},s),l(ut.Provider,{value:{ContentContainer:i?"dd":"div",ToggleContainer:i?"dt":o}},t))};mt.propTypes={children:n.node,className:n.string,"aria-label":n.string,headingLevel:n.oneOf(["h1","h2","h3","h4","h5","h6"]),asDefinitionList:n.bool,noBoxShadow:n.bool};const gt=({children:e=null})=>l(s,null,e);function ht(){return(ht=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}gt.propTypes={children:n.node};const yt=e=>{let{className:t="",children:n=null,id:r="",isHidden:o=!1,isFixed:i=!1,"aria-label":a="",component:s}=e,c=bt(e,["className","children","id","isHidden","isFixed","aria-label","component"]);return l(ut.Consumer,null,({ContentContainer:e})=>l(s||e,ht({id:r,className:h(pt.accordionExpandedContent,i&&pt.modifiers.fixed,!o&&pt.modifiers.expanded,t),hidden:o,"aria-label":a},c),l("div",{className:h(pt.accordionExpandedContentBody)},n)))};yt.propTypes={children:n.node,className:n.string,id:n.string,isHidden:n.bool,isFixed:n.bool,"aria-label":n.string,component:n.any};var Ot=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.AngleRightIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"AngleRightIcon",height:512,width:256,svgPath:"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z",yOffset:"",xOffset:"",transform:""};t.AngleRightIconConfig=r;var o=(0,n.default)(r);t.default=o})),vt=e(Ot);Ot.AngleRightIconConfig;function xt(){return(xt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ct=e=>{let{className:t="",id:n,isExpanded:r=!1,children:o=null,component:i}=e,a=wt(e,["className","id","isExpanded","children","component"]);return l(ut.Consumer,null,({ToggleContainer:e})=>l(i||e,null,l("button",xt({id:n,className:h(pt.accordionToggle,r&&pt.modifiers.expanded,t)},a,{"aria-expanded":r}),l("span",{className:h(pt.accordionToggleText)},o),l(vt,{className:h(pt.accordionToggleIcon)}))))};Ct.propTypes={children:n.node,className:n.string,isExpanded:n.bool,id:n.string.isRequired,component:n.any};var jt=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={alert:"pf-c-alert",alertIcon:"pf-c-alert__icon",alertTitle:"pf-c-alert__title",alertDescription:"pf-c-alert__description",alertAction:"pf-c-alert__action",modifiers:{success:"pf-m-success",inline:"pf-m-inline",danger:"pf-m-danger",warning:"pf-m-warning",info:"pf-m-info",redhatFont:"pf-m-redhat-font"}}}))),Pt=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={screenReader:"pf-u-screen-reader",visible:"pf-u-visible",hidden:"pf-u-hidden",screenReaderOnSm:"pf-u-screen-reader-on-sm",visibleOnSm:"pf-u-visible-on-sm",hiddenOnSm:"pf-u-hidden-on-sm",screenReaderOnMd:"pf-u-screen-reader-on-md",visibleOnMd:"pf-u-visible-on-md",hiddenOnMd:"pf-u-hidden-on-md",screenReaderOnLg:"pf-u-screen-reader-on-lg",visibleOnLg:"pf-u-visible-on-lg",hiddenOnLg:"pf-u-hidden-on-lg",screenReaderOnXl:"pf-u-screen-reader-on-xl",visibleOnXl:"pf-u-visible-on-xl",hiddenOnXl:"pf-u-hidden-on-xl",screenReaderOn_2xl:"pf-u-screen-reader-on-2xl",visibleOn_2xl:"pf-u-visible-on-2xl",hiddenOn_2xl:"pf-u-hidden-on-2xl",modifiers:{}}}))),St=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.CheckCircleIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"CheckCircleIcon",height:512,width:512,svgPath:"M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z",yOffset:"",xOffset:"",transform:""};t.CheckCircleIconConfig=r;var o=(0,n.default)(r);t.default=o})),Nt=e(St),Tt=(St.CheckCircleIconConfig,t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.ExclamationCircleIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"ExclamationCircleIcon",height:512,width:512,svgPath:"M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z",yOffset:"",xOffset:"",transform:""};t.ExclamationCircleIconConfig=r;var o=(0,n.default)(r);t.default=o}))),_t=e(Tt),kt=(Tt.ExclamationCircleIconConfig,t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.ExclamationTriangleIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"ExclamationTriangleIcon",height:512,width:576,svgPath:"M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z",yOffset:"",xOffset:"",transform:""};t.ExclamationTriangleIconConfig=r;var o=(0,n.default)(r);t.default=o}))),It=e(kt),Lt=(kt.ExclamationTriangleIconConfig,t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.InfoCircleIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"InfoCircleIcon",height:512,width:512,svgPath:"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z",yOffset:"",xOffset:"",transform:""};t.InfoCircleIconConfig=r;var o=(0,n.default)(r);t.default=o}))),Et=e(Lt),Mt=(Lt.InfoCircleIconConfig,t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.BellIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"BellIcon",height:512,width:448,svgPath:"M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z",yOffset:"",xOffset:"",transform:""};t.BellIconConfig=r;var o=(0,n.default)(r);t.default=o}))),Rt=e(Mt);Mt.BellIconConfig;function Dt(){return(Dt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ft={success:Nt,danger:_t,warning:It,info:Et,default:Rt},At=e=>{let{variant:t,className:n=""}=e,r=Bt(e,["variant","className"]);const o=Ft[t];return l("div",Dt({},r,{className:h(jt.alertIcon,n)}),l(o,null))};At.propTypes={variant:n.oneOf(["success","danger","warning","info","default"]).isRequired,className:n.string};const Ht=a(null);function zt(){return(zt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Xt;!function(e){e.success="success",e.danger="danger",e.warning="warning",e.info="info",e.default="default"}(Xt||(Xt={}));const Vt=e=>{let{variant:t=Xt.info,isInline:n=!1,isLiveRegion:r=!1,variantLabel:o=$(t)+" alert:","aria-label":i=$(t)+" Alert",action:a=null,title:c,children:p="",className:u="",ouiaContext:f=null,ouiaId:d=null}=e,m=qt(e,["variant","isInline","isLiveRegion","variantLabel","aria-label","action","title","children","className","ouiaContext","ouiaId"]);const b=l(s,null,l("span",{className:h(Pt.screenReader)},o),c),y=h(jt.alert,n&&jt.modifiers.inline,t!==Xt.default&&g(jt,t,jt.modifiers.info),u);return l("div",zt({},m,{className:y,"aria-label":i},f.isOuia&&{"data-ouia-component-type":"Alert","data-ouia-component-id":d||f.ouiaId},r&&{"aria-live":"polite","aria-atomic":"false"}),l(At,{variant:t}),l("h4",{className:h(jt.alertTitle)},b),p&&l("div",{className:h(jt.alertDescription)},p),l(Ht.Provider,{value:{title:c,variantLabel:o}},a&&("object"==typeof a||"string"==typeof a)&&l("div",{className:h(jt.alertAction)},a)))};Vt.propTypes={variant:n.oneOf(["success","danger","warning","info","default"]),isInline:n.bool,title:n.node.isRequired,action:n.node,children:n.node,className:n.string,"aria-label":n.string,variantLabel:n.string,isLiveRegion:n.bool};const Gt=Ee(Vt);function Wt(){return(Wt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ut=e=>{let{className:t="",onClose:n=(()=>{}),"aria-label":r="",variantLabel:o}=e,i=Kt(e,["className","onClose","aria-label","variantLabel"]);return l(Ht.Consumer,null,({title:e,variantLabel:t})=>l(Xe,Wt({variant:He.plain,onClick:n,"aria-label":""===r?`Close ${o||t} alert: ${e}`:r},i),l(Ke,null)))};function $t(){return($t=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ut.propTypes={className:n.string,onClose:n.func,"aria-label":n.string,variantLabel:n.string};const Jt=e=>{let{className:t="",children:n}=e,r=Yt(e,["className","children"]);return l(Xe,$t({variant:He.link,className:t},r),n)};Jt.propTypes={children:n.string,className:n.string};var Zt=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={alertGroup:"pf-c-alert-group",modifiers:{toast:"pf-m-toast"}}})));function Qt(){return(Qt=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const tn=e=>{let{className:t,children:n,isToast:r}=e,o=en(e,["className","children","isToast"]);return l("ul",Qt({className:h(Zt.alertGroup,t,r?Zt.modifiers.toast:"")},o),c.toArray(n).map((e,t)=>l("li",{key:t},e)))};function nn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class rn extends o{constructor(...e){super(...e),nn(this,"state",{container:void 0})}componentDidMount(){const e=document.createElement("div"),t=this.getTargetElement();this.setState({container:e}),t.appendChild(e)}componentWillUnmount(){const e=this.getTargetElement();this.state.container&&e.removeChild(this.state.container)}getTargetElement(){const e=this.props.appendTo;return"function"==typeof e?e():e||document.body}render(){const{className:e,children:t,isToast:n}=this.props,r=l(tn,{className:e,isToast:n},t);if(!this.props.isToast)return r;const o=this.state.container;return ie&&o?m(r,o):null}}nn(rn,"propTypes",{className:n.string,children:n.node,isToast:n.bool,appendTo:n.oneOfType([n.any,n.func])});var on=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={appLauncher:"pf-c-app-launcher",appLauncherToggle:"pf-c-app-launcher__toggle",divider:"pf-c-divider",appLauncherMenu:"pf-c-app-launcher__menu",appLauncherMenuSearch:"pf-c-app-launcher__menu-search",appLauncherMenuWrapper:"pf-c-app-launcher__menu-wrapper",appLauncherMenuItem:"pf-c-app-launcher__menu-item",appLauncherMenuItemExternalIcon:"pf-c-app-launcher__menu-item-external-icon",appLauncherMenuItemIcon:"pf-c-app-launcher__menu-item-icon",appLauncherSeparator:"pf-c-app-launcher__separator",appLauncherGroup:"pf-c-app-launcher__group",appLauncherGroupTitle:"pf-c-app-launcher__group-title",modifiers:{expanded:"pf-m-expanded",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",disabled:"pf-m-disabled",alignRight:"pf-m-align-right",top:"pf-m-top",favorite:"pf-m-favorite",external:"pf-m-external",link:"pf-m-link",action:"pf-m-action"}}}))),ln=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={formControl:"pf-c-form-control",modifiers:{hover:"pf-m-hover",focus:"pf-m-focus",success:"pf-m-success",search:"pf-m-search",resizeVertical:"pf-m-resize-vertical",resizeHorizontal:"pf-m-resize-horizontal"}}}))),an=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.ThIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"ThIcon",height:512,width:512,svgPath:"M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z",yOffset:"",xOffset:"",transform:""};t.ThIconConfig=r;var o=(0,n.default)(r);t.default=o})),sn=e(an),cn=(an.ThIconConfig,e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={dropdown:"pf-c-dropdown",divider:"pf-c-divider",dropdownToggle:"pf-c-dropdown__toggle",dropdownToggleButton:"pf-c-dropdown__toggle-button",dropdownToggleCheck:"pf-c-dropdown__toggle-check",dropdownToggleText:"pf-c-dropdown__toggle-text",dropdownToggleIcon:"pf-c-dropdown__toggle-icon",dropdownMenu:"pf-c-dropdown__menu",dropdownMenuItem:"pf-c-dropdown__menu-item",dropdownMenuItemIcon:"pf-c-dropdown__menu-item-icon",dropdownSeparator:"pf-c-dropdown__separator",dropdownGroup:"pf-c-dropdown__group",dropdownGroupTitle:"pf-c-dropdown__group-title",modifiers:{disabled:"pf-m-disabled",plain:"pf-m-plain",splitButton:"pf-m-split-button",action:"pf-m-action",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",expanded:"pf-m-expanded",primary:"pf-m-primary",top:"pf-m-top",alignRight:"pf-m-align-right",icon:"pf-m-icon"}}}))));let pn,un;!function(e){e.right="right",e.left="left"}(pn||(pn={})),function(e){e.up="up",e.down="down"}(un||(un={}));const fn=a({onSelect:e=>{},id:"",toggleIconClass:"",toggleTextClass:"",menuClass:"",itemClass:"",toggleClass:"",baseClass:"",baseComponent:"div",sectionClass:"",sectionTitleClass:"",sectionComponent:"section",disabledClass:"",hoverClass:"",separatorClass:"",menuComponent:"ul"}),dn=a({keyHandler:null,sendRef:null});function mn(){return(mn=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function hn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function bn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class yn extends o{constructor(...e){super(...e),bn(this,"refsCollection",[]),bn(this,"childKeyHandler",(e,t,n,r=!1)=>{te(e,t,n,this.refsCollection,this.props.isGrouped?this.refsCollection:c.toArray(this.props.children),r)}),bn(this,"sendRef",(e,t,n,r)=>{this.refsCollection[e]=[],t.map((t,o)=>{t?t.getAttribute?this.refsCollection[e][o]=n||r?null:t:this.refsCollection[e][o]=d(t):this.refsCollection[e][o]=null})})}componentDidMount(){const{autoFocus:e}=this.props;if(e){const e=this.refsCollection.find(e=>e&&e[0]&&!e[0].hasAttribute("disabled")),t=e&&e[0];t&&t.focus&&t.focus()}}shouldComponentUpdate(){return this.refsCollection=[],!0}extendChildren(){const{children:e,isGrouped:t}=this.props;if(t){let t=0;return c.map(e,e=>{const n=e;return p(n,function(e){for(var t=1;tp(e,{index:t++}))||p(n.props.children,{index:t++})}))})}return c.map(e,(e,t)=>p(e,{index:t}))}render(){const e=this.props,{className:t,isOpen:n,position:r,children:o,component:i,isGrouped:a,openedOnEnter:s}=e,c=gn(e,["className","isOpen","position","children","component","isGrouped","openedOnEnter"]);return l(dn.Provider,{value:{keyHandler:this.childKeyHandler,sendRef:this.sendRef}},"div"===i?l(fn.Consumer,null,({onSelect:e,menuClass:i})=>l("div",{className:h(i,r===pn.right&&cn.modifiers.alignRight,t),hidden:!n,onClick:t=>e&&e(t)},o)):a&&l(fn.Consumer,null,({menuClass:e,menuComponent:o})=>l(o||"div",mn({},c,{className:h(e,r===pn.right&&cn.modifiers.alignRight,t),hidden:!n,role:"menu"}),this.extendChildren()))||l(fn.Consumer,null,({menuClass:e,menuComponent:o})=>l(o||i,mn({},c,{className:h(e,r===pn.right&&cn.modifiers.alignRight,t),hidden:!n,role:"menu"}),this.extendChildren())))}}function On(){return(On=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xn(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}bn(yn,"propTypes",{children:n.node,className:n.string,isOpen:n.bool,openedOnEnter:n.bool,autoFocus:n.bool,component:n.node,position:n.oneOfType([n.any,n.oneOf(["right"]),n.oneOf(["left"])]),isGrouped:n.bool}),bn(yn,"defaultProps",{className:"",isOpen:!0,openedOnEnter:!1,autoFocus:!0,position:pn.left,component:"ul",isGrouped:!1});class wn extends o{constructor(e){super(e),xn(this,"openedOnEnter",!1),xn(this,"baseComponentRef",i()),xn(this,"onEnter",()=>{this.openedOnEnter=!0}),e.dropdownItems&&e.dropdownItems.length>0&&e.children&&console.error("Children and dropdownItems props have been provided. Only the dropdownItems prop items will be rendered")}componentDidUpdate(){this.props.isOpen||(this.openedOnEnter=!1)}render(){const e=this.props,{children:t,className:n,direction:r,dropdownItems:o,isOpen:i,isPlain:a,isGrouped:s,onSelect:u,position:f,toggle:d,autoFocus:m,ouiaContext:g,ouiaId:b,ouiaComponentType:y}=e,O=vn(e,["children","className","direction","dropdownItems","isOpen","isPlain","isGrouped","onSelect","position","toggle","autoFocus","ouiaContext","ouiaId","ouiaComponentType"]),v=d.props.id||"pf-toggle-id-"+wn.currentId++;let x,w,C=!1;o&&o.length>0?(x="ul",w=o,C=!0):(x="div",w=c.toArray(t));const j=this.openedOnEnter;return l(fn.Consumer,null,({baseClass:e,baseComponent:t,id:o})=>l(t,On({},O,{className:h(e,r===un.up&&cn.modifiers.top,f===pn.right&&cn.modifiers.alignRight,i&&cn.modifiers.expanded,n),ref:this.baseComponentRef},g.isOuia&&{"data-ouia-component-type":y,"data-ouia-component-id":b||g.ouiaId}),c.map(d,e=>p(e,{parentRef:this.baseComponentRef,isOpen:i,id:v,isPlain:a,ariaHasPopup:C,onEnter:()=>this.onEnter()})),i&&l(yn,{component:x,isOpen:i,position:f,"aria-labelledby":o?o+"-toggle":v,openedOnEnter:j,isGrouped:s,autoFocus:j&&m},w)))}}xn(wn,"currentId",0),xn(wn,"defaultProps",{className:"",dropdownItems:[],isOpen:!1,isPlain:!1,isGrouped:!1,position:pn.left,direction:un.down,onSelect:()=>{},autoFocus:!0,ouiaComponentType:"Dropdown"});const Cn=Ee(wn);function jn(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Pn=e=>{let{onSelect:t,ref:n}=e,r=jn(e,["onSelect","ref"]);return l(fn.Provider,{value:{onSelect:e=>t&&t(e),toggleTextClass:cn.dropdownToggleText,toggleIconClass:cn.dropdownToggleIcon,menuClass:cn.dropdownMenu,itemClass:cn.dropdownMenuItem,toggleClass:cn.dropdownToggle,baseClass:cn.dropdown,baseComponent:"div",sectionClass:cn.dropdownGroup,sectionTitleClass:cn.dropdownGroupTitle,sectionComponent:"section",disabledClass:cn.modifiers.disabled,hoverClass:cn.modifiers.hover,separatorClass:cn.dropdownSeparator}},l(Cn,r))};Pn.propTypes={children:n.node,className:n.string,dropdownItems:n.arrayOf(n.any),isOpen:n.bool,isPlain:n.bool,position:n.oneOfType([n.any,n.oneOf(["right"]),n.oneOf(["left"])]),direction:n.oneOfType([n.any,n.oneOf(["up"]),n.oneOf(["down"])]),isGrouped:n.bool,toggle:n.element.isRequired,onSelect:n.func,autoFocus:n.bool,ouiaComponentType:n.string};const Sn=({children:e=null,className:t="",label:n=""})=>l(fn.Consumer,null,({sectionClass:r,sectionTitleClass:o,sectionComponent:i})=>l(i,{className:h(r,t)},n&&l("h1",{className:h(o),"aria-hidden":!0},n),l("ul",{role:"none"},e)));Sn.propTypes={children:n.node,className:n.string,label:n.node}; -/**! - * @fileOverview Kickass library to create and place poppers near their reference elements. - * @version 1.16.1 - * @license - * Copyright (c) 2016 Federico Zivolo and contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -var Nn="undefined"!=typeof window&&"undefined"!=typeof document&&"undefined"!=typeof navigator,Tn=function(){for(var e=["Edge","Trident","Firefox"],t=0;t=0)return 1;return 0}();var _n=Nn&&window.Promise?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then((function(){t=!1,e()})))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout((function(){t=!1,e()}),Tn))}};function kn(e){return e&&"[object Function]"==={}.toString.call(e)}function In(e,t){if(1!==e.nodeType)return[];var n=e.ownerDocument.defaultView.getComputedStyle(e,null);return t?n[t]:n}function Ln(e){return"HTML"===e.nodeName?e:e.parentNode||e.host}function En(e){if(!e)return document.body;switch(e.nodeName){case"HTML":case"BODY":return e.ownerDocument.body;case"#document":return e.body}var t=In(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/(auto|scroll|overlay)/.test(n+o+r)?e:En(Ln(e))}function Mn(e){return e&&e.referenceNode?e.referenceNode:e}var Rn=Nn&&!(!window.MSInputMethodContext||!document.documentMode),Dn=Nn&&/MSIE 10/.test(navigator.userAgent);function Bn(e){return 11===e?Rn:10===e?Dn:Rn||Dn}function Fn(e){if(!e)return document.documentElement;for(var t=Bn(10)?document.body:null,n=e.offsetParent||null;n===t&&e.nextElementSibling;)n=(e=e.nextElementSibling).offsetParent;var r=n&&n.nodeName;return r&&"BODY"!==r&&"HTML"!==r?-1!==["TH","TD","TABLE"].indexOf(n.nodeName)&&"static"===In(n,"position")?Fn(n):n:e?e.ownerDocument.documentElement:document.documentElement}function An(e){return null!==e.parentNode?An(e.parentNode):e}function Hn(e,t){if(!(e&&e.nodeType&&t&&t.nodeType))return document.documentElement;var n=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,r=n?e:t,o=n?t:e,i=document.createRange();i.setStart(r,0),i.setEnd(o,0);var l,a,s=i.commonAncestorContainer;if(e!==s&&t!==s||r.contains(o))return"BODY"===(a=(l=s).nodeName)||"HTML"!==a&&Fn(l.firstElementChild)!==l?Fn(s):s;var c=An(e);return c.host?Hn(c.host,t):Hn(e,An(t).host)}function zn(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"top",n="top"===t?"scrollTop":"scrollLeft",r=e.nodeName;if("BODY"===r||"HTML"===r){var o=e.ownerDocument.documentElement,i=e.ownerDocument.scrollingElement||o;return i[n]}return e[n]}function qn(e,t){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2],r=zn(t,"top"),o=zn(t,"left"),i=n?-1:1;return e.top+=r*i,e.bottom+=r*i,e.left+=o*i,e.right+=o*i,e}function Xn(e,t){var n="x"===t?"Left":"Top",r="Left"===n?"Right":"Bottom";return parseFloat(e["border"+n+"Width"])+parseFloat(e["border"+r+"Width"])}function Vn(e,t,n,r){return Math.max(t["offset"+e],t["scroll"+e],n["client"+e],n["offset"+e],n["scroll"+e],Bn(10)?parseInt(n["offset"+e])+parseInt(r["margin"+("Height"===e?"Top":"Left")])+parseInt(r["margin"+("Height"===e?"Bottom":"Right")]):0)}function Gn(e){var t=e.body,n=e.documentElement,r=Bn(10)&&getComputedStyle(n);return{height:Vn("Height",t,n,r),width:Vn("Width",t,n,r)}}var Wn=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},Kn=function(){function e(e,t){for(var n=0;n2&&void 0!==arguments[2]&&arguments[2],r=Bn(10),o="HTML"===t.nodeName,i=Jn(e),l=Jn(t),a=En(e),s=In(t),c=parseFloat(s.borderTopWidth),p=parseFloat(s.borderLeftWidth);n&&o&&(l.top=Math.max(l.top,0),l.left=Math.max(l.left,0));var u=Yn({top:i.top-l.top-c,left:i.left-l.left-p,width:i.width,height:i.height});if(u.marginTop=0,u.marginLeft=0,!r&&o){var f=parseFloat(s.marginTop),d=parseFloat(s.marginLeft);u.top-=c-f,u.bottom-=c-f,u.left-=p-d,u.right-=p-d,u.marginTop=f,u.marginLeft=d}return(r&&!n?t.contains(a):t===a&&"BODY"!==a.nodeName)&&(u=qn(u,t)),u}function Qn(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=e.ownerDocument.documentElement,r=Zn(e,n),o=Math.max(n.clientWidth,window.innerWidth||0),i=Math.max(n.clientHeight,window.innerHeight||0),l=t?0:zn(n),a=t?0:zn(n,"left"),s={top:l-r.top+r.marginTop,left:a-r.left+r.marginLeft,width:o,height:i};return Yn(s)}function er(e){var t=e.nodeName;if("BODY"===t||"HTML"===t)return!1;if("fixed"===In(e,"position"))return!0;var n=Ln(e);return!!n&&er(n)}function tr(e){if(!e||!e.parentElement||Bn())return document.documentElement;for(var t=e.parentElement;t&&"none"===In(t,"transform");)t=t.parentElement;return t||document.documentElement}function nr(e,t,n,r){var o=arguments.length>4&&void 0!==arguments[4]&&arguments[4],i={top:0,left:0},l=o?tr(e):Hn(e,Mn(t));if("viewport"===r)i=Qn(l,o);else{var a=void 0;"scrollParent"===r?"BODY"===(a=En(Ln(t))).nodeName&&(a=e.ownerDocument.documentElement):a="window"===r?e.ownerDocument.documentElement:r;var s=Zn(a,l,o);if("HTML"!==a.nodeName||er(l))i=s;else{var c=Gn(e.ownerDocument),p=c.height,u=c.width;i.top+=s.top-s.marginTop,i.bottom=p+s.top,i.left+=s.left-s.marginLeft,i.right=u+s.left}}var f="number"==typeof(n=n||0);return i.left+=f?n:n.left||0,i.top+=f?n:n.top||0,i.right-=f?n:n.right||0,i.bottom-=f?n:n.bottom||0,i}function rr(e){return e.width*e.height}function or(e,t,n,r,o){var i=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf("auto"))return e;var l=nr(n,r,i,o),a={top:{width:l.width,height:t.top-l.top},right:{width:l.right-t.right,height:l.height},bottom:{width:l.width,height:l.bottom-t.bottom},left:{width:t.left-l.left,height:l.height}},s=Object.keys(a).map((function(e){return $n({key:e},a[e],{area:rr(a[e])})})).sort((function(e,t){return t.area-e.area})),c=s.filter((function(e){var t=e.width,r=e.height;return t>=n.clientWidth&&r>=n.clientHeight})),p=c.length>0?c[0].key:s[0].key,u=e.split("-")[1];return p+(u?"-"+u:"")}function ir(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,o=r?tr(t):Hn(t,Mn(n));return Zn(n,o,r)}function lr(e){var t=e.ownerDocument.defaultView.getComputedStyle(e),n=parseFloat(t.marginTop||0)+parseFloat(t.marginBottom||0),r=parseFloat(t.marginLeft||0)+parseFloat(t.marginRight||0);return{width:e.offsetWidth+r,height:e.offsetHeight+n}}function ar(e){var t={left:"right",right:"left",bottom:"top",top:"bottom"};return e.replace(/left|right|bottom|top/g,(function(e){return t[e]}))}function sr(e,t,n){n=n.split("-")[0];var r=lr(e),o={width:r.width,height:r.height},i=-1!==["right","left"].indexOf(n),l=i?"top":"left",a=i?"left":"top",s=i?"height":"width",c=i?"width":"height";return o[l]=t[l]+t[s]/2-r[s]/2,o[a]=n===a?t[a]-r[c]:t[ar(a)],o}function cr(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function pr(e,t,n){return(void 0===n?e:e.slice(0,function(e,t,n){if(Array.prototype.findIndex)return e.findIndex((function(e){return e[t]===n}));var r=cr(e,(function(e){return e[t]===n}));return e.indexOf(r)}(e,"name",n))).forEach((function(e){e.function&&console.warn("`modifier.function` is deprecated, use `modifier.fn`!");var n=e.function||e.fn;e.enabled&&kn(n)&&(t.offsets.popper=Yn(t.offsets.popper),t.offsets.reference=Yn(t.offsets.reference),t=n(t,e))})),t}function ur(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=ir(this.state,this.popper,this.reference,this.options.positionFixed),e.placement=or(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.positionFixed=this.options.positionFixed,e.offsets.popper=sr(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position=this.options.positionFixed?"fixed":"absolute",e=pr(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function fr(e,t){return e.some((function(e){var n=e.name;return e.enabled&&n===t}))}function dr(e){for(var t=[!1,"ms","Webkit","Moz","O"],n=e.charAt(0).toUpperCase()+e.slice(1),r=0;r1&&void 0!==arguments[1]&&arguments[1],n=jr.indexOf(e),r=jr.slice(n+1).concat(jr.slice(0,n));return t?r.reverse():r}var Sr="flip",Nr="clockwise",Tr="counterclockwise";function _r(e,t,n,r){var o=[0,0],i=-1!==["right","left"].indexOf(r),l=e.split(/(\+|\-)/).map((function(e){return e.trim()})),a=l.indexOf(cr(l,(function(e){return-1!==e.search(/,|\s/)})));l[a]&&-1===l[a].indexOf(",")&&console.warn("Offsets separated by white space(s) are deprecated, use a comma (,) instead.");var s=/\s*,\s*|\s+/,c=-1!==a?[l.slice(0,a).concat([l[a].split(s)[0]]),[l[a].split(s)[1]].concat(l.slice(a+1))]:[l];return(c=c.map((function(e,r){var o=(1===r?!i:i)?"height":"width",l=!1;return e.reduce((function(e,t){return""===e[e.length-1]&&-1!==["+","-"].indexOf(t)?(e[e.length-1]=t,l=!0,e):l?(e[e.length-1]+=t,l=!1,e):e.concat(t)}),[]).map((function(e){return function(e,t,n,r){var o=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),i=+o[1],l=o[2];if(!i)return e;if(0===l.indexOf("%")){var a=void 0;switch(l){case"%p":a=n;break;case"%":case"%r":default:a=r}return Yn(a)[t]/100*i}if("vh"===l||"vw"===l){return("vh"===l?Math.max(document.documentElement.clientHeight,window.innerHeight||0):Math.max(document.documentElement.clientWidth,window.innerWidth||0))/100*i}return i}(e,o,t,n)}))}))).forEach((function(e,t){e.forEach((function(n,r){Or(n)&&(o[t]+=n*("-"===e[r-1]?-1:1))}))})),o}var kr={placement:"bottom",positionFixed:!1,eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,n=t.split("-")[0],r=t.split("-")[1];if(r){var o=e.offsets,i=o.reference,l=o.popper,a=-1!==["bottom","top"].indexOf(n),s=a?"left":"top",c=a?"width":"height",p={start:Un({},s,i[s]),end:Un({},s,i[s]+i[c]-l[c])};e.offsets.popper=$n({},l,p[r])}return e}},offset:{order:200,enabled:!0,fn:function(e,t){var n=t.offset,r=e.placement,o=e.offsets,i=o.popper,l=o.reference,a=r.split("-")[0],s=void 0;return s=Or(+n)?[+n,0]:_r(n,i,l,a),"left"===a?(i.top+=s[0],i.left-=s[1]):"right"===a?(i.top+=s[0],i.left+=s[1]):"top"===a?(i.left+=s[0],i.top-=s[1]):"bottom"===a&&(i.left+=s[0],i.top+=s[1]),e.popper=i,e},offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var n=t.boundariesElement||Fn(e.instance.popper);e.instance.reference===n&&(n=Fn(n));var r=dr("transform"),o=e.instance.popper.style,i=o.top,l=o.left,a=o[r];o.top="",o.left="",o[r]="";var s=nr(e.instance.popper,e.instance.reference,t.padding,n,e.positionFixed);o.top=i,o.left=l,o[r]=a,t.boundaries=s;var c=t.priority,p=e.offsets.popper,u={primary:function(e){var n=p[e];return p[e]s[e]&&!t.escapeWithReference&&(r=Math.min(p[n],s[e]-("right"===e?p.width:p.height))),Un({},n,r)}};return c.forEach((function(e){var t=-1!==["left","top"].indexOf(e)?"primary":"secondary";p=$n({},p,u[t](e))})),e.offsets.popper=p,e},priority:["left","right","top","bottom"],padding:5,boundariesElement:"scrollParent"},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,n=t.popper,r=t.reference,o=e.placement.split("-")[0],i=Math.floor,l=-1!==["top","bottom"].indexOf(o),a=l?"right":"bottom",s=l?"left":"top",c=l?"width":"height";return n[a]i(r[a])&&(e.offsets.popper[s]=i(r[a])),e}},arrow:{order:500,enabled:!0,fn:function(e,t){var n;if(!wr(e.instance.modifiers,"arrow","keepTogether"))return e;var r=t.element;if("string"==typeof r){if(!(r=e.instance.popper.querySelector(r)))return e}else if(!e.instance.popper.contains(r))return console.warn("WARNING: `arrow.element` must be child of its popper element!"),e;var o=e.placement.split("-")[0],i=e.offsets,l=i.popper,a=i.reference,s=-1!==["left","right"].indexOf(o),c=s?"height":"width",p=s?"Top":"Left",u=p.toLowerCase(),f=s?"left":"top",d=s?"bottom":"right",m=lr(r)[c];a[d]-ml[d]&&(e.offsets.popper[u]+=a[u]+m-l[d]),e.offsets.popper=Yn(e.offsets.popper);var g=a[u]+a[c]/2-m/2,h=In(e.instance.popper),b=parseFloat(h["margin"+p]),y=parseFloat(h["border"+p+"Width"]),O=g-e.offsets.popper[u]-b-y;return O=Math.max(Math.min(l[c]-m,O),0),e.arrowElement=r,e.offsets.arrow=(Un(n={},u,Math.round(O)),Un(n,f,""),n),e},element:"[x-arrow]"},flip:{order:600,enabled:!0,fn:function(e,t){if(fr(e.instance.modifiers,"inner"))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var n=nr(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement,e.positionFixed),r=e.placement.split("-")[0],o=ar(r),i=e.placement.split("-")[1]||"",l=[];switch(t.behavior){case Sr:l=[r,o];break;case Nr:l=Pr(r);break;case Tr:l=Pr(r,!0);break;default:l=t.behavior}return l.forEach((function(a,s){if(r!==a||l.length===s+1)return e;r=e.placement.split("-")[0],o=ar(r);var c=e.offsets.popper,p=e.offsets.reference,u=Math.floor,f="left"===r&&u(c.right)>u(p.left)||"right"===r&&u(c.left)u(p.top)||"bottom"===r&&u(c.top)u(n.right),g=u(c.top)u(n.bottom),b="left"===r&&d||"right"===r&&m||"top"===r&&g||"bottom"===r&&h,y=-1!==["top","bottom"].indexOf(r),O=!!t.flipVariations&&(y&&"start"===i&&d||y&&"end"===i&&m||!y&&"start"===i&&g||!y&&"end"===i&&h),v=!!t.flipVariationsByContent&&(y&&"start"===i&&m||y&&"end"===i&&d||!y&&"start"===i&&h||!y&&"end"===i&&g),x=O||v;(f||b||x)&&(e.flipped=!0,(f||b)&&(r=l[s+1]),x&&(i=function(e){return"end"===e?"start":"start"===e?"end":e}(i)),e.placement=r+(i?"-"+i:""),e.offsets.popper=$n({},e.offsets.popper,sr(e.instance.popper,e.offsets.reference,e.placement)),e=pr(e.instance.modifiers,e,"flip"))})),e},behavior:"flip",padding:5,boundariesElement:"viewport",flipVariations:!1,flipVariationsByContent:!1},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,n=t.split("-")[0],r=e.offsets,o=r.popper,i=r.reference,l=-1!==["left","right"].indexOf(n),a=-1===["top","left"].indexOf(n);return o[l?"left":"top"]=i[n]-(a?o[l?"width":"height"]:0),e.placement=ar(t),e.offsets.popper=Yn(o),e}},hide:{order:800,enabled:!0,fn:function(e){if(!wr(e.instance.modifiers,"hide","preventOverflow"))return e;var t=e.offsets.reference,n=cr(e.instance.modifiers,(function(e){return"preventOverflow"===e.name})).boundaries;if(t.bottomn.right||t.top>n.bottom||t.right2&&void 0!==arguments[2]?arguments[2]:{};Wn(this,e),this.scheduleUpdate=function(){return requestAnimationFrame(r.update)},this.update=_n(this.update.bind(this)),this.options=$n({},e.Defaults,o),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=t&&t.jquery?t[0]:t,this.popper=n&&n.jquery?n[0]:n,this.options.modifiers={},Object.keys($n({},e.Defaults.modifiers,o.modifiers)).forEach((function(t){r.options.modifiers[t]=$n({},e.Defaults.modifiers[t]||{},o.modifiers?o.modifiers[t]:{})})),this.modifiers=Object.keys(this.options.modifiers).map((function(e){return $n({name:e},r.options.modifiers[e])})).sort((function(e,t){return e.order-t.order})),this.modifiers.forEach((function(e){e.enabled&&kn(e.onLoad)&&e.onLoad(r.reference,r.popper,r.options,e,r.state)})),this.update();var i=this.options.eventsEnabled;i&&this.enableEventListeners(),this.state.eventsEnabled=i}return Kn(e,[{key:"update",value:function(){return ur.call(this)}},{key:"destroy",value:function(){return mr.call(this)}},{key:"enableEventListeners",value:function(){return br.call(this)}},{key:"disableEventListeners",value:function(){return yr.call(this)}}]),e}(); -/**! -* tippy.js v5.1.2 -* (c) 2017-2019 atomiks -* MIT License -*/ -function Lr(){return(Lr=Object.assign||function(e){for(var t=1;t-1}function Ar(e){return Fr(e,"Element")}function Hr(e,t){return"function"==typeof e?e.apply(void 0,t):e}function zr(e,t,n,r){e.filter((function(e){return e.name===t}))[0][n]=r}function qr(){return document.createElement("div")}function Xr(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function Vr(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function Gr(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function Wr(e,t,n){e&&e!==t&&e.apply(void 0,n)}function Kr(e){return[].slice.call(e)}function Ur(e,t){return e.indexOf(t)>-1}function $r(e){return e.split(/\s+/).filter(Boolean)}function Yr(e,t){return void 0!==e?e:t}function Jr(e){return[].concat(e)}function Zr(e,t){-1===e.indexOf(t)&&e.push(t)}function Qr(e){return"number"==typeof e?e:parseFloat(e)}function eo(e,t,n){void 0===t&&(t=5);var r={top:0,right:0,bottom:0,left:0};return Object.keys(r).reduce((function(r,o){return r[o]="number"==typeof t?t:t[o],e===o&&(r[o]="number"==typeof t?t+n:t[e]+n),r}),r)}var to={allowHTML:!0,animateFill:!1,animation:"fade",appendTo:function(){return document.body},aria:"describedby",arrow:!0,boundary:"scrollParent",content:"",delay:0,distance:10,duration:[300,250],flip:!0,flipBehavior:"flip",flipOnUpdate:!1,followCursor:!1,hideOnClick:!0,ignoreAttributes:!1,inlinePositioning:!1,inertia:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,lazy:!0,maxWidth:350,multiple:!1,offset:0,onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},placement:"top",plugins:[],popperOptions:{},role:"tooltip",showOnCreate:!1,sticky:!1,theme:"",touch:!0,trigger:"mouseenter focus",triggerTarget:null,updateDuration:0,zIndex:9999},no=Object.keys(to),ro=["arrow","boundary","distance","flip","flipBehavior","flipOnUpdate","offset","placement","popperOptions"];function oo(e){return Lr({},e,{},e.plugins.reduce((function(t,n){var r=n.name,o=n.defaultValue;return r&&(t[r]=void 0!==e[r]?e[r]:o),t}),{}))}function io(e,t){var n=Lr({},t,{content:Hr(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(oo(Lr({},to,{plugins:t}))):no).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.interactive&&(n.aria=null),n}var lo={passive:!0},ao={isTouch:!1},so=0;function co(){ao.isTouch||(ao.isTouch=!0,window.performance&&document.addEventListener("mousemove",po))}function po(){var e=performance.now();e-so<20&&(ao.isTouch=!1,document.removeEventListener("mousemove",po)),so=e}function uo(){var e=document.activeElement;if(function(e){return!(!e||!e._tippy||e._tippy.reference!==e)}(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var fo="undefined"!=typeof window&&"undefined"!=typeof document,mo=fo?navigator.userAgent:"",go=/MSIE |Trident\//.test(mo),ho=/UCBrowser\//.test(mo),bo=fo&&/iPhone|iPad|iPod/.test(navigator.platform);function yo(e){var t=e&&bo&&ao.isTouch;document.body.classList[t?"add":"remove"]("tippy-iOS")}function Oo(e){return e.split("-")[0]}function vo(e){e.setAttribute("data-inertia","")}function xo(e){e.setAttribute("data-interactive","")}function wo(e,t){if(Ar(t.content))Er(e,""),e.appendChild(t.content);else if("function"!=typeof t.content){e[t.allowHTML?"innerHTML":"textContent"]=t.content}}function Co(e){return{tooltip:e.querySelector(".tippy-tooltip"),content:e.querySelector(".tippy-content"),arrow:e.querySelector(".tippy-arrow")||e.querySelector(".tippy-svg-arrow")}}function jo(e){var t=qr();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",Ar(e)?t.appendChild(e):Er(t,e)),t}function Po(e,t){var n=qr();n.className="tippy-popper",n.style.position="absolute",n.style.top="0",n.style.left="0";var r=qr();r.className="tippy-tooltip",r.id="tippy-"+e,r.setAttribute("data-state","hidden"),r.setAttribute("tabindex","-1"),To(r,"add",t.theme);var o=qr();return o.className="tippy-content",o.setAttribute("data-state","hidden"),t.interactive&&xo(r),t.arrow&&(r.setAttribute("data-arrow",""),r.appendChild(jo(t.arrow))),t.inertia&&vo(r),wo(o,t),r.appendChild(o),n.appendChild(r),So(n,t,t),n}function So(e,t,n){var r=Co(e),o=r.tooltip,i=r.content,l=r.arrow;e.style.zIndex=""+n.zIndex,o.setAttribute("data-animation",n.animation),o.style.maxWidth=function(e){return"number"==typeof e?e+"px":e}(n.maxWidth),n.role?o.setAttribute("role",n.role):o.removeAttribute("role"),t.content!==n.content&&wo(i,n),!t.arrow&&n.arrow?(o.appendChild(jo(n.arrow)),o.setAttribute("data-arrow","")):t.arrow&&!n.arrow?(o.removeChild(l),o.removeAttribute("data-arrow")):t.arrow!==n.arrow&&(o.removeChild(l),o.appendChild(jo(n.arrow))),!t.interactive&&n.interactive?xo(o):t.interactive&&!n.interactive&&function(e){e.removeAttribute("data-interactive")}(o),!t.inertia&&n.inertia?vo(o):t.inertia&&!n.inertia&&function(e){e.removeAttribute("data-inertia")}(o),t.theme!==n.theme&&(To(o,"remove",t.theme),To(o,"add",n.theme))}function No(e,t,n){var r=ho&&void 0!==document.body.style.webkitTransition?"webkitTransitionEnd":"transitionend";e[t+"EventListener"](r,n)}function To(e,t,n){$r(n).forEach((function(n){e.classList[t](n+"-theme")}))}var _o=1,ko=[],Io=[];function Lo(e,t){var n,r,o,i=oo(io(e,t));if(!i.multiple&&e._tippy)return null;var l,a,s,c,p,u,f,d=!1,m=!1,g=0,h=[],b=Gr(V,i.interactiveDebounce),y=(p=i.triggerTarget||e,(u=Jr(p)[0])&&u.ownerDocument||document),O=_o++,v=Po(O,i),x=Co(v),w=(f=i.plugins).filter((function(e,t){return f.indexOf(e)===t})),C=x.tooltip,j=x.content,P=[C,j],S={id:O,reference:e,popper:v,popperChildren:x,popperInstance:null,props:i,state:{currentPlacement:null,isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:w,clearDelayTimeouts:function(){clearTimeout(n),clearTimeout(r),cancelAnimationFrame(o)},setProps:function(t){if(S.state.isDestroyed)return;L("onBeforeUpdate",[S,t]),q();var n=S.props,r=io(e,Lr({},S.props,{},t,{ignoreAttributes:!0}));r.ignoreAttributes=Yr(t.ignoreAttributes,n.ignoreAttributes),S.props=r,z(),n.interactiveDebounce!==r.interactiveDebounce&&(R(),b=Gr(V,r.interactiveDebounce));So(v,n,r),S.popperChildren=Co(v),n.triggerTarget&&!r.triggerTarget?Jr(n.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):r.triggerTarget&&e.removeAttribute("aria-expanded");if(M(),S.popperInstance)if(ro.some((function(e){return Mr(t,e)&&t[e]!==n[e]}))){var o=S.popperInstance.reference;S.popperInstance.destroy(),U(),S.popperInstance.reference=o,S.state.isVisible&&S.popperInstance.enableEventListeners()}else S.popperInstance.update();L("onAfterUpdate",[S,t])},setContent:function(e){S.setProps({content:e})},show:function(e){void 0===e&&(e=Dr(S.props.duration,0,to.duration));var t=S.state.isVisible,n=S.state.isDestroyed,r=!S.state.isEnabled,o=ao.isTouch&&!S.props.touch;if(t||n||r||o)return;if(k().hasAttribute("disabled"))return;S.popperInstance||U();if(L("onShow",[S],!1),!1===S.props.onShow(S))return;B(),v.style.visibility="visible",S.state.isVisible=!0,S.state.isMounted||Xr(P.concat(v),0);a=function(){S.state.isVisible&&(Xr([v],S.props.updateDuration),Xr(P,e),Vr(P,"visible"),E(),M(),Zr(Io,S),yo(!0),S.state.isMounted=!0,L("onMount",[S]),function(e,t){A(e,t)}(e,(function(){S.state.isShown=!0,L("onShown",[S])})))},function(){g=0;var e,t=S.props.appendTo,n=k();e=S.props.interactive&&t===to.appendTo||"parent"===t?n.parentNode:Hr(t,[n]);e.contains(v)||e.appendChild(v);zr(S.popperInstance.modifiers,"flip","enabled",S.props.flip),S.popperInstance.enableEventListeners(),S.popperInstance.update()}()},hide:function(e){void 0===e&&(e=Dr(S.props.duration,1,to.duration));var t=!S.state.isVisible&&!d,n=S.state.isDestroyed,r=!S.state.isEnabled&&!d;if(t||n||r)return;if(L("onHide",[S],!1),!1===S.props.onHide(S)&&!d)return;F(),v.style.visibility="hidden",S.state.isVisible=!1,S.state.isShown=!1,Xr(P,e),Vr(P,"hidden"),E(),M(),function(e,t){A(e,(function(){!S.state.isVisible&&v.parentNode&&v.parentNode.contains(v)&&t()}))}(e,(function(){S.popperInstance.disableEventListeners(),S.popperInstance.options.placement=S.props.placement,v.parentNode.removeChild(v),0===(Io=Io.filter((function(e){return e!==S}))).length&&yo(!1),S.state.isMounted=!1,L("onHidden",[S])}))},enable:function(){S.state.isEnabled=!0},disable:function(){S.hide(),S.state.isEnabled=!1},destroy:function(){if(S.state.isDestroyed)return;d=!0,S.clearDelayTimeouts(),S.hide(0),q(),delete e._tippy,S.popperInstance&&S.popperInstance.destroy();d=!1,S.state.isDestroyed=!0,L("onDestroy",[S])}};e._tippy=S,v._tippy=S;var N=w.map((function(e){return e.fn(S)}));return z(),M(),i.lazy||U(),L("onCreate",[S]),i.showOnCreate&&Y(),v.addEventListener("mouseenter",(function(){S.props.interactive&&S.state.isVisible&&S.clearDelayTimeouts()})),v.addEventListener("mouseleave",(function(){S.props.interactive&&Ur(S.props.trigger,"mouseenter")&&y.addEventListener("mousemove",b)})),S;function T(){var e=S.props.touch;return Array.isArray(e)?e:[e,0]}function _(){return"hold"===T()[0]}function k(){return c||e}function I(e){return S.state.isMounted&&!S.state.isVisible||ao.isTouch||l&&"focus"===l.type?0:Dr(S.props.delay,e?0:1,to.delay)}function L(e,t,n){var r;(void 0===n&&(n=!0),N.forEach((function(n){Mr(n,e)&&n[e].apply(n,t)})),n)&&(r=S.props)[e].apply(r,t)}function E(){var t=S.props.aria;if(t){var n="aria-"+t,r=C.id;Jr(S.props.triggerTarget||e).forEach((function(e){var t=e.getAttribute(n);if(S.state.isVisible)e.setAttribute(n,t?t+" "+r:r);else{var o=t&&t.replace(r,"").trim();o?e.setAttribute(n,o):e.removeAttribute(n)}}))}}function M(){Jr(S.props.triggerTarget||e).forEach((function(e){S.props.interactive?e.setAttribute("aria-expanded",S.state.isVisible&&e===k()?"true":"false"):e.removeAttribute("aria-expanded")}))}function R(){y.body.removeEventListener("mouseleave",J),y.removeEventListener("mousemove",b),ko=ko.filter((function(e){return e!==b}))}function D(e){if(!S.props.interactive||!v.contains(e.target)){if(k().contains(e.target)){if(ao.isTouch)return;if(S.state.isVisible&&Ur(S.props.trigger,"click"))return}!0===S.props.hideOnClick&&(S.clearDelayTimeouts(),S.hide(),m=!0,setTimeout((function(){m=!1})),S.state.isMounted||F())}}function B(){y.addEventListener("mousedown",D,!0)}function F(){y.removeEventListener("mousedown",D,!0)}function A(e,t){function n(e){e.target===C&&(No(C,"remove",n),t())}if(0===e)return t();No(C,"remove",s),No(C,"add",n),s=n}function H(t,n,r){void 0===r&&(r=!1),Jr(S.props.triggerTarget||e).forEach((function(e){e.addEventListener(t,n,r),h.push({node:e,eventType:t,handler:n,options:r})}))}function z(){_()&&(H("touchstart",X,lo),H("touchend",G,lo)),$r(S.props.trigger).forEach((function(e){if("manual"!==e)switch(H(e,X),e){case"mouseenter":H("mouseleave",G);break;case"focus":H(go?"focusout":"blur",W)}}))}function q(){h.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),h=[]}function X(e){if(S.state.isEnabled&&!K(e)&&!m)if(l=e,c=e.currentTarget,M(),!S.state.isVisible&&function(e){return Fr(e,"MouseEvent")}(e)&&ko.forEach((function(t){return t(e)})),"click"===e.type&&!1!==S.props.hideOnClick&&S.state.isVisible)J(e);else{var t=T(),r=t[0],o=t[1];ao.isTouch&&"hold"===r&&o?n=setTimeout((function(){Y(e)}),o):Y(e)}}function V(t){(function(e,t){for(;e;){if(t(e))return e;e=e.parentElement}return null})(t.target,(function(t){return t===e||t===v}))||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.tooltipRect,i=e.interactiveBorder,l=Math.min(t.top,o.top),a=Math.max(t.right,o.right),s=Math.max(t.bottom,o.bottom),c=Math.min(t.left,o.left);return l-r>i||r-s>i||c-n>i||n-a>i}))}(Kr(v.querySelectorAll(".tippy-popper")).concat(v).map((function(e){var t=e._tippy,n=t.popperChildren.tooltip,r=t.props.interactiveBorder;return{popperRect:e.getBoundingClientRect(),tooltipRect:n.getBoundingClientRect(),interactiveBorder:r}})),t)&&(R(),J(t))}function G(e){if(!K(e))return S.props.interactive?(y.body.addEventListener("mouseleave",J),y.addEventListener("mousemove",b),void Zr(ko,b)):void J(e)}function W(e){e.target===k()&&(S.props.interactive&&e.relatedTarget&&v.contains(e.relatedTarget)||J(e))}function K(e){var t="ontouchstart"in window,n=Ur(e.type,"touch"),r=_();return t&&ao.isTouch&&r&&!n||ao.isTouch&&!r&&n}function U(){var t,n=S.props.popperOptions,r=S.popperChildren.arrow,o=Br(n,"flip"),i=Br(n,"preventOverflow");function l(e){var n=S.state.currentPlacement;S.state.currentPlacement=e.placement,S.props.flip&&!S.props.flipOnUpdate&&(e.flipped&&(S.popperInstance.options.placement=e.placement),zr(S.popperInstance.modifiers,"flip","enabled",!1)),C.setAttribute("data-placement",e.placement),!1!==e.attributes["x-out-of-boundaries"]?C.setAttribute("data-out-of-boundaries",""):C.removeAttribute("data-out-of-boundaries");var r=Oo(e.placement),o=Ur(["top","bottom"],r),i=Ur(["bottom","right"],r);C.style.top="0",C.style.left="0",C.style[o?"top":"left"]=(i?1:-1)*t+"px",n&&n!==e.placement&&S.popperInstance.update()}var a=Lr({eventsEnabled:!1,placement:S.props.placement},n,{modifiers:Lr({},n&&n.modifiers,{tippyDistance:{enabled:!0,order:0,fn:function(e){t=function(e,t){var n="string"==typeof t&&Ur(t,"rem"),r=e.documentElement;return r&&n?parseFloat(getComputedStyle(r).fontSize||String(16))*Qr(t):Qr(t)}(y,S.props.distance);var n=Oo(e.placement),r=eo(n,i&&i.padding,t),l=eo(n,o&&o.padding,t),a=S.popperInstance.modifiers;return zr(a,"preventOverflow","padding",r),zr(a,"flip","padding",l),e}},preventOverflow:Lr({boundariesElement:S.props.boundary},i),flip:Lr({enabled:S.props.flip,behavior:S.props.flipBehavior},o),arrow:Lr({element:r,enabled:!!r},Br(n,"arrow")),offset:Lr({offset:S.props.offset},Br(n,"offset"))}),onCreate:function(e){l(e),Wr(n&&n.onCreate,a.onCreate,[e]),$()},onUpdate:function(e){l(e),Wr(n&&n.onUpdate,a.onUpdate,[e]),$()}});S.popperInstance=new Ir(e,v,a)}function $(){0===g?(g++,S.popperInstance.update()):a&&1===g&&(g++,function(e){e.offsetHeight}(v),a())}function Y(e){S.clearDelayTimeouts(),S.popperInstance||U(),e&&L("onTrigger",[S,e]),B();var t=I(!0);t?n=setTimeout((function(){S.show()}),t):S.show()}function J(e){if(S.clearDelayTimeouts(),L("onUntrigger",[S,e]),S.state.isVisible){var t=I(!1);t?r=setTimeout((function(){S.state.isVisible&&S.hide()}),t):o=requestAnimationFrame((function(){S.hide()}))}else F()}}function Eo(e,t,n){void 0===t&&(t={}),void 0===n&&(n=[]),n=to.plugins.concat(t.plugins||n),document.addEventListener("touchstart",co,Lr({},lo,{capture:!0})),window.addEventListener("blur",uo);var r=Lr({},to,{},t,{plugins:n}),o=Rr(e).reduce((function(e,t){var n=t&&Lo(t,r);return n&&e.push(n),e}),[]);return Ar(e)?o[0]:o}function Mo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ro(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Eo.version="5.1.2",Eo.defaultProps=to,Eo.setDefaultProps=function(e){Object.keys(e).forEach((function(t){to[t]=e[t]}))},Eo.currentInput=ao;const Do=["children","onCreate","isVisible","isEnabled"];class Bo extends o{constructor(...e){super(...e),Ro(this,"state",{isMounted:!1}),Ro(this,"container","undefined"!=typeof document&&document.createElement("div"))}get isReactElementContent(){return u(this.props.content)}get options(){return function(e){for(var t=1;t!Do.includes(e)).reduce((t,n)=>(t[n]=e[n],t),{})),{content:this.isReactElementContent?this.container:this.props.content});var e}get isManualTrigger(){return"manual"===this.props.trigger}componentDidMount(){this.setState({isMounted:!0}),this.tip=Eo(d(this),this.options);const{onCreate:e,isEnabled:t,isVisible:n}=this.props;e&&e(this.tip),!1===t&&this.tip.disable(),this.isManualTrigger&&!0===n&&this.tip.show()}componentDidUpdate(){this.tip.setProps(this.options);const{isEnabled:e,isVisible:t}=this.props;!0===e&&this.tip.enable(),!1===e&&this.tip.disable(),this.isManualTrigger&&(!0===t&&this.tip.show(),!1===t&&this.tip.hide())}componentWillUnmount(){this.tip.destroy(),this.tip=null}render(){return l(s,null,this.props.children,this.isReactElementContent&&this.state.isMounted&&m(this.props.content,this.container))}}Ro(Bo,"propTypes",{children:n.node.isRequired,content:n.node.isRequired,isEnabled:n.bool,isVisible:n.bool,onCreate:n.func,trigger:n.string}),Ro(Bo,"defaultProps",{trigger:"mouseenter focus"});var Fo=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={tooltip:"pf-c-tooltip",tooltipArrow:"pf-c-tooltip__arrow",tooltipContent:"pf-c-tooltip__content",modifiers:{top:"pf-m-top",bottom:"pf-m-bottom",left:"pf-m-left",right:"pf-m-right",textAlignLeft:"pf-m-text-align-left"}}})));function Ao(){return(Ao=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const zo=e=>{let{className:t,children:n,isLeftAligned:r}=e,o=Ho(e,["className","children","isLeftAligned"]);return l("div",Ao({className:h(Fo.tooltipContent,r&&Fo.modifiers.textAlignLeft,t)},o),n)};zo.propTypes={className:n.string,children:n.node.isRequired,isLeftAligned:n.bool};var qo={name:"--pf-c-tooltip--MaxWidth",value:"18.75rem",var:"var(--pf-c-tooltip--MaxWidth)"};function Xo(){return(Xo=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Go(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Wo;!function(e){e.auto="auto",e.top="top",e.bottom="bottom",e.left="left",e.right="right"}(Wo||(Wo={}));class Ko extends o{constructor(...e){super(...e),Go(this,"storeTippyInstance",e=>{e.popperChildren.tooltip.classList.add(Fo.tooltip),this.tip=e}),Go(this,"handleEscKeyClick",e=>{e.keyCode===v.ESCAPE_KEY&&this.tip.state.isVisible&&this.tip.hide()})}componentDidMount(){document.addEventListener("keydown",this.handleEscKeyClick,!1)}componentWillUnmount(){document.removeEventListener("keydown",this.handleEscKeyClick,!1)}extendChildren(){return p(this.props.children,{isAppLauncher:this.props.isAppLauncher})}render(){const e=this.props,{position:t,trigger:n,isContentLeftAligned:r,isVisible:o,enableFlip:i,children:a,className:s,content:c,entryDelay:p,exitDelay:u,appendTo:f,zIndex:d,maxWidth:m,isAppLauncher:b,distance:y,aria:O,boundary:v,flipBehavior:x,tippyProps:w,id:C}=e,j=Vo(e,["position","trigger","isContentLeftAligned","isVisible","enableFlip","children","className","content","entryDelay","exitDelay","appendTo","zIndex","maxWidth","isAppLauncher","distance","aria","boundary","flipBehavior","tippyProps","id"]),P=l("div",Xo({className:h(!i&&g(Fo,t,Fo.modifiers.top),s),role:"tooltip",id:C},j),l(zo,{isLeftAligned:r},c));return l(Bo,Xo({},w,{arrow:!0,aria:O,onCreate:this.storeTippyInstance,maxWidth:m,zIndex:d,appendTo:f,content:P,lazy:!0,theme:"pf-tooltip",placement:t,trigger:n,delay:[p,u],distance:y,flip:i,flipBehavior:x,boundary:v,isVisible:o,popperOptions:{modifiers:{preventOverflow:{enabled:i},hide:{enabled:i}}}}),b?this.extendChildren():a)}}function Uo(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function $o(){return($o=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Jo(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Go(Ko,"propTypes",{appendTo:n.oneOfType([n.element,n.func]),aria:n.oneOf(["describedby","labelledby"]),boundary:n.oneOfType([n.oneOf(["scrollParent"]),n.oneOf(["window"]),n.oneOf(["viewport"]),n.any]),children:n.element.isRequired,className:n.string,content:n.node.isRequired,distance:n.number,enableFlip:n.bool,entryDelay:n.number,exitDelay:n.number,flipBehavior:n.oneOfType([n.oneOf(["flip"]),n.arrayOf(n.oneOf(["top","bottom","left","right"]))]),isAppLauncher:n.bool,maxWidth:n.string,position:n.oneOf(["auto","top","bottom","left","right"]),trigger:n.string,isContentLeftAligned:n.bool,isVisible:n.bool,zIndex:n.number,tippyProps:n.any,id:n.string}),Go(Ko,"defaultProps",{position:"top",trigger:"mouseenter focus",isVisible:!1,isContentLeftAligned:!1,enableFlip:!0,className:"",entryDelay:500,exitDelay:500,appendTo:()=>document.body,zIndex:9999,maxWidth:qo&&qo.value,isAppLauncher:!1,distance:15,aria:"describedby",boundary:"window",flipBehavior:["top","right","bottom","left","top","right","bottom"],tippyProps:{},id:""});class Zo extends o{constructor(...e){super(...e),Jo(this,"ref",i()),Jo(this,"additionalRef",i()),Jo(this,"getInnerNode",e=>e&&e.childNodes&&e.childNodes.length?e.childNodes[0]:e),Jo(this,"onKeyDown",e=>{const t=e.target===this.ref.current?0:1;this.props.customChild||e.preventDefault(),"ArrowUp"===e.key?this.props.context.keyHandler(this.props.index,t,w.UP):"ArrowDown"===e.key?this.props.context.keyHandler(this.props.index,t,w.DOWN):"ArrowRight"===e.key?this.props.context.keyHandler(this.props.index,t,w.RIGHT):"ArrowLeft"===e.key?this.props.context.keyHandler(this.props.index,t,w.LEFT):"Enter"!==e.key&&" "!==e.key||(e.target.click(),this.props.enterTriggersArrowDown&&this.props.context.keyHandler(this.props.index,t,w.DOWN))})}componentDidMount(){const{context:e,index:t,isDisabled:n,role:r,customChild:o}=this.props,i=o?this.getInnerNode(this.ref.current):this.ref.current;e.sendRef(t,[i,o?i:this.additionalRef.current],n,"separator"===r)}componentDidUpdate(){const{context:e,index:t,isDisabled:n,role:r,customChild:o}=this.props,i=o?this.getInnerNode(this.ref.current):this.ref.current;e.sendRef(t,[i,o?i:this.additionalRef.current],n,"separator"===r)}extendAdditionalChildRef(){const{additionalChild:e}=this.props;return p(e,{ref:this.additionalRef})}render(){const e=this.props,{className:t,children:n,isHovered:r,context:o,onClick:i,component:a,variant:s,role:c,isDisabled:f,index:d,href:m,tooltip:g,tooltipProps:b,id:y,componentID:O,listItemClassName:v,additionalChild:x,customChild:w,enterTriggersArrowDown:C}=e,j=Yo(e,["className","children","isHovered","context","onClick","component","variant","role","isDisabled","index","href","tooltip","tooltipProps","id","componentID","listItemClassName","additionalChild","customChild","enterTriggersArrowDown"]),P=a;let S;"a"===P?(j["aria-disabled"]=f,j.tabIndex=f?-1:j.tabIndex):"button"===P&&(j.disabled=f,j.type=j.type||"button");return l(fn.Consumer,null,({onSelect:e,itemClass:o,disabledClass:d,hoverClass:C})=>{return S="separator"===this.props.role?h("icon"===s&&cn.modifiers.icon,t):h("icon"===s&&cn.modifiers.icon,t,f&&d,r&&C,o),w?p(w,{ref:this.ref,onKeyDown:this.onKeyDown}):l("li",{className:v||null,role:c,onKeyDown:this.onKeyDown,onClick:t=>{f||(i(t),e(t))},id:y},(N=u(a)?p(a,function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Jo(Zo,"propTypes",{children:n.node,className:n.string,listItemClassName:n.string,component:n.node,variant:n.oneOf(["item","icon"]),role:n.string,isDisabled:n.bool,isHovered:n.bool,href:n.string,tooltip:n.node,tooltipProps:n.any,index:n.number,context:n.shape({keyHandler:n.func,sendRef:n.func}),onClick:n.func,id:n.string,componentID:n.string,additionalChild:n.node,customChild:n.node,enterTriggersArrowDown:n.bool}),Jo(Zo,"defaultProps",{className:"",isHovered:!1,component:"a",variant:"item",role:"none",isDisabled:!1,tooltipProps:{},onClick:e=>{},index:-1,context:{keyHandler:()=>{},sendRef:()=>{}},enterTriggersArrowDown:!1});const ti=e=>{let{children:t=null,className:n="",component:r="a",variant:o="item",isDisabled:i=!1,isHovered:a=!1,href:s,tooltip:c=null,tooltipProps:p={},listItemClassName:u,onClick:f,ref:d,additionalChild:m,customChild:g}=e,h=ei(e,["children","className","component","variant","isDisabled","isHovered","href","tooltip","tooltipProps","listItemClassName","onClick","ref","additionalChild","customChild"]);return l(dn.Consumer,null,e=>l(Zo,Qo({context:e,role:"menuitem",tabIndex:-1,className:n,component:r,variant:o,isDisabled:i,isHovered:a,href:s,tooltip:c,tooltipProps:p,listItemClassName:u,onClick:f,additionalChild:m,customChild:g},h),t))};function ni(){return(ni=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ti.propTypes={children:n.node,className:n.string,listItemClassName:n.string,component:n.node,variant:n.oneOf(["item","icon"]),isDisabled:n.bool,isHovered:n.bool,href:n.string,tooltip:n.node,tooltipProps:n.any,additionalChild:n.node,customChild:n.node};const oi=e=>{let{children:t,className:n=""}=e,r=ri(e,["children","className"]);return l("span",ni({className:h(cn.dropdownMenuItemIcon,n)},r),t)};function ii(){return(ii=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}oi.propTypes={children:n.node,className:n.string};const ai=e=>{let{className:t="",ref:n}=e,r=li(e,["className","ref"]);return l(fn.Consumer,null,({separatorClass:e})=>l(dn.Consumer,null,n=>l(Zo,ii({},r,{context:n,className:h(e,t),component:"div",role:"separator"}))))};ai.propTypes={className:n.string,onClick:n.func};var si=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.EllipsisVIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"EllipsisVIcon",height:512,width:192,svgPath:"M96 184c39.8 0 72 32.2 72 72s-32.2 72-72 72-72-32.2-72-72 32.2-72 72-72zM24 80c0 39.8 32.2 72 72 72s72-32.2 72-72S135.8 8 96 8 24 40.2 24 80zm0 352c0 39.8 32.2 72 72 72s72-32.2 72-72-32.2-72-72-72-72 32.2-72 72z",yOffset:"",xOffset:"",transform:""};t.EllipsisVIconConfig=r;var o=(0,n.default)(r);t.default=o})),ci=e(si);si.EllipsisVIconConfig;function pi(){return(pi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function fi(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class di extends o{constructor(...e){super(...e),fi(this,"buttonRef",i()),fi(this,"componentDidMount",()=>{document.addEventListener("mousedown",e=>this.onDocClick(e)),document.addEventListener("touchstart",e=>this.onDocClick(e)),document.addEventListener("keydown",e=>this.onEscPress(e))}),fi(this,"componentWillUnmount",()=>{document.removeEventListener("mousedown",e=>this.onDocClick(e)),document.removeEventListener("touchstart",e=>this.onDocClick(e)),document.removeEventListener("keydown",e=>this.onEscPress(e))}),fi(this,"onDocClick",e=>{this.props.isOpen&&this.props.parentRef&&this.props.parentRef.current&&!this.props.parentRef.current.contains(e.target)&&(this.props.onToggle(!1,e),this.buttonRef.current.focus())}),fi(this,"onEscPress",e=>{const{parentRef:t}=this.props,n=e.keyCode||e.which;this.props.isOpen&&(n===v.ESCAPE_KEY||"Tab"===e.key)&&t&&t.current&&t.current.contains(e.target)&&(this.props.onToggle(!1,e),this.buttonRef.current.focus())}),fi(this,"onKeyDown",e=>{("Tab"!==e.key||this.props.isOpen)&&(this.props.bubbleEvent||e.stopPropagation(),e.preventDefault(),"Tab"!==e.key&&"Enter"!==e.key&&" "!==e.key||!this.props.isOpen?"Enter"!==e.key&&" "!==e.key||this.props.isOpen||(this.props.onToggle(!this.props.isOpen,e),this.props.onEnter()):this.props.onToggle(!this.props.isOpen,e))})}render(){const e=this.props,{className:t,children:n,isOpen:r,isFocused:o,isActive:i,isHovered:a,isDisabled:s,isPlain:c,isPrimary:p,isSplitButton:u,ariaHasPopup:f,bubbleEvent:d,onToggle:m,onEnter:g,parentRef:b,id:y,type:O}=e,v=ui(e,["className","children","isOpen","isFocused","isActive","isHovered","isDisabled","isPlain","isPrimary","isSplitButton","ariaHasPopup","bubbleEvent","onToggle","onEnter","parentRef","id","type"]);return l(fn.Consumer,null,({toggleClass:e})=>l("button",pi({},v,{id:y,ref:this.buttonRef,className:h(u?cn.dropdownToggleButton:e||cn.dropdownToggle,o&&cn.modifiers.focus,a&&cn.modifiers.hover,i&&cn.modifiers.active,c&&cn.modifiers.plain,p&&cn.modifiers.primary,t),type:O||"button",onClick:e=>m(!r,e),"aria-expanded":r,"aria-haspopup":f,onKeyDown:e=>this.onKeyDown(e),disabled:s}),n))}}function mi(){return(mi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}fi(di,"propTypes",{id:n.string.isRequired,type:n.oneOf(["button","submit","reset"]),children:n.node,className:n.string,isOpen:n.bool,onToggle:n.func,onEnter:n.func,parentRef:n.any,isFocused:n.bool,isHovered:n.bool,isActive:n.bool,isDisabled:n.bool,isPlain:n.bool,isPrimary:n.bool,isSplitButton:n.bool,ariaHasPopup:n.oneOfType([n.bool,n.oneOf(["listbox"]),n.oneOf(["menu"]),n.oneOf(["dialog"]),n.oneOf(["grid"]),n.oneOf(["listbox"]),n.oneOf(["tree"])]),bubbleEvent:n.bool}),fi(di,"defaultProps",{className:"",isOpen:!1,isFocused:!1,isHovered:!1,isActive:!1,isDisabled:!1,isPlain:!1,isPrimary:!1,isSplitButton:!1,onToggle:()=>{},onEnter:()=>{},bubbleEvent:!1});const hi=e=>{let{id:t="",children:n=null,className:r="",isOpen:o=!1,"aria-label":i="Actions",parentRef:a=null,isFocused:s=!1,isHovered:c=!1,isActive:p=!1,isPlain:u=!1,isDisabled:f=!1,bubbleEvent:d=!1,onToggle:m=(()=>{}),ref:g}=e,h=gi(e,["id","children","className","isOpen","aria-label","parentRef","isFocused","isHovered","isActive","isPlain","isDisabled","bubbleEvent","onToggle","ref"]);return l(di,mi({id:t,className:r,isOpen:o,"aria-label":i,parentRef:a,isFocused:s,isHovered:c,isActive:p,isPlain:u,isDisabled:f,onToggle:m,bubbleEvent:d},h),l(ci,null))};hi.propTypes={id:n.string,children:n.node,className:n.string,isOpen:n.bool,"aria-label":n.string,onToggle:n.func,parentRef:n.any,isFocused:n.bool,isHovered:n.bool,isActive:n.bool,isDisabled:n.bool,isPlain:n.bool,type:n.oneOf(["button","submit","reset"]),bubbleEvent:n.bool};var bi=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.CaretDownIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"CaretDownIcon",height:512,width:320,svgPath:"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z",yOffset:"",xOffset:"",transform:""};t.CaretDownIconConfig=r;var o=(0,n.default)(r);t.default=o})),yi=e(bi);bi.CaretDownIconConfig;function Oi(){return(Oi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const xi=e=>{let{id:t="",children:n=null,className:r="",isOpen:o=!1,parentRef:i=null,isFocused:a=!1,isHovered:s=!1,isActive:c=!1,isDisabled:p=!1,isPlain:u=!1,isPrimary:f=!1,onToggle:d=(e=>{}),iconComponent:m=yi,splitButtonItems:g,splitButtonVariant:b="checkbox",ariaHasPopup:y,ref:O}=e,v=vi(e,["id","children","className","isOpen","parentRef","isFocused","isHovered","isActive","isDisabled","isPlain","isPrimary","onToggle","iconComponent","splitButtonItems","splitButtonVariant","ariaHasPopup","ref"]);const x=l(fn.Consumer,null,({toggleTextClass:e,toggleIconClass:b})=>l(di,Oi({},v,{id:t,className:r,isOpen:o,parentRef:i,isFocused:a,isHovered:s,isActive:c,isDisabled:p,isPlain:u,isPrimary:f,onToggle:d,ariaHasPopup:y},g&&{isSplitButton:!0,"aria-label":v["aria-label"]||"Select"}),n&&l("span",{className:m&&h(e)},n),m&&l(m,{className:h(n&&b)})));return g?l("div",{className:h(cn.dropdownToggle,cn.modifiers.splitButton,"action"===b&&cn.modifiers.action,p&&cn.modifiers.disabled)},g,x):x};function wi(){return(wi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ji(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}xi.propTypes={id:n.string,children:n.node,className:n.string,isOpen:n.bool,onToggle:n.func,parentRef:n.any,isFocused:n.bool,isHovered:n.bool,isActive:n.bool,isPlain:n.bool,isDisabled:n.bool,isPrimary:n.bool,iconComponent:n.oneOfType([n.any,n.oneOf([null])]),splitButtonItems:n.arrayOf(n.node),splitButtonVariant:n.oneOf(["action","checkbox"]),"aria-label":n.string,ariaHasPopup:n.oneOfType([n.bool,n.oneOf(["listbox"]),n.oneOf(["menu"]),n.oneOf(["dialog"]),n.oneOf(["grid"]),n.oneOf(["listbox"]),n.oneOf(["tree"])]),type:n.oneOf(["button","submit","reset"]),onEnter:n.func};class Pi extends o{constructor(...e){super(...e),ji(this,"handleChange",e=>{this.props.onChange(e.target.checked,e)}),ji(this,"calculateChecked",()=>{const{isChecked:e,checked:t}=this.props;return void 0!==e?e:t})}render(){const e=this.props,{className:t,onChange:n,isValid:r,isDisabled:o,isChecked:i,ref:a,checked:s,children:c}=e,p=Ci(e,["className","onChange","isValid","isDisabled","isChecked","ref","checked","children"]),u=c&&l("span",{className:h(cn.dropdownToggleText,t),"aria-hidden":"true",id:p.id+"-text"},c);return l("label",{className:h(cn.dropdownToggleCheck,t),htmlFor:p.id},l("input",wi({},p,void 0!==this.calculateChecked()&&{onChange:this.handleChange},{type:"checkbox",ref:a,"aria-invalid":!r,disabled:o,checked:this.calculateChecked()})),u)}}function Si(){return(Si=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ti(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}ji(Pi,"propTypes",{className:n.string,isValid:n.bool,isDisabled:n.bool,isChecked:n.oneOfType([n.bool,n.oneOf([null])]),checked:n.oneOfType([n.bool,n.oneOf([null])]),onChange:n.func,children:n.node,id:n.string.isRequired,"aria-label":n.string.isRequired}),ji(Pi,"defaultProps",{className:"",isValid:!0,isDisabled:!1,onChange:()=>{}});class _i extends o{render(){const e=this.props,{id:t,className:n,onClick:r,isDisabled:o,children:i}=e,a=Ni(e,["id","className","onClick","isDisabled","children"]);return l("button",Si({id:t,className:h(cn.dropdownToggleButton,n),onClick:r},o&&{disabled:!0,"aria-disabled":!0},a),i)}}function ki(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ti(_i,"propTypes",{className:n.string,isDisabled:n.bool,onClick:n.func,children:n.node,id:n.string,"aria-label":n.string}),Ti(_i,"defaultProps",{className:"",isDisabled:!1,onClick:()=>{}});const Ii=e=>{let{children:t}=e,n=ki(e,["children"]);return l(Sn,n,t)};function Li(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ei=e=>{let t=Li(e,["children"]);return l(ai,t)};function Mi(){return(Mi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Di=e=>{let{className:t="",children:n}=e,r=Ri(e,["className","children"]);return l("span",Mi({className:h(on.appLauncherMenuItemIcon)},r),n)};function Bi(){return(Bi=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Di.propTypes={children:n.node.isRequired,className:n.string};const Ai=e=>{let{className:t="",children:n}=e,r=Fi(e,["className","children"]);return l("span",Bi({className:h("pf-c-app-launcher__menu-item-text",t)},r),n)};Ai.propTypes={children:n.node.isRequired,className:n.string};var Hi=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.ExternalLinkAltIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"ExternalLinkAltIcon",height:512,width:512,svgPath:"M432,320H400a16,16,0,0,0-16,16V448H64V128H208a16,16,0,0,0,16-16V80a16,16,0,0,0-16-16H48A48,48,0,0,0,0,112V464a48,48,0,0,0,48,48H400a48,48,0,0,0,48-48V336A16,16,0,0,0,432,320ZM488,0h-128c-21.37,0-32.05,25.91-17,41l35.73,35.73L135,320.37a24,24,0,0,0,0,34L157.67,377a24,24,0,0,0,34,0L435.28,133.32,471,169c15,15,41,4.5,41-17V24A24,24,0,0,0,488,0Z",yOffset:"",xOffset:"",transform:""};t.ExternalLinkAltIconConfig=r;var o=(0,n.default)(r);t.default=o})),zi=e(Hi);Hi.ExternalLinkAltIconConfig;const qi=a({isExternal:!1,icon:null}),Xi=({children:e})=>l(qi.Consumer,null,({isExternal:t,icon:n})=>l(s,null,n&&l(Di,null,n),n?l(Ai,null,e):e,t&&l(s,null,l("span",{className:h(on.appLauncherMenuItemExternalIcon)},l(zi,null)),l("span",{className:h(Pt.screenReader)},"(opens new window)"))));Xi.propTypes={children:n.node.isRequired};const Vi=a({onFavorite:(e,t)=>{}});var Gi=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.StarIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"StarIcon",height:512,width:576,svgPath:"M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z",yOffset:"",xOffset:"",transform:""};t.StarIconConfig=r;var o=(0,n.default)(r);t.default=o})),Wi=e(Gi);Gi.StarIconConfig;function Ki(){return(Ki=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const $i=e=>{let{className:t="",id:n,children:r,icon:o=null,isExternal:i=!1,href:a,tooltip:s=null,tooltipProps:c=null,component:p="a",isFavorite:u=null,ariaIsFavoriteLabel:f="starred",ariaIsNotFavoriteLabel:d="not starred",customChild:m,enterTriggersArrowDown:g=!1}=e,b=Ui(e,["className","id","children","icon","isExternal","href","tooltip","tooltipProps","component","isFavorite","ariaIsFavoriteLabel","ariaIsNotFavoriteLabel","customChild","enterTriggersArrowDown"]);return l(qi.Provider,{value:{isExternal:i,icon:o}},l(Vi.Consumer,null,({onFavorite:e})=>l(ti,Ki({id:n,component:p,href:a||null,className:h(i&&on.modifiers.external,null!==u&&on.modifiers.link,t),listItemClassName:h(e&&on.appLauncherMenuWrapper,u&&on.modifiers.favorite),tooltip:s,tooltipProps:c},!0===g&&{enterTriggersArrowDown:g},m&&{customChild:m},null!==u&&{additionalChild:l("button",{className:h(on.appLauncherMenuItem,on.modifiers.action),"aria-label":u?f:d,onClick:()=>{e(n,u)}},l(Wi,null))},b),r&&l(Xi,null,r))))};function Yi(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ji(){return(Ji=Object.assign||function(e){for(var t=1;t{const{onSearch:e,searchPlaceholderText:t,searchProps:n}=this.props;return l("div",{key:"search",className:h(on.appLauncherMenuSearch)},l($i,{customChild:l("input",Ji({type:"search",className:h(ln.formControl),placeholder:t,onChange:t=>e(t.target.value)},n))}))}),Zi(this,"createRenderableFavorites",()=>{const{items:e,isGrouped:t,favorites:n}=this.props;if(t){const t=[];return e.forEach(e=>e.props.children.filter(e=>n.includes(e.props.id)).map(e=>t.push(p(e,{isFavorite:!0,enterTriggersArrowDown:!0})))),t}return e.filter(e=>n.includes(e.props.id)).map(e=>p(e,{isFavorite:!0,enterTriggersArrowDown:!0}))}),Zi(this,"extendItemsWithFavorite",()=>{const{items:e,isGrouped:t,favorites:n}=this.props;return t?e.map(e=>p(e,{children:c.map(e.props.children,e=>e.type===Ei?e:p(e,{isFavorite:n.some(t=>t===e.props.id)}))})):e.map(e=>p(e,{isFavorite:n.some(t=>t===e.props.id)}))})}render(){const e=this.props,{"aria-label":t,isOpen:n,onToggle:r,toggleIcon:o,toggleId:i,onSelect:a,isDisabled:s,className:c,isGrouped:p,dropdownItems:u,favorites:f,onFavorite:d,onSearch:m,items:g,searchPlaceholderText:h,searchProps:b,ref:y,favoritesLabel:O,searchNoResultsText:v}=e,x=Yi(e,["aria-label","isOpen","onToggle","toggleIcon","toggleId","onSelect","isDisabled","className","isGrouped","dropdownItems","favorites","onFavorite","onSearch","items","searchPlaceholderText","searchProps","ref","favoritesLabel","searchNoResultsText"]);let w=[];if(d){let e=[],t=[];f.length>0&&(t=this.createRenderableFavorites(),e=[l(Ii,{key:"favorites",label:O},t,l(Ei,{key:"separator"}))]),w=t.length>0?e.concat(this.extendItemsWithFavorite()):this.extendItemsWithFavorite()}else w=g;return 0===g.length&&0===u.length&&(w=[l(Ii,{key:"no-results-group"},l($i,{key:"no-results"},v))]),m&&(w=[this.createSearchBox(),...w]),l(Vi.Provider,{value:{onFavorite:d}},l(fn.Provider,{value:{onSelect:a,menuClass:on.appLauncherMenu,itemClass:on.appLauncherMenuItem,toggleClass:on.appLauncherToggle,baseClass:on.appLauncher,baseComponent:"nav",sectionClass:on.appLauncherGroup,sectionTitleClass:on.appLauncherGroupTitle,sectionComponent:"section",disabledClass:on.modifiers.disabled,hoverClass:on.modifiers.hover,separatorClass:on.appLauncherSeparator}},l(Cn,Ji({},x,{dropdownItems:w.length?w:u,isOpen:n,className:c,"aria-label":t,toggle:l(xi,{id:i,iconComponent:null,isOpen:n,onToggle:r,isDisabled:s,"aria-label":t},o),isGrouped:p}))))}}Zi(Qi,"propTypes",{className:n.string,direction:n.oneOfType([n.any,n.oneOf(["up"]),n.oneOf(["down"])]),dropdownItems:n.arrayOf(n.node),items:n.arrayOf(n.node),isDisabled:n.bool,isOpen:n.bool,position:n.oneOfType([n.any,n.oneOf(["right"]),n.oneOf(["left"])]),onSelect:n.func,onToggle:n.func,"aria-label":n.string,isGrouped:n.bool,toggleIcon:n.node,favorites:n.arrayOf(n.string),onFavorite:n.func,onSearch:n.func,searchPlaceholderText:n.string,searchNoResultsText:n.string,searchProps:n.any,favoritesLabel:n.string,toggleId:n.string}),Zi(Qi,"defaultProps",{className:"",isDisabled:!1,direction:un.down,dropdownItems:[],favorites:[],items:[],isOpen:!1,position:pn.left,onSelect:e=>{},onToggle:e=>{},"aria-label":"Application launcher",isGrouped:!1,toggleIcon:l(sn,null),searchPlaceholderText:"Filter by name...",searchNoResultsText:"No results found",favoritesLabel:"Favorites"});var el=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={avatar:"pf-c-avatar",modifiers:{}}})));function tl(){return(tl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const rl=e=>{let{className:t="",src:n="",alt:r}=e,o=nl(e,["className","src","alt"]);return l("img",tl({},o,{src:n,alt:r,className:h(el.avatar,t)}))};rl.propTypes={className:n.string,src:n.string,alt:n.string.isRequired};var ol=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={backgroundImage:"pf-c-background-image",backgroundImageFilter:"pf-c-background-image__filter",modifiers:{}}}))),il={name:"--pf-c-background-image--BackgroundImage",value:"url(assets/images/pfbg_576.jpg)",var:"var(--pf-c-background-image--BackgroundImage)"},ll={name:"--pf-c-background-image--BackgroundImage-2x",value:"url(assets/images/pfbg_576@2x.jpg)",var:"var(--pf-c-background-image--BackgroundImage-2x)"},al={name:"--pf-c-background-image--BackgroundImage--sm",value:"url(assets/images/pfbg_768.jpg)",var:"var(--pf-c-background-image--BackgroundImage--sm)"},sl={name:"--pf-c-background-image--BackgroundImage--sm-2x",value:"url(assets/images/pfbg_768@2x.jpg)",var:"var(--pf-c-background-image--BackgroundImage--sm-2x)"},cl={name:"--pf-c-background-image--BackgroundImage--lg",value:"url(assets/images/pfbg_2000.jpg)",var:"var(--pf-c-background-image--BackgroundImage--lg)"};function pl(){return(pl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let fl;!function(e){e.xs="xs",e.xs2x="xs2x",e.sm="sm",e.sm2x="sm2x",e.lg="lg",e.filter="filter"}(fl||(fl={}));const dl={[fl.xs]:il&&il.name,[fl.xs2x]:ll&&ll.name,[fl.sm]:al&&al.name,[fl.sm2x]:sl&&sl.name,[fl.lg]:cl&&cl.name},ml=e=>{let{className:t="",src:n}=e,r=ul(e,["className","src"]),o=n;"string"==typeof n&&(o={[fl.xs]:n,[fl.xs2x]:n,[fl.sm]:n,[fl.sm2x]:n,[fl.lg]:n,[fl.filter]:""});let i="";Object.keys(dl).forEach(e=>{i+=`${dl[e]}: url('${o[e]}');`});const a=b.create({bgOverrides:`&.pf-c-background-image {\n ${i}\n }`});return l("div",pl({className:h(ol.backgroundImage,a.bgOverrides,t)},r),l("svg",{xmlns:"http://www.w3.org/2000/svg",className:"pf-c-background-image__filter",width:"0",height:"0"},l("filter",{id:"image_overlay"},l("feColorMatrix",{type:"matrix",values:"1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0"}),l("feComponentTransfer",{colorInterpolationFilters:"sRGB",result:"duotone"},l("feFuncR",{type:"table",tableValues:"0.086274509803922 0.43921568627451"}),l("feFuncG",{type:"table",tableValues:"0.086274509803922 0.43921568627451"}),l("feFuncB",{type:"table",tableValues:"0.086274509803922 0.43921568627451"}),l("feFuncA",{type:"table",tableValues:"0 1"})))))};ml.propTypes={className:n.string,src:n.oneOfType([n.string,n.shape({xs:n.string.isRequired,xs2x:n.string.isRequired,sm:n.string.isRequired,sm2x:n.string.isRequired,lg:n.string.isRequired,filter:n.string})]).isRequired};var gl=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={badge:"pf-c-badge",modifiers:{read:"pf-m-read",unread:"pf-m-unread"}}})));function hl(){return(hl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const yl=e=>{let{isRead:t=!1,className:n="",children:r=""}=e,o=bl(e,["isRead","className","children"]);return l("span",hl({},o,{className:h(gl.badge,t?gl.modifiers.read:gl.modifiers.unread,n)}),r)};function Ol(){return(Ol=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}yl.propTypes={isRead:n.bool,children:n.node,className:n.string};const xl=e=>{let{className:t="",src:n="",alt:r}=e,o=vl(e,["className","src","alt"]);return l("img",Ol({},o,{className:h("pf-c-brand",t),src:n,alt:r}))};xl.propTypes={className:n.string,src:n.string,alt:n.string.isRequired};var wl=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={breadcrumb:"pf-c-breadcrumb",breadcrumbList:"pf-c-breadcrumb__list",breadcrumbItem:"pf-c-breadcrumb__item",breadcrumbItemDivider:"pf-c-breadcrumb__item-divider",breadcrumbLink:"pf-c-breadcrumb__link",breadcrumbHeading:"pf-c-breadcrumb__heading",modifiers:{current:"pf-m-current",hover:"pf-m-hover",redhatFont:"pf-m-redhat-font"}}})));function Cl(){return(Cl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Pl=e=>{let{children:t=null,className:n="","aria-label":r="Breadcrumb",ouiaContext:o=null,ouiaId:i=null}=e,a=jl(e,["children","className","aria-label","ouiaContext","ouiaId"]);return l("nav",Cl({},a,{"aria-label":r,className:h(wl.breadcrumb,n)},o.isOuia&&{"data-ouia-component-type":"Breadcrumb","data-ouia-component-id":i||o.ouiaId}),l("ol",{className:h(wl.breadcrumbList)},t))};Pl.propTypes={children:n.node,className:n.string,"aria-label":n.string};const Sl=Ee(Pl);function Nl(){return(Nl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const _l=e=>{let{children:t=null,className:n="",to:r=null,isActive:o=!1,target:i=null,component:a="a"}=e,c=Tl(e,["children","className","to","isActive","target","component"]);const p=a;return l("li",Nl({},c,{className:h(wl.breadcrumbItem,n)}),r&&l(p,{href:r,target:i,className:h(wl.breadcrumbLink,o?g(wl,"current"):""),"aria-current":o?"page":void 0},t),!r&&l(s,null,t),!o&&l("span",{className:h(wl.breadcrumbItemDivider)},l(vt,null)))};function kl(){return(kl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}_l.propTypes={children:n.node,className:n.string,to:n.string,isActive:n.bool,target:n.string,component:n.node};const Ll=e=>{let{children:t=null,className:n="",to:r=null,target:o=null,component:i="a"}=e,a=Il(e,["children","className","to","target","component"]);const c=i;return l("li",kl({},a,{className:h(wl.breadcrumbItem,n)}),l("h1",{className:h(wl.breadcrumbHeading)},r&&l(c,{href:r,target:o,className:h(wl.breadcrumbLink,wl.modifiers.current),"aria-current":"page"},t),!r&&l(s,null,t)))};Ll.propTypes={children:n.node,className:n.string,to:n.string,target:n.string,component:n.node};var El=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={card:"pf-c-card",cardHead:"pf-c-card__head",cardActions:"pf-c-card__actions",cardHeader:"pf-c-card__header",cardBody:"pf-c-card__body",cardFooter:"pf-c-card__footer",modifiers:{hoverable:"pf-m-hoverable",selectable:"pf-m-selectable",selected:"pf-m-selected",compact:"pf-m-compact",noFill:"pf-m-no-fill",redhatFont:"pf-m-redhat-font"}}})));function Ml(){return(Ml=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Dl=e=>{let{children:t=null,className:n="",component:r="article",isHoverable:o=!1,isCompact:i=!1,isSelectable:a=!1,isSelected:s=!1}=e,c=Rl(e,["children","className","component","isHoverable","isCompact","isSelectable","isSelected"]);return l(r,Ml({className:h(El.card,o&&El.modifiers.hoverable,i&&El.modifiers.compact,a&&El.modifiers.selectable,s&&a&&El.modifiers.selected,n),tabIndex:a?"0":void 0},c),t)};function Bl(){return(Bl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Dl.propTypes={children:n.node,className:n.string,component:n.any,isHoverable:n.bool,isCompact:n.bool,isSelectable:n.bool,isSelected:n.bool};const Al=e=>{let{children:t=null,className:n=""}=e,r=Fl(e,["children","className"]);return l("div",Bl({className:h(El.cardActions,n)},r),t)};function Hl(){return(Hl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Al.propTypes={children:n.node,className:n.string};const ql=e=>{let{children:t=null,className:n="",component:r="div",isFilled:o=!0}=e,i=zl(e,["children","className","component","isFilled"]);return l(r,Hl({className:h(El.cardBody,!o&&El.modifiers.noFill,n)},i),t)};function Xl(){return(Xl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ql.propTypes={children:n.node,className:n.string,component:n.any,isFilled:n.bool};const Gl=e=>{let{children:t=null,className:n="",component:r="div"}=e,o=Vl(e,["children","className","component"]);return l(r,Xl({className:h(El.cardFooter,n)},o),t)};function Wl(){return(Wl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Gl.propTypes={children:n.node,className:n.string,component:n.any};const Ul=e=>{let{children:t=null,className:n=""}=e,r=Kl(e,["children","className"]);return l("div",Wl({className:h(El.cardHeader,fe.title,fe.modifiers.md,n)},r),t)};function $l(){return($l=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ul.propTypes={children:n.node,className:n.string};const Jl=e=>{let{children:t=null,className:n=""}=e,r=Yl(e,["children","className"]);return l("div",$l({className:h(El.cardHead,n)},r),t)};function Zl(){return(Zl=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Jl.propTypes={children:n.node,className:n.string};const ea=e=>{let{children:t=null,className:n=""}=e,r=Ql(e,["children","className"]);return l("div",Zl({className:h("pf-c-card__head-main",n)},r),t)};ea.propTypes={children:n.node,className:n.string};var ta=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={check:"pf-c-check",checkLabel:"pf-c-check__label",checkInput:"pf-c-check__input",checkDescription:"pf-c-check__description",modifiers:{disabled:"pf-m-disabled"}}})));function na(){return(na=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function oa(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const ia=()=>{};class la extends o{constructor(e){super(e),oa(this,"handleChange",e=>{this.props.onChange(e.currentTarget.checked,e)})}render(){const e=this.props,{"aria-label":t,className:n,onChange:r,isValid:o,isDisabled:i,isChecked:a,label:s,checked:c,defaultChecked:p,description:u}=e,f=ra(e,["aria-label","className","onChange","isValid","isDisabled","isChecked","label","checked","defaultChecked","description"]),d={};return([!0,!1].includes(c)||!0===a)&&(d.checked=c||a),r!==ia&&(d.checked=a),[!1,!0].includes(p)&&(d.defaultChecked=p),d.checked=null!==d.checked&&d.checked,l("div",{className:h(ta.check,n)},l("input",na({},f,{className:h(ta.checkInput),type:"checkbox",onChange:this.handleChange,"aria-invalid":!o,"aria-label":t,disabled:i,ref:e=>e&&(e.indeterminate=null===a)},d)),s&&l("label",{className:h(ta.checkLabel,i?g(ta,"disabled"):""),htmlFor:f.id},s),u&&l("div",{className:h(ta.checkDescription)},u))}}oa(la,"propTypes",{className:n.string,isValid:n.bool,isDisabled:n.bool,isChecked:n.bool,checked:n.bool,onChange:n.func,label:n.node,id:n.string.isRequired,"aria-label":n.string,description:n.node}),oa(la,"defaultProps",{className:"",isValid:!0,isDisabled:!1,isChecked:!1,onChange:ia});var aa=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={chipGroup:"pf-c-chip-group",chip:"pf-c-chip",chipGroupLabel:"pf-c-chip-group__label",modifiers:{toolbar:"pf-m-toolbar",overflow:"pf-m-overflow"}}})));function sa(){return(sa=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const pa=e=>{let{ariaLabel:t="close",children:n=null,className:r="",onClick:o=(()=>{})}=e,i=ca(e,["ariaLabel","children","className","onClick"]);return l(Xe,sa({variant:"plain","aria-label":t,onClick:o,className:r},i),n)};pa.propTypes={ariaLabel:n.string,children:n.node,className:n.string,onClick:n.func};var ua=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.TimesCircleIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"TimesCircleIcon",height:512,width:512,svgPath:"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z",yOffset:"",xOffset:"",transform:""};t.TimesCircleIconConfig=r;var o=(0,n.default)(r);t.default=o})),fa=e(ua),da=(ua.TimesCircleIconConfig,e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={chip:"pf-c-chip",button:"pf-c-button",badge:"pf-c-badge",chipText:"pf-c-chip__text",modifiers:{overflow:"pf-m-overflow",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",readOnly:"pf-m-read-only"}}}))));function ma(){return(ma=Object.assign||function(e){for(var t=1;t{const{children:e,className:t,onClick:n,ouiaContext:r,ouiaId:o}=this.props,i=this.props.component;return l(i,ma({className:h(da.chip,da.modifiers.overflow,t)},r.isOuia&&{"data-ouia-component-type":"OverflowChip","data-ouia-component-id":o||r.ouiaId}),l(pa,{onClick:n},l("span",{className:h(da.chipText)},e)))}),ga(this,"renderChip",e=>{const{children:t,closeBtnAriaLabel:n,tooltipPosition:r,className:o,onClick:i,isReadOnly:a,ouiaContext:s,ouiaId:c}=this.props,p=this.props.component;return this.state.isTooltipVisible?l(Ko,{position:r,content:t},l(p,ma({className:h(da.chip,a&&da.modifiers.readOnly,o),tabIndex:"0"},s.isOuia&&{"data-ouia-component-type":"Chip","data-ouia-component-id":c||s.ouiaId}),l("span",{ref:this.span,className:h(da.chipText),id:e},t),!a&&l(pa,{onClick:i,ariaLabel:n,id:"remove_"+e,"aria-labelledby":`remove_${e} ${e}`},l(fa,{"aria-hidden":"true"})))):l(p,ma({className:h(da.chip,a&&da.modifiers.readOnly,o)},s.isOuia&&{"data-ouia-component-type":"Chip","data-ouia-component-id":c||s.ouiaId}),l("span",{ref:this.span,className:h(da.chipText),id:e},t),!a&&l(pa,{onClick:i,ariaLabel:n,id:"remove_"+e,"aria-labelledby":`remove_${e} ${e}`},l(fa,{"aria-hidden":"true"})))}),this.state={isTooltipVisible:!1}}componentDidMount(){this.setState({isTooltipVisible:Boolean(this.span.current&&this.span.current.offsetWidthe?this.renderOverflowChip():this.renderChip(t))}}ga(ha,"propTypes",{children:n.node,closeBtnAriaLabel:n.string,className:n.string,isOverflowChip:n.bool,isReadOnly:n.bool,onClick:n.func,component:n.node,tooltipPosition:n.oneOf(["auto","top","bottom","left","right"])}),ga(ha,"defaultProps",{closeBtnAriaLabel:"close",className:"",isOverflowChip:!1,isReadOnly:!1,tooltipPosition:"top",onClick:e=>{},component:"div"});const ba=Ee(ha);function ya(){return(ya=Object.assign||function(e){for(var t=1;t{this.setState(e=>({isOpen:!e.isOpen}))}),this.state={isOpen:this.props.defaultIsOpen}}renderToolbarGroup(){const{isOpen:e}=this.state,{headingLevel:t="h4"}=this.props;return l(va.Provider,{value:t},l(wa,ya({},this.props,{isOpen:e,onToggleCollapse:this.toggleCollapse})))}renderChipGroup(){const{className:e}=this.props,{isOpen:t}=this.state;return l("ul",{className:h(aa.chipGroup,e)},l(wa,ya({},this.props,{isOpen:t,onToggleCollapse:this.toggleCollapse})))}render(){const{withToolbar:e,children:t}=this.props;return c.count(t)?e?this.renderToolbarGroup():this.renderChipGroup():null}}Oa(xa,"propTypes",{children:n.node,className:n.string,defaultIsOpen:n.bool,expandedText:n.string,collapsedText:n.string,withToolbar:n.bool,headingLevel:n.oneOf(["h1","h2","h3","h4","h5","h6"]),numChips:n.number}),Oa(xa,"defaultProps",{className:"",expandedText:"Show Less",collapsedText:"${remaining} more",withToolbar:!1,defaultIsOpen:!1,numChips:3});const wa=e=>{const{children:t,expandedText:n,isOpen:r,onToggleCollapse:o,collapsedText:i,withToolbar:a,numChips:u}=e,f=ee(i,{remaining:c.count(t)-u}),d=c.map(t,e=>{const t=e;return p(t,a?{children:c.toArray(t.props.children).map(e=>p(e,{component:"li"}))}:{component:"li"})});return l(s,null,l(s,null,r?d:d.map((e,t)=>{if(tu&&l(ba,{isOverflowChip:!0,onClick:o,component:a?"div":"li"},r?n:f))};function Ca(){return(Ca=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Pa(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}wa.propTypes={children:n.node,className:n.string,defaultIsOpen:n.bool,expandedText:n.string,collapsedText:n.string,withToolbar:n.bool,headingLevel:n.oneOf(["h1","h2","h3","h4","h5","h6"]),numChips:n.number,isOpen:n.bool.isRequired,onToggleCollapse:n.func.isRequired};class Sa extends o{constructor(e){super(e),Pa(this,"heading",i()),this.state={isTooltipVisible:!1}}componentDidMount(){this.setState({isTooltipVisible:Boolean(this.heading.current&&this.heading.current.offsetWidthl("ul",Ca({className:h(aa.chipGroup,aa.modifiers.toolbar,r)},p),l("li",null,this.state.isTooltipVisible?l(Ko,{position:s,content:t},l(c,{tabIndex:"0",ref:this.heading,className:h(aa.chipGroupLabel),id:e},t)):l(c,{ref:this.heading,className:h(aa.chipGroupLabel),id:e},t),l("ul",{className:h(aa.chipGroup)},n),o&&l("div",{className:"pf-c-chip-group__close"},l(pa,{"aria-label":i,onClick:a,id:"remove_group_"+e,"aria-labelledby":`remove_group_${e} ${e}`},l(Ke,{"aria-hidden":"true"})))));return l(va.Consumer,null,t=>l(K,null,n=>e(n,t)))}return null}}Pa(Sa,"propTypes",{categoryName:n.string,children:n.node,className:n.string,isClosable:n.bool,onClick:n.func,closeBtnAriaLabel:n.string,tooltipPosition:n.oneOf(["auto","top","bottom","left","right"])}),Pa(Sa,"defaultProps",{categoryName:"",children:null,className:"",isClosable:!1,onClick:e=>{},closeBtnAriaLabel:"Close chip group",tooltipPosition:"top"});var Na=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={clipboardCopy:"pf-c-clipboard-copy",clipboardCopyGroupToggle:"pf-c-clipboard-copy__group-toggle",clipboardCopyGroupToggleIcon:"pf-c-clipboard-copy__group-toggle-icon",clipboardCopyGroup:"pf-c-clipboard-copy__group",clipboardCopyGroupCopy:"pf-c-clipboard-copy__group-copy",clipboardCopyExpandableContent:"pf-c-clipboard-copy__expandable-content",modifiers:{expanded:"pf-m-expanded",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus"}}})));function Ta(){return(Ta=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ka(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Ia;!function(e){e.text="text",e.date="date",e.datetimeLocal="datetime-local",e.email="email",e.month="month",e.number="number",e.password="password",e.search="search",e.tel="tel",e.time="time",e.url="url"}(Ia||(Ia={}));class La extends o{constructor(e){super(e),ka(this,"handleChange",e=>{this.props.onChange&&this.props.onChange(e.currentTarget.value,e)}),e.id||e["aria-label"]||e["aria-labelledby"]||console.error("Text input:","Text input requires either an id or aria-label to be specified")}render(){const e=this.props,{innerRef:t,className:n,type:r,value:o,onChange:i,isValid:a,validated:s,isReadOnly:c,isRequired:p,isDisabled:u}=e,f=_a(e,["innerRef","className","type","value","onChange","isValid","validated","isReadOnly","isRequired","isDisabled"]);return l("input",Ta({},f,{className:h(ln.formControl,s===C.success&&ln.modifiers.success,n),onChange:this.handleChange,type:r,value:o,"aria-invalid":!a||s===C.error,required:p,disabled:u,readOnly:c,ref:t}))}}ka(La,"propTypes",{className:n.string,isDisabled:n.bool,isReadOnly:n.bool,isRequired:n.bool,isValid:n.bool,validated:n.oneOf(["success","error","default"]),onChange:n.func,type:n.oneOf(["text","date","datetime-local","email","month","number","password","search","tel","time","url"]),value:n.oneOfType([n.string,n.number]),"aria-label":n.string,innerRef:n.oneOfType([n.string,n.func,n.object])}),ka(La,"defaultProps",{"aria-label":null,className:"",isRequired:!1,isValid:!0,validated:"default",isDisabled:!1,isReadOnly:!1,type:Ia.text,onChange:()=>{}});const Ea=f((e,t)=>l(La,Ta({},e,{innerRef:t})));var Ma=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.CopyIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"CopyIcon",height:512,width:448,svgPath:"M320 448v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V120c0-13.255 10.745-24 24-24h72v296c0 30.879 25.121 56 56 56h168zm0-344V0H152c-13.255 0-24 10.745-24 24v368c0 13.255 10.745 24 24 24h272c13.255 0 24-10.745 24-24V128H344c-13.2 0-24-10.8-24-24zm120.971-31.029L375.029 7.029A24 24 0 0 0 358.059 0H352v96h96v-6.059a24 24 0 0 0-7.029-16.97z",yOffset:"",xOffset:"",transform:""};t.CopyIconConfig=r;var o=(0,n.default)(r);t.default=o})),Ra=e(Ma);Ma.CopyIconConfig;function Da(){return(Da=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Fa=e=>{let{onClick:t,className:n="",exitDelay:r=100,entryDelay:o=100,maxWidth:i="100px",position:a="top","aria-label":s="Copyable input",id:c,textId:p,children:u}=e,f=Ba(e,["onClick","className","exitDelay","entryDelay","maxWidth","position","aria-label","id","textId","children"]);return l(Ko,{trigger:"mouseenter focus click",exitDelay:r,entryDelay:o,maxWidth:i,position:a,content:l("div",null,u)},l("button",Da({type:"button",onClick:t,className:h(Na.clipboardCopyGroupCopy,n),"aria-label":s,id:c,"aria-labelledby":`${c} ${p}`},f),l(Ra,null)))};function Aa(){return(Aa=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Fa.propTypes={onClick:n.func.isRequired,children:n.node.isRequired,id:n.string.isRequired,textId:n.string.isRequired,className:n.string,exitDelay:n.number,entryDelay:n.number,maxWidth:n.string,position:n.oneOf(["auto","top","bottom","left","right"]),"aria-label":n.string};const za=e=>{let{onClick:t,className:n="",id:r,textId:o,contentId:i,isExpanded:a=!1}=e,s=Ha(e,["onClick","className","id","textId","contentId","isExpanded"]);return l("button",Aa({type:"button",onClick:t,className:h(Na.clipboardCopyGroupToggle,n),id:r,"aria-labelledby":`${r} ${o}`,"aria-controls":`${r} ${i}`,"aria-expanded":a},s),l(vt,{"aria-hidden":"true",className:h(Na.clipboardCopyGroupToggleIcon)}))};function qa(){return(qa=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Va(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}za.propTypes={onClick:n.func.isRequired,id:n.string.isRequired,textId:n.string.isRequired,contentId:n.string.isRequired,isExpanded:n.bool,className:n.string};class Ga extends o{constructor(e){super(e)}render(){const e=this.props,{className:t,children:n,onChange:r,isReadOnly:o,isCode:i}=e,a=Xa(e,["className","children","onChange","isReadOnly","isCode"]);return l("div",qa({suppressContentEditableWarning:!0,className:h(Na.clipboardCopyExpandableContent,t),onInput:e=>r(e.target.innerText,e),contentEditable:!o},a),i?l("pre",null,n):n)}}function Wa(){return(Wa=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ua(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Va(Ga,"propTypes",{className:n.string,children:n.node.isRequired,onChange:n.func,isReadOnly:n.bool,isCode:n.bool}),Va(Ga,"defaultProps",{onChange:()=>{},className:"",isReadOnly:!1,isCode:!1});const $a=(e,t)=>{const n=e.currentTarget.parentElement,r=document.createElement("input");r.value=t.toString(),n.appendChild(r),r.select(),document.execCommand("copy"),n.removeChild(r)};let Ya;!function(e){e.inline="inline",e.expansion="expansion"}(Ya||(Ya={}));class Ja extends o{constructor(e){super(e),Ua(this,"timer",null),Ua(this,"componentDidUpdate",(e,t)=>{e.children!==this.props.children&&this.updateText(this.props.children)}),Ua(this,"expandContent",e=>{this.setState(e=>({expanded:!e.expanded}))}),Ua(this,"updateText",e=>{this.setState({text:e}),this.props.onChange(e)}),Ua(this,"render",()=>{const e=this.props,{isExpanded:t,onChange:n,isReadOnly:r,isCode:o,exitDelay:i,maxWidth:a,entryDelay:c,switchDelay:p,onCopy:u,hoverTip:f,clickTip:d,textAriaLabel:m,toggleAriaLabel:g,variant:b,position:y,className:O}=e,v=Ka(e,["isExpanded","onChange","isReadOnly","isCode","exitDelay","maxWidth","entryDelay","switchDelay","onCopy","hoverTip","clickTip","textAriaLabel","toggleAriaLabel","variant","position","className"]);return l("div",Wa({className:h(Na.clipboardCopy,this.state.expanded&&Na.modifiers.expanded,O)},v),l(K,{prefix:""},e=>l(s,null,l("div",{className:h(Na.clipboardCopyGroup)},"expansion"===b&&l(za,{isExpanded:this.state.expanded,onClick:this.expandContent,id:"toggle--"+e,textId:"text-input--"+e,contentId:"content--"+e,"aria-label":g}),l(Ea,{isReadOnly:r||this.state.expanded,onChange:this.updateText,value:this.state.text,id:"text-input-"+e,"aria-label":m}),l(Fa,{exitDelay:i,entryDelay:c,maxWidth:a,position:y,id:"copy-button-"+e,textId:"text-input-"+e,"aria-label":f,onClick:e=>{this.timer&&(window.clearTimeout(this.timer),this.setState({copied:!1})),u(e,this.state.text),this.setState({copied:!0},()=>{this.timer=window.setTimeout(()=>{this.setState({copied:!1}),this.timer=null},p)})}},this.state.copied?d:f)),this.state.expanded&&l(Ga,{isReadOnly:r,isCode:o,id:"content-"+e,onChange:this.updateText},this.state.text))))}),this.state={text:this.props.children,expanded:this.props.isExpanded,copied:!1}}}Ua(Ja,"propTypes",{className:n.string,hoverTip:n.string,clickTip:n.string,textAriaLabel:n.string,toggleAriaLabel:n.string,isReadOnly:n.bool,isExpanded:n.bool,isCode:n.bool,variant:n.oneOfType([n.any,n.oneOf(["inline"]),n.oneOf(["expansion"])]),position:n.oneOfType([n.any,n.oneOf(["auto"]),n.oneOf(["top"]),n.oneOf(["bottom"]),n.oneOf(["left"]),n.oneOf(["right"])]),maxWidth:n.string,exitDelay:n.number,entryDelay:n.number,switchDelay:n.number,onCopy:n.func,onChange:n.func,children:n.node.isRequired}),Ua(Ja,"defaultProps",{hoverTip:"Copy to clipboard",clickTip:"Successfully copied to clipboard!",isReadOnly:!1,isExpanded:!1,isCode:!1,variant:"inline",position:Wo.top,maxWidth:"150px",exitDelay:1600,entryDelay:100,switchDelay:2e3,onCopy:$a,onChange:()=>{},textAriaLabel:"Copyable input",toggleAriaLabel:"Show content"});var Za=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={contextSelectorMenu:"pf-c-context-selector__menu",contextSelector:"pf-c-context-selector",contextSelectorToggle:"pf-c-context-selector__toggle",contextSelectorToggleIcon:"pf-c-context-selector__toggle-icon",contextSelectorToggleText:"pf-c-context-selector__toggle-text",contextSelectorMenuInput:"pf-c-context-selector__menu-input",contextSelectorMenuList:"pf-c-context-selector__menu-list",contextSelectorMenuListItem:"pf-c-context-selector__menu-list-item",modifiers:{hover:"pf-m-hover",active:"pf-m-active",expanded:"pf-m-expanded",focus:"pf-m-focus",disabled:"pf-m-disabled"}}}))),Qa=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.SearchIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"SearchIcon",height:512,width:512,svgPath:"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z",yOffset:"",xOffset:"",transform:""};t.SearchIconConfig=r;var o=(0,n.default)(r);t.default=o})),es=e(Qa);Qa.SearchIconConfig;function ts(){return(ts=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function rs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class os extends o{constructor(...e){super(...e),rs(this,"toggle",i()),rs(this,"componentDidMount",()=>{document.addEventListener("mousedown",this.onDocClick),document.addEventListener("touchstart",this.onDocClick),document.addEventListener("keydown",this.onEscPress)}),rs(this,"componentWillUnmount",()=>{document.removeEventListener("mousedown",this.onDocClick),document.removeEventListener("touchstart",this.onDocClick),document.removeEventListener("keydown",this.onEscPress)}),rs(this,"onDocClick",e=>{const{isOpen:t,parentRef:n,onToggle:r}=this.props;t&&n&&!n.contains(e.target)&&(r(null,!1),this.toggle.current.focus())}),rs(this,"onEscPress",e=>{const{isOpen:t,parentRef:n,onToggle:r}=this.props,o=e.keyCode||e.which;t&&o===v.ESCAPE_KEY&&n&&n.contains(e.target)&&(r(null,!1),this.toggle.current.focus())}),rs(this,"onKeyDown",e=>{const{isOpen:t,onToggle:n,onEnter:r}=this.props;e.keyCode===v.TAB&&!t||e.key!==v.ENTER||(e.preventDefault(),e.keyCode!==v.TAB&&e.keyCode!==v.ENTER&&e.key===v.SPACE||!t?e.keyCode!==v.ENTER&&" "!==e.key||t||(n(null,!t),r()):n(null,!t))})}render(){const e=this.props,{className:t,toggleText:n,isOpen:r,isFocused:o,isActive:i,isHovered:a,onToggle:s,id:c,onEnter:p,parentRef:u}=e,f=ns(e,["className","toggleText","isOpen","isFocused","isActive","isHovered","onToggle","id","onEnter","parentRef"]);return l("button",ts({},f,{id:c,ref:this.toggle,className:h(Za.contextSelectorToggle,o&&Za.modifiers.focus,a&&Za.modifiers.hover,i&&Za.modifiers.active,t),type:"button",onClick:e=>s(e,!r),"aria-expanded":r,onKeyDown:this.onKeyDown}),l("span",{className:h(Za.contextSelectorToggleText)},n),l(yi,{className:h(Za.contextSelectorToggleIcon),"aria-hidden":!0}))}}function is(){return(is=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function as(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}rs(os,"propTypes",{id:n.string.isRequired,className:n.string,toggleText:n.string,isOpen:n.bool,onToggle:n.func,onEnter:n.func,parentRef:n.any,isFocused:n.bool,isHovered:n.bool,isActive:n.bool}),rs(os,"defaultProps",{className:"",toggleText:"",isOpen:!1,onEnter:()=>{},parentRef:null,isFocused:!1,isHovered:!1,isActive:!1,onToggle:(e,t)=>{}});class ss extends o{constructor(...e){super(...e),as(this,"refsCollection",[]),as(this,"sendRef",(e,t)=>{this.refsCollection[e]=t}),as(this,"render",()=>{const e=this.props,{className:t,isOpen:n,children:r}=e,o=ls(e,["className","isOpen","children"]);return l("ul",is({className:h(Za.contextSelectorMenuList,t),hidden:!n,role:"menu"},o),this.extendChildren())})}extendChildren(){return c.map(this.props.children,(e,t)=>p(e,{sendRef:this.sendRef,index:t}))}}as(ss,"propTypes",{children:n.node,className:n.string,isOpen:n.bool}),as(ss,"defaultProps",{children:null,className:"",isOpen:!0});const cs=a({onSelect:(e,t)=>{}});var ps=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={inputGroup:"pf-c-input-group",formControl:"pf-c-form-control",button:"pf-c-button",dropdownToggle:"pf-c-dropdown__toggle",inputGroupText:"pf-c-input-group__text",modifiers:{control:"pf-m-control"}}})));function us(){return(us=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ds(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class ms extends o{constructor(e){super(e),ds(this,"handleChange",e=>{this.props.onChange(e.currentTarget.value,e)}),e.id||e["aria-label"]||console.error("FormSelect requires either an id or aria-label to be specified")}render(){const e=this.props,{children:t,className:n,value:r,isValid:o,validated:i,isDisabled:a,isRequired:s}=e,c=fs(e,["children","className","value","isValid","validated","isDisabled","isRequired"]);return l("select",us({},c,{className:h(ln.formControl,n,i===C.success&&ln.modifiers.success),"aria-invalid":!o||i===C.error,onChange:this.handleChange,disabled:a,required:s,value:r}),t)}}function gs(){return(gs=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ds(ms,"propTypes",{children:n.node.isRequired,className:n.string,value:n.any,isValid:n.bool,validated:n.oneOf(["success","error","default"]),isDisabled:n.bool,isRequired:n.bool,onBlur:n.func,onFocus:n.func,onChange:n.func,"aria-label":n.string}),ds(ms,"defaultProps",{className:"",value:"",isValid:!0,validated:"default",isDisabled:!1,isRequired:!1,onBlur:()=>{},onFocus:()=>{},onChange:()=>{}});const bs=e=>{let{className:t="",value:n="",isDisabled:r=!1,label:o}=e,i=hs(e,["className","value","isDisabled","label"]);return l("option",gs({},i,{className:t,value:n,disabled:r}),o)};function ys(){return(ys=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}bs.propTypes={className:n.string,value:n.any,label:n.string.isRequired,isDisabled:n.bool};const vs=e=>{let{children:t=null,className:n="",isDisabled:r=!1,label:o}=e,i=Os(e,["children","className","isDisabled","label"]);return l("optgroup",ys({},i,{disabled:!!r,className:n,label:o}),t)};function xs(){return(xs=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Cs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let js;vs.propTypes={children:n.node,className:n.string,label:n.string.isRequired,isDisabled:n.bool},function(e){e.horizontal="horizontal",e.vertical="vertical",e.both="both"}(js||(js={}));class Ps extends o{constructor(e){super(e),Cs(this,"handleChange",e=>{this.props.onChange&&this.props.onChange(e.currentTarget.value,e)}),e.id||e["aria-label"]||console.error("TextArea: TextArea requires either an id or aria-label to be specified")}render(){const e=this.props,{className:t,value:n,onChange:r,isValid:o,validated:i,isRequired:a,resizeOrientation:s}=e,c=ws(e,["className","value","onChange","isValid","validated","isRequired","resizeOrientation"]),p="resize"+s.charAt(0).toUpperCase()+s.slice(1);return l("textarea",xs({className:h(ln.formControl,t,s!==js.both&&g(ln,p),i===C.success&&ln.modifiers.success),onChange:this.handleChange},"string"!=typeof this.props.defaultValue&&{value:n},{"aria-invalid":!o||i===C.error,required:a},c))}}function Ss(){return(Ss=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Cs(Ps,"propTypes",{className:n.string,isRequired:n.bool,isValid:n.bool,validated:n.oneOf(["success","error","default"]),value:n.oneOfType([n.string,n.number]),onChange:n.func,resizeOrientation:n.oneOf(["horizontal","vertical","both"]),"aria-label":n.string}),Cs(Ps,"defaultProps",{className:"",isRequired:!1,isValid:!0,validated:"default",resizeOrientation:"both","aria-label":null});const Ts=e=>{let{className:t="",children:n}=e,r=Ns(e,["className","children"]);const o=[ms,Ps,Ea].map(e=>e.toString()),i=c.toArray(n).find(e=>!o.includes(e.type.toString())&&e.props.id);return l("div",Ss({className:h(ps.inputGroup,t)},r),i?c.map(n,e=>o.includes(e.type.toString())?p(e,{"aria-describedby":i.props.id}):e):n)};function _s(){return(_s=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ts.propTypes={className:n.string,children:n.node.isRequired};const Is=e=>{let{className:t="",component:n="span",children:r}=e,o=ks(e,["className","component","children"]);return l(n,_s({className:h(ps.inputGroupText,t)},o),r)};function Ls(){return(Ls=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ms(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Is.propTypes={className:n.string,children:n.node.isRequired,component:n.node};let Rs=0;const Ds=Rs++;class Bs extends o{constructor(...e){super(...e),Ms(this,"parentRef",i()),Ms(this,"onEnterPressed",e=>{e.charCode===v.ENTER&&this.props.onSearchButtonClick()})}render(){const e="pf-context-selector-toggle-id-"+Ds,t="pf-context-selector-label-id-"+Ds,n="pf-context-selector-search-button-id-"+Ds,r=this.props,{children:o,className:i,isOpen:a,onToggle:s,onSelect:c,screenReaderLabel:p,toggleText:u,searchButtonAriaLabel:f,searchInputValue:d,onSearchInputChange:m,searchInputPlaceholder:g,onSearchButtonClick:b}=r,y=Es(r,["children","className","isOpen","onToggle","onSelect","screenReaderLabel","toggleText","searchButtonAriaLabel","searchInputValue","onSearchInputChange","searchInputPlaceholder","onSearchButtonClick"]);return l("div",Ls({className:h(Za.contextSelector,a&&Za.modifiers.expanded,i),ref:this.parentRef},y),p&&l("span",{id:t,hidden:!0},p),l(os,{onToggle:s,isOpen:a,toggleText:u,id:e,parentRef:this.parentRef.current,"aria-labelledby":`${t} ${e}`}),a&&l("div",{className:h(Za.contextSelectorMenu)},a&&l(V,{focusTrapOptions:{clickOutsideDeactivates:!0}},l("div",{className:h(Za.contextSelectorMenuInput)},l(Ts,null,l(Ea,{value:d,type:"search",placeholder:g,onChange:m,onKeyPress:this.onEnterPressed,"aria-labelledby":n}),l(Xe,{variant:He.control,"aria-label":f,id:n,onClick:b},l(es,{"aria-hidden":"true"})))),l(cs.Provider,{value:{onSelect:c}},l(ss,{isOpen:a},o)))))}}function Fs(){return(Fs=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Hs(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Ms(Bs,"propTypes",{children:n.node,className:n.string,isOpen:n.bool,onToggle:n.func,onSelect:n.func,screenReaderLabel:n.string,toggleText:n.string,searchButtonAriaLabel:n.string,searchInputValue:n.string,onSearchInputChange:n.func,searchInputPlaceholder:n.string,onSearchButtonClick:n.func}),Ms(Bs,"defaultProps",{children:null,className:"",isOpen:!1,onToggle:()=>{},onSelect:()=>{},screenReaderLabel:"",toggleText:"",searchButtonAriaLabel:"Search menu items",searchInputValue:"",onSearchInputChange:()=>{},searchInputPlaceholder:"Search",onSearchButtonClick:()=>{}});class zs extends o{constructor(...e){super(...e),Hs(this,"ref",i())}componentDidMount(){this.props.sendRef(this.props.index,this.ref.current)}render(){const e=this.props,{className:t,children:n,isHovered:r,onClick:o,isDisabled:i,index:a,sendRef:s}=e,c=As(e,["className","children","isHovered","onClick","isDisabled","index","sendRef"]);return l(cs.Consumer,null,({onSelect:e})=>l("li",{role:"none"},l("button",Fs({className:h(Za.contextSelectorMenuListItem,i&&Za.modifiers.disabled,r&&Za.modifiers.hover,t),ref:this.ref,onClick:t=>{i||(o(t),e(t,n))}},c),n)))}}Hs(zs,"propTypes",{children:n.node,className:n.string,isDisabled:n.bool,isHovered:n.bool,onClick:n.func,index:n.number,sendRef:n.func}),Hs(zs,"defaultProps",{children:null,className:"",isHovered:!1,isDisabled:!1,onClick:()=>{},index:void 0,sendRef:()=>{}});var qs=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={dataList:"pf-c-data-list",dataListItemAction:"pf-c-data-list__item-action",dataListItem:"pf-c-data-list__item",dataListItemRow:"pf-c-data-list__item-row",dataListItemControl:"pf-c-data-list__item-control",dataListAction:"pf-c-data-list__action",dataListToggle:"pf-c-data-list__toggle",button:"pf-c-button",dataListExpandableContent:"pf-c-data-list__expandable-content",dataListItemContent:"pf-c-data-list__item-content",dataListCell:"pf-c-data-list__cell",dataListExpandableContentBody:"pf-c-data-list__expandable-content-body",modifiers:{hidden:"pf-m-hidden",hiddenOnSm:"pf-m-hidden-on-sm",visibleOnSm:"pf-m-visible-on-sm",hiddenOnMd:"pf-m-hidden-on-md",visibleOnMd:"pf-m-visible-on-md",hiddenOnLg:"pf-m-hidden-on-lg",visibleOnLg:"pf-m-visible-on-lg",hiddenOnXl:"pf-m-hidden-on-xl",visibleOnXl:"pf-m-visible-on-xl",hiddenOn_2xl:"pf-m-hidden-on-2xl",visibleOn_2xl:"pf-m-visible-on-2xl",compact:"pf-m-compact",expanded:"pf-m-expanded",selected:"pf-m-selected",selectable:"pf-m-selectable",icon:"pf-m-icon",noFill:"pf-m-no-fill",alignRight:"pf-m-align-right",flex_2:"pf-m-flex-2",flex_3:"pf-m-flex-3",flex_4:"pf-m-flex-4",flex_5:"pf-m-flex-5",noPadding:"pf-m-no-padding"}}})));function Xs(){return(Xs=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Gs=a({isSelectable:!1}),Ws=e=>{let{children:t=null,className:n="","aria-label":r,selectedDataListItemId:o="",onSelectDataListItem:i,isCompact:a=!1}=e,s=Vs(e,["children","className","aria-label","selectedDataListItemId","onSelectDataListItem","isCompact"]);const c=void 0!==i;return l(Gs.Provider,{value:{isSelectable:c,selectedDataListItemId:o,updateSelectedDataListItem:e=>{i(e)}}},l("ul",Xs({className:h(qs.dataList,a&&qs.modifiers.compact,n),"aria-label":r},s),t))};function Ks(){return(Ks=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function $s(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Ys(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Ws.propTypes={children:n.node,className:n.string,"aria-label":n.string.isRequired,onSelectDataListItem:n.func,selectedDataListItemId:n.string,isCompact:n.bool};const Js=y(qs.modifiers,["hidden","hiddenOnSm","hiddenOnMd","hiddenOnLg","hiddenOnXl","hiddenOn_2xl","visibleOnSm","visibleOnMd","visibleOnLg","visibleOnXl","visibleOn_2xl"]),Zs=Object.keys(Js).map(e=>[e.replace("_2xl","2Xl"),Js[e]]).reduce((e,t)=>function(e){for(var t=1;t{this.setState({isOpen:e})}),Ys(this,"onSelect",e=>{this.setState(e=>({isOpen:!e.isOpen}))}),this.state={isOpen:!1}}render(){const e=this.props,{children:t,className:n,id:r,"aria-label":o,"aria-labelledby":i}=e,a=Us(e,["children","className","id","aria-label","aria-labelledby"]);return l("div",Ks({className:h(qs.dataListItemAction,n)},a),t)}}function ec(){return(ec=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ys(Qs,"propTypes",{children:n.node.isRequired,className:n.string,id:n.string.isRequired,"aria-labelledby":n.string.isRequired,"aria-label":n.string.isRequired}),Ys(Qs,"defaultProps",{className:""});const nc=e=>{let{children:t=null,className:n="",width:r=1,isFilled:o=!0,alignRight:i=!1,isIcon:a=!1}=e,s=tc(e,["children","className","width","isFilled","alignRight","isIcon"]);return l("div",ec({className:h(qs.dataListCell,r>1&&g(qs,"flex_"+r,""),!o&&qs.modifiers.noFill,i&&qs.modifiers.alignRight,a&&qs.modifiers.icon,n)},s),t)};function rc(){return(rc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}nc.propTypes={children:n.node,className:n.string,width:n.oneOf([1,2,3,4,5]),isFilled:n.bool,alignRight:n.bool,isIcon:n.bool};const ic=e=>{let{className:t="",onChange:n=((e,t)=>{}),isValid:r=!0,isDisabled:o=!1,isChecked:i=null,checked:a=null}=e,s=oc(e,["className","onChange","isValid","isDisabled","isChecked","checked"]);return l("div",{className:h(qs.dataListItemControl,t)},l("div",{className:h("pf-c-data-list__check")},l("input",rc({},s,{type:"checkbox",onChange:e=>n(e.currentTarget.checked,e),"aria-invalid":!r,disabled:o,checked:i||a}))))};ic.propTypes={className:n.string,isValid:n.bool,isDisabled:n.bool,isChecked:n.bool,checked:n.bool,onChange:n.func,"aria-labelledby":n.string.isRequired};var lc=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={select:"pf-c-select",selectToggle:"pf-c-select__toggle",formControl:"pf-c-form-control",selectToggleClear:"pf-c-select__toggle-clear",selectToggleButton:"pf-c-select__toggle-button",selectToggleArrow:"pf-c-select__toggle-arrow",selectToggleText:"pf-c-select__toggle-text",selectToggleWrapper:"pf-c-select__toggle-wrapper",chip:"pf-c-chip",button:"pf-c-button",chipGroup:"pf-c-chip-group",selectToggleTypeaheadForm:"pf-c-select__toggle-typeahead-form",selectToggleTypeahead:"pf-c-select__toggle-typeahead",selectToggleIcon:"pf-c-select__toggle-icon",selectToggleBadge:"pf-c-select__toggle-badge",selectMenu:"pf-c-select__menu",selectMenuFieldset:"pf-c-select__menu-fieldset",selectMenuItem:"pf-c-select__menu-item",selectMenuItemIcon:"pf-c-select__menu-item-icon",selectMenuItemMatch:"pf-c-select__menu-item--match",selectSeparator:"pf-c-select__separator",selectMenuGroup:"pf-c-select__menu-group",selectMenuInput:"pf-c-select__menu-input",selectMenuGroupTitle:"pf-c-select__menu-group-title",modifiers:{disabled:"pf-m-disabled",hover:"pf-m-hover",active:"pf-m-active",expanded:"pf-m-expanded",plain:"pf-m-plain",typeahead:"pf-m-typeahead",top:"pf-m-top",focus:"pf-m-focus",alignRight:"pf-m-align-right",selected:"pf-m-selected"}}}))),ac=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={form:"pf-c-form",formLabel:"pf-c-form__label",formGroup:"pf-c-form__group",formControl:"pf-c-form-control",formHorizontalGroup:"pf-c-form__horizontal-group",formHelperText:"pf-c-form__helper-text",check:"pf-c-check",formLabelText:"pf-c-form__label-text",formLabelRequired:"pf-c-form__label-required",formFieldset:"pf-c-form__fieldset",formActions:"pf-c-form__actions",modifiers:{horizontal:"pf-m-horizontal",alignRight:"pf-m-align-right",noPaddingTop:"pf-m-no-padding-top",action:"pf-m-action",inline:"pf-m-inline",disabled:"pf-m-disabled",error:"pf-m-error",success:"pf-m-success",inactive:"pf-m-inactive",hidden:"pf-m-hidden"}}}))),sc=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.CheckIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"CheckIcon",height:512,width:512,svgPath:"M173.898 439.404l-166.4-166.4c-9.997-9.997-9.997-26.206 0-36.204l36.203-36.204c9.997-9.998 26.207-9.998 36.204 0L192 312.69 432.095 72.596c9.997-9.997 26.207-9.997 36.204 0l36.203 36.204c9.997 9.997 9.997 26.206 0 36.204l-294.4 294.401c-9.998 9.997-26.207 9.997-36.204-.001z",yOffset:"",xOffset:"",transform:""};t.CheckIconConfig=r;var o=(0,n.default)(r);t.default=o})),cc=e(sc);sc.CheckIconConfig;const pc=a(null),uc=pc.Provider,fc=pc.Consumer;let dc,mc;!function(e){e.single="single",e.checkbox="checkbox",e.typeahead="typeahead",e.typeaheadMulti="typeaheadmulti"}(dc||(dc={})),function(e){e.up="up",e.down="down"}(mc||(mc={}));const gc={Tab:"Tab",Space:" ",Escape:"Escape",Enter:"Enter",ArrowUp:"ArrowUp",ArrowDown:"ArrowDown"};function hc(){return(hc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function yc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Oc extends o{constructor(...e){super(...e),yc(this,"ref",i()),yc(this,"onKeyDown",e=>{e.key!==gc.Tab&&(e.preventDefault(),e.key===gc.ArrowUp?this.props.keyHandler(this.props.index,"up"):e.key===gc.ArrowDown?this.props.keyHandler(this.props.index,"down"):e.key===gc.Enter&&(this.ref.current.click(),this.context.variant===dc.checkbox&&this.ref.current.focus()))})}componentDidMount(){this.props.sendRef(this.props.isDisabled?null:this.ref.current,this.props.index)}componentDidUpdate(){this.props.sendRef(this.props.isDisabled?null:this.ref.current,this.props.index)}render(){const e=this.props,{children:t,className:n,value:r,onClick:o,isDisabled:i,isPlaceholder:a,isNoResultsOption:c,isSelected:p,isChecked:u,isFocused:f,sendRef:d,keyHandler:m,index:g,component:b}=e,y=bc(e,["children","className","value","onClick","isDisabled","isPlaceholder","isNoResultsOption","isSelected","isChecked","isFocused","sendRef","keyHandler","index","component"]),O=b;return l(fc,null,({onSelect:e,onClose:d,variant:m})=>l(s,null,m!==dc.checkbox&&l("li",{role:"presentation"},l(O,hc({},y,{className:h(lc.selectMenuItem,p&&lc.modifiers.selected,i&&lc.modifiers.disabled,f&&lc.modifiers.focus,n),onClick:t=>{i||(o(t),e(t,r,a),d())},role:"option","aria-selected":p||null,ref:this.ref,onKeyDown:this.onKeyDown,type:"button"}),t||r.toString(),p&&l(cc,{className:h(lc.selectMenuItemIcon),"aria-hidden":!0}))),m===dc.checkbox&&!c&&l("label",hc({},y,{className:h(ta.check,lc.selectMenuItem,i&&lc.modifiers.disabled,n),onKeyDown:this.onKeyDown}),l("input",{id:r.toString(),className:h(ta.checkInput),type:"checkbox",onChange:t=>{i||(o(t),e(t,r))},ref:this.ref,checked:u||!1,disabled:i}),l("span",{className:h(ta.checkLabel,i&&lc.modifiers.disabled)},t||r.toString())),m===dc.checkbox&&c&&l("div",null,l(O,hc({},y,{className:h(lc.selectMenuItem,p&&lc.modifiers.selected,i&&lc.modifiers.disabled,f&&lc.modifiers.focus,n),role:"option","aria-selected":p||null,ref:this.ref,onKeyDown:this.onKeyDown,type:"button"}),t||r.toString()))))}}function vc(){return(vc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function wc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}yc(Oc,"propTypes",{children:n.node,className:n.string,index:n.number,component:n.node,value:n.oneOfType([n.string,n.shape({})]),isDisabled:n.bool,isPlaceholder:n.bool,isNoResultsOption:n.bool,isSelected:n.bool,isChecked:n.bool,isFocused:n.bool,sendRef:n.func,keyHandler:n.func,onClick:n.func}),yc(Oc,"defaultProps",{className:"",value:"",index:0,isDisabled:!1,isPlaceholder:!1,isSelected:!1,isChecked:!1,isFocused:!1,isNoResultsOption:!1,component:"button",onClick:()=>{},sendRef:()=>{},keyHandler:()=>{}});class Cc extends o{extendChildren(){const{children:e,isGrouped:t}=this.props,n=e;if(t){let e=0;return c.map(n,t=>p(t,{titleId:t.props.label.replace(/\W/g,"-"),children:t.props.children.map(t=>this.cloneOption(t,e++))}))}return c.map(n,(e,t)=>this.cloneOption(e,t))}cloneOption(e,t){const{selected:n,sendRef:r,keyHandler:o}=this.props,i=n&&n.constructor===Array?n&&Array.isArray(n)&&n.includes(e.props.value):n===e.props.value;return p(e,{id:`${e.props.value?e.props.value.toString():""}-${t}`,isSelected:i,sendRef:r,keyHandler:o,index:t})}extendCheckboxChildren(e){const{isGrouped:t,checked:n,sendRef:r,keyHandler:o,hasInlineFilter:i}=this.props;let a=i?1:0;return t?c.map(e,e=>e.type===Oc?e:p(e,{titleId:e.props.label.replace(/\W/g,"-"),children:l("fieldset",{"aria-labelledby":e.props.label.replace(/\W/g,"-"),className:h(lc.selectMenuFieldset)},e.props.children.map(e=>p(e,{isChecked:n&&n.includes(e.props.value),sendRef:r,keyHandler:o,index:a++})))})):c.map(e,e=>p(e,{isChecked:n&&n.includes(e.props.value),sendRef:r,keyHandler:o,index:a++}))}render(){const e=this.props,{children:t,isCustomContent:n,className:r,isExpanded:o,openedOnEnter:i,selected:a,checked:p,isGrouped:u,sendRef:f,keyHandler:d,maxHeight:m,noResultsFoundText:g,createText:b,"aria-label":y,"aria-labelledby":O,hasInlineFilter:v}=e,x=xc(e,["children","isCustomContent","className","isExpanded","openedOnEnter","selected","checked","isGrouped","sendRef","keyHandler","maxHeight","noResultsFoundText","createText","aria-label","aria-labelledby","hasInlineFilter"]);return l(fc,null,({variant:e})=>l(s,null,n&&l("div",vc({className:h(lc.selectMenu,r)},m&&{style:{maxHeight:m,overflow:"auto"}},x),t),e!==dc.checkbox&&!n&&l("ul",vc({className:h(lc.selectMenu,r),role:"listbox"},m&&{style:{maxHeight:m,overflow:"auto"}},x),this.extendChildren()),e===dc.checkbox&&!n&&c.count(t)>0&&l(V,{focusTrapOptions:{clickOutsideDeactivates:!0}},l("div",vc({className:h(lc.selectMenu,r)},m&&{style:{maxHeight:m,overflow:"auto"}}),l("fieldset",vc({},x,{"aria-label":y,"aria-labelledby":!y&&O||null,className:h(ac.formFieldset)}),v&&[t.shift(),...this.extendCheckboxChildren(t)],!v&&this.extendCheckboxChildren(t)))),e===dc.checkbox&&!n&&0===c.count(t)&&l("div",vc({className:h(lc.selectMenu,r)},m&&{style:{maxHeight:m,overflow:"auto"}}),l("fieldset",{className:h(lc.selectMenuFieldset)}))))}}function jc(){return(jc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Sc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}wc(Cc,"propTypes",{children:n.oneOfType([n.arrayOf(n.element),n.node]).isRequired,isCustomContent:n.bool,className:n.string,isExpanded:n.bool,isGrouped:n.bool,selected:n.oneOfType([n.string,n.any,n.arrayOf(n.oneOfType([n.string,n.any]))]),checked:n.arrayOf(n.oneOfType([n.string,n.any])),openedOnEnter:n.bool,maxHeight:n.oneOfType([n.string,n.number]),noResultsFoundText:n.string,createText:n.string,sendRef:n.func,keyHandler:n.func,hasInlineFilter:n.bool}),wc(Cc,"defaultProps",{className:"",isExpanded:!1,isGrouped:!1,openedOnEnter:!1,selected:"",maxHeight:"",sendRef:()=>{},keyHandler:()=>{},isCustomContent:!1,hasInlineFilter:!1});class Nc extends o{constructor(e){super(e),Sc(this,"onDocClick",e=>{const{parentRef:t,isExpanded:n,onToggle:r,onClose:o}=this.props;n&&t&&!t.current.contains(e.target)&&(r(!1),o(),this.toggle.current.focus())}),Sc(this,"onEscPress",e=>{const{parentRef:t,isExpanded:n,variant:r,onToggle:o,onClose:i}=this.props;e.key===gc.Tab&&r===dc.checkbox||n&&(e.key===gc.Escape||e.key===gc.Tab)&&t&&t.current.contains(e.target)&&(o(!1),i(),this.toggle.current.focus())}),Sc(this,"onKeyDown",e=>{const{isExpanded:t,onToggle:n,variant:r,onClose:o,onEnter:i,handleTypeaheadKeys:l}=this.props;e.key!==gc.ArrowDown&&e.key!==gc.ArrowUp||r!==dc.typeahead&&r!==dc.typeaheadMulti||l(e.key===gc.ArrowDown?"down":e.key===gc.ArrowUp&&"up"),e.key!==gc.Enter||r!==dc.typeahead&&r!==dc.typeaheadMulti||(t?l("enter"):n(!t)),e.key===gc.Tab&&r===dc.checkbox||e.key===gc.Tab&&!t||e.key!==gc.Enter&&e.key!==gc.Space||!(e.key!==gc.Space&&e.key!==gc.Enter||r!==dc.typeahead&&r!==dc.typeaheadMulti)||(e.preventDefault(),e.key!==gc.Tab&&e.key!==gc.Enter&&e.key!==gc.Space||!t?e.key!==gc.Enter&&e.key!==gc.Space||t||(n(!t),i()):(n(!t),o(),this.toggle.current.focus()))});const{variant:t}=e;t===dc.typeahead||dc.typeaheadMulti;this.toggle=i()}componentDidMount(){document.addEventListener("mousedown",this.onDocClick),document.addEventListener("touchstart",this.onDocClick),document.addEventListener("keydown",this.onEscPress)}componentWillUnmount(){document.removeEventListener("mousedown",this.onDocClick),document.removeEventListener("touchstart",this.onDocClick),document.removeEventListener("keydown",this.onEscPress)}render(){const e=this.props,{className:t,children:n,isExpanded:r,isFocused:o,isActive:i,isHovered:a,isPlain:c,isDisabled:p,variant:u,onToggle:f,onEnter:d,onClose:m,handleTypeaheadKeys:g,parentRef:b,id:y,type:O,hasClearButton:v,ariaLabelledBy:x,ariaLabelToggle:w}=e,C=Pc(e,["className","children","isExpanded","isFocused","isActive","isHovered","isPlain","isDisabled","variant","onToggle","onEnter","onClose","handleTypeaheadKeys","parentRef","id","type","hasClearButton","ariaLabelledBy","ariaLabelToggle"]),j=u===dc.typeahead||u===dc.typeaheadMulti||v,P={id:y,"aria-labelledby":x,"aria-expanded":r,"aria-haspopup":u!==dc.checkbox?"listbox":null};return l(s,null,!j&&l("button",jc({},C,P,{ref:this.toggle,type:O,className:h(lc.selectToggle,o&&lc.modifiers.focus,a&&lc.modifiers.hover,p&&lc.modifiers.disabled,i&&lc.modifiers.active,c&&lc.modifiers.plain,t),onClick:e=>{f(!r),r&&m()},onKeyDown:this.onKeyDown,disabled:p}),n,l(yi,{className:h(lc.selectToggleArrow)})),j&&l("div",jc({},C,{ref:this.toggle,className:h(lc.selectToggle,o&&lc.modifiers.focus,a&&lc.modifiers.hover,i&&lc.modifiers.active,p&&lc.modifiers.disabled,c&&lc.modifiers.plain,j&&lc.modifiers.typeahead,t),onClick:e=>{p||f(!0)},onKeyDown:this.onKeyDown}),n,l("button",jc({},P,{type:O,className:h(_e.button,lc.selectToggleButton,lc.modifiers.plain),"aria-label":w,onClick:e=>{e.stopPropagation(),f(!r),r&&m()},disabled:p}),l(yi,{className:h(lc.selectToggleArrow)}))))}}Sc(Nc,"propTypes",{id:n.string.isRequired,children:n.node.isRequired,className:n.string,isExpanded:n.bool,onToggle:n.func,onEnter:n.func,onClose:n.func,handleTypeaheadKeys:n.func,parentRef:n.any.isRequired,isFocused:n.bool,isHovered:n.bool,isActive:n.bool,isPlain:n.bool,isDisabled:n.bool,type:n.oneOfType([n.oneOf(["reset"]),n.oneOf(["button"]),n.oneOf(["submit"])]),ariaLabelledBy:n.string,ariaLabelToggle:n.string,variant:n.oneOf(["single","checkbox","typeahead","typeaheadmulti"]),hasClearButton:n.bool}),Sc(Nc,"defaultProps",{className:"",isExpanded:!1,isFocused:!1,isHovered:!1,isActive:!1,isPlain:!1,isDisabled:!1,hasClearButton:!1,variant:"single",ariaLabelledBy:"",ariaLabelToggle:"",type:"button",onToggle:()=>{},onEnter:()=>{},onClose:()=>{}});var Tc=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={divider:"pf-c-divider",modifiers:{vertical:"pf-m-vertical",insetNone:"pf-m-inset-none",insetSm:"pf-m-inset-sm",insetMd:"pf-m-inset-md",insetLg:"pf-m-inset-lg",insetXl:"pf-m-inset-xl",inset_2xl:"pf-m-inset-2xl",inset_3xl:"pf-m-inset-3xl",insetNoneOnSm:"pf-m-inset-none-on-sm",insetSmOnSm:"pf-m-inset-sm-on-sm",insetMdOnSm:"pf-m-inset-md-on-sm",insetLgOnSm:"pf-m-inset-lg-on-sm",insetXlOnSm:"pf-m-inset-xl-on-sm",inset_2xlOnSm:"pf-m-inset-2xl-on-sm",inset_3xlOnSm:"pf-m-inset-3xl-on-sm",insetNoneOnMd:"pf-m-inset-none-on-md",insetSmOnMd:"pf-m-inset-sm-on-md",insetMdOnMd:"pf-m-inset-md-on-md",insetLgOnMd:"pf-m-inset-lg-on-md",insetXlOnMd:"pf-m-inset-xl-on-md",inset_2xlOnMd:"pf-m-inset-2xl-on-md",inset_3xlOnMd:"pf-m-inset-3xl-on-md",insetNoneOnLg:"pf-m-inset-none-on-lg",insetSmOnLg:"pf-m-inset-sm-on-lg",insetMdOnLg:"pf-m-inset-md-on-lg",insetLgOnLg:"pf-m-inset-lg-on-lg",insetXlOnLg:"pf-m-inset-xl-on-lg",inset_2xlOnLg:"pf-m-inset-2xl-on-lg",inset_3xlOnLg:"pf-m-inset-3xl-on-lg",insetNoneOnXl:"pf-m-inset-none-on-xl",insetSmOnXl:"pf-m-inset-sm-on-xl",insetMdOnXl:"pf-m-inset-md-on-xl",insetLgOnXl:"pf-m-inset-lg-on-xl",insetXlOnXl:"pf-m-inset-xl-on-xl",inset_2xlOnXl:"pf-m-inset-2xl-on-xl",inset_3xlOnXl:"pf-m-inset-3xl-on-xl",insetNoneOn_2xl:"pf-m-inset-none-on-2xl",insetSmOn_2xl:"pf-m-inset-sm-on-2xl",insetMdOn_2xl:"pf-m-inset-md-on-2xl",insetLgOn_2xl:"pf-m-inset-lg-on-2xl",insetXlOn_2xl:"pf-m-inset-xl-on-2xl",inset_2xlOn_2xl:"pf-m-inset-2xl-on-2xl",inset_3xlOn_2xl:"pf-m-inset-3xl-on-2xl"}}})));function _c(){return(_c=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Ic;!function(e){e.hr="hr",e.li="li",e.div="div"}(Ic||(Ic={}));const Lc=e=>{let{className:t="",component:n=Ic.hr}=e,r=kc(e,["className","component"]);return l(n,_c({className:h(Tc.divider,t)},"hr"!==n&&{role:"separator"},r))};function Ec(){return(Ec=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Rc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Lc.propTypes={className:n.string,component:n.oneOf(["hr","li","div"])};let Dc=0;class Bc extends o{constructor(...e){super(...e),Rc(this,"parentRef",i()),Rc(this,"filterRef",i()),Rc(this,"refCollection",[]),Rc(this,"state",{openedOnEnter:!1,typeaheadInputValue:null,typeaheadActiveChild:null,typeaheadFilteredChildren:c.toArray(this.props.children),typeaheadCurrIndex:-1,creatableValue:""}),Rc(this,"componentDidUpdate",(e,t)=>{this.props.hasInlineFilter&&(this.refCollection[0]=this.filterRef.current),!t.openedOnEnter&&this.state.openedOnEnter&&this.refCollection[0].focus(),e.children!==this.props.children&&this.setState({typeaheadFilteredChildren:c.toArray(this.props.children)}),e.selections!==this.props.selections&&this.props.variant===dc.typeahead&&this.setState({typeaheadInputValue:this.props.selections})}),Rc(this,"onEnter",()=>{this.setState({openedOnEnter:!0})}),Rc(this,"onClose",()=>{this.setState({openedOnEnter:!1,typeaheadInputValue:null,typeaheadActiveChild:null,typeaheadFilteredChildren:c.toArray(this.props.children),typeaheadCurrIndex:-1})}),Rc(this,"onChange",e=>{const{onFilter:t,isCreatable:n,onCreateOption:r,createText:o,noResultsFoundText:i,children:a}=this.props;let s;if(t)s=t(e)||a;else{let t;try{t=new RegExp(e.target.value.toString(),"i")}catch(n){t=new RegExp(e.target.value.toString().replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"i")}s=""!==e.target.value.toString()?c.toArray(this.props.children).filter(e=>0===this.getDisplay(e.props.value.toString(),"text").search(t)):c.toArray(this.props.children)}if(s||(s=[]),0===s.length&&!n&&s.push(l(Oc,{isDisabled:!0,key:0,value:i,isNoResultsOption:!0})),n&&""!==e.target.value){const t=e.target.value;s.push(l(Oc,{key:0,value:t,onClick:()=>r&&r(t)},o,' "',t,'"'))}this.setState({typeaheadInputValue:e.target.value,typeaheadCurrIndex:-1,typeaheadFilteredChildren:s,typeaheadActiveChild:null,creatableValue:e.target.value}),this.refCollection=[]}),Rc(this,"onClick",e=>{e.stopPropagation()}),Rc(this,"clearSelection",e=>{e.stopPropagation(),this.setState({typeaheadInputValue:null,typeaheadActiveChild:null,typeaheadFilteredChildren:c.toArray(this.props.children),typeaheadCurrIndex:-1})}),Rc(this,"sendRef",(e,t)=>{this.refCollection[t]=e}),Rc(this,"handleArrowKeys",(e,t)=>{te(e,0,t,this.refCollection,this.refCollection)}),Rc(this,"handleFocus",()=>{this.props.isExpanded||this.props.onToggle(!0)}),Rc(this,"handleTypeaheadKeys",e=>{const{isExpanded:t,isCreatable:n,createText:r}=this.props,{typeaheadActiveChild:o,typeaheadCurrIndex:i}=this.state;if(t)if("enter"===e&&(o||this.refCollection[0]))this.setState({typeaheadInputValue:o&&o.innerText||this.refCollection[0].innerText}),o?o.click():this.refCollection[0].click();else{let t;t=-1===i&&"down"===e?0:-1===i&&"up"===e?this.refCollection.length-1:ne(i,e,this.refCollection),this.setState({typeaheadCurrIndex:t,typeaheadActiveChild:this.refCollection[t],typeaheadInputValue:n&&this.refCollection[t].innerText.includes(r)?this.state.creatableValue:this.refCollection[t].innerText})}}),Rc(this,"getDisplay",(e,t="node")=>{if(!e)return;const{children:n,isGrouped:r}=this.props;let o=n.filter(t=>void 0!==t.props.value&&t.props.value.toString()===e.toString())[0];return r&&(o=n.reduce((e,t)=>[...e,...c.toArray(t.props.children)],[]).filter(t=>t.props.value.toString()===e.toString())[0]),o?o&&o.props.children?"node"===t?o.props.children:this.findText(o):o.props.value.toString():e}),Rc(this,"findText",e=>{if(!e.props||!e.props.children)return"string"!=typeof e?"":e;if("string"==typeof e.props.children)return e.props.children;const t=[];return c.toArray(e.props.children).forEach(e=>t.push(this.findText(e))),t.join("")})}extendTypeaheadChildren(e){return this.state.typeaheadFilteredChildren.map(t=>p(t,{isFocused:e&&(e.innerText===this.getDisplay(t.props.value.toString(),"text")||this.props.isCreatable&&e.innerText===`{createText} "${t.props.value}"`)}))}render(){const e=this.props,{children:t,className:n,customContent:r,variant:o,direction:i,onToggle:a,onSelect:u,onClear:f,onFilter:d,onCreateOption:m,toggleId:g,isExpanded:b,isGrouped:y,isPlain:O,isDisabled:v,isCreatable:x,selections:w,isCheckboxSelectionBadgeHidden:C,ariaLabelledBy:j,ariaLabelTypeAhead:P,ariaLabelClear:S,ariaLabelToggle:N,ariaLabelRemove:T,"aria-label":_,placeholderText:k,width:I,maxHeight:L,toggleIcon:E,ouiaContext:M,ouiaId:R,createText:D,noResultsFoundText:B,hasInlineFilter:F}=e,A=Mc(e,["children","className","customContent","variant","direction","onToggle","onSelect","onClear","onFilter","onCreateOption","toggleId","isExpanded","isGrouped","isPlain","isDisabled","isCreatable","selections","isCheckboxSelectionBadgeHidden","ariaLabelledBy","ariaLabelTypeAhead","ariaLabelClear","ariaLabelToggle","ariaLabelRemove","aria-label","placeholderText","width","maxHeight","toggleIcon","ouiaContext","ouiaId","createText","noResultsFoundText","hasInlineFilter"]),{openedOnEnter:H,typeaheadInputValue:z,typeaheadActiveChild:q,typeaheadFilteredChildren:X}=this.state,V=g||"pf-toggle-id-"+Dc++;let G=null;if(!r&&!w&&!k){const e=c.toArray(t.filter(e=>!0===e.props.isPlaceholder));G=e[0]&&this.getDisplay(e[0].props.value,"node")||t[0]&&this.getDisplay(t[0].props.value,"node")}const W=f!==Bc.defaultProps.onClear,K=w&&(Array.isArray(w)?w.length>0:""!==w),U=l("button",{className:h(_e.button,_e.modifiers.plain,lc.selectToggleClear),onClick:e=>{this.clearSelection(e),f(e)},"aria-label":S,type:"button",disabled:v},l(fa,{"aria-hidden":!0}));let $=null;o===dc.typeaheadMulti&&($=l(xa,null,w&&w.map(e=>{const n=c.toArray(t.filter(t=>t.props.value===e))[0].props.isDisabled;return l(ba,Ec({key:e,onClick:t=>u(t,e),closeBtnAriaLabel:T},n&&{isReadOnly:!0}),this.getDisplay(e,"node"))})));let Y=t;if(F){const e=l(s,null,l("div",{key:"inline-filter",className:h(lc.selectMenuInput)},l("input",{key:"inline-filter-input",type:"search",className:h(ln.formControl,ln.modifiers.search),onChange:this.onChange,onKeyDown:e=>{e.key===gc.ArrowUp?this.handleArrowKeys(0,"up"):e.key===gc.ArrowDown&&this.handleArrowKeys(0,"down")},ref:this.filterRef,autoComplete:"off"})),l(Lc,{key:"inline-filter-divider"}));this.refCollection[0]=this.filterRef.current,Y=[e,...X].map((e,t)=>p(e,{key:t}))}return l("div",Ec({className:h(lc.select,b&&lc.modifiers.expanded,i===mc.up&&lc.modifiers.top,n),ref:this.parentRef,style:{width:I}},M.isOuia&&{"data-ouia-component-type":"Select","data-ouia-component-id":R||M.ouiaId}),l(pc.Provider,{value:{onSelect:u,onClose:this.onClose,variant:o}},l(Nc,{id:V,parentRef:this.parentRef,isExpanded:b,isPlain:O,onToggle:a,onEnter:this.onEnter,onClose:this.onClose,ariaLabelledBy:`${j||""} ${V}`,variant:o,ariaLabelToggle:N,handleTypeaheadKeys:this.handleTypeaheadKeys,isDisabled:v,hasClearButton:W},r&&l("div",{className:h(lc.selectToggleWrapper)},E&&l("span",{className:h(lc.selectToggleIcon)},E),l("span",{className:h(lc.selectToggleText)},k)),o===dc.single&&!r&&l("div",{className:h(lc.selectToggleWrapper)},E&&l("span",{className:h(lc.selectToggleIcon)},E),l("span",{className:h(lc.selectToggleText)},this.getDisplay(w,"node")||k||G),W&&K&&U),o===dc.checkbox&&!r&&l(s,null,l("div",{className:h(lc.selectToggleWrapper)},E&&l("span",{className:h(lc.selectToggleIcon)},E),l("span",{className:h(lc.selectToggleText)},k),!C&&w&&Array.isArray(w)&&w.length>0&&l("div",{className:h(lc.selectToggleBadge)},l("span",{className:h(gl.badge,gl.modifiers.read)},w.length))),W&&K&&U),o===dc.typeahead&&!r&&l(s,null,l("div",{className:h(lc.selectToggleWrapper)},E&&l("span",{className:h(lc.selectToggleIcon)},E),l("input",{className:h(ln.formControl,lc.selectToggleTypeahead),"aria-activedescendant":q&&q.id,id:V+"-select-typeahead","aria-label":P,placeholder:k,value:null!==z?z:this.getDisplay(w,"text")||"",type:"text",onClick:this.onClick,onChange:this.onChange,onFocus:this.handleFocus,autoComplete:"off",disabled:v})),(w||z)&&U),o===dc.typeaheadMulti&&!r&&l(s,null,l("div",{className:h(lc.selectToggleWrapper)},E&&l("span",{className:h(lc.selectToggleIcon)},E),w&&Array.isArray(w)&&w.length>0&&$,l("input",{className:h(ln.formControl,lc.selectToggleTypeahead),"aria-activedescendant":q&&q.id,id:V+"-select-multi-typeahead-typeahead","aria-label":P,placeholder:k,value:null!==z?z:"",type:"text",onChange:this.onChange,onClick:this.onClick,onFocus:this.handleFocus,autoComplete:"off",disabled:v})),(w&&Array.isArray(w)&&w.length>0||z)&&U)),r&&b&&l(Cc,Ec({},A,{selected:w,openedOnEnter:H,"aria-label":_,"aria-labelledby":j,sendRef:this.sendRef,keyHandler:this.handleArrowKeys,maxHeight:L,isCustomContent:!0}),r),o===dc.single&&b&&!r&&l(Cc,Ec({},A,{isGrouped:y,selected:w,openedOnEnter:H,"aria-label":_,"aria-labelledby":j,sendRef:this.sendRef,keyHandler:this.handleArrowKeys,maxHeight:L}),t),o===dc.checkbox&&b&&!r&&l(Cc,Ec({},A,{checked:w||[],"aria-label":_,"aria-labelledby":j,isGrouped:y,sendRef:this.sendRef,keyHandler:this.handleArrowKeys,maxHeight:L,hasInlineFilter:F}),Y),(o===dc.typeahead||o===dc.typeaheadMulti)&&b&&!r&&l(Cc,Ec({},A,{selected:w,openedOnEnter:H,"aria-label":_,"aria-labelledby":j,sendRef:this.sendRef,keyHandler:this.handleArrowKeys,maxHeight:L}),this.extendTypeaheadChildren(q))))}}Rc(Bc,"propTypes",{children:n.arrayOf(n.element),className:n.string,direction:n.oneOf(["up","down"]),isExpanded:n.bool,isGrouped:n.bool,isPlain:n.bool,isDisabled:n.bool,isCreatable:n.bool,createText:n.string,placeholderText:n.oneOfType([n.string,n.node]),noResultsFoundText:n.string,selections:n.oneOfType([n.string,n.any,n.arrayOf(n.oneOfType([n.string,n.any]))]),isCheckboxSelectionBadgeHidden:n.bool,toggleId:n.string,"aria-label":n.string,ariaLabelledBy:n.string,ariaLabelTypeAhead:n.string,ariaLabelClear:n.string,ariaLabelToggle:n.string,ariaLabelRemove:n.string,onSelect:n.func,onToggle:n.func.isRequired,onClear:n.func,onFilter:n.func,onCreateOption:n.func}),Rc(Bc,"defaultProps",{children:[],className:"",direction:mc.down,toggleId:null,isExpanded:!1,isGrouped:!1,isPlain:!1,isDisabled:!1,isCreatable:!1,"aria-label":"",ariaLabelledBy:"",ariaLabelTypeAhead:"",ariaLabelClear:"Clear all",ariaLabelToggle:"Options menu",ariaLabelRemove:"Remove",selections:"",createText:"Create",placeholderText:"",noResultsFoundText:"No results found",variant:dc.single,width:"",onClear:()=>{},onCreateOption:()=>{},toggleIcon:null,onFilter:null,customContent:null,hasInlineFilter:!1});const Fc=Ee(Bc);function Ac(){return(Ac=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const zc=e=>{let{children:t=[],className:n="",label:r="",titleId:o=""}=e,i=Hc(e,["children","className","label","titleId"]);return l("div",Ac({},i,{className:h(lc.selectMenuGroup,n)}),l("div",{className:h(lc.selectMenuGroupTitle),id:o,"aria-hidden":!0},r),t)};function qc(){return(qc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}zc.propTypes={children:n.node,className:n.string,label:n.string,titleId:n.string};const Vc=e=>{let{children:t=[],className:n="",label:r="",titleId:o=""}=e,i=Xc(e,["children","className","label","titleId"]);return l("div",qc({},i,{className:h(lc.selectMenuGroup,n)}),l("div",{className:h(lc.selectMenuGroupTitle),id:o,"aria-hidden":!0},r),t)};function Gc(){return(Gc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Kc(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Vc.propTypes={children:n.node,className:n.string,label:n.string,titleId:n.string};class Uc extends o{constructor(...e){super(...e),Kc(this,"ref",i()),Kc(this,"onKeyDown",e=>{e.key!==gc.Tab&&(e.preventDefault(),e.key===gc.ArrowUp?this.props.keyHandler(this.props.index,"up"):e.key===gc.ArrowDown?this.props.keyHandler(this.props.index,"down"):e.key===gc.Enter&&(this.ref.current.click(),this.ref.current.focus()))})}componentDidMount(){this.props.sendRef(this.ref.current,this.props.index)}componentDidUpdate(){this.props.sendRef(this.ref.current,this.props.index)}render(){const e=this.props,{children:t,className:n,value:r,onClick:o,isDisabled:i,isChecked:a,sendRef:s,keyHandler:c,index:p}=e,u=Wc(e,["children","className","value","onClick","isDisabled","isChecked","sendRef","keyHandler","index"]);return l(fc,null,({onSelect:e})=>l("label",Gc({},u,{className:h(ta.check,lc.selectMenuItem,i&&lc.modifiers.disabled,n),onKeyDown:this.onKeyDown}),l("input",{id:r,className:h(ta.checkInput),type:"checkbox",onChange:t=>{i||(o(t),e&&e(t,r))},ref:this.ref,checked:a||!1,disabled:i}),l("span",{className:h(ta.checkLabel,i&&lc.modifiers.disabled)},t||r)))}}function $c(){return($c=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Kc(Uc,"propTypes",{children:n.node,className:n.string,index:n.number,value:n.string,isDisabled:n.bool,isChecked:n.bool,sendRef:n.func,keyHandler:n.func,onClick:n.func}),Kc(Uc,"defaultProps",{className:"",value:"",index:0,isDisabled:!1,isChecked:!1,onClick:()=>{},sendRef:()=>{},keyHandler:()=>{}});const Jc=e=>{let{isExpanded:t=!1,className:n="",id:r="","aria-labelledby":o,children:i}=e,a=Yc(e,["isExpanded","className","id","aria-labelledby","children"]);return l(Gs.Consumer,null,({isSelectable:e,selectedDataListItemId:s,updateSelectedDataListItem:f})=>l("li",$c({id:r,className:h(qs.dataListItem,t&&qs.modifiers.expanded,e&&qs.modifiers.selectable,s&&s===r&&qs.modifiers.selected,n),"aria-labelledby":o},e&&{tabIndex:0,onClick:e=>{let t=e.target;for(;e.currentTarget!==t;){if("onclick"in t&&t.onclick||t.parentNode.classList.contains(qs.dataListItemAction)||t.parentNode.classList.contains(qs.dataListItemControl))return;t=t.parentNode}f(r)},onKeyDown:e=>{e.key===gc.Enter&&f(r)}},e&&s===r&&{"aria-selected":!0},a),c.map(i,e=>u(e)&&p(e,{rowid:o}))))};function Zc(){return(Zc=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Jc.propTypes={isExpanded:n.bool,children:n.node.isRequired,className:n.string,"aria-labelledby":n.string.isRequired,id:n.string};const ep=e=>{let{className:t="",dataListCells:n,rowid:r=""}=e,o=Qc(e,["className","dataListCells","rowid"]);return l("div",Zc({className:h(qs.dataListItemContent,t)},o),n)};function tp(){return(tp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ep.propTypes={className:n.string,dataListCells:n.node,rowid:n.string};const rp=e=>{let{children:t,className:n="",rowid:r=""}=e,o=np(e,["children","className","rowid"]);return l("div",tp({className:h(qs.dataListItemRow,n)},o),c.map(t,e=>u(e)&&p(e,{rowid:r})))};function op(){return(op=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}rp.propTypes={children:n.node.isRequired,className:n.string,rowid:n.string};const lp=e=>{let{className:t="",isExpanded:n=!1,"aria-controls":r="","aria-label":o="Details","aria-labelledby":i="",rowid:a="",id:s}=e,c=ip(e,["className","isExpanded","aria-controls","aria-label","aria-labelledby","rowid","id"]);return l("div",op({className:h(qs.dataListItemControl,t)},c),l("div",{className:h(qs.dataListToggle)},l(Xe,{id:s,variant:He.plain,"aria-controls":""!==r&&r,"aria-label":o,"aria-labelledby":"Details"!==o?null:`${a} ${s}`,"aria-expanded":n},l(vt,null))))};function ap(){return(ap=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}lp.propTypes={className:n.string,isExpanded:n.bool,id:n.string.isRequired,rowid:n.string,"aria-labelledby":n.string,"aria-label":n.string,"aria-controls":n.string};const cp=e=>{let{className:t="",children:n=null,id:r="",isHidden:o=!1,"aria-label":i,noPadding:a=!1,rowid:s=""}=e,c=sp(e,["className","children","id","isHidden","aria-label","noPadding","rowid"]);return l("section",ap({id:r,className:h(qs.dataListExpandableContent,t),hidden:o,"aria-label":i},c),l("div",{className:h(qs.dataListExpandableContentBody,a&&qs.modifiers.noPadding)},n))};cp.propTypes={children:n.node,className:n.string,id:n.string,rowid:n.string,isHidden:n.bool,noPadding:n.bool,"aria-label":n.string.isRequired};var pp=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={emptyState:"pf-c-empty-state",button:"pf-c-button",emptyStatePrimary:"pf-c-empty-state__primary",emptyStateSecondary:"pf-c-empty-state__secondary",emptyStateBody:"pf-c-empty-state__body",emptyStateIcon:"pf-c-empty-state__icon",title:"pf-c-title",modifiers:{primary:"pf-m-primary",sm:"pf-m-sm",lg:"pf-m-lg",xl:"pf-m-xl",redhatFont:"pf-m-redhat-font"}}})));function up(){return(up=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let dp;!function(e){e.xl="xl",e.large="large",e.small="small",e.full="full"}(dp||(dp={}));const mp={xl:"xl",large:"lg",small:"sm",full:""},gp=e=>{let{children:t,className:n="",variant:r=dp.large}=e,o=fp(e,["children","className","variant"]);const i=mp[r];return l("div",up({className:h(pp.emptyState,g(pp,i,null),n)},o),t)};function hp(){return(hp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}gp.propTypes={className:n.string,children:n.node.isRequired,variant:n.oneOf(["small","large","full","xl"])};const yp=e=>{let{children:t,className:n=""}=e,r=bp(e,["children","className"]);return l("div",hp({className:h(pp.emptyStateBody,n)},r),t)};function Op(){return(Op=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let xp;yp.propTypes={children:n.node,className:n.string},function(e){e.sm="sm",e.md="md",e.lg="lg",e.xl="xl"}(xp||(xp={}));const wp=e=>{let{className:t="",icon:n=null,component:r=null,variant:o="icon"}=e,i=vp(e,["className","icon","component","variant"]);const a=h(pp.emptyStateIcon,t);return"icon"===o?l(n,Op({className:a},i,{"aria-hidden":"true"})):l("div",{className:a},l(r,null))};function Cp(){return(Cp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}wp.propTypes={color:n.string,size:n.oneOf(["sm","md","lg","xl"]),title:n.string,className:n.string,icon:n.oneOfType([n.string,n.any]),component:n.any,variant:n.oneOf(["icon","container"])};const Pp=e=>{let{children:t=null,className:n=""}=e,r=jp(e,["children","className"]);return l("div",Cp({className:h(pp.emptyStateSecondary,n)},r),t)};function Sp(){return(Sp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Pp.propTypes={children:n.node,className:n.string};const Tp=e=>{let{children:t,className:n=""}=e,r=Np(e,["children","className"]);return l("div",Sp({className:h(pp.emptyStatePrimary,n)},r),t)};Tp.propTypes={className:n.string,children:n.node.isRequired};var _p=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={expandable:"pf-c-expandable",expandableToggleIcon:"pf-c-expandable__toggle-icon",expandableToggle:"pf-c-expandable__toggle",expandableContent:"pf-c-expandable__content",modifiers:{expanded:"pf-m-expanded",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",redhatFont:"pf-m-redhat-font"}}})));function kp(){return(kp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Lp(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Ep extends o{constructor(e){super(e),this.state={isExpanded:e.isExpanded}}calculateToggleText(e,t,n,r){return r&&""!==t?t:r||""===n?e:n}render(){const e=this.props,{onToggle:t,isFocused:n,isHovered:r,isActive:o,className:i,toggleText:a,toggleTextExpanded:s,toggleTextCollapsed:c,children:p,isExpanded:u}=e,f=Ip(e,["onToggle","isFocused","isHovered","isActive","className","toggleText","toggleTextExpanded","toggleTextCollapsed","children","isExpanded"]);let d=t,m=u;void 0===u&&(m=this.state.isExpanded,d=()=>{t(),this.setState(e=>({isExpanded:!e.isExpanded}))});const g=this.calculateToggleText(a,s,c,m);return l("div",kp({},f,{className:h(_p.expandable,m&&_p.modifiers.expanded,i)}),l("button",{className:h(_p.expandableToggle,n&&_p.modifiers.focus,r&&_p.modifiers.hover,o&&_p.modifiers.active),type:"button","aria-expanded":m,onClick:d},l(vt,{className:h(_p.expandableToggleIcon),"aria-hidden":!0}),l("span",null,g)),l("div",{className:h(_p.expandableContent),hidden:!m},p))}}Lp(Ep,"propTypes",{children:n.node.isRequired,className:n.string,isExpanded:n.bool,toggleText:n.string,toggleTextExpanded:n.string,toggleTextCollapsed:n.string,onToggle:n.func,isFocused:n.bool,isHovered:n.bool,isActive:n.bool}),Lp(Ep,"defaultProps",{className:"",toggleText:"",toggleTextExpanded:"",toggleTextCollapsed:"",onToggle:()=>{},isFocused:!1,isActive:!1,isHovered:!1});var Mp=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={fileUpload:"pf-c-file-upload",fileUploadFileDetails:"pf-c-file-upload__file-details",fileUploadFileSelect:"pf-c-file-upload__file-select",button:"pf-c-button",formControl:"pf-c-form-control",fileUploadFileDetailsSpinner:"pf-c-file-upload__file-details-spinner",modifiers:{dragHover:"pf-m-drag-hover",loading:"pf-m-loading",control:"pf-m-control",disabled:"pf-m-disabled"}}}))),Rp=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={spinner:"pf-c-spinner",spinnerClipper:"pf-c-spinner__clipper",spinnerLeadBall:"pf-c-spinner__lead-ball",spinnerTailBall:"pf-c-spinner__tail-ball",modifiers:{sm:"pf-m-sm",md:"pf-m-md",lg:"pf-m-lg",xl:"pf-m-xl"}}})));function Dp(){return(Dp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Fp;!function(e){e.sm="sm",e.md="md",e.lg="lg",e.xl="xl"}(Fp||(Fp={}));const Ap=e=>{let{className:t="",size:n="xl","aria-valuetext":r="Loading..."}=e,o=Bp(e,["className","size","aria-valuetext"]);return l("span",Dp({className:h(Rp.spinner,g(Rp,n)),role:"progressbar","aria-valuetext":r},o),l("span",{className:h(Rp.spinnerClipper)}),l("span",{className:h(Rp.spinnerLeadBall)}),l("span",{className:h(Rp.spinnerTailBall)}))};let Hp;function zp(){return(zp=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ap.propTypes={className:n.string,size:n.oneOf(["sm","md","lg","xl"]),"aria-valuetext":n.string},function(e){e.text="text",e.dataURL="dataURL"}(Hp||(Hp={}));const Xp=e=>{let{id:t,type:n,value:r="",filename:o="",onChange:i=(()=>{}),onBrowseButtonClick:a=(()=>{}),onClearButtonClick:s=(()=>{}),className:c="",isDisabled:p=!1,isReadOnly:u=!1,isLoading:f=!1,spinnerAriaValueText:d,isRequired:m=!1,isDragActive:g=!1,validated:b="default","aria-label":y="File upload",filenamePlaceholder:O="Drag a file here or browse to upload",filenameAriaLabel:v=(o?"Read only filename":O),browseButtonText:x="Browse...",clearButtonText:w="Clear",isClearButtonDisabled:C=!o&&!r,containerRef:j=null,allowEditingUploadedText:P=!1,hideDefaultPreview:S=!1,children:N=null}=e,T=qp(e,["id","type","value","filename","onChange","onBrowseButtonClick","onClearButtonClick","className","isDisabled","isReadOnly","isLoading","spinnerAriaValueText","isRequired","isDragActive","validated","aria-label","filenamePlaceholder","filenameAriaLabel","browseButtonText","clearButtonText","isClearButtonDisabled","containerRef","allowEditingUploadedText","hideDefaultPreview","children"]);return l("div",zp({className:h(Mp.fileUpload,g&&Mp.modifiers.dragHover,f&&Mp.modifiers.loading,c),ref:j},T),l("div",{className:Mp.fileUploadFileSelect},l(Ts,null,l(Ea,{isReadOnly:!0,isDisabled:p,id:t+"-filename",name:t+"-filename","aria-label":v,placeholder:O,"aria-describedby":t+"-browse-button",value:o}),l(Xe,{id:t+"-browse-button",variant:He.control,onClick:a,isDisabled:p},x),l(Xe,{variant:He.control,isDisabled:p||C,onClick:s},w))),l("div",{className:Mp.fileUploadFileDetails},!S&&n===Hp.text&&l(Ps,{readOnly:u||!!o&&!P,disabled:p,isRequired:m,resizeOrientation:js.vertical,validated:b,id:t,name:t,"aria-label":y,value:r,onChange:(e,t)=>{i(e,o,t)}}),f&&l("div",{className:Mp.fileUploadFileDetailsSpinner},l(Ap,{size:Fp.lg,"aria-valuetext":d}))),N)}; -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 - -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. - -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -function Vp(e,t,n,r){return new(n||(n=Promise))((function(o,i){function l(e){try{s(r.next(e))}catch(e){i(e)}}function a(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){e.done?o(e.value):new n((function(t){t(e.value)})).then(l,a)}s((r=r.apply(e,t||[])).next())}))}function Gp(e,t){var n,r,o,i,l={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;l;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return l.label++,{value:i[1],done:!1};case 5:l.label++,r=i[1],i=[0];continue;case 7:i=l.ops.pop(),l.trys.pop();continue;default:if(!(o=l.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){l=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0)&&!(r=i.next()).done;)l.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return l}Xp.propTypes={id:n.string.isRequired,type:n.oneOf(["text","dataURL"]),value:n.oneOfType([n.string,n.any]),filename:n.string,onChange:n.func,className:n.string,isDisabled:n.bool,isReadOnly:n.bool,isLoading:n.bool,spinnerAriaValueText:n.string,isRequired:n.bool,validated:n.oneOf(["success","error","default"]),"aria-label":n.string,filenamePlaceholder:n.string,filenameAriaLabel:n.string,browseButtonText:n.string,clearButtonText:n.string,isClearButtonDisabled:n.bool,hideDefaultPreview:n.bool,allowEditingUploadedText:n.bool,children:n.node,onBrowseButtonClick:n.func,onClearButtonClick:n.func,isDragActive:n.bool,containerRef:n.oneOfType([n.string,n.func,n.object])};var Kp=new Map([["avi","video/avi"],["gif","image/gif"],["ico","image/x-icon"],["jpeg","image/jpeg"],["jpg","image/jpeg"],["mkv","video/x-matroska"],["mov","video/quicktime"],["mp4","video/mp4"],["pdf","application/pdf"],["png","image/png"],["zip","application/zip"],["doc","application/msword"],["docx","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]]);function Up(e,t){var n=function(e){var t=e.name;if(t&&-1!==t.lastIndexOf(".")&&!e.type){var n=t.split(".").pop().toLowerCase(),r=Kp.get(n);r&&Object.defineProperty(e,"type",{value:r,writable:!1,configurable:!1,enumerable:!0})}return e}(e);if("string"!=typeof n.path){var r=e.webkitRelativePath;Object.defineProperty(n,"path",{value:"string"==typeof t?t:"string"==typeof r&&r.length>0?r:e.name,writable:!1,configurable:!1,enumerable:!0})}return n}var $p=[".DS_Store","Thumbs.db"];function Yp(e){return!!e.dataTransfer}function Jp(e){return(function(e){return null!==e}(e.target)&&e.target.files?eu(e.target.files):[]).map((function(e){return Up(e)}))}function Zp(e,t){return Vp(this,void 0,void 0,(function(){var n;return Gp(this,(function(r){switch(r.label){case 0:return e.items?(n=eu(e.items).filter((function(e){return"file"===e.kind})),"drop"!==t?[2,n]:[4,Promise.all(n.map(tu))]):[3,2];case 1:return[2,Qp(nu(r.sent()))];case 2:return[2,Qp(eu(e.files).map((function(e){return Up(e)})))]}}))}))}function Qp(e){return e.filter((function(e){return-1===$p.indexOf(e.name)}))}function eu(e){for(var t=[],n=0;n0?o(r(e),9007199254740991):0}},function(e,t,n){t.__esModule=!0,t.default=function(e,t){if(e&&t){var n=Array.isArray(t)?t:t.split(","),r=e.name||"",o=e.type||"",i=o.replace(/\/.*$/,"");return n.some((function(e){var t=e.trim();return"."===t.charAt(0)?r.toLowerCase().endsWith(t.toLowerCase()):t.endsWith("/*")?i===t.replace(/\/.*$/,""):o===t}))}return!0},n(14),n(34)},function(e,t,n){n(15),e.exports=n(2).Array.some},function(e,t,n){var r=n(7),o=n(25)(3);r(r.P+r.F*!n(33)([].some,!0),"Array",{some:function(e){return o(this,e,arguments[1])}})},function(e,t,n){var r=n(17),o=n(18),i=n(20),l=Object.defineProperty;t.f=n(3)?Object.defineProperty:function(e,t,n){if(r(e),t=i(t,!0),r(n),o)try{return l(e,t,n)}catch(e){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(e[t]=n.value),e}},function(e,t,n){var r=n(1);e.exports=function(e){if(!r(e))throw TypeError(e+" is not an object!");return e}},function(e,t,n){e.exports=!n(3)&&!n(4)((function(){return 7!=Object.defineProperty(n(19)("div"),"a",{get:function(){return 7}}).a}))},function(e,t,n){var r=n(1),o=n(0).document,i=r(o)&&r(o.createElement);e.exports=function(e){return i?o.createElement(e):{}}},function(e,t,n){var r=n(1);e.exports=function(e,t){if(!r(e))return e;var n,o;if(t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;if("function"==typeof(n=e.valueOf)&&!r(o=n.call(e)))return o;if(!t&&"function"==typeof(n=e.toString)&&!r(o=n.call(e)))return o;throw TypeError("Can't convert object to primitive value")}},function(e,t){e.exports=function(e,t){return{enumerable:!(1&e),configurable:!(2&e),writable:!(4&e),value:t}}},function(e,t,n){var r=n(0),o=n(8),i=n(23),l=n(9)("src"),a=Function.toString,s=(""+a).split("toString");n(2).inspectSource=function(e){return a.call(e)},(e.exports=function(e,t,n,a){var c="function"==typeof n;c&&(i(n,"name")||o(n,"name",t)),e[t]!==n&&(c&&(i(n,l)||o(n,l,e[t]?""+e[t]:s.join(String(t)))),e===r?e[t]=n:a?e[t]?e[t]=n:o(e,t,n):(delete e[t],o(e,t,n)))})(Function.prototype,"toString",(function(){return"function"==typeof this&&this[l]||a.call(this)}))},function(e,t){var n={}.hasOwnProperty;e.exports=function(e,t){return n.call(e,t)}},function(e,t){e.exports=function(e){if("function"!=typeof e)throw TypeError(e+" is not a function!");return e}},function(e,t,n){var r=n(10),o=n(26),i=n(27),l=n(12),a=n(29);e.exports=function(e,t){var n=1==e,s=2==e,c=3==e,p=4==e,u=6==e,f=5==e||u,d=t||a;return function(t,a,m){for(var g,h,b=i(t),y=o(b),O=r(a,m,3),v=l(y.length),x=0,w=n?d(t,v):s?d(t,0):void 0;v>x;x++)if((f||x in y)&&(h=O(g=y[x],x,b),e))if(n)w[x]=h;else if(h)switch(e){case 3:return!0;case 5:return g;case 6:return x;case 2:w.push(g)}else if(p)return!1;return u?-1:c||p?p:w}}},function(e,t,n){var r=n(5);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(e){return"String"==r(e)?e.split(""):Object(e)}},function(e,t,n){var r=n(11);e.exports=function(e){return Object(r(e))}},function(e,t){var n=Math.ceil,r=Math.floor;e.exports=function(e){return isNaN(e=+e)?0:(e>0?r:n)(e)}},function(e,t,n){var r=n(30);e.exports=function(e,t){return new(r(e))(t)}},function(e,t,n){var r=n(1),o=n(31),i=n(6)("species");e.exports=function(e){var t;return o(e)&&("function"!=typeof(t=e.constructor)||t!==Array&&!o(t.prototype)||(t=void 0),r(t)&&null===(t=t[i])&&(t=void 0)),void 0===t?Array:t}},function(e,t,n){var r=n(5);e.exports=Array.isArray||function(e){return"Array"==r(e)}},function(e,t,n){var r=n(0),o=r["__core-js_shared__"]||(r["__core-js_shared__"]={});e.exports=function(e){return o[e]||(o[e]={})}},function(e,t,n){var r=n(4);e.exports=function(e,t){return!!e&&r((function(){t?e.call(null,(function(){}),1):e.call(null)}))}},function(e,t,n){n(35),e.exports=n(2).String.endsWith},function(e,t,n){var r=n(7),o=n(12),i=n(36),l="".endsWith;r(r.P+r.F*n(38)("endsWith"),"String",{endsWith:function(e){var t=i(this,e,"endsWith"),n=arguments.length>1?arguments[1]:void 0,r=o(t.length),a=void 0===n?r:Math.min(o(n),r),s=String(e);return l?l.call(t,s,a):t.slice(a-s.length,a)===s}})},function(e,t,n){var r=n(37),o=n(11);e.exports=function(e,t,n){if(r(t))throw TypeError("String#"+n+" doesn't accept regex!");return String(o(e))}},function(e,t,n){var r=n(1),o=n(5),i=n(6)("match");e.exports=function(e){var t;return r(e)&&(void 0!==(t=e[i])?!!t:"RegExp"==o(e))}},function(e,t,n){var r=n(6)("match");e.exports=function(e){var t=/./;try{"/./"[e](t)}catch(n){try{return t[r]=!1,!"/./"[e](t)}catch(e){}}return!0}}])}))),su="undefined"==typeof document||!document||!document.createElement||"multiple"in document.createElement("input");function cu(e,t){return"application/x-moz-file"===e.type||au(e,t)}function pu(e,t,n){return e.size<=t&&e.size>=n}function uu(e){return"function"==typeof e.isPropagationStopped?e.isPropagationStopped():void 0!==e.cancelBubble&&e.cancelBubble}function fu(e){return void 0!==e.defaultPrevented?e.defaultPrevented:"function"==typeof e.isDefaultPrevented&&e.isDefaultPrevented()}function du(e){return!e.dataTransfer||Array.prototype.some.call(e.dataTransfer.types,(function(e){return"Files"===e||"application/x-moz-file"===e}))}function mu(e){e.preventDefault()}function gu(e){return-1!==e.indexOf("MSIE")||-1!==e.indexOf("Trident/")}function hu(e){return-1!==e.indexOf("Edge/")}function bu(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:window.navigator.userAgent;return gu(e)||hu(e)}function yu(){for(var e=arguments.length,t=Array(e),n=0;n1?n-1:0),o=1;o=0||Object.prototype.hasOwnProperty.call(e,r)&&(n[r]=e[r]);return n}function Cu(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t0||(r.setState({isDragActive:!1,draggedFiles:[]}),r.props.onDragLeave&&du(e)&&r.props.onDragLeave.call(r,e))},r.onDrop=function(e){var t=r.props,n=t.onDrop,o=t.onDropAccepted,i=t.onDropRejected,l=t.multiple,a=t.accept,s=t.getDataTransferItems;e.preventDefault(),e.persist(),r.dragTargets=[],r.isFileDialogActive=!1,r.draggedFiles=null,r.setState({isDragActive:!1,draggedFiles:[]}),du(e)&&Promise.resolve(s(e)).then((function(t){var s=[],c=[];uu(e)||(t.forEach((function(e){cu(e,a)&&pu(e,r.props.maxSize,r.props.minSize)?s.push(e):c.push(e)})),!l&&s.length>1&&c.push.apply(c,Cu(s.splice(0))),r.setState({acceptedFiles:s,rejectedFiles:c},(function(){n&&n.call(r,s,c,e),c.length>0&&i&&i.call(r,c,e),s.length>0&&o&&o.call(r,s,e)})))}))},r.onClick=function(e){var t=r.props.onClick;t&&t.call(r,e),fu(e)||(e.stopPropagation(),bu()?setTimeout(r.open,0):r.open())},r.onInputElementClick=function(e){e.stopPropagation()},r.onFileDialogCancel=function(){var e=r.props.onFileDialogCancel;r.isFileDialogActive&&setTimeout((function(){null!=r.input&&(r.input.files.length||(r.isFileDialogActive=!1,"function"==typeof e&&e()))}),300)},r.onFocus=function(e){var t=r.props.onFocus;t&&t.call(r,e),fu(e)||r.setState({isFocused:!0})},r.onBlur=function(e){var t=r.props.onBlur;t&&t.call(r,e),fu(e)||r.setState({isFocused:!1})},r.onKeyDown=function(e){var t=r.props.onKeyDown;r.node.isEqualNode(e.target)&&(t&&t.call(r,e),fu(e)||32!==e.keyCode&&13!==e.keyCode||(e.preventDefault(),r.open()))},r.composeHandler=function(e){return r.props.disabled?null:e},r.getRootProps=function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.refKey,o=void 0===n?"ref":n,i=t.onKeyDown,l=t.onFocus,a=t.onBlur,s=t.onClick,c=t.onDragStart,p=t.onDragEnter,u=t.onDragOver,f=t.onDragLeave,d=t.onDrop,m=wu(t,["refKey","onKeyDown","onFocus","onBlur","onClick","onDragStart","onDragEnter","onDragOver","onDragLeave","onDrop"]);return Ou((xu(e={onKeyDown:r.composeHandler(i?yu(i,r.onKeyDown):r.onKeyDown),onFocus:r.composeHandler(l?yu(l,r.onFocus):r.onFocus),onBlur:r.composeHandler(a?yu(a,r.onBlur):r.onBlur),onClick:r.composeHandler(s?yu(s,r.onClick):r.onClick),onDragStart:r.composeHandler(c?yu(c,r.onDragStart):r.onDragStart),onDragEnter:r.composeHandler(p?yu(p,r.onDragEnter):r.onDragEnter),onDragOver:r.composeHandler(u?yu(u,r.onDragOver):r.onDragOver),onDragLeave:r.composeHandler(f?yu(f,r.onDragLeave):r.onDragLeave),onDrop:r.composeHandler(d?yu(d,r.onDrop):r.onDrop)},o,r.setNodeRef),xu(e,"tabIndex",r.props.disabled?-1:0),e),m)},r.getInputProps=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.refKey,n=void 0===t?"ref":t,o=e.onChange,i=e.onClick,l=wu(e,["refKey","onChange","onClick"]),a=r.props,s=a.accept,c=a.multiple,p=a.name,u=xu({accept:s,type:"file",style:{display:"none"},multiple:su&&c,onChange:yu(o,r.onDrop),onClick:yu(i,r.onInputElementClick),autoComplete:"off",tabIndex:-1},n,r.setInputRef);return p&&p.length&&(u.name=p),Ou({},u,l)},r.setNodeRef=function(e){r.node=e},r.setInputRef=function(e){r.input=e},r.open=function(){r.isFileDialogActive=!0,r.input&&(r.input.value=null,r.input.click())},Pu(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,r.Component),vu(t,[{key:"componentDidMount",value:function(){var e=this.props.preventDropOnDocument;this.dragTargets=[],e&&(document.addEventListener("dragover",mu,!1),document.addEventListener("drop",this.onDocumentDrop,!1)),window.addEventListener("focus",this.onFileDialogCancel,!1)}},{key:"componentWillUnmount",value:function(){this.props.preventDropOnDocument&&(document.removeEventListener("dragover",mu),document.removeEventListener("drop",this.onDocumentDrop)),window.removeEventListener("focus",this.onFileDialogCancel,!1)}},{key:"render",value:function(){var e,t,n=this.props,r=n.children,o=n.multiple,i=n.disabled,l=this.state,a=l.isDragActive,s=l.isFocused,c=l.draggedFiles,p=l.acceptedFiles,u=l.rejectedFiles,f=c.length,d=o||f<=1,m=f>0&&(e=c,t=this.props.accept,e.every((function(e){return cu(e,t)})));return r({isDragActive:a,isDragAccept:m,isDragReject:f>0&&(!m||!d),draggedFiles:c,acceptedFiles:p,rejectedFiles:u,isFocused:s&&!i,getRootProps:this.getRootProps,getInputProps:this.getInputProps,open:this.open})}}]),t}();function Nu(){return(Nu=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Su.propTypes={accept:n.oneOfType([n.string,n.arrayOf(n.string)]),children:n.func,disabled:n.bool,preventDropOnDocument:n.bool,multiple:n.bool,name:n.string,maxSize:n.number,minSize:n.number,getDataTransferItems:n.func,onClick:n.func,onFocus:n.func,onBlur:n.func,onKeyDown:n.func,onDrop:n.func,onDropAccepted:n.func,onDropRejected:n.func,onDragStart:n.func,onDragEnter:n.func,onDragOver:n.func,onDragLeave:n.func,onFileDialogCancel:n.func},Su.defaultProps={preventDropOnDocument:!0,disabled:!1,multiple:!0,maxSize:1/0,minSize:0,getDataTransferItems:function(e){return Vp(this,void 0,void 0,(function(){return Gp(this,(function(t){return[2,Yp(e)&&e.dataTransfer?Zp(e.dataTransfer,e.type):Jp(e)]}))}))}};const Iu=e=>{let{id:t,type:n,value:r=(n===Hp.text||n===Hp.dataURL?"":null),filename:o="",children:i=null,onChange:a=(()=>{}),onReadStarted:s=(()=>{}),onReadFinished:c=(()=>{}),onReadFailed:p=(()=>{}),dropzoneProps:u={}}=e,f=ku(e,["id","type","value","filename","children","onChange","onReadStarted","onReadFinished","onReadFailed","dropzoneProps"]);const d=e=>{a("","",e)};return l(Su,Nu({multiple:!1},u,{onDropAccepted:(e,t)=>{if(e.length>0){const r=e[0];n===Hp.text||n===Hp.dataURL?(a("",r.name,t),s(r),function(e,t){return new Promise((n,r)=>{const o=new FileReader;o.onload=()=>n(o.result),o.onerror=()=>r(o.error),t===Hp.text?o.readAsText(e):t===Hp.dataURL?o.readAsDataURL(e):r("unknown type")})}(r,n).then(e=>{c(r),a(e,r.name,t)}).catch(e=>{p(e,r),c(r),a("","",t)})):a(r,r.name,t)}u.onDropAccepted&&u.onDropAccepted(e,t)},onDropRejected:(e,t)=>{e.length>0&&a("",e[0].name,t),u.onDropRejected&&u.onDropRejected(e,t)}}),({getRootProps:e,getInputProps:s,isDragActive:c,open:p})=>l(Xp,Nu({},e(function(e){for(var t=1;te.preventDefault()})),{tabIndex:null,id:t,type:n,filename:o,value:r,onChange:a,isDragActive:c,onBrowseButtonClick:p,onClearButtonClick:d}),l("input",s()),i))};Iu.propTypes={id:n.string.isRequired,type:n.oneOf(["text","dataURL"]),value:n.oneOfType([n.string,n.any]),filename:n.string,onChange:n.func,className:n.string,isDisabled:n.bool,isReadOnly:n.bool,isLoading:n.bool,spinnerAriaValueText:n.string,isRequired:n.bool,validated:n.oneOf(["success","error","default"]),"aria-label":n.string,filenamePlaceholder:n.string,filenameAriaLabel:n.string,browseButtonText:n.string,clearButtonText:n.string,hideDefaultPreview:n.bool,allowEditingUploadedText:n.bool,children:n.node,onReadStarted:n.func,onReadFinished:n.func,onReadFailed:n.func,dropzoneProps:n.any};const Lu=a({isHorizontal:!1});function Eu(){return(Eu=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ru=e=>{let{children:t=null,className:n=""}=e,r=Mu(e,["children","className"]);const o=h(ac.formGroup,ac.modifiers.action,n),i=h(ac.formHorizontalGroup),a=l("div",{className:h(ac.formActions)},t);return l(Lu.Consumer,null,({isHorizontal:e})=>l("div",Eu({},r,{className:o}),e?l("div",{className:i},a):a))};function Du(){return(Du=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Ru.propTypes={children:n.node,className:n.string};const Fu=e=>{let{children:t=null,className:n="",isHorizontal:r=!1}=e,o=Bu(e,["children","className","isHorizontal"]);return l("form",Du({noValidate:!0},o,{className:h(ac.form,r&&ac.modifiers.horizontal,n)}),l(Lu.Provider,{value:{isHorizontal:r}},t))};function Au(){return(Au=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Fu.propTypes={children:n.node,className:n.string,isHorizontal:n.bool};const zu=e=>{let{children:t=null,className:n="",label:r,isRequired:o=!1,isValid:i=!0,validated:a="default",isInline:s=!1,helperText:c,helperTextInvalid:p,fieldId:u}=e,f=Hu(e,["children","className","label","isRequired","isValid","validated","isInline","helperText","helperTextInvalid","fieldId"]);const d=l("div",{className:h(ac.formHelperText,a===C.success&&ac.modifiers.success),id:u+"-helper","aria-live":"polite"},c),m=l("div",{className:h(ac.formHelperText,ac.modifiers.error),id:u+"-helper","aria-live":"polite"},p);return l(Lu.Consumer,null,({isHorizontal:e})=>l("div",Au({},f,{className:h(ac.formGroup,s?g(ac,"inline",n):n)}),r&&l("label",{className:h(ac.formLabel),htmlFor:u},l("span",{className:h(ac.formLabelText)},r),o&&l("span",{className:h(ac.formLabelRequired),"aria-hidden":"true"},"*")),e?l("div",{className:h(ac.formHorizontalGroup)},t):t,i&&a!==C.error||!p?a!==C.error&&c?d:"":m))};function qu(){return(qu=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}zu.propTypes={children:n.node,className:n.string,label:n.node,isRequired:n.bool,isValid:n.bool,validated:n.oneOf(["success","error","default"]),isInline:n.bool,helperText:n.node,helperTextInvalid:n.node,fieldId:n.string.isRequired};const Vu=e=>{let{children:t=null,isError:n=!1,isHidden:r=!0,className:o=""}=e,i=Xu(e,["children","isError","isHidden","className"]);return l("p",qu({className:h(ac.formHelperText,n?g(ac,"error"):"",r?g(ac,"hidden"):"",o)},i),t)};Vu.propTypes={children:n.node,isError:n.bool,isHidden:n.bool,className:n.string};var Gu=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={label:"pf-c-label",modifiers:{compact:"pf-m-compact"}}})));function Wu(){return(Wu=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Uu=e=>{let{children:t,className:n="",isCompact:r=!1}=e,o=Ku(e,["children","className","isCompact"]);return l("span",Wu({},o,{className:h(Gu.label,n,r&&Gu.modifiers.compact)}),t)};Uu.propTypes={children:n.node.isRequired,className:n.string,isCompact:n.bool};var $u=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={list:"pf-c-list",modifiers:{inline:"pf-m-inline"}}})));function Yu(){return(Yu=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Zu,Qu,ef;!function(e){e.number="1",e.lowercaseLetter="a",e.uppercaseLetter="A",e.lowercaseRomanNumber="i",e.uppercaseRomanNumber="I"}(Zu||(Zu={})),function(e){e.inline="inline"}(Qu||(Qu={})),function(e){e.ol="ol",e.ul="ul"}(ef||(ef={}));const tf=e=>{let{className:t="",children:n=null,variant:r=null,type:o=Zu.number,ref:i=null,component:a=ef.ul}=e,s=Ju(e,["className","children","variant","type","ref","component"]);return a===ef.ol?l("ol",Yu({ref:i,type:o},s,{className:h($u.list,r&&g($u.modifiers,r),t)}),n):l("ul",Yu({ref:i},s,{className:h($u.list,r&&g($u.modifiers,r),t)}),n)};function nf(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}tf.propTypes={children:n.node,className:n.string,variant:n.any,type:n.any,component:n.oneOf(["ol","ul"])};const rf=e=>{let{children:t=null}=e,n=nf(e,["children"]);return l("li",n,t)};rf.propTypes={children:n.node.isRequired};var of=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={loginHeader:"pf-c-login__header",loginFooter:"pf-c-login__footer",card:"pf-c-card",button:"pf-c-button",login:"pf-c-login",loginContainer:"pf-c-login__container",brand:"pf-c-brand",loginMain:"pf-c-login__main",loginMainHeader:"pf-c-login__main-header",loginMainFooter:"pf-c-login__main-footer",dropdown:"pf-c-dropdown",loginMainHeaderDesc:"pf-c-login__main-header-desc",loginMainBody:"pf-c-login__main-body",formHelperText:"pf-c-form__helper-text",formHelperTextIcon:"pf-c-form__helper-text-icon",title:"pf-c-title",loginMainFooterLinks:"pf-c-login__main-footer-links",loginMainFooterLinksItem:"pf-c-login__main-footer-links-item",loginMainFooterLinksItemLink:"pf-c-login__main-footer-links-item-link",loginMainFooterBand:"pf-c-login__main-footer-band",list:"pf-c-list",modifiers:{}}})));function lf(){return(lf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const sf=e=>{let{className:t="",children:n=null,footer:r=null,header:o=null}=e,i=af(e,["className","children","footer","header"]);return l("div",lf({},i,{className:h(of.login,t)}),l("div",{className:h(of.loginContainer)},o,l("main",{className:h(of.loginMain)},n),r))};function cf(){return(cf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}sf.propTypes={children:n.node,className:n.string,footer:n.node,header:n.node};const uf=e=>{let{className:t="",children:n=null,headerBrand:r=null}=e,o=pf(e,["className","children","headerBrand"]);return l("header",cf({className:h(of.loginHeader,t)},o),r,n)};function ff(){return(ff=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}uf.propTypes={children:n.node,className:n.string,headerBrand:n.node};const mf=e=>{let{className:t="",children:n=null}=e,r=df(e,["className","children"]);return l("footer",ff({className:h(of.loginFooter,t)},r),n)};function gf(){return(gf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}mf.propTypes={children:n.node,className:n.string};const bf=e=>{let{children:t=null,className:n="",title:r="",subtitle:o=""}=e,i=hf(e,["children","className","title","subtitle"]);return l("header",gf({className:h(of.loginMainHeader,n)},i),r&&l(he,{headingLevel:ge.h2,size:"3xl"},r),o&&l("p",{className:h(of.loginMainHeaderDesc)},o),t)};function yf(){return(yf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}bf.propTypes={children:n.node,className:n.string,title:n.string,subtitle:n.string};const vf=e=>{let{children:t=null,className:n=""}=e,r=Of(e,["children","className"]);return l("div",yf({className:h(of.loginMainBody,n)},r),t)};function xf(){return(xf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}vf.propTypes={children:n.node,className:n.string};const Cf=e=>{let{children:t=null,socialMediaLoginContent:n=null,signUpForAccountMessage:r=null,forgotCredentials:o=null,className:i=""}=e,a=wf(e,["children","socialMediaLoginContent","signUpForAccountMessage","forgotCredentials","className"]);return l("div",xf({className:h(of.loginMainFooter,i)},a),t,n&&l("ul",{className:h(of.loginMainFooterLinks)},n),(r||o)&&l("div",{className:h(of.loginMainFooterBand)},r,o))};function jf(){return(jf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Cf.propTypes={className:n.string,children:n.node,socialMediaLoginContent:n.node,signUpForAccountMessage:n.node,forgotCredentials:n.node};const Sf=e=>{let{children:t=null,className:n="",brandImgSrc:r="",brandImgAlt:o="",backgroundImgSrc:i="",backgroundImgAlt:a="",footerListItems:c=null,textContent:p="",footerListVariants:u,loginTitle:f,loginSubtitle:d,signUpForAccountMessage:m=null,forgotCredentials:g=null,socialMediaLoginContent:b=null}=e,y=Pf(e,["children","className","brandImgSrc","brandImgAlt","backgroundImgSrc","backgroundImgAlt","footerListItems","textContent","footerListVariants","loginTitle","loginSubtitle","signUpForAccountMessage","forgotCredentials","socialMediaLoginContent"]);const O=l(s,null,l(xl,{src:r,alt:o})),v=l(uf,{headerBrand:O}),x=l(mf,null,l("p",null,p),l(tf,{variant:u},c));return l(s,null,i&&l(ml,{src:i,alt:a}),l(sf,jf({header:v,footer:x,className:h(n)},y),l(bf,{title:f,subtitle:d}),l(vf,null,t),(b||g||m)&&l(Cf,{socialMediaLoginContent:b,forgotCredentials:g,signUpForAccountMessage:m})))};function Nf(){return(Nf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Sf.propTypes={children:n.node,className:n.string,brandImgSrc:n.string,brandImgAlt:n.string,backgroundImgSrc:n.oneOfType([n.string,n.any]),backgroundImgAlt:n.string,textContent:n.string,footerListItems:n.node,footerListVariants:n.any,loginTitle:n.string.isRequired,loginSubtitle:n.string,signUpForAccountMessage:n.node,forgotCredentials:n.node,socialMediaLoginContent:n.node};const _f=e=>{let{noAutoFocus:t=!1,className:n="",showHelperText:r=!1,helperText:o=null,usernameLabel:i="Username",usernameValue:a="",onChangeUsername:s=(()=>{}),isValidUsername:c=!0,passwordLabel:p="Password",passwordValue:u="",onChangePassword:f=(()=>{}),isValidPassword:d=!0,loginButtonLabel:m="Log In",isLoginButtonDisabled:g=!1,onLoginButtonClick:h=(()=>{}),rememberMeLabel:b="",isRememberMeChecked:y=!1,onChangeRememberMe:O=(()=>{}),rememberMeAriaLabel:v=""}=e,x=Tf(e,["noAutoFocus","className","showHelperText","helperText","usernameLabel","usernameValue","onChangeUsername","isValidUsername","passwordLabel","passwordValue","onChangePassword","isValidPassword","loginButtonLabel","isLoginButtonDisabled","onLoginButtonClick","rememberMeLabel","isRememberMeChecked","onChangeRememberMe","rememberMeAriaLabel"]);return l(Fu,Nf({className:n},x),l(Vu,{isError:!c||!d,isHidden:!r},o),l(zu,{label:i,isRequired:!0,isValid:c,fieldId:"pf-login-username-id"},l(Ea,{autoFocus:!t,id:"pf-login-username-id",isRequired:!0,isValid:c,type:"text",name:"pf-login-username-id",value:a,onChange:s})),l(zu,{label:p,isRequired:!0,isValid:d,fieldId:"pf-login-password-id"},l(Ea,{isRequired:!0,type:"password",id:"pf-login-password-id",name:"pf-login-password-id",isValid:d,value:u,onChange:f})),b.length>0&&l(zu,{fieldId:"pf-login-remember-me-id"},l(la,{id:"pf-login-remember-me-id",label:b,isChecked:y,onChange:O})),l(Ru,null,l(Xe,{variant:"primary",type:"submit",onClick:h,isBlock:!0,isDisabled:g},m)))};function kf(){return(kf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}_f.propTypes={noAutoFocus:n.bool,className:n.string,showHelperText:n.bool,helperText:n.node,usernameLabel:n.string,usernameValue:n.string,onChangeUsername:n.func,isValidUsername:n.bool,passwordLabel:n.string,passwordValue:n.string,onChangePassword:n.func,isValidPassword:n.bool,loginButtonLabel:n.string,isLoginButtonDisabled:n.bool,onLoginButtonClick:n.func,rememberMeLabel:n.string,isRememberMeChecked:n.bool,onChangeRememberMe:n.func,rememberMeAriaLabel:n.string};const Lf=e=>{let{className:t="",children:n=null,href:r="#",target:o="_blank"}=e,i=If(e,["className","children","href","target"]);return u(n)?p(n):l("a",kf({target:o,href:r},i),n)};function Ef(){return(Ef=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Lf.propTypes={children:n.node,className:n.string,href:n.string,target:n.string};const Rf=e=>{let{children:t=null,className:n=""}=e,r=Mf(e,["children","className"]);return l("p",Ef({className:h(of.loginMainFooterBand+"-item",n)},r),t)};function Df(){return(Df=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Rf.propTypes={children:n.node,className:n.string};const Ff=e=>{let{children:t=null,href:n="",target:r="",className:o="",linkComponent:i="a",linkComponentProps:a}=e,s=Bf(e,["children","href","target","className","linkComponent","linkComponentProps"]);const c=i;return l("li",Df({className:h(of.loginMainFooterLinksItem,o)},s),l(c,Df({className:h(of.loginMainFooterLinksItemLink),href:n,target:r},a),t))};Ff.propTypes={children:n.node,href:n.string,target:n.string,className:n.string,linkComponent:n.node,linkComponentProps:n.any};var Af=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={modalBox:"pf-c-modal-box",button:"pf-c-button",title:"pf-c-title",modalBoxDescription:"pf-c-modal-box__description",modalBoxBody:"pf-c-modal-box__body",modalBoxFooter:"pf-c-modal-box__footer",modifiers:{sm:"pf-m-sm",lg:"pf-m-lg",alignLeft:"pf-m-align-left"}}})));function Hf(){return(Hf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const qf=e=>{let{children:t=null,className:n=""}=e,r=zf(e,["children","className"]);return l("div",Hf({},r,{className:h(Af.modalBoxBody,n)}),t)};function Xf(){return(Xf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}qf.propTypes={children:n.node,className:n.string};const Gf=e=>{let{children:t=null,className:n="",hideTitle:r=!1,headingLevel:o=ge.h1}=e,i=Vf(e,["children","className","hideTitle","headingLevel"]);return r?null:l(s,null,l(he,Xf({size:"2xl",headingLevel:o,className:n},i),t))};function Wf(){return(Wf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Gf.propTypes={children:n.node,className:n.string,hideTitle:n.bool,headingLevel:n.oneOf(["h1","h2","h3","h4","h5","h6"])};const Uf=e=>{let{className:t="",onClose:n=(()=>{})}=e,r=Kf(e,["className","onClose"]);return l(Xe,Wf({className:t,variant:"plain",onClick:n,"aria-label":"Close"},r),l(Ke,null))};function $f(){return($f=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Uf.propTypes={className:n.string,onClose:n.func};const Jf=e=>{let{children:t,className:n="",isLarge:r=!1,isSmall:o=!1,title:i,id:a}=e,s=Yf(e,["children","className","isLarge","isSmall","title","id"]);return l("div",$f({},s,{role:"dialog","aria-label":i,"aria-describedby":a,"aria-modal":"true",className:h(Af.modalBox,n,r&&Af.modifiers.lg,o&&Af.modifiers.sm)}),t)};function Zf(){return(Zf=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Jf.propTypes={children:n.node.isRequired,className:n.string,isLarge:n.bool,isSmall:n.bool,title:n.string.isRequired,id:n.string.isRequired};const ed=e=>{let{children:t=null,className:n="",isLeftAligned:r=!1}=e,o=Qf(e,["children","className","isLeftAligned"]);return l("div",Zf({},o,{className:h(Af.modalBoxFooter,r&&Af.modifiers.alignLeft,n)}),t)};function td(){return(td=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ed.propTypes={children:n.node,className:n.string,isLeftAligned:n.bool};const rd=e=>{let{children:t=null,className:n="",id:r=""}=e,o=nd(e,["children","className","id"]);return l("div",td({},o,{id:r,className:h(Af.modalBoxDescription,n)}),t)};function od(){return(od=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}rd.propTypes={children:n.node,className:n.string,id:n.string};const ld=e=>{let{children:t,className:n="",isOpen:r=!1,header:o=null,description:i=null,title:a,hideTitle:s=!1,showClose:c=!0,footer:p=null,actions:u=[],isFooterLeftAligned:f=!1,onClose:d=(()=>{}),isLarge:m=!1,isSmall:g=!1,width:b=-1,ariaDescribedById:y="",id:O="",disableFocusTrap:v=!1}=e,x=id(e,["children","className","isOpen","header","description","title","hideTitle","showClose","footer","actions","isFooterLeftAligned","onClose","isLarge","isSmall","width","ariaDescribedById","id","disableFocusTrap"]);if(!r)return null;const w=o?l("div",{className:h(fe.title)},o):l(Gf,{hideTitle:s}," ",a," "),C=p?l(ed,{isLeftAligned:f},p):u.length>0&&l(ed,{isLeftAligned:f},u),j=l(Jf,{style:-1===b?{}:{width:b},className:n,isLarge:m,isSmall:g,title:a,id:y||O},c&&l(Uf,{onClose:d}),w,i&&l(rd,{id:O},i),l(qf,od({},x,!i&&{id:O}),t),C);return l(nt,null,l(V,{active:!v,focusTrapOptions:{clickOutsideDeactivates:!0},className:h(le.bullseye)},j))};function ad(){return(ad=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function cd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}ld.propTypes={children:n.node.isRequired,className:n.string,isLarge:n.bool,isSmall:n.bool,isOpen:n.bool,header:n.node,description:n.node,title:n.string.isRequired,hideTitle:n.bool,showClose:n.bool,width:n.oneOfType([n.number,n.string]),footer:n.node,actions:n.any,isFooterLeftAligned:n.bool,onClose:n.func,ariaDescribedById:n.string,id:n.string.isRequired,disableFocusTrap:n.bool};class pd extends o{constructor(e){super(e),cd(this,"id",""),cd(this,"handleEscKeyClick",e=>{e.keyCode===v.ESCAPE_KEY&&this.props.isOpen&&this.props.onClose()}),cd(this,"getElement",e=>{let t;return t="function"==typeof e?e():e,t}),cd(this,"toggleSiblingsFromScreenReaders",e=>{const{appendTo:t}=this.props,n=this.getElement(t).children;for(const t of Array.from(n))t!==this.state.container&&(e?t.setAttribute("aria-hidden",""+e):t.removeAttribute("aria-hidden"))});const t=pd.currentId++;this.id="pf-modal-"+t,this.state={container:void 0}}componentDidMount(){const{appendTo:e}=this.props,t=this.getElement(e),n=document.createElement("div");this.setState({container:n}),t.appendChild(n),t.addEventListener("keydown",this.handleEscKeyClick,!1),this.props.isOpen?t.classList.add(h(O.backdropOpen)):t.classList.remove(h(O.backdropOpen))}componentDidUpdate(){const{appendTo:e}=this.props,t=this.getElement(e);this.props.isOpen?(t.classList.add(h(O.backdropOpen)),this.toggleSiblingsFromScreenReaders(!0)):(t.classList.remove(h(O.backdropOpen)),this.toggleSiblingsFromScreenReaders(!1))}componentWillUnmount(){const{appendTo:e}=this.props,t=this.getElement(e);this.state.container&&t.removeChild(this.state.container),t.removeEventListener("keydown",this.handleEscKeyClick,!1),t.classList.remove(h(O.backdropOpen))}render(){const e=sd(this.props,["appendTo"]),{container:t}=this.state;return ie&&t?m(l(ld,ad({},e,{title:this.props.title,id:this.id,ariaDescribedById:this.props.ariaDescribedById})),t):null}}cd(pd,"propTypes",{children:n.node.isRequired,className:n.string,isOpen:n.bool,header:n.node,title:n.string.isRequired,hideTitle:n.bool,showClose:n.bool,ariaDescribedById:n.string,footer:n.node,actions:n.any,isFooterLeftAligned:n.bool,onClose:n.func,width:n.oneOfType([n.number,n.string]),isLarge:n.bool,isSmall:n.bool,appendTo:n.oneOfType([n.any,n.func]),disableFocusTrap:n.bool,description:n.node}),cd(pd,"currentId",0),cd(pd,"defaultProps",{className:"",isOpen:!1,hideTitle:!1,showClose:!0,ariaDescribedById:"",actions:[],isFooterLeftAligned:!1,onClose:()=>{},isLarge:!1,isSmall:!1,appendTo:"undefined"!=typeof document&&document.body||null});var ud=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={nav:"pf-c-nav",navScrollButton:"pf-c-nav__scroll-button",divider:"pf-c-divider",navItem:"pf-c-nav__item",navLink:"pf-c-nav__link",navList:"pf-c-nav__list",pageSidebar:"pf-c-page__sidebar",pageHeaderNav:"pf-c-page__header-nav",navSeparator:"pf-c-nav__separator",navSimpleList:"pf-c-nav__simple-list",navToggle:"pf-c-nav__toggle",navHorizontalList:"pf-c-nav__horizontal-list",navTertiaryList:"pf-c-nav__tertiary-list",navSubnav:"pf-c-nav__subnav",navSection:"pf-c-nav__section",navSectionTitle:"pf-c-nav__section-title",modifiers:{start:"pf-m-start",end:"pf-m-end",dark:"pf-m-dark",current:"pf-m-current",expanded:"pf-m-expanded",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus"}}})));function fd(){return(fd=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function md(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}const gd=a({});class hd extends o{constructor(...e){super(...e),md(this,"state",{showLeftScrollButton:!1,showRightScrollButton:!1}),md(this,"updateScrollButtonState",e=>{const{showLeftScrollButton:t,showRightScrollButton:n}=e;this.setState({showLeftScrollButton:t,showRightScrollButton:n})})}onSelect(e,t,n,r,o,i){o&&e.preventDefault(),this.props.onSelect({groupId:t,itemId:n,event:e,to:r}),i&&i(e,n,t,r)}onToggle(e,t,n){this.props.onToggle({event:e,groupId:t,isExpanded:n})}render(){const e=this.props,{"aria-label":t,children:n,className:r,onSelect:o,onToggle:i,theme:a,ouiaContext:s,ouiaId:c}=e,p=dd(e,["aria-label","children","className","onSelect","onToggle","theme","ouiaContext","ouiaId"]),{showLeftScrollButton:u,showRightScrollButton:f}=this.state,d=n.props;return l(gd.Provider,{value:{onSelect:(e,t,n,r,o,i)=>this.onSelect(e,t,n,r,o,i),onToggle:(e,t,n)=>this.onToggle(e,t,n),updateScrollButtonState:this.updateScrollButtonState}},l("nav",fd({className:h(ud.nav,"dark"===a&&ud.modifiers.dark,u&&ud.modifiers.start,f&&ud.modifiers.end,r),"aria-label":""===t?void 0!==d&&"tertiary"===d.variant?"Local":"Global":t},s.isOuia&&{"data-ouia-component-type":"Nav","data-ouia-component-id":c||s.ouiaId},p),n))}}md(hd,"propTypes",{children:n.node,className:n.string,onSelect:n.func,onToggle:n.func,"aria-label":n.string,theme:n.oneOf(["dark","light"])}),md(hd,"defaultProps",{"aria-label":"",children:null,className:"",onSelect:()=>{},onToggle:()=>{},theme:"light"});const bd=Ee(hd);let yd;!function(e){e.default="default",e.simple="simple",e.horizontal="horizontal",e.tertiary="tertiary"}(yd||(yd={}));var Od=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.AngleLeftIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"AngleLeftIcon",height:512,width:256,svgPath:"M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z",yOffset:"",xOffset:"",transform:""};t.AngleLeftIconConfig=r;var o=(0,n.default)(r);t.default=o})),vd=e(Od);Od.AngleLeftIconConfig;function xd(){return(xd=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Cd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class jd extends o{constructor(...e){super(...e),Cd(this,"navList",i()),Cd(this,"handleScrollButtons",()=>{if(this.navList.current){const{updateScrollButtonState:e}=this.context,t=this.navList.current;e({showLeftScrollButton:!Z(t,t.firstChild,!1),showRightScrollButton:!Z(t,t.lastChild,!1)})}}),Cd(this,"scrollLeft",()=>{if(this.navList.current){const e=this.navList.current,t=Array.from(e.children);let n,r;for(let o=0;o{if(this.navList.current){const e=this.navList.current,t=Array.from(e.children);let n,r;for(let o=t.length-1;o>=0&&!n;o--)Z(e,t[o],!1)&&(n=t[o],r=t[o+1]);r&&(e.scrollLeft+=r.scrollWidth),this.handleScrollButtons()}})}componentDidMount(){const{variant:e}=this.props;(e===yd.horizontal||e===yd.tertiary)&&(window.addEventListener("resize",this.handleScrollButtons,!1),this.handleScrollButtons())}componentWillUnmount(){const{variant:e}=this.props;(e===yd.horizontal||e===yd.tertiary)&&document.removeEventListener("resize",this.handleScrollButtons,!1)}render(){const e=this.props,{variant:t,children:n,className:r,ariaLeftScroll:o,ariaRightScroll:i}=e,a=wd(e,["variant","children","className","ariaLeftScroll","ariaRightScroll"]),c={[yd.default]:ud.navList,[yd.simple]:ud.navSimpleList,[yd.horizontal]:ud.navHorizontalList,[yd.tertiary]:ud.navTertiaryList},p=t===yd.horizontal||t===yd.tertiary;return l(s,null,p&&l("button",{className:h(ud.navScrollButton),"aria-label":o,onClick:this.scrollLeft},l(vd,null)),l("ul",xd({ref:this.navList,className:h(c[t],r)},a),n),p&&l("button",{className:h(ud.navScrollButton),"aria-label":i,onClick:this.scrollRight},l(vt,null)))}}function Pd(){return(Pd=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Cd(jd,"propTypes",{children:n.node,className:n.string,variant:n.oneOf(["default","simple","horizontal","tertiary"]),ariaLeftScroll:n.string,ariaRightScroll:n.string}),Cd(jd,"contextType",gd),Cd(jd,"defaultProps",{variant:"default",children:null,className:"",ariaLeftScroll:"Scroll left",ariaRightScroll:"Scroll right"});const Nd=e=>{let{title:t,children:n=null,className:r="",id:o=Y()}=e,i=Sd(e,["title","children","className","id"]);return l("section",Pd({className:h(ud.navSection,r),"aria-labelledby":o},i),l("h2",{className:h(ud.navSectionTitle),id:o},t),l("ul",{className:h(ud.navList)},n))};function Td(){return(Td=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Nd.propTypes={title:n.string.isRequired,children:n.node,className:n.string,id:n.string};const kd=e=>{let{children:t=null,className:n="",to:r="",isActive:o=!1,groupId:i=null,itemId:a=null,preventDefault:s=!1,onClick:c=null,component:f="a"}=e,d=_d(e,["children","className","to","isActive","groupId","itemId","preventDefault","onClick","component"]);const m=f;return l("li",{className:h(ud.navItem,n)},u(t)?(g=t,l(gd.Consumer,null,e=>p(g,{onClick:t=>e.onSelect(t,i,a,r,s,c),className:h(ud.navLink,o&&ud.modifiers.current,g.props&&g.props.className),"aria-current":o?"page":null}))):(()=>{const e=s||!r;return l(gd.Consumer,null,s=>l(m,Td({href:r,onClick:t=>s.onSelect(t,i,a,r,e,c),className:h(ud.navLink,o&&ud.modifiers.current,n),"aria-current":o?"page":null},d),t))})());var g};function Id(){return(Id=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}kd.propTypes={children:n.node,className:n.string,to:n.string,isActive:n.bool,groupId:n.oneOfType([n.string,n.number,n.oneOf([null])]),itemId:n.oneOfType([n.string,n.number,n.oneOf([null])]),preventDefault:n.bool,onClick:n.func,component:n.node};const Ed=e=>{let{className:t=""}=e,n=Ld(e,["className"]);return l("li",Id({className:h(ud.navSeparator,t),role:"separator"},n))};function Md(){return(Md=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Dd(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Bd extends o{constructor(...e){super(...e),Dd(this,"id",this.props.id||Y()),Dd(this,"state",{expandedState:this.props.isExpanded}),Dd(this,"onExpand",(e,t)=>{this.props.onExpand?this.props.onExpand(e,t):this.setState({expandedState:t})}),Dd(this,"handleToggle",(e,t)=>{if("pf-nav-expandable"!==e.target.getAttribute("data-component"))return;const{groupId:n}=this.props,{expandedState:r}=this.state;t(e,n,!r),this.onExpand(e,!r)})}componentDidMount(){this.setState({expandedState:this.props.isExpanded})}componentDidUpdate(e){this.props.isExpanded!==e.isExpanded&&this.setState({expandedState:this.props.isExpanded})}render(){const e=this.props,{id:t,title:n,srText:r,children:o,className:i,isActive:a,groupId:s,isExpanded:c,onExpand:p}=e,u=Rd(e,["id","title","srText","children","className","isActive","groupId","isExpanded","onExpand"]),{expandedState:f}=this.state;return l(gd.Consumer,null,e=>l("li",Md({className:h(ud.navItem,f&&ud.modifiers.expanded,a&&ud.modifiers.current,i),onClick:t=>this.handleToggle(t,e.onToggle)},u),l("a",{"data-component":"pf-nav-expandable",className:h(ud.navLink),id:r?null:this.id,href:"#",onClick:e=>e.preventDefault(),onMouseDown:e=>e.preventDefault(),"aria-expanded":f},n,l("span",{className:h(ud.navToggle)},l(vt,{"aria-hidden":"true"}))),l("section",{className:h(ud.navSubnav),"aria-labelledby":this.id,hidden:!f||null},r&&l("h2",{className:h(Pt.screenReader),id:this.id},r),l("ul",{className:h(ud.navSimpleList)},o))))}}Dd(Bd,"propTypes",{title:n.string.isRequired,srText:n.string,isExpanded:n.bool,children:n.node,className:n.string,groupId:n.oneOfType([n.string,n.number]),isActive:n.bool,id:n.string,onExpand:n.func}),Dd(Bd,"defaultProps",{srText:"",isExpanded:!1,children:"",className:"",groupId:null,isActive:!1,id:""});var Fd=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={notificationBadge:"pf-c-notification-badge",modifiers:{unread:"pf-m-unread",read:"pf-m-read"}}})));function Ad(){return(Ad=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const zd=e=>{let{isRead:t=!1,className:n,children:r}=e,o=Hd(e,["isRead","className","children"]);return l(Xe,Ad({variant:He.plain,className:n},o),l("span",{className:h(Fd.notificationBadge,t?Fd.modifiers.read:Fd.modifiers.unread)},r))};zd.propTypes={isRead:n.bool,children:n.node,className:n.string,"aria-label":n.string};var qd=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={optionsMenu:"pf-c-options-menu",divider:"pf-c-divider",optionsMenuToggle:"pf-c-options-menu__toggle",optionsMenuToggleButton:"pf-c-options-menu__toggle-button",optionsMenuToggleText:"pf-c-options-menu__toggle-text",optionsMenuToggleIcon:"pf-c-options-menu__toggle-icon",optionsMenuMenu:"pf-c-options-menu__menu",optionsMenuMenuItem:"pf-c-options-menu__menu-item",optionsMenuMenuItemIcon:"pf-c-options-menu__menu-item-icon",optionsMenuSeparator:"pf-c-options-menu__separator",optionsMenuGroup:"pf-c-options-menu__group",optionsMenuGroupTitle:"pf-c-options-menu__group-title",modifiers:{plain:"pf-m-plain",text:"pf-m-text",hover:"pf-m-hover",active:"pf-m-active",focus:"pf-m-focus",expanded:"pf-m-expanded",disabled:"pf-m-disabled",top:"pf-m-top",alignRight:"pf-m-align-right"}}})));function Xd(){return(Xd=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Gd,Wd;!function(e){e.right="right",e.left="left"}(Gd||(Gd={})),function(e){e.up="up",e.down="down"}(Wd||(Wd={}));const Kd=e=>{let{className:t="",menuItems:n,toggle:r,isText:o=!1,isGrouped:i=!1,id:a,ref:s}=e,c=Vd(e,["className","menuItems","toggle","isText","isGrouped","id","ref"]);return l(fn.Provider,{value:{id:a,onSelect:()=>{},toggleIconClass:qd.optionsMenuToggleIcon,toggleTextClass:qd.optionsMenuToggleText,menuClass:qd.optionsMenuMenu,itemClass:qd.optionsMenuMenuItem,toggleClass:o?qd.optionsMenuToggleButton:qd.optionsMenuToggle,baseClass:qd.optionsMenu,disabledClass:qd.modifiers.disabled,menuComponent:i?"div":"ul",baseComponent:"div"}},l(Cn,Xd({},c,{id:a,dropdownItems:n,className:t,isGrouped:i,toggle:r})))};function Ud(){return(Ud=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Kd.propTypes={className:n.string,id:n.string.isRequired,menuItems:n.arrayOf(n.node).isRequired,toggle:n.element.isRequired,isPlain:n.bool,isOpen:n.bool,isText:n.bool,isGrouped:n.bool,ariaLabelMenu:n.string,position:n.oneOf(["right","left"]),direction:n.oneOf(["up","down"])};const Yd=e=>{let{isPlain:t=!1,isHovered:n=!1,isActive:r=!1,isFocused:o=!1,isDisabled:i=!1,isOpen:a=!1,parentId:c="",toggleTemplate:p=l(s,null),hideCaret:u=!1,isSplitButton:f=!1,type:d,"aria-label":m="Options menu"}=e,g=$d(e,["isPlain","isHovered","isActive","isFocused","isDisabled","isOpen","parentId","toggleTemplate","hideCaret","isSplitButton","type","aria-label"]);return l(fn.Consumer,null,({id:e})=>l(xi,Ud({},(t||u)&&{iconComponent:null},g,{isPlain:t,isOpen:a,isDisabled:i,isHovered:n,isActive:r,isFocused:o,id:c?c+"-toggle":e+"-toggle",ariaHasPopup:"listbox","aria-label":m,"aria-expanded":a},p?{children:p}:{})))};function Jd(){return(Jd=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Yd.propTypes={parentId:n.string,onToggle:n.func,isOpen:n.bool,isPlain:n.bool,isFocused:n.bool,isHovered:n.bool,isSplitButton:n.bool,isActive:n.bool,isDisabled:n.bool,hideCaret:n.bool,"aria-label":n.string,onEnter:n.func,parentRef:n.any,toggleTemplate:n.node};const Qd=e=>{let{className:t="",ariaLabel:n="",groupTitle:r="",children:o=null,hasSeparator:i=!1}=e,a=Zd(e,["className","ariaLabel","groupTitle","children","hasSeparator"]);return l("section",Jd({},a,{className:h(qd.optionsMenuGroup)}),r&&l("h1",{className:h(qd.optionsMenuGroupTitle)},r),l("ul",{className:t,"aria-label":n},o,i&&l("li",{className:h(qd.optionsMenuSeparator),role:"separator"})))};function em(){return(em=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Qd.propTypes={children:n.node,className:n.string,ariaLabel:n.string,groupTitle:n.oneOfType([n.string,n.node]),hasSeparator:n.bool};const nm=e=>{let{children:t=null,isSelected:n=!1,onSelect:r=(()=>null),id:o="",isDisabled:i}=e,a=tm(e,["children","isSelected","onSelect","id","isDisabled"]);return l(ti,em({id:o,component:"button",isDisabled:i,onClick:e=>r(e)},i&&{"aria-disabled":!0},a),t,n&&l(cc,{className:h(qd.optionsMenuMenuItemIcon),"aria-hidden":n}))};function rm(){return(rm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}nm.propTypes={children:n.node,className:n.string,isSelected:n.bool,isDisabled:n.bool,onSelect:n.func,id:n.string};const im=e=>{let{className:t=""}=e,n=om(e,["className"]);return l("li",rm({className:h(qd.optionsMenuSeparator,t),role:"separator"},n))};function lm(){return(lm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}im.propTypes={className:n.string};const sm=e=>{let{parentId:t="",toggleText:n,toggleTextClassName:r="",toggleButtonContents:o,toggleButtonContentsClassName:i="",onToggle:a=(()=>null),isOpen:s=!1,isPlain:c=!1,isHovered:p=!1,isActive:u=!1,isFocused:f=!1,isDisabled:d=!1,ariaHasPopup:m,parentRef:b,onEnter:y,"aria-label":O="Options menu"}=e,v=am(e,["parentId","toggleText","toggleTextClassName","toggleButtonContents","toggleButtonContentsClassName","onToggle","isOpen","isPlain","isHovered","isActive","isFocused","isDisabled","ariaHasPopup","parentRef","onEnter","aria-label"]);return l("div",lm({className:h(qd.optionsMenuToggle,g(qd,"text"),c&&g(qd,"plain"),p&&g(qd,"hover"),u&&g(qd,"active"),f&&g(qd,"focus"),d&&g(qd,"disabled"))},v),l("span",{className:h(qd.optionsMenuToggleText,r)},n),l("button",{className:h(qd.optionsMenuToggleButton,i),id:t+"-toggle","aria-haspopup":"listbox","aria-label":O,"aria-expanded":s,onClick:()=>a(!s)},o))};sm.propTypes={parentId:n.string,toggleText:n.node.isRequired,toggleTextClassName:n.string,toggleButtonContents:n.node,toggleButtonContentsClassName:n.string,onToggle:n.func,onEnter:n.func,isOpen:n.bool,isPlain:n.bool,isFocused:n.bool,isHovered:n.bool,isActive:n.bool,isDisabled:n.bool,parentRef:n.any,ariaHasPopup:n.oneOfType([n.bool,n.oneOf(["dialog"]),n.oneOf(["menu"]),n.oneOf(["false"]),n.oneOf(["true"]),n.oneOf(["listbox"]),n.oneOf(["tree"]),n.oneOf(["grid"])]),"aria-label":n.string};var cm=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={pageHeader:"pf-c-page__header",pageSidebar:"pf-c-page__sidebar",pageMainSection:"pf-c-page__main-section",card:"pf-c-card",button:"pf-c-button",page:"pf-c-page",pageHeaderBrand:"pf-c-page__header-brand",pageHeaderBrandLink:"pf-c-page__header-brand-link",brand:"pf-c-brand",pageHeaderBrandToggle:"pf-c-page__header-brand-toggle",pageHeaderNav:"pf-c-page__header-nav",nav:"pf-c-nav",navScrollButton:"pf-c-nav__scroll-button",pageHeaderTools:"pf-c-page__header-tools",notificationBadge:"pf-c-notification-badge",avatar:"pf-c-avatar",pageHeaderToolsGroup:"pf-c-page__header-tools-group",pageSidebarBody:"pf-c-page__sidebar-body",pageMain:"pf-c-page__main",pageDrawer:"pf-c-page__drawer",pageMainNav:"pf-c-page__main-nav",pageMainBreadcrumb:"pf-c-page__main-breadcrumb",pageMainWizard:"pf-c-page__main-wizard",drawer:"pf-c-drawer",modifiers:{dark:"pf-m-dark",icons:"pf-m-icons",selected:"pf-m-selected",unread:"pf-m-unread",mobile:"pf-m-mobile",user:"pf-m-user",expanded:"pf-m-expanded",collapsed:"pf-m-collapsed",fill:"pf-m-fill",noFill:"pf-m-no-fill",light:"pf-m-light",dark_100:"pf-m-dark-100",dark_200:"pf-m-dark-200",noPadding:"pf-m-no-padding",noPaddingMobile:"pf-m-no-padding-mobile"}}}))),pm={name:"--pf-global--breakpoint--md",value:"768px",var:"var(--pf-global--breakpoint--md)"};function um(){return(um=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function dm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let mm;!function(e){e.vertical="vertical",e.horizontal="horizontal"}(mm||(mm={}));const gm=a({}),hm=gm.Provider,bm=gm.Consumer;class ym extends o{constructor(e){super(e),dm(this,"handleResize",()=>{const{onPageResize:e}=this.props,t=window.innerWidth,n=t({mobileView:n}))}),dm(this,"onNavToggleMobile",()=>{this.setState(e=>({mobileIsNavOpen:!e.mobileIsNavOpen}))}),dm(this,"onNavToggleDesktop",()=>{this.setState(e=>({desktopIsNavOpen:!e.desktopIsNavOpen}))});const{isManagedSidebar:t,defaultManagedSidebarIsOpen:n}=e,r=!t||n;this.state={desktopIsNavOpen:r,mobileIsNavOpen:!1,mobileView:!1}}componentDidMount(){const{isManagedSidebar:e,onPageResize:t}=this.props;(e||t)&&(window.addEventListener("resize",J(this.handleResize,250)),this.handleResize())}componentWillUnmount(){const{isManagedSidebar:e,onPageResize:t}=this.props;(e||t)&&window.removeEventListener("resize",J(this.handleResize,250))}render(){const e=this.props,{breadcrumb:t,className:n,children:r,header:o,sidebar:i,skipToContent:a,role:s,mainContainerId:c,isManagedSidebar:p,defaultManagedSidebarIsOpen:u,onPageResize:f,mainAriaLabel:d}=e,m=fm(e,["breadcrumb","className","children","header","sidebar","skipToContent","role","mainContainerId","isManagedSidebar","defaultManagedSidebarIsOpen","onPageResize","mainAriaLabel"]),{mobileView:g,mobileIsNavOpen:b,desktopIsNavOpen:y}=this.state,O={isManagedSidebar:p,onNavToggle:g?this.onNavToggleMobile:this.onNavToggleDesktop,isNavOpen:g?b:y};return l(hm,{value:O},l("div",um({},m,{className:h(cm.page,n)}),a,o,i,l("main",{role:s,id:c,className:h(cm.pageMain),tabIndex:-1,"aria-label":d},t&&l("section",{className:h(cm.pageMainBreadcrumb)},t),r)))}}dm(ym,"propTypes",{children:n.node,className:n.string,header:n.node,sidebar:n.node,skipToContent:n.element,role:n.string,mainContainerId:n.string,isManagedSidebar:n.bool,defaultManagedSidebarIsOpen:n.bool,onPageResize:n.func,breadcrumb:n.node,mainAriaLabel:n.string}),dm(ym,"defaultProps",{breadcrumb:null,children:null,className:"",header:null,sidebar:null,skipToContent:null,isManagedSidebar:!1,defaultManagedSidebarIsOpen:!0,onPageResize:()=>null,mainContainerId:null,role:void 0});var Om=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.BarsIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"BarsIcon",height:512,width:448,svgPath:"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z",yOffset:"",xOffset:"",transform:""};t.BarsIconConfig=r;var o=(0,n.default)(r);t.default=o})),vm=e(Om);Om.BarsIconConfig;function xm(){return(xm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Cm=e=>{let{className:t="",logo:n=null,logoProps:r=null,logoComponent:o="a",toolbar:i=null,avatar:a=null,topNav:s=null,isNavOpen:c=!0,role:p,showNavToggle:u=!1,onNavToggle:f=(()=>{}),"aria-label":d="Global navigation"}=e,m=wm(e,["className","logo","logoProps","logoComponent","toolbar","avatar","topNav","isNavOpen","role","showNavToggle","onNavToggle","aria-label"]);const g=o;return l(bm,null,({isManagedSidebar:e,onNavToggle:o,isNavOpen:b})=>{const y=e?o:f,O=e?b:c;return l("header",xm({role:p,className:h(cm.pageHeader,t)},m),(u||n)&&l("div",{className:h(cm.pageHeaderBrand)},u&&l("div",{className:h(cm.pageHeaderBrandToggle)},l(Xe,{id:"nav-toggle",onClick:y,"aria-label":d,"aria-controls":"page-sidebar","aria-expanded":O?"true":"false",variant:He.plain},l(vm,null))),n&&l(g,xm({className:h(cm.pageHeaderBrandLink)},r),n)),s&&l("div",{className:h(cm.pageHeaderNav)},s),(i||a)&&l("div",{className:h(cm.pageHeaderTools)},i,a))})};function jm(){return(jm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Cm.propTypes={className:n.string,logo:n.node,logoProps:n.object,logoComponent:n.node,toolbar:n.node,avatar:n.node,topNav:n.node,showNavToggle:n.bool,isNavOpen:n.bool,isManagedSidebar:n.bool,role:n.string,onNavToggle:n.func,"aria-label":n.string};const Sm=e=>{let{className:t="",nav:n,isNavOpen:r=!0,theme:o="light"}=e,i=Pm(e,["className","nav","isNavOpen","theme"]);return l(bm,null,({isManagedSidebar:e,isNavOpen:a})=>{const s=e?a:r;return l("div",jm({id:"page-sidebar",className:h(cm.pageSidebar,"dark"===o&&cm.modifiers.dark,s&&cm.modifiers.expanded,!s&&cm.modifiers.collapsed,t)},i),l("div",{className:h(cm.pageSidebarBody)},n))})};function Nm(){return(Nm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let _m,km;Sm.propTypes={className:n.string,nav:n.node,isManagedSidebar:n.bool,isNavOpen:n.bool,theme:n.oneOf(["dark","light"])},function(e){e.default="default",e.light="light",e.dark="dark",e.darker="darker"}(_m||(_m={})),function(e){e.default="default",e.nav="nav"}(km||(km={}));const Im=e=>{let{className:t="",children:n,variant:r="default",type:o="default",noPadding:i=!1,noPaddingMobile:a=!1,isFilled:s}=e,c=Tm(e,["className","children","variant","type","noPadding","noPaddingMobile","isFilled"]);const p={[km.default]:cm.pageMainSection,[km.nav]:cm.pageMainNav},u={[_m.default]:"",[_m.light]:cm.modifiers.light,[_m.dark]:cm.modifiers.dark_200,[_m.darker]:cm.modifiers.dark_100};return l("section",Nm({},c,{className:h(p[o],i&&cm.modifiers.noPadding,a&&cm.modifiers.noPaddingMobile,u[r],!1===s&&cm.modifiers.noFill,!0===s&&cm.modifiers.fill,t)}),n)};Im.propTypes={children:n.node,className:n.string,variant:n.oneOf(["default","light","dark","darker"]),type:n.oneOf(["default","nav"]),isFilled:n.bool,noPadding:n.bool,noPaddingMobile:n.bool};const Lm=({firstIndex:e=0,lastIndex:t=0,itemCount:n=0,itemsTitle:r="items"})=>l(s,null,l("b",null,e," - ",t)," ","of ",l("b",null,n)," ",r);Lm.propTypes={firstIndex:n.number,lastIndex:n.number,itemCount:n.number,itemsTitle:n.string};var Em=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={pagination:"pf-c-pagination",paginationTotalItems:"pf-c-pagination__total-items",optionsMenu:"pf-c-options-menu",paginationNav:"pf-c-pagination__nav",optionsMenuToggle:"pf-c-options-menu__toggle",button:"pf-c-button",paginationNavPageSelect:"pf-c-pagination__nav-page-select",formControl:"pf-c-form-control",paginationMenuText:"pf-c-pagination__menu-text",modifiers:{footer:"pf-m-footer",compact:"pf-m-compact"}}}))),Mm=t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.AngleDoubleLeftIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"AngleDoubleLeftIcon",height:512,width:448,svgPath:"M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z",yOffset:"",xOffset:"",transform:""};t.AngleDoubleLeftIconConfig=r;var o=(0,n.default)(r);t.default=o})),Rm=e(Mm),Dm=(Mm.AngleDoubleLeftIconConfig,t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.AngleDoubleRightIconConfig=void 0;var n=function(e){return e&&e.__esModule?e:{default:e}}(Ge);var r={name:"AngleDoubleRightIcon",height:512,width:448,svgPath:"M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z",yOffset:"",xOffset:"",transform:""};t.AngleDoubleRightIconConfig=r;var o=(0,n.default)(r);t.default=o}))),Bm=e(Dm);Dm.AngleDoubleRightIconConfig;function Fm(){return(Fm=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Hm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class zm extends o{constructor(e){super(e),Hm(this,"handleNewPage",(e,t)=>{const{perPage:n,onSetPage:r}=this.props;return r(e,t,n,(t-1)*n,t*n)}),this.state={userInputPage:this.props.page}}static parseInteger(e,t){let n=Number.parseInt(e,10);return Number.isNaN(n)||(n=n>t?t:n,n=n<1?1:n),n}onChange(e,t){const n=zm.parseInteger(e.target.value,t);this.setState({userInputPage:Number.isNaN(n)?e.target.value:n})}onKeyDown(e,t,n,r){if(e.keyCode===v.ENTER){const o=zm.parseInteger(this.state.userInputPage,n);r(e,Number.isNaN(o)?t:o),this.handleNewPage(e,Number.isNaN(o)?t:o)}}componentDidUpdate(e){this.props.page!==e.page&&this.props.page<=this.props.lastPage&&this.state.userInputPage!==this.props.page&&this.setState({userInputPage:this.props.page})}render(){const e=this.props,{page:t,perPage:n,onSetPage:r,isDisabled:o,lastPage:i,firstPage:a,pagesTitle:s,toLastPage:c,toNextPage:p,toFirstPage:u,toPreviousPage:f,currPage:d,paginationTitle:m,onNextClick:g,onPreviousClick:b,onFirstClick:y,onLastClick:O,onPageInput:v,className:x,isCompact:w}=e,C=Am(e,["page","perPage","onSetPage","isDisabled","lastPage","firstPage","pagesTitle","toLastPage","toNextPage","toFirstPage","toPreviousPage","currPage","paginationTitle","onNextClick","onPreviousClick","onFirstClick","onLastClick","onPageInput","className","isCompact"]),{userInputPage:j}=this.state;return l("nav",Fm({className:h(Em.paginationNav,x),"aria-label":m},C),!w&&l(Xe,{variant:He.plain,isDisabled:o||t===a||0===t,"aria-label":u,"data-action":"first",onClick:e=>{y(e,1),this.handleNewPage(e,1),this.setState({userInputPage:1})}},l(Rm,null)),l(Xe,{variant:He.plain,isDisabled:o||t===a||0===t,"data-action":"previous",onClick:e=>{const n=t-1>=1?t-1:1;b(e,n),this.handleNewPage(e,n),this.setState({userInputPage:n})},"aria-label":f},l(vd,null)),!w&&l("div",{className:h(Em.paginationNavPageSelect)},l("input",{className:h(Em.formControl),"aria-label":d,type:"number",disabled:o||t===a&&t===i||0===t,min:i<=0&&a<=0?0:1,max:i,value:j,onKeyDown:e=>this.onKeyDown(e,t,i,v),onChange:e=>this.onChange(e,i)}),l("span",{"aria-hidden":"true"},"of ",s?re(i,s):i)),l(Xe,{variant:He.plain,isDisabled:o||t===i,"aria-label":p,"data-action":"next",onClick:e=>{const n=t+1<=i?t+1:i;g(e,n),this.handleNewPage(e,n),this.setState({userInputPage:n})}},l(vt,null)),!w&&l(Xe,{variant:He.plain,isDisabled:o||t===i,"aria-label":c,"data-action":"last",onClick:e=>{O(e,i),this.handleNewPage(e,i),this.setState({userInputPage:i})}},l(Bm,null)))}}Hm(zm,"propTypes",{className:n.string,isDisabled:n.bool,isCompact:n.bool,lastPage:n.number,firstPage:n.number,pagesTitle:n.string,toLastPage:n.string,toPreviousPage:n.string,toNextPage:n.string,toFirstPage:n.string,currPage:n.string,paginationTitle:n.string,page:n.node.isRequired,perPage:n.number,onSetPage:n.any.isRequired,onNextClick:n.func,onPreviousClick:n.func,onFirstClick:n.func,onLastClick:n.func,onPageInput:n.func}),Hm(zm,"defaultProps",{className:"",isDisabled:!1,isCompact:!1,lastPage:0,firstPage:0,pagesTitle:"",toLastPage:"Go to last page",toNextPage:"Go to next page",toFirstPage:"Go to first page",toPreviousPage:"Go to previous page",currPage:"Current page",paginationTitle:"Pagination",onNextClick:()=>{},onPreviousClick:()=>{},onFirstClick:()=>{},onLastClick:()=>{},onPageInput:()=>{}});let qm=0;const Xm=({itemsTitle:e="items",optionsToggle:t="Select",itemsPerPageTitle:n="Items per page",firstIndex:r=0,lastIndex:o=0,itemCount:i=0,widgetId:a="",showToggle:c=!0,onToggle:p=(e=>{}),isOpen:u=!1,isDisabled:f=!1,parentRef:d=null,toggleTemplate:m="",onEnter:g=null})=>l("div",{className:h(qd.optionsMenuToggle,f&&qd.modifiers.disabled,qd.modifiers.plain,qd.modifiers.text)},c&&l(s,null,l("span",{className:h(qd.optionsMenuToggleText)},"string"==typeof m?ee(m,{firstIndex:r,lastIndex:o,itemCount:i,itemsTitle:e}):l(m,{firstIndex:r,lastIndex:o,itemCount:i,itemsTitle:e})),l(xi,{onEnter:g,"aria-label":t,onToggle:p,isDisabled:f||i<=0,isOpen:u,id:`${a}-toggle-${qm++}`,className:qd.optionsMenuToggleButton,parentRef:d})));function Vm(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Xm.propTypes={itemsTitle:n.string,optionsToggle:n.string,itemsPerPageTitle:n.string,firstIndex:n.number,lastIndex:n.number,itemCount:n.number,widgetId:n.string,showToggle:n.bool,onToggle:n.func,isOpen:n.bool,isDisabled:n.bool,parentRef:n.any,toggleTemplate:n.oneOfType([n.func,n.string]),onEnter:n.func};class Gm extends o{constructor(e){super(e),Vm(this,"parentRef",i()),Vm(this,"onToggle",e=>{this.setState({isOpen:e})}),Vm(this,"onSelect",()=>{this.setState(e=>({isOpen:!e.isOpen}))}),Vm(this,"handleNewPerPage",(e,t)=>{const{page:n,onPerPageSelect:r,itemCount:o,defaultToFullPage:i}=this.props;let l=n;for(;Math.ceil(o/t)1&&o-t*l<0;)l--;return r(e,t,l,(l-1)*t,l*t)}),Vm(this,"renderItems",()=>{const{perPageOptions:e,perPage:t,perPageSuffix:n}=this.props;return e.map(({value:e,title:r})=>l(ti,{key:e,component:"button","data-action":"per-page-"+e,className:h(t===e&&"pf-m-selected"),onClick:t=>this.handleNewPerPage(t,e)},r,l("span",{className:h(Em.paginationMenuText)}," "+n),t===e&&l("i",{className:h(qd.optionsMenuMenuItemIcon)},l(cc,null))))}),this.state={isOpen:!1}}render(){const{widgetId:e,isDisabled:t,itemsPerPageTitle:n,dropDirection:r,optionsToggle:o,perPageOptions:i,toggleTemplate:a,firstIndex:s,lastIndex:c,itemCount:p,itemsTitle:u}=this.props,{isOpen:f}=this.state;return l(fn.Provider,{value:{id:e,onSelect:this.onSelect,toggleIconClass:qd.optionsMenuToggleIcon,toggleTextClass:qd.optionsMenuToggleText,menuClass:qd.optionsMenuMenu,itemClass:qd.optionsMenuMenuItem,toggleClass:" ",baseClass:qd.optionsMenu,disabledClass:qd.modifiers.disabled,menuComponent:"ul",baseComponent:"div"}},l(Cn,{direction:r,isOpen:f,toggle:l(Xm,{optionsToggle:o,itemsPerPageTitle:n,showToggle:i&&i.length>0,onToggle:this.onToggle,isOpen:f,widgetId:e,firstIndex:s,lastIndex:c,itemCount:p,itemsTitle:u,toggleTemplate:a,parentRef:this.parentRef.current,isDisabled:t}),dropdownItems:this.renderItems(),isPlain:!0}))}}Vm(Gm,"propTypes",{className:n.string,widgetId:n.string,isDisabled:n.bool,dropDirection:n.oneOf(["up","down"]),perPageOptions:n.arrayOf(n.any),itemsPerPageTitle:n.string,page:n.number,perPageSuffix:n.string,itemsTitle:n.string,optionsToggle:n.string,itemCount:n.number,firstIndex:n.number,lastIndex:n.number,defaultToFullPage:n.bool,perPage:n.number,lastPage:n.number,toggleTemplate:n.oneOfType([n.func,n.string]),onPerPageSelect:n.any}),Vm(Gm,"defaultProps",{className:"",widgetId:"",isDisabled:!1,dropDirection:un.down,perPageOptions:[],itemsPerPageTitle:"Items per page",perPageSuffix:"per page",optionsToggle:"Select",perPage:0,firstIndex:0,lastIndex:0,defaultToFullPage:!1,itemCount:0,itemsTitle:"items",toggleTemplate:({firstIndex:e,lastIndex:t,itemCount:n,itemsTitle:r})=>l(s,null,l("b",null,e," - ",t)," ","of",l("b",null,n)," ",r),onPerPageSelect:()=>null});const Wm="--pf-c-pagination__nav-page-select--c-form-control--width-chars";function Km(){return(Km=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function $m(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Ym;!function(e){e.top="top",e.bottom="bottom",e.left="left",e.right="right"}(Ym||(Ym={}));const Jm=[{title:"10",value:10},{title:"20",value:20},{title:"50",value:50},{title:"100",value:100}],Zm=(e,t)=>{if(!t)return;const n=String(e).length;n>=3?t.style.setProperty(Wm,""+n):t.style.setProperty(Wm,"2")};let Qm=0;class eg extends o{constructor(...e){super(...e),$m(this,"paginationRef",i())}getLastPage(){const{itemCount:e,perPage:t}=this.props;return Math.ceil(e/t)||0}componentDidMount(){const e=this.paginationRef.current;Zm(this.getLastPage(),e)}componentDidUpdate(e){const t=this.paginationRef.current;e.perPage===this.props.perPage&&e.itemCount===this.props.itemCount||Zm(this.getLastPage(),t)}render(){const e=this.props,{children:t,className:n,variant:r,isDisabled:o,isCompact:i,perPage:a,titles:s,firstPage:c,page:p,offset:u,defaultToFullPage:f,itemCount:d,itemsStart:m,itemsEnd:g,perPageOptions:b,dropDirection:y,widgetId:O,toggleTemplate:v,onSetPage:x,onPerPageSelect:w,onFirstClick:C,onPreviousClick:j,onNextClick:P,onPageInput:S,onLastClick:N,ouiaContext:T,ouiaId:_}=e,k=Um(e,["children","className","variant","isDisabled","isCompact","perPage","titles","firstPage","page","offset","defaultToFullPage","itemCount","itemsStart","itemsEnd","perPageOptions","dropDirection","widgetId","toggleTemplate","onSetPage","onPerPageSelect","onFirstClick","onPreviousClick","onNextClick","onPageInput","onLastClick","ouiaContext","ouiaId"]);let I=p;!I&&u&&(I=Math.ceil(u/a));const L=this.getLastPage();I0?I=c:I>L&&(I=L);const E=d<=0?0:(I-1)*a+1;let M;return M=d<=0?0:I===L?d:I*a,l("div",Km({ref:this.paginationRef,className:h(Em.pagination,r===Ym.bottom&&Em.modifiers.footer,i&&Em.modifiers.compact,n),id:`${O}-${Qm++}`},T.isOuia&&{"data-ouia-component-type":"Pagination","data-ouia-component-id":_||T.ouiaId},k),r===Ym.top&&l("div",{className:h(Em.paginationTotalItems)},l(Lm,{firstIndex:E,lastIndex:M,itemCount:d,itemsTitle:s.items})),l(Gm,{itemsPerPageTitle:s.itemsPerPage,perPageSuffix:s.perPageSuffix,itemsTitle:i?"":s.items,optionsToggle:s.optionsToggle,perPageOptions:b,firstIndex:null!==m?m:E,lastIndex:null!==g?g:M,defaultToFullPage:f,itemCount:d,page:I,perPage:a,lastPage:L,onPerPageSelect:w,dropDirection:y,widgetId:O,toggleTemplate:v,isDisabled:o}),l(zm,{pagesTitle:s.page,toLastPage:s.toLastPage,toPreviousPage:s.toPreviousPage,toNextPage:s.toNextPage,toFirstPage:s.toFirstPage,currPage:s.currPage,paginationTitle:s.paginationTitle,page:d<=0?0:I,perPage:a,firstPage:null!==m?m:1,lastPage:L,onSetPage:x,onFirstClick:C,onPreviousClick:j,onNextClick:P,onLastClick:N,onPageInput:S,isDisabled:o,isCompact:i}),t)}}$m(eg,"propTypes",{children:n.node,className:n.string,itemCount:n.number.isRequired,variant:n.oneOf(["top","bottom","left","right"]),isDisabled:n.bool,isCompact:n.bool,perPage:n.number,perPageOptions:n.arrayOf(n.shape({title:n.string,value:n.number})),defaultToFullPage:n.bool,firstPage:n.number,page:n.number,offset:n.number,itemsStart:n.number,itemsEnd:n.number,widgetId:n.string,dropDirection:n.oneOf(["up","down"]),titles:n.shape({page:n.string,items:n.string,itemsPerPage:n.string,perPageSuffix:n.string,toFirstPage:n.string,toPreviousPage:n.string,toLastPage:n.string,toNextPage:n.string,optionsToggle:n.string,currPage:n.string,paginationTitle:n.string}),toggleTemplate:n.oneOfType([n.func,n.string]),onSetPage:n.func,onFirstClick:n.func,onPreviousClick:n.func,onNextClick:n.func,onLastClick:n.func,onPageInput:n.func,onPerPageSelect:n.func}),$m(eg,"defaultProps",{children:null,className:"",variant:Ym.top,isDisabled:!1,isCompact:!1,perPage:Jm[0].value,titles:{items:"",page:"",itemsPerPage:"Items per page",perPageSuffix:"per page",toFirstPage:"Go to first page",toPreviousPage:"Go to previous page",toLastPage:"Go to last page",toNextPage:"Go to next page",optionsToggle:"Items per page",currPage:"Current page",paginationTitle:"Pagination"},firstPage:1,page:0,offset:0,defaultToFullPage:!1,itemsStart:null,itemsEnd:null,perPageOptions:Jm,dropDirection:un.down,widgetId:"pagination-options-menu",toggleTemplate:Lm,onSetPage:()=>{},onPerPageSelect:()=>{},onFirstClick:()=>{},onPreviousClick:()=>{},onNextClick:()=>{},onPageInput:()=>{},onLastClick:()=>{},ouiaContext:null,ouiaId:null});const tg=Ee(eg);var ng=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={popover:"pf-c-popover",popoverArrow:"pf-c-popover__arrow",popoverContent:"pf-c-popover__content",title:"pf-c-title",button:"pf-c-button",popoverBody:"pf-c-popover__body",popoverFooter:"pf-c-popover__footer",modifiers:{top:"pf-m-top",bottom:"pf-m-bottom",left:"pf-m-left",right:"pf-m-right"}}})));function rg(){return(rg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const ig=e=>{let{className:t=null,children:n}=e,r=og(e,["className","children"]);return l("div",rg({className:h(ng.popoverContent,t)},r),n)};function lg(){return(lg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ig.propTypes={className:n.string,children:n.node.isRequired};const sg=e=>{let{children:t,id:n}=e,r=ag(e,["children","id"]);return l("div",lg({className:h(ng.popoverBody),id:n},r),t)};function cg(){return(cg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}sg.propTypes={id:n.string.isRequired,children:n.node.isRequired};const ug=e=>{let{children:t,id:n}=e,r=pg(e,["children","id"]);return l(he,cg({headingLevel:"h6",size:be.xl,id:n},r),t)};function fg(){return(fg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}ug.propTypes={id:n.string.isRequired,children:n.node.isRequired};const mg=e=>{let{children:t,className:n=""}=e,r=dg(e,["children","className"]);return l("footer",fg({className:h(ng.popoverFooter,n)},r),t)};function gg(){return(gg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}mg.propTypes={className:n.string,children:n.node.isRequired};const bg=e=>{let{onClose:t=(()=>{})}=e,n=hg(e,["onClose"]);return l(Xe,gg({onClick:t,variant:"plain","aria-label":!0},n,{style:{pointerEvents:"auto"}}),l(Ke,null))};bg.propTypes={onClose:n.func,"aria-label":n.string.isRequired};var yg={name:"--pf-c-popover--MaxWidth",value:"calc(2rem + 18.75rem)",var:"var(--pf-c-popover--MaxWidth)"};function Og(){return(Og=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function xg(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let wg;!function(e){e.auto="auto",e.top="top",e.bottom="bottom",e.left="left",e.right="right"}(wg||(wg={}));class Cg extends o{constructor(e){super(e),xg(this,"hideOrNotify",()=>{null===this.props.isVisible?this.tip.hide():this.props.shouldClose(this.tip)}),xg(this,"handleEscOrEnterKey",e=>{e.keyCode===v.ESCAPE_KEY&&this.tip.state.isVisible?this.hideOrNotify():this.state.isOpen||e.keyCode!==v.ENTER||this.setState({focusTrapActive:!0})}),xg(this,"storeTippyInstance",e=>{this.props.minWidth&&(e.popperChildren.tooltip.style.minWidth=this.props.minWidth),e.popperChildren.tooltip.classList.add(ng.popover),this.tip=e}),xg(this,"closePopover",()=>{this.hideOrNotify(),this.setState({focusTrapActive:!1})}),xg(this,"hideAllPopovers",()=>{document.querySelectorAll(".tippy-popper").forEach(e=>{e._tippy&&e._tippy.hide()})}),xg(this,"onHide",e=>(this.state.isOpen&&this.setState({isOpen:!1}),this.props.onHide(e))),xg(this,"onHidden",e=>this.props.onHidden(e)),xg(this,"onMount",e=>this.props.onMount(e)),xg(this,"onShow",e=>{const{hideOnOutsideClick:t,isVisible:n,onShow:r}=this.props;return t||null!==n||this.hideAllPopovers(),!1===this.state.isOpen&&this.setState({isOpen:!0}),r(e)}),xg(this,"onShown",e=>this.props.onShown(e)),xg(this,"onContentMouseDown",()=>{this.state.focusTrapActive&&this.setState({focusTrapActive:!1})}),this.state={isOpen:!1,focusTrapActive:!1}}componentDidMount(){document.addEventListener("keydown",this.handleEscOrEnterKey,!1)}componentWillUnmount(){document.removeEventListener("keydown",this.handleEscOrEnterKey,!1)}render(){const e=this.props,{position:t,enableFlip:n,children:r,className:o,"aria-label":i,headerContent:a,bodyContent:c,footerContent:p,isVisible:u,shouldClose:f,appendTo:d,hideOnOutsideClick:m,onHide:b,onHidden:y,onShow:O,onShown:v,onMount:x,zIndex:w,minWidth:C,maxWidth:j,closeBtnAriaLabel:P,distance:S,boundary:N,flipBehavior:T,tippyProps:_}=e,k=vg(e,["position","enableFlip","children","className","aria-label","headerContent","bodyContent","footerContent","isVisible","shouldClose","appendTo","hideOnOutsideClick","onHide","onHidden","onShow","onShown","onMount","zIndex","minWidth","maxWidth","closeBtnAriaLabel","distance","boundary","flipBehavior","tippyProps"]);if(!a&&!i)return new Error("aria-label is required when header is not used");const I=this.state.isOpen?l(K,null,e=>l(V,{active:this.state.focusTrapActive,focusTrapOptions:{clickOutsideDeactivates:!0}},l("div",Og({className:h(!n&&g(ng,t,ng.modifiers.top),o),role:"dialog","aria-modal":"true","aria-label":a?void 0:i,"aria-labelledby":a?`popover-${e}-header`:void 0,"aria-describedby":`popover-${e}-body`,onMouseDown:this.onContentMouseDown},k),l(ig,null,l(bg,{onClose:this.closePopover,"aria-label":P}),a&&l(ug,{id:`popover-${e}-header`},a),l(sg,{id:`popover-${e}-body`},c),p&&l(mg,null,p))))):l(s,null),L=null===u;return l(Bo,Og({},_,{arrow:!0,onCreate:this.storeTippyInstance,maxWidth:j,zIndex:w,appendTo:d,content:I,lazy:!0,trigger:L?"click":"manual",isVisible:u,hideOnClick:!!L&&(!0===m||"toggle"),theme:"pf-popover",interactive:!0,interactiveBorder:0,placement:t,distance:S,flip:n,flipBehavior:T,boundary:N,popperOptions:{modifiers:{preventOverflow:{enabled:n},hide:{enabled:n}}},onHide:e=>this.onHide(e),onHidden:e=>this.onHidden(e),onShow:e=>this.onShow(e),onShown:e=>this.onShown(e),onMount:e=>this.onMount(e)}),r)}}xg(Cg,"propTypes",{"aria-label":n.string,appendTo:n.oneOfType([n.element,n.func]),bodyContent:n.node.isRequired,boundary:n.oneOfType([n.oneOf(["scrollParent"]),n.oneOf(["window"]),n.oneOf(["viewport"]),n.any]),children:n.element.isRequired,className:n.string,closeBtnAriaLabel:n.string,distance:n.number,enableFlip:n.bool,flipBehavior:n.oneOfType([n.oneOf(["flip"]),n.arrayOf(n.oneOf(["top","bottom","left","right"]))]),footerContent:n.node,headerContent:n.node,hideOnOutsideClick:n.bool,isVisible:n.bool,minWidth:n.string,maxWidth:n.string,onHidden:n.func,onHide:n.func,onMount:n.func,onShow:n.func,onShown:n.func,position:n.oneOf(["auto","top","bottom","left","right"]),shouldClose:n.func,zIndex:n.number,tippyProps:n.any}),xg(Cg,"defaultProps",{position:"top",enableFlip:!0,className:"",isVisible:null,shouldClose:()=>null,"aria-label":"",headerContent:null,footerContent:null,appendTo:()=>document.body,hideOnOutsideClick:!0,onHide:()=>null,onHidden:()=>null,onShow:()=>null,onShown:()=>null,onMount:()=>null,zIndex:9999,maxWidth:yg&&yg.value,closeBtnAriaLabel:"Close",distance:25,boundary:"window",flipBehavior:["top","right","bottom","left","top","right","bottom"],tippyProps:{}});var jg=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={progress:"pf-c-progress",progressDescription:"pf-c-progress__description",progressMeasure:"pf-c-progress__measure",progressIndicator:"pf-c-progress__indicator",progressStatus:"pf-c-progress__status",progressBar:"pf-c-progress__bar",progressStatusIcon:"pf-c-progress__status-icon",modifiers:{sm:"pf-m-sm",lg:"pf-m-lg",inside:"pf-m-inside",outside:"pf-m-outside",singleline:"pf-m-singleline",success:"pf-m-success",danger:"pf-m-danger"}}})));function Pg(){return(Pg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ng=e=>{let{ariaProps:t,className:n="",children:r=null,value:o}=e,i=Sg(e,["ariaProps","className","children","value"]);return l("div",Pg({},i,{className:h(jg.progressBar,n)},t),l("div",{className:h(jg.progressIndicator),style:{width:o+"%"}},l("span",{className:h(jg.progressMeasure)},r)))};let Tg,_g;Ng.propTypes={children:n.node,className:n.string,value:n.number.isRequired,ariaProps:n.shape({"aria-describedby":n.string,"aria-valuemin":n.number,"aria-valuenow":n.number,"aria-valuemax":n.number,"aria-valuetext":n.string})},function(e){e.outside="outside",e.inside="inside",e.top="top",e.none="none"}(Tg||(Tg={})),function(e){e.danger="danger",e.success="success",e.info="info"}(_g||(_g={}));const kg={danger:fa,success:Nt},Ig=({ariaProps:e,value:t,title:n="",parentId:r,label:o=null,variant:i=_g.info,measureLocation:a=Tg.top})=>{const c=kg.hasOwnProperty(i)&&kg[i];return l(s,null,l("div",{className:h(jg.progressDescription),id:r+"-description"},n),l("div",{className:h(jg.progressStatus)},(a===Tg.top||a===Tg.outside)&&l("span",{className:h(jg.progressMeasure)},o||t+"%"),kg.hasOwnProperty(i)&&l("span",{className:h(jg.progressStatusIcon)},l(c,null))),l(Ng,{ariaProps:e,value:t},a===Tg.inside&&t+"%"))};function Lg(){return(Lg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Rg(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Dg;Ig.propTypes={ariaProps:n.any,parentId:n.string.isRequired,title:n.string,label:n.node,variant:n.oneOf(["danger","success","info"]),measureLocation:n.oneOf(["outside","inside","top","none"]),value:n.number.isRequired},function(e){e.sm="sm",e.md="md",e.lg="lg"}(Dg||(Dg={}));class Bg extends o{constructor(...e){super(...e),Rg(this,"id",this.props.id||Y())}render(){const e=this.props,{id:t,className:n,size:r,value:o,title:i,label:a,variant:s,measureLocation:c,min:p,max:u,valueText:f}=e,d=function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function zg(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class qg extends o{constructor(e){super(e),zg(this,"handleChange",e=>{this.props.onChange(e.currentTarget.checked,e)}),e.label||e["aria-label"]||console.error("Radio:","Radio requires an aria-label to be specified")}render(){const e=this.props,{"aria-label":t,checked:n,className:r,defaultChecked:o,isLabelWrapped:i,isLabelBeforeButton:a,isChecked:c,isDisabled:p,isValid:u,label:f,onChange:d,description:m}=e,b=Hg(e,["aria-label","checked","className","defaultChecked","isLabelWrapped","isLabelBeforeButton","isChecked","isDisabled","isValid","label","onChange","description"]),y=l("input",Ag({},b,{className:h(Fg.radioInput),type:"radio",onChange:this.handleChange,"aria-invalid":!u,disabled:p,checked:n||c},void 0===n&&{defaultChecked:o},!f&&{"aria-label":t})),O=f?i?l("span",{className:h(Fg.radioLabel,g(Fg,p&&"disabled"))},f):l("label",{className:h(Fg.radioLabel,g(Fg,p&&"disabled")),htmlFor:b.id},f):null,v=m?l("div",{className:h(Fg.radioDescription)},m):null,x=a?l(s,null,O,y,v):l(s,null,y,O,v);return i?l("label",{className:h(Fg.radio,r),htmlFor:b.id},x):l("div",{className:h(Fg.radio,r)},x)}}zg(qg,"propTypes",{className:n.string,id:n.string.isRequired,isLabelWrapped:n.bool,isLabelBeforeButton:n.bool,checked:n.bool,isChecked:n.bool,isDisabled:n.bool,isValid:n.bool,label:n.node,name:n.string.isRequired,onChange:n.func,"aria-label":n.string,description:n.node}),zg(qg,"defaultProps",{className:"",isDisabled:!1,isValid:!0,onChange:()=>{}});var Xg=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={simpleList:"pf-c-simple-list",simpleListItemLink:"pf-c-simple-list__item-link",simpleListTitle:"pf-c-simple-list__title",simpleListSection:"pf-c-simple-list__section",modifiers:{current:"pf-m-current",hover:"pf-m-hover",focus:"pf-m-focus",active:"pf-m-active"}}})));function Vg(){return(Vg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Wg=e=>{let{children:t=null,className:n="",title:r="",titleClassName:o="",id:i=""}=e,a=Gg(e,["children","className","title","titleClassName","id"]);return l("section",Vg({className:h(Xg.simpleListSection)},a),l("h2",{id:i,className:h(Xg.simpleListTitle,o),"aria-hidden":"true"},r),l("ul",{className:h(n),"aria-labelledby":i},t))};function Kg(){return(Kg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function $g(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}Wg.propTypes={children:n.node,className:n.string,titleClassName:n.string,title:n.node,id:n.string};const Yg=a({});class Jg extends o{constructor(...e){super(...e),$g(this,"state",{currentRef:null}),$g(this,"handleCurrentUpdate",(e,t)=>{this.setState({currentRef:e});const{onSelect:n}=this.props;n&&n(e,t)})}componentDidMount(){Jg.hasWarnBeta,0}render(){const e=this.props,{children:t,className:n,onSelect:r}=e,o=Ug(e,["children","className","onSelect"]);let i=!1;return t&&(i=c.toArray(t)[0].type===Wg),l(Yg.Provider,{value:{currentRef:this.state.currentRef,updateCurrentRef:this.handleCurrentUpdate}},l("div",Kg({className:h(Xg.simpleList,n)},o,i&&{role:"list"}),i&&t,!i&&l("ul",null,t)))}}function Zg(){return(Zg=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function eh(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}$g(Jg,"propTypes",{children:n.node,className:n.string,onSelect:n.func}),$g(Jg,"hasWarnBeta",!1),$g(Jg,"defaultProps",{children:null,className:""});class th extends o{constructor(...e){super(...e),eh(this,"ref",i())}render(){const e=this.props,{children:t,isCurrent:n,className:r,component:o,componentClassName:i,componentProps:a,onClick:s,type:c,href:p}=e,u=Qg(e,["children","isCurrent","className","component","componentClassName","componentProps","onClick","type","href"]);return l(Yg.Consumer,null,({currentRef:e,updateCurrentRef:f})=>{const d="button"===o,m=this.ref&&e?e.current===this.ref.current:n,g=d?{type:c}:{tabIndex:0,href:p};return l("li",Zg({className:h(r)},u),l(o,Zg({className:h(Xg.simpleListItemLink,m&&Xg.modifiers.current,i),onClick:e=>{s(e),f(this.ref,this.props)},ref:this.ref},a,g),t))})}}eh(th,"propTypes",{children:n.node,className:n.string,component:n.oneOf(["button","a"]),componentClassName:n.string,componentProps:n.any,isCurrent:n.bool,onClick:n.func,type:n.oneOf(["button","submit","reset"]),href:n.string}),eh(th,"defaultProps",{children:null,className:"",isCurrent:!1,component:"button",componentClassName:"",type:"button",href:"",onClick:()=>{}});var nh=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={skipToContent:"pf-c-skip-to-content",modifiers:{focus:"pf-m-focus"}}})));function rh(){return(rh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ih(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class lh extends o{render(){const e=this.props,{component:t,children:n,className:r,href:o,show:i}=e,a=oh(e,["component","children","className","href","show"]);return l(t,rh({},a,{className:h(_e.button,g(_e.modifiers,"primary"),nh.skipToContent,i&&g(nh,"focus"),r),href:o}),n)}}ih(lh,"propTypes",{component:n.any,href:n.string.isRequired,children:n.node,className:n.string,show:n.bool}),ih(lh,"defaultProps",{component:"a",className:"",show:!1});var ah=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={switch:"pf-c-switch",switchInput:"pf-c-switch__input",switchToggle:"pf-c-switch__toggle",switchLabel:"pf-c-switch__label",switchToggleIcon:"pf-c-switch__toggle-icon",modifiers:{off:"pf-m-off",on:"pf-m-on"}}})));function sh(){return(sh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ph(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class uh extends o{constructor(e){super(e),ph(this,"id",""),e.id||e["aria-label"]||console.error("Switch: Switch requires either an id or aria-label to be specified"),this.id=e.id||Y()}render(){const e=this.props,{id:t,className:n,label:r,labelOff:o,isChecked:i,isDisabled:a,onChange:c,ouiaContext:p,ouiaId:u}=e,f=ch(e,["id","className","label","labelOff","isChecked","isDisabled","onChange","ouiaContext","ouiaId"]),d=""===f["aria-label"];return l("label",sh({className:h(ah.switch,n),htmlFor:this.id},p.isOuia&&{"data-ouia-component-type":"Switch","data-ouia-component-id":u||p.ouiaId}),l("input",sh({id:this.id,className:h(ah.switchInput),type:"checkbox",onChange:e=>c(e.target.checked,e),checked:i,disabled:a,"aria-labelledby":d?this.id+"-on":null},f)),""!==r?l(s,null,l("span",{className:h(ah.switchToggle)}),l("span",{className:h(ah.switchLabel,ah.modifiers.on),id:d?this.id+"-on":null,"aria-hidden":"true"},r),l("span",{className:h(ah.switchLabel,ah.modifiers.off),id:d?this.id+"-off":null,"aria-hidden":"true"},o||r)):""!==r&&""!==o?l(s,null,l("span",{className:h(ah.switchToggle)}),l("span",{className:h(ah.switchLabel,ah.modifiers.on),id:d?this.id+"-on":null,"aria-hidden":"true"},r),l("span",{className:h(ah.switchLabel,ah.modifiers.off),id:d?this.id+"-off":null,"aria-hidden":"true"},o)):l("span",{className:h(ah.switchToggle)},l("div",{className:h(ah.switchToggleIcon),"aria-hidden":"true"},l(cc,{noVerticalAlign:!0}))))}}ph(uh,"propTypes",{id:n.string,className:n.string,label:n.string,labelOff:n.string,isChecked:n.bool,isDisabled:n.bool,onChange:n.func,"aria-label":n.string}),ph(uh,"defaultProps",{id:"",className:"",label:"",labelOff:"",isChecked:!0,isDisabled:!1,"aria-label":"",onChange:()=>{}});const fh=Ee(uh),dh=()=>null;var mh=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={tabs:"pf-c-tabs",tabsScrollButton:"pf-c-tabs__scroll-button",tabsList:"pf-c-tabs__list",tabsItem:"pf-c-tabs__item",tabsButton:"pf-c-tabs__button",tabsScrollItem:"pf-c-tabs__scroll-item",modifiers:{start:"pf-m-start",end:"pf-m-end",startCurrent:"pf-m-start-current",tabsSecondary:"pf-m-tabs-secondary",endCurrent:"pf-m-end-current",fill:"pf-m-fill",current:"pf-m-current",hover:"pf-m-hover",secondary:"pf-m-secondary",active:"pf-m-active",focus:"pf-m-focus"}}})));function gh(){return(gh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const bh=e=>{let{children:t,className:n="",tabContentRef:r}=e,o=hh(e,["children","className","tabContentRef"]);const i=o.href?"a":"button";return l(i,gh({},o,{className:n,ref:r}),t)};bh.propTypes={children:n.node,className:n.string,href:n.string,tabContentRef:n.oneOfType([n.string,n.func,n.object])};const yh=f((e,t)=>l(bh,gh({},e,{tabContentRef:t})));function Oh(){return(Oh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const xh=e=>{let{id:t,activeKey:n,"aria-label":r,child:o,children:i,className:a,eventKey:s,innerRef:c}=e,p=vh(e,["id","activeKey","aria-label","child","children","className","eventKey","innerRef"]);if(i||o){let e;return e=r?null:i?`pf-tab-${s}-${t}`:`pf-tab-${o.props.eventKey}-${t}`,l("section",Oh({ref:c,hidden:i?null:o.props.eventKey!==n,className:h("pf-c-tab-content",i?a:o.props.className),id:i?t:`pf-tab-section-${o.props.eventKey}-${t}`,"aria-label":r,"aria-labelledby":e,role:"tabpanel",tabIndex:0},p),i||o.props.children)}return null};xh.propTypes={children:n.any,child:n.element,className:n.string,activeKey:n.oneOfType([n.number,n.string]),eventKey:n.oneOfType([n.number,n.string]),innerRef:n.oneOfType([n.string,n.func,n.object]),id:n.string.isRequired,"aria-label":n.string};const wh=f((e,t)=>l(xh,Oh({},e,{innerRef:t})));function Ch(){return(Ch=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Ph(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Sh;!function(e){e.div="div",e.nav="nav"}(Sh||(Sh={}));class Nh extends o{constructor(e){super(e),Ph(this,"tabList",i()),Ph(this,"handleScrollButtons",()=>{if(this.tabList.current){const e=this.tabList.current,t=!Z(e,e.firstChild,!1),n=!Z(e,e.lastChild,!1);let r;Array.from(e.children).forEach(e=>{const{className:t}=e;t.search("pf-m-current")>0&&(r=e)});const o=Q(e,r);this.setState({showLeftScrollButton:t,showRightScrollButton:n,highlightLeftScrollButton:(o===x.LEFT||o===x.BOTH)&&t,highlightRightScrollButton:(o===x.RIGHT||o===x.BOTH)&&n})}}),Ph(this,"scrollLeft",()=>{if(this.tabList.current){const e=this.tabList.current,t=Array.from(e.children);let n,r,o;for(o=0;o{if(this.tabList.current){const e=this.tabList.current,t=Array.from(e.children);let n,r;for(let o=t.length-1;o>=0&&!n;o--)Z(e,t[o],!1)&&(n=t[o],r=t[o+1]);r&&(e.scrollLeft+=r.scrollWidth)}}),this.state={showLeftScrollButton:!1,showRightScrollButton:!1,highlightLeftScrollButton:!1,highlightRightScrollButton:!1,shownKeys:[this.props.activeKey]}}handleTabClick(e,t,n,r){const{shownKeys:o}=this.state;this.props.onSelect(e,t),n&&(c.map(this.props.children,(e,t)=>{e.props.tabContentRef.current.hidden=!0}),n.current.hidden=!1),setTimeout(()=>{this.handleScrollButtons()},1),r&&this.setState({shownKeys:o.concat(t)})}componentDidMount(){window.addEventListener("resize",this.handleScrollButtons,!1),this.handleScrollButtons()}componentWillUnmount(){document.removeEventListener("resize",this.handleScrollButtons,!1)}render(){const e=this.props,{className:t,children:n,activeKey:r,id:o,isFilled:i,isSecondary:a,leftScrollAriaLabel:p,rightScrollAriaLabel:u,"aria-label":f,variant:d,ouiaContext:m,ouiaId:g,mountOnEnter:b,unmountOnExit:y}=e,O=jh(e,["className","children","activeKey","id","isFilled","isSecondary","leftScrollAriaLabel","rightScrollAriaLabel","aria-label","variant","ouiaContext","ouiaId","mountOnEnter","unmountOnExit"]),{showLeftScrollButton:v,showRightScrollButton:x,highlightLeftScrollButton:w,highlightRightScrollButton:C,shownKeys:j}=this.state,P=o||Y(),S=d===Sh.nav?"nav":"div";return l(s,null,l(S,Ch({"aria-label":f,className:h(mh.tabs,i&&mh.modifiers.fill,a&&mh.modifiers.tabsSecondary,v&&mh.modifiers.start,x&&mh.modifiers.end,w&&mh.modifiers.startCurrent,C&&mh.modifiers.endCurrent,t)},m.isOuia&&{"data-ouia-component-type":"Tabs","data-ouia-component-id":g||m.ouiaId},{id:o&&o},O),l("button",{className:h(mh.tabsScrollButton,a&&_e.modifiers.secondary),"aria-label":p,onClick:this.scrollLeft},l(vd,null)),l("ul",{className:h(mh.tabsList),ref:this.tabList,onScroll:this.handleScrollButtons},c.map(n,(e,n)=>{const o=e.props,{title:i,eventKey:a,tabContentRef:s,id:c,tabContentId:p}=o,u=jh(o,["title","eventKey","tabContentRef","id","tabContentId"]);return l("li",{key:n,className:h(mh.tabsItem,a===r&&mh.modifiers.current,t)},l(yh,Ch({className:h(mh.tabsButton),onClick:e=>this.handleTabClick(e,a,s,b),id:`pf-tab-${a}-${c||P}`,"aria-controls":p?""+p:`pf-tab-section-${a}-${c||P}`,tabContentRef:s},u),i))})),l("button",{className:h(mh.tabsScrollButton,a&&_e.modifiers.secondary),"aria-label":u,onClick:this.scrollRight},l(vt,null))),c.map(n,(e,t)=>!e.props.children||y&&e.props.eventKey!==r||b&&-1===j.indexOf(e.props.eventKey)?null:l(wh,{key:t,activeKey:r,child:e,id:e.props.id||P})))}}Ph(Nh,"propTypes",{children:n.node.isRequired,className:n.string,activeKey:n.oneOfType([n.number,n.string]),onSelect:n.func,id:n.string,isFilled:n.bool,isSecondary:n.bool,leftScrollAriaLabel:n.string,rightScrollAriaLabel:n.string,variant:n.oneOf(["div","nav"]),"aria-label":n.string,mountOnEnter:n.bool,unmountOnExit:n.bool}),Ph(Nh,"defaultProps",{className:"",activeKey:0,onSelect:()=>{},isFilled:!1,isSecondary:!1,leftScrollAriaLabel:"Scroll left",rightScrollAriaLabel:"Scroll right",variant:Sh.div,mountOnEnter:!1,unmountOnExit:!1});const Th=Ee(Nh);function _h(){return(_h=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Ih=e=>{let{children:t=null,className:n=""}=e,r=kh(e,["children","className"]);return l("div",_h({},r,{className:h(se.content,n)}),t)};function Lh(){return(Lh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Mh;Ih.propTypes={children:n.node,className:n.string},function(e){e.h1="h1",e.h2="h2",e.h3="h3",e.h4="h4",e.h5="h5",e.h6="h6",e.p="p",e.a="a",e.small="small",e.blockquote="blockquote",e.pre="pre"}(Mh||(Mh={}));const Rh=e=>{let{children:t=null,className:n="",component:r=Mh.p}=e,o=Eh(e,["children","className","component"]);return l(r,Lh({},o,{"data-pf-content":!0,className:h(n)}),t)};function Dh(){return(Dh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Fh;Rh.propTypes={component:n.oneOf(["h1","h2","h3","h4","h5","h6","p","a","small","blockquote","pre"]),children:n.node,className:n.string},function(e){e.ul="ul",e.ol="ol",e.dl="dl"}(Fh||(Fh={}));const Ah=e=>{let{children:t=null,className:n="",component:r=Fh.ul}=e,o=Bh(e,["children","className","component"]);return l(r,Dh({},o,{"data-pf-content":!0,className:h(n)}),t)};function Hh(){return(Hh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let qh;Ah.propTypes={children:n.node,className:n.string,component:n.oneOf(["ul","ol","dl"])},function(e){e.li="li",e.dt="dt",e.dd="dd"}(qh||(qh={}));const Xh=e=>{let{children:t=null,className:n="",component:r=qh.li}=e,o=zh(e,["children","className","component"]);return l(r,Hh({},o,{"data-pf-content":!0,className:h(n)}),t)};Xh.propTypes={children:n.node,className:n.string,component:n.oneOf(["li","dt","dd"])};var Vh=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={wizardHeader:"pf-c-wizard__header",card:"pf-c-card",button:"pf-c-button",wizard:"pf-c-wizard",wizardOuterWrap:"pf-c-wizard__outer-wrap",wizardNav:"pf-c-wizard__nav",wizardFooter:"pf-c-wizard__footer",wizardToggle:"pf-c-wizard__toggle",wizardClose:"pf-c-wizard__close",wizardTitle:"pf-c-wizard__title",wizardDescription:"pf-c-wizard__description",wizardToggleIcon:"pf-c-wizard__toggle-icon",wizardToggleList:"pf-c-wizard__toggle-list",wizardToggleListItem:"pf-c-wizard__toggle-list-item",wizardToggleNum:"pf-c-wizard__toggle-num",wizardToggleSeparator:"pf-c-wizard__toggle-separator",wizardInnerWrap:"pf-c-wizard__inner-wrap",wizardNavList:"pf-c-wizard__nav-list",wizardNavLink:"pf-c-wizard__nav-link",wizardNavItem:"pf-c-wizard__nav-item",wizardMain:"pf-c-wizard__main",wizardMainBody:"pf-c-wizard__main-body",modifiers:{fullWidth:"pf-m-full-width",fullHeight:"pf-m-full-height",compactNav:"pf-m-compact-nav",finished:"pf-m-finished",inPage:"pf-m-in-page",expanded:"pf-m-expanded",current:"pf-m-current",hover:"pf-m-hover",focus:"pf-m-focus",disabled:"pf-m-disabled",noPadding:"pf-m-no-padding"}}})));function Gh(){return(Gh=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Kh=e=>{let{children:t=null,className:n="",component:r="div"}=e,o=Wh(e,["children","className","component"]);return l(r,Gh({className:h(le.bullseye,n)},o),t)};Kh.propTypes={children:n.node,className:n.string,component:n.any};const Uh=({onClose:e=(()=>{}),title:t,description:n,ariaLabelCloseButton:r,titleId:o,descriptionId:i})=>l("div",{className:h(Vh.wizardHeader)},l(Xe,{variant:"plain",className:h(Vh.wizardClose),"aria-label":r,onClick:e},l(Ke,{"aria-hidden":"true"})),l(he,{size:"3xl",className:h(Vh.wizardTitle),"aria-label":t,id:o},t||l(s,null," ")),n&&l("p",{className:h(Vh.wizardDescription),id:i},n));Uh.propTypes={onClose:n.func,title:n.string.isRequired,description:n.string,ariaLabelCloseButton:n.string,titleId:n.string,descriptionId:n.string};const $h=({onNext:e,onBack:t,onClose:n,isValid:r,firstStep:o,activeStep:i,nextButtonText:a,backButtonText:s,cancelButtonText:c})=>l("footer",{className:h(Vh.wizardFooter)},l(Xe,{variant:He.primary,type:"submit",onClick:e,isDisabled:!r},a),!i.hideBackButton&&l(Xe,{variant:He.secondary,onClick:t,className:h(o&&"pf-m-disabled")},s),!i.hideCancelButton&&l(Xe,{variant:He.link,onClick:n},c));$h.propTypes={onNext:n.any.isRequired,onBack:n.any.isRequired,onClose:n.any.isRequired,isValid:n.bool.isRequired,firstStep:n.bool.isRequired,activeStep:n.any.isRequired,nextButtonText:n.string.isRequired,backButtonText:n.string.isRequired,cancelButtonText:n.string.isRequired};const Yh=({children:e,hasBodyPadding:t=!0})=>l("main",{className:h(Vh.wizardMain,!t&&Vh.modifiers.noPadding)},l("div",{className:h(Vh.wizardMainBody)},e));Yh.propTypes={children:n.any.isRequired,hasBodyPadding:n.bool.isRequired};const Jh=({isNavOpen:e,onNavToggle:t,nav:n,steps:r,activeStep:o,children:i,hasBodyPadding:a=!0})=>{let c,p,u;for(let e=0;et(!e),className:h(Vh.wizardToggle,e&&"pf-m-expanded"),"aria-expanded":e},l("ol",{className:h(Vh.wizardToggleList)},l("li",{className:h(Vh.wizardToggleListItem)},l("span",{className:h(Vh.wizardToggleNum)},c)," ",p,u&&l(vt,{className:h(Vh.wizardToggleSeparator),"aria-hidden":"true"})),u&&l("li",{className:h(Vh.wizardToggleListItem)},u)),l(yi,{className:h(Vh.wizardToggleIcon),"aria-hidden":"true"})),l("div",{className:h(Vh.wizardOuterWrap)},l("div",{className:h(Vh.wizardInnerWrap)},n(e),l(Yh,{hasBodyPadding:a},o.component)),i))};Jh.propTypes={nav:n.func.isRequired,steps:n.arrayOf(n.any).isRequired,activeStep:n.any.isRequired,children:n.node.isRequired,hasBodyPadding:n.bool.isRequired,isNavOpen:n.bool.isRequired,onNavToggle:n.func.isRequired};const Zh=({children:e,ariaLabel:t,isOpen:n=!1,returnList:r=!1})=>{const o=l("ol",{className:h(Vh.wizardNavList)},e);return r?o:l("nav",{className:h(Vh.wizardNav,n&&"pf-m-expanded"),"aria-label":t},l("ol",{className:h(Vh.wizardNavList)},e))};Zh.propTypes={children:n.any,ariaLabel:n.string,isOpen:n.bool,returnList:n.bool};const Qh=({children:e=null,text:t="",isCurrent:n=!1,isDisabled:r=!1,step:o,onNavItemClick:i=(()=>{}),navItemComponent:a="a"})=>{const s=a;return l("li",{className:h(Vh.wizardNavItem)},l(s,{"aria-current":!(!n||e)&&"page",onClick:()=>i(o),className:h(Vh.wizardNavLink,n&&"pf-m-current",r&&"pf-m-disabled"),"aria-disabled":!!r,tabIndex:r?-1:void 0},t),e)};Qh.propTypes={children:n.node,text:n.string,isCurrent:n.bool,isDisabled:n.bool,step:n.number.isRequired,onNavItemClick:n.func,navItemComponent:n.node};const eb=a({goToStepById:()=>null,goToStepByName:()=>null,onNext:()=>null,onBack:()=>null,onClose:()=>null,activeStep:{name:null}}),tb=eb.Provider,nb=eb.Consumer;function rb(){return(rb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ib(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class lb extends o{constructor(e){super(e),ib(this,"handleKeyClicks",e=>{e.keyCode===v.ESCAPE_KEY&&(this.state.isNavOpen?this.setState({isNavOpen:!this.state.isNavOpen}):this.props.isOpen&&this.props.onClose())}),ib(this,"toggleSiblingsFromScreenReaders",e=>{const{appendTo:t}=this.props,n=this.getElement(t).children;for(const t of Array.from(n))t!==this.container&&(e?t.setAttribute("aria-hidden",""+e):t.removeAttribute("aria-hidden"))}),ib(this,"onNext",()=>{const{onNext:e,onClose:t,onSave:n}=this.props,{currentStep:r}=this.state,o=this.getFlattenedSteps();if(r>=o.length)return n?n():t();{const t=r+1;this.setState({currentStep:t});const{id:n,name:i}=o[r-1],{id:l,name:a}=o[t-1];return e&&e({id:l,name:a},{prevId:n,prevName:i})}}),ib(this,"onBack",()=>{const{onBack:e}=this.props,{currentStep:t}=this.state,n=this.getFlattenedSteps();if(!(n.length{const{onGoToStep:t}=this.props,{currentStep:n}=this.state,r=this.getFlattenedSteps(),o=r.length;e<1?e=1:e>o&&(e=o),this.setState({currentStep:e,isNavOpen:!1});const{id:i,name:l}=r[n-1],{id:a,name:s}=r[e-1];return t&&t({id:a,name:s},{prevId:i,prevName:l})}),ib(this,"goToStepById",e=>{const t=this.getFlattenedSteps();let n;for(let r=0;r{const t=this.getFlattenedSteps();let n;for(let r=0;r{const{steps:e}=this.props,t=[];for(const n of e)if(n.steps)for(const e of n.steps)t.push(e);else t.push(n);return t}),ib(this,"getFlattenedStepsIndex",(e,t)=>{for(let n=0;n{for(let t=0;t"function"==typeof e?e():e||document.body);const t=lb.currentId++;this.isModal=!e.isInPage,this.isModal&&(this.titleId="pf-wizard-title-"+t,this.descriptionId="pf-wizard-description-"+t),this.state={currentStep:this.props.startAtStep&&Number.isInteger(this.props.startAtStep)?this.props.startAtStep:1,isNavOpen:!1}}componentDidMount(){const{appendTo:e}=this.props,t=this.getElement(e);this.isModal&&(this.container&&t.appendChild(this.container),this.toggleSiblingsFromScreenReaders(!0),t.addEventListener("keydown",this.handleKeyClicks,!1))}componentWillUnmount(){const{appendTo:e}=this.props,t=this.getElement(e);this.isModal&&(this.container&&t.removeChild(this.container),this.toggleSiblingsFromScreenReaders(!1),t.removeEventListener("keydown",this.handleKeyClicks,!1))}render(){if(this.isModal){if(!ie)return null;this.container||(this.container=document.createElement("div"))}const e=this.props,{isOpen:t,isInPage:n,isFullHeight:r,isFullWidth:o,width:i,height:a,title:s,description:c,onClose:p,onSave:u,onBack:f,onNext:d,onGoToStep:g,className:b,steps:y,startAtStep:O,nextButtonText:v="Next",backButtonText:x="Back",cancelButtonText:w="Cancel",ariaLabelCloseButton:C="Close",ariaLabelNav:j,hasBodyPadding:P,footer:S,isCompactNav:N,appendTo:T}=e,_=ob(e,["isOpen","isInPage","isFullHeight","isFullWidth","width","height","title","description","onClose","onSave","onBack","onNext","onGoToStep","className","steps","startAtStep","nextButtonText","backButtonText","cancelButtonText","ariaLabelCloseButton","ariaLabelNav","hasBodyPadding","footer","isCompactNav","appendTo"]),{currentStep:k}=this.state,I=this.getFlattenedSteps(),L=I.lengththis.setState({isNavOpen:e}),nav:e=>l(Zh,{isOpen:e,ariaLabel:j},M.map((e,t)=>{if(e.isFinishedStep)return;let n,r;if(e.steps){let o=!1,i=!1;for(const t of e.steps)E.name===t.name&&(o=!0),t.canJumpTo&&(i=!0);return r=this.getFlattenedStepsIndex(I,e.steps[0].name),l(Qh,{key:t,text:e.name,isCurrent:o,isDisabled:!i,step:r,onNavItemClick:this.goToStep},l(Zh,{returnList:!0},e.steps.map((e,t)=>{if(!e.isFinishedStep)return r=this.getFlattenedStepsIndex(I,e.name),n=e.canJumpTo,l(Qh,{key:"child_"+t,text:e.name,isCurrent:E.name===e.name,isDisabled:!n,step:r,onNavItemClick:this.goToStep})})))}return r=this.getFlattenedStepsIndex(I,e.name),n=e.canJumpTo,l(Qh,{key:t,text:e.name,isCurrent:E.name===e.name,isDisabled:!n,step:r,onNavItemClick:this.goToStep})})),steps:y,activeStep:E,hasBodyPadding:P},S||l($h,{onNext:this.onNext,onBack:this.onBack,onClose:p,isValid:D,firstStep:R,activeStep:E,nextButtonText:E.nextButtonText||v,backButtonText:x,cancelButtonText:w}))));return this.isModal?m(l(V,{focusTrapOptions:{clickOutsideDeactivates:!0}},l(nt,null,l(Kh,null,H))),this.container):H}}ib(lb,"propTypes",{isOpen:n.bool,isInPage:n.bool,isCompactNav:n.bool,isFullHeight:n.bool,isFullWidth:n.bool,width:n.oneOfType([n.number,n.string]),height:n.oneOfType([n.number,n.string]),title:n.string,description:n.string,onClose:n.func,onGoToStep:n.func,className:n.string,steps:n.arrayOf(n.shape({id:n.oneOfType([n.string,n.number]),name:n.string.isRequired,component:n.any,isFinishedStep:n.bool,canJumpTo:n.bool,steps:n.arrayOf(n.shape({id:n.oneOfType([n.string,n.number]),name:n.string.isRequired,component:n.any,isFinishedStep:n.bool,canJumpTo:n.bool,steps:n.arrayOf(n.shape({id:n.oneOfType([n.string,n.number]),name:n.string.isRequired,component:n.any,isFinishedStep:n.bool,canJumpTo:n.bool,steps:n.arrayOf(n.object),nextButtonText:n.string,enableNext:n.bool,hideCancelButton:n.bool,hideBackButton:n.bool})),nextButtonText:n.string,enableNext:n.bool,hideCancelButton:n.bool,hideBackButton:n.bool})),nextButtonText:n.string,enableNext:n.bool,hideCancelButton:n.bool,hideBackButton:n.bool})).isRequired,startAtStep:n.number,ariaLabelNav:n.string,hasBodyPadding:n.bool,footer:n.node,onSave:n.func,onNext:n.func,onBack:n.func,nextButtonText:n.string,backButtonText:n.string,cancelButtonText:n.string,ariaLabelCloseButton:n.string,appendTo:n.oneOfType([n.any,n.func])}),ib(lb,"currentId",0),ib(lb,"defaultProps",{isOpen:!1,isInPage:!1,isCompactNav:!1,isFullHeight:!1,isFullWidth:!1,title:"",description:"",className:"",startAtStep:1,nextButtonText:"Next",backButtonText:"Back",cancelButtonText:"Cancel",ariaLabelCloseButton:"Close",ariaLabelNav:"Steps",hasBodyPadding:!0,onBack:null,onNext:null,onGoToStep:null,width:null,height:null,footer:null,onClose:()=>{},appendTo:null});const ab=({children:e})=>l("footer",{className:h(Vh.wizardFooter)},e);ab.propTypes={children:n.any.isRequired};var sb=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={drawer:"pf-c-drawer",drawerSection:"pf-c-drawer__section",drawerMain:"pf-c-drawer__main",drawerContent:"pf-c-drawer__content",drawerPanel:"pf-c-drawer__panel",drawerHead:"pf-c-drawer__head",drawerActions:"pf-c-drawer__actions",drawerBody:"pf-c-drawer__body",pageMain:"pf-c-page__main",drawerClose:"pf-c-drawer__close",modifiers:{noBackground:"pf-m-no-background",noPadding:"pf-m-no-padding",padding:"pf-m-padding",expanded:"pf-m-expanded",panelLeft:"pf-m-panel-left",border:"pf-m-border",noBorder:"pf-m-no-border",width_25:"pf-m-width-25",width_33:"pf-m-width-33",width_50:"pf-m-width-50",width_66:"pf-m-width-66",width_75:"pf-m-width-75",width_100:"pf-m-width-100",width_25OnLg:"pf-m-width-25-on-lg",width_33OnLg:"pf-m-width-33-on-lg",width_50OnLg:"pf-m-width-50-on-lg",width_66OnLg:"pf-m-width-66-on-lg",width_75OnLg:"pf-m-width-75-on-lg",width_100OnLg:"pf-m-width-100-on-lg",width_25OnXl:"pf-m-width-25-on-xl",width_33OnXl:"pf-m-width-33-on-xl",width_50OnXl:"pf-m-width-50-on-xl",width_66OnXl:"pf-m-width-66-on-xl",width_75OnXl:"pf-m-width-75-on-xl",width_100OnXl:"pf-m-width-100-on-xl",width_25On_2xl:"pf-m-width-25-on-2xl",width_33On_2xl:"pf-m-width-33-on-2xl",width_50On_2xl:"pf-m-width-50-on-2xl",width_66On_2xl:"pf-m-width-66-on-2xl",width_75On_2xl:"pf-m-width-75-on-2xl",width_100On_2xl:"pf-m-width-100-on-2xl",inline:"pf-m-inline",static:"pf-m-static",inlineOnLg:"pf-m-inline-on-lg",staticOnLg:"pf-m-static-on-lg",inlineOnXl:"pf-m-inline-on-xl",staticOnXl:"pf-m-static-on-xl",inlineOn_2xl:"pf-m-inline-on-2xl",staticOn_2xl:"pf-m-static-on-2xl"}}})));function cb(){return(cb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const ub=a({isExpanded:!1}),fb=e=>{let{className:t="",children:n,isExpanded:r=!1,isInline:o=!1,isStatic:i=!1,position:a="right"}=e,s=pb(e,["className","children","isExpanded","isInline","isStatic","position"]);return l(ub.Provider,{value:{isExpanded:r}},l("div",cb({className:h(sb.drawer,r&&sb.modifiers.expanded,o&&sb.modifiers.inline,i&&sb.modifiers.static,"left"===a&&sb.modifiers.panelLeft,t)},s),n))};function db(){return(db=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}fb.propTypes={className:n.string,children:n.node,isExpanded:n.bool,isInline:n.bool,isStatic:n.bool,position:n.oneOf(["left","right"])};const gb=e=>{let{className:t="",children:n}=e,r=mb(e,["className","children"]);return l("div",db({className:h(sb.drawerActions,t)},r),n)};function hb(){return(hb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}gb.propTypes={className:n.string,children:n.node};const yb=e=>{let{className:t="",onClose:n=(()=>{}),"aria-label":r="Close drawer panel"}=e,o=bb(e,["className","onClose","aria-label"]);return l("div",hb({className:h(sb.drawerClose,t)},o),l(Xe,{variant:"plain",onClick:n,"aria-label":r},l(Ke,null)))};function Ob(){return(Ob=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}yb.propTypes={className:n.string,onClose:n.func,"aria-label":n.string};const xb=e=>{let{className:t="",children:n}=e,r=vb(e,["className","children"]);return l("div",Ob({className:h(sb.drawerMain,t)},r),n)};function wb(){return(wb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}xb.propTypes={className:n.string,children:n.node};const jb=e=>{let{className:t="",children:n,panelContent:r}=e,o=Cb(e,["className","children","panelContent"]);return l(xb,null,l("div",wb({className:h(sb.drawerContent,t)},o),n),r)};function Pb(){return(Pb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}jb.propTypes={className:n.string,children:n.node,panelContent:n.node.isRequired};const Nb=e=>{let{className:t="",children:n,hasPadding:r=!1}=e,o=Sb(e,["className","children","hasPadding"]);return l("div",Pb({className:h(sb.drawerBody,r&&sb.modifiers.padding,t)},o),n)};function Tb(){return(Tb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Nb.propTypes={className:n.string,children:n.node,hasPadding:n.bool};const kb=e=>{let{className:t="",children:n,noPadding:r=!1}=e,o=_b(e,["className","children","noPadding"]);return l("div",Tb({className:h(sb.drawerBody,r&&sb.modifiers.noPadding,t)},o),n)};function Ib(){return(Ib=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}kb.propTypes={className:n.string,children:n.node,noPadding:n.bool};const Eb=e=>{let{className:t="",children:n,noPadding:r=!1}=e,o=Lb(e,["className","children","noPadding"]);return l(kb,{noPadding:r},l("div",Ib({className:h(sb.drawerHead,t)},o),n))};function Mb(){return(Mb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Eb.propTypes={className:n.string,children:n.node,noPadding:n.bool};const Db=e=>{let{className:t="",children:n,hasBorder:r=!1,width:o,widthOnLg:i,widthOnXl:a,widthOn2Xl:s}=e,c=Rb(e,["className","children","hasBorder","width","widthOnLg","widthOnXl","widthOn2Xl"]);return l(ub.Consumer,null,({isExpanded:e})=>l("div",Mb({className:h(sb.drawerPanel,r&&sb.modifiers.border,o&&sb.modifiers["width_"+o],i&&sb.modifiers[`width_${i}OnLg`],a&&sb.modifiers[`width_${a}OnXl`],s&&sb.modifiers[`width_${s}On_2xl`],t),hidden:!e,"aria-hidden":!e,"aria-expanded":e},c),n))};function Bb(){return(Bb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Db.propTypes={className:n.string,children:n.node,hasBorder:n.bool,width:n.oneOf([25,33,50,66,75,100]),widthOnLg:n.oneOf([25,33,50,66,75,100]),widthOnXl:n.oneOf([25,33,50,66,75,100]),widthOn2Xl:n.oneOf([25,33,50,66,75,100])};const Ab=e=>{let{className:t="",children:n}=e,r=Fb(e,["className","children"]);return l("div",Bb({className:h(sb.drawerSection,t)},r),n)};Ab.propTypes={className:n.string,children:n.node};var Hb=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={dataToolbar:"pf-c-data-toolbar",dataToolbarContentSection:"pf-c-data-toolbar__content-section",divider:"pf-c-divider",dataToolbarGroup:"pf-c-data-toolbar__group",dataToolbarItem:"pf-c-data-toolbar__item",dataToolbarToggle:"pf-c-data-toolbar__toggle",pagination:"pf-c-pagination",dataToolbarContent:"pf-c-data-toolbar__content",dataToolbarExpandableContent:"pf-c-data-toolbar__expandable-content",chipGroup:"pf-c-chip-group",button:"pf-c-button",modifiers:{vertical:"pf-m-vertical",buttonGroup:"pf-m-button-group",iconButtonGroup:"pf-m-icon-button-group",filterGroup:"pf-m-filter-group",toggleGroup:"pf-m-toggle-group",alignRight:"pf-m-align-right",separator:"pf-m-separator",overflowMenu:"pf-m-overflow-menu",bulkSelect:"pf-m-bulk-select",searchFilter:"pf-m-search-filter",chipGroup:"pf-m-chip-group",label:"pf-m-label",pagination:"pf-m-pagination",expanded:"pf-m-expanded",chipContainer:"pf-m-chip-container",plain:"pf-m-plain",show:"pf-m-show",showOnMd:"pf-m-show-on-md",showOnLg:"pf-m-show-on-lg",showOnXl:"pf-m-show-on-xl",showOn_2xl:"pf-m-show-on-2xl",alignLeft:"pf-m-align-left",hidden:"pf-m-hidden",visible:"pf-m-visible",alignRightOnMd:"pf-m-align-right-on-md",alignLeftOnMd:"pf-m-align-left-on-md",hiddenOnMd:"pf-m-hidden-on-md",visibleOnMd:"pf-m-visible-on-md",alignRightOnLg:"pf-m-align-right-on-lg",alignLeftOnLg:"pf-m-align-left-on-lg",hiddenOnLg:"pf-m-hidden-on-lg",visibleOnLg:"pf-m-visible-on-lg",alignRightOnXl:"pf-m-align-right-on-xl",alignLeftOnXl:"pf-m-align-left-on-xl",hiddenOnXl:"pf-m-hidden-on-xl",visibleOnXl:"pf-m-visible-on-xl",alignRightOn_2xl:"pf-m-align-right-on-2xl",alignLeftOn_2xl:"pf-m-align-left-on-2xl",hiddenOn_2xl:"pf-m-hidden-on-2xl",visibleOn_2xl:"pf-m-visible-on-2xl",spaceItemsNone:"pf-m-space-items-none",spaceItemsSm:"pf-m-space-items-sm",spaceItemsMd:"pf-m-space-items-md",spaceItemsLg:"pf-m-space-items-lg",spaceItemsNoneOnMd:"pf-m-space-items-none-on-md",spaceItemsSmOnMd:"pf-m-space-items-sm-on-md",spaceItemsMdOnMd:"pf-m-space-items-md-on-md",spaceItemsLgOnMd:"pf-m-space-items-lg-on-md",spaceItemsNoneOnLg:"pf-m-space-items-none-on-lg",spaceItemsSmOnLg:"pf-m-space-items-sm-on-lg",spaceItemsMdOnLg:"pf-m-space-items-md-on-lg",spaceItemsLgOnLg:"pf-m-space-items-lg-on-lg",spaceItemsNoneOnXl:"pf-m-space-items-none-on-xl",spaceItemsSmOnXl:"pf-m-space-items-sm-on-xl",spaceItemsMdOnXl:"pf-m-space-items-md-on-xl",spaceItemsLgOnXl:"pf-m-space-items-lg-on-xl",spaceItemsNoneOn_2xl:"pf-m-space-items-none-on-2xl",spaceItemsSmOn_2xl:"pf-m-space-items-sm-on-2xl",spaceItemsMdOn_2xl:"pf-m-space-items-md-on-2xl",spaceItemsLgOn_2xl:"pf-m-space-items-lg-on-2xl",spacerNone:"pf-m-spacer-none",spacerSm:"pf-m-spacer-sm",spacerMd:"pf-m-spacer-md",spacerLg:"pf-m-spacer-lg",spacerNoneOnMd:"pf-m-spacer-none-on-md",spacerSmOnMd:"pf-m-spacer-sm-on-md",spacerMdOnMd:"pf-m-spacer-md-on-md",spacerLgOnMd:"pf-m-spacer-lg-on-md",spacerNoneOnLg:"pf-m-spacer-none-on-lg",spacerSmOnLg:"pf-m-spacer-sm-on-lg",spacerMdOnLg:"pf-m-spacer-md-on-lg",spacerLgOnLg:"pf-m-spacer-lg-on-lg",spacerNoneOnXl:"pf-m-spacer-none-on-xl",spacerSmOnXl:"pf-m-spacer-sm-on-xl",spacerMdOnXl:"pf-m-spacer-md-on-xl",spacerLgOnXl:"pf-m-spacer-lg-on-xl",spacerNoneOn_2xl:"pf-m-spacer-none-on-2xl",spacerSmOn_2xl:"pf-m-spacer-sm-on-2xl",spacerMdOn_2xl:"pf-m-spacer-md-on-2xl",spacerLgOn_2xl:"pf-m-spacer-lg-on-2xl"}}}))),zb={name:"--pf-global--breakpoint--lg",value:"992px",var:"var(--pf-global--breakpoint--lg)"},qb={name:"--pf-global--breakpoint--xl",value:"1200px",var:"var(--pf-global--breakpoint--xl)"},Xb="1450px";const Vb=a({isExpanded:!1,toggleIsExpanded:()=>{},chipGroupContentRef:null,updateNumberFilters:()=>{},numberOfFilters:0}),Gb=a({expandableContentRef:null,expandableContentId:"",chipContainerRef:null});function Wb(){return(Wb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}let Ub;!function(e){e.separator="separator",e["bulk-select"]="bulk-select",e["overflow-menu"]="overflow-menu",e.pagination="pagination",e["search-filter"]="search-filter",e.label="label",e["chip-group"]="chip-group"}(Ub||(Ub={}));const $b=e=>{let{className:t,variant:n,breakpointMods:r=[],id:o,children:i}=e,a=Kb(e,["className","variant","breakpointMods","id","children"]);const s="label"===n;return l("div",Wb({className:h(Hb.dataToolbarItem,n&&g(Hb,n),oe(r,Hb),t)},s&&{"aria-hidden":!0},{id:o},a),i)};function Yb(){return(Yb=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function Zb(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}let Qb;$b.propTypes={className:n.string,variant:n.oneOfType([n.any,n.oneOf(["separator"]),n.oneOf(["bulk-select"]),n.oneOf(["overflow-menu"]),n.oneOf(["pagination"]),n.oneOf(["search-filter"]),n.oneOf(["label"]),n.oneOf(["chip-group"])]),breakpointMods:n.arrayOf(n.any),id:n.string,children:n.node},function(e){e["filter-group"]="filter-group",e["icon-button-group"]="icon-button-group",e["button-group"]="button-group"}(Qb||(Qb={}));class ey extends o{render(){const e=this.props,{breakpointMods:t,className:n,variant:r,children:o,innerRef:i}=e,a=Jb(e,["breakpointMods","className","variant","children","innerRef"]);return l("div",Yb({className:h(Hb.dataToolbarGroup,r&&g(Hb,r),oe(t,Hb),n)},a,{ref:i}),o)}}Zb(ey,"propTypes",{className:n.string,variant:n.oneOfType([n.any,n.oneOf(["filter-group"]),n.oneOf(["icon-button-group"]),n.oneOf(["button-group"])]),breakpointMods:n.arrayOf(n.any),children:n.node,innerRef:n.any}),Zb(ey,"defaultProps",{breakpointMods:[]});const ty=f((e,t)=>l(ey,Yb({},e,{innerRef:t})));function ny(){return(ny=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function oy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class iy extends o{render(){const e=this.props,{className:t,isExpanded:n,chipGroupContentRef:r,clearAllFilters:o,showClearFiltersButton:i,clearFiltersButtonText:a,collapseListedFiltersBreakpoint:s,numberOfFilters:c}=e,p=ry(e,["className","isExpanded","chipGroupContentRef","clearAllFilters","showClearFiltersButton","clearFiltersButtonText","collapseListedFiltersBreakpoint","numberOfFilters"]),u="undefined"!=typeof window&&window.innerWidth<(f=s,{md:parseInt(pm.value),lg:parseInt(zb.value),xl:parseInt(qb.value),"2xl":parseInt(Xb)}[f]);var f;return l("div",ny({className:h(Hb.dataToolbarContent,(0===c||n)&&g(Hb,"hidden"),t)},(0===c||n)&&{hidden:!0},{ref:r},p),l(ty,ny({className:h(u&&g(Hb,"hidden"))},u&&{hidden:!0},u&&{"aria-hidden":!0})),u&&c>0&&!n&&l(ty,{className:h(g(Hb,"toggle-group-summary"),"pf-m-filters-applied-message")},l($b,null,c," filters applied")),i&&!n&&l($b,{className:h(g(Hb,"clear"))},l(Xe,{variant:"link",onClick:()=>{o()},isInline:!0},a)))}}function ly(){return(ly=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function sy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function cy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}oy(iy,"propTypes",{className:n.string,isExpanded:n.bool,chipGroupContentRef:n.any,clearAllFilters:n.func,showClearFiltersButton:n.bool.isRequired,clearFiltersButtonText:n.string,numberOfFilters:n.number.isRequired,collapseListedFiltersBreakpoint:n.oneOf(["md","lg","xl","2xl"])}),oy(iy,"defaultProps",{clearFiltersButtonText:"Clear all filters",collapseListedFiltersBreakpoint:"lg"});class py extends o{constructor(e){super(e),cy(this,"chipGroupContentRef",i()),cy(this,"isToggleManaged",()=>!(this.props.isExpanded||this.props.toggleIsExpanded)),cy(this,"toggleIsExpanded",()=>{this.setState(e=>({isManagedToggleExpanded:!e.isManagedToggleExpanded}))}),cy(this,"closeExpandableContent",()=>{this.setState(()=>({isManagedToggleExpanded:!1}))}),cy(this,"updateNumberFilters",(e,t)=>{const n=function(e){for(var t=1;tObject.values(this.state.filterInfo).reduce((e,t)=>e+t,0)),this.state={isManagedToggleExpanded:!1,filterInfo:{}}}componentDidMount(){this.isToggleManaged()&&window.addEventListener("resize",this.closeExpandableContent)}componentWillUnmount(){this.isToggleManaged()&&window.removeEventListener("resize",this.closeExpandableContent)}render(){const e=this.props,{clearAllFilters:t,clearFiltersButtonText:n,collapseListedFiltersBreakpoint:r,isExpanded:o,toggleIsExpanded:i,className:a,children:s,id:f}=e,d=ay(e,["clearAllFilters","clearFiltersButtonText","collapseListedFiltersBreakpoint","isExpanded","toggleIsExpanded","className","children","id"]),{isManagedToggleExpanded:m}=this.state,g=this.isToggleManaged(),b=this.getNumberOfFilters(),y=b>0;return l("div",ly({className:h(Hb.dataToolbar,a),id:f},d),l(Vb.Provider,{value:{isExpanded:this.isToggleManaged()?m:o,toggleIsExpanded:g?this.toggleIsExpanded:i,chipGroupContentRef:this.chipGroupContentRef,updateNumberFilters:this.updateNumberFilters,numberOfFilters:b}},c.map(s,e=>u(e)?p(e,{clearAllFilters:t,clearFiltersButtonText:n,showClearFiltersButton:y,isExpanded:g?m:o,toolbarId:f}):e),l(iy,{isExpanded:g?m:o,chipGroupContentRef:this.chipGroupContentRef,clearAllFilters:t,showClearFiltersButton:y,clearFiltersButtonText:n,numberOfFilters:b,collapseListedFiltersBreakpoint:r})))}}function uy(){return(uy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function dy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}cy(py,"propTypes",{clearAllFilters:n.func,clearFiltersButtonText:n.string,collapseListedFiltersBreakpoint:n.oneOf(["md","lg","xl","2xl"]),isExpanded:n.bool,toggleIsExpanded:n.func,className:n.string,children:n.node,id:n.string.isRequired}),cy(py,"hasWarnBeta",!1);class my extends o{render(){const e=this.props,{className:t,expandableContentRef:n,chipContainerRef:r,isExpanded:o,clearAllFilters:i,clearFiltersButtonText:a,showClearFiltersButton:s}=e,c=fy(e,["className","expandableContentRef","chipContainerRef","isExpanded","clearAllFilters","clearFiltersButtonText","showClearFiltersButton"]),{numberOfFilters:p}=this.context;return l("div",uy({className:h(Hb.dataToolbarExpandableContent,t),ref:n},c),l(ty,null),p>0&&l(ty,{className:g(Hb,"chip-container")},l(ty,{ref:r}),s&&l($b,{className:h(g(Hb,"clear"))},l(Xe,{variant:"link",onClick:()=>{i()},isInline:!0},a))))}}function gy(){return(gy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function by(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}dy(my,"propTypes",{className:n.string,isExpanded:n.bool,expandableContentRef:n.any,chipContainerRef:n.any,clearAllFilters:n.func,clearFiltersButtonText:n.string,showClearFiltersButton:n.bool.isRequired}),dy(my,"contextType",Vb),dy(my,"defaultProps",{isExpanded:!1,clearFiltersButtonText:"Clear all filters"});class yy extends o{constructor(...e){super(...e),by(this,"expandableContentRef",i()),by(this,"chipContainerRef",i())}render(){const e=this.props,{className:t,children:n,isExpanded:r,toolbarId:o,breakpointMods:i,clearAllFilters:a,showClearFiltersButton:s,clearFiltersButtonText:c}=e,p=hy(e,["className","children","isExpanded","toolbarId","breakpointMods","clearAllFilters","showClearFiltersButton","clearFiltersButtonText"]),u=`${o}-expandable-content-${yy.currentId++}`;return l("div",gy({className:h(Hb.dataToolbarContent,oe(i,Hb),t)},p),l(Gb.Provider,{value:{expandableContentRef:this.expandableContentRef,expandableContentId:u,chipContainerRef:this.chipContainerRef}},l("div",{className:h(Hb.dataToolbarContentSection)},n),l(my,{id:u,isExpanded:r,expandableContentRef:this.expandableContentRef,chipContainerRef:this.chipContainerRef,clearAllFilters:a,showClearFiltersButton:s,clearFiltersButtonText:c})))}}function Oy(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}by(yy,"propTypes",{className:n.string,breakpointMods:n.arrayOf(n.any),children:n.node,isExpanded:n.bool,clearAllFilters:n.func,showClearFiltersButton:n.bool,clearFiltersButtonText:n.string,toolbarId:n.string}),by(yy,"currentId",0),by(yy,"defaultProps",{isExpanded:!1,breakpointMods:[],showClearFiltersButton:!1});class xy extends o{constructor(e){super(e),this.state={isMounted:!1}}componentDidMount(){const{categoryName:e,chips:t}=this.props;this.context.updateNumberFilters("string"==typeof e?e:e.name,t.length),this.setState({isMounted:!0})}componentDidUpdate(){const{categoryName:e,chips:t}=this.props;this.context.updateNumberFilters("string"==typeof e?e:e.name,t.length)}render(){const e=this.props,{children:t,chips:n,deleteChip:r,categoryName:o,showToolbarItem:i}=e,a=Oy(e,["children","chips","deleteChip","categoryName","showToolbarItem"]),{isExpanded:c,chipGroupContentRef:p}=this.context,u=n.length?l($b,{variant:"chip-group"},l(xa,{withToolbar:!0},l(Sa,{key:"string"==typeof o?o:o.key,categoryName:"string"==typeof o?o:o.name},n.map(e=>"string"==typeof e?l(ba,{key:e,onClick:()=>r(o,e)},e):l(ba,{key:e.key,onClick:()=>r(o,e)},e.node))))):null;return!c&&this.state.isMounted?l(s,null,i&&l($b,a,t),m(u,p.current.firstElementChild)):l(Gb.Consumer,null,({chipContainerRef:e})=>l(s,null,i&&l($b,a,t),e.current&&m(u,e.current)))}}function wy(){return(wy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function jy(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}vy(xy,"propTypes",{chips:n.arrayOf(n.oneOfType([n.string,n.shape({key:n.string.isRequired,node:n.node.isRequired})])),deleteChip:n.func,children:n.node.isRequired,categoryName:n.oneOfType([n.string,n.shape({key:n.string.isRequired,name:n.string.isRequired})]).isRequired,showToolbarItem:n.bool}),vy(xy,"contextType",Vb),vy(xy,"defaultProps",{chips:[],showToolbarItem:!0});class Py extends o{constructor(...e){super(...e),jy(this,"isContentPopup",()=>window.innerWidthl(Gb.Consumer,null,({expandableContentRef:p,expandableContentId:u})=>(p.current&&p.current.classList&&(e?p.current.classList.add(g(Hb,"expanded")):p.current.classList.remove(g(Hb,"expanded"))),l("div",wy({className:h(Hb.dataToolbarGroup,r&&g(Hb,r),oe(o,Hb),g(Hb,"toggle-group"),g(Hb,"show-on-"+n),i)},s),l("div",{className:h(Hb.dataToolbarToggle)},l(Xe,wy({variant:"plain",onClick:c,"aria-label":"Show Filters"},e&&{"aria-expanded":!0},{"aria-haspopup":e&&this.isContentPopup(),"aria-controls":u}),t)),e?m(a,p.current.firstElementChild):a))))}}jy(Py,"propTypes",{toggleIcon:n.node.isRequired,breakpoint:n.oneOf(["md","lg","xl"]).isRequired,breakpointMods:n.arrayOf(n.any)}),jy(Py,"defaultProps",{breakpointMods:[]});var Sy=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={overflowMenu:"pf-c-overflow-menu",overflowMenuContent:"pf-c-overflow-menu__content",overflowMenuGroup:"pf-c-overflow-menu__group",overflowMenuItem:"pf-c-overflow-menu__item",overflowMenuControl:"pf-c-overflow-menu__control",divider:"pf-c-divider",modifiers:{buttonGroup:"pf-m-button-group",iconButtonGroup:"pf-m-icon-button-group",vertical:"pf-m-vertical"}}})));const Ny=a({isBelowBreakpoint:!1});function Ty(){return(Ty=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ky(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}class Iy extends o{constructor(e){super(e),ky(this,"handleResize",()=>{const e={md:pm,lg:zb,xl:qb},{breakpoint:t}=this.props;let n=e[t].value;n=Number(n.split("px")[0]);const r=window.innerWidthl(Ny.Consumer,null,r=>(r.isBelowBreakpoint||n)&&l("div",{className:h(Sy.overflowMenuControl,e)}," ",t," "));Ly.propTypes={children:n.any,className:n.string,hasAdditionalOptions:n.bool};const Ey=({className:e,children:t,isPersistent:n})=>l(Ny.Consumer,null,r=>(!r.isBelowBreakpoint||n)&&l("div",{className:h(Sy.overflowMenuContent,e)},t));Ey.propTypes={children:n.any,className:n.string,isPersistent:n.bool};const My=({className:e,children:t,isPersistent:n=!1,groupType:r})=>l(Ny.Consumer,null,o=>(n||!o.isBelowBreakpoint)&&l("div",{className:h(Sy.overflowMenuGroup,"button"===r&&Sy.modifiers.buttonGroup,"icon"===r&&Sy.modifiers.iconButtonGroup,e)},t));My.propTypes={children:n.any,className:n.string,isPersistent:n.bool,groupType:n.oneOf(["button","icon"])};const Ry=({className:e,children:t,isPersistent:n=!1})=>l(Ny.Consumer,null,r=>(n||!r.isBelowBreakpoint)&&l("div",{className:h(Sy.overflowMenuItem,e)}," ",t," "));Ry.propTypes={children:n.any,className:n.string,isPersistent:n.bool};const Dy=({children:e,isShared:t=!1})=>l(Ny.Consumer,null,n=>(!t||n.isBelowBreakpoint)&&l(ti,{component:"button"}," ",e," "));Dy.propTypes={children:n.any,isShared:n.bool};var By=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={flex:"pf-l-flex",modifiers:{flex:"pf-m-flex",inlineFlex:"pf-m-inline-flex",column:"pf-m-column",columnReverse:"pf-m-column-reverse",row:"pf-m-row",rowReverse:"pf-m-row-reverse",wrap:"pf-m-wrap",wrapReverse:"pf-m-wrap-reverse",nowrap:"pf-m-nowrap",justifyContentFlexStart:"pf-m-justify-content-flex-start",justifyContentFlexEnd:"pf-m-justify-content-flex-end",justifyContentCenter:"pf-m-justify-content-center",justifyContentSpaceBetween:"pf-m-justify-content-space-between",justifyContentSpaceAround:"pf-m-justify-content-space-around",justifyContentSpaceEvenly:"pf-m-justify-content-space-evenly",alignItemsFlexStart:"pf-m-align-items-flex-start",alignItemsFlexEnd:"pf-m-align-items-flex-end",alignItemsCenter:"pf-m-align-items-center",alignItemsStretch:"pf-m-align-items-stretch",alignItemsBaseline:"pf-m-align-items-baseline",alignContentFlexStart:"pf-m-align-content-flex-start",alignContentFlexEnd:"pf-m-align-content-flex-end",alignContentCenter:"pf-m-align-content-center",alignContentStretch:"pf-m-align-content-stretch",alignContentSpaceBetween:"pf-m-align-content-space-between",alignContentSpaceAround:"pf-m-align-content-space-around",alignRight:"pf-m-align-right",alignLeft:"pf-m-align-left",grow:"pf-m-grow",shrink:"pf-m-shrink",fullWidth:"pf-m-full-width",flex_1:"pf-m-flex-1",flex_2:"pf-m-flex-2",flex_3:"pf-m-flex-3",flex_4:"pf-m-flex-4",flexDefault:"pf-m-flex-default",flexNone:"pf-m-flex-none",alignSelfFlexStart:"pf-m-align-self-flex-start",alignSelfFlexEnd:"pf-m-align-self-flex-end",alignSelfCenter:"pf-m-align-self-center",alignSelfBaseline:"pf-m-align-self-baseline",alignSelfStretch:"pf-m-align-self-stretch",flexOnSm:"pf-m-flex-on-sm",inlineFlexOnSm:"pf-m-inline-flex-on-sm",columnOnSm:"pf-m-column-on-sm",columnReverseOnSm:"pf-m-column-reverse-on-sm",rowOnSm:"pf-m-row-on-sm",rowReverseOnSm:"pf-m-row-reverse-on-sm",wrapOnSm:"pf-m-wrap-on-sm",wrapReverseOnSm:"pf-m-wrap-reverse-on-sm",nowrapOnSm:"pf-m-nowrap-on-sm",justifyContentFlexStartOnSm:"pf-m-justify-content-flex-start-on-sm",justifyContentFlexEndOnSm:"pf-m-justify-content-flex-end-on-sm",justifyContentCenterOnSm:"pf-m-justify-content-center-on-sm",justifyContentSpaceBetweenOnSm:"pf-m-justify-content-space-between-on-sm",justifyContentSpaceAroundOnSm:"pf-m-justify-content-space-around-on-sm",justifyContentSpaceEvenlyOnSm:"pf-m-justify-content-space-evenly-on-sm",alignItemsFlexStartOnSm:"pf-m-align-items-flex-start-on-sm",alignItemsFlexEndOnSm:"pf-m-align-items-flex-end-on-sm",alignItemsCenterOnSm:"pf-m-align-items-center-on-sm",alignItemsStretchOnSm:"pf-m-align-items-stretch-on-sm",alignItemsBaselineOnSm:"pf-m-align-items-baseline-on-sm",alignContentFlexStartOnSm:"pf-m-align-content-flex-start-on-sm",alignContentFlexEndOnSm:"pf-m-align-content-flex-end-on-sm",alignContentCenterOnSm:"pf-m-align-content-center-on-sm",alignContentStretchOnSm:"pf-m-align-content-stretch-on-sm",alignContentSpaceBetweenOnSm:"pf-m-align-content-space-between-on-sm",alignContentSpaceAroundOnSm:"pf-m-align-content-space-around-on-sm",alignRightOnSm:"pf-m-align-right-on-sm",alignLeftOnSm:"pf-m-align-left-on-sm",growOnSm:"pf-m-grow-on-sm",shrinkOnSm:"pf-m-shrink-on-sm",fullWidthOnSm:"pf-m-full-width-on-sm",flex_1OnSm:"pf-m-flex-1-on-sm",flex_2OnSm:"pf-m-flex-2-on-sm",flex_3OnSm:"pf-m-flex-3-on-sm",flex_4OnSm:"pf-m-flex-4-on-sm",flexDefaultOnSm:"pf-m-flex-default-on-sm",flexNoneOnSm:"pf-m-flex-none-on-sm",alignSelfFlexStartOnSm:"pf-m-align-self-flex-start-on-sm",alignSelfFlexEndOnSm:"pf-m-align-self-flex-end-on-sm",alignSelfCenterOnSm:"pf-m-align-self-center-on-sm",alignSelfBaselineOnSm:"pf-m-align-self-baseline-on-sm",alignSelfStretchOnSm:"pf-m-align-self-stretch-on-sm",flexOnMd:"pf-m-flex-on-md",inlineFlexOnMd:"pf-m-inline-flex-on-md",columnOnMd:"pf-m-column-on-md",columnReverseOnMd:"pf-m-column-reverse-on-md",rowOnMd:"pf-m-row-on-md",rowReverseOnMd:"pf-m-row-reverse-on-md",wrapOnMd:"pf-m-wrap-on-md",wrapReverseOnMd:"pf-m-wrap-reverse-on-md",nowrapOnMd:"pf-m-nowrap-on-md",justifyContentFlexStartOnMd:"pf-m-justify-content-flex-start-on-md",justifyContentFlexEndOnMd:"pf-m-justify-content-flex-end-on-md",justifyContentCenterOnMd:"pf-m-justify-content-center-on-md",justifyContentSpaceBetweenOnMd:"pf-m-justify-content-space-between-on-md",justifyContentSpaceAroundOnMd:"pf-m-justify-content-space-around-on-md",justifyContentSpaceEvenlyOnMd:"pf-m-justify-content-space-evenly-on-md",alignItemsFlexStartOnMd:"pf-m-align-items-flex-start-on-md",alignItemsFlexEndOnMd:"pf-m-align-items-flex-end-on-md",alignItemsCenterOnMd:"pf-m-align-items-center-on-md",alignItemsStretchOnMd:"pf-m-align-items-stretch-on-md",alignItemsBaselineOnMd:"pf-m-align-items-baseline-on-md",alignContentFlexStartOnMd:"pf-m-align-content-flex-start-on-md",alignContentFlexEndOnMd:"pf-m-align-content-flex-end-on-md",alignContentCenterOnMd:"pf-m-align-content-center-on-md",alignContentStretchOnMd:"pf-m-align-content-stretch-on-md",alignContentSpaceBetweenOnMd:"pf-m-align-content-space-between-on-md",alignContentSpaceAroundOnMd:"pf-m-align-content-space-around-on-md",alignRightOnMd:"pf-m-align-right-on-md",alignLeftOnMd:"pf-m-align-left-on-md",growOnMd:"pf-m-grow-on-md",shrinkOnMd:"pf-m-shrink-on-md",fullWidthOnMd:"pf-m-full-width-on-md",flex_1OnMd:"pf-m-flex-1-on-md",flex_2OnMd:"pf-m-flex-2-on-md",flex_3OnMd:"pf-m-flex-3-on-md",flex_4OnMd:"pf-m-flex-4-on-md",flexDefaultOnMd:"pf-m-flex-default-on-md",flexNoneOnMd:"pf-m-flex-none-on-md",alignSelfFlexStartOnMd:"pf-m-align-self-flex-start-on-md",alignSelfFlexEndOnMd:"pf-m-align-self-flex-end-on-md",alignSelfCenterOnMd:"pf-m-align-self-center-on-md",alignSelfBaselineOnMd:"pf-m-align-self-baseline-on-md",alignSelfStretchOnMd:"pf-m-align-self-stretch-on-md",flexOnLg:"pf-m-flex-on-lg",inlineFlexOnLg:"pf-m-inline-flex-on-lg",columnOnLg:"pf-m-column-on-lg",columnReverseOnLg:"pf-m-column-reverse-on-lg",rowOnLg:"pf-m-row-on-lg",rowReverseOnLg:"pf-m-row-reverse-on-lg",wrapOnLg:"pf-m-wrap-on-lg",wrapReverseOnLg:"pf-m-wrap-reverse-on-lg",nowrapOnLg:"pf-m-nowrap-on-lg",justifyContentFlexStartOnLg:"pf-m-justify-content-flex-start-on-lg",justifyContentFlexEndOnLg:"pf-m-justify-content-flex-end-on-lg",justifyContentCenterOnLg:"pf-m-justify-content-center-on-lg",justifyContentSpaceBetweenOnLg:"pf-m-justify-content-space-between-on-lg",justifyContentSpaceAroundOnLg:"pf-m-justify-content-space-around-on-lg",justifyContentSpaceEvenlyOnLg:"pf-m-justify-content-space-evenly-on-lg",alignItemsFlexStartOnLg:"pf-m-align-items-flex-start-on-lg",alignItemsFlexEndOnLg:"pf-m-align-items-flex-end-on-lg",alignItemsCenterOnLg:"pf-m-align-items-center-on-lg",alignItemsStretchOnLg:"pf-m-align-items-stretch-on-lg",alignItemsBaselineOnLg:"pf-m-align-items-baseline-on-lg",alignContentFlexStartOnLg:"pf-m-align-content-flex-start-on-lg",alignContentFlexEndOnLg:"pf-m-align-content-flex-end-on-lg",alignContentCenterOnLg:"pf-m-align-content-center-on-lg",alignContentStretchOnLg:"pf-m-align-content-stretch-on-lg",alignContentSpaceBetweenOnLg:"pf-m-align-content-space-between-on-lg",alignContentSpaceAroundOnLg:"pf-m-align-content-space-around-on-lg",alignRightOnLg:"pf-m-align-right-on-lg",alignLeftOnLg:"pf-m-align-left-on-lg",growOnLg:"pf-m-grow-on-lg",shrinkOnLg:"pf-m-shrink-on-lg",fullWidthOnLg:"pf-m-full-width-on-lg",flex_1OnLg:"pf-m-flex-1-on-lg",flex_2OnLg:"pf-m-flex-2-on-lg",flex_3OnLg:"pf-m-flex-3-on-lg",flex_4OnLg:"pf-m-flex-4-on-lg",flexDefaultOnLg:"pf-m-flex-default-on-lg",flexNoneOnLg:"pf-m-flex-none-on-lg",alignSelfFlexStartOnLg:"pf-m-align-self-flex-start-on-lg",alignSelfFlexEndOnLg:"pf-m-align-self-flex-end-on-lg",alignSelfCenterOnLg:"pf-m-align-self-center-on-lg",alignSelfBaselineOnLg:"pf-m-align-self-baseline-on-lg",alignSelfStretchOnLg:"pf-m-align-self-stretch-on-lg",flexOnXl:"pf-m-flex-on-xl",inlineFlexOnXl:"pf-m-inline-flex-on-xl",columnOnXl:"pf-m-column-on-xl",columnReverseOnXl:"pf-m-column-reverse-on-xl",rowOnXl:"pf-m-row-on-xl",rowReverseOnXl:"pf-m-row-reverse-on-xl",wrapOnXl:"pf-m-wrap-on-xl",wrapReverseOnXl:"pf-m-wrap-reverse-on-xl",nowrapOnXl:"pf-m-nowrap-on-xl",justifyContentFlexStartOnXl:"pf-m-justify-content-flex-start-on-xl",justifyContentFlexEndOnXl:"pf-m-justify-content-flex-end-on-xl",justifyContentCenterOnXl:"pf-m-justify-content-center-on-xl",justifyContentSpaceBetweenOnXl:"pf-m-justify-content-space-between-on-xl",justifyContentSpaceAroundOnXl:"pf-m-justify-content-space-around-on-xl",justifyContentSpaceEvenlyOnXl:"pf-m-justify-content-space-evenly-on-xl",alignItemsFlexStartOnXl:"pf-m-align-items-flex-start-on-xl",alignItemsFlexEndOnXl:"pf-m-align-items-flex-end-on-xl",alignItemsCenterOnXl:"pf-m-align-items-center-on-xl",alignItemsStretchOnXl:"pf-m-align-items-stretch-on-xl",alignItemsBaselineOnXl:"pf-m-align-items-baseline-on-xl",alignContentFlexStartOnXl:"pf-m-align-content-flex-start-on-xl",alignContentFlexEndOnXl:"pf-m-align-content-flex-end-on-xl",alignContentCenterOnXl:"pf-m-align-content-center-on-xl",alignContentStretchOnXl:"pf-m-align-content-stretch-on-xl",alignContentSpaceBetweenOnXl:"pf-m-align-content-space-between-on-xl",alignContentSpaceAroundOnXl:"pf-m-align-content-space-around-on-xl",alignRightOnXl:"pf-m-align-right-on-xl",alignLeftOnXl:"pf-m-align-left-on-xl",growOnXl:"pf-m-grow-on-xl",shrinkOnXl:"pf-m-shrink-on-xl",fullWidthOnXl:"pf-m-full-width-on-xl",flex_1OnXl:"pf-m-flex-1-on-xl",flex_2OnXl:"pf-m-flex-2-on-xl",flex_3OnXl:"pf-m-flex-3-on-xl",flex_4OnXl:"pf-m-flex-4-on-xl",flexDefaultOnXl:"pf-m-flex-default-on-xl",flexNoneOnXl:"pf-m-flex-none-on-xl",alignSelfFlexStartOnXl:"pf-m-align-self-flex-start-on-xl",alignSelfFlexEndOnXl:"pf-m-align-self-flex-end-on-xl",alignSelfCenterOnXl:"pf-m-align-self-center-on-xl",alignSelfBaselineOnXl:"pf-m-align-self-baseline-on-xl",alignSelfStretchOnXl:"pf-m-align-self-stretch-on-xl",flexOn_2xl:"pf-m-flex-on-2xl",inlineFlexOn_2xl:"pf-m-inline-flex-on-2xl",columnOn_2xl:"pf-m-column-on-2xl",columnReverseOn_2xl:"pf-m-column-reverse-on-2xl",rowOn_2xl:"pf-m-row-on-2xl",rowReverseOn_2xl:"pf-m-row-reverse-on-2xl",wrapOn_2xl:"pf-m-wrap-on-2xl",wrapReverseOn_2xl:"pf-m-wrap-reverse-on-2xl",nowrapOn_2xl:"pf-m-nowrap-on-2xl",justifyContentFlexStartOn_2xl:"pf-m-justify-content-flex-start-on-2xl",justifyContentFlexEndOn_2xl:"pf-m-justify-content-flex-end-on-2xl",justifyContentCenterOn_2xl:"pf-m-justify-content-center-on-2xl",justifyContentSpaceBetweenOn_2xl:"pf-m-justify-content-space-between-on-2xl",justifyContentSpaceAroundOn_2xl:"pf-m-justify-content-space-around-on-2xl",justifyContentSpaceEvenlyOn_2xl:"pf-m-justify-content-space-evenly-on-2xl",alignItemsFlexStartOn_2xl:"pf-m-align-items-flex-start-on-2xl",alignItemsFlexEndOn_2xl:"pf-m-align-items-flex-end-on-2xl",alignItemsCenterOn_2xl:"pf-m-align-items-center-on-2xl",alignItemsStretchOn_2xl:"pf-m-align-items-stretch-on-2xl",alignItemsBaselineOn_2xl:"pf-m-align-items-baseline-on-2xl",alignContentFlexStartOn_2xl:"pf-m-align-content-flex-start-on-2xl",alignContentFlexEndOn_2xl:"pf-m-align-content-flex-end-on-2xl",alignContentCenterOn_2xl:"pf-m-align-content-center-on-2xl",alignContentStretchOn_2xl:"pf-m-align-content-stretch-on-2xl",alignContentSpaceBetweenOn_2xl:"pf-m-align-content-space-between-on-2xl",alignContentSpaceAroundOn_2xl:"pf-m-align-content-space-around-on-2xl",alignRightOn_2xl:"pf-m-align-right-on-2xl",alignLeftOn_2xl:"pf-m-align-left-on-2xl",growOn_2xl:"pf-m-grow-on-2xl",shrinkOn_2xl:"pf-m-shrink-on-2xl",fullWidthOn_2xl:"pf-m-full-width-on-2xl",flex_1On_2xl:"pf-m-flex-1-on-2xl",flex_2On_2xl:"pf-m-flex-2-on-2xl",flex_3On_2xl:"pf-m-flex-3-on-2xl",flex_4On_2xl:"pf-m-flex-4-on-2xl",flexDefaultOn_2xl:"pf-m-flex-default-on-2xl",flexNoneOn_2xl:"pf-m-flex-none-on-2xl",alignSelfFlexStartOn_2xl:"pf-m-align-self-flex-start-on-2xl",alignSelfFlexEndOn_2xl:"pf-m-align-self-flex-end-on-2xl",alignSelfCenterOn_2xl:"pf-m-align-self-center-on-2xl",alignSelfBaselineOn_2xl:"pf-m-align-self-baseline-on-2xl",alignSelfStretchOn_2xl:"pf-m-align-self-stretch-on-2xl",spaceItemsNone:"pf-m-space-items-none",spaceItemsXs:"pf-m-space-items-xs",spaceItemsSm:"pf-m-space-items-sm",spaceItemsMd:"pf-m-space-items-md",spaceItemsLg:"pf-m-space-items-lg",spaceItemsXl:"pf-m-space-items-xl",spaceItems_2xl:"pf-m-space-items-2xl",spaceItems_3xl:"pf-m-space-items-3xl",spaceItemsNoneOnSm:"pf-m-space-items-none-on-sm",spaceItemsXsOnSm:"pf-m-space-items-xs-on-sm",spaceItemsSmOnSm:"pf-m-space-items-sm-on-sm",spaceItemsMdOnSm:"pf-m-space-items-md-on-sm",spaceItemsLgOnSm:"pf-m-space-items-lg-on-sm",spaceItemsXlOnSm:"pf-m-space-items-xl-on-sm",spaceItems_2xlOnSm:"pf-m-space-items-2xl-on-sm",spaceItems_3xlOnSm:"pf-m-space-items-3xl-on-sm",spaceItemsNoneOnMd:"pf-m-space-items-none-on-md",spaceItemsXsOnMd:"pf-m-space-items-xs-on-md",spaceItemsSmOnMd:"pf-m-space-items-sm-on-md",spaceItemsMdOnMd:"pf-m-space-items-md-on-md",spaceItemsLgOnMd:"pf-m-space-items-lg-on-md",spaceItemsXlOnMd:"pf-m-space-items-xl-on-md",spaceItems_2xlOnMd:"pf-m-space-items-2xl-on-md",spaceItems_3xlOnMd:"pf-m-space-items-3xl-on-md",spaceItemsNoneOnLg:"pf-m-space-items-none-on-lg",spaceItemsXsOnLg:"pf-m-space-items-xs-on-lg",spaceItemsSmOnLg:"pf-m-space-items-sm-on-lg",spaceItemsMdOnLg:"pf-m-space-items-md-on-lg",spaceItemsLgOnLg:"pf-m-space-items-lg-on-lg",spaceItemsXlOnLg:"pf-m-space-items-xl-on-lg",spaceItems_2xlOnLg:"pf-m-space-items-2xl-on-lg",spaceItems_3xlOnLg:"pf-m-space-items-3xl-on-lg",spaceItemsNoneOnXl:"pf-m-space-items-none-on-xl",spaceItemsXsOnXl:"pf-m-space-items-xs-on-xl",spaceItemsSmOnXl:"pf-m-space-items-sm-on-xl",spaceItemsMdOnXl:"pf-m-space-items-md-on-xl",spaceItemsLgOnXl:"pf-m-space-items-lg-on-xl",spaceItemsXlOnXl:"pf-m-space-items-xl-on-xl",spaceItems_2xlOnXl:"pf-m-space-items-2xl-on-xl",spaceItems_3xlOnXl:"pf-m-space-items-3xl-on-xl",spaceItemsNoneOn_2xl:"pf-m-space-items-none-on-2xl",spaceItemsXsOn_2xl:"pf-m-space-items-xs-on-2xl",spaceItemsSmOn_2xl:"pf-m-space-items-sm-on-2xl",spaceItemsMdOn_2xl:"pf-m-space-items-md-on-2xl",spaceItemsLgOn_2xl:"pf-m-space-items-lg-on-2xl",spaceItemsXlOn_2xl:"pf-m-space-items-xl-on-2xl",spaceItems_2xlOn_2xl:"pf-m-space-items-2xl-on-2xl",spaceItems_3xlOn_2xl:"pf-m-space-items-3xl-on-2xl",spacerNone:"pf-m-spacer-none",spacerXs:"pf-m-spacer-xs",spacerSm:"pf-m-spacer-sm",spacerMd:"pf-m-spacer-md",spacerLg:"pf-m-spacer-lg",spacerXl:"pf-m-spacer-xl",spacer_2xl:"pf-m-spacer-2xl",spacer_3xl:"pf-m-spacer-3xl",spacerNoneOnSm:"pf-m-spacer-none-on-sm",spacerXsOnSm:"pf-m-spacer-xs-on-sm",spacerSmOnSm:"pf-m-spacer-sm-on-sm",spacerMdOnSm:"pf-m-spacer-md-on-sm",spacerLgOnSm:"pf-m-spacer-lg-on-sm",spacerXlOnSm:"pf-m-spacer-xl-on-sm",spacer_2xlOnSm:"pf-m-spacer-2xl-on-sm",spacer_3xlOnSm:"pf-m-spacer-3xl-on-sm",spacerNoneOnMd:"pf-m-spacer-none-on-md",spacerXsOnMd:"pf-m-spacer-xs-on-md",spacerSmOnMd:"pf-m-spacer-sm-on-md",spacerMdOnMd:"pf-m-spacer-md-on-md",spacerLgOnMd:"pf-m-spacer-lg-on-md",spacerXlOnMd:"pf-m-spacer-xl-on-md",spacer_2xlOnMd:"pf-m-spacer-2xl-on-md",spacer_3xlOnMd:"pf-m-spacer-3xl-on-md",spacerNoneOnLg:"pf-m-spacer-none-on-lg",spacerXsOnLg:"pf-m-spacer-xs-on-lg",spacerSmOnLg:"pf-m-spacer-sm-on-lg",spacerMdOnLg:"pf-m-spacer-md-on-lg",spacerLgOnLg:"pf-m-spacer-lg-on-lg",spacerXlOnLg:"pf-m-spacer-xl-on-lg",spacer_2xlOnLg:"pf-m-spacer-2xl-on-lg",spacer_3xlOnLg:"pf-m-spacer-3xl-on-lg",spacerNoneOnXl:"pf-m-spacer-none-on-xl",spacerXsOnXl:"pf-m-spacer-xs-on-xl",spacerSmOnXl:"pf-m-spacer-sm-on-xl",spacerMdOnXl:"pf-m-spacer-md-on-xl",spacerLgOnXl:"pf-m-spacer-lg-on-xl",spacerXlOnXl:"pf-m-spacer-xl-on-xl",spacer_2xlOnXl:"pf-m-spacer-2xl-on-xl",spacer_3xlOnXl:"pf-m-spacer-3xl-on-xl",spacerNoneOn_2xl:"pf-m-spacer-none-on-2xl",spacerXsOn_2xl:"pf-m-spacer-xs-on-2xl",spacerSmOn_2xl:"pf-m-spacer-sm-on-2xl",spacerMdOn_2xl:"pf-m-spacer-md-on-2xl",spacerLgOn_2xl:"pf-m-spacer-lg-on-2xl",spacerXlOn_2xl:"pf-m-spacer-xl-on-2xl",spacer_2xlOn_2xl:"pf-m-spacer-2xl-on-2xl",spacer_3xlOn_2xl:"pf-m-spacer-3xl-on-2xl"}}})));function Fy(){return(Fy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Hy=e=>{let{children:t=null,className:n="",breakpointMods:r=[]}=e,o=Ay(e,["children","className","breakpointMods"]);return l("div",Fy({className:h(By.flex,r.length>0&&oe(r,By),n)},o),t)};function zy(){return(zy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Hy.propTypes={children:n.node,className:n.string,breakpointMods:n.arrayOf(n.any)};const Xy=e=>{let{children:t=null,className:n="",breakpointMods:r=[]}=e,o=qy(e,["children","className","breakpointMods"]);return l("div",zy({},o,{className:h(r.length>0&&oe(r,By),n)}),t)};let Vy,Gy,Wy;Xy.propTypes={children:n.node,className:n.string,breakpointMods:n.arrayOf(n.any)},function(e){e.flex="flex",e["inline-flex"]="inline-flex",e["spacer-none"]="spacer-none",e["spacer-xs"]="spacer-xs",e["spacer-sm"]="spacer-sm",e["spacer-md"]="spacer-md",e["spacer-lg"]="spacer-lg",e["spacer-xl"]="spacer-xl",e["spacer-2xl"]="spacer-2xl",e["spacer-3xl"]="spacer-3xl",e["space-items-none"]="space-items-none",e["space-items-xs"]="space-items-xs",e["space-items-sm"]="space-items-sm",e["space-items-md"]="space-items-md",e["space-items-lg"]="space-items-lg",e["space-items-xl"]="space-items-xl",e["space-items-2xl"]="space-items-2xl",e["space-items-3xl"]="space-items-3xl",e.grow="grow",e.shrink="shrink",e["flex-1"]="flex-1",e["flex-2"]="flex-2",e["flex-3"]="flex-3",e["flex-4"]="flex-4",e["flex-default"]="flex-default",e["flex-none"]="flex-none",e.column="column",e["column-reverse"]="column-reverse",e.row="row",e["row-reverse"]="row-reverse",e.wrap="wrap",e["wrap-reverse"]="wrap-reverse",e.nowrap="nowrap",e["align-right"]="align-right",e["align-left"]="align-left",e["align-self-flex-start"]="align-self-flex-start",e["align-self-flex-end"]="align-self-flex-end",e["align-self-center"]="align-self-center",e["align-self-baseline"]="align-self-baseline",e["align-self-stretch"]="align-self-stretch",e["justify-content-flex-end"]="justify-content-flex-end",e["justify-content-center"]="justify-content-center",e["justify-content-space-between"]="justify-content-space-between",e["justify-content-space-around"]="justify-content-space-around",e["justify-content-space-evenly"]="justify-content-space-evenly",e["justify-content-flex-start"]="justify-content-flex-start",e["full-width"]="full-width",e["align-items-flex-start"]="align-items-flex-start",e["align-items-flex-end"]="align-items-flex-end",e["align-items-stretch"]="align-items-stretch",e["align-items-baseline"]="align-items-baseline",e["align-content-flex-start"]="align-content-flex-start",e["align-content-flex-end"]="align-content-flex-end",e["align-content-center"]="align-content-center",e["align-content-stretch"]="align-content-stretch",e["align-content-space-between"]="align-content-space-between",e["align-content-space-around"]="align-content-space-around"}(Vy||(Vy={})),function(e){e["spacer-none"]="spacer-none",e["spacer-xs"]="spacer-xs",e["spacer-sm"]="spacer-sm",e["spacer-md"]="spacer-md",e["spacer-lg"]="spacer-lg",e["spacer-xl"]="spacer-xl",e["spacer-2xl"]="spacer-2xl",e["spacer-3xl"]="spacer-3xl",e.grow="grow",e.shrink="shrink",e["flex-1"]="flex-1",e["flex-2"]="flex-2",e["flex-3"]="flex-3",e["flex-4"]="flex-4",e["flex-default"]="flex-default",e["flex-none"]="flex-none",e["align-right"]="align-right",e["align-left"]="align-left",e["align-self-flex-start"]="align-self-flex-start",e["align-self-flex-end"]="align-self-flex-end",e["align-self-center"]="align-self-center",e["align-self-baseline"]="align-self-baseline",e["align-self-stretch"]="align-self-stretch",e["full-width"]="full-width"}(Gy||(Gy={})),function(e){e.sm="sm",e.md="md",e.lg="lg",e.xl="xl",e["2xl"]="2xl"}(Wy||(Wy={}));var Ky=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={gallery:"pf-l-gallery",modifiers:{gutter:"pf-m-gutter"}}})));function Uy(){return(Uy=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const Yy=e=>{let{children:t=null,className:n="",gutter:r=null}=e,o=$y(e,["children","className","gutter"]);return l("div",Uy({className:h(Ky.gallery,r&&Ky.modifiers.gutter,n)},o),t)};function Jy(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}Yy.propTypes={children:n.node,className:n.string,gutter:n.oneOf(["sm","md","lg"])};const Zy=e=>{let{children:t=null}=e,n=Jy(e,["children"]);return l("div",n,t)};Zy.propTypes={children:n.node};var Qy=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={grid:"pf-l-grid",gridItem:"pf-l-grid__item",modifiers:{all_1Col:"pf-m-all-1-col",all_2Col:"pf-m-all-2-col",all_3Col:"pf-m-all-3-col",all_4Col:"pf-m-all-4-col",all_5Col:"pf-m-all-5-col",all_6Col:"pf-m-all-6-col",all_7Col:"pf-m-all-7-col",all_8Col:"pf-m-all-8-col",all_9Col:"pf-m-all-9-col",all_10Col:"pf-m-all-10-col",all_11Col:"pf-m-all-11-col",all_12Col:"pf-m-all-12-col",all_1ColOnSm:"pf-m-all-1-col-on-sm",all_2ColOnSm:"pf-m-all-2-col-on-sm",all_3ColOnSm:"pf-m-all-3-col-on-sm",all_4ColOnSm:"pf-m-all-4-col-on-sm",all_5ColOnSm:"pf-m-all-5-col-on-sm",all_6ColOnSm:"pf-m-all-6-col-on-sm",all_7ColOnSm:"pf-m-all-7-col-on-sm",all_8ColOnSm:"pf-m-all-8-col-on-sm",all_9ColOnSm:"pf-m-all-9-col-on-sm",all_10ColOnSm:"pf-m-all-10-col-on-sm",all_11ColOnSm:"pf-m-all-11-col-on-sm",all_12ColOnSm:"pf-m-all-12-col-on-sm",all_1ColOnMd:"pf-m-all-1-col-on-md",all_2ColOnMd:"pf-m-all-2-col-on-md",all_3ColOnMd:"pf-m-all-3-col-on-md",all_4ColOnMd:"pf-m-all-4-col-on-md",all_5ColOnMd:"pf-m-all-5-col-on-md",all_6ColOnMd:"pf-m-all-6-col-on-md",all_7ColOnMd:"pf-m-all-7-col-on-md",all_8ColOnMd:"pf-m-all-8-col-on-md",all_9ColOnMd:"pf-m-all-9-col-on-md",all_10ColOnMd:"pf-m-all-10-col-on-md",all_11ColOnMd:"pf-m-all-11-col-on-md",all_12ColOnMd:"pf-m-all-12-col-on-md",all_1ColOnLg:"pf-m-all-1-col-on-lg",all_2ColOnLg:"pf-m-all-2-col-on-lg",all_3ColOnLg:"pf-m-all-3-col-on-lg",all_4ColOnLg:"pf-m-all-4-col-on-lg",all_5ColOnLg:"pf-m-all-5-col-on-lg",all_6ColOnLg:"pf-m-all-6-col-on-lg",all_7ColOnLg:"pf-m-all-7-col-on-lg",all_8ColOnLg:"pf-m-all-8-col-on-lg",all_9ColOnLg:"pf-m-all-9-col-on-lg",all_10ColOnLg:"pf-m-all-10-col-on-lg",all_11ColOnLg:"pf-m-all-11-col-on-lg",all_12ColOnLg:"pf-m-all-12-col-on-lg",all_1ColOnXl:"pf-m-all-1-col-on-xl",all_2ColOnXl:"pf-m-all-2-col-on-xl",all_3ColOnXl:"pf-m-all-3-col-on-xl",all_4ColOnXl:"pf-m-all-4-col-on-xl",all_5ColOnXl:"pf-m-all-5-col-on-xl",all_6ColOnXl:"pf-m-all-6-col-on-xl",all_7ColOnXl:"pf-m-all-7-col-on-xl",all_8ColOnXl:"pf-m-all-8-col-on-xl",all_9ColOnXl:"pf-m-all-9-col-on-xl",all_10ColOnXl:"pf-m-all-10-col-on-xl",all_11ColOnXl:"pf-m-all-11-col-on-xl",all_12ColOnXl:"pf-m-all-12-col-on-xl",all_1ColOn_2xl:"pf-m-all-1-col-on-2xl",all_2ColOn_2xl:"pf-m-all-2-col-on-2xl",all_3ColOn_2xl:"pf-m-all-3-col-on-2xl",all_4ColOn_2xl:"pf-m-all-4-col-on-2xl",all_5ColOn_2xl:"pf-m-all-5-col-on-2xl",all_6ColOn_2xl:"pf-m-all-6-col-on-2xl",all_7ColOn_2xl:"pf-m-all-7-col-on-2xl",all_8ColOn_2xl:"pf-m-all-8-col-on-2xl",all_9ColOn_2xl:"pf-m-all-9-col-on-2xl",all_10ColOn_2xl:"pf-m-all-10-col-on-2xl",all_11ColOn_2xl:"pf-m-all-11-col-on-2xl",all_12ColOn_2xl:"pf-m-all-12-col-on-2xl","1Col":"pf-m-1-col","2Col":"pf-m-2-col","3Col":"pf-m-3-col","4Col":"pf-m-4-col","5Col":"pf-m-5-col","6Col":"pf-m-6-col","7Col":"pf-m-7-col","8Col":"pf-m-8-col","9Col":"pf-m-9-col","10Col":"pf-m-10-col","11Col":"pf-m-11-col","12Col":"pf-m-12-col",offset_1Col:"pf-m-offset-1-col",offset_2Col:"pf-m-offset-2-col",offset_3Col:"pf-m-offset-3-col",offset_4Col:"pf-m-offset-4-col",offset_5Col:"pf-m-offset-5-col",offset_6Col:"pf-m-offset-6-col",offset_7Col:"pf-m-offset-7-col",offset_8Col:"pf-m-offset-8-col",offset_9Col:"pf-m-offset-9-col",offset_10Col:"pf-m-offset-10-col",offset_11Col:"pf-m-offset-11-col",offset_12Col:"pf-m-offset-12-col","1Row":"pf-m-1-row","2Row":"pf-m-2-row","3Row":"pf-m-3-row","4Row":"pf-m-4-row","5Row":"pf-m-5-row","6Row":"pf-m-6-row","7Row":"pf-m-7-row","8Row":"pf-m-8-row","9Row":"pf-m-9-row","10Row":"pf-m-10-row","11Row":"pf-m-11-row","12Row":"pf-m-12-row","1ColOnSm":"pf-m-1-col-on-sm","2ColOnSm":"pf-m-2-col-on-sm","3ColOnSm":"pf-m-3-col-on-sm","4ColOnSm":"pf-m-4-col-on-sm","5ColOnSm":"pf-m-5-col-on-sm","6ColOnSm":"pf-m-6-col-on-sm","7ColOnSm":"pf-m-7-col-on-sm","8ColOnSm":"pf-m-8-col-on-sm","9ColOnSm":"pf-m-9-col-on-sm","10ColOnSm":"pf-m-10-col-on-sm","11ColOnSm":"pf-m-11-col-on-sm","12ColOnSm":"pf-m-12-col-on-sm",offset_1ColOnSm:"pf-m-offset-1-col-on-sm",offset_2ColOnSm:"pf-m-offset-2-col-on-sm",offset_3ColOnSm:"pf-m-offset-3-col-on-sm",offset_4ColOnSm:"pf-m-offset-4-col-on-sm",offset_5ColOnSm:"pf-m-offset-5-col-on-sm",offset_6ColOnSm:"pf-m-offset-6-col-on-sm",offset_7ColOnSm:"pf-m-offset-7-col-on-sm",offset_8ColOnSm:"pf-m-offset-8-col-on-sm",offset_9ColOnSm:"pf-m-offset-9-col-on-sm",offset_10ColOnSm:"pf-m-offset-10-col-on-sm",offset_11ColOnSm:"pf-m-offset-11-col-on-sm",offset_12ColOnSm:"pf-m-offset-12-col-on-sm","1RowOnSm":"pf-m-1-row-on-sm","2RowOnSm":"pf-m-2-row-on-sm","3RowOnSm":"pf-m-3-row-on-sm","4RowOnSm":"pf-m-4-row-on-sm","5RowOnSm":"pf-m-5-row-on-sm","6RowOnSm":"pf-m-6-row-on-sm","7RowOnSm":"pf-m-7-row-on-sm","8RowOnSm":"pf-m-8-row-on-sm","9RowOnSm":"pf-m-9-row-on-sm","10RowOnSm":"pf-m-10-row-on-sm","11RowOnSm":"pf-m-11-row-on-sm","12RowOnSm":"pf-m-12-row-on-sm","1ColOnMd":"pf-m-1-col-on-md","2ColOnMd":"pf-m-2-col-on-md","3ColOnMd":"pf-m-3-col-on-md","4ColOnMd":"pf-m-4-col-on-md","5ColOnMd":"pf-m-5-col-on-md","6ColOnMd":"pf-m-6-col-on-md","7ColOnMd":"pf-m-7-col-on-md","8ColOnMd":"pf-m-8-col-on-md","9ColOnMd":"pf-m-9-col-on-md","10ColOnMd":"pf-m-10-col-on-md","11ColOnMd":"pf-m-11-col-on-md","12ColOnMd":"pf-m-12-col-on-md",offset_1ColOnMd:"pf-m-offset-1-col-on-md",offset_2ColOnMd:"pf-m-offset-2-col-on-md",offset_3ColOnMd:"pf-m-offset-3-col-on-md",offset_4ColOnMd:"pf-m-offset-4-col-on-md",offset_5ColOnMd:"pf-m-offset-5-col-on-md",offset_6ColOnMd:"pf-m-offset-6-col-on-md",offset_7ColOnMd:"pf-m-offset-7-col-on-md",offset_8ColOnMd:"pf-m-offset-8-col-on-md",offset_9ColOnMd:"pf-m-offset-9-col-on-md",offset_10ColOnMd:"pf-m-offset-10-col-on-md",offset_11ColOnMd:"pf-m-offset-11-col-on-md",offset_12ColOnMd:"pf-m-offset-12-col-on-md","1RowOnMd":"pf-m-1-row-on-md","2RowOnMd":"pf-m-2-row-on-md","3RowOnMd":"pf-m-3-row-on-md","4RowOnMd":"pf-m-4-row-on-md","5RowOnMd":"pf-m-5-row-on-md","6RowOnMd":"pf-m-6-row-on-md","7RowOnMd":"pf-m-7-row-on-md","8RowOnMd":"pf-m-8-row-on-md","9RowOnMd":"pf-m-9-row-on-md","10RowOnMd":"pf-m-10-row-on-md","11RowOnMd":"pf-m-11-row-on-md","12RowOnMd":"pf-m-12-row-on-md","1ColOnLg":"pf-m-1-col-on-lg","2ColOnLg":"pf-m-2-col-on-lg","3ColOnLg":"pf-m-3-col-on-lg","4ColOnLg":"pf-m-4-col-on-lg","5ColOnLg":"pf-m-5-col-on-lg","6ColOnLg":"pf-m-6-col-on-lg","7ColOnLg":"pf-m-7-col-on-lg","8ColOnLg":"pf-m-8-col-on-lg","9ColOnLg":"pf-m-9-col-on-lg","10ColOnLg":"pf-m-10-col-on-lg","11ColOnLg":"pf-m-11-col-on-lg","12ColOnLg":"pf-m-12-col-on-lg",offset_1ColOnLg:"pf-m-offset-1-col-on-lg",offset_2ColOnLg:"pf-m-offset-2-col-on-lg",offset_3ColOnLg:"pf-m-offset-3-col-on-lg",offset_4ColOnLg:"pf-m-offset-4-col-on-lg",offset_5ColOnLg:"pf-m-offset-5-col-on-lg",offset_6ColOnLg:"pf-m-offset-6-col-on-lg",offset_7ColOnLg:"pf-m-offset-7-col-on-lg",offset_8ColOnLg:"pf-m-offset-8-col-on-lg",offset_9ColOnLg:"pf-m-offset-9-col-on-lg",offset_10ColOnLg:"pf-m-offset-10-col-on-lg",offset_11ColOnLg:"pf-m-offset-11-col-on-lg",offset_12ColOnLg:"pf-m-offset-12-col-on-lg","1RowOnLg":"pf-m-1-row-on-lg","2RowOnLg":"pf-m-2-row-on-lg","3RowOnLg":"pf-m-3-row-on-lg","4RowOnLg":"pf-m-4-row-on-lg","5RowOnLg":"pf-m-5-row-on-lg","6RowOnLg":"pf-m-6-row-on-lg","7RowOnLg":"pf-m-7-row-on-lg","8RowOnLg":"pf-m-8-row-on-lg","9RowOnLg":"pf-m-9-row-on-lg","10RowOnLg":"pf-m-10-row-on-lg","11RowOnLg":"pf-m-11-row-on-lg","12RowOnLg":"pf-m-12-row-on-lg","1ColOnXl":"pf-m-1-col-on-xl","2ColOnXl":"pf-m-2-col-on-xl","3ColOnXl":"pf-m-3-col-on-xl","4ColOnXl":"pf-m-4-col-on-xl","5ColOnXl":"pf-m-5-col-on-xl","6ColOnXl":"pf-m-6-col-on-xl","7ColOnXl":"pf-m-7-col-on-xl","8ColOnXl":"pf-m-8-col-on-xl","9ColOnXl":"pf-m-9-col-on-xl","10ColOnXl":"pf-m-10-col-on-xl","11ColOnXl":"pf-m-11-col-on-xl","12ColOnXl":"pf-m-12-col-on-xl",offset_1ColOnXl:"pf-m-offset-1-col-on-xl",offset_2ColOnXl:"pf-m-offset-2-col-on-xl",offset_3ColOnXl:"pf-m-offset-3-col-on-xl",offset_4ColOnXl:"pf-m-offset-4-col-on-xl",offset_5ColOnXl:"pf-m-offset-5-col-on-xl",offset_6ColOnXl:"pf-m-offset-6-col-on-xl",offset_7ColOnXl:"pf-m-offset-7-col-on-xl",offset_8ColOnXl:"pf-m-offset-8-col-on-xl",offset_9ColOnXl:"pf-m-offset-9-col-on-xl",offset_10ColOnXl:"pf-m-offset-10-col-on-xl",offset_11ColOnXl:"pf-m-offset-11-col-on-xl",offset_12ColOnXl:"pf-m-offset-12-col-on-xl","1RowOnXl":"pf-m-1-row-on-xl","2RowOnXl":"pf-m-2-row-on-xl","3RowOnXl":"pf-m-3-row-on-xl","4RowOnXl":"pf-m-4-row-on-xl","5RowOnXl":"pf-m-5-row-on-xl","6RowOnXl":"pf-m-6-row-on-xl","7RowOnXl":"pf-m-7-row-on-xl","8RowOnXl":"pf-m-8-row-on-xl","9RowOnXl":"pf-m-9-row-on-xl","10RowOnXl":"pf-m-10-row-on-xl","11RowOnXl":"pf-m-11-row-on-xl","12RowOnXl":"pf-m-12-row-on-xl","1ColOn_2xl":"pf-m-1-col-on-2xl","2ColOn_2xl":"pf-m-2-col-on-2xl","3ColOn_2xl":"pf-m-3-col-on-2xl","4ColOn_2xl":"pf-m-4-col-on-2xl","5ColOn_2xl":"pf-m-5-col-on-2xl","6ColOn_2xl":"pf-m-6-col-on-2xl","7ColOn_2xl":"pf-m-7-col-on-2xl","8ColOn_2xl":"pf-m-8-col-on-2xl","9ColOn_2xl":"pf-m-9-col-on-2xl","10ColOn_2xl":"pf-m-10-col-on-2xl","11ColOn_2xl":"pf-m-11-col-on-2xl","12ColOn_2xl":"pf-m-12-col-on-2xl",offset_1ColOn_2xl:"pf-m-offset-1-col-on-2xl",offset_2ColOn_2xl:"pf-m-offset-2-col-on-2xl",offset_3ColOn_2xl:"pf-m-offset-3-col-on-2xl",offset_4ColOn_2xl:"pf-m-offset-4-col-on-2xl",offset_5ColOn_2xl:"pf-m-offset-5-col-on-2xl",offset_6ColOn_2xl:"pf-m-offset-6-col-on-2xl",offset_7ColOn_2xl:"pf-m-offset-7-col-on-2xl",offset_8ColOn_2xl:"pf-m-offset-8-col-on-2xl",offset_9ColOn_2xl:"pf-m-offset-9-col-on-2xl",offset_10ColOn_2xl:"pf-m-offset-10-col-on-2xl",offset_11ColOn_2xl:"pf-m-offset-11-col-on-2xl",offset_12ColOn_2xl:"pf-m-offset-12-col-on-2xl","1RowOn_2xl":"pf-m-1-row-on-2xl","2RowOn_2xl":"pf-m-2-row-on-2xl","3RowOn_2xl":"pf-m-3-row-on-2xl","4RowOn_2xl":"pf-m-4-row-on-2xl","5RowOn_2xl":"pf-m-5-row-on-2xl","6RowOn_2xl":"pf-m-6-row-on-2xl","7RowOn_2xl":"pf-m-7-row-on-2xl","8RowOn_2xl":"pf-m-8-row-on-2xl","9RowOn_2xl":"pf-m-9-row-on-2xl","10RowOn_2xl":"pf-m-10-row-on-2xl","11RowOn_2xl":"pf-m-11-row-on-2xl","12RowOn_2xl":"pf-m-12-row-on-2xl",gutter:"pf-m-gutter"}}})));function eO(){return(eO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const nO=e=>{let{children:t=null,className:n="",gutter:r=null,span:o=null}=e,i=tO(e,["children","className","gutter","span"]);const a=[Qy.grid,o&&g(Qy,`all_${o}Col`)];return Object.entries(ye).forEach(([e,t])=>{const n=e,r=i[n];r&&a.push(g(Qy,`all_${r}ColOn${t}`)),delete i[n]}),l("div",eO({className:h(...a,r&&Qy.modifiers.gutter,n)},i),t)};function rO(){return(rO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}nO.propTypes={children:n.node,className:n.string,gutter:n.oneOf(["sm","md","lg"]),span:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),sm:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),md:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),lg:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl2:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12])};const iO=e=>{let{children:t=null,className:n="",span:r=null,rowSpan:o=null,offset:i=null}=e,a=oO(e,["children","className","span","rowSpan","offset"]);const s=[Qy.gridItem,r&&g(Qy,r+"Col"),o&&g(Qy,o+"Row"),i&&g(Qy,`offset_${i}Col`)];return Object.entries(ye).forEach(([e,t])=>{const n=e,r=n+"RowSpan",o=n+"Offset",i=a[n],l=a[r],c=a[o];i&&s.push(g(Qy,`${i}ColOn${t}`)),l&&s.push(g(Qy,`${l}RowOn${t}`)),c&&s.push(g(Qy,`offset_${c}ColOn${t}`)),delete a[n],delete a[r],delete a[o]}),l("div",rO({className:h(...s,n)},a),t)};iO.propTypes={children:n.node,className:n.string,span:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),rowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),offset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),sm:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),smRowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),smOffset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),md:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),mdRowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),mdOffset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),lg:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),lgRowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),lgOffset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xlRowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xlOffset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl2:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl2RowSpan:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12]),xl2Offset:n.oneOf([1,2,3,4,5,6,7,8,9,10,11,12])};var lO=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={level:"pf-l-level",modifiers:{gutter:"pf-m-gutter"}}})));const aO={sm:"sm",md:"md",lg:"lg"};function sO(e,t,n){return g(e,"gutter-"+t,n)}function cO(){return(cO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const uO=e=>{let{gutter:t=null,className:n="",children:r=null}=e,o=pO(e,["gutter","className","children"]);return l("div",cO({},o,{className:h(lO.level,t&&sO(lO,t,lO.modifiers.gutter),n)}),r)};function fO(e,t){if(null==e)return{};var n,r,o=function(e,t){if(null==e)return{};var n,r,o={},i=Object.keys(e);for(r=0;r=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}uO.propTypes={gutter:n.oneOf(["sm","md","lg"]),className:n.string,children:n.node};const dO=e=>{let{children:t=null}=e,n=fO(e,["children"]);return l("div",n,t)};dO.propTypes={children:n.node};var mO=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={split:"pf-l-split",splitItem:"pf-l-split__item",modifiers:{fill:"pf-m-fill",gutter:"pf-m-gutter"}}})));function gO(){return(gO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const bO=e=>{let{gutter:t=null,className:n="",children:r=null,component:o="div"}=e,i=hO(e,["gutter","className","children","component"]);return l(o,gO({},i,{className:h(mO.split,t&&sO(mO,t,mO.modifiers.gutter),n)}),r)};function yO(){return(yO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}bO.propTypes={gutter:n.oneOf(["sm","md","lg"]),children:n.node,className:n.string,component:n.node};const vO=e=>{let{isFilled:t=!1,className:n="",children:r=null}=e,o=OO(e,["isFilled","className","children"]);return l("div",yO({},o,{className:h(mO.splitItem,t&&mO.modifiers.fill,n)}),r)};vO.propTypes={isFilled:n.bool,children:n.node,className:n.string};var xO=e(t((function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.default={stack:"pf-l-stack",stackItem:"pf-l-stack__item",modifiers:{fill:"pf-m-fill",gutter:"pf-m-gutter"}}})));function wO(){return(wO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}const jO=e=>{let{gutter:t=null,className:n="",children:r=null,component:o="div"}=e,i=CO(e,["gutter","className","children","component"]);return l(o,wO({},i,{className:h(xO.stack,t&&sO(xO,t,xO.modifiers.gutter),n)}),r)};function PO(){return(PO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}jO.propTypes={gutter:n.oneOf(["sm","md","lg"]),children:n.node,className:n.string,component:n.node};const NO=e=>{let{isFilled:t=!1,className:n="",children:r=null}=e,o=SO(e,["isFilled","className","children"]);return l("div",PO({},o,{className:h(xO.stackItem,t&&xO.modifiers.fill,n)}),r)};function TO(){return(TO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}NO.propTypes={isFilled:n.bool,children:n.node,className:n.string};const kO=e=>{let{children:t=null,className:n=null}=e,r=_O(e,["children","className"]);return l("div",TO({},r,{className:h("pf-l-toolbar",n)}),t)};function IO(){return(IO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}kO.propTypes={children:n.node,className:n.string};const EO=e=>{let{children:t=null,className:n=null}=e,r=LO(e,["children","className"]);return l("div",IO({},r,{className:h("pf-l-toolbar__item",n)}),t)};function MO(){return(MO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}EO.propTypes={children:n.node,className:n.string};const DO=e=>{let{children:t=null,className:n=null}=e,r=RO(e,["children","className"]);return l("div",MO({},r,{className:h("pf-l-toolbar__group",n)}),t)};function BO(){return(BO=Object.assign||function(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}DO.propTypes={children:n.node,className:n.string};const AO=e=>{let{children:t=null,className:n=null,"aria-label":r}=e,o=FO(e,["children","className","aria-label"]);if(!r)throw new Error("ToolbarSection requires aria-label to be specified");return l("section",BO({},o,{className:h("pf-l-toolbar__section",n)}),t)};AO.propTypes={children:n.node,className:n.string,"aria-label":n.string};export{U as ASTERISK,ct as AboutModal,mt as Accordion,yt as AccordionContent,gt as AccordionItem,Ct as AccordionToggle,Ru as ActionGroup,Gt as Alert,Ut as AlertActionCloseButton,Jt as AlertActionLink,Ht as AlertContext,rn as AlertGroup,Xt as AlertVariant,Qi as ApplicationLauncher,Xi as ApplicationLauncherContent,Vi as ApplicationLauncherContext,Ii as ApplicationLauncherGroup,Di as ApplicationLauncherIcon,$i as ApplicationLauncherItem,qi as ApplicationLauncherItemContext,Ei as ApplicationLauncherSeparator,Ai as ApplicationLauncherText,rl as Avatar,nt as Backdrop,ml as BackgroundImage,fl as BackgroundImageSrc,yl as Badge,be as BaseSizes,xl as Brand,Sl as Breadcrumb,Ll as BreadcrumbHeading,_l as BreadcrumbItem,Kh as Bullseye,Xe as Button,ze as ButtonType,He as ButtonVariant,Dl as Card,Al as CardActions,ql as CardBody,Gl as CardFooter,Jl as CardHead,ea as CardHeadMain,Ul as CardHeader,la as Checkbox,Vc as CheckboxSelectGroup,Uc as CheckboxSelectOption,ba as Chip,xa as ChipGroup,va as ChipGroupContext,Sa as ChipGroupToolbarItem,Ja as ClipboardCopy,Ya as ClipboardCopyVariant,Bs as ContextSelector,zs as ContextSelectorItem,Ws as DataList,Qs as DataListAction,Zs as DataListActionVisibility,nc as DataListCell,ic as DataListCheck,cp as DataListContent,Gs as DataListContext,Jc as DataListItem,ep as DataListItemCells,rp as DataListItemRow,lp as DataListToggle,py as DataToolbar,yy as DataToolbarContent,xy as DataToolbarFilter,ty as DataToolbarGroup,Qb as DataToolbarGroupVariant,$b as DataToolbarItem,Ub as DataToolbarItemVariant,Py as DataToolbarToggleGroup,ye as DeviceSizes,Lc as Divider,Ic as DividerVariant,fb as Drawer,gb as DrawerActions,yb as DrawerCloseButton,jb as DrawerContent,Nb as DrawerContentBody,ub as DrawerContext,Eb as DrawerHead,kb as DrawerPanelBody,Db as DrawerPanelContent,Ab as DrawerSection,Pn as Dropdown,dn as DropdownArrowContext,fn as DropdownContext,un as DropdownDirection,Sn as DropdownGroup,ti as DropdownItem,oi as DropdownItemIcon,yn as DropdownMenu,pn as DropdownPosition,ai as DropdownSeparator,xi as DropdownToggle,_i as DropdownToggleAction,Pi as DropdownToggleCheckbox,Cn as DropdownWithContext,gp as EmptyState,yp as EmptyStateBody,wp as EmptyStateIcon,Tp as EmptyStatePrimary,Pp as EmptyStateSecondaryActions,dp as EmptyStateVariant,Ep as Expandable,Iu as FileUpload,Xp as FileUploadField,Hy as Flex,Wy as FlexBreakpoints,Xy as FlexItem,Gy as FlexItemModifiers,Vy as FlexModifiers,V as FocusTrap,Fu as Form,zu as FormGroup,Vu as FormHelperText,ms as FormSelect,bs as FormSelectOption,vs as FormSelectOptionGroup,Yy as Gallery,Zy as GalleryItem,K as GenerateId,nO as Grid,iO as GridItem,aO as GutterSize,xp as IconSize,Ts as InputGroup,Is as InputGroupText,w as KEYHANDLER_DIRECTION,v as KEY_CODES,hi as KebabToggle,gc as KeyTypes,Uu as Label,uO as Level,dO as LevelItem,tf as List,ef as ListComponent,rf as ListItem,Qu as ListVariant,sf as Login,mf as LoginFooter,Lf as LoginFooterItem,_f as LoginForm,uf as LoginHeader,vf as LoginMainBody,Cf as LoginMainFooter,Rf as LoginMainFooterBandItem,Ff as LoginMainFooterLinksItem,bf as LoginMainHeader,Sf as LoginPage,pd as Modal,Jf as ModalBox,qf as ModalBoxBody,Uf as ModalBoxCloseButton,ed as ModalBoxFooter,Gf as ModalBoxHeader,ld as ModalContent,bd as Nav,gd as NavContext,Bd as NavExpandable,Nd as NavGroup,kd as NavItem,Ed as NavItemSeparator,jd as NavList,yd as NavVariants,zd as NotificationBadge,Kd as OptionsMenu,Wd as OptionsMenuDirection,nm as OptionsMenuItem,Qd as OptionsMenuItemGroup,Gd as OptionsMenuPosition,im as OptionsMenuSeparator,Yd as OptionsMenuToggle,sm as OptionsMenuToggleWithText,Zu as OrderType,Le as OuiaContext,Iy as OverflowMenu,Ey as OverflowMenuContent,Ly as OverflowMenuControl,Dy as OverflowMenuDropdownItem,My as OverflowMenuGroup,Ry as OverflowMenuItem,ym as Page,bm as PageContextConsumer,hm as PageContextProvider,Cm as PageHeader,mm as PageLayouts,Im as PageSection,km as PageSectionTypes,_m as PageSectionVariants,Sm as PageSidebar,tg as Pagination,Ym as PaginationVariant,Cg as Popover,wg as PopoverPosition,Bg as Progress,Ng as ProgressBar,Ig as ProgressContainer,Tg as ProgressMeasureLocation,Dg as ProgressSize,_g as ProgressVariant,qg as Radio,x as SIDE,Fc as Select,fc as SelectConsumer,pc as SelectContext,mc as SelectDirection,zc as SelectGroup,Oc as SelectOption,uc as SelectProvider,dc as SelectVariant,Jg as SimpleList,Yg as SimpleListContext,Wg as SimpleListGroup,th as SimpleListItem,lh as SkipToContent,Ap as Spinner,bO as Split,vO as SplitItem,jO as Stack,NO as StackItem,fh as Switch,dh as Tab,wh as TabContent,Th as Tabs,Sh as TabsVariant,Rh as Text,js as TextAreResizeOrientation,Ps as TextArea,Ih as TextContent,Ea as TextInput,La as TextInputBase,Ia as TextInputTypes,Ah as TextList,Xh as TextListItem,qh as TextListItemVariants,Fh as TextListVariants,Mh as TextVariants,he as Title,ge as TitleLevel,be as TitleSize,Lm as ToggleTemplate,kO as Toolbar,DO as ToolbarGroup,EO as ToolbarItem,AO as ToolbarSection,Ko as Tooltip,Wo as TooltipPosition,C as ValidatedOptions,lb as Wizard,Yh as WizardBody,nb as WizardContextConsumer,tb as WizardContextProvider,ab as WizardFooter,Uh as WizardHeader,Zh as WizardNav,Qh as WizardNavItem,Jh as WizardToggle,ie as canUseDOM,$ as capitalize,$a as clipboardCopyFunc,J as debounce,ee as fillTemplate,oe as formatBreakpointMods,ne as getNextIndex,Y as getUniqueId,Z as isElementInView,te as keyHandler,re as pluralize,Q as sideElementIsOutOfView,Fp as spinnerSize,Ee as withOuiaContext}; -//# sourceMappingURL=react-core.js.map diff --git a/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js.map b/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js.map deleted file mode 100644 index fb31abca0..000000000 --- a/deps/keycloak/themes/keycloak/common/resources/web_modules/@patternfly/react-core.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"react-core.js","sources":["../../node_modules/@patternfly/react-styles/css/components/Backdrop/backdrop.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/constants.js","../../node_modules/tabbable/index.js","../../node_modules/focus-trap/node_modules/xtend/immutable.js","../../node_modules/focus-trap/index.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/FocusTrap/FocusTrap.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/GenerateId/GenerateId.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/htmlConstants.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/util.js","../../node_modules/@patternfly/react-styles/css/layouts/Bullseye/bullseye.js","../../node_modules/@patternfly/react-styles/css/components/AboutModalBox/about-modal-box.js","../../node_modules/@patternfly/react-styles/css/components/Content/content.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBoxContent.js","../../node_modules/@patternfly/react-styles/css/components/Title/title.js","../../node_modules/@patternfly/react-core/dist/esm/components/Title/Title.js","../../node_modules/@patternfly/react-core/dist/esm/styles/sizes.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBoxHeader.js","../../node_modules/@patternfly/react-tokens/dist/js/c_about_modal_box__hero_sm_BackgroundImage.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBoxHero.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBoxBrand.js","../../node_modules/@patternfly/react-styles/css/components/Button/button.js","../../node_modules/@patternfly/react-core/dist/esm/components/withOuia/ouia.js","../../node_modules/@patternfly/react-core/dist/esm/components/withOuia/withOuia.js","../../node_modules/@patternfly/react-core/dist/esm/components/Button/Button.js","../../node_modules/@patternfly/react-icons/dist/js/common.js","../../node_modules/@patternfly/react-icons/dist/js/createIcon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/times-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBoxCloseButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalBox.js","../../node_modules/@patternfly/react-core/dist/esm/components/Backdrop/Backdrop.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModalContainer.js","../../node_modules/@patternfly/react-core/dist/esm/components/AboutModal/AboutModal.js","../../node_modules/@patternfly/react-styles/css/components/Accordion/accordion.js","../../node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/Accordion/Accordion.js","../../node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionContent.js","../../node_modules/@patternfly/react-icons/dist/js/icons/angle-right-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Accordion/AccordionToggle.js","../../node_modules/@patternfly/react-styles/css/components/Alert/alert.js","../../node_modules/@patternfly/react-styles/css/utilities/Accessibility/accessibility.js","../../node_modules/@patternfly/react-icons/dist/js/icons/check-circle-icon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/exclamation-circle-icon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/exclamation-triangle-icon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/info-circle-icon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/bell-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Alert/AlertIcon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Alert/AlertContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/Alert/Alert.js","../../node_modules/@patternfly/react-core/dist/esm/components/Alert/AlertActionCloseButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/Alert/AlertActionLink.js","../../node_modules/@patternfly/react-styles/css/components/AlertGroup/alert-group.js","../../node_modules/@patternfly/react-core/dist/esm/components/AlertGroup/AlertGroupInline.js","../../node_modules/@patternfly/react-core/dist/esm/components/AlertGroup/AlertGroup.js","../../node_modules/@patternfly/react-styles/css/components/AppLauncher/app-launcher.js","../../node_modules/@patternfly/react-styles/css/components/FormControl/form-control.js","../../node_modules/@patternfly/react-icons/dist/js/icons/th-icon.js","../../node_modules/@patternfly/react-styles/css/components/Dropdown/dropdown.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/dropdownConstants.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownMenu.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownWithContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/Dropdown.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownGroup.js","../../node_modules/popper.js/dist/esm/popper.js","../../node_modules/tippy.js/dist/tippy.chunk.esm.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/PopoverBase/PopoverBase.js","../../node_modules/@patternfly/react-styles/css/components/Tooltip/tooltip.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tooltip/TooltipContent.js","../../node_modules/@patternfly/react-tokens/dist/js/c_tooltip_MaxWidth.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tooltip/Tooltip.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/InternalDropdownItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownItemIcon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownSeparator.js","../../node_modules/@patternfly/react-icons/dist/js/icons/ellipsis-v-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/Toggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/KebabToggle.js","../../node_modules/@patternfly/react-icons/dist/js/icons/caret-down-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggleCheckbox.js","../../node_modules/@patternfly/react-core/dist/esm/components/Dropdown/DropdownToggleAction.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherSeparator.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherIcon.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherText.js","../../node_modules/@patternfly/react-icons/dist/js/icons/external-link-alt-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherItemContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherContext.js","../../node_modules/@patternfly/react-icons/dist/js/icons/star-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncherItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/ApplicationLauncher/ApplicationLauncher.js","../../node_modules/@patternfly/react-styles/css/components/Avatar/avatar.js","../../node_modules/@patternfly/react-core/dist/esm/components/Avatar/Avatar.js","../../node_modules/@patternfly/react-styles/css/components/BackgroundImage/background-image.js","../../node_modules/@patternfly/react-tokens/dist/js/c_background_image_BackgroundImage.js","../../node_modules/@patternfly/react-tokens/dist/js/c_background_image_BackgroundImage_2x.js","../../node_modules/@patternfly/react-tokens/dist/js/c_background_image_BackgroundImage_sm.js","../../node_modules/@patternfly/react-tokens/dist/js/c_background_image_BackgroundImage_sm_2x.js","../../node_modules/@patternfly/react-tokens/dist/js/c_background_image_BackgroundImage_lg.js","../../node_modules/@patternfly/react-core/dist/esm/components/BackgroundImage/BackgroundImage.js","../../node_modules/@patternfly/react-styles/css/components/Badge/badge.js","../../node_modules/@patternfly/react-core/dist/esm/components/Badge/Badge.js","../../node_modules/@patternfly/react-core/dist/esm/components/Brand/Brand.js","../../node_modules/@patternfly/react-styles/css/components/Breadcrumb/breadcrumb.js","../../node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/Breadcrumb.js","../../node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/BreadcrumbItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Breadcrumb/BreadcrumbHeading.js","../../node_modules/@patternfly/react-styles/css/components/Card/card.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/Card.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardActions.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardFooter.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardHead.js","../../node_modules/@patternfly/react-core/dist/esm/components/Card/CardHeadMain.js","../../node_modules/@patternfly/react-styles/css/components/Check/check.js","../../node_modules/@patternfly/react-core/dist/esm/components/Checkbox/Checkbox.js","../../node_modules/@patternfly/react-styles/css/components/ChipGroup/chip-group.js","../../node_modules/@patternfly/react-core/dist/esm/components/ChipGroup/ChipButton.js","../../node_modules/@patternfly/react-icons/dist/js/icons/times-circle-icon.js","../../node_modules/@patternfly/react-styles/css/components/Chip/chip.js","../../node_modules/@patternfly/react-core/dist/esm/components/ChipGroup/Chip.js","../../node_modules/@patternfly/react-core/dist/esm/components/ChipGroup/ChipGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/ChipGroup/ChipGroupToolbarItem.js","../../node_modules/@patternfly/react-styles/css/components/ClipboardCopy/clipboard-copy.js","../../node_modules/@patternfly/react-core/dist/esm/components/TextInput/TextInput.js","../../node_modules/@patternfly/react-icons/dist/js/icons/copy-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.js","../../node_modules/@patternfly/react-core/dist/esm/components/ClipboardCopy/ClipboardCopy.js","../../node_modules/@patternfly/react-styles/css/components/ContextSelector/context-selector.js","../../node_modules/@patternfly/react-icons/dist/js/icons/search-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/ContextSelector/ContextSelectorToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/ContextSelector/ContextSelectorMenuList.js","../../node_modules/@patternfly/react-core/dist/esm/components/ContextSelector/contextSelectorConstants.js","../../node_modules/@patternfly/react-styles/css/components/InputGroup/input-group.js","../../node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelect.js","../../node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelectOption.js","../../node_modules/@patternfly/react-core/dist/esm/components/FormSelect/FormSelectOptionGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/TextArea/TextArea.js","../../node_modules/@patternfly/react-core/dist/esm/components/InputGroup/InputGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/InputGroup/InputGroupText.js","../../node_modules/@patternfly/react-core/dist/esm/components/ContextSelector/ContextSelector.js","../../node_modules/@patternfly/react-core/dist/esm/components/ContextSelector/ContextSelectorItem.js","../../node_modules/@patternfly/react-styles/css/components/DataList/data-list.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataList.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListAction.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListCell.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListCheck.js","../../node_modules/@patternfly/react-styles/css/components/Select/select.js","../../node_modules/@patternfly/react-styles/css/components/Form/form.js","../../node_modules/@patternfly/react-icons/dist/js/icons/check-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/selectConstants.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/SelectOption.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/SelectMenu.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/SelectToggle.js","../../node_modules/@patternfly/react-styles/css/components/Divider/divider.js","../../node_modules/@patternfly/react-core/dist/esm/components/Divider/Divider.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/Select.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/SelectGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/CheckboxSelectGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/Select/CheckboxSelectOption.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItemCells.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListItemRow.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataList/DataListContent.js","../../node_modules/@patternfly/react-styles/css/components/EmptyState/empty-state.js","../../node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyState.js","../../node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateIcon.js","../../node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStateSecondaryActions.js","../../node_modules/@patternfly/react-core/dist/esm/components/EmptyState/EmptyStatePrimary.js","../../node_modules/@patternfly/react-styles/css/components/Expandable/expandable.js","../../node_modules/@patternfly/react-core/dist/esm/components/Expandable/Expandable.js","../../node_modules/@patternfly/react-styles/css/components/FileUpload/file-upload.js","../../node_modules/@patternfly/react-styles/css/components/Spinner/spinner.js","../../node_modules/@patternfly/react-core/dist/esm/components/Spinner/Spinner.js","../../node_modules/@patternfly/react-core/dist/esm/helpers/fileUtils.js","../../node_modules/@patternfly/react-core/dist/esm/components/FileUpload/FileUploadField.js","../../node_modules/tslib/tslib.es6.js","../../node_modules/file-selector/dist/es5/file.js","../../node_modules/file-selector/dist/es5/file-selector.js","../../node_modules/attr-accept/dist/index.js","../../node_modules/react-dropzone/dist/es/utils/index.js","../../node_modules/react-dropzone/dist/es/index.js","../../node_modules/@patternfly/react-core/dist/esm/components/FileUpload/FileUpload.js","../../node_modules/@patternfly/react-core/dist/esm/components/Form/FormContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/Form/ActionGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/Form/Form.js","../../node_modules/@patternfly/react-core/dist/esm/components/Form/FormGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/Form/FormHelperText.js","../../node_modules/@patternfly/react-styles/css/components/Label/label.js","../../node_modules/@patternfly/react-core/dist/esm/components/Label/Label.js","../../node_modules/@patternfly/react-styles/css/components/List/list.js","../../node_modules/@patternfly/react-core/dist/esm/components/List/List.js","../../node_modules/@patternfly/react-core/dist/esm/components/List/ListItem.js","../../node_modules/@patternfly/react-styles/css/components/Login/login.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/Login.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginFooter.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginMainHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginMainBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginMainFooter.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginPage.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginForm.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginFooterItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginMainFooterBandItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/LoginPage/LoginMainFooterLinksItem.js","../../node_modules/@patternfly/react-styles/css/components/ModalBox/modal-box.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBoxBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBoxHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBoxCloseButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBox.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBoxFooter.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalBoxDescription.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/ModalContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Modal/Modal.js","../../node_modules/@patternfly/react-styles/css/components/Nav/nav.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/Nav.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavVariants.js","../../node_modules/@patternfly/react-icons/dist/js/icons/angle-left-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavList.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavItemSeparator.js","../../node_modules/@patternfly/react-core/dist/esm/components/Nav/NavExpandable.js","../../node_modules/@patternfly/react-styles/css/components/NotificationBadge/notification-badge.js","../../node_modules/@patternfly/react-core/dist/esm/components/NotificationBadge/NotificationBadge.js","../../node_modules/@patternfly/react-styles/css/components/OptionsMenu/options-menu.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenu.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenuToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenuItemGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenuItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenuSeparator.js","../../node_modules/@patternfly/react-core/dist/esm/components/OptionsMenu/OptionsMenuToggleWithText.js","../../node_modules/@patternfly/react-styles/css/components/Page/page.js","../../node_modules/@patternfly/react-tokens/dist/js/global_breakpoint_md.js","../../node_modules/@patternfly/react-core/dist/esm/components/Page/Page.js","../../node_modules/@patternfly/react-icons/dist/js/icons/bars-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Page/PageHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/Page/PageSidebar.js","../../node_modules/@patternfly/react-core/dist/esm/components/Page/PageSection.js","../../node_modules/@patternfly/react-core/dist/esm/components/Pagination/ToggleTemplate.js","../../node_modules/@patternfly/react-styles/css/components/Pagination/pagination.js","../../node_modules/@patternfly/react-icons/dist/js/icons/angle-double-left-icon.js","../../node_modules/@patternfly/react-icons/dist/js/icons/angle-double-right-icon.js","../../node_modules/@patternfly/react-core/dist/esm/components/Pagination/Navigation.js","../../node_modules/@patternfly/react-core/dist/esm/components/Pagination/OptionsToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/Pagination/PaginationOptionsMenu.js","../../node_modules/@patternfly/react-tokens/dist/esm/index.js","../../node_modules/@patternfly/react-core/dist/esm/components/Pagination/Pagination.js","../../node_modules/@patternfly/react-styles/css/components/Popover/popover.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/PopoverContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/PopoverBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/PopoverHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/PopoverFooter.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/PopoverCloseButton.js","../../node_modules/@patternfly/react-tokens/dist/js/c_popover_MaxWidth.js","../../node_modules/@patternfly/react-core/dist/esm/components/Popover/Popover.js","../../node_modules/@patternfly/react-styles/css/components/Progress/progress.js","../../node_modules/@patternfly/react-core/dist/esm/components/Progress/ProgressBar.js","../../node_modules/@patternfly/react-core/dist/esm/components/Progress/ProgressContainer.js","../../node_modules/@patternfly/react-core/dist/esm/components/Progress/Progress.js","../../node_modules/@patternfly/react-styles/css/components/Radio/radio.js","../../node_modules/@patternfly/react-core/dist/esm/components/Radio/Radio.js","../../node_modules/@patternfly/react-styles/css/components/SimpleList/simple-list.js","../../node_modules/@patternfly/react-core/dist/esm/components/SimpleList/SimpleListGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/SimpleList/SimpleList.js","../../node_modules/@patternfly/react-core/dist/esm/components/SimpleList/SimpleListItem.js","../../node_modules/@patternfly/react-styles/css/components/SkipToContent/skip-to-content.js","../../node_modules/@patternfly/react-core/dist/esm/components/SkipToContent/SkipToContent.js","../../node_modules/@patternfly/react-styles/css/components/Switch/switch.js","../../node_modules/@patternfly/react-core/dist/esm/components/Switch/Switch.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tabs/Tab.js","../../node_modules/@patternfly/react-styles/css/components/Tabs/tabs.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tabs/TabButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tabs/TabContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Tabs/Tabs.js","../../node_modules/@patternfly/react-core/dist/esm/components/Text/TextContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Text/Text.js","../../node_modules/@patternfly/react-core/dist/esm/components/Text/TextList.js","../../node_modules/@patternfly/react-core/dist/esm/components/Text/TextListItem.js","../../node_modules/@patternfly/react-styles/css/components/Wizard/wizard.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Bullseye/Bullseye.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardHeader.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardFooterInternal.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardToggle.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardNav.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardNavItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/Wizard.js","../../node_modules/@patternfly/react-core/dist/esm/components/Wizard/WizardFooter.js","../../node_modules/@patternfly/react-styles/css/components/Drawer/drawer.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/Drawer.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerActions.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerCloseButton.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerMain.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerContentBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerPanelBody.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerHead.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerPanelContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/Drawer/DrawerSection.js","../../node_modules/@patternfly/react-styles/css/components/DataToolbar/data-toolbar.js","../../node_modules/@patternfly/react-tokens/dist/js/global_breakpoint_lg.js","../../node_modules/@patternfly/react-tokens/dist/js/global_breakpoint_xl.js","../../node_modules/@patternfly/react-tokens/dist/js/global_breakpoint_2xl.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarUtils.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarChipGroupContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbar.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarExpandableContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarFilter.js","../../node_modules/@patternfly/react-core/dist/esm/components/DataToolbar/DataToolbarToggleGroup.js","../../node_modules/@patternfly/react-styles/css/components/OverflowMenu/overflow-menu.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuContext.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenu.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuControl.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuContent.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuGroup.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuItem.js","../../node_modules/@patternfly/react-core/dist/esm/components/OverflowMenu/OverflowMenuDropdownItem.js","../../node_modules/@patternfly/react-styles/css/layouts/Flex/flex.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Flex/Flex.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Flex/FlexItem.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Flex/FlexUtils.js","../../node_modules/@patternfly/react-styles/css/layouts/Gallery/gallery.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Gallery/Gallery.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Gallery/GalleryItem.js","../../node_modules/@patternfly/react-styles/css/layouts/Grid/grid.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Grid/Grid.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Grid/GridItem.js","../../node_modules/@patternfly/react-styles/css/layouts/Level/level.js","../../node_modules/@patternfly/react-core/dist/esm/styles/gutters.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Level/Level.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Level/LevelItem.js","../../node_modules/@patternfly/react-styles/css/layouts/Split/split.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Split/Split.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Split/SplitItem.js","../../node_modules/@patternfly/react-styles/css/layouts/Stack/stack.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Stack/Stack.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Stack/StackItem.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Toolbar/Toolbar.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Toolbar/ToolbarItem.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Toolbar/ToolbarGroup.js","../../node_modules/@patternfly/react-core/dist/esm/layouts/Toolbar/ToolbarSection.js"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./backdrop.css\");\nexports.default = {\n backdrop: 'pf-c-backdrop',\n backdropOpen: 'pf-c-backdrop__open',\n modifiers: {}\n};\n","export const KEY_CODES = {\n ARROW_UP: 38,\n ARROW_DOWN: 40,\n ESCAPE_KEY: 27,\n TAB: 9,\n ENTER: 13,\n SPACE: 32\n};\nexport const SIDE = {\n RIGHT: 'right',\n LEFT: 'left',\n BOTH: 'both',\n NONE: 'none'\n};\nexport const KEYHANDLER_DIRECTION = {\n UP: 'up',\n DOWN: 'down',\n RIGHT: 'right',\n LEFT: 'left'\n};\nexport let ValidatedOptions;\n\n(function (ValidatedOptions) {\n ValidatedOptions[\"success\"] = \"success\";\n ValidatedOptions[\"error\"] = \"error\";\n ValidatedOptions[\"default\"] = \"default\";\n})(ValidatedOptions || (ValidatedOptions = {}));\n//# sourceMappingURL=constants.js.map","var candidateSelectors = [\n 'input',\n 'select',\n 'textarea',\n 'a[href]',\n 'button',\n '[tabindex]',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable=\"false\"])',\n];\nvar candidateSelector = candidateSelectors.join(',');\n\nvar matches = typeof Element === 'undefined'\n ? function () {}\n : Element.prototype.matches || Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector;\n\nfunction tabbable(el, options) {\n options = options || {};\n\n var elementDocument = el.ownerDocument || el;\n var regularTabbables = [];\n var orderedTabbables = [];\n\n var untouchabilityChecker = new UntouchabilityChecker(elementDocument);\n var candidates = el.querySelectorAll(candidateSelector);\n\n if (options.includeContainer) {\n if (matches.call(el, candidateSelector)) {\n candidates = Array.prototype.slice.apply(candidates);\n candidates.unshift(el);\n }\n }\n\n var i, candidate, candidateTabindex;\n for (i = 0; i < candidates.length; i++) {\n candidate = candidates[i];\n\n if (!isNodeMatchingSelectorTabbable(candidate, untouchabilityChecker)) continue;\n\n candidateTabindex = getTabindex(candidate);\n if (candidateTabindex === 0) {\n regularTabbables.push(candidate);\n } else {\n orderedTabbables.push({\n documentOrder: i,\n tabIndex: candidateTabindex,\n node: candidate,\n });\n }\n }\n\n var tabbableNodes = orderedTabbables\n .sort(sortOrderedTabbables)\n .map(function(a) { return a.node })\n .concat(regularTabbables);\n\n return tabbableNodes;\n}\n\ntabbable.isTabbable = isTabbable;\ntabbable.isFocusable = isFocusable;\n\nfunction isNodeMatchingSelectorTabbable(node, untouchabilityChecker) {\n if (\n !isNodeMatchingSelectorFocusable(node, untouchabilityChecker)\n || isNonTabbableRadio(node)\n || getTabindex(node) < 0\n ) {\n return false;\n }\n return true;\n}\n\nfunction isTabbable(node, untouchabilityChecker) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, candidateSelector) === false) return false;\n return isNodeMatchingSelectorTabbable(node, untouchabilityChecker);\n}\n\nfunction isNodeMatchingSelectorFocusable(node, untouchabilityChecker) {\n untouchabilityChecker = untouchabilityChecker || new UntouchabilityChecker(node.ownerDocument || node);\n if (\n node.disabled\n || isHiddenInput(node)\n || untouchabilityChecker.isUntouchable(node)\n ) {\n return false;\n }\n return true;\n}\n\nvar focusableCandidateSelector = candidateSelectors.concat('iframe').join(',');\nfunction isFocusable(node, untouchabilityChecker) {\n if (!node) throw new Error('No node provided');\n if (matches.call(node, focusableCandidateSelector) === false) return false;\n return isNodeMatchingSelectorFocusable(node, untouchabilityChecker);\n}\n\nfunction getTabindex(node) {\n var tabindexAttr = parseInt(node.getAttribute('tabindex'), 10);\n if (!isNaN(tabindexAttr)) return tabindexAttr;\n // Browsers do not return `tabIndex` correctly for contentEditable nodes;\n // so if they don't have a tabindex attribute specifically set, assume it's 0.\n if (isContentEditable(node)) return 0;\n return node.tabIndex;\n}\n\nfunction sortOrderedTabbables(a, b) {\n return a.tabIndex === b.tabIndex ? a.documentOrder - b.documentOrder : a.tabIndex - b.tabIndex;\n}\n\n// Array.prototype.find not available in IE.\nfunction find(list, predicate) {\n for (var i = 0, length = list.length; i < length; i++) {\n if (predicate(list[i])) return list[i];\n }\n}\n\nfunction isContentEditable(node) {\n return node.contentEditable === 'true';\n}\n\nfunction isInput(node) {\n return node.tagName === 'INPUT';\n}\n\nfunction isHiddenInput(node) {\n return isInput(node) && node.type === 'hidden';\n}\n\nfunction isRadio(node) {\n return isInput(node) && node.type === 'radio';\n}\n\nfunction isNonTabbableRadio(node) {\n return isRadio(node) && !isTabbableRadio(node);\n}\n\nfunction getCheckedRadio(nodes) {\n for (var i = 0; i < nodes.length; i++) {\n if (nodes[i].checked) {\n return nodes[i];\n }\n }\n}\n\nfunction isTabbableRadio(node) {\n if (!node.name) return true;\n // This won't account for the edge case where you have radio groups with the same\n // in separate forms on the same page.\n var radioSet = node.ownerDocument.querySelectorAll('input[type=\"radio\"][name=\"' + node.name + '\"]');\n var checked = getCheckedRadio(radioSet);\n return !checked || checked === node;\n}\n\n// An element is \"untouchable\" if *it or one of its ancestors* has\n// `visibility: hidden` or `display: none`.\nfunction UntouchabilityChecker(elementDocument) {\n this.doc = elementDocument;\n // Node cache must be refreshed on every check, in case\n // the content of the element has changed. The cache contains tuples\n // mapping nodes to their boolean result.\n this.cache = [];\n}\n\n// getComputedStyle accurately reflects `visibility: hidden` of ancestors\n// but not `display: none`, so we need to recursively check parents.\nUntouchabilityChecker.prototype.hasDisplayNone = function hasDisplayNone(node, nodeComputedStyle) {\n if (node.nodeType !== Node.ELEMENT_NODE) return false;\n\n // Search for a cached result.\n var cached = find(this.cache, function(item) {\n return item === node;\n });\n if (cached) return cached[1];\n\n nodeComputedStyle = nodeComputedStyle || this.doc.defaultView.getComputedStyle(node);\n\n var result = false;\n\n if (nodeComputedStyle.display === 'none') {\n result = true;\n } else if (node.parentNode) {\n result = this.hasDisplayNone(node.parentNode);\n }\n\n this.cache.push([node, result]);\n\n return result;\n}\n\nUntouchabilityChecker.prototype.isUntouchable = function isUntouchable(node) {\n if (node === this.doc.documentElement) return false;\n var computedStyle = this.doc.defaultView.getComputedStyle(node);\n if (this.hasDisplayNone(node, computedStyle)) return true;\n return computedStyle.visibility === 'hidden';\n}\n\nmodule.exports = tabbable;\n","module.exports = extend\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction extend() {\n var target = {}\n\n for (var i = 0; i < arguments.length; i++) {\n var source = arguments[i]\n\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n target[key] = source[key]\n }\n }\n }\n\n return target\n}\n","var tabbable = require('tabbable');\nvar xtend = require('xtend');\n\nvar activeFocusTraps = (function() {\n var trapQueue = [];\n return {\n activateTrap: function(trap) {\n if (trapQueue.length > 0) {\n var activeTrap = trapQueue[trapQueue.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex === -1) {\n trapQueue.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapQueue.splice(trapIndex, 1);\n trapQueue.push(trap);\n }\n },\n\n deactivateTrap: function(trap) {\n var trapIndex = trapQueue.indexOf(trap);\n if (trapIndex !== -1) {\n trapQueue.splice(trapIndex, 1);\n }\n\n if (trapQueue.length > 0) {\n trapQueue[trapQueue.length - 1].unpause();\n }\n }\n };\n})();\n\nfunction focusTrap(element, userOptions) {\n var doc = document;\n var container =\n typeof element === 'string' ? doc.querySelector(element) : element;\n\n var config = xtend(\n {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true\n },\n userOptions\n );\n\n var state = {\n firstTabbableNode: null,\n lastTabbableNode: null,\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false\n };\n\n var trap = {\n activate: activate,\n deactivate: deactivate,\n pause: pause,\n unpause: unpause\n };\n\n return trap;\n\n function activate(activateOptions) {\n if (state.active) return;\n\n updateTabbableNodes();\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n var onActivate =\n activateOptions && activateOptions.onActivate\n ? activateOptions.onActivate\n : config.onActivate;\n if (onActivate) {\n onActivate();\n }\n\n addListeners();\n return trap;\n }\n\n function deactivate(deactivateOptions) {\n if (!state.active) return;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n\n activeFocusTraps.deactivateTrap(trap);\n\n var onDeactivate =\n deactivateOptions && deactivateOptions.onDeactivate !== undefined\n ? deactivateOptions.onDeactivate\n : config.onDeactivate;\n if (onDeactivate) {\n onDeactivate();\n }\n\n var returnFocus =\n deactivateOptions && deactivateOptions.returnFocus !== undefined\n ? deactivateOptions.returnFocus\n : config.returnFocusOnDeactivate;\n if (returnFocus) {\n delay(function() {\n tryFocus(state.nodeFocusedBeforeActivation);\n });\n }\n\n return trap;\n }\n\n function pause() {\n if (state.paused || !state.active) return;\n state.paused = true;\n removeListeners();\n }\n\n function unpause() {\n if (!state.paused || !state.active) return;\n state.paused = false;\n addListeners();\n }\n\n function addListeners() {\n if (!state.active) return;\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trap);\n\n updateTabbableNodes();\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n delay(function() {\n tryFocus(getInitialFocusNode());\n });\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, true);\n doc.addEventListener('touchstart', checkPointerDown, true);\n doc.addEventListener('click', checkClick, true);\n doc.addEventListener('keydown', checkKey, true);\n\n return trap;\n }\n\n function removeListeners() {\n if (!state.active) return;\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkKey, true);\n\n return trap;\n }\n\n function getNodeForOption(optionName) {\n var optionValue = config[optionName];\n var node = optionValue;\n if (!optionValue) {\n return null;\n }\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue);\n if (!node) {\n throw new Error('`' + optionName + '` refers to no known node');\n }\n }\n if (typeof optionValue === 'function') {\n node = optionValue();\n if (!node) {\n throw new Error('`' + optionName + '` did not return a node');\n }\n }\n return node;\n }\n\n function getInitialFocusNode() {\n var node;\n if (getNodeForOption('initialFocus') !== null) {\n node = getNodeForOption('initialFocus');\n } else if (container.contains(doc.activeElement)) {\n node = doc.activeElement;\n } else {\n node = state.firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error(\n \"You can't have a focus-trap without at least one focusable element\"\n );\n }\n\n return node;\n }\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n function checkPointerDown(e) {\n if (container.contains(e.target)) return;\n if (config.clickOutsideDeactivates) {\n deactivate({\n returnFocus: !tabbable.isFocusable(e.target)\n });\n } else {\n e.preventDefault();\n }\n }\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n function checkFocusIn(e) {\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (container.contains(e.target) || e.target instanceof Document) {\n return;\n }\n e.stopImmediatePropagation();\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n\n function checkKey(e) {\n if (config.escapeDeactivates !== false && isEscapeEvent(e)) {\n e.preventDefault();\n deactivate();\n return;\n }\n if (isTabEvent(e)) {\n checkTab(e);\n return;\n }\n }\n\n // Hijack Tab events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n function checkTab(e) {\n updateTabbableNodes();\n if (e.shiftKey && e.target === state.firstTabbableNode) {\n e.preventDefault();\n tryFocus(state.lastTabbableNode);\n return;\n }\n if (!e.shiftKey && e.target === state.lastTabbableNode) {\n e.preventDefault();\n tryFocus(state.firstTabbableNode);\n return;\n }\n }\n\n function checkClick(e) {\n if (config.clickOutsideDeactivates) return;\n if (container.contains(e.target)) return;\n e.preventDefault();\n e.stopImmediatePropagation();\n }\n\n function updateTabbableNodes() {\n var tabbableNodes = tabbable(container);\n state.firstTabbableNode = tabbableNodes[0] || getInitialFocusNode();\n state.lastTabbableNode =\n tabbableNodes[tabbableNodes.length - 1] || getInitialFocusNode();\n }\n\n function tryFocus(node) {\n if (node === doc.activeElement) return;\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus();\n state.mostRecentlyFocusedNode = node;\n if (isSelectableInput(node)) {\n node.select();\n }\n }\n}\n\nfunction isSelectableInput(node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n}\n\nfunction isEscapeEvent(e) {\n return e.key === 'Escape' || e.key === 'Esc' || e.keyCode === 27;\n}\n\nfunction isTabEvent(e) {\n return e.key === 'Tab' || e.keyCode === 9;\n}\n\nfunction delay(fn) {\n return setTimeout(fn, 0);\n}\n\nmodule.exports = focusTrap;\n","import _pt from \"prop-types\";\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport createFocusTrap from 'focus-trap';\nexport class FocusTrap extends React.Component {\n constructor(props) {\n super(props);\n\n _defineProperty(this, \"divRef\", React.createRef());\n\n if (typeof document !== 'undefined') {\n this.previouslyFocusedElement = document.activeElement;\n }\n }\n\n componentDidMount() {\n // We need to hijack the returnFocusOnDeactivate option,\n // because React can move focus into the element before we arrived at\n // this lifecycle hook (e.g. with autoFocus inputs). So the component\n // captures the previouslyFocusedElement in componentWillMount,\n // then (optionally) returns focus to it in componentWillUnmount.\n this.focusTrap = createFocusTrap(this.divRef.current, _objectSpread({}, this.props.focusTrapOptions, {\n returnFocusOnDeactivate: false\n }));\n\n if (this.props.active) {\n this.focusTrap.activate();\n }\n\n if (this.props.paused) {\n this.focusTrap.pause();\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.active && !this.props.active) {\n const {\n returnFocusOnDeactivate\n } = this.props.focusTrapOptions;\n const returnFocus = returnFocusOnDeactivate || false;\n const config = {\n returnFocus\n };\n this.focusTrap.deactivate(config);\n } else if (!prevProps.active && this.props.active) {\n this.focusTrap.activate();\n }\n\n if (prevProps.paused && !this.props.paused) {\n this.focusTrap.unpause();\n } else if (!prevProps.paused && this.props.paused) {\n this.focusTrap.pause();\n }\n }\n\n componentWillUnmount() {\n this.focusTrap.deactivate();\n\n if (this.props.focusTrapOptions.returnFocusOnDeactivate !== false && this.previouslyFocusedElement && this.previouslyFocusedElement.focus) {\n this.previouslyFocusedElement.focus();\n }\n }\n\n render() {\n return React.createElement(\"div\", {\n ref: this.divRef,\n className: this.props.className\n }, this.props.children);\n }\n\n}\n\n_defineProperty(FocusTrap, \"propTypes\", {\n children: _pt.node.isRequired,\n className: _pt.string,\n active: _pt.bool,\n paused: _pt.bool,\n focusTrapOptions: _pt.any\n});\n\n_defineProperty(FocusTrap, \"defaultProps\", {\n active: true,\n paused: false,\n focusTrapOptions: {}\n});\n//# sourceMappingURL=FocusTrap.js.map","import _pt from \"prop-types\";\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\n/** This Component can be used to wrap a functional component in order to generate a random ID\n * Example of how to use this component\n *\n * const Component = ({id}: {id: string}) => (\n * {randomId => (\n *
      \n * div with random ID\n *
      \n * )}\n *
      \n * );\n */\nimport * as React from 'react';\nlet currentId = 0;\n\nclass GenerateId extends React.Component {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"id\", `${this.props.prefix}${currentId++}`);\n }\n\n render() {\n return this.props.children(this.id);\n }\n\n}\n\n_defineProperty(GenerateId, \"propTypes\", {\n prefix: _pt.string\n});\n\n_defineProperty(GenerateId, \"defaultProps\", {\n prefix: 'pf-random-id-'\n});\n\nexport default GenerateId;\n//# sourceMappingURL=GenerateId.js.map","export const ASTERISK = '*';\n//# sourceMappingURL=htmlConstants.js.map","import * as ReactDOM from 'react-dom';\nimport { SIDE } from './constants';\nimport { getModifier } from '@patternfly/react-styles';\n\n/**\n * @param {string} input - String to capitalize\n */\nexport function capitalize(input) {\n return input[0].toUpperCase() + input.substring(1);\n}\n/**\n * @param {string} prefix - String to prefix ID with\n */\n\nexport function getUniqueId(prefix = 'pf') {\n const uid = new Date().getTime() + Math.random().toString(36).slice(2);\n return `${prefix}-${uid}`;\n}\n/**\n * @param { any } this - \"This\" reference\n * @param { Function } func - Function to debounce\n * @param { number } wait - Debounce amount\n */\n\nexport function debounce(func, wait) {\n let timeout;\n return (...args) => {\n clearTimeout(timeout);\n timeout = setTimeout(() => func.apply(this, args), wait);\n };\n}\n/** This function returns whether or not an element is within the viewable area of a container. If partial is true,\n * then this function will return true even if only part of the element is in view.\n *\n * @param {HTMLElement} container The container to check if the element is in view of.\n * @param {HTMLElement} element The element to check if it is view\n * @param {boolean} partial true if partial view is allowed\n *\n * @returns { boolean } True if the component is in View.\n */\n\nexport function isElementInView(container, element, partial) {\n const containerBounds = container.getBoundingClientRect();\n const elementBounds = element.getBoundingClientRect();\n const containerBoundsLeft = Math.floor(containerBounds.left);\n const containerBoundsRight = Math.floor(containerBounds.right);\n const elementBoundsLeft = Math.floor(elementBounds.left);\n const elementBoundsRight = Math.floor(elementBounds.right); // Check if in view\n\n const isTotallyInView = elementBoundsLeft >= containerBoundsLeft && elementBoundsRight <= containerBoundsRight;\n const isPartiallyInView = partial && (elementBoundsLeft < containerBoundsLeft && elementBoundsRight > containerBoundsLeft || elementBoundsRight > containerBoundsRight && elementBoundsLeft < containerBoundsRight); // Return outcome\n\n return isTotallyInView || isPartiallyInView;\n}\n/** This function returns the side the element is out of view on (right, left or both)\n *\n * @param {HTMLElement} container The container to check if the element is in view of.\n * @param {HTMLElement} element The element to check if it is view\n *\n * @returns {string} right if the element is of the right, left if element is off the left or both if it is off on both sides.\n */\n\nexport function sideElementIsOutOfView(container, element) {\n const containerBounds = container.getBoundingClientRect();\n const elementBounds = element.getBoundingClientRect();\n const containerBoundsLeft = Math.floor(containerBounds.left);\n const containerBoundsRight = Math.floor(containerBounds.right);\n const elementBoundsLeft = Math.floor(elementBounds.left);\n const elementBoundsRight = Math.floor(elementBounds.right); // Check if in view\n\n const isOffLeft = elementBoundsLeft < containerBoundsLeft;\n const isOffRight = elementBoundsRight > containerBoundsRight;\n let side = SIDE.NONE;\n\n if (isOffRight && isOffLeft) {\n side = SIDE.BOTH;\n } else if (isOffRight) {\n side = SIDE.RIGHT;\n } else if (isOffLeft) {\n side = SIDE.LEFT;\n } // Return outcome\n\n\n return side;\n}\n/** Interpolates a parameterized templateString using values from a templateVars object.\n * The templateVars object should have keys and values which match the templateString's parameters.\n * Example:\n * const templateString: 'My name is ${firstName} ${lastName}';\n * const templateVars: {\n * firstName: 'Jon'\n * lastName: 'Dough'\n * };\n * const result = fillTemplate(templateString, templateVars);\n * // \"My name is Jon Dough\"\n *\n * @param {object} templateString The string passed by the consumer\n * @param {object} templateVars The variables passed to the string\n *\n * @returns {string} The template string literal result\n */\n\nexport function fillTemplate(templateString, templateVars) {\n const func = new Function(...Object.keys(templateVars), `return \\`${templateString}\\`;`);\n return func(...Object.values(templateVars));\n}\n/**\n * This function allows for keyboard navigation through dropdowns. The custom argument is optional.\n *\n * @param {number} index The index of the element you're on\n * @param {number} innerIndex Inner index number\n * @param {string} position The orientation of the dropdown\n * @param {string[]} refsCollection Array of refs to the items in the dropdown\n * @param {object[]} kids Array of items in the dropdown\n * @param {boolean} [custom] Allows for handling of flexible content\n */\n\nexport function keyHandler(index, innerIndex, position, refsCollection, kids, custom = false) {\n if (!Array.isArray(kids)) {\n return;\n }\n\n const isMultiDimensional = refsCollection.filter(ref => ref)[0].constructor === Array;\n let nextIndex = index;\n let nextInnerIndex = innerIndex;\n\n if (position === 'up') {\n if (index === 0) {\n // loop back to end\n nextIndex = kids.length - 1;\n } else {\n nextIndex = index - 1;\n }\n } else if (position === 'down') {\n if (index === kids.length - 1) {\n // loop back to beginning\n nextIndex = 0;\n } else {\n nextIndex = index + 1;\n }\n } else if (position === 'left') {\n if (innerIndex === 0) {\n nextInnerIndex = refsCollection[index].length - 1;\n } else {\n nextInnerIndex = innerIndex - 1;\n }\n } else if (position === 'right') {\n if (innerIndex === refsCollection[index].length - 1) {\n nextInnerIndex = 0;\n } else {\n nextInnerIndex = innerIndex + 1;\n }\n }\n\n if (refsCollection[nextIndex] === null || refsCollection[nextIndex] === undefined || isMultiDimensional && (refsCollection[nextIndex][nextInnerIndex] === null || refsCollection[nextIndex][nextInnerIndex] === undefined)) {\n keyHandler(nextIndex, nextInnerIndex, position, refsCollection, kids, custom);\n } else if (custom) {\n if (refsCollection[nextIndex].focus) {\n refsCollection[nextIndex].focus();\n } // eslint-disable-next-line react/no-find-dom-node\n\n\n const element = ReactDOM.findDOMNode(refsCollection[nextIndex]);\n element.focus();\n } else {\n if (isMultiDimensional) {\n refsCollection[nextIndex][nextInnerIndex].focus();\n } else {\n refsCollection[nextIndex].focus();\n }\n }\n}\n/** This function is a helper for keyboard navigation through dropdowns.\n *\n * @param {number} index The index of the element you're on\n * @param {string} position The orientation of the dropdown\n * @param {string[]} collection Array of refs to the items in the dropdown\n */\n\nexport function getNextIndex(index, position, collection) {\n let nextIndex;\n\n if (position === 'up') {\n if (index === 0) {\n // loop back to end\n nextIndex = collection.length - 1;\n } else {\n nextIndex = index - 1;\n }\n } else if (index === collection.length - 1) {\n // loop back to beginning\n nextIndex = 0;\n } else {\n nextIndex = index + 1;\n }\n\n if (collection[nextIndex] === null) {\n getNextIndex(nextIndex, position, collection);\n } else {\n return nextIndex;\n }\n}\n/** This function is a helper for pluralizing strings.\n *\n * @param {number} i The quantity of the string you want to pluralize\n * @param {string} singular The singular version of the string\n * @param {string} plural The change to the string that should occur if the quantity is not equal to 1.\n * Defaults to adding an 's'.\n */\n\nexport function pluralize(i, singular, plural) {\n if (!plural) {\n plural = `${singular}s`;\n }\n\n return `${i || 0} ${i === 1 ? singular : plural}`;\n}\n/** This function is a helper for turning arrays of breakpointMod objects for data toolbar and flex into classes\n *\n * @param {(DataToolbarBreakpointMod | FlexBreakpointMod | FlexItemBreakpointMod)[]} breakpointMods The modifiers object\n * @param {any} styles The appropriate styles object for the component\n */\n\nexport const formatBreakpointMods = (breakpointMods, styles) => breakpointMods.reduce((acc, curr) => `${acc}${acc && ' '}${getModifier(styles, `${curr.modifier}${curr.breakpoint ? `-on-${curr.breakpoint}` : ''}`)}`, '');\nexport const canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n//# sourceMappingURL=util.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./bullseye.css\");\nexports.default = {\n bullseye: 'pf-l-bullseye',\n modifiers: {}\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./about-modal-box.css\");\nexports.default = {\n aboutModalBox: 'pf-c-about-modal-box',\n card: 'pf-c-card',\n button: 'pf-c-button',\n aboutModalBoxBrand: 'pf-c-about-modal-box__brand',\n aboutModalBoxBrandImage: 'pf-c-about-modal-box__brand-image',\n aboutModalBoxHeader: 'pf-c-about-modal-box__header',\n aboutModalBoxStrapline: 'pf-c-about-modal-box__strapline',\n aboutModalBoxContent: 'pf-c-about-modal-box__content',\n aboutModalBoxClose: 'pf-c-about-modal-box__close',\n aboutModalBoxHero: 'pf-c-about-modal-box__hero',\n modifiers: {\n 'hover': 'pf-m-hover'\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./content.css\");\nexports.default = {\n content: 'pf-c-content',\n modifiers: {\n 'redhatFont': 'pf-m-redhat-font'\n }\n};\n","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box';\nimport contentStyles from '@patternfly/react-styles/css/components/Content/content';\nexport const AboutModalBoxContent = (_ref) => {\n let {\n children,\n className = '',\n trademark,\n id,\n noAboutModalBoxContentContainer = false\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\", \"trademark\", \"id\", \"noAboutModalBoxContentContainer\"]);\n\n return React.createElement(\"div\", _extends({\n className: css(styles.aboutModalBoxContent, className),\n id: id\n }, props), React.createElement(\"div\", {\n className: css('pf-c-about-modal-box__body')\n }, noAboutModalBoxContentContainer ? children : React.createElement(\"div\", {\n className: css(contentStyles.content)\n }, children)), React.createElement(\"p\", {\n className: css(styles.aboutModalBoxStrapline)\n }, trademark));\n};\nAboutModalBoxContent.propTypes = {\n children: _pt.node.isRequired,\n className: _pt.string,\n id: _pt.string.isRequired,\n trademark: _pt.string.isRequired,\n noAboutModalBoxContentContainer: _pt.bool\n};\n//# sourceMappingURL=AboutModalBoxContent.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./title.css\");\nexports.default = {\n title: 'pf-c-title',\n modifiers: {\n '4xl': 'pf-m-4xl',\n '3xl': 'pf-m-3xl',\n '2xl': 'pf-m-2xl',\n 'xl': 'pf-m-xl',\n 'lg': 'pf-m-lg',\n 'md': 'pf-m-md',\n 'redhatFont': 'pf-m-redhat-font'\n }\n};\n","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css, getModifier } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Title/title';\nexport let TitleLevel;\n\n(function (TitleLevel) {\n TitleLevel[\"h1\"] = \"h1\";\n TitleLevel[\"h2\"] = \"h2\";\n TitleLevel[\"h3\"] = \"h3\";\n TitleLevel[\"h4\"] = \"h4\";\n TitleLevel[\"h5\"] = \"h5\";\n TitleLevel[\"h6\"] = \"h6\";\n})(TitleLevel || (TitleLevel = {}));\n\nexport const Title = (_ref) => {\n let {\n size,\n className = '',\n children = '',\n headingLevel: HeadingLevel = 'h1'\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"size\", \"className\", \"children\", \"headingLevel\"]);\n\n return React.createElement(HeadingLevel, _extends({}, props, {\n className: css(styles.title, getModifier(styles, size), className)\n }), children);\n};\nTitle.propTypes = {\n size: _pt.oneOfType([_pt.any, _pt.oneOf(['xs']), _pt.oneOf(['sm']), _pt.oneOf(['md']), _pt.oneOf(['lg']), _pt.oneOf(['xl']), _pt.oneOf(['2xl']), _pt.oneOf(['3xl']), _pt.oneOf(['4xl'])]).isRequired,\n children: _pt.node,\n className: _pt.string,\n headingLevel: _pt.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6'])\n};\n//# sourceMappingURL=Title.js.map","export let BaseSizes;\n\n(function (BaseSizes) {\n BaseSizes[\"xs\"] = \"xs\";\n BaseSizes[\"sm\"] = \"sm\";\n BaseSizes[\"md\"] = \"md\";\n BaseSizes[\"lg\"] = \"lg\";\n BaseSizes[\"xl\"] = \"xl\";\n BaseSizes[\"2xl\"] = \"2xl\";\n BaseSizes[\"3xl\"] = \"3xl\";\n BaseSizes[\"4xl\"] = \"4xl\";\n})(BaseSizes || (BaseSizes = {}));\n\nexport let DeviceSizes;\n\n(function (DeviceSizes) {\n DeviceSizes[\"sm\"] = \"Sm\";\n DeviceSizes[\"md\"] = \"Md\";\n DeviceSizes[\"lg\"] = \"Lg\";\n DeviceSizes[\"xl\"] = \"Xl\";\n DeviceSizes[\"xl2\"] = \"_2xl\";\n})(DeviceSizes || (DeviceSizes = {}));\n//# sourceMappingURL=sizes.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box';\nimport { Title } from '../Title';\nexport const AboutModalBoxHeader = (_ref) => {\n let {\n className = '',\n productName = '',\n id\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"productName\", \"id\"]);\n\n return React.createElement(\"div\", _extends({\n className: css(styles.aboutModalBoxHeader, className)\n }, props), React.createElement(Title, {\n headingLevel: \"h1\",\n size: \"4xl\",\n id: id\n }, productName));\n};\nAboutModalBoxHeader.propTypes = {\n className: _pt.string,\n productName: _pt.string,\n id: _pt.string.isRequired\n};\n//# sourceMappingURL=AboutModalBoxHeader.js.map","module.exports = {\"name\":\"--pf-c-about-modal-box__hero--sm--BackgroundImage\",\"value\":\"url(assets/images/pfbg_992@2x.jpg)\",\"var\":\"var(--pf-c-about-modal-box__hero--sm--BackgroundImage)\"}\n","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box'; // eslint-disable-next-line camelcase\n\nimport c_about_modal_box__hero_sm_BackgroundImage from '@patternfly/react-tokens/dist/js/c_about_modal_box__hero_sm_BackgroundImage';\nexport const AboutModalBoxHero = (_ref) => {\n let {\n className,\n backgroundImageSrc\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"backgroundImageSrc\"]);\n\n return React.createElement(\"div\", _extends({\n style:\n /* eslint-disable camelcase */\n backgroundImageSrc !== '' ? {\n [c_about_modal_box__hero_sm_BackgroundImage.name]: `url(${backgroundImageSrc})`\n } : {}\n /* eslint-enable camelcase */\n ,\n className: css(styles.aboutModalBoxHero, className)\n }, props));\n};\nAboutModalBoxHero.propTypes = {\n className: _pt.string,\n backgroundImageSrc: _pt.string\n};\n//# sourceMappingURL=AboutModalBoxHero.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box';\nexport const AboutModalBoxBrand = (_ref) => {\n let {\n className = '',\n src = '',\n alt\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"src\", \"alt\"]);\n\n return React.createElement(\"div\", _extends({\n className: css(styles.aboutModalBoxBrand, className)\n }, props), React.createElement(\"img\", {\n className: css(styles.aboutModalBoxBrandImage),\n src: src,\n alt: alt\n }));\n};\nAboutModalBoxBrand.propTypes = {\n className: _pt.string,\n src: _pt.string,\n alt: _pt.string.isRequired\n};\n//# sourceMappingURL=AboutModalBoxBrand.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./button.css\");\nexports.default = {\n button: 'pf-c-button',\n buttonIcon: 'pf-c-button__icon',\n buttonText: 'pf-c-button__text',\n modifiers: {\n 'hover': 'pf-m-hover',\n 'active': 'pf-m-active',\n 'focus': 'pf-m-focus',\n 'block': 'pf-m-block',\n 'primary': 'pf-m-primary',\n 'secondary': 'pf-m-secondary',\n 'tertiary': 'pf-m-tertiary',\n 'danger': 'pf-m-danger',\n 'link': 'pf-m-link',\n 'inline': 'pf-m-inline',\n 'disabled': 'pf-m-disabled',\n 'control': 'pf-m-control',\n 'expanded': 'pf-m-expanded',\n 'plain': 'pf-m-plain',\n 'redhatFont': 'pf-m-redhat-font'\n }\n};\n","export const isOUIAEnvironment = () => {\n try {\n return typeof window !== 'undefined' && window.localStorage && window.localStorage.getItem('ouia:enabled') && window.localStorage['ouia:enabled'].toLowerCase() === 'true' || false;\n } catch (exception) {\n return false;\n }\n};\nexport const generateOUIAId = () => typeof window !== 'undefined' && window.localStorage['ouia-generate-id'] && window.localStorage['ouia-generate-id'].toLowerCase() === 'true' || false;\nlet id = 0;\nexport const getUniqueId = () => id++;\n//# sourceMappingURL=ouia.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport { isOUIAEnvironment, getUniqueId, generateOUIAId } from './ouia';\nexport const OuiaContext = React.createContext(null);\n\n/**\n * @param { React.ComponentClass | React.FunctionComponent } WrappedComponent - React component\n */\nexport function withOuiaContext(WrappedComponent) {\n /* eslint-disable react/display-name */\n return props => React.createElement(OuiaContext.Consumer, null, value => React.createElement(ComponentWithOuia, {\n consumerContext: value,\n component: WrappedComponent,\n componentProps: props\n }));\n /* eslint-enable react/display-name */\n}\n\nclass ComponentWithOuia extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n isOuia: false,\n ouiaId: null\n };\n }\n /**\n * if either consumer set isOuia through context or local storage\n * then force a re-render\n */\n\n\n componentDidMount() {\n const {\n isOuia,\n ouiaId\n } = this.state;\n const {\n consumerContext\n } = this.props;\n const isOuiaEnv = isOUIAEnvironment();\n\n if (consumerContext && consumerContext.isOuia !== undefined && consumerContext.isOuia !== isOuia || isOuiaEnv !== isOuia) {\n this.setState({\n isOuia: consumerContext && consumerContext.isOuia !== undefined ? consumerContext.isOuia : isOuiaEnv,\n ouiaId: consumerContext && consumerContext.ouiaId !== undefined ? consumerContext.ouiaId : generateOUIAId() ? getUniqueId() : ouiaId\n });\n }\n }\n\n render() {\n const {\n isOuia,\n ouiaId\n } = this.state;\n const {\n component: WrappedComponent,\n componentProps,\n consumerContext\n } = this.props;\n return React.createElement(OuiaContext.Provider, {\n value: {\n isOuia: consumerContext && consumerContext.isOuia || isOuia,\n ouiaId: consumerContext && consumerContext.ouiaId || ouiaId\n }\n }, React.createElement(OuiaContext.Consumer, null, value => React.createElement(WrappedComponent, _extends({}, componentProps, {\n ouiaContext: value\n }))));\n }\n\n}\n\n_defineProperty(ComponentWithOuia, \"propTypes\", {\n component: _pt.any.isRequired,\n componentProps: _pt.any.isRequired,\n consumerContext: _pt.shape({\n isOuia: _pt.bool,\n ouiaId: _pt.oneOfType([_pt.number, _pt.string])\n })\n});\n//# sourceMappingURL=withOuia.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport styles from '@patternfly/react-styles/css/components/Button/button';\nimport { css, getModifier } from '@patternfly/react-styles';\nimport { withOuiaContext } from '../withOuia';\nexport let ButtonVariant;\n\n(function (ButtonVariant) {\n ButtonVariant[\"primary\"] = \"primary\";\n ButtonVariant[\"secondary\"] = \"secondary\";\n ButtonVariant[\"tertiary\"] = \"tertiary\";\n ButtonVariant[\"danger\"] = \"danger\";\n ButtonVariant[\"link\"] = \"link\";\n ButtonVariant[\"plain\"] = \"plain\";\n ButtonVariant[\"control\"] = \"control\";\n})(ButtonVariant || (ButtonVariant = {}));\n\nexport let ButtonType;\n\n(function (ButtonType) {\n ButtonType[\"button\"] = \"button\";\n ButtonType[\"submit\"] = \"submit\";\n ButtonType[\"reset\"] = \"reset\";\n})(ButtonType || (ButtonType = {}));\n\nconst Button = (_ref) => {\n let {\n children = null,\n className = '',\n component = 'button',\n isActive = false,\n isBlock = false,\n isDisabled = false,\n isFocus = false,\n isHover = false,\n isInline = false,\n type = ButtonType.button,\n variant = ButtonVariant.primary,\n iconPosition = 'left',\n 'aria-label': ariaLabel = null,\n icon = null,\n ouiaContext = null,\n ouiaId = null,\n tabIndex = null\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\", \"component\", \"isActive\", \"isBlock\", \"isDisabled\", \"isFocus\", \"isHover\", \"isInline\", \"type\", \"variant\", \"iconPosition\", \"aria-label\", \"icon\", \"ouiaContext\", \"ouiaId\", \"tabIndex\"]);\n\n const Component = component;\n const isButtonElement = Component === 'button';\n return React.createElement(Component, _extends({}, props, {\n \"aria-disabled\": isButtonElement ? null : isDisabled,\n \"aria-label\": ariaLabel,\n className: css(styles.button, getModifier(styles.modifiers, variant), isBlock && styles.modifiers.block, isDisabled && !isButtonElement && styles.modifiers.disabled, isActive && styles.modifiers.active, isFocus && styles.modifiers.focus, isHover && styles.modifiers.hover, isInline && variant === ButtonVariant.link && styles.modifiers.inline, className),\n disabled: isButtonElement ? isDisabled : null,\n tabIndex: isDisabled && !isButtonElement ? -1 : tabIndex,\n type: isButtonElement ? type : null\n }, ouiaContext.isOuia && {\n 'data-ouia-component-type': 'Button',\n 'data-ouia-component-id': ouiaId || ouiaContext.ouiaId\n }), icon && variant === ButtonVariant.link && iconPosition === 'left' && React.createElement(\"span\", {\n className: \"pf-c-button__icon\"\n }, icon), variant === ButtonVariant.link && React.createElement(\"span\", {\n className: css(styles.buttonText)\n }, children), variant !== ButtonVariant.link && children, icon && variant === ButtonVariant.link && iconPosition === 'right' && React.createElement(\"span\", {\n className: \"pf-c-button__icon\"\n }, icon));\n};\n\nButton.propTypes = {\n children: _pt.node,\n className: _pt.string,\n component: _pt.any,\n isActive: _pt.bool,\n isBlock: _pt.bool,\n isDisabled: _pt.bool,\n isFocus: _pt.bool,\n isHover: _pt.bool,\n isInline: _pt.bool,\n type: _pt.oneOf(['button', 'submit', 'reset']),\n variant: _pt.oneOf(['primary', 'secondary', 'tertiary', 'danger', 'link', 'plain', 'control']),\n iconPosition: _pt.oneOf(['left', 'right']),\n 'aria-label': _pt.string,\n icon: _pt.oneOfType([_pt.node, _pt.oneOf([null])]),\n tabIndex: _pt.number\n};\nconst ButtonWithOuiaContext = withOuiaContext(Button);\nexport { ButtonWithOuiaContext as Button };\n//# sourceMappingURL=Button.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports.getSize = exports.defaultProps = exports.propTypes = exports.IconSize = void 0;\n\nvar _propTypes = _interopRequireDefault(require(\"prop-types\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nvar IconSize = {\n sm: 'sm',\n md: 'md',\n lg: 'lg',\n xl: 'xl'\n};\nexports.IconSize = IconSize;\nvar propTypes = {\n color: _propTypes[\"default\"].string,\n size: _propTypes[\"default\"].oneOf(Object.keys(IconSize)),\n title: _propTypes[\"default\"].string,\n noVerticalAlign: _propTypes[\"default\"].bool\n};\nexports.propTypes = propTypes;\nvar defaultProps = {\n color: 'currentColor',\n size: IconSize.sm,\n title: null,\n noVerticalAlign: false\n};\nexports.defaultProps = defaultProps;\n\nvar getSize = function getSize(size) {\n switch (size) {\n case IconSize.sm:\n return '1em';\n\n case IconSize.md:\n return '1.5em';\n\n case IconSize.lg:\n return '2em';\n\n case IconSize.xl:\n return '3em';\n\n default:\n return '1em';\n }\n};\n\nexports.getSize = getSize;\n//# sourceMappingURL=common.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\n\nvar _react = _interopRequireDefault(require(\"react\"));\n\nvar _common = require(\"./common\");\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nfunction _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === \"object\" || typeof call === \"function\")) { return call; } return _assertThisInitialized(self); }\n\nfunction _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }\n\nfunction _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function\"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }\n\nfunction _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nvar currentId = 0;\n\nvar createIcon = function createIcon(iconDefinition) {\n var viewBox = [iconDefinition.xOffset || 0, iconDefinition.yOffset || 0, iconDefinition.width, iconDefinition.height].join(' ');\n var transform = iconDefinition.transform;\n\n var Icon =\n /*#__PURE__*/\n function (_React$Component) {\n _inherits(Icon, _React$Component);\n\n function Icon() {\n var _getPrototypeOf2;\n\n var _this;\n\n _classCallCheck(this, Icon);\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n _this = _possibleConstructorReturn(this, (_getPrototypeOf2 = _getPrototypeOf(Icon)).call.apply(_getPrototypeOf2, [this].concat(args)));\n\n _defineProperty(_assertThisInitialized(_this), \"id\", \"icon-title-\".concat(currentId++));\n\n return _this;\n }\n\n _createClass(Icon, [{\n key: \"render\",\n value: function render() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n var _this$props = this.props,\n size = _this$props.size,\n color = _this$props.color,\n title = _this$props.title,\n noStyle = _this$props.noStyle,\n noVerticalAlign = _this$props.noVerticalAlign,\n props = _objectWithoutProperties(_this$props, [\"size\", \"color\", \"title\", \"noStyle\", \"noVerticalAlign\"]);\n\n var hasTitle = Boolean(title);\n var heightWidth = (0, _common.getSize)(size);\n var baseAlign = -0.125 * Number.parseFloat(heightWidth);\n var style = noVerticalAlign ? null : {\n verticalAlign: \"\".concat(baseAlign, \"em\")\n };\n return _react[\"default\"].createElement(\"svg\", _extends({\n style: style,\n fill: color,\n height: heightWidth,\n width: heightWidth,\n viewBox: viewBox,\n \"aria-labelledby\": hasTitle ? this.id : null,\n \"aria-hidden\": hasTitle ? null : true,\n role: \"img\"\n }, props), hasTitle && _react[\"default\"].createElement(\"title\", {\n id: this.id\n }, title), _react[\"default\"].createElement(\"path\", {\n d: iconDefinition.svgPath,\n transform: transform\n }));\n }\n }]);\n\n return Icon;\n }(_react[\"default\"].Component);\n\n _defineProperty(Icon, \"displayName\", iconDefinition.name);\n\n _defineProperty(Icon, \"propTypes\", _common.propTypes);\n\n _defineProperty(Icon, \"defaultProps\", _common.defaultProps);\n\n return Icon;\n};\n\nvar _default = createIcon;\nexports[\"default\"] = _default;\n//# sourceMappingURL=createIcon.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.TimesIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar TimesIconConfig = {\n name: 'TimesIcon',\n height: 512,\n width: 352,\n svgPath: 'M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.TimesIconConfig = TimesIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(TimesIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=times-icon.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box';\nimport { Button } from '../Button';\nimport TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';\nexport const AboutModalBoxCloseButton = (_ref) => {\n let {\n className = '',\n onClose = () => undefined,\n 'aria-label': ariaLabel = 'Close Dialog'\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"onClose\", \"aria-label\"]);\n\n return React.createElement(\"div\", _extends({\n className: css(styles.aboutModalBoxClose, className)\n }, props), React.createElement(Button, {\n variant: \"plain\",\n onClick: onClose,\n \"aria-label\": ariaLabel\n }, React.createElement(TimesIcon, null)));\n};\nAboutModalBoxCloseButton.propTypes = {\n className: _pt.string,\n onClose: _pt.func,\n 'aria-label': _pt.string\n};\n//# sourceMappingURL=AboutModalBoxCloseButton.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AboutModalBox/about-modal-box';\nexport const AboutModalBox = (_ref) => {\n let {\n children,\n className = ''\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\"]);\n\n return React.createElement(\"div\", _extends({\n role: \"dialog\",\n \"aria-modal\": \"true\",\n className: css(styles.aboutModalBox, className)\n }, props), children);\n};\nAboutModalBox.propTypes = {\n children: _pt.node.isRequired,\n className: _pt.string\n};\n//# sourceMappingURL=AboutModalBox.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';\nexport const Backdrop = (_ref) => {\n let {\n children = null,\n className = ''\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\"]);\n\n return React.createElement(\"div\", _extends({}, props, {\n className: css(styles.backdrop, className)\n }), children);\n};\nBackdrop.propTypes = {\n children: _pt.node,\n className: _pt.string\n};\n//# sourceMappingURL=Backdrop.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/layouts/Bullseye/bullseye';\nimport { FocusTrap } from '../../helpers';\nimport { AboutModalBoxContent } from './AboutModalBoxContent';\nimport { AboutModalBoxHeader } from './AboutModalBoxHeader';\nimport { AboutModalBoxHero } from './AboutModalBoxHero';\nimport { AboutModalBoxBrand } from './AboutModalBoxBrand';\nimport { AboutModalBoxCloseButton } from './AboutModalBoxCloseButton';\nimport { AboutModalBox } from './AboutModalBox';\nimport { Backdrop } from '../Backdrop/Backdrop';\nexport const AboutModalContainer = (_ref) => {\n let {\n children,\n className = '',\n isOpen = false,\n onClose = () => undefined,\n productName = '',\n trademark,\n brandImageSrc,\n brandImageAlt,\n backgroundImageSrc,\n ariaLabelledbyId,\n ariaDescribedById,\n closeButtonAriaLabel\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\", \"isOpen\", \"onClose\", \"productName\", \"trademark\", \"brandImageSrc\", \"brandImageAlt\", \"backgroundImageSrc\", \"ariaLabelledbyId\", \"ariaDescribedById\", \"closeButtonAriaLabel\"]);\n\n if (!isOpen) {\n return null;\n }\n\n return React.createElement(Backdrop, null, React.createElement(FocusTrap, {\n focusTrapOptions: {\n clickOutsideDeactivates: true\n },\n className: css(styles.bullseye)\n }, React.createElement(AboutModalBox, {\n className: className,\n \"aria-labelledby\": ariaLabelledbyId,\n \"aria-describedby\": ariaDescribedById\n }, React.createElement(AboutModalBoxBrand, {\n src: brandImageSrc,\n alt: brandImageAlt\n }), React.createElement(AboutModalBoxCloseButton, {\n \"aria-label\": closeButtonAriaLabel,\n onClose: onClose\n }), productName && React.createElement(AboutModalBoxHeader, {\n id: ariaLabelledbyId,\n productName: productName\n }), React.createElement(AboutModalBoxContent, _extends({\n trademark: trademark,\n id: ariaDescribedById,\n noAboutModalBoxContentContainer: false\n }, props), children), React.createElement(AboutModalBoxHero, {\n backgroundImageSrc: backgroundImageSrc\n }))));\n};\nAboutModalContainer.propTypes = {\n children: _pt.node.isRequired,\n className: _pt.string,\n isOpen: _pt.bool,\n onClose: _pt.func,\n productName: _pt.string,\n trademark: _pt.string,\n brandImageSrc: _pt.string.isRequired,\n brandImageAlt: _pt.string.isRequired,\n backgroundImageSrc: _pt.string,\n ariaLabelledbyId: _pt.string.isRequired,\n ariaDescribedById: _pt.string.isRequired,\n closeButtonAriaLabel: _pt.string\n};\n//# sourceMappingURL=AboutModalContainer.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';\nimport { canUseDOM } from '../../helpers';\nimport { KEY_CODES } from '../../helpers/constants';\nimport { AboutModalContainer } from './AboutModalContainer';\nexport class AboutModal extends React.Component {\n constructor(props) {\n super(props);\n\n _defineProperty(this, \"id\", AboutModal.currentId++);\n\n _defineProperty(this, \"ariaLabelledBy\", `pf-about-modal-title-${this.id}`);\n\n _defineProperty(this, \"ariaDescribedBy\", `pf-about-modal-content-${this.id}`);\n\n _defineProperty(this, \"handleEscKeyClick\", event => {\n if (event.keyCode === KEY_CODES.ESCAPE_KEY && this.props.isOpen) {\n this.props.onClose();\n }\n });\n\n _defineProperty(this, \"toggleSiblingsFromScreenReaders\", hide => {\n const {\n appendTo\n } = this.props;\n const target = this.getElement(appendTo);\n const bodyChildren = target.children;\n\n for (const child of Array.from(bodyChildren)) {\n if (child !== this.state.container) {\n hide ? child.setAttribute('aria-hidden', '' + hide) : child.removeAttribute('aria-hidden');\n }\n }\n });\n\n _defineProperty(this, \"getElement\", appendTo => {\n if (typeof appendTo === 'function') {\n return appendTo();\n }\n\n return appendTo || document.body;\n });\n\n this.state = {\n container: undefined\n };\n\n if (props.brandImageSrc && !props.brandImageAlt) {\n // eslint-disable-next-line no-console\n console.error('AboutModal:', 'brandImageAlt is required when a brandImageSrc is specified');\n }\n }\n\n componentDidMount() {\n const container = document.createElement('div');\n const target = this.getElement(this.props.appendTo);\n this.setState({\n container\n });\n target.appendChild(container);\n target.addEventListener('keydown', this.handleEscKeyClick, false);\n\n if (this.props.isOpen) {\n target.classList.add(css(styles.backdropOpen));\n } else {\n target.classList.remove(css(styles.backdropOpen));\n }\n }\n\n componentDidUpdate() {\n const target = this.getElement(this.props.appendTo);\n\n if (this.props.isOpen) {\n target.classList.add(css(styles.backdropOpen));\n this.toggleSiblingsFromScreenReaders(true);\n } else {\n target.classList.remove(css(styles.backdropOpen));\n this.toggleSiblingsFromScreenReaders(false);\n }\n }\n\n componentWillUnmount() {\n const target = this.getElement(this.props.appendTo);\n\n if (this.state.container) {\n target.removeChild(this.state.container);\n }\n\n target.removeEventListener('keydown', this.handleEscKeyClick, false);\n target.classList.remove(css(styles.backdropOpen));\n }\n\n render() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _this$props = this.props,\n {\n appendTo\n } = _this$props,\n props = _objectWithoutProperties(_this$props, [\"appendTo\"]);\n\n const {\n container\n } = this.state;\n\n if (!canUseDOM || !container) {\n return null;\n }\n\n return ReactDOM.createPortal(React.createElement(AboutModalContainer, _extends({\n ariaLabelledbyId: this.ariaLabelledBy,\n ariaDescribedById: this.ariaDescribedBy\n }, props)), container);\n }\n\n}\n\n_defineProperty(AboutModal, \"propTypes\", {\n children: _pt.node.isRequired,\n className: _pt.string,\n isOpen: _pt.bool,\n onClose: _pt.func,\n productName: _pt.string,\n trademark: _pt.string,\n brandImageSrc: _pt.string.isRequired,\n brandImageAlt: _pt.string.isRequired,\n backgroundImageSrc: _pt.string,\n noAboutModalBoxContentContainer: _pt.bool,\n appendTo: _pt.oneOfType([_pt.any, _pt.func]),\n closeButtonAriaLabel: _pt.string\n});\n\n_defineProperty(AboutModal, \"currentId\", 0);\n\n_defineProperty(AboutModal, \"defaultProps\", {\n className: '',\n isOpen: false,\n onClose: () => undefined,\n productName: '',\n trademark: '',\n backgroundImageSrc: '',\n noAboutModalBoxContentContainer: false,\n appendTo: null\n});\n//# sourceMappingURL=AboutModal.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./accordion.css\");\nexports.default = {\n accordion: 'pf-c-accordion',\n accordionToggle: 'pf-c-accordion__toggle',\n accordionToggleText: 'pf-c-accordion__toggle-text',\n accordionToggleIcon: 'pf-c-accordion__toggle-icon',\n accordionExpandedContent: 'pf-c-accordion__expanded-content',\n accordionExpandedContentBody: 'pf-c-accordion__expanded-content-body',\n modifiers: {\n 'noBoxShadow': 'pf-m-no-box-shadow',\n 'expanded': 'pf-m-expanded',\n 'hover': 'pf-m-hover',\n 'active': 'pf-m-active',\n 'focus': 'pf-m-focus',\n 'fixed': 'pf-m-fixed'\n }\n};\n","import * as React from 'react';\nexport const AccordionContext = React.createContext({});\n//# sourceMappingURL=AccordionContext.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Accordion/accordion';\nimport { AccordionContext } from './AccordionContext';\nexport const Accordion = (_ref) => {\n let {\n children = null,\n className = '',\n 'aria-label': ariaLabel = '',\n headingLevel = 'h3',\n asDefinitionList = true,\n noBoxShadow = false\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"children\", \"className\", \"aria-label\", \"headingLevel\", \"asDefinitionList\", \"noBoxShadow\"]);\n\n const AccordionList = asDefinitionList ? 'dl' : 'div';\n return React.createElement(AccordionList, _extends({\n className: css(styles.accordion, noBoxShadow && styles.modifiers.noBoxShadow, className),\n \"aria-label\": ariaLabel\n }, props), React.createElement(AccordionContext.Provider, {\n value: {\n ContentContainer: asDefinitionList ? 'dd' : 'div',\n ToggleContainer: asDefinitionList ? 'dt' : headingLevel\n }\n }, children));\n};\nAccordion.propTypes = {\n children: _pt.node,\n className: _pt.string,\n 'aria-label': _pt.string,\n headingLevel: _pt.oneOf(['h1', 'h2', 'h3', 'h4', 'h5', 'h6']),\n asDefinitionList: _pt.bool,\n noBoxShadow: _pt.bool\n};\n//# sourceMappingURL=Accordion.js.map","import _pt from \"prop-types\";\nimport * as React from 'react';\nexport const AccordionItem = ({\n children = null\n}) => React.createElement(React.Fragment, null, children);\nAccordionItem.propTypes = {\n children: _pt.node\n};\n//# sourceMappingURL=AccordionItem.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Accordion/accordion';\nimport { AccordionContext } from './AccordionContext';\nexport const AccordionContent = (_ref) => {\n let {\n className = '',\n children = null,\n id = '',\n isHidden = false,\n isFixed = false,\n 'aria-label': ariaLabel = '',\n component\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"children\", \"id\", \"isHidden\", \"isFixed\", \"aria-label\", \"component\"]);\n\n return React.createElement(AccordionContext.Consumer, null, ({\n ContentContainer\n }) => {\n const Container = component || ContentContainer;\n return React.createElement(Container, _extends({\n id: id,\n className: css(styles.accordionExpandedContent, isFixed && styles.modifiers.fixed, !isHidden && styles.modifiers.expanded, className),\n hidden: isHidden,\n \"aria-label\": ariaLabel\n }, props), React.createElement(\"div\", {\n className: css(styles.accordionExpandedContentBody)\n }, children));\n });\n};\nAccordionContent.propTypes = {\n children: _pt.node,\n className: _pt.string,\n id: _pt.string,\n isHidden: _pt.bool,\n isFixed: _pt.bool,\n 'aria-label': _pt.string,\n component: _pt.any\n};\n//# sourceMappingURL=AccordionContent.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.AngleRightIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar AngleRightIconConfig = {\n name: 'AngleRightIcon',\n height: 512,\n width: 256,\n svgPath: 'M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.AngleRightIconConfig = AngleRightIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(AngleRightIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=angle-right-icon.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Accordion/accordion';\nimport AngleRightIcon from '@patternfly/react-icons/dist/js/icons/angle-right-icon';\nimport { AccordionContext } from './AccordionContext';\nexport const AccordionToggle = (_ref) => {\n let {\n className = '',\n id,\n isExpanded = false,\n children = null,\n component\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"id\", \"isExpanded\", \"children\", \"component\"]);\n\n return React.createElement(AccordionContext.Consumer, null, ({\n ToggleContainer\n }) => {\n const Container = component || ToggleContainer;\n return React.createElement(Container, null, React.createElement(\"button\", _extends({\n id: id,\n className: css(styles.accordionToggle, isExpanded && styles.modifiers.expanded, className)\n }, props, {\n \"aria-expanded\": isExpanded\n }), React.createElement(\"span\", {\n className: css(styles.accordionToggleText)\n }, children), React.createElement(AngleRightIcon, {\n className: css(styles.accordionToggleIcon)\n })));\n });\n};\nAccordionToggle.propTypes = {\n children: _pt.node,\n className: _pt.string,\n isExpanded: _pt.bool,\n id: _pt.string.isRequired,\n component: _pt.any\n};\n//# sourceMappingURL=AccordionToggle.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./alert.css\");\nexports.default = {\n alert: 'pf-c-alert',\n alertIcon: 'pf-c-alert__icon',\n alertTitle: 'pf-c-alert__title',\n alertDescription: 'pf-c-alert__description',\n alertAction: 'pf-c-alert__action',\n modifiers: {\n 'success': 'pf-m-success',\n 'inline': 'pf-m-inline',\n 'danger': 'pf-m-danger',\n 'warning': 'pf-m-warning',\n 'info': 'pf-m-info',\n 'redhatFont': 'pf-m-redhat-font'\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./accessibility.css\");\nexports.default = {\n screenReader: 'pf-u-screen-reader',\n visible: 'pf-u-visible',\n hidden: 'pf-u-hidden',\n screenReaderOnSm: 'pf-u-screen-reader-on-sm',\n visibleOnSm: 'pf-u-visible-on-sm',\n hiddenOnSm: 'pf-u-hidden-on-sm',\n screenReaderOnMd: 'pf-u-screen-reader-on-md',\n visibleOnMd: 'pf-u-visible-on-md',\n hiddenOnMd: 'pf-u-hidden-on-md',\n screenReaderOnLg: 'pf-u-screen-reader-on-lg',\n visibleOnLg: 'pf-u-visible-on-lg',\n hiddenOnLg: 'pf-u-hidden-on-lg',\n screenReaderOnXl: 'pf-u-screen-reader-on-xl',\n visibleOnXl: 'pf-u-visible-on-xl',\n hiddenOnXl: 'pf-u-hidden-on-xl',\n screenReaderOn_2xl: 'pf-u-screen-reader-on-2xl',\n visibleOn_2xl: 'pf-u-visible-on-2xl',\n hiddenOn_2xl: 'pf-u-hidden-on-2xl',\n modifiers: {}\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.CheckCircleIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar CheckCircleIconConfig = {\n name: 'CheckCircleIcon',\n height: 512,\n width: 512,\n svgPath: 'M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.CheckCircleIconConfig = CheckCircleIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(CheckCircleIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=check-circle-icon.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.ExclamationCircleIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar ExclamationCircleIconConfig = {\n name: 'ExclamationCircleIcon',\n height: 512,\n width: 512,\n svgPath: 'M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.ExclamationCircleIconConfig = ExclamationCircleIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(ExclamationCircleIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=exclamation-circle-icon.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.ExclamationTriangleIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar ExclamationTriangleIconConfig = {\n name: 'ExclamationTriangleIcon',\n height: 512,\n width: 576,\n svgPath: 'M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.ExclamationTriangleIconConfig = ExclamationTriangleIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(ExclamationTriangleIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=exclamation-triangle-icon.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.InfoCircleIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar InfoCircleIconConfig = {\n name: 'InfoCircleIcon',\n height: 512,\n width: 512,\n svgPath: 'M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.InfoCircleIconConfig = InfoCircleIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(InfoCircleIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=info-circle-icon.js.map","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.BellIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar BellIconConfig = {\n name: 'BellIcon',\n height: 512,\n width: 448,\n svgPath: 'M224 512c35.32 0 63.97-28.65 63.97-64H160.03c0 35.35 28.65 64 63.97 64zm215.39-149.71c-19.32-20.76-55.47-51.99-55.47-154.29 0-77.7-54.48-139.9-127.94-155.16V32c0-17.67-14.32-32-31.98-32s-31.98 14.33-31.98 32v20.84C118.56 68.1 64.08 130.3 64.08 208c0 102.3-36.15 133.53-55.47 154.29-6 6.45-8.66 14.16-8.61 21.71.11 16.4 12.98 32 32.1 32h383.8c19.12 0 32-15.6 32.1-32 .05-7.55-2.61-15.27-8.61-21.71z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.BellIconConfig = BellIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(BellIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=bell-icon.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Alert/alert';\nimport CheckCircleIcon from '@patternfly/react-icons/dist/js/icons/check-circle-icon';\nimport ExclamationCircleIcon from '@patternfly/react-icons/dist/js/icons/exclamation-circle-icon';\nimport ExclamationTriangleIcon from '@patternfly/react-icons/dist/js/icons/exclamation-triangle-icon';\nimport InfoCircleIcon from '@patternfly/react-icons/dist/js/icons/info-circle-icon';\nimport BellIcon from '@patternfly/react-icons/dist/js/icons/bell-icon';\nexport const variantIcons = {\n success: CheckCircleIcon,\n danger: ExclamationCircleIcon,\n warning: ExclamationTriangleIcon,\n info: InfoCircleIcon,\n default: BellIcon\n};\nexport const AlertIcon = (_ref) => {\n let {\n variant,\n className = ''\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"variant\", \"className\"]);\n\n const Icon = variantIcons[variant];\n return React.createElement(\"div\", _extends({}, props, {\n className: css(styles.alertIcon, className)\n }), React.createElement(Icon, null));\n};\nAlertIcon.propTypes = {\n variant: _pt.oneOf(['success', 'danger', 'warning', 'info', 'default']).isRequired,\n className: _pt.string\n};\n//# sourceMappingURL=AlertIcon.js.map","import * as React from 'react';\nexport const AlertContext = React.createContext(null);\n//# sourceMappingURL=AlertContext.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css, getModifier } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/Alert/alert';\nimport accessibleStyles from '@patternfly/react-styles/css/utilities/Accessibility/accessibility';\nimport { AlertIcon } from './AlertIcon';\nimport { capitalize } from '../../helpers/util';\nimport { withOuiaContext } from '../withOuia';\nimport { AlertContext } from './AlertContext';\nexport let AlertVariant;\n\n(function (AlertVariant) {\n AlertVariant[\"success\"] = \"success\";\n AlertVariant[\"danger\"] = \"danger\";\n AlertVariant[\"warning\"] = \"warning\";\n AlertVariant[\"info\"] = \"info\";\n AlertVariant[\"default\"] = \"default\";\n})(AlertVariant || (AlertVariant = {}));\n\nconst Alert = (_ref) => {\n let {\n variant = AlertVariant.info,\n isInline = false,\n isLiveRegion = false,\n variantLabel = `${capitalize(variant)} alert:`,\n 'aria-label': ariaLabel = `${capitalize(variant)} Alert`,\n action = null,\n title,\n children = '',\n className = '',\n ouiaContext = null,\n ouiaId = null\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"variant\", \"isInline\", \"isLiveRegion\", \"variantLabel\", \"aria-label\", \"action\", \"title\", \"children\", \"className\", \"ouiaContext\", \"ouiaId\"]);\n\n const getHeadingContent = React.createElement(React.Fragment, null, React.createElement(\"span\", {\n className: css(accessibleStyles.screenReader)\n }, variantLabel), title);\n const customClassName = css(styles.alert, isInline && styles.modifiers.inline, variant !== AlertVariant.default && getModifier(styles, variant, styles.modifiers.info), className);\n return React.createElement(\"div\", _extends({}, props, {\n className: customClassName,\n \"aria-label\": ariaLabel\n }, ouiaContext.isOuia && {\n 'data-ouia-component-type': 'Alert',\n 'data-ouia-component-id': ouiaId || ouiaContext.ouiaId\n }, isLiveRegion && {\n 'aria-live': 'polite',\n 'aria-atomic': 'false'\n }), React.createElement(AlertIcon, {\n variant: variant\n }), React.createElement(\"h4\", {\n className: css(styles.alertTitle)\n }, getHeadingContent), children && React.createElement(\"div\", {\n className: css(styles.alertDescription)\n }, children), React.createElement(AlertContext.Provider, {\n value: {\n title,\n variantLabel\n }\n }, action && (typeof action === 'object' || typeof action === 'string') && React.createElement(\"div\", {\n className: css(styles.alertAction)\n }, action)));\n};\n\nAlert.propTypes = {\n variant: _pt.oneOf(['success', 'danger', 'warning', 'info', 'default']),\n isInline: _pt.bool,\n title: _pt.node.isRequired,\n action: _pt.node,\n children: _pt.node,\n className: _pt.string,\n 'aria-label': _pt.string,\n variantLabel: _pt.string,\n isLiveRegion: _pt.bool\n};\nconst AlertWithOuiaContext = withOuiaContext(Alert);\nexport { AlertWithOuiaContext as Alert };\n//# sourceMappingURL=Alert.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { Button, ButtonVariant } from '../Button';\nimport TimesIcon from '@patternfly/react-icons/dist/js/icons/times-icon';\nimport { AlertContext } from './AlertContext';\nexport const AlertActionCloseButton = (_ref) => {\n let {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n className = '',\n onClose = () => undefined,\n 'aria-label': ariaLabel = '',\n variantLabel\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"onClose\", \"aria-label\", \"variantLabel\"]);\n\n return React.createElement(AlertContext.Consumer, null, ({\n title,\n variantLabel: alertVariantLabel\n }) => React.createElement(Button, _extends({\n variant: ButtonVariant.plain,\n onClick: onClose,\n \"aria-label\": ariaLabel === '' ? `Close ${variantLabel || alertVariantLabel} alert: ${title}` : ariaLabel\n }, props), React.createElement(TimesIcon, null)));\n};\nAlertActionCloseButton.propTypes = {\n className: _pt.string,\n onClose: _pt.func,\n 'aria-label': _pt.string,\n variantLabel: _pt.string\n};\n//# sourceMappingURL=AlertActionCloseButton.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { Button, ButtonVariant } from '../Button';\nexport const AlertActionLink = (_ref) => {\n let {\n className = '',\n children\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"className\", \"children\"]);\n\n return React.createElement(Button, _extends({\n variant: ButtonVariant.link,\n className: className\n }, props), children);\n};\nAlertActionLink.propTypes = {\n children: _pt.string,\n className: _pt.string\n};\n//# sourceMappingURL=AlertActionLink.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./alert-group.css\");\nexports.default = {\n alertGroup: 'pf-c-alert-group',\n modifiers: {\n 'toast': 'pf-m-toast'\n }\n};\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport styles from '@patternfly/react-styles/css/components/AlertGroup/alert-group';\nexport const AlertGroupInline = (_ref) => {\n let {\n className,\n children,\n isToast\n } = _ref,\n rest = _objectWithoutProperties(_ref, [\"className\", \"children\", \"isToast\"]);\n\n return React.createElement(\"ul\", _extends({\n className: css(styles.alertGroup, className, isToast ? styles.modifiers.toast : '')\n }, rest), React.Children.toArray(children).map((Alert, index) => React.createElement(\"li\", {\n key: index\n }, Alert)));\n};\n//# sourceMappingURL=AlertGroupInline.js.map","import _pt from \"prop-types\";\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport { canUseDOM } from '../../helpers';\nimport { AlertGroupInline } from './AlertGroupInline';\nexport class AlertGroup extends React.Component {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"state\", {\n container: undefined\n });\n }\n\n componentDidMount() {\n const container = document.createElement('div');\n const target = this.getTargetElement();\n this.setState({\n container\n });\n target.appendChild(container);\n }\n\n componentWillUnmount() {\n const target = this.getTargetElement();\n\n if (this.state.container) {\n target.removeChild(this.state.container);\n }\n }\n\n getTargetElement() {\n const appendTo = this.props.appendTo;\n\n if (typeof appendTo === 'function') {\n return appendTo();\n }\n\n return appendTo || document.body;\n }\n\n render() {\n const {\n className,\n children,\n isToast\n } = this.props;\n const alertGroup = React.createElement(AlertGroupInline, {\n className: className,\n isToast: isToast\n }, children);\n\n if (!this.props.isToast) {\n return alertGroup;\n }\n\n const container = this.state.container;\n\n if (!canUseDOM || !container) {\n return null;\n }\n\n return ReactDOM.createPortal(alertGroup, container);\n }\n\n}\n\n_defineProperty(AlertGroup, \"propTypes\", {\n className: _pt.string,\n children: _pt.node,\n isToast: _pt.bool,\n appendTo: _pt.oneOfType([_pt.any, _pt.func])\n});\n//# sourceMappingURL=AlertGroup.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./app-launcher.css\");\nexports.default = {\n appLauncher: 'pf-c-app-launcher',\n appLauncherToggle: 'pf-c-app-launcher__toggle',\n divider: 'pf-c-divider',\n appLauncherMenu: 'pf-c-app-launcher__menu',\n appLauncherMenuSearch: 'pf-c-app-launcher__menu-search',\n appLauncherMenuWrapper: 'pf-c-app-launcher__menu-wrapper',\n appLauncherMenuItem: 'pf-c-app-launcher__menu-item',\n appLauncherMenuItemExternalIcon: 'pf-c-app-launcher__menu-item-external-icon',\n appLauncherMenuItemIcon: 'pf-c-app-launcher__menu-item-icon',\n appLauncherSeparator: 'pf-c-app-launcher__separator',\n appLauncherGroup: 'pf-c-app-launcher__group',\n appLauncherGroupTitle: 'pf-c-app-launcher__group-title',\n modifiers: {\n 'expanded': 'pf-m-expanded',\n 'hover': 'pf-m-hover',\n 'active': 'pf-m-active',\n 'focus': 'pf-m-focus',\n 'disabled': 'pf-m-disabled',\n 'alignRight': 'pf-m-align-right',\n 'top': 'pf-m-top',\n 'favorite': 'pf-m-favorite',\n 'external': 'pf-m-external',\n 'link': 'pf-m-link',\n 'action': 'pf-m-action'\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./form-control.css\");\nexports.default = {\n formControl: 'pf-c-form-control',\n modifiers: {\n 'hover': 'pf-m-hover',\n 'focus': 'pf-m-focus',\n 'success': 'pf-m-success',\n 'search': 'pf-m-search',\n 'resizeVertical': 'pf-m-resize-vertical',\n 'resizeHorizontal': 'pf-m-resize-horizontal'\n }\n};\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = exports.ThIconConfig = void 0;\n\nvar _createIcon = _interopRequireDefault(require(\"../createIcon\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\n/* This file is generated by createIcons.js any changes will be lost. */\nvar ThIconConfig = {\n name: 'ThIcon',\n height: 512,\n width: 512,\n svgPath: 'M149.333 56v80c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24V56c0-13.255 10.745-24 24-24h101.333c13.255 0 24 10.745 24 24zm181.334 240v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm32-240v80c0 13.255 10.745 24 24 24H488c13.255 0 24-10.745 24-24V56c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24zm-32 80V56c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.256 0 24.001-10.745 24.001-24zm-205.334 56H24c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24zM0 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H24c-13.255 0-24 10.745-24 24zm386.667-56H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zm0 160H488c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H386.667c-13.255 0-24 10.745-24 24v80c0 13.255 10.745 24 24 24zM181.333 376v80c0 13.255 10.745 24 24 24h101.333c13.255 0 24-10.745 24-24v-80c0-13.255-10.745-24-24-24H205.333c-13.255 0-24 10.745-24 24z',\n yOffset: '',\n xOffset: '',\n transform: ''\n};\nexports.ThIconConfig = ThIconConfig;\n\nvar _default = (0, _createIcon[\"default\"])(ThIconConfig);\n\nexports[\"default\"] = _default;\n//# sourceMappingURL=th-icon.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nrequire(\"./dropdown.css\");\nexports.default = {\n dropdown: 'pf-c-dropdown',\n divider: 'pf-c-divider',\n dropdownToggle: 'pf-c-dropdown__toggle',\n dropdownToggleButton: 'pf-c-dropdown__toggle-button',\n dropdownToggleCheck: 'pf-c-dropdown__toggle-check',\n dropdownToggleText: 'pf-c-dropdown__toggle-text',\n dropdownToggleIcon: 'pf-c-dropdown__toggle-icon',\n dropdownMenu: 'pf-c-dropdown__menu',\n dropdownMenuItem: 'pf-c-dropdown__menu-item',\n dropdownMenuItemIcon: 'pf-c-dropdown__menu-item-icon',\n dropdownSeparator: 'pf-c-dropdown__separator',\n dropdownGroup: 'pf-c-dropdown__group',\n dropdownGroupTitle: 'pf-c-dropdown__group-title',\n modifiers: {\n 'disabled': 'pf-m-disabled',\n 'plain': 'pf-m-plain',\n 'splitButton': 'pf-m-split-button',\n 'action': 'pf-m-action',\n 'hover': 'pf-m-hover',\n 'active': 'pf-m-active',\n 'focus': 'pf-m-focus',\n 'expanded': 'pf-m-expanded',\n 'primary': 'pf-m-primary',\n 'top': 'pf-m-top',\n 'alignRight': 'pf-m-align-right',\n 'icon': 'pf-m-icon'\n }\n};\n","import * as React from 'react';\nexport let DropdownPosition;\n\n(function (DropdownPosition) {\n DropdownPosition[\"right\"] = \"right\";\n DropdownPosition[\"left\"] = \"left\";\n})(DropdownPosition || (DropdownPosition = {}));\n\nexport let DropdownDirection;\n\n(function (DropdownDirection) {\n DropdownDirection[\"up\"] = \"up\";\n DropdownDirection[\"down\"] = \"down\";\n})(DropdownDirection || (DropdownDirection = {}));\n\nexport const DropdownContext = React.createContext({\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onSelect: event => undefined,\n id: '',\n toggleIconClass: '',\n toggleTextClass: '',\n menuClass: '',\n itemClass: '',\n toggleClass: '',\n baseClass: '',\n baseComponent: 'div',\n sectionClass: '',\n sectionTitleClass: '',\n sectionComponent: 'section',\n disabledClass: '',\n hoverClass: '',\n separatorClass: '',\n menuComponent: 'ul'\n});\nexport const DropdownArrowContext = React.createContext({\n keyHandler: null,\n sendRef: null\n});\n//# sourceMappingURL=dropdownConstants.js.map","import _pt from \"prop-types\";\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport styles from '@patternfly/react-styles/css/components/Dropdown/dropdown';\nimport { css } from '@patternfly/react-styles';\nimport { keyHandler } from '../../helpers/util';\nimport { DropdownPosition, DropdownArrowContext, DropdownContext } from './dropdownConstants';\nexport class DropdownMenu extends React.Component {\n constructor(...args) {\n super(...args);\n\n _defineProperty(this, \"refsCollection\", []);\n\n _defineProperty(this, \"childKeyHandler\", (index, innerIndex, position, custom = false) => {\n keyHandler(index, innerIndex, position, this.refsCollection, this.props.isGrouped ? this.refsCollection : React.Children.toArray(this.props.children), custom);\n });\n\n _defineProperty(this, \"sendRef\", (index, nodes, isDisabled, isSeparator) => {\n this.refsCollection[index] = [];\n nodes.map((node, innerIndex) => {\n if (!node) {\n this.refsCollection[index][innerIndex] = null;\n } else if (!node.getAttribute) {\n // eslint-disable-next-line react/no-find-dom-node\n this.refsCollection[index][innerIndex] = ReactDOM.findDOMNode(node);\n } else if (isDisabled || isSeparator) {\n this.refsCollection[index][innerIndex] = null;\n } else {\n this.refsCollection[index][innerIndex] = node;\n }\n });\n });\n }\n\n componentDidMount() {\n const {\n autoFocus\n } = this.props;\n\n if (autoFocus) {\n // Focus first non-disabled element\n const focusTargetCollection = this.refsCollection.find(ref => ref && ref[0] && !ref[0].hasAttribute('disabled'));\n const focusTarget = focusTargetCollection && focusTargetCollection[0];\n\n if (focusTarget && focusTarget.focus) {\n focusTarget.focus();\n }\n }\n }\n\n shouldComponentUpdate() {\n // reset refsCollection before updating to account for child removal between mounts\n this.refsCollection = [];\n return true;\n }\n\n extendChildren() {\n const {\n children,\n isGrouped\n } = this.props;\n\n if (isGrouped) {\n let index = 0;\n return React.Children.map(children, groupedChildren => {\n const group = groupedChildren;\n return React.cloneElement(group, _objectSpread({}, group.props && group.props.children && {\n children: group.props.children.constructor === Array && React.Children.map(group.props.children, option => React.cloneElement(option, {\n index: index++\n })) || React.cloneElement(group.props.children, {\n index: index++\n })\n }));\n });\n }\n\n return React.Children.map(children, (child, index) => React.cloneElement(child, {\n index\n }));\n }\n\n render() {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const _this$props = this.props,\n {\n className,\n isOpen,\n position,\n children,\n component,\n isGrouped,\n openedOnEnter\n } = _this$props,\n props = _objectWithoutProperties(_this$props, [\"className\", \"isOpen\", \"position\", \"children\", \"component\", \"isGrouped\", \"openedOnEnter\"]);\n\n return React.createElement(DropdownArrowContext.Provider, {\n value: {\n keyHandler: this.childKeyHandler,\n sendRef: this.sendRef\n }\n }, component === 'div' ? React.createElement(DropdownContext.Consumer, null, ({\n onSelect,\n menuClass\n }) => React.createElement(\"div\", {\n className: css(menuClass, position === DropdownPosition.right && styles.modifiers.alignRight, className),\n hidden: !isOpen,\n onClick: event => onSelect && onSelect(event)\n }, children)) : isGrouped && React.createElement(DropdownContext.Consumer, null, ({\n menuClass,\n menuComponent\n }) => {\n const MenuComponent = menuComponent || 'div';\n return React.createElement(MenuComponent, _extends({}, props, {\n className: css(menuClass, position === DropdownPosition.right && styles.modifiers.alignRight, className),\n hidden: !isOpen,\n role: \"menu\"\n }), this.extendChildren());\n }) || React.createElement(DropdownContext.Consumer, null, ({\n menuClass,\n menuComponent\n }) => {\n const MenuComponent = menuComponent || component;\n return React.createElement(MenuComponent, _extends({}, props, {\n className: css(menuClass, position === DropdownPosition.right && styles.modifiers.alignRight, className),\n hidden: !isOpen,\n role: \"menu\"\n }), this.extendChildren());\n }));\n }\n\n}\n\n_defineProperty(DropdownMenu, \"propTypes\", {\n children: _pt.node,\n className: _pt.string,\n isOpen: _pt.bool,\n openedOnEnter: _pt.bool,\n autoFocus: _pt.bool,\n component: _pt.node,\n position: _pt.oneOfType([_pt.any, _pt.oneOf(['right']), _pt.oneOf(['left'])]),\n isGrouped: _pt.bool\n});\n\n_defineProperty(DropdownMenu, \"defaultProps\", {\n className: '',\n isOpen: true,\n openedOnEnter: false,\n autoFocus: true,\n position: DropdownPosition.left,\n component: 'ul',\n isGrouped: false\n});\n//# sourceMappingURL=DropdownMenu.js.map","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport * as React from 'react';\nimport styles from '@patternfly/react-styles/css/components/Dropdown/dropdown';\nimport { css } from '@patternfly/react-styles';\nimport { DropdownMenu } from './DropdownMenu';\nimport { DropdownContext, DropdownDirection, DropdownPosition } from './dropdownConstants';\nimport { withOuiaContext } from '../withOuia';\n\nclass DropdownWithContext extends React.Component {\n // seed for the aria-labelledby ID\n constructor(props) {\n super(props);\n\n _defineProperty(this, \"openedOnEnter\", false);\n\n _defineProperty(this, \"baseComponentRef\", React.createRef());\n\n _defineProperty(this, \"onEnter\", () => {\n this.openedOnEnter = true;\n });\n\n if (props.dropdownItems && props.dropdownItems.length > 0 && props.children) {\n // eslint-disable-next-line no-console\n console.error('Children and dropdownItems props have been provided. Only the dropdownItems prop items will be rendered');\n }\n }\n\n componentDidUpdate() {\n if (!this.props.isOpen) {\n this.openedOnEnter = false;\n }\n }\n\n render() {\n const _this$props = this.props,\n {\n children,\n className,\n direction,\n dropdownItems,\n isOpen,\n isPlain,\n isGrouped,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n onSelect,\n position,\n toggle,\n autoFocus,\n ouiaContext,\n ouiaId,\n ouiaComponentType\n } = _this$props,\n props = _objectWithoutProperties(_this$props, [\"children\", \"className\", \"direction\", \"dropdownItems\", \"isOpen\", \"isPlain\", \"isGrouped\", \"onSelect\", \"position\", \"toggle\", \"autoFocus\", \"ouiaContext\", \"ouiaId\", \"ouiaComponentType\"]);\n\n const id = toggle.props.id || `pf-toggle-id-${DropdownWithContext.currentId++}`;\n let component;\n let renderedContent;\n let ariaHasPopup = false;\n\n if (dropdownItems && dropdownItems.length > 0) {\n component = 'ul';\n renderedContent = dropdownItems;\n ariaHasPopup = true;\n } else {\n component = 'div';\n renderedContent = React.Children.toArray(children);\n }\n\n const openedOnEnter = this.openedOnEnter;\n return React.createElement(DropdownContext.Consumer, null, ({\n baseClass,\n baseComponent,\n id: contextId\n }) => {\n const BaseComponent = baseComponent;\n return React.createElement(BaseComponent, _extends({}, props, {\n className: css(baseClass, direction === DropdownDirection.up && styles.modifiers.top, position === DropdownPosition.right && styles.modifiers.alignRight, isOpen && styles.modifiers.expanded, className),\n ref: this.baseComponentRef\n }, ouiaContext.isOuia && {\n 'data-ouia-component-type': ouiaComponentType,\n 'data-ouia-component-id': ouiaId || ouiaContext.ouiaId\n }), React.Children.map(toggle, oneToggle => React.cloneElement(oneToggle, {\n parentRef: this.baseComponentRef,\n isOpen,\n id,\n isPlain,\n ariaHasPopup,\n onEnter: () => this.onEnter()\n })), isOpen && React.createElement(DropdownMenu, {\n component: component,\n isOpen: isOpen,\n position: position,\n \"aria-labelledby\": contextId ? `${contextId}-toggle` : id,\n openedOnEnter: openedOnEnter,\n isGrouped: isGrouped,\n autoFocus: openedOnEnter && autoFocus\n }, renderedContent));\n });\n }\n\n}\n\n_defineProperty(DropdownWithContext, \"currentId\", 0);\n\n_defineProperty(DropdownWithContext, \"defaultProps\", {\n className: '',\n dropdownItems: [],\n isOpen: false,\n isPlain: false,\n isGrouped: false,\n position: DropdownPosition.left,\n direction: DropdownDirection.down,\n onSelect: () => undefined,\n autoFocus: true,\n ouiaComponentType: 'Dropdown'\n});\n\nconst DropdownWithOuiaContext = withOuiaContext(DropdownWithContext);\nexport { DropdownWithOuiaContext as DropdownWithContext };\n//# sourceMappingURL=DropdownWithContext.js.map","import _pt from \"prop-types\";\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from 'react';\nimport styles from '@patternfly/react-styles/css/components/Dropdown/dropdown';\nimport { DropdownContext } from './dropdownConstants';\nimport { DropdownWithContext } from './DropdownWithContext';\nexport const Dropdown = (_ref) => {\n let {\n onSelect,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n ref\n } = _ref,\n props = _objectWithoutProperties(_ref, [\"onSelect\", \"ref\"]);\n\n return React.createElement(DropdownContext.Provider, {\n value: {\n onSelect: event => onSelect && onSelect(event),\n toggleTextClass: styles.dropdownToggleText,\n toggleIconClass: styles.dropdownToggleIcon,\n menuClass: styles.dropdownMenu,\n itemClass: styles.dropdownMenuItem,\n toggleClass: styles.dropdownToggle,\n baseClass: styles.dropdown,\n baseComponent: 'div',\n sectionClass: styles.dropdownGroup,\n sectionTitleClass: styles.dropdownGroupTitle,\n sectionComponent: 'section',\n disabledClass: styles.modifiers.disabled,\n hoverClass: styles.modifiers.hover,\n separatorClass: styles.dropdownSeparator\n }\n }, React.createElement(DropdownWithContext, props));\n};\nDropdown.propTypes = {\n children: _pt.node,\n className: _pt.string,\n dropdownItems: _pt.arrayOf(_pt.any),\n isOpen: _pt.bool,\n isPlain: _pt.bool,\n position: _pt.oneOfType([_pt.any, _pt.oneOf(['right']), _pt.oneOf(['left'])]),\n direction: _pt.oneOfType([_pt.any, _pt.oneOf(['up']), _pt.oneOf(['down'])]),\n isGrouped: _pt.bool,\n toggle: _pt.element.isRequired,\n onSelect: _pt.func,\n autoFocus: _pt.bool,\n ouiaComponentType: _pt.string\n};\n//# sourceMappingURL=Dropdown.js.map","import _pt from \"prop-types\";\nimport * as React from 'react';\nimport { css } from '@patternfly/react-styles';\nimport { DropdownContext } from './dropdownConstants';\nexport const DropdownGroup = ({\n children = null,\n className = '',\n label = ''\n}) => React.createElement(DropdownContext.Consumer, null, ({\n sectionClass,\n sectionTitleClass,\n sectionComponent\n}) => {\n const SectionComponent = sectionComponent;\n return React.createElement(SectionComponent, {\n className: css(sectionClass, className)\n }, label && React.createElement(\"h1\", {\n className: css(sectionTitleClass),\n \"aria-hidden\": true\n }, label), React.createElement(\"ul\", {\n role: \"none\"\n }, children));\n});\nDropdownGroup.propTypes = {\n children: _pt.node,\n className: _pt.string,\n label: _pt.node\n};\n//# sourceMappingURL=DropdownGroup.js.map","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.1\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n return 1;\n }\n }\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n }\n // NOTE: 1 DOM access here\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n return element.parentNode || element.host;\n}\n\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n case '#document':\n return element.body;\n }\n\n // Firefox want us to check `-x` and `-y` variations as well\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n if (version === 10) {\n return isIE10;\n }\n return isIE11 || isIE10;\n}\n\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null;\n\n // NOTE: 1 DOM access here\n var offsetParent = element.offsetParent || null;\n // Skip hidden elements which don't have an offsetParent\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n }\n\n // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n }\n\n // Here we make sure to give as \"start\" the element that comes first in the DOM\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1;\n\n // Get common ancestor container\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer;\n\n // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n }\n\n // one of the nodes is inside shadowDOM, find which one\n var element1root = getRoot(element1);\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function (instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\n\n\n\n\nvar defineProperty = function (obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\nfunction getBoundingClientRect(element) {\n var rect = {};\n\n // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n };\n\n // subtract scrollbar size from sizes\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height;\n\n // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth);\n\n // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0;\n\n // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft;\n\n // Attach marginTop and marginLeft because in some circumstances we may need them\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n\n return getClientRect(offset);\n}\n\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n var parentNode = getParentNode(element);\n if (!parentNode) {\n return false;\n }\n return isFixed(parentNode);\n}\n\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n var el = element.parentElement;\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n return el || document.documentElement;\n}\n\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;\n\n // NOTE: 1 DOM access here\n\n var boundaries = { top: 0, left: 0 };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n\n // Handle viewport case\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition);\n\n // In case of HTML, we need a different computation\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n }\n\n // Add paddings\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n\n return width * height;\n}\n\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n\n var variation = placement.split('-')[1];\n\n return computedPlacement + (variation ? '-' + variation : '');\n}\n\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\nfunction getOppositePlacement(placement) {\n var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0];\n\n // Get popper node sizes\n var popperRect = getOuterSizes(popper);\n\n // Add position, width and height to our offsets object\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n };\n\n // depending by the popper placement we have to compute its offsets slightly differently\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n }\n\n // use `filter` to obtain the same behavior of `find`\n return arr.filter(check)[0];\n}\n\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n }\n\n // use `find` + `indexOf` if `findIndex` isn't supported\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n\n data = fn(data, modifier);\n }\n });\n\n return data;\n}\n\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
      \n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n };\n\n // compute reference element offsets\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding);\n\n // store the computed placement inside `originalPlacement`\n data.originalPlacement = data.placement;\n\n data.positionFixed = this.options.positionFixed;\n\n // compute the popper offsets\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute';\n\n // run the modifiers\n data = runModifiers(this.modifiers, data);\n\n // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n return null;\n}\n\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\nfunction destroy() {\n this.state.isDestroyed = true;\n\n // touch DOM only if `applyStyle` modifier is enabled\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners();\n\n // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n return this;\n}\n\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, { passive: true });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n scrollParents.push(target);\n}\n\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, { passive: true });\n\n // Scroll event listener on scroll parents\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n\n return state;\n}\n\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound);\n\n // Remove scroll event listener on scroll parents\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n });\n\n // Reset state\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = '';\n // add unit if the value is numeric and is one of the following\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n element.style[prop] = styles[prop] + unit;\n });\n}\n\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles);\n\n // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n setAttributes(data.instance.popper, data.attributes);\n\n // if arrowElement is defined and arrowStyles has some properties\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed);\n\n // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n\n popper.setAttribute('x-placement', placement);\n\n // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' });\n\n return options;\n}\n\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper;\n\n // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent);\n\n // Styles\n var styles = {\n position: popper.position\n };\n\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right';\n\n // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n var prefixedProperty = getSupportedPropertyName('transform');\n\n // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n var left = void 0,\n top = void 0;\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n }\n\n // Attributes\n var attributes = {\n 'x-placement': data.placement\n };\n\n // Update `data` attributes, styles and arrowStyles\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n\n return data;\n}\n\n/**\n * Helper used to know if the given modifier depends from another one.
      \n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n return isRequired;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction arrow(data, options) {\n var _data$offsets$arrow;\n\n // arrow depends on keepTogether in order to work\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element;\n\n // if arrowElement is a string, suppose it's a CSS selector\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement);\n\n // if arrowElement is not found, don't run the modifier\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len];\n\n //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n\n // top/left side\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n }\n // bottom/right side\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n data.offsets.popper = getClientRect(data.offsets.popper);\n\n // compute center of the popper\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2;\n\n // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide;\n\n // prevent arrowElement from being placed not contiguously to its popper\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n\n return data;\n}\n\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n return variation;\n}\n\n/**\n * List of accepted placements to use as values of the `placement` option.
      \n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
      \n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start'];\n\n// Get rid of `auto` `auto-start` and `auto-end`\nvar validPlacements = placements.slice(3);\n\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference;\n\n // using floor because the reference offsets may contain decimals we are not going to consider here\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom;\n\n // flip the variation if required\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n\n // flips variation if reference element overflows boundaries\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom);\n\n // flips variation if popper content overflows boundaries\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : '');\n\n // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2];\n\n // If it's not a number it's an operator, I guess\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0];\n\n // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1;\n\n // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n });\n\n // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n }\n\n // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments];\n\n // Convert the values with units to absolute pixels to allow our computations\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op\n // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, [])\n // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n });\n\n // Loop trough the offsets arrays and execute the operations\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var basePlacement = placement.split('-')[0];\n\n var offsets = void 0;\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper);\n\n // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n }\n\n // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed);\n\n // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n\n options.boundaries = boundaries;\n\n var order = options.priority;\n var popper = data.offsets.popper;\n\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n return defineProperty({}, mainSide, value);\n }\n };\n\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n\n data.offsets.popper = popper;\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1];\n\n // if shift shiftvariation is specified, run the modifier\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n\n return data;\n}\n\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
      \n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
      \n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
      \n * It will read the variation of the `placement` property.
      \n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
      \n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
      \n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
      \n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: offset,\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
      \n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
      \n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: arrow,\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: flip,\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: computeStyle,\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n /** @prop {ModifierFn} */\n fn: applyStyle,\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
      \n * These can be overridden using the `options` argument of Popper.js.
      \n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
      \n * By default, it is set to no-op.
      \n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
      \n * By default, it is set to no-op.
      \n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n\n// Utils\n// Methods\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n };\n\n // make update() debounced, so that it only runs at most once-per-tick\n this.update = debounce(this.update.bind(this));\n\n // with {} we create a new object with the options inside it\n this.options = _extends({}, Popper.Defaults, options);\n\n // init state\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n };\n\n // get reference and popper elements (allow jQuery wrappers)\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper;\n\n // Deep merge modifiers options\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n });\n\n // Refactoring modifiers' list (Object => Array)\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n })\n // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n });\n\n // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n });\n\n // fire the first update to position the popper in the right place\n this.update();\n\n var eventsEnabled = this.options.eventsEnabled;\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n }\n\n // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
      \n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\n\nexport default Popper;\n//# sourceMappingURL=popper.js.map\n","/**!\n* tippy.js v5.1.2\n* (c) 2017-2019 atomiks\n* MIT License\n*/\nimport Popper from 'popper.js';\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nvar version = \"5.1.2\";\n\n/**\n * Triggers reflow\n */\nfunction reflow(element) {\n void element.offsetHeight;\n}\n/**\n * Sets the innerHTML of an element\n */\n\nfunction setInnerHTML(element, html) {\n element[innerHTML()] = html;\n}\n/**\n * Determines if the value is a reference element\n */\n\nfunction isReferenceElement(value) {\n return !!(value && value._tippy && value._tippy.reference === value);\n}\n/**\n * Safe .hasOwnProperty check, for prototype-less objects\n */\n\nfunction hasOwnProperty(obj, key) {\n return {}.hasOwnProperty.call(obj, key);\n}\n/**\n * Returns an array of elements based on the value\n */\n\nfunction getArrayOfElements(value) {\n if (isElement(value)) {\n return [value];\n }\n\n if (isNodeList(value)) {\n return arrayFrom(value);\n }\n\n if (Array.isArray(value)) {\n return value;\n }\n\n return arrayFrom(document.querySelectorAll(value));\n}\n/**\n * Returns a value at a given index depending on if it's an array or number\n */\n\nfunction getValueAtIndexOrReturn(value, index, defaultValue) {\n if (Array.isArray(value)) {\n var v = value[index];\n return v == null ? Array.isArray(defaultValue) ? defaultValue[index] : defaultValue : v;\n }\n\n return value;\n}\n/**\n * Prevents errors from being thrown while accessing nested modifier objects\n * in `popperOptions`\n */\n\nfunction getModifier(obj, key) {\n return obj && obj.modifiers && obj.modifiers[key];\n}\n/**\n * Determines if the value is of type\n */\n\nfunction isType(value, type) {\n var str = {}.toString.call(value);\n return str.indexOf('[object') === 0 && str.indexOf(type + \"]\") > -1;\n}\n/**\n * Determines if the value is of type Element\n */\n\nfunction isElement(value) {\n return isType(value, 'Element');\n}\n/**\n * Determines if the value is of type NodeList\n */\n\nfunction isNodeList(value) {\n return isType(value, 'NodeList');\n}\n/**\n * Determines if the value is of type MouseEvent\n */\n\nfunction isMouseEvent(value) {\n return isType(value, 'MouseEvent');\n}\n/**\n * Firefox extensions don't allow setting .innerHTML directly, this will trick\n * it\n */\n\nfunction innerHTML() {\n return 'innerHTML';\n}\n/**\n * Evaluates a function if one, or returns the value\n */\n\nfunction invokeWithArgsOrReturn(value, args) {\n return typeof value === 'function' ? value.apply(void 0, args) : value;\n}\n/**\n * Sets a popperInstance modifier's property to a value\n */\n\nfunction setModifierValue(modifiers, name, property, value) {\n modifiers.filter(function (m) {\n return m.name === name;\n })[0][property] = value;\n}\n/**\n * Returns a new `div` element\n */\n\nfunction div() {\n return document.createElement('div');\n}\n/**\n * Applies a transition duration to a list of elements\n */\n\nfunction setTransitionDuration(els, value) {\n els.forEach(function (el) {\n if (el) {\n el.style.transitionDuration = value + \"ms\";\n }\n });\n}\n/**\n * Sets the visibility state to elements so they can begin to transition\n */\n\nfunction setVisibilityState(els, state) {\n els.forEach(function (el) {\n if (el) {\n el.setAttribute('data-state', state);\n }\n });\n}\n/**\n * Debounce utility. To avoid bloating bundle size, we're only passing 1\n * argument here, a more generic function would pass all arguments. Only\n * `onMouseMove` uses this which takes the event object for now.\n */\n\nfunction debounce(fn, ms) {\n // Avoid wrapping in `setTimeout` if ms is 0 anyway\n if (ms === 0) {\n return fn;\n }\n\n var timeout;\n return function (arg) {\n clearTimeout(timeout);\n timeout = setTimeout(function () {\n fn(arg);\n }, ms);\n };\n}\n/**\n * Preserves the original function invocation when another function replaces it\n */\n\nfunction preserveInvocation(originalFn, currentFn, args) {\n if (originalFn && originalFn !== currentFn) {\n originalFn.apply(void 0, args);\n }\n}\n/**\n * Deletes properties from an object (pure)\n */\n\nfunction removeProperties(obj, keys) {\n var clone = _extends({}, obj);\n\n keys.forEach(function (key) {\n delete clone[key];\n });\n return clone;\n}\n/**\n * Ponyfill for Array.from - converts iterable values to an array\n */\n\nfunction arrayFrom(value) {\n return [].slice.call(value);\n}\n/**\n * Works like Element.prototype.closest, but uses a callback instead\n */\n\nfunction closestCallback(element, callback) {\n while (element) {\n if (callback(element)) {\n return element;\n }\n\n element = element.parentElement;\n }\n\n return null;\n}\n/**\n * Determines if an array or string includes a string\n */\n\nfunction includes(a, b) {\n return a.indexOf(b) > -1;\n}\n/**\n * Creates an array from string of values separated by whitespace\n */\n\nfunction splitBySpaces(value) {\n return value.split(/\\s+/).filter(Boolean);\n}\n/**\n * Returns the `nextValue` if `nextValue` is not `undefined`, otherwise returns\n * `currentValue`\n */\n\nfunction useIfDefined(nextValue, currentValue) {\n return nextValue !== undefined ? nextValue : currentValue;\n}\n/**\n * Converts a value that's an array or single value to an array\n */\n\nfunction normalizeToArray(value) {\n return [].concat(value);\n}\n/**\n * Returns the ownerDocument of the first available element, otherwise global\n * document\n */\n\nfunction getOwnerDocument(elementOrElements) {\n var _normalizeToArray = normalizeToArray(elementOrElements),\n element = _normalizeToArray[0];\n\n return element ? element.ownerDocument || document : document;\n}\n/**\n * Adds item to array if array does not contain it\n */\n\nfunction pushIfUnique(arr, value) {\n if (arr.indexOf(value) === -1) {\n arr.push(value);\n }\n}\n/**\n * Adds `px` if value is a number, or returns it directly\n */\n\nfunction appendPxIfNumber(value) {\n return typeof value === 'number' ? value + \"px\" : value;\n}\n/**\n * Filters out duplicate elements in an array\n */\n\nfunction unique(arr) {\n return arr.filter(function (item, index) {\n return arr.indexOf(item) === index;\n });\n}\n/**\n * Returns number from number or CSS units string\n */\n\nfunction getNumber(value) {\n return typeof value === 'number' ? value : parseFloat(value);\n}\n/**\n * Gets number or CSS string units in pixels (e.g. `1rem` -> 16)\n */\n\nfunction getUnitsInPx(doc, value) {\n var isRem = typeof value === 'string' && includes(value, 'rem');\n var html = doc.documentElement;\n var rootFontSize = 16;\n\n if (html && isRem) {\n return parseFloat(getComputedStyle(html).fontSize || String(rootFontSize)) * getNumber(value);\n }\n\n return getNumber(value);\n}\n/**\n * Adds the `distancePx` value to the placement of a Popper.Padding object\n */\n\nfunction getComputedPadding(basePlacement, padding, distancePx) {\n if (padding === void 0) {\n padding = 5;\n }\n\n var freshPaddingObject = {\n top: 0,\n right: 0,\n bottom: 0,\n left: 0\n };\n var keys = Object.keys(freshPaddingObject);\n return keys.reduce(function (obj, key) {\n obj[key] = typeof padding === 'number' ? padding : padding[key];\n\n if (basePlacement === key) {\n obj[key] = typeof padding === 'number' ? padding + distancePx : padding[basePlacement] + distancePx;\n }\n\n return obj;\n }, freshPaddingObject);\n}\n\nfunction createMemoryLeakWarning(method) {\n var txt = method === 'destroy' ? 'n already-' : ' ';\n return \"\\n \" + method + \"() was called on a\" + txt + \"destroyed instance. This is a no-op but\\n indicates a potential memory leak.\\n \";\n}\nfunction clean(value) {\n var spacesAndTabs = /[ \\t]{2,}/g;\n var lineStartWithSpaces = /^[ \\t]*/gm;\n return value.replace(spacesAndTabs, ' ').replace(lineStartWithSpaces, '').trim();\n}\n\nfunction getDevMessage(message) {\n return clean(\"\\n %ctippy.js\\n\\n %c\" + clean(message) + \"\\n\\n %c\\uD83D\\uDC77\\u200D This is a development-only message. It will be removed in production.\\n \");\n}\n\nfunction getFormattedMessage(message) {\n return [getDevMessage(message), // title\n 'color: #00C584; font-size: 1.3em; font-weight: bold;', // message\n 'line-height: 1.5', // footer\n 'color: #a6a095;'];\n}\n/**\n * Helpful wrapper around `console.warn()`.\n * TODO: Should we use a cache so it only warns a single time and not spam the\n * console? (Need to consider hot reloading and invalidation though). Chrome\n * already batches warnings as well.\n */\n\nfunction warnWhen(condition, message) {\n if (condition) {\n var _console;\n\n (_console = console).warn.apply(_console, getFormattedMessage(message));\n }\n}\n/**\n * Helpful wrapper around thrown errors\n */\n\nfunction throwErrorWhen(condition, message) {\n if (condition) {\n throw new Error(clean(message));\n }\n}\n/**\n * Validates the `targets` value passed to `tippy()`\n */\n\nfunction validateTargets(targets) {\n var didPassFalsyValue = !targets;\n var didPassPlainObject = Object.prototype.toString.call(targets) === '[object Object]' && !targets.addEventListener;\n throwErrorWhen(didPassFalsyValue, \"tippy() was passed `\" + targets + \"` as its targets (first) argument.\\n\\n Valid types are: String, Element, Element[], or NodeList.\");\n throwErrorWhen(didPassPlainObject, \"tippy() was passed a plain object which is no longer supported as an\\n argument.\\n \\n See https://atomiks.github.io/tippyjs/misc/#custom-position\");\n}\n\nvar defaultProps = {\n allowHTML: true,\n animateFill: false,\n animation: 'fade',\n appendTo: function appendTo() {\n return document.body;\n },\n aria: 'describedby',\n arrow: true,\n boundary: 'scrollParent',\n content: '',\n delay: 0,\n distance: 10,\n duration: [300, 250],\n flip: true,\n flipBehavior: 'flip',\n flipOnUpdate: false,\n followCursor: false,\n hideOnClick: true,\n ignoreAttributes: false,\n inlinePositioning: false,\n inertia: false,\n interactive: false,\n interactiveBorder: 2,\n interactiveDebounce: 0,\n lazy: true,\n maxWidth: 350,\n multiple: false,\n offset: 0,\n onAfterUpdate: function onAfterUpdate() {},\n onBeforeUpdate: function onBeforeUpdate() {},\n onCreate: function onCreate() {},\n onDestroy: function onDestroy() {},\n onHidden: function onHidden() {},\n onHide: function onHide() {},\n onMount: function onMount() {},\n onShow: function onShow() {},\n onShown: function onShown() {},\n onTrigger: function onTrigger() {},\n onUntrigger: function onUntrigger() {},\n placement: 'top',\n plugins: [],\n popperOptions: {},\n role: 'tooltip',\n showOnCreate: false,\n sticky: false,\n theme: '',\n touch: true,\n trigger: 'mouseenter focus',\n triggerTarget: null,\n updateDuration: 0,\n zIndex: 9999\n};\nvar defaultKeys = Object.keys(defaultProps);\n/**\n * If the setProps() method encounters one of these, the popperInstance must be\n * recreated\n */\n\nvar POPPER_INSTANCE_DEPENDENCIES = ['arrow', 'boundary', 'distance', 'flip', 'flipBehavior', 'flipOnUpdate', 'offset', 'placement', 'popperOptions'];\n/**\n * Mutates the defaultProps object by setting the props specified\n */\n\nvar setDefaultProps = function setDefaultProps(partialProps) {\n if (process.env.NODE_ENV !== \"production\") {\n validateProps(partialProps, []);\n }\n\n var keys = Object.keys(partialProps);\n keys.forEach(function (key) {\n defaultProps[key] = partialProps[key];\n });\n};\n/**\n * Returns an extended props object including plugin props\n */\n\nfunction getExtendedProps(props) {\n return _extends({}, props, {}, props.plugins.reduce(function (acc, plugin) {\n var name = plugin.name,\n defaultValue = plugin.defaultValue;\n\n if (name) {\n acc[name] = props[name] !== undefined ? props[name] : defaultValue;\n }\n\n return acc;\n }, {}));\n}\n/**\n * Returns an object of optional props from data-tippy-* attributes\n */\n\nfunction getDataAttributeProps(reference, plugins) {\n var propKeys = plugins ? Object.keys(getExtendedProps(_extends({}, defaultProps, {\n plugins: plugins\n }))) : defaultKeys;\n var props = propKeys.reduce(function (acc, key) {\n var valueAsString = (reference.getAttribute(\"data-tippy-\" + key) || '').trim();\n\n if (!valueAsString) {\n return acc;\n }\n\n if (key === 'content') {\n acc[key] = valueAsString;\n } else {\n try {\n acc[key] = JSON.parse(valueAsString);\n } catch (e) {\n acc[key] = valueAsString;\n }\n }\n\n return acc;\n }, {});\n return props;\n}\n/**\n * Evaluates the props object by merging data attributes and disabling\n * conflicting props where necessary\n */\n\nfunction evaluateProps(reference, props) {\n var out = _extends({}, props, {\n content: invokeWithArgsOrReturn(props.content, [reference])\n }, props.ignoreAttributes ? {} : getDataAttributeProps(reference, props.plugins));\n\n if (out.interactive) {\n out.aria = null;\n }\n\n return out;\n}\n/**\n * Validates props with the valid `defaultProps` object\n */\n\nfunction validateProps(partialProps, plugins) {\n if (partialProps === void 0) {\n partialProps = {};\n }\n\n if (plugins === void 0) {\n plugins = [];\n }\n\n var keys = Object.keys(partialProps);\n keys.forEach(function (prop) {\n var value = partialProps[prop];\n var didSpecifyPlacementInPopperOptions = prop === 'popperOptions' && value !== null && typeof value === 'object' && hasOwnProperty(value, 'placement');\n var nonPluginProps = removeProperties(defaultProps, ['animateFill', 'followCursor', 'inlinePositioning', 'sticky']); // These props have custom warnings\n\n var customWarningProps = ['a11y', 'arrowType', 'showOnInit', 'size', 'target', 'touchHold'];\n var didPassUnknownProp = !hasOwnProperty(nonPluginProps, prop) && !includes(customWarningProps, prop); // Check if the prop exists in `plugins`\n\n if (didPassUnknownProp) {\n didPassUnknownProp = plugins.filter(function (plugin) {\n return plugin.name === prop;\n }).length === 0;\n }\n\n warnWhen(prop === 'target', \"The `target` prop was removed in v5 and replaced with the delegate()\\n addon in order to conserve bundle size.\\n \\n See: https://atomiks.github.io/tippyjs/addons/#event-delegation\");\n warnWhen(prop === 'a11y', \"The `a11y` prop was removed in v5. Make sure the element you are giving\\n a tippy to is natively focusable, such as - - - -
      - -
      -
      -

      Documentation

      -
      - - User Guide, Admin REST API and Javadocs - -
      -
      -
      -
      - <#if properties.displayCommunityLinks = "true"> - - - - -
      - - - - - - - diff --git a/deps/keycloak/themes/keycloak/welcome/resources/admin-console.png b/deps/keycloak/themes/keycloak/welcome/resources/admin-console.png deleted file mode 100644 index ac734972ff042a5afcc95ab6e2c0303a22f71b2e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 712 zcmV;(0yq7MP)Y<6lxiq_5 zAy5!Rgu36>b8s>aor<8iOF^2!W~dzw9Bj=Ef-Ok0Bwe3I1DgToHGC;d_WS_5#` z(A2ggnB{yL%lR}Z%%eA-u-9mvJ>R%K1u-^(y?V$@~Dy% zSPGOf;-`Nj?m0L;zAFgFvsG?>60&4KD?JdK%dua8Z$iEgh?=2Si_I+CAl zm`$^Z7w`8;S9rJ4!rIb2z04?ggvX2XA8h%V7~}KhM;fc>3-O=?dS;h&a2P_FS?y!!#Cc{hC!r`O>0v6S_1BkTDsuw!f5%KT5+0wJ zDdv*ot+Qv%Su_$Rzrn$eW)8z)I1I1N&edMK9+WGdz*I~N71Ii=%xYtzvbq4EJO&^i u3{9;IhNiv(@C3gvNC(Z10KCTVI`c25fVu*!NhhcP0000{gQlyC>#Y=hNUa#-||NL*>yqB3xcK3YyownypHd0SVjphRD1poj*qoJ;%Px_T2 z4TseYhMCz@YTS5_ir60q2+?td1TvvZ#~% zd_17%+tKEiBbsHJ9wRw3;ct!1p4a5>Uj#6ml}$=+c^@9Y0+>v?{&<00Vfmid(9>E} zr%FD9qh_W;Cq_)iq_jTTfSFx%FER$Bs6(a@**&K|NT!#tf?9MRLb506cU}Ue>rvER zEvGekH>Y?^?o0IAC3Y4X#~14dMpptSQf6`ZrHh`T0ox=FA20^{JwB379hKv~@ed-fu@QK*Ht`GyP4bJi~Vmv;t=yqq3m0yIGc1UJd}7EBW_8sA;>8ES3e(-^d>7_3nR7cUfKe_)66HDu zy&BgW!~eY&dc*v+r7mAIH~X%8zSpw*{`aA=w5%=O?|ZZ!2NfP@&P&d9K2<7DL_5(x zTSij)?W1aTUp&>h6pLq0Dn5FU^F>7YZ7z3o)QoG?D&X7An=&#!JM|(iyny?{WSPW( zYO|8Nt4jiaKHQQfukQsm(R#XBPF3b0!Mb;JC051|ZvNQ|4R<)tlg}&iM4Z*I6$qk0qT zl?DC~L~Yy6az?y;4dNYrPZiZ=%F5TYXxC;cYaBUZi};4HX{#%>USrg0U6Em|4&9by zifgIerw+Jj{Q%dxH~V8Bdnj~Fx7pH2??@4NSEMQN9Ul+FAeA_kYM4i}s1nB<^l+|{gStePA)Po@`#5)BiUZ-JD=)9nQTjadh8i2=L*Hj zg@V+b+ZtwF>RlRwrh;Y~*@l^hC9h3ZY6h8e95m0^OP0%yC$eiSCO9OT#CtzX?M&{P zS|ED>YkT+^5t(DJclq{511A9ofjt3SQc@D)5&RLq(8Z)HLa$72W(HUvWPRr^q#OzF zey)?NSD%W~J8hjP3~9W*0~20{b*kEq{RB<5oax<2*}2!EJ-HC{5Fmy;!F zeBIjlvGKi+&|*=__EOu@t7g&6(V@|7(ft#Y6UP$)>*xu|36t0I%h7{dLvyQ4tHWO{ zM-N{14ATt0AGXT*l<99nJ6iD}HDB5Q7d3tL&GhY*7Y(=E)tKX8GGAkF7UEuT7R##z z-w#R+Y7EIzj0hRC4Q&z(wN?(#%0PzCv9`>I!*3C}Ik~ewu)bit1%6_#9gMk5fNx7w z^qbDe44XPNOw~;JylWlg>C1kX{c+)~VB7GN#Cu{4wg{W?G+~^gq82lP@$T(f+*l;v z_FP=*l{Ymt=P?y7b1e07E3oUT>aBiR)!?97@x3wyX@vEBpW?Xg_6+-Gysm|^(!Gp+ z%y7)IO4ZfM^jXFYmNT$iy2^r7$({^q#5zp(Q4>8kI*HW)1T zO8eCt>;4Y2*!j3mvKwX9kK2{Kh@RZ7w!qvG2L>=u0LTwXgcV@rNzNJf!m*o=43L7XL zFv^l1r*sjme=sFI?Rwa-mDiGwgd*8muHE|-rq!Ivm&w?!YYLyU4)YBYc+SP3QqFCn zHXTgKU${?8 z6+(rkvWm20SmL$T9ModqljKW$IG^avyQh00<+Ydoo_%tcY9da%EKSV0`(A;cK}GJh z)LdAM_`2Q&E?zD)uKS7(Pu|0!jBcH&M-v@r_fdD7?}t9lKJWls(A5*O6mN60iEZNM z&d3U!+(xlB)1;HZjp=RQ`S)WfTU_E|1n)&#V`hhvgkb{4YyvS}YA37N;h#&frIJ zA~SWdDJ`_Bf~NT< zy`23!cYkU|b${n*^-H_g!DfC)d7aITJS?%aOn!XIrE1E1U-2J*~bvwpb ztH^&BF+Ex)j}Nwsv3kF2e#^Cs46oof+qNm#I3vU2Rr(|TkF1oI#rx7DA66f%Cj1=# z5lC}4yrez5y^ni7?zNP!9KV=5ov+rawa(j9y73^az7& zgmv)vx`*9;H8q2!n!b6HfLCb^tUf>1BzG&dM!8G8rz7g!R~Hvjt*U*h(`WkXj(+M) zKMSe9xJkdkJY!OCbF6Tp_@(jXiP5Jo6P|0x*_J9bXxzrl#hXC~JWE~48_jvI^S<;) zryIe&{iY`wCx^CBgHapFpOeqLQ4KCUsa;7LDQXEmI2!qwJT`h{{@w2zV#Q*rx_%}m zaCCxmB{(eeK5Lckt$;eOVq3TlH9%aS3b8YNYYHyj} z*{Ti=0(>gi0OkyUol7;rPqJlFyDmPL(e0)>lr~PAS!iRv!|Idh+F~XGV81ictQ(XK zC|~z^$*J({nc7#qE)9a0e(UpQ#!GYav$Gaw0O|-pKoa$(OD@;g59=5oyrEI(p>BJs zXKe2<;Ce}{4nSKcyP#dsZbSkJ3;j)scf=8K1V`NeK>b_%FA7Lm zKp=kW_>Z=@y8c!{AgX$iJpL8C|A;0S`r^@GeKY~*>0yUf^&*+c4FaA<0H%laLA#i$ zU`eJENHK(ipi(mb6q)@~1d%!o79OVTfkqP1Dx?7ik+Li!0+AMh${Io?V3J}mi1>9< zt|5@Wpa`5j7UTOLq2e$Jsegfzu9!WNi2Pr{_I5A~&chW+@*3-kbU=ggZVn*e?^wc= zaV|Iyl46o|;{V*&AU(Q0a2Tu$N$~6O{il%#1Wdz?Kt#IPp*2+CAd-ioSgbt^Vvj;Y zWHCq)d#DUVL_$KwUIZmAi4l<{Es>ITP+2ra^6&F1I6KeN?Eih<{{MJh*8@u`RHV!Q zo9DEAPp=J39ZMkMJbZr@m;u`T*USYA{PU*3kanlV0tXS0UTAyJuTAX#+yB2vy&cgc z%742H|4i^-Fai!k^hSE16&*;i`n!qf{aqtKWo4iM0%?bJJFOYPziqQ~M7lYkNzDrk z0+XBppO*Pweu4kpm%VKCmnnbo1?II-#E<%Iq;SRrQ6Z z5{JC%PoDt8CJcmFWcZj*$}=^)C`~5WEcC zwr;h%IflibP8OTl)dGUVq{OT4(O$L?u$KyKN@%1Qw**8S*bC342#X0?->8JNynJ=- zLIidONM*o}%A4yk~UC!{Qa9pLN z55pXdZbE2=SQpgdqFO(D@Z6Akq}%$H5-R2{e}yWO-gT2Ld=#w3-SA1m>QX`bJ3&LCYo4(YPTnGt%Dt+g^pl*Ota14|L|h}I@KuE?T|f(ivdOHR`hH-7N3zr~WnArnd!q*`=eHTVt8@y?uP-Qu zT14s`hTeMAA-BR^{DpOP?h`9*df?SsrP1JP;tN_O+1|#p<~vjSRq;B{1r5jjXDhr9 zy!3brw*>CrOr|;VKS!YiiJ;na@xxv#s^Gh5@4lz1^p$m(-@h#^tf=$HNCd%eD0qSc9P{2NvbGSUz&ulhB{G@137=9V}aF!%8kHseanK*vOqD@Uaim7|jGI&H`2 z011|7tmEKT@A(j~R9o9-QSiS6x?)BD`-`=(%T)jxhj4ayu7t2m4OdDiiqS%cjO06O7nF#Ct$dSROmX}dO(Dwd`s5=-dDeo+A z%l3!WzYX^+Ejjj33(8snRZ?o=RBRxn#&w+3wN-n$kXxfT{==23zQGUlQZ{1(3P|s-oZO2viTBBYu)6eVh z+@>NUy_A{b;k_a0Ot~+^Jd6CxnCq`9HLERFJ6rr+60~FrpoV3~{gWlZNoHH$^3LPu zjeyPGrJh5^{!Z>Cz3XBAnp5uP$VwBr<$*D}ZF{O>*PQhv&B@7=!HilUA6h-;o|YBc z72w?^i_pCw#V*>aYq>QX2pX*8q|POXt(?*$X^W;bJ1hT`?WMy|%C7S<)1Rr%sYf<@ zpgMF1i9cGLY0Vx9NzQT)^=zQ{tlH;J=KXs3Z6bIXf-YBt@OKR+a#>#dqkp|=c=&Z@ zff5MvR3HOB*QabQfSbBiC>N{Mq$5+;49Uy z_TK2Ro;e%-a9D~?mp4(M|0eLm{c|8J1Y5^pQF7-GUdfDz@LRZ0l@ZR2zA?!D+qDB+ o8wwdL7JM~|j^pPK`8)fZ1M443V-!RaPyeB7sOqScDB0fqFA;P8CIA2c diff --git a/deps/keycloak/themes/keycloak/welcome/resources/bg.png b/deps/keycloak/themes/keycloak/welcome/resources/bg.png deleted file mode 100644 index b722a001b320de8a297a800267f24499f017036c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72796 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�uUMdUXaHskh$;TuNe>sE5A1;RU9ye9>rOq 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 D>3@or diff --git a/deps/keycloak/themes/keycloak/welcome/resources/css/welcome.css b/deps/keycloak/themes/keycloak/welcome/resources/css/welcome.css deleted file mode 100644 index c6a679a28..000000000 --- a/deps/keycloak/themes/keycloak/welcome/resources/css/welcome.css +++ /dev/null @@ -1,140 +0,0 @@ -body { - background: #fff url(../bg.png) no-repeat center bottom fixed; - background-size: cover; -} -.welcome-header { - margin-top: 10px; - margin-bottom: 50px; - margin-left: -10px; -} -.welcome-header img { - width: 150px; - margin-bottom: 40px; -} -.welcome-message { - margin-top: 20px; -} -.h-l { - min-height: 370px; - padding: 10px 20px 10px; - overflow: hidden; -} -.h-l h3 { - margin-bottom: 10px; -} -.h-m { - height: 110px; - padding-top: 23px; -} -.card-pf img { - width: 22px; - margin-right: 10px; - vertical-align: bottom; -} -img.doc-img { - width: auto; - height: 22px; -} -.link { - font-size: 16px; - vertical-align: baseline; - margin-left: 5px; -} -h3 { - font-weight: 550; -} -h3 a:link, -h3 a:visited { - color: #333; - font-weight: 550; -} -h3 a:hover, -h3 a:hover .link { - text-decoration: none; - color: #00659c; -} -.h-l h3 a img { - height: 30px; - width: auto; -} - -.description { - margin-top: 30px; -} - -.card-pf { - border-top: 1px solid rgba(3, 3, 3, 0.1); - box-shadow: 0 1px 1px rgba(3, 3, 3, 0.275); -} - -.welcome-form label, -.welcome-form input { - display: block; - width: 100%; -} - -.welcome-form label { - color: #828486; - font-weight: normal; - margin-top: 18px; -} -.welcome-form input { - border: 0; - border-bottom: solid 1px #cbcbcb; -} -.welcome-form input:focus { - border-bottom: solid 1px #5e99c6; - outline-width: 0; -} -.welcome-form button { - margin-top: 10px; -} -.error { - color: #c00; - border-color: #c00; - padding: 5px 10px; -} -.success { - color: #3f9c35; - border-color: #3f9c35; - padding: 5px 10px; -} -.welcome-form + .welcome-primary-link, -.welcome-message + .welcome-primary-link { - display: none; -} - -.footer img { - float: right; - width: 150px; - margin-top: 30px; -} - -@media (max-width: 768px) { - .welcome-header { - margin-top: 10px; - margin-bottom: 20px; - } - .welcome-header img { - margin-bottom: 20px; - } - h3 { - margin-top: 10px; - } - .h-l, - .h-m { - height: auto; - min-height: auto; - padding: 5px 10px; - } - .h-l img { - display: inline; - margin-bottom: auto; - } - .description { - display: none; - } - .footer img { - margin-top: 10px; - } -} diff --git a/deps/keycloak/themes/keycloak/welcome/resources/jboss_community.png b/deps/keycloak/themes/keycloak/welcome/resources/jboss_community.png deleted file mode 100644 index c4a133c185182999ccc87b638c2a747109436873..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3204 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 E08=aAq5uE@ diff --git a/deps/keycloak/themes/keycloak/welcome/resources/logo.png b/deps/keycloak/themes/keycloak/welcome/resources/logo.png deleted file mode 100644 index 134440b16ebf5c23935f14502c08903a530d7829..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7539 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 E08=aAq5uE@ diff --git a/deps/keycloak/themes/keycloak/welcome/resources/mail.png b/deps/keycloak/themes/keycloak/welcome/resources/mail.png deleted file mode 100644 index 3a63e7b855b579a170e559a232e386d561542cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1037 zcmV+o1oHcdP)T2Cy$)U9 zZdp7YFBPaeaOG=McRPR&D4pN~sH2jds;Vf5N+!aSigM17{Pc&g>$$jn=_QqXlS(GS zcvmB*wkQ;hVaoLV&NUwUrW?-X9x1zcq;2I|9QXq1!My$u{8tf9f$bh&qz3~42YtpV zzewvPg4y;?5sJn*0cP3qB1~8-5iA^y!MH{jJ(Pn!!^Ykzag3MhL$oh|Mf+h<_pTME zC*?SG--n&_Il_?`UiUsPs)oILe1S##Au$Eh?pR_H&js{WchR%~%a#|$b^2Z?B3O@1 z1VJUmY5{tyn^;y0S^bP_G%VXEtg(T%y7XYOS|JP?1q&`5jlsB1!?NZ5FFxt5?&R}e z0!laBnprAJ#X^|0N;HXu>{Qr3f!?}buy){}&!D%u;U%c>wqHhsy4SI~r&U_;r01eFv_S|!Fi8*(omy5Uw#54EsT(;tjLZ*@P&DJ2w*L2unB z_Nb1=8kpa7LrTb|tiS+ZP+kv%MuFODKFhl$`_aAqBp07%S6!e92ivjE1{fw35b&wA z^YAi#pj0fxvi1dfWFpqs#@=aOykmUw2P3T1n;(^9s$Z7zT)b=^EZ|dE7?WdCEg^dM z?$b`r-Ywb>i9R)n|5j;rvnZ?ic)2WMQZ2#!sGQgmX3egwybDERm@&KHq|ZU>sm2LK zTA%U;1_0`25eymyu_a{c9pe+JluxQ9SQwLMAwe49e^Oxw=xw zQ%v>CAQcPn-r{C?XW2d>p7D~4gfYWXUXUG2?sq1wl2ugF#XwsfmbJ>fLFFBc@y`6F zn|KsUj@oKI=11iz&wE9Yipk#ThFdYImf+*&5jGFb5RBa1NxSjRXL)g{pkTKT(#&oI zuW#VH4CmC7iViG!7o~h*p&pli$BHE$!5+bi73}Jodw(MZ32SCm#cw};0RV)2iZfu_ zgkP`9x@Ong0qm4mCVnm1w+0x;rT~~q1ZpJlo(B`9^k&W<$SS3jt?36p00000NkvXX Hu0mjf{@~(i diff --git a/deps/keycloak/themes/keycloak/welcome/resources/user.png b/deps/keycloak/themes/keycloak/welcome/resources/user.png deleted file mode 100644 index 0d61bb470927ad8c25aaed14dbd338b6f4a865fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2423 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 diff --git a/deps/keycloak/themes/keycloak/welcome/theme.properties b/deps/keycloak/themes/keycloak/welcome/theme.properties deleted file mode 100644 index c8bc26974..000000000 --- a/deps/keycloak/themes/keycloak/welcome/theme.properties +++ /dev/null @@ -1,7 +0,0 @@ -styles=css/welcome.css -import=common/keycloak - -stylesCommon=node_modules/patternfly/dist/css/patternfly.css node_modules/patternfly/dist/css/patternfly-additions.css - -documentationUrl=https://www.keycloak.org/documentation.html -displayCommunityLinks=true \ No newline at end of file diff --git a/deps/keycloak/themes/ndear/login/error.ftl b/deps/keycloak/themes/ndear/login/error.ftl deleted file mode 100644 index 5cffcb901..000000000 --- a/deps/keycloak/themes/ndear/login/error.ftl +++ /dev/null @@ -1,11 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "form"> - - - \ No newline at end of file diff --git a/deps/keycloak/themes/ndear/login/login-oauth-grant.ftl b/deps/keycloak/themes/ndear/login/login-oauth-grant.ftl deleted file mode 100644 index 30b5340de..000000000 --- a/deps/keycloak/themes/ndear/login/login-oauth-grant.ftl +++ /dev/null @@ -1,41 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout bodyClass="oauth"; section> - <#if section = "header"> - <#if client.name?has_content> - ${msg("oauthGrantTitle",advancedMsg(client.name))} - <#else> - ${msg("oauthGrantTitle",client.clientId)} - - <#elseif section = "form"> -
      -

      ${msg("oauthGrantRequest")}

      -
        - <#if oauth.clientScopesRequested??> - <#list oauth.clientScopesRequested as clientScope> -
      • - ${advancedMsg(clientScope.consentScreenText)} -
      • - - -
      - -
      - -
      -
      -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      -
      - - \ No newline at end of file diff --git a/deps/keycloak/themes/ndear/login/login.ftl b/deps/keycloak/themes/ndear/login/login.ftl deleted file mode 100644 index dcace58d3..000000000 --- a/deps/keycloak/themes/ndear/login/login.ftl +++ /dev/null @@ -1,99 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> - <#if section = "header"> - ${msg("loginAccountTitle")} - <#elseif section = "form"> -
      -
      - <#if realm.password> -
      -
      - - - <#if usernameEditDisabled??> - - <#else> - - - <#if messagesPerField.existsError('username','password')> - - ${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} - - - -
      - -
      - - - -
      - -
      -
      - <#if realm.rememberMe && !usernameEditDisabled??> -
      - -
      - -
      -
      - <#if realm.resetPasswordAllowed> - ${msg("doForgotPassword")} - -
      - -
      - -
      - value="${auth.selectedCredential}"/> - -
      -
      - -
      - - <#if realm.password && social.providers??> -
      -
      -

      ${msg("identity-provider-login-label")}

      - - -
      - - -
      - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !registrationDisabled??> -
      -
      - ${msg("noAccount")} ${msg("doRegister")} -
      -
      - - - - diff --git a/deps/keycloak/themes/ndear/login/messages/messages_de.properties b/deps/keycloak/themes/ndear/login/messages/messages_de.properties deleted file mode 100644 index 85f429f8e..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_de.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Anmelden -needHelp=Brauchen Sie Hilfe? -selectAlternative=Alternativen Identit\u00e4tsanbieter ausw\u00e4hlen - -doRegister=Registrieren -doCancel=Abbrechen -doSubmit=Absenden -doYes=Ja -doNo=Nein -doContinue=Weiter -doIgnore=Ignorieren -doAccept=Annehmen -doDecline=Ablehnen -doForgotPassword=Passwort vergessen? -doClickHere=Hier klicken -doImpersonate=Identit\u00e4tswechsel -kerberosNotConfigured=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -kerberosNotConfiguredTitle=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -bypassKerberosDetail=Entweder sind Sie nicht bei Kerberos angemeldet oder Ihr Browser ist nicht f\u00fcr die Kerberos-Anmeldung eingerichtet. Klicken Sie auf 'Weiter'. um sich auf andere Weise anzumelden. -kerberosNotSetUp=Sie m\u00fcssen Kerberos einrichten, bevor Sie sich anmelden k\u00f6nnen. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -registerWithTitle=Registrieren mit {0} -registerWithTitleHtml={0} -loginTitle=Anmelden bei {0} -loginTitleHtml={0} -impersonateTitle={0} Identit\u00e4tswechsel -impersonateTitleHtml={0} Identit\u00e4tswechsel
      -realmChoice=Bereich -unknownUser=Unbekannter Benutzer -loginTotpTitle=Konfiguration von Mobile Authenticator -loginProfileTitle=Benutzerkonto-Angaben aktualisieren -loginTimeout=Sie haben zu lange gebraucht, sich anzumelden. Der Anmeldevorgang beginnt nun von vorne. -oauthGrantTitle=Zugriff gew\u00e4hren -oauthGrantTitleHtml={0} -errorTitle=Es tut uns Leid -errorTitleHtml=Es tut uns Leid -emailVerifyTitle=E-Mail-Adresse best\u00e4tigen -emailForgotTitle=Passwort vergessen? -updatePasswordTitle=Passwort aktualisieren -codeSuccessTitle=Code erfolgreich -codeErrorTitle=Fehlercode: {0} - -termsTitle=Bestimmungen -termsTitleHtml=Bestimmungen -termsText=

      Definition der Bestimmungen ausstehend

      - -recaptchaFailed=Ung\u00fcltiges Recaptcha -recaptchaNotConfigured=Recaptcha ist erforderlich und wurde nicht konfiguriert -consentDenied=Zustimmung verweigert. - -noAccount=Neuer Benutzer? -username=Benutzername -usernameOrEmail=Benutzername oder E-Mail -firstName=Vorname -givenName=Vorname -fullName=Vollst\u00e4ndiger Name -lastName=Nachname -familyName=Nachname -email=E-Mail -password=Passwort -passwordConfirm=Passwort best\u00e4tigen -passwordNew=Neues Passwort -passwordNewConfirm=Best\u00e4tigung des neuen Passworts -rememberMe=Benutzername und Passwort speichern -authenticatorCode=Einmaliger Code -address=Anschrift -street=Stra\u00dfe -locality=Ort -region=Staat, Provinz, Region -postal_code=Postleitzahl -country=Land -emailVerified=E-Mail-Adresse best\u00e4tigt -gssDelegationCredential=GSS-Delegations-Berechtigung - -loginTotpStep1=Installieren Sie eine der folgenden Anwendungen auf Ihrem Smartphone -loginTotpStep2=\u00d6ffnen Sie die Anwendung und scannen Sie den Barcode -loginTotpStep3=Geben Sie den von der Anwendung generierten einmaligen Code ein und klicken Sie 'Absenden', um die Konfiguration abzuschlie\u00dfen. -loginTotpManualStep2=\u00d6ffnen Sie die Anwendung und geben Sie den Schl\u00fcssel ein -loginTotpManualStep3=Verwenden Sie die folgenden Konfigurationswerte, wenn die Anwendung deren Konfiguration zul\u00e4sst -loginTotpUnableToScan=Sie k\u00f6nnen den Barcode nicht scannen? -loginTotpScanBarcode=Barcode scannen? -loginTotpOneTime=Einmaliger Code -loginTotpType=Typ -loginTotpAlgorithm=Algorithmus -loginTotpDigits=Ziffern -loginTotpInterval=Intervall - -loginTotp.totp=Zeitbasiert -loginTotp.hotp=Z\u00e4hlerbasiert - - -oauthGrantRequest=M\u00f6chten Sie diese Zugriffsrechte gew\u00e4hren? -inResource=in - -emailVerifyInstruction1=Eine E-Mail mit Anweisungen zur Best\u00e4tigung Ihrer E-Mail-Adresse wurde an Sie geschickt. -emailVerifyInstruction2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailVerifyInstruction3=um die E-Mail erneut zu schicken - -emailLinkIdpTitle={0} verkn\u00fcpfen -emailLinkIdp1=Eine E-Mail mit Anweisungen zur Verkn\u00fcpfung des {0}-Kontos {1} mit Ihrem {2}-Konto wurde an Sie geschickt. -emailLinkIdp2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailLinkIdp3=um die E-Mail erneut zu schicken -emailLinkIdp4=Wenn Sie die E-Mail-Adresse bereits in einem anderen Browser best\u00e4tigt haben -emailLinkIdp5=um fortzufahren - -backToLogin=« Zur\u00fcck zur Anmeldung - -emailInstruction=Geben Sie Ihren Benutzernamen und Ihre E-Mail-Adresse ein. Wir werden Ihnen dann Anweisungen zum Erstellen eines neuen Passworts schicken. - -copyCodeInstruction=Kopieren Sie diesen Code und f\u00fcgen Sie Ihn in Ihrer Anwendung ein - -pageExpiredTitle=Seite abgelaufen -pageExpiredMsg1=Um den Anmeldevorgang neu zu beginnen -pageExpiredMsg2=Um den Anmeldevorgang fortzusetzen - -personalInfo=Pers\u00f6nliche Informationen: -role_admin=Admin -role_realm-admin=Bereichs-Admin -role_create-realm=Bereich erstellen -role_create-client=Client erstellen -role_view-realm=Bereich anzeigen -role_view-users=Benutzer anzeigen -role_view-applications=Anwendungen anzeigen -role_view-clients=Clients anzeigen -role_view-events=Ereignisse anzeigen -role_view-identity-providers=Identit\u00e4tsanbieter anzeigen -role_manage-realm=Bereich verwalten -role_manage-users=Benutzer verwalten -role_manage-applications=Anwendungen verwalten -role_manage-identity-providers=Identit\u00e4tsanbieter verwalten -role_manage-clients=Clients verwalten -role_manage-events=Ereignisse verwalten -role_view-profile=Profil von {0} anzeigen -role_manage-account=Benutzerkonto verwalten -role_manage-account-links=Kontoverkn\u00fcpfungen verwalten -role_read-token=Token lesen -role_offline-access=Offline-Zugriff -client_account=Konto -client_security-admin-console=Sicherheitsadministratorkonsole -client_admin-cli=Admin-CLI -client_realm-management=Bereichsverwaltung -client_broker=Broker - -invalidUserMessage=Benutzername oder Passwort ung\u00fcltig -invalidEmailMessage=E-Mail-Adresse ung\u00fcltig -accountDisabledMessage=Ihr Benutzerkonto wurde deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -accountTemporarilyDisabledMessage=Ihr Benutzerkonto wurde vor\u00fcbergehend deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten, oder versuchen Sie es sp\u00e4ter noch einmal. -expiredCodeMessage=Ihre Sitzung ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionTokenNoSessionMessage=Ihre Aktion ist abgelaufen -expiredActionTokenSessionExistsMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. - -missingFirstNameMessage=Geben Sie Ihren Vornamen ein -missingLastNameMessage=Geben Sie Ihren Nachnamen eine -missingEmailMessage=Geben Sie Ihre E-Mail-Adresse ein -missingUsernameMessage=Geben Sie Ihren Benutzernamen ein -missingPasswordMessage=Geben Sie Ihr Passwort ein -missingTotpMessage=Geben Sie Ihren Authentifizierungscode ein -notMatchPasswordMessage=Wir k\u00f6nnen Sie nicht anmelden. Die eingegebenen Passw\u00f6rter stimmen nicht \u00fcberein. - -invalidPasswordExistingMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden ung\u00fcltig. -invalidPasswordBlacklistedMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden gesperrt. -invalidPasswordConfirmMessage=Wir k\u00f6nnen Sie nicht anmelden. Das Passwort, das Sie zur Best\u00e4tigung eingegeben haben, stimmt nicht mit dem zuerst eingegebenen Passwort \u00fcberein. -invalidTotpMessage=Wir k\u00f6nnen Sie nicht anmelden. Der eingegebene Authentifizierungscode ist unter Umst\u00e4nden ung\u00fcltig. - -usernameExistsMessage=Benutzername bereits vorhanden -emailExistsMessage=E-Mail-Adresse bereits vorhanden - -federatedIdentityExistsMessage=Benutzer mit {0} {1} gibt es bereits. Melden Sie sich in der Benutzerkontoverwaltung an, um das Benutzerkonto zu verkn\u00fcpfen. - -confirmLinkIdpTitle=Benutzerkonto bereits vorhanden -federatedIdentityConfirmLinkMessage=Benutzer mit {0} {1} gibt es bereits. Wie m\u00f6chten Sie fortfahren? -federatedIdentityConfirmReauthenticateMessage=Als {0} authentifizieren, um das Benutzerkonto mit {1} zu verkn\u00fcpfen -confirmLinkIdpReviewProfile=Profil \u00fcberpr\u00fcfen -confirmLinkIdpContinue=Zu bestehendem Benutzerkonto hinzuf\u00fcgen - -configureTotpMessage=Sie m\u00fcssen Mobile Authenticator einrichten, um Ihr Benutzerkonto zu aktivieren -updateProfileMessage=Sie m\u00fcssen Ihr Benutzerprofil aktualisieren, um Ihr Benutzerkonto zu aktivieren -updatePasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern, um Ihr Benutzerkonto zu aktivieren -resetPasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern -verifyEmailMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto zu aktivieren -linkIdpMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto mit {0} zu verkn\u00fcpfen - -emailSentMessage=Sie werden in K\u00fcrze eine E-Mail mit weiteren Anweisungen erhalten. -emailSendErrorMessage=Wir konnten die E-Mail leider nicht senden. Versuchen Sie es sp\u00e4ter noch einmal. - -accountUpdatedMessage=Ihr Benutzerkonto wurde aktualisiert -accountPasswordUpdatedMessage=Ihr Passwort wurde aktualisiert - -noAccessMessage=Kein Zugriff - -invalidPasswordMinLengthMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Zeichen lang sein -invalidPasswordMinDigitsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Ziffern enthalten -invalidPasswordMinLowerCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Kleinbuchstaben enthalten -invalidPasswordMinUpperCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Gro\u00dfbuchstaben enthalten -invalidPasswordMinSpecialCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Sonderzeichen enthalten -invalidPasswordNotUsernameMessage=Passwort und Benutzername d\u00fcrfen nicht identisch sein -invalidPasswordRegexPatternMessage=Passw\u00f6rter m\u00fcssen dem Regex-Muster entsprechen -invalidPasswordHistoryMessage=Das neue Passwort darf nicht mit einem der {0} letzten Passw\u00f6rter identisch sein -invalidPasswordGenericMessage=Ihr Passwort erf\u00fcllt nicht die Passwort-Anforderungen - -failedToProcessResponseMessage=Antwort konnte nicht verarbeitet werden -httpsRequiredMessage=HTTPS erforderlich -realmNotEnabledMessage=Bereich nicht aktiviert -invalidRequestMessage=Unzul\u00e4ssige Anfrage -failedLogout=Abmeldung fehlgeschlagen -unknownLoginRequesterMessage=Unbekannter Anmeldungs-Anfrager -loginRequesterNotEnabledMessage=Anmeldungs-Anfrager nicht aktiviert -bearerOnlyMessage=Bearer-only-Anwendungen k\u00f6nnen keine Browser-Anmeldung initiieren -standardFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Standardfluss ist f\u00fcr diesen Client deaktiviert. -implicitFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Impliziter Fluss ist f\u00fcr diesen Client deaktiviert. -invalidRedirectUriMessage=Umleitungs-URI ung\u00fcltig -unsupportedNameIdFormatMessage=Nicht unterst\u00fctztes NameIDFormat -invalidRequesterMessage=Ung\u00fcltiger Anfrager -registrationNotAllowedMessage=Registrierung nicht erlaubt -resetCredentialNotAllowedMessage=Zur\u00fccksetzen der Anmeldedaten nicht erlaubt - -permissionNotApprovedMessage=Berechtigung verweigert -noRelayStateInResponseMessage=Kein Relay-Zustand als Antwort von Identit\u00e4tsanbieter -insufficientPermissionMessage=Nicht ausreichend Berechtigungen zum Verkn\u00fcpfen von Identit\u00e4ten -couldNotProceedWithAuthenticationRequestMessage=Authentifizierungsanfrage an Identit\u00e4tsanbieter konnte nicht fortgesetzt werden -couldNotObtainTokenMessage=Token konnte nicht von Identit\u00e4tsanbieter eingeholt werden -unexpectedErrorRetrievingTokenMessage=Unbekannter Fehler beim Abrufen des Token vom Identit\u00e4tsanbieter -unexpectedErrorHandlingResponseMessage=Unbekannter Fehler bei Verarbeitung der Antwort vom Identit\u00e4tsanbieter -identityProviderAuthenticationFailedMessage=Authentifizierung fehlgeschlagen. Authentifizierung bei Identit\u00e4tsanbieter war nicht m\u00f6glich -identityProviderDifferentUserMessage=Als {0} authentifiziert, aber Authentifizierung als {1} erwartet -couldNotSendAuthenticationRequestMessage=Authentifizierungsanfrage konnte nicht an Identit\u00e4tsanbieter gesendet werden -unexpectedErrorHandlingRequestMessage=Unbekannter Fehler bei Verarbeitung der Authentifizierungsanfrage an den Identit\u00e4tsanbieter -invalidAccessCodeMessage=Zugangscode ung\u00fcltig -sessionNotActiveMessage=Sitzung nicht aktiv -invalidCodeMessage=Es ist ein Problem aufgetreten. Melden Sie sich \u00fcber Ihre Anwendung neu an. -identityProviderUnexpectedErrorMessage=Es ist ein Problem aufgetreten. Sie konnten nicht vom Identit\u00e4tsanbieter authentifiziert werden. -identityProviderNotFoundMessage=Kein Identit\u00e4tsanbieter mit der Kennung gefunden -identityProviderLinkSuccess=Sie haben Ihre E-Mail-Adresse erfolgreich best\u00e4tigt. Kehren Sie zu Ihrem urspr\u00fcnglichen Browser-Fenster zur\u00fcck und fahren Sie mit der Anmeldung fort. -staleCodeMessage=Diese Seite ist nicht mehr g\u00fcltig. Kehren Sie zu Ihrer Anwendung zur\u00fcck und melden Sie sich erneut an. -realmSupportsNoCredentialsMessage=Bereich unterst\u00fctzt keine Anmeldedaten-Typen. -identityProviderNotUniqueMessage=Der Bereich unterst\u00fctzt mehrere Identit\u00e4tsanbieter. Es konnte kein eindeutiger Identit\u00e4tsanbieter zum Authentifizieren gew\u00e4hlt werden. -emailVerifiedMessage=Ihre E-Mail-Adresse wurde best\u00e4tigt -staleEmailVerificationLink=Der Link ist nicht mehr g\u00fcltig. Wom\u00f6glich haben Sie Ihre E-Mail-Adresse bereits best\u00e4tigt. -identityProviderAlreadyLinkedMessage=Die von {0} zur\u00fcckgegebene f\u00f6derierte Identit\u00e4t ist bereits mit einem anderen Benutzer verkn\u00fcpft -confirmAccountLinking=Best\u00e4tigung der Verkn\u00fcpfung des Benutzerkontos {0} von Identit\u00e4tsanbieter {1} mit Ihrem Benutzerkonto -confirmEmailAddressVerification=Best\u00e4tigung der E-Mail-Adresse {0} -confirmExecutionOfActions=F\u00fchren Sie die folgende(n) Aktion(en) aus - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Zur\u00fcck zur Anwendung -missingParameterMessage=Fehlender Parameter: {0} -clientNotFoundMessage=Client nicht gefunden -clientDisabledMessage=Client deaktiviert -invalidParameterMessage=Ung\u00fcltiger Parameter: {0} -alreadyLoggedIn=Sie sind bereits angemeldet -differentUserAuthenticated=Sie sind bereits als ein anderer Benutzer ''{0}'' in dieser Sitzung angemeldet. Versuchen Sie noch einmal, sich anzumelden. -brokerLinkingSessionExpired=Verkn\u00fcpfung des Broker-Kontos angefordert; Ihre Sitzung ist allerdings nicht mehr g\u00fcltig. -proceedWithAction=» Klicken Sie hier, um fortzufahren - -requiredAction.CONFIGURE_TOTP=Einmalpasswort konfigurieren -requiredAction.terms_and_conditions=Bestimmungen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse best\u00e4tigen - -p3pPolicy=CP="Das ist keine P3P-Richtlinie!" - -doX509Login=Sie werden angemeldet als: -clientCertificate=X509-Client-Zertifikat: -noCertificate=[Kein Zertifikat] - - -pageNotFound=Diese Seite ist nicht verf\u00fcgbar -internalServerError=Es ist ein Problem aufgetreten diff --git a/deps/keycloak/themes/ndear/login/messages/messages_en.properties b/deps/keycloak/themes/ndear/login/messages/messages_en.properties deleted file mode 100644 index ccdcf81ad..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_en.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Sign in -needHelp=Need help? -selectAlternative=Or select an alternative - -doRegister=Register -doCancel=Cancel -doSubmit=Submit -doYes=Yes -doNo=No -doContinue=Continue -doIgnore=Ignore -doAccept=Accept -doDecline=Decline -doForgotPassword=Forgotten your password? -doClickHere=Click here -doImpersonate=Impersonate -kerberosNotConfigured=Kerberos is not configured. Contact your System Administrator for more information. -kerberosNotConfiguredTitle=Kerberos is not configured. Contact your System Administrator for more information. -bypassKerberosDetail=Either you are not signed in via Kerberos or your browser is not set up for Kerberos sign in. Please click continue to sign in through other means. -kerberosNotSetUp=You need to set up Kerberos before you can sign in. Contact your System Administrator for more information. -registerWithTitle=Register with {0} -registerWithTitleHtml={0} -loginTitle=Sign in to {0} -loginTitleHtml={0} -impersonateTitle={0} Impersonate user -impersonateTitleHtml={0} Impersonate user -realmChoice=Realm -unknownUser=Unknown user -loginTotpTitle=Mobile Authenticator Setup -loginProfileTitle=Update Account Information -loginTimeout=You took too long to sign in. The sign in process is starting from the beginning. -oauthGrantTitle=Grant access -oauthGrantTitleHtml={0} -errorTitle=We're sorry -errorTitleHtml=We're sorry -emailVerifyTitle=Email verification -emailForgotTitle=Forgotten your password? -updatePasswordTitle=Update password -codeSuccessTitle=Success code -codeErrorTitle=Error code: {0} - -termsTitle=Terms and Conditions -termsTitleHtml=Terms and Conditions -termsText=

      Terms and conditions to be defined

      - -recaptchaFailed=Invalid Recaptcha -recaptchaNotConfigured=Recaptcha is required and has not been configured -consentDenied=Consent denied. - -noAccount=New user? -username=Username -usernameOrEmail=mobile or email -firstName=First name -givenName=Given name -fullName=Full name -lastName=Last name -familyName=Family name -email=Email -password=Password -passwordConfirm=Confirm password -passwordNew=New Password -passwordNewConfirm=New password confirmation -rememberMe=Remember me -authenticatorCode=One-time code -address=Address -street=Street -locality=City or Locality -region=State, Province, or Region -postal_code=Zip or Postal code -country=Country -emailVerified=Email verified -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Install one of the following applications on your mobile -loginTotpStep2=Open the application and scan the barcode -loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup -loginTotpManualStep2=Open the application and enter the key -loginTotpManualStep3=Use the following configuration values if the application allows them to be set -loginTotpUnableToScan=Unable to scan? -loginTotpScanBarcode=Scan barcode? -loginTotpOneTime=One-time code -loginTotpType=Type -loginTotpAlgorithm=Algorithm -loginTotpDigits=Digits -loginTotpInterval=Interval - -loginTotp.totp=Time-based -loginTotp.hotp=Counter-based - - -oauthGrantRequest=Do you grant these access privileges? -inResource=in - -emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you -emailVerifyInstruction2=Haven't received a verification code in your email? -emailVerifyInstruction3=to re-send the email - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you -emailLinkIdp2=Haven't received a verification code in your email? -emailLinkIdp3=to re-send the email -emailLinkIdp4=If you've already verified the email in a different browser -emailLinkIdp5=to continue - -backToLogin=« Back to Sign in - -emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password - -copyCodeInstruction=Copy this code and paste it into your application - -pageExpiredTitle=Page has expired -pageExpiredMsg1=To restart the sign in process -pageExpiredMsg2=To continue the sign in process - -personalInfo=Personal Info: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Create realm -role_create-client=Create client -role_view-realm=View realm -role_view-users=View users -role_view-applications=View applications -role_view-clients=View clients -role_view-events=View events -role_view-identity-providers=View identity providers -role_manage-realm=Manage realm -role_manage-users=Manage users -role_manage-applications=Manage applications -role_manage-identity-providers=Manage identity providers -role_manage-clients=Manage clients -role_manage-events=Manage events -role_view-profile=View profile -role_manage-account=Manage account -role_manage-account-links=Manage account links -role_read-token=Read token -role_offline-access=Offline access -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm Management -client_broker=Broker - -invalidUserMessage=Invalid username or password -invalidEmailMessage=Invalid email address -accountDisabledMessage=Your account is disabled. Contact your System Administrator for more information. -accountTemporarilyDisabledMessage=Your account is temporarily disabled. Contact your System Administrator for more information or try again later. -expiredCodeMessage=Your session has timed out. Try signing in again. -expiredActionMessage=Your action has expired. Try signing in again. -expiredActionTokenNoSessionMessage=Your action has expired -expiredActionTokenSessionExistsMessage=Your action has expired. Try signing in again. - -missingFirstNameMessage=Type your first name -missingLastNameMessage=Type your last name -missingEmailMessage=Type your email address -missingUsernameMessage=Type your username -missingPasswordMessage=Type your password -missingTotpMessage=Type your authenticator code -notMatchPasswordMessage=We're having problems signing you in. The passwords you entered don't match. - -invalidPasswordExistingMessage=We're having problems signing you in. The password you entered may be invalid. -invalidPasswordBlacklistedMessage=We're having problems signing you in. The password you entered may be blacklisted. -invalidPasswordConfirmMessage=We're having problems signing you in. The password confirmation you entered doesn't match. -invalidTotpMessage=We're having problems signing you in. The authenticator code you entered may be invalid. - -usernameExistsMessage=Username already exists -emailExistsMessage=Email already exists - -federatedIdentityExistsMessage=User with {0} {1} already exists. Sign in to Account Management to link the account. - -confirmLinkIdpTitle=Account already exists -federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? -federatedIdentityConfirmReauthenticateMessage=Authenticate as {0} to link your account with {1} -confirmLinkIdpReviewProfile=Review profile -confirmLinkIdpContinue=Add to existing account - -configureTotpMessage=You need to set up Mobile Authenticator to activate your account -updateProfileMessage=You need to update your user profile to activate your account -updatePasswordMessage=You need to change your password to activate your account -resetPasswordMessage=You need to change your password -verifyEmailMessage=You need to verify your email address to activate your account -linkIdpMessage=You need to verify your email address to link your account with {0} - -emailSentMessage=You will receive an email shortly with further instructions -emailSendErrorMessage=We have been unable to send the email. Try again later. - -accountUpdatedMessage=Your account has been updated -accountPasswordUpdatedMessage=Your password has been updated - -noAccessMessage=No access - -invalidPasswordMinLengthMessage=Passwords must have a minimum length of {0} characters -invalidPasswordMinDigitsMessage=Passwords must have a minimum of {0} numbers -invalidPasswordMinLowerCaseCharsMessage=Passwords must have a minimum of {0} lower case characters -invalidPasswordMinUpperCaseCharsMessage=Passworrds must have a minimum of {0} upper case characters -invalidPasswordMinSpecialCharsMessage=Passwords must have a minimum of {0} special characters -invalidPasswordNotUsernameMessage=Your password can't be your username -invalidPasswordRegexPatternMessage=Passwords must match the regex pattern -invalidPasswordHistoryMessage=Passwords must not be equal to any of the last {0} passwords -invalidPasswordGenericMessage=Your password doesn't match the password policy - -failedToProcessResponseMessage=Failed to process response -httpsRequiredMessage=HTTPS required -realmNotEnabledMessage=Realm not enabled -invalidRequestMessage=Invalid request -failedLogout=Logout failed -unknownLoginRequesterMessage=Unknown login requester -loginRequesterNotEnabledMessage=Login requester not enabled -bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login -standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. -implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. -invalidRedirectUriMessage=Invalid redirect uri -unsupportedNameIdFormatMessage=Unsupported NameIDFormat -invalidRequesterMessage=Invalid requester -registrationNotAllowedMessage=Registration not allowed -resetCredentialNotAllowedMessage=Reset Credential not allowed - -permissionNotApprovedMessage=Permission denied -noRelayStateInResponseMessage=No relay state in response from identity provider -insufficientPermissionMessage=Insufficient permissions to link identities -couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider -couldNotObtainTokenMessage=Could not obtain token from identity provider -unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider -unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider -identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider -identityProviderDifferentUserMessage=Authenticated as {0}, but expected to be authenticated as {1} -couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider -unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider -invalidAccessCodeMessage=Invalid access code -sessionNotActiveMessage=Session not active -invalidCodeMessage=We hit a problem. Try signing in again through your application. -identityProviderUnexpectedErrorMessage=We hit a problem. It wasn't possible to authenticate with the identity provider. -identityProviderNotFoundMessage=Could not find an identity provider with the identifier -identityProviderLinkSuccess=You successfully verified your email. Go back to your original browser and continue with the sign in. -staleCodeMessage=This page is no longer valid. Go back to your application and sign in again. -realmSupportsNoCredentialsMessage=Realm does not support any credential type. -identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. -emailVerifiedMessage=Your email address has been verified -staleEmailVerificationLink=The link is no longer valid. You may have already verified your email address. -identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user -confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account -confirmEmailAddressVerification=Confirm validity of e-mail address {0} -confirmExecutionOfActions=Perform the following action(s) - -locale_ca=Catal\u00E0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00F1ol -locale_fr=Fran\u00e7ais -locale_it=Italian -locale_ja=\u65E5\u672C\u8A9E -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00EAs (Brasil) -locale_pt-BR=Portugu\u00EAs (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Back to Application -missingParameterMessage=Missing parameters: {0} -clientNotFoundMessage=Client not found -clientDisabledMessage=Client disabled -invalidParameterMessage=Invalid parameter: {0} -alreadyLoggedIn=You are already signed in -differentUserAuthenticated=You are already signed in as different user '{0}' in this session. Try signing in again. -brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. -proceedWithAction=» Click here to proceed - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email - -p3pPolicy=CP="This is not a P3P policy!" - -doX509Login=You will be signed in as: -clientCertificate=X509 client certificate: -noCertificate=[No Certificate] - - -pageNotFound=This page is not available -internalServerError=We hit a problem diff --git a/deps/keycloak/themes/ndear/login/messages/messages_es.properties b/deps/keycloak/themes/ndear/login/messages/messages_es.properties deleted file mode 100644 index 3a46e9f6c..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_es.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Iniciar sesi\u00f3n -needHelp=\u00bfNecesita ayuda? -selectAlternative=O seleccione otra alternativa - -doRegister=Registrarse -doCancel=Cancelar -doSubmit=Enviar -doYes=S\u00ed -doNo=No -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceptar -doDecline=Rechazar -doForgotPassword=\u00bfHa olvidado su contrase\u00f1a? -doClickHere=Pulse aqu\u00ed -doImpersonate=Suplantar -kerberosNotConfigured=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -kerberosNotConfiguredTitle=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -bypassKerberosDetail=O bien no ha iniciado sesi\u00f3n por medio de Kerberos o su navegador no est\u00e1 configurado para iniciar sesi\u00f3n por Kerberos. Haga clic en Continuar para iniciar sesi\u00f3n por otros medios. -kerberosNotSetUp=Debe configurar Kerberos para poder iniciar sesi\u00f3n. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -registerWithTitle=Registrarse con {0} -registerWithTitleHtml={0} -loginTitle=Iniciar sesi\u00f3n en {0} -loginTitleHtml={0} -impersonateTitle={0}\u00a0Suplantar usuario -impersonateTitleHtml={0} Suplantar usuario -realmChoice=Dominio -unknownUser=Usuario desconocido -loginTotpTitle=Configuraci\u00f3n de Mobile Authenticator -loginProfileTitle=Actualizar informaci\u00f3n de cuenta -loginTimeout=Ha tardado demasiado en iniciar sesi\u00f3n. El proceso de inicio de sesi\u00f3n comenzar\u00e1 desde el principio. -oauthGrantTitle=Conceder acceso -oauthGrantTitleHtml={0} -errorTitle=Lo sentimos -errorTitleHtml=Lo sentimos -emailVerifyTitle=Verificaci\u00f3n de correo electr\u00f3nico -emailForgotTitle=\u00bfHa olvidado su contrase\u00f1a? -updatePasswordTitle=Actualizar contrase\u00f1a -codeSuccessTitle=C\u00f3digo de operaci\u00f3n correcta -codeErrorTitle=C\u00f3digo de error: {0} - -termsTitle=T\u00e9rminos y condiciones -termsTitleHtml=T\u00e9rminos y condiciones -termsText=

      T\u00e9rminos y condiciones por definir

      - -recaptchaFailed=Reconocimiento de texto no v\u00e1lido -recaptchaNotConfigured=El reconocimiento de texto es obligatorio, pero no se ha configurado -consentDenied=Consentimiento denegado. - -noAccount=\u00bfUsuario nuevo? -username=Nombre de usuario -usernameOrEmail=Nombre de usuario o correo electr\u00f3nico -firstName=Nombre -givenName=Nombre de pila -fullName=Nombre completo -lastName=Apellidos -familyName=Apellidos -email=Correo electr\u00f3nico -password=Contrase\u00f1a -passwordConfirm=Confirmar contrase\u00f1a -passwordNew=Nueva contrase\u00f1a -passwordNewConfirm=Confirmaci\u00f3n de nueva contrase\u00f1a -rememberMe=Recordarme -authenticatorCode=C\u00f3digo de verificaci\u00f3n de un solo uso -address=Direcci\u00f3n -street=Calle -locality=Ciudad o municipio -region=Estado, provincia o regi\u00f3n -postal_code=C\u00f3digo postal -country=Pa\u00eds -emailVerified=Correo electr\u00f3nico verificado -gssDelegationCredential=Credenciales de delegaci\u00f3n GSS - -loginTotpStep1=Instale una de las aplicaciones siguientes en su m\u00f3vil -loginTotpStep2=Abra la aplicaci\u00f3n y escanee el c\u00f3digo de barras -loginTotpStep3=Introduzca el c\u00f3digo de un solo uso proporcionado por la aplicaci\u00f3n y haga clic en Enviar para finalizar la configuraci\u00f3n -loginTotpManualStep2=Abra la aplicaci\u00f3n e introduzca la clave -loginTotpManualStep3=Utilice los siguientes valores de configuraci\u00f3n si la aplicaci\u00f3n le permite establecerlos -loginTotpUnableToScan=\u00bfNo puede escanear? -loginTotpScanBarcode=\u00bfEscanear el c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verificaci\u00f3n de un solo uso -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Con duraci\u00f3n definida -loginTotp.hotp=Con contador - - -oauthGrantRequest=\u00bfConcede estos privilegios de acceso? -inResource=en - -emailVerifyInstruction1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para verificar su direcci\u00f3n de correo electr\u00f3nico -emailVerifyInstruction2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailVerifyInstruction3=para reenviar el mensaje de correo electr\u00f3nico - -emailLinkIdpTitle=Enlace {0} -emailLinkIdp1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para enlazar la cuenta {0} {1} con su cuenta {2} -emailLinkIdp2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailLinkIdp3=para reenviar el mensaje de correo electr\u00f3nico -emailLinkIdp4=Si ya ha verificado el correo electr\u00f3nico en otro navegador -emailLinkIdp5=para continuar - -backToLogin=« Volver a Iniciar sesi\u00f3n - -emailInstruction=Introduzca su nombre de usuario o su direcci\u00f3n de correo electr\u00f3nico, y le enviaremos instrucciones para crear una contrase\u00f1a nueva - -copyCodeInstruction=Copie este c\u00f3digo y p\u00e9guelo en su aplicaci\u00f3n - -pageExpiredTitle=La p\u00e1gina ha expirado -pageExpiredMsg1=Para reiniciar el proceso de inicio de sesi\u00f3n -pageExpiredMsg2=Para continuar el proceso de inicio de sesi\u00f3n - -personalInfo=Informaci\u00f3n personal: -role_admin=Administrador -role_realm-admin=Administrador del dominio -role_create-realm=Crear dominio -role_create-client=Crear cliente -role_view-realm=Ver dominio -role_view-users=Ver usuarios -role_view-applications=Ver aplicaciones -role_view-clients=Ver clientes -role_view-events=Ver eventos -role_view-identity-providers=Ver proveedores de identidad -role_manage-realm=Gestionar dominio -role_manage-users=Gestionar usuarios -role_manage-applications=Gestionar aplicaciones -role_manage-identity-providers=Gestionar proveedores de identidad -role_manage-clients=Gestionar clientes -role_manage-events=Gestionar eventos -role_view-profile=Ver perfil -role_manage-account=Gestionar cuenta -role_manage-account-links=Gestionar enlaces de cuenta -role_read-token=Leer token -role_offline-access=Acceso fuera de l\u00ednea -client_account=Cuenta -client_security-admin-console=Consola de administraci\u00f3n de seguridad -client_admin-cli=CLI de administraci\u00f3n -client_realm-management=Gesti\u00f3n de dominios -client_broker=Broker - -invalidUserMessage=Nombre de usuario o contrase\u00f1a no v\u00e1lidos -invalidEmailMessage=Direcci\u00f3n de correo electr\u00f3nico no v\u00e1lida -accountDisabledMessage=Su cuenta est\u00e1 desactivada. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -accountTemporarilyDisabledMessage=Su cuenta est\u00e1 desactivada temporalmente. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n o vuelva a intentarlo m\u00e1s tarde. -expiredCodeMessage=Se ha agotado del tiempo de espera de la sesi\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionTokenNoSessionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n -expiredActionTokenSessionExistsMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. - -missingFirstNameMessage=Escriba su nombre -missingLastNameMessage=Escriba sus apellidos -missingEmailMessage=Escriba su direcci\u00f3n de correo electr\u00f3nico -missingUsernameMessage=Escriba su nombre de usuario -missingPasswordMessage=Escriba su contrase\u00f1a -missingTotpMessage=Escriba su c\u00f3digo de autenticador -notMatchPasswordMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Las contrase\u00f1as introducidas no coinciden. - -invalidPasswordExistingMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida no sea v\u00e1lida. -invalidPasswordBlacklistedMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida est\u00e9 restringida. -invalidPasswordConfirmMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. La contrase\u00f1a de confirmaci\u00f3n introducida no coincide. -invalidTotpMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que el c\u00f3digo de autenticador introducido no sea v\u00e1lido. - -usernameExistsMessage=El nombre de usuario ya existe -emailExistsMessage=La direcci\u00f3n de correo electr\u00f3nico ya existe - -federatedIdentityExistsMessage=Ya existe un usuario con {0} {1}. Inicie sesi\u00f3n en Gesti\u00f3n de cuenta para enlazar la cuenta. - -confirmLinkIdpTitle=La cuenta ya existe -federatedIdentityConfirmLinkMessage=Ya existe un usuario con {0} {1}. \u00bfC\u00f3mo desea continuar? -federatedIdentityConfirmReauthenticateMessage=Autent\u00edquese como {0} para enlazar su cuenta con {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=A\u00f1adir a cuenta existente - -configureTotpMessage=Debe configurar Mobile Authenticator para activar su cuenta -updateProfileMessage=Debe actualizar su perfil de usuario para activar su cuenta -updatePasswordMessage=Debe cambiar su contrase\u00f1a para activar su cuenta -resetPasswordMessage=Debe cambiar su contrase\u00f1a -verifyEmailMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para activar su cuenta -linkIdpMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para enlazar su cuenta con {0} - -emailSentMessage=Recibir\u00e1 un mensaje de correo electr\u00f3nico en breve con m\u00e1s instrucciones -emailSendErrorMessage=No hemos podido enviarle el mensaje de correo electr\u00f3nico. Vuelva a intentarlo m\u00e1s tarde. - -accountUpdatedMessage=Su cuenta se ha actualizado -accountPasswordUpdatedMessage=Su contrase\u00f1a se ha actualizado - -noAccessMessage=Sin acceso - -invalidPasswordMinLengthMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres -invalidPasswordMinDigitsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} n\u00fameros -invalidPasswordMinLowerCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en min\u00fascula -invalidPasswordMinUpperCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en may\u00fascula -invalidPasswordMinSpecialCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres especiales -invalidPasswordNotUsernameMessage=La contrase\u00f1a no puede ser igual que el nombre de usuario -invalidPasswordRegexPatternMessage=Las contrase\u00f1as deben coincidir con el patr\u00f3n regex -invalidPasswordHistoryMessage=Las contrase\u00f1as no pueden ser iguales a ninguna de las {0} \u00faltimas -invalidPasswordGenericMessage=Su contrase\u00f1a no cumple la pol\u00edtica de contrase\u00f1as - -failedToProcessResponseMessage=Fallo al procesar la respuesta -httpsRequiredMessage=HTTPS obligatorio -realmNotEnabledMessage=Dominio no activado -invalidRequestMessage=Solicitud no v\u00e1lida -failedLogout=Fallo al cerrar la sesi\u00f3n -unknownLoginRequesterMessage=Solicitante de inicio de sesi\u00f3n desconocido -loginRequesterNotEnabledMessage=Solicitante de inicio de sesi\u00f3n no activado -bearerOnlyMessage=Las aplicaciones de solo portador (bearer-only) no pueden iniciar sesi\u00f3n en el navegador -standardFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo est\u00e1ndar est\u00e1 desactivado para el cliente. -implicitFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo impl\u00edcito est\u00e1 desactivado para el cliente. -invalidRedirectUriMessage=URI de redirecci\u00f3n no v\u00e1lido -unsupportedNameIdFormatMessage=NameIDFormat no compatible -invalidRequesterMessage=Solicitante no v\u00e1lido -registrationNotAllowedMessage=Registro no permitido -resetCredentialNotAllowedMessage=Credenciales de reinicio no permitidas - -permissionNotApprovedMessage=Permiso denegado -noRelayStateInResponseMessage=Ausencia del estado de retransmisi\u00f3n en la respuesta del proveedor de identidad -insufficientPermissionMessage=Permisos insuficientes para enlazar identidad -couldNotProceedWithAuthenticationRequestMessage=No se pudo proceder con la solicitud de autenticaci\u00f3n al proveedor de identidad -couldNotObtainTokenMessage=No se pudo obtener un token del proveedor de identidad -unexpectedErrorRetrievingTokenMessage=Error inesperado al recuperar token del proveedor de identidad -unexpectedErrorHandlingResponseMessage=Error inesperado al gestionar respuesta del proveedor de identidad -identityProviderAuthenticationFailedMessage=Fallo de autenticaci\u00f3n. No pudo autenticarse con el proveedor de identidad -identityProviderDifferentUserMessage=Autenticado como {0}, pero se esperaba como {1} -couldNotSendAuthenticationRequestMessage=No se pudo enviar la solicitud de autenticaci\u00f3n al proveedor de identidad -unexpectedErrorHandlingRequestMessage=Error inesperado al gestionar la solicitud de autenticaci\u00f3n al proveedor de identidad -invalidAccessCodeMessage=C\u00f3digo de acceso no v\u00e1lido -sessionNotActiveMessage=Sesi\u00f3n inactiva -invalidCodeMessage=Ha surgido un problema. Vuelva a intentar iniciar sesi\u00f3n en su aplicaci\u00f3n. -identityProviderUnexpectedErrorMessage=Ha surgido un problema. No hemos podido autenticarle con el proveedor de identidades. -identityProviderNotFoundMessage=No hemos encontrado un proveedor de identidad con el identificador -identityProviderLinkSuccess=Ha verificado su correo electr\u00f3nico correctamente. Vuelva a su navegador original y contin\u00fae con el inicio de sesi\u00f3n. -staleCodeMessage=Esta p\u00e1gina ya no es v\u00e1lida. Vuelva a su aplicaci\u00f3n e inicie una nueva sesi\u00f3n. -realmSupportsNoCredentialsMessage=El dominio no es compatible con ning\u00fan tipo de credenciales. -identityProviderNotUniqueMessage=El dominio es compatible con varios proveedores de identidad. No se pudo determinar qu\u00e9 proveedor de identidad debe utilizarse para la identificaci\u00f3n. -emailVerifiedMessage=Su direcci\u00f3n de correo electr\u00f3nico se ha verificado -staleEmailVerificationLink=El enlace ya no es v\u00e1lido. Puede que ya haya verificado su direcci\u00f3n de correo electr\u00f3nico. -identityProviderAlreadyLinkedMessage=La identidad federada devuelta por {0} ya est\u00e1 enlazada con otro usuario -confirmAccountLinking=Confirme el enlace de la cuenta {0} del proveedor de identidad {1} con su cuenta -confirmEmailAddressVerification=Confirme la validez de la direcci\u00f3n de correo electr\u00f3nico {0} -confirmExecutionOfActions=Lleve a cabo las siguientes acciones - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Volver a la aplicaci\u00f3n -missingParameterMessage=Par\u00e1metros que faltan: {0} -clientNotFoundMessage=Cliente no encontrado -clientDisabledMessage=Cliente desactivado -invalidParameterMessage=Par\u00e1metro no v\u00e1lido: {0} -alreadyLoggedIn=Ya ha iniciado sesi\u00f3n -differentUserAuthenticated=Ya ha iniciado sesi\u00f3n como un usuario distinto ''{0}'' es esta sesi\u00f3n. Intente volver a iniciar sesi\u00f3n. -brokerLinkingSessionExpired=Enlace de cuenta de broker solicitado, pero la sesi\u00f3n actual ya no es v\u00e1lida. -proceedWithAction=» Haga clic aqu\u00ed para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=T\u00e9rminos y condiciones -requiredAction.UPDATE_PASSWORD=Actualizar contrase\u00f1a -requiredAction.UPDATE_PROFILE=Actualizar perfil -requiredAction.VERIFY_EMAIL=Verificar correo electr\u00f3nico - -p3pPolicy=CP="Esta no es una pol\u00edtica P3P." - -doX509Login=Iniciar\u00e1 sesi\u00f3n como: -clientCertificate=Certificado cliente X509: -noCertificate=[Sin certificado] - - -pageNotFound=Esta p\u00e1gina no est\u00e1 disponible -internalServerError=Ha surgido un problema diff --git a/deps/keycloak/themes/ndear/login/messages/messages_fr.properties b/deps/keycloak/themes/ndear/login/messages/messages_fr.properties deleted file mode 100644 index a1d067e91..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_fr.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Connexion -needHelp=Besoin d'aide ? -selectAlternative=Ou s\u00e9lectionnez une alternative - -doRegister=S'inscrire -doCancel=Annuler -doSubmit=Soumettre -doYes=Oui -doNo=Non -doContinue=Continuer -doIgnore=Ignorer -doAccept=Accepter -doDecline=D\u00e9cliner -doForgotPassword=Mot de passe oubli\u00e9 ? -doClickHere=Cliquer ici -doImpersonate=Emprunter l'identit\u00e9 -kerberosNotConfigured=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -kerberosNotConfiguredTitle=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -bypassKerberosDetail=Vous n'\u00eates pas connect\u00e9 via Kerberos ou votre navigateur n'est pas configur\u00e9 pour l'authentification Kerberos. Cliquez sur Continuer pour vous connecter par un autre moyen. -kerberosNotSetUp=Vous devez configurer Kerberos avant de vous authentifier. Contactez votre administrateur syst\u00e8me pour plus d'informations. -registerWithTitle=M''inscrire avec {0} -registerWithTitleHtml={0} -loginTitle=Me connecter \u00e0 {0} -loginTitleHtml={0} -impersonateTitle={0} Emprunter l''identit\u00e9 de l''utilisateur -impersonateTitleHtml={0} Emprunter l''identit\u00e9 de l''utilisateur -realmChoice=Domaine -unknownUser=Utilisateur inconnu -loginTotpTitle=Configuration de Mobile Authenticator -loginProfileTitle=Mettre \u00e0 jour les informations du compte -loginTimeout=Vous avez mis trop de temps \u00e0 vous connecter. Vous devez recommencer la proc\u00e9dure. -oauthGrantTitle=Donner l'acc\u00e8s -oauthGrantTitleHtml={0} -errorTitle=Nous sommes d\u00e9sol\u00e9s -errorTitleHtml=Nous sommes d\u00e9sol\u00e9s -emailVerifyTitle=V\u00e9rification de l'email -emailForgotTitle=Mot de passe oubli\u00e9 ? -updatePasswordTitle=Mettre \u00e0 jour le mot de passe -codeSuccessTitle=Code de r\u00e9ussite -codeErrorTitle=Code d''erreur : {0} - -termsTitle=Conditions g\u00e9n\u00e9rales -termsTitleHtml=Conditions g\u00e9n\u00e9rales -termsText=

      Conditions g\u00e9n\u00e9rales \u00e0 d\u00e9finir

      - -recaptchaFailed=Recaptcha non valide -recaptchaNotConfigured=Recaptcha est requis et n'a pas \u00e9t\u00e9 configur\u00e9 -consentDenied=Consentement refus\u00e9 - -noAccount=Nouvel utilisateur ? -username=Nom d'utilisateur -usernameOrEmail=Nom d'utilisateur ou email -firstName=Pr\u00e9nom -givenName=Pr\u00e9nom -fullName=Nom complet -lastName=Nom -familyName=Nom de famille -email=Email -password=Mot de passe -passwordConfirm=Confirmer le mot de passe -passwordNew=Nouveau mot de passe -passwordNewConfirm=Confirmation du nouveau mot de passe -rememberMe=M\u00e9moriser -authenticatorCode=Code \u00e0 usage unique -address=Adresse -street=Rue -locality=Ville ou localit\u00e9 -region=\u00c9tat, province ou r\u00e9gion -postal_code=Code postal -country=Pays -emailVerified=Email v\u00e9rifi\u00e9 -gssDelegationCredential=Informations d'identification de d\u00e9l\u00e9gation GSS - -loginTotpStep1=Installez l'une des applications suivantes sur votre mobile -loginTotpStep2=Ouvrez l'application et scannez le code barres -loginTotpStep3=Entrez le code \u00e0 usage unique fourni par l'application et cliquez sur Soumettre pour terminer l'installation -loginTotpManualStep2=Ouvrez l'application et entrez la cl\u00e9 -loginTotpManualStep3=Utilisez les valeurs de configuration suivantes si l'application le permet -loginTotpUnableToScan=Impossible de scanner? -loginTotpScanBarcode=Scanner le code barres ? -loginTotpOneTime=Code \u00e0 usage unique -loginTotpType=Type -loginTotpAlgorithm=Algorithme -loginTotpDigits=Chiffres -loginTotpInterval=Intervalle - -loginTotp.totp=Bas\u00e9 sur l'heure -loginTotp.hotp=Bas\u00e9 sur un compteur - - -oauthGrantRequest=Accordez-vous ces droits d'acc\u00e8s ? -inResource=dans - -emailVerifyInstruction1=Un email avec des instructions pour v\u00e9rifier votre adresse email vous a \u00e9t\u00e9 envoy\u00e9 -emailVerifyInstruction2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email ? -emailVerifyInstruction3=pour envoyer \u00e0 nouveau l'email - -emailLinkIdpTitle=Lier {0} -emailLinkIdp1=Un email avec des instructions pour lier le compte {0} {1} \u00e0 votre compte {2} vous a \u00e9t\u00e9 envoy\u00e9 -emailLinkIdp2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email? -emailLinkIdp3=pour envoyer \u00e0 nouveau l'email -emailLinkIdp4=Si vous avez d\u00e9j\u00e0 v\u00e9rifi\u00e9 l'email dans un autre navigateur -emailLinkIdp5=pour continuer - -backToLogin=« Revenir \u00e0 la page de connexion - -emailInstruction=Entrez votre nom d'utilisateur ou votre adresse email pour recevoir les instructions pour cr\u00e9er un nouveau mot de passe - -copyCodeInstruction=Copiez-collez ce code dans votre application - -pageExpiredTitle=La page a expir\u00e9 -pageExpiredMsg1=Pour recommencer la proc\u00e9dure de connexion -pageExpiredMsg2=Pour continuer la proc\u00e9dure de connexion - -personalInfo=Informations personnelles : -role_admin=Administrateur -role_realm-admin=Administrateur du domaine -role_create-realm=Cr\u00e9er un domaine -role_create-client=Cr\u00e9er un client -role_view-realm=Voir le domaine -role_view-users=Voir les utilisateurs -role_view-applications=Voir les applications -role_view-clients=Voir les clients -role_view-events=Voir les \u00e9v\u00e9nements -role_view-identity-providers=Voir les fournisseurs d'identit\u00e9 -role_manage-realm=G\u00e9rer le domaine -role_manage-users=G\u00e9rer les utilisateurs -role_manage-applications=G\u00e9rer les applications -role_manage-identity-providers=G\u00e9rer les fournisseurs d'identit\u00e9 -role_manage-clients=G\u00e9rer les clients -role_manage-events=G\u00e9rer les \u00e9v\u00e9nements -role_view-profile=Afficher le profil de {0} -role_manage-account=G\u00e9rer le compte -role_manage-account-links=G\u00e9rer les liens de compte -role_read-token=Lire le jeton -role_offline-access=Acc\u00e8s hors connexion -client_account=Compte -client_security-admin-console=Console d'administration de la s\u00e9curit\u00e9 -client_admin-cli=CLI Admin -client_realm-management=Gestion du domaine -client_broker=Agent - -invalidUserMessage=Nom d'utilisateur ou mot de passe non valide -invalidEmailMessage=Adresse email non valide -accountDisabledMessage=Votre compte est d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -accountTemporarilyDisabledMessage=Votre compte est temporairement d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations ou r\u00e9essayez plus tard. -expiredCodeMessage=Votre session a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionTokenNoSessionMessage=L'action a expir\u00e9 -expiredActionTokenSessionExistsMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. - -missingFirstNameMessage=Entrez votre pr\u00e9nom -missingLastNameMessage=Entrez votre nom -missingEmailMessage=Entrez votre adresse email -missingUsernameMessage=Entrez votre nom d'utilisateur -missingPasswordMessage=Entrez votre mot de passe -missingTotpMessage=Entrez votre code d'authentification -notMatchPasswordMessage=\u00c9chec de la connexion. Les mots de passe que vous avez entr\u00e9s sont diff\u00e9rents. - -invalidPasswordExistingMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. -invalidPasswordBlacklistedMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 est peut-\u00eatre sur liste noire. -invalidPasswordConfirmMessage=\u00c9chec de la connexion. Le mot de passe de confirmation que vous avez entr\u00e9 est diff\u00e9rent. -invalidTotpMessage=\u00c9chec de la connexion. Le code d'authentification que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. - -usernameExistsMessage=Le nom d'utilisateur existe d\u00e9j\u00e0 -emailExistsMessage=L'adresse email existe d\u00e9j\u00e0 - -federatedIdentityExistsMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Connectez-vous \u00e0 la gestion de compte pour lier le compte. - -confirmLinkIdpTitle=Le compte existe d\u00e9j\u00e0 -federatedIdentityConfirmLinkMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Comment voulez-vous poursuivre ? -federatedIdentityConfirmReauthenticateMessage=Identifiez-vous en tant que {0} pour lier votre compte \u00e0 {1} -confirmLinkIdpReviewProfile=Revoir le profil -confirmLinkIdpContinue=Ajouter au compte existant - -configureTotpMessage=Vous devez configurer Mobile Authenticator pour activer votre compte -updateProfileMessage=Vous devez mettre \u00e0 jour votre profil utilisateur pour activer votre compte -updatePasswordMessage=Vous devez changer votre mot de passe pour activer votre compte -resetPasswordMessage=Vous devez changer votre mot de passe -verifyEmailMessage=Vous devez v\u00e9rifier votre adresse email pour activer votre compte -linkIdpMessage=Vous devez v\u00e9rifier votre adresse email pour lier votre compte \u00e0 {0} - -emailSentMessage=Vous allez recevoir un email avec d'autres instructions -emailSendErrorMessage=Nous n'avons pas pu envoyer l'email. R\u00e9essayez plus tard. - -accountUpdatedMessage=Votre compte a \u00e9t\u00e9 mis \u00e0 jour -accountPasswordUpdatedMessage=Votre mot de passe a \u00e9t\u00e9 mis \u00e0 jour - -noAccessMessage=Aucun acc\u00e8s - -invalidPasswordMinLengthMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res -invalidPasswordMinDigitsMessage=Les mots de passe doivent comporter au minimum {0} chiffres -invalidPasswordMinLowerCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} minuscules -invalidPasswordMinUpperCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} majuscules -invalidPasswordMinSpecialCharsMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res sp\u00e9ciaux -invalidPasswordNotUsernameMessage=Votre mot de passe ne peut pas \u00eatre votre nom d'utilisateur -invalidPasswordRegexPatternMessage=Les mots de passe doivent \u00eatre conformes au mod\u00e8le regex -invalidPasswordHistoryMessage=Les mots de passe ne peuvent pas \u00eatre identiques aux {0} derniers mots de passe -invalidPasswordGenericMessage=Votre mot de passe n'est pas conforme \u00e0 la strat\u00e9gie de mot de passe - -failedToProcessResponseMessage=Le traitement de la r\u00e9ponse a \u00e9chou\u00e9 -httpsRequiredMessage=HTTPS requis -realmNotEnabledMessage=Domaine inactif -invalidRequestMessage=Requ\u00eate non valide -failedLogout=La d\u00e9connexion a \u00e9chou\u00e9 -unknownLoginRequesterMessage=Demandeur de connexion inconnu -loginRequesterNotEnabledMessage=Demandeur de connexion inactif -bearerOnlyMessage=Les applications Bearer-only ne sont pas autoris\u00e9es \u00e0 initier une connexion dans le navigateur -standardFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux standard est d\u00e9sactiv\u00e9 pour le client. -implicitFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux implicite est d\u00e9sactiv\u00e9 pour le client. -invalidRedirectUriMessage=Uri de redirection non valide -unsupportedNameIdFormatMessage=NameIDFormat non pris en charge -invalidRequesterMessage=Demandeur non valide -registrationNotAllowedMessage=Inscription non autoris\u00e9e -resetCredentialNotAllowedMessage=R\u00e9initialisation des informations d'identification non autoris\u00e9e - -permissionNotApprovedMessage=Autorisation refus\u00e9e -noRelayStateInResponseMessage=Aucun \u00e9tat de relais renvoy\u00e9 par le fournisseur d'identit\u00e9 -insufficientPermissionMessage=Autorisations insuffisantes pour lier les identit\u00e9s -couldNotProceedWithAuthenticationRequestMessage=Impossible de traiter la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -couldNotObtainTokenMessage=Impossible d'obtenir le jeton du fournisseur d'identit\u00e9 -unexpectedErrorRetrievingTokenMessage=Erreur inattendue lors de la r\u00e9cup\u00e9ration du jeton aupr\u00e8s du fournisseur d'identit\u00e9 -unexpectedErrorHandlingResponseMessage=Erreur inattendue lors du traitement de la r\u00e9ponse du fournisseur d'identit\u00e9 -identityProviderAuthenticationFailedMessage=L'authentification a \u00e9chou\u00e9. Authentification avec le fournisseur d'identit\u00e9 impossible -identityProviderDifferentUserMessage=Authentifi\u00e9 en tant que {0}, alors que l''authentification aurait d\u00fb \u00eatre {1} -couldNotSendAuthenticationRequestMessage=Impossible d'envoyer la requ\u00eate d'authentification au fournisseur d'identit\u00e9 -unexpectedErrorHandlingRequestMessage=Erreur inattendue lors du traitement de la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -invalidAccessCodeMessage=Code d'acc\u00e8s non valide -sessionNotActiveMessage=Session inactive -invalidCodeMessage=Une erreur est survenue. Essayez de vous connecter \u00e0 nouveau via votre application. -identityProviderUnexpectedErrorMessage=Une erreur est survenue. Authentification avec le fournisseur d'identit\u00e9 impossible. -identityProviderNotFoundMessage=Aucun fournisseur d'identit\u00e9 n'a \u00e9t\u00e9 trouv\u00e9 avec l'identifiant -identityProviderLinkSuccess=Votre email a bien \u00e9t\u00e9 v\u00e9rifi\u00e9. Revenez \u00e0 votre navigateur d'origine et poursuivez la proc\u00e9dure de connexion. -staleCodeMessage=Cette page n'est plus valide. Revenez \u00e0 votre application et connectez-vous \u00e0 nouveau. -realmSupportsNoCredentialsMessage=Le domaine ne prend en charge aucun type d'informations d'identification. -identityProviderNotUniqueMessage=Le domaine prend en charge plusieurs fournisseurs d'identit\u00e9. Impossible de d\u00e9terminer quel fournisseur d'identit\u00e9 doit \u00eatre utilis\u00e9 pour l'authentification. -emailVerifiedMessage=Votre adresse email a \u00e9t\u00e9 v\u00e9rifi\u00e9e -staleEmailVerificationLink=Le lien n'est plus valide. Vous avez peut-\u00eatre d\u00e9j\u00e0 v\u00e9rifi\u00e9 votre adresse email. -identityProviderAlreadyLinkedMessage=L''identit\u00e9 f\u00e9d\u00e9r\u00e9e renvoy\u00e9e par {0} est d\u00e9j\u00e0 li\u00e9e \u00e0 un autre utilisateur -confirmAccountLinking=Confirmer la liaison du compte {0} du fournisseur d''identit\u00e9 {1} avec votre compte -confirmEmailAddressVerification=Confirmer la validit\u00e9 de l''adresse email {0} -confirmExecutionOfActions=Effectuez la ou les actions suivantes - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Retour \u00e0 l'application -missingParameterMessage=Param\u00e8tres manquants : {0} -clientNotFoundMessage=Client introuvable -clientDisabledMessage=Client d\u00e9sactiv\u00e9 -invalidParameterMessage=Param\u00e8tre non valide : {0} -alreadyLoggedIn=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 -differentUserAuthenticated=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 sous l''identit\u00e9 d''un utilisateur diff\u00e9rent ''{0}'' dans cette session. Essayez de vous connecter \u00e0 nouveau. -brokerLinkingSessionExpired=Liaison au compte de l'agent demand\u00e9e, mais la session en cours n'est plus valide. -proceedWithAction=» Cliquez ici pour continuer - -requiredAction.CONFIGURE_TOTP=Configurer le code \u00e0 usage unique -requiredAction.terms_and_conditions=Conditions g\u00e9n\u00e9rales -requiredAction.UPDATE_PASSWORD=Mettre \u00e0 jour le mot de passe -requiredAction.UPDATE_PROFILE=Mettre \u00e0 jour le profil -requiredAction.VERIFY_EMAIL=V\u00e9rifier l'email - -p3pPolicy=CP="Ce n'est pas une politique P3P !" - -doX509Login=Vous serez connect\u00e9 en tant que : -clientCertificate=Certificat client X509 : -noCertificate=[Pas de certificat] - - -pageNotFound=Cette page n'est pas accessible -internalServerError=Un probl\u00e8me est survenu diff --git a/deps/keycloak/themes/ndear/login/messages/messages_it.properties b/deps/keycloak/themes/ndear/login/messages/messages_it.properties deleted file mode 100644 index e49caaaba..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_it.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Accedi -needHelp=Hai bisogno di aiuto? -selectAlternative=O seleziona un'alternativa - -doRegister=Registrati -doCancel=Annulla -doSubmit=Invia -doYes=S\u00ec -doNo=No -doContinue=Continua -doIgnore=Ignora -doAccept=Accetta -doDecline=Nega -doForgotPassword=Password dimenticata? -doClickHere=Fare clic qui -doImpersonate=Rappresenta -kerberosNotConfigured=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -kerberosNotConfiguredTitle=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -bypassKerberosDetail=L'accesso non \u00e8 stato effettuato tramite Kerberos oppure il browser non \u00e8 configurato per l'accesso a Kerberos. Fare clic su Continua per accedere in altro modo. -kerberosNotSetUp=\u00c8 necessario configurare Kerberos per effettuare l'accesso. Per ulteriori informazioni, contattare l'amministratore di sistema. -registerWithTitle=Registrati con {0} -registerWithTitleHtml={0} -loginTitle=Accedi a {0} -loginTitleHtml={0} -impersonateTitle=Rappresenta utente {0} -impersonateTitleHtml={0} Rappresenta utente -realmChoice=Area di autenticazione -unknownUser=Utente sconosciuto -loginTotpTitle=Configurazione autenticazione mobile -loginProfileTitle=Aggiorna dati account -loginTimeout=Tempo scaduto per l'accesso. La procedura verr\u00e0 riavviata dall'inizio. -oauthGrantTitle=Concedi accesso -oauthGrantTitleHtml={0} -errorTitle=Spiacenti -errorTitleHtml=Spiacenti -emailVerifyTitle=Verifica e-mail -emailForgotTitle=Password dimenticata? -updatePasswordTitle=Aggiorna password -codeSuccessTitle=Codice valido -codeErrorTitle=Codice di errore: {0} - -termsTitle=Termini e condizioni -termsTitleHtml=Termini e condizioni -termsText=

      Termini e condizioni da definire

      - -recaptchaFailed=Recaptcha non valido -recaptchaNotConfigured=Recaptcha obbligatorio e non configurato -consentDenied=Consenso negato. - -noAccount=Nuovo utente? -username=Nome utente -usernameOrEmail=Nome utente o e-mail -firstName=Nome -givenName=Nome -fullName=Nome e cognome -lastName=Cognome -familyName=Cognome -email=E-mail -password=Password -passwordConfirm=Conferma password -passwordNew=Nuova password -passwordNewConfirm=Conferma nuova password -rememberMe=Ricordami -authenticatorCode=Codice One-Time -address=Indirizzo -street=Via -locality=Citt\u00e0 o Localit\u00e0 -region=Stato, Provincia o Regione -postal_code=CAP o codice postale -country=Paese -emailVerified=E-mail verificata -gssDelegationCredential=Credenziali GSS Delegation - -loginTotpStep1=Installare una delle seguenti applicazioni sul cellulare -loginTotpStep2=Aprire l'applicazione ed eseguire la scansione del codice a barre -loginTotpStep3=Inserire il codice One-Time fornito dall'applicazione e premere Invia per completare la configurazione -loginTotpManualStep2=Aprire l'applicazione e inserire il codice -loginTotpManualStep3=Usare i seguenti valori di configurazione se l'applicazione li consente -loginTotpUnableToScan=Impossibile eseguire la scansione? -loginTotpScanBarcode=Eseguire la scansione del codice a barre? -loginTotpOneTime=Codice One-Time -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=Cifre -loginTotpInterval=Intervallo - -loginTotp.totp=In base al tempo -loginTotp.hotp=In base al contattore - - -oauthGrantRequest=Assegnare questi privilegi di accesso? -inResource=in - -emailVerifyInstruction1=\u00c8 stata inviata un'e-mail con le istruzioni per verificare l'indirizzo e-mail -emailVerifyInstruction2=Codice di verifica non ricevuto via e-mail? -emailVerifyInstruction3=per inviare nuovamente l'e-mail - -emailLinkIdpTitle=Collega {0} -emailLinkIdp1=\u00c8 stata inviata un''e-email con le istruzioni per collegare {0} account {1} con l''account {2} -emailLinkIdp2=Codice di verifica non ricevuto via e-mail? -emailLinkIdp3=per inviare nuovamente l'e-mail -emailLinkIdp4=Se l'e-mail \u00e8 gi\u00e0 stata verificata in un altro browser -emailLinkIdp5=per continuare - -backToLogin=« Torna all'accesso - -emailInstruction=Inserire il nome utente o l'indirizzo e-mail per ricevere le istruzioni per creare una nuova password - -copyCodeInstruction=Copiare questo codice e incollarlo nell'applicazione - -pageExpiredTitle=La pagina \u00e8 scaduta -pageExpiredMsg1=Per riavviare la procedura di accesso -pageExpiredMsg2=Per continuare la procedura di accesso - -personalInfo=Informazioni personali: -role_admin=Amministratore -role_realm-admin=Amministratore area di autenticazione -role_create-realm=Crea area di autenticazione -role_create-client=Crea client -role_view-realm=Mostra area di autenticazione -role_view-users=Mostra utenti -role_view-applications=Mostra applicazioni -role_view-clients=Mostra client -role_view-events=Mostra eventi -role_view-identity-providers=Mostra provider di identit\u00e0 -role_manage-realm=Gestisci area di autenticazione -role_manage-users=Gestisci utenti -role_manage-applications=Gestisci applicazioni -role_manage-identity-providers=Gestisci provider di identit\u00e0 -role_manage-clients=Gestisci client -role_manage-events=Gestisci eventi -role_view-profile=Visualizza il profilo di {0} -role_manage-account=Gestisci account -role_manage-account-links=Gestisci link account -role_read-token=Leggi il token -role_offline-access=Accesso offline -client_account=Account -client_security-admin-console=Console di amministrazione di sicurezza -client_admin-cli=Amministratore CLI -client_realm-management=Gestione area di autenticazione -client_broker=Broker - -invalidUserMessage=Nome utente o password non validi -invalidEmailMessage=Indirizzo e-mail non valido -accountDisabledMessage=L'account \u00e8 stato disabilitato. Per ulteriori informazioni, contattare l'amministratore di sistema. -accountTemporarilyDisabledMessage=L'account \u00e8 stato disabilitato temporaneamente. Per ulteriori informazioni, contattare l'amministratore di sistema. -expiredCodeMessage=Sessione scaduta. Provare ad accedere di nuovo. -expiredActionMessage=Azione scaduta. Provare ad accedere di nuovo. -expiredActionTokenNoSessionMessage=Azione scaduta -expiredActionTokenSessionExistsMessage=Azione scaduta. Provare ad accedere di nuovo. - -missingFirstNameMessage=Digitare il nome -missingLastNameMessage=Digitare il cognome -missingEmailMessage=Digitare l'indirizzo e-mail -missingUsernameMessage=Digitare il nome utente -missingPasswordMessage=Digitare la password -missingTotpMessage=Digitare il codice di autenticazione -notMatchPasswordMessage=Problemi di accesso. Le password inserite non corrispondono. - -invalidPasswordExistingMessage=Problemi di accesso. La password inserita potrebbe non essere valida. -invalidPasswordBlacklistedMessage=Problemi di accesso. La password inserita potrebbe essere inclusa in una black list. -invalidPasswordConfirmMessage=Problemi di accesso. La password di conferma inserite non corrisponde. -invalidTotpMessage=Problemi di accesso. Il codice di autenticazione inserito potrebbe non essere valido - -usernameExistsMessage=Nome utente gi\u00e0 esistente -emailExistsMessage=Indirizzo e-mail gi\u00e0 esistente - -federatedIdentityExistsMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Accedere a Gestione account per collegare l''account. - -confirmLinkIdpTitle=Account gi\u00e0 esistente -federatedIdentityConfirmLinkMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Come si desidera continuare? -federatedIdentityConfirmReauthenticateMessage=Eseguire l''autenticazione come {0} per collegare l''account con {1} -confirmLinkIdpReviewProfile=Esamina profilo -confirmLinkIdpContinue=Aggiungi all'account esistente - -configureTotpMessage=\u00c8 necessario configurare Mobile Authenticator per attivare l'account -updateProfileMessage=\u00c8 necessario aggiornare il profilo utente per attivare l'account -updatePasswordMessage=\u00c8 necessario modificare la password per attivare l'account -resetPasswordMessage=\u00c8 necessario modificare la password -verifyEmailMessage=\u00c8 necessario verificare l'indirizzo e-mail per attivare l'account -linkIdpMessage=\u00c8 necessario verificare l''indirizzo e-mail per collegare l''account con {0} - -emailSentMessage=Si ricever\u00e0 a breve un'e-mail con ulteriori istruzioni -emailSendErrorMessage=Non \u00e8 stato possibile inviare l'e-mail. Riprovare pi\u00f9 tardi. - -accountUpdatedMessage=L'account \u00e8 stato aggiornato -accountPasswordUpdatedMessage=La password \u00e8 stata aggiornata - -noAccessMessage=Nessun accesso - -invalidPasswordMinLengthMessage=Le password devono contenere almeno {0} caratteri -invalidPasswordMinDigitsMessage=Le password devono contenere almeno {0} numeri -invalidPasswordMinLowerCaseCharsMessage=Le password devono contenere almeno {0} lettere minuscole -invalidPasswordMinUpperCaseCharsMessage=Le password devono contenere almeno {0} lettere maiuscole -invalidPasswordMinSpecialCharsMessage=Le password devono contenere almeno {0} caratteri speciali -invalidPasswordNotUsernameMessage=La password non pu\u00f2 essere uguale al nome utente -invalidPasswordRegexPatternMessage=La password deve corrispondere al modello regex -invalidPasswordHistoryMessage=Le password non devono essere uguali alle ultime {0} password -invalidPasswordGenericMessage=La password non soddisfa i criteri per le password - -failedToProcessResponseMessage=Elaborazione della risposta non riuscita -httpsRequiredMessage=HTTPS richiesto -realmNotEnabledMessage=Area di autenticazione non abilitata -invalidRequestMessage=Richiesta non valida -failedLogout=Logout non riuscito -unknownLoginRequesterMessage=Richiedente login sconosciuto -loginRequesterNotEnabledMessage=Richiedente login non abilitato -bearerOnlyMessage=Non \u00e8 consentito avviare il login via browser da applicazioni con solo token di connessione -standardFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Standard per response_type specificato \u00e8 disabilitato per il client. -implicitFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Implicit response_type specificato \u00e8 disabilitato per il client. -invalidRedirectUriMessage=URI di reindirizzamento non valido -unsupportedNameIdFormatMessage=NameIDFormat non supportato -invalidRequesterMessage=Richiedente non valido -registrationNotAllowedMessage=Registrazione non consentita -resetCredentialNotAllowedMessage=Reimpostazione credenziali non consentita - -permissionNotApprovedMessage=Autorizzazione negata -noRelayStateInResponseMessage=Nessuno stato di inoltro nella risposta dal provider di identit\u00e0 -insufficientPermissionMessage=Autorizzazioni insufficienti per collegare le identit\u00e0 -couldNotProceedWithAuthenticationRequestMessage=Impossibile procedere con la richiesta di autenticazione presso il provider di identit\u00e0 -couldNotObtainTokenMessage=Impossibile recuperare il token dal provider di identit\u00e0 -unexpectedErrorRetrievingTokenMessage=Errore non previsto durante il recupero del token dal provider di identit\u00e0 -unexpectedErrorHandlingResponseMessage=Errore non previsto durante la gestione della risposta dal provider di identit\u00e0 -identityProviderAuthenticationFailedMessage=Autenticazione non riuscita. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0 -identityProviderDifferentUserMessage=Autenticazione eseguita come {0}; autenticazione prevista come {1} -couldNotSendAuthenticationRequestMessage=Impossibile inviare la richiesta di autenticazione al provider di identit\u00e0 -unexpectedErrorHandlingRequestMessage=Errore non previsto durante la gestione della richiesta di autenticazione presso il provider di identit\u00e0 -invalidAccessCodeMessage=Codice di accesso non valido -sessionNotActiveMessage=Sessione non attiva -invalidCodeMessage=Si \u00e8 verificato un problema. Provare ad accedere di nuovo tramite l'applicazione. -identityProviderUnexpectedErrorMessage=Si \u00e8 verificato un problema. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0. -identityProviderNotFoundMessage=Impossibile trovare un provider di identit\u00e0 con l'ID -identityProviderLinkSuccess=L'indirizzo e-mail \u00e8 stato verificato. Tornare al browser iniziale e continuare con la procedura di accesso. -staleCodeMessage=Questa pagina non \u00e8 pi\u00f9 valida. Tornare all'applicazione e accedere di nuovo. -realmSupportsNoCredentialsMessage=L'area di autenticazione non supporta alcun tipo di credenziale. -identityProviderNotUniqueMessage=L'area di autenticazione supporta pi\u00f9 di un provider di identit\u00e0. Impossibile determinare quale provider di identit\u00e0 utilizzare. -emailVerifiedMessage=L'indirizzo e-mail \u00e8 stato verificato -staleEmailVerificationLink=Il link non \u00e8 pi\u00f9 valido. L'indirizzo e-mail potrebbe essere gi\u00e0 stato verificato. -identityProviderAlreadyLinkedMessage=L''identit\u00e0 federata restituita da {0} \u00e8 gi\u00e0 collegata a un altro utente -confirmAccountLinking=Confermare il collegamento dell''account {0} del provider di identit\u00e0 {1} con il proprio account -confirmEmailAddressVerification=Confermare la validit\u00e0 dell''indirizzo e-mail {0} -confirmExecutionOfActions=Eseguire le azioni seguenti - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Torna all'applicazione -missingParameterMessage=Parametri mancanti: {0} -clientNotFoundMessage=Client non trovato -clientDisabledMessage=Client disabilitato -invalidParameterMessage=Parametro non valido: {0} -alreadyLoggedIn=Accesso gi\u00e0 effettuato -differentUserAuthenticated=Accesso gi\u00e0 effettuato come altro utente ''{0}'' in questa sessione. Provare ad accedere di nuovo. -brokerLinkingSessionExpired=Collegamento account broker richiesto, ma la sessione corrente non \u00e8 pi\u00f9 valida. -proceedWithAction=» Fare clic qui per procedere - -requiredAction.CONFIGURE_TOTP=Configura OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiorna password -requiredAction.UPDATE_PROFILE=Aggiorna profilo -requiredAction.VERIFY_EMAIL=Verifica e-mail - -p3pPolicy=CP="Questo non \u00e8 un criterio P3P!" - -doX509Login=L'accesso verr\u00e0 effettuato come: -clientCertificate=Certificato client X509: -noCertificate=[Nessun certificato] - - -pageNotFound=Questa pagina non \u00e8 disponibile -internalServerError=Si \u00e8 verificato un problema diff --git a/deps/keycloak/themes/ndear/login/messages/messages_ja.properties b/deps/keycloak/themes/ndear/login/messages/messages_ja.properties deleted file mode 100644 index 9c8e054cc..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_ja.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u30b5\u30a4\u30f3\u30a4\u30f3 -needHelp=\u304a\u56f0\u308a\u3067\u3059\u304b? -selectAlternative=\u5225\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u9078\u629e - -doRegister=\u767b\u9332 -doCancel=\u30ad\u30e3\u30f3\u30bb\u30eb -doSubmit=\u9001\u4fe1 -doYes=\u306f\u3044 -doNo=\u3044\u3044\u3048 -doContinue=\u7d9a\u884c -doIgnore=\u7121\u8996 -doAccept=\u540c\u610f -doDecline=\u62d2\u5426 -doForgotPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -doClickHere=\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 -doImpersonate=\u507d\u88c5 -kerberosNotConfigured=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotConfiguredTitle=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -bypassKerberosDetail=Kerberos \u7d4c\u7531\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u304b\u3001\u30d6\u30e9\u30a6\u30b6\u3067 Kerberos \u30b5\u30a4\u30f3\u30a4\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4ed6\u306e\u65b9\u6cd5\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u5834\u5408\u306f\u3001[\u7d9a\u884c] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotSetUp=\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308b\u524d\u306b Kerberos \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -registerWithTitle={0} \u3078\u306e\u767b\u9332 -registerWithTitleHtml={0} -loginTitle={0} \u3078\u306e\u30b5\u30a4\u30f3\u30a4\u30f3 -loginTitleHtml={0} -impersonateTitle={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -impersonateTitleHtml={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -realmChoice=\u30ec\u30eb\u30e0 -unknownUser=\u4e0d\u660e\u306a\u30e6\u30fc\u30b6\u30fc -loginTotpTitle=Mobile Authenticator \u306e\u8a2d\u5b9a -loginProfileTitle=\u30a2\u30ab\u30a6\u30f3\u30c8\u60c5\u5831\u306e\u66f4\u65b0 -loginTimeout=\u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u3059\u304e\u307e\u3057\u305f\u3002\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u6700\u521d\u304b\u3089\u958b\u59cb\u3057\u307e\u3059\u3002 -oauthGrantTitle=\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u8a31\u53ef -oauthGrantTitleHtml={0} -errorTitle=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -errorTitleHtml=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -emailVerifyTitle=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c -emailForgotTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -updatePasswordTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -codeSuccessTitle=\u6210\u529f\u30b3\u30fc\u30c9 -codeErrorTitle=\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9: {0} - -termsTitle=\u5229\u7528\u898f\u7d04 -termsTitleHtml=\u5229\u7528\u898f\u7d04 -termsText=

      \u3053\u3053\u306b\u5229\u7528\u898f\u7d04\u3092\u5165\u529b\u3057\u307e\u3059

      - -recaptchaFailed=\u7121\u52b9\u306a reCAPTCHA -recaptchaNotConfigured=reCAPTCHA \u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -consentDenied=\u540c\u610f\u3092\u62d2\u5426\u3057\u307e\u3057\u305f\u3002 - -noAccount=\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u306e\u5834\u5408 -username=\u30e6\u30fc\u30b6\u30fc\u540d -usernameOrEmail=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -firstName=\u540d -givenName=\u540d -fullName=\u6c0f\u540d -lastName=\u59d3 -familyName=\u59d3 -email=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -password=\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordConfirm=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -passwordNew=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordNewConfirm=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -rememberMe=\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b -authenticatorCode=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -address=\u4f4f\u6240 -street=\u756a\u5730 -locality=\u5e02\u533a\u753a\u6751 -region=\u90fd\u9053\u5e9c\u770c -postal_code=\u90f5\u4fbf\u756a\u53f7 -country=\u56fd -emailVerified=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -gssDelegationCredential=GSS \u4ee3\u884c\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb - -loginTotpStep1=\u6b21\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u3044\u305a\u308c\u304b 1 \u3064\u3092\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u63d0\u4f9b\u3055\u308c\u305f\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u3001[\u9001\u4fe1] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3059\u3002 -loginTotpManualStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30ad\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpManualStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u6b21\u306e\u5024\u306e\u8a2d\u5b9a\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u306e\u5024\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpUnableToScan=\u30b9\u30ad\u30e3\u30f3\u3067\u304d\u306a\u3044\u5834\u5408 -loginTotpScanBarcode=\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u304b? -loginTotpOneTime=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -loginTotpType=\u7a2e\u985e -loginTotpAlgorithm=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u9593\u9694 - -loginTotp.totp=\u6642\u9593 -loginTotp.hotp=\u30ab\u30a6\u30f3\u30bf\u30fc - - -oauthGrantRequest=\u3053\u308c\u3089\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u8a31\u53ef\u3057\u307e\u3059\u304b? -inResource=\u30ea\u30bd\u30fc\u30b9: - -emailVerifyInstruction1=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailVerifyInstruction2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailVerifyInstruction3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b - -emailLinkIdpTitle={0} \u3068\u306e\u30ea\u30f3\u30af -emailLinkIdp1={0} \u30a2\u30ab\u30a6\u30f3\u30c8 {1} \u3092\u3042\u306a\u305f\u306e {2} \u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306e\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailLinkIdp2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailLinkIdp3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b -emailLinkIdp4=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u3092\u5225\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u884c\u3063\u305f\u5834\u5408 -emailLinkIdp5=\u7d9a\u884c\u3059\u308b - -backToLogin=« \u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u623b\u308b - -emailInstruction=\u30e6\u30fc\u30b6\u30fc\u540d\u3068 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u4f5c\u6210\u624b\u9806\u3092\u304a\u9001\u308a\u3057\u307e\u3059 - -copyCodeInstruction=\u3053\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044 - -pageExpiredTitle=\u30da\u30fc\u30b8\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059 -pageExpiredMsg1=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u518d\u958b\u3059\u308b -pageExpiredMsg2=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u884c\u3059\u308b - -personalInfo=\u500b\u4eba\u60c5\u5831: -role_admin=\u7ba1\u7406\u8005 -role_realm-admin=\u30ec\u30eb\u30e0\u7ba1\u7406\u8005 -role_create-realm=\u30ec\u30eb\u30e0\u306e\u4f5c\u6210 -role_create-client=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210 -role_view-realm=\u30ec\u30eb\u30e0\u306e\u8868\u793a -role_view-users=\u30e6\u30fc\u30b6\u30fc\u306e\u8868\u793a -role_view-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8868\u793a -role_view-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8868\u793a -role_view-events=\u30a4\u30d9\u30f3\u30c8\u306e\u8868\u793a -role_view-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u8868\u793a -role_manage-realm=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -role_manage-users=\u30e6\u30fc\u30b6\u30fc\u306e\u7ba1\u7406 -role_manage-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7ba1\u7406 -role_manage-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u7ba1\u7406 -role_manage-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-events=\u30a4\u30d9\u30f3\u30c8\u306e\u7ba1\u7406 -role_view-profile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u8868\u793a -role_manage-account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-account-links=\u30a2\u30ab\u30a6\u30f3\u30c8\u30ea\u30f3\u30af\u306e\u7ba1\u7406 -role_read-token=\u30c8\u30fc\u30af\u30f3\u306e\u8aad\u307f\u53d6\u308a -role_offline-access=\u30aa\u30d5\u30e9\u30a4\u30f3\u30a2\u30af\u30bb\u30b9 -client_account=\u30a2\u30ab\u30a6\u30f3\u30c8 -client_security-admin-console=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb -client_admin-cli=\u7ba1\u7406 CLI -client_realm-management=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -client_broker=\u30d6\u30ed\u30fc\u30ab\u30fc - -invalidUserMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -invalidEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -accountDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -accountTemporarilyDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u4e00\u6642\u7684\u306b\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u8a73\u7d30\u3092\u78ba\u8a8d\u3059\u308b\u304b\u3001\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -expiredCodeMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionTokenNoSessionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f -expiredActionTokenSessionExistsMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 - -missingFirstNameMessage=\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingLastNameMessage=\u59d3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingUsernameMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingTotpMessage=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -notMatchPasswordMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093 - -invalidPasswordExistingMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordBlacklistedMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30d6\u30e9\u30c3\u30af\u30ea\u30b9\u30c8\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordConfirmMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u518d\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6700\u521d\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -invalidTotpMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 - -usernameExistsMessage=\u540c\u3058\u30e6\u30fc\u30b6\u30fc\u540d\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -emailExistsMessage=\u540c\u3058 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 - -federatedIdentityExistsMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002[\u30a2\u30ab\u30a6\u30f3\u30c8\u7ba1\u7406] \u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ea\u30f3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -confirmLinkIdpTitle=\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -federatedIdentityConfirmLinkMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u3069\u306e\u3088\u3046\u306b\u51e6\u7406\u3057\u307e\u3059\u304b? -federatedIdentityConfirmReauthenticateMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {1} \u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306b\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3057\u307e\u3059 -confirmLinkIdpReviewProfile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u78ba\u8a8d -confirmLinkIdpContinue=\u65e2\u5b58\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u8ffd\u52a0\u3059\u308b - -configureTotpMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001Mobile Authenticator \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updateProfileMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updatePasswordMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -resetPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -verifyEmailMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -linkIdpMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {0} \u3068\u30ea\u30f3\u30af\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - -emailSentMessage=\u3057\u3070\u3089\u304f\u3059\u308b\u3068\u3001\u6b21\u306e\u4f5c\u696d\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u304c\u9001\u3089\u308c\u3066\u304d\u307e\u3059 -emailSendErrorMessage=E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3001\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -accountUpdatedMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f -accountPasswordUpdatedMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f - -noAccessMessage=\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u3042\u308a\u307e\u305b\u3093 - -invalidPasswordMinLengthMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f {0} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 -invalidPasswordMinDigitsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u6570\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinLowerCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5c0f\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinUpperCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5927\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinSpecialCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u7279\u6b8a\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordNotUsernameMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -invalidPasswordRegexPatternMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3068\u5408\u81f4\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordHistoryMessage=\u904e\u53bb {0} \u4e16\u4ee3\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u518d\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -invalidPasswordGenericMessage=\u6307\u5b9a\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u5f93\u3063\u3066\u3044\u307e\u305b\u3093 - -failedToProcessResponseMessage=\u5fdc\u7b54\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -httpsRequiredMessage=HTTPS \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -realmNotEnabledMessage=\u30ec\u30eb\u30e0\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -invalidRequestMessage=\u7121\u52b9\u306a\u8981\u6c42\u3067\u3059 -failedLogout=\u30ed\u30b0\u30a2\u30a6\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f -unknownLoginRequesterMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u4e0d\u660e\u3067\u3059 -loginRequesterNotEnabledMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u7121\u52b9\u3067\u3059 -bearerOnlyMessage=bearer-only \u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -standardFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Standard Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -implicitFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Implicit Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -invalidRedirectUriMessage=\u7121\u52b9\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8 URI \u3067\u3059 -unsupportedNameIdFormatMessage=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044 NameIDFormat \u3067\u3059 -invalidRequesterMessage=\u7121\u52b9\u306a\u8981\u6c42\u5143\u3067\u3059 -registrationNotAllowedMessage=\u767b\u9332\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -resetCredentialNotAllowedMessage=\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306e\u30ea\u30bb\u30c3\u30c8\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 - -permissionNotApprovedMessage=\u6a29\u9650\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f -noRelayStateInResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306b RelayState \u304c\u3042\u308a\u307e\u305b\u3093 -insufficientPermissionMessage=\u6a29\u9650\u304c\u4e0d\u5341\u5206\u306a\u305f\u3081\u3001ID \u3092\u30ea\u30f3\u30af\u3067\u304d\u307e\u305b\u3093 -couldNotProceedWithAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -couldNotObtainTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorRetrievingTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -unexpectedErrorHandlingResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -identityProviderAuthenticationFailedMessage=\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderDifferentUserMessage={1} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u308b\u306f\u305a\u3067\u3057\u305f\u304c\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -couldNotSendAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u8a8d\u8a3c\u8981\u6c42\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorHandlingRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u306e\u51e6\u7406\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -invalidAccessCodeMessage=\u7121\u52b9\u306a\u30a2\u30af\u30bb\u30b9\u30b3\u30fc\u30c9\u3067\u3059 -sessionNotActiveMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306f\u3042\u308a\u307e\u305b\u3093 -invalidCodeMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -identityProviderUnexpectedErrorMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3053\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -identityProviderNotFoundMessage=\u3053\u306e ID \u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderLinkSuccess=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f\u3002\u5143\u306e\u30d6\u30e9\u30a6\u30b6\u306b\u623b\u3063\u3066\u3001\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u3051\u3066\u304f\u3060\u3055\u3044\u3002 -staleCodeMessage=\u3053\u306e\u30da\u30fc\u30b8\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u3063\u3066\u3001\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -realmSupportsNoCredentialsMessage=\u30ec\u30eb\u30e0\u306f\u3069\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30bf\u30a4\u30d7\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -identityProviderNotUniqueMessage=\u30ec\u30eb\u30e0\u304c\u8907\u6570\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3069\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u8a8d\u8a3c\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -emailVerifiedMessage=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059 -staleEmailVerificationLink=\u3053\u306e\u30ea\u30f3\u30af\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -identityProviderAlreadyLinkedMessage={0} \u304b\u3089\u8fd4\u3055\u308c\u305f Federated ID \u306f\u3001\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u3059 -confirmAccountLinking=ID \u30d7\u30ed\u30d0\u30a4\u30c0 {1} \u306e\u30a2\u30ab\u30a6\u30f3\u30c8 {0} \u3068\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u306e\u30ea\u30f3\u30af\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmEmailAddressVerification=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 {0} \u306e\u6709\u52b9\u6027\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmExecutionOfActions=\u6b21\u306e\u51e6\u7406\u3092\u5b9f\u884c\u3057\u307e\u3059 - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u308b -missingParameterMessage=\u4e0d\u8db3\u3057\u3066\u3044\u308b\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -clientNotFoundMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -clientDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3057\u305f -invalidParameterMessage=\u7121\u52b9\u306a\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -alreadyLoggedIn=\u65e2\u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059 -differentUserAuthenticated=\u3053\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc ''{0}'' \u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -brokerLinkingSessionExpired=\u30d6\u30ed\u30fc\u30ab\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ea\u30f3\u30af\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u73fe\u5728\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002 -proceedWithAction=» \u7d9a\u884c\u3059\u308b\u306b\u306f\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 - -requiredAction.CONFIGURE_TOTP=OTP \u306e\u8a2d\u5b9a -requiredAction.terms_and_conditions=\u5229\u7528\u898f\u7d04 -requiredAction.UPDATE_PASSWORD=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -requiredAction.UPDATE_PROFILE=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u66f4\u65b0 -requiredAction.VERIFY_EMAIL=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c - -p3pPolicy=CP="\u3053\u308c\u306f P3P \u30dd\u30ea\u30b7\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff01" - -doX509Login=\u6b21\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u307e\u3059: -clientCertificate=X509 \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a3c\u660e\u66f8: -noCertificate=[\u8a3c\u660e\u66f8\u306a\u3057] - - -pageNotFound=\u3053\u306e\u30da\u30fc\u30b8\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 -internalServerError=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f diff --git a/deps/keycloak/themes/ndear/login/messages/messages_nb.properties b/deps/keycloak/themes/ndear/login/messages/messages_nb.properties deleted file mode 100644 index 1fd61ceec..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_nb.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Logg inn -needHelp=Trenger hjelp? -selectAlternative=Eller velg et alternativ - -doRegister=Registrer -doCancel=Avbryt -doSubmit=Send inn -doYes=Ja -doNo=Nei -doContinue=Fortsett -doIgnore=Ignorer -doAccept=Godta -doDecline=Avsl\u00e5 -doForgotPassword=Har du glemt passordet? -doClickHere=Klikk her -doImpersonate=Utgi deg for \u00e5 v\u00e6re en annen bruker -kerberosNotConfigured=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -kerberosNotConfiguredTitle=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -bypassKerberosDetail=Du er enten ikke logget p\u00e5 via Kerberos, eller nettleseren din er ikke konfigurert for Kerberos-p\u00e5logging. Klikk p\u00e5 Fortsett for \u00e5 registrere deg p\u00e5 andre m\u00e5ter. -kerberosNotSetUp=Du m\u00e5 konfigurere Kerberos f\u00f8r du kan logge p\u00e5. Kontakt systemadministratoren din for mer informasjon. -registerWithTitle=Registrer deg med {0} -registerWithTitleHtml={0} -loginTitle=Logg p\u00e5 {0} -loginTitleHtml={0} -impersonateTitle={0} Utgi deg for \u00e5 v\u00e6re bruker -impersonateTitleHtml={0} Utgi deg for \u00e5 v\u00e6re bruker -realmChoice=Sikkerhetsdomene -unknownUser=Ukjent bruker -loginTotpTitle=Konfigurer Mobile Authenticator -loginProfileTitle=Oppdater kontoinformasjon -loginTimeout=Du brukte for lang tid p\u00e5 \u00e5 logge p\u00e5. Registreringsprosessen starter p\u00e5 nytt. -oauthGrantTitle=Gi tilgang -oauthGrantTitleHtml={0} -errorTitle=Vi beklager -errorTitleHtml=Vi beklager -emailVerifyTitle=E-postbekreftelse -emailForgotTitle=Har du glemt passordet? -updatePasswordTitle=Oppdater passord -codeSuccessTitle=Suksesskode -codeErrorTitle=Feilkode: {0} - -termsTitle=Vilk\u00e5r og betingelser -termsTitleHtml=Vilk\u00e5r og betingelser -termsText=

      Vilk\u00e5r og betingelser kommer

      - -recaptchaFailed=Ugyldig bildebekreftelse -recaptchaNotConfigured=Bildebekreftelse er p\u00e5krevd og har ikke blitt konfigurert -consentDenied=Samtykke avsl\u00e5tt. - -noAccount=Ny bruker? -username=Brukernavn -usernameOrEmail=Brukernavn eller e-postadresse -firstName=Fornavn -givenName=Fornavn -fullName=Fullstendig navn -lastName=Etternavn -familyName=Etternavn -email=E-post -password=Passord -passwordConfirm=Bekreft passord -passwordNew=Nytt passord -passwordNewConfirm=Bekreftelse p\u00e5 nytt passord -rememberMe=Husk meg -authenticatorCode=Engangskode -address=Adresse -street=Gate/vei -locality=By eller sted -region=Fylke -postal_code=Postnummer -country=Land -emailVerified=E-postadresse bekreftet -gssDelegationCredential=GSS legitimasjonsdelegering - -loginTotpStep1=Installer en av f\u00f8lgende applikasjoner p\u00e5 mobilen din -loginTotpStep2=\u00c5pne applikasjonen og skann strekkoden -loginTotpStep3=Angi engangskoden som oppgis av applikasjonen, og klikk p\u00e5 Send inn for \u00e5 fullf\u00f8re oppsettet -loginTotpManualStep2=\u00c5pne applikasjonen og angi koden -loginTotpManualStep3=Bruk f\u00f8lgende konfigurasjonsverdier hvis applikasjonen tillater at de stilles inn -loginTotpUnableToScan=F\u00e5r du ikke skannet? -loginTotpScanBarcode=Vil du skanne strekkoden? -loginTotpOneTime=Engangs-verifiseringskode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Sifre -loginTotpInterval=Intervall - -loginTotp.totp=Tidsbasert -loginTotp.hotp=Tellerbasert - - -oauthGrantRequest=Vil du gi disse tilgangsrettighetene? -inResource=i - -emailVerifyInstruction1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 bekrefte e-postadressen din -emailVerifyInstruction2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailVerifyInstruction3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt - -emailLinkIdpTitle=Koble til {0} -emailLinkIdp1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 koble {0}-kontoen {1} til {2}-kontoen din -emailLinkIdp2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailLinkIdp3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt -emailLinkIdp4=Hvis du alt har bekreftet e-posten i en annen nettleser -emailLinkIdp5=for \u00e5 fortsette - -backToLogin=« Tilbake til p\u00e5logging - -emailInstruction=Angi brukernavnet eller e-postadressen din, s\u00e5 sender vi deg instruksjoner om hvordan du oppretter et nytt passord - -copyCodeInstruction=Kopier denne koden og lim den inn i applikasjonen din - -pageExpiredTitle=Siden har utl\u00f8pt -pageExpiredMsg1=For \u00e5 starte p\u00e5loggingsprosessen p\u00e5 nytt -pageExpiredMsg2=For \u00e5 fortsette p\u00e5loggingsprosessen - -personalInfo=Personlig informasjon: -role_admin=Administrator -role_realm-admin=Administrator for sikkerhetsdomene -role_create-realm=Opprett sikkerhetsdomene -role_create-client=Opprett klient -role_view-realm=Se sikkerhetsdomene -role_view-users=Se brukere -role_view-applications=Se applikasjoner -role_view-clients=Se klienter -role_view-events=Se hendelser -role_view-identity-providers=Se identitetsleverand\u00f8rer -role_manage-realm=Administrer sikkerhetsdomene -role_manage-users=Administrer brukere -role_manage-applications=Administrer applikasjoner -role_manage-identity-providers=Administrer identitetsleverand\u00f8rer -role_manage-clients=Administrer klienter -role_manage-events=Administrer hendelser -role_view-profile=Vis {0}s profil -role_manage-account=Administrer konto -role_manage-account-links=Administrer kontolenker -role_read-token=Les token -role_offline-access=Frakoblet tilgang -client_account=Konto -client_security-admin-console=Sikkerthetsadministrasjonskonsoll -client_admin-cli=Administrasjons-CLI -client_realm-management=Sikkerhetsdomene-administrasjon -client_broker=Broker - -invalidUserMessage=Ugyldig brukernavn eller passord -invalidEmailMessage=Ugyldig e-postadresse -accountDisabledMessage=Kontoen din er deaktivert. Kontakt systemadministratoren din for mer informasjon. -accountTemporarilyDisabledMessage=Kontoen din er midlertidig deaktivert. Kontakt systemadministratoren din for mer informasjon, eller pr\u00f8v igjen senere. -expiredCodeMessage=\u00d8kten din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionTokenNoSessionMessage=Handlingen din har utl\u00f8pt -expiredActionTokenSessionExistsMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. - -missingFirstNameMessage=Skriv inn fornavnet ditt -missingLastNameMessage=Skriv inn etternavnet ditt -missingEmailMessage=Skriv inn e-postadressen din -missingUsernameMessage=Skriv inn brukernavnet ditt -missingPasswordMessage=Skriv inn passordet ditt -missingTotpMessage=Skriv inn autentikatorkoden din -notMatchPasswordMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, stemmer ikke overens. - -invalidPasswordExistingMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re ugyldige. -invalidPasswordBlacklistedMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re svartelistet. -invalidPasswordConfirmMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordbekreftelsen du skrev inn, stemmer ikke. -invalidTotpMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Autentikatorkoden du skrev inn, kan v\u00e6re ugyldig. - -usernameExistsMessage=Brukernavnet finnes alt -emailExistsMessage=E-postadressen finnes alt - -federatedIdentityExistsMessage=En bruker med {0} {1} finnes alt. Logg p\u00e5 Kontostyring for \u00e5 koble til kontoen. - -confirmLinkIdpTitle=Kontoen finnes allerede -federatedIdentityConfirmLinkMessage=Bruker med {0} {1} finnes allerede. Hvordan vil du fortsette? -federatedIdentityConfirmReauthenticateMessage=Bekreft at du er {0} for \u00e5 koble din konto sammen med {1} -confirmLinkIdpReviewProfile=Se gjennom profil -confirmLinkIdpContinue=Legg til eksisterende konto - -configureTotpMessage=Du m\u00e5 konfigurere Mobile Authenticator for \u00e5 aktivere kontoen din -updateProfileMessage=Du m\u00e5 oppdatere brukerprofilen din for \u00e5 aktivere kontoen -updatePasswordMessage=Du m\u00e5 endre passordet ditt for \u00e5 aktivere kontoen -resetPasswordMessage=Du m\u00e5 endre passordet -verifyEmailMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 aktivere kontoen -linkIdpMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 koble kontoen din sammen med {0} - -emailSentMessage=Du mottar en e-post om kort tid med ytterligere instruksjoner -emailSendErrorMessage=Vi kunne ikke sende e-posten. Pr\u00f8v igjen senere. - -accountUpdatedMessage=Kontoen din er oppdatert -accountPasswordUpdatedMessage=Passordet ditt er oppdatert - -noAccessMessage=Ingen tilgang - -invalidPasswordMinLengthMessage=Passord m\u00e5 minst best\u00e5 av {0} tegn -invalidPasswordMinDigitsMessage=Passord m\u00e5 minst best\u00e5 av {0} tall -invalidPasswordMinLowerCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} sm\u00e5 bokstaver -invalidPasswordMinUpperCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} store bokstaver -invalidPasswordMinSpecialCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} spesialtegn -invalidPasswordNotUsernameMessage=Passordet kan ikke v\u00e6re det samme som brukernavnet ditt -invalidPasswordRegexPatternMessage=Passord m\u00e5 stemme overens med uttrykksm\u00f8nsteret -invalidPasswordHistoryMessage=Passord m\u00e5 ikke v\u00e6re det samme som noen av de siste {0} passordene -invalidPasswordGenericMessage=Passordet ditt stemmer ikke overens med passordpolicyen - -failedToProcessResponseMessage=Kunne ikke behandle svar -httpsRequiredMessage=HTTPS p\u00e5krevd -realmNotEnabledMessage=Sikkerhetsdomene er ikke aktivert -invalidRequestMessage=Ugyldig foresp\u00f8rsel -failedLogout=Utlogging feilet -unknownLoginRequesterMessage=Ukjent anmoder for p\u00e5logging -loginRequesterNotEnabledMessage=Anmoder for p\u00e5logging er ikke aktivert -bearerOnlyMessage=Bearer-only-applikasjoner har ikke lov til \u00e5 initiere p\u00e5logging via nettleser -standardFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Standard flow er deaktivert for denne klienten. -implicitFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Implicit flow er deaktivert for denne klienten. -invalidRedirectUriMessage=Ugyldig redirect uri -unsupportedNameIdFormatMessage=NameIDFormat er ikke st\u00f8ttet -invalidRequesterMessage=Ugyldig sender av foresp\u00f8rsel -registrationNotAllowedMessage=Registrering er ikke lov -resetCredentialNotAllowedMessage=Tilbakestilling av p\u00e5loggingsdata er ikke lov - -permissionNotApprovedMessage=Ingen tilgang -noRelayStateInResponseMessage=Ingen relay state i svar fra identitetsleverand\u00f8r -insufficientPermissionMessage=Utilstrekkelige tillatelser til \u00e5 koble sammen identiteter -couldNotProceedWithAuthenticationRequestMessage=Kunne ikke fortsette med autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -couldNotObtainTokenMessage=Kunne ikke hente token fra identitetsleverand\u00f8r -unexpectedErrorRetrievingTokenMessage=Uventet feil ved henting av token fra identitetsleverand\u00f8r -unexpectedErrorHandlingResponseMessage=Uventet feil ved h\u00e5ndtering av respons fra identitetsleverand\u00f8r -identityProviderAuthenticationFailedMessage=Autentisering mislyktes. Kunne ikke autentisere med identitetsleverand\u00f8r -identityProviderDifferentUserMessage=Autentisert som {0}, men forventet \u00e5 bli autentisert som {1} -couldNotSendAuthenticationRequestMessage=Kunne ikke sende autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -unexpectedErrorHandlingRequestMessage=Uventet feil ved h\u00e5ndtering av autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -invalidAccessCodeMessage=Ugyldig tilgangskode -sessionNotActiveMessage=\u00d8kten er ikke aktiv -invalidCodeMessage=Vi st\u00f8tte p\u00e5 et problem. Pr\u00f8v \u00e5 logge p\u00e5 igjen gjennom applikasjonen din. -identityProviderUnexpectedErrorMessage=Vi st\u00f8tte p\u00e5 et problem. Det var ikke mulig \u00e5 autentisere med identitetsleverand\u00f8ren. -identityProviderNotFoundMessage=Fant ingen identitetsleverand\u00f8r med identifikatoren -identityProviderLinkSuccess=Du har verifisert e-posten din. G\u00e5 tilbake til den opprinnelige nettleseren din og fortsett med p\u00e5loggingen. -staleCodeMessage=Denne siden er ikke lenger gyldig. G\u00e5 tilbake til applikasjonen din og logg p\u00e5 igjen. -realmSupportsNoCredentialsMessage=Sikkerhetsdomene st\u00f8tter ingen legitimasjonstyper. -identityProviderNotUniqueMessage=Sikkerhetsdomene st\u00f8tter flere identitetsleverand\u00f8rer. Kunne ikke avgj\u00f8re hvilken identitetsleverand\u00f8r som burde brukes for autentisering. -emailVerifiedMessage=E-postadressen din har blitt bekreftet -staleEmailVerificationLink=Lenken er ikke lenger gyldig. Det kan hende at du alt har verifisert e-postadressen din. -identityProviderAlreadyLinkedMessage=Federert identitet returnert av {0}, er allerede koblet til en annen bruker -confirmAccountLinking=Bekreft kobling av kontoen {0} for identitetsleverand\u00f8ren {1} med din konto -confirmEmailAddressVerification=Bekreft gyldigheten av e-postadressen {0} -confirmExecutionOfActions=Utf\u00f8r f\u00f8lgende handling(er) - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Tilbake til applikasjonen -missingParameterMessage=Manglende parametere: {0} -clientNotFoundMessage=Finner ikke klient -clientDisabledMessage=Klient er deaktivert -invalidParameterMessage=Ugyldig parameter: {0} -alreadyLoggedIn=Du er alt logget p\u00e5 -differentUserAuthenticated=Du er alt logget p\u00e5 som en annen bruker, ''{0}'', i denne \u00f8kten. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -brokerLinkingSessionExpired=Forespurt broker-konto kobler til, men gjeldende \u00f8kt er ikke lenger gyldig. -proceedWithAction=» Klikk her for \u00e5 fortsette - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=Vilk\u00e5r og betingelser -requiredAction.UPDATE_PASSWORD=Oppdater passord -requiredAction.UPDATE_PROFILE=Oppdater profil -requiredAction.VERIFY_EMAIL=Bekreft e-post - -p3pPolicy=CP="Dette er ikke en P3P-policy!" - -doX509Login=Du vil bli logget p\u00e5 som: -clientCertificate=X509-klientsertifikat: -noCertificate=[Intet sertifikat] - - -pageNotFound=Denne siden er ikke tilgjengelig -internalServerError=Vi st\u00f8tte p\u00e5 et problem diff --git a/deps/keycloak/themes/ndear/login/messages/messages_nl.properties b/deps/keycloak/themes/ndear/login/messages/messages_nl.properties deleted file mode 100644 index 2ae071a65..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_nl.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Aanmelden -needHelp=Hulp nodig? -selectAlternative=Of selecteer een alternatief - -doRegister=Registreren -doCancel=Annuleren -doSubmit=Verzenden -doYes=Ja -doNo=Nee -doContinue=Doorgaan -doIgnore=Negeren -doAccept=Accepteren -doDecline=Weigeren -doForgotPassword=Wachtwoord vergeten? -doClickHere=Klik hier -doImpersonate=Imiteren -kerberosNotConfigured=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -kerberosNotConfiguredTitle=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -bypassKerberosDetail=U bent niet aangemeld via Kerberos of uw browser is niet ingesteld voor aanmelding via Kerberos. Klik op Doorgaan om u op een andere manier aan te melden. -kerberosNotSetUp=U moet Kerberos instellen voordat u zich kunt aanmelden. Neem contact op met uw systeembeheerder voor meer informatie. -registerWithTitle=Registreren met {0} -registerWithTitleHtml={0} -loginTitle=Aanmelden bij {0} -loginTitleHtml={0} -impersonateTitle={0} Gebruiker imiteren -impersonateTitleHtml={0} Gebruiker imiteren -realmChoice=Realm -unknownUser=Onbekende gebruiker -loginTotpTitle=Mobile Authenticator-instellingen -loginProfileTitle=Accountgegevens bijwerken -loginTimeout=Het aanmelden nam te veel tijd in beslag. Het aanmeldingsproces begint weer van voor af aan. -oauthGrantTitle=Toegang verlenen -oauthGrantTitleHtml={0} -errorTitle=Sorry -errorTitleHtml=Sorry -emailVerifyTitle=Verificatie e-mailadres -emailForgotTitle=Wachtwoord vergeten? -updatePasswordTitle=Wachtwoord bijwerken -codeSuccessTitle=Succescode -codeErrorTitle=Foutcode: {0} - -termsTitle=Voorwaarden -termsTitleHtml=Voorwaarden -termsText=

      Voorwaarden nog niet vastgesteld

      - -recaptchaFailed=Ongeldige Recaptcha -recaptchaNotConfigured=Recaptcha is vereist en is niet geconfigureerd -consentDenied=Toestemming geweigerd. - -noAccount=Nieuwe gebruiker? -username=Gebruikersnaam -usernameOrEmail=Gebruikersnaam of e-mailadres -firstName=Voornaam -givenName=Voornaam -fullName=Volledige naam -lastName=Achternaam -familyName=Achternaam -email=E-mailadres -password=Wachtwoord -passwordConfirm=Wachtwoord bevestigen -passwordNew=Nieuw wachtwoord -passwordNewConfirm=Bevestiging nieuw wachtwoord -rememberMe=Mij onthouden -authenticatorCode=Eenmalige authenticatiecode -address=Adres -street=Straat -locality=Plaats -region=Staat, provincie of regio -postal_code=Postcode -country=Land -emailVerified=E-mailadres geverifieerd -gssDelegationCredential=GSS-delegeringsreferetie - -loginTotpStep1=Installeer een van de volgende applicaties op uw mobiele apparaat -loginTotpStep2=Open de applicatie en scan de streepjescode -loginTotpStep3=Voer de eenmalige code in die door de applicatie is verstrekt en klik op Verzenden om de setup te voltooien -loginTotpManualStep2=Open de applicatie en voer de sleutel in -loginTotpManualStep3=Gebruik de volgende configuratiewaarden als u deze in de applicatie kunt instellen -loginTotpUnableToScan=Scannen niet mogelijk? -loginTotpScanBarcode=Streepjescode scannen? -loginTotpOneTime=Eenmalige authenticatiecode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Cijfers -loginTotpInterval=Interval - -loginTotp.totp=Op tijdbasis -loginTotp.hotp=Op tellerbasis - - -oauthGrantRequest=Wilt u deze toegangsrechten verlenen? -inResource=in - -emailVerifyInstruction1=Er is een e-mail met instructies voor het verifi\u00ebren van uw e-mailadres naar u verzonden -emailVerifyInstruction2=Geen verificatiecode via e-mail ontvangen? -emailVerifyInstruction3=om de e-mail opnieuw te verzenden - -emailLinkIdpTitle=Koppeling {0} -emailLinkIdp1=Er is een e-mail met instructies voor het koppelen van {0} account {1} met uw {2} account naar u verzonden -emailLinkIdp2=Geen verificatiecode via e-mail ontvangen? -emailLinkIdp3=om de e-mail opnieuw te verzenden -emailLinkIdp4=Als u het e-mailadres al in een andere browser hebt geverifieerd -emailLinkIdp5=om door te gaan - -backToLogin=« Terug naar Aanmelden - -emailInstruction=Voer uw gebruikersnaam of e-mailadres in, wij sturen u dan de instructies voor het maken van een nieuw wachtwoord - -copyCodeInstruction=Kopieer deze code en plak deze in uw toepassing - -pageExpiredTitle=Pagina is verlopen -pageExpiredMsg1=Het aanmeldingsproces opnieuw starten -pageExpiredMsg2=Doorgaan met het aanmeldingsproces - -personalInfo=Persoonlijke gegevens: -role_admin=Beheerder -role_realm-admin=Realm-beheerder -role_create-realm=Realm maken -role_create-client=Client maken -role_view-realm=Realm weergeven -role_view-users=Gebruikers weergeven -role_view-applications=Toepassingen weergeven -role_view-clients=Clients weergeven -role_view-events=Gebeurtenissen weergeven -role_view-identity-providers=Id-providers weergeven -role_manage-realm=Realm beheren -role_manage-users=Gebruikers beheren -role_manage-applications=Applicaties beheren -role_manage-identity-providers=Id-providers beheren -role_manage-clients=Clients beheren -role_manage-events=Gebeurtenissen beheren -role_view-profile=Profiel weergeven -role_manage-account=Account beheren -role_manage-account-links=Accountkoppelingen beheren -role_read-token=Token lezen -role_offline-access=Offlinetoegang -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm-beheer -client_broker=Broker - -invalidUserMessage=Ongeldige gebruikersnaam of ongeldig wachtwoord -invalidEmailMessage=Ongeldig e-mailadres -accountDisabledMessage=Uw account is uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie. -accountTemporarilyDisabledMessage=Uw account is tijdelijk uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie of probeer het later opnieuw. -expiredCodeMessage=Er is een time-out van de sessie opgetreden. Meld u opnieuw aan. -expiredActionMessage=Uw actie is verlopen. Meld u opnieuw aan. -expiredActionTokenNoSessionMessage=Uw actie is verlopen -expiredActionTokenSessionExistsMessage=Uw actie is verlopen. Meld u opnieuw aan. - -missingFirstNameMessage=Voer uw voornaam in -missingLastNameMessage=Voer uw achternaam in -missingEmailMessage=Voer uw e-mailadres in -missingUsernameMessage=Voer uw gebruikersnaam in -missingPasswordMessage=Voer uw wachtwoord in -missingTotpMessage=Voer uw authenticatiecode in -notMatchPasswordMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde wachtwoorden komen niet overeen. - -invalidPasswordExistingMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord is mogelijk ongeldig. -invalidPasswordBlacklistedMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord staat mogelijk op de zwarte lijst. -invalidPasswordConfirmMessage=Er is een probleem opgetreden bij het aanmelden. Het ter bevestiging ingevoerde wachtwoord komt niet overeen. -invalidTotpMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde authenticatiecode is mogelijk ongeldig. - -usernameExistsMessage=Gebruikersnaam bestaat al -emailExistsMessage=E-mailadres bestaat al - -federatedIdentityExistsMessage=Er bestaat al een gebruiker met {0} {1}. Meld u aan bij Accountbeheer om het account te koppelen. - -confirmLinkIdpTitle=Account bestaat al -federatedIdentityConfirmLinkMessage=Er bestaat al een gebruiker met {0} {1}. Hoe wilt u doorgaan? -federatedIdentityConfirmReauthenticateMessage=Authenticeer als {0} om uw account te koppelen met {1} -confirmLinkIdpReviewProfile=Profiel controleren -confirmLinkIdpContinue=Toevoegen aan bestaand account - -configureTotpMessage=U moet Mobile Authenticator instellen om uw account te activeren -updateProfileMessage=U moet uw gebruikersprofiel bijwerken om uw account te activeren -updatePasswordMessage=U moet uw wachtwoord wijzigen om uw account te activeren -resetPasswordMessage=U moet uw wachtwoord wijzigen -verifyEmailMessage=U moet uw e-mailadres verifi\u00ebren om uw account te activeren -linkIdpMessage=U moet uw e-mailadres verifi\u00ebren om uw account te koppelen met {0} - -emailSentMessage=U ontvangt dadelijk een e-mailbericht met verdere instructies -emailSendErrorMessage=De e-mail kon niet worden verzonden. Probeer het later opnieuw. - -accountUpdatedMessage=Uw account is bijgewerkt -accountPasswordUpdatedMessage=Uw wachtwoord is bijgewerkt - -noAccessMessage=Geen toegang - -invalidPasswordMinLengthMessage=Wachtwoorden moeten een minimale lengte hebben van {0} tekens -invalidPasswordMinDigitsMessage=Wachtwoorden moeten minimaal {0} cijfers bevatten -invalidPasswordMinLowerCaseCharsMessage=Wachtwoorden moeten minimaal {0} kleine letters bevatten -invalidPasswordMinUpperCaseCharsMessage=Wachtwoorden moeten minimaal {0} hoofdletters bevatten -invalidPasswordMinSpecialCharsMessage=Wachtwoorden moeten minimaal {0} speciale tekens bevatten -invalidPasswordNotUsernameMessage=Uw wachtwoord mag niet hetzelfde zijn als uw gebruikersnaam -invalidPasswordRegexPatternMessage=Wachtwoorden moeten overeenkomen met het regex-patroon -invalidPasswordHistoryMessage=Wachtwoorden mogen niet hetzelfde zijn als een van de laatste {0} wachtwoorden -invalidPasswordGenericMessage=Uw wachtwoord komt niet overeen met het wachtwoordbeleid - -failedToProcessResponseMessage=Verwerken van respons mislukt -httpsRequiredMessage=HTTPS vereist -realmNotEnabledMessage=Realm niet ingeschakeld -invalidRequestMessage=Ongeldige aanvraag -failedLogout=Afmelden mislukt -unknownLoginRequesterMessage=Onbekende aanmeldingsaanvrager -loginRequesterNotEnabledMessage=Aanmeldingsaanvrager niet ingeschakeld -bearerOnlyMessage=Bearer-only applicaties mogen geen browseraanmelding initi\u00ebren -standardFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Standaard stroom is uitgeschakeld voor de client. -implicitFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Impliciete stroom is uitgeschakeld voor de client. -invalidRedirectUriMessage=Ongeldige omleidings-URI -unsupportedNameIdFormatMessage=Niet-ondersteunde NameIDFormat -invalidRequesterMessage=Ongeldige aanvrager -registrationNotAllowedMessage=Registratie niet toegestaan -resetCredentialNotAllowedMessage=Opnieuw instellen van referentie niet toegestaan - -permissionNotApprovedMessage=Machtiging geweigerd -noRelayStateInResponseMessage=Geen relaystatus in respons van id-provider -insufficientPermissionMessage=Onvoldoende machtigingen voor het koppelen van id's -couldNotProceedWithAuthenticationRequestMessage=Kon authenticatieaanvraag aan id-provider niet voortzetten -couldNotObtainTokenMessage=Kan geen token verkrijgen van id-provider -unexpectedErrorRetrievingTokenMessage=Onverwachte fout bij ophalen van token bij id-provider -unexpectedErrorHandlingResponseMessage=Onverwachte fout bij verwerken van respons van id-provider -identityProviderAuthenticationFailedMessage=Authenticatie mislukt. Authenticatie met id-provider niet mogelijk -identityProviderDifferentUserMessage=U bent geauthenticeerd als {0}, maar verwacht werd dat u als {1} zou zijn geauthenticeerd -couldNotSendAuthenticationRequestMessage=Kan authenticatieaanvraag niet verzenden naar id-provider -unexpectedErrorHandlingRequestMessage=Onverwachte fout bij verwerken van authenticatieaanvraag naar id-provider -invalidAccessCodeMessage=Ongeldige toegangscode -sessionNotActiveMessage=Sessie niet actief -invalidCodeMessage=Er is een probleem opgetreden. Meld u opnieuw aan via uw applicatie. -identityProviderUnexpectedErrorMessage=Er is een probleem opgetreden. Authenticatie met de id-provider was niet mogelijk. -identityProviderNotFoundMessage=Kan geen id-provider vinden met de id -identityProviderLinkSuccess=Uw e-mailadres is geverifieerd. Ga terug naar uw originele browser en ga verder met de aanmelding. -staleCodeMessage=Deze pagina is verlopen. Ga terug naar uw applicatie en meld u opnieuw aan. -realmSupportsNoCredentialsMessage=Realm ondersteunt geen enkel type referentie. -identityProviderNotUniqueMessage=Realm ondersteunt meerdere id-providers. Kan niet bepalen welke id-provider moet worden gebruikt voor de authenticatie. -emailVerifiedMessage=Uw e-mailadres is geverifieerd -staleEmailVerificationLink=De koppeling is niet langer geldig. U hebt uw e-mailadres mogelijk al geverifieerd. -identityProviderAlreadyLinkedMessage=De door {0} geretourneerde federatieve id is al aan een andere gebruiker gekoppeld -confirmAccountLinking=Bevestig het koppelen van het account {0} van id-provider {1} met uw account -confirmEmailAddressVerification=Bevestig de geldigheid van e-mailadres {0} -confirmExecutionOfActions=Voer de volgende actie(s) uit - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Terug naar applicatie -missingParameterMessage=Ontbrekende parameters: {0} -clientNotFoundMessage=Client niet gevonden -clientDisabledMessage=Client uitgeschakeld -invalidParameterMessage=Ongeldige parameter: {0} -alreadyLoggedIn=U bent al aangemeld -differentUserAuthenticated=U bent al geauthenticeerd als een andere gebruiker ''{0}'' in deze sessie. Probeer u opnieuw aan te melden. -brokerLinkingSessionExpired=Broker-accountkoppeling aangevraagd, maar huidige sessie is niet meer geldig. -proceedWithAction=» Klik hier om door te gaan - -requiredAction.CONFIGURE_TOTP=OTP configureren -requiredAction.terms_and_conditions=Voorwaarden -requiredAction.UPDATE_PASSWORD=Wachtwoord bijwerken -requiredAction.UPDATE_PROFILE=Profiel bijwerken -requiredAction.VERIFY_EMAIL=E-mailadres verifi\u00ebren - -p3pPolicy=CP="Dit is geen P3P-beleid!" - -doX509Login=U wordt aangemeld als: -clientCertificate=X509-clientcertificaat: -noCertificate=[Geen certificaat] - - -pageNotFound=Deze pagina is niet beschikbaar -internalServerError=Er is een probleem opgetreden diff --git a/deps/keycloak/themes/ndear/login/messages/messages_pt_BR.properties b/deps/keycloak/themes/ndear/login/messages/messages_pt_BR.properties deleted file mode 100644 index 37f43f8e2..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_pt_BR.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Entrar -needHelp=Precisa de ajuda? -selectAlternative=Ou selecione outra alternativa - -doRegister=Registrar -doCancel=Cancelar -doSubmit=Enviar -doYes=Sim -doNo=N\u00e3o -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceitar -doDecline=Rejeitar -doForgotPassword=Esqueceu sua senha? -doClickHere=Clique aqui -doImpersonate=Personificar -kerberosNotConfigured=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -kerberosNotConfiguredTitle=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -bypassKerberosDetail=Voc\u00ea n\u00e3o entrou via Kerberos ou seu navegador n\u00e3o est\u00e1 configurado para a autentica\u00e7\u00e3o do Kerberos. Clique em Continuar para entrar por outros meios. -kerberosNotSetUp=\u00c9 necess\u00e1rio configurar o Kerberos antes de entrar. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -registerWithTitle=Registrar com {0} -registerWithTitleHtml={0} -loginTitle=Entrar no {0} -loginTitleHtml={0} -impersonateTitle={0} Personificar usu\u00e1rio -impersonateTitleHtml={0} Personificar usu\u00e1rio -realmChoice=Realm -unknownUser=Usu\u00e1rio desconhecido -loginTotpTitle=Configura\u00e7\u00e3o do Mobile Authenticator -loginProfileTitle=Atualizar informa\u00e7\u00f5es da conta -loginTimeout=Voc\u00ea demorou muito para entrar. O processo ser\u00e1 reiniciado. -oauthGrantTitle=Conceder acesso -oauthGrantTitleHtml={0} -errorTitle=Pedimos desculpas -errorTitleHtml=Pedimos desculpas -emailVerifyTitle=Verifica\u00e7\u00e3o de email -emailForgotTitle=Esqueceu sua senha? -updatePasswordTitle=Atualizar senha -codeSuccessTitle=C\u00f3digo de sucesso -codeErrorTitle=C\u00f3digo de erro: {0} - -termsTitle=Termos e Condi\u00e7\u00f5es -termsTitleHtml=Termos e Condi\u00e7\u00f5es -termsText=

      Termos e Condi\u00e7\u00f5es a serem definidos

      - -recaptchaFailed=Recaptcha inv\u00e1lido -recaptchaNotConfigured=O recaptcha \u00e9 obrigat\u00f3rio e n\u00e3o est\u00e1 configurado -consentDenied=Consentimento negado. - -noAccount=Novo usu\u00e1rio? -username=Nome de usu\u00e1rio -usernameOrEmail=Nome de usu\u00e1rio ou email -firstName=Nome -givenName=Primeiro nome -fullName=Nome completo -lastName=Sobrenome -familyName=Sobrenome -email=Email -password=Senha -passwordConfirm=Confirme a senha -passwordNew=Nova senha -passwordNewConfirm=Confirma\u00e7\u00e3o de nova senha -rememberMe=Lembrar-me -authenticatorCode=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -address=Endere\u00e7o -street=Logradouro -locality=Cidade ou localidade -region=Estado -postal_code=CEP -country=Pa\u00eds -emailVerified=Email verificado -gssDelegationCredential=Credencial de delega\u00e7\u00e3o GSS - -loginTotpStep1=Instale um dos seguintes aplicativos em seu dispositivo m\u00f3vel -loginTotpStep2=Abra o aplicativo e digitalize o c\u00f3digo de barras -loginTotpStep3=Insira o c\u00f3digo de verifica\u00e7\u00e3o \u00fanico fornecido pelo aplicativo e clique em Enviar para finalizar a configura\u00e7\u00e3o -loginTotpManualStep2=Abra o aplicativo e insira a chave -loginTotpManualStep3=Use os valores a seguir caso o aplicativo permita que eles sejam definidos -loginTotpUnableToScan=N\u00e3o foi poss\u00edvel digitalizar? -loginTotpScanBarcode=Digitalizar c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -loginTotpType=Tipo -loginTotpAlgorithm=Algor\u00edtimo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Baseado em tempo -loginTotp.hotp=Baseado em contador - - -oauthGrantRequest=Deseja conceder esses privil\u00e9gios de acesso? -inResource=em - -emailVerifyInstruction1=Enviamos um email com instru\u00e7\u00f5es para a verifica\u00e7\u00e3o do seu endere\u00e7o de email -emailVerifyInstruction2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailVerifyInstruction3=para reenviar o email - -emailLinkIdpTitle=Vincular {0} -emailLinkIdp1=Foi enviado um email com instru\u00e7\u00f5es para vincular a conta {0} {1} com a sua conta {2} -emailLinkIdp2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailLinkIdp3=para reenviar o email -emailLinkIdp4=Se voc\u00ea j\u00e1 verificou o email em outro navegador -emailLinkIdp5=para continuar - -backToLogin=« Voltar para o Login - -emailInstruction=Digite seu nome de usu\u00e1rio ou endere\u00e7o de email e enviaremos instru\u00e7\u00f5es de como criar uma nova senha - -copyCodeInstruction=Copie este c\u00f3digo e cole-o no aplicativo - -pageExpiredTitle=A p\u00e1gina expirou -pageExpiredMsg1=Para reiniciar o processo de login -pageExpiredMsg2=Para continuar o processo de login - -personalInfo=Informa\u00e7\u00f5es Pessoais: -role_admin=Admininstrador -role_realm-admin=Administrador do realm -role_create-realm=Criar realm -role_create-client=Criar cliente -role_view-realm=Exibir realm -role_view-users=Exibir usu\u00e1rios -role_view-applications=Exibir aplicativos -role_view-clients=Exibir clientes -role_view-events=Exibir eventos -role_view-identity-providers=Exibir provedores de identidade -role_manage-realm=Gerenciar realm -role_manage-users=Gerenciar usu\u00e1rios -role_manage-applications=Gerenciar aplicativos -role_manage-identity-providers=Gerenciar provedores de identidade -role_manage-clients=Gerenciar clientes -role_manage-events=Gerenciar eventos -role_view-profile=Exibir perfil -role_manage-account=Gerenciar contas -role_manage-account-links=Gerenciar v\u00ednculos da conta -role_read-token=Ler token -role_offline-access=Acesso offline -client_account=Conta -client_security-admin-console=Console de Administra\u00e7\u00e3o de Seguran\u00e7a -client_admin-cli=Admin CLI -client_realm-management=Gerenciamento de realm -client_broker=Agente - -invalidUserMessage=Usu\u00e1rio ou senha inv\u00e1lidos -invalidEmailMessage=Endere\u00e7o de email inv\u00e1lido -accountDisabledMessage=Sua conta est\u00e1 desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -accountTemporarilyDisabledMessage=Sua conta est\u00e1 temporariamente desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es ou tente novamente mais tarde. -expiredCodeMessage=Sua sess\u00e3o expirou. Tente entrar novamente. -expiredActionMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. -expiredActionTokenNoSessionMessage=Sua a\u00e7\u00e3o expirou. -expiredActionTokenSessionExistsMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. - -missingFirstNameMessage=Digite seu nome -missingLastNameMessage=Digite seu sobrenome -missingEmailMessage=Digite seu endere\u00e7o de email -missingUsernameMessage=Digite seu nome de usu\u00e1rio -missingPasswordMessage=Digita sua senha -missingTotpMessage=Digite seu c\u00f3digo autenticador -notMatchPasswordMessage=Ocorreu um problema ao tentar entrar. As senhas inseridas n\u00e3o coincidem. - -invalidPasswordExistingMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser inv\u00e1lida. -invalidPasswordBlacklistedMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser proibida. -invalidPasswordConfirmMessage=Ocorreu um problema ao tentar entrar. A confima\u00e7\u00e3o de senha inserida n\u00e3o \u00e9 igual. -invalidTotpMessage=Ocorreu um problema ao tentar entrar. O c\u00f3digo de autentica\u00e7\u00e3o inserido pode ser inv\u00e1lido. - -usernameExistsMessage=Este nome de usu\u00e1rio j\u00e1 existe -emailExistsMessage=Este email j\u00e1 existe - -federatedIdentityExistsMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Entre como Gerente de conta para vincular a conta. - -confirmLinkIdpTitle=Conta j\u00e1 existente -federatedIdentityConfirmLinkMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Como deseja prosseguir? -federatedIdentityConfirmReauthenticateMessage=Autenticar como {0} para vincular sua conta com {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=Adicionar \u00e0 conta existente - -configureTotpMessage=Voc\u00ea precisa configurar o Mobile Authenticator para ativar sua conta -updateProfileMessage=Voc\u00ea precisa atualizar o seu perfil de usu\u00e1rio para ativar a conta -updatePasswordMessage=Voc\u00ea precisa alterar sua senha para ativar a conta -resetPasswordMessage=Voc\u00ea precisa alterar sua senha -verifyEmailMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para ativar a conta -linkIdpMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para vincular sua conta com {0} - -emailSentMessage=Em breve, voc\u00ea receber\u00e1 um email com mais instru\u00e7\u00f5es -emailSendErrorMessage=N\u00e3o foi poss\u00edvel enviar o email. Tente novamente mais tarde. - -accountUpdatedMessage=Sua conta foi atualizada -accountPasswordUpdatedMessage=Sua senha foi atualizada - -noAccessMessage=Sem acesso - -invalidPasswordMinLengthMessage=A senha deve ter no m\u00ednimo {0} caracteres -invalidPasswordMinDigitsMessage=A senha deve ter no m\u00ednimo {0} numerais -invalidPasswordMinLowerCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres min\u00fasculos -invalidPasswordMinUpperCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres mai\u00fasculos -invalidPasswordMinSpecialCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres especiais -invalidPasswordNotUsernameMessage=Sua senha n\u00e3o pode ser igual ao nome de usu\u00e1rio -invalidPasswordRegexPatternMessage=A senha deve corresponder ao padr\u00e3o regex -invalidPasswordHistoryMessage=A senha n\u00e3o deve ser igual a nenhuma das \u00faltimas {0} senhas -invalidPasswordGenericMessage=Sua senha n\u00e3o corresponde \u00e0 pol\u00edtica de senhas - -failedToProcessResponseMessage=Falha ao processar a resposta -httpsRequiredMessage=HTTPS necess\u00e1rio -realmNotEnabledMessage=Realm desabilitado -invalidRequestMessage=Pedido inv\u00e1lido -failedLogout=Falha no Logout -unknownLoginRequesterMessage=Solicitante de login desconhecido -loginRequesterNotEnabledMessage=Solicitante de login desabilitado -bearerOnlyMessage=Aplicativos Bearer-only n\u00e3o t\u00eam permiss\u00e3o para iniciar o login pelo navegador -standardFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo padr\u00e3o est\u00e1 desabilitado para o cliente. -implicitFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo impl\u00edcito est\u00e1 desabilitado para o cliente. -invalidRedirectUriMessage=URI de redirecionamento inv\u00e1lido -unsupportedNameIdFormatMessage=Formato do nome n\u00e3o suportado -invalidRequesterMessage=Solicitante inv\u00e1lido -registrationNotAllowedMessage=Registro n\u00e3o permitido. -resetCredentialNotAllowedMessage=N\u00e3o \u00e9 permitido redefinir a credencial. - -permissionNotApprovedMessage=Permiss\u00e3o negada -noRelayStateInResponseMessage=Sem retorno de RelayState do provedor de identidade -insufficientPermissionMessage=Permiss\u00f5es insuficientes para vincular identidades -couldNotProceedWithAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel continuar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -couldNotObtainTokenMessage=N\u00e3o foi poss\u00edvel obter o token do provedor de identidade -unexpectedErrorRetrievingTokenMessage=Erro inesperado ao recuperar o token do provedor de identidade -unexpectedErrorHandlingResponseMessage=Erro inesperado ao lidar com a resposta do provedor de identidade -identityProviderAuthenticationFailedMessage=Falha na autentica\u00e7\u00e3o. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade -identityProviderDifferentUserMessage=Autenticado como {0}, mas era esperado ser autenticado como {1} -couldNotSendAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel enviar pedido de autentica\u00e7\u00e3o para o provedor de identidade -unexpectedErrorHandlingRequestMessage=Erro inesperado ao lidar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -invalidAccessCodeMessage=C\u00f3digo de acesso inv\u00e1lido -sessionNotActiveMessage=Sess\u00e3o inativa -invalidCodeMessage=Encontramos um problema. Tente entrar novamente pelo aplicativo. -identityProviderUnexpectedErrorMessage=Encontramos um problema. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade. -identityProviderNotFoundMessage=N\u00e3o foi poss\u00edvel encontrar um provedor de identidade com esse identificador -identityProviderLinkSuccess=Seu email foi verificado com sucesso. Retorne ao navegador original e continue o login. -staleCodeMessage=Esta p\u00e1gina n\u00e3o est\u00e1 mais v\u00e1lida. Volte para o aplicativo e entre novamente. -realmSupportsNoCredentialsMessage=O realm n\u00e3o suporta nenhum tipo de credencial. -identityProviderNotUniqueMessage=O realm suporta m\u00faltiplos provedores de identidade. N\u00e3o foi poss\u00edvel determinar qual provedor de identidade deve ser usado na autentica\u00e7\u00e3o. -emailVerifiedMessage=Seu endere\u00e7o de email foi verificado. -staleEmailVerificationLink=O link n\u00e3o est\u00e1 mais v\u00e1lido. Voc\u00ea pode j\u00e1 ter verificado seu endere\u00e7o de email. -identityProviderAlreadyLinkedMessage=A identidade federada retornada por {0} j\u00e1 est\u00e1 vinculada a outro usu\u00e1rio -confirmAccountLinking=Confirmar a vincula\u00e7\u00e3o da conta {0} do provedor de identidade {1} com a sua conta -confirmEmailAddressVerification=Confirmar a validade do endere\u00e7o de email {0} -confirmExecutionOfActions=Realizar as seguintes a\u00e7\u00f5es - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Voltar para o aplicativo -missingParameterMessage=Par\u00e2metros ausentes: {0} -clientNotFoundMessage=Cliente n\u00e3o encontrado -clientDisabledMessage=Cliente desabilitado -invalidParameterMessage=Par\u00e2mentro inv\u00e1lido: {0} -alreadyLoggedIn=Voc\u00ea j\u00e1 est\u00e1 conectado -differentUserAuthenticated=Voc\u00ea j\u00e1 est\u00e1 conectado como o usu\u00e1rio ''{0}'' nesta sess\u00e3o. Tente entrar novamente. -brokerLinkingSessionExpired=Vincula\u00e7\u00e3o de conta de agente solicitada, mas a sess\u00e3o atual n\u00e3o est\u00e1 mais v\u00e1lida. -proceedWithAction=» Clique aqui para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=Termos e Condi\u00e7\u00f5es -requiredAction.UPDATE_PASSWORD=Atualizar senha -requiredAction.UPDATE_PROFILE=Atualizar perfil -requiredAction.VERIFY_EMAIL=Verificar email - -p3pPolicy=CP="Esta n\u00e3o \u00e9 uma pol\u00edtica P3P!" - -doX509Login=Voc\u00ea vai entrar como: -clientCertificate=Certificado X509 do cliente: -noCertificate=[Sem certificado] - - -pageNotFound=Esta p\u00e1gina n\u00e3o est\u00e1 dispon\u00edvel -internalServerError=Encontramos um problema diff --git a/deps/keycloak/themes/ndear/login/messages/messages_ru.properties b/deps/keycloak/themes/ndear/login/messages/messages_ru.properties deleted file mode 100644 index f512abe4c..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_ru.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u0412\u0445\u043e\u0434 -needHelp=\u041d\u0443\u0436\u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c? -selectAlternative=\u0418\u043b\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 - -doRegister=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f -doCancel=\u041e\u0442\u043c\u0435\u043d\u0430 -doSubmit=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c -doYes=\u0414\u0430 -doNo=\u041d\u0435\u0442 -doContinue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c -doIgnore=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c -doAccept=\u041f\u0440\u0438\u043d\u044f\u0442\u044c -doDecline=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c -doForgotPassword=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -doClickHere=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c -doImpersonate=\u0418\u043c\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f -kerberosNotConfigured=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -kerberosNotConfiguredTitle=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -bypassKerberosDetail=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Kerberos, \u0438\u043b\u0438 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043cr Kerberos. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c" \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. -kerberosNotSetUp=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Kerberos, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -registerWithTitle=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e {0} -registerWithTitleHtml={0} -loginTitle=\u0412\u0445\u043e\u0434 \u0432 {0} -loginTitleHtml={0} -impersonateTitle=\u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c {0} -impersonateTitleHtml={0} \u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -realmChoice=\u041e\u0431\u043b\u0430\u0441\u0442\u044c -unknownUser=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -loginTotpTitle=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Mobile Authenticator -loginProfileTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -loginTimeout=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u0445\u043e\u0434\u0430. -oauthGrantTitle=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f -oauthGrantTitleHtml={0} -errorTitle=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -errorTitleHtml=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -emailVerifyTitle=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailForgotTitle=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -updatePasswordTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -codeSuccessTitle=\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 -codeErrorTitle=\u041e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434: {0} - -termsTitle=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsTitleHtml=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsText=

      \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b

      - -recaptchaFailed=\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f Recaptcha -recaptchaNotConfigured=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Recaptcha. Recaptcha \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 -consentDenied=\u0412 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e. - -noAccount=\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c? -username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -usernameOrEmail=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -firstName=\u0418\u043c\u044f -givenName=\u0418\u043c\u044f -fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f -lastName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -familyName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -email=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430 -password=\u041f\u0430\u0440\u043e\u043b\u044c -passwordConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNew=\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNewConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -rememberMe=\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044f -authenticatorCode=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 -address=\u0410\u0434\u0440\u0435\u0441 -street=\u0423\u043b\u0438\u0446\u0430 -locality=\u0413\u043e\u0440\u043e\u0434 -region=\u0420\u0435\u0433\u0438\u043e\u043d -postal_code=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 -country=\u0421\u0442\u0440\u0430\u043d\u0430 -emailVerified=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -gssDelegationCredential=\u0414\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 GSS - -loginTotpStep1=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0432\u043e\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e -loginTotpStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434 -loginTotpStep3=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c" \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 -loginTotpManualStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 -loginTotpManualStep3=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 -loginTotpUnableToScan=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? -loginTotpScanBarcode=\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434? -loginTotpOneTime=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -loginTotpType=\u0422\u0438\u043f -loginTotpAlgorithm=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c -loginTotpDigits=\u0426\u0438\u0444\u0440\u044b -loginTotpInterval=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -loginTotp.totp=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 -loginTotp.hotp=\u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 - - -oauthGrantRequest=\u0412\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0430\u043c? -inResource=\u0432 - -emailVerifyInstruction1=\u0412\u0430\u043c \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailVerifyInstruction2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailVerifyInstruction3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e - -emailLinkIdpTitle=\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c {0} -emailLinkIdp1=\u041d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 {0} \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {1} \u043a \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {2} -emailLinkIdp2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailLinkIdp3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e -emailLinkIdp4=\u0412\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 -emailLinkIdp5=\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -backToLogin=« \u041d\u0430\u0437\u0430\u0434 \u043a \u0432\u0445\u043e\u0434\u0443 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -emailInstruction=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f - -copyCodeInstruction=\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 - -pageExpiredTitle=\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u0442\u0435\u043a -pageExpiredMsg1=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -pageExpiredMsg2=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -personalInfo=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: -role_admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 -role_realm-admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_create-realm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c -role_create-client=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 -role_view-realm=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_view-users=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 -role_view-applications=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 -role_view-clients=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 -role_view-events=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 -role_view-identity-providers=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-realm=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -role_manage-users=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 -role_manage-applications=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 -role_manage-identity-providers=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-clients=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 -role_manage-events=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 -role_view-profile=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c {0} -role_manage-account=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e -role_manage-account-links=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c -role_read-token=\u0427\u0442\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 -role_offline-access=\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f -client_account=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c -client_security-admin-console=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 -client_admin-cli=\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 -client_realm-management=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -client_broker=\u0411\u0440\u043e\u043a\u0435\u0440 - -invalidUserMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c -invalidEmailMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -accountDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -accountTemporarilyDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. -expiredCodeMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0430\u043d\u0441\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionTokenNoSessionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e -expiredActionTokenSessionExistsMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. - -missingFirstNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f -missingLastNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0444\u0430\u043c\u0438\u043b\u0438\u044e -missingEmailMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -missingUsernameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -missingPasswordMessage=\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -missingTotpMessage=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 -notMatchPasswordMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. - -invalidPasswordExistingMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c. -invalidPasswordBlacklistedMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. -invalidPasswordConfirmMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f. -invalidTotpMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430. - -usernameExistsMessage=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -emailExistsMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 - -federatedIdentityExistsMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438", \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. - -confirmLinkIdpTitle=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -federatedIdentityConfirmLinkMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? -federatedIdentityConfirmReauthenticateMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043a\u0430\u043a {0} \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0441 {1} -confirmLinkIdpReviewProfile=\u041e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f -confirmLinkIdpContinue=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c - -configureTotpMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mobile Authenticator -updateProfileMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -updatePasswordMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -resetPasswordMessage=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -verifyEmailMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -linkIdpMessage=\u0414\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a {0} \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -emailSentMessage=\u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 -emailSendErrorMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. - -accountUpdatedMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 -accountPasswordUpdatedMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d - -noAccessMessage=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - -invalidPasswordMinLengthMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordMinDigitsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0446\u0438\u0444\u0440 -invalidPasswordMinLowerCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinUpperCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinSpecialCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordNotUsernameMessage=\u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -invalidPasswordRegexPatternMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 -invalidPasswordHistoryMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 {0} \u043f\u0430\u0440\u043e\u043b\u0435\u0439 -invalidPasswordGenericMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 - -failedToProcessResponseMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 -httpsRequiredMessage=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f HTTPS -realmNotEnabledMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 -invalidRequestMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 -failedLogout=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 -unknownLoginRequesterMessage=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 -loginRequesterNotEnabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d -bearerOnlyMessage=\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 -standardFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -implicitFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u0435\u044f\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -invalidRedirectUriMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 uri \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 -unsupportedNameIdFormatMessage=\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 NameIDFormat -invalidRequesterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0438\u0439 -registrationNotAllowedMessage=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 -resetCredentialNotAllowedMessage=\u0421\u0431\u0440\u043e\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d - -permissionNotApprovedMessage=\u0412 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e -noRelayStateInResponseMessage=\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f -insufficientPermissionMessage=\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 -couldNotProceedWithAuthenticationRequestMessage=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -couldNotObtainTokenMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorRetrievingTokenMessage=\u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -unexpectedErrorHandlingResponseMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -identityProviderAuthenticationFailedMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -identityProviderDifferentUserMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {0}, \u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {1} -couldNotSendAuthenticationRequestMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorHandlingRequestMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -invalidAccessCodeMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 -sessionNotActiveMessage=\u0421\u0435\u0430\u043d\u0441 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d -invalidCodeMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. -identityProviderUnexpectedErrorMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. -identityProviderNotFoundMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c -identityProviderLinkSuccess=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. -staleCodeMessage=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -realmSupportsNoCredentialsMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. -identityProviderNotUniqueMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. -emailVerifiedMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -staleEmailVerificationLink=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. -identityProviderAlreadyLinkedMessage=\u0424\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 {0}, \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c -confirmAccountLinking=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {0} \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 {1} \u043a \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -confirmEmailAddressVerification=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b {0} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c -confirmExecutionOfActions=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u041d\u0430\u0437\u0430\u0434 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 -missingParameterMessage=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: {0} -clientNotFoundMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d -clientDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d -invalidParameterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: {0} -alreadyLoggedIn=\u0412\u044b \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -differentUserAuthenticated=\u0412\u044b \u0443\u0436\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0441\u0435\u0430\u043d\u0441 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f ''{0}''. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -brokerLinkingSessionExpired=\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0430\u043d\u0441 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d. -proceedWithAction=» \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -requiredAction.CONFIGURE_TOTP=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c (OTP) -requiredAction.terms_and_conditions=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -requiredAction.UPDATE_PASSWORD=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -requiredAction.UPDATE_PROFILE=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c -requiredAction.VERIFY_EMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -p3pPolicy=CP="\u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 P3P!" - -doX509Login=\u0412\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0441 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438: -clientCertificate=\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 X509: -noCertificate=[\u041d\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430] - - -pageNotFound=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 -internalServerError=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 diff --git a/deps/keycloak/themes/ndear/login/messages/messages_zh_CN.properties b/deps/keycloak/themes/ndear/login/messages/messages_zh_CN.properties deleted file mode 100644 index 027252ce3..000000000 --- a/deps/keycloak/themes/ndear/login/messages/messages_zh_CN.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u767b\u5f55 -needHelp=\u662f\u5426\u9700\u8981\u5e2e\u52a9\uff1f -selectAlternative=\u6216\u8005\u9009\u62e9\u4e00\u4e2a\u5907\u9009 - -doRegister=\u6ce8\u518c -doCancel=\u53d6\u6d88 -doSubmit=\u63d0\u4ea4 -doYes=\u662f -doNo=\u5426 -doContinue=\u7ee7\u7eed -doIgnore=\u5ffd\u7565 -doAccept=\u63a5\u53d7 -doDecline=\u62d2\u7edd -doForgotPassword=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -doClickHere=\u5355\u51fb\u6b64\u5904 -doImpersonate=\u6a21\u62df -kerberosNotConfigured=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -kerberosNotConfiguredTitle=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -bypassKerberosDetail=\u60a8\u672a\u901a\u8fc7 Kerberos \u8fdb\u884c\u767b\u5f55\uff0c\u6216\u8005\u60a8\u7684\u6d4f\u89c8\u5668\u672a\u8bbe\u7f6e Kerberos \u767b\u5f55\u3002\u8bf7\u5355\u51fb\u201c\u7ee7\u7eed\u201d\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\u767b\u5f55\u3002 -kerberosNotSetUp=\u60a8\u9700\u8981\u5148\u8bbe\u7f6e Kerberos \u624d\u80fd\u8fdb\u884c\u767b\u5f55\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -registerWithTitle=\u4f7f\u7528 {0} \u6ce8\u518c -registerWithTitleHtml={0} -loginTitle=\u767b\u5f55\u5230 {0} -loginTitleHtml={0} -impersonateTitle={0} \u6a21\u62df\u7528\u6237 -impersonateTitleHtml={0}\u6a21\u62df\u7528\u6237 -realmChoice=\u57df -unknownUser=\u672a\u77e5\u7528\u6237 -loginTotpTitle=Mobile Authenticator \u8bbe\u7f6e -loginProfileTitle=\u66f4\u65b0\u5e10\u6237\u4fe1\u606f -loginTimeout=\u60a8\u7684\u767b\u5f55\u65f6\u95f4\u8fc7\u957f\u3002\u91cd\u65b0\u5f00\u59cb\u767b\u5f55\u8fc7\u7a0b\u3002 -oauthGrantTitle=\u6388\u6743\u8bbf\u95ee -oauthGrantTitleHtml={0} -errorTitle=\u5f88\u62b1\u6b49\u3002 -errorTitleHtml=\u5f88\u62b1\u6b49 -emailVerifyTitle=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 -emailForgotTitle=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -updatePasswordTitle=\u66f4\u65b0\u5bc6\u7801 -codeSuccessTitle=\u6210\u529f\u7801 -codeErrorTitle=\u9519\u8bef\u7801\uff1a{0} - -termsTitle=\u6761\u6b3e -termsTitleHtml=\u6761\u6b3e -termsText=

      \u9700\u8981\u786e\u5b9a\u7684\u6761\u6b3e

      - -recaptchaFailed=\u65e0\u6548\u7684\u9a8c\u8bc1\u7801 -recaptchaNotConfigured=\u9700\u8981\u9a8c\u8bc1\u7801\uff0c\u5c1a\u672a\u8fdb\u884c\u914d\u7f6e -consentDenied=\u8bb8\u53ef\u88ab\u62d2\u7edd\u3002 - -noAccount=\u65b0\u7528\u6237? -username=\u7528\u6237\u540d -usernameOrEmail=\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6 -firstName=\u540d\u5b57 -givenName=\u540d\u5b57 -fullName=\u5168\u540d -lastName=\u59d3\u6c0f -familyName=\u59d3\u6c0f -email=\u7535\u5b50\u90ae\u4ef6 -password=\u5bc6\u7801 -passwordConfirm=\u786e\u8ba4\u5bc6\u7801 -passwordNew=\u65b0\u5bc6\u7801 -passwordNewConfirm=\u786e\u8ba4\u65b0\u5bc6\u7801 -rememberMe=\u8bb0\u4f4f\u7528\u6237\u540d\u548c\u5bc6\u7801 -authenticatorCode=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -address=\u5730\u5740 -street=\u8857\u9053 -locality=\u5e02 -region=\u7701\uff0c\u81ea\u6cbb\u533a\uff0c\u76f4\u8f96\u5e02 -postal_code=\u90ae\u653f\u7f16\u7801 -country=\u56fd\u5bb6/\u5730\u533a -emailVerified=\u7535\u5b50\u90ae\u4ef6\u5df2\u9a8c\u8bc1 -gssDelegationCredential=GSS \u6388\u6743\u51ed\u636e - -loginTotpStep1=\u5728\u60a8\u7684\u624b\u673a\u4e0a\u5b89\u88c5\u4ee5\u4e0b\u5176\u4e2d\u4e00\u79cd\u5e94\u7528 -loginTotpStep2=\u6253\u5f00\u5e94\u7528\u5e76\u626b\u63cf\u6761\u5f62\u7801 -loginTotpStep3=\u8f93\u5165\u5e94\u7528\u63d0\u4f9b\u7684\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801\uff0c\u7136\u540e\u5355\u51fb\u201c\u63d0\u4ea4\u201d\u5b8c\u6210\u8bbe\u7f6e -loginTotpManualStep2=\u6253\u5f00\u5e94\u7528\u5e76\u8f93\u5165\u5bc6\u94a5 -loginTotpManualStep3=\u5982\u679c\u5e94\u7528\u5141\u8bb8\u8bbe\u7f6e\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u914d\u7f6e\u503c -loginTotpUnableToScan=\u65e0\u6cd5\u626b\u63cf\uff1f -loginTotpScanBarcode=\u626b\u63cf\u6761\u5f62\u7801\uff1f -loginTotpOneTime=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -loginTotpType=\u7c7b\u578b -loginTotpAlgorithm=\u7b97\u6cd5 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u95f4\u9694 - -loginTotp.totp=\u57fa\u4e8e\u65f6\u95f4 -loginTotp.hotp=\u57fa\u4e8e\u8ba1\u6570\u5668 - - -oauthGrantRequest=\u60a8\u662f\u5426\u6388\u4e88\u8fd9\u4e9b\u8bbf\u95ee\u6743\u9650\uff1f -inResource=in - -emailVerifyInstruction1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u9a8c\u8bc1\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailVerifyInstruction2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailVerifyInstruction3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 - -emailLinkIdpTitle=\u94fe\u63a5 {0} -emailLinkIdp1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u5982\u4f55\u5c06 {0} \u5e10\u6237 {1} \u94fe\u63a5\u5230\u60a8\u7684 {2} \u5e10\u6237\u7684\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailLinkIdp3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp4=\u5982\u679c\u60a8\u5df2\u5728\u4e0d\u540c\u7684\u6d4f\u89c8\u5668\u4e2d\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\uff0c -emailLinkIdp5=\u8bf7\u7ee7\u7eed - -backToLogin=« \u8fd4\u56de\u767b\u5f55 - -emailInstruction=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u6211\u4eec\u5c06\u5411\u60a8\u53d1\u9001\u5982\u4f55\u521b\u5efa\u65b0\u5bc6\u7801\u7684\u8bf4\u660e - -copyCodeInstruction=\u590d\u5236\u6b64\u9a8c\u8bc1\u7801\u5e76\u7c98\u8d34\u5230\u60a8\u7684\u5e94\u7528 - -pageExpiredTitle=\u9875\u9762\u5df2\u8fc7\u671f -pageExpiredMsg1=\u91cd\u65b0\u542f\u52a8\u767b\u5f55\u8fc7\u7a0b -pageExpiredMsg2=\u7ee7\u7eed\u767b\u5f55\u8fc7\u7a0b - -personalInfo=\u4e2a\u4eba\u4fe1\u606f\uff1a -role_admin=\u7ba1\u7406\u5458 -role_realm-admin=\u57df\u7ba1\u7406\u5458 -role_create-realm=\u521b\u5efa\u57df -role_create-client=\u521b\u5efa\u5ba2\u6237 -role_view-realm=\u67e5\u770b\u57df -role_view-users=\u67e5\u770b\u7528\u6237 -role_view-applications=\u67e5\u770b\u5e94\u7528 -role_view-clients=\u67e5\u770b\u5ba2\u6237 -role_view-events=\u67e5\u770b\u4e8b\u4ef6 -role_view-identity-providers=\u67e5\u770b\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-realm=\u7ba1\u7406\u57df -role_manage-users=\u7ba1\u7406\u7528\u6237 -role_manage-applications=\u7ba1\u7406\u5e94\u7528 -role_manage-identity-providers=\u7ba1\u7406\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-clients=\u7ba1\u7406\u5ba2\u6237 -role_manage-events=\u7ba1\u7406\u4e8b\u4ef6 -role_view-profile=\u67e5\u770b\u914d\u7f6e\u6587\u4ef6 -role_manage-account=\u7ba1\u7406\u5e10\u6237 -role_manage-account-links=\u7ba1\u7406\u5e10\u6237\u94fe\u63a5 -role_read-token=\u8bfb\u53d6\u4ee4\u724c -role_offline-access=\u79bb\u7ebf\u8bbf\u95ee -client_account=\u5e10\u6237 -client_security-admin-console=\u5b89\u5168\u7ba1\u7406\u63a7\u5236\u53f0 -client_admin-cli=\u7ba1\u7406\u547d\u4ee4\u884c\u5de5\u5177 -client_realm-management=\u57df\u7ba1\u7406 -client_broker=\u4ee3\u7406 - -invalidUserMessage=\u65e0\u6548\u7528\u6237\u540d\u6216\u5bc6\u7801 -invalidEmailMessage=\u65e0\u6548\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -accountDisabledMessage=\u60a8\u7684\u5e10\u6237\u5df2\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -accountTemporarilyDisabledMessage=\u60a8\u7684\u5e10\u6237\u4e34\u65f6\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u6216\u7a0d\u5019\u91cd\u8bd5\u3002 -expiredCodeMessage=\u60a8\u7684\u4f1a\u8bdd\u5df2\u8d85\u65f6\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionTokenNoSessionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f -expiredActionTokenSessionExistsMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 - -missingFirstNameMessage=\u8f93\u5165\u60a8\u7684\u540d\u5b57 -missingLastNameMessage=\u8f93\u5165\u60a8\u7684\u59d3\u6c0f -missingEmailMessage=\u8f93\u5165\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -missingUsernameMessage=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d -missingPasswordMessage=\u8f93\u5165\u60a8\u7684\u5bc6\u7801 -missingTotpMessage=\u8f93\u5165\u60a8\u7684\u9a8c\u8bc1\u7801 -notMatchPasswordMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u3002 - -invalidPasswordExistingMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u65e0\u6548\u3002 -invalidPasswordBlacklistedMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u88ab\u5217\u5165\u9ed1\u540d\u5355\u3002 -invalidPasswordConfirmMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u786e\u8ba4\u5bc6\u7801\u4e0d\u5339\u914d\u3002 -invalidTotpMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u9a8c\u8bc1\u7801\u53ef\u80fd\u65e0\u6548\u3002 - -usernameExistsMessage=\u7528\u6237\u540d\u5df2\u5b58\u5728 -emailExistsMessage=\u7535\u5b50\u90ae\u4ef6\u5df2\u5b58\u5728 - -federatedIdentityExistsMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u8bf7\u767b\u5f55\u5230\u5e10\u6237\u7ba1\u7406\u94fe\u63a5\u8be5\u5e10\u6237\u3002 - -confirmLinkIdpTitle=\u5e10\u6237\u5df2\u5b58\u5728 -federatedIdentityConfirmLinkMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u63a5\u4e0b\u6765\u5982\u4f55\u64cd\u4f5c\uff1f -federatedIdentityConfirmReauthenticateMessage=\u8eab\u4efd\u9a8c\u8bc1\u4e3a {0}\uff0c\u5c06 {1} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 -confirmLinkIdpReviewProfile=\u5ba1\u67e5\u914d\u7f6e\u6587\u4ef6 -confirmLinkIdpContinue=\u6dfb\u52a0\u5230\u73b0\u6709\u5e10\u6237 - -configureTotpMessage=\u60a8\u9700\u8981\u8bbe\u7f6e Mobile Authenticator \u4ee5\u6fc0\u6d3b\u5e10\u6237 -updateProfileMessage=\u60a8\u9700\u8981\u66f4\u65b0\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u4ee5\u6fc0\u6d3b\u5e10\u6237 -updatePasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801\u4ee5\u6fc0\u6d3b\u5e10\u6237 -resetPasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801 -verifyEmailMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u6fc0\u6d3b\u5e10\u6237 -linkIdpMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u5c06 {0} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 - -emailSentMessage=\u60a8\u5c06\u5f88\u5feb\u6536\u5230\u5305\u542b\u66f4\u591a\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailSendErrorMessage=\u6211\u4eec\u65e0\u6cd5\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002 - -accountUpdatedMessage=\u60a8\u7684\u5e10\u6237\u5df2\u66f4\u65b0 -accountPasswordUpdatedMessage=\u60a8\u7684\u5bc6\u7801\u5df2\u66f4\u65b0 - -noAccessMessage=\u65e0\u8bbf\u95ee\u6743\u9650 - -invalidPasswordMinLengthMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5b57\u7b26 -invalidPasswordMinDigitsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u6570\u5b57 -invalidPasswordMinLowerCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5c0f\u5199\u5b57\u6bcd -invalidPasswordMinUpperCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5927\u5199\u5b57\u6bcd -invalidPasswordMinSpecialCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u7279\u6b8a\u5b57\u7b26 -invalidPasswordNotUsernameMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u80fd\u4e0e\u7528\u6237\u540d\u76f8\u540c -invalidPasswordRegexPatternMessage=\u5bc6\u7801\u5fc5\u987b\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d -invalidPasswordHistoryMessage=\u5bc6\u7801\u4e0d\u5f97\u4e0e\u6700\u8fd1 {0} \u6b21\u4f7f\u7528\u7684\u5bc6\u7801\u76f8\u540c -invalidPasswordGenericMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u5bc6\u7801\u7b56\u7565 - -failedToProcessResponseMessage=\u65e0\u6cd5\u5904\u7406\u56de\u590d -httpsRequiredMessage=\u9700\u8981 HTTPS -realmNotEnabledMessage=\u57df\u672a\u542f\u7528 -invalidRequestMessage=\u65e0\u6548\u8bf7\u6c42 -failedLogout=\u65e0\u6cd5\u6ce8\u9500 -unknownLoginRequesterMessage=\u672a\u77e5\u7684\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005 -loginRequesterNotEnabledMessage=\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005\u672a\u542f\u7528 -bearerOnlyMessage=Bearer-only \u7684\u5e94\u7528\u5141\u8bb8\u901a\u8fc7\u6d4f\u89c8\u5668\u767b\u5f55 -standardFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u6807\u51c6\u6d41\u7a0b\u3002 -implicitFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u9690\u5f0f\u6d41\u7a0b\u3002 -invalidRedirectUriMessage=\u65e0\u6548\u7684\u91cd\u5b9a\u5411\u94fe\u63a5 -unsupportedNameIdFormatMessage=\u4e0d\u652f\u6301\u7684 nameID \u683c\u5f0f -invalidRequesterMessage=\u65e0\u6548\u7684\u53d1\u8d77\u8005 -registrationNotAllowedMessage=\u4e0d\u5141\u8bb8\u6ce8\u518c -resetCredentialNotAllowedMessage=\u4e0d\u5141\u8bb8\u91cd\u7f6e\u51ed\u636e - -permissionNotApprovedMessage=\u6743\u9650\u88ab\u62d2\u7edd -noRelayStateInResponseMessage=\u8eab\u4efd\u63d0\u4f9b\u8005\u54cd\u5e94\u6ca1\u6709\u4e2d\u7ee7\u72b6\u6001 -insufficientPermissionMessage=\u94fe\u63a5\u8eab\u4efd\u65f6\u6743\u9650\u4e0d\u8db3 -couldNotProceedWithAuthenticationRequestMessage=\u65e0\u6cd5\u7ee7\u7eed\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u63d0\u51fa\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -couldNotObtainTokenMessage=\u65e0\u6cd5\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u83b7\u53d6\u4ee4\u724c -unexpectedErrorRetrievingTokenMessage=\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u68c0\u7d22\u4ee4\u724c\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -unexpectedErrorHandlingResponseMessage=\u5904\u7406\u8eab\u4efd\u63d0\u4f9b\u8005\u7684\u54cd\u5e94\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -identityProviderAuthenticationFailedMessage=\u8eab\u4efd\u9a8c\u8bc1\u5931\u8d25\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1 -identityProviderDifferentUserMessage=\u9a8c\u8bc1\u8eab\u4efd\u4e3a {0}\uff0c\u4f46\u671f\u671b\u9a8c\u8bc1\u8eab\u4efd\u4e3a {1} -couldNotSendAuthenticationRequestMessage=\u65e0\u6cd5\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -unexpectedErrorHandlingRequestMessage=\u5904\u7406\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u7684\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -invalidAccessCodeMessage=\u65e0\u6548\u7684\u8bbf\u95ee\u7801 -sessionNotActiveMessage=\u4f1a\u8bdd\u672a\u6fc0\u6d3b -invalidCodeMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u8bf7\u5c1d\u8bd5\u901a\u8fc7\u60a8\u7684\u5e94\u7528\u91cd\u65b0\u767b\u5f55\u3002 -identityProviderUnexpectedErrorMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -identityProviderNotFoundMessage=\u4f7f\u7528\u6807\u8bc6\u7b26\u65e0\u6cd5\u627e\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 -identityProviderLinkSuccess=\u60a8\u5df2\u6210\u529f\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u8fd4\u56de\u521d\u59cb\u6d4f\u89c8\u5668\u5e76\u7ee7\u7eed\u767b\u5f55\u3002 -staleCodeMessage=\u6b64\u9875\u9762\u5df2\u5931\u6548\u3002\u8bf7\u8fd4\u56de\u60a8\u7684\u5e94\u7528\u5e76\u91cd\u65b0\u767b\u5f55\u3002 -realmSupportsNoCredentialsMessage=\u57df\u4e0d\u652f\u6301\u4efb\u4f55\u51ed\u636e\u7c7b\u578b -identityProviderNotUniqueMessage=\u57df\u652f\u6301\u591a\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u3002\u65e0\u6cd5\u786e\u5b9a\u5e94\u4f7f\u7528\u54ea\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -emailVerifiedMessage=\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u5df2\u9a8c\u8bc1 -staleEmailVerificationLink=\u8be5\u94fe\u63a5\u5df2\u5931\u6548\u3002\u60a8\u53ef\u80fd\u5df2\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002 -identityProviderAlreadyLinkedMessage={0} \u6240\u8fd4\u56de\u7684\u8054\u5408\u8eab\u4efd\u5df2\u94fe\u63a5\u5230\u5176\u4ed6\u7528\u6237 -confirmAccountLinking=\u786e\u8ba4\u5c06\u60a8\u7684\u5e10\u6237\u94fe\u63a5\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 {1} \u7684\u5e10\u6237 {0} -confirmEmailAddressVerification=\u786e\u8ba4\u7535\u5b50\u90ae\u4ef6\u5730\u5740 {0} \u7684\u6709\u6548\u6027 -confirmExecutionOfActions=\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u8fd4\u56de\u5e94\u7528 -missingParameterMessage=\u7f3a\u5c11\u53c2\u6570\uff1a{0} -clientNotFoundMessage=\u65e0\u6cd5\u627e\u5230\u5ba2\u6237 -clientDisabledMessage=\u5ba2\u6237\u5df2\u88ab\u7981\u7528 -invalidParameterMessage=\u65e0\u6548\u7684\u53c2\u6570\uff1a{0} -alreadyLoggedIn=\u60a8\u5df2\u767b\u5f55 -differentUserAuthenticated=\u60a8\u5df2\u5728\u6b64\u4f1a\u8bdd\u4e2d\u4ee5\u4e0d\u540c\u7684\u7528\u6237 ''{0}'' \u767b\u5f55\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -brokerLinkingSessionExpired=\u5df2\u8bf7\u6c42\u4ee3\u7406\u5e10\u6237\u94fe\u63a5\uff0c\u4f46\u5f53\u524d\u4f1a\u8bdd\u5df2\u5931\u6548\u3002 -proceedWithAction=» \u5355\u51fb\u6b64\u5904\u7ee7\u7eed - -requiredAction.CONFIGURE_TOTP=\u914d\u7f6e OTP -requiredAction.terms_and_conditions=\u6761\u6b3e -requiredAction.UPDATE_PASSWORD=\u66f4\u65b0\u5bc6\u7801 -requiredAction.UPDATE_PROFILE=\u66f4\u65b0\u914d\u7f6e\u6587\u4ef6 -requiredAction.VERIFY_EMAIL=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 - -p3pPolicy=CP=\u201c\u8fd9\u4e0d\u662f P3P \u7b56\u7565\uff01\u201d - -doX509Login=\u60a8\u7684\u767b\u5f55\u8eab\u4efd\u5c06\u4e3a\uff1a -clientCertificate=X509 \u5ba2\u6237\u8bc1\u4e66\uff1a -noCertificate=[\u65e0\u8bc1\u4e66] - - -pageNotFound=\u6b64\u9875\u9762\u4e0d\u53ef\u7528 -internalServerError=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898 diff --git a/deps/keycloak/themes/ndear/login/mobile-login.ftl b/deps/keycloak/themes/ndear/login/mobile-login.ftl deleted file mode 100644 index ca8aa7b31..000000000 --- a/deps/keycloak/themes/ndear/login/mobile-login.ftl +++ /dev/null @@ -1,53 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> -

      Login

      - - - diff --git a/deps/keycloak/themes/ndear/login/resources/css/login.css b/deps/keycloak/themes/ndear/login/resources/css/login.css deleted file mode 100644 index 744b9caec..000000000 --- a/deps/keycloak/themes/ndear/login/resources/css/login.css +++ /dev/null @@ -1,191 +0,0 @@ -body, html { - display: flex; - flex-direction: column; - flex: 1; - overflow: hidden; - min-height: 0; - font-size: 14px; - color:rgba(0,0,0,.87); - margin:0; - height: 100%; -} -body { - margin: 0; - -} -.ndear-wrapper { - display: flex; - justify-content: center; - padding-top: 5rem; - background-color: #F6F8FC; - height: 100vh; -} -.ndear-login-wrapper { - width: 40%; -} -.ndear-login-card-wrapper { - background: #FFFFFF; - border: 1px solid #EFEFEF; - padding: 3rem; -} -.login-content { - background-color: #F6F8FC; - background-size:cover; - background-position:center; - height: 100vh; - min-width: 320px; - display:flex; - justify-content:space-between; -} -.login-content .box { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - width: 55%; -} - -.login-content .box .box-container { - width:100%; -} -.login-content .box .logo { - display: block; - margin-left: auto; - margin-right: auto; - margin-top: 30px; -} -.login-content .box .application-name { - width: 270px; - font-family: Muli; - font-size: 24px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 40px; -} -.login-content .box .form { -} - -.login-content .box .login-field { - width: 100px; - letter-spacing: 1px; - border: none; - outline: none; -} -.login-content .box input[type="text"]:focus, .login-content .box input[type="password"]:focus { - outline: none; -} -.login-content .box input[type="text"]:-webkit-autofill, .login-content .box input[type="password"]:-webkit-autofill -{ - box-shadow: 0 0 0px 1000px white inset; -} -.register-link { - color: #443DF6 !important; - font-weight: bolder; - cursor: pointer; -} -.ndear-login-card-wrapper .submit{ - color: #ffffff; - border-style: none; - background: #443DF6; - border-radius: 8px; - width: 100%; - padding: 1rem; - margin-top: 2rem; -} -.login-content .box .visibility { - position: relative; - left: 296px; - top: 20px; - width: 24px; - height: 24px; - opacity: 0.54; - border: none; -} -.login-content .box .copyright { - min-width: 320px; - text-align: center; - font-size: 14px; - opacity: .54; - position: relative; - top: 50px; -} -.message-text { - width: 322px; - height: 22px; - opacity: 0.87; - font-family: Muli; - font-size: 14px; - font-weight: normal; - font-style: normal; - font-stretch: normal; - line-height: 1.3; - letter-spacing: -0.4px; - text-align: left; - color: #b8082a; - border: 0px; - position: relative; - top: 180px; - left: 64px; - display: inline-flex; - align-items: center; -} -.identity-providers { - width: 270px; - font-family: Muli; - font-size: 16px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 20px; -} - -.login-content .box .social-link-style { - width: 320px; - height: 36px; - border-radius: 2px; - background-color: var(--white); - font-family: Muli; - font-size: 14px; - font-weight: bold; - font-style: normal; - font-stretch: normal; - line-height: normal; - letter-spacing: normal; - text-align: center; - color: #00754a; - border-style: solid; - border-color: #00754a; - margin-top: 0px; - margin-left: 30px; - margin-bottom: 10px; -} - -.login-content .box .para { - font-family: Muli; - font-size: 14px; - margin-left: 30px; -} - -@media (max-width: 992px) { - .ndear-login-wrapper { - width: 100%; - } - .login-content { - flex-direction: column-reverse; - justify-content: flex-end; - } - .login-content .box { - width: 100%; - } -} \ No newline at end of file diff --git a/deps/keycloak/themes/ndear/login/resources/css/main.css b/deps/keycloak/themes/ndear/login/resources/css/main.css deleted file mode 100644 index 674e4f1a6..000000000 --- a/deps/keycloak/themes/ndear/login/resources/css/main.css +++ /dev/null @@ -1,116 +0,0 @@ -.navbar { - box-shadow: 0 6px 20px #C1CFD933; -} - -.nav-link { - font-size: 12px; - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.main-img-wrapper { - display: flex; - justify-content: flex-end; - width: 45%; -} - -.main-img { - width: 85%; - height: 70%; -} - -.footer-content { - height: 12vh; - border-top: 1px solid #d3d3d3; - display: flex; - justify-content: space-around; - align-items: center; - -} - -.footer-gov-logo { - width: 25%; - margin: 0 5px; -} - -.footer-link { - color: #040E28; - margin: 0 5px; -} - -.form-title { - font-size: 25px; -} - -.form-subtitle { - font-size: 35px; -} - -.form-content { - padding-left: 9rem; - padding-right: 18rem; -} - -.input-field { - display: flex; - border-radius: 4px; - width: 100%; - border: 1px solid #EFEFEF; - margin-top: 0.5rem; -} -.input-field input { - border: none; - padding: 10px; -} - -.input-wrapper { - display: flex; - justify-content: space-between; -} - -.mobile-prefix, .otp-prefix { - padding: 1px 2px; - margin: 0; -} - -.mobile input { - width: 100% !important; -} - -.login-arrow { - width: 9%; - margin-left: 2rem; -} - -.otp-prefix { - color: #4CA07A; -} - -@media (max-width: 992px) { - - .main-img-wrapper { - width: 100%; - } - .main-img-wrapper img { - height: 90%; - - } - .form-content { - padding: 0 2rem; - } - .form { - display: flex; - flex-direction: column; - justify-content: center; - } - .form-subtitle { - font-size: 25px; - text-align: center; - } - .input-wrapper { - flex-direction: column; - } - .otp { - margin-top: 1rem - } -} \ No newline at end of file diff --git a/deps/keycloak/themes/ndear/login/resources/img/ndearLogo.svg b/deps/keycloak/themes/ndear/login/resources/img/ndearLogo.svg deleted file mode 100644 index d38402ea7..000000000 --- a/deps/keycloak/themes/ndear/login/resources/img/ndearLogo.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/keycloak/themes/ndear/login/template.ftl b/deps/keycloak/themes/ndear/login/template.ftl deleted file mode 100644 index f3d329004..000000000 --- a/deps/keycloak/themes/ndear/login/template.ftl +++ /dev/null @@ -1,67 +0,0 @@ -<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true> - - - - - - - - - - - - - - <#nested "title"> - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - - - - - <#nested "header"> -
      - -
      - - - - diff --git a/deps/keycloak/themes/ndear/login/theme.properties b/deps/keycloak/themes/ndear/login/theme.properties deleted file mode 100644 index 6c40bda79..000000000 --- a/deps/keycloak/themes/ndear/login/theme.properties +++ /dev/null @@ -1,11 +0,0 @@ -parent=keycloak -import=common/keycloak -locales=ca,de,en,es,fr,it,ja,lt,nl,no,pt-BR,ru,sv,zh-CN -styles=css/login.css css/main.css - -kcFeedbackErrorIcon=pficon pficon-error-circle-o -kcFeedbackWarningIcon=pficon pficon-warning-triangle-o -kcFeedbackSuccessIcon=pficon pficon-ok -kcFeedbackInfoIcon=pficon pficon-info - -keycloakLogo=${env.KEYCLOAK_LOGO:NA} diff --git a/deps/keycloak/themes/ndear/login/verify-otp.ftl b/deps/keycloak/themes/ndear/login/verify-otp.ftl deleted file mode 100644 index a068d2849..000000000 --- a/deps/keycloak/themes/ndear/login/verify-otp.ftl +++ /dev/null @@ -1,58 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> -

      Verify with OTP

      - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/error.ftl b/deps/keycloak/themes/sunbird-rc/login/error.ftl deleted file mode 100644 index 5cffcb901..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/error.ftl +++ /dev/null @@ -1,11 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "form"> -
      -

      ${message.summary?no_esc}

      - <#if client?? && client.baseUrl?has_content> -

      ${kcSanitize(msg("backToApplication"))?no_esc}

      - -
      - - \ No newline at end of file diff --git a/deps/keycloak/themes/sunbird-rc/login/login-oauth-grant.ftl b/deps/keycloak/themes/sunbird-rc/login/login-oauth-grant.ftl deleted file mode 100644 index 30b5340de..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/login-oauth-grant.ftl +++ /dev/null @@ -1,41 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout bodyClass="oauth"; section> - <#if section = "header"> - <#if client.name?has_content> - ${msg("oauthGrantTitle",advancedMsg(client.name))} - <#else> - ${msg("oauthGrantTitle",client.clientId)} - - <#elseif section = "form"> -
      -

      ${msg("oauthGrantRequest")}

      -
        - <#if oauth.clientScopesRequested??> - <#list oauth.clientScopesRequested as clientScope> -
      • - ${advancedMsg(clientScope.consentScreenText)} -
      • - - -
      - -
      - -
      -
      -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      -
      - - \ No newline at end of file diff --git a/deps/keycloak/themes/sunbird-rc/login/login-update-password.ftl b/deps/keycloak/themes/sunbird-rc/login/login-update-password.ftl deleted file mode 100644 index f4143ff08..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/login-update-password.ftl +++ /dev/null @@ -1,92 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('password','password-confirm'); section> - <#if section = "header"> - ${msg("updatePasswordTitle")} - <#elseif section = "form"> -
      -

      Update Password

      -
      - - - - \ No newline at end of file diff --git a/deps/keycloak/themes/sunbird-rc/login/login-update-profile.ftl b/deps/keycloak/themes/sunbird-rc/login/login-update-profile.ftl deleted file mode 100644 index 0036e727d..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/login-update-profile.ftl +++ /dev/null @@ -1,121 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','email','firstName','lastName'); section> - <#if section = "header"> - ${msg("loginProfileTitle")} - <#elseif section = "form"> -
      -

      Update Profile

      -
      - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/login.ftl b/deps/keycloak/themes/sunbird-rc/login/login.ftl deleted file mode 100644 index 07738ecb6..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/login.ftl +++ /dev/null @@ -1,123 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> - <#if section = "header"> - ${msg("loginAccountTitle")} - <#elseif section = "form"> -

      Login

      - - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !registrationDisabled??> -
      -
      - ${msg("noAccount")} ${msg("doRegister")} -
      -
      - - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_de.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_de.properties deleted file mode 100644 index 85f429f8e..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_de.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Anmelden -needHelp=Brauchen Sie Hilfe? -selectAlternative=Alternativen Identit\u00e4tsanbieter ausw\u00e4hlen - -doRegister=Registrieren -doCancel=Abbrechen -doSubmit=Absenden -doYes=Ja -doNo=Nein -doContinue=Weiter -doIgnore=Ignorieren -doAccept=Annehmen -doDecline=Ablehnen -doForgotPassword=Passwort vergessen? -doClickHere=Hier klicken -doImpersonate=Identit\u00e4tswechsel -kerberosNotConfigured=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -kerberosNotConfiguredTitle=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -bypassKerberosDetail=Entweder sind Sie nicht bei Kerberos angemeldet oder Ihr Browser ist nicht f\u00fcr die Kerberos-Anmeldung eingerichtet. Klicken Sie auf 'Weiter'. um sich auf andere Weise anzumelden. -kerberosNotSetUp=Sie m\u00fcssen Kerberos einrichten, bevor Sie sich anmelden k\u00f6nnen. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -registerWithTitle=Registrieren mit {0} -registerWithTitleHtml={0} -loginTitle=Anmelden bei {0} -loginTitleHtml={0} -impersonateTitle={0} Identit\u00e4tswechsel -impersonateTitleHtml={0} Identit\u00e4tswechsel -realmChoice=Bereich -unknownUser=Unbekannter Benutzer -loginTotpTitle=Konfiguration von Mobile Authenticator -loginProfileTitle=Benutzerkonto-Angaben aktualisieren -loginTimeout=Sie haben zu lange gebraucht, sich anzumelden. Der Anmeldevorgang beginnt nun von vorne. -oauthGrantTitle=Zugriff gew\u00e4hren -oauthGrantTitleHtml={0} -errorTitle=Es tut uns Leid -errorTitleHtml=Es tut uns Leid -emailVerifyTitle=E-Mail-Adresse best\u00e4tigen -emailForgotTitle=Passwort vergessen? -updatePasswordTitle=Passwort aktualisieren -codeSuccessTitle=Code erfolgreich -codeErrorTitle=Fehlercode: {0} - -termsTitle=Bestimmungen -termsTitleHtml=Bestimmungen -termsText=

      Definition der Bestimmungen ausstehend

      - -recaptchaFailed=Ung\u00fcltiges Recaptcha -recaptchaNotConfigured=Recaptcha ist erforderlich und wurde nicht konfiguriert -consentDenied=Zustimmung verweigert. - -noAccount=Neuer Benutzer? -username=Benutzername -usernameOrEmail=Benutzername oder E-Mail -firstName=Vorname -givenName=Vorname -fullName=Vollst\u00e4ndiger Name -lastName=Nachname -familyName=Nachname -email=E-Mail -password=Passwort -passwordConfirm=Passwort best\u00e4tigen -passwordNew=Neues Passwort -passwordNewConfirm=Best\u00e4tigung des neuen Passworts -rememberMe=Benutzername und Passwort speichern -authenticatorCode=Einmaliger Code -address=Anschrift -street=Stra\u00dfe -locality=Ort -region=Staat, Provinz, Region -postal_code=Postleitzahl -country=Land -emailVerified=E-Mail-Adresse best\u00e4tigt -gssDelegationCredential=GSS-Delegations-Berechtigung - -loginTotpStep1=Installieren Sie eine der folgenden Anwendungen auf Ihrem Smartphone -loginTotpStep2=\u00d6ffnen Sie die Anwendung und scannen Sie den Barcode -loginTotpStep3=Geben Sie den von der Anwendung generierten einmaligen Code ein und klicken Sie 'Absenden', um die Konfiguration abzuschlie\u00dfen. -loginTotpManualStep2=\u00d6ffnen Sie die Anwendung und geben Sie den Schl\u00fcssel ein -loginTotpManualStep3=Verwenden Sie die folgenden Konfigurationswerte, wenn die Anwendung deren Konfiguration zul\u00e4sst -loginTotpUnableToScan=Sie k\u00f6nnen den Barcode nicht scannen? -loginTotpScanBarcode=Barcode scannen? -loginTotpOneTime=Einmaliger Code -loginTotpType=Typ -loginTotpAlgorithm=Algorithmus -loginTotpDigits=Ziffern -loginTotpInterval=Intervall - -loginTotp.totp=Zeitbasiert -loginTotp.hotp=Z\u00e4hlerbasiert - - -oauthGrantRequest=M\u00f6chten Sie diese Zugriffsrechte gew\u00e4hren? -inResource=in - -emailVerifyInstruction1=Eine E-Mail mit Anweisungen zur Best\u00e4tigung Ihrer E-Mail-Adresse wurde an Sie geschickt. -emailVerifyInstruction2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailVerifyInstruction3=um die E-Mail erneut zu schicken - -emailLinkIdpTitle={0} verkn\u00fcpfen -emailLinkIdp1=Eine E-Mail mit Anweisungen zur Verkn\u00fcpfung des {0}-Kontos {1} mit Ihrem {2}-Konto wurde an Sie geschickt. -emailLinkIdp2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailLinkIdp3=um die E-Mail erneut zu schicken -emailLinkIdp4=Wenn Sie die E-Mail-Adresse bereits in einem anderen Browser best\u00e4tigt haben -emailLinkIdp5=um fortzufahren - -backToLogin=« Zur\u00fcck zur Anmeldung - -emailInstruction=Geben Sie Ihren Benutzernamen und Ihre E-Mail-Adresse ein. Wir werden Ihnen dann Anweisungen zum Erstellen eines neuen Passworts schicken. - -copyCodeInstruction=Kopieren Sie diesen Code und f\u00fcgen Sie Ihn in Ihrer Anwendung ein - -pageExpiredTitle=Seite abgelaufen -pageExpiredMsg1=Um den Anmeldevorgang neu zu beginnen -pageExpiredMsg2=Um den Anmeldevorgang fortzusetzen - -personalInfo=Pers\u00f6nliche Informationen: -role_admin=Admin -role_realm-admin=Bereichs-Admin -role_create-realm=Bereich erstellen -role_create-client=Client erstellen -role_view-realm=Bereich anzeigen -role_view-users=Benutzer anzeigen -role_view-applications=Anwendungen anzeigen -role_view-clients=Clients anzeigen -role_view-events=Ereignisse anzeigen -role_view-identity-providers=Identit\u00e4tsanbieter anzeigen -role_manage-realm=Bereich verwalten -role_manage-users=Benutzer verwalten -role_manage-applications=Anwendungen verwalten -role_manage-identity-providers=Identit\u00e4tsanbieter verwalten -role_manage-clients=Clients verwalten -role_manage-events=Ereignisse verwalten -role_view-profile=Profil von {0} anzeigen -role_manage-account=Benutzerkonto verwalten -role_manage-account-links=Kontoverkn\u00fcpfungen verwalten -role_read-token=Token lesen -role_offline-access=Offline-Zugriff -client_account=Konto -client_security-admin-console=Sicherheitsadministratorkonsole -client_admin-cli=Admin-CLI -client_realm-management=Bereichsverwaltung -client_broker=Broker - -invalidUserMessage=Benutzername oder Passwort ung\u00fcltig -invalidEmailMessage=E-Mail-Adresse ung\u00fcltig -accountDisabledMessage=Ihr Benutzerkonto wurde deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -accountTemporarilyDisabledMessage=Ihr Benutzerkonto wurde vor\u00fcbergehend deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten, oder versuchen Sie es sp\u00e4ter noch einmal. -expiredCodeMessage=Ihre Sitzung ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionTokenNoSessionMessage=Ihre Aktion ist abgelaufen -expiredActionTokenSessionExistsMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. - -missingFirstNameMessage=Geben Sie Ihren Vornamen ein -missingLastNameMessage=Geben Sie Ihren Nachnamen eine -missingEmailMessage=Geben Sie Ihre E-Mail-Adresse ein -missingUsernameMessage=Geben Sie Ihren Benutzernamen ein -missingPasswordMessage=Geben Sie Ihr Passwort ein -missingTotpMessage=Geben Sie Ihren Authentifizierungscode ein -notMatchPasswordMessage=Wir k\u00f6nnen Sie nicht anmelden. Die eingegebenen Passw\u00f6rter stimmen nicht \u00fcberein. - -invalidPasswordExistingMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden ung\u00fcltig. -invalidPasswordBlacklistedMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden gesperrt. -invalidPasswordConfirmMessage=Wir k\u00f6nnen Sie nicht anmelden. Das Passwort, das Sie zur Best\u00e4tigung eingegeben haben, stimmt nicht mit dem zuerst eingegebenen Passwort \u00fcberein. -invalidTotpMessage=Wir k\u00f6nnen Sie nicht anmelden. Der eingegebene Authentifizierungscode ist unter Umst\u00e4nden ung\u00fcltig. - -usernameExistsMessage=Benutzername bereits vorhanden -emailExistsMessage=E-Mail-Adresse bereits vorhanden - -federatedIdentityExistsMessage=Benutzer mit {0} {1} gibt es bereits. Melden Sie sich in der Benutzerkontoverwaltung an, um das Benutzerkonto zu verkn\u00fcpfen. - -confirmLinkIdpTitle=Benutzerkonto bereits vorhanden -federatedIdentityConfirmLinkMessage=Benutzer mit {0} {1} gibt es bereits. Wie m\u00f6chten Sie fortfahren? -federatedIdentityConfirmReauthenticateMessage=Als {0} authentifizieren, um das Benutzerkonto mit {1} zu verkn\u00fcpfen -confirmLinkIdpReviewProfile=Profil \u00fcberpr\u00fcfen -confirmLinkIdpContinue=Zu bestehendem Benutzerkonto hinzuf\u00fcgen - -configureTotpMessage=Sie m\u00fcssen Mobile Authenticator einrichten, um Ihr Benutzerkonto zu aktivieren -updateProfileMessage=Sie m\u00fcssen Ihr Benutzerprofil aktualisieren, um Ihr Benutzerkonto zu aktivieren -updatePasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern, um Ihr Benutzerkonto zu aktivieren -resetPasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern -verifyEmailMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto zu aktivieren -linkIdpMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto mit {0} zu verkn\u00fcpfen - -emailSentMessage=Sie werden in K\u00fcrze eine E-Mail mit weiteren Anweisungen erhalten. -emailSendErrorMessage=Wir konnten die E-Mail leider nicht senden. Versuchen Sie es sp\u00e4ter noch einmal. - -accountUpdatedMessage=Ihr Benutzerkonto wurde aktualisiert -accountPasswordUpdatedMessage=Ihr Passwort wurde aktualisiert - -noAccessMessage=Kein Zugriff - -invalidPasswordMinLengthMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Zeichen lang sein -invalidPasswordMinDigitsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Ziffern enthalten -invalidPasswordMinLowerCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Kleinbuchstaben enthalten -invalidPasswordMinUpperCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Gro\u00dfbuchstaben enthalten -invalidPasswordMinSpecialCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Sonderzeichen enthalten -invalidPasswordNotUsernameMessage=Passwort und Benutzername d\u00fcrfen nicht identisch sein -invalidPasswordRegexPatternMessage=Passw\u00f6rter m\u00fcssen dem Regex-Muster entsprechen -invalidPasswordHistoryMessage=Das neue Passwort darf nicht mit einem der {0} letzten Passw\u00f6rter identisch sein -invalidPasswordGenericMessage=Ihr Passwort erf\u00fcllt nicht die Passwort-Anforderungen - -failedToProcessResponseMessage=Antwort konnte nicht verarbeitet werden -httpsRequiredMessage=HTTPS erforderlich -realmNotEnabledMessage=Bereich nicht aktiviert -invalidRequestMessage=Unzul\u00e4ssige Anfrage -failedLogout=Abmeldung fehlgeschlagen -unknownLoginRequesterMessage=Unbekannter Anmeldungs-Anfrager -loginRequesterNotEnabledMessage=Anmeldungs-Anfrager nicht aktiviert -bearerOnlyMessage=Bearer-only-Anwendungen k\u00f6nnen keine Browser-Anmeldung initiieren -standardFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Standardfluss ist f\u00fcr diesen Client deaktiviert. -implicitFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Impliziter Fluss ist f\u00fcr diesen Client deaktiviert. -invalidRedirectUriMessage=Umleitungs-URI ung\u00fcltig -unsupportedNameIdFormatMessage=Nicht unterst\u00fctztes NameIDFormat -invalidRequesterMessage=Ung\u00fcltiger Anfrager -registrationNotAllowedMessage=Registrierung nicht erlaubt -resetCredentialNotAllowedMessage=Zur\u00fccksetzen der Anmeldedaten nicht erlaubt - -permissionNotApprovedMessage=Berechtigung verweigert -noRelayStateInResponseMessage=Kein Relay-Zustand als Antwort von Identit\u00e4tsanbieter -insufficientPermissionMessage=Nicht ausreichend Berechtigungen zum Verkn\u00fcpfen von Identit\u00e4ten -couldNotProceedWithAuthenticationRequestMessage=Authentifizierungsanfrage an Identit\u00e4tsanbieter konnte nicht fortgesetzt werden -couldNotObtainTokenMessage=Token konnte nicht von Identit\u00e4tsanbieter eingeholt werden -unexpectedErrorRetrievingTokenMessage=Unbekannter Fehler beim Abrufen des Token vom Identit\u00e4tsanbieter -unexpectedErrorHandlingResponseMessage=Unbekannter Fehler bei Verarbeitung der Antwort vom Identit\u00e4tsanbieter -identityProviderAuthenticationFailedMessage=Authentifizierung fehlgeschlagen. Authentifizierung bei Identit\u00e4tsanbieter war nicht m\u00f6glich -identityProviderDifferentUserMessage=Als {0} authentifiziert, aber Authentifizierung als {1} erwartet -couldNotSendAuthenticationRequestMessage=Authentifizierungsanfrage konnte nicht an Identit\u00e4tsanbieter gesendet werden -unexpectedErrorHandlingRequestMessage=Unbekannter Fehler bei Verarbeitung der Authentifizierungsanfrage an den Identit\u00e4tsanbieter -invalidAccessCodeMessage=Zugangscode ung\u00fcltig -sessionNotActiveMessage=Sitzung nicht aktiv -invalidCodeMessage=Es ist ein Problem aufgetreten. Melden Sie sich \u00fcber Ihre Anwendung neu an. -identityProviderUnexpectedErrorMessage=Es ist ein Problem aufgetreten. Sie konnten nicht vom Identit\u00e4tsanbieter authentifiziert werden. -identityProviderNotFoundMessage=Kein Identit\u00e4tsanbieter mit der Kennung gefunden -identityProviderLinkSuccess=Sie haben Ihre E-Mail-Adresse erfolgreich best\u00e4tigt. Kehren Sie zu Ihrem urspr\u00fcnglichen Browser-Fenster zur\u00fcck und fahren Sie mit der Anmeldung fort. -staleCodeMessage=Diese Seite ist nicht mehr g\u00fcltig. Kehren Sie zu Ihrer Anwendung zur\u00fcck und melden Sie sich erneut an. -realmSupportsNoCredentialsMessage=Bereich unterst\u00fctzt keine Anmeldedaten-Typen. -identityProviderNotUniqueMessage=Der Bereich unterst\u00fctzt mehrere Identit\u00e4tsanbieter. Es konnte kein eindeutiger Identit\u00e4tsanbieter zum Authentifizieren gew\u00e4hlt werden. -emailVerifiedMessage=Ihre E-Mail-Adresse wurde best\u00e4tigt -staleEmailVerificationLink=Der Link ist nicht mehr g\u00fcltig. Wom\u00f6glich haben Sie Ihre E-Mail-Adresse bereits best\u00e4tigt. -identityProviderAlreadyLinkedMessage=Die von {0} zur\u00fcckgegebene f\u00f6derierte Identit\u00e4t ist bereits mit einem anderen Benutzer verkn\u00fcpft -confirmAccountLinking=Best\u00e4tigung der Verkn\u00fcpfung des Benutzerkontos {0} von Identit\u00e4tsanbieter {1} mit Ihrem Benutzerkonto -confirmEmailAddressVerification=Best\u00e4tigung der E-Mail-Adresse {0} -confirmExecutionOfActions=F\u00fchren Sie die folgende(n) Aktion(en) aus - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Zur\u00fcck zur Anwendung -missingParameterMessage=Fehlender Parameter: {0} -clientNotFoundMessage=Client nicht gefunden -clientDisabledMessage=Client deaktiviert -invalidParameterMessage=Ung\u00fcltiger Parameter: {0} -alreadyLoggedIn=Sie sind bereits angemeldet -differentUserAuthenticated=Sie sind bereits als ein anderer Benutzer ''{0}'' in dieser Sitzung angemeldet. Versuchen Sie noch einmal, sich anzumelden. -brokerLinkingSessionExpired=Verkn\u00fcpfung des Broker-Kontos angefordert; Ihre Sitzung ist allerdings nicht mehr g\u00fcltig. -proceedWithAction=» Klicken Sie hier, um fortzufahren - -requiredAction.CONFIGURE_TOTP=Einmalpasswort konfigurieren -requiredAction.terms_and_conditions=Bestimmungen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse best\u00e4tigen - -p3pPolicy=CP="Das ist keine P3P-Richtlinie!" - -doX509Login=Sie werden angemeldet als: -clientCertificate=X509-Client-Zertifikat: -noCertificate=[Kein Zertifikat] - - -pageNotFound=Diese Seite ist nicht verf\u00fcgbar -internalServerError=Es ist ein Problem aufgetreten diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_en.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_en.properties deleted file mode 100644 index 889f6da26..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_en.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Login -needHelp=Need help? -selectAlternative=Or select an alternative - -doRegister=Register -doCancel=Cancel -doSubmit=Submit -doYes=Yes -doNo=No -doContinue=Continue -doIgnore=Ignore -doAccept=Accept -doDecline=Decline -doForgotPassword=Forgot password? -doClickHere=Click here -doImpersonate=Impersonate -kerberosNotConfigured=Kerberos is not configured. Contact your System Administrator for more information. -kerberosNotConfiguredTitle=Kerberos is not configured. Contact your System Administrator for more information. -bypassKerberosDetail=Either you are not signed in via Kerberos or your browser is not set up for Kerberos sign in. Please click continue to sign in through other means. -kerberosNotSetUp=You need to set up Kerberos before you can sign in. Contact your System Administrator for more information. -registerWithTitle=Register with {0} -registerWithTitleHtml={0} -loginTitle=Sign in to {0} -loginTitleHtml={0} -impersonateTitle={0} Impersonate user -impersonateTitleHtml={0} Impersonate user -realmChoice=Realm -unknownUser=Unknown user -loginTotpTitle=Mobile Authenticator Setup -loginProfileTitle=Update Account Information -loginTimeout=You took too long to sign in. The sign in process is starting from the beginning. -oauthGrantTitle=Grant access -oauthGrantTitleHtml={0} -errorTitle=We're sorry -errorTitleHtml=We're sorry -emailVerifyTitle=Email verification -emailForgotTitle=Forgotten your password? -updatePasswordTitle=Update password -codeSuccessTitle=Success code -codeErrorTitle=Error code: {0} - -termsTitle=Terms and Conditions -termsTitleHtml=Terms and Conditions -termsText=

      Terms and conditions to be defined

      - -recaptchaFailed=Invalid Recaptcha -recaptchaNotConfigured=Recaptcha is required and has not been configured -consentDenied=Consent denied. - -noAccount=New user? -username=Username -usernameOrEmail=Email id / Mobile number -firstName=First name -givenName=Given name -fullName=Full name -lastName=Last name -familyName=Family name -email=Email -password=Password -passwordConfirm=Confirm password -passwordNew=New Password -passwordNewConfirm=New password confirmation -rememberMe=Remember me -authenticatorCode=One-time code -address=Address -street=Street -locality=City or Locality -region=State, Province, or Region -postal_code=Zip or Postal code -country=Country -emailVerified=Email verified -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Install one of the following applications on your mobile -loginTotpStep2=Open the application and scan the barcode -loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup -loginTotpManualStep2=Open the application and enter the key -loginTotpManualStep3=Use the following configuration values if the application allows them to be set -loginTotpUnableToScan=Unable to scan? -loginTotpScanBarcode=Scan barcode? -loginTotpOneTime=One-time code -loginTotpType=Type -loginTotpAlgorithm=Algorithm -loginTotpDigits=Digits -loginTotpInterval=Interval - -loginTotp.totp=Time-based -loginTotp.hotp=Counter-based - - -oauthGrantRequest=Do you grant these access privileges? -inResource=in - -emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you -emailVerifyInstruction2=Haven't received a verification code in your email? -emailVerifyInstruction3=to re-send the email - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you -emailLinkIdp2=Haven't received a verification code in your email? -emailLinkIdp3=to re-send the email -emailLinkIdp4=If you've already verified the email in a different browser -emailLinkIdp5=to continue - -backToLogin=« Back to Sign in - -emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password - -copyCodeInstruction=Copy this code and paste it into your application - -pageExpiredTitle=Page has expired -pageExpiredMsg1=To restart the sign in process -pageExpiredMsg2=To continue the sign in process - -personalInfo=Personal Info: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Create realm -role_create-client=Create client -role_view-realm=View realm -role_view-users=View users -role_view-applications=View applications -role_view-clients=View clients -role_view-events=View events -role_view-identity-providers=View identity providers -role_manage-realm=Manage realm -role_manage-users=Manage users -role_manage-applications=Manage applications -role_manage-identity-providers=Manage identity providers -role_manage-clients=Manage clients -role_manage-events=Manage events -role_view-profile=View profile -role_manage-account=Manage account -role_manage-account-links=Manage account links -role_read-token=Read token -role_offline-access=Offline access -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm Management -client_broker=Broker - -invalidUserMessage=Invalid username or password -invalidEmailMessage=Invalid email address -accountDisabledMessage=Your account is disabled. Contact your System Administrator for more information. -accountTemporarilyDisabledMessage=Your account is temporarily disabled. Contact your System Administrator for more information or try again later. -expiredCodeMessage=Your session has timed out. Try signing in again. -expiredActionMessage=Your action has expired. Try signing in again. -expiredActionTokenNoSessionMessage=Your action has expired -expiredActionTokenSessionExistsMessage=Your action has expired. Try signing in again. - -missingFirstNameMessage=Type your first name -missingLastNameMessage=Type your last name -missingEmailMessage=Type your email address -missingUsernameMessage=Type your username -missingPasswordMessage=Type your password -missingTotpMessage=Type your authenticator code -notMatchPasswordMessage=We're having problems signing you in. The passwords you entered don't match. - -invalidPasswordExistingMessage=We're having problems signing you in. The password you entered may be invalid. -invalidPasswordBlacklistedMessage=We're having problems signing you in. The password you entered may be blacklisted. -invalidPasswordConfirmMessage=We're having problems signing you in. The password confirmation you entered doesn't match. -invalidTotpMessage=We're having problems signing you in. The authenticator code you entered may be invalid. - -usernameExistsMessage=Username already exists -emailExistsMessage=Email already exists - -federatedIdentityExistsMessage=User with {0} {1} already exists. Sign in to Account Management to link the account. - -confirmLinkIdpTitle=Account already exists -federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? -federatedIdentityConfirmReauthenticateMessage=Authenticate as {0} to link your account with {1} -confirmLinkIdpReviewProfile=Review profile -confirmLinkIdpContinue=Add to existing account - -configureTotpMessage=You need to set up Mobile Authenticator to activate your account -updateProfileMessage=You need to update your user profile to activate your account -updatePasswordMessage=You need to change your password to activate your account -resetPasswordMessage=You need to change your password -verifyEmailMessage=You need to verify your email address to activate your account -linkIdpMessage=You need to verify your email address to link your account with {0} - -emailSentMessage=You will receive an email shortly with further instructions -emailSendErrorMessage=We have been unable to send the email. Try again later. - -accountUpdatedMessage=Your account has been updated -accountPasswordUpdatedMessage=Your password has been updated - -noAccessMessage=No access - -invalidPasswordMinLengthMessage=Passwords must have a minimum length of {0} characters -invalidPasswordMinDigitsMessage=Passwords must have a minimum of {0} numbers -invalidPasswordMinLowerCaseCharsMessage=Passwords must have a minimum of {0} lower case characters -invalidPasswordMinUpperCaseCharsMessage=Passworrds must have a minimum of {0} upper case characters -invalidPasswordMinSpecialCharsMessage=Passwords must have a minimum of {0} special characters -invalidPasswordNotUsernameMessage=Your password can't be your username -invalidPasswordRegexPatternMessage=Passwords must match the regex pattern -invalidPasswordHistoryMessage=Passwords must not be equal to any of the last {0} passwords -invalidPasswordGenericMessage=Your password doesn't match the password policy - -failedToProcessResponseMessage=Failed to process response -httpsRequiredMessage=HTTPS required -realmNotEnabledMessage=Realm not enabled -invalidRequestMessage=Invalid request -failedLogout=Logout failed -unknownLoginRequesterMessage=Unknown login requester -loginRequesterNotEnabledMessage=Login requester not enabled -bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login -standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. -implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. -invalidRedirectUriMessage=Invalid redirect uri -unsupportedNameIdFormatMessage=Unsupported NameIDFormat -invalidRequesterMessage=Invalid requester -registrationNotAllowedMessage=Registration not allowed -resetCredentialNotAllowedMessage=Reset Credential not allowed - -permissionNotApprovedMessage=Permission denied -noRelayStateInResponseMessage=No relay state in response from identity provider -insufficientPermissionMessage=Insufficient permissions to link identities -couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider -couldNotObtainTokenMessage=Could not obtain token from identity provider -unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider -unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider -identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider -identityProviderDifferentUserMessage=Authenticated as {0}, but expected to be authenticated as {1} -couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider -unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider -invalidAccessCodeMessage=Invalid access code -sessionNotActiveMessage=Session not active -invalidCodeMessage=We hit a problem. Try signing in again through your application. -identityProviderUnexpectedErrorMessage=We hit a problem. It wasn't possible to authenticate with the identity provider. -identityProviderNotFoundMessage=Could not find an identity provider with the identifier -identityProviderLinkSuccess=You successfully verified your email. Go back to your original browser and continue with the sign in. -staleCodeMessage=This page is no longer valid. Go back to your application and sign in again. -realmSupportsNoCredentialsMessage=Realm does not support any credential type. -identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. -emailVerifiedMessage=Your email address has been verified -staleEmailVerificationLink=The link is no longer valid. You may have already verified your email address. -identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user -confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account -confirmEmailAddressVerification=Confirm validity of e-mail address {0} -confirmExecutionOfActions=Perform the following action(s) - -locale_ca=Catal\u00E0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00F1ol -locale_fr=Fran\u00e7ais -locale_it=Italian -locale_ja=\u65E5\u672C\u8A9E -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00EAs (Brasil) -locale_pt-BR=Portugu\u00EAs (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Back to Application -missingParameterMessage=Missing parameters: {0} -clientNotFoundMessage=Client not found -clientDisabledMessage=Client disabled -invalidParameterMessage=Invalid parameter: {0} -alreadyLoggedIn=You are already signed in -differentUserAuthenticated=You are already signed in as different user '{0}' in this session. Try signing in again. -brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. -proceedWithAction=» Click here to proceed - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email - -p3pPolicy=CP="This is not a P3P policy!" - -doX509Login=You will be signed in as: -clientCertificate=X509 client certificate: -noCertificate=[No Certificate] - - -pageNotFound=This page is not available -internalServerError=We hit a problem diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_es.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_es.properties deleted file mode 100644 index 3a46e9f6c..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_es.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Iniciar sesi\u00f3n -needHelp=\u00bfNecesita ayuda? -selectAlternative=O seleccione otra alternativa - -doRegister=Registrarse -doCancel=Cancelar -doSubmit=Enviar -doYes=S\u00ed -doNo=No -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceptar -doDecline=Rechazar -doForgotPassword=\u00bfHa olvidado su contrase\u00f1a? -doClickHere=Pulse aqu\u00ed -doImpersonate=Suplantar -kerberosNotConfigured=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -kerberosNotConfiguredTitle=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -bypassKerberosDetail=O bien no ha iniciado sesi\u00f3n por medio de Kerberos o su navegador no est\u00e1 configurado para iniciar sesi\u00f3n por Kerberos. Haga clic en Continuar para iniciar sesi\u00f3n por otros medios. -kerberosNotSetUp=Debe configurar Kerberos para poder iniciar sesi\u00f3n. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -registerWithTitle=Registrarse con {0} -registerWithTitleHtml={0} -loginTitle=Iniciar sesi\u00f3n en {0} -loginTitleHtml={0} -impersonateTitle={0}\u00a0Suplantar usuario -impersonateTitleHtml={0} Suplantar usuario -realmChoice=Dominio -unknownUser=Usuario desconocido -loginTotpTitle=Configuraci\u00f3n de Mobile Authenticator -loginProfileTitle=Actualizar informaci\u00f3n de cuenta -loginTimeout=Ha tardado demasiado en iniciar sesi\u00f3n. El proceso de inicio de sesi\u00f3n comenzar\u00e1 desde el principio. -oauthGrantTitle=Conceder acceso -oauthGrantTitleHtml={0} -errorTitle=Lo sentimos -errorTitleHtml=Lo sentimos -emailVerifyTitle=Verificaci\u00f3n de correo electr\u00f3nico -emailForgotTitle=\u00bfHa olvidado su contrase\u00f1a? -updatePasswordTitle=Actualizar contrase\u00f1a -codeSuccessTitle=C\u00f3digo de operaci\u00f3n correcta -codeErrorTitle=C\u00f3digo de error: {0} - -termsTitle=T\u00e9rminos y condiciones -termsTitleHtml=T\u00e9rminos y condiciones -termsText=

      T\u00e9rminos y condiciones por definir

      - -recaptchaFailed=Reconocimiento de texto no v\u00e1lido -recaptchaNotConfigured=El reconocimiento de texto es obligatorio, pero no se ha configurado -consentDenied=Consentimiento denegado. - -noAccount=\u00bfUsuario nuevo? -username=Nombre de usuario -usernameOrEmail=Nombre de usuario o correo electr\u00f3nico -firstName=Nombre -givenName=Nombre de pila -fullName=Nombre completo -lastName=Apellidos -familyName=Apellidos -email=Correo electr\u00f3nico -password=Contrase\u00f1a -passwordConfirm=Confirmar contrase\u00f1a -passwordNew=Nueva contrase\u00f1a -passwordNewConfirm=Confirmaci\u00f3n de nueva contrase\u00f1a -rememberMe=Recordarme -authenticatorCode=C\u00f3digo de verificaci\u00f3n de un solo uso -address=Direcci\u00f3n -street=Calle -locality=Ciudad o municipio -region=Estado, provincia o regi\u00f3n -postal_code=C\u00f3digo postal -country=Pa\u00eds -emailVerified=Correo electr\u00f3nico verificado -gssDelegationCredential=Credenciales de delegaci\u00f3n GSS - -loginTotpStep1=Instale una de las aplicaciones siguientes en su m\u00f3vil -loginTotpStep2=Abra la aplicaci\u00f3n y escanee el c\u00f3digo de barras -loginTotpStep3=Introduzca el c\u00f3digo de un solo uso proporcionado por la aplicaci\u00f3n y haga clic en Enviar para finalizar la configuraci\u00f3n -loginTotpManualStep2=Abra la aplicaci\u00f3n e introduzca la clave -loginTotpManualStep3=Utilice los siguientes valores de configuraci\u00f3n si la aplicaci\u00f3n le permite establecerlos -loginTotpUnableToScan=\u00bfNo puede escanear? -loginTotpScanBarcode=\u00bfEscanear el c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verificaci\u00f3n de un solo uso -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Con duraci\u00f3n definida -loginTotp.hotp=Con contador - - -oauthGrantRequest=\u00bfConcede estos privilegios de acceso? -inResource=en - -emailVerifyInstruction1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para verificar su direcci\u00f3n de correo electr\u00f3nico -emailVerifyInstruction2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailVerifyInstruction3=para reenviar el mensaje de correo electr\u00f3nico - -emailLinkIdpTitle=Enlace {0} -emailLinkIdp1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para enlazar la cuenta {0} {1} con su cuenta {2} -emailLinkIdp2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailLinkIdp3=para reenviar el mensaje de correo electr\u00f3nico -emailLinkIdp4=Si ya ha verificado el correo electr\u00f3nico en otro navegador -emailLinkIdp5=para continuar - -backToLogin=« Volver a Iniciar sesi\u00f3n - -emailInstruction=Introduzca su nombre de usuario o su direcci\u00f3n de correo electr\u00f3nico, y le enviaremos instrucciones para crear una contrase\u00f1a nueva - -copyCodeInstruction=Copie este c\u00f3digo y p\u00e9guelo en su aplicaci\u00f3n - -pageExpiredTitle=La p\u00e1gina ha expirado -pageExpiredMsg1=Para reiniciar el proceso de inicio de sesi\u00f3n -pageExpiredMsg2=Para continuar el proceso de inicio de sesi\u00f3n - -personalInfo=Informaci\u00f3n personal: -role_admin=Administrador -role_realm-admin=Administrador del dominio -role_create-realm=Crear dominio -role_create-client=Crear cliente -role_view-realm=Ver dominio -role_view-users=Ver usuarios -role_view-applications=Ver aplicaciones -role_view-clients=Ver clientes -role_view-events=Ver eventos -role_view-identity-providers=Ver proveedores de identidad -role_manage-realm=Gestionar dominio -role_manage-users=Gestionar usuarios -role_manage-applications=Gestionar aplicaciones -role_manage-identity-providers=Gestionar proveedores de identidad -role_manage-clients=Gestionar clientes -role_manage-events=Gestionar eventos -role_view-profile=Ver perfil -role_manage-account=Gestionar cuenta -role_manage-account-links=Gestionar enlaces de cuenta -role_read-token=Leer token -role_offline-access=Acceso fuera de l\u00ednea -client_account=Cuenta -client_security-admin-console=Consola de administraci\u00f3n de seguridad -client_admin-cli=CLI de administraci\u00f3n -client_realm-management=Gesti\u00f3n de dominios -client_broker=Broker - -invalidUserMessage=Nombre de usuario o contrase\u00f1a no v\u00e1lidos -invalidEmailMessage=Direcci\u00f3n de correo electr\u00f3nico no v\u00e1lida -accountDisabledMessage=Su cuenta est\u00e1 desactivada. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -accountTemporarilyDisabledMessage=Su cuenta est\u00e1 desactivada temporalmente. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n o vuelva a intentarlo m\u00e1s tarde. -expiredCodeMessage=Se ha agotado del tiempo de espera de la sesi\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionTokenNoSessionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n -expiredActionTokenSessionExistsMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. - -missingFirstNameMessage=Escriba su nombre -missingLastNameMessage=Escriba sus apellidos -missingEmailMessage=Escriba su direcci\u00f3n de correo electr\u00f3nico -missingUsernameMessage=Escriba su nombre de usuario -missingPasswordMessage=Escriba su contrase\u00f1a -missingTotpMessage=Escriba su c\u00f3digo de autenticador -notMatchPasswordMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Las contrase\u00f1as introducidas no coinciden. - -invalidPasswordExistingMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida no sea v\u00e1lida. -invalidPasswordBlacklistedMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida est\u00e9 restringida. -invalidPasswordConfirmMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. La contrase\u00f1a de confirmaci\u00f3n introducida no coincide. -invalidTotpMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que el c\u00f3digo de autenticador introducido no sea v\u00e1lido. - -usernameExistsMessage=El nombre de usuario ya existe -emailExistsMessage=La direcci\u00f3n de correo electr\u00f3nico ya existe - -federatedIdentityExistsMessage=Ya existe un usuario con {0} {1}. Inicie sesi\u00f3n en Gesti\u00f3n de cuenta para enlazar la cuenta. - -confirmLinkIdpTitle=La cuenta ya existe -federatedIdentityConfirmLinkMessage=Ya existe un usuario con {0} {1}. \u00bfC\u00f3mo desea continuar? -federatedIdentityConfirmReauthenticateMessage=Autent\u00edquese como {0} para enlazar su cuenta con {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=A\u00f1adir a cuenta existente - -configureTotpMessage=Debe configurar Mobile Authenticator para activar su cuenta -updateProfileMessage=Debe actualizar su perfil de usuario para activar su cuenta -updatePasswordMessage=Debe cambiar su contrase\u00f1a para activar su cuenta -resetPasswordMessage=Debe cambiar su contrase\u00f1a -verifyEmailMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para activar su cuenta -linkIdpMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para enlazar su cuenta con {0} - -emailSentMessage=Recibir\u00e1 un mensaje de correo electr\u00f3nico en breve con m\u00e1s instrucciones -emailSendErrorMessage=No hemos podido enviarle el mensaje de correo electr\u00f3nico. Vuelva a intentarlo m\u00e1s tarde. - -accountUpdatedMessage=Su cuenta se ha actualizado -accountPasswordUpdatedMessage=Su contrase\u00f1a se ha actualizado - -noAccessMessage=Sin acceso - -invalidPasswordMinLengthMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres -invalidPasswordMinDigitsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} n\u00fameros -invalidPasswordMinLowerCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en min\u00fascula -invalidPasswordMinUpperCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en may\u00fascula -invalidPasswordMinSpecialCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres especiales -invalidPasswordNotUsernameMessage=La contrase\u00f1a no puede ser igual que el nombre de usuario -invalidPasswordRegexPatternMessage=Las contrase\u00f1as deben coincidir con el patr\u00f3n regex -invalidPasswordHistoryMessage=Las contrase\u00f1as no pueden ser iguales a ninguna de las {0} \u00faltimas -invalidPasswordGenericMessage=Su contrase\u00f1a no cumple la pol\u00edtica de contrase\u00f1as - -failedToProcessResponseMessage=Fallo al procesar la respuesta -httpsRequiredMessage=HTTPS obligatorio -realmNotEnabledMessage=Dominio no activado -invalidRequestMessage=Solicitud no v\u00e1lida -failedLogout=Fallo al cerrar la sesi\u00f3n -unknownLoginRequesterMessage=Solicitante de inicio de sesi\u00f3n desconocido -loginRequesterNotEnabledMessage=Solicitante de inicio de sesi\u00f3n no activado -bearerOnlyMessage=Las aplicaciones de solo portador (bearer-only) no pueden iniciar sesi\u00f3n en el navegador -standardFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo est\u00e1ndar est\u00e1 desactivado para el cliente. -implicitFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo impl\u00edcito est\u00e1 desactivado para el cliente. -invalidRedirectUriMessage=URI de redirecci\u00f3n no v\u00e1lido -unsupportedNameIdFormatMessage=NameIDFormat no compatible -invalidRequesterMessage=Solicitante no v\u00e1lido -registrationNotAllowedMessage=Registro no permitido -resetCredentialNotAllowedMessage=Credenciales de reinicio no permitidas - -permissionNotApprovedMessage=Permiso denegado -noRelayStateInResponseMessage=Ausencia del estado de retransmisi\u00f3n en la respuesta del proveedor de identidad -insufficientPermissionMessage=Permisos insuficientes para enlazar identidad -couldNotProceedWithAuthenticationRequestMessage=No se pudo proceder con la solicitud de autenticaci\u00f3n al proveedor de identidad -couldNotObtainTokenMessage=No se pudo obtener un token del proveedor de identidad -unexpectedErrorRetrievingTokenMessage=Error inesperado al recuperar token del proveedor de identidad -unexpectedErrorHandlingResponseMessage=Error inesperado al gestionar respuesta del proveedor de identidad -identityProviderAuthenticationFailedMessage=Fallo de autenticaci\u00f3n. No pudo autenticarse con el proveedor de identidad -identityProviderDifferentUserMessage=Autenticado como {0}, pero se esperaba como {1} -couldNotSendAuthenticationRequestMessage=No se pudo enviar la solicitud de autenticaci\u00f3n al proveedor de identidad -unexpectedErrorHandlingRequestMessage=Error inesperado al gestionar la solicitud de autenticaci\u00f3n al proveedor de identidad -invalidAccessCodeMessage=C\u00f3digo de acceso no v\u00e1lido -sessionNotActiveMessage=Sesi\u00f3n inactiva -invalidCodeMessage=Ha surgido un problema. Vuelva a intentar iniciar sesi\u00f3n en su aplicaci\u00f3n. -identityProviderUnexpectedErrorMessage=Ha surgido un problema. No hemos podido autenticarle con el proveedor de identidades. -identityProviderNotFoundMessage=No hemos encontrado un proveedor de identidad con el identificador -identityProviderLinkSuccess=Ha verificado su correo electr\u00f3nico correctamente. Vuelva a su navegador original y contin\u00fae con el inicio de sesi\u00f3n. -staleCodeMessage=Esta p\u00e1gina ya no es v\u00e1lida. Vuelva a su aplicaci\u00f3n e inicie una nueva sesi\u00f3n. -realmSupportsNoCredentialsMessage=El dominio no es compatible con ning\u00fan tipo de credenciales. -identityProviderNotUniqueMessage=El dominio es compatible con varios proveedores de identidad. No se pudo determinar qu\u00e9 proveedor de identidad debe utilizarse para la identificaci\u00f3n. -emailVerifiedMessage=Su direcci\u00f3n de correo electr\u00f3nico se ha verificado -staleEmailVerificationLink=El enlace ya no es v\u00e1lido. Puede que ya haya verificado su direcci\u00f3n de correo electr\u00f3nico. -identityProviderAlreadyLinkedMessage=La identidad federada devuelta por {0} ya est\u00e1 enlazada con otro usuario -confirmAccountLinking=Confirme el enlace de la cuenta {0} del proveedor de identidad {1} con su cuenta -confirmEmailAddressVerification=Confirme la validez de la direcci\u00f3n de correo electr\u00f3nico {0} -confirmExecutionOfActions=Lleve a cabo las siguientes acciones - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Volver a la aplicaci\u00f3n -missingParameterMessage=Par\u00e1metros que faltan: {0} -clientNotFoundMessage=Cliente no encontrado -clientDisabledMessage=Cliente desactivado -invalidParameterMessage=Par\u00e1metro no v\u00e1lido: {0} -alreadyLoggedIn=Ya ha iniciado sesi\u00f3n -differentUserAuthenticated=Ya ha iniciado sesi\u00f3n como un usuario distinto ''{0}'' es esta sesi\u00f3n. Intente volver a iniciar sesi\u00f3n. -brokerLinkingSessionExpired=Enlace de cuenta de broker solicitado, pero la sesi\u00f3n actual ya no es v\u00e1lida. -proceedWithAction=» Haga clic aqu\u00ed para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=T\u00e9rminos y condiciones -requiredAction.UPDATE_PASSWORD=Actualizar contrase\u00f1a -requiredAction.UPDATE_PROFILE=Actualizar perfil -requiredAction.VERIFY_EMAIL=Verificar correo electr\u00f3nico - -p3pPolicy=CP="Esta no es una pol\u00edtica P3P." - -doX509Login=Iniciar\u00e1 sesi\u00f3n como: -clientCertificate=Certificado cliente X509: -noCertificate=[Sin certificado] - - -pageNotFound=Esta p\u00e1gina no est\u00e1 disponible -internalServerError=Ha surgido un problema diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_fr.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_fr.properties deleted file mode 100644 index a1d067e91..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_fr.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Connexion -needHelp=Besoin d'aide ? -selectAlternative=Ou s\u00e9lectionnez une alternative - -doRegister=S'inscrire -doCancel=Annuler -doSubmit=Soumettre -doYes=Oui -doNo=Non -doContinue=Continuer -doIgnore=Ignorer -doAccept=Accepter -doDecline=D\u00e9cliner -doForgotPassword=Mot de passe oubli\u00e9 ? -doClickHere=Cliquer ici -doImpersonate=Emprunter l'identit\u00e9 -kerberosNotConfigured=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -kerberosNotConfiguredTitle=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -bypassKerberosDetail=Vous n'\u00eates pas connect\u00e9 via Kerberos ou votre navigateur n'est pas configur\u00e9 pour l'authentification Kerberos. Cliquez sur Continuer pour vous connecter par un autre moyen. -kerberosNotSetUp=Vous devez configurer Kerberos avant de vous authentifier. Contactez votre administrateur syst\u00e8me pour plus d'informations. -registerWithTitle=M''inscrire avec {0} -registerWithTitleHtml={0} -loginTitle=Me connecter \u00e0 {0} -loginTitleHtml={0} -impersonateTitle={0} Emprunter l''identit\u00e9 de l''utilisateur -impersonateTitleHtml={0} Emprunter l''identit\u00e9 de l''utilisateur -realmChoice=Domaine -unknownUser=Utilisateur inconnu -loginTotpTitle=Configuration de Mobile Authenticator -loginProfileTitle=Mettre \u00e0 jour les informations du compte -loginTimeout=Vous avez mis trop de temps \u00e0 vous connecter. Vous devez recommencer la proc\u00e9dure. -oauthGrantTitle=Donner l'acc\u00e8s -oauthGrantTitleHtml={0} -errorTitle=Nous sommes d\u00e9sol\u00e9s -errorTitleHtml=Nous sommes d\u00e9sol\u00e9s -emailVerifyTitle=V\u00e9rification de l'email -emailForgotTitle=Mot de passe oubli\u00e9 ? -updatePasswordTitle=Mettre \u00e0 jour le mot de passe -codeSuccessTitle=Code de r\u00e9ussite -codeErrorTitle=Code d''erreur : {0} - -termsTitle=Conditions g\u00e9n\u00e9rales -termsTitleHtml=Conditions g\u00e9n\u00e9rales -termsText=

      Conditions g\u00e9n\u00e9rales \u00e0 d\u00e9finir

      - -recaptchaFailed=Recaptcha non valide -recaptchaNotConfigured=Recaptcha est requis et n'a pas \u00e9t\u00e9 configur\u00e9 -consentDenied=Consentement refus\u00e9 - -noAccount=Nouvel utilisateur ? -username=Nom d'utilisateur -usernameOrEmail=Nom d'utilisateur ou email -firstName=Pr\u00e9nom -givenName=Pr\u00e9nom -fullName=Nom complet -lastName=Nom -familyName=Nom de famille -email=Email -password=Mot de passe -passwordConfirm=Confirmer le mot de passe -passwordNew=Nouveau mot de passe -passwordNewConfirm=Confirmation du nouveau mot de passe -rememberMe=M\u00e9moriser -authenticatorCode=Code \u00e0 usage unique -address=Adresse -street=Rue -locality=Ville ou localit\u00e9 -region=\u00c9tat, province ou r\u00e9gion -postal_code=Code postal -country=Pays -emailVerified=Email v\u00e9rifi\u00e9 -gssDelegationCredential=Informations d'identification de d\u00e9l\u00e9gation GSS - -loginTotpStep1=Installez l'une des applications suivantes sur votre mobile -loginTotpStep2=Ouvrez l'application et scannez le code barres -loginTotpStep3=Entrez le code \u00e0 usage unique fourni par l'application et cliquez sur Soumettre pour terminer l'installation -loginTotpManualStep2=Ouvrez l'application et entrez la cl\u00e9 -loginTotpManualStep3=Utilisez les valeurs de configuration suivantes si l'application le permet -loginTotpUnableToScan=Impossible de scanner? -loginTotpScanBarcode=Scanner le code barres ? -loginTotpOneTime=Code \u00e0 usage unique -loginTotpType=Type -loginTotpAlgorithm=Algorithme -loginTotpDigits=Chiffres -loginTotpInterval=Intervalle - -loginTotp.totp=Bas\u00e9 sur l'heure -loginTotp.hotp=Bas\u00e9 sur un compteur - - -oauthGrantRequest=Accordez-vous ces droits d'acc\u00e8s ? -inResource=dans - -emailVerifyInstruction1=Un email avec des instructions pour v\u00e9rifier votre adresse email vous a \u00e9t\u00e9 envoy\u00e9 -emailVerifyInstruction2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email ? -emailVerifyInstruction3=pour envoyer \u00e0 nouveau l'email - -emailLinkIdpTitle=Lier {0} -emailLinkIdp1=Un email avec des instructions pour lier le compte {0} {1} \u00e0 votre compte {2} vous a \u00e9t\u00e9 envoy\u00e9 -emailLinkIdp2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email? -emailLinkIdp3=pour envoyer \u00e0 nouveau l'email -emailLinkIdp4=Si vous avez d\u00e9j\u00e0 v\u00e9rifi\u00e9 l'email dans un autre navigateur -emailLinkIdp5=pour continuer - -backToLogin=« Revenir \u00e0 la page de connexion - -emailInstruction=Entrez votre nom d'utilisateur ou votre adresse email pour recevoir les instructions pour cr\u00e9er un nouveau mot de passe - -copyCodeInstruction=Copiez-collez ce code dans votre application - -pageExpiredTitle=La page a expir\u00e9 -pageExpiredMsg1=Pour recommencer la proc\u00e9dure de connexion -pageExpiredMsg2=Pour continuer la proc\u00e9dure de connexion - -personalInfo=Informations personnelles : -role_admin=Administrateur -role_realm-admin=Administrateur du domaine -role_create-realm=Cr\u00e9er un domaine -role_create-client=Cr\u00e9er un client -role_view-realm=Voir le domaine -role_view-users=Voir les utilisateurs -role_view-applications=Voir les applications -role_view-clients=Voir les clients -role_view-events=Voir les \u00e9v\u00e9nements -role_view-identity-providers=Voir les fournisseurs d'identit\u00e9 -role_manage-realm=G\u00e9rer le domaine -role_manage-users=G\u00e9rer les utilisateurs -role_manage-applications=G\u00e9rer les applications -role_manage-identity-providers=G\u00e9rer les fournisseurs d'identit\u00e9 -role_manage-clients=G\u00e9rer les clients -role_manage-events=G\u00e9rer les \u00e9v\u00e9nements -role_view-profile=Afficher le profil de {0} -role_manage-account=G\u00e9rer le compte -role_manage-account-links=G\u00e9rer les liens de compte -role_read-token=Lire le jeton -role_offline-access=Acc\u00e8s hors connexion -client_account=Compte -client_security-admin-console=Console d'administration de la s\u00e9curit\u00e9 -client_admin-cli=CLI Admin -client_realm-management=Gestion du domaine -client_broker=Agent - -invalidUserMessage=Nom d'utilisateur ou mot de passe non valide -invalidEmailMessage=Adresse email non valide -accountDisabledMessage=Votre compte est d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -accountTemporarilyDisabledMessage=Votre compte est temporairement d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations ou r\u00e9essayez plus tard. -expiredCodeMessage=Votre session a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionTokenNoSessionMessage=L'action a expir\u00e9 -expiredActionTokenSessionExistsMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. - -missingFirstNameMessage=Entrez votre pr\u00e9nom -missingLastNameMessage=Entrez votre nom -missingEmailMessage=Entrez votre adresse email -missingUsernameMessage=Entrez votre nom d'utilisateur -missingPasswordMessage=Entrez votre mot de passe -missingTotpMessage=Entrez votre code d'authentification -notMatchPasswordMessage=\u00c9chec de la connexion. Les mots de passe que vous avez entr\u00e9s sont diff\u00e9rents. - -invalidPasswordExistingMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. -invalidPasswordBlacklistedMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 est peut-\u00eatre sur liste noire. -invalidPasswordConfirmMessage=\u00c9chec de la connexion. Le mot de passe de confirmation que vous avez entr\u00e9 est diff\u00e9rent. -invalidTotpMessage=\u00c9chec de la connexion. Le code d'authentification que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. - -usernameExistsMessage=Le nom d'utilisateur existe d\u00e9j\u00e0 -emailExistsMessage=L'adresse email existe d\u00e9j\u00e0 - -federatedIdentityExistsMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Connectez-vous \u00e0 la gestion de compte pour lier le compte. - -confirmLinkIdpTitle=Le compte existe d\u00e9j\u00e0 -federatedIdentityConfirmLinkMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Comment voulez-vous poursuivre ? -federatedIdentityConfirmReauthenticateMessage=Identifiez-vous en tant que {0} pour lier votre compte \u00e0 {1} -confirmLinkIdpReviewProfile=Revoir le profil -confirmLinkIdpContinue=Ajouter au compte existant - -configureTotpMessage=Vous devez configurer Mobile Authenticator pour activer votre compte -updateProfileMessage=Vous devez mettre \u00e0 jour votre profil utilisateur pour activer votre compte -updatePasswordMessage=Vous devez changer votre mot de passe pour activer votre compte -resetPasswordMessage=Vous devez changer votre mot de passe -verifyEmailMessage=Vous devez v\u00e9rifier votre adresse email pour activer votre compte -linkIdpMessage=Vous devez v\u00e9rifier votre adresse email pour lier votre compte \u00e0 {0} - -emailSentMessage=Vous allez recevoir un email avec d'autres instructions -emailSendErrorMessage=Nous n'avons pas pu envoyer l'email. R\u00e9essayez plus tard. - -accountUpdatedMessage=Votre compte a \u00e9t\u00e9 mis \u00e0 jour -accountPasswordUpdatedMessage=Votre mot de passe a \u00e9t\u00e9 mis \u00e0 jour - -noAccessMessage=Aucun acc\u00e8s - -invalidPasswordMinLengthMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res -invalidPasswordMinDigitsMessage=Les mots de passe doivent comporter au minimum {0} chiffres -invalidPasswordMinLowerCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} minuscules -invalidPasswordMinUpperCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} majuscules -invalidPasswordMinSpecialCharsMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res sp\u00e9ciaux -invalidPasswordNotUsernameMessage=Votre mot de passe ne peut pas \u00eatre votre nom d'utilisateur -invalidPasswordRegexPatternMessage=Les mots de passe doivent \u00eatre conformes au mod\u00e8le regex -invalidPasswordHistoryMessage=Les mots de passe ne peuvent pas \u00eatre identiques aux {0} derniers mots de passe -invalidPasswordGenericMessage=Votre mot de passe n'est pas conforme \u00e0 la strat\u00e9gie de mot de passe - -failedToProcessResponseMessage=Le traitement de la r\u00e9ponse a \u00e9chou\u00e9 -httpsRequiredMessage=HTTPS requis -realmNotEnabledMessage=Domaine inactif -invalidRequestMessage=Requ\u00eate non valide -failedLogout=La d\u00e9connexion a \u00e9chou\u00e9 -unknownLoginRequesterMessage=Demandeur de connexion inconnu -loginRequesterNotEnabledMessage=Demandeur de connexion inactif -bearerOnlyMessage=Les applications Bearer-only ne sont pas autoris\u00e9es \u00e0 initier une connexion dans le navigateur -standardFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux standard est d\u00e9sactiv\u00e9 pour le client. -implicitFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux implicite est d\u00e9sactiv\u00e9 pour le client. -invalidRedirectUriMessage=Uri de redirection non valide -unsupportedNameIdFormatMessage=NameIDFormat non pris en charge -invalidRequesterMessage=Demandeur non valide -registrationNotAllowedMessage=Inscription non autoris\u00e9e -resetCredentialNotAllowedMessage=R\u00e9initialisation des informations d'identification non autoris\u00e9e - -permissionNotApprovedMessage=Autorisation refus\u00e9e -noRelayStateInResponseMessage=Aucun \u00e9tat de relais renvoy\u00e9 par le fournisseur d'identit\u00e9 -insufficientPermissionMessage=Autorisations insuffisantes pour lier les identit\u00e9s -couldNotProceedWithAuthenticationRequestMessage=Impossible de traiter la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -couldNotObtainTokenMessage=Impossible d'obtenir le jeton du fournisseur d'identit\u00e9 -unexpectedErrorRetrievingTokenMessage=Erreur inattendue lors de la r\u00e9cup\u00e9ration du jeton aupr\u00e8s du fournisseur d'identit\u00e9 -unexpectedErrorHandlingResponseMessage=Erreur inattendue lors du traitement de la r\u00e9ponse du fournisseur d'identit\u00e9 -identityProviderAuthenticationFailedMessage=L'authentification a \u00e9chou\u00e9. Authentification avec le fournisseur d'identit\u00e9 impossible -identityProviderDifferentUserMessage=Authentifi\u00e9 en tant que {0}, alors que l''authentification aurait d\u00fb \u00eatre {1} -couldNotSendAuthenticationRequestMessage=Impossible d'envoyer la requ\u00eate d'authentification au fournisseur d'identit\u00e9 -unexpectedErrorHandlingRequestMessage=Erreur inattendue lors du traitement de la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -invalidAccessCodeMessage=Code d'acc\u00e8s non valide -sessionNotActiveMessage=Session inactive -invalidCodeMessage=Une erreur est survenue. Essayez de vous connecter \u00e0 nouveau via votre application. -identityProviderUnexpectedErrorMessage=Une erreur est survenue. Authentification avec le fournisseur d'identit\u00e9 impossible. -identityProviderNotFoundMessage=Aucun fournisseur d'identit\u00e9 n'a \u00e9t\u00e9 trouv\u00e9 avec l'identifiant -identityProviderLinkSuccess=Votre email a bien \u00e9t\u00e9 v\u00e9rifi\u00e9. Revenez \u00e0 votre navigateur d'origine et poursuivez la proc\u00e9dure de connexion. -staleCodeMessage=Cette page n'est plus valide. Revenez \u00e0 votre application et connectez-vous \u00e0 nouveau. -realmSupportsNoCredentialsMessage=Le domaine ne prend en charge aucun type d'informations d'identification. -identityProviderNotUniqueMessage=Le domaine prend en charge plusieurs fournisseurs d'identit\u00e9. Impossible de d\u00e9terminer quel fournisseur d'identit\u00e9 doit \u00eatre utilis\u00e9 pour l'authentification. -emailVerifiedMessage=Votre adresse email a \u00e9t\u00e9 v\u00e9rifi\u00e9e -staleEmailVerificationLink=Le lien n'est plus valide. Vous avez peut-\u00eatre d\u00e9j\u00e0 v\u00e9rifi\u00e9 votre adresse email. -identityProviderAlreadyLinkedMessage=L''identit\u00e9 f\u00e9d\u00e9r\u00e9e renvoy\u00e9e par {0} est d\u00e9j\u00e0 li\u00e9e \u00e0 un autre utilisateur -confirmAccountLinking=Confirmer la liaison du compte {0} du fournisseur d''identit\u00e9 {1} avec votre compte -confirmEmailAddressVerification=Confirmer la validit\u00e9 de l''adresse email {0} -confirmExecutionOfActions=Effectuez la ou les actions suivantes - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Retour \u00e0 l'application -missingParameterMessage=Param\u00e8tres manquants : {0} -clientNotFoundMessage=Client introuvable -clientDisabledMessage=Client d\u00e9sactiv\u00e9 -invalidParameterMessage=Param\u00e8tre non valide : {0} -alreadyLoggedIn=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 -differentUserAuthenticated=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 sous l''identit\u00e9 d''un utilisateur diff\u00e9rent ''{0}'' dans cette session. Essayez de vous connecter \u00e0 nouveau. -brokerLinkingSessionExpired=Liaison au compte de l'agent demand\u00e9e, mais la session en cours n'est plus valide. -proceedWithAction=» Cliquez ici pour continuer - -requiredAction.CONFIGURE_TOTP=Configurer le code \u00e0 usage unique -requiredAction.terms_and_conditions=Conditions g\u00e9n\u00e9rales -requiredAction.UPDATE_PASSWORD=Mettre \u00e0 jour le mot de passe -requiredAction.UPDATE_PROFILE=Mettre \u00e0 jour le profil -requiredAction.VERIFY_EMAIL=V\u00e9rifier l'email - -p3pPolicy=CP="Ce n'est pas une politique P3P !" - -doX509Login=Vous serez connect\u00e9 en tant que : -clientCertificate=Certificat client X509 : -noCertificate=[Pas de certificat] - - -pageNotFound=Cette page n'est pas accessible -internalServerError=Un probl\u00e8me est survenu diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_it.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_it.properties deleted file mode 100644 index e49caaaba..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_it.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Accedi -needHelp=Hai bisogno di aiuto? -selectAlternative=O seleziona un'alternativa - -doRegister=Registrati -doCancel=Annulla -doSubmit=Invia -doYes=S\u00ec -doNo=No -doContinue=Continua -doIgnore=Ignora -doAccept=Accetta -doDecline=Nega -doForgotPassword=Password dimenticata? -doClickHere=Fare clic qui -doImpersonate=Rappresenta -kerberosNotConfigured=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -kerberosNotConfiguredTitle=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -bypassKerberosDetail=L'accesso non \u00e8 stato effettuato tramite Kerberos oppure il browser non \u00e8 configurato per l'accesso a Kerberos. Fare clic su Continua per accedere in altro modo. -kerberosNotSetUp=\u00c8 necessario configurare Kerberos per effettuare l'accesso. Per ulteriori informazioni, contattare l'amministratore di sistema. -registerWithTitle=Registrati con {0} -registerWithTitleHtml={0} -loginTitle=Accedi a {0} -loginTitleHtml={0} -impersonateTitle=Rappresenta utente {0} -impersonateTitleHtml={0} Rappresenta utente -realmChoice=Area di autenticazione -unknownUser=Utente sconosciuto -loginTotpTitle=Configurazione autenticazione mobile -loginProfileTitle=Aggiorna dati account -loginTimeout=Tempo scaduto per l'accesso. La procedura verr\u00e0 riavviata dall'inizio. -oauthGrantTitle=Concedi accesso -oauthGrantTitleHtml={0} -errorTitle=Spiacenti -errorTitleHtml=Spiacenti -emailVerifyTitle=Verifica e-mail -emailForgotTitle=Password dimenticata? -updatePasswordTitle=Aggiorna password -codeSuccessTitle=Codice valido -codeErrorTitle=Codice di errore: {0} - -termsTitle=Termini e condizioni -termsTitleHtml=Termini e condizioni -termsText=

      Termini e condizioni da definire

      - -recaptchaFailed=Recaptcha non valido -recaptchaNotConfigured=Recaptcha obbligatorio e non configurato -consentDenied=Consenso negato. - -noAccount=Nuovo utente? -username=Nome utente -usernameOrEmail=Nome utente o e-mail -firstName=Nome -givenName=Nome -fullName=Nome e cognome -lastName=Cognome -familyName=Cognome -email=E-mail -password=Password -passwordConfirm=Conferma password -passwordNew=Nuova password -passwordNewConfirm=Conferma nuova password -rememberMe=Ricordami -authenticatorCode=Codice One-Time -address=Indirizzo -street=Via -locality=Citt\u00e0 o Localit\u00e0 -region=Stato, Provincia o Regione -postal_code=CAP o codice postale -country=Paese -emailVerified=E-mail verificata -gssDelegationCredential=Credenziali GSS Delegation - -loginTotpStep1=Installare una delle seguenti applicazioni sul cellulare -loginTotpStep2=Aprire l'applicazione ed eseguire la scansione del codice a barre -loginTotpStep3=Inserire il codice One-Time fornito dall'applicazione e premere Invia per completare la configurazione -loginTotpManualStep2=Aprire l'applicazione e inserire il codice -loginTotpManualStep3=Usare i seguenti valori di configurazione se l'applicazione li consente -loginTotpUnableToScan=Impossibile eseguire la scansione? -loginTotpScanBarcode=Eseguire la scansione del codice a barre? -loginTotpOneTime=Codice One-Time -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=Cifre -loginTotpInterval=Intervallo - -loginTotp.totp=In base al tempo -loginTotp.hotp=In base al contattore - - -oauthGrantRequest=Assegnare questi privilegi di accesso? -inResource=in - -emailVerifyInstruction1=\u00c8 stata inviata un'e-mail con le istruzioni per verificare l'indirizzo e-mail -emailVerifyInstruction2=Codice di verifica non ricevuto via e-mail? -emailVerifyInstruction3=per inviare nuovamente l'e-mail - -emailLinkIdpTitle=Collega {0} -emailLinkIdp1=\u00c8 stata inviata un''e-email con le istruzioni per collegare {0} account {1} con l''account {2} -emailLinkIdp2=Codice di verifica non ricevuto via e-mail? -emailLinkIdp3=per inviare nuovamente l'e-mail -emailLinkIdp4=Se l'e-mail \u00e8 gi\u00e0 stata verificata in un altro browser -emailLinkIdp5=per continuare - -backToLogin=« Torna all'accesso - -emailInstruction=Inserire il nome utente o l'indirizzo e-mail per ricevere le istruzioni per creare una nuova password - -copyCodeInstruction=Copiare questo codice e incollarlo nell'applicazione - -pageExpiredTitle=La pagina \u00e8 scaduta -pageExpiredMsg1=Per riavviare la procedura di accesso -pageExpiredMsg2=Per continuare la procedura di accesso - -personalInfo=Informazioni personali: -role_admin=Amministratore -role_realm-admin=Amministratore area di autenticazione -role_create-realm=Crea area di autenticazione -role_create-client=Crea client -role_view-realm=Mostra area di autenticazione -role_view-users=Mostra utenti -role_view-applications=Mostra applicazioni -role_view-clients=Mostra client -role_view-events=Mostra eventi -role_view-identity-providers=Mostra provider di identit\u00e0 -role_manage-realm=Gestisci area di autenticazione -role_manage-users=Gestisci utenti -role_manage-applications=Gestisci applicazioni -role_manage-identity-providers=Gestisci provider di identit\u00e0 -role_manage-clients=Gestisci client -role_manage-events=Gestisci eventi -role_view-profile=Visualizza il profilo di {0} -role_manage-account=Gestisci account -role_manage-account-links=Gestisci link account -role_read-token=Leggi il token -role_offline-access=Accesso offline -client_account=Account -client_security-admin-console=Console di amministrazione di sicurezza -client_admin-cli=Amministratore CLI -client_realm-management=Gestione area di autenticazione -client_broker=Broker - -invalidUserMessage=Nome utente o password non validi -invalidEmailMessage=Indirizzo e-mail non valido -accountDisabledMessage=L'account \u00e8 stato disabilitato. Per ulteriori informazioni, contattare l'amministratore di sistema. -accountTemporarilyDisabledMessage=L'account \u00e8 stato disabilitato temporaneamente. Per ulteriori informazioni, contattare l'amministratore di sistema. -expiredCodeMessage=Sessione scaduta. Provare ad accedere di nuovo. -expiredActionMessage=Azione scaduta. Provare ad accedere di nuovo. -expiredActionTokenNoSessionMessage=Azione scaduta -expiredActionTokenSessionExistsMessage=Azione scaduta. Provare ad accedere di nuovo. - -missingFirstNameMessage=Digitare il nome -missingLastNameMessage=Digitare il cognome -missingEmailMessage=Digitare l'indirizzo e-mail -missingUsernameMessage=Digitare il nome utente -missingPasswordMessage=Digitare la password -missingTotpMessage=Digitare il codice di autenticazione -notMatchPasswordMessage=Problemi di accesso. Le password inserite non corrispondono. - -invalidPasswordExistingMessage=Problemi di accesso. La password inserita potrebbe non essere valida. -invalidPasswordBlacklistedMessage=Problemi di accesso. La password inserita potrebbe essere inclusa in una black list. -invalidPasswordConfirmMessage=Problemi di accesso. La password di conferma inserite non corrisponde. -invalidTotpMessage=Problemi di accesso. Il codice di autenticazione inserito potrebbe non essere valido - -usernameExistsMessage=Nome utente gi\u00e0 esistente -emailExistsMessage=Indirizzo e-mail gi\u00e0 esistente - -federatedIdentityExistsMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Accedere a Gestione account per collegare l''account. - -confirmLinkIdpTitle=Account gi\u00e0 esistente -federatedIdentityConfirmLinkMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Come si desidera continuare? -federatedIdentityConfirmReauthenticateMessage=Eseguire l''autenticazione come {0} per collegare l''account con {1} -confirmLinkIdpReviewProfile=Esamina profilo -confirmLinkIdpContinue=Aggiungi all'account esistente - -configureTotpMessage=\u00c8 necessario configurare Mobile Authenticator per attivare l'account -updateProfileMessage=\u00c8 necessario aggiornare il profilo utente per attivare l'account -updatePasswordMessage=\u00c8 necessario modificare la password per attivare l'account -resetPasswordMessage=\u00c8 necessario modificare la password -verifyEmailMessage=\u00c8 necessario verificare l'indirizzo e-mail per attivare l'account -linkIdpMessage=\u00c8 necessario verificare l''indirizzo e-mail per collegare l''account con {0} - -emailSentMessage=Si ricever\u00e0 a breve un'e-mail con ulteriori istruzioni -emailSendErrorMessage=Non \u00e8 stato possibile inviare l'e-mail. Riprovare pi\u00f9 tardi. - -accountUpdatedMessage=L'account \u00e8 stato aggiornato -accountPasswordUpdatedMessage=La password \u00e8 stata aggiornata - -noAccessMessage=Nessun accesso - -invalidPasswordMinLengthMessage=Le password devono contenere almeno {0} caratteri -invalidPasswordMinDigitsMessage=Le password devono contenere almeno {0} numeri -invalidPasswordMinLowerCaseCharsMessage=Le password devono contenere almeno {0} lettere minuscole -invalidPasswordMinUpperCaseCharsMessage=Le password devono contenere almeno {0} lettere maiuscole -invalidPasswordMinSpecialCharsMessage=Le password devono contenere almeno {0} caratteri speciali -invalidPasswordNotUsernameMessage=La password non pu\u00f2 essere uguale al nome utente -invalidPasswordRegexPatternMessage=La password deve corrispondere al modello regex -invalidPasswordHistoryMessage=Le password non devono essere uguali alle ultime {0} password -invalidPasswordGenericMessage=La password non soddisfa i criteri per le password - -failedToProcessResponseMessage=Elaborazione della risposta non riuscita -httpsRequiredMessage=HTTPS richiesto -realmNotEnabledMessage=Area di autenticazione non abilitata -invalidRequestMessage=Richiesta non valida -failedLogout=Logout non riuscito -unknownLoginRequesterMessage=Richiedente login sconosciuto -loginRequesterNotEnabledMessage=Richiedente login non abilitato -bearerOnlyMessage=Non \u00e8 consentito avviare il login via browser da applicazioni con solo token di connessione -standardFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Standard per response_type specificato \u00e8 disabilitato per il client. -implicitFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Implicit response_type specificato \u00e8 disabilitato per il client. -invalidRedirectUriMessage=URI di reindirizzamento non valido -unsupportedNameIdFormatMessage=NameIDFormat non supportato -invalidRequesterMessage=Richiedente non valido -registrationNotAllowedMessage=Registrazione non consentita -resetCredentialNotAllowedMessage=Reimpostazione credenziali non consentita - -permissionNotApprovedMessage=Autorizzazione negata -noRelayStateInResponseMessage=Nessuno stato di inoltro nella risposta dal provider di identit\u00e0 -insufficientPermissionMessage=Autorizzazioni insufficienti per collegare le identit\u00e0 -couldNotProceedWithAuthenticationRequestMessage=Impossibile procedere con la richiesta di autenticazione presso il provider di identit\u00e0 -couldNotObtainTokenMessage=Impossibile recuperare il token dal provider di identit\u00e0 -unexpectedErrorRetrievingTokenMessage=Errore non previsto durante il recupero del token dal provider di identit\u00e0 -unexpectedErrorHandlingResponseMessage=Errore non previsto durante la gestione della risposta dal provider di identit\u00e0 -identityProviderAuthenticationFailedMessage=Autenticazione non riuscita. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0 -identityProviderDifferentUserMessage=Autenticazione eseguita come {0}; autenticazione prevista come {1} -couldNotSendAuthenticationRequestMessage=Impossibile inviare la richiesta di autenticazione al provider di identit\u00e0 -unexpectedErrorHandlingRequestMessage=Errore non previsto durante la gestione della richiesta di autenticazione presso il provider di identit\u00e0 -invalidAccessCodeMessage=Codice di accesso non valido -sessionNotActiveMessage=Sessione non attiva -invalidCodeMessage=Si \u00e8 verificato un problema. Provare ad accedere di nuovo tramite l'applicazione. -identityProviderUnexpectedErrorMessage=Si \u00e8 verificato un problema. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0. -identityProviderNotFoundMessage=Impossibile trovare un provider di identit\u00e0 con l'ID -identityProviderLinkSuccess=L'indirizzo e-mail \u00e8 stato verificato. Tornare al browser iniziale e continuare con la procedura di accesso. -staleCodeMessage=Questa pagina non \u00e8 pi\u00f9 valida. Tornare all'applicazione e accedere di nuovo. -realmSupportsNoCredentialsMessage=L'area di autenticazione non supporta alcun tipo di credenziale. -identityProviderNotUniqueMessage=L'area di autenticazione supporta pi\u00f9 di un provider di identit\u00e0. Impossibile determinare quale provider di identit\u00e0 utilizzare. -emailVerifiedMessage=L'indirizzo e-mail \u00e8 stato verificato -staleEmailVerificationLink=Il link non \u00e8 pi\u00f9 valido. L'indirizzo e-mail potrebbe essere gi\u00e0 stato verificato. -identityProviderAlreadyLinkedMessage=L''identit\u00e0 federata restituita da {0} \u00e8 gi\u00e0 collegata a un altro utente -confirmAccountLinking=Confermare il collegamento dell''account {0} del provider di identit\u00e0 {1} con il proprio account -confirmEmailAddressVerification=Confermare la validit\u00e0 dell''indirizzo e-mail {0} -confirmExecutionOfActions=Eseguire le azioni seguenti - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Torna all'applicazione -missingParameterMessage=Parametri mancanti: {0} -clientNotFoundMessage=Client non trovato -clientDisabledMessage=Client disabilitato -invalidParameterMessage=Parametro non valido: {0} -alreadyLoggedIn=Accesso gi\u00e0 effettuato -differentUserAuthenticated=Accesso gi\u00e0 effettuato come altro utente ''{0}'' in questa sessione. Provare ad accedere di nuovo. -brokerLinkingSessionExpired=Collegamento account broker richiesto, ma la sessione corrente non \u00e8 pi\u00f9 valida. -proceedWithAction=» Fare clic qui per procedere - -requiredAction.CONFIGURE_TOTP=Configura OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiorna password -requiredAction.UPDATE_PROFILE=Aggiorna profilo -requiredAction.VERIFY_EMAIL=Verifica e-mail - -p3pPolicy=CP="Questo non \u00e8 un criterio P3P!" - -doX509Login=L'accesso verr\u00e0 effettuato come: -clientCertificate=Certificato client X509: -noCertificate=[Nessun certificato] - - -pageNotFound=Questa pagina non \u00e8 disponibile -internalServerError=Si \u00e8 verificato un problema diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_ja.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_ja.properties deleted file mode 100644 index 9c8e054cc..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_ja.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u30b5\u30a4\u30f3\u30a4\u30f3 -needHelp=\u304a\u56f0\u308a\u3067\u3059\u304b? -selectAlternative=\u5225\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u9078\u629e - -doRegister=\u767b\u9332 -doCancel=\u30ad\u30e3\u30f3\u30bb\u30eb -doSubmit=\u9001\u4fe1 -doYes=\u306f\u3044 -doNo=\u3044\u3044\u3048 -doContinue=\u7d9a\u884c -doIgnore=\u7121\u8996 -doAccept=\u540c\u610f -doDecline=\u62d2\u5426 -doForgotPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -doClickHere=\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 -doImpersonate=\u507d\u88c5 -kerberosNotConfigured=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotConfiguredTitle=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -bypassKerberosDetail=Kerberos \u7d4c\u7531\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u304b\u3001\u30d6\u30e9\u30a6\u30b6\u3067 Kerberos \u30b5\u30a4\u30f3\u30a4\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4ed6\u306e\u65b9\u6cd5\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u5834\u5408\u306f\u3001[\u7d9a\u884c] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotSetUp=\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308b\u524d\u306b Kerberos \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -registerWithTitle={0} \u3078\u306e\u767b\u9332 -registerWithTitleHtml={0} -loginTitle={0} \u3078\u306e\u30b5\u30a4\u30f3\u30a4\u30f3 -loginTitleHtml={0} -impersonateTitle={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -impersonateTitleHtml={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -realmChoice=\u30ec\u30eb\u30e0 -unknownUser=\u4e0d\u660e\u306a\u30e6\u30fc\u30b6\u30fc -loginTotpTitle=Mobile Authenticator \u306e\u8a2d\u5b9a -loginProfileTitle=\u30a2\u30ab\u30a6\u30f3\u30c8\u60c5\u5831\u306e\u66f4\u65b0 -loginTimeout=\u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u3059\u304e\u307e\u3057\u305f\u3002\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u6700\u521d\u304b\u3089\u958b\u59cb\u3057\u307e\u3059\u3002 -oauthGrantTitle=\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u8a31\u53ef -oauthGrantTitleHtml={0} -errorTitle=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -errorTitleHtml=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -emailVerifyTitle=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c -emailForgotTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -updatePasswordTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -codeSuccessTitle=\u6210\u529f\u30b3\u30fc\u30c9 -codeErrorTitle=\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9: {0} - -termsTitle=\u5229\u7528\u898f\u7d04 -termsTitleHtml=\u5229\u7528\u898f\u7d04 -termsText=

      \u3053\u3053\u306b\u5229\u7528\u898f\u7d04\u3092\u5165\u529b\u3057\u307e\u3059

      - -recaptchaFailed=\u7121\u52b9\u306a reCAPTCHA -recaptchaNotConfigured=reCAPTCHA \u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -consentDenied=\u540c\u610f\u3092\u62d2\u5426\u3057\u307e\u3057\u305f\u3002 - -noAccount=\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u306e\u5834\u5408 -username=\u30e6\u30fc\u30b6\u30fc\u540d -usernameOrEmail=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -firstName=\u540d -givenName=\u540d -fullName=\u6c0f\u540d -lastName=\u59d3 -familyName=\u59d3 -email=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -password=\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordConfirm=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -passwordNew=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordNewConfirm=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -rememberMe=\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b -authenticatorCode=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -address=\u4f4f\u6240 -street=\u756a\u5730 -locality=\u5e02\u533a\u753a\u6751 -region=\u90fd\u9053\u5e9c\u770c -postal_code=\u90f5\u4fbf\u756a\u53f7 -country=\u56fd -emailVerified=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -gssDelegationCredential=GSS \u4ee3\u884c\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb - -loginTotpStep1=\u6b21\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u3044\u305a\u308c\u304b 1 \u3064\u3092\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u63d0\u4f9b\u3055\u308c\u305f\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u3001[\u9001\u4fe1] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3059\u3002 -loginTotpManualStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30ad\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpManualStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u6b21\u306e\u5024\u306e\u8a2d\u5b9a\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u306e\u5024\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpUnableToScan=\u30b9\u30ad\u30e3\u30f3\u3067\u304d\u306a\u3044\u5834\u5408 -loginTotpScanBarcode=\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u304b? -loginTotpOneTime=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -loginTotpType=\u7a2e\u985e -loginTotpAlgorithm=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u9593\u9694 - -loginTotp.totp=\u6642\u9593 -loginTotp.hotp=\u30ab\u30a6\u30f3\u30bf\u30fc - - -oauthGrantRequest=\u3053\u308c\u3089\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u8a31\u53ef\u3057\u307e\u3059\u304b? -inResource=\u30ea\u30bd\u30fc\u30b9: - -emailVerifyInstruction1=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailVerifyInstruction2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailVerifyInstruction3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b - -emailLinkIdpTitle={0} \u3068\u306e\u30ea\u30f3\u30af -emailLinkIdp1={0} \u30a2\u30ab\u30a6\u30f3\u30c8 {1} \u3092\u3042\u306a\u305f\u306e {2} \u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306e\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailLinkIdp2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailLinkIdp3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b -emailLinkIdp4=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u3092\u5225\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u884c\u3063\u305f\u5834\u5408 -emailLinkIdp5=\u7d9a\u884c\u3059\u308b - -backToLogin=« \u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u623b\u308b - -emailInstruction=\u30e6\u30fc\u30b6\u30fc\u540d\u3068 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u4f5c\u6210\u624b\u9806\u3092\u304a\u9001\u308a\u3057\u307e\u3059 - -copyCodeInstruction=\u3053\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044 - -pageExpiredTitle=\u30da\u30fc\u30b8\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059 -pageExpiredMsg1=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u518d\u958b\u3059\u308b -pageExpiredMsg2=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u884c\u3059\u308b - -personalInfo=\u500b\u4eba\u60c5\u5831: -role_admin=\u7ba1\u7406\u8005 -role_realm-admin=\u30ec\u30eb\u30e0\u7ba1\u7406\u8005 -role_create-realm=\u30ec\u30eb\u30e0\u306e\u4f5c\u6210 -role_create-client=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210 -role_view-realm=\u30ec\u30eb\u30e0\u306e\u8868\u793a -role_view-users=\u30e6\u30fc\u30b6\u30fc\u306e\u8868\u793a -role_view-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8868\u793a -role_view-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8868\u793a -role_view-events=\u30a4\u30d9\u30f3\u30c8\u306e\u8868\u793a -role_view-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u8868\u793a -role_manage-realm=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -role_manage-users=\u30e6\u30fc\u30b6\u30fc\u306e\u7ba1\u7406 -role_manage-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7ba1\u7406 -role_manage-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u7ba1\u7406 -role_manage-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-events=\u30a4\u30d9\u30f3\u30c8\u306e\u7ba1\u7406 -role_view-profile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u8868\u793a -role_manage-account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-account-links=\u30a2\u30ab\u30a6\u30f3\u30c8\u30ea\u30f3\u30af\u306e\u7ba1\u7406 -role_read-token=\u30c8\u30fc\u30af\u30f3\u306e\u8aad\u307f\u53d6\u308a -role_offline-access=\u30aa\u30d5\u30e9\u30a4\u30f3\u30a2\u30af\u30bb\u30b9 -client_account=\u30a2\u30ab\u30a6\u30f3\u30c8 -client_security-admin-console=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb -client_admin-cli=\u7ba1\u7406 CLI -client_realm-management=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -client_broker=\u30d6\u30ed\u30fc\u30ab\u30fc - -invalidUserMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -invalidEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -accountDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -accountTemporarilyDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u4e00\u6642\u7684\u306b\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u8a73\u7d30\u3092\u78ba\u8a8d\u3059\u308b\u304b\u3001\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -expiredCodeMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionTokenNoSessionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f -expiredActionTokenSessionExistsMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 - -missingFirstNameMessage=\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingLastNameMessage=\u59d3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingUsernameMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingTotpMessage=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -notMatchPasswordMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093 - -invalidPasswordExistingMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordBlacklistedMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30d6\u30e9\u30c3\u30af\u30ea\u30b9\u30c8\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordConfirmMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u518d\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6700\u521d\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -invalidTotpMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 - -usernameExistsMessage=\u540c\u3058\u30e6\u30fc\u30b6\u30fc\u540d\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -emailExistsMessage=\u540c\u3058 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 - -federatedIdentityExistsMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002[\u30a2\u30ab\u30a6\u30f3\u30c8\u7ba1\u7406] \u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ea\u30f3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -confirmLinkIdpTitle=\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -federatedIdentityConfirmLinkMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u3069\u306e\u3088\u3046\u306b\u51e6\u7406\u3057\u307e\u3059\u304b? -federatedIdentityConfirmReauthenticateMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {1} \u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306b\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3057\u307e\u3059 -confirmLinkIdpReviewProfile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u78ba\u8a8d -confirmLinkIdpContinue=\u65e2\u5b58\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u8ffd\u52a0\u3059\u308b - -configureTotpMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001Mobile Authenticator \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updateProfileMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updatePasswordMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -resetPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -verifyEmailMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -linkIdpMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {0} \u3068\u30ea\u30f3\u30af\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - -emailSentMessage=\u3057\u3070\u3089\u304f\u3059\u308b\u3068\u3001\u6b21\u306e\u4f5c\u696d\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u304c\u9001\u3089\u308c\u3066\u304d\u307e\u3059 -emailSendErrorMessage=E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3001\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -accountUpdatedMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f -accountPasswordUpdatedMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f - -noAccessMessage=\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u3042\u308a\u307e\u305b\u3093 - -invalidPasswordMinLengthMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f {0} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 -invalidPasswordMinDigitsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u6570\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinLowerCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5c0f\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinUpperCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5927\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinSpecialCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u7279\u6b8a\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordNotUsernameMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -invalidPasswordRegexPatternMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3068\u5408\u81f4\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordHistoryMessage=\u904e\u53bb {0} \u4e16\u4ee3\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u518d\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -invalidPasswordGenericMessage=\u6307\u5b9a\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u5f93\u3063\u3066\u3044\u307e\u305b\u3093 - -failedToProcessResponseMessage=\u5fdc\u7b54\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -httpsRequiredMessage=HTTPS \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -realmNotEnabledMessage=\u30ec\u30eb\u30e0\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -invalidRequestMessage=\u7121\u52b9\u306a\u8981\u6c42\u3067\u3059 -failedLogout=\u30ed\u30b0\u30a2\u30a6\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f -unknownLoginRequesterMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u4e0d\u660e\u3067\u3059 -loginRequesterNotEnabledMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u7121\u52b9\u3067\u3059 -bearerOnlyMessage=bearer-only \u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -standardFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Standard Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -implicitFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Implicit Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -invalidRedirectUriMessage=\u7121\u52b9\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8 URI \u3067\u3059 -unsupportedNameIdFormatMessage=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044 NameIDFormat \u3067\u3059 -invalidRequesterMessage=\u7121\u52b9\u306a\u8981\u6c42\u5143\u3067\u3059 -registrationNotAllowedMessage=\u767b\u9332\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -resetCredentialNotAllowedMessage=\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306e\u30ea\u30bb\u30c3\u30c8\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 - -permissionNotApprovedMessage=\u6a29\u9650\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f -noRelayStateInResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306b RelayState \u304c\u3042\u308a\u307e\u305b\u3093 -insufficientPermissionMessage=\u6a29\u9650\u304c\u4e0d\u5341\u5206\u306a\u305f\u3081\u3001ID \u3092\u30ea\u30f3\u30af\u3067\u304d\u307e\u305b\u3093 -couldNotProceedWithAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -couldNotObtainTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorRetrievingTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -unexpectedErrorHandlingResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -identityProviderAuthenticationFailedMessage=\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderDifferentUserMessage={1} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u308b\u306f\u305a\u3067\u3057\u305f\u304c\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -couldNotSendAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u8a8d\u8a3c\u8981\u6c42\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorHandlingRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u306e\u51e6\u7406\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -invalidAccessCodeMessage=\u7121\u52b9\u306a\u30a2\u30af\u30bb\u30b9\u30b3\u30fc\u30c9\u3067\u3059 -sessionNotActiveMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306f\u3042\u308a\u307e\u305b\u3093 -invalidCodeMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -identityProviderUnexpectedErrorMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3053\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -identityProviderNotFoundMessage=\u3053\u306e ID \u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderLinkSuccess=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f\u3002\u5143\u306e\u30d6\u30e9\u30a6\u30b6\u306b\u623b\u3063\u3066\u3001\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u3051\u3066\u304f\u3060\u3055\u3044\u3002 -staleCodeMessage=\u3053\u306e\u30da\u30fc\u30b8\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u3063\u3066\u3001\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -realmSupportsNoCredentialsMessage=\u30ec\u30eb\u30e0\u306f\u3069\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30bf\u30a4\u30d7\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -identityProviderNotUniqueMessage=\u30ec\u30eb\u30e0\u304c\u8907\u6570\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3069\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u8a8d\u8a3c\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -emailVerifiedMessage=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059 -staleEmailVerificationLink=\u3053\u306e\u30ea\u30f3\u30af\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -identityProviderAlreadyLinkedMessage={0} \u304b\u3089\u8fd4\u3055\u308c\u305f Federated ID \u306f\u3001\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u3059 -confirmAccountLinking=ID \u30d7\u30ed\u30d0\u30a4\u30c0 {1} \u306e\u30a2\u30ab\u30a6\u30f3\u30c8 {0} \u3068\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u306e\u30ea\u30f3\u30af\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmEmailAddressVerification=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 {0} \u306e\u6709\u52b9\u6027\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmExecutionOfActions=\u6b21\u306e\u51e6\u7406\u3092\u5b9f\u884c\u3057\u307e\u3059 - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u308b -missingParameterMessage=\u4e0d\u8db3\u3057\u3066\u3044\u308b\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -clientNotFoundMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -clientDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3057\u305f -invalidParameterMessage=\u7121\u52b9\u306a\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -alreadyLoggedIn=\u65e2\u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059 -differentUserAuthenticated=\u3053\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc ''{0}'' \u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -brokerLinkingSessionExpired=\u30d6\u30ed\u30fc\u30ab\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ea\u30f3\u30af\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u73fe\u5728\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002 -proceedWithAction=» \u7d9a\u884c\u3059\u308b\u306b\u306f\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 - -requiredAction.CONFIGURE_TOTP=OTP \u306e\u8a2d\u5b9a -requiredAction.terms_and_conditions=\u5229\u7528\u898f\u7d04 -requiredAction.UPDATE_PASSWORD=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -requiredAction.UPDATE_PROFILE=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u66f4\u65b0 -requiredAction.VERIFY_EMAIL=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c - -p3pPolicy=CP="\u3053\u308c\u306f P3P \u30dd\u30ea\u30b7\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff01" - -doX509Login=\u6b21\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u307e\u3059: -clientCertificate=X509 \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a3c\u660e\u66f8: -noCertificate=[\u8a3c\u660e\u66f8\u306a\u3057] - - -pageNotFound=\u3053\u306e\u30da\u30fc\u30b8\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 -internalServerError=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_nb.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_nb.properties deleted file mode 100644 index 1fd61ceec..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_nb.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Logg inn -needHelp=Trenger hjelp? -selectAlternative=Eller velg et alternativ - -doRegister=Registrer -doCancel=Avbryt -doSubmit=Send inn -doYes=Ja -doNo=Nei -doContinue=Fortsett -doIgnore=Ignorer -doAccept=Godta -doDecline=Avsl\u00e5 -doForgotPassword=Har du glemt passordet? -doClickHere=Klikk her -doImpersonate=Utgi deg for \u00e5 v\u00e6re en annen bruker -kerberosNotConfigured=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -kerberosNotConfiguredTitle=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -bypassKerberosDetail=Du er enten ikke logget p\u00e5 via Kerberos, eller nettleseren din er ikke konfigurert for Kerberos-p\u00e5logging. Klikk p\u00e5 Fortsett for \u00e5 registrere deg p\u00e5 andre m\u00e5ter. -kerberosNotSetUp=Du m\u00e5 konfigurere Kerberos f\u00f8r du kan logge p\u00e5. Kontakt systemadministratoren din for mer informasjon. -registerWithTitle=Registrer deg med {0} -registerWithTitleHtml={0} -loginTitle=Logg p\u00e5 {0} -loginTitleHtml={0} -impersonateTitle={0} Utgi deg for \u00e5 v\u00e6re bruker -impersonateTitleHtml={0} Utgi deg for \u00e5 v\u00e6re bruker -realmChoice=Sikkerhetsdomene -unknownUser=Ukjent bruker -loginTotpTitle=Konfigurer Mobile Authenticator -loginProfileTitle=Oppdater kontoinformasjon -loginTimeout=Du brukte for lang tid p\u00e5 \u00e5 logge p\u00e5. Registreringsprosessen starter p\u00e5 nytt. -oauthGrantTitle=Gi tilgang -oauthGrantTitleHtml={0} -errorTitle=Vi beklager -errorTitleHtml=Vi beklager -emailVerifyTitle=E-postbekreftelse -emailForgotTitle=Har du glemt passordet? -updatePasswordTitle=Oppdater passord -codeSuccessTitle=Suksesskode -codeErrorTitle=Feilkode: {0} - -termsTitle=Vilk\u00e5r og betingelser -termsTitleHtml=Vilk\u00e5r og betingelser -termsText=

      Vilk\u00e5r og betingelser kommer

      - -recaptchaFailed=Ugyldig bildebekreftelse -recaptchaNotConfigured=Bildebekreftelse er p\u00e5krevd og har ikke blitt konfigurert -consentDenied=Samtykke avsl\u00e5tt. - -noAccount=Ny bruker? -username=Brukernavn -usernameOrEmail=Brukernavn eller e-postadresse -firstName=Fornavn -givenName=Fornavn -fullName=Fullstendig navn -lastName=Etternavn -familyName=Etternavn -email=E-post -password=Passord -passwordConfirm=Bekreft passord -passwordNew=Nytt passord -passwordNewConfirm=Bekreftelse p\u00e5 nytt passord -rememberMe=Husk meg -authenticatorCode=Engangskode -address=Adresse -street=Gate/vei -locality=By eller sted -region=Fylke -postal_code=Postnummer -country=Land -emailVerified=E-postadresse bekreftet -gssDelegationCredential=GSS legitimasjonsdelegering - -loginTotpStep1=Installer en av f\u00f8lgende applikasjoner p\u00e5 mobilen din -loginTotpStep2=\u00c5pne applikasjonen og skann strekkoden -loginTotpStep3=Angi engangskoden som oppgis av applikasjonen, og klikk p\u00e5 Send inn for \u00e5 fullf\u00f8re oppsettet -loginTotpManualStep2=\u00c5pne applikasjonen og angi koden -loginTotpManualStep3=Bruk f\u00f8lgende konfigurasjonsverdier hvis applikasjonen tillater at de stilles inn -loginTotpUnableToScan=F\u00e5r du ikke skannet? -loginTotpScanBarcode=Vil du skanne strekkoden? -loginTotpOneTime=Engangs-verifiseringskode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Sifre -loginTotpInterval=Intervall - -loginTotp.totp=Tidsbasert -loginTotp.hotp=Tellerbasert - - -oauthGrantRequest=Vil du gi disse tilgangsrettighetene? -inResource=i - -emailVerifyInstruction1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 bekrefte e-postadressen din -emailVerifyInstruction2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailVerifyInstruction3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt - -emailLinkIdpTitle=Koble til {0} -emailLinkIdp1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 koble {0}-kontoen {1} til {2}-kontoen din -emailLinkIdp2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailLinkIdp3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt -emailLinkIdp4=Hvis du alt har bekreftet e-posten i en annen nettleser -emailLinkIdp5=for \u00e5 fortsette - -backToLogin=« Tilbake til p\u00e5logging - -emailInstruction=Angi brukernavnet eller e-postadressen din, s\u00e5 sender vi deg instruksjoner om hvordan du oppretter et nytt passord - -copyCodeInstruction=Kopier denne koden og lim den inn i applikasjonen din - -pageExpiredTitle=Siden har utl\u00f8pt -pageExpiredMsg1=For \u00e5 starte p\u00e5loggingsprosessen p\u00e5 nytt -pageExpiredMsg2=For \u00e5 fortsette p\u00e5loggingsprosessen - -personalInfo=Personlig informasjon: -role_admin=Administrator -role_realm-admin=Administrator for sikkerhetsdomene -role_create-realm=Opprett sikkerhetsdomene -role_create-client=Opprett klient -role_view-realm=Se sikkerhetsdomene -role_view-users=Se brukere -role_view-applications=Se applikasjoner -role_view-clients=Se klienter -role_view-events=Se hendelser -role_view-identity-providers=Se identitetsleverand\u00f8rer -role_manage-realm=Administrer sikkerhetsdomene -role_manage-users=Administrer brukere -role_manage-applications=Administrer applikasjoner -role_manage-identity-providers=Administrer identitetsleverand\u00f8rer -role_manage-clients=Administrer klienter -role_manage-events=Administrer hendelser -role_view-profile=Vis {0}s profil -role_manage-account=Administrer konto -role_manage-account-links=Administrer kontolenker -role_read-token=Les token -role_offline-access=Frakoblet tilgang -client_account=Konto -client_security-admin-console=Sikkerthetsadministrasjonskonsoll -client_admin-cli=Administrasjons-CLI -client_realm-management=Sikkerhetsdomene-administrasjon -client_broker=Broker - -invalidUserMessage=Ugyldig brukernavn eller passord -invalidEmailMessage=Ugyldig e-postadresse -accountDisabledMessage=Kontoen din er deaktivert. Kontakt systemadministratoren din for mer informasjon. -accountTemporarilyDisabledMessage=Kontoen din er midlertidig deaktivert. Kontakt systemadministratoren din for mer informasjon, eller pr\u00f8v igjen senere. -expiredCodeMessage=\u00d8kten din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionTokenNoSessionMessage=Handlingen din har utl\u00f8pt -expiredActionTokenSessionExistsMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. - -missingFirstNameMessage=Skriv inn fornavnet ditt -missingLastNameMessage=Skriv inn etternavnet ditt -missingEmailMessage=Skriv inn e-postadressen din -missingUsernameMessage=Skriv inn brukernavnet ditt -missingPasswordMessage=Skriv inn passordet ditt -missingTotpMessage=Skriv inn autentikatorkoden din -notMatchPasswordMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, stemmer ikke overens. - -invalidPasswordExistingMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re ugyldige. -invalidPasswordBlacklistedMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re svartelistet. -invalidPasswordConfirmMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordbekreftelsen du skrev inn, stemmer ikke. -invalidTotpMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Autentikatorkoden du skrev inn, kan v\u00e6re ugyldig. - -usernameExistsMessage=Brukernavnet finnes alt -emailExistsMessage=E-postadressen finnes alt - -federatedIdentityExistsMessage=En bruker med {0} {1} finnes alt. Logg p\u00e5 Kontostyring for \u00e5 koble til kontoen. - -confirmLinkIdpTitle=Kontoen finnes allerede -federatedIdentityConfirmLinkMessage=Bruker med {0} {1} finnes allerede. Hvordan vil du fortsette? -federatedIdentityConfirmReauthenticateMessage=Bekreft at du er {0} for \u00e5 koble din konto sammen med {1} -confirmLinkIdpReviewProfile=Se gjennom profil -confirmLinkIdpContinue=Legg til eksisterende konto - -configureTotpMessage=Du m\u00e5 konfigurere Mobile Authenticator for \u00e5 aktivere kontoen din -updateProfileMessage=Du m\u00e5 oppdatere brukerprofilen din for \u00e5 aktivere kontoen -updatePasswordMessage=Du m\u00e5 endre passordet ditt for \u00e5 aktivere kontoen -resetPasswordMessage=Du m\u00e5 endre passordet -verifyEmailMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 aktivere kontoen -linkIdpMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 koble kontoen din sammen med {0} - -emailSentMessage=Du mottar en e-post om kort tid med ytterligere instruksjoner -emailSendErrorMessage=Vi kunne ikke sende e-posten. Pr\u00f8v igjen senere. - -accountUpdatedMessage=Kontoen din er oppdatert -accountPasswordUpdatedMessage=Passordet ditt er oppdatert - -noAccessMessage=Ingen tilgang - -invalidPasswordMinLengthMessage=Passord m\u00e5 minst best\u00e5 av {0} tegn -invalidPasswordMinDigitsMessage=Passord m\u00e5 minst best\u00e5 av {0} tall -invalidPasswordMinLowerCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} sm\u00e5 bokstaver -invalidPasswordMinUpperCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} store bokstaver -invalidPasswordMinSpecialCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} spesialtegn -invalidPasswordNotUsernameMessage=Passordet kan ikke v\u00e6re det samme som brukernavnet ditt -invalidPasswordRegexPatternMessage=Passord m\u00e5 stemme overens med uttrykksm\u00f8nsteret -invalidPasswordHistoryMessage=Passord m\u00e5 ikke v\u00e6re det samme som noen av de siste {0} passordene -invalidPasswordGenericMessage=Passordet ditt stemmer ikke overens med passordpolicyen - -failedToProcessResponseMessage=Kunne ikke behandle svar -httpsRequiredMessage=HTTPS p\u00e5krevd -realmNotEnabledMessage=Sikkerhetsdomene er ikke aktivert -invalidRequestMessage=Ugyldig foresp\u00f8rsel -failedLogout=Utlogging feilet -unknownLoginRequesterMessage=Ukjent anmoder for p\u00e5logging -loginRequesterNotEnabledMessage=Anmoder for p\u00e5logging er ikke aktivert -bearerOnlyMessage=Bearer-only-applikasjoner har ikke lov til \u00e5 initiere p\u00e5logging via nettleser -standardFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Standard flow er deaktivert for denne klienten. -implicitFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Implicit flow er deaktivert for denne klienten. -invalidRedirectUriMessage=Ugyldig redirect uri -unsupportedNameIdFormatMessage=NameIDFormat er ikke st\u00f8ttet -invalidRequesterMessage=Ugyldig sender av foresp\u00f8rsel -registrationNotAllowedMessage=Registrering er ikke lov -resetCredentialNotAllowedMessage=Tilbakestilling av p\u00e5loggingsdata er ikke lov - -permissionNotApprovedMessage=Ingen tilgang -noRelayStateInResponseMessage=Ingen relay state i svar fra identitetsleverand\u00f8r -insufficientPermissionMessage=Utilstrekkelige tillatelser til \u00e5 koble sammen identiteter -couldNotProceedWithAuthenticationRequestMessage=Kunne ikke fortsette med autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -couldNotObtainTokenMessage=Kunne ikke hente token fra identitetsleverand\u00f8r -unexpectedErrorRetrievingTokenMessage=Uventet feil ved henting av token fra identitetsleverand\u00f8r -unexpectedErrorHandlingResponseMessage=Uventet feil ved h\u00e5ndtering av respons fra identitetsleverand\u00f8r -identityProviderAuthenticationFailedMessage=Autentisering mislyktes. Kunne ikke autentisere med identitetsleverand\u00f8r -identityProviderDifferentUserMessage=Autentisert som {0}, men forventet \u00e5 bli autentisert som {1} -couldNotSendAuthenticationRequestMessage=Kunne ikke sende autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -unexpectedErrorHandlingRequestMessage=Uventet feil ved h\u00e5ndtering av autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -invalidAccessCodeMessage=Ugyldig tilgangskode -sessionNotActiveMessage=\u00d8kten er ikke aktiv -invalidCodeMessage=Vi st\u00f8tte p\u00e5 et problem. Pr\u00f8v \u00e5 logge p\u00e5 igjen gjennom applikasjonen din. -identityProviderUnexpectedErrorMessage=Vi st\u00f8tte p\u00e5 et problem. Det var ikke mulig \u00e5 autentisere med identitetsleverand\u00f8ren. -identityProviderNotFoundMessage=Fant ingen identitetsleverand\u00f8r med identifikatoren -identityProviderLinkSuccess=Du har verifisert e-posten din. G\u00e5 tilbake til den opprinnelige nettleseren din og fortsett med p\u00e5loggingen. -staleCodeMessage=Denne siden er ikke lenger gyldig. G\u00e5 tilbake til applikasjonen din og logg p\u00e5 igjen. -realmSupportsNoCredentialsMessage=Sikkerhetsdomene st\u00f8tter ingen legitimasjonstyper. -identityProviderNotUniqueMessage=Sikkerhetsdomene st\u00f8tter flere identitetsleverand\u00f8rer. Kunne ikke avgj\u00f8re hvilken identitetsleverand\u00f8r som burde brukes for autentisering. -emailVerifiedMessage=E-postadressen din har blitt bekreftet -staleEmailVerificationLink=Lenken er ikke lenger gyldig. Det kan hende at du alt har verifisert e-postadressen din. -identityProviderAlreadyLinkedMessage=Federert identitet returnert av {0}, er allerede koblet til en annen bruker -confirmAccountLinking=Bekreft kobling av kontoen {0} for identitetsleverand\u00f8ren {1} med din konto -confirmEmailAddressVerification=Bekreft gyldigheten av e-postadressen {0} -confirmExecutionOfActions=Utf\u00f8r f\u00f8lgende handling(er) - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Tilbake til applikasjonen -missingParameterMessage=Manglende parametere: {0} -clientNotFoundMessage=Finner ikke klient -clientDisabledMessage=Klient er deaktivert -invalidParameterMessage=Ugyldig parameter: {0} -alreadyLoggedIn=Du er alt logget p\u00e5 -differentUserAuthenticated=Du er alt logget p\u00e5 som en annen bruker, ''{0}'', i denne \u00f8kten. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -brokerLinkingSessionExpired=Forespurt broker-konto kobler til, men gjeldende \u00f8kt er ikke lenger gyldig. -proceedWithAction=» Klikk her for \u00e5 fortsette - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=Vilk\u00e5r og betingelser -requiredAction.UPDATE_PASSWORD=Oppdater passord -requiredAction.UPDATE_PROFILE=Oppdater profil -requiredAction.VERIFY_EMAIL=Bekreft e-post - -p3pPolicy=CP="Dette er ikke en P3P-policy!" - -doX509Login=Du vil bli logget p\u00e5 som: -clientCertificate=X509-klientsertifikat: -noCertificate=[Intet sertifikat] - - -pageNotFound=Denne siden er ikke tilgjengelig -internalServerError=Vi st\u00f8tte p\u00e5 et problem diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_nl.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_nl.properties deleted file mode 100644 index 2ae071a65..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_nl.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Aanmelden -needHelp=Hulp nodig? -selectAlternative=Of selecteer een alternatief - -doRegister=Registreren -doCancel=Annuleren -doSubmit=Verzenden -doYes=Ja -doNo=Nee -doContinue=Doorgaan -doIgnore=Negeren -doAccept=Accepteren -doDecline=Weigeren -doForgotPassword=Wachtwoord vergeten? -doClickHere=Klik hier -doImpersonate=Imiteren -kerberosNotConfigured=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -kerberosNotConfiguredTitle=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -bypassKerberosDetail=U bent niet aangemeld via Kerberos of uw browser is niet ingesteld voor aanmelding via Kerberos. Klik op Doorgaan om u op een andere manier aan te melden. -kerberosNotSetUp=U moet Kerberos instellen voordat u zich kunt aanmelden. Neem contact op met uw systeembeheerder voor meer informatie. -registerWithTitle=Registreren met {0} -registerWithTitleHtml={0} -loginTitle=Aanmelden bij {0} -loginTitleHtml={0} -impersonateTitle={0} Gebruiker imiteren -impersonateTitleHtml={0} Gebruiker imiteren -realmChoice=Realm -unknownUser=Onbekende gebruiker -loginTotpTitle=Mobile Authenticator-instellingen -loginProfileTitle=Accountgegevens bijwerken -loginTimeout=Het aanmelden nam te veel tijd in beslag. Het aanmeldingsproces begint weer van voor af aan. -oauthGrantTitle=Toegang verlenen -oauthGrantTitleHtml={0} -errorTitle=Sorry -errorTitleHtml=Sorry -emailVerifyTitle=Verificatie e-mailadres -emailForgotTitle=Wachtwoord vergeten? -updatePasswordTitle=Wachtwoord bijwerken -codeSuccessTitle=Succescode -codeErrorTitle=Foutcode: {0} - -termsTitle=Voorwaarden -termsTitleHtml=Voorwaarden -termsText=

      Voorwaarden nog niet vastgesteld

      - -recaptchaFailed=Ongeldige Recaptcha -recaptchaNotConfigured=Recaptcha is vereist en is niet geconfigureerd -consentDenied=Toestemming geweigerd. - -noAccount=Nieuwe gebruiker? -username=Gebruikersnaam -usernameOrEmail=Gebruikersnaam of e-mailadres -firstName=Voornaam -givenName=Voornaam -fullName=Volledige naam -lastName=Achternaam -familyName=Achternaam -email=E-mailadres -password=Wachtwoord -passwordConfirm=Wachtwoord bevestigen -passwordNew=Nieuw wachtwoord -passwordNewConfirm=Bevestiging nieuw wachtwoord -rememberMe=Mij onthouden -authenticatorCode=Eenmalige authenticatiecode -address=Adres -street=Straat -locality=Plaats -region=Staat, provincie of regio -postal_code=Postcode -country=Land -emailVerified=E-mailadres geverifieerd -gssDelegationCredential=GSS-delegeringsreferetie - -loginTotpStep1=Installeer een van de volgende applicaties op uw mobiele apparaat -loginTotpStep2=Open de applicatie en scan de streepjescode -loginTotpStep3=Voer de eenmalige code in die door de applicatie is verstrekt en klik op Verzenden om de setup te voltooien -loginTotpManualStep2=Open de applicatie en voer de sleutel in -loginTotpManualStep3=Gebruik de volgende configuratiewaarden als u deze in de applicatie kunt instellen -loginTotpUnableToScan=Scannen niet mogelijk? -loginTotpScanBarcode=Streepjescode scannen? -loginTotpOneTime=Eenmalige authenticatiecode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Cijfers -loginTotpInterval=Interval - -loginTotp.totp=Op tijdbasis -loginTotp.hotp=Op tellerbasis - - -oauthGrantRequest=Wilt u deze toegangsrechten verlenen? -inResource=in - -emailVerifyInstruction1=Er is een e-mail met instructies voor het verifi\u00ebren van uw e-mailadres naar u verzonden -emailVerifyInstruction2=Geen verificatiecode via e-mail ontvangen? -emailVerifyInstruction3=om de e-mail opnieuw te verzenden - -emailLinkIdpTitle=Koppeling {0} -emailLinkIdp1=Er is een e-mail met instructies voor het koppelen van {0} account {1} met uw {2} account naar u verzonden -emailLinkIdp2=Geen verificatiecode via e-mail ontvangen? -emailLinkIdp3=om de e-mail opnieuw te verzenden -emailLinkIdp4=Als u het e-mailadres al in een andere browser hebt geverifieerd -emailLinkIdp5=om door te gaan - -backToLogin=« Terug naar Aanmelden - -emailInstruction=Voer uw gebruikersnaam of e-mailadres in, wij sturen u dan de instructies voor het maken van een nieuw wachtwoord - -copyCodeInstruction=Kopieer deze code en plak deze in uw toepassing - -pageExpiredTitle=Pagina is verlopen -pageExpiredMsg1=Het aanmeldingsproces opnieuw starten -pageExpiredMsg2=Doorgaan met het aanmeldingsproces - -personalInfo=Persoonlijke gegevens: -role_admin=Beheerder -role_realm-admin=Realm-beheerder -role_create-realm=Realm maken -role_create-client=Client maken -role_view-realm=Realm weergeven -role_view-users=Gebruikers weergeven -role_view-applications=Toepassingen weergeven -role_view-clients=Clients weergeven -role_view-events=Gebeurtenissen weergeven -role_view-identity-providers=Id-providers weergeven -role_manage-realm=Realm beheren -role_manage-users=Gebruikers beheren -role_manage-applications=Applicaties beheren -role_manage-identity-providers=Id-providers beheren -role_manage-clients=Clients beheren -role_manage-events=Gebeurtenissen beheren -role_view-profile=Profiel weergeven -role_manage-account=Account beheren -role_manage-account-links=Accountkoppelingen beheren -role_read-token=Token lezen -role_offline-access=Offlinetoegang -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm-beheer -client_broker=Broker - -invalidUserMessage=Ongeldige gebruikersnaam of ongeldig wachtwoord -invalidEmailMessage=Ongeldig e-mailadres -accountDisabledMessage=Uw account is uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie. -accountTemporarilyDisabledMessage=Uw account is tijdelijk uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie of probeer het later opnieuw. -expiredCodeMessage=Er is een time-out van de sessie opgetreden. Meld u opnieuw aan. -expiredActionMessage=Uw actie is verlopen. Meld u opnieuw aan. -expiredActionTokenNoSessionMessage=Uw actie is verlopen -expiredActionTokenSessionExistsMessage=Uw actie is verlopen. Meld u opnieuw aan. - -missingFirstNameMessage=Voer uw voornaam in -missingLastNameMessage=Voer uw achternaam in -missingEmailMessage=Voer uw e-mailadres in -missingUsernameMessage=Voer uw gebruikersnaam in -missingPasswordMessage=Voer uw wachtwoord in -missingTotpMessage=Voer uw authenticatiecode in -notMatchPasswordMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde wachtwoorden komen niet overeen. - -invalidPasswordExistingMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord is mogelijk ongeldig. -invalidPasswordBlacklistedMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord staat mogelijk op de zwarte lijst. -invalidPasswordConfirmMessage=Er is een probleem opgetreden bij het aanmelden. Het ter bevestiging ingevoerde wachtwoord komt niet overeen. -invalidTotpMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde authenticatiecode is mogelijk ongeldig. - -usernameExistsMessage=Gebruikersnaam bestaat al -emailExistsMessage=E-mailadres bestaat al - -federatedIdentityExistsMessage=Er bestaat al een gebruiker met {0} {1}. Meld u aan bij Accountbeheer om het account te koppelen. - -confirmLinkIdpTitle=Account bestaat al -federatedIdentityConfirmLinkMessage=Er bestaat al een gebruiker met {0} {1}. Hoe wilt u doorgaan? -federatedIdentityConfirmReauthenticateMessage=Authenticeer als {0} om uw account te koppelen met {1} -confirmLinkIdpReviewProfile=Profiel controleren -confirmLinkIdpContinue=Toevoegen aan bestaand account - -configureTotpMessage=U moet Mobile Authenticator instellen om uw account te activeren -updateProfileMessage=U moet uw gebruikersprofiel bijwerken om uw account te activeren -updatePasswordMessage=U moet uw wachtwoord wijzigen om uw account te activeren -resetPasswordMessage=U moet uw wachtwoord wijzigen -verifyEmailMessage=U moet uw e-mailadres verifi\u00ebren om uw account te activeren -linkIdpMessage=U moet uw e-mailadres verifi\u00ebren om uw account te koppelen met {0} - -emailSentMessage=U ontvangt dadelijk een e-mailbericht met verdere instructies -emailSendErrorMessage=De e-mail kon niet worden verzonden. Probeer het later opnieuw. - -accountUpdatedMessage=Uw account is bijgewerkt -accountPasswordUpdatedMessage=Uw wachtwoord is bijgewerkt - -noAccessMessage=Geen toegang - -invalidPasswordMinLengthMessage=Wachtwoorden moeten een minimale lengte hebben van {0} tekens -invalidPasswordMinDigitsMessage=Wachtwoorden moeten minimaal {0} cijfers bevatten -invalidPasswordMinLowerCaseCharsMessage=Wachtwoorden moeten minimaal {0} kleine letters bevatten -invalidPasswordMinUpperCaseCharsMessage=Wachtwoorden moeten minimaal {0} hoofdletters bevatten -invalidPasswordMinSpecialCharsMessage=Wachtwoorden moeten minimaal {0} speciale tekens bevatten -invalidPasswordNotUsernameMessage=Uw wachtwoord mag niet hetzelfde zijn als uw gebruikersnaam -invalidPasswordRegexPatternMessage=Wachtwoorden moeten overeenkomen met het regex-patroon -invalidPasswordHistoryMessage=Wachtwoorden mogen niet hetzelfde zijn als een van de laatste {0} wachtwoorden -invalidPasswordGenericMessage=Uw wachtwoord komt niet overeen met het wachtwoordbeleid - -failedToProcessResponseMessage=Verwerken van respons mislukt -httpsRequiredMessage=HTTPS vereist -realmNotEnabledMessage=Realm niet ingeschakeld -invalidRequestMessage=Ongeldige aanvraag -failedLogout=Afmelden mislukt -unknownLoginRequesterMessage=Onbekende aanmeldingsaanvrager -loginRequesterNotEnabledMessage=Aanmeldingsaanvrager niet ingeschakeld -bearerOnlyMessage=Bearer-only applicaties mogen geen browseraanmelding initi\u00ebren -standardFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Standaard stroom is uitgeschakeld voor de client. -implicitFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Impliciete stroom is uitgeschakeld voor de client. -invalidRedirectUriMessage=Ongeldige omleidings-URI -unsupportedNameIdFormatMessage=Niet-ondersteunde NameIDFormat -invalidRequesterMessage=Ongeldige aanvrager -registrationNotAllowedMessage=Registratie niet toegestaan -resetCredentialNotAllowedMessage=Opnieuw instellen van referentie niet toegestaan - -permissionNotApprovedMessage=Machtiging geweigerd -noRelayStateInResponseMessage=Geen relaystatus in respons van id-provider -insufficientPermissionMessage=Onvoldoende machtigingen voor het koppelen van id's -couldNotProceedWithAuthenticationRequestMessage=Kon authenticatieaanvraag aan id-provider niet voortzetten -couldNotObtainTokenMessage=Kan geen token verkrijgen van id-provider -unexpectedErrorRetrievingTokenMessage=Onverwachte fout bij ophalen van token bij id-provider -unexpectedErrorHandlingResponseMessage=Onverwachte fout bij verwerken van respons van id-provider -identityProviderAuthenticationFailedMessage=Authenticatie mislukt. Authenticatie met id-provider niet mogelijk -identityProviderDifferentUserMessage=U bent geauthenticeerd als {0}, maar verwacht werd dat u als {1} zou zijn geauthenticeerd -couldNotSendAuthenticationRequestMessage=Kan authenticatieaanvraag niet verzenden naar id-provider -unexpectedErrorHandlingRequestMessage=Onverwachte fout bij verwerken van authenticatieaanvraag naar id-provider -invalidAccessCodeMessage=Ongeldige toegangscode -sessionNotActiveMessage=Sessie niet actief -invalidCodeMessage=Er is een probleem opgetreden. Meld u opnieuw aan via uw applicatie. -identityProviderUnexpectedErrorMessage=Er is een probleem opgetreden. Authenticatie met de id-provider was niet mogelijk. -identityProviderNotFoundMessage=Kan geen id-provider vinden met de id -identityProviderLinkSuccess=Uw e-mailadres is geverifieerd. Ga terug naar uw originele browser en ga verder met de aanmelding. -staleCodeMessage=Deze pagina is verlopen. Ga terug naar uw applicatie en meld u opnieuw aan. -realmSupportsNoCredentialsMessage=Realm ondersteunt geen enkel type referentie. -identityProviderNotUniqueMessage=Realm ondersteunt meerdere id-providers. Kan niet bepalen welke id-provider moet worden gebruikt voor de authenticatie. -emailVerifiedMessage=Uw e-mailadres is geverifieerd -staleEmailVerificationLink=De koppeling is niet langer geldig. U hebt uw e-mailadres mogelijk al geverifieerd. -identityProviderAlreadyLinkedMessage=De door {0} geretourneerde federatieve id is al aan een andere gebruiker gekoppeld -confirmAccountLinking=Bevestig het koppelen van het account {0} van id-provider {1} met uw account -confirmEmailAddressVerification=Bevestig de geldigheid van e-mailadres {0} -confirmExecutionOfActions=Voer de volgende actie(s) uit - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Terug naar applicatie -missingParameterMessage=Ontbrekende parameters: {0} -clientNotFoundMessage=Client niet gevonden -clientDisabledMessage=Client uitgeschakeld -invalidParameterMessage=Ongeldige parameter: {0} -alreadyLoggedIn=U bent al aangemeld -differentUserAuthenticated=U bent al geauthenticeerd als een andere gebruiker ''{0}'' in deze sessie. Probeer u opnieuw aan te melden. -brokerLinkingSessionExpired=Broker-accountkoppeling aangevraagd, maar huidige sessie is niet meer geldig. -proceedWithAction=» Klik hier om door te gaan - -requiredAction.CONFIGURE_TOTP=OTP configureren -requiredAction.terms_and_conditions=Voorwaarden -requiredAction.UPDATE_PASSWORD=Wachtwoord bijwerken -requiredAction.UPDATE_PROFILE=Profiel bijwerken -requiredAction.VERIFY_EMAIL=E-mailadres verifi\u00ebren - -p3pPolicy=CP="Dit is geen P3P-beleid!" - -doX509Login=U wordt aangemeld als: -clientCertificate=X509-clientcertificaat: -noCertificate=[Geen certificaat] - - -pageNotFound=Deze pagina is niet beschikbaar -internalServerError=Er is een probleem opgetreden diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_pt_BR.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_pt_BR.properties deleted file mode 100644 index 37f43f8e2..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_pt_BR.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Entrar -needHelp=Precisa de ajuda? -selectAlternative=Ou selecione outra alternativa - -doRegister=Registrar -doCancel=Cancelar -doSubmit=Enviar -doYes=Sim -doNo=N\u00e3o -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceitar -doDecline=Rejeitar -doForgotPassword=Esqueceu sua senha? -doClickHere=Clique aqui -doImpersonate=Personificar -kerberosNotConfigured=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -kerberosNotConfiguredTitle=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -bypassKerberosDetail=Voc\u00ea n\u00e3o entrou via Kerberos ou seu navegador n\u00e3o est\u00e1 configurado para a autentica\u00e7\u00e3o do Kerberos. Clique em Continuar para entrar por outros meios. -kerberosNotSetUp=\u00c9 necess\u00e1rio configurar o Kerberos antes de entrar. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -registerWithTitle=Registrar com {0} -registerWithTitleHtml={0} -loginTitle=Entrar no {0} -loginTitleHtml={0} -impersonateTitle={0} Personificar usu\u00e1rio -impersonateTitleHtml={0} Personificar usu\u00e1rio -realmChoice=Realm -unknownUser=Usu\u00e1rio desconhecido -loginTotpTitle=Configura\u00e7\u00e3o do Mobile Authenticator -loginProfileTitle=Atualizar informa\u00e7\u00f5es da conta -loginTimeout=Voc\u00ea demorou muito para entrar. O processo ser\u00e1 reiniciado. -oauthGrantTitle=Conceder acesso -oauthGrantTitleHtml={0} -errorTitle=Pedimos desculpas -errorTitleHtml=Pedimos desculpas -emailVerifyTitle=Verifica\u00e7\u00e3o de email -emailForgotTitle=Esqueceu sua senha? -updatePasswordTitle=Atualizar senha -codeSuccessTitle=C\u00f3digo de sucesso -codeErrorTitle=C\u00f3digo de erro: {0} - -termsTitle=Termos e Condi\u00e7\u00f5es -termsTitleHtml=Termos e Condi\u00e7\u00f5es -termsText=

      Termos e Condi\u00e7\u00f5es a serem definidos

      - -recaptchaFailed=Recaptcha inv\u00e1lido -recaptchaNotConfigured=O recaptcha \u00e9 obrigat\u00f3rio e n\u00e3o est\u00e1 configurado -consentDenied=Consentimento negado. - -noAccount=Novo usu\u00e1rio? -username=Nome de usu\u00e1rio -usernameOrEmail=Nome de usu\u00e1rio ou email -firstName=Nome -givenName=Primeiro nome -fullName=Nome completo -lastName=Sobrenome -familyName=Sobrenome -email=Email -password=Senha -passwordConfirm=Confirme a senha -passwordNew=Nova senha -passwordNewConfirm=Confirma\u00e7\u00e3o de nova senha -rememberMe=Lembrar-me -authenticatorCode=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -address=Endere\u00e7o -street=Logradouro -locality=Cidade ou localidade -region=Estado -postal_code=CEP -country=Pa\u00eds -emailVerified=Email verificado -gssDelegationCredential=Credencial de delega\u00e7\u00e3o GSS - -loginTotpStep1=Instale um dos seguintes aplicativos em seu dispositivo m\u00f3vel -loginTotpStep2=Abra o aplicativo e digitalize o c\u00f3digo de barras -loginTotpStep3=Insira o c\u00f3digo de verifica\u00e7\u00e3o \u00fanico fornecido pelo aplicativo e clique em Enviar para finalizar a configura\u00e7\u00e3o -loginTotpManualStep2=Abra o aplicativo e insira a chave -loginTotpManualStep3=Use os valores a seguir caso o aplicativo permita que eles sejam definidos -loginTotpUnableToScan=N\u00e3o foi poss\u00edvel digitalizar? -loginTotpScanBarcode=Digitalizar c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -loginTotpType=Tipo -loginTotpAlgorithm=Algor\u00edtimo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Baseado em tempo -loginTotp.hotp=Baseado em contador - - -oauthGrantRequest=Deseja conceder esses privil\u00e9gios de acesso? -inResource=em - -emailVerifyInstruction1=Enviamos um email com instru\u00e7\u00f5es para a verifica\u00e7\u00e3o do seu endere\u00e7o de email -emailVerifyInstruction2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailVerifyInstruction3=para reenviar o email - -emailLinkIdpTitle=Vincular {0} -emailLinkIdp1=Foi enviado um email com instru\u00e7\u00f5es para vincular a conta {0} {1} com a sua conta {2} -emailLinkIdp2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailLinkIdp3=para reenviar o email -emailLinkIdp4=Se voc\u00ea j\u00e1 verificou o email em outro navegador -emailLinkIdp5=para continuar - -backToLogin=« Voltar para o Login - -emailInstruction=Digite seu nome de usu\u00e1rio ou endere\u00e7o de email e enviaremos instru\u00e7\u00f5es de como criar uma nova senha - -copyCodeInstruction=Copie este c\u00f3digo e cole-o no aplicativo - -pageExpiredTitle=A p\u00e1gina expirou -pageExpiredMsg1=Para reiniciar o processo de login -pageExpiredMsg2=Para continuar o processo de login - -personalInfo=Informa\u00e7\u00f5es Pessoais: -role_admin=Admininstrador -role_realm-admin=Administrador do realm -role_create-realm=Criar realm -role_create-client=Criar cliente -role_view-realm=Exibir realm -role_view-users=Exibir usu\u00e1rios -role_view-applications=Exibir aplicativos -role_view-clients=Exibir clientes -role_view-events=Exibir eventos -role_view-identity-providers=Exibir provedores de identidade -role_manage-realm=Gerenciar realm -role_manage-users=Gerenciar usu\u00e1rios -role_manage-applications=Gerenciar aplicativos -role_manage-identity-providers=Gerenciar provedores de identidade -role_manage-clients=Gerenciar clientes -role_manage-events=Gerenciar eventos -role_view-profile=Exibir perfil -role_manage-account=Gerenciar contas -role_manage-account-links=Gerenciar v\u00ednculos da conta -role_read-token=Ler token -role_offline-access=Acesso offline -client_account=Conta -client_security-admin-console=Console de Administra\u00e7\u00e3o de Seguran\u00e7a -client_admin-cli=Admin CLI -client_realm-management=Gerenciamento de realm -client_broker=Agente - -invalidUserMessage=Usu\u00e1rio ou senha inv\u00e1lidos -invalidEmailMessage=Endere\u00e7o de email inv\u00e1lido -accountDisabledMessage=Sua conta est\u00e1 desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -accountTemporarilyDisabledMessage=Sua conta est\u00e1 temporariamente desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es ou tente novamente mais tarde. -expiredCodeMessage=Sua sess\u00e3o expirou. Tente entrar novamente. -expiredActionMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. -expiredActionTokenNoSessionMessage=Sua a\u00e7\u00e3o expirou. -expiredActionTokenSessionExistsMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. - -missingFirstNameMessage=Digite seu nome -missingLastNameMessage=Digite seu sobrenome -missingEmailMessage=Digite seu endere\u00e7o de email -missingUsernameMessage=Digite seu nome de usu\u00e1rio -missingPasswordMessage=Digita sua senha -missingTotpMessage=Digite seu c\u00f3digo autenticador -notMatchPasswordMessage=Ocorreu um problema ao tentar entrar. As senhas inseridas n\u00e3o coincidem. - -invalidPasswordExistingMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser inv\u00e1lida. -invalidPasswordBlacklistedMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser proibida. -invalidPasswordConfirmMessage=Ocorreu um problema ao tentar entrar. A confima\u00e7\u00e3o de senha inserida n\u00e3o \u00e9 igual. -invalidTotpMessage=Ocorreu um problema ao tentar entrar. O c\u00f3digo de autentica\u00e7\u00e3o inserido pode ser inv\u00e1lido. - -usernameExistsMessage=Este nome de usu\u00e1rio j\u00e1 existe -emailExistsMessage=Este email j\u00e1 existe - -federatedIdentityExistsMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Entre como Gerente de conta para vincular a conta. - -confirmLinkIdpTitle=Conta j\u00e1 existente -federatedIdentityConfirmLinkMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Como deseja prosseguir? -federatedIdentityConfirmReauthenticateMessage=Autenticar como {0} para vincular sua conta com {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=Adicionar \u00e0 conta existente - -configureTotpMessage=Voc\u00ea precisa configurar o Mobile Authenticator para ativar sua conta -updateProfileMessage=Voc\u00ea precisa atualizar o seu perfil de usu\u00e1rio para ativar a conta -updatePasswordMessage=Voc\u00ea precisa alterar sua senha para ativar a conta -resetPasswordMessage=Voc\u00ea precisa alterar sua senha -verifyEmailMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para ativar a conta -linkIdpMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para vincular sua conta com {0} - -emailSentMessage=Em breve, voc\u00ea receber\u00e1 um email com mais instru\u00e7\u00f5es -emailSendErrorMessage=N\u00e3o foi poss\u00edvel enviar o email. Tente novamente mais tarde. - -accountUpdatedMessage=Sua conta foi atualizada -accountPasswordUpdatedMessage=Sua senha foi atualizada - -noAccessMessage=Sem acesso - -invalidPasswordMinLengthMessage=A senha deve ter no m\u00ednimo {0} caracteres -invalidPasswordMinDigitsMessage=A senha deve ter no m\u00ednimo {0} numerais -invalidPasswordMinLowerCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres min\u00fasculos -invalidPasswordMinUpperCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres mai\u00fasculos -invalidPasswordMinSpecialCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres especiais -invalidPasswordNotUsernameMessage=Sua senha n\u00e3o pode ser igual ao nome de usu\u00e1rio -invalidPasswordRegexPatternMessage=A senha deve corresponder ao padr\u00e3o regex -invalidPasswordHistoryMessage=A senha n\u00e3o deve ser igual a nenhuma das \u00faltimas {0} senhas -invalidPasswordGenericMessage=Sua senha n\u00e3o corresponde \u00e0 pol\u00edtica de senhas - -failedToProcessResponseMessage=Falha ao processar a resposta -httpsRequiredMessage=HTTPS necess\u00e1rio -realmNotEnabledMessage=Realm desabilitado -invalidRequestMessage=Pedido inv\u00e1lido -failedLogout=Falha no Logout -unknownLoginRequesterMessage=Solicitante de login desconhecido -loginRequesterNotEnabledMessage=Solicitante de login desabilitado -bearerOnlyMessage=Aplicativos Bearer-only n\u00e3o t\u00eam permiss\u00e3o para iniciar o login pelo navegador -standardFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo padr\u00e3o est\u00e1 desabilitado para o cliente. -implicitFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo impl\u00edcito est\u00e1 desabilitado para o cliente. -invalidRedirectUriMessage=URI de redirecionamento inv\u00e1lido -unsupportedNameIdFormatMessage=Formato do nome n\u00e3o suportado -invalidRequesterMessage=Solicitante inv\u00e1lido -registrationNotAllowedMessage=Registro n\u00e3o permitido. -resetCredentialNotAllowedMessage=N\u00e3o \u00e9 permitido redefinir a credencial. - -permissionNotApprovedMessage=Permiss\u00e3o negada -noRelayStateInResponseMessage=Sem retorno de RelayState do provedor de identidade -insufficientPermissionMessage=Permiss\u00f5es insuficientes para vincular identidades -couldNotProceedWithAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel continuar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -couldNotObtainTokenMessage=N\u00e3o foi poss\u00edvel obter o token do provedor de identidade -unexpectedErrorRetrievingTokenMessage=Erro inesperado ao recuperar o token do provedor de identidade -unexpectedErrorHandlingResponseMessage=Erro inesperado ao lidar com a resposta do provedor de identidade -identityProviderAuthenticationFailedMessage=Falha na autentica\u00e7\u00e3o. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade -identityProviderDifferentUserMessage=Autenticado como {0}, mas era esperado ser autenticado como {1} -couldNotSendAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel enviar pedido de autentica\u00e7\u00e3o para o provedor de identidade -unexpectedErrorHandlingRequestMessage=Erro inesperado ao lidar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -invalidAccessCodeMessage=C\u00f3digo de acesso inv\u00e1lido -sessionNotActiveMessage=Sess\u00e3o inativa -invalidCodeMessage=Encontramos um problema. Tente entrar novamente pelo aplicativo. -identityProviderUnexpectedErrorMessage=Encontramos um problema. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade. -identityProviderNotFoundMessage=N\u00e3o foi poss\u00edvel encontrar um provedor de identidade com esse identificador -identityProviderLinkSuccess=Seu email foi verificado com sucesso. Retorne ao navegador original e continue o login. -staleCodeMessage=Esta p\u00e1gina n\u00e3o est\u00e1 mais v\u00e1lida. Volte para o aplicativo e entre novamente. -realmSupportsNoCredentialsMessage=O realm n\u00e3o suporta nenhum tipo de credencial. -identityProviderNotUniqueMessage=O realm suporta m\u00faltiplos provedores de identidade. N\u00e3o foi poss\u00edvel determinar qual provedor de identidade deve ser usado na autentica\u00e7\u00e3o. -emailVerifiedMessage=Seu endere\u00e7o de email foi verificado. -staleEmailVerificationLink=O link n\u00e3o est\u00e1 mais v\u00e1lido. Voc\u00ea pode j\u00e1 ter verificado seu endere\u00e7o de email. -identityProviderAlreadyLinkedMessage=A identidade federada retornada por {0} j\u00e1 est\u00e1 vinculada a outro usu\u00e1rio -confirmAccountLinking=Confirmar a vincula\u00e7\u00e3o da conta {0} do provedor de identidade {1} com a sua conta -confirmEmailAddressVerification=Confirmar a validade do endere\u00e7o de email {0} -confirmExecutionOfActions=Realizar as seguintes a\u00e7\u00f5es - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Voltar para o aplicativo -missingParameterMessage=Par\u00e2metros ausentes: {0} -clientNotFoundMessage=Cliente n\u00e3o encontrado -clientDisabledMessage=Cliente desabilitado -invalidParameterMessage=Par\u00e2mentro inv\u00e1lido: {0} -alreadyLoggedIn=Voc\u00ea j\u00e1 est\u00e1 conectado -differentUserAuthenticated=Voc\u00ea j\u00e1 est\u00e1 conectado como o usu\u00e1rio ''{0}'' nesta sess\u00e3o. Tente entrar novamente. -brokerLinkingSessionExpired=Vincula\u00e7\u00e3o de conta de agente solicitada, mas a sess\u00e3o atual n\u00e3o est\u00e1 mais v\u00e1lida. -proceedWithAction=» Clique aqui para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=Termos e Condi\u00e7\u00f5es -requiredAction.UPDATE_PASSWORD=Atualizar senha -requiredAction.UPDATE_PROFILE=Atualizar perfil -requiredAction.VERIFY_EMAIL=Verificar email - -p3pPolicy=CP="Esta n\u00e3o \u00e9 uma pol\u00edtica P3P!" - -doX509Login=Voc\u00ea vai entrar como: -clientCertificate=Certificado X509 do cliente: -noCertificate=[Sem certificado] - - -pageNotFound=Esta p\u00e1gina n\u00e3o est\u00e1 dispon\u00edvel -internalServerError=Encontramos um problema diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_ru.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_ru.properties deleted file mode 100644 index f512abe4c..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_ru.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u0412\u0445\u043e\u0434 -needHelp=\u041d\u0443\u0436\u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c? -selectAlternative=\u0418\u043b\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 - -doRegister=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f -doCancel=\u041e\u0442\u043c\u0435\u043d\u0430 -doSubmit=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c -doYes=\u0414\u0430 -doNo=\u041d\u0435\u0442 -doContinue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c -doIgnore=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c -doAccept=\u041f\u0440\u0438\u043d\u044f\u0442\u044c -doDecline=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c -doForgotPassword=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -doClickHere=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c -doImpersonate=\u0418\u043c\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f -kerberosNotConfigured=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -kerberosNotConfiguredTitle=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -bypassKerberosDetail=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Kerberos, \u0438\u043b\u0438 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043cr Kerberos. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c" \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. -kerberosNotSetUp=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Kerberos, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -registerWithTitle=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e {0} -registerWithTitleHtml={0} -loginTitle=\u0412\u0445\u043e\u0434 \u0432 {0} -loginTitleHtml={0} -impersonateTitle=\u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c {0} -impersonateTitleHtml={0} \u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -realmChoice=\u041e\u0431\u043b\u0430\u0441\u0442\u044c -unknownUser=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -loginTotpTitle=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Mobile Authenticator -loginProfileTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -loginTimeout=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u0445\u043e\u0434\u0430. -oauthGrantTitle=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f -oauthGrantTitleHtml={0} -errorTitle=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -errorTitleHtml=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -emailVerifyTitle=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailForgotTitle=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -updatePasswordTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -codeSuccessTitle=\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 -codeErrorTitle=\u041e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434: {0} - -termsTitle=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsTitleHtml=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsText=

      \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b

      - -recaptchaFailed=\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f Recaptcha -recaptchaNotConfigured=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Recaptcha. Recaptcha \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 -consentDenied=\u0412 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e. - -noAccount=\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c? -username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -usernameOrEmail=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -firstName=\u0418\u043c\u044f -givenName=\u0418\u043c\u044f -fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f -lastName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -familyName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -email=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430 -password=\u041f\u0430\u0440\u043e\u043b\u044c -passwordConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNew=\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNewConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -rememberMe=\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044f -authenticatorCode=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 -address=\u0410\u0434\u0440\u0435\u0441 -street=\u0423\u043b\u0438\u0446\u0430 -locality=\u0413\u043e\u0440\u043e\u0434 -region=\u0420\u0435\u0433\u0438\u043e\u043d -postal_code=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 -country=\u0421\u0442\u0440\u0430\u043d\u0430 -emailVerified=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -gssDelegationCredential=\u0414\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 GSS - -loginTotpStep1=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0432\u043e\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e -loginTotpStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434 -loginTotpStep3=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c" \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 -loginTotpManualStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 -loginTotpManualStep3=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 -loginTotpUnableToScan=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? -loginTotpScanBarcode=\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434? -loginTotpOneTime=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -loginTotpType=\u0422\u0438\u043f -loginTotpAlgorithm=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c -loginTotpDigits=\u0426\u0438\u0444\u0440\u044b -loginTotpInterval=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -loginTotp.totp=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 -loginTotp.hotp=\u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 - - -oauthGrantRequest=\u0412\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0430\u043c? -inResource=\u0432 - -emailVerifyInstruction1=\u0412\u0430\u043c \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailVerifyInstruction2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailVerifyInstruction3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e - -emailLinkIdpTitle=\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c {0} -emailLinkIdp1=\u041d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 {0} \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {1} \u043a \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {2} -emailLinkIdp2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailLinkIdp3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e -emailLinkIdp4=\u0412\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 -emailLinkIdp5=\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -backToLogin=« \u041d\u0430\u0437\u0430\u0434 \u043a \u0432\u0445\u043e\u0434\u0443 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -emailInstruction=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f - -copyCodeInstruction=\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 - -pageExpiredTitle=\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u0442\u0435\u043a -pageExpiredMsg1=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -pageExpiredMsg2=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -personalInfo=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: -role_admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 -role_realm-admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_create-realm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c -role_create-client=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 -role_view-realm=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_view-users=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 -role_view-applications=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 -role_view-clients=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 -role_view-events=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 -role_view-identity-providers=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-realm=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -role_manage-users=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 -role_manage-applications=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 -role_manage-identity-providers=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-clients=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 -role_manage-events=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 -role_view-profile=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c {0} -role_manage-account=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e -role_manage-account-links=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c -role_read-token=\u0427\u0442\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 -role_offline-access=\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f -client_account=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c -client_security-admin-console=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 -client_admin-cli=\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 -client_realm-management=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -client_broker=\u0411\u0440\u043e\u043a\u0435\u0440 - -invalidUserMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c -invalidEmailMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -accountDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -accountTemporarilyDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. -expiredCodeMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0430\u043d\u0441\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionTokenNoSessionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e -expiredActionTokenSessionExistsMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. - -missingFirstNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f -missingLastNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0444\u0430\u043c\u0438\u043b\u0438\u044e -missingEmailMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -missingUsernameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -missingPasswordMessage=\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -missingTotpMessage=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 -notMatchPasswordMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. - -invalidPasswordExistingMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c. -invalidPasswordBlacklistedMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. -invalidPasswordConfirmMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f. -invalidTotpMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430. - -usernameExistsMessage=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -emailExistsMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 - -federatedIdentityExistsMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438", \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. - -confirmLinkIdpTitle=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -federatedIdentityConfirmLinkMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? -federatedIdentityConfirmReauthenticateMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043a\u0430\u043a {0} \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0441 {1} -confirmLinkIdpReviewProfile=\u041e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f -confirmLinkIdpContinue=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c - -configureTotpMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mobile Authenticator -updateProfileMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -updatePasswordMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -resetPasswordMessage=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -verifyEmailMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -linkIdpMessage=\u0414\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a {0} \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -emailSentMessage=\u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 -emailSendErrorMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. - -accountUpdatedMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 -accountPasswordUpdatedMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d - -noAccessMessage=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - -invalidPasswordMinLengthMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordMinDigitsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0446\u0438\u0444\u0440 -invalidPasswordMinLowerCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinUpperCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinSpecialCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordNotUsernameMessage=\u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -invalidPasswordRegexPatternMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 -invalidPasswordHistoryMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 {0} \u043f\u0430\u0440\u043e\u043b\u0435\u0439 -invalidPasswordGenericMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 - -failedToProcessResponseMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 -httpsRequiredMessage=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f HTTPS -realmNotEnabledMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 -invalidRequestMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 -failedLogout=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 -unknownLoginRequesterMessage=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 -loginRequesterNotEnabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d -bearerOnlyMessage=\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 -standardFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -implicitFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u0435\u044f\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -invalidRedirectUriMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 uri \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 -unsupportedNameIdFormatMessage=\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 NameIDFormat -invalidRequesterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0438\u0439 -registrationNotAllowedMessage=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 -resetCredentialNotAllowedMessage=\u0421\u0431\u0440\u043e\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d - -permissionNotApprovedMessage=\u0412 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e -noRelayStateInResponseMessage=\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f -insufficientPermissionMessage=\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 -couldNotProceedWithAuthenticationRequestMessage=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -couldNotObtainTokenMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorRetrievingTokenMessage=\u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -unexpectedErrorHandlingResponseMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -identityProviderAuthenticationFailedMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -identityProviderDifferentUserMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {0}, \u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {1} -couldNotSendAuthenticationRequestMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorHandlingRequestMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -invalidAccessCodeMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 -sessionNotActiveMessage=\u0421\u0435\u0430\u043d\u0441 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d -invalidCodeMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. -identityProviderUnexpectedErrorMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. -identityProviderNotFoundMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c -identityProviderLinkSuccess=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. -staleCodeMessage=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -realmSupportsNoCredentialsMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. -identityProviderNotUniqueMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. -emailVerifiedMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -staleEmailVerificationLink=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. -identityProviderAlreadyLinkedMessage=\u0424\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 {0}, \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c -confirmAccountLinking=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {0} \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 {1} \u043a \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -confirmEmailAddressVerification=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b {0} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c -confirmExecutionOfActions=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u041d\u0430\u0437\u0430\u0434 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 -missingParameterMessage=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: {0} -clientNotFoundMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d -clientDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d -invalidParameterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: {0} -alreadyLoggedIn=\u0412\u044b \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -differentUserAuthenticated=\u0412\u044b \u0443\u0436\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0441\u0435\u0430\u043d\u0441 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f ''{0}''. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -brokerLinkingSessionExpired=\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0430\u043d\u0441 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d. -proceedWithAction=» \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -requiredAction.CONFIGURE_TOTP=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c (OTP) -requiredAction.terms_and_conditions=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -requiredAction.UPDATE_PASSWORD=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -requiredAction.UPDATE_PROFILE=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c -requiredAction.VERIFY_EMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -p3pPolicy=CP="\u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 P3P!" - -doX509Login=\u0412\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0441 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438: -clientCertificate=\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 X509: -noCertificate=[\u041d\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430] - - -pageNotFound=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 -internalServerError=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 diff --git a/deps/keycloak/themes/sunbird-rc/login/messages/messages_zh_CN.properties b/deps/keycloak/themes/sunbird-rc/login/messages/messages_zh_CN.properties deleted file mode 100644 index 027252ce3..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/messages/messages_zh_CN.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u767b\u5f55 -needHelp=\u662f\u5426\u9700\u8981\u5e2e\u52a9\uff1f -selectAlternative=\u6216\u8005\u9009\u62e9\u4e00\u4e2a\u5907\u9009 - -doRegister=\u6ce8\u518c -doCancel=\u53d6\u6d88 -doSubmit=\u63d0\u4ea4 -doYes=\u662f -doNo=\u5426 -doContinue=\u7ee7\u7eed -doIgnore=\u5ffd\u7565 -doAccept=\u63a5\u53d7 -doDecline=\u62d2\u7edd -doForgotPassword=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -doClickHere=\u5355\u51fb\u6b64\u5904 -doImpersonate=\u6a21\u62df -kerberosNotConfigured=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -kerberosNotConfiguredTitle=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -bypassKerberosDetail=\u60a8\u672a\u901a\u8fc7 Kerberos \u8fdb\u884c\u767b\u5f55\uff0c\u6216\u8005\u60a8\u7684\u6d4f\u89c8\u5668\u672a\u8bbe\u7f6e Kerberos \u767b\u5f55\u3002\u8bf7\u5355\u51fb\u201c\u7ee7\u7eed\u201d\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\u767b\u5f55\u3002 -kerberosNotSetUp=\u60a8\u9700\u8981\u5148\u8bbe\u7f6e Kerberos \u624d\u80fd\u8fdb\u884c\u767b\u5f55\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -registerWithTitle=\u4f7f\u7528 {0} \u6ce8\u518c -registerWithTitleHtml={0} -loginTitle=\u767b\u5f55\u5230 {0} -loginTitleHtml={0} -impersonateTitle={0} \u6a21\u62df\u7528\u6237 -impersonateTitleHtml={0}\u6a21\u62df\u7528\u6237 -realmChoice=\u57df -unknownUser=\u672a\u77e5\u7528\u6237 -loginTotpTitle=Mobile Authenticator \u8bbe\u7f6e -loginProfileTitle=\u66f4\u65b0\u5e10\u6237\u4fe1\u606f -loginTimeout=\u60a8\u7684\u767b\u5f55\u65f6\u95f4\u8fc7\u957f\u3002\u91cd\u65b0\u5f00\u59cb\u767b\u5f55\u8fc7\u7a0b\u3002 -oauthGrantTitle=\u6388\u6743\u8bbf\u95ee -oauthGrantTitleHtml={0} -errorTitle=\u5f88\u62b1\u6b49\u3002 -errorTitleHtml=\u5f88\u62b1\u6b49 -emailVerifyTitle=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 -emailForgotTitle=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -updatePasswordTitle=\u66f4\u65b0\u5bc6\u7801 -codeSuccessTitle=\u6210\u529f\u7801 -codeErrorTitle=\u9519\u8bef\u7801\uff1a{0} - -termsTitle=\u6761\u6b3e -termsTitleHtml=\u6761\u6b3e -termsText=

      \u9700\u8981\u786e\u5b9a\u7684\u6761\u6b3e

      - -recaptchaFailed=\u65e0\u6548\u7684\u9a8c\u8bc1\u7801 -recaptchaNotConfigured=\u9700\u8981\u9a8c\u8bc1\u7801\uff0c\u5c1a\u672a\u8fdb\u884c\u914d\u7f6e -consentDenied=\u8bb8\u53ef\u88ab\u62d2\u7edd\u3002 - -noAccount=\u65b0\u7528\u6237? -username=\u7528\u6237\u540d -usernameOrEmail=\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6 -firstName=\u540d\u5b57 -givenName=\u540d\u5b57 -fullName=\u5168\u540d -lastName=\u59d3\u6c0f -familyName=\u59d3\u6c0f -email=\u7535\u5b50\u90ae\u4ef6 -password=\u5bc6\u7801 -passwordConfirm=\u786e\u8ba4\u5bc6\u7801 -passwordNew=\u65b0\u5bc6\u7801 -passwordNewConfirm=\u786e\u8ba4\u65b0\u5bc6\u7801 -rememberMe=\u8bb0\u4f4f\u7528\u6237\u540d\u548c\u5bc6\u7801 -authenticatorCode=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -address=\u5730\u5740 -street=\u8857\u9053 -locality=\u5e02 -region=\u7701\uff0c\u81ea\u6cbb\u533a\uff0c\u76f4\u8f96\u5e02 -postal_code=\u90ae\u653f\u7f16\u7801 -country=\u56fd\u5bb6/\u5730\u533a -emailVerified=\u7535\u5b50\u90ae\u4ef6\u5df2\u9a8c\u8bc1 -gssDelegationCredential=GSS \u6388\u6743\u51ed\u636e - -loginTotpStep1=\u5728\u60a8\u7684\u624b\u673a\u4e0a\u5b89\u88c5\u4ee5\u4e0b\u5176\u4e2d\u4e00\u79cd\u5e94\u7528 -loginTotpStep2=\u6253\u5f00\u5e94\u7528\u5e76\u626b\u63cf\u6761\u5f62\u7801 -loginTotpStep3=\u8f93\u5165\u5e94\u7528\u63d0\u4f9b\u7684\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801\uff0c\u7136\u540e\u5355\u51fb\u201c\u63d0\u4ea4\u201d\u5b8c\u6210\u8bbe\u7f6e -loginTotpManualStep2=\u6253\u5f00\u5e94\u7528\u5e76\u8f93\u5165\u5bc6\u94a5 -loginTotpManualStep3=\u5982\u679c\u5e94\u7528\u5141\u8bb8\u8bbe\u7f6e\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u914d\u7f6e\u503c -loginTotpUnableToScan=\u65e0\u6cd5\u626b\u63cf\uff1f -loginTotpScanBarcode=\u626b\u63cf\u6761\u5f62\u7801\uff1f -loginTotpOneTime=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -loginTotpType=\u7c7b\u578b -loginTotpAlgorithm=\u7b97\u6cd5 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u95f4\u9694 - -loginTotp.totp=\u57fa\u4e8e\u65f6\u95f4 -loginTotp.hotp=\u57fa\u4e8e\u8ba1\u6570\u5668 - - -oauthGrantRequest=\u60a8\u662f\u5426\u6388\u4e88\u8fd9\u4e9b\u8bbf\u95ee\u6743\u9650\uff1f -inResource=in - -emailVerifyInstruction1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u9a8c\u8bc1\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailVerifyInstruction2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailVerifyInstruction3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 - -emailLinkIdpTitle=\u94fe\u63a5 {0} -emailLinkIdp1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u5982\u4f55\u5c06 {0} \u5e10\u6237 {1} \u94fe\u63a5\u5230\u60a8\u7684 {2} \u5e10\u6237\u7684\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailLinkIdp3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp4=\u5982\u679c\u60a8\u5df2\u5728\u4e0d\u540c\u7684\u6d4f\u89c8\u5668\u4e2d\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\uff0c -emailLinkIdp5=\u8bf7\u7ee7\u7eed - -backToLogin=« \u8fd4\u56de\u767b\u5f55 - -emailInstruction=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u6211\u4eec\u5c06\u5411\u60a8\u53d1\u9001\u5982\u4f55\u521b\u5efa\u65b0\u5bc6\u7801\u7684\u8bf4\u660e - -copyCodeInstruction=\u590d\u5236\u6b64\u9a8c\u8bc1\u7801\u5e76\u7c98\u8d34\u5230\u60a8\u7684\u5e94\u7528 - -pageExpiredTitle=\u9875\u9762\u5df2\u8fc7\u671f -pageExpiredMsg1=\u91cd\u65b0\u542f\u52a8\u767b\u5f55\u8fc7\u7a0b -pageExpiredMsg2=\u7ee7\u7eed\u767b\u5f55\u8fc7\u7a0b - -personalInfo=\u4e2a\u4eba\u4fe1\u606f\uff1a -role_admin=\u7ba1\u7406\u5458 -role_realm-admin=\u57df\u7ba1\u7406\u5458 -role_create-realm=\u521b\u5efa\u57df -role_create-client=\u521b\u5efa\u5ba2\u6237 -role_view-realm=\u67e5\u770b\u57df -role_view-users=\u67e5\u770b\u7528\u6237 -role_view-applications=\u67e5\u770b\u5e94\u7528 -role_view-clients=\u67e5\u770b\u5ba2\u6237 -role_view-events=\u67e5\u770b\u4e8b\u4ef6 -role_view-identity-providers=\u67e5\u770b\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-realm=\u7ba1\u7406\u57df -role_manage-users=\u7ba1\u7406\u7528\u6237 -role_manage-applications=\u7ba1\u7406\u5e94\u7528 -role_manage-identity-providers=\u7ba1\u7406\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-clients=\u7ba1\u7406\u5ba2\u6237 -role_manage-events=\u7ba1\u7406\u4e8b\u4ef6 -role_view-profile=\u67e5\u770b\u914d\u7f6e\u6587\u4ef6 -role_manage-account=\u7ba1\u7406\u5e10\u6237 -role_manage-account-links=\u7ba1\u7406\u5e10\u6237\u94fe\u63a5 -role_read-token=\u8bfb\u53d6\u4ee4\u724c -role_offline-access=\u79bb\u7ebf\u8bbf\u95ee -client_account=\u5e10\u6237 -client_security-admin-console=\u5b89\u5168\u7ba1\u7406\u63a7\u5236\u53f0 -client_admin-cli=\u7ba1\u7406\u547d\u4ee4\u884c\u5de5\u5177 -client_realm-management=\u57df\u7ba1\u7406 -client_broker=\u4ee3\u7406 - -invalidUserMessage=\u65e0\u6548\u7528\u6237\u540d\u6216\u5bc6\u7801 -invalidEmailMessage=\u65e0\u6548\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -accountDisabledMessage=\u60a8\u7684\u5e10\u6237\u5df2\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -accountTemporarilyDisabledMessage=\u60a8\u7684\u5e10\u6237\u4e34\u65f6\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u6216\u7a0d\u5019\u91cd\u8bd5\u3002 -expiredCodeMessage=\u60a8\u7684\u4f1a\u8bdd\u5df2\u8d85\u65f6\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionTokenNoSessionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f -expiredActionTokenSessionExistsMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 - -missingFirstNameMessage=\u8f93\u5165\u60a8\u7684\u540d\u5b57 -missingLastNameMessage=\u8f93\u5165\u60a8\u7684\u59d3\u6c0f -missingEmailMessage=\u8f93\u5165\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -missingUsernameMessage=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d -missingPasswordMessage=\u8f93\u5165\u60a8\u7684\u5bc6\u7801 -missingTotpMessage=\u8f93\u5165\u60a8\u7684\u9a8c\u8bc1\u7801 -notMatchPasswordMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u3002 - -invalidPasswordExistingMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u65e0\u6548\u3002 -invalidPasswordBlacklistedMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u88ab\u5217\u5165\u9ed1\u540d\u5355\u3002 -invalidPasswordConfirmMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u786e\u8ba4\u5bc6\u7801\u4e0d\u5339\u914d\u3002 -invalidTotpMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u9a8c\u8bc1\u7801\u53ef\u80fd\u65e0\u6548\u3002 - -usernameExistsMessage=\u7528\u6237\u540d\u5df2\u5b58\u5728 -emailExistsMessage=\u7535\u5b50\u90ae\u4ef6\u5df2\u5b58\u5728 - -federatedIdentityExistsMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u8bf7\u767b\u5f55\u5230\u5e10\u6237\u7ba1\u7406\u94fe\u63a5\u8be5\u5e10\u6237\u3002 - -confirmLinkIdpTitle=\u5e10\u6237\u5df2\u5b58\u5728 -federatedIdentityConfirmLinkMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u63a5\u4e0b\u6765\u5982\u4f55\u64cd\u4f5c\uff1f -federatedIdentityConfirmReauthenticateMessage=\u8eab\u4efd\u9a8c\u8bc1\u4e3a {0}\uff0c\u5c06 {1} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 -confirmLinkIdpReviewProfile=\u5ba1\u67e5\u914d\u7f6e\u6587\u4ef6 -confirmLinkIdpContinue=\u6dfb\u52a0\u5230\u73b0\u6709\u5e10\u6237 - -configureTotpMessage=\u60a8\u9700\u8981\u8bbe\u7f6e Mobile Authenticator \u4ee5\u6fc0\u6d3b\u5e10\u6237 -updateProfileMessage=\u60a8\u9700\u8981\u66f4\u65b0\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u4ee5\u6fc0\u6d3b\u5e10\u6237 -updatePasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801\u4ee5\u6fc0\u6d3b\u5e10\u6237 -resetPasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801 -verifyEmailMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u6fc0\u6d3b\u5e10\u6237 -linkIdpMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u5c06 {0} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 - -emailSentMessage=\u60a8\u5c06\u5f88\u5feb\u6536\u5230\u5305\u542b\u66f4\u591a\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailSendErrorMessage=\u6211\u4eec\u65e0\u6cd5\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002 - -accountUpdatedMessage=\u60a8\u7684\u5e10\u6237\u5df2\u66f4\u65b0 -accountPasswordUpdatedMessage=\u60a8\u7684\u5bc6\u7801\u5df2\u66f4\u65b0 - -noAccessMessage=\u65e0\u8bbf\u95ee\u6743\u9650 - -invalidPasswordMinLengthMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5b57\u7b26 -invalidPasswordMinDigitsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u6570\u5b57 -invalidPasswordMinLowerCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5c0f\u5199\u5b57\u6bcd -invalidPasswordMinUpperCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5927\u5199\u5b57\u6bcd -invalidPasswordMinSpecialCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u7279\u6b8a\u5b57\u7b26 -invalidPasswordNotUsernameMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u80fd\u4e0e\u7528\u6237\u540d\u76f8\u540c -invalidPasswordRegexPatternMessage=\u5bc6\u7801\u5fc5\u987b\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d -invalidPasswordHistoryMessage=\u5bc6\u7801\u4e0d\u5f97\u4e0e\u6700\u8fd1 {0} \u6b21\u4f7f\u7528\u7684\u5bc6\u7801\u76f8\u540c -invalidPasswordGenericMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u5bc6\u7801\u7b56\u7565 - -failedToProcessResponseMessage=\u65e0\u6cd5\u5904\u7406\u56de\u590d -httpsRequiredMessage=\u9700\u8981 HTTPS -realmNotEnabledMessage=\u57df\u672a\u542f\u7528 -invalidRequestMessage=\u65e0\u6548\u8bf7\u6c42 -failedLogout=\u65e0\u6cd5\u6ce8\u9500 -unknownLoginRequesterMessage=\u672a\u77e5\u7684\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005 -loginRequesterNotEnabledMessage=\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005\u672a\u542f\u7528 -bearerOnlyMessage=Bearer-only \u7684\u5e94\u7528\u5141\u8bb8\u901a\u8fc7\u6d4f\u89c8\u5668\u767b\u5f55 -standardFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u6807\u51c6\u6d41\u7a0b\u3002 -implicitFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u9690\u5f0f\u6d41\u7a0b\u3002 -invalidRedirectUriMessage=\u65e0\u6548\u7684\u91cd\u5b9a\u5411\u94fe\u63a5 -unsupportedNameIdFormatMessage=\u4e0d\u652f\u6301\u7684 nameID \u683c\u5f0f -invalidRequesterMessage=\u65e0\u6548\u7684\u53d1\u8d77\u8005 -registrationNotAllowedMessage=\u4e0d\u5141\u8bb8\u6ce8\u518c -resetCredentialNotAllowedMessage=\u4e0d\u5141\u8bb8\u91cd\u7f6e\u51ed\u636e - -permissionNotApprovedMessage=\u6743\u9650\u88ab\u62d2\u7edd -noRelayStateInResponseMessage=\u8eab\u4efd\u63d0\u4f9b\u8005\u54cd\u5e94\u6ca1\u6709\u4e2d\u7ee7\u72b6\u6001 -insufficientPermissionMessage=\u94fe\u63a5\u8eab\u4efd\u65f6\u6743\u9650\u4e0d\u8db3 -couldNotProceedWithAuthenticationRequestMessage=\u65e0\u6cd5\u7ee7\u7eed\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u63d0\u51fa\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -couldNotObtainTokenMessage=\u65e0\u6cd5\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u83b7\u53d6\u4ee4\u724c -unexpectedErrorRetrievingTokenMessage=\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u68c0\u7d22\u4ee4\u724c\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -unexpectedErrorHandlingResponseMessage=\u5904\u7406\u8eab\u4efd\u63d0\u4f9b\u8005\u7684\u54cd\u5e94\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -identityProviderAuthenticationFailedMessage=\u8eab\u4efd\u9a8c\u8bc1\u5931\u8d25\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1 -identityProviderDifferentUserMessage=\u9a8c\u8bc1\u8eab\u4efd\u4e3a {0}\uff0c\u4f46\u671f\u671b\u9a8c\u8bc1\u8eab\u4efd\u4e3a {1} -couldNotSendAuthenticationRequestMessage=\u65e0\u6cd5\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -unexpectedErrorHandlingRequestMessage=\u5904\u7406\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u7684\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -invalidAccessCodeMessage=\u65e0\u6548\u7684\u8bbf\u95ee\u7801 -sessionNotActiveMessage=\u4f1a\u8bdd\u672a\u6fc0\u6d3b -invalidCodeMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u8bf7\u5c1d\u8bd5\u901a\u8fc7\u60a8\u7684\u5e94\u7528\u91cd\u65b0\u767b\u5f55\u3002 -identityProviderUnexpectedErrorMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -identityProviderNotFoundMessage=\u4f7f\u7528\u6807\u8bc6\u7b26\u65e0\u6cd5\u627e\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 -identityProviderLinkSuccess=\u60a8\u5df2\u6210\u529f\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u8fd4\u56de\u521d\u59cb\u6d4f\u89c8\u5668\u5e76\u7ee7\u7eed\u767b\u5f55\u3002 -staleCodeMessage=\u6b64\u9875\u9762\u5df2\u5931\u6548\u3002\u8bf7\u8fd4\u56de\u60a8\u7684\u5e94\u7528\u5e76\u91cd\u65b0\u767b\u5f55\u3002 -realmSupportsNoCredentialsMessage=\u57df\u4e0d\u652f\u6301\u4efb\u4f55\u51ed\u636e\u7c7b\u578b -identityProviderNotUniqueMessage=\u57df\u652f\u6301\u591a\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u3002\u65e0\u6cd5\u786e\u5b9a\u5e94\u4f7f\u7528\u54ea\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -emailVerifiedMessage=\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u5df2\u9a8c\u8bc1 -staleEmailVerificationLink=\u8be5\u94fe\u63a5\u5df2\u5931\u6548\u3002\u60a8\u53ef\u80fd\u5df2\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002 -identityProviderAlreadyLinkedMessage={0} \u6240\u8fd4\u56de\u7684\u8054\u5408\u8eab\u4efd\u5df2\u94fe\u63a5\u5230\u5176\u4ed6\u7528\u6237 -confirmAccountLinking=\u786e\u8ba4\u5c06\u60a8\u7684\u5e10\u6237\u94fe\u63a5\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 {1} \u7684\u5e10\u6237 {0} -confirmEmailAddressVerification=\u786e\u8ba4\u7535\u5b50\u90ae\u4ef6\u5730\u5740 {0} \u7684\u6709\u6548\u6027 -confirmExecutionOfActions=\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u8fd4\u56de\u5e94\u7528 -missingParameterMessage=\u7f3a\u5c11\u53c2\u6570\uff1a{0} -clientNotFoundMessage=\u65e0\u6cd5\u627e\u5230\u5ba2\u6237 -clientDisabledMessage=\u5ba2\u6237\u5df2\u88ab\u7981\u7528 -invalidParameterMessage=\u65e0\u6548\u7684\u53c2\u6570\uff1a{0} -alreadyLoggedIn=\u60a8\u5df2\u767b\u5f55 -differentUserAuthenticated=\u60a8\u5df2\u5728\u6b64\u4f1a\u8bdd\u4e2d\u4ee5\u4e0d\u540c\u7684\u7528\u6237 ''{0}'' \u767b\u5f55\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -brokerLinkingSessionExpired=\u5df2\u8bf7\u6c42\u4ee3\u7406\u5e10\u6237\u94fe\u63a5\uff0c\u4f46\u5f53\u524d\u4f1a\u8bdd\u5df2\u5931\u6548\u3002 -proceedWithAction=» \u5355\u51fb\u6b64\u5904\u7ee7\u7eed - -requiredAction.CONFIGURE_TOTP=\u914d\u7f6e OTP -requiredAction.terms_and_conditions=\u6761\u6b3e -requiredAction.UPDATE_PASSWORD=\u66f4\u65b0\u5bc6\u7801 -requiredAction.UPDATE_PROFILE=\u66f4\u65b0\u914d\u7f6e\u6587\u4ef6 -requiredAction.VERIFY_EMAIL=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 - -p3pPolicy=CP=\u201c\u8fd9\u4e0d\u662f P3P \u7b56\u7565\uff01\u201d - -doX509Login=\u60a8\u7684\u767b\u5f55\u8eab\u4efd\u5c06\u4e3a\uff1a -clientCertificate=X509 \u5ba2\u6237\u8bc1\u4e66\uff1a -noCertificate=[\u65e0\u8bc1\u4e66] - - -pageNotFound=\u6b64\u9875\u9762\u4e0d\u53ef\u7528 -internalServerError=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898 diff --git a/deps/keycloak/themes/sunbird-rc/login/mobile-login.ftl b/deps/keycloak/themes/sunbird-rc/login/mobile-login.ftl deleted file mode 100644 index 864d87c44..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/mobile-login.ftl +++ /dev/null @@ -1,53 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/css/login.css b/deps/keycloak/themes/sunbird-rc/login/resources/css/login.css deleted file mode 100644 index 119f65bf7..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/css/login.css +++ /dev/null @@ -1,252 +0,0 @@ -body, html { - display: flex; - flex-direction: column; - flex: 1; - overflow: hidden; - min-height: 0; - font-size: 14px; - color:rgba(0,0,0,.87); - margin:0; - height: 100%; -} -body { - margin: 0; - -} -.ndear-wrapper { - display: flex; - justify-content: center; - padding: 54px; - background-color: #F6F8FC; - height: 100vh; -} -.ndear-wrapper .form-wrapper { - display: flex; - width: 100%; - background: white; - box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.05); - border-radius: 4px; -} -.ndear-wrapper .form-wrapper .container-wrapper{ - width: 50%; - padding-top: 12rem; - align-items: center; -} -.title-wrapper { - background-repeat: no-repeat; - display: flex; - flex-direction: column; - background-size: cover; - background-position: center; - -} -.ndear-login-wrapper { - width: 40%; - padding-left: 10rem !important; - padding-right: 10rem !important; -} -.ndear-login-card-wrapper { - padding-top: 1rem; -} -.login-content { - background-color: #F6F8FC; - background-size:cover; - background-position:center; - height: 100vh; - min-width: 320px; - display:flex; - justify-content:space-between; -} -.login-content .box { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - width: 55%; -} - -.login-content .box .box-container { - width:100%; -} -.login-content .box .logo { - display: block; - margin-left: auto; - margin-right: auto; - margin-top: 30px; -} -.login-content .box .application-name { - width: 270px; - font-family: Muli; - font-size: 24px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 40px; -} -.login-content .box .form { -} -.login-field { - width: 100px; - letter-spacing: 1px; - border: none !important; - outline: none; -} -.login-content .box input[type="text"]:focus, .login-content .box input[type="password"]:focus { - outline: none; -} -.login-content .box input[type="text"]:-webkit-autofill, .login-content .box input[type="password"]:-webkit-autofill -{ - box-shadow: 0 0 0px 1000px white inset; -} -.register-link { - color: #443DF6 !important; - font-weight: bolder; - cursor: pointer; -} -.ndear-login-card-wrapper .submit{ - color: #ffffff; - border-style: none; - background: #0098AB; - border-radius: 20px; - width: 100%; - padding: 1rem; - margin-top: 20px; - -} -.login-content .box .visibility { - position: relative; - left: 296px; - top: 20px; - width: 24px; - height: 24px; - opacity: 0.54; - border: none; -} -.login-content .box .copyright { - min-width: 320px; - text-align: center; - font-size: 14px; - opacity: .54; - position: relative; - top: 50px; -} -.kc-feedback-text { - color: #b8082a; -} -.message-text { - width: 322px; - height: 22px; - opacity: 0.87; - font-family: Muli; - font-size: 14px; - font-weight: normal; - font-style: normal; - font-stretch: normal; - line-height: 1.3; - letter-spacing: -0.4px; - text-align: left; - color: #b8082a; - border: 0px; - position: relative; - top: 180px; - left: 64px; - display: inline-flex; - align-items: center; -} -.identity-providers { - width: 270px; - font-family: Muli; - font-size: 16px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 20px; -} - -.login-content .box .social-link-style { - width: 320px; - height: 36px; - border-radius: 2px; - background-color: var(--white); - font-family: Muli; - font-size: 14px; - font-weight: bold; - font-style: normal; - font-stretch: normal; - line-height: normal; - letter-spacing: normal; - text-align: center; - color: #00754a; - border-style: solid; - border-color: #00754a; - margin-top: 0px; - margin-left: 30px; - margin-bottom: 10px; -} - -.login-content .box .para { - font-family: Muli; - font-size: 14px; - margin-left: 30px; -} - -@media (max-width: 992px) { - .ndear-login-wrapper { - width: 100%; - display: flex; - flex-direction: column; - justify-content: center; - } - .login-content { - flex-direction: column-reverse; - justify-content: flex-end; - } - .login-content .box { - width: 100%; - } - - .ndear-wrapper .form-wrapper { - flex-direction: column; - } - .ndear-wrapper .form-wrapper .container-wrapper { - width: 100%; - padding: 1rem !important; - height: 100%; - } -} - -.bold-text { - font-weight: bold; -} - -.w-100 { - width: 100%; -} - -.forgot-password-wrapper { - text-align: right; -} - -.forgot-password-wrapper a { - color: #0098AB; -} - -.green-label { - background: #e9f7ea; - border: 1px solid #f4f4f4; - box-shadow: 0px 2px 5px rgb(0 0 0 / 5%); - border-radius: 4px; - margin-top: 12px; - padding: 1rem; - font-weight: bold; -} \ No newline at end of file diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/css/main.css b/deps/keycloak/themes/sunbird-rc/login/resources/css/main.css deleted file mode 100644 index c51d44bd8..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/css/main.css +++ /dev/null @@ -1,149 +0,0 @@ -.navbar { - box-shadow: 0px 2px 5px rgba(0, 0, 0, 0.05); - padding-left: 30px; -} - -.nav-link { - font-size: 12px; - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.main-img-wrapper { - display: flex; - justify-content: flex-end; - width: 45%; -} - -.main-img { - width: 85%; - height: 70%; -} - -.footer-content { - height: 12vh; - border-top: 1px solid #d3d3d3; - display: flex; - justify-content: space-around; - align-items: center; - -} - -.footer-gov-logo { - width: 25%; - margin: 0 5px; -} - -.footer-link { - color: #040E28; - margin: 0 5px; -} - -.form-title { - font-size: 25px; -} - -.form-subtitle { - font-size: 35px; -} - -.form-content { - padding-left: 9rem; - padding-right: 18rem; -} - -.input-field { - display: flex; - border-radius: 4px; - width: 100%; - border: 1px solid #EFEFEF; - margin-top: 0.5rem; -} -.input-field input { - padding: 1rem; - border: 1px solid #EFEFEF; - border-radius: 4px; -} - -.input-wrapper { - display: flex; - justify-content: space-between; -} - -.mobile-prefix, .otp-prefix { - padding: 1px 2px; - margin: 0; -} - -.mobile input { - width: 100% !important; -} - -.login-arrow { - width: 9%; - margin-left: 2rem; -} - -.otp-prefix { - color: #4CA07A; -} - -@media (max-width: 992px) { - - .main-img-wrapper { - width: 100%; - } - .main-img-wrapper img { - height: 90%; - - } - .form-content { - padding: 0 2rem; - } - .form { - display: flex; - flex-direction: column; - justify-content: center; - } - .form-subtitle { - font-size: 25px; - text-align: center; - } - .input-wrapper { - flex-direction: column; - } - .otp { - margin-top: 1rem - } -} - -.banner { - background: black; - color: white; - display: flex; - justify-content: space-between; - font-size: 14px; - padding: 11px 26px; - text-align: center; -} - -.banner a { - text-decoration: underline; -} - -footer { - background: black; - padding: 13px 30px; - color: #8D9091; - display: flex; - justify-content: space-between; - align-items: center; -} - -footer a { - margin-right: 30px; -} - -footer a:last-child { - margin-right: 0px; -} \ No newline at end of file diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/bg.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/bg.svg deleted file mode 100644 index 6cca44ab3..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/bg.svg +++ /dev/null @@ -1,858 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/facebook.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/facebook.svg deleted file mode 100644 index 013aca45d..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/facebook.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/ndearLogo.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/ndearLogo.svg deleted file mode 100644 index d38402ea7..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/ndearLogo.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/next-btn.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/next-btn.svg deleted file mode 100644 index 074aa83fa..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/next-btn.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/theme-icon.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/theme-icon.svg deleted file mode 100644 index bf58d8c91..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/theme-icon.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/twitter.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/twitter.svg deleted file mode 100644 index 0a427d90e..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/twitter.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/resources/img/youtube.svg b/deps/keycloak/themes/sunbird-rc/login/resources/img/youtube.svg deleted file mode 100644 index 6708da20f..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/resources/img/youtube.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/template.ftl b/deps/keycloak/themes/sunbird-rc/login/template.ftl deleted file mode 100644 index 3b9b4f682..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/template.ftl +++ /dev/null @@ -1,94 +0,0 @@ -<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true> - - - - - - - - - - - - - - - <#nested "title"> - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - - - - <#if properties.showBanner = "true"> - - - - <#nested "header"> -
      -
      - <#if properties.keycloakBackgroundImage = "NA"> -
      - <#else> -
      - - <#if properties.portalTitle != "">

      Login to ${properties.portalTitle!}

      - <#if properties.portalSubTitle != "">${properties.portalSubTitle!} -
      - -
      -
      - <#if properties.showFooter = "true"> -
      - Sunbird RC -
      - - - -
      -
      - - - - diff --git a/deps/keycloak/themes/sunbird-rc/login/theme.properties b/deps/keycloak/themes/sunbird-rc/login/theme.properties deleted file mode 100644 index 3361c0e76..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/theme.properties +++ /dev/null @@ -1,26 +0,0 @@ -parent=keycloak -import=common/keycloak -locales=ca,de,en,es,fr,it,ja,lt,nl,no,pt-BR,ru,sv,zh-CN -styles=css/login.css css/main.css - -kcFeedbackErrorIcon=pficon pficon-error-circle-o -kcFeedbackWarningIcon=pficon pficon-warning-triangle-o -kcFeedbackSuccessIcon=pficon pficon-ok -kcFeedbackInfoIcon=pficon pficon-info - -keycloakLogo=${env.KEYCLOAK_LOGO:NA} -portalTitle=${env.KEYCLOAK_PORTAL_TITLE:Issuance} -portalSubTitle=${env.KEYCLOAK_PORTAL_SUB_TITLE:Demo Portal Sub Title} -keycloakBackgroundImage=${env.KEYCLOAK_BACKGROUND_IMAGE:NA} -showBanner=${env.SHOW_BANNER:true} -showFooter=${env.SHOW_FOOTER:true} -signupLink=${env.SIGN_UP_LINK:/} -mockOTP=${env.MOCK_OTP:true} -resendTimer=${env.RESEND_TIME:100} -mockOTPValue=${env.MOCK_OTP_VALUE:1234} -userIdTitle=${env.LOGIN_USER_ID_TITLE:Email Id / Mobile Number} -kcInputClass=login-field -kcLabelClass=bold-text -kcButtonClass=submit -kcFormOptionsWrapperClass=forgot-password-wrapper - diff --git a/deps/keycloak/themes/sunbird-rc/login/verify-otp.ftl b/deps/keycloak/themes/sunbird-rc/login/verify-otp.ftl deleted file mode 100644 index 0a298deec..000000000 --- a/deps/keycloak/themes/sunbird-rc/login/verify-otp.ftl +++ /dev/null @@ -1,85 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> -

      Confirm OTP

      - - - diff --git a/deps/keycloak/themes/sys-admin/login/error.ftl b/deps/keycloak/themes/sys-admin/login/error.ftl deleted file mode 100644 index 5cffcb901..000000000 --- a/deps/keycloak/themes/sys-admin/login/error.ftl +++ /dev/null @@ -1,11 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=false; section> - <#if section = "form"> -
      -

      ${message.summary?no_esc}

      - <#if client?? && client.baseUrl?has_content> -

      ${kcSanitize(msg("backToApplication"))?no_esc}

      - -
      - - \ No newline at end of file diff --git a/deps/keycloak/themes/sys-admin/login/login-oauth-grant.ftl b/deps/keycloak/themes/sys-admin/login/login-oauth-grant.ftl deleted file mode 100644 index 30b5340de..000000000 --- a/deps/keycloak/themes/sys-admin/login/login-oauth-grant.ftl +++ /dev/null @@ -1,41 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout bodyClass="oauth"; section> - <#if section = "header"> - <#if client.name?has_content> - ${msg("oauthGrantTitle",advancedMsg(client.name))} - <#else> - ${msg("oauthGrantTitle",client.clientId)} - - <#elseif section = "form"> -
      -

      ${msg("oauthGrantRequest")}

      -
        - <#if oauth.clientScopesRequested??> - <#list oauth.clientScopesRequested as clientScope> -
      • - ${advancedMsg(clientScope.consentScreenText)} -
      • - - -
      - -
      - -
      -
      -
      -
      -
      - -
      -
      - - -
      -
      -
      -
      -
      -
      - - \ No newline at end of file diff --git a/deps/keycloak/themes/sys-admin/login/login.ftl b/deps/keycloak/themes/sys-admin/login/login.ftl deleted file mode 100644 index dcace58d3..000000000 --- a/deps/keycloak/themes/sys-admin/login/login.ftl +++ /dev/null @@ -1,99 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayMessage=!messagesPerField.existsError('username','password') displayInfo=realm.password && realm.registrationAllowed && !registrationDisabled??; section> - <#if section = "header"> - ${msg("loginAccountTitle")} - <#elseif section = "form"> -
      -
      - <#if realm.password> -
      -
      - - - <#if usernameEditDisabled??> - - <#else> - - - <#if messagesPerField.existsError('username','password')> - - ${kcSanitize(messagesPerField.getFirstError('username','password'))?no_esc} - - - -
      - -
      - - - -
      - -
      -
      - <#if realm.rememberMe && !usernameEditDisabled??> -
      - -
      - -
      -
      - <#if realm.resetPasswordAllowed> - ${msg("doForgotPassword")} - -
      - -
      - -
      - value="${auth.selectedCredential}"/> - -
      -
      - -
      - - <#if realm.password && social.providers??> -
      -
      -

      ${msg("identity-provider-login-label")}

      - - -
      - - -
      - <#elseif section = "info" > - <#if realm.password && realm.registrationAllowed && !registrationDisabled??> -
      -
      - ${msg("noAccount")} ${msg("doRegister")} -
      -
      - - - - diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_de.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_de.properties deleted file mode 100644 index 85f429f8e..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_de.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Anmelden -needHelp=Brauchen Sie Hilfe? -selectAlternative=Alternativen Identit\u00e4tsanbieter ausw\u00e4hlen - -doRegister=Registrieren -doCancel=Abbrechen -doSubmit=Absenden -doYes=Ja -doNo=Nein -doContinue=Weiter -doIgnore=Ignorieren -doAccept=Annehmen -doDecline=Ablehnen -doForgotPassword=Passwort vergessen? -doClickHere=Hier klicken -doImpersonate=Identit\u00e4tswechsel -kerberosNotConfigured=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -kerberosNotConfiguredTitle=Kerberos ist nicht konfiguriert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -bypassKerberosDetail=Entweder sind Sie nicht bei Kerberos angemeldet oder Ihr Browser ist nicht f\u00fcr die Kerberos-Anmeldung eingerichtet. Klicken Sie auf 'Weiter'. um sich auf andere Weise anzumelden. -kerberosNotSetUp=Sie m\u00fcssen Kerberos einrichten, bevor Sie sich anmelden k\u00f6nnen. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -registerWithTitle=Registrieren mit {0} -registerWithTitleHtml={0} -loginTitle=Anmelden bei {0} -loginTitleHtml={0} -impersonateTitle={0} Identit\u00e4tswechsel -impersonateTitleHtml={0} Identit\u00e4tswechsel -realmChoice=Bereich -unknownUser=Unbekannter Benutzer -loginTotpTitle=Konfiguration von Mobile Authenticator -loginProfileTitle=Benutzerkonto-Angaben aktualisieren -loginTimeout=Sie haben zu lange gebraucht, sich anzumelden. Der Anmeldevorgang beginnt nun von vorne. -oauthGrantTitle=Zugriff gew\u00e4hren -oauthGrantTitleHtml={0} -errorTitle=Es tut uns Leid -errorTitleHtml=Es tut uns Leid -emailVerifyTitle=E-Mail-Adresse best\u00e4tigen -emailForgotTitle=Passwort vergessen? -updatePasswordTitle=Passwort aktualisieren -codeSuccessTitle=Code erfolgreich -codeErrorTitle=Fehlercode: {0} - -termsTitle=Bestimmungen -termsTitleHtml=Bestimmungen -termsText=

      Definition der Bestimmungen ausstehend

      - -recaptchaFailed=Ung\u00fcltiges Recaptcha -recaptchaNotConfigured=Recaptcha ist erforderlich und wurde nicht konfiguriert -consentDenied=Zustimmung verweigert. - -noAccount=Neuer Benutzer? -username=Benutzername -usernameOrEmail=Benutzername oder E-Mail -firstName=Vorname -givenName=Vorname -fullName=Vollst\u00e4ndiger Name -lastName=Nachname -familyName=Nachname -email=E-Mail -password=Passwort -passwordConfirm=Passwort best\u00e4tigen -passwordNew=Neues Passwort -passwordNewConfirm=Best\u00e4tigung des neuen Passworts -rememberMe=Benutzername und Passwort speichern -authenticatorCode=Einmaliger Code -address=Anschrift -street=Stra\u00dfe -locality=Ort -region=Staat, Provinz, Region -postal_code=Postleitzahl -country=Land -emailVerified=E-Mail-Adresse best\u00e4tigt -gssDelegationCredential=GSS-Delegations-Berechtigung - -loginTotpStep1=Installieren Sie eine der folgenden Anwendungen auf Ihrem Smartphone -loginTotpStep2=\u00d6ffnen Sie die Anwendung und scannen Sie den Barcode -loginTotpStep3=Geben Sie den von der Anwendung generierten einmaligen Code ein und klicken Sie 'Absenden', um die Konfiguration abzuschlie\u00dfen. -loginTotpManualStep2=\u00d6ffnen Sie die Anwendung und geben Sie den Schl\u00fcssel ein -loginTotpManualStep3=Verwenden Sie die folgenden Konfigurationswerte, wenn die Anwendung deren Konfiguration zul\u00e4sst -loginTotpUnableToScan=Sie k\u00f6nnen den Barcode nicht scannen? -loginTotpScanBarcode=Barcode scannen? -loginTotpOneTime=Einmaliger Code -loginTotpType=Typ -loginTotpAlgorithm=Algorithmus -loginTotpDigits=Ziffern -loginTotpInterval=Intervall - -loginTotp.totp=Zeitbasiert -loginTotp.hotp=Z\u00e4hlerbasiert - - -oauthGrantRequest=M\u00f6chten Sie diese Zugriffsrechte gew\u00e4hren? -inResource=in - -emailVerifyInstruction1=Eine E-Mail mit Anweisungen zur Best\u00e4tigung Ihrer E-Mail-Adresse wurde an Sie geschickt. -emailVerifyInstruction2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailVerifyInstruction3=um die E-Mail erneut zu schicken - -emailLinkIdpTitle={0} verkn\u00fcpfen -emailLinkIdp1=Eine E-Mail mit Anweisungen zur Verkn\u00fcpfung des {0}-Kontos {1} mit Ihrem {2}-Konto wurde an Sie geschickt. -emailLinkIdp2=Sie haben die E-Mail mit dem Best\u00e4tigungscode nicht erhalten? -emailLinkIdp3=um die E-Mail erneut zu schicken -emailLinkIdp4=Wenn Sie die E-Mail-Adresse bereits in einem anderen Browser best\u00e4tigt haben -emailLinkIdp5=um fortzufahren - -backToLogin=« Zur\u00fcck zur Anmeldung - -emailInstruction=Geben Sie Ihren Benutzernamen und Ihre E-Mail-Adresse ein. Wir werden Ihnen dann Anweisungen zum Erstellen eines neuen Passworts schicken. - -copyCodeInstruction=Kopieren Sie diesen Code und f\u00fcgen Sie Ihn in Ihrer Anwendung ein - -pageExpiredTitle=Seite abgelaufen -pageExpiredMsg1=Um den Anmeldevorgang neu zu beginnen -pageExpiredMsg2=Um den Anmeldevorgang fortzusetzen - -personalInfo=Pers\u00f6nliche Informationen: -role_admin=Admin -role_realm-admin=Bereichs-Admin -role_create-realm=Bereich erstellen -role_create-client=Client erstellen -role_view-realm=Bereich anzeigen -role_view-users=Benutzer anzeigen -role_view-applications=Anwendungen anzeigen -role_view-clients=Clients anzeigen -role_view-events=Ereignisse anzeigen -role_view-identity-providers=Identit\u00e4tsanbieter anzeigen -role_manage-realm=Bereich verwalten -role_manage-users=Benutzer verwalten -role_manage-applications=Anwendungen verwalten -role_manage-identity-providers=Identit\u00e4tsanbieter verwalten -role_manage-clients=Clients verwalten -role_manage-events=Ereignisse verwalten -role_view-profile=Profil von {0} anzeigen -role_manage-account=Benutzerkonto verwalten -role_manage-account-links=Kontoverkn\u00fcpfungen verwalten -role_read-token=Token lesen -role_offline-access=Offline-Zugriff -client_account=Konto -client_security-admin-console=Sicherheitsadministratorkonsole -client_admin-cli=Admin-CLI -client_realm-management=Bereichsverwaltung -client_broker=Broker - -invalidUserMessage=Benutzername oder Passwort ung\u00fcltig -invalidEmailMessage=E-Mail-Adresse ung\u00fcltig -accountDisabledMessage=Ihr Benutzerkonto wurde deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten. -accountTemporarilyDisabledMessage=Ihr Benutzerkonto wurde vor\u00fcbergehend deaktiviert. Wenden Sie sich an Ihren Systemadministrator, um weitere Informationen zu erhalten, oder versuchen Sie es sp\u00e4ter noch einmal. -expiredCodeMessage=Ihre Sitzung ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. -expiredActionTokenNoSessionMessage=Ihre Aktion ist abgelaufen -expiredActionTokenSessionExistsMessage=Ihre Aktion ist abgelaufen. Melden Sie sich bitte neu an. - -missingFirstNameMessage=Geben Sie Ihren Vornamen ein -missingLastNameMessage=Geben Sie Ihren Nachnamen eine -missingEmailMessage=Geben Sie Ihre E-Mail-Adresse ein -missingUsernameMessage=Geben Sie Ihren Benutzernamen ein -missingPasswordMessage=Geben Sie Ihr Passwort ein -missingTotpMessage=Geben Sie Ihren Authentifizierungscode ein -notMatchPasswordMessage=Wir k\u00f6nnen Sie nicht anmelden. Die eingegebenen Passw\u00f6rter stimmen nicht \u00fcberein. - -invalidPasswordExistingMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden ung\u00fcltig. -invalidPasswordBlacklistedMessage=Wir k\u00f6nnen Sie nicht anmelden. Das eingegebene Passwort ist unter Umst\u00e4nden gesperrt. -invalidPasswordConfirmMessage=Wir k\u00f6nnen Sie nicht anmelden. Das Passwort, das Sie zur Best\u00e4tigung eingegeben haben, stimmt nicht mit dem zuerst eingegebenen Passwort \u00fcberein. -invalidTotpMessage=Wir k\u00f6nnen Sie nicht anmelden. Der eingegebene Authentifizierungscode ist unter Umst\u00e4nden ung\u00fcltig. - -usernameExistsMessage=Benutzername bereits vorhanden -emailExistsMessage=E-Mail-Adresse bereits vorhanden - -federatedIdentityExistsMessage=Benutzer mit {0} {1} gibt es bereits. Melden Sie sich in der Benutzerkontoverwaltung an, um das Benutzerkonto zu verkn\u00fcpfen. - -confirmLinkIdpTitle=Benutzerkonto bereits vorhanden -federatedIdentityConfirmLinkMessage=Benutzer mit {0} {1} gibt es bereits. Wie m\u00f6chten Sie fortfahren? -federatedIdentityConfirmReauthenticateMessage=Als {0} authentifizieren, um das Benutzerkonto mit {1} zu verkn\u00fcpfen -confirmLinkIdpReviewProfile=Profil \u00fcberpr\u00fcfen -confirmLinkIdpContinue=Zu bestehendem Benutzerkonto hinzuf\u00fcgen - -configureTotpMessage=Sie m\u00fcssen Mobile Authenticator einrichten, um Ihr Benutzerkonto zu aktivieren -updateProfileMessage=Sie m\u00fcssen Ihr Benutzerprofil aktualisieren, um Ihr Benutzerkonto zu aktivieren -updatePasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern, um Ihr Benutzerkonto zu aktivieren -resetPasswordMessage=Sie m\u00fcssen Ihr Passwort \u00e4ndern -verifyEmailMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto zu aktivieren -linkIdpMessage=Sie m\u00fcssen Ihre E-Mail-Adresse best\u00e4tigen, um Ihr Benutzerkonto mit {0} zu verkn\u00fcpfen - -emailSentMessage=Sie werden in K\u00fcrze eine E-Mail mit weiteren Anweisungen erhalten. -emailSendErrorMessage=Wir konnten die E-Mail leider nicht senden. Versuchen Sie es sp\u00e4ter noch einmal. - -accountUpdatedMessage=Ihr Benutzerkonto wurde aktualisiert -accountPasswordUpdatedMessage=Ihr Passwort wurde aktualisiert - -noAccessMessage=Kein Zugriff - -invalidPasswordMinLengthMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Zeichen lang sein -invalidPasswordMinDigitsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Ziffern enthalten -invalidPasswordMinLowerCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Kleinbuchstaben enthalten -invalidPasswordMinUpperCaseCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Gro\u00dfbuchstaben enthalten -invalidPasswordMinSpecialCharsMessage=Passw\u00f6rter m\u00fcssen mindestens {0} Sonderzeichen enthalten -invalidPasswordNotUsernameMessage=Passwort und Benutzername d\u00fcrfen nicht identisch sein -invalidPasswordRegexPatternMessage=Passw\u00f6rter m\u00fcssen dem Regex-Muster entsprechen -invalidPasswordHistoryMessage=Das neue Passwort darf nicht mit einem der {0} letzten Passw\u00f6rter identisch sein -invalidPasswordGenericMessage=Ihr Passwort erf\u00fcllt nicht die Passwort-Anforderungen - -failedToProcessResponseMessage=Antwort konnte nicht verarbeitet werden -httpsRequiredMessage=HTTPS erforderlich -realmNotEnabledMessage=Bereich nicht aktiviert -invalidRequestMessage=Unzul\u00e4ssige Anfrage -failedLogout=Abmeldung fehlgeschlagen -unknownLoginRequesterMessage=Unbekannter Anmeldungs-Anfrager -loginRequesterNotEnabledMessage=Anmeldungs-Anfrager nicht aktiviert -bearerOnlyMessage=Bearer-only-Anwendungen k\u00f6nnen keine Browser-Anmeldung initiieren -standardFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Standardfluss ist f\u00fcr diesen Client deaktiviert. -implicitFlowDisabledMessage=Client darf mit diesem Antworttyp keine Browser-Anmeldung initiieren. Impliziter Fluss ist f\u00fcr diesen Client deaktiviert. -invalidRedirectUriMessage=Umleitungs-URI ung\u00fcltig -unsupportedNameIdFormatMessage=Nicht unterst\u00fctztes NameIDFormat -invalidRequesterMessage=Ung\u00fcltiger Anfrager -registrationNotAllowedMessage=Registrierung nicht erlaubt -resetCredentialNotAllowedMessage=Zur\u00fccksetzen der Anmeldedaten nicht erlaubt - -permissionNotApprovedMessage=Berechtigung verweigert -noRelayStateInResponseMessage=Kein Relay-Zustand als Antwort von Identit\u00e4tsanbieter -insufficientPermissionMessage=Nicht ausreichend Berechtigungen zum Verkn\u00fcpfen von Identit\u00e4ten -couldNotProceedWithAuthenticationRequestMessage=Authentifizierungsanfrage an Identit\u00e4tsanbieter konnte nicht fortgesetzt werden -couldNotObtainTokenMessage=Token konnte nicht von Identit\u00e4tsanbieter eingeholt werden -unexpectedErrorRetrievingTokenMessage=Unbekannter Fehler beim Abrufen des Token vom Identit\u00e4tsanbieter -unexpectedErrorHandlingResponseMessage=Unbekannter Fehler bei Verarbeitung der Antwort vom Identit\u00e4tsanbieter -identityProviderAuthenticationFailedMessage=Authentifizierung fehlgeschlagen. Authentifizierung bei Identit\u00e4tsanbieter war nicht m\u00f6glich -identityProviderDifferentUserMessage=Als {0} authentifiziert, aber Authentifizierung als {1} erwartet -couldNotSendAuthenticationRequestMessage=Authentifizierungsanfrage konnte nicht an Identit\u00e4tsanbieter gesendet werden -unexpectedErrorHandlingRequestMessage=Unbekannter Fehler bei Verarbeitung der Authentifizierungsanfrage an den Identit\u00e4tsanbieter -invalidAccessCodeMessage=Zugangscode ung\u00fcltig -sessionNotActiveMessage=Sitzung nicht aktiv -invalidCodeMessage=Es ist ein Problem aufgetreten. Melden Sie sich \u00fcber Ihre Anwendung neu an. -identityProviderUnexpectedErrorMessage=Es ist ein Problem aufgetreten. Sie konnten nicht vom Identit\u00e4tsanbieter authentifiziert werden. -identityProviderNotFoundMessage=Kein Identit\u00e4tsanbieter mit der Kennung gefunden -identityProviderLinkSuccess=Sie haben Ihre E-Mail-Adresse erfolgreich best\u00e4tigt. Kehren Sie zu Ihrem urspr\u00fcnglichen Browser-Fenster zur\u00fcck und fahren Sie mit der Anmeldung fort. -staleCodeMessage=Diese Seite ist nicht mehr g\u00fcltig. Kehren Sie zu Ihrer Anwendung zur\u00fcck und melden Sie sich erneut an. -realmSupportsNoCredentialsMessage=Bereich unterst\u00fctzt keine Anmeldedaten-Typen. -identityProviderNotUniqueMessage=Der Bereich unterst\u00fctzt mehrere Identit\u00e4tsanbieter. Es konnte kein eindeutiger Identit\u00e4tsanbieter zum Authentifizieren gew\u00e4hlt werden. -emailVerifiedMessage=Ihre E-Mail-Adresse wurde best\u00e4tigt -staleEmailVerificationLink=Der Link ist nicht mehr g\u00fcltig. Wom\u00f6glich haben Sie Ihre E-Mail-Adresse bereits best\u00e4tigt. -identityProviderAlreadyLinkedMessage=Die von {0} zur\u00fcckgegebene f\u00f6derierte Identit\u00e4t ist bereits mit einem anderen Benutzer verkn\u00fcpft -confirmAccountLinking=Best\u00e4tigung der Verkn\u00fcpfung des Benutzerkontos {0} von Identit\u00e4tsanbieter {1} mit Ihrem Benutzerkonto -confirmEmailAddressVerification=Best\u00e4tigung der E-Mail-Adresse {0} -confirmExecutionOfActions=F\u00fchren Sie die folgende(n) Aktion(en) aus - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Zur\u00fcck zur Anwendung -missingParameterMessage=Fehlender Parameter: {0} -clientNotFoundMessage=Client nicht gefunden -clientDisabledMessage=Client deaktiviert -invalidParameterMessage=Ung\u00fcltiger Parameter: {0} -alreadyLoggedIn=Sie sind bereits angemeldet -differentUserAuthenticated=Sie sind bereits als ein anderer Benutzer ''{0}'' in dieser Sitzung angemeldet. Versuchen Sie noch einmal, sich anzumelden. -brokerLinkingSessionExpired=Verkn\u00fcpfung des Broker-Kontos angefordert; Ihre Sitzung ist allerdings nicht mehr g\u00fcltig. -proceedWithAction=» Klicken Sie hier, um fortzufahren - -requiredAction.CONFIGURE_TOTP=Einmalpasswort konfigurieren -requiredAction.terms_and_conditions=Bestimmungen -requiredAction.UPDATE_PASSWORD=Passwort aktualisieren -requiredAction.UPDATE_PROFILE=Profil aktualisieren -requiredAction.VERIFY_EMAIL=E-Mail-Adresse best\u00e4tigen - -p3pPolicy=CP="Das ist keine P3P-Richtlinie!" - -doX509Login=Sie werden angemeldet als: -clientCertificate=X509-Client-Zertifikat: -noCertificate=[Kein Zertifikat] - - -pageNotFound=Diese Seite ist nicht verf\u00fcgbar -internalServerError=Es ist ein Problem aufgetreten diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_en.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_en.properties deleted file mode 100644 index ccdcf81ad..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_en.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Sign in -needHelp=Need help? -selectAlternative=Or select an alternative - -doRegister=Register -doCancel=Cancel -doSubmit=Submit -doYes=Yes -doNo=No -doContinue=Continue -doIgnore=Ignore -doAccept=Accept -doDecline=Decline -doForgotPassword=Forgotten your password? -doClickHere=Click here -doImpersonate=Impersonate -kerberosNotConfigured=Kerberos is not configured. Contact your System Administrator for more information. -kerberosNotConfiguredTitle=Kerberos is not configured. Contact your System Administrator for more information. -bypassKerberosDetail=Either you are not signed in via Kerberos or your browser is not set up for Kerberos sign in. Please click continue to sign in through other means. -kerberosNotSetUp=You need to set up Kerberos before you can sign in. Contact your System Administrator for more information. -registerWithTitle=Register with {0} -registerWithTitleHtml={0} -loginTitle=Sign in to {0} -loginTitleHtml={0} -impersonateTitle={0} Impersonate user -impersonateTitleHtml={0} Impersonate user -realmChoice=Realm -unknownUser=Unknown user -loginTotpTitle=Mobile Authenticator Setup -loginProfileTitle=Update Account Information -loginTimeout=You took too long to sign in. The sign in process is starting from the beginning. -oauthGrantTitle=Grant access -oauthGrantTitleHtml={0} -errorTitle=We're sorry -errorTitleHtml=We're sorry -emailVerifyTitle=Email verification -emailForgotTitle=Forgotten your password? -updatePasswordTitle=Update password -codeSuccessTitle=Success code -codeErrorTitle=Error code: {0} - -termsTitle=Terms and Conditions -termsTitleHtml=Terms and Conditions -termsText=

      Terms and conditions to be defined

      - -recaptchaFailed=Invalid Recaptcha -recaptchaNotConfigured=Recaptcha is required and has not been configured -consentDenied=Consent denied. - -noAccount=New user? -username=Username -usernameOrEmail=mobile or email -firstName=First name -givenName=Given name -fullName=Full name -lastName=Last name -familyName=Family name -email=Email -password=Password -passwordConfirm=Confirm password -passwordNew=New Password -passwordNewConfirm=New password confirmation -rememberMe=Remember me -authenticatorCode=One-time code -address=Address -street=Street -locality=City or Locality -region=State, Province, or Region -postal_code=Zip or Postal code -country=Country -emailVerified=Email verified -gssDelegationCredential=GSS Delegation Credential - -loginTotpStep1=Install one of the following applications on your mobile -loginTotpStep2=Open the application and scan the barcode -loginTotpStep3=Enter the one-time code provided by the application and click Submit to finish the setup -loginTotpManualStep2=Open the application and enter the key -loginTotpManualStep3=Use the following configuration values if the application allows them to be set -loginTotpUnableToScan=Unable to scan? -loginTotpScanBarcode=Scan barcode? -loginTotpOneTime=One-time code -loginTotpType=Type -loginTotpAlgorithm=Algorithm -loginTotpDigits=Digits -loginTotpInterval=Interval - -loginTotp.totp=Time-based -loginTotp.hotp=Counter-based - - -oauthGrantRequest=Do you grant these access privileges? -inResource=in - -emailVerifyInstruction1=An email with instructions to verify your email address has been sent to you -emailVerifyInstruction2=Haven't received a verification code in your email? -emailVerifyInstruction3=to re-send the email - -emailLinkIdpTitle=Link {0} -emailLinkIdp1=An email with instructions to link {0} account {1} with your {2} account has been sent to you -emailLinkIdp2=Haven't received a verification code in your email? -emailLinkIdp3=to re-send the email -emailLinkIdp4=If you've already verified the email in a different browser -emailLinkIdp5=to continue - -backToLogin=« Back to Sign in - -emailInstruction=Enter your username or email address and we will send you instructions on how to create a new password - -copyCodeInstruction=Copy this code and paste it into your application - -pageExpiredTitle=Page has expired -pageExpiredMsg1=To restart the sign in process -pageExpiredMsg2=To continue the sign in process - -personalInfo=Personal Info: -role_admin=Admin -role_realm-admin=Realm Admin -role_create-realm=Create realm -role_create-client=Create client -role_view-realm=View realm -role_view-users=View users -role_view-applications=View applications -role_view-clients=View clients -role_view-events=View events -role_view-identity-providers=View identity providers -role_manage-realm=Manage realm -role_manage-users=Manage users -role_manage-applications=Manage applications -role_manage-identity-providers=Manage identity providers -role_manage-clients=Manage clients -role_manage-events=Manage events -role_view-profile=View profile -role_manage-account=Manage account -role_manage-account-links=Manage account links -role_read-token=Read token -role_offline-access=Offline access -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm Management -client_broker=Broker - -invalidUserMessage=Invalid username or password -invalidEmailMessage=Invalid email address -accountDisabledMessage=Your account is disabled. Contact your System Administrator for more information. -accountTemporarilyDisabledMessage=Your account is temporarily disabled. Contact your System Administrator for more information or try again later. -expiredCodeMessage=Your session has timed out. Try signing in again. -expiredActionMessage=Your action has expired. Try signing in again. -expiredActionTokenNoSessionMessage=Your action has expired -expiredActionTokenSessionExistsMessage=Your action has expired. Try signing in again. - -missingFirstNameMessage=Type your first name -missingLastNameMessage=Type your last name -missingEmailMessage=Type your email address -missingUsernameMessage=Type your username -missingPasswordMessage=Type your password -missingTotpMessage=Type your authenticator code -notMatchPasswordMessage=We're having problems signing you in. The passwords you entered don't match. - -invalidPasswordExistingMessage=We're having problems signing you in. The password you entered may be invalid. -invalidPasswordBlacklistedMessage=We're having problems signing you in. The password you entered may be blacklisted. -invalidPasswordConfirmMessage=We're having problems signing you in. The password confirmation you entered doesn't match. -invalidTotpMessage=We're having problems signing you in. The authenticator code you entered may be invalid. - -usernameExistsMessage=Username already exists -emailExistsMessage=Email already exists - -federatedIdentityExistsMessage=User with {0} {1} already exists. Sign in to Account Management to link the account. - -confirmLinkIdpTitle=Account already exists -federatedIdentityConfirmLinkMessage=User with {0} {1} already exists. How do you want to continue? -federatedIdentityConfirmReauthenticateMessage=Authenticate as {0} to link your account with {1} -confirmLinkIdpReviewProfile=Review profile -confirmLinkIdpContinue=Add to existing account - -configureTotpMessage=You need to set up Mobile Authenticator to activate your account -updateProfileMessage=You need to update your user profile to activate your account -updatePasswordMessage=You need to change your password to activate your account -resetPasswordMessage=You need to change your password -verifyEmailMessage=You need to verify your email address to activate your account -linkIdpMessage=You need to verify your email address to link your account with {0} - -emailSentMessage=You will receive an email shortly with further instructions -emailSendErrorMessage=We have been unable to send the email. Try again later. - -accountUpdatedMessage=Your account has been updated -accountPasswordUpdatedMessage=Your password has been updated - -noAccessMessage=No access - -invalidPasswordMinLengthMessage=Passwords must have a minimum length of {0} characters -invalidPasswordMinDigitsMessage=Passwords must have a minimum of {0} numbers -invalidPasswordMinLowerCaseCharsMessage=Passwords must have a minimum of {0} lower case characters -invalidPasswordMinUpperCaseCharsMessage=Passworrds must have a minimum of {0} upper case characters -invalidPasswordMinSpecialCharsMessage=Passwords must have a minimum of {0} special characters -invalidPasswordNotUsernameMessage=Your password can't be your username -invalidPasswordRegexPatternMessage=Passwords must match the regex pattern -invalidPasswordHistoryMessage=Passwords must not be equal to any of the last {0} passwords -invalidPasswordGenericMessage=Your password doesn't match the password policy - -failedToProcessResponseMessage=Failed to process response -httpsRequiredMessage=HTTPS required -realmNotEnabledMessage=Realm not enabled -invalidRequestMessage=Invalid request -failedLogout=Logout failed -unknownLoginRequesterMessage=Unknown login requester -loginRequesterNotEnabledMessage=Login requester not enabled -bearerOnlyMessage=Bearer-only applications are not allowed to initiate browser login -standardFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Standard flow is disabled for the client. -implicitFlowDisabledMessage=Client is not allowed to initiate browser login with given response_type. Implicit flow is disabled for the client. -invalidRedirectUriMessage=Invalid redirect uri -unsupportedNameIdFormatMessage=Unsupported NameIDFormat -invalidRequesterMessage=Invalid requester -registrationNotAllowedMessage=Registration not allowed -resetCredentialNotAllowedMessage=Reset Credential not allowed - -permissionNotApprovedMessage=Permission denied -noRelayStateInResponseMessage=No relay state in response from identity provider -insufficientPermissionMessage=Insufficient permissions to link identities -couldNotProceedWithAuthenticationRequestMessage=Could not proceed with authentication request to identity provider -couldNotObtainTokenMessage=Could not obtain token from identity provider -unexpectedErrorRetrievingTokenMessage=Unexpected error when retrieving token from identity provider -unexpectedErrorHandlingResponseMessage=Unexpected error when handling response from identity provider -identityProviderAuthenticationFailedMessage=Authentication failed. Could not authenticate with identity provider -identityProviderDifferentUserMessage=Authenticated as {0}, but expected to be authenticated as {1} -couldNotSendAuthenticationRequestMessage=Could not send authentication request to identity provider -unexpectedErrorHandlingRequestMessage=Unexpected error when handling authentication request to identity provider -invalidAccessCodeMessage=Invalid access code -sessionNotActiveMessage=Session not active -invalidCodeMessage=We hit a problem. Try signing in again through your application. -identityProviderUnexpectedErrorMessage=We hit a problem. It wasn't possible to authenticate with the identity provider. -identityProviderNotFoundMessage=Could not find an identity provider with the identifier -identityProviderLinkSuccess=You successfully verified your email. Go back to your original browser and continue with the sign in. -staleCodeMessage=This page is no longer valid. Go back to your application and sign in again. -realmSupportsNoCredentialsMessage=Realm does not support any credential type. -identityProviderNotUniqueMessage=Realm supports multiple identity providers. Could not determine which identity provider should be used to authenticate with. -emailVerifiedMessage=Your email address has been verified -staleEmailVerificationLink=The link is no longer valid. You may have already verified your email address. -identityProviderAlreadyLinkedMessage=Federated identity returned by {0} is already linked to another user -confirmAccountLinking=Confirm linking the account {0} of identity provider {1} with your account -confirmEmailAddressVerification=Confirm validity of e-mail address {0} -confirmExecutionOfActions=Perform the following action(s) - -locale_ca=Catal\u00E0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00F1ol -locale_fr=Fran\u00e7ais -locale_it=Italian -locale_ja=\u65E5\u672C\u8A9E -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00EAs (Brasil) -locale_pt-BR=Portugu\u00EAs (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043A\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Back to Application -missingParameterMessage=Missing parameters: {0} -clientNotFoundMessage=Client not found -clientDisabledMessage=Client disabled -invalidParameterMessage=Invalid parameter: {0} -alreadyLoggedIn=You are already signed in -differentUserAuthenticated=You are already signed in as different user '{0}' in this session. Try signing in again. -brokerLinkingSessionExpired=Requested broker account linking, but current session is no longer valid. -proceedWithAction=» Click here to proceed - -requiredAction.CONFIGURE_TOTP=Configure OTP -requiredAction.terms_and_conditions=Terms and Conditions -requiredAction.UPDATE_PASSWORD=Update Password -requiredAction.UPDATE_PROFILE=Update Profile -requiredAction.VERIFY_EMAIL=Verify Email - -p3pPolicy=CP="This is not a P3P policy!" - -doX509Login=You will be signed in as: -clientCertificate=X509 client certificate: -noCertificate=[No Certificate] - - -pageNotFound=This page is not available -internalServerError=We hit a problem diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_es.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_es.properties deleted file mode 100644 index 3a46e9f6c..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_es.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Iniciar sesi\u00f3n -needHelp=\u00bfNecesita ayuda? -selectAlternative=O seleccione otra alternativa - -doRegister=Registrarse -doCancel=Cancelar -doSubmit=Enviar -doYes=S\u00ed -doNo=No -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceptar -doDecline=Rechazar -doForgotPassword=\u00bfHa olvidado su contrase\u00f1a? -doClickHere=Pulse aqu\u00ed -doImpersonate=Suplantar -kerberosNotConfigured=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -kerberosNotConfiguredTitle=Kerberos no est\u00e1 configurado. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -bypassKerberosDetail=O bien no ha iniciado sesi\u00f3n por medio de Kerberos o su navegador no est\u00e1 configurado para iniciar sesi\u00f3n por Kerberos. Haga clic en Continuar para iniciar sesi\u00f3n por otros medios. -kerberosNotSetUp=Debe configurar Kerberos para poder iniciar sesi\u00f3n. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -registerWithTitle=Registrarse con {0} -registerWithTitleHtml={0} -loginTitle=Iniciar sesi\u00f3n en {0} -loginTitleHtml={0} -impersonateTitle={0}\u00a0Suplantar usuario -impersonateTitleHtml={0} Suplantar usuario -realmChoice=Dominio -unknownUser=Usuario desconocido -loginTotpTitle=Configuraci\u00f3n de Mobile Authenticator -loginProfileTitle=Actualizar informaci\u00f3n de cuenta -loginTimeout=Ha tardado demasiado en iniciar sesi\u00f3n. El proceso de inicio de sesi\u00f3n comenzar\u00e1 desde el principio. -oauthGrantTitle=Conceder acceso -oauthGrantTitleHtml={0} -errorTitle=Lo sentimos -errorTitleHtml=Lo sentimos -emailVerifyTitle=Verificaci\u00f3n de correo electr\u00f3nico -emailForgotTitle=\u00bfHa olvidado su contrase\u00f1a? -updatePasswordTitle=Actualizar contrase\u00f1a -codeSuccessTitle=C\u00f3digo de operaci\u00f3n correcta -codeErrorTitle=C\u00f3digo de error: {0} - -termsTitle=T\u00e9rminos y condiciones -termsTitleHtml=T\u00e9rminos y condiciones -termsText=

      T\u00e9rminos y condiciones por definir

      - -recaptchaFailed=Reconocimiento de texto no v\u00e1lido -recaptchaNotConfigured=El reconocimiento de texto es obligatorio, pero no se ha configurado -consentDenied=Consentimiento denegado. - -noAccount=\u00bfUsuario nuevo? -username=Nombre de usuario -usernameOrEmail=Nombre de usuario o correo electr\u00f3nico -firstName=Nombre -givenName=Nombre de pila -fullName=Nombre completo -lastName=Apellidos -familyName=Apellidos -email=Correo electr\u00f3nico -password=Contrase\u00f1a -passwordConfirm=Confirmar contrase\u00f1a -passwordNew=Nueva contrase\u00f1a -passwordNewConfirm=Confirmaci\u00f3n de nueva contrase\u00f1a -rememberMe=Recordarme -authenticatorCode=C\u00f3digo de verificaci\u00f3n de un solo uso -address=Direcci\u00f3n -street=Calle -locality=Ciudad o municipio -region=Estado, provincia o regi\u00f3n -postal_code=C\u00f3digo postal -country=Pa\u00eds -emailVerified=Correo electr\u00f3nico verificado -gssDelegationCredential=Credenciales de delegaci\u00f3n GSS - -loginTotpStep1=Instale una de las aplicaciones siguientes en su m\u00f3vil -loginTotpStep2=Abra la aplicaci\u00f3n y escanee el c\u00f3digo de barras -loginTotpStep3=Introduzca el c\u00f3digo de un solo uso proporcionado por la aplicaci\u00f3n y haga clic en Enviar para finalizar la configuraci\u00f3n -loginTotpManualStep2=Abra la aplicaci\u00f3n e introduzca la clave -loginTotpManualStep3=Utilice los siguientes valores de configuraci\u00f3n si la aplicaci\u00f3n le permite establecerlos -loginTotpUnableToScan=\u00bfNo puede escanear? -loginTotpScanBarcode=\u00bfEscanear el c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verificaci\u00f3n de un solo uso -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Con duraci\u00f3n definida -loginTotp.hotp=Con contador - - -oauthGrantRequest=\u00bfConcede estos privilegios de acceso? -inResource=en - -emailVerifyInstruction1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para verificar su direcci\u00f3n de correo electr\u00f3nico -emailVerifyInstruction2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailVerifyInstruction3=para reenviar el mensaje de correo electr\u00f3nico - -emailLinkIdpTitle=Enlace {0} -emailLinkIdp1=Se le ha enviado un mensaje de correo electr\u00f3nico con instrucciones para enlazar la cuenta {0} {1} con su cuenta {2} -emailLinkIdp2=\u00bfNo ha recibido un c\u00f3digo de verificaci\u00f3n en el mensaje de correo electr\u00f3nico? -emailLinkIdp3=para reenviar el mensaje de correo electr\u00f3nico -emailLinkIdp4=Si ya ha verificado el correo electr\u00f3nico en otro navegador -emailLinkIdp5=para continuar - -backToLogin=« Volver a Iniciar sesi\u00f3n - -emailInstruction=Introduzca su nombre de usuario o su direcci\u00f3n de correo electr\u00f3nico, y le enviaremos instrucciones para crear una contrase\u00f1a nueva - -copyCodeInstruction=Copie este c\u00f3digo y p\u00e9guelo en su aplicaci\u00f3n - -pageExpiredTitle=La p\u00e1gina ha expirado -pageExpiredMsg1=Para reiniciar el proceso de inicio de sesi\u00f3n -pageExpiredMsg2=Para continuar el proceso de inicio de sesi\u00f3n - -personalInfo=Informaci\u00f3n personal: -role_admin=Administrador -role_realm-admin=Administrador del dominio -role_create-realm=Crear dominio -role_create-client=Crear cliente -role_view-realm=Ver dominio -role_view-users=Ver usuarios -role_view-applications=Ver aplicaciones -role_view-clients=Ver clientes -role_view-events=Ver eventos -role_view-identity-providers=Ver proveedores de identidad -role_manage-realm=Gestionar dominio -role_manage-users=Gestionar usuarios -role_manage-applications=Gestionar aplicaciones -role_manage-identity-providers=Gestionar proveedores de identidad -role_manage-clients=Gestionar clientes -role_manage-events=Gestionar eventos -role_view-profile=Ver perfil -role_manage-account=Gestionar cuenta -role_manage-account-links=Gestionar enlaces de cuenta -role_read-token=Leer token -role_offline-access=Acceso fuera de l\u00ednea -client_account=Cuenta -client_security-admin-console=Consola de administraci\u00f3n de seguridad -client_admin-cli=CLI de administraci\u00f3n -client_realm-management=Gesti\u00f3n de dominios -client_broker=Broker - -invalidUserMessage=Nombre de usuario o contrase\u00f1a no v\u00e1lidos -invalidEmailMessage=Direcci\u00f3n de correo electr\u00f3nico no v\u00e1lida -accountDisabledMessage=Su cuenta est\u00e1 desactivada. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n. -accountTemporarilyDisabledMessage=Su cuenta est\u00e1 desactivada temporalmente. P\u00f3ngase en contacto con el administrador del sistema para obtener m\u00e1s informaci\u00f3n o vuelva a intentarlo m\u00e1s tarde. -expiredCodeMessage=Se ha agotado del tiempo de espera de la sesi\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. -expiredActionTokenNoSessionMessage=Se ha agotado del tiempo de espera de la acci\u00f3n -expiredActionTokenSessionExistsMessage=Se ha agotado del tiempo de espera de la acci\u00f3n. Vuelva a iniciar sesi\u00f3n. - -missingFirstNameMessage=Escriba su nombre -missingLastNameMessage=Escriba sus apellidos -missingEmailMessage=Escriba su direcci\u00f3n de correo electr\u00f3nico -missingUsernameMessage=Escriba su nombre de usuario -missingPasswordMessage=Escriba su contrase\u00f1a -missingTotpMessage=Escriba su c\u00f3digo de autenticador -notMatchPasswordMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Las contrase\u00f1as introducidas no coinciden. - -invalidPasswordExistingMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida no sea v\u00e1lida. -invalidPasswordBlacklistedMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que la contrase\u00f1a introducida est\u00e9 restringida. -invalidPasswordConfirmMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. La contrase\u00f1a de confirmaci\u00f3n introducida no coincide. -invalidTotpMessage=Estamos teniendo problemas con su inicio de sesi\u00f3n. Puede que el c\u00f3digo de autenticador introducido no sea v\u00e1lido. - -usernameExistsMessage=El nombre de usuario ya existe -emailExistsMessage=La direcci\u00f3n de correo electr\u00f3nico ya existe - -federatedIdentityExistsMessage=Ya existe un usuario con {0} {1}. Inicie sesi\u00f3n en Gesti\u00f3n de cuenta para enlazar la cuenta. - -confirmLinkIdpTitle=La cuenta ya existe -federatedIdentityConfirmLinkMessage=Ya existe un usuario con {0} {1}. \u00bfC\u00f3mo desea continuar? -federatedIdentityConfirmReauthenticateMessage=Autent\u00edquese como {0} para enlazar su cuenta con {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=A\u00f1adir a cuenta existente - -configureTotpMessage=Debe configurar Mobile Authenticator para activar su cuenta -updateProfileMessage=Debe actualizar su perfil de usuario para activar su cuenta -updatePasswordMessage=Debe cambiar su contrase\u00f1a para activar su cuenta -resetPasswordMessage=Debe cambiar su contrase\u00f1a -verifyEmailMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para activar su cuenta -linkIdpMessage=Debe verificar su direcci\u00f3n de correo electr\u00f3nico para enlazar su cuenta con {0} - -emailSentMessage=Recibir\u00e1 un mensaje de correo electr\u00f3nico en breve con m\u00e1s instrucciones -emailSendErrorMessage=No hemos podido enviarle el mensaje de correo electr\u00f3nico. Vuelva a intentarlo m\u00e1s tarde. - -accountUpdatedMessage=Su cuenta se ha actualizado -accountPasswordUpdatedMessage=Su contrase\u00f1a se ha actualizado - -noAccessMessage=Sin acceso - -invalidPasswordMinLengthMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres -invalidPasswordMinDigitsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} n\u00fameros -invalidPasswordMinLowerCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en min\u00fascula -invalidPasswordMinUpperCaseCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres en may\u00fascula -invalidPasswordMinSpecialCharsMessage=Las contrase\u00f1as deben contener un m\u00ednimo de {0} caracteres especiales -invalidPasswordNotUsernameMessage=La contrase\u00f1a no puede ser igual que el nombre de usuario -invalidPasswordRegexPatternMessage=Las contrase\u00f1as deben coincidir con el patr\u00f3n regex -invalidPasswordHistoryMessage=Las contrase\u00f1as no pueden ser iguales a ninguna de las {0} \u00faltimas -invalidPasswordGenericMessage=Su contrase\u00f1a no cumple la pol\u00edtica de contrase\u00f1as - -failedToProcessResponseMessage=Fallo al procesar la respuesta -httpsRequiredMessage=HTTPS obligatorio -realmNotEnabledMessage=Dominio no activado -invalidRequestMessage=Solicitud no v\u00e1lida -failedLogout=Fallo al cerrar la sesi\u00f3n -unknownLoginRequesterMessage=Solicitante de inicio de sesi\u00f3n desconocido -loginRequesterNotEnabledMessage=Solicitante de inicio de sesi\u00f3n no activado -bearerOnlyMessage=Las aplicaciones de solo portador (bearer-only) no pueden iniciar sesi\u00f3n en el navegador -standardFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo est\u00e1ndar est\u00e1 desactivado para el cliente. -implicitFlowDisabledMessage=El cliente no puede iniciar sesi\u00f3n en el navegador con el tipo de respuesta proporcionado. El flujo impl\u00edcito est\u00e1 desactivado para el cliente. -invalidRedirectUriMessage=URI de redirecci\u00f3n no v\u00e1lido -unsupportedNameIdFormatMessage=NameIDFormat no compatible -invalidRequesterMessage=Solicitante no v\u00e1lido -registrationNotAllowedMessage=Registro no permitido -resetCredentialNotAllowedMessage=Credenciales de reinicio no permitidas - -permissionNotApprovedMessage=Permiso denegado -noRelayStateInResponseMessage=Ausencia del estado de retransmisi\u00f3n en la respuesta del proveedor de identidad -insufficientPermissionMessage=Permisos insuficientes para enlazar identidad -couldNotProceedWithAuthenticationRequestMessage=No se pudo proceder con la solicitud de autenticaci\u00f3n al proveedor de identidad -couldNotObtainTokenMessage=No se pudo obtener un token del proveedor de identidad -unexpectedErrorRetrievingTokenMessage=Error inesperado al recuperar token del proveedor de identidad -unexpectedErrorHandlingResponseMessage=Error inesperado al gestionar respuesta del proveedor de identidad -identityProviderAuthenticationFailedMessage=Fallo de autenticaci\u00f3n. No pudo autenticarse con el proveedor de identidad -identityProviderDifferentUserMessage=Autenticado como {0}, pero se esperaba como {1} -couldNotSendAuthenticationRequestMessage=No se pudo enviar la solicitud de autenticaci\u00f3n al proveedor de identidad -unexpectedErrorHandlingRequestMessage=Error inesperado al gestionar la solicitud de autenticaci\u00f3n al proveedor de identidad -invalidAccessCodeMessage=C\u00f3digo de acceso no v\u00e1lido -sessionNotActiveMessage=Sesi\u00f3n inactiva -invalidCodeMessage=Ha surgido un problema. Vuelva a intentar iniciar sesi\u00f3n en su aplicaci\u00f3n. -identityProviderUnexpectedErrorMessage=Ha surgido un problema. No hemos podido autenticarle con el proveedor de identidades. -identityProviderNotFoundMessage=No hemos encontrado un proveedor de identidad con el identificador -identityProviderLinkSuccess=Ha verificado su correo electr\u00f3nico correctamente. Vuelva a su navegador original y contin\u00fae con el inicio de sesi\u00f3n. -staleCodeMessage=Esta p\u00e1gina ya no es v\u00e1lida. Vuelva a su aplicaci\u00f3n e inicie una nueva sesi\u00f3n. -realmSupportsNoCredentialsMessage=El dominio no es compatible con ning\u00fan tipo de credenciales. -identityProviderNotUniqueMessage=El dominio es compatible con varios proveedores de identidad. No se pudo determinar qu\u00e9 proveedor de identidad debe utilizarse para la identificaci\u00f3n. -emailVerifiedMessage=Su direcci\u00f3n de correo electr\u00f3nico se ha verificado -staleEmailVerificationLink=El enlace ya no es v\u00e1lido. Puede que ya haya verificado su direcci\u00f3n de correo electr\u00f3nico. -identityProviderAlreadyLinkedMessage=La identidad federada devuelta por {0} ya est\u00e1 enlazada con otro usuario -confirmAccountLinking=Confirme el enlace de la cuenta {0} del proveedor de identidad {1} con su cuenta -confirmEmailAddressVerification=Confirme la validez de la direcci\u00f3n de correo electr\u00f3nico {0} -confirmExecutionOfActions=Lleve a cabo las siguientes acciones - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Volver a la aplicaci\u00f3n -missingParameterMessage=Par\u00e1metros que faltan: {0} -clientNotFoundMessage=Cliente no encontrado -clientDisabledMessage=Cliente desactivado -invalidParameterMessage=Par\u00e1metro no v\u00e1lido: {0} -alreadyLoggedIn=Ya ha iniciado sesi\u00f3n -differentUserAuthenticated=Ya ha iniciado sesi\u00f3n como un usuario distinto ''{0}'' es esta sesi\u00f3n. Intente volver a iniciar sesi\u00f3n. -brokerLinkingSessionExpired=Enlace de cuenta de broker solicitado, pero la sesi\u00f3n actual ya no es v\u00e1lida. -proceedWithAction=» Haga clic aqu\u00ed para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=T\u00e9rminos y condiciones -requiredAction.UPDATE_PASSWORD=Actualizar contrase\u00f1a -requiredAction.UPDATE_PROFILE=Actualizar perfil -requiredAction.VERIFY_EMAIL=Verificar correo electr\u00f3nico - -p3pPolicy=CP="Esta no es una pol\u00edtica P3P." - -doX509Login=Iniciar\u00e1 sesi\u00f3n como: -clientCertificate=Certificado cliente X509: -noCertificate=[Sin certificado] - - -pageNotFound=Esta p\u00e1gina no est\u00e1 disponible -internalServerError=Ha surgido un problema diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_fr.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_fr.properties deleted file mode 100644 index a1d067e91..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_fr.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Connexion -needHelp=Besoin d'aide ? -selectAlternative=Ou s\u00e9lectionnez une alternative - -doRegister=S'inscrire -doCancel=Annuler -doSubmit=Soumettre -doYes=Oui -doNo=Non -doContinue=Continuer -doIgnore=Ignorer -doAccept=Accepter -doDecline=D\u00e9cliner -doForgotPassword=Mot de passe oubli\u00e9 ? -doClickHere=Cliquer ici -doImpersonate=Emprunter l'identit\u00e9 -kerberosNotConfigured=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -kerberosNotConfiguredTitle=Kerberos n'est pas configur\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -bypassKerberosDetail=Vous n'\u00eates pas connect\u00e9 via Kerberos ou votre navigateur n'est pas configur\u00e9 pour l'authentification Kerberos. Cliquez sur Continuer pour vous connecter par un autre moyen. -kerberosNotSetUp=Vous devez configurer Kerberos avant de vous authentifier. Contactez votre administrateur syst\u00e8me pour plus d'informations. -registerWithTitle=M''inscrire avec {0} -registerWithTitleHtml={0} -loginTitle=Me connecter \u00e0 {0} -loginTitleHtml={0} -impersonateTitle={0} Emprunter l''identit\u00e9 de l''utilisateur -impersonateTitleHtml={0} Emprunter l''identit\u00e9 de l''utilisateur -realmChoice=Domaine -unknownUser=Utilisateur inconnu -loginTotpTitle=Configuration de Mobile Authenticator -loginProfileTitle=Mettre \u00e0 jour les informations du compte -loginTimeout=Vous avez mis trop de temps \u00e0 vous connecter. Vous devez recommencer la proc\u00e9dure. -oauthGrantTitle=Donner l'acc\u00e8s -oauthGrantTitleHtml={0} -errorTitle=Nous sommes d\u00e9sol\u00e9s -errorTitleHtml=Nous sommes d\u00e9sol\u00e9s -emailVerifyTitle=V\u00e9rification de l'email -emailForgotTitle=Mot de passe oubli\u00e9 ? -updatePasswordTitle=Mettre \u00e0 jour le mot de passe -codeSuccessTitle=Code de r\u00e9ussite -codeErrorTitle=Code d''erreur : {0} - -termsTitle=Conditions g\u00e9n\u00e9rales -termsTitleHtml=Conditions g\u00e9n\u00e9rales -termsText=

      Conditions g\u00e9n\u00e9rales \u00e0 d\u00e9finir

      - -recaptchaFailed=Recaptcha non valide -recaptchaNotConfigured=Recaptcha est requis et n'a pas \u00e9t\u00e9 configur\u00e9 -consentDenied=Consentement refus\u00e9 - -noAccount=Nouvel utilisateur ? -username=Nom d'utilisateur -usernameOrEmail=Nom d'utilisateur ou email -firstName=Pr\u00e9nom -givenName=Pr\u00e9nom -fullName=Nom complet -lastName=Nom -familyName=Nom de famille -email=Email -password=Mot de passe -passwordConfirm=Confirmer le mot de passe -passwordNew=Nouveau mot de passe -passwordNewConfirm=Confirmation du nouveau mot de passe -rememberMe=M\u00e9moriser -authenticatorCode=Code \u00e0 usage unique -address=Adresse -street=Rue -locality=Ville ou localit\u00e9 -region=\u00c9tat, province ou r\u00e9gion -postal_code=Code postal -country=Pays -emailVerified=Email v\u00e9rifi\u00e9 -gssDelegationCredential=Informations d'identification de d\u00e9l\u00e9gation GSS - -loginTotpStep1=Installez l'une des applications suivantes sur votre mobile -loginTotpStep2=Ouvrez l'application et scannez le code barres -loginTotpStep3=Entrez le code \u00e0 usage unique fourni par l'application et cliquez sur Soumettre pour terminer l'installation -loginTotpManualStep2=Ouvrez l'application et entrez la cl\u00e9 -loginTotpManualStep3=Utilisez les valeurs de configuration suivantes si l'application le permet -loginTotpUnableToScan=Impossible de scanner? -loginTotpScanBarcode=Scanner le code barres ? -loginTotpOneTime=Code \u00e0 usage unique -loginTotpType=Type -loginTotpAlgorithm=Algorithme -loginTotpDigits=Chiffres -loginTotpInterval=Intervalle - -loginTotp.totp=Bas\u00e9 sur l'heure -loginTotp.hotp=Bas\u00e9 sur un compteur - - -oauthGrantRequest=Accordez-vous ces droits d'acc\u00e8s ? -inResource=dans - -emailVerifyInstruction1=Un email avec des instructions pour v\u00e9rifier votre adresse email vous a \u00e9t\u00e9 envoy\u00e9 -emailVerifyInstruction2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email ? -emailVerifyInstruction3=pour envoyer \u00e0 nouveau l'email - -emailLinkIdpTitle=Lier {0} -emailLinkIdp1=Un email avec des instructions pour lier le compte {0} {1} \u00e0 votre compte {2} vous a \u00e9t\u00e9 envoy\u00e9 -emailLinkIdp2=Vous n'avez pas re\u00e7u de code de v\u00e9rification par email? -emailLinkIdp3=pour envoyer \u00e0 nouveau l'email -emailLinkIdp4=Si vous avez d\u00e9j\u00e0 v\u00e9rifi\u00e9 l'email dans un autre navigateur -emailLinkIdp5=pour continuer - -backToLogin=« Revenir \u00e0 la page de connexion - -emailInstruction=Entrez votre nom d'utilisateur ou votre adresse email pour recevoir les instructions pour cr\u00e9er un nouveau mot de passe - -copyCodeInstruction=Copiez-collez ce code dans votre application - -pageExpiredTitle=La page a expir\u00e9 -pageExpiredMsg1=Pour recommencer la proc\u00e9dure de connexion -pageExpiredMsg2=Pour continuer la proc\u00e9dure de connexion - -personalInfo=Informations personnelles : -role_admin=Administrateur -role_realm-admin=Administrateur du domaine -role_create-realm=Cr\u00e9er un domaine -role_create-client=Cr\u00e9er un client -role_view-realm=Voir le domaine -role_view-users=Voir les utilisateurs -role_view-applications=Voir les applications -role_view-clients=Voir les clients -role_view-events=Voir les \u00e9v\u00e9nements -role_view-identity-providers=Voir les fournisseurs d'identit\u00e9 -role_manage-realm=G\u00e9rer le domaine -role_manage-users=G\u00e9rer les utilisateurs -role_manage-applications=G\u00e9rer les applications -role_manage-identity-providers=G\u00e9rer les fournisseurs d'identit\u00e9 -role_manage-clients=G\u00e9rer les clients -role_manage-events=G\u00e9rer les \u00e9v\u00e9nements -role_view-profile=Afficher le profil de {0} -role_manage-account=G\u00e9rer le compte -role_manage-account-links=G\u00e9rer les liens de compte -role_read-token=Lire le jeton -role_offline-access=Acc\u00e8s hors connexion -client_account=Compte -client_security-admin-console=Console d'administration de la s\u00e9curit\u00e9 -client_admin-cli=CLI Admin -client_realm-management=Gestion du domaine -client_broker=Agent - -invalidUserMessage=Nom d'utilisateur ou mot de passe non valide -invalidEmailMessage=Adresse email non valide -accountDisabledMessage=Votre compte est d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations. -accountTemporarilyDisabledMessage=Votre compte est temporairement d\u00e9sactiv\u00e9. Contactez votre administrateur syst\u00e8me pour plus d'informations ou r\u00e9essayez plus tard. -expiredCodeMessage=Votre session a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. -expiredActionTokenNoSessionMessage=L'action a expir\u00e9 -expiredActionTokenSessionExistsMessage=L'action a expir\u00e9. Essayez de vous connecter \u00e0 nouveau. - -missingFirstNameMessage=Entrez votre pr\u00e9nom -missingLastNameMessage=Entrez votre nom -missingEmailMessage=Entrez votre adresse email -missingUsernameMessage=Entrez votre nom d'utilisateur -missingPasswordMessage=Entrez votre mot de passe -missingTotpMessage=Entrez votre code d'authentification -notMatchPasswordMessage=\u00c9chec de la connexion. Les mots de passe que vous avez entr\u00e9s sont diff\u00e9rents. - -invalidPasswordExistingMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. -invalidPasswordBlacklistedMessage=\u00c9chec de la connexion. Le mot de passe que vous avez entr\u00e9 est peut-\u00eatre sur liste noire. -invalidPasswordConfirmMessage=\u00c9chec de la connexion. Le mot de passe de confirmation que vous avez entr\u00e9 est diff\u00e9rent. -invalidTotpMessage=\u00c9chec de la connexion. Le code d'authentification que vous avez entr\u00e9 n'est peut-\u00eatre pas valide. - -usernameExistsMessage=Le nom d'utilisateur existe d\u00e9j\u00e0 -emailExistsMessage=L'adresse email existe d\u00e9j\u00e0 - -federatedIdentityExistsMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Connectez-vous \u00e0 la gestion de compte pour lier le compte. - -confirmLinkIdpTitle=Le compte existe d\u00e9j\u00e0 -federatedIdentityConfirmLinkMessage=Un utilisateur avec {0} {1} existe d\u00e9j\u00e0. Comment voulez-vous poursuivre ? -federatedIdentityConfirmReauthenticateMessage=Identifiez-vous en tant que {0} pour lier votre compte \u00e0 {1} -confirmLinkIdpReviewProfile=Revoir le profil -confirmLinkIdpContinue=Ajouter au compte existant - -configureTotpMessage=Vous devez configurer Mobile Authenticator pour activer votre compte -updateProfileMessage=Vous devez mettre \u00e0 jour votre profil utilisateur pour activer votre compte -updatePasswordMessage=Vous devez changer votre mot de passe pour activer votre compte -resetPasswordMessage=Vous devez changer votre mot de passe -verifyEmailMessage=Vous devez v\u00e9rifier votre adresse email pour activer votre compte -linkIdpMessage=Vous devez v\u00e9rifier votre adresse email pour lier votre compte \u00e0 {0} - -emailSentMessage=Vous allez recevoir un email avec d'autres instructions -emailSendErrorMessage=Nous n'avons pas pu envoyer l'email. R\u00e9essayez plus tard. - -accountUpdatedMessage=Votre compte a \u00e9t\u00e9 mis \u00e0 jour -accountPasswordUpdatedMessage=Votre mot de passe a \u00e9t\u00e9 mis \u00e0 jour - -noAccessMessage=Aucun acc\u00e8s - -invalidPasswordMinLengthMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res -invalidPasswordMinDigitsMessage=Les mots de passe doivent comporter au minimum {0} chiffres -invalidPasswordMinLowerCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} minuscules -invalidPasswordMinUpperCaseCharsMessage=Les mots de passe doivent comporter au minimum {0} majuscules -invalidPasswordMinSpecialCharsMessage=Les mots de passe doivent comporter au minimum {0} caract\u00e8res sp\u00e9ciaux -invalidPasswordNotUsernameMessage=Votre mot de passe ne peut pas \u00eatre votre nom d'utilisateur -invalidPasswordRegexPatternMessage=Les mots de passe doivent \u00eatre conformes au mod\u00e8le regex -invalidPasswordHistoryMessage=Les mots de passe ne peuvent pas \u00eatre identiques aux {0} derniers mots de passe -invalidPasswordGenericMessage=Votre mot de passe n'est pas conforme \u00e0 la strat\u00e9gie de mot de passe - -failedToProcessResponseMessage=Le traitement de la r\u00e9ponse a \u00e9chou\u00e9 -httpsRequiredMessage=HTTPS requis -realmNotEnabledMessage=Domaine inactif -invalidRequestMessage=Requ\u00eate non valide -failedLogout=La d\u00e9connexion a \u00e9chou\u00e9 -unknownLoginRequesterMessage=Demandeur de connexion inconnu -loginRequesterNotEnabledMessage=Demandeur de connexion inactif -bearerOnlyMessage=Les applications Bearer-only ne sont pas autoris\u00e9es \u00e0 initier une connexion dans le navigateur -standardFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux standard est d\u00e9sactiv\u00e9 pour le client. -implicitFlowDisabledMessage=Le client n'est pas autoris\u00e9 \u00e0 initier une connexion dans le navigateur avec le response_type donn\u00e9. Le flux implicite est d\u00e9sactiv\u00e9 pour le client. -invalidRedirectUriMessage=Uri de redirection non valide -unsupportedNameIdFormatMessage=NameIDFormat non pris en charge -invalidRequesterMessage=Demandeur non valide -registrationNotAllowedMessage=Inscription non autoris\u00e9e -resetCredentialNotAllowedMessage=R\u00e9initialisation des informations d'identification non autoris\u00e9e - -permissionNotApprovedMessage=Autorisation refus\u00e9e -noRelayStateInResponseMessage=Aucun \u00e9tat de relais renvoy\u00e9 par le fournisseur d'identit\u00e9 -insufficientPermissionMessage=Autorisations insuffisantes pour lier les identit\u00e9s -couldNotProceedWithAuthenticationRequestMessage=Impossible de traiter la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -couldNotObtainTokenMessage=Impossible d'obtenir le jeton du fournisseur d'identit\u00e9 -unexpectedErrorRetrievingTokenMessage=Erreur inattendue lors de la r\u00e9cup\u00e9ration du jeton aupr\u00e8s du fournisseur d'identit\u00e9 -unexpectedErrorHandlingResponseMessage=Erreur inattendue lors du traitement de la r\u00e9ponse du fournisseur d'identit\u00e9 -identityProviderAuthenticationFailedMessage=L'authentification a \u00e9chou\u00e9. Authentification avec le fournisseur d'identit\u00e9 impossible -identityProviderDifferentUserMessage=Authentifi\u00e9 en tant que {0}, alors que l''authentification aurait d\u00fb \u00eatre {1} -couldNotSendAuthenticationRequestMessage=Impossible d'envoyer la requ\u00eate d'authentification au fournisseur d'identit\u00e9 -unexpectedErrorHandlingRequestMessage=Erreur inattendue lors du traitement de la requ\u00eate d'authentification aupr\u00e8s du fournisseur d'identit\u00e9 -invalidAccessCodeMessage=Code d'acc\u00e8s non valide -sessionNotActiveMessage=Session inactive -invalidCodeMessage=Une erreur est survenue. Essayez de vous connecter \u00e0 nouveau via votre application. -identityProviderUnexpectedErrorMessage=Une erreur est survenue. Authentification avec le fournisseur d'identit\u00e9 impossible. -identityProviderNotFoundMessage=Aucun fournisseur d'identit\u00e9 n'a \u00e9t\u00e9 trouv\u00e9 avec l'identifiant -identityProviderLinkSuccess=Votre email a bien \u00e9t\u00e9 v\u00e9rifi\u00e9. Revenez \u00e0 votre navigateur d'origine et poursuivez la proc\u00e9dure de connexion. -staleCodeMessage=Cette page n'est plus valide. Revenez \u00e0 votre application et connectez-vous \u00e0 nouveau. -realmSupportsNoCredentialsMessage=Le domaine ne prend en charge aucun type d'informations d'identification. -identityProviderNotUniqueMessage=Le domaine prend en charge plusieurs fournisseurs d'identit\u00e9. Impossible de d\u00e9terminer quel fournisseur d'identit\u00e9 doit \u00eatre utilis\u00e9 pour l'authentification. -emailVerifiedMessage=Votre adresse email a \u00e9t\u00e9 v\u00e9rifi\u00e9e -staleEmailVerificationLink=Le lien n'est plus valide. Vous avez peut-\u00eatre d\u00e9j\u00e0 v\u00e9rifi\u00e9 votre adresse email. -identityProviderAlreadyLinkedMessage=L''identit\u00e9 f\u00e9d\u00e9r\u00e9e renvoy\u00e9e par {0} est d\u00e9j\u00e0 li\u00e9e \u00e0 un autre utilisateur -confirmAccountLinking=Confirmer la liaison du compte {0} du fournisseur d''identit\u00e9 {1} avec votre compte -confirmEmailAddressVerification=Confirmer la validit\u00e9 de l''adresse email {0} -confirmExecutionOfActions=Effectuez la ou les actions suivantes - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Retour \u00e0 l'application -missingParameterMessage=Param\u00e8tres manquants : {0} -clientNotFoundMessage=Client introuvable -clientDisabledMessage=Client d\u00e9sactiv\u00e9 -invalidParameterMessage=Param\u00e8tre non valide : {0} -alreadyLoggedIn=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 -differentUserAuthenticated=Vous \u00eates d\u00e9j\u00e0 connect\u00e9 sous l''identit\u00e9 d''un utilisateur diff\u00e9rent ''{0}'' dans cette session. Essayez de vous connecter \u00e0 nouveau. -brokerLinkingSessionExpired=Liaison au compte de l'agent demand\u00e9e, mais la session en cours n'est plus valide. -proceedWithAction=» Cliquez ici pour continuer - -requiredAction.CONFIGURE_TOTP=Configurer le code \u00e0 usage unique -requiredAction.terms_and_conditions=Conditions g\u00e9n\u00e9rales -requiredAction.UPDATE_PASSWORD=Mettre \u00e0 jour le mot de passe -requiredAction.UPDATE_PROFILE=Mettre \u00e0 jour le profil -requiredAction.VERIFY_EMAIL=V\u00e9rifier l'email - -p3pPolicy=CP="Ce n'est pas une politique P3P !" - -doX509Login=Vous serez connect\u00e9 en tant que : -clientCertificate=Certificat client X509 : -noCertificate=[Pas de certificat] - - -pageNotFound=Cette page n'est pas accessible -internalServerError=Un probl\u00e8me est survenu diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_it.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_it.properties deleted file mode 100644 index e49caaaba..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_it.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Accedi -needHelp=Hai bisogno di aiuto? -selectAlternative=O seleziona un'alternativa - -doRegister=Registrati -doCancel=Annulla -doSubmit=Invia -doYes=S\u00ec -doNo=No -doContinue=Continua -doIgnore=Ignora -doAccept=Accetta -doDecline=Nega -doForgotPassword=Password dimenticata? -doClickHere=Fare clic qui -doImpersonate=Rappresenta -kerberosNotConfigured=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -kerberosNotConfiguredTitle=Kerberos non configurato. Per ulteriori informazioni, contattare l'amministratore di sistema. -bypassKerberosDetail=L'accesso non \u00e8 stato effettuato tramite Kerberos oppure il browser non \u00e8 configurato per l'accesso a Kerberos. Fare clic su Continua per accedere in altro modo. -kerberosNotSetUp=\u00c8 necessario configurare Kerberos per effettuare l'accesso. Per ulteriori informazioni, contattare l'amministratore di sistema. -registerWithTitle=Registrati con {0} -registerWithTitleHtml={0} -loginTitle=Accedi a {0} -loginTitleHtml={0} -impersonateTitle=Rappresenta utente {0} -impersonateTitleHtml={0} Rappresenta utente -realmChoice=Area di autenticazione -unknownUser=Utente sconosciuto -loginTotpTitle=Configurazione autenticazione mobile -loginProfileTitle=Aggiorna dati account -loginTimeout=Tempo scaduto per l'accesso. La procedura verr\u00e0 riavviata dall'inizio. -oauthGrantTitle=Concedi accesso -oauthGrantTitleHtml={0} -errorTitle=Spiacenti -errorTitleHtml=Spiacenti -emailVerifyTitle=Verifica e-mail -emailForgotTitle=Password dimenticata? -updatePasswordTitle=Aggiorna password -codeSuccessTitle=Codice valido -codeErrorTitle=Codice di errore: {0} - -termsTitle=Termini e condizioni -termsTitleHtml=Termini e condizioni -termsText=

      Termini e condizioni da definire

      - -recaptchaFailed=Recaptcha non valido -recaptchaNotConfigured=Recaptcha obbligatorio e non configurato -consentDenied=Consenso negato. - -noAccount=Nuovo utente? -username=Nome utente -usernameOrEmail=Nome utente o e-mail -firstName=Nome -givenName=Nome -fullName=Nome e cognome -lastName=Cognome -familyName=Cognome -email=E-mail -password=Password -passwordConfirm=Conferma password -passwordNew=Nuova password -passwordNewConfirm=Conferma nuova password -rememberMe=Ricordami -authenticatorCode=Codice One-Time -address=Indirizzo -street=Via -locality=Citt\u00e0 o Localit\u00e0 -region=Stato, Provincia o Regione -postal_code=CAP o codice postale -country=Paese -emailVerified=E-mail verificata -gssDelegationCredential=Credenziali GSS Delegation - -loginTotpStep1=Installare una delle seguenti applicazioni sul cellulare -loginTotpStep2=Aprire l'applicazione ed eseguire la scansione del codice a barre -loginTotpStep3=Inserire il codice One-Time fornito dall'applicazione e premere Invia per completare la configurazione -loginTotpManualStep2=Aprire l'applicazione e inserire il codice -loginTotpManualStep3=Usare i seguenti valori di configurazione se l'applicazione li consente -loginTotpUnableToScan=Impossibile eseguire la scansione? -loginTotpScanBarcode=Eseguire la scansione del codice a barre? -loginTotpOneTime=Codice One-Time -loginTotpType=Tipo -loginTotpAlgorithm=Algoritmo -loginTotpDigits=Cifre -loginTotpInterval=Intervallo - -loginTotp.totp=In base al tempo -loginTotp.hotp=In base al contattore - - -oauthGrantRequest=Assegnare questi privilegi di accesso? -inResource=in - -emailVerifyInstruction1=\u00c8 stata inviata un'e-mail con le istruzioni per verificare l'indirizzo e-mail -emailVerifyInstruction2=Codice di verifica non ricevuto via e-mail? -emailVerifyInstruction3=per inviare nuovamente l'e-mail - -emailLinkIdpTitle=Collega {0} -emailLinkIdp1=\u00c8 stata inviata un''e-email con le istruzioni per collegare {0} account {1} con l''account {2} -emailLinkIdp2=Codice di verifica non ricevuto via e-mail? -emailLinkIdp3=per inviare nuovamente l'e-mail -emailLinkIdp4=Se l'e-mail \u00e8 gi\u00e0 stata verificata in un altro browser -emailLinkIdp5=per continuare - -backToLogin=« Torna all'accesso - -emailInstruction=Inserire il nome utente o l'indirizzo e-mail per ricevere le istruzioni per creare una nuova password - -copyCodeInstruction=Copiare questo codice e incollarlo nell'applicazione - -pageExpiredTitle=La pagina \u00e8 scaduta -pageExpiredMsg1=Per riavviare la procedura di accesso -pageExpiredMsg2=Per continuare la procedura di accesso - -personalInfo=Informazioni personali: -role_admin=Amministratore -role_realm-admin=Amministratore area di autenticazione -role_create-realm=Crea area di autenticazione -role_create-client=Crea client -role_view-realm=Mostra area di autenticazione -role_view-users=Mostra utenti -role_view-applications=Mostra applicazioni -role_view-clients=Mostra client -role_view-events=Mostra eventi -role_view-identity-providers=Mostra provider di identit\u00e0 -role_manage-realm=Gestisci area di autenticazione -role_manage-users=Gestisci utenti -role_manage-applications=Gestisci applicazioni -role_manage-identity-providers=Gestisci provider di identit\u00e0 -role_manage-clients=Gestisci client -role_manage-events=Gestisci eventi -role_view-profile=Visualizza il profilo di {0} -role_manage-account=Gestisci account -role_manage-account-links=Gestisci link account -role_read-token=Leggi il token -role_offline-access=Accesso offline -client_account=Account -client_security-admin-console=Console di amministrazione di sicurezza -client_admin-cli=Amministratore CLI -client_realm-management=Gestione area di autenticazione -client_broker=Broker - -invalidUserMessage=Nome utente o password non validi -invalidEmailMessage=Indirizzo e-mail non valido -accountDisabledMessage=L'account \u00e8 stato disabilitato. Per ulteriori informazioni, contattare l'amministratore di sistema. -accountTemporarilyDisabledMessage=L'account \u00e8 stato disabilitato temporaneamente. Per ulteriori informazioni, contattare l'amministratore di sistema. -expiredCodeMessage=Sessione scaduta. Provare ad accedere di nuovo. -expiredActionMessage=Azione scaduta. Provare ad accedere di nuovo. -expiredActionTokenNoSessionMessage=Azione scaduta -expiredActionTokenSessionExistsMessage=Azione scaduta. Provare ad accedere di nuovo. - -missingFirstNameMessage=Digitare il nome -missingLastNameMessage=Digitare il cognome -missingEmailMessage=Digitare l'indirizzo e-mail -missingUsernameMessage=Digitare il nome utente -missingPasswordMessage=Digitare la password -missingTotpMessage=Digitare il codice di autenticazione -notMatchPasswordMessage=Problemi di accesso. Le password inserite non corrispondono. - -invalidPasswordExistingMessage=Problemi di accesso. La password inserita potrebbe non essere valida. -invalidPasswordBlacklistedMessage=Problemi di accesso. La password inserita potrebbe essere inclusa in una black list. -invalidPasswordConfirmMessage=Problemi di accesso. La password di conferma inserite non corrisponde. -invalidTotpMessage=Problemi di accesso. Il codice di autenticazione inserito potrebbe non essere valido - -usernameExistsMessage=Nome utente gi\u00e0 esistente -emailExistsMessage=Indirizzo e-mail gi\u00e0 esistente - -federatedIdentityExistsMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Accedere a Gestione account per collegare l''account. - -confirmLinkIdpTitle=Account gi\u00e0 esistente -federatedIdentityConfirmLinkMessage=L''utente con {0} {1} \u00e8 gi\u00e0 esistente. Come si desidera continuare? -federatedIdentityConfirmReauthenticateMessage=Eseguire l''autenticazione come {0} per collegare l''account con {1} -confirmLinkIdpReviewProfile=Esamina profilo -confirmLinkIdpContinue=Aggiungi all'account esistente - -configureTotpMessage=\u00c8 necessario configurare Mobile Authenticator per attivare l'account -updateProfileMessage=\u00c8 necessario aggiornare il profilo utente per attivare l'account -updatePasswordMessage=\u00c8 necessario modificare la password per attivare l'account -resetPasswordMessage=\u00c8 necessario modificare la password -verifyEmailMessage=\u00c8 necessario verificare l'indirizzo e-mail per attivare l'account -linkIdpMessage=\u00c8 necessario verificare l''indirizzo e-mail per collegare l''account con {0} - -emailSentMessage=Si ricever\u00e0 a breve un'e-mail con ulteriori istruzioni -emailSendErrorMessage=Non \u00e8 stato possibile inviare l'e-mail. Riprovare pi\u00f9 tardi. - -accountUpdatedMessage=L'account \u00e8 stato aggiornato -accountPasswordUpdatedMessage=La password \u00e8 stata aggiornata - -noAccessMessage=Nessun accesso - -invalidPasswordMinLengthMessage=Le password devono contenere almeno {0} caratteri -invalidPasswordMinDigitsMessage=Le password devono contenere almeno {0} numeri -invalidPasswordMinLowerCaseCharsMessage=Le password devono contenere almeno {0} lettere minuscole -invalidPasswordMinUpperCaseCharsMessage=Le password devono contenere almeno {0} lettere maiuscole -invalidPasswordMinSpecialCharsMessage=Le password devono contenere almeno {0} caratteri speciali -invalidPasswordNotUsernameMessage=La password non pu\u00f2 essere uguale al nome utente -invalidPasswordRegexPatternMessage=La password deve corrispondere al modello regex -invalidPasswordHistoryMessage=Le password non devono essere uguali alle ultime {0} password -invalidPasswordGenericMessage=La password non soddisfa i criteri per le password - -failedToProcessResponseMessage=Elaborazione della risposta non riuscita -httpsRequiredMessage=HTTPS richiesto -realmNotEnabledMessage=Area di autenticazione non abilitata -invalidRequestMessage=Richiesta non valida -failedLogout=Logout non riuscito -unknownLoginRequesterMessage=Richiedente login sconosciuto -loginRequesterNotEnabledMessage=Richiedente login non abilitato -bearerOnlyMessage=Non \u00e8 consentito avviare il login via browser da applicazioni con solo token di connessione -standardFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Standard per response_type specificato \u00e8 disabilitato per il client. -implicitFlowDisabledMessage=Non \u00e8 consentito avviare il login via browser dal client quando il flusso Implicit response_type specificato \u00e8 disabilitato per il client. -invalidRedirectUriMessage=URI di reindirizzamento non valido -unsupportedNameIdFormatMessage=NameIDFormat non supportato -invalidRequesterMessage=Richiedente non valido -registrationNotAllowedMessage=Registrazione non consentita -resetCredentialNotAllowedMessage=Reimpostazione credenziali non consentita - -permissionNotApprovedMessage=Autorizzazione negata -noRelayStateInResponseMessage=Nessuno stato di inoltro nella risposta dal provider di identit\u00e0 -insufficientPermissionMessage=Autorizzazioni insufficienti per collegare le identit\u00e0 -couldNotProceedWithAuthenticationRequestMessage=Impossibile procedere con la richiesta di autenticazione presso il provider di identit\u00e0 -couldNotObtainTokenMessage=Impossibile recuperare il token dal provider di identit\u00e0 -unexpectedErrorRetrievingTokenMessage=Errore non previsto durante il recupero del token dal provider di identit\u00e0 -unexpectedErrorHandlingResponseMessage=Errore non previsto durante la gestione della risposta dal provider di identit\u00e0 -identityProviderAuthenticationFailedMessage=Autenticazione non riuscita. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0 -identityProviderDifferentUserMessage=Autenticazione eseguita come {0}; autenticazione prevista come {1} -couldNotSendAuthenticationRequestMessage=Impossibile inviare la richiesta di autenticazione al provider di identit\u00e0 -unexpectedErrorHandlingRequestMessage=Errore non previsto durante la gestione della richiesta di autenticazione presso il provider di identit\u00e0 -invalidAccessCodeMessage=Codice di accesso non valido -sessionNotActiveMessage=Sessione non attiva -invalidCodeMessage=Si \u00e8 verificato un problema. Provare ad accedere di nuovo tramite l'applicazione. -identityProviderUnexpectedErrorMessage=Si \u00e8 verificato un problema. Impossibile eseguire l'autenticazione presso il provider di identit\u00e0. -identityProviderNotFoundMessage=Impossibile trovare un provider di identit\u00e0 con l'ID -identityProviderLinkSuccess=L'indirizzo e-mail \u00e8 stato verificato. Tornare al browser iniziale e continuare con la procedura di accesso. -staleCodeMessage=Questa pagina non \u00e8 pi\u00f9 valida. Tornare all'applicazione e accedere di nuovo. -realmSupportsNoCredentialsMessage=L'area di autenticazione non supporta alcun tipo di credenziale. -identityProviderNotUniqueMessage=L'area di autenticazione supporta pi\u00f9 di un provider di identit\u00e0. Impossibile determinare quale provider di identit\u00e0 utilizzare. -emailVerifiedMessage=L'indirizzo e-mail \u00e8 stato verificato -staleEmailVerificationLink=Il link non \u00e8 pi\u00f9 valido. L'indirizzo e-mail potrebbe essere gi\u00e0 stato verificato. -identityProviderAlreadyLinkedMessage=L''identit\u00e0 federata restituita da {0} \u00e8 gi\u00e0 collegata a un altro utente -confirmAccountLinking=Confermare il collegamento dell''account {0} del provider di identit\u00e0 {1} con il proprio account -confirmEmailAddressVerification=Confermare la validit\u00e0 dell''indirizzo e-mail {0} -confirmExecutionOfActions=Eseguire le azioni seguenti - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Torna all'applicazione -missingParameterMessage=Parametri mancanti: {0} -clientNotFoundMessage=Client non trovato -clientDisabledMessage=Client disabilitato -invalidParameterMessage=Parametro non valido: {0} -alreadyLoggedIn=Accesso gi\u00e0 effettuato -differentUserAuthenticated=Accesso gi\u00e0 effettuato come altro utente ''{0}'' in questa sessione. Provare ad accedere di nuovo. -brokerLinkingSessionExpired=Collegamento account broker richiesto, ma la sessione corrente non \u00e8 pi\u00f9 valida. -proceedWithAction=» Fare clic qui per procedere - -requiredAction.CONFIGURE_TOTP=Configura OTP -requiredAction.terms_and_conditions=Termini e condizioni -requiredAction.UPDATE_PASSWORD=Aggiorna password -requiredAction.UPDATE_PROFILE=Aggiorna profilo -requiredAction.VERIFY_EMAIL=Verifica e-mail - -p3pPolicy=CP="Questo non \u00e8 un criterio P3P!" - -doX509Login=L'accesso verr\u00e0 effettuato come: -clientCertificate=Certificato client X509: -noCertificate=[Nessun certificato] - - -pageNotFound=Questa pagina non \u00e8 disponibile -internalServerError=Si \u00e8 verificato un problema diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_ja.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_ja.properties deleted file mode 100644 index 9c8e054cc..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_ja.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u30b5\u30a4\u30f3\u30a4\u30f3 -needHelp=\u304a\u56f0\u308a\u3067\u3059\u304b? -selectAlternative=\u5225\u306e\u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u9078\u629e - -doRegister=\u767b\u9332 -doCancel=\u30ad\u30e3\u30f3\u30bb\u30eb -doSubmit=\u9001\u4fe1 -doYes=\u306f\u3044 -doNo=\u3044\u3044\u3048 -doContinue=\u7d9a\u884c -doIgnore=\u7121\u8996 -doAccept=\u540c\u610f -doDecline=\u62d2\u5426 -doForgotPassword=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -doClickHere=\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 -doImpersonate=\u507d\u88c5 -kerberosNotConfigured=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotConfiguredTitle=Kerberos \u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -bypassKerberosDetail=Kerberos \u7d4c\u7531\u3067\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u306a\u3044\u304b\u3001\u30d6\u30e9\u30a6\u30b6\u3067 Kerberos \u30b5\u30a4\u30f3\u30a4\u30f3\u304c\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u4ed6\u306e\u65b9\u6cd5\u3067\u30ed\u30b0\u30a4\u30f3\u3059\u308b\u5834\u5408\u306f\u3001[\u7d9a\u884c] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -kerberosNotSetUp=\u30b5\u30a4\u30f3\u30a4\u30f3\u3059\u308b\u524d\u306b Kerberos \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -registerWithTitle={0} \u3078\u306e\u767b\u9332 -registerWithTitleHtml={0} -loginTitle={0} \u3078\u306e\u30b5\u30a4\u30f3\u30a4\u30f3 -loginTitleHtml={0} -impersonateTitle={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -impersonateTitleHtml={0} \u30e6\u30fc\u30b6\u30fc\u306e\u507d\u88c5 -realmChoice=\u30ec\u30eb\u30e0 -unknownUser=\u4e0d\u660e\u306a\u30e6\u30fc\u30b6\u30fc -loginTotpTitle=Mobile Authenticator \u306e\u8a2d\u5b9a -loginProfileTitle=\u30a2\u30ab\u30a6\u30f3\u30c8\u60c5\u5831\u306e\u66f4\u65b0 -loginTimeout=\u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u6642\u9593\u304c\u304b\u304b\u308a\u3059\u304e\u307e\u3057\u305f\u3002\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u6700\u521d\u304b\u3089\u958b\u59cb\u3057\u307e\u3059\u3002 -oauthGrantTitle=\u30a2\u30af\u30bb\u30b9\u6a29\u306e\u8a31\u53ef -oauthGrantTitleHtml={0} -errorTitle=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -errorTitleHtml=\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -emailVerifyTitle=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c -emailForgotTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5fd8\u308c\u305f\u5834\u5408 -updatePasswordTitle=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -codeSuccessTitle=\u6210\u529f\u30b3\u30fc\u30c9 -codeErrorTitle=\u30a8\u30e9\u30fc\u30b3\u30fc\u30c9: {0} - -termsTitle=\u5229\u7528\u898f\u7d04 -termsTitleHtml=\u5229\u7528\u898f\u7d04 -termsText=

      \u3053\u3053\u306b\u5229\u7528\u898f\u7d04\u3092\u5165\u529b\u3057\u307e\u3059

      - -recaptchaFailed=\u7121\u52b9\u306a reCAPTCHA -recaptchaNotConfigured=reCAPTCHA \u304c\u5fc5\u8981\u3067\u3059\u304c\u3001\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 -consentDenied=\u540c\u610f\u3092\u62d2\u5426\u3057\u307e\u3057\u305f\u3002 - -noAccount=\u65b0\u898f\u30e6\u30fc\u30b6\u30fc\u306e\u5834\u5408 -username=\u30e6\u30fc\u30b6\u30fc\u540d -usernameOrEmail=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -firstName=\u540d -givenName=\u540d -fullName=\u6c0f\u540d -lastName=\u59d3 -familyName=\u59d3 -email=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 -password=\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordConfirm=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -passwordNew=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9 -passwordNewConfirm=\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u518d\u5165\u529b -rememberMe=\u30ed\u30b0\u30a4\u30f3\u60c5\u5831\u3092\u4fdd\u5b58\u3059\u308b -authenticatorCode=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -address=\u4f4f\u6240 -street=\u756a\u5730 -locality=\u5e02\u533a\u753a\u6751 -region=\u90fd\u9053\u5e9c\u770c -postal_code=\u90f5\u4fbf\u756a\u53f7 -country=\u56fd -emailVerified=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -gssDelegationCredential=GSS \u4ee3\u884c\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb - -loginTotpStep1=\u6b21\u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u3044\u305a\u308c\u304b 1 \u3064\u3092\u30e2\u30d0\u30a4\u30eb\u30c7\u30d0\u30a4\u30b9\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u63d0\u4f9b\u3055\u308c\u305f\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u3001[\u9001\u4fe1] \u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u3067\u8a2d\u5b9a\u304c\u5b8c\u4e86\u3057\u307e\u3059\u3002 -loginTotpManualStep2=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3092\u958b\u304d\u3001\u30ad\u30fc\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpManualStep3=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u6b21\u306e\u5024\u306e\u8a2d\u5b9a\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u308b\u5834\u5408\u306f\u3001\u305d\u308c\u3089\u306e\u5024\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 -loginTotpUnableToScan=\u30b9\u30ad\u30e3\u30f3\u3067\u304d\u306a\u3044\u5834\u5408 -loginTotpScanBarcode=\u30d0\u30fc\u30b3\u30fc\u30c9\u3092\u30b9\u30ad\u30e3\u30f3\u3057\u307e\u3059\u304b? -loginTotpOneTime=\u30ef\u30f3\u30bf\u30a4\u30e0\u8a8d\u8a3c\u30b3\u30fc\u30c9 -loginTotpType=\u7a2e\u985e -loginTotpAlgorithm=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u9593\u9694 - -loginTotp.totp=\u6642\u9593 -loginTotp.hotp=\u30ab\u30a6\u30f3\u30bf\u30fc - - -oauthGrantRequest=\u3053\u308c\u3089\u306e\u30a2\u30af\u30bb\u30b9\u6a29\u3092\u8a31\u53ef\u3057\u307e\u3059\u304b? -inResource=\u30ea\u30bd\u30fc\u30b9: - -emailVerifyInstruction1=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailVerifyInstruction2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailVerifyInstruction3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b - -emailLinkIdpTitle={0} \u3068\u306e\u30ea\u30f3\u30af -emailLinkIdp1={0} \u30a2\u30ab\u30a6\u30f3\u30c8 {1} \u3092\u3042\u306a\u305f\u306e {2} \u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306e\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3057\u307e\u3057\u305f -emailLinkIdp2=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u8a18\u8f09\u3055\u308c\u305f E \u30e1\u30fc\u30eb\u304c\u5c4a\u304b\u306a\u3044\u5834\u5408 -emailLinkIdp3=E \u30e1\u30fc\u30eb\u3092\u518d\u9001\u4fe1\u3059\u308b -emailLinkIdp4=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c\u3092\u5225\u306e\u30d6\u30e9\u30a6\u30b6\u3067\u884c\u3063\u305f\u5834\u5408 -emailLinkIdp5=\u7d9a\u884c\u3059\u308b - -backToLogin=« \u30b5\u30a4\u30f3\u30a4\u30f3\u306b\u623b\u308b - -emailInstruction=\u30e6\u30fc\u30b6\u30fc\u540d\u3068 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u65b0\u3057\u3044\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u4f5c\u6210\u624b\u9806\u3092\u304a\u9001\u308a\u3057\u307e\u3059 - -copyCodeInstruction=\u3053\u306e\u30b3\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\u3057\u3066\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u8cbc\u308a\u4ed8\u3051\u3066\u304f\u3060\u3055\u3044 - -pageExpiredTitle=\u30da\u30fc\u30b8\u306e\u6709\u52b9\u671f\u9650\u304c\u5207\u308c\u3066\u3044\u307e\u3059 -pageExpiredMsg1=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u518d\u958b\u3059\u308b -pageExpiredMsg2=\u51e6\u7406\u4e2d\u306e\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u884c\u3059\u308b - -personalInfo=\u500b\u4eba\u60c5\u5831: -role_admin=\u7ba1\u7406\u8005 -role_realm-admin=\u30ec\u30eb\u30e0\u7ba1\u7406\u8005 -role_create-realm=\u30ec\u30eb\u30e0\u306e\u4f5c\u6210 -role_create-client=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u4f5c\u6210 -role_view-realm=\u30ec\u30eb\u30e0\u306e\u8868\u793a -role_view-users=\u30e6\u30fc\u30b6\u30fc\u306e\u8868\u793a -role_view-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8868\u793a -role_view-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u8868\u793a -role_view-events=\u30a4\u30d9\u30f3\u30c8\u306e\u8868\u793a -role_view-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u8868\u793a -role_manage-realm=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -role_manage-users=\u30e6\u30fc\u30b6\u30fc\u306e\u7ba1\u7406 -role_manage-applications=\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u7ba1\u7406 -role_manage-identity-providers=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306e\u7ba1\u7406 -role_manage-clients=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-events=\u30a4\u30d9\u30f3\u30c8\u306e\u7ba1\u7406 -role_view-profile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u8868\u793a -role_manage-account=\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u7ba1\u7406 -role_manage-account-links=\u30a2\u30ab\u30a6\u30f3\u30c8\u30ea\u30f3\u30af\u306e\u7ba1\u7406 -role_read-token=\u30c8\u30fc\u30af\u30f3\u306e\u8aad\u307f\u53d6\u308a -role_offline-access=\u30aa\u30d5\u30e9\u30a4\u30f3\u30a2\u30af\u30bb\u30b9 -client_account=\u30a2\u30ab\u30a6\u30f3\u30c8 -client_security-admin-console=\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7ba1\u7406\u30b3\u30f3\u30bd\u30fc\u30eb -client_admin-cli=\u7ba1\u7406 CLI -client_realm-management=\u30ec\u30eb\u30e0\u306e\u7ba1\u7406 -client_broker=\u30d6\u30ed\u30fc\u30ab\u30fc - -invalidUserMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -invalidEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u6b63\u3057\u304f\u3042\u308a\u307e\u305b\u3093 -accountDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u3001\u8a73\u7d30\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -accountTemporarilyDisabledMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306f\u4e00\u6642\u7684\u306b\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002\u30b7\u30b9\u30c6\u30e0\u7ba1\u7406\u8005\u306b\u9023\u7d61\u3057\u3066\u8a73\u7d30\u3092\u78ba\u8a8d\u3059\u308b\u304b\u3001\u5f8c\u3067\u3082\u3046\u4e00\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -expiredCodeMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -expiredActionTokenNoSessionMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f -expiredActionTokenSessionExistsMessage=\u51e6\u7406\u304c\u6642\u9593\u5207\u308c\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 - -missingFirstNameMessage=\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingLastNameMessage=\u59d3\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingEmailMessage=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingUsernameMessage=\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -missingTotpMessage=\u8a8d\u8a3c\u30b3\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044 -notMatchPasswordMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093 - -invalidPasswordExistingMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordBlacklistedMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u30d6\u30e9\u30c3\u30af\u30ea\u30b9\u30c8\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -invalidPasswordConfirmMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u518d\u5165\u529b\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u6700\u521d\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u3068\u4e00\u81f4\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -invalidTotpMessage=\u30b5\u30a4\u30f3\u30a4\u30f3\u4e2d\u306b\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u5165\u529b\u3057\u305f\u8a8d\u8a3c\u30b3\u30fc\u30c9\u304c\u9593\u9055\u3063\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 - -usernameExistsMessage=\u540c\u3058\u30e6\u30fc\u30b6\u30fc\u540d\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -emailExistsMessage=\u540c\u3058 E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 - -federatedIdentityExistsMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002[\u30a2\u30ab\u30a6\u30f3\u30c8\u7ba1\u7406] \u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3001\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u30ea\u30f3\u30af\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -confirmLinkIdpTitle=\u540c\u3058\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059 -federatedIdentityConfirmLinkMessage={0} {1} \u306e\u30e6\u30fc\u30b6\u30fc\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002\u3069\u306e\u3088\u3046\u306b\u51e6\u7406\u3057\u307e\u3059\u304b? -federatedIdentityConfirmReauthenticateMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {1} \u3068\u30ea\u30f3\u30af\u3059\u308b\u305f\u3081\u306b\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3057\u307e\u3059 -confirmLinkIdpReviewProfile=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u78ba\u8a8d -confirmLinkIdpContinue=\u65e2\u5b58\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u306b\u8ffd\u52a0\u3059\u308b - -configureTotpMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001Mobile Authenticator \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updateProfileMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u3092\u66f4\u65b0\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -updatePasswordMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -resetPasswordMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -verifyEmailMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u3092\u6709\u52b9\u306b\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -linkIdpMessage=\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3092 {0} \u3068\u30ea\u30f3\u30af\u3059\u308b\u306b\u306f\u3001E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u8a8d\u8a3c\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - -emailSentMessage=\u3057\u3070\u3089\u304f\u3059\u308b\u3068\u3001\u6b21\u306e\u4f5c\u696d\u624b\u9806\u3092\u8a18\u8f09\u3057\u305f E \u30e1\u30fc\u30eb\u304c\u9001\u3089\u308c\u3066\u304d\u307e\u3059 -emailSendErrorMessage=E \u30e1\u30fc\u30eb\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3002\u3057\u3070\u3089\u304f\u3057\u3066\u304b\u3089\u3001\u518d\u5ea6\u8a66\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -accountUpdatedMessage=\u30a2\u30ab\u30a6\u30f3\u30c8\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f -accountPasswordUpdatedMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f - -noAccessMessage=\u30a2\u30af\u30bb\u30b9\u6a29\u304c\u3042\u308a\u307e\u305b\u3093 - -invalidPasswordMinLengthMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f {0} \u6587\u5b57\u4ee5\u4e0a\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 -invalidPasswordMinDigitsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u6570\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinLowerCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5c0f\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinUpperCaseCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u5927\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordMinSpecialCharsMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u306f\u3001\u7279\u6b8a\u6587\u5b57\u3092\u6700\u4f4e {0} \u500b\u542b\u3081\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordNotUsernameMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306b\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093 -invalidPasswordRegexPatternMessage=\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u6b63\u898f\u8868\u73fe\u30d1\u30bf\u30fc\u30f3\u3068\u5408\u81f4\u3057\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -invalidPasswordHistoryMessage=\u904e\u53bb {0} \u4e16\u4ee3\u306e\u30d1\u30b9\u30ef\u30fc\u30c9\u306f\u518d\u5229\u7528\u3067\u304d\u307e\u305b\u3093\u3002 -invalidPasswordGenericMessage=\u6307\u5b9a\u3057\u305f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u3001\u30d1\u30b9\u30ef\u30fc\u30c9\u30dd\u30ea\u30b7\u30fc\u306b\u5f93\u3063\u3066\u3044\u307e\u305b\u3093 - -failedToProcessResponseMessage=\u5fdc\u7b54\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -httpsRequiredMessage=HTTPS \u3092\u4f7f\u7528\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 -realmNotEnabledMessage=\u30ec\u30eb\u30e0\u304c\u6709\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -invalidRequestMessage=\u7121\u52b9\u306a\u8981\u6c42\u3067\u3059 -failedLogout=\u30ed\u30b0\u30a2\u30a6\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f -unknownLoginRequesterMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u4e0d\u660e\u3067\u3059 -loginRequesterNotEnabledMessage=\u30ed\u30b0\u30a4\u30f3\u306e\u8981\u6c42\u5143\u304c\u7121\u52b9\u3067\u3059 -bearerOnlyMessage=bearer-only \u306e\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -standardFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Standard Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -implicitFlowDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u6307\u5b9a\u3055\u308c\u305f response_type \u3092\u4f7f\u3063\u3066\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u30ed\u30b0\u30a4\u30f3\u3092\u958b\u59cb\u3059\u308b\u3053\u3068\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306e Implicit Flow \u306f\u7121\u52b9\u5316\u3055\u308c\u3066\u3044\u307e\u3059\u3002 -invalidRedirectUriMessage=\u7121\u52b9\u306a\u30ea\u30c0\u30a4\u30ec\u30af\u30c8 URI \u3067\u3059 -unsupportedNameIdFormatMessage=\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u306a\u3044 NameIDFormat \u3067\u3059 -invalidRequesterMessage=\u7121\u52b9\u306a\u8981\u6c42\u5143\u3067\u3059 -registrationNotAllowedMessage=\u767b\u9332\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 -resetCredentialNotAllowedMessage=\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u306e\u30ea\u30bb\u30c3\u30c8\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093 - -permissionNotApprovedMessage=\u6a29\u9650\u304c\u62d2\u5426\u3055\u308c\u307e\u3057\u305f -noRelayStateInResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306b RelayState \u304c\u3042\u308a\u307e\u305b\u3093 -insufficientPermissionMessage=\u6a29\u9650\u304c\u4e0d\u5341\u5206\u306a\u305f\u3081\u3001ID \u3092\u30ea\u30f3\u30af\u3067\u304d\u307e\u305b\u3093 -couldNotProceedWithAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u3092\u51e6\u7406\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -couldNotObtainTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u30c8\u30fc\u30af\u30f3\u3092\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorRetrievingTokenMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u30c8\u30fc\u30af\u30f3\u306e\u53d6\u5f97\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -unexpectedErrorHandlingResponseMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304b\u3089\u306e\u5fdc\u7b54\u306e\u51e6\u7406\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -identityProviderAuthenticationFailedMessage=\u8a8d\u8a3c\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderDifferentUserMessage={1} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u308b\u306f\u305a\u3067\u3057\u305f\u304c\u3001{0} \u3068\u3057\u3066\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f -couldNotSendAuthenticationRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u306b\u8a8d\u8a3c\u8981\u6c42\u3092\u9001\u4fe1\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f -unexpectedErrorHandlingRequestMessage=ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3078\u306e\u8a8d\u8a3c\u8981\u6c42\u306e\u51e6\u7406\u4e2d\u306b\u4e0d\u660e\u306a\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f -invalidAccessCodeMessage=\u7121\u52b9\u306a\u30a2\u30af\u30bb\u30b9\u30b3\u30fc\u30c9\u3067\u3059 -sessionNotActiveMessage=\u30bb\u30c3\u30b7\u30e7\u30f3\u304c\u30a2\u30af\u30c6\u30a3\u30d6\u3067\u306f\u3042\u308a\u307e\u305b\u3093 -invalidCodeMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u304b\u3089\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -identityProviderUnexpectedErrorMessage=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002\u3053\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3067\u8a8d\u8a3c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -identityProviderNotFoundMessage=\u3053\u306e ID \u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -identityProviderLinkSuccess=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u8a8d\u8a3c\u3055\u308c\u307e\u3057\u305f\u3002\u5143\u306e\u30d6\u30e9\u30a6\u30b6\u306b\u623b\u3063\u3066\u3001\u30b5\u30a4\u30f3\u30a4\u30f3\u3092\u7d9a\u3051\u3066\u304f\u3060\u3055\u3044\u3002 -staleCodeMessage=\u3053\u306e\u30da\u30fc\u30b8\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u3063\u3066\u3001\u518d\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044\u3002 -realmSupportsNoCredentialsMessage=\u30ec\u30eb\u30e0\u306f\u3069\u306e\u30af\u30ec\u30c7\u30f3\u30b7\u30e3\u30eb\u30bf\u30a4\u30d7\u3082\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002 -identityProviderNotUniqueMessage=\u30ec\u30eb\u30e0\u304c\u8907\u6570\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u3059\u3002\u3069\u306e ID \u30d7\u30ed\u30d0\u30a4\u30c0\u3092\u8a8d\u8a3c\u306b\u4f7f\u7528\u3059\u308b\u3079\u304d\u304b\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002 -emailVerifiedMessage=\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u307e\u3059 -staleEmailVerificationLink=\u3053\u306e\u30ea\u30f3\u30af\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306e E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u8a8d\u8a3c\u3055\u308c\u3066\u3044\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002 -identityProviderAlreadyLinkedMessage={0} \u304b\u3089\u8fd4\u3055\u308c\u305f Federated ID \u306f\u3001\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc\u306b\u30ea\u30f3\u30af\u3055\u308c\u3066\u3044\u307e\u3059 -confirmAccountLinking=ID \u30d7\u30ed\u30d0\u30a4\u30c0 {1} \u306e\u30a2\u30ab\u30a6\u30f3\u30c8 {0} \u3068\u3042\u306a\u305f\u306e\u30a2\u30ab\u30a6\u30f3\u30c8\u3068\u306e\u30ea\u30f3\u30af\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmEmailAddressVerification=E \u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9 {0} \u306e\u6709\u52b9\u6027\u3092\u78ba\u8a8d\u3057\u307e\u3059 -confirmExecutionOfActions=\u6b21\u306e\u51e6\u7406\u3092\u5b9f\u884c\u3057\u307e\u3059 - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306b\u623b\u308b -missingParameterMessage=\u4e0d\u8db3\u3057\u3066\u3044\u308b\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -clientNotFoundMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f -clientDisabledMessage=\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304c\u7121\u52b9\u5316\u3055\u308c\u307e\u3057\u305f -invalidParameterMessage=\u7121\u52b9\u306a\u30d1\u30e9\u30e1\u30fc\u30bf: {0} -alreadyLoggedIn=\u65e2\u306b\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059 -differentUserAuthenticated=\u3053\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u3067\u65e2\u306b\u5225\u306e\u30e6\u30fc\u30b6\u30fc ''{0}'' \u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u3044\u307e\u3059\u3002\u3082\u3046\u4e00\u5ea6\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 -brokerLinkingSessionExpired=\u30d6\u30ed\u30fc\u30ab\u30fc\u30a2\u30ab\u30a6\u30f3\u30c8\u306e\u30ea\u30f3\u30af\u304c\u8981\u6c42\u3055\u308c\u307e\u3057\u305f\u304c\u3001\u73fe\u5728\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u306f\u7121\u52b9\u306b\u306a\u308a\u307e\u3057\u305f\u3002 -proceedWithAction=» \u7d9a\u884c\u3059\u308b\u306b\u306f\u3053\u3053\u3092\u30af\u30ea\u30c3\u30af\u3057\u3066\u304f\u3060\u3055\u3044 - -requiredAction.CONFIGURE_TOTP=OTP \u306e\u8a2d\u5b9a -requiredAction.terms_and_conditions=\u5229\u7528\u898f\u7d04 -requiredAction.UPDATE_PASSWORD=\u30d1\u30b9\u30ef\u30fc\u30c9\u306e\u66f4\u65b0 -requiredAction.UPDATE_PROFILE=\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u306e\u66f4\u65b0 -requiredAction.VERIFY_EMAIL=E\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306e\u8a8d\u8a3c - -p3pPolicy=CP="\u3053\u308c\u306f P3P \u30dd\u30ea\u30b7\u30fc\u3067\u306f\u3042\u308a\u307e\u305b\u3093\uff01" - -doX509Login=\u6b21\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u3057\u3066\u30b5\u30a4\u30f3\u30a4\u30f3\u3057\u307e\u3059: -clientCertificate=X509 \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u8a3c\u660e\u66f8: -noCertificate=[\u8a3c\u660e\u66f8\u306a\u3057] - - -pageNotFound=\u3053\u306e\u30da\u30fc\u30b8\u306f\u4f7f\u7528\u3067\u304d\u307e\u305b\u3093 -internalServerError=\u554f\u984c\u304c\u767a\u751f\u3057\u307e\u3057\u305f diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_nb.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_nb.properties deleted file mode 100644 index 1fd61ceec..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_nb.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Logg inn -needHelp=Trenger hjelp? -selectAlternative=Eller velg et alternativ - -doRegister=Registrer -doCancel=Avbryt -doSubmit=Send inn -doYes=Ja -doNo=Nei -doContinue=Fortsett -doIgnore=Ignorer -doAccept=Godta -doDecline=Avsl\u00e5 -doForgotPassword=Har du glemt passordet? -doClickHere=Klikk her -doImpersonate=Utgi deg for \u00e5 v\u00e6re en annen bruker -kerberosNotConfigured=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -kerberosNotConfiguredTitle=Kerberos er ikke konfigurert. Kontakt systemadministratoren din for mer informasjon. -bypassKerberosDetail=Du er enten ikke logget p\u00e5 via Kerberos, eller nettleseren din er ikke konfigurert for Kerberos-p\u00e5logging. Klikk p\u00e5 Fortsett for \u00e5 registrere deg p\u00e5 andre m\u00e5ter. -kerberosNotSetUp=Du m\u00e5 konfigurere Kerberos f\u00f8r du kan logge p\u00e5. Kontakt systemadministratoren din for mer informasjon. -registerWithTitle=Registrer deg med {0} -registerWithTitleHtml={0} -loginTitle=Logg p\u00e5 {0} -loginTitleHtml={0} -impersonateTitle={0} Utgi deg for \u00e5 v\u00e6re bruker -impersonateTitleHtml={0} Utgi deg for \u00e5 v\u00e6re bruker -realmChoice=Sikkerhetsdomene -unknownUser=Ukjent bruker -loginTotpTitle=Konfigurer Mobile Authenticator -loginProfileTitle=Oppdater kontoinformasjon -loginTimeout=Du brukte for lang tid p\u00e5 \u00e5 logge p\u00e5. Registreringsprosessen starter p\u00e5 nytt. -oauthGrantTitle=Gi tilgang -oauthGrantTitleHtml={0} -errorTitle=Vi beklager -errorTitleHtml=Vi beklager -emailVerifyTitle=E-postbekreftelse -emailForgotTitle=Har du glemt passordet? -updatePasswordTitle=Oppdater passord -codeSuccessTitle=Suksesskode -codeErrorTitle=Feilkode: {0} - -termsTitle=Vilk\u00e5r og betingelser -termsTitleHtml=Vilk\u00e5r og betingelser -termsText=

      Vilk\u00e5r og betingelser kommer

      - -recaptchaFailed=Ugyldig bildebekreftelse -recaptchaNotConfigured=Bildebekreftelse er p\u00e5krevd og har ikke blitt konfigurert -consentDenied=Samtykke avsl\u00e5tt. - -noAccount=Ny bruker? -username=Brukernavn -usernameOrEmail=Brukernavn eller e-postadresse -firstName=Fornavn -givenName=Fornavn -fullName=Fullstendig navn -lastName=Etternavn -familyName=Etternavn -email=E-post -password=Passord -passwordConfirm=Bekreft passord -passwordNew=Nytt passord -passwordNewConfirm=Bekreftelse p\u00e5 nytt passord -rememberMe=Husk meg -authenticatorCode=Engangskode -address=Adresse -street=Gate/vei -locality=By eller sted -region=Fylke -postal_code=Postnummer -country=Land -emailVerified=E-postadresse bekreftet -gssDelegationCredential=GSS legitimasjonsdelegering - -loginTotpStep1=Installer en av f\u00f8lgende applikasjoner p\u00e5 mobilen din -loginTotpStep2=\u00c5pne applikasjonen og skann strekkoden -loginTotpStep3=Angi engangskoden som oppgis av applikasjonen, og klikk p\u00e5 Send inn for \u00e5 fullf\u00f8re oppsettet -loginTotpManualStep2=\u00c5pne applikasjonen og angi koden -loginTotpManualStep3=Bruk f\u00f8lgende konfigurasjonsverdier hvis applikasjonen tillater at de stilles inn -loginTotpUnableToScan=F\u00e5r du ikke skannet? -loginTotpScanBarcode=Vil du skanne strekkoden? -loginTotpOneTime=Engangs-verifiseringskode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Sifre -loginTotpInterval=Intervall - -loginTotp.totp=Tidsbasert -loginTotp.hotp=Tellerbasert - - -oauthGrantRequest=Vil du gi disse tilgangsrettighetene? -inResource=i - -emailVerifyInstruction1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 bekrefte e-postadressen din -emailVerifyInstruction2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailVerifyInstruction3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt - -emailLinkIdpTitle=Koble til {0} -emailLinkIdp1=Du har f\u00e5tt tilsendt en e-post med instruksjoner for \u00e5 koble {0}-kontoen {1} til {2}-kontoen din -emailLinkIdp2=Har du ikke mottatt en verifiseringskode p\u00e5 e-post? -emailLinkIdp3=pr\u00f8v \u00e5 sende e-posten p\u00e5 nytt -emailLinkIdp4=Hvis du alt har bekreftet e-posten i en annen nettleser -emailLinkIdp5=for \u00e5 fortsette - -backToLogin=« Tilbake til p\u00e5logging - -emailInstruction=Angi brukernavnet eller e-postadressen din, s\u00e5 sender vi deg instruksjoner om hvordan du oppretter et nytt passord - -copyCodeInstruction=Kopier denne koden og lim den inn i applikasjonen din - -pageExpiredTitle=Siden har utl\u00f8pt -pageExpiredMsg1=For \u00e5 starte p\u00e5loggingsprosessen p\u00e5 nytt -pageExpiredMsg2=For \u00e5 fortsette p\u00e5loggingsprosessen - -personalInfo=Personlig informasjon: -role_admin=Administrator -role_realm-admin=Administrator for sikkerhetsdomene -role_create-realm=Opprett sikkerhetsdomene -role_create-client=Opprett klient -role_view-realm=Se sikkerhetsdomene -role_view-users=Se brukere -role_view-applications=Se applikasjoner -role_view-clients=Se klienter -role_view-events=Se hendelser -role_view-identity-providers=Se identitetsleverand\u00f8rer -role_manage-realm=Administrer sikkerhetsdomene -role_manage-users=Administrer brukere -role_manage-applications=Administrer applikasjoner -role_manage-identity-providers=Administrer identitetsleverand\u00f8rer -role_manage-clients=Administrer klienter -role_manage-events=Administrer hendelser -role_view-profile=Vis {0}s profil -role_manage-account=Administrer konto -role_manage-account-links=Administrer kontolenker -role_read-token=Les token -role_offline-access=Frakoblet tilgang -client_account=Konto -client_security-admin-console=Sikkerthetsadministrasjonskonsoll -client_admin-cli=Administrasjons-CLI -client_realm-management=Sikkerhetsdomene-administrasjon -client_broker=Broker - -invalidUserMessage=Ugyldig brukernavn eller passord -invalidEmailMessage=Ugyldig e-postadresse -accountDisabledMessage=Kontoen din er deaktivert. Kontakt systemadministratoren din for mer informasjon. -accountTemporarilyDisabledMessage=Kontoen din er midlertidig deaktivert. Kontakt systemadministratoren din for mer informasjon, eller pr\u00f8v igjen senere. -expiredCodeMessage=\u00d8kten din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -expiredActionTokenNoSessionMessage=Handlingen din har utl\u00f8pt -expiredActionTokenSessionExistsMessage=Handlingen din er tidsavbrutt. Pr\u00f8v \u00e5 logge p\u00e5 igjen. - -missingFirstNameMessage=Skriv inn fornavnet ditt -missingLastNameMessage=Skriv inn etternavnet ditt -missingEmailMessage=Skriv inn e-postadressen din -missingUsernameMessage=Skriv inn brukernavnet ditt -missingPasswordMessage=Skriv inn passordet ditt -missingTotpMessage=Skriv inn autentikatorkoden din -notMatchPasswordMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, stemmer ikke overens. - -invalidPasswordExistingMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re ugyldige. -invalidPasswordBlacklistedMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordene du skrev inn, kan v\u00e6re svartelistet. -invalidPasswordConfirmMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Passordbekreftelsen du skrev inn, stemmer ikke. -invalidTotpMessage=Vi har problemer med \u00e5 logge deg p\u00e5. Autentikatorkoden du skrev inn, kan v\u00e6re ugyldig. - -usernameExistsMessage=Brukernavnet finnes alt -emailExistsMessage=E-postadressen finnes alt - -federatedIdentityExistsMessage=En bruker med {0} {1} finnes alt. Logg p\u00e5 Kontostyring for \u00e5 koble til kontoen. - -confirmLinkIdpTitle=Kontoen finnes allerede -federatedIdentityConfirmLinkMessage=Bruker med {0} {1} finnes allerede. Hvordan vil du fortsette? -federatedIdentityConfirmReauthenticateMessage=Bekreft at du er {0} for \u00e5 koble din konto sammen med {1} -confirmLinkIdpReviewProfile=Se gjennom profil -confirmLinkIdpContinue=Legg til eksisterende konto - -configureTotpMessage=Du m\u00e5 konfigurere Mobile Authenticator for \u00e5 aktivere kontoen din -updateProfileMessage=Du m\u00e5 oppdatere brukerprofilen din for \u00e5 aktivere kontoen -updatePasswordMessage=Du m\u00e5 endre passordet ditt for \u00e5 aktivere kontoen -resetPasswordMessage=Du m\u00e5 endre passordet -verifyEmailMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 aktivere kontoen -linkIdpMessage=Du m\u00e5 bekrefte e-postadressen din for \u00e5 koble kontoen din sammen med {0} - -emailSentMessage=Du mottar en e-post om kort tid med ytterligere instruksjoner -emailSendErrorMessage=Vi kunne ikke sende e-posten. Pr\u00f8v igjen senere. - -accountUpdatedMessage=Kontoen din er oppdatert -accountPasswordUpdatedMessage=Passordet ditt er oppdatert - -noAccessMessage=Ingen tilgang - -invalidPasswordMinLengthMessage=Passord m\u00e5 minst best\u00e5 av {0} tegn -invalidPasswordMinDigitsMessage=Passord m\u00e5 minst best\u00e5 av {0} tall -invalidPasswordMinLowerCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} sm\u00e5 bokstaver -invalidPasswordMinUpperCaseCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} store bokstaver -invalidPasswordMinSpecialCharsMessage=Passord m\u00e5 minst best\u00e5 av {0} spesialtegn -invalidPasswordNotUsernameMessage=Passordet kan ikke v\u00e6re det samme som brukernavnet ditt -invalidPasswordRegexPatternMessage=Passord m\u00e5 stemme overens med uttrykksm\u00f8nsteret -invalidPasswordHistoryMessage=Passord m\u00e5 ikke v\u00e6re det samme som noen av de siste {0} passordene -invalidPasswordGenericMessage=Passordet ditt stemmer ikke overens med passordpolicyen - -failedToProcessResponseMessage=Kunne ikke behandle svar -httpsRequiredMessage=HTTPS p\u00e5krevd -realmNotEnabledMessage=Sikkerhetsdomene er ikke aktivert -invalidRequestMessage=Ugyldig foresp\u00f8rsel -failedLogout=Utlogging feilet -unknownLoginRequesterMessage=Ukjent anmoder for p\u00e5logging -loginRequesterNotEnabledMessage=Anmoder for p\u00e5logging er ikke aktivert -bearerOnlyMessage=Bearer-only-applikasjoner har ikke lov til \u00e5 initiere p\u00e5logging via nettleser -standardFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Standard flow er deaktivert for denne klienten. -implicitFlowDisabledMessage=Klienten har ikke lov til \u00e5 initiere p\u00e5logging via nettleser med gitt response_type. Implicit flow er deaktivert for denne klienten. -invalidRedirectUriMessage=Ugyldig redirect uri -unsupportedNameIdFormatMessage=NameIDFormat er ikke st\u00f8ttet -invalidRequesterMessage=Ugyldig sender av foresp\u00f8rsel -registrationNotAllowedMessage=Registrering er ikke lov -resetCredentialNotAllowedMessage=Tilbakestilling av p\u00e5loggingsdata er ikke lov - -permissionNotApprovedMessage=Ingen tilgang -noRelayStateInResponseMessage=Ingen relay state i svar fra identitetsleverand\u00f8r -insufficientPermissionMessage=Utilstrekkelige tillatelser til \u00e5 koble sammen identiteter -couldNotProceedWithAuthenticationRequestMessage=Kunne ikke fortsette med autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -couldNotObtainTokenMessage=Kunne ikke hente token fra identitetsleverand\u00f8r -unexpectedErrorRetrievingTokenMessage=Uventet feil ved henting av token fra identitetsleverand\u00f8r -unexpectedErrorHandlingResponseMessage=Uventet feil ved h\u00e5ndtering av respons fra identitetsleverand\u00f8r -identityProviderAuthenticationFailedMessage=Autentisering mislyktes. Kunne ikke autentisere med identitetsleverand\u00f8r -identityProviderDifferentUserMessage=Autentisert som {0}, men forventet \u00e5 bli autentisert som {1} -couldNotSendAuthenticationRequestMessage=Kunne ikke sende autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -unexpectedErrorHandlingRequestMessage=Uventet feil ved h\u00e5ndtering av autentiseringsforesp\u00f8rsel til identitetsleverand\u00f8r -invalidAccessCodeMessage=Ugyldig tilgangskode -sessionNotActiveMessage=\u00d8kten er ikke aktiv -invalidCodeMessage=Vi st\u00f8tte p\u00e5 et problem. Pr\u00f8v \u00e5 logge p\u00e5 igjen gjennom applikasjonen din. -identityProviderUnexpectedErrorMessage=Vi st\u00f8tte p\u00e5 et problem. Det var ikke mulig \u00e5 autentisere med identitetsleverand\u00f8ren. -identityProviderNotFoundMessage=Fant ingen identitetsleverand\u00f8r med identifikatoren -identityProviderLinkSuccess=Du har verifisert e-posten din. G\u00e5 tilbake til den opprinnelige nettleseren din og fortsett med p\u00e5loggingen. -staleCodeMessage=Denne siden er ikke lenger gyldig. G\u00e5 tilbake til applikasjonen din og logg p\u00e5 igjen. -realmSupportsNoCredentialsMessage=Sikkerhetsdomene st\u00f8tter ingen legitimasjonstyper. -identityProviderNotUniqueMessage=Sikkerhetsdomene st\u00f8tter flere identitetsleverand\u00f8rer. Kunne ikke avgj\u00f8re hvilken identitetsleverand\u00f8r som burde brukes for autentisering. -emailVerifiedMessage=E-postadressen din har blitt bekreftet -staleEmailVerificationLink=Lenken er ikke lenger gyldig. Det kan hende at du alt har verifisert e-postadressen din. -identityProviderAlreadyLinkedMessage=Federert identitet returnert av {0}, er allerede koblet til en annen bruker -confirmAccountLinking=Bekreft kobling av kontoen {0} for identitetsleverand\u00f8ren {1} med din konto -confirmEmailAddressVerification=Bekreft gyldigheten av e-postadressen {0} -confirmExecutionOfActions=Utf\u00f8r f\u00f8lgende handling(er) - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Tilbake til applikasjonen -missingParameterMessage=Manglende parametere: {0} -clientNotFoundMessage=Finner ikke klient -clientDisabledMessage=Klient er deaktivert -invalidParameterMessage=Ugyldig parameter: {0} -alreadyLoggedIn=Du er alt logget p\u00e5 -differentUserAuthenticated=Du er alt logget p\u00e5 som en annen bruker, ''{0}'', i denne \u00f8kten. Pr\u00f8v \u00e5 logge p\u00e5 igjen. -brokerLinkingSessionExpired=Forespurt broker-konto kobler til, men gjeldende \u00f8kt er ikke lenger gyldig. -proceedWithAction=» Klikk her for \u00e5 fortsette - -requiredAction.CONFIGURE_TOTP=Konfigurer OTP -requiredAction.terms_and_conditions=Vilk\u00e5r og betingelser -requiredAction.UPDATE_PASSWORD=Oppdater passord -requiredAction.UPDATE_PROFILE=Oppdater profil -requiredAction.VERIFY_EMAIL=Bekreft e-post - -p3pPolicy=CP="Dette er ikke en P3P-policy!" - -doX509Login=Du vil bli logget p\u00e5 som: -clientCertificate=X509-klientsertifikat: -noCertificate=[Intet sertifikat] - - -pageNotFound=Denne siden er ikke tilgjengelig -internalServerError=Vi st\u00f8tte p\u00e5 et problem diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_nl.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_nl.properties deleted file mode 100644 index 2ae071a65..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_nl.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Aanmelden -needHelp=Hulp nodig? -selectAlternative=Of selecteer een alternatief - -doRegister=Registreren -doCancel=Annuleren -doSubmit=Verzenden -doYes=Ja -doNo=Nee -doContinue=Doorgaan -doIgnore=Negeren -doAccept=Accepteren -doDecline=Weigeren -doForgotPassword=Wachtwoord vergeten? -doClickHere=Klik hier -doImpersonate=Imiteren -kerberosNotConfigured=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -kerberosNotConfiguredTitle=Kerberos is niet geconfigureerd. Neem contact op met uw systeembeheerder voor meer informatie. -bypassKerberosDetail=U bent niet aangemeld via Kerberos of uw browser is niet ingesteld voor aanmelding via Kerberos. Klik op Doorgaan om u op een andere manier aan te melden. -kerberosNotSetUp=U moet Kerberos instellen voordat u zich kunt aanmelden. Neem contact op met uw systeembeheerder voor meer informatie. -registerWithTitle=Registreren met {0} -registerWithTitleHtml={0} -loginTitle=Aanmelden bij {0} -loginTitleHtml={0} -impersonateTitle={0} Gebruiker imiteren -impersonateTitleHtml={0} Gebruiker imiteren -realmChoice=Realm -unknownUser=Onbekende gebruiker -loginTotpTitle=Mobile Authenticator-instellingen -loginProfileTitle=Accountgegevens bijwerken -loginTimeout=Het aanmelden nam te veel tijd in beslag. Het aanmeldingsproces begint weer van voor af aan. -oauthGrantTitle=Toegang verlenen -oauthGrantTitleHtml={0} -errorTitle=Sorry -errorTitleHtml=Sorry -emailVerifyTitle=Verificatie e-mailadres -emailForgotTitle=Wachtwoord vergeten? -updatePasswordTitle=Wachtwoord bijwerken -codeSuccessTitle=Succescode -codeErrorTitle=Foutcode: {0} - -termsTitle=Voorwaarden -termsTitleHtml=Voorwaarden -termsText=

      Voorwaarden nog niet vastgesteld

      - -recaptchaFailed=Ongeldige Recaptcha -recaptchaNotConfigured=Recaptcha is vereist en is niet geconfigureerd -consentDenied=Toestemming geweigerd. - -noAccount=Nieuwe gebruiker? -username=Gebruikersnaam -usernameOrEmail=Gebruikersnaam of e-mailadres -firstName=Voornaam -givenName=Voornaam -fullName=Volledige naam -lastName=Achternaam -familyName=Achternaam -email=E-mailadres -password=Wachtwoord -passwordConfirm=Wachtwoord bevestigen -passwordNew=Nieuw wachtwoord -passwordNewConfirm=Bevestiging nieuw wachtwoord -rememberMe=Mij onthouden -authenticatorCode=Eenmalige authenticatiecode -address=Adres -street=Straat -locality=Plaats -region=Staat, provincie of regio -postal_code=Postcode -country=Land -emailVerified=E-mailadres geverifieerd -gssDelegationCredential=GSS-delegeringsreferetie - -loginTotpStep1=Installeer een van de volgende applicaties op uw mobiele apparaat -loginTotpStep2=Open de applicatie en scan de streepjescode -loginTotpStep3=Voer de eenmalige code in die door de applicatie is verstrekt en klik op Verzenden om de setup te voltooien -loginTotpManualStep2=Open de applicatie en voer de sleutel in -loginTotpManualStep3=Gebruik de volgende configuratiewaarden als u deze in de applicatie kunt instellen -loginTotpUnableToScan=Scannen niet mogelijk? -loginTotpScanBarcode=Streepjescode scannen? -loginTotpOneTime=Eenmalige authenticatiecode -loginTotpType=Type -loginTotpAlgorithm=Algoritme -loginTotpDigits=Cijfers -loginTotpInterval=Interval - -loginTotp.totp=Op tijdbasis -loginTotp.hotp=Op tellerbasis - - -oauthGrantRequest=Wilt u deze toegangsrechten verlenen? -inResource=in - -emailVerifyInstruction1=Er is een e-mail met instructies voor het verifi\u00ebren van uw e-mailadres naar u verzonden -emailVerifyInstruction2=Geen verificatiecode via e-mail ontvangen? -emailVerifyInstruction3=om de e-mail opnieuw te verzenden - -emailLinkIdpTitle=Koppeling {0} -emailLinkIdp1=Er is een e-mail met instructies voor het koppelen van {0} account {1} met uw {2} account naar u verzonden -emailLinkIdp2=Geen verificatiecode via e-mail ontvangen? -emailLinkIdp3=om de e-mail opnieuw te verzenden -emailLinkIdp4=Als u het e-mailadres al in een andere browser hebt geverifieerd -emailLinkIdp5=om door te gaan - -backToLogin=« Terug naar Aanmelden - -emailInstruction=Voer uw gebruikersnaam of e-mailadres in, wij sturen u dan de instructies voor het maken van een nieuw wachtwoord - -copyCodeInstruction=Kopieer deze code en plak deze in uw toepassing - -pageExpiredTitle=Pagina is verlopen -pageExpiredMsg1=Het aanmeldingsproces opnieuw starten -pageExpiredMsg2=Doorgaan met het aanmeldingsproces - -personalInfo=Persoonlijke gegevens: -role_admin=Beheerder -role_realm-admin=Realm-beheerder -role_create-realm=Realm maken -role_create-client=Client maken -role_view-realm=Realm weergeven -role_view-users=Gebruikers weergeven -role_view-applications=Toepassingen weergeven -role_view-clients=Clients weergeven -role_view-events=Gebeurtenissen weergeven -role_view-identity-providers=Id-providers weergeven -role_manage-realm=Realm beheren -role_manage-users=Gebruikers beheren -role_manage-applications=Applicaties beheren -role_manage-identity-providers=Id-providers beheren -role_manage-clients=Clients beheren -role_manage-events=Gebeurtenissen beheren -role_view-profile=Profiel weergeven -role_manage-account=Account beheren -role_manage-account-links=Accountkoppelingen beheren -role_read-token=Token lezen -role_offline-access=Offlinetoegang -client_account=Account -client_security-admin-console=Security Admin Console -client_admin-cli=Admin CLI -client_realm-management=Realm-beheer -client_broker=Broker - -invalidUserMessage=Ongeldige gebruikersnaam of ongeldig wachtwoord -invalidEmailMessage=Ongeldig e-mailadres -accountDisabledMessage=Uw account is uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie. -accountTemporarilyDisabledMessage=Uw account is tijdelijk uitgeschakeld. Neem contact op met uw systeembeheerder voor meer informatie of probeer het later opnieuw. -expiredCodeMessage=Er is een time-out van de sessie opgetreden. Meld u opnieuw aan. -expiredActionMessage=Uw actie is verlopen. Meld u opnieuw aan. -expiredActionTokenNoSessionMessage=Uw actie is verlopen -expiredActionTokenSessionExistsMessage=Uw actie is verlopen. Meld u opnieuw aan. - -missingFirstNameMessage=Voer uw voornaam in -missingLastNameMessage=Voer uw achternaam in -missingEmailMessage=Voer uw e-mailadres in -missingUsernameMessage=Voer uw gebruikersnaam in -missingPasswordMessage=Voer uw wachtwoord in -missingTotpMessage=Voer uw authenticatiecode in -notMatchPasswordMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde wachtwoorden komen niet overeen. - -invalidPasswordExistingMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord is mogelijk ongeldig. -invalidPasswordBlacklistedMessage=Er is een probleem opgetreden bij het aanmelden. Het ingevoerde wachtwoord staat mogelijk op de zwarte lijst. -invalidPasswordConfirmMessage=Er is een probleem opgetreden bij het aanmelden. Het ter bevestiging ingevoerde wachtwoord komt niet overeen. -invalidTotpMessage=Er is een probleem opgetreden bij het aanmelden. De ingevoerde authenticatiecode is mogelijk ongeldig. - -usernameExistsMessage=Gebruikersnaam bestaat al -emailExistsMessage=E-mailadres bestaat al - -federatedIdentityExistsMessage=Er bestaat al een gebruiker met {0} {1}. Meld u aan bij Accountbeheer om het account te koppelen. - -confirmLinkIdpTitle=Account bestaat al -federatedIdentityConfirmLinkMessage=Er bestaat al een gebruiker met {0} {1}. Hoe wilt u doorgaan? -federatedIdentityConfirmReauthenticateMessage=Authenticeer als {0} om uw account te koppelen met {1} -confirmLinkIdpReviewProfile=Profiel controleren -confirmLinkIdpContinue=Toevoegen aan bestaand account - -configureTotpMessage=U moet Mobile Authenticator instellen om uw account te activeren -updateProfileMessage=U moet uw gebruikersprofiel bijwerken om uw account te activeren -updatePasswordMessage=U moet uw wachtwoord wijzigen om uw account te activeren -resetPasswordMessage=U moet uw wachtwoord wijzigen -verifyEmailMessage=U moet uw e-mailadres verifi\u00ebren om uw account te activeren -linkIdpMessage=U moet uw e-mailadres verifi\u00ebren om uw account te koppelen met {0} - -emailSentMessage=U ontvangt dadelijk een e-mailbericht met verdere instructies -emailSendErrorMessage=De e-mail kon niet worden verzonden. Probeer het later opnieuw. - -accountUpdatedMessage=Uw account is bijgewerkt -accountPasswordUpdatedMessage=Uw wachtwoord is bijgewerkt - -noAccessMessage=Geen toegang - -invalidPasswordMinLengthMessage=Wachtwoorden moeten een minimale lengte hebben van {0} tekens -invalidPasswordMinDigitsMessage=Wachtwoorden moeten minimaal {0} cijfers bevatten -invalidPasswordMinLowerCaseCharsMessage=Wachtwoorden moeten minimaal {0} kleine letters bevatten -invalidPasswordMinUpperCaseCharsMessage=Wachtwoorden moeten minimaal {0} hoofdletters bevatten -invalidPasswordMinSpecialCharsMessage=Wachtwoorden moeten minimaal {0} speciale tekens bevatten -invalidPasswordNotUsernameMessage=Uw wachtwoord mag niet hetzelfde zijn als uw gebruikersnaam -invalidPasswordRegexPatternMessage=Wachtwoorden moeten overeenkomen met het regex-patroon -invalidPasswordHistoryMessage=Wachtwoorden mogen niet hetzelfde zijn als een van de laatste {0} wachtwoorden -invalidPasswordGenericMessage=Uw wachtwoord komt niet overeen met het wachtwoordbeleid - -failedToProcessResponseMessage=Verwerken van respons mislukt -httpsRequiredMessage=HTTPS vereist -realmNotEnabledMessage=Realm niet ingeschakeld -invalidRequestMessage=Ongeldige aanvraag -failedLogout=Afmelden mislukt -unknownLoginRequesterMessage=Onbekende aanmeldingsaanvrager -loginRequesterNotEnabledMessage=Aanmeldingsaanvrager niet ingeschakeld -bearerOnlyMessage=Bearer-only applicaties mogen geen browseraanmelding initi\u00ebren -standardFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Standaard stroom is uitgeschakeld voor de client. -implicitFlowDisabledMessage=Client mag geen browseraanmelding initi\u00ebren met het opgegeven responstype. Impliciete stroom is uitgeschakeld voor de client. -invalidRedirectUriMessage=Ongeldige omleidings-URI -unsupportedNameIdFormatMessage=Niet-ondersteunde NameIDFormat -invalidRequesterMessage=Ongeldige aanvrager -registrationNotAllowedMessage=Registratie niet toegestaan -resetCredentialNotAllowedMessage=Opnieuw instellen van referentie niet toegestaan - -permissionNotApprovedMessage=Machtiging geweigerd -noRelayStateInResponseMessage=Geen relaystatus in respons van id-provider -insufficientPermissionMessage=Onvoldoende machtigingen voor het koppelen van id's -couldNotProceedWithAuthenticationRequestMessage=Kon authenticatieaanvraag aan id-provider niet voortzetten -couldNotObtainTokenMessage=Kan geen token verkrijgen van id-provider -unexpectedErrorRetrievingTokenMessage=Onverwachte fout bij ophalen van token bij id-provider -unexpectedErrorHandlingResponseMessage=Onverwachte fout bij verwerken van respons van id-provider -identityProviderAuthenticationFailedMessage=Authenticatie mislukt. Authenticatie met id-provider niet mogelijk -identityProviderDifferentUserMessage=U bent geauthenticeerd als {0}, maar verwacht werd dat u als {1} zou zijn geauthenticeerd -couldNotSendAuthenticationRequestMessage=Kan authenticatieaanvraag niet verzenden naar id-provider -unexpectedErrorHandlingRequestMessage=Onverwachte fout bij verwerken van authenticatieaanvraag naar id-provider -invalidAccessCodeMessage=Ongeldige toegangscode -sessionNotActiveMessage=Sessie niet actief -invalidCodeMessage=Er is een probleem opgetreden. Meld u opnieuw aan via uw applicatie. -identityProviderUnexpectedErrorMessage=Er is een probleem opgetreden. Authenticatie met de id-provider was niet mogelijk. -identityProviderNotFoundMessage=Kan geen id-provider vinden met de id -identityProviderLinkSuccess=Uw e-mailadres is geverifieerd. Ga terug naar uw originele browser en ga verder met de aanmelding. -staleCodeMessage=Deze pagina is verlopen. Ga terug naar uw applicatie en meld u opnieuw aan. -realmSupportsNoCredentialsMessage=Realm ondersteunt geen enkel type referentie. -identityProviderNotUniqueMessage=Realm ondersteunt meerdere id-providers. Kan niet bepalen welke id-provider moet worden gebruikt voor de authenticatie. -emailVerifiedMessage=Uw e-mailadres is geverifieerd -staleEmailVerificationLink=De koppeling is niet langer geldig. U hebt uw e-mailadres mogelijk al geverifieerd. -identityProviderAlreadyLinkedMessage=De door {0} geretourneerde federatieve id is al aan een andere gebruiker gekoppeld -confirmAccountLinking=Bevestig het koppelen van het account {0} van id-provider {1} met uw account -confirmEmailAddressVerification=Bevestig de geldigheid van e-mailadres {0} -confirmExecutionOfActions=Voer de volgende actie(s) uit - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Terug naar applicatie -missingParameterMessage=Ontbrekende parameters: {0} -clientNotFoundMessage=Client niet gevonden -clientDisabledMessage=Client uitgeschakeld -invalidParameterMessage=Ongeldige parameter: {0} -alreadyLoggedIn=U bent al aangemeld -differentUserAuthenticated=U bent al geauthenticeerd als een andere gebruiker ''{0}'' in deze sessie. Probeer u opnieuw aan te melden. -brokerLinkingSessionExpired=Broker-accountkoppeling aangevraagd, maar huidige sessie is niet meer geldig. -proceedWithAction=» Klik hier om door te gaan - -requiredAction.CONFIGURE_TOTP=OTP configureren -requiredAction.terms_and_conditions=Voorwaarden -requiredAction.UPDATE_PASSWORD=Wachtwoord bijwerken -requiredAction.UPDATE_PROFILE=Profiel bijwerken -requiredAction.VERIFY_EMAIL=E-mailadres verifi\u00ebren - -p3pPolicy=CP="Dit is geen P3P-beleid!" - -doX509Login=U wordt aangemeld als: -clientCertificate=X509-clientcertificaat: -noCertificate=[Geen certificaat] - - -pageNotFound=Deze pagina is niet beschikbaar -internalServerError=Er is een probleem opgetreden diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_pt_BR.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_pt_BR.properties deleted file mode 100644 index 37f43f8e2..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_pt_BR.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=Entrar -needHelp=Precisa de ajuda? -selectAlternative=Ou selecione outra alternativa - -doRegister=Registrar -doCancel=Cancelar -doSubmit=Enviar -doYes=Sim -doNo=N\u00e3o -doContinue=Continuar -doIgnore=Ignorar -doAccept=Aceitar -doDecline=Rejeitar -doForgotPassword=Esqueceu sua senha? -doClickHere=Clique aqui -doImpersonate=Personificar -kerberosNotConfigured=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -kerberosNotConfiguredTitle=O Kerberos n\u00e3o est\u00e1 configurado. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -bypassKerberosDetail=Voc\u00ea n\u00e3o entrou via Kerberos ou seu navegador n\u00e3o est\u00e1 configurado para a autentica\u00e7\u00e3o do Kerberos. Clique em Continuar para entrar por outros meios. -kerberosNotSetUp=\u00c9 necess\u00e1rio configurar o Kerberos antes de entrar. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -registerWithTitle=Registrar com {0} -registerWithTitleHtml={0} -loginTitle=Entrar no {0} -loginTitleHtml={0} -impersonateTitle={0} Personificar usu\u00e1rio -impersonateTitleHtml={0} Personificar usu\u00e1rio -realmChoice=Realm -unknownUser=Usu\u00e1rio desconhecido -loginTotpTitle=Configura\u00e7\u00e3o do Mobile Authenticator -loginProfileTitle=Atualizar informa\u00e7\u00f5es da conta -loginTimeout=Voc\u00ea demorou muito para entrar. O processo ser\u00e1 reiniciado. -oauthGrantTitle=Conceder acesso -oauthGrantTitleHtml={0} -errorTitle=Pedimos desculpas -errorTitleHtml=Pedimos desculpas -emailVerifyTitle=Verifica\u00e7\u00e3o de email -emailForgotTitle=Esqueceu sua senha? -updatePasswordTitle=Atualizar senha -codeSuccessTitle=C\u00f3digo de sucesso -codeErrorTitle=C\u00f3digo de erro: {0} - -termsTitle=Termos e Condi\u00e7\u00f5es -termsTitleHtml=Termos e Condi\u00e7\u00f5es -termsText=

      Termos e Condi\u00e7\u00f5es a serem definidos

      - -recaptchaFailed=Recaptcha inv\u00e1lido -recaptchaNotConfigured=O recaptcha \u00e9 obrigat\u00f3rio e n\u00e3o est\u00e1 configurado -consentDenied=Consentimento negado. - -noAccount=Novo usu\u00e1rio? -username=Nome de usu\u00e1rio -usernameOrEmail=Nome de usu\u00e1rio ou email -firstName=Nome -givenName=Primeiro nome -fullName=Nome completo -lastName=Sobrenome -familyName=Sobrenome -email=Email -password=Senha -passwordConfirm=Confirme a senha -passwordNew=Nova senha -passwordNewConfirm=Confirma\u00e7\u00e3o de nova senha -rememberMe=Lembrar-me -authenticatorCode=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -address=Endere\u00e7o -street=Logradouro -locality=Cidade ou localidade -region=Estado -postal_code=CEP -country=Pa\u00eds -emailVerified=Email verificado -gssDelegationCredential=Credencial de delega\u00e7\u00e3o GSS - -loginTotpStep1=Instale um dos seguintes aplicativos em seu dispositivo m\u00f3vel -loginTotpStep2=Abra o aplicativo e digitalize o c\u00f3digo de barras -loginTotpStep3=Insira o c\u00f3digo de verifica\u00e7\u00e3o \u00fanico fornecido pelo aplicativo e clique em Enviar para finalizar a configura\u00e7\u00e3o -loginTotpManualStep2=Abra o aplicativo e insira a chave -loginTotpManualStep3=Use os valores a seguir caso o aplicativo permita que eles sejam definidos -loginTotpUnableToScan=N\u00e3o foi poss\u00edvel digitalizar? -loginTotpScanBarcode=Digitalizar c\u00f3digo de barras? -loginTotpOneTime=C\u00f3digo de verifica\u00e7\u00e3o \u00fanico -loginTotpType=Tipo -loginTotpAlgorithm=Algor\u00edtimo -loginTotpDigits=D\u00edgitos -loginTotpInterval=Intervalo - -loginTotp.totp=Baseado em tempo -loginTotp.hotp=Baseado em contador - - -oauthGrantRequest=Deseja conceder esses privil\u00e9gios de acesso? -inResource=em - -emailVerifyInstruction1=Enviamos um email com instru\u00e7\u00f5es para a verifica\u00e7\u00e3o do seu endere\u00e7o de email -emailVerifyInstruction2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailVerifyInstruction3=para reenviar o email - -emailLinkIdpTitle=Vincular {0} -emailLinkIdp1=Foi enviado um email com instru\u00e7\u00f5es para vincular a conta {0} {1} com a sua conta {2} -emailLinkIdp2=N\u00e3o recebeu um c\u00f3digo de verifica\u00e7\u00e3o em seu email? -emailLinkIdp3=para reenviar o email -emailLinkIdp4=Se voc\u00ea j\u00e1 verificou o email em outro navegador -emailLinkIdp5=para continuar - -backToLogin=« Voltar para o Login - -emailInstruction=Digite seu nome de usu\u00e1rio ou endere\u00e7o de email e enviaremos instru\u00e7\u00f5es de como criar uma nova senha - -copyCodeInstruction=Copie este c\u00f3digo e cole-o no aplicativo - -pageExpiredTitle=A p\u00e1gina expirou -pageExpiredMsg1=Para reiniciar o processo de login -pageExpiredMsg2=Para continuar o processo de login - -personalInfo=Informa\u00e7\u00f5es Pessoais: -role_admin=Admininstrador -role_realm-admin=Administrador do realm -role_create-realm=Criar realm -role_create-client=Criar cliente -role_view-realm=Exibir realm -role_view-users=Exibir usu\u00e1rios -role_view-applications=Exibir aplicativos -role_view-clients=Exibir clientes -role_view-events=Exibir eventos -role_view-identity-providers=Exibir provedores de identidade -role_manage-realm=Gerenciar realm -role_manage-users=Gerenciar usu\u00e1rios -role_manage-applications=Gerenciar aplicativos -role_manage-identity-providers=Gerenciar provedores de identidade -role_manage-clients=Gerenciar clientes -role_manage-events=Gerenciar eventos -role_view-profile=Exibir perfil -role_manage-account=Gerenciar contas -role_manage-account-links=Gerenciar v\u00ednculos da conta -role_read-token=Ler token -role_offline-access=Acesso offline -client_account=Conta -client_security-admin-console=Console de Administra\u00e7\u00e3o de Seguran\u00e7a -client_admin-cli=Admin CLI -client_realm-management=Gerenciamento de realm -client_broker=Agente - -invalidUserMessage=Usu\u00e1rio ou senha inv\u00e1lidos -invalidEmailMessage=Endere\u00e7o de email inv\u00e1lido -accountDisabledMessage=Sua conta est\u00e1 desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es. -accountTemporarilyDisabledMessage=Sua conta est\u00e1 temporariamente desativada. Entre em contato com o Administrador do sistema para mais informa\u00e7\u00f5es ou tente novamente mais tarde. -expiredCodeMessage=Sua sess\u00e3o expirou. Tente entrar novamente. -expiredActionMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. -expiredActionTokenNoSessionMessage=Sua a\u00e7\u00e3o expirou. -expiredActionTokenSessionExistsMessage=Sua a\u00e7\u00e3o expirou. Tente entrar novamente. - -missingFirstNameMessage=Digite seu nome -missingLastNameMessage=Digite seu sobrenome -missingEmailMessage=Digite seu endere\u00e7o de email -missingUsernameMessage=Digite seu nome de usu\u00e1rio -missingPasswordMessage=Digita sua senha -missingTotpMessage=Digite seu c\u00f3digo autenticador -notMatchPasswordMessage=Ocorreu um problema ao tentar entrar. As senhas inseridas n\u00e3o coincidem. - -invalidPasswordExistingMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser inv\u00e1lida. -invalidPasswordBlacklistedMessage=Ocorreu um problema ao tentar entrar. A senha inserida pode ser proibida. -invalidPasswordConfirmMessage=Ocorreu um problema ao tentar entrar. A confima\u00e7\u00e3o de senha inserida n\u00e3o \u00e9 igual. -invalidTotpMessage=Ocorreu um problema ao tentar entrar. O c\u00f3digo de autentica\u00e7\u00e3o inserido pode ser inv\u00e1lido. - -usernameExistsMessage=Este nome de usu\u00e1rio j\u00e1 existe -emailExistsMessage=Este email j\u00e1 existe - -federatedIdentityExistsMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Entre como Gerente de conta para vincular a conta. - -confirmLinkIdpTitle=Conta j\u00e1 existente -federatedIdentityConfirmLinkMessage=Usu\u00e1rio com {0} {1} j\u00e1 existe. Como deseja prosseguir? -federatedIdentityConfirmReauthenticateMessage=Autenticar como {0} para vincular sua conta com {1} -confirmLinkIdpReviewProfile=Revisar perfil -confirmLinkIdpContinue=Adicionar \u00e0 conta existente - -configureTotpMessage=Voc\u00ea precisa configurar o Mobile Authenticator para ativar sua conta -updateProfileMessage=Voc\u00ea precisa atualizar o seu perfil de usu\u00e1rio para ativar a conta -updatePasswordMessage=Voc\u00ea precisa alterar sua senha para ativar a conta -resetPasswordMessage=Voc\u00ea precisa alterar sua senha -verifyEmailMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para ativar a conta -linkIdpMessage=Voc\u00ea precisa verificar seu endere\u00e7o de email para vincular sua conta com {0} - -emailSentMessage=Em breve, voc\u00ea receber\u00e1 um email com mais instru\u00e7\u00f5es -emailSendErrorMessage=N\u00e3o foi poss\u00edvel enviar o email. Tente novamente mais tarde. - -accountUpdatedMessage=Sua conta foi atualizada -accountPasswordUpdatedMessage=Sua senha foi atualizada - -noAccessMessage=Sem acesso - -invalidPasswordMinLengthMessage=A senha deve ter no m\u00ednimo {0} caracteres -invalidPasswordMinDigitsMessage=A senha deve ter no m\u00ednimo {0} numerais -invalidPasswordMinLowerCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres min\u00fasculos -invalidPasswordMinUpperCaseCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres mai\u00fasculos -invalidPasswordMinSpecialCharsMessage=A senha deve ter no m\u00ednimo {0} caracteres especiais -invalidPasswordNotUsernameMessage=Sua senha n\u00e3o pode ser igual ao nome de usu\u00e1rio -invalidPasswordRegexPatternMessage=A senha deve corresponder ao padr\u00e3o regex -invalidPasswordHistoryMessage=A senha n\u00e3o deve ser igual a nenhuma das \u00faltimas {0} senhas -invalidPasswordGenericMessage=Sua senha n\u00e3o corresponde \u00e0 pol\u00edtica de senhas - -failedToProcessResponseMessage=Falha ao processar a resposta -httpsRequiredMessage=HTTPS necess\u00e1rio -realmNotEnabledMessage=Realm desabilitado -invalidRequestMessage=Pedido inv\u00e1lido -failedLogout=Falha no Logout -unknownLoginRequesterMessage=Solicitante de login desconhecido -loginRequesterNotEnabledMessage=Solicitante de login desabilitado -bearerOnlyMessage=Aplicativos Bearer-only n\u00e3o t\u00eam permiss\u00e3o para iniciar o login pelo navegador -standardFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo padr\u00e3o est\u00e1 desabilitado para o cliente. -implicitFlowDisabledMessage=Cliente n\u00e3o tem permiss\u00e3o para iniciar o login pelo navegador com o tipo de resposta informado. O fluxo impl\u00edcito est\u00e1 desabilitado para o cliente. -invalidRedirectUriMessage=URI de redirecionamento inv\u00e1lido -unsupportedNameIdFormatMessage=Formato do nome n\u00e3o suportado -invalidRequesterMessage=Solicitante inv\u00e1lido -registrationNotAllowedMessage=Registro n\u00e3o permitido. -resetCredentialNotAllowedMessage=N\u00e3o \u00e9 permitido redefinir a credencial. - -permissionNotApprovedMessage=Permiss\u00e3o negada -noRelayStateInResponseMessage=Sem retorno de RelayState do provedor de identidade -insufficientPermissionMessage=Permiss\u00f5es insuficientes para vincular identidades -couldNotProceedWithAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel continuar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -couldNotObtainTokenMessage=N\u00e3o foi poss\u00edvel obter o token do provedor de identidade -unexpectedErrorRetrievingTokenMessage=Erro inesperado ao recuperar o token do provedor de identidade -unexpectedErrorHandlingResponseMessage=Erro inesperado ao lidar com a resposta do provedor de identidade -identityProviderAuthenticationFailedMessage=Falha na autentica\u00e7\u00e3o. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade -identityProviderDifferentUserMessage=Autenticado como {0}, mas era esperado ser autenticado como {1} -couldNotSendAuthenticationRequestMessage=N\u00e3o foi poss\u00edvel enviar pedido de autentica\u00e7\u00e3o para o provedor de identidade -unexpectedErrorHandlingRequestMessage=Erro inesperado ao lidar com o pedido de autentica\u00e7\u00e3o para o provedor de identidade -invalidAccessCodeMessage=C\u00f3digo de acesso inv\u00e1lido -sessionNotActiveMessage=Sess\u00e3o inativa -invalidCodeMessage=Encontramos um problema. Tente entrar novamente pelo aplicativo. -identityProviderUnexpectedErrorMessage=Encontramos um problema. N\u00e3o foi poss\u00edvel a autentica\u00e7\u00e3o com o provedor de identidade. -identityProviderNotFoundMessage=N\u00e3o foi poss\u00edvel encontrar um provedor de identidade com esse identificador -identityProviderLinkSuccess=Seu email foi verificado com sucesso. Retorne ao navegador original e continue o login. -staleCodeMessage=Esta p\u00e1gina n\u00e3o est\u00e1 mais v\u00e1lida. Volte para o aplicativo e entre novamente. -realmSupportsNoCredentialsMessage=O realm n\u00e3o suporta nenhum tipo de credencial. -identityProviderNotUniqueMessage=O realm suporta m\u00faltiplos provedores de identidade. N\u00e3o foi poss\u00edvel determinar qual provedor de identidade deve ser usado na autentica\u00e7\u00e3o. -emailVerifiedMessage=Seu endere\u00e7o de email foi verificado. -staleEmailVerificationLink=O link n\u00e3o est\u00e1 mais v\u00e1lido. Voc\u00ea pode j\u00e1 ter verificado seu endere\u00e7o de email. -identityProviderAlreadyLinkedMessage=A identidade federada retornada por {0} j\u00e1 est\u00e1 vinculada a outro usu\u00e1rio -confirmAccountLinking=Confirmar a vincula\u00e7\u00e3o da conta {0} do provedor de identidade {1} com a sua conta -confirmEmailAddressVerification=Confirmar a validade do endere\u00e7o de email {0} -confirmExecutionOfActions=Realizar as seguintes a\u00e7\u00f5es - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« Voltar para o aplicativo -missingParameterMessage=Par\u00e2metros ausentes: {0} -clientNotFoundMessage=Cliente n\u00e3o encontrado -clientDisabledMessage=Cliente desabilitado -invalidParameterMessage=Par\u00e2mentro inv\u00e1lido: {0} -alreadyLoggedIn=Voc\u00ea j\u00e1 est\u00e1 conectado -differentUserAuthenticated=Voc\u00ea j\u00e1 est\u00e1 conectado como o usu\u00e1rio ''{0}'' nesta sess\u00e3o. Tente entrar novamente. -brokerLinkingSessionExpired=Vincula\u00e7\u00e3o de conta de agente solicitada, mas a sess\u00e3o atual n\u00e3o est\u00e1 mais v\u00e1lida. -proceedWithAction=» Clique aqui para continuar - -requiredAction.CONFIGURE_TOTP=Configurar OTP -requiredAction.terms_and_conditions=Termos e Condi\u00e7\u00f5es -requiredAction.UPDATE_PASSWORD=Atualizar senha -requiredAction.UPDATE_PROFILE=Atualizar perfil -requiredAction.VERIFY_EMAIL=Verificar email - -p3pPolicy=CP="Esta n\u00e3o \u00e9 uma pol\u00edtica P3P!" - -doX509Login=Voc\u00ea vai entrar como: -clientCertificate=Certificado X509 do cliente: -noCertificate=[Sem certificado] - - -pageNotFound=Esta p\u00e1gina n\u00e3o est\u00e1 dispon\u00edvel -internalServerError=Encontramos um problema diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_ru.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_ru.properties deleted file mode 100644 index f512abe4c..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_ru.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u0412\u0445\u043e\u0434 -needHelp=\u041d\u0443\u0436\u043d\u0430 \u043f\u043e\u043c\u043e\u0449\u044c? -selectAlternative=\u0418\u043b\u0438 \u0432\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 - -doRegister=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f -doCancel=\u041e\u0442\u043c\u0435\u043d\u0430 -doSubmit=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c -doYes=\u0414\u0430 -doNo=\u041d\u0435\u0442 -doContinue=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c -doIgnore=\u0418\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c -doAccept=\u041f\u0440\u0438\u043d\u044f\u0442\u044c -doDecline=\u041e\u0442\u043c\u0435\u043d\u0438\u0442\u044c -doForgotPassword=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -doClickHere=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c -doImpersonate=\u0418\u043c\u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f -kerberosNotConfigured=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -kerberosNotConfiguredTitle=Kerberos \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -bypassKerberosDetail=\u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c Kerberos, \u0438\u043b\u0438 \u0432\u0430\u0448 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043cr Kerberos. \u041d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c" \u0434\u043b\u044f \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432. -kerberosNotSetUp=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Kerberos, \u043f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -registerWithTitle=\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e {0} -registerWithTitleHtml={0} -loginTitle=\u0412\u0445\u043e\u0434 \u0432 {0} -loginTitleHtml={0} -impersonateTitle=\u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c {0} -impersonateTitleHtml={0} \u041e\u043b\u0438\u0446\u0435\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -realmChoice=\u041e\u0431\u043b\u0430\u0441\u0442\u044c -unknownUser=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c -loginTotpTitle=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 Mobile Authenticator -loginProfileTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -loginTimeout=\u041f\u0440\u0435\u0432\u044b\u0448\u0435\u043d \u043f\u0435\u0440\u0438\u043e\u0434 \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. \u0412\u043e\u0437\u0432\u0440\u0430\u0442 \u043a \u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u0432\u0445\u043e\u0434\u0430. -oauthGrantTitle=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f -oauthGrantTitleHtml={0} -errorTitle=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -errorTitleHtml=\u0418\u0437\u0432\u0438\u043d\u0438\u0442\u0435 -emailVerifyTitle=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailForgotTitle=\u0417\u0430\u0431\u044b\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c? -updatePasswordTitle=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -codeSuccessTitle=\u0423\u0441\u043f\u0435\u0448\u043d\u044b\u0439 \u043a\u043e\u0434 -codeErrorTitle=\u041e\u0448\u0438\u0431\u043e\u0447\u043d\u044b\u0439 \u043a\u043e\u0434: {0} - -termsTitle=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsTitleHtml=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -termsText=

      \u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u044b

      - -recaptchaFailed=\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u0430\u044f Recaptcha -recaptchaNotConfigured=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f Recaptcha. Recaptcha \u043d\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u0430 -consentDenied=\u0412 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e. - -noAccount=\u041d\u043e\u0432\u044b\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c? -username=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -usernameOrEmail=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -firstName=\u0418\u043c\u044f -givenName=\u0418\u043c\u044f -fullName=\u041f\u043e\u043b\u043d\u043e\u0435 \u0438\u043c\u044f -lastName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -familyName=\u0424\u0430\u043c\u0438\u043b\u0438\u044f -email=\u042d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u0430\u044f \u043f\u043e\u0447\u0442\u0430 -password=\u041f\u0430\u0440\u043e\u043b\u044c -passwordConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNew=\u041d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -passwordNewConfirm=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -rememberMe=\u0417\u0430\u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043c\u0435\u043d\u044f -authenticatorCode=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 -address=\u0410\u0434\u0440\u0435\u0441 -street=\u0423\u043b\u0438\u0446\u0430 -locality=\u0413\u043e\u0440\u043e\u0434 -region=\u0420\u0435\u0433\u0438\u043e\u043d -postal_code=\u041f\u043e\u0447\u0442\u043e\u0432\u044b\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 -country=\u0421\u0442\u0440\u0430\u043d\u0430 -emailVerified=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -gssDelegationCredential=\u0414\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 GSS - -loginTotpStep1=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0435 \u043e\u0434\u043d\u043e \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0432\u043e\u0435 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e -loginTotpStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u0440\u043e\u0441\u043a\u0430\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434 -loginTotpStep3=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c, \u0432\u044b\u0434\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0438 \u043d\u0430\u0436\u043c\u0438\u0442\u0435 "\u041e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c" \u0434\u043b\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 -loginTotpManualStep2=\u041e\u0442\u043a\u0440\u043e\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043b\u044e\u0447 -loginTotpManualStep3=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438, \u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 -loginTotpUnableToScan=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435? -loginTotpScanBarcode=\u0421\u043a\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0448\u0442\u0440\u0438\u0445\u043a\u043e\u0434? -loginTotpOneTime=\u041e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c -loginTotpType=\u0422\u0438\u043f -loginTotpAlgorithm=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c -loginTotpDigits=\u0426\u0438\u0444\u0440\u044b -loginTotpInterval=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -loginTotp.totp=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 -loginTotp.hotp=\u041e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 \u0441\u0447\u0435\u0442\u0447\u0438\u043a\u0435 - - -oauthGrantRequest=\u0412\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0435 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u044d\u0442\u0438\u043c \u043f\u0440\u0430\u0432\u0430\u043c? -inResource=\u0432 - -emailVerifyInstruction1=\u0412\u0430\u043c \u0431\u044b\u043b\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044e \u0430\u0434\u0440\u0435\u0441\u0430 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -emailVerifyInstruction2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailVerifyInstruction3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e - -emailLinkIdpTitle=\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c {0} -emailLinkIdp1=\u041d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 \u043f\u043e \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0435 {0} \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {1} \u043a \u0432\u0430\u0448\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {2} -emailLinkIdp2=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f? -emailLinkIdp3=\u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e -emailLinkIdp4=\u0412\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0435 -emailLinkIdp5=\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -backToLogin=« \u041d\u0430\u0437\u0430\u0434 \u043a \u0432\u0445\u043e\u0434\u0443 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -emailInstruction=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u0441\u0432\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0430\u043c \u0431\u0443\u0434\u0443\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043f\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u0430\u0440\u043e\u043b\u044f - -copyCodeInstruction=\u0421\u043a\u043e\u043f\u0438\u0440\u0443\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 \u043a\u043e\u0434 \u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0435\u0433\u043e \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 - -pageExpiredTitle=\u0421\u0440\u043e\u043a \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0438\u0441\u0442\u0435\u043a -pageExpiredMsg1=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -pageExpiredMsg2=\u041f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0443 \u0432\u0445\u043e\u0434\u0430 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 - -personalInfo=\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f: -role_admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 -role_realm-admin=\u0410\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_create-realm=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c -role_create-client=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 -role_view-realm=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 -role_view-users=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 -role_view-applications=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 -role_view-clients=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u0432 -role_view-events=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441\u043e\u0431\u044b\u0442\u0438\u0439 -role_view-identity-providers=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-realm=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -role_manage-users=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c\u0438 -role_manage-applications=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438 -role_manage-identity-providers=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u043c\u0438 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -role_manage-clients=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438 -role_manage-events=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438 -role_view-profile=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c {0} -role_manage-account=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u044c\u044e -role_manage-account-links=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0430\u043c\u0438 \u043d\u0430 \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c -role_read-token=\u0427\u0442\u0435\u043d\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u0430 -role_offline-access=\u0410\u0432\u0442\u043e\u043d\u043e\u043c\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f -client_account=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c -client_security-admin-console=\u041a\u043e\u043d\u0441\u043e\u043b\u044c \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 -client_admin-cli=\u041a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 -client_realm-management=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431\u043b\u0430\u0441\u0442\u044c\u044e -client_broker=\u0411\u0440\u043e\u043a\u0435\u0440 - -invalidUserMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u043e\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u043f\u0430\u0440\u043e\u043b\u044c -invalidEmailMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -accountDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. -accountTemporarilyDisabledMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d\u0430. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435\u0441\u044c \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u043e\u043c\u0443 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0443 \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u043b\u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. -expiredCodeMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0441\u0435\u0430\u043d\u0441\u0430 \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -expiredActionTokenNoSessionMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e -expiredActionTokenSessionExistsMessage=\u0412\u0440\u0435\u043c\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0438\u0441\u0442\u0435\u043a\u043b\u043e. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. - -missingFirstNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f -missingLastNameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0444\u0430\u043c\u0438\u043b\u0438\u044e -missingEmailMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -missingUsernameMessage=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -missingPasswordMessage=\u0417\u0430\u0434\u0430\u0439\u0442\u0435 \u043f\u0430\u0440\u043e\u043b\u044c -missingTotpMessage=\u0412\u0432\u0435\u0434\u0438\u0442\u0435 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 -notMatchPasswordMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u0440\u043e\u043b\u0438 \u043d\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0442. - -invalidPasswordExistingMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c. -invalidPasswordBlacklistedMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d\u043d\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0447\u0435\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a. -invalidPasswordConfirmMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u0432\u0435\u0434\u0435\u043d\u043e \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u0440\u043e\u043b\u044f. -invalidTotpMessage=\u041f\u0440\u0438 \u0432\u0445\u043e\u0434\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u0432\u0435\u0434\u0435\u043d \u043d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430. - -usernameExistsMessage=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -emailExistsMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 - -federatedIdentityExistsMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0412\u043e\u0439\u0434\u0438\u0442\u0435 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b "\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0437\u0430\u043f\u0438\u0441\u044f\u043c\u0438", \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c. - -confirmLinkIdpTitle=\u0423\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 -federatedIdentityConfirmLinkMessage=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441 {0} {1} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? -federatedIdentityConfirmReauthenticateMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043a\u0430\u043a {0} \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0441 {1} -confirmLinkIdpReviewProfile=\u041e\u0431\u0437\u043e\u0440 \u043f\u0440\u043e\u0444\u0438\u043b\u044f -confirmLinkIdpContinue=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0443\u0447\u0435\u0442\u043d\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c - -configureTotpMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c Mobile Authenticator -updateProfileMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f -updatePasswordMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -resetPasswordMessage=\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -verifyEmailMessage=\u0414\u043b\u044f \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0438\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b -linkIdpMessage=\u0414\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043a {0} \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -emailSentMessage=\u0412 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u0430\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u043c\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f\u043c\u0438 -emailSendErrorMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043d\u0430 \u0432\u0430\u0448 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. \u041f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u0435 \u043f\u043e\u043f\u044b\u0442\u043a\u0443 \u043f\u043e\u0437\u0436\u0435. - -accountUpdatedMessage=\u0412\u0430\u0448\u0430 \u0443\u0447\u0435\u0442\u043d\u0430\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430 -accountPasswordUpdatedMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d - -noAccessMessage=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - -invalidPasswordMinLengthMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordMinDigitsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0446\u0438\u0444\u0440 -invalidPasswordMinLowerCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u0442\u0440\u043e\u0447\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinUpperCaseCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0437\u0430\u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0431\u0443\u043a\u0432 -invalidPasswordMinSpecialCharsMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 {0} \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 -invalidPasswordNotUsernameMessage=\u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u043e\u043b\u044f -invalidPasswordRegexPatternMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 -invalidPasswordHistoryMessage=\u041f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c \u043d\u0438 \u0441 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 {0} \u043f\u0430\u0440\u043e\u043b\u0435\u0439 -invalidPasswordGenericMessage=\u0412\u0430\u0448 \u043f\u0430\u0440\u043e\u043b\u044c \u043d\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0435 \u043f\u0430\u0440\u043e\u043b\u0435\u0439 - -failedToProcessResponseMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043e\u0442\u0432\u0435\u0442 -httpsRequiredMessage=\u0422\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f HTTPS -realmNotEnabledMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0430 -invalidRequestMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 -failedLogout=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u044b\u0445\u043e\u0434 -unknownLoginRequesterMessage=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442 -loginRequesterNotEnabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d -bearerOnlyMessage=\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0441 \u0435\u0434\u0438\u043d\u043e\u0439 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0435\u0439 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u0445\u043e\u0434\u0430 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 -standardFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -implicitFlowDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442\u0443 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0445\u043e\u0434 \u0447\u0435\u0440\u0435\u0437 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u043e\u0442\u0432\u0435\u0442\u0430. \u041d\u0435\u044f\u0432\u043d\u044b\u0439 \u043f\u043e\u0442\u043e\u043a \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430. -invalidRedirectUriMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 uri \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u0430\u0446\u0438\u0438 -unsupportedNameIdFormatMessage=\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439 NameIDFormat -invalidRequesterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044e\u0449\u0438\u0439 -registrationNotAllowedMessage=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0430 -resetCredentialNotAllowedMessage=\u0421\u0431\u0440\u043e\u0441 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d - -permissionNotApprovedMessage=\u0412 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043e\u0442\u043a\u0430\u0437\u0430\u043d\u043e -noRelayStateInResponseMessage=\u041e\u0442\u0432\u0435\u0442 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f -insufficientPermissionMessage=\u041d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432 -couldNotProceedWithAuthenticationRequestMessage=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -couldNotObtainTokenMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0442\u043e\u043a\u0435\u043d \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorRetrievingTokenMessage=\u041f\u0440\u0438 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0442\u043e\u043a\u0435\u043d\u0430 \u043e\u0442 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -unexpectedErrorHandlingResponseMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043e\u0442\u0432\u0435\u0442\u0430 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -identityProviderAuthenticationFailedMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -identityProviderDifferentUserMessage=\u0410\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {0}, \u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d \u043a\u0430\u043a {1} -couldNotSendAuthenticationRequestMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 -unexpectedErrorHandlingRequestMessage=\u041f\u0440\u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043d\u0430 \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0443 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043d\u0435\u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u043d\u043d\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 -invalidAccessCodeMessage=\u041d\u0435\u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0439 \u043a\u043e\u0434 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 -sessionNotActiveMessage=\u0421\u0435\u0430\u043d\u0441 \u043d\u0435 \u0430\u043a\u0442\u0438\u0432\u0435\u043d -invalidCodeMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. -identityProviderUnexpectedErrorMessage=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u044e \u0443 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. -identityProviderNotFoundMessage=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c -identityProviderLinkSuccess=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443. -staleCodeMessage=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u0435\u0440\u043d\u0438\u0442\u0435\u0441\u044c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -realmSupportsNoCredentialsMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0439 \u0442\u0438\u043f \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445. -identityProviderNotUniqueMessage=\u041e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u0432 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439. \u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440 \u0434\u043e\u043b\u0436\u0435\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0430\u0443\u0442\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. -emailVerifiedMessage=\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d -staleEmailVerificationLink=\u0421\u0441\u044b\u043b\u043a\u0430 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u0430. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u0432\u044b \u0443\u0436\u0435 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0438 \u044d\u0442\u043e\u0442 \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b. -identityProviderAlreadyLinkedMessage=\u0424\u0435\u0434\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0435\u043d\u043d\u044b\u0439 {0}, \u0443\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c -confirmAccountLinking=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0443 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 {0} \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430 \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 {1} \u043a \u0441\u0432\u043e\u0435\u0439 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 -confirmEmailAddressVerification=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b {0} \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u043c -confirmExecutionOfActions=\u0412\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u041d\u0430\u0437\u0430\u0434 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 -missingParameterMessage=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b: {0} -clientNotFoundMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d -clientDisabledMessage=\u041a\u043b\u0438\u0435\u043d\u0442 \u0434\u0435\u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u043d -invalidParameterMessage=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440: {0} -alreadyLoggedIn=\u0412\u044b \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u043b\u0438 \u0432\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 -differentUserAuthenticated=\u0412\u044b \u0443\u0436\u0435 \u0432\u043e\u0448\u043b\u0438 \u0432 \u044d\u0442\u043e\u0442 \u0441\u0435\u0430\u043d\u0441 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u0438\u043c\u0435\u043d\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f ''{0}''. \u041f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0445\u043e\u0434 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e. -brokerLinkingSessionExpired=\u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0430 \u0443\u0447\u0435\u0442\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0431\u0440\u043e\u043a\u0435\u0440\u0430, \u043e\u0434\u043d\u0430\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u0435\u0430\u043d\u0441 \u043d\u0435\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u0435\u043d. -proceedWithAction=» \u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u0437\u0434\u0435\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c - -requiredAction.CONFIGURE_TOTP=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0439 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0439 \u043f\u0430\u0440\u043e\u043b\u044c (OTP) -requiredAction.terms_and_conditions=\u0423\u0441\u043b\u043e\u0432\u0438\u044f \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f -requiredAction.UPDATE_PASSWORD=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0430\u0440\u043e\u043b\u044c -requiredAction.UPDATE_PROFILE=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0444\u0438\u043b\u044c -requiredAction.VERIFY_EMAIL=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0430\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b - -p3pPolicy=CP="\u042d\u0442\u043e \u043d\u0435 \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0430 P3P!" - -doX509Login=\u0412\u0445\u043e\u0434 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d \u0441 \u0443\u0447\u0435\u0442\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438: -clientCertificate=\u041a\u043b\u0438\u0435\u043d\u0442\u0441\u043a\u0438\u0439 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442 X509: -noCertificate=[\u041d\u0435\u0442 \u0441\u0435\u0440\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u0430] - - -pageNotFound=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 -internalServerError=\u0412\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 diff --git a/deps/keycloak/themes/sys-admin/login/messages/messages_zh_CN.properties b/deps/keycloak/themes/sys-admin/login/messages/messages_zh_CN.properties deleted file mode 100644 index 027252ce3..000000000 --- a/deps/keycloak/themes/sys-admin/login/messages/messages_zh_CN.properties +++ /dev/null @@ -1,284 +0,0 @@ -doLogIn=\u767b\u5f55 -needHelp=\u662f\u5426\u9700\u8981\u5e2e\u52a9\uff1f -selectAlternative=\u6216\u8005\u9009\u62e9\u4e00\u4e2a\u5907\u9009 - -doRegister=\u6ce8\u518c -doCancel=\u53d6\u6d88 -doSubmit=\u63d0\u4ea4 -doYes=\u662f -doNo=\u5426 -doContinue=\u7ee7\u7eed -doIgnore=\u5ffd\u7565 -doAccept=\u63a5\u53d7 -doDecline=\u62d2\u7edd -doForgotPassword=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -doClickHere=\u5355\u51fb\u6b64\u5904 -doImpersonate=\u6a21\u62df -kerberosNotConfigured=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -kerberosNotConfiguredTitle=Kerberos \u672a\u914d\u7f6e\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -bypassKerberosDetail=\u60a8\u672a\u901a\u8fc7 Kerberos \u8fdb\u884c\u767b\u5f55\uff0c\u6216\u8005\u60a8\u7684\u6d4f\u89c8\u5668\u672a\u8bbe\u7f6e Kerberos \u767b\u5f55\u3002\u8bf7\u5355\u51fb\u201c\u7ee7\u7eed\u201d\u901a\u8fc7\u5176\u4ed6\u65b9\u5f0f\u767b\u5f55\u3002 -kerberosNotSetUp=\u60a8\u9700\u8981\u5148\u8bbe\u7f6e Kerberos \u624d\u80fd\u8fdb\u884c\u767b\u5f55\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -registerWithTitle=\u4f7f\u7528 {0} \u6ce8\u518c -registerWithTitleHtml={0} -loginTitle=\u767b\u5f55\u5230 {0} -loginTitleHtml={0} -impersonateTitle={0} \u6a21\u62df\u7528\u6237 -impersonateTitleHtml={0}\u6a21\u62df\u7528\u6237 -realmChoice=\u57df -unknownUser=\u672a\u77e5\u7528\u6237 -loginTotpTitle=Mobile Authenticator \u8bbe\u7f6e -loginProfileTitle=\u66f4\u65b0\u5e10\u6237\u4fe1\u606f -loginTimeout=\u60a8\u7684\u767b\u5f55\u65f6\u95f4\u8fc7\u957f\u3002\u91cd\u65b0\u5f00\u59cb\u767b\u5f55\u8fc7\u7a0b\u3002 -oauthGrantTitle=\u6388\u6743\u8bbf\u95ee -oauthGrantTitleHtml={0} -errorTitle=\u5f88\u62b1\u6b49\u3002 -errorTitleHtml=\u5f88\u62b1\u6b49 -emailVerifyTitle=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 -emailForgotTitle=\u5fd8\u8bb0\u60a8\u7684\u5bc6\u7801\uff1f -updatePasswordTitle=\u66f4\u65b0\u5bc6\u7801 -codeSuccessTitle=\u6210\u529f\u7801 -codeErrorTitle=\u9519\u8bef\u7801\uff1a{0} - -termsTitle=\u6761\u6b3e -termsTitleHtml=\u6761\u6b3e -termsText=

      \u9700\u8981\u786e\u5b9a\u7684\u6761\u6b3e

      - -recaptchaFailed=\u65e0\u6548\u7684\u9a8c\u8bc1\u7801 -recaptchaNotConfigured=\u9700\u8981\u9a8c\u8bc1\u7801\uff0c\u5c1a\u672a\u8fdb\u884c\u914d\u7f6e -consentDenied=\u8bb8\u53ef\u88ab\u62d2\u7edd\u3002 - -noAccount=\u65b0\u7528\u6237? -username=\u7528\u6237\u540d -usernameOrEmail=\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6 -firstName=\u540d\u5b57 -givenName=\u540d\u5b57 -fullName=\u5168\u540d -lastName=\u59d3\u6c0f -familyName=\u59d3\u6c0f -email=\u7535\u5b50\u90ae\u4ef6 -password=\u5bc6\u7801 -passwordConfirm=\u786e\u8ba4\u5bc6\u7801 -passwordNew=\u65b0\u5bc6\u7801 -passwordNewConfirm=\u786e\u8ba4\u65b0\u5bc6\u7801 -rememberMe=\u8bb0\u4f4f\u7528\u6237\u540d\u548c\u5bc6\u7801 -authenticatorCode=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -address=\u5730\u5740 -street=\u8857\u9053 -locality=\u5e02 -region=\u7701\uff0c\u81ea\u6cbb\u533a\uff0c\u76f4\u8f96\u5e02 -postal_code=\u90ae\u653f\u7f16\u7801 -country=\u56fd\u5bb6/\u5730\u533a -emailVerified=\u7535\u5b50\u90ae\u4ef6\u5df2\u9a8c\u8bc1 -gssDelegationCredential=GSS \u6388\u6743\u51ed\u636e - -loginTotpStep1=\u5728\u60a8\u7684\u624b\u673a\u4e0a\u5b89\u88c5\u4ee5\u4e0b\u5176\u4e2d\u4e00\u79cd\u5e94\u7528 -loginTotpStep2=\u6253\u5f00\u5e94\u7528\u5e76\u626b\u63cf\u6761\u5f62\u7801 -loginTotpStep3=\u8f93\u5165\u5e94\u7528\u63d0\u4f9b\u7684\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801\uff0c\u7136\u540e\u5355\u51fb\u201c\u63d0\u4ea4\u201d\u5b8c\u6210\u8bbe\u7f6e -loginTotpManualStep2=\u6253\u5f00\u5e94\u7528\u5e76\u8f93\u5165\u5bc6\u94a5 -loginTotpManualStep3=\u5982\u679c\u5e94\u7528\u5141\u8bb8\u8bbe\u7f6e\uff0c\u8bf7\u4f7f\u7528\u4ee5\u4e0b\u914d\u7f6e\u503c -loginTotpUnableToScan=\u65e0\u6cd5\u626b\u63cf\uff1f -loginTotpScanBarcode=\u626b\u63cf\u6761\u5f62\u7801\uff1f -loginTotpOneTime=\u4e00\u6b21\u6027\u9a8c\u8bc1\u7801 -loginTotpType=\u7c7b\u578b -loginTotpAlgorithm=\u7b97\u6cd5 -loginTotpDigits=\u6570\u5b57 -loginTotpInterval=\u95f4\u9694 - -loginTotp.totp=\u57fa\u4e8e\u65f6\u95f4 -loginTotp.hotp=\u57fa\u4e8e\u8ba1\u6570\u5668 - - -oauthGrantRequest=\u60a8\u662f\u5426\u6388\u4e88\u8fd9\u4e9b\u8bbf\u95ee\u6743\u9650\uff1f -inResource=in - -emailVerifyInstruction1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u9a8c\u8bc1\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailVerifyInstruction2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailVerifyInstruction3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 - -emailLinkIdpTitle=\u94fe\u63a5 {0} -emailLinkIdp1=\u5df2\u5411\u60a8\u53d1\u9001\u4e00\u5c01\u5305\u542b\u5982\u4f55\u5c06 {0} \u5e10\u6237 {1} \u94fe\u63a5\u5230\u60a8\u7684 {2} \u5e10\u6237\u7684\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp2=\u672a\u5728\u7535\u5b50\u90ae\u4ef6\u4e2d\u6536\u5230\u9a8c\u8bc1\u7801\uff1f -emailLinkIdp3=\u91cd\u65b0\u53d1\u9001\u7535\u5b50\u90ae\u4ef6 -emailLinkIdp4=\u5982\u679c\u60a8\u5df2\u5728\u4e0d\u540c\u7684\u6d4f\u89c8\u5668\u4e2d\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\uff0c -emailLinkIdp5=\u8bf7\u7ee7\u7eed - -backToLogin=« \u8fd4\u56de\u767b\u5f55 - -emailInstruction=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d\u6216\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u6211\u4eec\u5c06\u5411\u60a8\u53d1\u9001\u5982\u4f55\u521b\u5efa\u65b0\u5bc6\u7801\u7684\u8bf4\u660e - -copyCodeInstruction=\u590d\u5236\u6b64\u9a8c\u8bc1\u7801\u5e76\u7c98\u8d34\u5230\u60a8\u7684\u5e94\u7528 - -pageExpiredTitle=\u9875\u9762\u5df2\u8fc7\u671f -pageExpiredMsg1=\u91cd\u65b0\u542f\u52a8\u767b\u5f55\u8fc7\u7a0b -pageExpiredMsg2=\u7ee7\u7eed\u767b\u5f55\u8fc7\u7a0b - -personalInfo=\u4e2a\u4eba\u4fe1\u606f\uff1a -role_admin=\u7ba1\u7406\u5458 -role_realm-admin=\u57df\u7ba1\u7406\u5458 -role_create-realm=\u521b\u5efa\u57df -role_create-client=\u521b\u5efa\u5ba2\u6237 -role_view-realm=\u67e5\u770b\u57df -role_view-users=\u67e5\u770b\u7528\u6237 -role_view-applications=\u67e5\u770b\u5e94\u7528 -role_view-clients=\u67e5\u770b\u5ba2\u6237 -role_view-events=\u67e5\u770b\u4e8b\u4ef6 -role_view-identity-providers=\u67e5\u770b\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-realm=\u7ba1\u7406\u57df -role_manage-users=\u7ba1\u7406\u7528\u6237 -role_manage-applications=\u7ba1\u7406\u5e94\u7528 -role_manage-identity-providers=\u7ba1\u7406\u8eab\u4efd\u63d0\u4f9b\u8005 -role_manage-clients=\u7ba1\u7406\u5ba2\u6237 -role_manage-events=\u7ba1\u7406\u4e8b\u4ef6 -role_view-profile=\u67e5\u770b\u914d\u7f6e\u6587\u4ef6 -role_manage-account=\u7ba1\u7406\u5e10\u6237 -role_manage-account-links=\u7ba1\u7406\u5e10\u6237\u94fe\u63a5 -role_read-token=\u8bfb\u53d6\u4ee4\u724c -role_offline-access=\u79bb\u7ebf\u8bbf\u95ee -client_account=\u5e10\u6237 -client_security-admin-console=\u5b89\u5168\u7ba1\u7406\u63a7\u5236\u53f0 -client_admin-cli=\u7ba1\u7406\u547d\u4ee4\u884c\u5de5\u5177 -client_realm-management=\u57df\u7ba1\u7406 -client_broker=\u4ee3\u7406 - -invalidUserMessage=\u65e0\u6548\u7528\u6237\u540d\u6216\u5bc6\u7801 -invalidEmailMessage=\u65e0\u6548\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -accountDisabledMessage=\u60a8\u7684\u5e10\u6237\u5df2\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u3002 -accountTemporarilyDisabledMessage=\u60a8\u7684\u5e10\u6237\u4e34\u65f6\u88ab\u7981\u7528\u3002\u8bf7\u8054\u7cfb\u60a8\u7684\u7cfb\u7edf\u7ba1\u7406\u5458\u4ee5\u4e86\u89e3\u66f4\u591a\u4fe1\u606f\u6216\u7a0d\u5019\u91cd\u8bd5\u3002 -expiredCodeMessage=\u60a8\u7684\u4f1a\u8bdd\u5df2\u8d85\u65f6\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -expiredActionTokenNoSessionMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f -expiredActionTokenSessionExistsMessage=\u60a8\u7684\u64cd\u4f5c\u5df2\u8fc7\u671f\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 - -missingFirstNameMessage=\u8f93\u5165\u60a8\u7684\u540d\u5b57 -missingLastNameMessage=\u8f93\u5165\u60a8\u7684\u59d3\u6c0f -missingEmailMessage=\u8f93\u5165\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740 -missingUsernameMessage=\u8f93\u5165\u60a8\u7684\u7528\u6237\u540d -missingPasswordMessage=\u8f93\u5165\u60a8\u7684\u5bc6\u7801 -missingTotpMessage=\u8f93\u5165\u60a8\u7684\u9a8c\u8bc1\u7801 -notMatchPasswordMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u3002 - -invalidPasswordExistingMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u65e0\u6548\u3002 -invalidPasswordBlacklistedMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u5bc6\u7801\u53ef\u80fd\u88ab\u5217\u5165\u9ed1\u540d\u5355\u3002 -invalidPasswordConfirmMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u786e\u8ba4\u5bc6\u7801\u4e0d\u5339\u914d\u3002 -invalidTotpMessage=\u767b\u5f55\u9047\u5230\u95ee\u9898\u3002\u60a8\u8f93\u5165\u7684\u9a8c\u8bc1\u7801\u53ef\u80fd\u65e0\u6548\u3002 - -usernameExistsMessage=\u7528\u6237\u540d\u5df2\u5b58\u5728 -emailExistsMessage=\u7535\u5b50\u90ae\u4ef6\u5df2\u5b58\u5728 - -federatedIdentityExistsMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u8bf7\u767b\u5f55\u5230\u5e10\u6237\u7ba1\u7406\u94fe\u63a5\u8be5\u5e10\u6237\u3002 - -confirmLinkIdpTitle=\u5e10\u6237\u5df2\u5b58\u5728 -federatedIdentityConfirmLinkMessage=\u5177\u6709 {0} {1} \u7684\u7528\u6237\u5df2\u5b58\u5728\u3002\u63a5\u4e0b\u6765\u5982\u4f55\u64cd\u4f5c\uff1f -federatedIdentityConfirmReauthenticateMessage=\u8eab\u4efd\u9a8c\u8bc1\u4e3a {0}\uff0c\u5c06 {1} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 -confirmLinkIdpReviewProfile=\u5ba1\u67e5\u914d\u7f6e\u6587\u4ef6 -confirmLinkIdpContinue=\u6dfb\u52a0\u5230\u73b0\u6709\u5e10\u6237 - -configureTotpMessage=\u60a8\u9700\u8981\u8bbe\u7f6e Mobile Authenticator \u4ee5\u6fc0\u6d3b\u5e10\u6237 -updateProfileMessage=\u60a8\u9700\u8981\u66f4\u65b0\u7528\u6237\u914d\u7f6e\u6587\u4ef6\u4ee5\u6fc0\u6d3b\u5e10\u6237 -updatePasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801\u4ee5\u6fc0\u6d3b\u5e10\u6237 -resetPasswordMessage=\u60a8\u9700\u8981\u66f4\u6539\u5bc6\u7801 -verifyEmailMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u6fc0\u6d3b\u5e10\u6237 -linkIdpMessage=\u60a8\u9700\u8981\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u4ee5\u5c06 {0} \u94fe\u63a5\u5230\u60a8\u7684\u5e10\u6237 - -emailSentMessage=\u60a8\u5c06\u5f88\u5feb\u6536\u5230\u5305\u542b\u66f4\u591a\u8bf4\u660e\u7684\u7535\u5b50\u90ae\u4ef6 -emailSendErrorMessage=\u6211\u4eec\u65e0\u6cd5\u53d1\u9001\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u7a0d\u540e\u91cd\u8bd5\u3002 - -accountUpdatedMessage=\u60a8\u7684\u5e10\u6237\u5df2\u66f4\u65b0 -accountPasswordUpdatedMessage=\u60a8\u7684\u5bc6\u7801\u5df2\u66f4\u65b0 - -noAccessMessage=\u65e0\u8bbf\u95ee\u6743\u9650 - -invalidPasswordMinLengthMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5b57\u7b26 -invalidPasswordMinDigitsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u6570\u5b57 -invalidPasswordMinLowerCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5c0f\u5199\u5b57\u6bcd -invalidPasswordMinUpperCaseCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u5927\u5199\u5b57\u6bcd -invalidPasswordMinSpecialCharsMessage=\u5bc6\u7801\u5fc5\u987b\u81f3\u5c11\u5305\u542b {0} \u4e2a\u7279\u6b8a\u5b57\u7b26 -invalidPasswordNotUsernameMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u80fd\u4e0e\u7528\u6237\u540d\u76f8\u540c -invalidPasswordRegexPatternMessage=\u5bc6\u7801\u5fc5\u987b\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d -invalidPasswordHistoryMessage=\u5bc6\u7801\u4e0d\u5f97\u4e0e\u6700\u8fd1 {0} \u6b21\u4f7f\u7528\u7684\u5bc6\u7801\u76f8\u540c -invalidPasswordGenericMessage=\u60a8\u7684\u5bc6\u7801\u4e0d\u5339\u914d\u5bc6\u7801\u7b56\u7565 - -failedToProcessResponseMessage=\u65e0\u6cd5\u5904\u7406\u56de\u590d -httpsRequiredMessage=\u9700\u8981 HTTPS -realmNotEnabledMessage=\u57df\u672a\u542f\u7528 -invalidRequestMessage=\u65e0\u6548\u8bf7\u6c42 -failedLogout=\u65e0\u6cd5\u6ce8\u9500 -unknownLoginRequesterMessage=\u672a\u77e5\u7684\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005 -loginRequesterNotEnabledMessage=\u767b\u5f55\u8bf7\u6c42\u53d1\u8d77\u8005\u672a\u542f\u7528 -bearerOnlyMessage=Bearer-only \u7684\u5e94\u7528\u5141\u8bb8\u901a\u8fc7\u6d4f\u89c8\u5668\u767b\u5f55 -standardFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u6807\u51c6\u6d41\u7a0b\u3002 -implicitFlowDisabledMessage=\u5ba2\u6237\u4e0d\u5f97\u53d1\u8d77\u6307\u5b9a\u54cd\u5e94\u7c7b\u578b\u7684\u6d4f\u89c8\u5668\u767b\u5f55\u3002\u5df2\u7981\u7528\u5ba2\u6237\u4f7f\u7528\u9690\u5f0f\u6d41\u7a0b\u3002 -invalidRedirectUriMessage=\u65e0\u6548\u7684\u91cd\u5b9a\u5411\u94fe\u63a5 -unsupportedNameIdFormatMessage=\u4e0d\u652f\u6301\u7684 nameID \u683c\u5f0f -invalidRequesterMessage=\u65e0\u6548\u7684\u53d1\u8d77\u8005 -registrationNotAllowedMessage=\u4e0d\u5141\u8bb8\u6ce8\u518c -resetCredentialNotAllowedMessage=\u4e0d\u5141\u8bb8\u91cd\u7f6e\u51ed\u636e - -permissionNotApprovedMessage=\u6743\u9650\u88ab\u62d2\u7edd -noRelayStateInResponseMessage=\u8eab\u4efd\u63d0\u4f9b\u8005\u54cd\u5e94\u6ca1\u6709\u4e2d\u7ee7\u72b6\u6001 -insufficientPermissionMessage=\u94fe\u63a5\u8eab\u4efd\u65f6\u6743\u9650\u4e0d\u8db3 -couldNotProceedWithAuthenticationRequestMessage=\u65e0\u6cd5\u7ee7\u7eed\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u63d0\u51fa\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -couldNotObtainTokenMessage=\u65e0\u6cd5\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u83b7\u53d6\u4ee4\u724c -unexpectedErrorRetrievingTokenMessage=\u4ece\u8eab\u4efd\u63d0\u4f9b\u8005\u68c0\u7d22\u4ee4\u724c\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -unexpectedErrorHandlingResponseMessage=\u5904\u7406\u8eab\u4efd\u63d0\u4f9b\u8005\u7684\u54cd\u5e94\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -identityProviderAuthenticationFailedMessage=\u8eab\u4efd\u9a8c\u8bc1\u5931\u8d25\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1 -identityProviderDifferentUserMessage=\u9a8c\u8bc1\u8eab\u4efd\u4e3a {0}\uff0c\u4f46\u671f\u671b\u9a8c\u8bc1\u8eab\u4efd\u4e3a {1} -couldNotSendAuthenticationRequestMessage=\u65e0\u6cd5\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42 -unexpectedErrorHandlingRequestMessage=\u5904\u7406\u5411\u8eab\u4efd\u63d0\u4f9b\u8005\u53d1\u9001\u7684\u8eab\u4efd\u9a8c\u8bc1\u8bf7\u6c42\u65f6\u53d1\u751f\u610f\u5916\u9519\u8bef -invalidAccessCodeMessage=\u65e0\u6548\u7684\u8bbf\u95ee\u7801 -sessionNotActiveMessage=\u4f1a\u8bdd\u672a\u6fc0\u6d3b -invalidCodeMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u8bf7\u5c1d\u8bd5\u901a\u8fc7\u60a8\u7684\u5e94\u7528\u91cd\u65b0\u767b\u5f55\u3002 -identityProviderUnexpectedErrorMessage=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898\u3002\u65e0\u6cd5\u901a\u8fc7\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -identityProviderNotFoundMessage=\u4f7f\u7528\u6807\u8bc6\u7b26\u65e0\u6cd5\u627e\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 -identityProviderLinkSuccess=\u60a8\u5df2\u6210\u529f\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u3002\u8bf7\u8fd4\u56de\u521d\u59cb\u6d4f\u89c8\u5668\u5e76\u7ee7\u7eed\u767b\u5f55\u3002 -staleCodeMessage=\u6b64\u9875\u9762\u5df2\u5931\u6548\u3002\u8bf7\u8fd4\u56de\u60a8\u7684\u5e94\u7528\u5e76\u91cd\u65b0\u767b\u5f55\u3002 -realmSupportsNoCredentialsMessage=\u57df\u4e0d\u652f\u6301\u4efb\u4f55\u51ed\u636e\u7c7b\u578b -identityProviderNotUniqueMessage=\u57df\u652f\u6301\u591a\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u3002\u65e0\u6cd5\u786e\u5b9a\u5e94\u4f7f\u7528\u54ea\u4e2a\u8eab\u4efd\u63d0\u4f9b\u8005\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\u3002 -emailVerifiedMessage=\u60a8\u7684\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u5df2\u9a8c\u8bc1 -staleEmailVerificationLink=\u8be5\u94fe\u63a5\u5df2\u5931\u6548\u3002\u60a8\u53ef\u80fd\u5df2\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u3002 -identityProviderAlreadyLinkedMessage={0} \u6240\u8fd4\u56de\u7684\u8054\u5408\u8eab\u4efd\u5df2\u94fe\u63a5\u5230\u5176\u4ed6\u7528\u6237 -confirmAccountLinking=\u786e\u8ba4\u5c06\u60a8\u7684\u5e10\u6237\u94fe\u63a5\u5230\u8eab\u4efd\u63d0\u4f9b\u8005 {1} \u7684\u5e10\u6237 {0} -confirmEmailAddressVerification=\u786e\u8ba4\u7535\u5b50\u90ae\u4ef6\u5730\u5740 {0} \u7684\u6709\u6548\u6027 -confirmExecutionOfActions=\u6267\u884c\u4ee5\u4e0b\u64cd\u4f5c - -locale_ca=Catal\u00e0 -locale_de=Deutsch -locale_en=English -locale_es=Espa\u00f1ol -locale_fr=Fran\u00e7ais -locale_it=Italiano -locale_ja=\u65e5\u672c\u8a9e -locale_nl=Nederlands -locale_no=Norsk -locale_pt_BR=Portugu\u00eas (Brasil) -locale_pt-BR=Portugu\u00eas (Brasil) -locale_ru=\u0420\u0443\u0441\u0441\u043a\u0438\u0439 -locale_lt=Lietuvi\u0173 -locale_zh-CN=\u4e2d\u6587\u7b80\u4f53 -locale_sv=Svenska - -backToApplication=« \u8fd4\u56de\u5e94\u7528 -missingParameterMessage=\u7f3a\u5c11\u53c2\u6570\uff1a{0} -clientNotFoundMessage=\u65e0\u6cd5\u627e\u5230\u5ba2\u6237 -clientDisabledMessage=\u5ba2\u6237\u5df2\u88ab\u7981\u7528 -invalidParameterMessage=\u65e0\u6548\u7684\u53c2\u6570\uff1a{0} -alreadyLoggedIn=\u60a8\u5df2\u767b\u5f55 -differentUserAuthenticated=\u60a8\u5df2\u5728\u6b64\u4f1a\u8bdd\u4e2d\u4ee5\u4e0d\u540c\u7684\u7528\u6237 ''{0}'' \u767b\u5f55\u3002\u8bf7\u5c1d\u8bd5\u91cd\u65b0\u767b\u5f55\u3002 -brokerLinkingSessionExpired=\u5df2\u8bf7\u6c42\u4ee3\u7406\u5e10\u6237\u94fe\u63a5\uff0c\u4f46\u5f53\u524d\u4f1a\u8bdd\u5df2\u5931\u6548\u3002 -proceedWithAction=» \u5355\u51fb\u6b64\u5904\u7ee7\u7eed - -requiredAction.CONFIGURE_TOTP=\u914d\u7f6e OTP -requiredAction.terms_and_conditions=\u6761\u6b3e -requiredAction.UPDATE_PASSWORD=\u66f4\u65b0\u5bc6\u7801 -requiredAction.UPDATE_PROFILE=\u66f4\u65b0\u914d\u7f6e\u6587\u4ef6 -requiredAction.VERIFY_EMAIL=\u9a8c\u8bc1\u7535\u5b50\u90ae\u4ef6 - -p3pPolicy=CP=\u201c\u8fd9\u4e0d\u662f P3P \u7b56\u7565\uff01\u201d - -doX509Login=\u60a8\u7684\u767b\u5f55\u8eab\u4efd\u5c06\u4e3a\uff1a -clientCertificate=X509 \u5ba2\u6237\u8bc1\u4e66\uff1a -noCertificate=[\u65e0\u8bc1\u4e66] - - -pageNotFound=\u6b64\u9875\u9762\u4e0d\u53ef\u7528 -internalServerError=\u6211\u4eec\u9047\u5230\u4e00\u4e2a\u95ee\u9898 diff --git a/deps/keycloak/themes/sys-admin/login/mobile-login.ftl b/deps/keycloak/themes/sys-admin/login/mobile-login.ftl deleted file mode 100644 index f37ff46f4..000000000 --- a/deps/keycloak/themes/sys-admin/login/mobile-login.ftl +++ /dev/null @@ -1,47 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> -

      Please Enter your Mobile Number and OTP

      -
      - <#if realm.password> -
      -
      -
      -
      - - -
      - -
      - - -
      -
      - - - -
      - - diff --git a/deps/keycloak/themes/sys-admin/login/resources/css/login.css b/deps/keycloak/themes/sys-admin/login/resources/css/login.css deleted file mode 100644 index 538b058f8..000000000 --- a/deps/keycloak/themes/sys-admin/login/resources/css/login.css +++ /dev/null @@ -1,165 +0,0 @@ -body, html { - display: flex; - flex-direction: column; - flex: 1; - overflow: hidden; - min-height: 0; - font-size: 14px; - color:rgba(0,0,0,.87); - margin:0; - height: 100%; -} -body { - margin: 0; -} -.login-content { - background-size:cover; - background-position:center; - height: 82vh; - min-width: 320px; - display:flex; - justify-content:space-between; -} -.login-content .box { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - width: 55%; -} - -.login-content .box .box-container { - width:100%; -} -.login-content .box .logo { - display: block; - margin-left: auto; - margin-right: auto; - margin-top: 30px; -} -.login-content .box .application-name { - width: 270px; - font-family: Muli; - font-size: 24px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 40px; -} -.login-content .box .form { -} - -.login-content .box .login-field { - width: 100px; - letter-spacing: 1px; - border: none; - outline: none; -} -.login-content .box input[type="text"]:focus, .login-content .box input[type="password"]:focus { - outline: none; -} -.login-content .box input[type="text"]:-webkit-autofill, .login-content .box input[type="password"]:-webkit-autofill -{ - box-shadow: 0 0 0px 1000px white inset; -} -.login-content .box .submit{ - color: #ffffff; - border-style: none; - margin-top: 2rem; - background: transparent linear-gradient(91deg, #2CD889 0%, #4CA07A 100%) 0% 0% no-repeat padding-box; - border-radius: 4px; - padding: 1rem; -} -.login-content .box .visibility { - position: relative; - left: 296px; - top: 20px; - width: 24px; - height: 24px; - opacity: 0.54; - border: none; -} -.login-content .box .copyright { - min-width: 320px; - text-align: center; - font-size: 14px; - opacity: .54; - position: relative; - top: 50px; -} -.message-text { - width: 322px; - height: 22px; - opacity: 0.87; - font-family: Muli; - font-size: 14px; - font-weight: normal; - font-style: normal; - font-stretch: normal; - line-height: 1.3; - letter-spacing: -0.4px; - text-align: left; - color: #b8082a; - border: 0px; - position: relative; - top: 180px; - left: 64px; - display: inline-flex; - align-items: center; -} -.identity-providers { - width: 270px; - font-family: Muli; - font-size: 16px; - font-weight: 600; - font-style: normal; - font-stretch: normal; - line-height: 0.83; - letter-spacing: -0.4px; - text-align: left; - color: #0055B8; - margin-left: 32px; - margin-top: 20px; -} - -.login-content .box .social-link-style { - width: 320px; - height: 36px; - border-radius: 2px; - background-color: var(--white); - font-family: Muli; - font-size: 14px; - font-weight: bold; - font-style: normal; - font-stretch: normal; - line-height: normal; - letter-spacing: normal; - text-align: center; - color: #00754a; - border-style: solid; - border-color: #00754a; - margin-top: 0px; - margin-left: 30px; - margin-bottom: 10px; -} - -.login-content .box .para { - font-family: Muli; - font-size: 14px; - margin-left: 30px; -} - -@media (max-width: 992px) { - .login-content { - flex-direction: column-reverse; - justify-content: flex-end; - } - .login-content .box { - width: 100%; - } -} \ No newline at end of file diff --git a/deps/keycloak/themes/sys-admin/login/resources/css/main.css b/deps/keycloak/themes/sys-admin/login/resources/css/main.css deleted file mode 100644 index 4937c8cdc..000000000 --- a/deps/keycloak/themes/sys-admin/login/resources/css/main.css +++ /dev/null @@ -1,117 +0,0 @@ -.navbar { - box-shadow: 0 6px 20px #C1CFD933; -} - -.nav-link { - color: #646D82 !important; - font-size: 12px; - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.main-img-wrapper { - display: flex; - justify-content: flex-end; - width: 45%; -} - -.main-img { - width: 85%; - height: 70%; -} - -.footer-content { - height: 12vh; - border-top: 1px solid #d3d3d3; - display: flex; - justify-content: space-around; - align-items: center; - -} - -.footer-gov-logo { - width: 25%; - margin: 0 5px; -} - -.footer-link { - color: #040E28; - margin: 0 5px; -} - -.form-title { - font-size: 25px; -} - -.form-subtitle { - font-size: 35px; -} - -.form-content { - padding-left: 9rem; - padding-right: 18rem; -} - -.input-field { - display: flex; - border: 1px solid #E9E9F0; - border-radius: 4px; - padding: 20px; -} - -.input-field:focus-within { - border: 1px solid #2CD889; -} - -.input-wrapper { - display: flex; - justify-content: space-between; -} - -.mobile-prefix, .otp-prefix { - padding: 1px 2px; - margin: 0; -} - -.mobile input { - width: 150px !important; -} - -.login-arrow { - width: 9%; - margin-left: 2rem; -} - -.otp-prefix { - color: #4CA07A; -} - -@media (max-width: 992px) { - - .main-img-wrapper { - width: 100%; - } - .main-img-wrapper img { - height: 90%; - - } - .form-content { - padding: 0 2rem; - } - .form { - display: flex; - flex-direction: column; - justify-content: center; - align-items: center; - } - .form-subtitle { - font-size: 25px; - text-align: center; - } - .input-wrapper { - flex-direction: column; - } - .otp { - margin-top: 1rem - } -} \ No newline at end of file diff --git a/deps/keycloak/themes/sys-admin/login/resources/img/di.png b/deps/keycloak/themes/sys-admin/login/resources/img/di.png deleted file mode 100644 index 80332ea10b53e2c7ff020bd374a65366c4bfc78d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9153 zcma)CLwF@ju#Iio*2K1*iEZ1SNp3K)F|m`0ZQHhPaKnjhz4R0W{6Jyb$BgxHo84v%z^%`)spvvtx6^aPx4h^7f*7 z@kL87k7%_;OZT^;T5-B$lvx}Z90e@JF_G2fo8R>qI2<6K7c6qo-i?*x>fvm)_U){< zSHvTJa2iTrotYI?zmE^~%t3qI349TP+sBb?Y7?ifU%e>G0DfZsezG??=y5u?_&<@1R()K2Gdz+W|$Q*?pE&it|^tx zIf8}^Oh7+f4xEns!OaqaUyI$y+vrjAf8=)u!u!g3Ko#w9-ZIF*qTDcQ zmeG>Pxhx-}jMUKsM1&wp7Q{G3dC&kZV3-gjo6qTm0rJYkWp=p=_AW!MY4isPzH_w6 zqYNysE7JQz#zExwC_$ZjR0r&z61EcspzszYgLEFrh&FqX4ys|_$NA1ZW?TEZ;kPew zOs*JRu3m%<9G6{U3og9?{ENR^!IY2&GvpEK??k`}zlhN=*cK_ye|VQeUlLyv{EGRJ z--EUGLD`1-0ahb+YSRd3P&v&ECIGz~0mtk04(;-lR(4Qw3m8tX20p%ZFF-t@_!vSt zov^j-e31i7$DLu{oU(9$wnYd-!4(|r2yu?a;3S_6)fo5(G>znUS4}OC4^MIBReMxG z=O2hQ3a~bpr=0~l_3@#^;dT@4TNg-0o(jf3b6iL%$~qI@gg-qqH}^EFaxUv}+IXm(r>WZlUy<9Qp5~HR%>buJCJMt$(0dCnh4;|~ z)!c#vaB$(2WNVy7`eavE`Ot;%Hs!^9v9&AgZEu}O>Ci))&~*shyT`vi*<4)&UzFr` z180NWuVUPn=atVlJME5B+Z^a11Kw8qGQ0t0I%Jm63C$>D`L|7E(fLX@bSe<>mLm;+ zTyHD}Q|bM}Vc~%M`IiVMqoaL?LN19SoiJ~)I@|z@_*tweoa>K0cF^;LLffq1I zpKX(I1It@}5^q_iz7TaOyuDm1kb&=pWRaeYFf&M#b&bRaqLId;A76R0e?ER!wzP8#!W*?qU9cUnA;KR~lNiv1`c&A_OS}wO{TJ_a z1WoEsAJI@keFT8DICRLw)P-mdVh{}*Ey|_W1i_`>F^UTMy1Ww(MgB$~;frCH zl|i?XM=&pDX67e@ItfCTjh2;?o}v&W$qKhjw3S7Sl*q4#_HT%P>og&++plzK;bOHi z6H#(Eg4uJ$9}Q&d7cC?qUUj&RbI$C1yts5Vs+Fm^a2&bHoY@_H$jdKzU?=d)Vr8eo z#2u#>6Z%ZfK5 z2L;B=w_XS=Apza;$9g`epiYGCo9$O!ARxX8s}}qFAUR}RrfT} zxu!t>nbTEz^D+gSfJLMP9q%C_*Tu_^9_Kj=c7F;YAg1P!v%tIj!_ND6y|Mq_>9V#2 z&Aa(Jd2U#KrX)QGrk($|0IFO+9S6pRar+HH8I){7S07i5e=!hMH)HMaKXLpheb&@S zi1HbQB;3yKhS7Pga|QbD2i`)A#CD|7<=Ak!95@G?hXwJ31$ZZJ zAgTH`EgCup@j=#B!BZQ0K0Buc#G*2Y6eFg^g^Y{Zg3tPCW9pizzErQqWX;6RqNi zM`SOG2vlz=C4~H0{XFt3uZWBv5|yUL#N%+SEmfaCv6da?F6Jak9cK`;Nqo?hSv8lX z=%>?)zKL?5favkSWGd`+)+r=h{zNW8UVQPGhlLEYB)Vf$^Z-VpIG79@kS+cAqiHIQ z6~8#;{7;HK{<*lXF{1MQ(yoR-zTIX`VNGWuy7?9fngZ1}Lf^!qX2{j=p6J6wd|4D4 z%Y?lVv5>!5VWzja60I#S{MiV2naNgJ4>NgJJn0WcE{Vq^w)7(kt0?Ilkb_~wkxW_;gV&^S>&_lRcV9O}W$gvs^=Ne^DR zYL6Rm9bwUXIOKT(drUDpfG?><{aQ0GXY!w02a{Y)K25Az6v7eF%%0{WD4o^~YQY)A zO{kPED_Iv_nfn}B-dg@*UdsjOxEpWMa~lGoMsD)+Q)4E9RH3k$-htBoJ5lV4s{-># z6EBn5IdBEm7Xqcm($3$~rd39RlD6!HP0uzO^}*euz^9 zKH)Nkbk3K9peV2GsxvW_9oAx$_BPn$ygb74M6tCb%xF)1^axbc4o3pemRn*B-J9MD zO49mINwsI{Y-^lRUQdV=sR0SyO0?zdtg<UD!rj8OC7DhoX46drGN|Ru?JcoeN zjkU(|T?y*pWAk`nU3z+hr#5=7uv zhUW)e(WS=G^);)SS`s=Z_t}rk*Xesct4wDr71qUtuG^P-OvJsx-9JO!OM-ysGP0pi zezpO+^oknOYO~SP6xlEim?Uq4qZ7}E(zo=P?_;>^EoOoHwt%=u`e~;6ZHpo^*kN3-OxT-|I zDQ7hCOHhT4U0el8uyrgBJydw11jdglj322$66(y{9L7 zIiU0N^Ft#g4gZyaI1dB{$Hx;(IKqe(%>hH!q8Y6W2^) zcOjpjW(69T5N#Q`iOZ&0d8~jwvvf@HwJ+6Z=RdjT$CKZ&^HV$?J04?_f|8Is}P=g0sDg5#-3|`Sxda^F#ft1NcEX<2>-?S9x&XDj%1 z_N;V~6-!Gi`3)6GPdZUtjM^Z(bxqFJCbDd-!VJ%AYoF4IxxUkjv*BiYWE)5O!^&9C z=f1gw_xE8mA-xt4dhQzI`22jbl>&Uv2hT9}NG-|R_0=jp$8B2f7l$8tT-Oy15LOxy znELMK=)|Y-q$CyM6se8ha7rkJ_@Ts7ta=m)Zu)_TGz=*Vi8TDIM$bo*whHA~SELAm z1FMGK_?IgPl%dWuXMB5TDyd6K`eu8-s(&Qe9MjWNHzR7-NE$d)CED@XMkkP@21SEk z9Qm`AZnSO(WNDZ%c64;yT)tfu1TEJ0Y0C)XOUy~iNbMhFET-gtj2WdzZuvi%eSLnw z9WMb@_~#|c4OF$lp1d!_aj84{)b#c3VI=hI7?ksb6iV7)38Pl+jh7?mn(B z^?UafG2#!3sVEblF5l2rWy3iy&*1kQW>{Z*U)*7gb_z%B*m~k!h9(8Qs@=hIJ}6~l z5k?Syjjy#+ftwyEUUUy08Q|iI6AX`^Z3w*3ouY{zI-U|cwYem7@3r;OJ=;no-Kqms zbAnD5flKJ}xNh6r8_yUu#|s|1>V~mq%H@2znJex{-%|@B7pg#dlmh(V^Yimz&X36V z>hdG|eFYM{N_`^YMjcUV-xnXWZokv(Qd3jI9rVeoDDm7=^76vP3$(raPksEHA=%4?uvH#4S1*V8eEXY)UGB$aj808)*ZIqpm9u7y*yQ})f| z>N8$RJMvs-#>fAb-s5WWxm=SO1>PwQxuFTm_1S&rr3WDV{l5GqSo% zSp8WJyj;v%cOdZcZelb53=@Y#wA#+L5LTTtvj_Pf2I zjVX3?vSaf^L`EE~-_IipPWnXr))P^p@SAnY4=dWuEm1Dg@AF-Xa$Xy^hH4BIZ7gL> zMbH#$^0Ed+k8R-l7&tWpySA;CO^8ERudr^scf7Vbc_zhUDsdANZCsQ1yd_j-eA1sz zRW})Ww4s~n$R{Nl7xkv&^_QpJnnM+6VD{N7x;5Igl9ci8mCk{z0Q)F3!j0yQVW9jU z5J=UW+Q!zgfBo**HBQ}UeuHaGF(F6DeFoq*eYz}NKYvf$mvQ{}2Gi;_)gtxwJ~4$) zzN;%+imu3`%fJm9U!&`EEOoegl7WGKc|g%fmnSaZmQ4$Tsh+KVt=T%BZMvE!flH@q zX%yUTZwcPK2NO4y?`n;9G*RYIy;@42vxmr22jt{AnSadZ&Puy@rP=f;VzaA{Tq%r_AceP?AV$HS=i6Ow7) z{LATd5AaSJuWoEaWc-bbcT({Ng;uO~8Y~eU z`=K>aKxKvDdk(`87B0*my3_T*K=~-0keD0iX}`L+HyjOj;5mVdfgx_2J#Agy*FOkE z=mY&(LgsoY7SvPQ=_F}<@YU+`@A!jBjjUDI4h_7yhKok%pBaW9Q97>-PnJC2&qd9F z1 zyC_rc!HKZgcNJdbsn;aI2?#S|#Hrz#N=3PHp!lF1@Wc%DjKV4^7$|SV;SV05B1IV{ ze@!`UwmON4h;;z+?e;|zxx^1Ap^ip*kz6Me@=XS7xl(CqXm%%-)mA1s;^8E>whVQA zjSE0qYDk7Dy8_I>O31U%sE7vc$%GRFm3dWpgKh!ljN2Z06vP$Bj)RxVOt?du3;vB@`YWWZ(tcCK*J!4LFSB?6Zm?m4ftiqDIg?&%``qM zWA2^|s!;pAhlv3fq0yw;jzN5Ly!5RUfF-ydaEO<1prE2~Y(mcaV!X@5_>JdE?a@M} zrlN+8xuybPKn$v5O8d5Jyoy?w;VSR>^m>k!&pq8WA8rhy1t#p4NiIGp8OBeSfd$)m z&pnhZ$a4v->`1Xttk_x&L!sbT+VQEbRzd-`yA<&c1S7c~d*TqEqRk$U|t#1$os+exy zor^}9^1uwnW*(IN0;mn0Qz<)ZMVU_%GBSf1HKr^Gm$5oM7ik9dHFLpi@L!eanFg=D zDg}R6yLnClt#@*9x4VOx^m@jYHJ>r;;A$E8G42F53iFWId0yO(vN+8)Tj+= z<6i{5zEPgM=;{veg-k77I83w+iU>nr!If4aA`RG@8ibVEj*$2nP!k`hsrt}~Y|{zs zD{q0)$ZNXjj-o*1(lLg(Vpg z^Y>Sc_X_&{SGr}+U)GkE_!F$DOY5S8pA>2^a@x&G1`gR7W|rsLnPnxd^LDN!O)2kM z(bBrUg_PVZIMMERQ@d=qu^;GQmMs;#lkqPU6qI#zS@)qP?0~14_pf>Dyx`Wn6p$=- zsly0Ix~b!*BA5$+lw>wmLKvINxD=+w)xYRQu%stVk_eLoE_O)!V=>Y9z|l!mX>=$w zOMk~!5a5pOJ*2D9fyUXsE@P6IcD8R$O1N4psHHt_>MeX*2HsKytBRzTHl&G>&qZCT z4xV(TH3Lt4W>y!2#S&yZD#?Yk1&7SGW9g3#usqe1Gh#HNrqS81_LsXGyZqe5ZBH(`{oWW_KDpf84E?$mcx-ZU?&ZWPhm4unm$Vm zGSMPWuE;q+{EPRz&4VCl*#AV-^n+?@q(P?-`@`!%WUPCt=jeqGeEOF<)w*ai>@R*5 zV&KYUVhXZS><9w6N-_XVHh;V>FbSMTZ3T)(7o2k#2Q%F-t-2*CD$}PNtTFiauY+QX zs=@~9=r91)ICCG7DbX)Q>jsT6oJxPjj0o4>XzQezSFN9-(8aMES(HgjRFscf<+@`_7f*ie_&LuGCA;j zJ1)!c?db~6<#P>MDsCC@AbUT)#U_!u(lSSjOL00oz=hqb|3+p9s^M}GWSbl!i<^F6 zr9?f~(AaQNC?rwB5Npp*>6(siMBX&%CclmfaB#y z*YC2oBnPF+hLKQ$_JZz^v_c^Axpcb;Khpj7NbcGXK`FPh)4d6%wyTQqH!DkD5g42z ztxGVIE#R!^;072w=aLn;{QQ88k*kgtRW9%}|0)Q9azchR&SEQtUJS1H-Z7G#4`8yE zgL`@Imk7sK?^n|IA@xYM9aK2|3X~YMo zk-{S=DD?&n`#m{UoJd>sncenV*jB8y>oq}IEhZC>Q}wKJm9zb*`|$Cuh^Xxew1KAj zH(2U0j%bC{+?QIa5kf1CW_0;&pW78?LLSgKZ60Te=xA|j>36>52l5bf1Lfb{Uwr}l zQud`wYPpsQY3>!o?CK86%G}i0upIrgj6-_-92SF`3l4h)BnB=jky{F-5)`x4EV7(` zI#?hy77XRADnmnk%+->|mHcrhH?``r)v_OV1l=s@GrBpW%cs)U@XRxl8`hL}Pt#9X z{AGT?B=J4H3P(GhE zZd)GP{ytLq_?(ypkTzOs|am>0#&Mj> z*B{Y=Sr$s-uwfE2YI0(>1`pg%RTpfaa#mMpEWlyUpqEt36@K`oNqUBFb+=X8DH&j| zg5UGujQc`)0hzqwyOkvQemyK+_2>R!S>lo1?Y#3JxrbUBpco*7nUe$pe;>p@KRb+l zex%-@;p=uq4~NR`Z*7R&=TE)``CQfpajDFQjsi$5+oaTJBg3O`5zsQXJr%uF`LGU} z=HwCRIn}&UwDXv$Wf5Y>6(&P!l0#FrbaHvXx9kXW7KJ==1ohP}H^$P2o3VT7da8?m zsLfzC{B;%a$Kt;+T~-?9>`SrW5%zdSyO^3@Yw<-SMj!t}1pPv1Bu*cvg*+dwy6vC- zw7?-xukKsXxyL_L{$Thp$8p+rtLw=FJ$*}>C%=s|!iIEB?yO8S;4pNM0v9IvdI`?e zo$7)b?#Qj4%AHP7m!nJxGi_Dwz&1{bcer;l(R&*_oIhj!!+#UulWJdYLrav zd|~{M$WBj?I8Np*RZl;TPTm2^dH+Wjll?X;yCdLS>ART`SrbsPtq*FV$*W_&JhiV)pWyac1~j`&ZH$Ct_kYjh2YwwBa;n`(D0hJcnYG>&m!qjz zPrK!+3+boIFzmDE`dbqw8``Km)Me6)@cV3%-9f9mSWz9vHbo9C;Df>pWFR4M`C%ON zvei0^=Awl8UEW_owQ~JvztcH^^YI|klvB^$RqtDBaU^{NBVE!7%A*vM#LizZqw?+e zz>e$M_f!VI#VW~NtM6=YGpTxlb4!+G!TySEcmY`xh6}BMkv9ml{sHqpV_@~tHm~j~ zp?@H3r^v#1u?n}go*hYFAKyN~k;-m~Nk@09dK2v&#KjYDJ&<59%J-p7CTxrSsBOYf z;k3Q!)i|+tEa=Ppg=cwx{X!mF`Z*q5g3dfQw!Ai@^Ja zGV!t@!U@*zfxIKPa5U$9Eu;PUNR&3%r0EM#NUX5Dx4qbUrY|2@k^Z#d&XezZ&_;3+ z=dS}H0?V(Uc`+It=CbHU1nwZw09I6B6P?eARJd`_J&?*H2&y9r{ASnp=lY2XwZ+$$k_`SgCCH z9xErjwKe)0qdK<7Y}5Km<7wNy`#N&;=t$8@k_HjVT`+l4cU$QHz4gT#(}S1M;S{nF z{yDYz6H4HVsTrW+uQ{PJKVb9YczpQz)_G=dS@D(C$`{Y(N(M8vd{eF&$a{eMAai}Y zyyL#pi1^+wvXL;1PUk^tcR9qvAYWhNn$kNnaY$>wGH6(rQ~3iPcwj)lLT?Mdp+bM| zT$<^%-MIuI3|*TmhKM23%Yqzo5Bl1#sVu8HD_rs{DDuSXWN9)R4#uOhi7tg#Z|jmA z1P)t8h!E+F?q>c33cjWthTo`8!aI>nn-CtM?lUGU9Q7^%gG3x{WIP#k@({~k88RNB<@l2O zTU@WqlkMt**T!x1SGOGSu{~!gCX~2gZW*E$*dcOSD)4$>z)pEy&cXtb1fm1|+j{WX zb7_v|wO(tIN9x}4u%n~^-W#i|ADEN7-54Wf_Eha#dKo0UM)i;4CglAVC3GlP&Je8N z=dFT^tOJeb7~i2P?xr1QryxG?tLfI}_%&viV`ehgl$>*%^fYFZ5N{)|EJNF7z(2hS f?EhD9@`dW)y5M}r@Hz9JltxZUS+YjlB=~;-le4&S diff --git a/deps/keycloak/themes/sys-admin/login/resources/img/login-arrow.png b/deps/keycloak/themes/sys-admin/login/resources/img/login-arrow.png deleted file mode 100644 index cf7a97f6c8f1744077cde803eb87e5683c480a20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 250 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�KA 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 diff --git a/deps/keycloak/themes/sys-admin/login/resources/img/meit.png b/deps/keycloak/themes/sys-admin/login/resources/img/meit.png deleted file mode 100644 index 45b8a9ed41687eaa2489af3473cee051ca637f9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10845 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%0A5hz>icJ=smdJgw;mS?BJ9~3Lyffg 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 R{wwoTfBy1Wr84}({{WsB53>LO diff --git a/deps/keycloak/themes/sys-admin/login/resources/img/mhfw.png b/deps/keycloak/themes/sys-admin/login/resources/img/mhfw.png deleted file mode 100644 index de85117c4c8465e91b8215490837e7d457ae432d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10735 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 Fe*nK0)s_GN diff --git a/deps/keycloak/themes/sys-admin/login/template.ftl b/deps/keycloak/themes/sys-admin/login/template.ftl deleted file mode 100644 index 328210420..000000000 --- a/deps/keycloak/themes/sys-admin/login/template.ftl +++ /dev/null @@ -1,99 +0,0 @@ -<#macro registrationLayout bodyClass="" displayInfo=false displayMessage=true> - - - - - - - - - - - - - - <#nested "title"> - <#if properties.styles?has_content> - <#list properties.styles?split(' ') as style> - - - - - - - - <#nested "header"> - - - - - diff --git a/deps/keycloak/themes/sys-admin/login/theme.properties b/deps/keycloak/themes/sys-admin/login/theme.properties deleted file mode 100644 index a2ca4874b..000000000 --- a/deps/keycloak/themes/sys-admin/login/theme.properties +++ /dev/null @@ -1,10 +0,0 @@ -parent=keycloak -import=common/keycloak -locales=ca,de,en,es,fr,it,ja,lt,nl,no,pt-BR,ru,sv,zh-CN -styles=css/login.css css/main.css - -kcFeedbackErrorIcon=pficon pficon-error-circle-o -kcFeedbackWarningIcon=pficon pficon-warning-triangle-o -kcFeedbackSuccessIcon=pficon pficon-ok -kcFeedbackInfoIcon=pficon pficon-info - diff --git a/deps/keycloak/themes/sys-admin/login/verify-otp.ftl b/deps/keycloak/themes/sys-admin/login/verify-otp.ftl deleted file mode 100644 index d8a0429b1..000000000 --- a/deps/keycloak/themes/sys-admin/login/verify-otp.ftl +++ /dev/null @@ -1,49 +0,0 @@ -<#import "template.ftl" as layout> -<@layout.registrationLayout displayInfo=social.displayInfo; section> - <#if section = "title"> - ${msg("loginTitle",(realm.displayName!''))} - <#elseif section = "header"> - - - - <#elseif section = "form"> - -
      - <#if realm.password> -
      -
      -
      -
      - - -
      - -
      - - -
      -
      - - -
      -
      - - - -
      - - diff --git a/infra/README.md b/infra/README.md deleted file mode 100644 index 2b43f09da..000000000 --- a/infra/README.md +++ /dev/null @@ -1,135 +0,0 @@ -# Production deployment using Helm charts -The below scripts will help the adopters to deploy SunbirdRC services in kubernetes environment. - -## Prerequisites -- Kubernetes Cluster with minimum 3 nodes -- [Helm](https://helm.sh/docs/intro/install/) -- kubectl -- Ingress -- Postgres DB (create database for `keycloak` and `registry`) -- ElasticSearch (Optional) -- Kafka (Optional) -- Redis (Optional) -- Minio (Optional) -- Domain URL (domain url mapped to kubernetes cluster) - -The above optional services are not mandatory for SunbirdRC services. It can be installed based on the requirement on the project. For more details https://docs.sunbirdrc.dev/learn/readme-1/high-level-architecture - -## Deployment steps - -### Clone the repo -```bash -git clone https://github.com/Sunbird-RC/sunbird-rc-core.git -cd infra -``` - -### Pre check -Make sure from the current directory you're able to run the below commands -```bash -kubectl cluster-info -kubectl get nodes -kubectl get ns -helm version -``` - -### Create namespace -```bash -kubectl create ns demo-registry -``` -`Feel free to use a different name for the namespace. Use the same name in the reset of the commands.` - -### Create secrets -Convert all the passwords/secrets into base64 format and update these values in `values.yaml` file -**Secrets** -- DB_PASSWORD: Postgres database password -- KEYCLOAK_ADMIN_PASSWORD: Keycloak admin password used to login to admin console -- KEYCLOAK_DEFAULT_USER_PASSWORD: Default password to be set for new users created by registry -- MINIO_SECRET_KEY: Minio secret key -- ELASTIC_SEARCH_PASSWORD: Elastic search connection password -- KEYCLOAK_ADMIN_CLIENT_SECRET: Client secret of keycloak admin client for registry - -`DB_PASSWORD, KEYCLOAK_ADMIN_PASSWORD and KEYCLOAK_DEFAULT_USER_PASSWORD are mandotry secrets to be set. Other secrets can be set to empty ` - -### Modify configuration values -Configuration values like database address, elastic search address etc should be modified in values.yaml file. - - -### Schemas -All schema files should be placed in the schemas directory located at `sunbird-rc-core/infra/helm_charts/charts/registry/schemas`. - -### Configure signing keys -The signing keys should be placed in the below directories - -Both public and private keys for signing - -`sunbird-rc-core/infra/helm_charts/charts/certificate-signer/keys` - -Only public key for exposing to verifiers - -`sunbird-rc-core/infra/helm_charts/charts/public-key-service/keys` -# Please note that by default a sample key is added. It is highly recommended to update this key before going to production. - -### Deploy helm charts -```bash -helm upgrade --install --namespace=demo-registry demo-registry helm_charts --create-namespace -``` -**Output** -``` -Release "demo-registry" does not exist. Installing it now. -NAME: demo-registry -LAST DEPLOYED: Thu May 4 17:02:08 2023 -NAMESPACE: demo-registry -STATUS: deployed -REVISION: 1 -``` - -**Check if all the pods are running** -```bash -kubectl get pods -n demo-registry -``` - -### Import keycloak realm - -- Goto keycloak admin console `/auth/` -- Login with username `admin` and use the same password configured in secrets -- Click on `Master` and select `Add realm` -- Select `https://github.com/Sunbird-RC/sunbird-rc-core/blob/main/imports/realm-export.json` file -- And click on `Create` - - -### Configure keycloak secret - -**Get keycloak secret from keycloak admin console** -- Goto keycloak admin console `/auth/` -- Login with username `admin` and use the same password configured in secrets -- Goto `clients` page and click on `admin-api` -- Goto `Credentials` tab and click on `Regenerate Secret` -- Copy the secret - -**Configure secret in registry** -- Get all secrets created -```bash -kubectl get secret -n demo-registry -``` -- Encode the secret in base64 format -```bash -echo -n "secret copied from keycloak" | base64 -``` -- Open the secret in edit mode -```bash -kubectl edit secret rc-secret -n demo-registry -``` -Replace empty string for `KEYCLOAK_ADMIN_CLIENT_SECRET` with the base64 encoded secret -- Restart registry -```bash -kubectl rollout restart deploy/demo-registry -n demo-registry -``` -- Check the pods status -```bash -kubectl get pods -n demo-registry -``` - -### Check registry apis -Open the below url in browser and check if you're able to get the swagger json -`/registry/api/docs/swagger.json` - diff --git a/infra/helm_charts/.helmignore b/infra/helm_charts/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/Chart.yaml b/infra/helm_charts/Chart.yaml deleted file mode 100644 index d0aaab56a..000000000 --- a/infra/helm_charts/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: sunbird_rc_charts -description: A Helm chart for Sunbird RC - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "0.0.13" diff --git a/infra/helm_charts/charts/certificate-api/.helmignore b/infra/helm_charts/charts/certificate-api/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/certificate-api/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/certificate-api/Chart.yaml b/infra/helm_charts/charts/certificate-api/Chart.yaml deleted file mode 100644 index 219e197f7..000000000 --- a/infra/helm_charts/charts/certificate-api/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: certificate-api -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/certificate-api/templates/NOTES.txt b/infra/helm_charts/charts/certificate-api/templates/NOTES.txt deleted file mode 100644 index d6ffacc05..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "certificate-api.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "certificate-api.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "certificate-api.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "certificate-api.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/_helpers.tpl b/infra/helm_charts/charts/certificate-api/templates/_helpers.tpl deleted file mode 100644 index 8ef354b27..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "certificate-api.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "certificate-api.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "certificate-api.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "certificate-api.labels" -}} -helm.sh/chart: {{ include "certificate-api.chart" . }} -{{ include "certificate-api.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "certificate-api.selectorLabels" -}} -app.kubernetes.io/name: {{ include "certificate-api.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "certificate-api.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "certificate-api.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/deployment.yaml b/infra/helm_charts/charts/certificate-api/templates/deployment.yaml deleted file mode 100644 index f1be93f49..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/deployment.yaml +++ /dev/null @@ -1,74 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "certificate-api.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-api.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "certificate-api.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "certificate-api.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "certificate-api.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: PORT - value: {{ .Values.service.port | quote}} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/hpa.yaml b/infra/helm_charts/charts/certificate-api/templates/hpa.yaml deleted file mode 100644 index 712e7e5de..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "certificate-api.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-api.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "certificate-api.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/ingress.yaml b/infra/helm_charts/charts/certificate-api/templates/ingress.yaml deleted file mode 100644 index ade2e69f9..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "certificate-api.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-api.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/service.yaml b/infra/helm_charts/charts/certificate-api/templates/service.yaml deleted file mode 100644 index 24d6c327c..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "certificate-api.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-api.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "certificate-api.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/certificate-api/templates/serviceaccount.yaml b/infra/helm_charts/charts/certificate-api/templates/serviceaccount.yaml deleted file mode 100644 index 58e047d8c..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "certificate-api.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-api.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-api/templates/tests/test-connection.yaml b/infra/helm_charts/charts/certificate-api/templates/tests/test-connection.yaml deleted file mode 100644 index c1262b217..000000000 --- a/infra/helm_charts/charts/certificate-api/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "certificate-api.fullname" . }}-test-connection" - labels: - {{- include "certificate-api.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "certificate-api.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/certificate-api/values.yaml b/infra/helm_charts/charts/certificate-api/values.yaml deleted file mode 100644 index a67d297cd..000000000 --- a/infra/helm_charts/charts/certificate-api/values.yaml +++ /dev/null @@ -1,71 +0,0 @@ -# Default values for certificate-api. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-certificate-api - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8078 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: [] - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/certificate-signer/.helmignore b/infra/helm_charts/charts/certificate-signer/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/certificate-signer/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/certificate-signer/Chart.yaml b/infra/helm_charts/charts/certificate-signer/Chart.yaml deleted file mode 100644 index 799549f7a..000000000 --- a/infra/helm_charts/charts/certificate-signer/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: certificate-signer -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/certificate-signer/keys/config.json b/infra/helm_charts/charts/certificate-signer/keys/config.json deleted file mode 100644 index 5151928cf..000000000 --- a/infra/helm_charts/charts/certificate-signer/keys/config.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "issuers": { - "default": { - "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQAB\n-----END PUBLIC KEY-----\n", - "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQABAoIBAHPILMUoLt5UTd5f/YnebqgeCRNAmGOBcwk7HtbMqQoGF93qqvZFd30XOAJZ/ncTpz77Vl95ToxxrWk1WQLCe+ZpOK3Dgk5sFSm8zXx1T64UBNPUSnWoh37C1D39+b9rppCZScgnxlyPdSLy3h3q8Hyoy+auqUEkm/ms5W2lT3fJscyN1IAyHrhsOBWjl3Ilq5GxBo5tbYv/Fb1pQiP/p2SIHA1+2ASXNYQP100F5Vn0V6SFtBXTCQnwcvbP083NvlGxs9+xRs3MCUcxCkKepWuzYwOZDmu/2yCz1/EsP6wlsYEHmCZLdIb0tQt0caqzB/RoxfBpNRIlhOtqHvBzUgECgYEAzIRn5Y7lqO3N+V29wXXtVZjYWvBh7xUfOxAwVYv0rKI0y9kHJHhIrU+wOVOKGISxBKmzqBQRPvXtXW8E0/14Zz82g60rRwtNjvW0UoZAY3KPouwruUIjAe2UnKZcQ//MBTrvds8QGpL6nxvPsBqU0y2K+ySAOxBtNtGEjzv8nxUCgYEAxRbMWukIbgVOuQjangkfJEfA1UaRFQqQ8jUmT9aiq2nREnd4mYP8kNKzJa9L7zj6Un6yLH5DbGspZ2gGODeRw3uVFN8XSzRdLvllNEyiG/waiysUtXfG2DPOR6xD8tXXDMm/tl9gTa8cbkvqYy10XT9MpfOAsusEZVmc0/DBBMsCgYAYdAxoKjnThPuHwWma5BrIjUnxNaTADWp6iWj+EYnjylE9vmlYNvmZn1mWwSJV5Ce2QwQ0KJIXURhcf5W4MypeTfSase3mxLc1TLOO2naAbYY3GL3xnLLK3DlUsZ9+kes3BOD097UZOFG3DIA8sjDxPxTLCoY6ibBFSa/r4GRIMQKBgQCranDCgPu79RHLDVBXM0fKnj2xQXbd/hqjDmcL+Xnx7E7S6OYTXyBENX1qwVQh9ESDi34cBJVPrsSME4WVT3+PreS0CnSQDDMfr/m9ywkTnejYMdgJHOvtDuHSpJlUk3g+vxnm3H0+E5d+trhdGiOjFnLrwyWkd5OTMqWcEEFQkQKBgFfXObDz/7KqeSaAxI8RzXWbI3Fa492b4qQUhbKYVpGn98CCVEFJr11vuB/8AXYCa92OtbwgMw6Ah5JOGzRScJKdipoxo7oc2LJ9sSjjw3RB/aWl35ChvnCJhmfSL8Usbj0nWVTrPwRLjMC2bIxkLtnm9qYXPumW1EjEbusjVMpN\n-----END RSA PRIVATE KEY-----\n", - "signatureType": "RSA", - "verificationMethod": "did:india", - "$comment": "The above are test keys and it needs to be replaced before going to production" - } - } -} \ No newline at end of file diff --git a/infra/helm_charts/charts/certificate-signer/templates/NOTES.txt b/infra/helm_charts/charts/certificate-signer/templates/NOTES.txt deleted file mode 100644 index a118ca40b..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "certificate-signer.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "certificate-signer.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "certificate-signer.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "certificate-signer.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/_helpers.tpl b/infra/helm_charts/charts/certificate-signer/templates/_helpers.tpl deleted file mode 100644 index 240a8069d..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "certificate-signer.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "certificate-signer.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "certificate-signer.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "certificate-signer.labels" -}} -helm.sh/chart: {{ include "certificate-signer.chart" . }} -{{ include "certificate-signer.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "certificate-signer.selectorLabels" -}} -app.kubernetes.io/name: {{ include "certificate-signer.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "certificate-signer.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "certificate-signer.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/configmap.yaml b/infra/helm_charts/charts/certificate-signer/templates/configmap.yaml deleted file mode 100644 index 14f772b70..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -{{- $keys := .Files.Glob "keys/*" }} -{{ if $keys }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Chart.Name }}-keys - namespace: {{ .Values.namespace }} -data: -{{ (.Files.Glob "keys/*").AsConfig | indent 2 }} -{{ end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/deployment.yaml b/infra/helm_charts/charts/certificate-signer/templates/deployment.yaml deleted file mode 100644 index e88ba4d90..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/deployment.yaml +++ /dev/null @@ -1,81 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "certificate-signer.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "certificate-signer.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "certificate-signer.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "certificate-signer.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: PORT - value: {{ .Values.service.port | quote}} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: {{ .Chart.Name }}-keys - mountPath: /etc/signer - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: {{ .Chart.Name }}-keys - configMap: - name: {{ .Chart.Name }}-keys diff --git a/infra/helm_charts/charts/certificate-signer/templates/hpa.yaml b/infra/helm_charts/charts/certificate-signer/templates/hpa.yaml deleted file mode 100644 index edce58829..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "certificate-signer.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "certificate-signer.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/ingress.yaml b/infra/helm_charts/charts/certificate-signer/templates/ingress.yaml deleted file mode 100644 index 0703a1f8d..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "certificate-signer.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/service.yaml b/infra/helm_charts/charts/certificate-signer/templates/service.yaml deleted file mode 100644 index 66cebcb0b..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "certificate-signer.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "certificate-signer.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/serviceaccount.yaml b/infra/helm_charts/charts/certificate-signer/templates/serviceaccount.yaml deleted file mode 100644 index 8ac21382c..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "certificate-signer.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/certificate-signer/templates/tests/test-connection.yaml b/infra/helm_charts/charts/certificate-signer/templates/tests/test-connection.yaml deleted file mode 100644 index 725cfb018..000000000 --- a/infra/helm_charts/charts/certificate-signer/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "certificate-signer.fullname" . }}-test-connection" - labels: - {{- include "certificate-signer.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "certificate-signer.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/certificate-signer/values.yaml b/infra/helm_charts/charts/certificate-signer/values.yaml deleted file mode 100644 index 25abcd1de..000000000 --- a/infra/helm_charts/charts/certificate-signer/values.yaml +++ /dev/null @@ -1,71 +0,0 @@ -# Default values for certificate-signer. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-certificate-signer - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8079 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: [] - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/claim-ms/.helmignore b/infra/helm_charts/charts/claim-ms/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/claim-ms/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/claim-ms/Chart.yaml b/infra/helm_charts/charts/claim-ms/Chart.yaml deleted file mode 100644 index 408dc0d09..000000000 --- a/infra/helm_charts/charts/claim-ms/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: claim-ms -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/claim-ms/templates/NOTES.txt b/infra/helm_charts/charts/claim-ms/templates/NOTES.txt deleted file mode 100644 index f272fabd8..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "claim-ms.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "claim-ms.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "claim-ms.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "claim-ms.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/_helpers.tpl b/infra/helm_charts/charts/claim-ms/templates/_helpers.tpl deleted file mode 100644 index 0090544b3..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "claim-ms.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "claim-ms.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "claim-ms.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "claim-ms.labels" -}} -helm.sh/chart: {{ include "claim-ms.chart" . }} -{{ include "claim-ms.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "claim-ms.selectorLabels" -}} -app.kubernetes.io/name: {{ include "claim-ms.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "claim-ms.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "claim-ms.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/deployment.yaml b/infra/helm_charts/charts/claim-ms/templates/deployment.yaml deleted file mode 100644 index 8878454b0..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/deployment.yaml +++ /dev/null @@ -1,77 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "claim-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "claim-ms.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "claim-ms.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "claim-ms.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "claim-ms.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - env: - - name: connectionInfo_password - valueFrom: - secretKeyRef: - name: rc-secret - key: DB_PASSWORD - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/hpa.yaml b/infra/helm_charts/charts/claim-ms/templates/hpa.yaml deleted file mode 100644 index 70087b951..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "claim-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "claim-ms.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "claim-ms.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/ingress.yaml b/infra/helm_charts/charts/claim-ms/templates/ingress.yaml deleted file mode 100644 index 7c80a3e07..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "claim-ms.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "claim-ms.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/service.yaml b/infra/helm_charts/charts/claim-ms/templates/service.yaml deleted file mode 100644 index efd9d61a9..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "claim-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "claim-ms.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "claim-ms.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/claim-ms/templates/serviceaccount.yaml b/infra/helm_charts/charts/claim-ms/templates/serviceaccount.yaml deleted file mode 100644 index d48c1b216..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "claim-ms.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "claim-ms.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/claim-ms/templates/tests/test-connection.yaml b/infra/helm_charts/charts/claim-ms/templates/tests/test-connection.yaml deleted file mode 100644 index cff7451a1..000000000 --- a/infra/helm_charts/charts/claim-ms/templates/tests/test-connection.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "claim-ms.fullname" . }}-test-connection" - labels: - {{- include "claim-ms.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "claim-ms.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never - diff --git a/infra/helm_charts/charts/claim-ms/values.yaml b/infra/helm_charts/charts/claim-ms/values.yaml deleted file mode 100644 index f9172932b..000000000 --- a/infra/helm_charts/charts/claim-ms/values.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# Default values for claim-ms. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-claim-ms - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8082 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/rewrite-target: /$2 - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /claim-ms(/|$)(.*) - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/config/.helmignore b/infra/helm_charts/charts/config/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/config/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/config/Chart.yaml b/infra/helm_charts/charts/config/Chart.yaml deleted file mode 100644 index 399a4798f..000000000 --- a/infra/helm_charts/charts/config/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: config -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/config/templates/configmap.yaml b/infra/helm_charts/charts/config/templates/configmap.yaml deleted file mode 100644 index 3539901fd..000000000 --- a/infra/helm_charts/charts/config/templates/configmap.yaml +++ /dev/null @@ -1,48 +0,0 @@ -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Release.Name }}-config - namespace: {{ .Release.Namespace }} -data: - DB_ADDR: {{.Values.global.database.host | quote}} - DB_DATABASE: {{.Values.global.keycloak.database | quote}} - DB_PORT: {{.Values.global.database.port | quote}} - DB_USER: {{.Values.global.database.user | quote}} - DB_VENDOR: {{.Values.global.database.vendor | quote}} - KEYCLOAK_USER: {{.Values.global.keycloak.admin.username | quote}} - PROXY_ADDRESS_FORWARDING: {{.Values.global.keycloak.proxy_forwarding | quote}} - connectionInfo_uri: jdbc:postgresql://{{.Values.global.database.host}}:{{.Values.global.database.port}}/{{.Values.global.registry.database}} - connectionInfo_username: {{.Values.global.database.user | quote}} - elastic_search_connection_url: {{.Values.global.elastic_search.url | quote}} - elastic_search_auth_enabled: {{.Values.global.elastic_search.auth_enabled | quote}} - elastic_search_username: {{.Values.global.elastic_search.username | quote}} - search_providerName: {{.Values.global.registry.search_provider | quote}} - sunbird_sso_realm: {{.Values.global.registry.sso.realm | quote}} - sunbird_sso_url: http://{{ .Release.Name }}-keycloak-service:8080/auth - sunbird_sso_admin_client_id: {{.Values.global.registry.sso.admin_client_id | quote}} - sunbird_sso_client_id: {{.Values.global.registry.sso.client_id | quote}} - claims_url: http://{{ .Release.Name }}-claim-ms:8082 - sign_url: http://{{ .Release.Name }}-certificate-signer:8079/sign - verify_url: http://{{ .Release.Name }}-certificate-signer:8079/verify - sign_health_check_url: http://{{ .Release.Name }}-certificate-signer:8079/health - signature_enabled: {{.Values.global.registry.signature_enabled | quote}} - pdf_url: http://{{ .Release.Name }}-certificate-api:8078/api/v1/certificatePDF - certificate_health_check_url: http://{{ .Release.Name }}-certificate-api:8078/health - template_base_url: http://{{ .Release.Name }}-registry:8081/api/v1/templates/ #Looks for certificate templates for pdf copy of the signed certificate - sunbird_keycloak_user_set_password: {{.Values.global.registry.keycloak_user_set_password | quote}} - filestorage_connection_url: {{.Values.global.minio.url | quote}} - filestorage_access_key: {{.Values.global.minio.access_key | quote}} - filestorage_bucket_key: {{.Values.global.minio.bucket_key | quote}} - registry_base_apis_enable: {{.Values.global.registry.base_apis_enabled | quote}} - logging.level.root: {{.Values.global.registry.log_level | quote}} - enable_external_templates: {{.Values.global.registry.enable_external_templates | quote}} - async_enabled: {{.Values.global.registry.enable_async | quote}} - authentication_enabled: {{.Values.global.registry.enable_authentication | quote}} - kafka_bootstrap_address: {{.Values.global.kafka.url | quote}} - webhook_enabled: {{.Values.global.registry.enable_webhook | quote}} - webhook_url: {{.Values.global.registry.webhook_url | quote}} - redis_host: {{.Values.global.redis.host | quote}} - redis_port: {{.Values.global.redis.port | quote}} - manager_type: {{.Values.global.registry.manager_type | quote}} - sunbirdrc_url: http://{{ .Release.Name }}-registry:8081 - diff --git a/infra/helm_charts/charts/config/values.yaml b/infra/helm_charts/charts/config/values.yaml deleted file mode 100644 index 8b1378917..000000000 --- a/infra/helm_charts/charts/config/values.yaml +++ /dev/null @@ -1 +0,0 @@ - diff --git a/infra/helm_charts/charts/context-proxy-service/.helmignore b/infra/helm_charts/charts/context-proxy-service/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/context-proxy-service/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/context-proxy-service/Chart.yaml b/infra/helm_charts/charts/context-proxy-service/Chart.yaml deleted file mode 100644 index 9b6e1b5f3..000000000 --- a/infra/helm_charts/charts/context-proxy-service/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: context-proxy-service -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/context-proxy-service/templates/NOTES.txt b/infra/helm_charts/charts/context-proxy-service/templates/NOTES.txt deleted file mode 100644 index 59747c228..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "context-proxy-service.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "context-proxy-service.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "context-proxy-service.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "context-proxy-service.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/_helpers.tpl b/infra/helm_charts/charts/context-proxy-service/templates/_helpers.tpl deleted file mode 100644 index 6c04b1e9a..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "context-proxy-service.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "context-proxy-service.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "context-proxy-service.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "context-proxy-service.labels" -}} -helm.sh/chart: {{ include "context-proxy-service.chart" . }} -{{ include "context-proxy-service.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "context-proxy-service.selectorLabels" -}} -app.kubernetes.io/name: {{ include "context-proxy-service.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "context-proxy-service.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "context-proxy-service.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/deployment.yaml b/infra/helm_charts/charts/context-proxy-service/templates/deployment.yaml deleted file mode 100644 index 94ff7219a..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/deployment.yaml +++ /dev/null @@ -1,71 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "context-proxy-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "context-proxy-service.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "context-proxy-service.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "context-proxy-service.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/hpa.yaml b/infra/helm_charts/charts/context-proxy-service/templates/hpa.yaml deleted file mode 100644 index 54f41964b..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "context-proxy-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "context-proxy-service.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/ingress.yaml b/infra/helm_charts/charts/context-proxy-service/templates/ingress.yaml deleted file mode 100644 index 9929db018..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "context-proxy-service.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/service.yaml b/infra/helm_charts/charts/context-proxy-service/templates/service.yaml deleted file mode 100644 index 7c81ae7b5..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "context-proxy-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "context-proxy-service.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/serviceaccount.yaml b/infra/helm_charts/charts/context-proxy-service/templates/serviceaccount.yaml deleted file mode 100644 index 160bc267c..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "context-proxy-service.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/context-proxy-service/templates/tests/test-connection.yaml b/infra/helm_charts/charts/context-proxy-service/templates/tests/test-connection.yaml deleted file mode 100644 index 713364d2b..000000000 --- a/infra/helm_charts/charts/context-proxy-service/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "context-proxy-service.fullname" . }}-test-connection" - labels: - {{- include "context-proxy-service.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "context-proxy-service.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/context-proxy-service/values.yaml b/infra/helm_charts/charts/context-proxy-service/values.yaml deleted file mode 100644 index 04c3bcfda..000000000 --- a/infra/helm_charts/charts/context-proxy-service/values.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# Default values for notification-ms. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-context-proxy-service - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} -# fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true -# runAsNonRoot: true -# runAsUser: 1000 - -service: - type: ClusterIP - port: 4400 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/rewrite-target: /$2 - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /proxy(/|$)(.*) - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/keycloak-service/.helmignore b/infra/helm_charts/charts/keycloak-service/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/keycloak-service/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/keycloak-service/Chart.yaml b/infra/helm_charts/charts/keycloak-service/Chart.yaml deleted file mode 100644 index 65d6a3a21..000000000 --- a/infra/helm_charts/charts/keycloak-service/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: keycloak-service -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "latest" diff --git a/infra/helm_charts/charts/keycloak-service/templates/NOTES.txt b/infra/helm_charts/charts/keycloak-service/templates/NOTES.txt deleted file mode 100644 index 033284eb4..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "keycloak-service.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "keycloak-service.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "keycloak-service.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "keycloak-service.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/_helpers.tpl b/infra/helm_charts/charts/keycloak-service/templates/_helpers.tpl deleted file mode 100644 index 9fe2687e8..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "keycloak-service.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "keycloak-service.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "keycloak-service.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "keycloak-service.labels" -}} -helm.sh/chart: {{ include "keycloak-service.chart" . }} -{{ include "keycloak-service.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "keycloak-service.selectorLabels" -}} -app.kubernetes.io/name: {{ include "keycloak-service.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "keycloak-service.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "keycloak-service.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/deployment.yaml b/infra/helm_charts/charts/keycloak-service/templates/deployment.yaml deleted file mode 100644 index 5d27ce6d0..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/deployment.yaml +++ /dev/null @@ -1,82 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "keycloak-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "keycloak-service.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "keycloak-service.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "keycloak-service.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "keycloak-service.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - env: - - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: rc-secret - key: DB_PASSWORD - - name: KEYCLOAK_PASSWORD - valueFrom: - secretKeyRef: - name: rc-secret - key: KEYCLOAK_ADMIN_PASSWORD - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /auth/ - port: {{ .Values.service.port }} - failureThreshold: 10 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 10 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/hpa.yaml b/infra/helm_charts/charts/keycloak-service/templates/hpa.yaml deleted file mode 100644 index 2252b7cee..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "keycloak-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "keycloak-service.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "keycloak-service.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/ingress.yaml b/infra/helm_charts/charts/keycloak-service/templates/ingress.yaml deleted file mode 100644 index dcc1e22d2..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "keycloak-service.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "keycloak-service.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/service.yaml b/infra/helm_charts/charts/keycloak-service/templates/service.yaml deleted file mode 100644 index 7f9675286..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "keycloak-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "keycloak-service.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "keycloak-service.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/keycloak-service/templates/serviceaccount.yaml b/infra/helm_charts/charts/keycloak-service/templates/serviceaccount.yaml deleted file mode 100644 index 57bd52b34..000000000 --- a/infra/helm_charts/charts/keycloak-service/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "keycloak-service.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "keycloak-service.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/keycloak-service/values.yaml b/infra/helm_charts/charts/keycloak-service/values.yaml deleted file mode 100644 index 67046f017..000000000 --- a/infra/helm_charts/charts/keycloak-service/values.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Default values for keycloak-service. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-keycloak - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8080 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /auth/ - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 2 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/notification-ms/.helmignore b/infra/helm_charts/charts/notification-ms/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/notification-ms/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/notification-ms/Chart.yaml b/infra/helm_charts/charts/notification-ms/Chart.yaml deleted file mode 100644 index d208bb0ce..000000000 --- a/infra/helm_charts/charts/notification-ms/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: notification-ms -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/notification-ms/templates/NOTES.txt b/infra/helm_charts/charts/notification-ms/templates/NOTES.txt deleted file mode 100644 index e98aef471..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "notification-ms.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "notification-ms.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "notification-ms.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "notification-ms.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/_helpers.tpl b/infra/helm_charts/charts/notification-ms/templates/_helpers.tpl deleted file mode 100644 index 60e809fc0..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "notification-ms.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "notification-ms.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "notification-ms.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "notification-ms.labels" -}} -helm.sh/chart: {{ include "notification-ms.chart" . }} -{{ include "notification-ms.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "notification-ms.selectorLabels" -}} -app.kubernetes.io/name: {{ include "notification-ms.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "notification-ms.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "notification-ms.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/deployment.yaml b/infra/helm_charts/charts/notification-ms/templates/deployment.yaml deleted file mode 100644 index add80ddec..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/deployment.yaml +++ /dev/null @@ -1,71 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "notification-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "notification-ms.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "notification-ms.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "notification-ms.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "notification-ms.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /notification-service/v1/health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/hpa.yaml b/infra/helm_charts/charts/notification-ms/templates/hpa.yaml deleted file mode 100644 index 74b34b431..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "notification-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "notification-ms.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "notification-ms.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/ingress.yaml b/infra/helm_charts/charts/notification-ms/templates/ingress.yaml deleted file mode 100644 index 9eb02c8bd..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "notification-ms.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "notification-ms.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/service.yaml b/infra/helm_charts/charts/notification-ms/templates/service.yaml deleted file mode 100644 index 407aac03d..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "notification-ms.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "notification-ms.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "notification-ms.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/notification-ms/templates/serviceaccount.yaml b/infra/helm_charts/charts/notification-ms/templates/serviceaccount.yaml deleted file mode 100644 index d683f10df..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "notification-ms.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "notification-ms.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/notification-ms/templates/tests/test-connection.yaml b/infra/helm_charts/charts/notification-ms/templates/tests/test-connection.yaml deleted file mode 100644 index b2256389b..000000000 --- a/infra/helm_charts/charts/notification-ms/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "notification-ms.fullname" . }}-test-connection" - labels: - {{- include "notification-ms.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "notification-ms.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/notification-ms/values.yaml b/infra/helm_charts/charts/notification-ms/values.yaml deleted file mode 100644 index 0d635844c..000000000 --- a/infra/helm_charts/charts/notification-ms/values.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Default values for notification-ms. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-notification-service - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} -# fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true -# runAsUser: 1000 - -service: - type: ClusterIP - port: 8765 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /notification-service/ - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/public-key-service/.helmignore b/infra/helm_charts/charts/public-key-service/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/public-key-service/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/public-key-service/Chart.yaml b/infra/helm_charts/charts/public-key-service/Chart.yaml deleted file mode 100644 index 876855906..000000000 --- a/infra/helm_charts/charts/public-key-service/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: public-key-service -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/public-key-service/keys/config.json b/infra/helm_charts/charts/public-key-service/keys/config.json deleted file mode 100644 index 23cc3e775..000000000 --- a/infra/helm_charts/charts/public-key-service/keys/config.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "issuers": { - "default": { - "publicKey": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnXQalrgztecTpc+INjRQ8s73FSE1kU5QSlwBdICCVJBUKiuQUt7s+Z5epgCvLVAOCbP1mm5lV7bfgV/iYWDio7lzX4MlJwDedWLiufr3Ajq+79CQiqPaIbZTo0i13zijKtX7wgxQ78wT/HkJRLkFpmGeK3za21tEfttytkhmJYlwaDTEc+Kx3RJqVhVh/dfwJGeuV4Xc/e2NH++ht0ENGuTk44KpQ+pwQVqtW7lmbDZQJoOJ7HYmmoKGJ0qt2hrj15uwcD1WEYfY5N7N0ArTzPgctExtZFDmituLGzuAZfv2AZZ9/7Y+igshzfB0reIFdUKw3cdVTzfv5FNrIqN5pwIDAQAB\n-----END PUBLIC KEY-----\n", - "signatureType": "RSA", - "verificationMethod": "did:india", - "$comment": "The above are test keys and it needs to be replaced before going to production" - } - } -} diff --git a/infra/helm_charts/charts/public-key-service/templates/NOTES.txt b/infra/helm_charts/charts/public-key-service/templates/NOTES.txt deleted file mode 100644 index f0fc5658b..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "public-key-service.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "public-key-service.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "public-key-service.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "public-key-service.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/_helpers.tpl b/infra/helm_charts/charts/public-key-service/templates/_helpers.tpl deleted file mode 100644 index 67a7dc372..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "public-key-service.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "public-key-service.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "public-key-service.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "public-key-service.labels" -}} -helm.sh/chart: {{ include "public-key-service.chart" . }} -{{ include "public-key-service.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "public-key-service.selectorLabels" -}} -app.kubernetes.io/name: {{ include "public-key-service.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "public-key-service.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "public-key-service.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/configmap.yaml b/infra/helm_charts/charts/public-key-service/templates/configmap.yaml deleted file mode 100644 index 14f772b70..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -{{- $keys := .Files.Glob "keys/*" }} -{{ if $keys }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Chart.Name }}-keys - namespace: {{ .Values.namespace }} -data: -{{ (.Files.Glob "keys/*").AsConfig | indent 2 }} -{{ end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/deployment.yaml b/infra/helm_charts/charts/public-key-service/templates/deployment.yaml deleted file mode 100644 index 859b9c390..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/deployment.yaml +++ /dev/null @@ -1,81 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "public-key-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "public-key-service.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "public-key-service.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "public-key-service.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "public-key-service.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - env: - - name: CONFIG_BASE_PATH - value: "/etc/keys" - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /public-key-service/api/v1/health - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: {{ .Chart.Name }}-keys - mountPath: /etc/keys - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: {{ .Chart.Name }}-keys - configMap: - name: {{ .Chart.Name }}-keys diff --git a/infra/helm_charts/charts/public-key-service/templates/hpa.yaml b/infra/helm_charts/charts/public-key-service/templates/hpa.yaml deleted file mode 100644 index 52b10ad40..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "public-key-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "public-key-service.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "public-key-service.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/ingress.yaml b/infra/helm_charts/charts/public-key-service/templates/ingress.yaml deleted file mode 100644 index 03c5321ce..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "public-key-service.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "public-key-service.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/service.yaml b/infra/helm_charts/charts/public-key-service/templates/service.yaml deleted file mode 100644 index 90ac3199c..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "public-key-service.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "public-key-service.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "public-key-service.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/public-key-service/templates/serviceaccount.yaml b/infra/helm_charts/charts/public-key-service/templates/serviceaccount.yaml deleted file mode 100644 index 6f5e37cfa..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "public-key-service.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "public-key-service.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/public-key-service/templates/tests/test-connection.yaml b/infra/helm_charts/charts/public-key-service/templates/tests/test-connection.yaml deleted file mode 100644 index e62921acf..000000000 --- a/infra/helm_charts/charts/public-key-service/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "public-key-service.fullname" . }}-test-connection" - labels: - {{- include "public-key-service.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "public-key-service.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/public-key-service/values.yaml b/infra/helm_charts/charts/public-key-service/values.yaml deleted file mode 100644 index 81e23f2c4..000000000 --- a/infra/helm_charts/charts/public-key-service/values.yaml +++ /dev/null @@ -1,74 +0,0 @@ -# Default values for public-key-service. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-public-key-service - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} -# fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true -# runAsUser: 1000 - -service: - type: ClusterIP - port: 3300 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /public-key-service/ - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/registry/.helmignore b/infra/helm_charts/charts/registry/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/registry/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/registry/Chart.yaml b/infra/helm_charts/charts/registry/Chart.yaml deleted file mode 100644 index dcdbf9c32..000000000 --- a/infra/helm_charts/charts/registry/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: registry -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.0.1 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "v0.0.14" diff --git a/infra/helm_charts/charts/registry/templates/NOTES.txt b/infra/helm_charts/charts/registry/templates/NOTES.txt deleted file mode 100644 index 0cbca6539..000000000 --- a/infra/helm_charts/charts/registry/templates/NOTES.txt +++ /dev/null @@ -1,22 +0,0 @@ -1. Get the application URL by running these commands: -{{- if .Values.ingress.enabled }} -{{- range $host := .Values.ingress.hosts }} - {{- range .paths }} - http{{ if $.Values.ingress.tls }}s{{ end }}://{{ $host.host }}{{ .path }} - {{- end }} -{{- end }} -{{- else if contains "NodePort" .Values.service.type }} - export NODE_PORT=$(kubectl get --namespace {{ .Release.Namespace }} -o jsonpath="{.spec.ports[0].nodePort}" services {{ include "registry.fullname" . }}) - export NODE_IP=$(kubectl get nodes --namespace {{ .Release.Namespace }} -o jsonpath="{.items[0].status.addresses[0].address}") - echo http://$NODE_IP:$NODE_PORT -{{- else if contains "LoadBalancer" .Values.service.type }} - NOTE: It may take a few minutes for the LoadBalancer IP to be available. - You can watch the status of by running 'kubectl get --namespace {{ .Release.Namespace }} svc -w {{ include "registry.fullname" . }}' - export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "registry.fullname" . }} --template "{{"{{ range (index .status.loadBalancer.ingress 0) }}{{.}}{{ end }}"}}") - echo http://$SERVICE_IP:{{ .Values.service.port }} -{{- else if contains "ClusterIP" .Values.service.type }} - export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "registry.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}") - export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}") - echo "Visit http://127.0.0.1:8080 to use your application" - kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 8080:$CONTAINER_PORT -{{- end }} diff --git a/infra/helm_charts/charts/registry/templates/_helpers.tpl b/infra/helm_charts/charts/registry/templates/_helpers.tpl deleted file mode 100644 index 0ed5df43a..000000000 --- a/infra/helm_charts/charts/registry/templates/_helpers.tpl +++ /dev/null @@ -1,62 +0,0 @@ -{{/* -Expand the name of the chart. -*/}} -{{- define "registry.name" -}} -{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Create a default fully qualified app name. -We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec). -If release name contains chart name it will be used as a full name. -*/}} -{{- define "registry.fullname" -}} -{{- if .Values.fullnameOverride }} -{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- $name := default .Chart.Name .Values.nameOverride }} -{{- if contains $name .Release.Name }} -{{- .Release.Name | trunc 63 | trimSuffix "-" }} -{{- else }} -{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }} -{{- end }} -{{- end }} -{{- end }} - -{{/* -Create chart name and version as used by the chart label. -*/}} -{{- define "registry.chart" -}} -{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} -{{- end }} - -{{/* -Common labels -*/}} -{{- define "registry.labels" -}} -helm.sh/chart: {{ include "registry.chart" . }} -{{ include "registry.selectorLabels" . }} -{{- if .Chart.AppVersion }} -app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} -{{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} -{{- end }} - -{{/* -Selector labels -*/}} -{{- define "registry.selectorLabels" -}} -app.kubernetes.io/name: {{ include "registry.name" . }} -app.kubernetes.io/instance: {{ .Release.Name }} -{{- end }} - -{{/* -Create the name of the service account to use -*/}} -{{- define "registry.serviceAccountName" -}} -{{- if .Values.serviceAccount.create }} -{{- default (include "registry.fullname" .) .Values.serviceAccount.name }} -{{- else }} -{{- default "default" .Values.serviceAccount.name }} -{{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/registry/templates/configmap.yaml b/infra/helm_charts/charts/registry/templates/configmap.yaml deleted file mode 100644 index 8d2ae783b..000000000 --- a/infra/helm_charts/charts/registry/templates/configmap.yaml +++ /dev/null @@ -1,10 +0,0 @@ -{{- $schemas := .Files.Glob "schemas/*" }} -{{ if $schemas }} -apiVersion: v1 -kind: ConfigMap -metadata: - name: {{ .Chart.Name }}-schemas - namespace: {{ .Values.namespace }} -data: -{{ (.Files.Glob "schemas/*").AsConfig | indent 2 }} -{{ end }} diff --git a/infra/helm_charts/charts/registry/templates/deployment.yaml b/infra/helm_charts/charts/registry/templates/deployment.yaml deleted file mode 100644 index 78fbaf3fb..000000000 --- a/infra/helm_charts/charts/registry/templates/deployment.yaml +++ /dev/null @@ -1,104 +0,0 @@ -apiVersion: apps/v1 -kind: Deployment -metadata: - name: {{ include "registry.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "registry.labels" . | nindent 4 }} -spec: - {{- if not .Values.autoscaling.enabled }} - replicas: {{ .Values.replicaCount }} - {{- end }} - selector: - matchLabels: - {{- include "registry.selectorLabels" . | nindent 6 }} - template: - metadata: - {{- with .Values.podAnnotations }} - annotations: - {{- toYaml . | nindent 8 }} - {{- end }} - labels: - {{- include "registry.selectorLabels" . | nindent 8 }} - spec: - {{- with .Values.imagePullSecrets }} - imagePullSecrets: - {{- toYaml . | nindent 8 }} - {{- end }} - serviceAccountName: {{ include "registry.serviceAccountName" . }} - securityContext: - {{- toYaml .Values.podSecurityContext | nindent 8 }} - containers: - - name: {{ .Chart.Name }} - securityContext: - {{- toYaml .Values.securityContext | nindent 12 }} - image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" - imagePullPolicy: {{ .Values.image.pullPolicy }} - envFrom: - - configMapRef: - name: "{{ .Release.Name }}-config" - env: - - name: connectionInfo_password - valueFrom: - secretKeyRef: - name: rc-secret - key: DB_PASSWORD - - name: sunbird_keycloak_user_password - valueFrom: - secretKeyRef: - name: rc-secret - key: KEYCLOAK_DEFAULT_USER_PASSWORD - - name: filestorage_secret_key - valueFrom: - secretKeyRef: - name: rc-secret - key: MINIO_SECRET_KEY - - name: elastic_search_password - valueFrom: - secretKeyRef: - name: rc-secret - key: ELASTIC_SEARCH_PASSWORD - - name: sunbird_sso_admin_client_secret - valueFrom: - secretKeyRef: - name: rc-secret - key: KEYCLOAK_ADMIN_CLIENT_SECRET - ports: - - name: http - containerPort: {{ .Values.service.port }} - protocol: TCP - readinessProbe: - httpGet: - path: /api/docs/swagger.json - port: {{ .Values.service.port }} - failureThreshold: 20 - periodSeconds: 30 - timeoutSeconds: 10 - initialDelaySeconds: 30 - livenessProbe: - tcpSocket: - port: {{ .Values.service.port }} - initialDelaySeconds: 15 - periodSeconds: 30 - failureThreshold: 20 - resources: - {{- toYaml .Values.resources | nindent 12 }} - volumeMounts: - - name: {{ .Chart.Name }}-schemas - mountPath: /home/sunbirdrc/config/public/_schemas - {{- with .Values.nodeSelector }} - nodeSelector: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.affinity }} - affinity: - {{- toYaml . | nindent 8 }} - {{- end }} - {{- with .Values.tolerations }} - tolerations: - {{- toYaml . | nindent 8 }} - {{- end }} - volumes: - - name: {{ .Chart.Name }}-schemas - configMap: - name: {{ .Chart.Name }}-schemas diff --git a/infra/helm_charts/charts/registry/templates/hpa.yaml b/infra/helm_charts/charts/registry/templates/hpa.yaml deleted file mode 100644 index 98d0adc0c..000000000 --- a/infra/helm_charts/charts/registry/templates/hpa.yaml +++ /dev/null @@ -1,33 +0,0 @@ -{{- if .Values.autoscaling.enabled }} -apiVersion: autoscaling/v2 -kind: HorizontalPodAutoscaler -metadata: - name: {{ include "registry.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "registry.labels" . | nindent 4 }} -spec: - scaleTargetRef: - apiVersion: apps/v1 - kind: Deployment - name: {{ include "registry.fullname" . }} - minReplicas: {{ .Values.autoscaling.minReplicas }} - maxReplicas: {{ .Values.autoscaling.maxReplicas }} - metrics: - {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} - - type: Resource - resource: - name: cpu - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} - {{- end }} - {{- if .Values.autoscaling.targetMemoryUtilizationPercentage }} - - type: Resource - resource: - name: memory - target: - type: Utilization - averageUtilization: {{ .Values.autoscaling.targetMemoryUtilizationPercentage }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/registry/templates/ingress.yaml b/infra/helm_charts/charts/registry/templates/ingress.yaml deleted file mode 100644 index daa59f232..000000000 --- a/infra/helm_charts/charts/registry/templates/ingress.yaml +++ /dev/null @@ -1,62 +0,0 @@ -{{- if .Values.ingress.enabled -}} -{{- $fullName := include "registry.fullname" . -}} -{{- $svcPort := .Values.service.port -}} -{{- if and .Values.ingress.className (not (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion)) }} - {{- if not (hasKey .Values.ingress.annotations "kubernetes.io/ingress.class") }} - {{- $_ := set .Values.ingress.annotations "kubernetes.io/ingress.class" .Values.ingress.className}} - {{- end }} -{{- end }} -{{- if semverCompare ">=1.19-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1 -{{- else if semverCompare ">=1.14-0" .Capabilities.KubeVersion.GitVersion -}} -apiVersion: networking.k8s.io/v1beta1 -{{- else -}} -apiVersion: extensions/v1beta1 -{{- end }} -kind: Ingress -metadata: - name: {{ $fullName }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "registry.labels" . | nindent 4 }} - {{- with .Values.ingress.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -spec: - {{- if and .Values.ingress.className (semverCompare ">=1.18-0" .Capabilities.KubeVersion.GitVersion) }} - ingressClassName: {{ .Values.ingress.className }} - {{- end }} - {{- if .Values.ingress.tls }} - tls: - {{- range .Values.ingress.tls }} - - hosts: - {{- range .hosts }} - - {{ . | quote }} - {{- end }} - secretName: {{ .secretName }} - {{- end }} - {{- end }} - rules: - - host: {{ .Values.global.host | quote }} - {{- range .Values.ingress.hosts }} - http: - paths: - {{- range .paths }} - - path: {{ .path }} - {{- if and .pathType (semverCompare ">=1.18-0" $.Capabilities.KubeVersion.GitVersion) }} - pathType: {{ .pathType }} - {{- end }} - backend: - {{- if semverCompare ">=1.19-0" $.Capabilities.KubeVersion.GitVersion }} - service: - name: {{ $fullName }} - port: - number: {{ $svcPort }} - {{- else }} - serviceName: {{ $fullName }} - servicePort: {{ $svcPort }} - {{- end }} - {{- end }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/registry/templates/service.yaml b/infra/helm_charts/charts/registry/templates/service.yaml deleted file mode 100644 index 31a1170ac..000000000 --- a/infra/helm_charts/charts/registry/templates/service.yaml +++ /dev/null @@ -1,16 +0,0 @@ -apiVersion: v1 -kind: Service -metadata: - name: {{ include "registry.fullname" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "registry.labels" . | nindent 4 }} -spec: - type: {{ .Values.service.type }} - ports: - - port: {{ .Values.service.port }} - targetPort: http - protocol: TCP - name: http - selector: - {{- include "registry.selectorLabels" . | nindent 4 }} diff --git a/infra/helm_charts/charts/registry/templates/serviceaccount.yaml b/infra/helm_charts/charts/registry/templates/serviceaccount.yaml deleted file mode 100644 index 17b75ff2a..000000000 --- a/infra/helm_charts/charts/registry/templates/serviceaccount.yaml +++ /dev/null @@ -1,13 +0,0 @@ -{{- if .Values.serviceAccount.create -}} -apiVersion: v1 -kind: ServiceAccount -metadata: - name: {{ include "registry.serviceAccountName" . }} - namespace: {{ .Release.Namespace }} - labels: - {{- include "registry.labels" . | nindent 4 }} - {{- with .Values.serviceAccount.annotations }} - annotations: - {{- toYaml . | nindent 4 }} - {{- end }} -{{- end }} diff --git a/infra/helm_charts/charts/registry/templates/tests/test-connection.yaml b/infra/helm_charts/charts/registry/templates/tests/test-connection.yaml deleted file mode 100644 index 96c7430b3..000000000 --- a/infra/helm_charts/charts/registry/templates/tests/test-connection.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: v1 -kind: Pod -metadata: - name: "{{ include "registry.fullname" . }}-test-connection" - labels: - {{- include "registry.labels" . | nindent 4 }} - annotations: - "helm.sh/hook": test -spec: - containers: - - name: wget - image: busybox - command: ['wget'] - args: ['{{ include "registry.fullname" . }}:{{ .Values.service.port }}'] - restartPolicy: Never diff --git a/infra/helm_charts/charts/registry/values.yaml b/infra/helm_charts/charts/registry/values.yaml deleted file mode 100644 index 973a93028..000000000 --- a/infra/helm_charts/charts/registry/values.yaml +++ /dev/null @@ -1,75 +0,0 @@ -# Default values for registry. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 -host: loadtesting.xiv.in -image: - repository: ghcr.io/sunbird-rc/sunbird-rc-core - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: false - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 8081 - -ingress: - enabled: true - className: "" - annotations: - kubernetes.io/ingress.class: nginx - nginx.ingress.kubernetes.io/rewrite-target: /$2 - # kubernetes.io/tls-acme: "true" - hosts: - - paths: - - path: /registry(/|$)(.*) - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: - requests: - cpu: 500m - memory: 2G - -autoscaling: - enabled: true - minReplicas: 1 - maxReplicas: 1 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/charts/secrets/.helmignore b/infra/helm_charts/charts/secrets/.helmignore deleted file mode 100644 index 0e8a0eb36..000000000 --- a/infra/helm_charts/charts/secrets/.helmignore +++ /dev/null @@ -1,23 +0,0 @@ -# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*.orig -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ diff --git a/infra/helm_charts/charts/secrets/Chart.yaml b/infra/helm_charts/charts/secrets/Chart.yaml deleted file mode 100644 index 28bc2fc2a..000000000 --- a/infra/helm_charts/charts/secrets/Chart.yaml +++ /dev/null @@ -1,24 +0,0 @@ -apiVersion: v2 -name: secrets -description: A Helm chart for Kubernetes - -# A chart can be either an 'application' or a 'library' chart. -# -# Application charts are a collection of templates that can be packaged into versioned archives -# to be deployed. -# -# Library charts provide useful utilities or functions for the chart developer. They're included as -# a dependency of application charts to inject those utilities and functions into the rendering -# pipeline. Library charts do not define any templates and therefore cannot be deployed. -type: application - -# This is the chart version. This version number should be incremented each time you make changes -# to the chart and its templates, including the app version. -# Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 0.1.0 - -# This is the version number of the application being deployed. This version number should be -# incremented each time you make changes to the application. Versions are not expected to -# follow Semantic Versioning. They should reflect the version the application is using. -# It is recommended to use it with quotes. -appVersion: "1.16.0" diff --git a/infra/helm_charts/charts/secrets/templates/secrets.yaml b/infra/helm_charts/charts/secrets/templates/secrets.yaml deleted file mode 100644 index 59a493387..000000000 --- a/infra/helm_charts/charts/secrets/templates/secrets.yaml +++ /dev/null @@ -1,13 +0,0 @@ -apiVersion: v1 -data: - DB_PASSWORD: {{.Values.global.secrets.DB_PASSWORD | quote}} - ELASTIC_SEARCH_PASSWORD: {{.Values.global.secrets.ELASTIC_SEARCH_PASSWORD | quote}} - KEYCLOAK_ADMIN_CLIENT_SECRET: {{.Values.global.secrets.KEYCLOAK_ADMIN_CLIENT_SECRET | quote}} - KEYCLOAK_ADMIN_PASSWORD: {{.Values.global.secrets.KEYCLOAK_ADMIN_PASSWORD | quote}} - KEYCLOAK_DEFAULT_USER_PASSWORD: {{.Values.global.secrets.KEYCLOAK_DEFAULT_USER_PASSWORD | quote}} - MINIO_SECRET_KEY: {{.Values.global.secrets.MINIO_SECRET_KEY | quote}} -kind: Secret -metadata: - name: rc-secret - namespace: {{ .Release.Namespace }} -type: Opaque diff --git a/infra/helm_charts/charts/secrets/values.yaml b/infra/helm_charts/charts/secrets/values.yaml deleted file mode 100644 index 877c0af0f..000000000 --- a/infra/helm_charts/charts/secrets/values.yaml +++ /dev/null @@ -1,82 +0,0 @@ -# Default values for secrets. -# This is a YAML-formatted file. -# Declare variables to be passed into your templates. - -replicaCount: 1 - -image: - repository: nginx - pullPolicy: IfNotPresent - # Overrides the image tag whose default is the chart appVersion. - tag: "" - -imagePullSecrets: [] -nameOverride: "" -fullnameOverride: "" - -serviceAccount: - # Specifies whether a service account should be created - create: true - # Annotations to add to the service account - annotations: {} - # The name of the service account to use. - # If not set and create is true, a name is generated using the fullname template - name: "" - -podAnnotations: {} - -podSecurityContext: {} - # fsGroup: 2000 - -securityContext: {} - # capabilities: - # drop: - # - ALL - # readOnlyRootFilesystem: true - # runAsNonRoot: true - # runAsUser: 1000 - -service: - type: ClusterIP - port: 80 - -ingress: - enabled: false - className: "" - annotations: {} - # kubernetes.io/ingress.class: nginx - # kubernetes.io/tls-acme: "true" - hosts: - - host: chart-example.local - paths: - - path: / - pathType: ImplementationSpecific - tls: [] - # - secretName: chart-example-tls - # hosts: - # - chart-example.local - -resources: {} - # We usually recommend not to specify default resources and to leave this as a conscious - # choice for the user. This also increases chances charts run on environments with little - # resources, such as Minikube. If you do want to specify resources, uncomment the following - # lines, adjust them as necessary, and remove the curly braces after 'resources:'. - # limits: - # cpu: 100m - # memory: 128Mi - # requests: - # cpu: 100m - # memory: 128Mi - -autoscaling: - enabled: false - minReplicas: 1 - maxReplicas: 100 - targetCPUUtilizationPercentage: 80 - # targetMemoryUtilizationPercentage: 80 - -nodeSelector: {} - -tolerations: [] - -affinity: {} diff --git a/infra/helm_charts/values.yaml b/infra/helm_charts/values.yaml deleted file mode 100644 index abd03a2f8..000000000 --- a/infra/helm_charts/values.yaml +++ /dev/null @@ -1,49 +0,0 @@ -global: - host: "loadtesting.xix.in" - database: - host: "10.9.0.7" - user: "keycloak" - port: "5432" - vendor: "postgres" - keycloak: - database: "keycloak" - admin: - username: "admin" - proxy_forwarding: true - registry: - database: "registry" - search_provider: "dev.sunbirdrc.registry.service.ElasticSearchService" - sso: - realm: "sunbird-rc" - admin_client_id: "admin-api" - client_id: "registry-frontend" - signature_enabled: true - keycloak_user_set_password: false - base_apis_enabled: false - log_level: INFO - enable_external_templates: true - enable_async: false - enable_authentication: true - enable_webhook: false - webhook_url: http://localhost:5001/api/v1/callback - manager_type: DefinitionsManager - minio: - url: http://10.9.0.9:9000 - access_key: admin - bucket_key: sunbird-rc - elastic_search: - url: 10.9.0.9:9200 - auth_enabled: false - username: "" - kafka: - url: - redis: - host: 10.9.0.8 - port: 6379 - secrets: - DB_PASSWORD: a2V5Y2xvYWs= - ELASTIC_SEARCH_PASSWORD: "" - KEYCLOAK_ADMIN_CLIENT_SECRET: YjJiMGNhYjEtMjQzZC00ZTZlLTkzZTctOTAxNWZmNjZkZjJi - KEYCLOAK_ADMIN_PASSWORD: YWRtaW4xMjM= - KEYCLOAK_DEFAULT_USER_PASSWORD: YWRtaW5AMTIz - MINIO_SECRET_KEY: Kgo=