diff --git a/127.500e8d19.iframe.bundle.js b/127.a3c55382.iframe.bundle.js similarity index 89% rename from 127.500e8d19.iframe.bundle.js rename to 127.a3c55382.iframe.bundle.js index d213c437..aa0faa29 100644 --- a/127.500e8d19.iframe.bundle.js +++ b/127.a3c55382.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[127],{"./dist/account/i18n/baseMessages/lv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Saglabāt",doCancel:"Atcelt",doLogOutAllSessions:"Izlogoties no visām sesijām",doRemove:"Noņemt",doAdd:"Pievienot",doSignOut:"Atslēgties",doLogIn:"Pieslēgties",doLink:"Savienot",editAccountHtmlTitle:"Rediģēt kontu",personalInfoHtmlTitle:"Personiskā informācija",federatedIdentitiesHtmlTitle:"Federatīvās identitātes",accountLogHtmlTitle:"Konta žurnāls",changePasswordHtmlTitle:"Mainīt paroli",deviceActivityHtmlTitle:"Ierīces aktivitāte",sessionsHtmlTitle:"Sesijas",accountManagementTitle:"Keycloak konta pārvaldība",authenticatorTitle:"Autentifikators",applicationsHtmlTitle:"Lietojumprogrammas",linkedAccountsHtmlTitle:"Savienotie konti",accountManagementWelcomeMessage:"Laipni lūgti Keycloak konta pārvaldniekā",personalInfoIntroMessage:"Pārvaldīt pamatinformāciju",accountSecurityTitle:"Konta drošība",accountSecurityIntroMessage:"Pārvaldi savu paroli un konta pieeju",applicationsIntroMessage:"Uzraugi un pārvaldi lietojumprogrammas pieeju savam kontam",resourceIntroMessage:"",passwordLastUpdateMessage:"Tava parole tika atjaunota ",updatePasswordTitle:"Atjaunot paroli",updatePasswordMessageTitle:"Izvēlies drošu parolu",updatePasswordMessage:"Droša parole satur ciparus, burtus un simbolus. To ir grūti uzminēt, tā nesatur reālus vārdus un tiek izmantota tikai šim kontam.",personalSubTitle:"Tava personīgā informācija",personalSubMessage:"Pārvaldi savu pamatinformāciju: vārdu, uzvārdu un e-pastu",authenticatorCode:"Vienreizējā parole",email:"E-pasts",firstName:"Vārds",givenName:"Vārds",fullName:"Pilns vārds",lastName:"Uzvārds",familyName:"Uzvārds",password:"Parole",currentPassword:"Pašreizējā parole",passwordConfirm:"Parole atkārtoti",passwordNew:"Jauna parole",username:"Lietotājvārds",address:"Adrese",street:"Iela",locality:"Pilsēta",region:"Novads vai reģions",postal_code:"Pasta indegs",country:"Valsts",emailVerified:"E-pasts apstiprināts",gssDelegationCredential:"GSS delegācijas atslēga",profileScopeConsentText:"Lietotāja profils",emailScopeConsentText:"E-pasta adrese",addressScopeConsentText:"Adrese",phoneScopeConsentText:"Tālrunis",offlineAccessScopeConsentText:"Bezsaustes piekļuve",samlRoleListScopeConsentText:"Manas lomas",rolesScopeConsentText:"Lietotāju lomas",role_admin:"Administrators","role_realm-admin":"Realm administrators","role_create-realm":"Izveidot realm","role_view-realm":"Skatīt realm","role_view-users":"Skatīt lietoājus","role_view-applications":"Skatīt lietojumprogrammas","role_view-clients":"Skatīt klientus","role_view-events":"Skatīt notikumus","role_view-identity-providers":"Skatīt identitātes sniedzējus","role_manage-realm":"Pārvaldīt realm","role_manage-users":"Pārvaldīt lietotājus","role_manage-applications":"Pārvaldīt lietojumprogrammas","role_manage-identity-providers":"Pārvaldīt identitātes sniedzējus","role_manage-clients":"Pārvaldīt klientus","role_manage-events":"Pārvaldīt notikumus","role_view-profile":"Skatīt profilu","role_manage-account":"Pārvaldīt kontu","role_manage-account-links":"Pārvaldīt konta saites","role_read-token":"Lasīt talonu (token)","role_offline-access":"Bezsaistes piekļuve",role_uma_authorization:"Iegūt atļaujas",client_account:"Konts","client_security-admin-console":"Drošības administrācijas konsole","client_admin-cli":"Administrācijas CLI","client_realm-management":"Realm pārvaldība",client_broker:"Brokeris",requiredFields:"Obligātie lauki",allFieldsRequired:"Visi lauki ir obligāti",backToApplication:"« Atpakaļ uz lietojumprogrammu",backTo:"Atpakaļ uz {0}",date:"Datums",event:"Notikums",ip:"IP",client:"Klients",clients:"Klienti",details:"Detaļas",started:"Uzsākta",lastAccess:"Pēdējā piekļuve",expires:"Beidzas",applications:"Lietojumprogrammas",account:"Konts",federatedIdentity:"Federatīvā identitāte",authenticator:"Autentifikators","device-activity":"Ierīces aktivitāte",sessions:"Sesijas",log:"Žurnāls",application:"Lietojumprogramma",availableRoles:"Pieejamās lomas",grantedPermissions:"Piešķirtās atļaujas",grantedPersonalInfo:"Pieškirtā personālā informācija",additionalGrants:"Papildus atļaujas",action:"Darbība",inResource:"iekš",fullAccess:"Pilna piekļuve",offlineToken:"Bezsaistes talons (token)",revoke:"Atsaukt atļauju",missingUsernameMessage:"Lūdzu norādi lietotājvārdu.",missingFirstNameMessage:"Lūdzu norādi vārdu.",invalidEmailMessage:"Nekorekta e-pasta adrese.",missingLastNameMessage:"Lūdzu norādi uzvārdu.",missingEmailMessage:"Lūdzu norādi e-pastu.",missingPasswordMessage:"Lūdzu norādi paroli.",notMatchPasswordMessage:"Paroles nesakrīt.",invalidUserMessage:"Nekorekts lietotājs",usernameExistsMessage:"Lietotājvārds jau eksistē.",emailExistsMessage:"E-pasts jau eksistē.",myResources:"Mani resursi",myResourcesSub:"Mani resursi",doDeny:"Aizliegt",doRevoke:"Atsaukt",doApprove:"Apstiprināt",doRemoveSharing:"Noņemt dalīšanos",doRemoveRequest:"Noņemt pieprasījumu",peopleAccessResource:"Cilvēki ar pieeju šim resursam",resourceManagedPolicies:"Atļaujas šim resursam",resourceNoPermissionsGrantingAccess:"Nav atļauju šim resursam",anyAction:"Jebkura darbība",description:"Apraksts",name:"Nosaukums",scopes:"Jomas (scopes)",resource:"Resurss",user:"Lietotājs",peopleSharingThisResource:"Cilveki, kas dalās ar šo resursu",shareWithOthers:"Dalīties ar citiem",needMyApproval:"Nepieciešams mans apstiprinājums",requestsWaitingApproval:"Tavi pieprasījumi, kas gaida apstiprinājumu",icon:"Ikona",requestor:"Pieprasītājs",owner:"Īpašnieks",resourcesSharedWithMe:"Resursi, kuri tiek dalīti ar mani",permissionRequestion:"Atļaujas pieprasījums",permission:"Atļauja",shares:"share(s)",locale_ca:"Català",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_it:"Italian",locale_ja:"日本語",locale_nl:"Nederlands",locale_no:"Norsk",locale_lt:"Latviešu","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska","locale_zh-CN":"中文简体",applicationName:"Nosaukums",applicationType:"Lietojumprogrammas tips",applicationInUse:"Tikai aktīvās lietojumprogrammas",clearAllFilter:"Noņemt visus filtrus",activeFilters:"Aktīvie filtri",filterByName:"Filtrēt pēc nosaukuma ...",allApps:"Visas lietojumprogrammas",internalApps:"Iekšējās lietojumprogrammas",thirdpartyApps:"Trešās puses lietojumprogrammas",appResults:"Rezultāti"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[127],{"./dist/account/i18n/baseMessages/lv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Saglabāt",doCancel:"Atcelt",doLogOutAllSessions:"Izlogoties no visām sesijām",doRemove:"Noņemt",doAdd:"Pievienot",doSignOut:"Atslēgties",doLogIn:"Pieslēgties",doLink:"Savienot",editAccountHtmlTitle:"Rediģēt kontu",personalInfoHtmlTitle:"Personiskā informācija",federatedIdentitiesHtmlTitle:"Federatīvās identitātes",accountLogHtmlTitle:"Konta žurnāls",changePasswordHtmlTitle:"Mainīt paroli",deviceActivityHtmlTitle:"Ierīces aktivitāte",sessionsHtmlTitle:"Sesijas",accountManagementTitle:"Keycloak konta pārvaldība",authenticatorTitle:"Autentifikators",applicationsHtmlTitle:"Lietojumprogrammas",linkedAccountsHtmlTitle:"Savienotie konti",accountManagementWelcomeMessage:"Laipni lūgti Keycloak konta pārvaldniekā",personalInfoIntroMessage:"Pārvaldīt pamatinformāciju",accountSecurityTitle:"Konta drošība",accountSecurityIntroMessage:"Pārvaldi savu paroli un konta pieeju",applicationsIntroMessage:"Uzraugi un pārvaldi lietojumprogrammas pieeju savam kontam",resourceIntroMessage:"",passwordLastUpdateMessage:"Tava parole tika atjaunota ",updatePasswordTitle:"Atjaunot paroli",updatePasswordMessageTitle:"Izvēlies drošu parolu",updatePasswordMessage:"Droša parole satur ciparus, burtus un simbolus. To ir grūti uzminēt, tā nesatur reālus vārdus un tiek izmantota tikai šim kontam.",personalSubTitle:"Tava personīgā informācija",personalSubMessage:"Pārvaldi savu pamatinformāciju: vārdu, uzvārdu un e-pastu",authenticatorCode:"Vienreizējā parole",email:"E-pasts",firstName:"Vārds",givenName:"Vārds",fullName:"Pilns vārds",lastName:"Uzvārds",familyName:"Uzvārds",password:"Parole",currentPassword:"Pašreizējā parole",passwordConfirm:"Parole atkārtoti",passwordNew:"Jauna parole",username:"Lietotājvārds",address:"Adrese",street:"Iela",locality:"Pilsēta",region:"Novads vai reģions",postal_code:"Pasta indegs",country:"Valsts",emailVerified:"E-pasts apstiprināts",gssDelegationCredential:"GSS delegācijas atslēga",profileScopeConsentText:"Lietotāja profils",emailScopeConsentText:"E-pasta adrese",addressScopeConsentText:"Adrese",phoneScopeConsentText:"Tālrunis",offlineAccessScopeConsentText:"Bezsaustes piekļuve",samlRoleListScopeConsentText:"Manas lomas",rolesScopeConsentText:"Lietotāju lomas",role_admin:"Administrators","role_realm-admin":"Realm administrators","role_create-realm":"Izveidot realm","role_view-realm":"Skatīt realm","role_view-users":"Skatīt lietoājus","role_view-applications":"Skatīt lietojumprogrammas","role_view-clients":"Skatīt klientus","role_view-events":"Skatīt notikumus","role_view-identity-providers":"Skatīt identitātes sniedzējus","role_manage-realm":"Pārvaldīt realm","role_manage-users":"Pārvaldīt lietotājus","role_manage-applications":"Pārvaldīt lietojumprogrammas","role_manage-identity-providers":"Pārvaldīt identitātes sniedzējus","role_manage-clients":"Pārvaldīt klientus","role_manage-events":"Pārvaldīt notikumus","role_view-profile":"Skatīt profilu","role_manage-account":"Pārvaldīt kontu","role_manage-account-links":"Pārvaldīt konta saites","role_read-token":"Lasīt talonu (token)","role_offline-access":"Bezsaistes piekļuve",role_uma_authorization:"Iegūt atļaujas",client_account:"Konts","client_security-admin-console":"Drošības administrācijas konsole","client_admin-cli":"Administrācijas CLI","client_realm-management":"Realm pārvaldība",client_broker:"Brokeris",requiredFields:"Obligātie lauki",allFieldsRequired:"Visi lauki ir obligāti",backToApplication:"« Atpakaļ uz lietojumprogrammu",backTo:"Atpakaļ uz {0}",date:"Datums",event:"Notikums",ip:"IP",client:"Klients",clients:"Klienti",details:"Detaļas",started:"Uzsākta",lastAccess:"Pēdējā piekļuve",expires:"Beidzas",applications:"Lietojumprogrammas",account:"Konts",federatedIdentity:"Federatīvā identitāte",authenticator:"Autentifikators","device-activity":"Ierīces aktivitāte",sessions:"Sesijas",log:"Žurnāls",application:"Lietojumprogramma",availableRoles:"Pieejamās lomas",grantedPermissions:"Piešķirtās atļaujas",grantedPersonalInfo:"Pieškirtā personālā informācija",additionalGrants:"Papildus atļaujas",action:"Darbība",inResource:"iekš",fullAccess:"Pilna piekļuve",offlineToken:"Bezsaistes talons (token)",revoke:"Atsaukt atļauju",missingUsernameMessage:"Lūdzu norādi lietotājvārdu.",missingFirstNameMessage:"Lūdzu norādi vārdu.",invalidEmailMessage:"Nekorekta e-pasta adrese.",missingLastNameMessage:"Lūdzu norādi uzvārdu.",missingEmailMessage:"Lūdzu norādi e-pastu.",missingPasswordMessage:"Lūdzu norādi paroli.",notMatchPasswordMessage:"Paroles nesakrīt.",invalidUserMessage:"Nekorekts lietotājs",usernameExistsMessage:"Lietotājvārds jau eksistē.",emailExistsMessage:"E-pasts jau eksistē.",myResources:"Mani resursi",myResourcesSub:"Mani resursi",doDeny:"Aizliegt",doRevoke:"Atsaukt",doApprove:"Apstiprināt",doRemoveSharing:"Noņemt dalīšanos",doRemoveRequest:"Noņemt pieprasījumu",peopleAccessResource:"Cilvēki ar pieeju šim resursam",resourceManagedPolicies:"Atļaujas šim resursam",resourceNoPermissionsGrantingAccess:"Nav atļauju šim resursam",anyAction:"Jebkura darbība",description:"Apraksts",name:"Nosaukums",scopes:"Jomas (scopes)",resource:"Resurss",user:"Lietotājs",peopleSharingThisResource:"Cilveki, kas dalās ar šo resursu",shareWithOthers:"Dalīties ar citiem",needMyApproval:"Nepieciešams mans apstiprinājums",requestsWaitingApproval:"Tavi pieprasījumi, kas gaida apstiprinājumu",icon:"Ikona",requestor:"Pieprasītājs",owner:"Īpašnieks",resourcesSharedWithMe:"Resursi, kuri tiek dalīti ar mani",permissionRequestion:"Atļaujas pieprasījums",permission:"Atļauja",shares:"share(s)",locale_ca:"Català",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fr:"Français",locale_it:"Italian",locale_ja:"日本語",locale_nl:"Nederlands",locale_no:"Norsk",locale_lt:"Latviešu","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska","locale_zh-CN":"中文简体",applicationName:"Nosaukums",applicationType:"Lietojumprogrammas tips",applicationInUse:"Tikai aktīvās lietojumprogrammas",clearAllFilter:"Noņemt visus filtrus",activeFilters:"Aktīvie filtri",filterByName:"Filtrēt pēc nosaukuma ...",allApps:"Visas lietojumprogrammas",internalApps:"Iekšējās lietojumprogrammas",thirdpartyApps:"Trešās puses lietojumprogrammas",appResults:"Rezultāti"}}}]); \ No newline at end of file diff --git a/1413.c6ae8c75.iframe.bundle.js b/1413.c6ae8c75.iframe.bundle.js new file mode 100644 index 00000000..c3b07308 --- /dev/null +++ b/1413.c6ae8c75.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1413],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Register.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Register});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Register(props){var _a,_b,_c,_d,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,messagesPerField=kcContext.messagesPerField,register=kcContext.register,realm=kcContext.realm,passwordRequired=kcContext.passwordRequired,recaptchaRequired=kcContext.recaptchaRequired,recaptchaSiteKey=kcContext.recaptchaSiteKey,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("registerTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-register-form",className:getClassName("kcFormClass"),action:url.registrationAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("firstName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"firstName",className:getClassName("kcLabelClass")},{children:msg("firstName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"firstName",className:getClassName("kcInputClass"),name:"firstName",defaultValue:null!==(_a=register.formData.firstName)&&void 0!==_a?_a:""})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("lastName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"lastName",className:getClassName("kcLabelClass")},{children:msg("lastName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"lastName",className:getClassName("kcInputClass"),name:"lastName",defaultValue:null!==(_b=register.formData.lastName)&&void 0!==_b?_b:""})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",className:getClassName("kcInputClass"),name:"email",defaultValue:null!==(_c=register.formData.email)&&void 0!==_c?_c:"",autoComplete:"email"})}))]})),!realm.registrationEmailAsUsername&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("username",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",className:getClassName("kcInputClass"),name:"username",defaultValue:null!==(_d=register.formData.username)&&void 0!==_d?_d:"",autoComplete:"username"})}))]})),passwordRequired&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password",className:getClassName("kcLabelClass")},{children:msg("password")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password",className:getClassName("kcInputClass"),name:"password",autoComplete:"new-password"})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password-confirm",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-confirm",className:getClassName("kcLabelClass")},{children:msg("passwordConfirm")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-confirm",className:getClassName("kcInputClass"),name:"password-confirm"})}))]}))]}),recaptchaRequired&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:"form-group"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"g-recaptcha","data-size":"compact","data-sitekey":recaptchaSiteKey})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",Object.assign({href:url.loginUrl},{children:msg("backToLogin")}))})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doRegister")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/1413.d1bded3e.iframe.bundle.js b/1413.d1bded3e.iframe.bundle.js deleted file mode 100644 index 4dc8ba3c..00000000 --- a/1413.d1bded3e.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1413],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Register.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Register});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Register(props){var _a,_b,_c,_d,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,messagesPerField=kcContext.messagesPerField,register=kcContext.register,realm=kcContext.realm,passwordRequired=kcContext.passwordRequired,recaptchaRequired=kcContext.recaptchaRequired,recaptchaSiteKey=kcContext.recaptchaSiteKey,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("registerTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-register-form",className:getClassName("kcFormClass"),action:url.registrationAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("firstName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"firstName",className:getClassName("kcLabelClass")},{children:msg("firstName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"firstName",className:getClassName("kcInputClass"),name:"firstName",defaultValue:null!==(_a=register.formData.firstName)&&void 0!==_a?_a:""})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("lastName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"lastName",className:getClassName("kcLabelClass")},{children:msg("lastName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"lastName",className:getClassName("kcInputClass"),name:"lastName",defaultValue:null!==(_b=register.formData.lastName)&&void 0!==_b?_b:""})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",className:getClassName("kcInputClass"),name:"email",defaultValue:null!==(_c=register.formData.email)&&void 0!==_c?_c:"",autoComplete:"email"})}))]})),!realm.registrationEmailAsUsername&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("username",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",className:getClassName("kcInputClass"),name:"username",defaultValue:null!==(_d=register.formData.username)&&void 0!==_d?_d:"",autoComplete:"username"})}))]})),passwordRequired&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password",className:getClassName("kcLabelClass")},{children:msg("password")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password",className:getClassName("kcInputClass"),name:"password",autoComplete:"new-password"})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password-confirm",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-confirm",className:getClassName("kcLabelClass")},{children:msg("passwordConfirm")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-confirm",className:getClassName("kcInputClass"),name:"password-confirm"})}))]}))]}),recaptchaRequired&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:"form-group"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"g-recaptcha","data-size":"compact","data-sitekey":recaptchaSiteKey})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",Object.assign({href:url.loginUrl},{children:msg("backToLogin")}))})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doRegister")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/1433.d55084fa.iframe.bundle.js b/1433.ce00d284.iframe.bundle.js similarity index 77% rename from 1433.d55084fa.iframe.bundle.js rename to 1433.ce00d284.iframe.bundle.js index 8efecffc..6ae75b99 100644 --- a/1433.d55084fa.iframe.bundle.js +++ b/1433.ce00d284.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1433],{"./dist/login/i18n/baseMessages/fi.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Kirjaudu",doRegister:"Rekisteröidy",doCancel:"Peruuta",doSubmit:"Lähetä",doBack:"Takaisin",doYes:"Kyllä",doNo:"Ei",doContinue:"Jatka",doIgnore:"Sivuuta",doAccept:"Hyväksy",doDecline:"En hyväksy",doForgotPassword:"Unohditko salasanan?",doClickHere:"Klikkaa tästä",doImpersonate:"Edusta",doTryAgain:"Yritä uudelleen",doTryAnotherWay:"Yritä toista tapaa",doConfirmDelete:"Vahvista poisto",errorDeletingAccount:"Tilin poistossa tapahtui virhe",deletingAccountForbidden:"Sinulla ei ole riittäviä oikeuksia poistaakseesi omaa tiliä, ota yhteyttä järjestelmänvalvojaan.",kerberosNotConfigured:"Kerberosta ei ole konfiguroitu",kerberosNotConfiguredTitle:"Kerberosta ei ole konfiguroitu",bypassKerberosDetail:"Joko et ole kirjautunut Kerberoksen kautta tai selaintasi ei ole asetettu käyttämään Kerberosta kirjautumiseen. Klikkaa jatkaaksesi kirjautumista jollain toisella tavalla",kerberosNotSetUp:"Kerberosta ei ole asennettu. Et voi kirjautua sisään.",registerTitle:"Rekisteröidy",loginAccountTitle:"Kirjaudu sisään",loginTitle:"Kirjaudu {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Edusta käyttäjää",impersonateTitleHtml:"{0} Edusta käyttäjää",realmChoice:"Realm",unknownUser:"Tuntematon käyttäjä",loginTotpTitle:"Mobiili-todentajan asetukset",loginProfileTitle:"Päivitä käyttäjätilin tiedot",loginIdpReviewProfileTitle:"Päivitä käyttäjätilin tiedot",loginTimeout:"Kirjautumisyritys kesti liian kauan. Kirjautuminen aloitetaan alusta.",oauthGrantTitle:"Myönnä pääsy {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Pahoittelut...",errorTitleHtml:"Olemme pahoillamme ...",emailVerifyTitle:"Sähköpostiosoitteen varmistus",emailForgotTitle:"Unohditko salasanasi?",updatePasswordTitle:"Päivitä salasana",codeSuccessTitle:"Success-koodi",codeErrorTitle:"Virhekoodi: {0}",displayUnsupported:"Pyydetty näyttötyyppi ei ole tuettu",browserRequired:"Selain vaatii sisäänkirjautumista",browserContinue:"Selain vaatii sisäänkirjautumisen viimeistelyä",browserContinuePrompt:"Avaa selain ja jatka kirjautumista? [k/e]:",browserContinueAnswer:"k",termsTitle:"Käyttöehdot",termsText:"

Käyttöehdot ja niiden määrittely

",termsPlainText:"Käyttöehdot ja niiden määrittely.",recaptchaFailed:"Virheellinen Recaptcha",recaptchaNotConfigured:"Recaptcha vaaditaan, mutta sitä ei ole konfiguroitu",consentDenied:"Suostumus kielletty.",noAccount:"Uusi käyttäjä?",username:"Käyttäjätunnus",usernameOrEmail:"Käyttäjätunnus tai sähköpostiosoite",firstName:"Etunimi",givenName:"Sukunimi",fullName:"Koko nimi",lastName:"Sukunimi",familyName:"Sukunimi",email:"Sähköposti",password:"Salasana",passwordConfirm:"Salasana uudelleen",passwordNew:"Uusi salasana",passwordNewConfirm:"Uusi salasana uudelleen",rememberMe:"Muista minut",authenticatorCode:"Kertakäyttökoodi",address:"Osoite",street:"Katu",locality:"Kaupunki",region:"Osavaltio, Provinssi, tai Alue",postal_code:"Postinumero",country:"Maa",emailVerified:"Sähköposti vahvistettu",website:"Verkkosivu",phoneNumber:"Puhelinnumero",phoneNumberVerified:"Puhelinnumero varmennettu",gender:"Sukupuoli",birthday:"Syntymäpäivä",zoneinfo:"Aikavyöhyke",gssDelegationCredential:"GSS Delegation Credential",logoutOtherSessions:"Kirjaudu ulos muilta laitteilta",profileScopeConsentText:"Käyttäjän profiili",emailScopeConsentText:"Sähköpostiosoite",addressScopeConsentText:"Osoite",phoneScopeConsentText:"Puhelinnumero",offlineAccessScopeConsentText:"Offline-käyttö",samlRoleListScopeConsentText:"Omat roolit",rolesScopeConsentText:"Käyttäjäroolit",restartLoginTooltip:"Aloita kirjautuminen alusta",loginTotpIntro:"Sinun täytyy asentaa OTP (One Time Password) luontityökalu päästäksesi tälle tilille",loginTotpStep1:"Asenna yksi seuraavista sovelluksista puhelimeesi:",loginTotpStep2:"Avaa sovellus ja skannaa viivakoodi",loginTotpStep3:"Liitä sovelluksesta saatu kertaluontoinen koodi ja paina Lähetä viimeistelläksesi asennuksen",loginTotpStep3DeviceName:"Anna laitteelle nimi, jotta voit hallinnoida OTP-laitteitasi.",loginTotpManualStep2:"Avaa sovellus ja liitä avain",loginTotpManualStep3:"Käytä seuraavia konfiguraatioarvoja jos sovellus antaa asettaa ne:",loginTotpUnableToScan:"Ongelmia skannauksessa?",loginTotpScanBarcode:"Skannaa viivakoodi?",loginCredential:"Kirjautumistieto",loginTotpOneTime:"Kertaluontoinen koodi",loginTotpType:"Tyyppi",loginTotpAlgorithm:"Algoritmi",loginTotpDigits:"Numerot",loginTotpInterval:"Intervalli",loginTotpCounter:"Laskuri",loginTotpDeviceName:"Laitteen nimi","loginTotp.totp":"Aikapohjainen","loginTotp.hotp":"Laskuripohjainen",loginChooseAuthenticator:"Valitse kirjautumistapa",oauthGrantRequest:"Myönnätkö nämä käyttöoikeudet?",inResource:"in",oauth2DeviceVerificationTitle:"Laitekirjautuminen",verifyOAuth2DeviceUserCode:"Liitä laitteeltasi saamasi kertaluontoinen koodi ja paina Lähetä",oauth2DeviceInvalidUserCodeMessage:"Virheellinen koodi. yritä uudelleen.",oauth2DeviceExpiredUserCodeMessage:"Koodi on vanhentunut. Ole hyvä ja mene takaisin laitteellesi ja yritä yhdistämistä uudellleen.",oauth2DeviceVerificationCompleteHeader:"Laitekirjautuminen onnistui",oauth2DeviceVerificationCompleteMessage:"Voit sulkea tämän ikkunan ja mennä takaisin laitteellesi.",oauth2DeviceVerificationFailedHeader:"Laitekirjautuminen epäonnistui",oauth2DeviceVerificationFailedMessage:"Voit sulkea tämän ikkunan, mennä takaisin laitteellesi ja yrittää kirjautumista uudelleen.",oauth2DeviceConsentDeniedMessage:"Laitteen kirjautumisen suostumus evätty.",oauth2DeviceAuthorizationGrantDisabledMessage:"Client is not allowed to initiate OAuth 2.0 Device Authorization Grant. The flow is disabled for the client.",emailVerifyInstruction1:"Sähköpostin vahvistamisohjeet sisältävä viesti on lähetetty sähköpostiisi.",emailVerifyInstruction2:"Etkö ole saanut vahvistuskoodia sähköpostiisi?",emailVerifyInstruction3:"saadaksesi uuden sähköpostiviestin.",emailLinkIdpTitle:"Linkitä {0}",emailLinkIdp1:"Sinulle on lähetetty ohjeet tunnuksen linkittämiseen palvelun {0} kanssa.",emailLinkIdp2:"Etkö saanut vahvistuskoodia sähköpostiisi?",emailLinkIdp3:"saadaksesi uuden sähköpostiviestin.",emailLinkIdp4:"Jos olet jo vahvistanut sähköpostisi toisella selaimella,",emailLinkIdp5:"jatkaaksesi.",backToLogin:"« Takaisin kirjautumiseen",emailInstruction:"Syötä käyttäjätunnuksesi tai sähköpostiosoitteesi niin lähetämme sinulle ohjeet salasanan palauttamista varten.",emailInstructionUsername:"Syötä käyttäjänimesi niin lähetämme sinulle ohjeet uuden salasanan luomiseksi.",copyCodeInstruction:"Ole hyvä ja kopioi tämä koodi ja liitä se sovellukseesi:",pageExpiredTitle:"Sivu on vanhentunut",pageExpiredMsg1:"Aloita kirjautuminen alusta",pageExpiredMsg2:"Jatka kirjautumista",personalInfo:"Henkilökohtaiset tiedot:",role_admin:"Järjestelmänvalvoja","role_realm-admin":"Realm Järjestelmänvalvoja","role_create-realm":"Luo realm","role_create-client":"Luo asiakas","role_view-realm":"Näytä realm","role_view-users":"Näytä käyttäjät","role_view-applications":"Näytä sovellukset","role_view-clients":"Näytä asiakkaat","role_view-events":"Näytä tapahtumat","role_view-identity-providers":"Näytä henkilöllisyyden tarjoajat","role_manage-realm":"Hallinnoi realmia","role_manage-users":"Hallinnoi käyttäjiä","role_manage-applications":"Hallinnoi sovelluksia","role_manage-identity-providers":"Hallinnoi henkilöllisyyden tarjoajia","role_manage-clients":"Hallinnoi asiakkaita","role_manage-events":"Hallinnoi tapahtumia","role_view-profile":"Näytä profiili","role_manage-account":"Hallitse tiliä","role_manage-account-links":"Hallitse tilin linkkejä","role_read-token":"Lue token","role_offline-access":"Offline-pääsy",client_account:"Tili","client_account-console":"Tilin konsoli","client_security-admin-console":"Turvallisuus-hallintapaneeli","client_admin-cli":"Admin CLI","client_realm-management":"Realm Hallinta",client_broker:"Broker",requiredFields:"Vaaditut kentät",invalidUserMessage:"Virheellinen käyttäjätunnus tai salasana.",invalidUsernameMessage:"Väärä salasana.",invalidUsernameOrEmailMessage:"Väärä salasana tai sähköposti.",invalidPasswordMessage:"Väärä salasana.",invalidEmailMessage:"Virheellinen sähköpostiosoite.",accountDisabledMessage:"Tili on poistettu käytöstä, ota yhteyttä järjestelmänvalvojaan.",accountTemporarilyDisabledMessage:"Tili on väliaikaisesti poissa käytöstä, ota yhteyttä järjestelmänvalvojaan tai yritä myöhemmin uudelleen.",expiredCodeMessage:"Kirjautuminen kesti liian kauan. Ole hyvä ja kirjaudu uudestaan.",expiredActionMessage:"Toiminto kesti liian kauan. Ole hyvä ja jatka kirjautumiseen.",expiredActionTokenNoSessionMessage:"Toiminto vanhentui.",expiredActionTokenSessionExistsMessage:"Toiminto vanhentui. Aloita alusta.",missingFirstNameMessage:"Anna etunimi.",missingLastNameMessage:"Anna sukunimi.",missingEmailMessage:"Anna sähköpostiosoite.",missingUsernameMessage:"Anna käyttäjätunnus.",missingPasswordMessage:"Anna salasana.",missingTotpMessage:"Ole hyvä ja määrittele todentajan koodi.",missingTotpDeviceNameMessage:"Ole hyvä ja määrittele laitteen nimi.",notMatchPasswordMessage:"Salasanat eivät täsmää.","error-invalid-value":"Väärä arvo.","error-invalid-blank":"Ole hyvä ja määritä arvo.","error-empty":"Ole hyvä ja määritä arvo. ","error-invalid-length":"Ominaisuudella {0} täytyy olla pituus väliltä {1} ja {2}.","error-invalid-length-too-short":"Ominaisuudella {0} täytyy olla minimipituus {1}.","error-invalid-length-too-long":"Ominaisuudella {0} täytyy olla maksimipituus {2}.","error-invalid-email":"Väärä sähköpostiosoite.","error-invalid-number":"Väärä numero.","error-number-out-of-range":"Ominaisuuden {0} täytyy olla numero väliltä {1} ja {2}.","error-number-out-of-range-too-small":"Ominaisuudella {0} täytyy olla minimiarvona {1}.","error-number-out-of-range-too-big":"Ominaisuudella {0} täytyy olla maksimiarvona {2}.","error-pattern-no-match":"Väärä arvo.","error-invalid-uri":"Väärä URL.","error-invalid-uri-scheme":"Väärä URL:n malli.","error-invalid-uri-fragment":"Väärä URL:n osa.","error-user-attribute-required":"Ole hyvä ja määritä ominaisuus {0}.","error-invalid-date":"Väärä päivämäärä.","error-user-attribute-read-only":'Kenttä {0} on "vain luku"-tilassa.',"error-username-invalid-character":"Käyttäjänimi sisältää vääriä merkkejä.","error-person-name-invalid-character":"Nimi sisältää vääriä merkkejä.",invalidPasswordExistingMessage:"Vanha salasana on virheellinen.",invalidPasswordBlacklistedMessage:"Väärä salasana: salasana on lisätty mustalle listalle.",invalidPasswordConfirmMessage:"Salasanan vahvistus ei täsmää.",invalidTotpMessage:"Väärä todentaja-koodi.",usernameExistsMessage:"Käyttäjänimi on varattu.",emailExistsMessage:"Sähköpostiosoite on jo käytössä.",federatedIdentityExistsMessage:"Käyttäjä {0} {1} on jo olemassa. Kirjaudu tilihallintaan linkittääksesi tilin.",federatedIdentityUnavailableMessage:"Käyttäjä {0} joka on tunnistettu henkilöllisyyden tarjoajalla {1} ei ole olemassa. Ota yhteyttä järjestelmänvalvojaan.",confirmLinkIdpTitle:"Käyttäjätunnus on jo olemassa",federatedIdentityConfirmLinkMessage:"Käyttäjätunnus, jolla {0} on {1} on jo olemassa. Kuinka haluat jatkaa?",federatedIdentityConfirmReauthenticateMessage:"Tunnistaudu linkittääksesi {0}-tilin.",nestedFirstBrokerFlowMessage:"{0} käyttäjä {1} ei ole linkitetty tunnettuun käyttäjään.",confirmLinkIdpReviewProfile:"Tarkastele profiilia",confirmLinkIdpContinue:"Lisää olemassa olevaan tiliin",configureTotpMessage:"Sinun täytyy asentaa mobiili-todentaja aktivoidaksesi tilin.",updateProfileMessage:"Sinun tulee päivittää profiilisi aktivoidaksesi tilisi.",updatePasswordMessage:"Sinun tulee vaihtaa salasanasi aktivoidaksesi tilisi.",resetPasswordMessage:"Sinun tulee päivittää salasanasi.",verifyEmailMessage:"Sinun tulee vahvistaa sähköpostiosoitteesi aktivoidaksesi tilisi.",linkIdpMessage:"Sinun tulee vahvistaa sähköpostiosoitteesi linkittääksesi tilin palvelun {0} kanssa.",emailSentMessage:"Sinun pitäisi saada sähköpostiisi lisäohjeita hetken kuluttua.",emailSendErrorMessage:"Sähköpostin lähettäminen epäonnistui. Yritä hetken kuluttua uudelleen.",accountUpdatedMessage:"Käyttäjätiedot päivitetty.",accountPasswordUpdatedMessage:"Salasana vaihdettu.",delegationCompleteHeader:"Kirjautuminen onnistui",delegationCompleteMessage:"Voit sulkea tämän ikkunan ja siirtyä takaisin konsolisovellukseen.",delegationFailedHeader:"Kirjautuminen epäonnistui",delegationFailedMessage:"Voit sulkea tämän selaimen, siirtyä takaisin konsolisovellukseen ja yrittää kirjautumista uudelleen.",noAccessMessage:"Ei pääsyä",invalidPasswordMinLengthMessage:"Virheellinen salasana: vähimmäispituus {0}.",invalidPasswordMaxLengthMessage:"Virheellinen salasana: maksimipituus {0}.",invalidPasswordMinDigitsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} numeroa.",invalidPasswordMinLowerCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} pientä kirjainta.",invalidPasswordMinUpperCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} isoa kirjainta.",invalidPasswordMinSpecialCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} erikoismerkkiä.",invalidPasswordNotUsernameMessage:"Virheellinen salasana: salasana ei saa olla sama kuin käyttäjätunnus.",invalidPasswordNotEmailMessage:"Virheellinen salasana: ei voi olla sama kuin sähköposti.",invalidPasswordRegexPatternMessage:'Virheellinen salasana: ei vastaa "regex pattern(s)".',invalidPasswordHistoryMessage:"Virheellinen salasana: salasana ei saa olla sama kuin {0} edellistä salasanaasi.",invalidPasswordGenericMessage:"Virheellinen salasana: uusi salasana ei täytä salasanavaatimuksia.",failedToProcessResponseMessage:"Vastauksen käsittely epäonnistui",httpsRequiredMessage:"HTTPS vaaditaan",realmNotEnabledMessage:"Realm ei otettu käyttöön",invalidRequestMessage:"Virheellinen pyyntö",failedLogout:"Uloskirjautuminen epäonnistui",unknownLoginRequesterMessage:"Tuntematon kirjautumispyynnön tekijä",loginRequesterNotEnabledMessage:"kirjautumispyynnön tekijää ei ole otettu käyttöön",bearerOnlyMessage:'"Bearer-only" sovellusten ei ole sallittua aloittaa selainkirjautumista',standardFlowDisabledMessage:'Asiakas ei saa aloittaa selainkirjautumista annetulla vastaustyypillä ("response_type"). "Standard flow" on poistettu käytöstä asiakkaalla.',implicitFlowDisabledMessage:'Asiakas ei saa aloittaa selainkirjautumista annetulla vastaustyypillä ("response_type"). "Implicit flow" on poistettu käytöstä asiakkaalla.',invalidRedirectUriMessage:"Virheellinen uudelleenohjaus-uri",unsupportedNameIdFormatMessage:'Ei-tuettu "NameIDFormat"',invalidRequesterMessage:"Virheellinen pyynnön tekijä",registrationNotAllowedMessage:"Rekisteröinti ei ole sallittu",resetCredentialNotAllowedMessage:"Kirjautumistietojen nollaus ei ole sallittu",permissionNotApprovedMessage:"Lupaa ei myönnetty",noRelayStateInResponseMessage:'"relay state" puuttuu henkilöllisyyden tarjoajan vastauksesta.',insufficientPermissionMessage:"Riittämättömät oikeudet henkilöllisyyksien linkittämiseksi.",couldNotProceedWithAuthenticationRequestMessage:"Tunnistuspyyntöä henkilöllisyyden tarjoajalle ei voitu jatkaa.",couldNotObtainTokenMessage:"Ei voitu saada tokenia henkilöllisyyden tarjoajalta.",unexpectedErrorRetrievingTokenMessage:"Odottamaton virhe hankkiessa tokenia henkilöllisyyden tarjoajalta.",unexpectedErrorHandlingResponseMessage:"Odottamaton virhe käsiteltäessä vastausta henkilöllisyyden tarjoajalta.",identityProviderAuthenticationFailedMessage:"Tunnistautuminen epäonnistui. Ei voitu tunnistautua henkilöllisyyden tarjoajan kautta.",identityProviderDifferentUserMessage:"Tunnistautunut {0}, vaikka pitäisi olla tunnistautunut {1}",couldNotSendAuthenticationRequestMessage:"Ei voitu lähettää tunnistautumispyyntö henkilöllisyyden tarjoajalle.",unexpectedErrorHandlingRequestMessage:"Odottamaton virhe käsiteltäessä tunnistautumispyyntö henkilöllisyyden tarjoajalle.",invalidAccessCodeMessage:"Virheellinen pääsykoodi",sessionNotActiveMessage:"Istunto ei ole aktiivinen.",invalidCodeMessage:"Tapahtui virhe, ole hyvä ja kirjaudu uudelleen sovelluksesi kautta.",identityProviderUnexpectedErrorMessage:"Tunnistautumisen yhteydessä tapahtui virhe tunnistetietojen tarjoajan kanssa.",identityProviderNotFoundMessage:"Tunnisteella ei löytynyt henkilöllisyyden tarjoajaa.",identityProviderLinkSuccess:"Sähköpostin vahvistus onnistui Ole hyvä ja palaa alkuperäiseen selainikkunaan jatkaaksesi kirjautumista.",staleCodeMessage:"Tämä sivu ei ole enää voimassa, ole hyvä ja palaa sovellukseesi ja kirjaudu uudelleen",realmSupportsNoCredentialsMessage:"Realm ei tue mitään kirjautumistiedon tyyppiä.",credentialSetupRequired:"Ei voida kirjautua, kirjautumistietojen asetukset vaaditaan.",identityProviderNotUniqueMessage:"Realm tukee useita henkilöllisyyden tarjoajia. Ei voitu määrittää, mitä henkilöllisyyden tarjoajaa pitäisi käyttää tunnistautumiseen.",emailVerifiedMessage:"Sähköpostisi on vahvistettu.",staleEmailVerificationLink:"Klikkaamasi linkki on vanhentunut eikä enää toimi. Oletko jo vahvistanut sähköpostisi?",identityProviderAlreadyLinkedMessage:"Yhdistetty henkilöllisyys, minkä {0} palautti, on jo linkitetty toiseen käyttäjään.",confirmAccountLinking:"Vahvista tilin {0} linkitys, henkilöllisyyden tarjoajalta {1}, tiliisi.",confirmEmailAddressVerification:"Vahvista sähköpostiosoitteen {0} voimassaolo.",confirmExecutionOfActions:"Suorita seuraavat toiminnot",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский","locale_zh-CN":"中文简体",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_fi:"Suomi",locale_tr:"Türkçe",backToApplication:"« Takaisin sovellukseen",missingParameterMessage:"Puuttuva parametri: {0}",clientNotFoundMessage:"Asiakasta ei löytynyt.",clientDisabledMessage:"Asiakas ei ole käytössä.",invalidParameterMessage:"Epäkelpo parametri: {0}",alreadyLoggedIn:"Olet jo kirjautunut sisään",differentUserAuthenticated:"Olet kirjautunut sisään tilillä '{0}'. Ole hyvä ja kirjaudu ulos ensin.",brokerLinkingSessionExpired:"Pyysit tilin yhdistämistä mutta sessio on vanhentunut.",proceedWithAction:"» Klikkaa tästä jatkaaksesi","requiredAction.CONFIGURE_TOTP":"Konfiguroi OTP","requiredAction.terms_and_conditions":"Käyttöehdot","requiredAction.UPDATE_PASSWORD":"Päivitä salasana","requiredAction.UPDATE_PROFILE":"Päivitä profiili","requiredAction.VERIFY_EMAIL":"Vahvista sähköposti",doX509Login:"Kirjaudut sisään nimellä:",clientCertificate:"X509 asiakas-varmenne:",noCertificate:"[No Certificate]",pageNotFound:"Sivua ei löytynyt",internalServerError:"Tapahtui sisäinen virhe palvelimella.","console-username":"Käyttäjänimi:","console-password":"Salasana:","console-otp":"One Time Password:","console-new-password":"Uusi salasana:","console-confirm-password":"Vahvista salana:","console-update-password":"Salasanan päivitys vaaditaan.","console-verify-email":"Sinun täytyy vahvistaa sähköpostiosoitteesi. Sähköposti, mikä sisältää vahvistuskoodin, on lähetetty osoitteeseen {0}. Ole hyvä ja kirjoita tämä koodi alapuolella olevaan kenttään.","console-email-code":"Sähköposti-koodi:","console-accept-terms":"Hyväksy käyttöehdot? [k/e]:","console-accept":"k","openshift.scope.user_info":"Käyttäjän tiedot","openshift.scope.user_check-access":"Käyttäjän käyttöoikeustiedot","openshift.scope.user_full":"Täysi käyttöoikeus","openshift.scope.list-projects":"Listaa projektit","saml.post-form.title":"Tunnistautumisen uudelleenohjaus","saml.post-form.message":"Uudelleenohjataan, odota hetki..","saml.post-form.js-disabled":"JavaScript on pois käytöstä. Suosittelemme vahvasti sen käyttöönottoa. Klikkaa alla olevaa nappia jatkaaksesi. ","saml.artifactResolutionServiceInvalidResponse":"Unable to resolve artifact.","otp-display-name":"Todentajasovellus","otp-help-text":"Syötä todentajasovelluksen tarjoama vahvistuskoodi.","password-display-name":"Salasana","password-help-text":"Kirjaudu sisään syöttämällä salasanasi.","auth-username-form-display-name":"Käyttäjänimi","auth-username-form-help-text":"Aloita kirjautuminen syöttämällä käyttäjänimesi","auth-username-password-form-display-name":"käyttäjänimi ja salasana","auth-username-password-form-help-text":"Kirjaudu sisään syöttämällä käyttäjänimi ja salasana.","webauthn-display-name":"Turva-avain","webauthn-help-text":"Käytä Turva-avaintasi kirjatuaksesi sisään.","webauthn-passwordless-display-name":"Turva-avain","webauthn-passwordless-help-text":"Käytä Turva-avaintasi kirjatuaksesi sisään ilman salasanaa.","webauthn-login-title":"Turva-avain kirjautuminen","webauthn-registration-title":"Turva-avain rekisteröinti","webauthn-available-authenticators":"Saatavilla olevat todentajat","webauthn-unsupported-browser-text":'"WebAuthn" ei ole tuettu tällä selaimella. Kokeile jotain toista tai ota yhteyttä järjestelmänvalvojaan.',"webauthn-doAuthenticate":"Kirjaudu sisään Turva-avaimella","webauthn-error-title":"Turva-avain virhe","webauthn-error-registration":"Turva-avaimen rekisteröinti epäonnistui.
{0}","webauthn-error-api-get":"Tunnistautuminen Turva-avaimella epäonnistui.
{0}","webauthn-error-different-user":"Ensiksi tunnistautunut käyttäjä ei ole sama kuin Turva-avaimella tunnistaunut.","webauthn-error-auth-verification":"Turva-avain -tunnistautumisen tulos on virheellinen.
{0}","webauthn-error-register-verification":"Turva-avaimen rekisteröinnin tulos on virheellinen.
{0}","webauthn-error-user-not-found":"Tuntematon käyttäjä tunnistautui Turva-avaimella.","identity-provider-redirector":"Yhdistä käyttämällä toista henkilöllisyyden tarjoajaa","identity-provider-login-label":"Tai kirjaudu jollain näistä:",finalDeletionConfirmation:"Jos poistat tilisi, sitä ei voida enää palauttaa. Säilyttääksesi tilisi, paina Peruuta.",irreversibleAction:"Tätä toimintoa ei voi peruuttaa",deleteAccountConfirm:"Tilin poistamisen vahvistus",deletingImplies:"Tilin poisto tarkoittaa sitä, että:",errasingData:"Kaikki tietosi poistetaan",loggingOutImmediately:"Sinut kirjataan ulos välittömästi",accountUnusable:"Tämän sovelluksen käyttö ei myöhemmin enää ole mahdollista tällä käyttäjätilillä",userDeletedSuccessfully:"Käyttäjä poistettu onnistuneesti","access-denied":"Pääsy evätty",readOnlyUsernameMessage:'Et voi päivittää käyttäjänimeäsi, koska se on "vain-luku"-tilassa.'}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1433],{"./dist/login/i18n/baseMessages/fi.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Kirjaudu",doRegister:"Rekisteröidy",doCancel:"Peruuta",doSubmit:"Lähetä",doBack:"Takaisin",doYes:"Kyllä",doNo:"Ei",doContinue:"Jatka",doIgnore:"Sivuuta",doAccept:"Hyväksy",doDecline:"En hyväksy",doForgotPassword:"Unohditko salasanan?",doClickHere:"Klikkaa tästä",doImpersonate:"Edusta",doTryAgain:"Yritä uudelleen",doTryAnotherWay:"Yritä toista tapaa",doConfirmDelete:"Vahvista poisto",errorDeletingAccount:"Tilin poistossa tapahtui virhe",deletingAccountForbidden:"Sinulla ei ole riittäviä oikeuksia poistaakseesi omaa tiliä, ota yhteyttä järjestelmänvalvojaan.",kerberosNotConfigured:"Kerberosta ei ole konfiguroitu",kerberosNotConfiguredTitle:"Kerberosta ei ole konfiguroitu",bypassKerberosDetail:"Joko et ole kirjautunut Kerberoksen kautta tai selaintasi ei ole asetettu käyttämään Kerberosta kirjautumiseen. Klikkaa jatkaaksesi kirjautumista jollain toisella tavalla",kerberosNotSetUp:"Kerberosta ei ole asennettu. Et voi kirjautua sisään.",registerTitle:"Rekisteröidy",loginAccountTitle:"Kirjaudu sisään",loginTitle:"Kirjaudu {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Edusta käyttäjää",impersonateTitleHtml:"{0} Edusta käyttäjää",realmChoice:"Realm",unknownUser:"Tuntematon käyttäjä",loginTotpTitle:"Mobiili-todentajan asetukset",loginProfileTitle:"Päivitä käyttäjätilin tiedot",loginIdpReviewProfileTitle:"Päivitä käyttäjätilin tiedot",loginTimeout:"Kirjautumisyritys kesti liian kauan. Kirjautuminen aloitetaan alusta.",oauthGrantTitle:"Myönnä pääsy {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Pahoittelut...",errorTitleHtml:"Olemme pahoillamme ...",emailVerifyTitle:"Sähköpostiosoitteen varmistus",emailForgotTitle:"Unohditko salasanasi?",updatePasswordTitle:"Päivitä salasana",codeSuccessTitle:"Success-koodi",codeErrorTitle:"Virhekoodi: {0}",displayUnsupported:"Pyydetty näyttötyyppi ei ole tuettu",browserRequired:"Selain vaatii sisäänkirjautumista",browserContinue:"Selain vaatii sisäänkirjautumisen viimeistelyä",browserContinuePrompt:"Avaa selain ja jatka kirjautumista? [k/e]:",browserContinueAnswer:"k",termsTitle:"Käyttöehdot",termsText:"

Käyttöehdot ja niiden määrittely

",termsPlainText:"Käyttöehdot ja niiden määrittely.",recaptchaFailed:"Virheellinen Recaptcha",recaptchaNotConfigured:"Recaptcha vaaditaan, mutta sitä ei ole konfiguroitu",consentDenied:"Suostumus kielletty.",noAccount:"Uusi käyttäjä?",username:"Käyttäjätunnus",usernameOrEmail:"Käyttäjätunnus tai sähköpostiosoite",firstName:"Etunimi",givenName:"Sukunimi",fullName:"Koko nimi",lastName:"Sukunimi",familyName:"Sukunimi",email:"Sähköposti",password:"Salasana",passwordConfirm:"Salasana uudelleen",passwordNew:"Uusi salasana",passwordNewConfirm:"Uusi salasana uudelleen",rememberMe:"Muista minut",authenticatorCode:"Kertakäyttökoodi",address:"Osoite",street:"Katu",locality:"Kaupunki",region:"Osavaltio, Provinssi, tai Alue",postal_code:"Postinumero",country:"Maa",emailVerified:"Sähköposti vahvistettu",website:"Verkkosivu",phoneNumber:"Puhelinnumero",phoneNumberVerified:"Puhelinnumero varmennettu",gender:"Sukupuoli",birthday:"Syntymäpäivä",zoneinfo:"Aikavyöhyke",gssDelegationCredential:"GSS Delegation Credential",logoutOtherSessions:"Kirjaudu ulos muilta laitteilta",profileScopeConsentText:"Käyttäjän profiili",emailScopeConsentText:"Sähköpostiosoite",addressScopeConsentText:"Osoite",phoneScopeConsentText:"Puhelinnumero",offlineAccessScopeConsentText:"Offline-käyttö",samlRoleListScopeConsentText:"Omat roolit",rolesScopeConsentText:"Käyttäjäroolit",restartLoginTooltip:"Aloita kirjautuminen alusta",loginTotpIntro:"Sinun täytyy asentaa OTP (One Time Password) luontityökalu päästäksesi tälle tilille",loginTotpStep1:"Asenna yksi seuraavista sovelluksista puhelimeesi:",loginTotpStep2:"Avaa sovellus ja skannaa viivakoodi",loginTotpStep3:"Liitä sovelluksesta saatu kertaluontoinen koodi ja paina Lähetä viimeistelläksesi asennuksen",loginTotpStep3DeviceName:"Anna laitteelle nimi, jotta voit hallinnoida OTP-laitteitasi.",loginTotpManualStep2:"Avaa sovellus ja liitä avain",loginTotpManualStep3:"Käytä seuraavia konfiguraatioarvoja jos sovellus antaa asettaa ne:",loginTotpUnableToScan:"Ongelmia skannauksessa?",loginTotpScanBarcode:"Skannaa viivakoodi?",loginCredential:"Kirjautumistieto",loginTotpOneTime:"Kertaluontoinen koodi",loginTotpType:"Tyyppi",loginTotpAlgorithm:"Algoritmi",loginTotpDigits:"Numerot",loginTotpInterval:"Intervalli",loginTotpCounter:"Laskuri",loginTotpDeviceName:"Laitteen nimi","loginTotp.totp":"Aikapohjainen","loginTotp.hotp":"Laskuripohjainen",loginChooseAuthenticator:"Valitse kirjautumistapa",oauthGrantRequest:"Myönnätkö nämä käyttöoikeudet?",inResource:"in",oauth2DeviceVerificationTitle:"Laitekirjautuminen",verifyOAuth2DeviceUserCode:"Liitä laitteeltasi saamasi kertaluontoinen koodi ja paina Lähetä",oauth2DeviceInvalidUserCodeMessage:"Virheellinen koodi. yritä uudelleen.",oauth2DeviceExpiredUserCodeMessage:"Koodi on vanhentunut. Ole hyvä ja mene takaisin laitteellesi ja yritä yhdistämistä uudellleen.",oauth2DeviceVerificationCompleteHeader:"Laitekirjautuminen onnistui",oauth2DeviceVerificationCompleteMessage:"Voit sulkea tämän ikkunan ja mennä takaisin laitteellesi.",oauth2DeviceVerificationFailedHeader:"Laitekirjautuminen epäonnistui",oauth2DeviceVerificationFailedMessage:"Voit sulkea tämän ikkunan, mennä takaisin laitteellesi ja yrittää kirjautumista uudelleen.",oauth2DeviceConsentDeniedMessage:"Laitteen kirjautumisen suostumus evätty.",oauth2DeviceAuthorizationGrantDisabledMessage:"Client is not allowed to initiate OAuth 2.0 Device Authorization Grant. The flow is disabled for the client.",emailVerifyInstruction1:"Sähköpostin vahvistamisohjeet sisältävä viesti on lähetetty sähköpostiisi.",emailVerifyInstruction2:"Etkö ole saanut vahvistuskoodia sähköpostiisi?",emailVerifyInstruction3:"saadaksesi uuden sähköpostiviestin.",emailLinkIdpTitle:"Linkitä {0}",emailLinkIdp1:"Sinulle on lähetetty ohjeet tunnuksen linkittämiseen palvelun {0} kanssa.",emailLinkIdp2:"Etkö saanut vahvistuskoodia sähköpostiisi?",emailLinkIdp3:"saadaksesi uuden sähköpostiviestin.",emailLinkIdp4:"Jos olet jo vahvistanut sähköpostisi toisella selaimella,",emailLinkIdp5:"jatkaaksesi.",backToLogin:"« Takaisin kirjautumiseen",emailInstruction:"Syötä käyttäjätunnuksesi tai sähköpostiosoitteesi niin lähetämme sinulle ohjeet salasanan palauttamista varten.",emailInstructionUsername:"Syötä käyttäjänimesi niin lähetämme sinulle ohjeet uuden salasanan luomiseksi.",copyCodeInstruction:"Ole hyvä ja kopioi tämä koodi ja liitä se sovellukseesi:",pageExpiredTitle:"Sivu on vanhentunut",pageExpiredMsg1:"Aloita kirjautuminen alusta",pageExpiredMsg2:"Jatka kirjautumista",personalInfo:"Henkilökohtaiset tiedot:",role_admin:"Järjestelmänvalvoja","role_realm-admin":"Realm Järjestelmänvalvoja","role_create-realm":"Luo realm","role_create-client":"Luo asiakas","role_view-realm":"Näytä realm","role_view-users":"Näytä käyttäjät","role_view-applications":"Näytä sovellukset","role_view-clients":"Näytä asiakkaat","role_view-events":"Näytä tapahtumat","role_view-identity-providers":"Näytä henkilöllisyyden tarjoajat","role_manage-realm":"Hallinnoi realmia","role_manage-users":"Hallinnoi käyttäjiä","role_manage-applications":"Hallinnoi sovelluksia","role_manage-identity-providers":"Hallinnoi henkilöllisyyden tarjoajia","role_manage-clients":"Hallinnoi asiakkaita","role_manage-events":"Hallinnoi tapahtumia","role_view-profile":"Näytä profiili","role_manage-account":"Hallitse tiliä","role_manage-account-links":"Hallitse tilin linkkejä","role_read-token":"Lue token","role_offline-access":"Offline-pääsy",client_account:"Tili","client_account-console":"Tilin konsoli","client_security-admin-console":"Turvallisuus-hallintapaneeli","client_admin-cli":"Admin CLI","client_realm-management":"Realm Hallinta",client_broker:"Broker",requiredFields:"Vaaditut kentät",invalidUserMessage:"Virheellinen käyttäjätunnus tai salasana.",invalidUsernameMessage:"Väärä salasana.",invalidUsernameOrEmailMessage:"Väärä salasana tai sähköposti.",invalidPasswordMessage:"Väärä salasana.",invalidEmailMessage:"Virheellinen sähköpostiosoite.",accountDisabledMessage:"Tili on poistettu käytöstä, ota yhteyttä järjestelmänvalvojaan.",accountTemporarilyDisabledMessage:"Tili on väliaikaisesti poissa käytöstä, ota yhteyttä järjestelmänvalvojaan tai yritä myöhemmin uudelleen.",expiredCodeMessage:"Kirjautuminen kesti liian kauan. Ole hyvä ja kirjaudu uudestaan.",expiredActionMessage:"Toiminto kesti liian kauan. Ole hyvä ja jatka kirjautumiseen.",expiredActionTokenNoSessionMessage:"Toiminto vanhentui.",expiredActionTokenSessionExistsMessage:"Toiminto vanhentui. Aloita alusta.",missingFirstNameMessage:"Anna etunimi.",missingLastNameMessage:"Anna sukunimi.",missingEmailMessage:"Anna sähköpostiosoite.",missingUsernameMessage:"Anna käyttäjätunnus.",missingPasswordMessage:"Anna salasana.",missingTotpMessage:"Ole hyvä ja määrittele todentajan koodi.",missingTotpDeviceNameMessage:"Ole hyvä ja määrittele laitteen nimi.",notMatchPasswordMessage:"Salasanat eivät täsmää.","error-invalid-value":"Väärä arvo.","error-invalid-blank":"Ole hyvä ja määritä arvo.","error-empty":"Ole hyvä ja määritä arvo. ","error-invalid-length":"Ominaisuudella {0} täytyy olla pituus väliltä {1} ja {2}.","error-invalid-length-too-short":"Ominaisuudella {0} täytyy olla minimipituus {1}.","error-invalid-length-too-long":"Ominaisuudella {0} täytyy olla maksimipituus {2}.","error-invalid-email":"Väärä sähköpostiosoite.","error-invalid-number":"Väärä numero.","error-number-out-of-range":"Ominaisuuden {0} täytyy olla numero väliltä {1} ja {2}.","error-number-out-of-range-too-small":"Ominaisuudella {0} täytyy olla minimiarvona {1}.","error-number-out-of-range-too-big":"Ominaisuudella {0} täytyy olla maksimiarvona {2}.","error-pattern-no-match":"Väärä arvo.","error-invalid-uri":"Väärä URL.","error-invalid-uri-scheme":"Väärä URL:n malli.","error-invalid-uri-fragment":"Väärä URL:n osa.","error-user-attribute-required":"Ole hyvä ja määritä ominaisuus {0}.","error-invalid-date":"Väärä päivämäärä.","error-user-attribute-read-only":'Kenttä {0} on "vain luku"-tilassa.',"error-username-invalid-character":"Käyttäjänimi sisältää vääriä merkkejä.","error-person-name-invalid-character":"Nimi sisältää vääriä merkkejä.",invalidPasswordExistingMessage:"Vanha salasana on virheellinen.",invalidPasswordBlacklistedMessage:"Väärä salasana: salasana on lisätty mustalle listalle.",invalidPasswordConfirmMessage:"Salasanan vahvistus ei täsmää.",invalidTotpMessage:"Väärä todentaja-koodi.",usernameExistsMessage:"Käyttäjänimi on varattu.",emailExistsMessage:"Sähköpostiosoite on jo käytössä.",federatedIdentityExistsMessage:"Käyttäjä {0} {1} on jo olemassa. Kirjaudu tilihallintaan linkittääksesi tilin.",federatedIdentityUnavailableMessage:"Käyttäjä {0} joka on tunnistettu henkilöllisyyden tarjoajalla {1} ei ole olemassa. Ota yhteyttä järjestelmänvalvojaan.",confirmLinkIdpTitle:"Käyttäjätunnus on jo olemassa",federatedIdentityConfirmLinkMessage:"Käyttäjätunnus, jolla {0} on {1} on jo olemassa. Kuinka haluat jatkaa?",federatedIdentityConfirmReauthenticateMessage:"Tunnistaudu linkittääksesi {0}-tilin.",nestedFirstBrokerFlowMessage:"{0} käyttäjä {1} ei ole linkitetty tunnettuun käyttäjään.",confirmLinkIdpReviewProfile:"Tarkastele profiilia",confirmLinkIdpContinue:"Lisää olemassa olevaan tiliin",configureTotpMessage:"Sinun täytyy asentaa mobiili-todentaja aktivoidaksesi tilin.",updateProfileMessage:"Sinun tulee päivittää profiilisi aktivoidaksesi tilisi.",updatePasswordMessage:"Sinun tulee vaihtaa salasanasi aktivoidaksesi tilisi.",resetPasswordMessage:"Sinun tulee päivittää salasanasi.",verifyEmailMessage:"Sinun tulee vahvistaa sähköpostiosoitteesi aktivoidaksesi tilisi.",linkIdpMessage:"Sinun tulee vahvistaa sähköpostiosoitteesi linkittääksesi tilin palvelun {0} kanssa.",emailSentMessage:"Sinun pitäisi saada sähköpostiisi lisäohjeita hetken kuluttua.",emailSendErrorMessage:"Sähköpostin lähettäminen epäonnistui. Yritä hetken kuluttua uudelleen.",accountUpdatedMessage:"Käyttäjätiedot päivitetty.",accountPasswordUpdatedMessage:"Salasana vaihdettu.",delegationCompleteHeader:"Kirjautuminen onnistui",delegationCompleteMessage:"Voit sulkea tämän ikkunan ja siirtyä takaisin konsolisovellukseen.",delegationFailedHeader:"Kirjautuminen epäonnistui",delegationFailedMessage:"Voit sulkea tämän selaimen, siirtyä takaisin konsolisovellukseen ja yrittää kirjautumista uudelleen.",noAccessMessage:"Ei pääsyä",invalidPasswordMinLengthMessage:"Virheellinen salasana: vähimmäispituus {0}.",invalidPasswordMaxLengthMessage:"Virheellinen salasana: maksimipituus {0}.",invalidPasswordMinDigitsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} numeroa.",invalidPasswordMinLowerCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} pientä kirjainta.",invalidPasswordMinUpperCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} isoa kirjainta.",invalidPasswordMinSpecialCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} erikoismerkkiä.",invalidPasswordNotUsernameMessage:"Virheellinen salasana: salasana ei saa olla sama kuin käyttäjätunnus.",invalidPasswordNotEmailMessage:"Virheellinen salasana: ei voi olla sama kuin sähköposti.",invalidPasswordRegexPatternMessage:'Virheellinen salasana: ei vastaa "regex pattern(s)".',invalidPasswordHistoryMessage:"Virheellinen salasana: salasana ei saa olla sama kuin {0} edellistä salasanaasi.",invalidPasswordGenericMessage:"Virheellinen salasana: uusi salasana ei täytä salasanavaatimuksia.",failedToProcessResponseMessage:"Vastauksen käsittely epäonnistui",httpsRequiredMessage:"HTTPS vaaditaan",realmNotEnabledMessage:"Realm ei otettu käyttöön",invalidRequestMessage:"Virheellinen pyyntö",failedLogout:"Uloskirjautuminen epäonnistui",unknownLoginRequesterMessage:"Tuntematon kirjautumispyynnön tekijä",loginRequesterNotEnabledMessage:"kirjautumispyynnön tekijää ei ole otettu käyttöön",bearerOnlyMessage:'"Bearer-only" sovellusten ei ole sallittua aloittaa selainkirjautumista',standardFlowDisabledMessage:'Asiakas ei saa aloittaa selainkirjautumista annetulla vastaustyypillä ("response_type"). "Standard flow" on poistettu käytöstä asiakkaalla.',implicitFlowDisabledMessage:'Asiakas ei saa aloittaa selainkirjautumista annetulla vastaustyypillä ("response_type"). "Implicit flow" on poistettu käytöstä asiakkaalla.',invalidRedirectUriMessage:"Virheellinen uudelleenohjaus-uri",unsupportedNameIdFormatMessage:'Ei-tuettu "NameIDFormat"',invalidRequesterMessage:"Virheellinen pyynnön tekijä",registrationNotAllowedMessage:"Rekisteröinti ei ole sallittu",resetCredentialNotAllowedMessage:"Kirjautumistietojen nollaus ei ole sallittu",permissionNotApprovedMessage:"Lupaa ei myönnetty",noRelayStateInResponseMessage:'"relay state" puuttuu henkilöllisyyden tarjoajan vastauksesta.',insufficientPermissionMessage:"Riittämättömät oikeudet henkilöllisyyksien linkittämiseksi.",couldNotProceedWithAuthenticationRequestMessage:"Tunnistuspyyntöä henkilöllisyyden tarjoajalle ei voitu jatkaa.",couldNotObtainTokenMessage:"Ei voitu saada tokenia henkilöllisyyden tarjoajalta.",unexpectedErrorRetrievingTokenMessage:"Odottamaton virhe hankkiessa tokenia henkilöllisyyden tarjoajalta.",unexpectedErrorHandlingResponseMessage:"Odottamaton virhe käsiteltäessä vastausta henkilöllisyyden tarjoajalta.",identityProviderAuthenticationFailedMessage:"Tunnistautuminen epäonnistui. Ei voitu tunnistautua henkilöllisyyden tarjoajan kautta.",identityProviderDifferentUserMessage:"Tunnistautunut {0}, vaikka pitäisi olla tunnistautunut {1}",couldNotSendAuthenticationRequestMessage:"Ei voitu lähettää tunnistautumispyyntö henkilöllisyyden tarjoajalle.",unexpectedErrorHandlingRequestMessage:"Odottamaton virhe käsiteltäessä tunnistautumispyyntö henkilöllisyyden tarjoajalle.",invalidAccessCodeMessage:"Virheellinen pääsykoodi",sessionNotActiveMessage:"Istunto ei ole aktiivinen.",invalidCodeMessage:"Tapahtui virhe, ole hyvä ja kirjaudu uudelleen sovelluksesi kautta.",identityProviderUnexpectedErrorMessage:"Tunnistautumisen yhteydessä tapahtui virhe tunnistetietojen tarjoajan kanssa.",identityProviderNotFoundMessage:"Tunnisteella ei löytynyt henkilöllisyyden tarjoajaa.",identityProviderLinkSuccess:"Sähköpostin vahvistus onnistui Ole hyvä ja palaa alkuperäiseen selainikkunaan jatkaaksesi kirjautumista.",staleCodeMessage:"Tämä sivu ei ole enää voimassa, ole hyvä ja palaa sovellukseesi ja kirjaudu uudelleen",realmSupportsNoCredentialsMessage:"Realm ei tue mitään kirjautumistiedon tyyppiä.",credentialSetupRequired:"Ei voida kirjautua, kirjautumistietojen asetukset vaaditaan.",identityProviderNotUniqueMessage:"Realm tukee useita henkilöllisyyden tarjoajia. Ei voitu määrittää, mitä henkilöllisyyden tarjoajaa pitäisi käyttää tunnistautumiseen.",emailVerifiedMessage:"Sähköpostisi on vahvistettu.",staleEmailVerificationLink:"Klikkaamasi linkki on vanhentunut eikä enää toimi. Oletko jo vahvistanut sähköpostisi?",identityProviderAlreadyLinkedMessage:"Yhdistetty henkilöllisyys, minkä {0} palautti, on jo linkitetty toiseen käyttäjään.",confirmAccountLinking:"Vahvista tilin {0} linkitys, henkilöllisyyden tarjoajalta {1}, tiliisi.",confirmEmailAddressVerification:"Vahvista sähköpostiosoitteen {0} voimassaolo.",confirmExecutionOfActions:"Suorita seuraavat toiminnot",backToApplication:"« Takaisin sovellukseen",missingParameterMessage:"Puuttuva parametri: {0}",clientNotFoundMessage:"Asiakasta ei löytynyt.",clientDisabledMessage:"Asiakas ei ole käytössä.",invalidParameterMessage:"Epäkelpo parametri: {0}",alreadyLoggedIn:"Olet jo kirjautunut sisään",differentUserAuthenticated:"Olet kirjautunut sisään tilillä '{0}'. Ole hyvä ja kirjaudu ulos ensin.",brokerLinkingSessionExpired:"Pyysit tilin yhdistämistä mutta sessio on vanhentunut.",proceedWithAction:"» Klikkaa tästä jatkaaksesi","requiredAction.CONFIGURE_TOTP":"Konfiguroi OTP","requiredAction.TERMS_AND_CONDITIONS":"Käyttöehdot","requiredAction.UPDATE_PASSWORD":"Päivitä salasana","requiredAction.UPDATE_PROFILE":"Päivitä profiili","requiredAction.VERIFY_EMAIL":"Vahvista sähköposti",doX509Login:"Kirjaudut sisään nimellä:",clientCertificate:"X509 asiakas-varmenne:",noCertificate:"[No Certificate]",pageNotFound:"Sivua ei löytynyt",internalServerError:"Tapahtui sisäinen virhe palvelimella.","console-username":"Käyttäjänimi:","console-password":"Salasana:","console-otp":"One Time Password:","console-new-password":"Uusi salasana:","console-confirm-password":"Vahvista salana:","console-update-password":"Salasanan päivitys vaaditaan.","console-verify-email":"Sinun täytyy vahvistaa sähköpostiosoitteesi. Sähköposti, mikä sisältää vahvistuskoodin, on lähetetty osoitteeseen {0}. Ole hyvä ja kirjoita tämä koodi alapuolella olevaan kenttään.","console-email-code":"Sähköposti-koodi:","console-accept-terms":"Hyväksy käyttöehdot? [k/e]:","console-accept":"k","openshift.scope.user_info":"Käyttäjän tiedot","openshift.scope.user_check-access":"Käyttäjän käyttöoikeustiedot","openshift.scope.user_full":"Täysi käyttöoikeus","openshift.scope.list-projects":"Listaa projektit","saml.post-form.title":"Tunnistautumisen uudelleenohjaus","saml.post-form.message":"Uudelleenohjataan, odota hetki..","saml.post-form.js-disabled":"JavaScript on pois käytöstä. Suosittelemme vahvasti sen käyttöönottoa. Klikkaa alla olevaa nappia jatkaaksesi. ","saml.artifactResolutionServiceInvalidResponse":"Unable to resolve artifact.","otp-display-name":"Todentajasovellus","otp-help-text":"Syötä todentajasovelluksen tarjoama vahvistuskoodi.","password-display-name":"Salasana","password-help-text":"Kirjaudu sisään syöttämällä salasanasi.","auth-username-form-display-name":"Käyttäjänimi","auth-username-form-help-text":"Aloita kirjautuminen syöttämällä käyttäjänimesi","auth-username-password-form-display-name":"käyttäjänimi ja salasana","auth-username-password-form-help-text":"Kirjaudu sisään syöttämällä käyttäjänimi ja salasana.","webauthn-display-name":"Turva-avain","webauthn-help-text":"Käytä Turva-avaintasi kirjatuaksesi sisään.","webauthn-passwordless-display-name":"Turva-avain","webauthn-passwordless-help-text":"Käytä Turva-avaintasi kirjatuaksesi sisään ilman salasanaa.","webauthn-login-title":"Turva-avain kirjautuminen","webauthn-registration-title":"Turva-avain rekisteröinti","webauthn-available-authenticators":"Saatavilla olevat todentajat","webauthn-unsupported-browser-text":'"WebAuthn" ei ole tuettu tällä selaimella. Kokeile jotain toista tai ota yhteyttä järjestelmänvalvojaan.',"webauthn-doAuthenticate":"Kirjaudu sisään Turva-avaimella","webauthn-error-title":"Turva-avain virhe","webauthn-error-registration":"Turva-avaimen rekisteröinti epäonnistui.
{0}","webauthn-error-api-get":"Tunnistautuminen Turva-avaimella epäonnistui.
{0}","webauthn-error-different-user":"Ensiksi tunnistautunut käyttäjä ei ole sama kuin Turva-avaimella tunnistaunut.","webauthn-error-auth-verification":"Turva-avain -tunnistautumisen tulos on virheellinen.
{0}","webauthn-error-register-verification":"Turva-avaimen rekisteröinnin tulos on virheellinen.
{0}","webauthn-error-user-not-found":"Tuntematon käyttäjä tunnistautui Turva-avaimella.","identity-provider-redirector":"Yhdistä käyttämällä toista henkilöllisyyden tarjoajaa","identity-provider-login-label":"Tai kirjaudu jollain näistä:",finalDeletionConfirmation:"Jos poistat tilisi, sitä ei voida enää palauttaa. Säilyttääksesi tilisi, paina Peruuta.",irreversibleAction:"Tätä toimintoa ei voi peruuttaa",deleteAccountConfirm:"Tilin poistamisen vahvistus",deletingImplies:"Tilin poisto tarkoittaa sitä, että:",errasingData:"Kaikki tietosi poistetaan",loggingOutImmediately:"Sinut kirjataan ulos välittömästi",accountUnusable:"Tämän sovelluksen käyttö ei myöhemmin enää ole mahdollista tällä käyttäjätilillä",userDeletedSuccessfully:"Käyttäjä poistettu onnistuneesti","access-denied":"Pääsy evätty",readOnlyUsernameMessage:'Et voi päivittää käyttäjänimeäsi, koska se on "vain-luku"-tilassa.'}}}]); \ No newline at end of file diff --git a/1472.12680f26.iframe.bundle.js b/1472.12680f26.iframe.bundle.js deleted file mode 100644 index 7870a2de..00000000 --- a/1472.12680f26.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1472],{"./dist/account/i18n/baseMessages/de.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Speichern",doCancel:"Abbrechen",doLogOutAllSessions:"Alle Sitzungen abmelden",doRemove:"Entfernen",doAdd:"Hinzufügen",doSignOut:"Abmelden",doLogIn:"Anmelden",doLink:"Verknüpfen",noAccessMessage:"Zugriff verweigert",personalInfoSidebarTitle:"Persönliche Informationen",accountSecuritySidebarTitle:"Konto Sicherheit",signingInSidebarTitle:"Anmeldung",deviceActivitySidebarTitle:"Geräte Aktivität",linkedAccountsSidebarTitle:"Verknüpfte Konten",editAccountHtmlTitle:"Benutzerkonto bearbeiten",personalInfoHtmlTitle:"Persönliche Informationen",federatedIdentitiesHtmlTitle:"Föderierte Identitäten",accountLogHtmlTitle:"Benutzerkonto Log",changePasswordHtmlTitle:"Passwort Ändern",deviceActivityHtmlTitle:"Geräteaktivität",sessionsHtmlTitle:"Sitzungen",accountManagementTitle:"Keycloak Benutzerkontoverwaltung",authenticatorTitle:"Mehrfachauthentifizierung",applicationsHtmlTitle:"Applikationen",linkedAccountsHtmlTitle:"Verknüpfte Konten",accountManagementWelcomeMessage:"Willkommen bei der Keycloak Kontoverwaltung",personalInfoIntroMessage:"Grundlegende Informationen verwalten",accountSecurityTitle:"Kontosicherheit",accountSecurityIntroMessage:"Passwort und Kontozugriff verwalten",applicationsIntroMessage:"App-Berechtigung für den Zugriff auf ihr Konto verwalten",resourceIntroMessage:"Ressourcen mit Teammitgliedern teilen",passwordLastUpdateMessage:"Ihr Passwort wurde aktualisiert am",updatePasswordTitle:"Passwort aktualisieren",updatePasswordMessageTitle:"WÄhlen Sie ein sicheres Passwort",updatePasswordMessage:"Ein sicheres Passwort besteht aus einer Kombination aus Zahlen, Buchstaben und Sonderzeichen. Es ist schwer zu erraten, hat keine Ähnlichkeit mit einem echten Wort, und wird nur für dieses Konto verwendet.",personalSubTitle:"Ihre persönlichen 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ätigen",passwordNew:"Neues Passwort",username:"Benutzername",address:"Adresse",street:"Straße",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ück zur Applikation",backTo:"Zurück 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öderierte Identität",authenticator:"Mehrfachauthentifizierung","device-activity":"Geräteaktivität",sessions:"Sitzungen",log:"Log",application:"Applikation",availablePermissions:"verfügbare Berechtigungen",grantedPermissions:"gewährte Berechtigungen",grantedPersonalInfo:"gewährte persönliche Informationen",additionalGrants:"zusätzliche 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:"Öffnen 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ätenamen an, um die Verwaltung Ihrer OTP-Geräte zu erleichtern.",totpManualStep2:"Öffnen Sie die Applikation und geben Sie den folgenden Schlüssel ein.",totpManualStep3:"Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese für die Applikation anpassen können:",totpUnableToScan:"Sie können den Barcode nicht scannen?",totpScanBarcode:"Barcode scannen?","totp.totp":"zeitbasiert (time-based)","totp.hotp":"zählerbasiert (counter-based)",totpType:"Typ",totpAlgorithm:"Algorithmus",totpDigits:"Ziffern",totpInterval:"Intervall",totpCounter:"Zähler",totpDeviceName:"Gerätename",irreversibleAction:"Diese Aktion ist unwiderruflich",deletingImplies:"Die Löschung Ihres Kontos bedeutet:",errasingData:"Löschen aller Ihrer Daten",loggingOutImmediately:"Sofortige Abmeldung",accountUnusable:"Eine spätere Nutzung der Anwendung ist mit diesem Konto nicht mehr möglich",missingUsernameMessage:"Bitte geben Sie einen Benutzernamen ein.",missingFirstNameMessage:"Bitte geben Sie einen Vornamen ein.",invalidEmailMessage:"Ungültige 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örter sind nicht identisch.",invalidUserMessage:"Ungültiger Nutzer",missingTotpMessage:"Bitte geben Sie den One-time Code ein.",missingTotpDeviceNameMessage:"Bitte geben Sie einen Gerätenamen an.",invalidPasswordExistingMessage:"Das aktuelle Passwort ist ungültig.",invalidPasswordConfirmMessage:"Die Passwortbestätigung ist nicht identisch.",invalidTotpMessage:"Ungültiger One-time Code.",usernameExistsMessage:"Der Benutzername existiert bereits.",emailExistsMessage:"Die E-Mail-Adresse existiert bereits.",readOnlyUserMessage:"Sie können Ihr Benutzerkonto nicht ändern, da es schreibgeschützt ist.",readOnlyUsernameMessage:"Sie können Ihren Benutzernamen nicht ändern, da er schreibgeschützt ist.",readOnlyPasswordMessage:"Sie können Ihr Passwort nicht ändern, da es schreibgeschützt 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ültige oder fehlende Aktion.",identityProviderNotFoundMessage:"Angegebener Identity Provider nicht gefunden.",federatedIdentityLinkNotActiveMessage:"Diese Identität ist nicht mehr aktiv.",federatedIdentityRemovingLastProviderMessage:"Sie können 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öderierte Identität von {0} ist bereits einem anderen Benutzer zugewiesen.",staleCodeAccountMessage:"Diese Seite ist nicht mehr gültig, bitte versuchen Sie es noch einmal.",consentDenied:"Einverständnis verweigert.",accountDisabledMessage:"Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.",accountTemporarilyDisabledMessage:"Ihr Benutzerkonto ist temporär gesperrt, bitte kontaktieren Sie den Admin oder versuchen Sie es später noch einmal.",invalidPasswordMinLengthMessage:"Ungültiges Passwort: Es muss mindestens {0} Zeichen lang sein.",invalidPasswordMinLowerCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Kleinbuchstaben beinhalten.",invalidPasswordMinDigitsMessage:"Ungültiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten.",invalidPasswordMinUpperCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Großbuchstaben beinhalten.",invalidPasswordMinSpecialCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten.",invalidPasswordNotUsernameMessage:"Ungültiges Passwort: Es darf nicht gleich sein wie der Benutzername.",invalidPasswordNotEmailMessage:"Ungültiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein.",invalidPasswordRegexPatternMessage:"Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.",invalidPasswordHistoryMessage:"Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.",invalidPasswordBlacklistedMessage:"Ungültiges Passwort: Das Passwort steht auf der Blocklist (schwarzen Liste).",invalidPasswordGenericMessge:"Ungültiges Passwort: Das neue Passwort verletzt die Passwort-Richtlinien.",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ähren",resourceNoPermissionsGrantingAccess:"Keine Berechtigungen, die Zugriff auf diese Ressource gewähren",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ür Details.",resourceIsNotBeingShared:"Die Ressource wird nicht freigegeben",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.",authorizedProvider:"Autorisierter Provider",authorizedProviderMessage:"Autorisierte Provider, die mit Ihrem Konto verknüpft sind",identityProvider:"Identitätsprovider",identityProviderMessage:"Verknüpfen Sie Ihr Konto mit Identitätsprovidern, die Sie konfiguriert haben",socialLogin:"Social Login",userDefined:"Benutzerdefiniert",removeAccess:"Zugriff entfernen",removeAccessMessage:"Sie müssen den Zugriff erneut gewähren, wenn Sie diese Anwendung verwenden möchten.",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öhen, aktivieren Sie mindestens eine der verfügbaren 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 ändern",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ührten Anwendungen werden unterstützt.",mobileSetupStep2:"Öffnen 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ßen.",scanBarCode:"Wollen Sie den Barcode scannen?",enterBarCode:"Geben Sie den Einmalcode ein",doCopy:"Kopieren",doFinish:"Fertigstellen",authenticatorSMSCodeSetupTitle:"SMS-Code-Einrichtung",chooseYourCountry:"Wählen Sie Ihr Land",enterYourPhoneNumber:"Geben Sie Ihre Telefonnummer ein",sendVerficationCode:"Verifizierungscode senden",enterYourVerficationCode:"Geben Sie Ihren Verifizierungscode ein",authenticatorBackupCodesSetupTitle:"Backup-Codes einrichten",realmName:"Realm",doDownload:"Herunterladen",doPrint:"Drucken",generateNewBackupCodes:"Neue Backup-Codes generieren",backtoAuthenticatorPage:"Zurück zur Authenticator-Seite",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ählen",addPeople:"Personen hinzufügen, mit denen die Ressource geteilt werden soll",addTeam:"Team hinzufügen, mit dem die Ressource geteilt werden soll",myPermissions:"Meine Berechtigungen",waitingforApproval:"Warten auf Genehmigung",anyPermission:"Jede Berechtigung","openshift.scope.user_info":"Nutzerinformation","openshift.scope.user_check-access":"Benutzerzugriffsinformationen","openshift.scope.user_full":"Voller Zugriff","openshift.scope.list-projects":"Projekte auflisten"}}}]); \ No newline at end of file diff --git a/1472.e3421e5e.iframe.bundle.js b/1472.e3421e5e.iframe.bundle.js new file mode 100644 index 00000000..ce76e65f --- /dev/null +++ b/1472.e3421e5e.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1472],{"./dist/account/i18n/baseMessages/de.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Speichern",doCancel:"Abbrechen",doLogOutAllSessions:"Alle Sitzungen abmelden",doRemove:"Entfernen",doAdd:"Hinzufügen",doSignOut:"Abmelden",doLogIn:"Anmelden",doLink:"Verknüpfen",noAccessMessage:"Zugriff verweigert",personalInfoSidebarTitle:"Persönliche Informationen",accountSecuritySidebarTitle:"Kontosicherheit",signingInSidebarTitle:"Anmeldung",deviceActivitySidebarTitle:"Geräteaktivität",linkedAccountsSidebarTitle:"Verknüpfte Konten",editAccountHtmlTitle:"Benutzerkonto bearbeiten",personalInfoHtmlTitle:"Persönliche Informationen",federatedIdentitiesHtmlTitle:"Föderierte Identitäten",accountLogHtmlTitle:"Benutzerkonto-Protokoll",changePasswordHtmlTitle:"Passwort ändern",deviceActivityHtmlTitle:"Geräteaktivität",sessionsHtmlTitle:"Sitzungen",accountManagementTitle:"Keycloak-Benutzerkontoverwaltung",authenticatorTitle:"Mehrfachauthentifizierung",applicationsHtmlTitle:"Applikationen",linkedAccountsHtmlTitle:"Verknüpfte Konten",accountManagementWelcomeMessage:"Willkommen bei der Keycloak-Kontoverwaltung",personalInfoIntroMessage:"Grundlegende Informationen verwalten",accountSecurityTitle:"Kontosicherheit",accountSecurityIntroMessage:"Passwort und Kontozugriff verwalten",applicationsIntroMessage:"App-Berechtigung für den Zugriff auf Ihr Konto verwalten",resourceIntroMessage:"Ressourcen mit Teammitgliedern teilen",passwordLastUpdateMessage:"Ihr Passwort wurde aktualisiert am",updatePasswordTitle:"Passwort aktualisieren",updatePasswordMessageTitle:"Wählen Sie ein sicheres Passwort",updatePasswordMessage:"Ein sicheres Passwort besteht aus einer Kombination aus Zahlen, Buchstaben und Sonderzeichen. Es ist schwer zu erraten, hat keine Ähnlichkeit mit einem echten Wort, und wird nur für dieses Konto verwendet.",personalSubTitle:"Ihre persönlichen Informationen",personalSubMessage:"Verwalten Sie folgende Informationen: Vorname, Nachname und E-Mail-Adresse",authenticatorCode:"Einmalcode",email:"E-Mail",firstName:"Vorname",givenName:"Vorname",fullName:"Voller Name",lastName:"Nachname",familyName:"Nachname",password:"Passwort",currentPassword:"Aktuelles Passwort",passwordConfirm:"Passwort bestätigen",passwordNew:"Neues Passwort",username:"Benutzername",address:"Adresse",street:"Straße",region:"Bundesland, Kanton oder 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:"Offlinezugriff",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":"Identitätsprovider 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":"Identitätsprovider 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ück zur Applikation",backTo:"Zurück 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öderierte Identität",authenticator:"Mehrfachauthentifizierung","device-activity":"Geräteaktivität",sessions:"Sitzungen",log:"Protokoll",application:"Applikation",availablePermissions:"verfügbare Berechtigungen",grantedPermissions:"gewährte Berechtigungen",grantedPersonalInfo:"gewährte persönliche Informationen",additionalGrants:"zusätzliche Berechtigungen",action:"Aktion",inResource:"in",fullAccess:"Vollzugriff",offlineToken:"Offline-Token",revoke:"Berechtigung widerrufen",configureAuthenticators:"Mehrfachauthentifizierung konfigurieren",mobile:"Smartphone",totpStep1:"Installieren Sie eine der folgenden Applikationen auf Ihrem Smartphone:",totpStep2:"Öffnen Sie die Applikation und scannen Sie den Barcode.",totpStep3:"Geben Sie den von der Applikation generierten Einmalcode ein und klicken Sie auf Speichern.",totpStep3DeviceName:"Geben Sie einen Gerätenamen an, um die Verwaltung Ihrer OTP-Geräte zu erleichtern.",totpManualStep2:"Öffnen Sie die Applikation und geben Sie den folgenden Schlüssel ein.",totpManualStep3:"Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese für die Applikation anpassen können:",totpUnableToScan:"Sie können den Barcode nicht scannen?",totpScanBarcode:"Barcode scannen?","totp.totp":"zeitbasiert (time-based)","totp.hotp":"zählerbasiert (counter-based)",totpType:"Typ",totpAlgorithm:"Algorithmus",totpDigits:"Ziffern",totpInterval:"Intervall",totpCounter:"Zähler",totpDeviceName:"Gerätename",irreversibleAction:"Diese Aktion ist unwiderruflich",deletingImplies:"Die Löschung Ihres Kontos bedeutet:",errasingData:"Löschen aller Ihrer Daten",loggingOutImmediately:"Sofortige Abmeldung",accountUnusable:"Eine spätere Nutzung der Anwendung ist mit diesem Konto nicht mehr möglich",missingUsernameMessage:"Bitte geben Sie einen Benutzernamen ein.",missingFirstNameMessage:"Bitte geben Sie einen Vornamen ein.",invalidEmailMessage:"Ungültige 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örter sind nicht identisch.",invalidUserMessage:"Ungültiger Nutzer",missingTotpMessage:"Bitte geben Sie den Einmalcode ein.",missingTotpDeviceNameMessage:"Bitte geben Sie einen Gerätenamen an.",invalidPasswordExistingMessage:"Das aktuelle Passwort ist ungültig.",invalidPasswordConfirmMessage:"Die Passwortbestätigung ist nicht identisch.",invalidTotpMessage:"Ungültiger Einmalcode.",usernameExistsMessage:"Der Benutzername existiert bereits.",emailExistsMessage:"Die E-Mail-Adresse existiert bereits.",readOnlyUserMessage:"Sie können Ihr Benutzerkonto nicht ändern, da es schreibgeschützt ist.",readOnlyUsernameMessage:"Sie können Ihren Benutzernamen nicht ändern, da er schreibgeschützt ist.",readOnlyPasswordMessage:"Sie können Ihr Passwort nicht ändern, da es schreibgeschützt ist.",successTotpMessage:"Mehrfachauthentifizierung erfolgreich konfiguriert.",successTotpRemovedMessage:"Mehrfachauthentifizierung erfolgreich entfernt.",successGrantRevokedMessage:"Berechtigung erfolgreich widerrufen.",accountUpdatedMessage:"Ihr Benutzerkonto wurde aktualisiert.",accountPasswordUpdatedMessage:"Ihr Passwort wurde aktualisiert.",missingIdentityProviderMessage:"Identitätsprovider nicht angegeben.",invalidFederatedIdentityActionMessage:"Ungültige oder fehlende Aktion.",identityProviderNotFoundMessage:"Angegebener Identitätsprovider nicht gefunden.",federatedIdentityLinkNotActiveMessage:"Diese Identität ist nicht mehr aktiv.",federatedIdentityRemovingLastProviderMessage:"Sie können den letzten Eintrag nicht entfernen, da Sie kein Passwort haben.",identityProviderRedirectErrorMessage:"Fehler bei der Weiterleitung zum Identitätsprovider.",identityProviderRemovedMessage:"Identitätsprovider erfolgreich entfernt.",identityProviderAlreadyLinkedMessage:"Die föderierte Identität von {0} ist bereits einem anderen Benutzer zugewiesen.",staleCodeAccountMessage:"Diese Seite ist nicht mehr gültig, bitte versuchen Sie es noch einmal.",consentDenied:"Einverständnis verweigert.",accountDisabledMessage:"Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.",accountTemporarilyDisabledMessage:"Ihr Benutzerkonto ist temporär gesperrt, bitte kontaktieren Sie den Admin oder versuchen Sie es später noch einmal.",invalidPasswordMinLengthMessage:"Ungültiges Passwort: Es muss mindestens {0} Zeichen lang sein.",invalidPasswordMinLowerCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Kleinbuchstaben beinhalten.",invalidPasswordMinDigitsMessage:"Ungültiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten.",invalidPasswordMinUpperCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Großbuchstaben beinhalten.",invalidPasswordMinSpecialCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten.",invalidPasswordNotUsernameMessage:"Ungültiges Passwort: Es darf nicht gleich sein wie der Benutzername.",invalidPasswordNotEmailMessage:"Ungültiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein.",invalidPasswordRegexPatternMessage:"Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.",invalidPasswordHistoryMessage:"Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.",invalidPasswordBlacklistedMessage:"Ungültiges Passwort: Das Passwort steht auf der Blockliste.",invalidPasswordGenericMessge:"Ungültiges Passwort: Das neue Passwort verletzt die Passwort-Richtlinien.",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ähren",resourceNoPermissionsGrantingAccess:"Keine Berechtigungen, die Zugriff auf diese Ressource gewähren",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/teilen",notBeingShared:"Diese Ressource wurde nicht freigegeben.",notHaveAnyResource:"Sie haben keine Ressourcen",noResourcesSharedWithYou:"Es wurden keine Ressourcen mit Ihnen geteilt",havePermissionRequestsWaitingForApproval:"Sie haben {0} Genehmigungsanfrage(n), die auf Genehmigung warten.",clickHereForDetails:"Klicken Sie hier für Details.",resourceIsNotBeingShared:"Die Ressource wurde nicht freigegeben",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.",authorizedProvider:"Autorisierter Provider",authorizedProviderMessage:"Autorisierte Provider, die mit Ihrem Konto verknüpft sind",identityProvider:"Identitätsprovider",identityProviderMessage:"Verknüpfen Sie Ihr Konto mit Identitätsprovidern, die Sie konfiguriert haben",socialLogin:"Social Login",userDefined:"Benutzerdefiniert",removeAccess:"Zugriff entfernen",removeAccessMessage:"Sie müssen den Zugriff erneut gewähren, wenn Sie diese Anwendung verwenden möchten.",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öhen, aktivieren Sie mindestens eine der verfügbaren Zwei-Faktor-Authentifizierungsmethoden.",authenticatorMobileTitle:"Handy-Authentifikator",authenticatorMobileMessage:"Verwenden Sie Authentifikator-Anwendungen auf Ihrem Telefon, um Verifizierungscodes als Zwei-Faktor-Authentifizierung zu erhalten.",authenticatorMobileFinishSetUpMessage:"Die Authentifikator-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 ändern",authenticatorMobileSetupTitle:"Handy-Authentifikator-Setup",smscodeIntroMessage:"Geben Sie Ihre Rufnummer ein und ein Verifizierungscode wird an Ihr Telefon gesendet.",mobileSetupStep1:"Installieren Sie eine Authentifikator-Anwendung auf Ihrem Telefon. Die hier aufgeführten Anwendungen werden unterstützt.",mobileSetupStep2:"Öffnen 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ßen.",scanBarCode:"Wollen Sie den Barcode scannen?",enterBarCode:"Geben Sie den Einmalcode ein",doCopy:"Kopieren",doFinish:"Fertigstellen",authenticatorSMSCodeSetupTitle:"SMS-Code-Einrichtung",chooseYourCountry:"Wählen Sie Ihr Land",enterYourPhoneNumber:"Geben Sie Ihre Telefonnummer ein",sendVerficationCode:"Verifizierungscode senden",enterYourVerficationCode:"Geben Sie Ihren Verifizierungscode ein",authenticatorBackupCodesSetupTitle:"Backup-Codes einrichten",realmName:"Realm",doDownload:"Herunterladen",doPrint:"Drucken",generateNewBackupCodes:"Neue Backup-Codes generieren",backtoAuthenticatorPage:"Zurück zur Authentifikator-Seite",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ählen",addPeople:"Personen hinzufügen, mit denen die Ressource geteilt werden soll",addTeam:"Team hinzufügen, mit dem die Ressource geteilt werden soll",myPermissions:"Meine Berechtigungen",waitingforApproval:"Warten auf Genehmigung",anyPermission:"Jede Berechtigung","openshift.scope.user_info":"Nutzerinformation","openshift.scope.user_check-access":"Benutzerzugriffsinformationen","openshift.scope.user_full":"Voller Zugriff","openshift.scope.list-projects":"Projekte auflisten",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/161.3e0db7e5.iframe.bundle.js b/161.3e0db7e5.iframe.bundle.js deleted file mode 100644 index 9d4a2aea..00000000 --- a/161.3e0db7e5.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[161],{"./dist/login/i18n/baseMessages/cs.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Přihlásit se",doRegister:"Registrovat se",doCancel:"Zrušit",doSubmit:"Odeslat",doBack:"Zpět",doYes:"Ano",doNo:"Ne",doContinue:"Pokračovat",doIgnore:"Ignorovat",doAccept:"Potvrdit",doDecline:"Zamítnout",doForgotPassword:"Zapomenuté heslo?",doClickHere:"Klikněte zde",doImpersonate:"Zosobnit",doTryAgain:"Zkusit znovu",doTryAnotherWay:"Zkusit jiným způsobem",doConfirmDelete:"Potvrdit odstranění",errorDeletingAccount:"Nastala chyba při odstraňování účtu",deletingAccountForbidden:"Nemáte dostatečná oprávnění k odstranění vašeho vlastního účtu, kontaktujte administrátora.",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.",registerTitle:"Registrovat",loginAccountTitle:"Přihlásit k vašemu účtu",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í autentikátoru OTP",loginProfileTitle:"Aktualizovat informace o účtu",loginIdpReviewProfileTitle:"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}",displayUnsupported:"Požadovaný typ zobrazení není podporovaný",browserRequired:"Pro přihlášení je vyžadován prohlížeč",browserContinue:"Pro dokončení přihlášení je vyžadován prohlížeč",internal:"Interní",unknown:"Neznámé",termsTitle:"Smluvní podmínky",termsTitleHtml:"Smluvní podmínky",termsText:"

Smluvní podmínky k odsouhlasení

",termsPlainText:"Smluvní podmínky k odsouhlasení.",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",website:"Webová stránka",phoneNumber:"Telefonní číslo",phoneNumberVerified:"Telefonní číslo ověřeno",gender:"Pohlaví",birthday:"Datum narození",zoneinfo:"Časová zóna",gssDelegationCredential:"GSS Delegované Oprávnění",logoutOtherSessions:"Odhlásit se z ostatních zařízení",profileScopeConsentText:"Uživatelský profil",emailScopeConsentText:"E-mailová adresa",addressScopeConsentText:"Adresa",phoneScopeConsentText:"Telefonní číslo",offlineAccessScopeConsentText:"Přístup offline",samlRoleListScopeConsentText:"Moje role",rolesScopeConsentText:"Uživatelské role",restartLoginTooltip:"Restart login",loginTotpIntro:"Musíte si nakonfigurovat generátor jednorázových kódů (OTP) pro přístup k účtu",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í",loginTotpStep3DeviceName:"Zadejte název zařízení pro jednodušší správu jednorázových kódů (OTP) zařízení.",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?",loginOtpOneTime:"Jednorázový kód",loginTotpType:"Typ",loginTotpAlgorithm:"Algoritmus",loginTotpDigits:"Číslice",loginTotpInterval:"Interval",loginTotpCounter:"Počítadlo",loginTotpDeviceName:"Název zařízení","loginTotp.totp":"Založeno na čase","loginTotp.hotp":"Založeno na počítadle",loginChooseAuthenticator:"Vyberte metodu přihlášení",oauthGrantRequest:"Poskytujete tyto přístupová oprávnění?",inResource:"v",verifyOAuth2DeviceUserCode:"Zadejte kód z vašeho zařízení a klikněte na Odeslat",oauth2DeviceInvalidUserCodeMessage:"Nesprávný kód, zkuste to prosím znovu.",oauth2DeviceExpiredUserCodeMessage:"Platnost kódu vypršela. Vraťte se prosím do vašeho zařízení a zkuste se připojit znovu.",oauth2DeviceVerificationCompleteHeader:"Úspěšné přihlášení v zařízení",oauth2DeviceVerificationCompleteMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do vašeho zařízení.",oauth2DeviceVerificationFailedHeader:"Selhalo přihlášení v zařízení",oauth2DeviceVerificationFailedMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do vašeho zařízení a zkusit se znovu připojit.",oauth2DeviceConsentDeniedMessage:"Připojení zařízení odmítnuto.",oauth2DeviceAuthorizationGrantDisabledMessage:"Klient nemá povoleno iniciovat OAuth 2.0 Device Authorization Grant. Flow je pro klienta zakázáno.",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.",emailInstructionUsername:"Zadejte své uživatelské jméno 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_account-console":"Uživatelská konzola","client_security-admin-console":"Security Admin Console","client_admin-cli":"Admin CLI","client_realm-management":"Spravovat Realm",client_broker:"Broker",requiredFields:"Vyžadované položky",invalidUserMessage:"Neplatné jméno nebo heslo.",invalidUsernameMessage:"Neplatné jméno.",invalidUsernameOrEmailMessage:"Neplatné jméno nebo e-mail.",invalidPasswordMessage:"Neplatné heslo.",invalidEmailMessage:"Neplatný 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řihlaste 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.",missingTotpDeviceNameMessage:"Zadejte prosím jméno zařízení.",notMatchPasswordMessage:"Hesla se neshodují.","error-invalid-value":"Nesprávná hodnota.","error-invalid-blank":"Zadejte prosím hodnotu.","error-empty":"Zadejte prosím hodnotu.","error-invalid-length":"Délka musí být mezi {1} a {2}.","error-invalid-length-too-short":"Minimální délka je {1}.","error-invalid-length-too-long":"Maximální délka je {2}.","error-invalid-email":"Nesprávná e-mailová adresa.","error-invalid-number":"Nesprávné číslo.","error-number-out-of-range":"Číslo musí být mezi {1} a {2}.","error-number-out-of-range-too-small":"Minimální hodnota čísla je {1}.","error-number-out-of-range-too-big":"Maximální hodnota čísla je {2}.","error-pattern-no-match":"Nesprávná hodnota.","error-invalid-uri":"Nesprávná URL adresa.","error-invalid-uri-scheme":"Nesprávné URL schema.","error-invalid-uri-fragment":"Nesprávný fragment URL.","error-user-attribute-required":"Zadejte prosím tuto položku.","error-invalid-date":"Nesprávné datum.","error-user-attribute-read-only":"Tato položka je jen ke čtení.","error-username-invalid-character":"Hodnota obsahuje nevalidní znak.","error-person-name-invalid-character":"Hodnota obsahuje nevalidní znak.",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:"E-mail již existuje.",federatedIdentityExistsMessage:"Uživatel s {0} {1} již existuje. Přihlaste se ke správě účtu a propojte účet.",federatedIdentityUnavailableMessage:"Uživatel {0} přihlášený poskytovatelem identit {1} neexistuje. Kontaktujte prosím administrátora.",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}",nestedFirstBrokerFlowMessage:"{0} uživatel {1} není propojen s žádným známým uživatelem.",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.",delegationCompleteHeader:"Přihlášení úspěšné",delegationCompleteMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do aplikace.",delegationFailedHeader:"Přihlášení selhalo",delegationFailedMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do aplikace a zkusit se znovu přihlásit.",noAccessMessage:"Žádný přístup",invalidPasswordMinLengthMessage:"Neplatné heslo: minimální délka {0}.",invalidPasswordMaxLengthMessage:"Neplatné heslo: maximá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.",invalidPasswordNotEmailMessage:"Neplatné heslo: nesmí být totožné s e-mailovou adresou.",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",successLogout:"Odhlášení bylo úspěšné",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á adresa přesměrování",unsupportedNameIdFormatMessage:"Nepodporovaný NameIDFormat",invalidRequesterMessage:"Neplatný žadatel",registrationNotAllowedMessage:"Registrace není povolena",resetCredentialNotAllowedMessage:"Reset Credential není povoleno",permissionNotApprovedMessage:"Oprávnění nebylo schváleno.",noRelayStateInResponseMessage:"Chybí relay state v odpovědi od poskytovatele identity.",insufficientPermissionMessage:"Nedostatečná oprávnění k propojení identit.",couldNotProceedWithAuthenticationRequestMessage:"Nemohu pokračovat s žádostí o ověření poskytovateli identity.",couldNotObtainTokenMessage:"Nelze získat token od poskytovatele identity.",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.",couldNotSendAuthenticationRequestMessage:"Nelze odeslat žádost o ověření poskytovateli identity.",unexpectedErrorHandlingRequestMessage:"Neočekávaná chyba při zpracování požadavku na ověření poskytovateli identity.",invalidAccessCodeMessage:"Neplatný přístupový kód.",sessionNotActiveMessage:"Session není aktivní.",invalidCodeMessage:"Došlo k chybě, přihlaste se znovu prostřednictvím své aplikace.",cookieNotFoundMessage:"Soubor cookie nenalezen. Ujistěte se prosím, že máte v prohlížeči povolené cookies.",identityProviderUnexpectedErrorMessage:"Neočekávaná chyba při ověřování s poskytovatelem identity",identityProviderMissingStateMessage:"V odpovědi od poskytovatele identit chybí parametr state.",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í.",credentialSetupRequired:"Není možné se přihlásit, je vyžadována konfigurace přístupových údajů.",identityProviderNotUniqueMessage:"Realm podporuje více poskytovatelů identity. Nelze určit, s jakým zprostředkovatelem identity se má ověřit.",emailVerifiedMessage:"Vaše e-mailová adresa byla ověřena.",staleEmailVerificationLink:"Odkaz, na který jste klikli, je 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 identity {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",invalidTokenRequiredActions:"Požadované akce obsažené v daném odkazu nejsou validní",doX509Login:"Budete přihlášeni jako:",clientCertificate:"Klientský X509 certifikát:",noCertificate:"[Žádný certifikát]",pageNotFound:"Stránka nenalezena",internalServerError:"Nastala interní chyba serveru","console-username":"Jméno:","console-password":"Heslo:","console-otp":"Jednorázové heslo:","console-new-password":"Nové heslo:","console-confirm-password":"Potvrzení hesla:","console-update-password":"Je vyžadována změna hesla.","console-verify-email":"Musíte ověřit svou emailovou adresu. Odeslali jsme e-mail na {0}, který obsahuje ověřovací kód. Zadejte prosím tento kód do pole níže.","console-email-code":"Kód z e-mailu:","openshift.scope.user_info":"Informace o uživateli","openshift.scope.user_check-access":"Informace o přístupu uživatele","openshift.scope.user_full":"Plný přístup","openshift.scope.list-projects":"Seznam projektů","saml.post-form.title":"Přesměrování přihlášení","saml.post-form.message":"Přesměrovávám, čekejte prosím.","saml.post-form.js-disabled":"JavaScript není povolený. Důrazně doporučujeme jej povolit. Pro pokračování stiskněte tlačítko níže.","otp-display-name":"Authenticator Application","otp-help-text":"Zadejte ověřovací kód z aplikace.","password-display-name":"Heslo","password-help-text":"Přihlaste se pomocí hesla.","auth-username-form-display-name":"Jméno","auth-username-form-help-text":"Začněte přihlášení zadáním svého uživatelského jména","auth-username-password-form-display-name":"Jméno a heslo","auth-username-password-form-help-text":"Přihlaste se pomocí jména a hesla.","webauthn-display-name":"Bezpečnostní klíč","webauthn-help-text":"Použijte k přihlášení bezpečnostní klíč.","webauthn-passwordless-display-name":"Bezpečnostní klíč","webauthn-passwordless-help-text":"Použijte bezpečnostní klíč k přihlášení bez hesla.","webauthn-login-title":"Přihlášení bezpečnostním klíčem","webauthn-registration-title":"Registrace bezpečnostního klíče","webauthn-available-authenticators":"Dostupné bezpečnostní klíče","webauthn-unsupported-browser-text":"WebAuthn není v tomto prohlížeči podporováno. Zkuste jiný prohlížeč nebo kontaktujte svého administrátora.","webauthn-doAuthenticate":"Přihlášení bezpečnostním klíčem","webauthn-createdAt-label":"Vytvořeno","webauthn-error-title":"Chyba bezpečnostního klíče","webauthn-error-registration":"Selhala registrace vašeho bezpečnostního klíče.
{0}","webauthn-error-api-get":"Selhalo přihlášení pomocí bezpečnostního klíče.
{0}","webauthn-error-different-user":"První přihlášený uživatel není totožný s uživatelem přihlášeným pomocí bezpečnostního klíče.","webauthn-error-auth-verification":"Nevalidní výsledek přihlášení pomocí bezpečnostního klíče.
{0}","webauthn-error-register-verification":"Nevalidní výsledek registrace bezpečnostního klíče.
{0}","webauthn-error-user-not-found":"Neznámý uživatel přihlášen pomocí bezpečnostního klíče.","identity-provider-redirector":"Propojit s jiným poskytovatelem identit","identity-provider-login-label":"Nebo se přihlaste pomocí",finalDeletionConfirmation:"Pokud svůj účet odstraníte, nemůže být obnoven. Pro zachování účtu klikněte na tlačítko Zrušit.",irreversibleAction:"Tuto akci nelze vzít zpět",deleteAccountConfirm:"Potvrzení odstranění účtu",deletingImplies:"Odstranění vašeho účtu znamená:",errasingData:"Smazání všech vašich dat",loggingOutImmediately:"Okamžité odhlášení",accountUnusable:"Další použití aplikace s tímto účtem nebude možné",userDeletedSuccessfully:"Uživatel úspěšně odstraněn","access-denied":"Přístup odepřen","frontchannel-logout.title":"Odhlášení","frontchannel-logout.message":"Odhlašujete se z následujících aplikací",logoutConfirmTitle:"Odhlašování",logoutConfirmHeader:"Chcete se odhlásit?",doLogout:"Odhlásit",readOnlyUsernameMessage:"Nemůžete aktualizovat své uživatelské jméno, protože je pouze pro čtení."}}}]); \ No newline at end of file diff --git a/161.62742556.iframe.bundle.js b/161.62742556.iframe.bundle.js new file mode 100644 index 00000000..2ba8916a --- /dev/null +++ b/161.62742556.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[161],{"./dist/login/i18n/baseMessages/cs.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Přihlásit se",doRegister:"Registrovat se",doCancel:"Zrušit",doSubmit:"Odeslat",doBack:"Zpět",doYes:"Ano",doNo:"Ne",doContinue:"Pokračovat",doIgnore:"Ignorovat",doAccept:"Potvrdit",doDecline:"Zamítnout",doForgotPassword:"Zapomenuté heslo?",doClickHere:"Klikněte zde",doImpersonate:"Zosobnit",doTryAgain:"Zkusit znovu",doTryAnotherWay:"Zkusit jiným způsobem",doConfirmDelete:"Potvrdit odstranění",errorDeletingAccount:"Nastala chyba při odstraňování účtu",deletingAccountForbidden:"Nemáte dostatečná oprávnění k odstranění vašeho vlastního účtu, kontaktujte administrátora.",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.",registerTitle:"Registrovat",loginAccountTitle:"Přihlásit k vašemu účtu",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í autentikátoru OTP",loginProfileTitle:"Aktualizovat informace o účtu",loginIdpReviewProfileTitle:"Aktualizovat informace o účtu",loginTimeout:"Přihlašování trvalo příliš dlouho. Přihlašovací proces začíná od začátku.",reauthenticate:"Pro pokračování se prosím znovu přihlaste",oauthGrantTitle:"Udělit přístup {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Ujistěte se, že důvěřujete {0}. Zjistěte, jak {0} nakládá s daty uživatelů.",oauthGrantReview:"Můžete si přečíst",oauthGrantTos:"podmínky používání služby.",oauthGrantPolicy:"zásady ochrany osobních údajů.",errorTitle:"Je nám líto...",errorTitleHtml:"Omlouváme se ...",emailVerifyTitle:"Ověření e-mailu",emailForgotTitle:"Zapomněli jste heslo?",updateEmailTitle:"Aktualizace e-mailu",emailUpdateConfirmationSentTitle:"Potvrzovací e-mail odeslán",emailUpdateConfirmationSent:"Potvrzovací e-mail byl odeslán na adresu {0}. Pro dokončení aktualizace e-mailu postupujte podle pokynů.",emailUpdatedTitle:"E-mail byl aktualizován",emailUpdated:"E-mail účtu byl úspěšně aktualizován na {0}.",updatePasswordTitle:"Aktualizace hesla",codeSuccessTitle:"Kód úspěchu ",codeErrorTitle:"Kód chyby: {0}",displayUnsupported:"Požadovaný typ zobrazení není podporovaný",browserRequired:"Pro přihlášení je vyžadován prohlížeč",browserContinue:"Pro dokončení přihlášení je vyžadován prohlížeč",browserContinuePrompt:"Otevřít prohlížeč a pokračovat v přihlášení? [a/n]:",browserContinueAnswer:"a",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"Interní",unknown:"Neznámé",termsTitle:"Smluvní podmínky",termsText:"

Smluvní podmínky k odsouhlasení

",termsPlainText:"Smluvní podmínky k odsouhlasení.",termsAcceptanceRequired:"Musíte souhlasit s našimi smluvními podmínkami.",acceptTerms:"Souhlasím se smluvními podmínkami",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",hidePassword:"Skrýt heslo",showPassword:"Zobrazit 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",website:"Webová stránka",phoneNumber:"Telefonní číslo",phoneNumberVerified:"Telefonní číslo ověřeno",gender:"Pohlaví",birthday:"Datum narození",zoneinfo:"Časová zóna",gssDelegationCredential:"GSS Delegované Oprávnění",logoutOtherSessions:"Odhlásit se z ostatních zařízení",profileScopeConsentText:"Uživatelský profil",emailScopeConsentText:"E-mailová adresa",addressScopeConsentText:"Adresa",phoneScopeConsentText:"Telefonní číslo",offlineAccessScopeConsentText:"Přístup offline",samlRoleListScopeConsentText:"Moje role",rolesScopeConsentText:"Uživatelské role",restartLoginTooltip:"Začít s přihlašováním od začátku",loginTotpIntro:"Musíte si nakonfigurovat generátor jednorázových kódů (OTP) pro přístup k účtu",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í",loginTotpStep3DeviceName:"Zadejte název zařízení pro jednodušší správu jednorázových kódů (OTP) zařízení.",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?",loginCredential:"Přihlašovací údaje",loginOtpOneTime:"Jednorázový kód",loginTotpType:"Typ",loginTotpAlgorithm:"Algoritmus",loginTotpDigits:"Číslice",loginTotpInterval:"Interval",loginTotpCounter:"Počítadlo",loginTotpDeviceName:"Název zařízení","loginTotp.totp":"Založeno na čase","loginTotp.hotp":"Založeno na počítadle",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"Vyberte metodu přihlášení",oauthGrantRequest:"Poskytujete tyto přístupová oprávnění?",inResource:"v",oauth2DeviceVerificationTitle:"Přihlášení na zařízení",verifyOAuth2DeviceUserCode:"Zadejte kód z vašeho zařízení a klikněte na Odeslat",oauth2DeviceInvalidUserCodeMessage:"Nesprávný kód, zkuste to prosím znovu.",oauth2DeviceExpiredUserCodeMessage:"Platnost kódu vypršela. Vraťte se prosím do vašeho zařízení a zkuste se připojit znovu.",oauth2DeviceVerificationCompleteHeader:"Úspěšné přihlášení v zařízení",oauth2DeviceVerificationCompleteMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do vašeho zařízení.",oauth2DeviceVerificationFailedHeader:"Selhalo přihlášení v zařízení",oauth2DeviceVerificationFailedMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do vašeho zařízení a zkusit se znovu připojit.",oauth2DeviceConsentDeniedMessage:"Připojení zařízení odmítnuto.",oauth2DeviceAuthorizationGrantDisabledMessage:"Klient nemá povoleno iniciovat OAuth 2.0 Device Authorization Grant. Flow je pro klienta zakázáno.",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.",emailInstructionUsername:"Zadejte své uživatelské jméno 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_account-console":"Uživatelská konzola","client_realm-management":"Správa realmu",client_broker:"Broker",requiredFields:"Vyžadované položky",invalidUserMessage:"Neplatné jméno nebo heslo.",invalidUsernameMessage:"Neplatné jméno.",invalidUsernameOrEmailMessage:"Neplatné jméno nebo e-mail.",invalidPasswordMessage:"Neplatné heslo.",invalidEmailMessage:"Neplatný 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řihlaste se znovu.",expiredActionMessage:"Akce vypršela. Pokračujte přihlášením.",expiredActionTokenNoSessionMessage:"Akce vypršela.",expiredActionTokenSessionExistsMessage:"Akce vypršela. Začněte znovu",sessionLimitExceeded:"Příliš mnoho navázaných spojení",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.",missingTotpDeviceNameMessage:"Zadejte prosím jméno zařízení.",notMatchPasswordMessage:"Hesla se neshodují.","error-invalid-value":"Nesprávná hodnota.","error-invalid-blank":"Zadejte prosím hodnotu.","error-empty":"Zadejte prosím hodnotu.","error-invalid-length":"Délka musí být mezi {1} a {2}.","error-invalid-length-too-short":"Minimální délka je {1}.","error-invalid-length-too-long":"Maximální délka je {2}.","error-invalid-email":"Nesprávná e-mailová adresa.","error-invalid-number":"Nesprávné číslo.","error-number-out-of-range":"Číslo musí být mezi {1} a {2}.","error-number-out-of-range-too-small":"Minimální hodnota čísla je {1}.","error-number-out-of-range-too-big":"Maximální hodnota čísla je {2}.","error-pattern-no-match":"Nesprávná hodnota.","error-invalid-uri":"Nesprávná URL adresa.","error-invalid-uri-scheme":"Nesprávné URL schéma.","error-invalid-uri-fragment":"Nesprávný fragment URL.","error-user-attribute-required":"Zadejte prosím tuto položku.","error-invalid-date":"Nesprávné datum.","error-user-attribute-read-only":"Tato položka je jen ke čtení.","error-username-invalid-character":"Hodnota obsahuje nevalidní znak.","error-person-name-invalid-character":"Hodnota obsahuje nevalidní znak.","error-reset-otp-missing-id":"Vyberte prosím OTP konfiguraci.",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:"E-mail již existuje.",federatedIdentityExistsMessage:"Uživatel s {0} {1} již existuje. Přihlaste se ke správě účtu a propojte účet.",federatedIdentityUnavailableMessage:"Uživatel {0} přihlášený poskytovatelem identit {1} neexistuje. Kontaktujte prosím administrátora.",federatedIdentityUnmatchedEssentialClaimMessage:"Token identity vydaný poskytovatelem identity neodpovídá nakonfigurovanému essential claim. Kontaktujte prosím administrátora.",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}",nestedFirstBrokerFlowMessage:"{0} uživatel {1} není propojen s žádným známým uživatelem.",confirmLinkIdpReviewProfile:"Zkontrolujte profil",confirmLinkIdpContinue:"Přidat do existujícího účtu",configureTotpMessage:"Chcete-li aktivovat účet, musíte nastavit službu Mobile Authenticator.",configureBackupCodesMessage:"Pro aktivaci svého účtu musíte nakonfigurovat záložní kódy.",updateProfileMessage:"Pro aktivaci účtu musíte aktualizovat svůj uživatelský profil.",updatePasswordMessage:"Pro aktivaci účtu musíte provést aktualizaci hesla.",updateEmailMessage:"Pro aktivaci účtu musíte aktualizovat svou e-mailovou adresu.",resetPasswordMessage:"Je třeba změnit heslo.",verifyEmailMessage:"Pro aktivaci účtu musíte 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.",delegationCompleteHeader:"Přihlášení úspěšné",delegationCompleteMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do aplikace.",delegationFailedHeader:"Přihlášení selhalo",delegationFailedMessage:"Můžete zavřít toto okno prohlížeče a vrátit se do aplikace a zkusit se znovu přihlásit.",noAccessMessage:"Žádný přístup",invalidPasswordMinLengthMessage:"Neplatné heslo: minimální délka {0}.",invalidPasswordMaxLengthMessage:"Neplatné heslo: maximá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.",invalidPasswordNotEmailMessage:"Neplatné heslo: nesmí být totožné s e-mailovou adresou.",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",successLogout:"Odhlášení bylo úspěšné",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á adresa přesměrování",unsupportedNameIdFormatMessage:"Nepodporovaný NameIDFormat",invalidRequesterMessage:"Neplatný žadatel",registrationNotAllowedMessage:"Registrace není povolena",resetCredentialNotAllowedMessage:"Reset Credential není povoleno",permissionNotApprovedMessage:"Oprávnění nebylo schváleno.",noRelayStateInResponseMessage:"Chybí relay state v odpovědi od poskytovatele identity.",insufficientPermissionMessage:"Nedostatečná oprávnění k propojení identit.",couldNotProceedWithAuthenticationRequestMessage:"Nemohu pokračovat s žádostí o ověření poskytovateli identity.",couldNotObtainTokenMessage:"Nelze získat token od poskytovatele identity.",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.",couldNotSendAuthenticationRequestMessage:"Nelze odeslat žádost o ověření poskytovateli identity.",unexpectedErrorHandlingRequestMessage:"Neočekávaná chyba při zpracování požadavku na ověření poskytovateli identity.",invalidAccessCodeMessage:"Neplatný přístupový kód.",sessionNotActiveMessage:"Session není aktivní.",invalidCodeMessage:"Došlo k chybě, přihlaste se znovu prostřednictvím své aplikace.",cookieNotFoundMessage:"Soubor cookie nenalezen. Ujistěte se prosím, že máte v prohlížeči povolené cookies.",insufficientLevelOfAuthentication:"Nebylo dosaženo požadované úrovně autentizace.",identityProviderUnexpectedErrorMessage:"Neočekávaná chyba při ověřování s poskytovatelem identity",identityProviderMissingStateMessage:"V odpovědi od poskytovatele identit chybí parametr state.",identityProviderMissingCodeOrErrorMessage:"V odpovědi poskytovatele identit chybí parametr code nebo error.",identityProviderInvalidResponseMessage:"Nevalidní odpověď od poskytovatele identity.",identityProviderInvalidSignatureMessage:"Nevalidní podpis v odpovědi od poskytovatele 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í.",credentialSetupRequired:"Není možné se přihlásit, je vyžadována konfigurace přístupových údajů.",identityProviderNotUniqueMessage:"Realm podporuje více poskytovatelů identity. Nelze určit, s jakým zprostředkovatelem identity se má ověřit.",emailVerifiedMessage:"Vaše e-mailová adresa byla ověřena.",staleEmailVerificationLink:"Odkaz, na který jste klikli, je 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 identity {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 odhlaste.",brokerLinkingSessionExpired:"Požadované propojení účtu brokerů, ale aktuální relace již není platná.",proceedWithAction:"» Klikněte zde pro pokračování",acrNotFulfilled:"Nebyly naplněny požadavky autentizace","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","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Generování kódů pro obnovení",invalidTokenRequiredActions:"Požadované akce obsažené v daném odkazu nejsou validní",doX509Login:"Budete přihlášeni jako:",clientCertificate:"Klientský X509 certifikát:",noCertificate:"[Žádný certifikát]",pageNotFound:"Stránka nenalezena",internalServerError:"Nastala interní chyba serveru","console-username":"Jméno:","console-password":"Heslo:","console-otp":"Jednorázové heslo:","console-new-password":"Nové heslo:","console-confirm-password":"Potvrzení hesla:","console-update-password":"Je vyžadována změna hesla.","console-verify-email":"Musíte ověřit svou e-mailovou adresu. Odeslali jsme e-mail na {0}, který obsahuje ověřovací kód. Zadejte prosím tento kód do pole níže.","console-email-code":"Kód z e-mailu:","console-accept-terms":"Souhlasit s podmínkami? [a/n]:","console-accept":"a","openshift.scope.user_info":"Informace o uživateli","openshift.scope.user_check-access":"Informace o přístupu uživatele","openshift.scope.user_full":"Plný přístup","openshift.scope.list-projects":"Seznam projektů","saml.post-form.title":"Přesměrování přihlášení","saml.post-form.message":"Přesměrovávám, čekejte prosím.","saml.post-form.js-disabled":"JavaScript není povolený. Důrazně doporučujeme jej povolit. Pro pokračování stiskněte tlačítko níže.","otp-display-name":"Autentizační Aplikace","otp-help-text":"Zadejte ověřovací kód z aplikace.","otp-reset-description":"Která konfigurace OTP má být odstraněna?","password-display-name":"Heslo","password-help-text":"Přihlaste se pomocí hesla.","auth-username-form-display-name":"Jméno","auth-username-form-help-text":"Začněte přihlášení zadáním svého uživatelského jména","auth-username-password-form-display-name":"Jméno a heslo","auth-username-password-form-help-text":"Přihlaste se pomocí jména a hesla.","auth-recovery-authn-code-form-display-name":"Kód pro obnovu přístupu","auth-recovery-authn-code-form-help-text":"Zadejte kód pro obnovu přístupu z dříve vygenerovaného seznamu.","auth-recovery-code-info-message":"Zadejte specifikovaný kód pro obnovu.","auth-recovery-code-prompt":"Kód pro obnovu #{0}","auth-recovery-code-header":"Přihlaste se kódem pro obnovu přístupu","recovery-codes-error-invalid":"Nesprávný kód pro obnovu přístupu","recovery-code-config-header":"Kódy pro obnovu přístupu","recovery-code-config-warning-title":"Tyto kódy pro obnovu nebudou znovu zobrazeny, když tuto stránku opustíte","recovery-code-config-warning-message":"Kódy pro obnovu si vytiskněte, stáhněte nebo zkopírujte do správce hesel a držte je v bezpečí. Stornování této konfigurace odstraní kódy pro obnovu z vašeho účtu.","recovery-codes-print":"Tisknout","recovery-codes-download":"Stáhnout","recovery-codes-copy":"Kopírovat","recovery-codes-copied":"Zkopírováno","recovery-codes-confirmation-message":"Mám tyto kódy bezpečně uložené","recovery-codes-action-complete":"Dokončit konfiguraci","recovery-codes-action-cancel":"Stornovat konfiguraci","recovery-codes-download-file-header":"Uchovejte tyto kódy pro obnovu v bezpečí.","recovery-codes-download-file-description":"Kódy pro obnovu jsou hesla pro jednorázové použití, pomocí kterých se můžete přihlásit bez přístupu k autentikátoru.","recovery-codes-download-file-date":"Tyto kódy byly generovány","recovery-codes-label-default":"Kódy pro obnovu","webauthn-display-name":"Bezpečnostní klíč","webauthn-help-text":"Použijte k přihlášení bezpečnostní klíč.","webauthn-passwordless-display-name":"Bezpečnostní klíč","webauthn-passwordless-help-text":"Použijte bezpečnostní klíč k přihlášení bez hesla.","webauthn-login-title":"Přihlášení bezpečnostním klíčem","webauthn-registration-title":"Registrace bezpečnostního klíče","webauthn-available-authenticators":"Dostupné bezpečnostní klíče","webauthn-unsupported-browser-text":"WebAuthn není v tomto prohlížeči podporováno. Zkuste jiný prohlížeč nebo kontaktujte svého administrátora.","webauthn-doAuthenticate":"Přihlášení bezpečnostním klíčem","webauthn-createdAt-label":"Vytvořeno","webauthn-error-title":"Chyba bezpečnostního klíče","webauthn-error-registration":"Selhala registrace vašeho bezpečnostního klíče.
{0}","webauthn-error-api-get":"Selhalo přihlášení pomocí bezpečnostního klíče.
{0}","webauthn-error-different-user":"První přihlášený uživatel není totožný s uživatelem přihlášeným pomocí bezpečnostního klíče.","webauthn-error-auth-verification":"Nevalidní výsledek přihlášení pomocí bezpečnostního klíče.
{0}","webauthn-error-register-verification":"Nevalidní výsledek registrace bezpečnostního klíče.
{0}","webauthn-error-user-not-found":"Neznámý uživatel přihlášen pomocí bezpečnostního klíče.","identity-provider-redirector":"Propojit s jiným poskytovatelem identit","identity-provider-login-label":"Nebo se přihlaste pomocí","idp-email-verification-display-name":"Ověření e-mailu","idp-email-verification-help-text":"Proveďte spárování účtu ověřením e-mailu.","idp-username-password-form-display-name":"Jméno a příjmení","idp-username-password-form-help-text":"Proveďte spárování účtu přihlášením.",finalDeletionConfirmation:"Pokud svůj účet odstraníte, nemůže být obnoven. Pro zachování účtu klikněte na tlačítko Zrušit.",irreversibleAction:"Tuto akci nelze vzít zpět",deleteAccountConfirm:"Potvrzení odstranění účtu",deletingImplies:"Odstranění vašeho účtu znamená:",errasingData:"Smazání všech vašich dat",loggingOutImmediately:"Okamžité odhlášení",accountUnusable:"Další použití aplikace s tímto účtem nebude možné",userDeletedSuccessfully:"Uživatel úspěšně odstraněn","access-denied":"Přístup odepřen","access-denied-when-idp-auth":"Přístup odepřen při přihlášení pomocí {0}","frontchannel-logout.title":"Odhlášení","frontchannel-logout.message":"Odhlašujete se z následujících aplikací",logoutConfirmTitle:"Odhlašování",logoutConfirmHeader:"Chcete se odhlásit?",doLogout:"Odhlásit",readOnlyUsernameMessage:"Nemůžete aktualizovat své uživatelské jméno, protože je pouze pro čtení."}}}]); \ No newline at end of file diff --git a/1730.5b971e44.iframe.bundle.js b/1730.5b971e44.iframe.bundle.js deleted file mode 100644 index 3511bb3a..00000000 --- a/1730.5b971e44.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1730],{"./dist/account/i18n/baseMessages/it.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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à federate",accountLogHtmlTitle:"Log dell'account",changePasswordHtmlTitle:"Cambia password",deviceActivityHtmlTitle:"Attività 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 è 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. È difficile da indovinare, non assomiglia a una parola reale, ed è 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à o località",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à federate",authenticator:"Autenticatore","device-activity":"Attività 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à esistente.",emailExistsMessage:"Email già esistente.",readOnlyUserMessage:"Non puoi aggiornare il tuo account poiché è in modalità sola lettura.",readOnlyUsernameMessage:"Non puoi aggiornare il tuo nome utente poiché è in modalità sola lettura.",readOnlyPasswordMessage:"Non puoi aggiornare il tuo account poiché è in modalità sola lettura.",successTotpMessage:"Autenticatore mobile configurato.",successTotpRemovedMessage:"Autenticatore mobile eliminato.",successGrantRevokedMessage:"Concessione revocata con successo.",accountUpdatedMessage:"Il tuo account è stato aggiornato.",accountPasswordUpdatedMessage:"La tua password è stata aggiornata.",missingIdentityProviderMessage:"Identity provider non specificato.",invalidFederatedIdentityActionMessage:"Azione non valida o mancante.",identityProviderNotFoundMessage:"L'identity provider specificato non è stato trovato.",federatedIdentityLinkNotActiveMessage:"Questo identity non è più attivo.",federatedIdentityRemovingLastProviderMessage:"Non puoi rimuovere l'ultima identità federata poiché non hai più la password.",identityProviderRedirectErrorMessage:"Il reindirizzamento all'identity provider è fallito.",identityProviderRemovedMessage:"Identity provider eliminato correttamente.",identityProviderAlreadyLinkedMessage:"L'identità federata restituita da {0} è già collegata ad un altro utente.",staleCodeAccountMessage:"La pagina è scaduta. Prova di nuovo.",consentDenied:"Consenso negato.",accountDisabledMessage:"Account disabilitato, contatta l'amministratore.",accountTemporarilyDisabledMessage:"L'account è temporaneamente disabilitato, contatta l'amministratore o riprova più 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ù espressioni regolari.",invalidPasswordHistoryMessage:"Password non valida: non deve essere uguale a una delle ultime {0} password.",invalidPasswordBlacklistedMessage:"Password non valida: la password non è consentita.",invalidPasswordGenericMessage:"Password non valida: la nuova password non rispetta le indicazioni previste.",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à 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 è 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 è in condivisione",locale_it:"Italiano",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.",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.",authenticatorStatusMessage:"L'autenticazione a due fattori è attualmente",authenticatorFinishSetUpTitle:"La tua autenticazione a due fattori",authenticatorFinishSetUpMessage:"Ogni volta che effettui l'accesso al tuo account Keycloak, ti verrà 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 è stato collegato al tuo telefono.",authenticatorActionSetup:"Set up",authenticatorSMSTitle:"Codice SMS",authenticatorSMSMessage:"Keycloak invierà 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",authenticatorMobileSetupTitle:"Setup autenticatore mobile",smscodeIntroMessage:"Inserisci il tuo numero di telefono e ti verrà 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",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",authenticatorBackupCodesSetupTitle:"Setup backup codici",realmName:"Realm",doDownload:"Download",doPrint:"Stampa",generateNewBackupCodes:"Genera dei nuovi codici di backup",backtoAuthenticatorPage:"Torna alla pagina dell'autenticatore",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.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"}}}]); \ No newline at end of file diff --git a/1730.def3317e.iframe.bundle.js b/1730.def3317e.iframe.bundle.js new file mode 100644 index 00000000..f30b9b4f --- /dev/null +++ b/1730.def3317e.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1730],{"./dist/account/i18n/baseMessages/it.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Salva",doCancel:"Annulla",doLogOutAllSessions:"Effettua il logout da tutte le sessioni",doRemove:"Elimina",doAdd:"Aggiungi",doSignOut:"Esci",doLogIn:"Log In",doLink:"Link",personalInfoSidebarTitle:"Informazioni personali",accountSecuritySidebarTitle:"Sicurezza dell'account",signingInSidebarTitle:"Impostazioni di accesso",deviceActivitySidebarTitle:"Attività del dispositivo",linkedAccountsSidebarTitle:"Account collegati",editAccountHtmlTitle:"Modifica Account",personalInfoHtmlTitle:"Informazioni personali",federatedIdentitiesHtmlTitle:"Identità federate",accountLogHtmlTitle:"Log dell'account",changePasswordHtmlTitle:"Cambia password",deviceActivityHtmlTitle:"Attività 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 è 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. È difficile da indovinare, non assomiglia a una parola reale, ed è 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à o località",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à federate",authenticator:"Autenticatore","device-activity":"Attività 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à esistente.",emailExistsMessage:"Email già esistente.",readOnlyUserMessage:"Non puoi aggiornare il tuo account poiché è in modalità sola lettura.",readOnlyUsernameMessage:"Non puoi aggiornare il tuo nome utente poiché è in modalità sola lettura.",readOnlyPasswordMessage:"Non puoi aggiornare il tuo account poiché è in modalità sola lettura.",successTotpMessage:"Autenticatore mobile configurato.",successTotpRemovedMessage:"Autenticatore mobile eliminato.",successGrantRevokedMessage:"Concessione revocata con successo.",accountUpdatedMessage:"Il tuo account è stato aggiornato.",accountPasswordUpdatedMessage:"La tua password è stata aggiornata.",missingIdentityProviderMessage:"Identity provider non specificato.",invalidFederatedIdentityActionMessage:"Azione non valida o mancante.",identityProviderNotFoundMessage:"L'identity provider specificato non è stato trovato.",federatedIdentityLinkNotActiveMessage:"Questo identity non è più attivo.",federatedIdentityRemovingLastProviderMessage:"Non puoi rimuovere l'ultima identità federata poiché non hai più la password.",identityProviderRedirectErrorMessage:"Il reindirizzamento all'identity provider è fallito.",identityProviderRemovedMessage:"Identity provider eliminato correttamente.",identityProviderAlreadyLinkedMessage:"L'identità federata restituita da {0} è già collegata ad un altro utente.",staleCodeAccountMessage:"La pagina è scaduta. Prova di nuovo.",consentDenied:"Consenso negato.",accountDisabledMessage:"Account disabilitato, contatta l'amministratore.",accountTemporarilyDisabledMessage:"L'account è temporaneamente disabilitato, contatta l'amministratore o riprova più 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ù espressioni regolari.",invalidPasswordHistoryMessage:"Password non valida: non deve essere uguale a una delle ultime {0} password.",invalidPasswordBlacklistedMessage:"Password non valida: la password non è consentita.",invalidPasswordGenericMessage:"Password non valida: la nuova password non rispetta le indicazioni previste.",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à 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 è 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 è in condivisione",locale_it:"Italiano",locale_fa:"فارسی",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.",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.",authenticatorStatusMessage:"L'autenticazione a due fattori è attualmente",authenticatorFinishSetUpTitle:"La tua autenticazione a due fattori",authenticatorFinishSetUpMessage:"Ogni volta che effettui l'accesso al tuo account Keycloak, ti verrà 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 è stato collegato al tuo telefono.",authenticatorActionSetup:"Set up",authenticatorSMSTitle:"Codice SMS",authenticatorSMSMessage:"Keycloak invierà 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",authenticatorMobileSetupTitle:"Setup autenticatore mobile",smscodeIntroMessage:"Inserisci il tuo numero di telefono e ti verrà 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",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",authenticatorBackupCodesSetupTitle:"Setup backup codici",realmName:"Realm",doDownload:"Download",doPrint:"Stampa",generateNewBackupCodes:"Genera dei nuovi codici di backup",backtoAuthenticatorPage:"Torna alla pagina dell'autenticatore",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.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"}}}]); \ No newline at end of file diff --git a/1793.92b4f010.iframe.bundle.js b/1793.11da2d4d.iframe.bundle.js similarity index 72% rename from 1793.92b4f010.iframe.bundle.js rename to 1793.11da2d4d.iframe.bundle.js index dc0cb1ab..d112fa9c 100644 --- a/1793.92b4f010.iframe.bundle.js +++ b/1793.11da2d4d.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1793],{"./dist/login/i18n/baseMessages/da.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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à",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_it:"Italiano",locale_ja:"日本語",locale_nl:"Nederlands",locale_no:"Norsk",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_lt:"Lietuvių","locale_zh-CN":"中文简体",locale_sk:"Slovenčina",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:"Čeština",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",readOnlyUsernameMessage:"Du kan ikke opdatere dit brugernavn da det er read-only."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[1793],{"./dist/login/i18n/baseMessages/da.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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)",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:"Čeština",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",readOnlyUsernameMessage:"Du kan ikke opdatere dit brugernavn da det er read-only."}}}]); \ No newline at end of file diff --git a/2372.223a728e.iframe.bundle.js b/2372.8735b68b.iframe.bundle.js similarity index 99% rename from 2372.223a728e.iframe.bundle.js rename to 2372.8735b68b.iframe.bundle.js index cf2f14eb..b460d920 100644 --- a/2372.223a728e.iframe.bundle.js +++ b/2372.8735b68b.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2372],{"./dist/login/i18n/baseMessages/ja.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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:"登録",loginAccountTitle:"アカウントにログイン",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.scope.user_info":"ユーザー情報","openshift.scope.user_check-access":"ユーザーアクセス情報","openshift.scope.user_full":"フルアクセス","openshift.scope.list-projects":"プロジェクトの一覧表示","saml.post-form.title":"認証リダイレクト","saml.post-form.message":"リダイレクトしています。お待ちください。","saml.post-form.js-disabled":"JavaScriptが無効になっています。有効にすることを強くお勧めします。継続するには、下のボタンをクリックしてください。","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-display-name":"セキュリティーキー","webauthn-help-text":"セキュリティーキーを使用してログインしてください。","webauthn-passwordless-display-name":"セキュリティーキー","webauthn-passwordless-help-text":"パスワードレス・ログインにセキュリティーキーを使用します。","webauthn-login-title":"セキュリティーキー・ログイン","webauthn-registration-title":"セキュリティーキーの登録","webauthn-available-authenticators":"利用可能なオーセンティケーター","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":"別のアイデンティティー・プロバイダーと接続する","frontchannel-logout.title":"ログアウト","frontchannel-logout.message":"以下のアプリケーションからログアウトしました。",logoutConfirmTitle:"ログアウト",logoutConfirmHeader:"ログアウトしますか?",doLogout:"ログアウト",readOnlyUsernameMessage:"読み取り専用のため、ユーザー名を更新することはできません。"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2372],{"./dist/login/i18n/baseMessages/ja.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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:"登録",loginAccountTitle:"アカウントにログイン",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.scope.user_info":"ユーザー情報","openshift.scope.user_check-access":"ユーザーアクセス情報","openshift.scope.user_full":"フルアクセス","openshift.scope.list-projects":"プロジェクトの一覧表示","saml.post-form.title":"認証リダイレクト","saml.post-form.message":"リダイレクトしています。お待ちください。","saml.post-form.js-disabled":"JavaScriptが無効になっています。有効にすることを強くお勧めします。継続するには、下のボタンをクリックしてください。","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-display-name":"セキュリティーキー","webauthn-help-text":"セキュリティーキーを使用してログインしてください。","webauthn-passwordless-display-name":"セキュリティーキー","webauthn-passwordless-help-text":"パスワードレス・ログインにセキュリティーキーを使用します。","webauthn-login-title":"セキュリティーキー・ログイン","webauthn-registration-title":"セキュリティーキーの登録","webauthn-available-authenticators":"利用可能なオーセンティケーター","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":"別のアイデンティティー・プロバイダーと接続する","frontchannel-logout.title":"ログアウト","frontchannel-logout.message":"以下のアプリケーションからログアウトしました。",logoutConfirmTitle:"ログアウト",logoutConfirmHeader:"ログアウトしますか?",doLogout:"ログアウト",readOnlyUsernameMessage:"読み取り専用のため、ユーザー名を更新することはできません。"}}}]); \ No newline at end of file diff --git a/2410.341cd927.iframe.bundle.js b/2410.341cd927.iframe.bundle.js new file mode 100644 index 00000000..86186d10 --- /dev/null +++ b/2410.341cd927.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2410],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUsername.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUsername});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i4&&getClassName("kcFormSocialAccountDoubleListClass"))},{children:social.providers.map((function(p){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("li",Object.assign({className:getClassName("kcFormSocialAccountListLinkClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("a",Object.assign({href:p.loginUrl,id:"zocial-"+p.alias,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_15__.W)("zocial",p.providerId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("span",{children:p.displayName})}))}),p.providerId)}))}))}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/2410.3f3e8a88.iframe.bundle.js b/2410.3f3e8a88.iframe.bundle.js deleted file mode 100644 index 6f3b18c3..00000000 --- a/2410.3f3e8a88.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2410],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUsername.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUsername});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i4&&getClassName("kcFormSocialAccountDoubleListClass"))},{children:social.providers.map((function(p){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("li",Object.assign({className:getClassName("kcFormSocialAccountListLinkClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("a",Object.assign({href:p.loginUrl,id:"zocial-"+p.alias,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_15__.W)("zocial",p.providerId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("span",{children:p.displayName})}))}),p.providerId)}))}))}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/2559.1feb0b98.iframe.bundle.js b/2559.16601e12.iframe.bundle.js similarity index 98% rename from 2559.1feb0b98.iframe.bundle.js rename to 2559.16601e12.iframe.bundle.js index d2a6dba4..71a751bd 100644 --- a/2559.1feb0b98.iframe.bundle.js +++ b/2559.16601e12.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2559],{"./dist/account/i18n/baseMessages/sv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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 +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2559],{"./dist/account/i18n/baseMessages/sv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/2683.5858f348.iframe.bundle.js b/2683.5858f348.iframe.bundle.js deleted file mode 100644 index 0530105f..00000000 --- a/2683.5858f348.iframe.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 2683.5858f348.iframe.bundle.js.LICENSE.txt */ -(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2683],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/WebauthnAuthenticate.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>WebauthnAuthenticate});__webpack_require__("./node_modules/core-js/modules/es.number.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array-buffer.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.array-buffer.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.uint8-array.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.copy-within.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.fill.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.filter.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.find.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.find-index.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.join.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.last-index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reduce.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reduce-right.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.set.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.some.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.sort.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.subarray.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.to-locale-string.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.string.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.async-iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.math.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.json.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.object.create.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.object.set-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var jsx_runtime=__webpack_require__("./node_modules/react/jsx-runtime.js"),react=__webpack_require__("./node_modules/react/index.js"),clsx=__webpack_require__("./dist/tools/clsx.js"),lib=__webpack_require__("./node_modules/rfc4648/lib/index.js");lib.YU,lib.pJ,lib.eV,lib.US;const base64url=lib.tH;lib.Y2;var useConstCallback=__webpack_require__("./dist/tools/useConstCallback.js"),useGetClassName=__webpack_require__("./dist/login/lib/useGetClassName.js"),assert=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),is=__webpack_require__("./node_modules/tsafe/esm/is.mjs"),typeGuard=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName,nextLoc},"next"===this.method&&(this.arg=void 0),ContinueSentinel}},exports}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise((function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(void 0)}))}}function WebauthnAuthenticate(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,useGetClassName.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr,authenticators=kcContext.authenticators,challenge=kcContext.challenge,shouldDisplayAuthenticators=kcContext.shouldDisplayAuthenticators,userVerification=kcContext.userVerification,rpId=kcContext.rpId,createTimeout=Number(kcContext.createTimeout),isUserIdentified="true"==kcContext.isUserIdentified,formElementRef=(0,react.useRef)(null),webAuthnAuthenticate=(0,useConstCallback.O)(_asyncToGenerator(_regeneratorRuntime().mark((function _callee2(){var submitForm,allowCredentials,publicKey,result,response,_clientDataJSON,_authenticatorData,_signature;return _regeneratorRuntime().wrap((function _callee2$(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:if(isUserIdentified){_context2.next=2;break}return _context2.abrupt("return");case 2:if(submitForm=function(){var _ref2=_asyncToGenerator(_regeneratorRuntime().mark((function _callee(){var formElement;return _regeneratorRuntime().wrap((function _callee$(_context){for(;;)switch(_context.prev=_context.next){case 0:if(null!==(formElement=formElementRef.current)){_context.next=5;break}return _context.next=4,new Promise((function(resolve){return setTimeout(resolve,100)}));case 4:return _context.abrupt("return",submitForm());case 5:formElement.submit();case 6:case"end":return _context.stop()}}),_callee)})));return function submitForm(){return _ref2.apply(this,arguments)}}(),allowCredentials=authenticators.authenticators.map((function(authenticator){return{id:base64url.parse(authenticator.credentialId,{loose:!0}),type:"public-key"}})),window.PublicKeyCredential){_context2.next=8;break}return setError(msgStr("webauthn-unsupported-browser-text")),submitForm(),_context2.abrupt("return");case 8:return publicKey={rpId,challenge:base64url.parse(challenge,{loose:!0})},0!==createTimeout&&(publicKey.timeout=1e3*createTimeout),allowCredentials.length&&(publicKey.allowCredentials=allowCredentials),"not specified"!==userVerification&&(publicKey.userVerification=userVerification),_context2.prev=12,_context2.next=15,navigator.credentials.get({publicKey});case 15:if((result=_context2.sent)&&"public-key"==result.type){_context2.next=18;break}return _context2.abrupt("return");case 18:if((0,assert.h)((0,is.is)(result)),"authenticatorData"in result.response){_context2.next=21;break}return _context2.abrupt("return");case 21:response=result.response,_clientDataJSON=response.clientDataJSON,(0,assert.h)((0,typeGuard.z)(response,"signature"in response&&response.authenticatorData instanceof ArrayBuffer),"response not an AuthenticatorAssertionResponse"),_authenticatorData=response.authenticatorData,_signature=response.signature,setClientDataJSON(base64url.stringify(new Uint8Array(_clientDataJSON),{pad:!1})),setAuthenticatorData(base64url.stringify(new Uint8Array(_authenticatorData),{pad:!1})),setSignature(base64url.stringify(new Uint8Array(_signature),{pad:!1})),setCredentialId(result.id),setUserHandle(base64url.stringify(new Uint8Array(response.userHandle),{pad:!1})),_context2.next=36;break;case 33:_context2.prev=33,_context2.t0=_context2.catch(12),setError(String(_context2.t0));case 36:submitForm();case 37:case"end":return _context2.stop()}}),_callee2,null,[[12,33]])})))),_useState2=_slicedToArray((0,react.useState)(""),2),clientDataJSON=_useState2[0],setClientDataJSON=_useState2[1],_useState4=_slicedToArray((0,react.useState)(""),2),authenticatorData=_useState4[0],setAuthenticatorData=_useState4[1],_useState6=_slicedToArray((0,react.useState)(""),2),signature=_useState6[0],setSignature=_useState6[1],_useState8=_slicedToArray((0,react.useState)(""),2),credentialId=_useState8[0],setCredentialId=_useState8[1],_useState10=_slicedToArray((0,react.useState)(""),2),userHandle=_useState10[0],setUserHandle=_useState10[1],_useState12=_slicedToArray((0,react.useState)(""),2),error=_useState12[0],setError=_useState12[1];return(0,jsx_runtime.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("webauthn-login-title")},{children:(0,jsx_runtime.jsxs)("div",Object.assign({id:"kc-form-webauthn",className:getClassName("kcFormClass")},{children:[(0,jsx_runtime.jsxs)("form",Object.assign({id:"webauth",action:url.loginAction,ref:formElementRef,method:"post"},{children:[(0,jsx_runtime.jsx)("input",{type:"hidden",id:"clientDataJSON",name:"clientDataJSON",value:clientDataJSON}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"authenticatorData",name:"authenticatorData",value:authenticatorData}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"signature",name:"signature",value:signature}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"credentialId",name:"credentialId",value:credentialId}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"userHandle",name:"userHandle",value:userHandle}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"error",name:"error",value:error})]})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[authenticators&&(0,jsx_runtime.jsx)("form",Object.assign({id:"authn_select",className:getClassName("kcFormClass")},{children:authenticators.authenticators.map((function(authenticator){return(0,jsx_runtime.jsx)("input",{type:"hidden",name:"authn_use_chk",value:authenticator.credentialId},authenticator.credentialId)}))})),authenticators&&shouldDisplayAuthenticators&&(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[authenticators.authenticators.length>1&&(0,jsx_runtime.jsx)("p",Object.assign({className:getClassName("kcSelectAuthListItemTitle")},{children:msg("webauthn-available-authenticators")})),(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcFormClass")},{children:authenticators.authenticators.map((function(authenticator){return(0,jsx_runtime.jsxs)("div",Object.assign({id:"kc-webauthn-authenticator",className:getClassName("kcSelectAuthListItemClass")},{children:[(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemIconClass")},{children:(0,jsx_runtime.jsx)("i",{className:(0,clsx.W)((className=getClassName(authenticator.transports.iconClass),className.includes(" ")?className:[className,getClassName("kcWebAuthnDefaultIcon")]),getClassName("kcSelectAuthListItemIconPropertyClass"))})})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListItemBodyClass")},{children:[(0,jsx_runtime.jsx)("div",Object.assign({id:"kc-webauthn-authenticator-label",className:getClassName("kcSelectAuthListItemHeadingClass")},{children:authenticator.label})),authenticator.transports&&authenticator.transports.displayNameProperties.length&&(0,jsx_runtime.jsx)("div",Object.assign({id:"kc-webauthn-authenticator-transport",className:getClassName("kcSelectAuthListItemDescriptionClass")},{children:authenticator.transports.displayNameProperties.map((function(transport,index){return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("span",{children:msg(transport)}),index{"use strict";__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{"use strict";var $=__webpack_require__("./node_modules/core-js/internals/export.js"),uncurryThis=__webpack_require__("./node_modules/core-js/internals/function-uncurry-this-clause.js"),fails=__webpack_require__("./node_modules/core-js/internals/fails.js"),ArrayBufferModule=__webpack_require__("./node_modules/core-js/internals/array-buffer.js"),anObject=__webpack_require__("./node_modules/core-js/internals/an-object.js"),toAbsoluteIndex=__webpack_require__("./node_modules/core-js/internals/to-absolute-index.js"),toLength=__webpack_require__("./node_modules/core-js/internals/to-length.js"),speciesConstructor=__webpack_require__("./node_modules/core-js/internals/species-constructor.js"),ArrayBuffer=ArrayBufferModule.ArrayBuffer,DataView=ArrayBufferModule.DataView,DataViewPrototype=DataView.prototype,nativeArrayBufferSlice=uncurryThis(ArrayBuffer.prototype.slice),getUint8=uncurryThis(DataViewPrototype.getUint8),setUint8=uncurryThis(DataViewPrototype.setUint8);$({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:fails((function(){return!new ArrayBuffer(2).slice(1,void 0).byteLength}))},{slice:function slice(start,end){if(nativeArrayBufferSlice&&void 0===end)return nativeArrayBufferSlice(anObject(this),start);for(var length=anObject(this).byteLength,first=toAbsoluteIndex(start,length),fin=toAbsoluteIndex(void 0===end?length:end,length),result=new(speciesConstructor(this,ArrayBuffer))(toLength(fin-first)),viewSource=new DataView(this),viewTarget=new DataView(result),index=0;first{var $=__webpack_require__("./node_modules/core-js/internals/export.js"),global=__webpack_require__("./node_modules/core-js/internals/global.js"),setInterval=__webpack_require__("./node_modules/core-js/internals/schedulers-fix.js")(global.setInterval,!0);$({global:!0,bind:!0,forced:global.setInterval!==setInterval},{setInterval})},"./node_modules/core-js/modules/web.set-timeout.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var $=__webpack_require__("./node_modules/core-js/internals/export.js"),global=__webpack_require__("./node_modules/core-js/internals/global.js"),setTimeout=__webpack_require__("./node_modules/core-js/internals/schedulers-fix.js")(global.setTimeout,!0);$({global:!0,bind:!0,forced:global.setTimeout!==setTimeout},{setTimeout})},"./node_modules/core-js/modules/web.timers.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{__webpack_require__("./node_modules/core-js/modules/web.set-interval.js"),__webpack_require__("./node_modules/core-js/modules/web.set-timeout.js")},"./node_modules/rfc4648/lib/index.js":(__unused_webpack_module,exports)=>{"use strict";function parse(string,encoding,opts){var _opts$out;if(void 0===opts&&(opts={}),!encoding.codes){encoding.codes={};for(var i=0;i=8&&(bits-=8,out[written++]=255&buffer>>bits)}if(bits>=encoding.bits||255&buffer<<8-bits)throw new SyntaxError("Unexpected end of data");return out}function stringify(data,encoding,opts){void 0===opts&&(opts={});for(var _opts$pad=opts.pad,pad=void 0===_opts$pad||_opts$pad,mask=(1<encoding.bits;)bits-=encoding.bits,out+=encoding.chars[mask&buffer>>bits];if(bits&&(out+=encoding.chars[mask&buffer<{"use strict";function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/2683.840c7998.iframe.bundle.js b/2683.840c7998.iframe.bundle.js new file mode 100644 index 00000000..b917d07e --- /dev/null +++ b/2683.840c7998.iframe.bundle.js @@ -0,0 +1,2 @@ +/*! For license information please see 2683.840c7998.iframe.bundle.js.LICENSE.txt */ +(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2683],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/WebauthnAuthenticate.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>WebauthnAuthenticate});__webpack_require__("./node_modules/core-js/modules/es.number.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/web.timers.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array-buffer.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.array-buffer.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.uint8-array.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.copy-within.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.fill.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.filter.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.find.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.find-index.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.join.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.last-index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reduce.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reduce-right.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.set.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.some.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.sort.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.subarray.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.to-locale-string.js"),__webpack_require__("./node_modules/core-js/modules/es.typed-array.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.string.includes.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.async-iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.math.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.json.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.object.create.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.object.set-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var jsx_runtime=__webpack_require__("./node_modules/react/jsx-runtime.js"),react=__webpack_require__("./node_modules/react/index.js"),clsx=__webpack_require__("./dist/tools/clsx.js"),lib=__webpack_require__("./node_modules/rfc4648/lib/index.js");lib.YU,lib.pJ,lib.eV,lib.US;const base64url=lib.tH;lib.Y2;var useConstCallback=__webpack_require__("./dist/tools/useConstCallback.js"),useGetClassName=__webpack_require__("./dist/login/lib/useGetClassName.js"),assert=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),is=__webpack_require__("./node_modules/tsafe/esm/is.mjs"),typeGuard=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName,nextLoc},"next"===this.method&&(this.arg=void 0),ContinueSentinel}},exports}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise((function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(void 0)}))}}function WebauthnAuthenticate(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,useGetClassName.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr,authenticators=kcContext.authenticators,challenge=kcContext.challenge,shouldDisplayAuthenticators=kcContext.shouldDisplayAuthenticators,userVerification=kcContext.userVerification,rpId=kcContext.rpId,createTimeout=Number(kcContext.createTimeout),isUserIdentified="true"==kcContext.isUserIdentified,formElementRef=(0,react.useRef)(null),webAuthnAuthenticate=(0,useConstCallback.O)(_asyncToGenerator(_regeneratorRuntime().mark((function _callee2(){var submitForm,allowCredentials,publicKey,result,response,_clientDataJSON,_authenticatorData,_signature;return _regeneratorRuntime().wrap((function _callee2$(_context2){for(;;)switch(_context2.prev=_context2.next){case 0:if(isUserIdentified){_context2.next=2;break}return _context2.abrupt("return");case 2:if(submitForm=function(){var _ref2=_asyncToGenerator(_regeneratorRuntime().mark((function _callee(){var formElement;return _regeneratorRuntime().wrap((function _callee$(_context){for(;;)switch(_context.prev=_context.next){case 0:if(null!==(formElement=formElementRef.current)){_context.next=5;break}return _context.next=4,new Promise((function(resolve){return setTimeout(resolve,100)}));case 4:return _context.abrupt("return",submitForm());case 5:formElement.submit();case 6:case"end":return _context.stop()}}),_callee)})));return function submitForm(){return _ref2.apply(this,arguments)}}(),allowCredentials=authenticators.authenticators.map((function(authenticator){return{id:base64url.parse(authenticator.credentialId,{loose:!0}),type:"public-key"}})),window.PublicKeyCredential){_context2.next=8;break}return setError(msgStr("webauthn-unsupported-browser-text")),submitForm(),_context2.abrupt("return");case 8:return publicKey={rpId,challenge:base64url.parse(challenge,{loose:!0})},0!==createTimeout&&(publicKey.timeout=1e3*createTimeout),allowCredentials.length&&(publicKey.allowCredentials=allowCredentials),"not specified"!==userVerification&&(publicKey.userVerification=userVerification),_context2.prev=12,_context2.next=15,navigator.credentials.get({publicKey});case 15:if((result=_context2.sent)&&"public-key"==result.type){_context2.next=18;break}return _context2.abrupt("return");case 18:if((0,assert.h)((0,is.is)(result)),"authenticatorData"in result.response){_context2.next=21;break}return _context2.abrupt("return");case 21:response=result.response,_clientDataJSON=response.clientDataJSON,(0,assert.h)((0,typeGuard.z)(response,"signature"in response&&response.authenticatorData instanceof ArrayBuffer),"response not an AuthenticatorAssertionResponse"),_authenticatorData=response.authenticatorData,_signature=response.signature,setClientDataJSON(base64url.stringify(new Uint8Array(_clientDataJSON),{pad:!1})),setAuthenticatorData(base64url.stringify(new Uint8Array(_authenticatorData),{pad:!1})),setSignature(base64url.stringify(new Uint8Array(_signature),{pad:!1})),setCredentialId(result.id),setUserHandle(base64url.stringify(new Uint8Array(response.userHandle),{pad:!1})),_context2.next=36;break;case 33:_context2.prev=33,_context2.t0=_context2.catch(12),setError(String(_context2.t0));case 36:submitForm();case 37:case"end":return _context2.stop()}}),_callee2,null,[[12,33]])})))),_useState2=_slicedToArray((0,react.useState)(""),2),clientDataJSON=_useState2[0],setClientDataJSON=_useState2[1],_useState4=_slicedToArray((0,react.useState)(""),2),authenticatorData=_useState4[0],setAuthenticatorData=_useState4[1],_useState6=_slicedToArray((0,react.useState)(""),2),signature=_useState6[0],setSignature=_useState6[1],_useState8=_slicedToArray((0,react.useState)(""),2),credentialId=_useState8[0],setCredentialId=_useState8[1],_useState10=_slicedToArray((0,react.useState)(""),2),userHandle=_useState10[0],setUserHandle=_useState10[1],_useState12=_slicedToArray((0,react.useState)(""),2),error=_useState12[0],setError=_useState12[1];return(0,jsx_runtime.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("webauthn-login-title")},{children:(0,jsx_runtime.jsxs)("div",Object.assign({id:"kc-form-webauthn",className:getClassName("kcFormClass")},{children:[(0,jsx_runtime.jsxs)("form",Object.assign({id:"webauth",action:url.loginAction,ref:formElementRef,method:"post"},{children:[(0,jsx_runtime.jsx)("input",{type:"hidden",id:"clientDataJSON",name:"clientDataJSON",value:clientDataJSON}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"authenticatorData",name:"authenticatorData",value:authenticatorData}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"signature",name:"signature",value:signature}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"credentialId",name:"credentialId",value:credentialId}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"userHandle",name:"userHandle",value:userHandle}),(0,jsx_runtime.jsx)("input",{type:"hidden",id:"error",name:"error",value:error})]})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[authenticators&&(0,jsx_runtime.jsx)("form",Object.assign({id:"authn_select",className:getClassName("kcFormClass")},{children:authenticators.authenticators.map((function(authenticator){return(0,jsx_runtime.jsx)("input",{type:"hidden",name:"authn_use_chk",value:authenticator.credentialId},authenticator.credentialId)}))})),authenticators&&shouldDisplayAuthenticators&&(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[authenticators.authenticators.length>1&&(0,jsx_runtime.jsx)("p",Object.assign({className:getClassName("kcSelectAuthListItemTitle")},{children:msg("webauthn-available-authenticators")})),(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcFormClass")},{children:authenticators.authenticators.map((function(authenticator){return(0,jsx_runtime.jsxs)("div",Object.assign({id:"kc-webauthn-authenticator",className:getClassName("kcSelectAuthListItemClass")},{children:[(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemIconClass")},{children:(0,jsx_runtime.jsx)("i",{className:(0,clsx.W)((className=getClassName(authenticator.transports.iconClass),className.includes(" ")?className:[className,getClassName("kcWebAuthnDefaultIcon")]),getClassName("kcSelectAuthListItemIconPropertyClass"))})})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListItemBodyClass")},{children:[(0,jsx_runtime.jsx)("div",Object.assign({id:"kc-webauthn-authenticator-label",className:getClassName("kcSelectAuthListItemHeadingClass")},{children:authenticator.label})),authenticator.transports&&authenticator.transports.displayNameProperties.length&&(0,jsx_runtime.jsx)("div",Object.assign({id:"kc-webauthn-authenticator-transport",className:getClassName("kcSelectAuthListItemDescriptionClass")},{children:authenticator.transports.displayNameProperties.map((function(transport,index){return(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("span",{children:msg(transport)}),index{"use strict";__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{"use strict";var $=__webpack_require__("./node_modules/core-js/internals/export.js"),uncurryThis=__webpack_require__("./node_modules/core-js/internals/function-uncurry-this-clause.js"),fails=__webpack_require__("./node_modules/core-js/internals/fails.js"),ArrayBufferModule=__webpack_require__("./node_modules/core-js/internals/array-buffer.js"),anObject=__webpack_require__("./node_modules/core-js/internals/an-object.js"),toAbsoluteIndex=__webpack_require__("./node_modules/core-js/internals/to-absolute-index.js"),toLength=__webpack_require__("./node_modules/core-js/internals/to-length.js"),speciesConstructor=__webpack_require__("./node_modules/core-js/internals/species-constructor.js"),ArrayBuffer=ArrayBufferModule.ArrayBuffer,DataView=ArrayBufferModule.DataView,DataViewPrototype=DataView.prototype,nativeArrayBufferSlice=uncurryThis(ArrayBuffer.prototype.slice),getUint8=uncurryThis(DataViewPrototype.getUint8),setUint8=uncurryThis(DataViewPrototype.setUint8);$({target:"ArrayBuffer",proto:!0,unsafe:!0,forced:fails((function(){return!new ArrayBuffer(2).slice(1,void 0).byteLength}))},{slice:function slice(start,end){if(nativeArrayBufferSlice&&void 0===end)return nativeArrayBufferSlice(anObject(this),start);for(var length=anObject(this).byteLength,first=toAbsoluteIndex(start,length),fin=toAbsoluteIndex(void 0===end?length:end,length),result=new(speciesConstructor(this,ArrayBuffer))(toLength(fin-first)),viewSource=new DataView(this),viewTarget=new DataView(result),index=0;first{var $=__webpack_require__("./node_modules/core-js/internals/export.js"),global=__webpack_require__("./node_modules/core-js/internals/global.js"),setInterval=__webpack_require__("./node_modules/core-js/internals/schedulers-fix.js")(global.setInterval,!0);$({global:!0,bind:!0,forced:global.setInterval!==setInterval},{setInterval})},"./node_modules/core-js/modules/web.set-timeout.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{var $=__webpack_require__("./node_modules/core-js/internals/export.js"),global=__webpack_require__("./node_modules/core-js/internals/global.js"),setTimeout=__webpack_require__("./node_modules/core-js/internals/schedulers-fix.js")(global.setTimeout,!0);$({global:!0,bind:!0,forced:global.setTimeout!==setTimeout},{setTimeout})},"./node_modules/core-js/modules/web.timers.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{__webpack_require__("./node_modules/core-js/modules/web.set-interval.js"),__webpack_require__("./node_modules/core-js/modules/web.set-timeout.js")},"./node_modules/rfc4648/lib/index.js":(__unused_webpack_module,exports)=>{"use strict";function parse(string,encoding,opts){var _opts$out;if(void 0===opts&&(opts={}),!encoding.codes){encoding.codes={};for(var i=0;i=8&&(bits-=8,out[written++]=255&buffer>>bits)}if(bits>=encoding.bits||255&buffer<<8-bits)throw new SyntaxError("Unexpected end of data");return out}function stringify(data,encoding,opts){void 0===opts&&(opts={});for(var _opts$pad=opts.pad,pad=void 0===_opts$pad||_opts$pad,mask=(1<encoding.bits;)bits-=encoding.bits,out+=encoding.chars[mask&buffer>>bits];if(bits&&(out+=encoding.chars[mask&buffer<{"use strict";function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/2683.5858f348.iframe.bundle.js.LICENSE.txt b/2683.840c7998.iframe.bundle.js.LICENSE.txt similarity index 100% rename from 2683.5858f348.iframe.bundle.js.LICENSE.txt rename to 2683.840c7998.iframe.bundle.js.LICENSE.txt diff --git a/2807.10c2ef7b.iframe.bundle.js b/2807.10c2ef7b.iframe.bundle.js deleted file mode 100644 index 85ea3b8b..00000000 --- a/2807.10c2ef7b.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2807],{"./dist/login/i18n/baseMessages/pl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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",readOnlyUsernameMessage:"Zmiana nazwy użytkownika nie jest możliwa, ponieważ edycja konta jest zablokowana."}}}]); \ No newline at end of file diff --git a/2807.677231eb.iframe.bundle.js b/2807.677231eb.iframe.bundle.js new file mode 100644 index 00000000..bb26cee9 --- /dev/null +++ b/2807.677231eb.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2807],{"./dist/login/i18n/baseMessages/pl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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",loginAccountTitle:"Zaloguj się na swoje konto",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",readOnlyUsernameMessage:"Zmiana nazwy użytkownika nie jest możliwa, ponieważ edycja konta jest zablokowana."}}}]); \ No newline at end of file diff --git a/2866.023b69e6.iframe.bundle.js b/2866.9691e88e.iframe.bundle.js similarity index 99% rename from 2866.023b69e6.iframe.bundle.js rename to 2866.9691e88e.iframe.bundle.js index 4528ebda..9612b5e3 100644 --- a/2866.023b69e6.iframe.bundle.js +++ b/2866.9691e88e.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2866],{"./dist/account/i18n/baseMessages/tr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Kaydet",doCancel:"İptal",doLogOutAllSessions:"Tüm Oturumları Kapat",doRemove:"Sil",doAdd:"Ekle",doSignOut:"Çıkış",doLogIn:"Oturum aç",doLink:"Bağlantı",editAccountHtmlTitle:"Hesabım",personalInfoHtmlTitle:"Kişisel bilgi",federatedIdentitiesHtmlTitle:"Değiştirilen Kimlikler",accountLogHtmlTitle:"Kullanıcı Logları",changePasswordHtmlTitle:"Şifre Değiştirme",deviceActivityHtmlTitle:"Cihaz Etkinliği",sessionsHtmlTitle:"Oturum",accountManagementTitle:"Keycloak Kullanıcı Hesabı Yönetimi",authenticatorTitle:"Kimlik Doğrulama",applicationsHtmlTitle:"Uygulama",linkedAccountsHtmlTitle:"Bağlantılı Hesaplar",accountManagementWelcomeMessage:"Keycloak Hesap Yönetimine Hoş Geldiniz",personalInfoIntroMessage:"Temel bilgilerinizi yönetin",accountSecurityTitle:"Hesap Güvenliği",accountSecurityIntroMessage:"Şifrenizi ve hesap erişiminizi kontrol edin",applicationsIntroMessage:"Hesabınıza erişmek için uygulama izninizi takip edin ve yönetin",resourceIntroMessage:"Kaynaklarınızı ekip üyeleri arasında paylaşın",passwordLastUpdateMessage:"Şifreniz güncellendi",updatePasswordTitle:"Şifre güncelle",updatePasswordMessageTitle:"Güçlü bir şifre seçtiğinizden emin olun",updatePasswordMessage:"Güçlü bir şifre, sayılar, harfler ve sembollerin karışımından oluşmalıdır. Tahmin etmesi zor ve gerçek bir kelimeye benzemeyen şifre sadece bu hesap için kullanılır.",personalSubTitle:"Kişisel Bilgileriniz",personalSubMessage:"Bu temel bilgileri yönetin: adınız, soyadınız ve e-posta adresiniz",authenticatorCode:"Kimlik Doğrulama Kodu",email:"E-Mail",firstName:"Ad",givenName:"Ad",fullName:"Ad Soyad",lastName:"Soyad",familyName:"Soyad",password:"Şifre",currentPassword:"Şimdiki Şifre",passwordConfirm:"Şifre Doğrulama",passwordNew:"Yeni Şifre",username:"Kullanıcı Adı",address:"Adres",street:"Cadde",region:"Bölge",postal_code:"Posta Kodu",locality:"Şehir",country:"Ülke",emailVerified:"E-Mail Doğrulandı",gssDelegationCredential:"GSS Yetki Bilgisi",profileScopeConsentText:"Kullanıcı profili",emailScopeConsentText:"Email adresi",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefon numarası",offlineAccessScopeConsentText:"Çevrimdışı Erişim",samlRoleListScopeConsentText:"Rollerim",rolesScopeConsentText:"Kullanıcı rolleri",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Realm Oluştur","role_view-realm":"Realm görüntüle","role_view-users":"Kullanıcıları görüntüle","role_view-applications":"Uygulamaları görüntüle","role_view-clients":"İstemci görüntüle","role_view-events":"Olay görüntüle","role_view-identity-providers":"Kimlik Sağlayıcılar","role_manage-realm":"Realm yönet","role_manage-users":"Kullanıcıları yönet","role_manage-applications":"Uygulamaları yönet","role_manage-identity-providers":"Kimlik Sağlayıcıları Yönet","role_manage-clients":"İstemci yönet","role_manage-events":"Olay yönet","role_view-profile":"Profilleri görüntüle","role_manage-account":"Profilleri Yönet","role_manage-account-links":"Profil bağlantılarını yönet","role_read-token":"Token oku","role_offline-access":"Çevirimdışı Yetki",role_uma_authorization:"İzinleri Al",client_account:"Müşteri Hesabı","client_security-admin-console":"Güvenlik Yönetici Konsolu","client_admin-cli":"Admin CLI","client_realm-management":"Realm-Management",client_broker:"Broker",requiredFields:"Zorunlu Alanlar",allFieldsRequired:"Tüm Alanlar Zorunlu",backToApplication:"« Uygulamaya Dön",backTo:"Geri Dön {0}",date:"Gün",event:"Olay",ip:"IP",client:"İstemci",clients:"İstemciler",details:"Detaylar",started:"Başlangıç Tarihi",lastAccess:"Son Erişim Tarihi",expires:"Son Kullanma Tarihi",applications:"Uygulama",account:"Hesap",federatedIdentity:"Federal Kimlik",authenticator:"Kimlik Doğrulama","device-activity":"Cihaz Etkinliği",sessions:"Oturum",log:"Log",application:"Uygulama",availablePermissions:"Kullanılabilir İzinler",availableRoles:"Kullanılabilir Roller",grantedPermissions:"Verilen İzinler",grantedPersonalInfo:"İzin Verilen Kişisel Bilgiler",additionalGrants:"Ek İzinler",action:"Aksiyon",inResource:"Kaynak",fullAccess:"Tam Yetki",offlineToken:"Çevirimdışı-Token",revoke:"İzni İptal et",configureAuthenticators:"Çoklu Kimlik Doğrulama",mobile:"Mobil",totpStep1:"Akıllı Telefonunuza aşağıdaki uygulamalardan birini yükleyin:",totpStep2:"Uygulamayı açın ve barkodu okutun.",totpStep3:"Uygulama tarafından oluşturulan tek seferlik kodu girin ve Kaydet'i tıklayın.",totpManualStep2:"Uygulamayı açın ve aşağıdaki anahtarı girin.",totpManualStep3:"Bunları uygulama için özelleştirebilirseniz aşağıdaki yapılandırma değerlerini kullanın:",totpUnableToScan:"Barkodu tarayamıyor musunuz?",totpScanBarcode:"Barkod Tara?","totp.totp":"Zaman bazlı (time-based)","totp.hotp":"Sayaç tabanlı (counter-based)",totpType:"Tip",totpAlgorithm:"Algoritma",totpDigits:"Basamak",totpInterval:"Aralık",totpCounter:"Sayaç",missingUsernameMessage:"Lütfen bir kullanıcı adı giriniz.",missingFirstNameMessage:"Lütfen bir ad girin.",invalidEmailMessage:"Geçersiz e-posta adresi.",missingLastNameMessage:"Lütfen bir soyadı giriniz.",missingEmailMessage:"Lütfen bir e-mail adresi giriniz.",missingPasswordMessage:"Lütfen bir şifre giriniz.",notMatchPasswordMessage:"Şifreler aynı değil.",missingTotpMessage:"Lütfen tek seferlik kodu girin.",invalidPasswordExistingMessage:"Mevcut şifre geçersiz.",invalidPasswordConfirmMessage:"Şifre onayı aynı değil.",invalidTotpMessage:"Geçersiz tek seferlik kod.",usernameExistsMessage:"Kullanıcı adı zaten mevcut.",emailExistsMessage:"E-posta adresi zaten mevcut.",readOnlyUserMessage:"Yazma korumalı olduğundan kullanıcı hesabınızı değiştiremezsiniz.",readOnlyUsernameMessage:"Yazma korumalı olduğundan kullanıcı adınızı değiştiremezsiniz.",readOnlyPasswordMessage:"Yazma korumalı olduğundan şifrenizi değiştiremezsiniz.",successTotpMessage:"Çoklu kimlik doğrulaması başarıyla yapılandırıldı.",successTotpRemovedMessage:"Çoklu kimlik doğrulama başarıyla kaldırıldı.",successGrantRevokedMessage:"İzin başarıyla iptal edildi.",accountUpdatedMessage:"Kullanıcı hesabınız güncellendi.",accountPasswordUpdatedMessage:"Şifreniz güncellendi.",missingIdentityProviderMessage:"Kimlik Sağlayıcısı belirtilmemiş.",invalidFederatedIdentityActionMessage:"Geçersiz veya eksik eylem.",identityProviderNotFoundMessage:"Belirtilen Kimlik Sağlayıcı bulunamadı.",federatedIdentityLinkNotActiveMessage:"Bu kimlik artık aktif değil.",federatedIdentityRemovingLastProviderMessage:"Şifreniz olmadığı için son girişi kaldıramazsınız.",identityProviderRedirectErrorMessage:"Kimlik sağlayıcıya iletilirken hata oluştu.",identityProviderRemovedMessage:"Kimlik Sağlayıcısı başarıyla kaldırıldı.",identityProviderAlreadyLinkedMessage:"Değiştirilmiş {0} kimliği başka bir kullanıcıya atanmış.",staleCodeAccountMessage:"Bu sayfa artık geçerli değil, lütfen tekrar deneyin.",consentDenied:"Onay reddedildi.",accountDisabledMessage:"Hesabınız kilitlendi, lütfen yöneticiyle iletişime geçin.",accountTemporarilyDisabledMessage:"Hesabınız geçici olarak kilitlendi, lütfen yöneticiyle iletişime geçin veya daha sonra tekrar deneyin.",invalidPasswordMinLengthMessage:"Geçersiz Şifre: En az {0} karakter uzunluğunda olmalı.",invalidPasswordMinLowerCaseCharsMessage:"Geçersiz Şifre : En az {0} küçük harf içermelidir.",invalidPasswordMinDigitsMessage:"Geçersiz Şifre: En az {0} sayı(lar) içermelidir.",invalidPasswordMinUpperCaseCharsMessage:"Geçersiz Şifre: En az {0} büyük harf içermelidir.",invalidPasswordMinSpecialCharsMessage:"Geçersiz Şifre: En az {0} özel karakter içermelidir.",invalidPasswordNotUsernameMessage:"Geçersiz Şifre: Kullanıcı adıyla aynı olamaz.",invalidPasswordRegexPatternMessage:"Geçersiz Şifre: Regex Patternine uygun değil.",invalidPasswordHistoryMessage:"Geçersiz Şifre: Son {0} şifreden biri olamaz.",invalidPasswordBlacklistedMessage:"Geçersiz Şifre: Şifre bloklanmış şifreler listesindedir (kara liste).",invalidPasswordGenericMessge:"Geçersiz Şifre: Yeni şifre, şifre kurallarını ihlal ediyor.",myResources:"Kaynaklarım",myResourcesSub:"Kaynaklarım",doDeny:"Reddet",doRevoke:"Geri al",doApprove:"Onayla",doRemoveSharing:"Paylaşımı Kaldır",doRemoveRequest:"İsteği Kaldır",peopleAccessResource:"Bu kaynağa erişimi olan kişiler",resourceManagedPolicies:"Bu kaynağa erişim izni veren izinler",resourceNoPermissionsGrantingAccess:"Bu kaynağa erişim izni verilmeyen izin yok",anyAction:"Herhangi bir eylem",description:"Açıklama",name:"İsim",scopes:"Kapsam",resource:"Kaynak",user:"Kullanıcı",peopleSharingThisResource:"Bu kaynağı paylaşan kullanıcılar",shareWithOthers:"Başkalarıyla paylaş",needMyApproval:"Onayım gerekli",requestsWaitingApproval:"Talepleriniz onay bekliyor",icon:"Icon",requestor:"Talep eden",owner:"Sahip",resourcesSharedWithMe:"Kaynaklar benimle paylaşıldı",permissionRequestion:"İzin Talepleri",permission:"İzin",shares:"Paylaşım(lar)",applicationName:"İsim",applicationType:"Uygulama Tipi",applicationInUse:"Yalnızca uygulama içi kullanım",clearAllFilter:"Tüm filtreleri temizle",activeFilters:"Aktif filtreler",filterByName:"İsme Göre Filtrele ...",allApps:"Bütün uygulamalar",internalApps:"İç uygulamalar",thirdpartyApps:"Üçüncü parti uygulamalar",appResults:"Sonuçlar",authorizedProvider:"Yetkili Tedarikçi",authorizedProviderMessage:"Yetkili Sağlayıcılar hesabınızla bağlantılı",identityProvider:"Kimlik Sağlayıcısı",identityProviderMessage:"Hesabınızı yapılandırdığınız kimlik sağlayıcılarıyla bağlamak için",socialLogin:"Sosyal Giriş",userDefined:"Kullanıcı tanımlı",removeAccess:"Erişimi Kaldır",removeAccessMessage:"Bu uygulama hesabını kullanmak istiyorsanız tekrar erişim vermeniz gerekir.",authenticatorStatusMessage:"İki faktörlü kimlik doğrulama aktif",authenticatorFinishSetUpTitle:"İki Faktörlü Doğrulama",authenticatorFinishSetUpMessage:"Keycloak hesabınızda her oturum açtığınızda, iki faktörlü bir doğrulama kodu girmeniz istenecektir.",authenticatorSubTitle:"İki Faktörlü Kimlik Doğrulamayı Ayarlama",authenticatorSubMessage:"Hesabınızın güvenliğini artırmak için mevcut iki faktörlü kimlik doğrulama yöntemlerinden en az birini etkinleştirin.",authenticatorMobileTitle:"Mobil Kimlik Doğrulayıcı",authenticatorMobileMessage:"Doğrulama kodlarını iki faktörlü kimlik doğrulama olarak almak için mobil Doğrulayıcı'yı kullanın.",authenticatorMobileFinishSetUpMessage:"Doğrulayıcı, telefonunuza bağlı.",authenticatorActionSetup:"Kur",authenticatorSMSTitle:"SMS Kodu",authenticatorSMSMessage:"Keycloak, doğrulama kodunu telefonunuza iki faktörlü kimlik doğrulaması olarak gönderecektir.",authenticatorSMSFinishSetUpMessage:"Kısa mesajlar gönderilir",authenticatorDefaultStatus:"Varsayılan",authenticatorChangePhone:"Telefon Numarasını Değiştir",authenticatorMobileSetupTitle:"Mobil Kimlik Doğrulama Kurulumu",smscodeIntroMessage:"Telefon numaranızı girin ve telefonunuza bir doğrulama kodu gönderilecektir.",mobileSetupStep1:"Telefonunuza bir kimlik doğrulama uygulaması yükleyin. Burada listelenen uygulamalar desteklenmektedir.",mobileSetupStep2:"Uygulamayı açın ve barkodu tarayın.",mobileSetupStep3:"Uygulama tarafından sağlanan tek seferlik kodu girin ve kurulumu tamamlamak için Kaydet'e tıklayın.",scanBarCode:"Barkodu taramak ister misiniz?",enterBarCode:"Tek seferlik kodu girin",doCopy:"Kopyala",doFinish:"Bitir",authenticatorSMSCodeSetupTitle:"SMS Kodu Kurulumu",chooseYourCountry:"Ülkenizi seçin",enterYourPhoneNumber:"Telefon numaranızı girin",sendVerficationCode:"Doğrulama kodu Gönder",enterYourVerficationCode:"Onaylama kodunu girin",authenticatorBackupCodesSetupTitle:"Yedekleme Kodları Kurulumu",realmName:"Realm",doDownload:"İndir",doPrint:"Yazdır",generateNewBackupCodes:"Yeni Yedekleme Kodları Oluştur",backtoAuthenticatorPage:"Kimlik Doğrulayıcı Sayfasına Geri Dön",resources:"Kaynaklar",sharedwithMe:"Benimle paylaştı",share:"Paylaşım",sharedwith:"İle paylaştı",accessPermissions:"Erişim İzinleri",permissionRequests:"İzin İstekleri",approve:"Onayla",approveAll:"Tümünü onayla",people:"İnsanlar",perPage:"Sayfa başına",currentPage:"Geçerli sayfa",sharetheResource:"Kaynağı paylaş",group:"Grup",selectPermission:"İzin Seç",addPeople:"Kaynağınızı paylaşmak için kullanıcı ekleyin",addTeam:"Kaynağınızı paylaşmak için ekip ekleyin",myPermissions:"İzinlerim",waitingforApproval:"Onay bekleniyor",anyPermission:"Herhangi bir izin"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2866],{"./dist/account/i18n/baseMessages/tr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Kaydet",doCancel:"İptal",doLogOutAllSessions:"Tüm Oturumları Kapat",doRemove:"Sil",doAdd:"Ekle",doSignOut:"Çıkış",doLogIn:"Oturum aç",doLink:"Bağlantı",editAccountHtmlTitle:"Hesabım",personalInfoHtmlTitle:"Kişisel bilgi",federatedIdentitiesHtmlTitle:"Değiştirilen Kimlikler",accountLogHtmlTitle:"Kullanıcı Logları",changePasswordHtmlTitle:"Şifre Değiştirme",deviceActivityHtmlTitle:"Cihaz Etkinliği",sessionsHtmlTitle:"Oturum",accountManagementTitle:"Keycloak Kullanıcı Hesabı Yönetimi",authenticatorTitle:"Kimlik Doğrulama",applicationsHtmlTitle:"Uygulama",linkedAccountsHtmlTitle:"Bağlantılı Hesaplar",accountManagementWelcomeMessage:"Keycloak Hesap Yönetimine Hoş Geldiniz",personalInfoIntroMessage:"Temel bilgilerinizi yönetin",accountSecurityTitle:"Hesap Güvenliği",accountSecurityIntroMessage:"Şifrenizi ve hesap erişiminizi kontrol edin",applicationsIntroMessage:"Hesabınıza erişmek için uygulama izninizi takip edin ve yönetin",resourceIntroMessage:"Kaynaklarınızı ekip üyeleri arasında paylaşın",passwordLastUpdateMessage:"Şifreniz güncellendi",updatePasswordTitle:"Şifre güncelle",updatePasswordMessageTitle:"Güçlü bir şifre seçtiğinizden emin olun",updatePasswordMessage:"Güçlü bir şifre, sayılar, harfler ve sembollerin karışımından oluşmalıdır. Tahmin etmesi zor ve gerçek bir kelimeye benzemeyen şifre sadece bu hesap için kullanılır.",personalSubTitle:"Kişisel Bilgileriniz",personalSubMessage:"Bu temel bilgileri yönetin: adınız, soyadınız ve e-posta adresiniz",authenticatorCode:"Kimlik Doğrulama Kodu",email:"E-Mail",firstName:"Ad",givenName:"Ad",fullName:"Ad Soyad",lastName:"Soyad",familyName:"Soyad",password:"Şifre",currentPassword:"Şimdiki Şifre",passwordConfirm:"Şifre Doğrulama",passwordNew:"Yeni Şifre",username:"Kullanıcı Adı",address:"Adres",street:"Cadde",region:"Bölge",postal_code:"Posta Kodu",locality:"Şehir",country:"Ülke",emailVerified:"E-Mail Doğrulandı",gssDelegationCredential:"GSS Yetki Bilgisi",profileScopeConsentText:"Kullanıcı profili",emailScopeConsentText:"Email adresi",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefon numarası",offlineAccessScopeConsentText:"Çevrimdışı Erişim",samlRoleListScopeConsentText:"Rollerim",rolesScopeConsentText:"Kullanıcı rolleri",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Realm Oluştur","role_view-realm":"Realm görüntüle","role_view-users":"Kullanıcıları görüntüle","role_view-applications":"Uygulamaları görüntüle","role_view-clients":"İstemci görüntüle","role_view-events":"Olay görüntüle","role_view-identity-providers":"Kimlik Sağlayıcılar","role_manage-realm":"Realm yönet","role_manage-users":"Kullanıcıları yönet","role_manage-applications":"Uygulamaları yönet","role_manage-identity-providers":"Kimlik Sağlayıcıları Yönet","role_manage-clients":"İstemci yönet","role_manage-events":"Olay yönet","role_view-profile":"Profilleri görüntüle","role_manage-account":"Profilleri Yönet","role_manage-account-links":"Profil bağlantılarını yönet","role_read-token":"Token oku","role_offline-access":"Çevirimdışı Yetki",role_uma_authorization:"İzinleri Al",client_account:"Müşteri Hesabı","client_security-admin-console":"Güvenlik Yönetici Konsolu","client_admin-cli":"Admin CLI","client_realm-management":"Realm-Management",client_broker:"Broker",requiredFields:"Zorunlu Alanlar",allFieldsRequired:"Tüm Alanlar Zorunlu",backToApplication:"« Uygulamaya Dön",backTo:"Geri Dön {0}",date:"Gün",event:"Olay",ip:"IP",client:"İstemci",clients:"İstemciler",details:"Detaylar",started:"Başlangıç Tarihi",lastAccess:"Son Erişim Tarihi",expires:"Son Kullanma Tarihi",applications:"Uygulama",account:"Hesap",federatedIdentity:"Federal Kimlik",authenticator:"Kimlik Doğrulama","device-activity":"Cihaz Etkinliği",sessions:"Oturum",log:"Log",application:"Uygulama",availablePermissions:"Kullanılabilir İzinler",availableRoles:"Kullanılabilir Roller",grantedPermissions:"Verilen İzinler",grantedPersonalInfo:"İzin Verilen Kişisel Bilgiler",additionalGrants:"Ek İzinler",action:"Aksiyon",inResource:"Kaynak",fullAccess:"Tam Yetki",offlineToken:"Çevirimdışı-Token",revoke:"İzni İptal et",configureAuthenticators:"Çoklu Kimlik Doğrulama",mobile:"Mobil",totpStep1:"Akıllı Telefonunuza aşağıdaki uygulamalardan birini yükleyin:",totpStep2:"Uygulamayı açın ve barkodu okutun.",totpStep3:"Uygulama tarafından oluşturulan tek seferlik kodu girin ve Kaydet'i tıklayın.",totpManualStep2:"Uygulamayı açın ve aşağıdaki anahtarı girin.",totpManualStep3:"Bunları uygulama için özelleştirebilirseniz aşağıdaki yapılandırma değerlerini kullanın:",totpUnableToScan:"Barkodu tarayamıyor musunuz?",totpScanBarcode:"Barkod Tara?","totp.totp":"Zaman bazlı (time-based)","totp.hotp":"Sayaç tabanlı (counter-based)",totpType:"Tip",totpAlgorithm:"Algoritma",totpDigits:"Basamak",totpInterval:"Aralık",totpCounter:"Sayaç",missingUsernameMessage:"Lütfen bir kullanıcı adı giriniz.",missingFirstNameMessage:"Lütfen bir ad girin.",invalidEmailMessage:"Geçersiz e-posta adresi.",missingLastNameMessage:"Lütfen bir soyadı giriniz.",missingEmailMessage:"Lütfen bir e-mail adresi giriniz.",missingPasswordMessage:"Lütfen bir şifre giriniz.",notMatchPasswordMessage:"Şifreler aynı değil.",missingTotpMessage:"Lütfen tek seferlik kodu girin.",invalidPasswordExistingMessage:"Mevcut şifre geçersiz.",invalidPasswordConfirmMessage:"Şifre onayı aynı değil.",invalidTotpMessage:"Geçersiz tek seferlik kod.",usernameExistsMessage:"Kullanıcı adı zaten mevcut.",emailExistsMessage:"E-posta adresi zaten mevcut.",readOnlyUserMessage:"Yazma korumalı olduğundan kullanıcı hesabınızı değiştiremezsiniz.",readOnlyUsernameMessage:"Yazma korumalı olduğundan kullanıcı adınızı değiştiremezsiniz.",readOnlyPasswordMessage:"Yazma korumalı olduğundan şifrenizi değiştiremezsiniz.",successTotpMessage:"Çoklu kimlik doğrulaması başarıyla yapılandırıldı.",successTotpRemovedMessage:"Çoklu kimlik doğrulama başarıyla kaldırıldı.",successGrantRevokedMessage:"İzin başarıyla iptal edildi.",accountUpdatedMessage:"Kullanıcı hesabınız güncellendi.",accountPasswordUpdatedMessage:"Şifreniz güncellendi.",missingIdentityProviderMessage:"Kimlik Sağlayıcısı belirtilmemiş.",invalidFederatedIdentityActionMessage:"Geçersiz veya eksik eylem.",identityProviderNotFoundMessage:"Belirtilen Kimlik Sağlayıcı bulunamadı.",federatedIdentityLinkNotActiveMessage:"Bu kimlik artık aktif değil.",federatedIdentityRemovingLastProviderMessage:"Şifreniz olmadığı için son girişi kaldıramazsınız.",identityProviderRedirectErrorMessage:"Kimlik sağlayıcıya iletilirken hata oluştu.",identityProviderRemovedMessage:"Kimlik Sağlayıcısı başarıyla kaldırıldı.",identityProviderAlreadyLinkedMessage:"Değiştirilmiş {0} kimliği başka bir kullanıcıya atanmış.",staleCodeAccountMessage:"Bu sayfa artık geçerli değil, lütfen tekrar deneyin.",consentDenied:"Onay reddedildi.",accountDisabledMessage:"Hesabınız kilitlendi, lütfen yöneticiyle iletişime geçin.",accountTemporarilyDisabledMessage:"Hesabınız geçici olarak kilitlendi, lütfen yöneticiyle iletişime geçin veya daha sonra tekrar deneyin.",invalidPasswordMinLengthMessage:"Geçersiz Şifre: En az {0} karakter uzunluğunda olmalı.",invalidPasswordMinLowerCaseCharsMessage:"Geçersiz Şifre : En az {0} küçük harf içermelidir.",invalidPasswordMinDigitsMessage:"Geçersiz Şifre: En az {0} sayı(lar) içermelidir.",invalidPasswordMinUpperCaseCharsMessage:"Geçersiz Şifre: En az {0} büyük harf içermelidir.",invalidPasswordMinSpecialCharsMessage:"Geçersiz Şifre: En az {0} özel karakter içermelidir.",invalidPasswordNotUsernameMessage:"Geçersiz Şifre: Kullanıcı adıyla aynı olamaz.",invalidPasswordRegexPatternMessage:"Geçersiz Şifre: Regex Patternine uygun değil.",invalidPasswordHistoryMessage:"Geçersiz Şifre: Son {0} şifreden biri olamaz.",invalidPasswordBlacklistedMessage:"Geçersiz Şifre: Şifre bloklanmış şifreler listesindedir (kara liste).",invalidPasswordGenericMessge:"Geçersiz Şifre: Yeni şifre, şifre kurallarını ihlal ediyor.",myResources:"Kaynaklarım",myResourcesSub:"Kaynaklarım",doDeny:"Reddet",doRevoke:"Geri al",doApprove:"Onayla",doRemoveSharing:"Paylaşımı Kaldır",doRemoveRequest:"İsteği Kaldır",peopleAccessResource:"Bu kaynağa erişimi olan kişiler",resourceManagedPolicies:"Bu kaynağa erişim izni veren izinler",resourceNoPermissionsGrantingAccess:"Bu kaynağa erişim izni verilmeyen izin yok",anyAction:"Herhangi bir eylem",description:"Açıklama",name:"İsim",scopes:"Kapsam",resource:"Kaynak",user:"Kullanıcı",peopleSharingThisResource:"Bu kaynağı paylaşan kullanıcılar",shareWithOthers:"Başkalarıyla paylaş",needMyApproval:"Onayım gerekli",requestsWaitingApproval:"Talepleriniz onay bekliyor",icon:"Icon",requestor:"Talep eden",owner:"Sahip",resourcesSharedWithMe:"Kaynaklar benimle paylaşıldı",permissionRequestion:"İzin Talepleri",permission:"İzin",shares:"Paylaşım(lar)",applicationName:"İsim",applicationType:"Uygulama Tipi",applicationInUse:"Yalnızca uygulama içi kullanım",clearAllFilter:"Tüm filtreleri temizle",activeFilters:"Aktif filtreler",filterByName:"İsme Göre Filtrele ...",allApps:"Bütün uygulamalar",internalApps:"İç uygulamalar",thirdpartyApps:"Üçüncü parti uygulamalar",appResults:"Sonuçlar",authorizedProvider:"Yetkili Tedarikçi",authorizedProviderMessage:"Yetkili Sağlayıcılar hesabınızla bağlantılı",identityProvider:"Kimlik Sağlayıcısı",identityProviderMessage:"Hesabınızı yapılandırdığınız kimlik sağlayıcılarıyla bağlamak için",socialLogin:"Sosyal Giriş",userDefined:"Kullanıcı tanımlı",removeAccess:"Erişimi Kaldır",removeAccessMessage:"Bu uygulama hesabını kullanmak istiyorsanız tekrar erişim vermeniz gerekir.",authenticatorStatusMessage:"İki faktörlü kimlik doğrulama aktif",authenticatorFinishSetUpTitle:"İki Faktörlü Doğrulama",authenticatorFinishSetUpMessage:"Keycloak hesabınızda her oturum açtığınızda, iki faktörlü bir doğrulama kodu girmeniz istenecektir.",authenticatorSubTitle:"İki Faktörlü Kimlik Doğrulamayı Ayarlama",authenticatorSubMessage:"Hesabınızın güvenliğini artırmak için mevcut iki faktörlü kimlik doğrulama yöntemlerinden en az birini etkinleştirin.",authenticatorMobileTitle:"Mobil Kimlik Doğrulayıcı",authenticatorMobileMessage:"Doğrulama kodlarını iki faktörlü kimlik doğrulama olarak almak için mobil Doğrulayıcı'yı kullanın.",authenticatorMobileFinishSetUpMessage:"Doğrulayıcı, telefonunuza bağlı.",authenticatorActionSetup:"Kur",authenticatorSMSTitle:"SMS Kodu",authenticatorSMSMessage:"Keycloak, doğrulama kodunu telefonunuza iki faktörlü kimlik doğrulaması olarak gönderecektir.",authenticatorSMSFinishSetUpMessage:"Kısa mesajlar gönderilir",authenticatorDefaultStatus:"Varsayılan",authenticatorChangePhone:"Telefon Numarasını Değiştir",authenticatorMobileSetupTitle:"Mobil Kimlik Doğrulama Kurulumu",smscodeIntroMessage:"Telefon numaranızı girin ve telefonunuza bir doğrulama kodu gönderilecektir.",mobileSetupStep1:"Telefonunuza bir kimlik doğrulama uygulaması yükleyin. Burada listelenen uygulamalar desteklenmektedir.",mobileSetupStep2:"Uygulamayı açın ve barkodu tarayın.",mobileSetupStep3:"Uygulama tarafından sağlanan tek seferlik kodu girin ve kurulumu tamamlamak için Kaydet'e tıklayın.",scanBarCode:"Barkodu taramak ister misiniz?",enterBarCode:"Tek seferlik kodu girin",doCopy:"Kopyala",doFinish:"Bitir",authenticatorSMSCodeSetupTitle:"SMS Kodu Kurulumu",chooseYourCountry:"Ülkenizi seçin",enterYourPhoneNumber:"Telefon numaranızı girin",sendVerficationCode:"Doğrulama kodu Gönder",enterYourVerficationCode:"Onaylama kodunu girin",authenticatorBackupCodesSetupTitle:"Yedekleme Kodları Kurulumu",realmName:"Realm",doDownload:"İndir",doPrint:"Yazdır",generateNewBackupCodes:"Yeni Yedekleme Kodları Oluştur",backtoAuthenticatorPage:"Kimlik Doğrulayıcı Sayfasına Geri Dön",resources:"Kaynaklar",sharedwithMe:"Benimle paylaştı",share:"Paylaşım",sharedwith:"İle paylaştı",accessPermissions:"Erişim İzinleri",permissionRequests:"İzin İstekleri",approve:"Onayla",approveAll:"Tümünü onayla",people:"İnsanlar",perPage:"Sayfa başına",currentPage:"Geçerli sayfa",sharetheResource:"Kaynağı paylaş",group:"Grup",selectPermission:"İzin Seç",addPeople:"Kaynağınızı paylaşmak için kullanıcı ekleyin",addTeam:"Kaynağınızı paylaşmak için ekip ekleyin",myPermissions:"İzinlerim",waitingforApproval:"Onay bekleniyor",anyPermission:"Herhangi bir izin",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/2887.55398011.iframe.bundle.js b/2887.3633631d.iframe.bundle.js similarity index 99% rename from 2887.55398011.iframe.bundle.js rename to 2887.3633631d.iframe.bundle.js index efb4b631..d63730cc 100644 --- a/2887.55398011.iframe.bundle.js +++ b/2887.3633631d.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2887],{"./dist/account/i18n/baseMessages/pt-BR.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Salvar",doCancel:"Cancelar",doLogOutAllSessions:"Sair de todas as sessões",doRemove:"Remover",doAdd:"Adicionar",doSignOut:"Sair",doLogIn:"Entrar",doLink:"Vincular",noAccessMessage:"Acesso não permitido",editAccountHtmlTitle:"Editar Conta",personalInfoHtmlTitle:"Informações Pessoais",federatedIdentitiesHtmlTitle:"Identidades Federadas",accountLogHtmlTitle:"Histórico da conta",changePasswordHtmlTitle:"Alterar senha",deviceActivityHtmlTitle:"Atividade de Dispositivos",sessionsHtmlTitle:"Sessões",accountManagementTitle:"Gerenciamento de Conta",authenticatorTitle:"Autenticator",applicationsHtmlTitle:"Aplicativos",linkedAccountsHtmlTitle:"Contas Vinculadas",accountManagementWelcomeMessage:"Bem-vindo ao Gerenciamento de Conta",personalInfoIntroMessage:"Gerenciar informações básicas",accountSecurityTitle:"Segurança da Conta",accountSecurityIntroMessage:"Gerencie sua senha e acesso da conta",applicationsIntroMessage:"Acompanhe e gerencie as permissões de app para acesso à 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 é segura",updatePasswordMessage:"Uma senha segura contém uma combinação de número, letras e caracteres especiais. Ela deve ser difícil de adivinhar, não pode se assemelhar a uma palavra real e não é utilizada em outros lugares.",personalSubTitle:"Suas Informações Pessoais",personalSubMessage:"Gerencie as informações básicas: seu primeiro nome, seu sobrenome e seu endereço de e-mail",authenticatorCode:"Código autenticador",email:"E-mail",firstName:"Primeiro nome",givenName:"Primeiro nome",fullName:"Nome completo",lastName:"Sobrenome",familyName:"Sobrenome",password:"Senha",currentPassword:"Senha Atual",passwordConfirm:"Confirmação",passwordNew:"Nova senha",username:"Nome de usúario",address:"Endereço",street:"Logradouro",locality:"Cidade ou Localidade",region:"Estado",postal_code:"CEP",country:"País",emailVerified:"E-mail verificado",website:"Página da web",phoneNumber:"Número de telefone",phoneNumberVerified:"Número de telefone verificado",gender:"Gênero",birthday:"Data de nascimento",zoneinfo:"Zona horária",gssDelegationCredential:"Delegação de Credenciais GSS",profileScopeConsentText:"Perfil de usuário",emailScopeConsentText:"Endereço de e-mail",addressScopeConsentText:"Endereço",phoneScopeConsentText:"Número de telefone",offlineAccessScopeConsentText:"Acesso Offline",samlRoleListScopeConsentText:"Meus Perfis de Acesso",rolesScopeConsentText:"Perfis de acesso de usuário",role_admin:"Administrador","role_realm-admin":"Administrador de domínio","role_create-realm":"Criar domínio","role_view-realm":"Visualizar domínio","role_view-users":"Visualizar usuários","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ínio","role_manage-users":"Gerenciar usuários","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ções de conta","role_manage-consent":"Gerenciar consentimentos","role_read-token":"Ler token","role_offline-access":"Acesso offline",role_uma_authorization:"Obter permissões",client_account:"Conta","client_account-console":"Console de Conta","client_security-admin-console":"Console de Administração de Segurança","client_admin-cli":"CLI de Administração","client_realm-management":"Gerenciamento de Domínio",client_broker:"Provedor de Identidade",requiredFields:"Campos obrigatórios",allFieldsRequired:"Todos os campos são obrigatórios",backToApplication:"« Voltar para aplicação",backTo:"Voltar para {0}",date:"Data",event:"Evento",ip:"IP",client:"Cliente",clients:"Clientes",details:"Detalhes",started:"Início em",lastAccess:"Último acesso",expires:"Expira em",applications:"Aplicativos",account:"Conta",federatedIdentity:"Identidade Federada",authenticator:"Autenticador","device-activity":"Atividade de Dispositivos",sessions:"Sessões",log:"Histórico",application:"Aplicativo",availableRoles:"Perfis de Acesso Disponíveis",grantedPermissions:"Permissões Concedidas",grantedPersonalInfo:"Informações Pessoais Concedidas",additionalGrants:"Concessões Adicionais",action:"Ação",inResource:"em",fullAccess:"Acesso Completo",offlineToken:"Token Offline",revoke:"Revogar Concessão",configureAuthenticators:"Autenticadores Configurados",mobile:"Móvel",totpStep1:"Instale uma das seguintes aplicações no seu celular:",totpStep2:"Abra a aplicação e escaneie o código QR:",totpStep3:"Insira o código de uso único exibido pela aplicação e clique em Salvar para finalizar a configuração.",totpStep3DeviceName:"Forneça um nome de dispositivo para ajudá-lo a gerenciar seus dipositivos de autenticação de dois fatores.",totpManualStep2:"Abra a aplicação e insira a chave:",totpManualStep3:"Use as seguintes configurações se a aplicação permitir:",totpUnableToScan:"Não consegue escanear?",totpScanBarcode:"Escanear código QR?","totp.totp":"Baseada em tempo","totp.hotp":"Baseada em contador",totpType:"Tipo",totpAlgorithm:"Algoritmo",totpDigits:"Dígitos",totpInterval:"Intervalo",totpCounter:"Contador",totpDeviceName:"Nome do Dispositivo",irreversibleAction:"Esta ação é irreversível",deletingImplies:"Apagar a sua conta implica em:",errasingData:"Remover todos os dados",loggingOutImmediately:"Finalizar a sessão imediatamente",accountUnusable:"Qualquer uso subsquente da aplicação não será mais possível com esta conta",missingUsernameMessage:"Por favor, especifique o nome de usuário.",missingFirstNameMessage:"Por favor, informe o primeiro nome.",invalidEmailMessage:"E-mail inválido.",missingLastNameMessage:"Por favor, informe o sobrenome.",missingEmailMessage:"Por favor, informe o e-mail.",missingPasswordMessage:"Por favor, informe a senha.",notMatchPasswordMessage:"As senhas não coincidem.",invalidUserMessage:"Usuário inválido",updateReadOnlyAttributesRejectedMessage:"Atualização de atributo de apenas leitura não permitida",missingTotpMessage:"Por favor, informe o código de uso único.",missingTotpDeviceNameMessage:"Por favor, informe o nome do dispositivo.",invalidPasswordExistingMessage:"A senha atual é inválida.",invalidPasswordConfirmMessage:"A senha de confirmação não coincide.",invalidTotpMessage:"Código de uso único inválido.",usernameExistsMessage:"Este nome de usuário já existe.",emailExistsMessage:"Este endereço de e-mail já existe.",readOnlyUserMessage:"Você não pode atualizar sua conta, uma vez que é apenas de leitura.",readOnlyUsernameMessage:"Você^não pode atualizar o seu nome de usuário, uma vez que é apenas de leitura.",readOnlyPasswordMessage:"Você não pode atualizar sua senha, uma vez que sua conta é apenas de leitura.",successTotpMessage:"Autenticador móvel configurado.",successTotpRemovedMessage:"Autenticador móvel removido.",successGrantRevokedMessage:"Concessão revogada com sucesso.",accountUpdatedMessage:"Sua conta foi atualizada.",accountPasswordUpdatedMessage:"Sua senha foi atualizada.",missingIdentityProviderMessage:"Provedor de identidade não especificado.",invalidFederatedIdentityActionMessage:"Ação inválida ou ausente.",identityProviderNotFoundMessage:"O provedor de identidade especificado não foi encontrado.",federatedIdentityLinkNotActiveMessage:"Esta identidade não está mais em atividade.",federatedIdentityRemovingLastProviderMessage:"Você não pode remover a última identidade federada, porque você não 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á está ligada a outro usuário.",staleCodeAccountMessage:"A página expirou. Por favor, tente novamente.",consentDenied:"Consentimento negado.",accountDisabledMessage:"Conta desativada, por favor, contate um administrador.",accountTemporarilyDisabledMessage:"A conta está temporariamente indisponível, contate um administrador ou tente novamente mais tarde.",invalidPasswordMinLengthMessage:"Senha inválida: deve ter pelo menos {0} caracteres.",invalidPasswordMinLowerCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) minúscula(s).",invalidPasswordMinDigitsMessage:"Senha inválida: deve conter pelo menos {0} número(s).",invalidPasswordMinUpperCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) maiúscula(s).",invalidPasswordMinSpecialCharsMessage:"Senha inválida: deve conter pelo menos {0} caractere(s) especial(is).",invalidPasswordNotUsernameMessage:"Senha inválida: não pode ser igual ao nome de usuário.",invalidPasswordNotEmailMessage:"Senha inválida: não pode ser igual ao endereço de e-mail.",invalidPasswordRegexPatternMessage:"Senha inválida: não corresponde ao(s) padrão(ões) da expressão regular.",invalidPasswordHistoryMessage:"Senha inválida: não pode ser igual a qualquer uma da(s) última(s) {0} senha(s).",invalidPasswordBlacklistedMessage:"Senha inválida: esta senha está na lista de exclusão.",invalidPasswordGenericMessage:"Senha inválida: a nova senha não cumpre as políticas de senha.",myResources:"Meus Recursos",myResourcesSub:"Meus recursos",doDeny:"Negar",doRevoke:"Revogar",doApprove:"Permitir",doRemoveSharing:"Remover Compartilhamento",doRemoveRequest:"Remover Solicitação",peopleAccessResource:"Pessoas com acesso a este recurso",resourceManagedPolicies:"Permissões dando acesso a este recurso",resourceNoPermissionsGrantingAccess:"Sem permissões dando acesso a este recurso",anyAction:"Qualquer ação",description:"Descrição",name:"Nome",scopes:"Escopo",resource:"Recurso",user:"Usuário",peopleSharingThisResource:"Pessoas compartilhando este recurso",shareWithOthers:"Compartilhar com outros",needMyApproval:"Requer minha aprovação",requestsWaitingApproval:"Solicitações suas aguardando aprovação",icon:"Ícone",requestor:"Requerente",owner:"Dono",resourcesSharedWithMe:"Recursos compartilhados comigo",permissionRequestion:"Solicitação de Permissão",permission:"Permissão",shares:"compartilha(m)",notBeingShared:"Este recurso não está sendo compartilhado.",notHaveAnyResource:"Você não possui recursos",noResourcesSharedWithYou:"Não há recursos compartilhados com você",havePermissionRequestsWaitingForApproval:"Você tem {0} solicitação(ões) de permissão aguardando aprovação.",clickHereForDetails:"Clique aqui para mais detalhes.",resourceIsNotBeingShared:"O recurso não é compartilhado",applicationName:"Nome",applicationType:"Tipo de aplicação",applicationInUse:"Uso apenas em aplicação",clearAllFilter:"Limpar todos os filtros",activeFilters:"Filtros ativos",filterByName:"Filtrar Por Nome ...",allApps:"Todas as aplicações",internalApps:"Aplicações internas",thirdpartyApps:"Aplicações de terceiros",appResults:"Resultados",clientNotFoundMessage:"Cliente não encontrado.",authorizedProvider:"Provedor Autorizado",authorizedProviderMessage:"Provedores Autorizados vinculados à sua conta",identityProvider:"Provedor de Identidade",identityProviderMessage:"Para vincular a sua conta aos provedores de identidade configurados",socialLogin:"Login Social",userDefined:"Definido por Usuário",removeAccess:"Remover Acesso",removeAccessMessage:"Você deverá conceder acesso novamente se quiser usar esta conta de app.",authenticatorStatusMessage:"A autenticação de dois fatores está",authenticatorFinishSetUpTitle:"Sua Autenticação de Dois Fatores",authenticatorFinishSetUpMessage:"Sempre que entrar na sua conta, você deverá fornecer um código de autenticação de dois fatores.",authenticatorSubTitle:"Configurar Autenticação de Dois Fatores",authenticatorSubMessage:"Para aumentar a segurança da sua conta, habilite pelo menos um método de autenticação de dois fatores disponível.",authenticatorMobileTitle:"Autenticador Móvel",authenticatorMobileMessage:"Use um autenticador móvel para obter códigos de verificação para autenticação de dois fatores.",authenticatorMobileFinishSetUpMessage:"O autenticador foi vinculado ao seu celular.",authenticatorActionSetup:"Configurar",authenticatorSMSTitle:"Código SMS",authenticatorSMSMessage:"A aplicação irá enviar o código de verificação para o seu celular como autenticação de dois fatores.",authenticatorSMSFinishSetUpMessage:"As mensagens de texto serão enviadas para",authenticatorDefaultStatus:"Padrão",authenticatorChangePhone:"Mudar Número de Celular",authenticatorMobileSetupTitle:"Configuração do Autenticador Móvel",smscodeIntroMessage:"Insira seu número de celular e o código de verificação será enviado para o seu dispositivo.",mobileSetupStep1:"Instale um app autenticador no seu celular. As seguintes aplicações são suportadas.",mobileSetupStep2:"Abra a aplicação e escaneie o código QR:",mobileSetupStep3:"Insira o código autenticador exibido pela aplicação e clique em Salvar para finalizar a configuração.",scanBarCode:"Escanear código QR?",enterBarCode:"Insira o código autenticador",doCopy:"Copiar",doFinish:"Finalizar",authenticatorSMSCodeSetupTitle:"Configuração de Código SMS",chooseYourCountry:"Selecione seu país",enterYourPhoneNumber:"Insira seu número de telefone",sendVerficationCode:"Enviar Código de Verificação",enterYourVerficationCode:"Insira o seu código de verificação",authenticatorBackupCodesSetupTitle:"Configuração de Códigos de Emergência",realmName:"Domínio",doDownload:"Baixar",doPrint:"Imprimir",generateNewBackupCodes:"Gerar Novos Códigos de Emergência",backtoAuthenticatorPage:"Voltar à Página de Autenticador",resources:"Recursos",sharedwithMe:"Compartilhados Comigo",share:"Compartilhar",sharedwith:"Compartilhado com",accessPermissions:"Permissões de Acesso",permissionRequests:"Pedidos de Acesso",approve:"Aprovar",approveAll:"Aprovar todos",people:"pessoas",perPage:"por página",currentPage:"Página Atual",sharetheResource:"Compartilhar recurso",group:"Grupo",selectPermission:"Selecionar Permissão",addPeople:"Adicionar pessoas que compartilhem o recurso",addTeam:"Adicionar equipe que compartilhe o recurso",myPermissions:"Minhas Permissões",waitingforApproval:"Aguardando aprovação",anyPermission:"Qualquer Permissão","openshift.scope.user_info":"Informações do usuário","openshift.scope.user_check-access":"Informações de acesso do usuário","openshift.scope.user_full":"Acesso Completo","openshift.scope.list-projects":"Listar projetos"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2887],{"./dist/account/i18n/baseMessages/pt-BR.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Salvar",doCancel:"Cancelar",doLogOutAllSessions:"Sair de todas as sessões",doRemove:"Remover",doAdd:"Adicionar",doSignOut:"Sair",doLogIn:"Entrar",doLink:"Vincular",noAccessMessage:"Acesso não permitido",editAccountHtmlTitle:"Editar Conta",personalInfoHtmlTitle:"Informações Pessoais",federatedIdentitiesHtmlTitle:"Identidades Federadas",accountLogHtmlTitle:"Histórico da conta",changePasswordHtmlTitle:"Alterar senha",deviceActivityHtmlTitle:"Atividade de Dispositivos",sessionsHtmlTitle:"Sessões",accountManagementTitle:"Gerenciamento de Conta",authenticatorTitle:"Autenticator",applicationsHtmlTitle:"Aplicativos",linkedAccountsHtmlTitle:"Contas Vinculadas",accountManagementWelcomeMessage:"Bem-vindo ao Gerenciamento de Conta",personalInfoIntroMessage:"Gerenciar informações básicas",accountSecurityTitle:"Segurança da Conta",accountSecurityIntroMessage:"Gerencie sua senha e acesso da conta",applicationsIntroMessage:"Acompanhe e gerencie as permissões de app para acesso à 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 é segura",updatePasswordMessage:"Uma senha segura contém uma combinação de número, letras e caracteres especiais. Ela deve ser difícil de adivinhar, não pode se assemelhar a uma palavra real e não é utilizada em outros lugares.",personalSubTitle:"Suas Informações Pessoais",personalSubMessage:"Gerencie as informações básicas: seu primeiro nome, seu sobrenome e seu endereço de e-mail",authenticatorCode:"Código autenticador",email:"E-mail",firstName:"Primeiro nome",givenName:"Primeiro nome",fullName:"Nome completo",lastName:"Sobrenome",familyName:"Sobrenome",password:"Senha",currentPassword:"Senha Atual",passwordConfirm:"Confirmação",passwordNew:"Nova senha",username:"Nome de usúario",address:"Endereço",street:"Logradouro",locality:"Cidade ou Localidade",region:"Estado",postal_code:"CEP",country:"País",emailVerified:"E-mail verificado",website:"Página da web",phoneNumber:"Número de telefone",phoneNumberVerified:"Número de telefone verificado",gender:"Gênero",birthday:"Data de nascimento",zoneinfo:"Zona horária",gssDelegationCredential:"Delegação de Credenciais GSS",profileScopeConsentText:"Perfil de usuário",emailScopeConsentText:"Endereço de e-mail",addressScopeConsentText:"Endereço",phoneScopeConsentText:"Número de telefone",offlineAccessScopeConsentText:"Acesso Offline",samlRoleListScopeConsentText:"Meus Perfis de Acesso",rolesScopeConsentText:"Perfis de acesso de usuário",role_admin:"Administrador","role_realm-admin":"Administrador de domínio","role_create-realm":"Criar domínio","role_view-realm":"Visualizar domínio","role_view-users":"Visualizar usuários","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ínio","role_manage-users":"Gerenciar usuários","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ções de conta","role_manage-consent":"Gerenciar consentimentos","role_read-token":"Ler token","role_offline-access":"Acesso offline",role_uma_authorization:"Obter permissões",client_account:"Conta","client_account-console":"Console de Conta","client_security-admin-console":"Console de Administração de Segurança","client_admin-cli":"CLI de Administração","client_realm-management":"Gerenciamento de Domínio",client_broker:"Provedor de Identidade",requiredFields:"Campos obrigatórios",allFieldsRequired:"Todos os campos são obrigatórios",backToApplication:"« Voltar para aplicação",backTo:"Voltar para {0}",date:"Data",event:"Evento",ip:"IP",client:"Cliente",clients:"Clientes",details:"Detalhes",started:"Início em",lastAccess:"Último acesso",expires:"Expira em",applications:"Aplicativos",account:"Conta",federatedIdentity:"Identidade Federada",authenticator:"Autenticador","device-activity":"Atividade de Dispositivos",sessions:"Sessões",log:"Histórico",application:"Aplicativo",availableRoles:"Perfis de Acesso Disponíveis",grantedPermissions:"Permissões Concedidas",grantedPersonalInfo:"Informações Pessoais Concedidas",additionalGrants:"Concessões Adicionais",action:"Ação",inResource:"em",fullAccess:"Acesso Completo",offlineToken:"Token Offline",revoke:"Revogar Concessão",configureAuthenticators:"Autenticadores Configurados",mobile:"Móvel",totpStep1:"Instale uma das seguintes aplicações no seu celular:",totpStep2:"Abra a aplicação e escaneie o código QR:",totpStep3:"Insira o código de uso único exibido pela aplicação e clique em Salvar para finalizar a configuração.",totpStep3DeviceName:"Forneça um nome de dispositivo para ajudá-lo a gerenciar seus dipositivos de autenticação de dois fatores.",totpManualStep2:"Abra a aplicação e insira a chave:",totpManualStep3:"Use as seguintes configurações se a aplicação permitir:",totpUnableToScan:"Não consegue escanear?",totpScanBarcode:"Escanear código QR?","totp.totp":"Baseada em tempo","totp.hotp":"Baseada em contador",totpType:"Tipo",totpAlgorithm:"Algoritmo",totpDigits:"Dígitos",totpInterval:"Intervalo",totpCounter:"Contador",totpDeviceName:"Nome do Dispositivo",irreversibleAction:"Esta ação é irreversível",deletingImplies:"Apagar a sua conta implica em:",errasingData:"Remover todos os dados",loggingOutImmediately:"Finalizar a sessão imediatamente",accountUnusable:"Qualquer uso subsquente da aplicação não será mais possível com esta conta",missingUsernameMessage:"Por favor, especifique o nome de usuário.",missingFirstNameMessage:"Por favor, informe o primeiro nome.",invalidEmailMessage:"E-mail inválido.",missingLastNameMessage:"Por favor, informe o sobrenome.",missingEmailMessage:"Por favor, informe o e-mail.",missingPasswordMessage:"Por favor, informe a senha.",notMatchPasswordMessage:"As senhas não coincidem.",invalidUserMessage:"Usuário inválido",updateReadOnlyAttributesRejectedMessage:"Atualização de atributo de apenas leitura não permitida",missingTotpMessage:"Por favor, informe o código de uso único.",missingTotpDeviceNameMessage:"Por favor, informe o nome do dispositivo.",invalidPasswordExistingMessage:"A senha atual é inválida.",invalidPasswordConfirmMessage:"A senha de confirmação não coincide.",invalidTotpMessage:"Código de uso único inválido.",usernameExistsMessage:"Este nome de usuário já existe.",emailExistsMessage:"Este endereço de e-mail já existe.",readOnlyUserMessage:"Você não pode atualizar sua conta, uma vez que é apenas de leitura.",readOnlyUsernameMessage:"Você^não pode atualizar o seu nome de usuário, uma vez que é apenas de leitura.",readOnlyPasswordMessage:"Você não pode atualizar sua senha, uma vez que sua conta é apenas de leitura.",successTotpMessage:"Autenticador móvel configurado.",successTotpRemovedMessage:"Autenticador móvel removido.",successGrantRevokedMessage:"Concessão revogada com sucesso.",accountUpdatedMessage:"Sua conta foi atualizada.",accountPasswordUpdatedMessage:"Sua senha foi atualizada.",missingIdentityProviderMessage:"Provedor de identidade não especificado.",invalidFederatedIdentityActionMessage:"Ação inválida ou ausente.",identityProviderNotFoundMessage:"O provedor de identidade especificado não foi encontrado.",federatedIdentityLinkNotActiveMessage:"Esta identidade não está mais em atividade.",federatedIdentityRemovingLastProviderMessage:"Você não pode remover a última identidade federada, porque você não 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á está ligada a outro usuário.",staleCodeAccountMessage:"A página expirou. Por favor, tente novamente.",consentDenied:"Consentimento negado.",accountDisabledMessage:"Conta desativada, por favor, contate um administrador.",accountTemporarilyDisabledMessage:"A conta está temporariamente indisponível, contate um administrador ou tente novamente mais tarde.",invalidPasswordMinLengthMessage:"Senha inválida: deve ter pelo menos {0} caracteres.",invalidPasswordMinLowerCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) minúscula(s).",invalidPasswordMinDigitsMessage:"Senha inválida: deve conter pelo menos {0} número(s).",invalidPasswordMinUpperCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) maiúscula(s).",invalidPasswordMinSpecialCharsMessage:"Senha inválida: deve conter pelo menos {0} caractere(s) especial(is).",invalidPasswordNotUsernameMessage:"Senha inválida: não pode ser igual ao nome de usuário.",invalidPasswordNotEmailMessage:"Senha inválida: não pode ser igual ao endereço de e-mail.",invalidPasswordRegexPatternMessage:"Senha inválida: não corresponde ao(s) padrão(ões) da expressão regular.",invalidPasswordHistoryMessage:"Senha inválida: não pode ser igual a qualquer uma da(s) última(s) {0} senha(s).",invalidPasswordBlacklistedMessage:"Senha inválida: esta senha está na lista de exclusão.",invalidPasswordGenericMessage:"Senha inválida: a nova senha não cumpre as políticas de senha.",myResources:"Meus Recursos",myResourcesSub:"Meus recursos",doDeny:"Negar",doRevoke:"Revogar",doApprove:"Permitir",doRemoveSharing:"Remover Compartilhamento",doRemoveRequest:"Remover Solicitação",peopleAccessResource:"Pessoas com acesso a este recurso",resourceManagedPolicies:"Permissões dando acesso a este recurso",resourceNoPermissionsGrantingAccess:"Sem permissões dando acesso a este recurso",anyAction:"Qualquer ação",description:"Descrição",name:"Nome",scopes:"Escopo",resource:"Recurso",user:"Usuário",peopleSharingThisResource:"Pessoas compartilhando este recurso",shareWithOthers:"Compartilhar com outros",needMyApproval:"Requer minha aprovação",requestsWaitingApproval:"Solicitações suas aguardando aprovação",icon:"Ícone",requestor:"Requerente",owner:"Dono",resourcesSharedWithMe:"Recursos compartilhados comigo",permissionRequestion:"Solicitação de Permissão",permission:"Permissão",shares:"compartilha(m)",notBeingShared:"Este recurso não está sendo compartilhado.",notHaveAnyResource:"Você não possui recursos",noResourcesSharedWithYou:"Não há recursos compartilhados com você",havePermissionRequestsWaitingForApproval:"Você tem {0} solicitação(ões) de permissão aguardando aprovação.",clickHereForDetails:"Clique aqui para mais detalhes.",resourceIsNotBeingShared:"O recurso não é compartilhado",applicationName:"Nome",applicationType:"Tipo de aplicação",applicationInUse:"Uso apenas em aplicação",clearAllFilter:"Limpar todos os filtros",activeFilters:"Filtros ativos",filterByName:"Filtrar Por Nome ...",allApps:"Todas as aplicações",internalApps:"Aplicações internas",thirdpartyApps:"Aplicações de terceiros",appResults:"Resultados",clientNotFoundMessage:"Cliente não encontrado.",authorizedProvider:"Provedor Autorizado",authorizedProviderMessage:"Provedores Autorizados vinculados à sua conta",identityProvider:"Provedor de Identidade",identityProviderMessage:"Para vincular a sua conta aos provedores de identidade configurados",socialLogin:"Login Social",userDefined:"Definido por Usuário",removeAccess:"Remover Acesso",removeAccessMessage:"Você deverá conceder acesso novamente se quiser usar esta conta de app.",authenticatorStatusMessage:"A autenticação de dois fatores está",authenticatorFinishSetUpTitle:"Sua Autenticação de Dois Fatores",authenticatorFinishSetUpMessage:"Sempre que entrar na sua conta, você deverá fornecer um código de autenticação de dois fatores.",authenticatorSubTitle:"Configurar Autenticação de Dois Fatores",authenticatorSubMessage:"Para aumentar a segurança da sua conta, habilite pelo menos um método de autenticação de dois fatores disponível.",authenticatorMobileTitle:"Autenticador Móvel",authenticatorMobileMessage:"Use um autenticador móvel para obter códigos de verificação para autenticação de dois fatores.",authenticatorMobileFinishSetUpMessage:"O autenticador foi vinculado ao seu celular.",authenticatorActionSetup:"Configurar",authenticatorSMSTitle:"Código SMS",authenticatorSMSMessage:"A aplicação irá enviar o código de verificação para o seu celular como autenticação de dois fatores.",authenticatorSMSFinishSetUpMessage:"As mensagens de texto serão enviadas para",authenticatorDefaultStatus:"Padrão",authenticatorChangePhone:"Mudar Número de Celular",authenticatorMobileSetupTitle:"Configuração do Autenticador Móvel",smscodeIntroMessage:"Insira seu número de celular e o código de verificação será enviado para o seu dispositivo.",mobileSetupStep1:"Instale um app autenticador no seu celular. As seguintes aplicações são suportadas.",mobileSetupStep2:"Abra a aplicação e escaneie o código QR:",mobileSetupStep3:"Insira o código autenticador exibido pela aplicação e clique em Salvar para finalizar a configuração.",scanBarCode:"Escanear código QR?",enterBarCode:"Insira o código autenticador",doCopy:"Copiar",doFinish:"Finalizar",authenticatorSMSCodeSetupTitle:"Configuração de Código SMS",chooseYourCountry:"Selecione seu país",enterYourPhoneNumber:"Insira seu número de telefone",sendVerficationCode:"Enviar Código de Verificação",enterYourVerficationCode:"Insira o seu código de verificação",authenticatorBackupCodesSetupTitle:"Configuração de Códigos de Emergência",realmName:"Domínio",doDownload:"Baixar",doPrint:"Imprimir",generateNewBackupCodes:"Gerar Novos Códigos de Emergência",backtoAuthenticatorPage:"Voltar à Página de Autenticador",resources:"Recursos",sharedwithMe:"Compartilhados Comigo",share:"Compartilhar",sharedwith:"Compartilhado com",accessPermissions:"Permissões de Acesso",permissionRequests:"Pedidos de Acesso",approve:"Aprovar",approveAll:"Aprovar todos",people:"pessoas",perPage:"por página",currentPage:"Página Atual",sharetheResource:"Compartilhar recurso",group:"Grupo",selectPermission:"Selecionar Permissão",addPeople:"Adicionar pessoas que compartilhem o recurso",addTeam:"Adicionar equipe que compartilhe o recurso",myPermissions:"Minhas Permissões",waitingforApproval:"Aguardando aprovação",anyPermission:"Qualquer Permissão","openshift.scope.user_info":"Informações do usuário","openshift.scope.user_check-access":"Informações de acesso do usuário","openshift.scope.user_full":"Acesso Completo","openshift.scope.list-projects":"Listar projetos",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/2954.5df6b776.iframe.bundle.js b/2954.b87ccca3.iframe.bundle.js similarity index 92% rename from 2954.5df6b776.iframe.bundle.js rename to 2954.b87ccca3.iframe.bundle.js index 71ad970b..23041a43 100644 --- a/2954.5df6b776.iframe.bundle.js +++ b/2954.b87ccca3.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2954],{"./dist/login/i18n/baseMessages/tr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Oturum aç",doRegister:"Kayıt ol",doCancel:"İptal et",doSubmit:"Gönder",doYes:"Evet",doNo:"Hayır",doContinue:"Devam et",doIgnore:"Yoksay",doAccept:"Kabul Et",doDecline:"Reddet",doForgotPassword:"Parolanızı mı unuttunuz?",doClickHere:"Buraya Tıklayın",doImpersonate:"Kişiselleştir",kerberosNotConfigured:"Kerberos Tanımlanmamış",kerberosNotConfiguredTitle:"Kerberos Tanımlanmamış",bypassKerberosDetail:"Ya Kerberos ile giriş yapmadınız veya tarayıcınız Kerberos giriş için ayarlanmamış. Diğer yollarla giriş yapmak için lütfen devam'a tıklayın",kerberosNotSetUp:"Kerberos kurulmadı. Giriş yapamazsın.",registerTitle:"Kayıt ol",loginTitle:"{0} adresinde oturum açın",loginTitleHtml:"{0}",impersonateTitle:"{0} Kullanıcı kimliğine bürün",impersonateTitleHtml:"{0} Kullanıcı kimliğine bürün",realmChoice:"Realm",unknownUser:"Bilinmeyen kullanıcı",loginTotpTitle:"Mobil Kimlik Doğrulama Kurulumu",loginProfileTitle:"Hesap bilgilerini Güncelle",loginTimeout:"Giriş yapmak çok uzun sürdü. Giriş süreci baştan başlayacak.",oauthGrantTitle:"{0} adresine Erişim Ver",oauthGrantTitleHtml:"{0}",errorTitle:"Üzgünüz...",errorTitleHtml:"Üzgünüz ...",emailVerifyTitle:"Eposta Doğrulama",emailForgotTitle:"Parolanızı mı unuttunuz?",updatePasswordTitle:"Şifre güncelle",codeSuccessTitle:"Başarılı işlem kodu",codeErrorTitle:"Hatalı işlem kodu: {0}",displayUnsupported:"İstenen gösterim türü desteklenmiyor",browserRequired:"Giriş için taryıcı gerekli",browserContinue:"Girişe devam etmek için tarayıcı gerekli",browserContinuePrompt:"Tarayıcı aç ve girişe devam et? [e/h]:",browserContinueAnswer:"h",termsTitle:"Şartlar ve koşullar",termsText:"

Tanımlanacak şartlar ve koşullar

",termsPlainText:"Tanımlanacak şartlar ve koşullar.",recaptchaFailed:"Geçersiz Recaptcha",recaptchaNotConfigured:"Recaptcha gerekli, ancak yapılandırılmamış",consentDenied:"Onay reddedildi.",noAccount:"Yeni kullanıcı?",username:"Kullanıcı Adı",usernameOrEmail:"Kullanıcı adı veya E-mail",firstName:"Ad",givenName:"Ad",fullName:"Ad Soyad",lastName:"Soyad",familyName:"Soyad",email:"E-Mail",password:"Şifre",passwordConfirm:"Şifre Doğrulama",passwordNew:"Yeni Şifre",passwordNewConfirm:"eni Şifre Doğrulama",rememberMe:"Beni Hatırla",authenticatorCode:"Kimlik Doğrulama Kodu",address:"Adres",street:"Cadde",locality:"Semt",region:"Bölge",postal_code:"Posta Kodu",country:"Ülke",emailVerified:"E-Mail Doğrulandı",gssDelegationCredential:"GSS Yetki Bilgisi",profileScopeConsentText:"Kullanıcı profili",emailScopeConsentText:"E-Mai Adresi",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefon Numarası",offlineAccessScopeConsentText:"Çevrimdışı Erişim",samlRoleListScopeConsentText:"Rollerim",rolesScopeConsentText:"Kullanıcı rolleri",loginTotpIntro:"Bu hesaba erişmek için bir Tek Kullanımlık Şifre oluşturmalısınız.",loginTotpStep1:"Cep telefonunuzda aşağıdaki uygulamalardan birini yükleyin",loginTotpStep2:"Uygulamayı açın ve barkodu tarayın",loginTotpStep3:"Uygulama tarafından sağlanan tek seferlik kodu girin ve kurulumu tamamlamak için Gönder'i tıklayın.",loginTotpManualStep2:"Uygulamayı açın ve anahtarı girin",loginTotpManualStep3:"Uygulama bunları ayarlamaya izin veriyorsa aşağıdaki yapılandırma değerlerini kullanın.",loginTotpUnableToScan:"Taranamıyor?",loginTotpScanBarcode:"Barkod tara?",loginOtpOneTime:"Tek seferlik kod",loginTotpType:"Tip",loginTotpAlgorithm:"Algoritma",loginTotpDigits:"Basamak",loginTotpInterval:"Aralık",loginTotpCounter:"Sayaç","loginTotp.totp":"Zaman Tabanlı","loginTotp.hotp":"Sayaç Tabanlı",oauthGrantRequest:"Bu erişim ayrıcalıkları veriyor musunuz?",inResource:"içinde",emailVerifyInstruction1:"E-posta adresinizi doğrulamak için talimatları içeren bir e-posta size gönderildi.",emailVerifyInstruction2:"E-postanızda doğrulama kodu almadınız mı?",emailVerifyInstruction3:"e-postayı yeniden göndermek için.",emailLinkIdpTitle:"Bağlantı {0}",emailLinkIdp1:"{1} hesabını {2} hesabınıza bağlayan talimatları içeren bir e-posta size gönderildi.",emailLinkIdp2:"E-postanızda doğrulama kodu almadınız mı?",emailLinkIdp3:"e-postayı yeniden göndermek için.",emailLinkIdp4:"E-postayı farklı tarayıcıda zaten doğruladıysanız",emailLinkIdp5:"devam etmek.",backToLogin:"« Giriş'e geri dön",emailInstruction:"Kullanıcı adınızı veya e-posta adresinizi girin ve yeni bir şifre oluşturmaya ilişkin talimatları size göndereceğiz.",copyCodeInstruction:"Lütfen bu kodu kopyalayın ve uygulamanıza yapıştırın:",pageExpiredTitle:"Sayfanın Süresi Doldu",pageExpiredMsg1:"Giriş işlemini yeniden başlatmak için",pageExpiredMsg2:"Giriş işlemine devam etmek için",personalInfo:"Kişisel bilgi:",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Realm Oluştur","role_create-client":"Create client","role_view-realm":"Realm görüntüle","role_view-users":"Kullanıcı görüntüle","role_view-applications":"Uygulamarı gör","role_view-clients":"Clients görüntüle","role_view-events":"Events görüntüle","role_view-identity-providers":"Kimlik sağlayıcılarını görüntüle","role_manage-realm":"Realm Yönet","role_manage-users":"Kullanıcıları Yönet","role_manage-applications":"Uygulamaları Yönet","role_manage-identity-providers":"Kimlik Sağlayıcılarını Yönet","role_manage-clients":"Clients Yönet","role_manage-events":"Events Yönet","role_view-profile":"Profil görüntüle","role_manage-account":"Hesap Yönet","role_manage-account-links":"Hesap bağlantılarını yönet","role_read-token":"Token oku","role_offline-access":"Çevrimdışı erişim",client_account:"Hesap","client_security-admin-console":"Güvenlik Yönetici Konsolu","client_admin-cli":"Admin CLI","client_realm-management":"Realm Yönet",client_broker:"Broker",invalidUserMessage:"Geçersiz kullanıcı adı veya şifre.",invalidEmailMessage:"Geçersiz e-posta adresi.",accountDisabledMessage:"Hesap devre dışı, yönetici ile iletişime geçin.",accountTemporarilyDisabledMessage:"Hesabınız geçici olarak kilitlendi, lütfen yöneticiyle iletişime geçin veya daha sonra tekrar deneyin.",expiredCodeMessage:"Oturum zaman aşımına uğradı. Lütfen tekrar giriş yapın.",expiredActionMessage:"Eylem süresi doldu. Lütfen şimdi giriş yapmaya devam edin.",expiredActionTokenNoSessionMessage:"Eylemin süresi doldu.",expiredActionTokenSessionExistsMessage:"Eylem süresi doldu. Lütfen tekrar başlayın.",missingFirstNameMessage:"Lütfen ilk adı belirtin.",missingLastNameMessage:"Lütfen soyadı belirtin.",missingEmailMessage:"Lütfen email belirtin.",missingUsernameMessage:"Lütfen kullanıcı adını belirtin.",missingPasswordMessage:"Lütfen şifre belirtin.",missingTotpMessage:"Lütfen kimlik doğrulama kodunu belirtin.",notMatchPasswordMessage:"Şifreler eşleşmiyor.",invalidPasswordExistingMessage:"Mevcut şifre geçersiz.",invalidPasswordBlacklistedMessage:"Geçersiz şifre: şifre kara listeye alındı.",invalidPasswordConfirmMessage:"Şifre onayı eşleşmiyor.",invalidTotpMessage:"Geçersiz kimlik doğrulama kodu.",usernameExistsMessage:"Kullanıcı adı zaten var.",emailExistsMessage:"Bu e-posta zaten var.",federatedIdentityExistsMessage:"{0} {1} kullanıcı zaten var. Hesabı bağlamak için lütfen hesap yönetimine giriş yapın.",confirmLinkIdpTitle:"Bu Hesap Zaten Mevcut",federatedIdentityConfirmLinkMessage:"{0} {1} kullanıcı zaten var. Nasıl devam etmek istersin?",confirmLinkIdpReviewProfile:"Profili gözden geçir",confirmLinkIdpContinue:"Mevcut hesaba ekle",configureTotpMessage:"Hesabınızı etkinleştirmek için Mobil Kimlik Doğrulama'yı ayarlamanız gerekiyor.",updateProfileMessage:"Hesabınızı etkinleştirmek için kullanıcı profilinizi güncellemeniz gerekiyor.",updatePasswordMessage:"Hesabınızı etkinleştirmek için şifrenizi değiştirmeniz gerekiyor.",resetPasswordMessage:"Şifreni değiştirmelisin.",verifyEmailMessage:"Hesabınızı etkinleştirmek için e-posta adresinizi doğrulamanız gerekiyor.",linkIdpMessage:"Hesabınızı {0} ile bağlamak için e-posta adresinizi doğrulamanız gerekiyor.",emailSentMessage:"Daha fazla talimatla kısa sürede bir e-posta almalısınız.",emailSendErrorMessage:"E-posta gönderilemedi, lütfen daha sonra tekrar deneyin.",accountUpdatedMessage:"Hesabın güncellendi.",accountPasswordUpdatedMessage:"Şifreniz güncellenmiştir.",delegationCompleteHeader:"Giriş başarılı",delegationCompleteMessage:"Bu tarayıcı penceresini kapatabilir ve konsol uygulamanıza geri dönebilirsiniz.",delegationFailedHeader:"Giriş başarısız",delegationFailedMessage:"Bu tarayıcı penceresini kapatabilir ve konsol uygulamanıza geri dönüp tekrar giriş yapmayı deneyebilirsiniz..",noAccessMessage:"Erişim yok",invalidPasswordMinLengthMessage:"Geçersiz Şifre: En az {0} karakter uzunluğunda olmalı.",invalidPasswordMinDigitsMessage:"Geçersiz Şifre: En az {0} sayı(lar) içermelidir.",invalidPasswordMinLowerCaseCharsMessage:"Geçersiz Şifre : En az {0} küçük harf içermelidir.",invalidPasswordMinUpperCaseCharsMessage:"Geçersiz Şifre: En az {0} büyük harf içermelidir.",invalidPasswordMinSpecialCharsMessage:"Geçersiz Şifre: En az {0} özel karakter içermelidir.",invalidPasswordNotUsernameMessage:"Geçersiz Şifre: Kullanıcı adıyla aynı olamaz.",invalidPasswordRegexPatternMessage:"Geçersiz Şifre: Regex Patternine uygun değil.",invalidPasswordHistoryMessage:"Geçersiz Şifre: Son {0} şifreden biri olamaz.",invalidPasswordGenericMessage:"Geçersiz Şifre: yeni şifre şifre politikalarıyla eşleşmiyor.",failedToProcessResponseMessage:"Yanıt işlenemedi",httpsRequiredMessage:"HTTPS zorunlu",realmNotEnabledMessage:"Realm aktif değil",invalidRequestMessage:"Geçersiz İstek",failedLogout:"Çıkış başarısız",unknownLoginRequesterMessage:"Bilinmeyen giriş isteği",loginRequesterNotEnabledMessage:"Giriş istemi etkin değil",bearerOnlyMessage:"Yalnızca taşıyıcı uygulamaları tarayıcı girişini başlatmaya izinli değil",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çersiz yönlendirme url'i",unsupportedNameIdFormatMessage:"Desteklenmeyen NameIDFormat",invalidRequesterMessage:"Geçersiz istek",registrationNotAllowedMessage:"Kayıt yapılamaz",resetCredentialNotAllowedMessage:"Sıfırlamasına izin verilmiyor",permissionNotApprovedMessage:"İzin onaylanmadı.",noRelayStateInResponseMessage:"Kimlik sağlayıcıdan yanıt olarak geçiş durumu yok.",insufficientPermissionMessage:"Kimliklerin bağlanması için yetersiz izinler.",couldNotProceedWithAuthenticationRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği ile devam edilemedi.",couldNotObtainTokenMessage:"Kimlik sağlayıcıdan token alınamadı.",unexpectedErrorRetrievingTokenMessage:"Kimlik sağlayıcıdan token alırken beklenmeyen bir hata oluştu.",unexpectedErrorHandlingResponseMessage:"Kimlik sağlayıcıdan yanıt alınırken beklenmeyen bir hata oluştu.",identityProviderAuthenticationFailedMessage:"Kimlik doğrulama başarısız oldu. Kimlik sağlayıcıyla kimlik doğrulaması yapılamadı.",couldNotSendAuthenticationRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği gönderilemedi.",unexpectedErrorHandlingRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği işlenirken beklenmeyen bir hata oluştu.",invalidAccessCodeMessage:"Geçersiz giriş kodu.",sessionNotActiveMessage:"Oturum etkin değil.",invalidCodeMessage:"Bir hata oluştu, lütfen başvurunuz aracılığıyla tekrar giriş yapın.",identityProviderUnexpectedErrorMessage:"Kimlik sağlayıcıyla kimlik doğrulaması yapılırken beklenmeyen bir hata oluştu",identityProviderNotFoundMessage:"Tanımlayıcı ile kimlik sağlayıcı bulunamadı.",identityProviderLinkSuccess:"E-postanızı başarıyla doğruladınız. Lütfen orijinal tarayıcınıza geri dönün ve giriş yapın.",staleCodeMessage:"Bu sayfa artık geçerli değil, lütfen uygulamanıza geri dönün ve tekrar giriş yapın",realmSupportsNoCredentialsMessage:"Realm herhangi bir kimlik bilgisi türünü desteklemiyor.",identityProviderNotUniqueMessage:"Realm çoklu kimlik sağlayıcılarını destekler. Kimlik doğrulamak için hangi kimlik sağlayıcısının kullanılması gerektiğini belirleyemedi.",emailVerifiedMessage:"E-posta adresiniz doğrulandı.",staleEmailVerificationLink:"Tıkladığınız bağlantı eski bir bağlantıdır ve artık geçerli değil. Belki de e-postanızı zaten doğruladınız.",identityProviderAlreadyLinkedMessage:"{0} tarafından döndürülen birleşik kimlik, başka bir kullanıcıyla zaten bağlantılı.",confirmAccountLinking:"{1} kimlik sağlayıcısının hesabını {0} hesabınızla ilişkilendirmeyi onaylayın.",confirmEmailAddressVerification:"{0} e-posta adresinin geçerliliğini onaylayın.",confirmExecutionOfActions:"Aşağıdaki eylemleri gerçekleştirin",backToApplication:"« Uygulamaya Dön",missingParameterMessage:"Eksik parametreler: {0}",clientNotFoundMessage:"İstemci Bulunamadı.",clientDisabledMessage:"İstemci engelli.",invalidParameterMessage:"Geçersiz Paremetreler: {0}",alreadyLoggedIn:"Zaten giriş yaptınız.",differentUserAuthenticated:"Bu oturumda zaten farklı kullanıcı ' {0} ' olarak doğrulanmışsınız. Lütfen önce çıkış yapınız.",brokerLinkingSessionExpired:"İstenen broker hesabı bağlanıyor, ancak mevcut oturum artık geçerli değil.",proceedWithAction:"» Devam etmek için buraya tıklayın","requiredAction.CONFIGURE_TOTP":"OTP Ayarla","requiredAction.terms_and_conditions":"Şartlar ve Koşullar","requiredAction.UPDATE_PASSWORD":"Şifre güncelle","requiredAction.UPDATE_PROFILE":"Profili Güncelle","requiredAction.VERIFY_EMAIL":"E-mail'i doğrula",doX509Login:"Olarak giriş yapacaksınız:",clientCertificate:"X509 istemci sertifikası:",noCertificate:"[Sertifika Yok]",pageNotFound:"Sayfa Bulunamadı",internalServerError:"Bir iç sunucu hatası oluştu","console-username":"Kullanıcı adı:","console-password":"Parola:","console-otp":"Tek seferlik şifre:","console-new-password":"Yeni şifre:","console-confirm-password":"Şifreyi Onayla:","console-update-password":"Şifrenizin güncellenmesi gerekiyor.","console-verify-email":"E-posta adresinizi doğrulamanız gerekiyor. Bir doğrulama kodu içeren {0} adresine bir e-posta gönderildi. Lütfen bu kodu aşağıdaki girdiye giriniz.","console-email-code":"E-posta Kodu:","console-accept-terms":"Şartları kabul et? [e/h]:","console-accept":"e",readOnlyUsernameMessage:"Yazma korumalı olduğundan kullanıcı adınızı değiştiremezsiniz."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[2954],{"./dist/login/i18n/baseMessages/tr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Oturum aç",doRegister:"Kayıt ol",doCancel:"İptal et",doSubmit:"Gönder",doYes:"Evet",doNo:"Hayır",doContinue:"Devam et",doIgnore:"Yoksay",doAccept:"Kabul Et",doDecline:"Reddet",doForgotPassword:"Parolanızı mı unuttunuz?",doClickHere:"Buraya Tıklayın",doImpersonate:"Kişiselleştir",kerberosNotConfigured:"Kerberos Tanımlanmamış",kerberosNotConfiguredTitle:"Kerberos Tanımlanmamış",bypassKerberosDetail:"Ya Kerberos ile giriş yapmadınız veya tarayıcınız Kerberos giriş için ayarlanmamış. Diğer yollarla giriş yapmak için lütfen devam'a tıklayın",kerberosNotSetUp:"Kerberos kurulmadı. Giriş yapamazsın.",registerTitle:"Kayıt ol",loginTitle:"{0} adresinde oturum açın",loginTitleHtml:"{0}",impersonateTitle:"{0} Kullanıcı kimliğine bürün",impersonateTitleHtml:"{0} Kullanıcı kimliğine bürün",realmChoice:"Realm",unknownUser:"Bilinmeyen kullanıcı",loginTotpTitle:"Mobil Kimlik Doğrulama Kurulumu",loginProfileTitle:"Hesap bilgilerini Güncelle",loginTimeout:"Giriş yapmak çok uzun sürdü. Giriş süreci baştan başlayacak.",oauthGrantTitle:"{0} adresine Erişim Ver",oauthGrantTitleHtml:"{0}",errorTitle:"Üzgünüz...",errorTitleHtml:"Üzgünüz ...",emailVerifyTitle:"Eposta Doğrulama",emailForgotTitle:"Parolanızı mı unuttunuz?",updatePasswordTitle:"Şifre güncelle",codeSuccessTitle:"Başarılı işlem kodu",codeErrorTitle:"Hatalı işlem kodu: {0}",displayUnsupported:"İstenen gösterim türü desteklenmiyor",browserRequired:"Giriş için taryıcı gerekli",browserContinue:"Girişe devam etmek için tarayıcı gerekli",browserContinuePrompt:"Tarayıcı aç ve girişe devam et? [e/h]:",browserContinueAnswer:"h",termsTitle:"Şartlar ve koşullar",termsText:"

Tanımlanacak şartlar ve koşullar

",termsPlainText:"Tanımlanacak şartlar ve koşullar.",recaptchaFailed:"Geçersiz Recaptcha",recaptchaNotConfigured:"Recaptcha gerekli, ancak yapılandırılmamış",consentDenied:"Onay reddedildi.",noAccount:"Yeni kullanıcı?",username:"Kullanıcı Adı",usernameOrEmail:"Kullanıcı adı veya E-mail",firstName:"Ad",givenName:"Ad",fullName:"Ad Soyad",lastName:"Soyad",familyName:"Soyad",email:"E-Mail",password:"Şifre",passwordConfirm:"Şifre Doğrulama",passwordNew:"Yeni Şifre",passwordNewConfirm:"eni Şifre Doğrulama",rememberMe:"Beni Hatırla",authenticatorCode:"Kimlik Doğrulama Kodu",address:"Adres",street:"Cadde",locality:"Semt",region:"Bölge",postal_code:"Posta Kodu",country:"Ülke",emailVerified:"E-Mail Doğrulandı",gssDelegationCredential:"GSS Yetki Bilgisi",profileScopeConsentText:"Kullanıcı profili",emailScopeConsentText:"E-Mai Adresi",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefon Numarası",offlineAccessScopeConsentText:"Çevrimdışı Erişim",samlRoleListScopeConsentText:"Rollerim",rolesScopeConsentText:"Kullanıcı rolleri",loginTotpIntro:"Bu hesaba erişmek için bir Tek Kullanımlık Şifre oluşturmalısınız.",loginTotpStep1:"Cep telefonunuzda aşağıdaki uygulamalardan birini yükleyin",loginTotpStep2:"Uygulamayı açın ve barkodu tarayın",loginTotpStep3:"Uygulama tarafından sağlanan tek seferlik kodu girin ve kurulumu tamamlamak için Gönder'i tıklayın.",loginTotpManualStep2:"Uygulamayı açın ve anahtarı girin",loginTotpManualStep3:"Uygulama bunları ayarlamaya izin veriyorsa aşağıdaki yapılandırma değerlerini kullanın.",loginTotpUnableToScan:"Taranamıyor?",loginTotpScanBarcode:"Barkod tara?",loginOtpOneTime:"Tek seferlik kod",loginTotpType:"Tip",loginTotpAlgorithm:"Algoritma",loginTotpDigits:"Basamak",loginTotpInterval:"Aralık",loginTotpCounter:"Sayaç","loginTotp.totp":"Zaman Tabanlı","loginTotp.hotp":"Sayaç Tabanlı",oauthGrantRequest:"Bu erişim ayrıcalıkları veriyor musunuz?",inResource:"içinde",emailVerifyInstruction1:"E-posta adresinizi doğrulamak için talimatları içeren bir e-posta size gönderildi.",emailVerifyInstruction2:"E-postanızda doğrulama kodu almadınız mı?",emailVerifyInstruction3:"e-postayı yeniden göndermek için.",emailLinkIdpTitle:"Bağlantı {0}",emailLinkIdp1:"{1} hesabını {2} hesabınıza bağlayan talimatları içeren bir e-posta size gönderildi.",emailLinkIdp2:"E-postanızda doğrulama kodu almadınız mı?",emailLinkIdp3:"e-postayı yeniden göndermek için.",emailLinkIdp4:"E-postayı farklı tarayıcıda zaten doğruladıysanız",emailLinkIdp5:"devam etmek.",backToLogin:"« Giriş'e geri dön",emailInstruction:"Kullanıcı adınızı veya e-posta adresinizi girin ve yeni bir şifre oluşturmaya ilişkin talimatları size göndereceğiz.",copyCodeInstruction:"Lütfen bu kodu kopyalayın ve uygulamanıza yapıştırın:",pageExpiredTitle:"Sayfanın Süresi Doldu",pageExpiredMsg1:"Giriş işlemini yeniden başlatmak için",pageExpiredMsg2:"Giriş işlemine devam etmek için",personalInfo:"Kişisel bilgi:",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Realm Oluştur","role_create-client":"Create client","role_view-realm":"Realm görüntüle","role_view-users":"Kullanıcı görüntüle","role_view-applications":"Uygulamarı gör","role_view-clients":"Clients görüntüle","role_view-events":"Events görüntüle","role_view-identity-providers":"Kimlik sağlayıcılarını görüntüle","role_manage-realm":"Realm Yönet","role_manage-users":"Kullanıcıları Yönet","role_manage-applications":"Uygulamaları Yönet","role_manage-identity-providers":"Kimlik Sağlayıcılarını Yönet","role_manage-clients":"Clients Yönet","role_manage-events":"Events Yönet","role_view-profile":"Profil görüntüle","role_manage-account":"Hesap Yönet","role_manage-account-links":"Hesap bağlantılarını yönet","role_read-token":"Token oku","role_offline-access":"Çevrimdışı erişim",client_account:"Hesap","client_security-admin-console":"Güvenlik Yönetici Konsolu","client_admin-cli":"Admin CLI","client_realm-management":"Realm Yönet",client_broker:"Broker",invalidUserMessage:"Geçersiz kullanıcı adı veya şifre.",invalidEmailMessage:"Geçersiz e-posta adresi.",accountDisabledMessage:"Hesap devre dışı, yönetici ile iletişime geçin.",accountTemporarilyDisabledMessage:"Hesabınız geçici olarak kilitlendi, lütfen yöneticiyle iletişime geçin veya daha sonra tekrar deneyin.",expiredCodeMessage:"Oturum zaman aşımına uğradı. Lütfen tekrar giriş yapın.",expiredActionMessage:"Eylem süresi doldu. Lütfen şimdi giriş yapmaya devam edin.",expiredActionTokenNoSessionMessage:"Eylemin süresi doldu.",expiredActionTokenSessionExistsMessage:"Eylem süresi doldu. Lütfen tekrar başlayın.",missingFirstNameMessage:"Lütfen ilk adı belirtin.",missingLastNameMessage:"Lütfen soyadı belirtin.",missingEmailMessage:"Lütfen email belirtin.",missingUsernameMessage:"Lütfen kullanıcı adını belirtin.",missingPasswordMessage:"Lütfen şifre belirtin.",missingTotpMessage:"Lütfen kimlik doğrulama kodunu belirtin.",notMatchPasswordMessage:"Şifreler eşleşmiyor.",invalidPasswordExistingMessage:"Mevcut şifre geçersiz.",invalidPasswordBlacklistedMessage:"Geçersiz şifre: şifre kara listeye alındı.",invalidPasswordConfirmMessage:"Şifre onayı eşleşmiyor.",invalidTotpMessage:"Geçersiz kimlik doğrulama kodu.",usernameExistsMessage:"Kullanıcı adı zaten var.",emailExistsMessage:"Bu e-posta zaten var.",federatedIdentityExistsMessage:"{0} {1} kullanıcı zaten var. Hesabı bağlamak için lütfen hesap yönetimine giriş yapın.",confirmLinkIdpTitle:"Bu Hesap Zaten Mevcut",federatedIdentityConfirmLinkMessage:"{0} {1} kullanıcı zaten var. Nasıl devam etmek istersin?",confirmLinkIdpReviewProfile:"Profili gözden geçir",confirmLinkIdpContinue:"Mevcut hesaba ekle",configureTotpMessage:"Hesabınızı etkinleştirmek için Mobil Kimlik Doğrulama'yı ayarlamanız gerekiyor.",updateProfileMessage:"Hesabınızı etkinleştirmek için kullanıcı profilinizi güncellemeniz gerekiyor.",updatePasswordMessage:"Hesabınızı etkinleştirmek için şifrenizi değiştirmeniz gerekiyor.",resetPasswordMessage:"Şifreni değiştirmelisin.",verifyEmailMessage:"Hesabınızı etkinleştirmek için e-posta adresinizi doğrulamanız gerekiyor.",linkIdpMessage:"Hesabınızı {0} ile bağlamak için e-posta adresinizi doğrulamanız gerekiyor.",emailSentMessage:"Daha fazla talimatla kısa sürede bir e-posta almalısınız.",emailSendErrorMessage:"E-posta gönderilemedi, lütfen daha sonra tekrar deneyin.",accountUpdatedMessage:"Hesabın güncellendi.",accountPasswordUpdatedMessage:"Şifreniz güncellenmiştir.",delegationCompleteHeader:"Giriş başarılı",delegationCompleteMessage:"Bu tarayıcı penceresini kapatabilir ve konsol uygulamanıza geri dönebilirsiniz.",delegationFailedHeader:"Giriş başarısız",delegationFailedMessage:"Bu tarayıcı penceresini kapatabilir ve konsol uygulamanıza geri dönüp tekrar giriş yapmayı deneyebilirsiniz..",noAccessMessage:"Erişim yok",invalidPasswordMinLengthMessage:"Geçersiz Şifre: En az {0} karakter uzunluğunda olmalı.",invalidPasswordMinDigitsMessage:"Geçersiz Şifre: En az {0} sayı(lar) içermelidir.",invalidPasswordMinLowerCaseCharsMessage:"Geçersiz Şifre : En az {0} küçük harf içermelidir.",invalidPasswordMinUpperCaseCharsMessage:"Geçersiz Şifre: En az {0} büyük harf içermelidir.",invalidPasswordMinSpecialCharsMessage:"Geçersiz Şifre: En az {0} özel karakter içermelidir.",invalidPasswordNotUsernameMessage:"Geçersiz Şifre: Kullanıcı adıyla aynı olamaz.",invalidPasswordRegexPatternMessage:"Geçersiz Şifre: Regex Patternine uygun değil.",invalidPasswordHistoryMessage:"Geçersiz Şifre: Son {0} şifreden biri olamaz.",invalidPasswordGenericMessage:"Geçersiz Şifre: yeni şifre şifre politikalarıyla eşleşmiyor.",failedToProcessResponseMessage:"Yanıt işlenemedi",httpsRequiredMessage:"HTTPS zorunlu",realmNotEnabledMessage:"Realm aktif değil",invalidRequestMessage:"Geçersiz İstek",failedLogout:"Çıkış başarısız",unknownLoginRequesterMessage:"Bilinmeyen giriş isteği",loginRequesterNotEnabledMessage:"Giriş istemi etkin değil",bearerOnlyMessage:"Yalnızca taşıyıcı uygulamaları tarayıcı girişini başlatmaya izinli değil",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çersiz yönlendirme url'i",unsupportedNameIdFormatMessage:"Desteklenmeyen NameIDFormat",invalidRequesterMessage:"Geçersiz istek",registrationNotAllowedMessage:"Kayıt yapılamaz",resetCredentialNotAllowedMessage:"Sıfırlamasına izin verilmiyor",permissionNotApprovedMessage:"İzin onaylanmadı.",noRelayStateInResponseMessage:"Kimlik sağlayıcıdan yanıt olarak geçiş durumu yok.",insufficientPermissionMessage:"Kimliklerin bağlanması için yetersiz izinler.",couldNotProceedWithAuthenticationRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği ile devam edilemedi.",couldNotObtainTokenMessage:"Kimlik sağlayıcıdan token alınamadı.",unexpectedErrorRetrievingTokenMessage:"Kimlik sağlayıcıdan token alırken beklenmeyen bir hata oluştu.",unexpectedErrorHandlingResponseMessage:"Kimlik sağlayıcıdan yanıt alınırken beklenmeyen bir hata oluştu.",identityProviderAuthenticationFailedMessage:"Kimlik doğrulama başarısız oldu. Kimlik sağlayıcıyla kimlik doğrulaması yapılamadı.",couldNotSendAuthenticationRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği gönderilemedi.",unexpectedErrorHandlingRequestMessage:"Kimlik sağlayıcıya kimlik doğrulama isteği işlenirken beklenmeyen bir hata oluştu.",invalidAccessCodeMessage:"Geçersiz giriş kodu.",sessionNotActiveMessage:"Oturum etkin değil.",invalidCodeMessage:"Bir hata oluştu, lütfen başvurunuz aracılığıyla tekrar giriş yapın.",identityProviderUnexpectedErrorMessage:"Kimlik sağlayıcıyla kimlik doğrulaması yapılırken beklenmeyen bir hata oluştu",identityProviderNotFoundMessage:"Tanımlayıcı ile kimlik sağlayıcı bulunamadı.",identityProviderLinkSuccess:"E-postanızı başarıyla doğruladınız. Lütfen orijinal tarayıcınıza geri dönün ve giriş yapın.",staleCodeMessage:"Bu sayfa artık geçerli değil, lütfen uygulamanıza geri dönün ve tekrar giriş yapın",realmSupportsNoCredentialsMessage:"Realm herhangi bir kimlik bilgisi türünü desteklemiyor.",identityProviderNotUniqueMessage:"Realm çoklu kimlik sağlayıcılarını destekler. Kimlik doğrulamak için hangi kimlik sağlayıcısının kullanılması gerektiğini belirleyemedi.",emailVerifiedMessage:"E-posta adresiniz doğrulandı.",staleEmailVerificationLink:"Tıkladığınız bağlantı eski bir bağlantıdır ve artık geçerli değil. Belki de e-postanızı zaten doğruladınız.",identityProviderAlreadyLinkedMessage:"{0} tarafından döndürülen birleşik kimlik, başka bir kullanıcıyla zaten bağlantılı.",confirmAccountLinking:"{1} kimlik sağlayıcısının hesabını {0} hesabınızla ilişkilendirmeyi onaylayın.",confirmEmailAddressVerification:"{0} e-posta adresinin geçerliliğini onaylayın.",confirmExecutionOfActions:"Aşağıdaki eylemleri gerçekleştirin",backToApplication:"« Uygulamaya Dön",missingParameterMessage:"Eksik parametreler: {0}",clientNotFoundMessage:"İstemci Bulunamadı.",clientDisabledMessage:"İstemci engelli.",invalidParameterMessage:"Geçersiz Paremetreler: {0}",alreadyLoggedIn:"Zaten giriş yaptınız.",differentUserAuthenticated:"Bu oturumda zaten farklı kullanıcı ' {0} ' olarak doğrulanmışsınız. Lütfen önce çıkış yapınız.",brokerLinkingSessionExpired:"İstenen broker hesabı bağlanıyor, ancak mevcut oturum artık geçerli değil.",proceedWithAction:"» Devam etmek için buraya tıklayın","requiredAction.CONFIGURE_TOTP":"OTP Ayarla","requiredAction.TERMS_AND_CONDITIONS":"Şartlar ve Koşullar","requiredAction.UPDATE_PASSWORD":"Şifre güncelle","requiredAction.UPDATE_PROFILE":"Profili Güncelle","requiredAction.VERIFY_EMAIL":"E-mail'i doğrula",doX509Login:"Olarak giriş yapacaksınız:",clientCertificate:"X509 istemci sertifikası:",noCertificate:"[Sertifika Yok]",pageNotFound:"Sayfa Bulunamadı",internalServerError:"Bir iç sunucu hatası oluştu","console-username":"Kullanıcı adı:","console-password":"Parola:","console-otp":"Tek seferlik şifre:","console-new-password":"Yeni şifre:","console-confirm-password":"Şifreyi Onayla:","console-update-password":"Şifrenizin güncellenmesi gerekiyor.","console-verify-email":"E-posta adresinizi doğrulamanız gerekiyor. Bir doğrulama kodu içeren {0} adresine bir e-posta gönderildi. Lütfen bu kodu aşağıdaki girdiye giriniz.","console-email-code":"E-posta Kodu:","console-accept-terms":"Şartları kabul et? [e/h]:","console-accept":"e",readOnlyUsernameMessage:"Yazma korumalı olduğundan kullanıcı adınızı değiştiremezsiniz."}}}]); \ No newline at end of file diff --git a/3284.215d30a7.iframe.bundle.js b/3284.215d30a7.iframe.bundle.js new file mode 100644 index 00000000..f56e10c9 --- /dev/null +++ b/3284.215d30a7.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3284],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LogoutConfirm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LogoutConfirm});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LogoutConfirm(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,client=kcContext.client,logoutConfirm=kcContext.logoutConfirm,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("logoutConfirmTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({id:"kc-logout-confirm",className:"content-area"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p",Object.assign({className:"instruction"},{children:msg("logoutConfirmHeader")})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({className:"form-actions",action:url.logoutConfirmAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"hidden",name:"session_code",value:logoutConfirm.code}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{tabIndex:4,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"confirmLogout",id:"kc-logout",type:"submit",value:msgStr("doLogout")})}))]}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-info-message"},{children:!logoutConfirm.skipLink&&client.baseUrl&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",{href:client.baseUrl,dangerouslySetInnerHTML:{__html:msgStr("backToApplication")}})})}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/3284.3365e0a9.iframe.bundle.js b/3284.3365e0a9.iframe.bundle.js deleted file mode 100644 index 4e2b7396..00000000 --- a/3284.3365e0a9.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3284],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LogoutConfirm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LogoutConfirm});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LogoutConfirm(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,client=kcContext.client,logoutConfirm=kcContext.logoutConfirm,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("logoutConfirmTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({id:"kc-logout-confirm",className:"content-area"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p",Object.assign({className:"instruction"},{children:msg("logoutConfirmHeader")})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({className:"form-actions",action:url.logoutConfirmAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"hidden",name:"session_code",value:logoutConfirm.code}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{tabIndex:4,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"confirmLogout",id:"kc-logout",type:"submit",value:msgStr("doLogout")})}))]}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-info-message"},{children:!logoutConfirm.skipLink&&client.baseUrl&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",{href:client.baseUrl,dangerouslySetInnerHTML:{__html:msgStr("backToApplication")}})})}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/3304.fe252a8f.iframe.bundle.js b/3304.e408e716.iframe.bundle.js similarity index 99% rename from 3304.fe252a8f.iframe.bundle.js rename to 3304.e408e716.iframe.bundle.js index d1cef176..110c16a4 100644 --- a/3304.fe252a8f.iframe.bundle.js +++ b/3304.e408e716.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3304],{"./dist/account/i18n/baseMessages/lt.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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 +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3304],{"./dist/account/i18n/baseMessages/lt.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/3612.1f75f1b2.iframe.bundle.js b/3612.1f75f1b2.iframe.bundle.js new file mode 100644 index 00000000..34e55edb --- /dev/null +++ b/3612.1f75f1b2.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3612],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/SelectAuthenticator.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>SelectAuthenticator});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js"),react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/react/index.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/tools/useConstCallback.js");function SelectAuthenticator(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,url=kcContext.url,auth=kcContext.auth,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,selectCredentialsForm=(0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null),authExecIdInput=(0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null),submitForm=(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__.O)((function(){var _a;null===(_a=selectCredentialsForm.current)||void 0===_a||_a.submit()})),onSelectedAuthenticator=(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__.O)((function(event){var authExecId=event.currentTarget.dataset.authExecId;authExecIdInput.current&&authExecId&&(authExecIdInput.current.value=authExecId,submitForm())}));return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginChooseAuthenticator")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-credential-form",className:getClassName("kcFormClass"),ref:selectCredentialsForm,action:url.loginAction,method:"post"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListClass")},{children:[auth.authenticationSelections.map((function(authenticationSelection,index){var _a;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({style:{cursor:"pointer"},onClick:onSelectedAuthenticator,"data-auth-exec-id":authenticationSelection.authExecId,className:getClassName("kcSelectAuthListItemInfoClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemLeftClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName(null!==(_a=authenticationSelection.iconCssClass)&&void 0!==_a?_a:"kcAuthenticatorDefaultClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemBodyClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListItemDescriptionClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemHeadingClass")},{children:msg(authenticationSelection.displayName)})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemHelpTextClass")},{children:msg(authenticationSelection.helpText)}))]}))}))]}))}),index)})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"authexec-hidden-input",name:"authenticationExecution",ref:authExecIdInput})]}))}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/3612.5744a25c.iframe.bundle.js b/3612.5744a25c.iframe.bundle.js deleted file mode 100644 index a2c5e8be..00000000 --- a/3612.5744a25c.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3612],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/SelectAuthenticator.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>SelectAuthenticator});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js"),react__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./node_modules/react/index.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/tools/useConstCallback.js");function SelectAuthenticator(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,url=kcContext.url,auth=kcContext.auth,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,selectCredentialsForm=(0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null),authExecIdInput=(0,react__WEBPACK_IMPORTED_MODULE_4__.useRef)(null),submitForm=(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__.O)((function(){var _a;null===(_a=selectCredentialsForm.current)||void 0===_a||_a.submit()})),onSelectedAuthenticator=(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_5__.O)((function(event){var authExecId=event.currentTarget.dataset.authExecId;authExecIdInput.current&&authExecId&&(authExecIdInput.current.value=authExecId,submitForm())}));return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginChooseAuthenticator")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-credential-form",className:getClassName("kcFormClass"),ref:selectCredentialsForm,action:url.loginAction,method:"post"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListClass")},{children:[auth.authenticationSelections.map((function(authenticationSelection,index){var _a;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({style:{cursor:"pointer"},onClick:onSelectedAuthenticator,"data-auth-exec-id":authenticationSelection.authExecId,className:getClassName("kcSelectAuthListItemInfoClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemLeftClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName(null!==(_a=authenticationSelection.iconCssClass)&&void 0!==_a?_a:"kcAuthenticatorDefaultClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemBodyClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcSelectAuthListItemDescriptionClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemHeadingClass")},{children:msg(authenticationSelection.displayName)})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcSelectAuthListItemHelpTextClass")},{children:msg(authenticationSelection.helpText)}))]}))}))]}))}),index)})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"authexec-hidden-input",name:"authenticationExecution",ref:authExecIdInput})]}))}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/3644.d0a7b38f.iframe.bundle.js b/3644.877ae336.iframe.bundle.js similarity index 79% rename from 3644.d0a7b38f.iframe.bundle.js rename to 3644.877ae336.iframe.bundle.js index 215a8bca..25984a53 100644 --- a/3644.d0a7b38f.iframe.bundle.js +++ b/3644.877ae336.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3644],{"./dist/login/i18n/baseMessages/pt-BR.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Entrar",doRegister:"Cadastre-se",doCancel:"Cancelar",doSubmit:"Ok",doBack:"Voltar",doYes:"Sim",doNo:"Não",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ê não tem permissões para apagar a sua própria conta, entre em contato com um administrador.",kerberosNotConfigured:"Kerberos Não Configurado",kerberosNotConfiguredTitle:"Kerberos Não Configurado",bypassKerberosDetail:"Ou você não possui uma sessão Kerberos ou o seu navegador não está configurado para usar o acesso do Kerberos. Por favor, clique em continuar para fazer o login no através de outros meios",kerberosNotSetUp:"Kerberos não está configurado. Você não pode acessar a aplicação.",registerTitle:"Registre-se",loginAccountTitle:"Entrar na sua conta",loginTitle:"Entrar em {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Personificar Usuário",impersonateTitleHtml:"{0} Personificar Usuário",realmChoice:"Domínio",unknownUser:"Usuário desconhecido",loginTotpTitle:"Configuração do autenticador móvel",loginProfileTitle:"Atualizar Informações da Conta",loginTimeout:"Você demorou muito para entrar. Por favor, recomece o processo de login.",oauthGrantTitle:"Conceder acesso a {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Sentimos muito...",errorTitleHtml:"Sentimos muito ...",emailVerifyTitle:"Verificação de endereço de e-mail",emailForgotTitle:"Esqueceu sua senha?",updatePasswordTitle:"Atualizar senha",codeSuccessTitle:"Código de sucesso",codeErrorTitle:"Código de erro: {0}",displayUnsupported:"Tipo de exibição solicitado não suportado",browserRequired:"Navegador necessário para realizar acesso",browserContinue:"Navegador necessário para concluir o login",browserContinuePrompt:"Abrir navegador e continuar o login? [s/n]:",browserContinueAnswer:"s",termsTitle:"Termos e Condições",termsText:"

Termos e condições a serem definidos

",termsPlainText:"Termos e condições a serem definidos.",recaptchaFailed:"Recaptcha Inválido",recaptchaNotConfigured:"O recaptcha é necessário, mas não foi configurado",consentDenied:"Consentimento negado.",noAccount:"Novo usuário?",username:"Nome de usuário",usernameOrEmail:"Nome de usuário ou e-mail",firstName:"Primeiro nome",givenName:"Primeiro nome",fullName:"Nome completo",lastName:"Sobrenome",familyName:"Sobrenome",email:"Endereço de e-mail",password:"Senha",passwordConfirm:"Confirme a senha",passwordNew:"Nova senha",passwordNewConfirm:"Confirmação de Nova Senha",rememberMe:"Mantenha-me conectado",authenticatorCode:"Código autenticador",address:"Endereço",street:"Logradouro",locality:"Cidade ou localidade",region:"Estado",postal_code:"CEP",country:"País",emailVerified:"Endereço de e-mail verificado",website:"Página da web",phoneNumber:"Número de telefone",phoneNumberVerified:"Número de telefone verificado",gender:"Gênero",birthday:"Data de nascimento",zoneinfo:"Zona horária",gssDelegationCredential:"Delegação de Credenciais GSS",logoutOtherSessions:"Sair dos outros dispositivos",profileScopeConsentText:"Perfil de usuário",emailScopeConsentText:"Endereço de e-mail",addressScopeConsentText:"Endereço",phoneScopeConsentText:"Número de telefone",offlineAccessScopeConsentText:"Acesso Offline",samlRoleListScopeConsentText:"Meus Perfis de Acesso",rolesScopeConsentText:"Perfis de acesso do usuário",restartLoginTooltip:"Reiniciar o login",loginTotpIntro:"Você precisa configurar um gerador de código de uso único para acessar esta conta",loginTotpStep1:"Instale um dos seguintes aplicativos no seu celular:",loginTotpStep2:"Abra o aplicativo e escaneie o código QR:",loginTotpStep3:"Digite o código de uso único fornecido pelo aplicativo e clique em Ok para concluir a configuração.",loginTotpStep3DeviceName:"Forneça um nome de dispositivo para ajudá-lo a gerenciar seus dispositivos de autenticação de dois fatores.",loginTotpManualStep2:"Abra o aplicativo e digite a chave:",loginTotpManualStep3:"Use os seguintes valores de configuração se o aplicativo permitir defini-los:",loginTotpUnableToScan:"Não foi possível ler o código QR?",loginTotpScanBarcode:"Escanear código QR?",loginCredential:"Credencial",loginOtpOneTime:"Código de uso único",loginTotpType:"Tipo",loginTotpAlgorithm:"Algoritmo",loginTotpDigits:"Dígitos",loginTotpInterval:"Intervalo",loginTotpCounter:"Contador",loginTotpDeviceName:"Nome do dispositivo","loginTotp.totp":"Baseado em tempo","loginTotp.hotp":"Baseado em contador",loginChooseAuthenticator:"Selecione o método de login",oauthGrantRequest:"Você concede esses privilégios de acesso?",inResource:"em",emailVerifyInstruction1:"Um e-mail com instruções para verificar o seu endereço de e-mail foi enviado para você.",emailVerifyInstruction2:"Não recebeu um código de verificação em seu e-mail?",emailVerifyInstruction3:"para reenviar o e-mail.",emailLinkIdpTitle:"Vincular {0}",emailLinkIdp1:"Um e-mail com instruções para vincular a conta {0} {1} com sua conta {2} foi enviado para você.",emailLinkIdp2:"Não recebeu um código de verificação no e-mail?",emailLinkIdp3:"para reenviar o e-mail.",emailLinkIdp4:"Se você já verificou o email em outro navegador",emailLinkIdp5:"para continuar.",backToLogin:"« Voltar ao Login",emailInstruction:"Digite seu nome de usuário ou endereço de e-mail e nós lhe enviaremos instruções sobre como criar uma nova senha.",copyCodeInstruction:"Por favor, copie o código e cole-o em seu aplicativo:",pageExpiredTitle:"A página expirou",pageExpiredMsg1:"Para reiniciar o processo de login",pageExpiredMsg2:"Para continuar o processo de login",personalInfo:"Informações Pessoais:",role_admin:"Admininstrador","role_realm-admin":"Admininstrador do Domínio","role_create-realm":"Criar domínio","role_create-client":"Criar cliente","role_view-realm":"Visualizar domínio","role_view-users":"Visualizar usuários","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ínio","role_manage-users":"Gerenciar usuários","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ções 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ção de Segurança","client_admin-cli":"CLI de Administração","client_realm-management":"Gerenciamento de Domínio",client_broker:"Provedor de Identidade",requiredFields:"Campos obrigatórios",invalidUserMessage:"Nome de usuário ou senha inválida.",invalidUsernameMessage:"Nome de usuário inválido.",invalidUsernameOrEmailMessage:"Nome de usuário ou endereço de e-mail inválido.",invalidPasswordMessage:"Senha inválida.",invalidEmailMessage:"Endereço de e-mail inválido.",accountDisabledMessage:"Conta desativada, por favor, contate um administrador.",accountTemporarilyDisabledMessage:"Conta temporariamente indisponível, por favor, contate um administrador ou tente novamente mais tarde.",expiredCodeMessage:"Tempo de login expirado. Por favor, faça login novamente.",expiredActionMessage:"Ação expirada. Por favor, continue com o login agora.",expiredActionTokenNoSessionMessage:"Ação expirada.",expiredActionTokenSessionExistsMessage:"Ação expirada. Por favor, comece novamente.",missingFirstNameMessage:"Por favor, informe o primeiro nome.",missingLastNameMessage:"Por favor, informe o sobrenome.",missingEmailMessage:"Por favor, informe o endereço de e-mail.",missingUsernameMessage:"Por favor, informe o nome de usuário.",missingPasswordMessage:"Por favor, informe a senha.",missingTotpMessage:"Por favor, informe o código de uso único.",missingTotpDeviceNameMessage:"Por favor, informe o nome do dispositivo.",notMatchPasswordMessage:"As senhas não coincidem.",invalidPasswordExistingMessage:"Senha atual inválida.",invalidPasswordBlacklistedMessage:"Senha inválida, devido a lista de exclusão.",invalidPasswordConfirmMessage:"Senha de confirmação não coincide.",invalidTotpMessage:"Código de uso único inválido.",usernameExistsMessage:"Nome de usuário já existe.",emailExistsMessage:"Endereço de e-mail já existe.",federatedIdentityExistsMessage:"Usuário com {0} {1} já existe. Por favor, entre no gerenciamento de conta para vincular a conta.",federatedIdentityUnavailableMessage:"Usuário {0} autenticado com o provedor de identidade {1} não existe. Por favor, entre em contato com um administrador.",confirmLinkIdpTitle:"Conta já existente",federatedIdentityConfirmLinkMessage:"Usuário com {0} {1} já existe. Como você quer continuar?",federatedIdentityConfirmReauthenticateMessage:"Autenticar para vincular sua conta com {0}",nestedFirstBrokerFlowMessage:"O usuário {0} {1} não está vinculado a nenhum usuário conhecido.",confirmLinkIdpReviewProfile:"Revisar informações do perfil",confirmLinkIdpContinue:"Vincular à conta existente",configureTotpMessage:"Você precisa configurar seu celular com o autenticador Mobile para ativar sua conta.",updateProfileMessage:"Você precisa atualizar o seu perfil de usuário para ativar sua conta.",updatePasswordMessage:"Você precisa mudar sua senha para ativar sua conta.",resetPasswordMessage:"Você precisa mudar sua senha.",verifyEmailMessage:"Você precisa verificar o seu endereço de e-mail para ativar sua conta.",linkIdpMessage:"Você precisa confirmar o seu endereço de e-mail para vincular sua conta com {0}.",emailSentMessage:"Você deverá receber um e-mail em breve com mais instruções.",emailSendErrorMessage:"Falha ao enviar e-mail, por favor, tente novamente mais tarde.",accountUpdatedMessage:"Sua conta foi atualizada.",accountPasswordUpdatedMessage:"Sua senha foi atualizada.",delegationCompleteHeader:"Autenticação Bem Sucedida",delegationCompleteMessage:"Você pode fechar esta janela do navegador e voltar ao seu aplicativo.",delegationFailedHeader:"Falha na Autenticação",delegationFailedMessage:"Você pode fechar esta janela do navegador e voltar ao aplicativo e tentar fazer login novamente.",noAccessMessage:"Sem acesso",invalidPasswordMinLengthMessage:"Senha inválida: deve ter pelo menos {0} caracteres.",invalidPasswordMinDigitsMessage:"Senha inválida: deve conter pelo menos {0} número(s).",invalidPasswordMinLowerCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) minúscula(s).",invalidPasswordMinUpperCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) maiúscula(s).",invalidPasswordMinSpecialCharsMessage:"Senha inválida: deve conter pelo menos {0} caractere(s) especial(is).",invalidPasswordNotUsernameMessage:"Senha inválida: não pode ser igual ao nome de usuário",invalidPasswordNotEmailMessage:"Senha inválida: não pode ser igual ao endereço de e-mail.",invalidPasswordRegexPatternMessage:"Senha inválida: não corresponde ao(s) padrão(ões) de expressão regular.",invalidPasswordHistoryMessage:"Senha inválida: não pode ser igual a qualquer uma da(s) última(s) {0} senha(s).",invalidPasswordGenericMessage:"Senha inválida: a nova senha não cumpre as políticas de senha.",failedToProcessResponseMessage:"Falha ao processar a resposta",httpsRequiredMessage:"HTTPS necessário",realmNotEnabledMessage:"Domínio desativado",invalidRequestMessage:"Solicitação inválida",failedLogout:"Falha ao sair",unknownLoginRequesterMessage:"Solicitante de login desconhecido",loginRequesterNotEnabledMessage:"Solicitante de login desativado",bearerOnlyMessage:"Aplicativos configurados como Bearer-Only não têm permissão para iniciar o login pelo navegador",standardFlowDisabledMessage:"O cliente não tem permissão para iniciar o login com o response_type informado. O fluxo padrão está desabilitado para o cliente.",implicitFlowDisabledMessage:"O cliente não tem permissão para iniciar o login com o response_type informado. O fluxo implícito está desabilitado para o cliente.",invalidRedirectUriMessage:"URI de redirecionamento inválido",unsupportedNameIdFormatMessage:"NameIDFormat não suportado",invalidRequesterMessage:"Solicitante inválido",registrationNotAllowedMessage:"Cadastro não é permitido",resetCredentialNotAllowedMessage:"Sem permissão de redefinição de credenciais",permissionNotApprovedMessage:"Permissão não aprovada.",noRelayStateInResponseMessage:"Sem estado de retransmissão na resposta do provedor de identidade.",insufficientPermissionMessage:"Permissões insuficientes para vincular identidades.",couldNotProceedWithAuthenticationRequestMessage:"Não foi possível proceder com a solicitação de autenticação ao provedor de identidade.",couldNotObtainTokenMessage:"Não foi possível 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ção. Não foi possível autenticar com o provedor de identidade.",couldNotSendAuthenticationRequestMessage:"Não foi possível enviar a solicitação de autenticação ao provedor de identidade.",unexpectedErrorHandlingRequestMessage:"Erro inesperado ao tratar o pedido de autenticação ao provedor de identidade.",invalidAccessCodeMessage:"Código de acesso inválido.",sessionNotActiveMessage:"Sessão inativa.",invalidCodeMessage:"Um erro correu, por favor, faça login novamente através da aplicação.",identityProviderUnexpectedErrorMessage:"Erro inesperado durante a autenticação com o provedor de identidade",identityProviderMissingStateMessage:"Parâmetro de estado ausente da resposta do provedor de identidades.",identityProviderNotFoundMessage:"Não foi possível encontrar um provedor de identidade com o identificador.",identityProviderLinkSuccess:"O seu endereço de e-mail foi confirmado com sucesso. Por favor, retorne à aba original e continue com o login.",staleCodeMessage:"Esta página não é mais válida. Por favor, volte à aplicação e faça login novamente",realmSupportsNoCredentialsMessage:"O domínio não suporta qualquer tipo de credencial.",credentialSetupRequired:"Não é possível fazer o login, a configuração de credencial é necessária.",identityProviderNotUniqueMessage:"O domínio suporta múltiplos provedores de identidade. Não foi possível determinar qual o provedor de identidade deve ser usado para autenticação.",emailVerifiedMessage:"O seu endereço de e-mail foi confirmado.",staleEmailVerificationLink:"O link em que você clicou é um link antigo e não é mais válido. Talvez você já tenha confirmado o seu endereço de e-mail.",identityProviderAlreadyLinkedMessage:"A conta retornada do {0} já está vinculada a outro usuário.",confirmAccountLinking:"Confirme o vinculação da conta {0} do provedor de identidade {1} à sua conta.",confirmEmailAddressVerification:"Confirme a validade do endereço de e-mail {0}.",confirmExecutionOfActions:"Execute a(s) seguinte(s) ação(ões)",backToApplication:"« Voltar para o aplicativo",missingParameterMessage:"Parâmetros ausentes: {0}",clientNotFoundMessage:"Cliente não encontrado.",clientDisabledMessage:"Cliente desativado.",invalidParameterMessage:"Parâmentro inválido: {0}",alreadyLoggedIn:"Você já está logado.",differentUserAuthenticated:"Você já está autenticado como outro usuário '{0}' nesta sessão. Por favor, finalize a sessão primeiro.",brokerLinkingSessionExpired:"A vinculção de conta do provedor de identidade foi solicitado, mas a sessão atual não é mais válida.",proceedWithAction:"» Clique aqui para continuar","requiredAction.CONFIGURE_TOTP":"Configurar Autenticação de Dois Fatores","requiredAction.terms_and_conditions":"Termos e Condições","requiredAction.UPDATE_PASSWORD":"Atualizar Senha","requiredAction.UPDATE_PROFILE":"Atualizar Perfil","requiredAction.VERIFY_EMAIL":"Verificar Endereço de E-mail",doX509Login:"Você será logado como:",clientCertificate:"Certificado X509 do cliente:",noCertificate:"[Sem Certificado]",pageNotFound:"Página não encontrada",internalServerError:"Ocorreu um erro interno no servidor","console-username":"Nome de usuário:","console-password":"Senha:","console-otp":"Código de uso único:","console-new-password":"Nova Senha:","console-confirm-password":"Confirmação de Senha:","console-update-password":"Você precisa atualizar a sua senha.","console-verify-email":"Você precisa verificar o seu endereço de e-mail. Enviamos um e-mail para {0} que contém um código de verificação. Digite o código enviado no campo abaixo.","console-email-code":"Código do e-mail:","console-accept-terms":"Aceita os Termos? [s/n]:","console-accept":"s","openshift.scope.user_info":"Informações do usuário","openshift.scope.user_check-access":"Informações de acesso do usuário","openshift.scope.user_full":"Acesso Completo","openshift.scope.list-projects":"Listar projetos","saml.post-form.title":"Redirecionamento de Autenticação","saml.post-form.message":"Redirecionando... Por favor, aguarde.","saml.post-form.js-disabled":"O JavaScript está desabilitado. É altamente recomendável habilitá-lo. Clique no botão abaixo para continuar. ","otp-display-name":"Aplicativo Autenticador","otp-help-text":"Insira o código de verificação do aplicativo autenticador.","password-display-name":"Senha","password-help-text":"Faça o login digitando sua senha.","auth-username-form-display-name":"Nome de usuário","auth-username-form-help-text":"Faça o login digitando seu nome de usuário.","auth-username-password-form-display-name":"Nome de usuário e senha","auth-username-password-form-help-text":"Faça o login digitando seu nome de usuário e senha.","webauthn-display-name":"Chave de Segurança","webauthn-help-text":"Use sua chave de segurança para fazer login.","webauthn-passwordless-display-name":"Chave de Segurança","webauthn-passwordless-help-text":"Use sua chave de segurança para fazer login sem senha.","webauthn-login-title":"Login com Chave de Segurança","webauthn-registration-title":"Registrar Chave de Segurança","webauthn-available-authenticators":"Autenticadores disponíveis","webauthn-unsupported-browser-text":"WebAuthn não é suportada pelo seu navegador. Tente outro navegador ou entre em contato com um administrador.","webauthn-error-title":"Erro de Chave de Segurança","webauthn-error-registration":"Falha ao registrar sua Chave de Segurança.","webauthn-error-api-get":"Falha ao autenticar usando a Chave de Segurança.","webauthn-error-different-user":"O primeiro usuário autenticado não corresponde àquele autenticado pela Chave de Segurança.","webauthn-error-auth-verification":"O resultado da autenticação da Chave de Segurança é inválido.
{0}","webauthn-error-register-verification":"O resultado do registro da Chave de Segurança é inválido.
{0}","webauthn-error-user-not-found":"Usuário desconhecido autenticado pela Chave de Segurança.","identity-provider-redirector":"Conecte-se com outro Provedor de Identidade","identity-provider-login-label":"Ou entre com",finalDeletionConfirmation:"Se você apagar a sua conta, ela não poderá ser recuperada. Para manter a sua conta, clique em Cancelar.",irreversibleAction:"Esta ação é irreversível",deleteAccountConfirm:"Confirmação de descadastramento",deletingImplies:"Apagar a sua conta implica em:",errasingData:"Remover todos os seus dados",loggingOutImmediately:"Sair da aplicação imediatamente",accountUnusable:"Qualquer uso subsequente da aplicação não será possível com esta conta",userDeletedSuccessfully:"Usuário excluído com sucesso",readOnlyUsernameMessage:"Você^não pode atualizar o seu nome de usuário, uma vez que é apenas de leitura.","frontchannel-logout.title":"Saindo","frontchannel-logout.message":"Você está saindo dos seguintes aplicativos",logoutConfirmTitle:"Saindo",logoutConfirmHeader:"Você realmente deseja sair?",doLogout:"Sair"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3644],{"./dist/login/i18n/baseMessages/pt-BR.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Entrar",doRegister:"Cadastre-se",doCancel:"Cancelar",doSubmit:"Ok",doBack:"Voltar",doYes:"Sim",doNo:"Não",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ê não tem permissões para apagar a sua própria conta, entre em contato com um administrador.",kerberosNotConfigured:"Kerberos Não Configurado",kerberosNotConfiguredTitle:"Kerberos Não Configurado",bypassKerberosDetail:"Ou você não possui uma sessão Kerberos ou o seu navegador não está configurado para usar o acesso do Kerberos. Por favor, clique em continuar para fazer o login no através de outros meios",kerberosNotSetUp:"Kerberos não está configurado. Você não pode acessar a aplicação.",registerTitle:"Registre-se",loginAccountTitle:"Entrar na sua conta",loginTitle:"Entrar em {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Personificar Usuário",impersonateTitleHtml:"{0} Personificar Usuário",realmChoice:"Domínio",unknownUser:"Usuário desconhecido",loginTotpTitle:"Configuração do autenticador móvel",loginProfileTitle:"Atualizar Informações da Conta",loginTimeout:"Você demorou muito para entrar. Por favor, recomece o processo de login.",oauthGrantTitle:"Conceder acesso a {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Sentimos muito...",errorTitleHtml:"Sentimos muito ...",emailVerifyTitle:"Verificação de endereço de e-mail",emailForgotTitle:"Esqueceu sua senha?",updatePasswordTitle:"Atualizar senha",codeSuccessTitle:"Código de sucesso",codeErrorTitle:"Código de erro: {0}",displayUnsupported:"Tipo de exibição solicitado não suportado",browserRequired:"Navegador necessário para realizar acesso",browserContinue:"Navegador necessário para concluir o login",browserContinuePrompt:"Abrir navegador e continuar o login? [s/n]:",browserContinueAnswer:"s",termsTitle:"Termos e Condições",termsText:"

Termos e condições a serem definidos

",termsPlainText:"Termos e condições a serem definidos.",recaptchaFailed:"Recaptcha Inválido",recaptchaNotConfigured:"O recaptcha é necessário, mas não foi configurado",consentDenied:"Consentimento negado.",noAccount:"Novo usuário?",username:"Nome de usuário",usernameOrEmail:"Nome de usuário ou e-mail",firstName:"Primeiro nome",givenName:"Primeiro nome",fullName:"Nome completo",lastName:"Sobrenome",familyName:"Sobrenome",email:"Endereço de e-mail",password:"Senha",passwordConfirm:"Confirme a senha",passwordNew:"Nova senha",passwordNewConfirm:"Confirmação de Nova Senha",rememberMe:"Mantenha-me conectado",authenticatorCode:"Código autenticador",address:"Endereço",street:"Logradouro",locality:"Cidade ou localidade",region:"Estado",postal_code:"CEP",country:"País",emailVerified:"Endereço de e-mail verificado",website:"Página da web",phoneNumber:"Número de telefone",phoneNumberVerified:"Número de telefone verificado",gender:"Gênero",birthday:"Data de nascimento",zoneinfo:"Zona horária",gssDelegationCredential:"Delegação de Credenciais GSS",logoutOtherSessions:"Sair dos outros dispositivos",profileScopeConsentText:"Perfil de usuário",emailScopeConsentText:"Endereço de e-mail",addressScopeConsentText:"Endereço",phoneScopeConsentText:"Número de telefone",offlineAccessScopeConsentText:"Acesso Offline",samlRoleListScopeConsentText:"Meus Perfis de Acesso",rolesScopeConsentText:"Perfis de acesso do usuário",restartLoginTooltip:"Reiniciar o login",loginTotpIntro:"Você precisa configurar um gerador de código de uso único para acessar esta conta",loginTotpStep1:"Instale um dos seguintes aplicativos no seu celular:",loginTotpStep2:"Abra o aplicativo e escaneie o código QR:",loginTotpStep3:"Digite o código de uso único fornecido pelo aplicativo e clique em Ok para concluir a configuração.",loginTotpStep3DeviceName:"Forneça um nome de dispositivo para ajudá-lo a gerenciar seus dispositivos de autenticação de dois fatores.",loginTotpManualStep2:"Abra o aplicativo e digite a chave:",loginTotpManualStep3:"Use os seguintes valores de configuração se o aplicativo permitir defini-los:",loginTotpUnableToScan:"Não foi possível ler o código QR?",loginTotpScanBarcode:"Escanear código QR?",loginCredential:"Credencial",loginOtpOneTime:"Código de uso único",loginTotpType:"Tipo",loginTotpAlgorithm:"Algoritmo",loginTotpDigits:"Dígitos",loginTotpInterval:"Intervalo",loginTotpCounter:"Contador",loginTotpDeviceName:"Nome do dispositivo","loginTotp.totp":"Baseado em tempo","loginTotp.hotp":"Baseado em contador",loginChooseAuthenticator:"Selecione o método de login",oauthGrantRequest:"Você concede esses privilégios de acesso?",inResource:"em",emailVerifyInstruction1:"Um e-mail com instruções para verificar o seu endereço de e-mail foi enviado para você.",emailVerifyInstruction2:"Não recebeu um código de verificação em seu e-mail?",emailVerifyInstruction3:"para reenviar o e-mail.",emailLinkIdpTitle:"Vincular {0}",emailLinkIdp1:"Um e-mail com instruções para vincular a conta {0} {1} com sua conta {2} foi enviado para você.",emailLinkIdp2:"Não recebeu um código de verificação no e-mail?",emailLinkIdp3:"para reenviar o e-mail.",emailLinkIdp4:"Se você já verificou o email em outro navegador",emailLinkIdp5:"para continuar.",backToLogin:"« Voltar ao Login",emailInstruction:"Digite seu nome de usuário ou endereço de e-mail e nós lhe enviaremos instruções sobre como criar uma nova senha.",copyCodeInstruction:"Por favor, copie o código e cole-o em seu aplicativo:",pageExpiredTitle:"A página expirou",pageExpiredMsg1:"Para reiniciar o processo de login",pageExpiredMsg2:"Para continuar o processo de login",personalInfo:"Informações Pessoais:",role_admin:"Admininstrador","role_realm-admin":"Admininstrador do Domínio","role_create-realm":"Criar domínio","role_create-client":"Criar cliente","role_view-realm":"Visualizar domínio","role_view-users":"Visualizar usuários","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ínio","role_manage-users":"Gerenciar usuários","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ções 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ção de Segurança","client_admin-cli":"CLI de Administração","client_realm-management":"Gerenciamento de Domínio",client_broker:"Provedor de Identidade",requiredFields:"Campos obrigatórios",invalidUserMessage:"Nome de usuário ou senha inválida.",invalidUsernameMessage:"Nome de usuário inválido.",invalidUsernameOrEmailMessage:"Nome de usuário ou endereço de e-mail inválido.",invalidPasswordMessage:"Senha inválida.",invalidEmailMessage:"Endereço de e-mail inválido.",accountDisabledMessage:"Conta desativada, por favor, contate um administrador.",accountTemporarilyDisabledMessage:"Conta temporariamente indisponível, por favor, contate um administrador ou tente novamente mais tarde.",expiredCodeMessage:"Tempo de login expirado. Por favor, faça login novamente.",expiredActionMessage:"Ação expirada. Por favor, continue com o login agora.",expiredActionTokenNoSessionMessage:"Ação expirada.",expiredActionTokenSessionExistsMessage:"Ação expirada. Por favor, comece novamente.",missingFirstNameMessage:"Por favor, informe o primeiro nome.",missingLastNameMessage:"Por favor, informe o sobrenome.",missingEmailMessage:"Por favor, informe o endereço de e-mail.",missingUsernameMessage:"Por favor, informe o nome de usuário.",missingPasswordMessage:"Por favor, informe a senha.",missingTotpMessage:"Por favor, informe o código de uso único.",missingTotpDeviceNameMessage:"Por favor, informe o nome do dispositivo.",notMatchPasswordMessage:"As senhas não coincidem.",invalidPasswordExistingMessage:"Senha atual inválida.",invalidPasswordBlacklistedMessage:"Senha inválida, devido a lista de exclusão.",invalidPasswordConfirmMessage:"Senha de confirmação não coincide.",invalidTotpMessage:"Código de uso único inválido.",usernameExistsMessage:"Nome de usuário já existe.",emailExistsMessage:"Endereço de e-mail já existe.",federatedIdentityExistsMessage:"Usuário com {0} {1} já existe. Por favor, entre no gerenciamento de conta para vincular a conta.",federatedIdentityUnavailableMessage:"Usuário {0} autenticado com o provedor de identidade {1} não existe. Por favor, entre em contato com um administrador.",confirmLinkIdpTitle:"Conta já existente",federatedIdentityConfirmLinkMessage:"Usuário com {0} {1} já existe. Como você quer continuar?",federatedIdentityConfirmReauthenticateMessage:"Autenticar para vincular sua conta com {0}",nestedFirstBrokerFlowMessage:"O usuário {0} {1} não está vinculado a nenhum usuário conhecido.",confirmLinkIdpReviewProfile:"Revisar informações do perfil",confirmLinkIdpContinue:"Vincular à conta existente",configureTotpMessage:"Você precisa configurar seu celular com o autenticador Mobile para ativar sua conta.",updateProfileMessage:"Você precisa atualizar o seu perfil de usuário para ativar sua conta.",updatePasswordMessage:"Você precisa mudar sua senha para ativar sua conta.",resetPasswordMessage:"Você precisa mudar sua senha.",verifyEmailMessage:"Você precisa verificar o seu endereço de e-mail para ativar sua conta.",linkIdpMessage:"Você precisa confirmar o seu endereço de e-mail para vincular sua conta com {0}.",emailSentMessage:"Você deverá receber um e-mail em breve com mais instruções.",emailSendErrorMessage:"Falha ao enviar e-mail, por favor, tente novamente mais tarde.",accountUpdatedMessage:"Sua conta foi atualizada.",accountPasswordUpdatedMessage:"Sua senha foi atualizada.",delegationCompleteHeader:"Autenticação Bem Sucedida",delegationCompleteMessage:"Você pode fechar esta janela do navegador e voltar ao seu aplicativo.",delegationFailedHeader:"Falha na Autenticação",delegationFailedMessage:"Você pode fechar esta janela do navegador e voltar ao aplicativo e tentar fazer login novamente.",noAccessMessage:"Sem acesso",invalidPasswordMinLengthMessage:"Senha inválida: deve ter pelo menos {0} caracteres.",invalidPasswordMinDigitsMessage:"Senha inválida: deve conter pelo menos {0} número(s).",invalidPasswordMinLowerCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) minúscula(s).",invalidPasswordMinUpperCaseCharsMessage:"Senha inválida: deve conter pelo menos {0} letra(s) maiúscula(s).",invalidPasswordMinSpecialCharsMessage:"Senha inválida: deve conter pelo menos {0} caractere(s) especial(is).",invalidPasswordNotUsernameMessage:"Senha inválida: não pode ser igual ao nome de usuário",invalidPasswordNotEmailMessage:"Senha inválida: não pode ser igual ao endereço de e-mail.",invalidPasswordRegexPatternMessage:"Senha inválida: não corresponde ao(s) padrão(ões) de expressão regular.",invalidPasswordHistoryMessage:"Senha inválida: não pode ser igual a qualquer uma da(s) última(s) {0} senha(s).",invalidPasswordGenericMessage:"Senha inválida: a nova senha não cumpre as políticas de senha.",failedToProcessResponseMessage:"Falha ao processar a resposta",httpsRequiredMessage:"HTTPS necessário",realmNotEnabledMessage:"Domínio desativado",invalidRequestMessage:"Solicitação inválida",failedLogout:"Falha ao sair",unknownLoginRequesterMessage:"Solicitante de login desconhecido",loginRequesterNotEnabledMessage:"Solicitante de login desativado",bearerOnlyMessage:"Aplicativos configurados como Bearer-Only não têm permissão para iniciar o login pelo navegador",standardFlowDisabledMessage:"O cliente não tem permissão para iniciar o login com o response_type informado. O fluxo padrão está desabilitado para o cliente.",implicitFlowDisabledMessage:"O cliente não tem permissão para iniciar o login com o response_type informado. O fluxo implícito está desabilitado para o cliente.",invalidRedirectUriMessage:"URI de redirecionamento inválido",unsupportedNameIdFormatMessage:"NameIDFormat não suportado",invalidRequesterMessage:"Solicitante inválido",registrationNotAllowedMessage:"Cadastro não é permitido",resetCredentialNotAllowedMessage:"Sem permissão de redefinição de credenciais",permissionNotApprovedMessage:"Permissão não aprovada.",noRelayStateInResponseMessage:"Sem estado de retransmissão na resposta do provedor de identidade.",insufficientPermissionMessage:"Permissões insuficientes para vincular identidades.",couldNotProceedWithAuthenticationRequestMessage:"Não foi possível proceder com a solicitação de autenticação ao provedor de identidade.",couldNotObtainTokenMessage:"Não foi possível 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ção. Não foi possível autenticar com o provedor de identidade.",couldNotSendAuthenticationRequestMessage:"Não foi possível enviar a solicitação de autenticação ao provedor de identidade.",unexpectedErrorHandlingRequestMessage:"Erro inesperado ao tratar o pedido de autenticação ao provedor de identidade.",invalidAccessCodeMessage:"Código de acesso inválido.",sessionNotActiveMessage:"Sessão inativa.",invalidCodeMessage:"Um erro correu, por favor, faça login novamente através da aplicação.",identityProviderUnexpectedErrorMessage:"Erro inesperado durante a autenticação com o provedor de identidade",identityProviderMissingStateMessage:"Parâmetro de estado ausente da resposta do provedor de identidades.",identityProviderNotFoundMessage:"Não foi possível encontrar um provedor de identidade com o identificador.",identityProviderLinkSuccess:"O seu endereço de e-mail foi confirmado com sucesso. Por favor, retorne à aba original e continue com o login.",staleCodeMessage:"Esta página não é mais válida. Por favor, volte à aplicação e faça login novamente",realmSupportsNoCredentialsMessage:"O domínio não suporta qualquer tipo de credencial.",credentialSetupRequired:"Não é possível fazer o login, a configuração de credencial é necessária.",identityProviderNotUniqueMessage:"O domínio suporta múltiplos provedores de identidade. Não foi possível determinar qual o provedor de identidade deve ser usado para autenticação.",emailVerifiedMessage:"O seu endereço de e-mail foi confirmado.",staleEmailVerificationLink:"O link em que você clicou é um link antigo e não é mais válido. Talvez você já tenha confirmado o seu endereço de e-mail.",identityProviderAlreadyLinkedMessage:"A conta retornada do {0} já está vinculada a outro usuário.",confirmAccountLinking:"Confirme o vinculação da conta {0} do provedor de identidade {1} à sua conta.",confirmEmailAddressVerification:"Confirme a validade do endereço de e-mail {0}.",confirmExecutionOfActions:"Execute a(s) seguinte(s) ação(ões)",backToApplication:"« Voltar para o aplicativo",missingParameterMessage:"Parâmetros ausentes: {0}",clientNotFoundMessage:"Cliente não encontrado.",clientDisabledMessage:"Cliente desativado.",invalidParameterMessage:"Parâmentro inválido: {0}",alreadyLoggedIn:"Você já está logado.",differentUserAuthenticated:"Você já está autenticado como outro usuário '{0}' nesta sessão. Por favor, finalize a sessão primeiro.",brokerLinkingSessionExpired:"A vinculção de conta do provedor de identidade foi solicitado, mas a sessão atual não é mais válida.",proceedWithAction:"» Clique aqui para continuar","requiredAction.CONFIGURE_TOTP":"Configurar Autenticação de Dois Fatores","requiredAction.TERMS_AND_CONDITIONS":"Termos e Condições","requiredAction.UPDATE_PASSWORD":"Atualizar Senha","requiredAction.UPDATE_PROFILE":"Atualizar Perfil","requiredAction.VERIFY_EMAIL":"Verificar Endereço de E-mail",doX509Login:"Você será logado como:",clientCertificate:"Certificado X509 do cliente:",noCertificate:"[Sem Certificado]",pageNotFound:"Página não encontrada",internalServerError:"Ocorreu um erro interno no servidor","console-username":"Nome de usuário:","console-password":"Senha:","console-otp":"Código de uso único:","console-new-password":"Nova Senha:","console-confirm-password":"Confirmação de Senha:","console-update-password":"Você precisa atualizar a sua senha.","console-verify-email":"Você precisa verificar o seu endereço de e-mail. Enviamos um e-mail para {0} que contém um código de verificação. Digite o código enviado no campo abaixo.","console-email-code":"Código do e-mail:","console-accept-terms":"Aceita os Termos? [s/n]:","console-accept":"s","openshift.scope.user_info":"Informações do usuário","openshift.scope.user_check-access":"Informações de acesso do usuário","openshift.scope.user_full":"Acesso Completo","openshift.scope.list-projects":"Listar projetos","saml.post-form.title":"Redirecionamento de Autenticação","saml.post-form.message":"Redirecionando... Por favor, aguarde.","saml.post-form.js-disabled":"O JavaScript está desabilitado. É altamente recomendável habilitá-lo. Clique no botão abaixo para continuar. ","otp-display-name":"Aplicativo Autenticador","otp-help-text":"Insira o código de verificação do aplicativo autenticador.","password-display-name":"Senha","password-help-text":"Faça o login digitando sua senha.","auth-username-form-display-name":"Nome de usuário","auth-username-form-help-text":"Faça o login digitando seu nome de usuário.","auth-username-password-form-display-name":"Nome de usuário e senha","auth-username-password-form-help-text":"Faça o login digitando seu nome de usuário e senha.","webauthn-display-name":"Chave de Segurança","webauthn-help-text":"Use sua chave de segurança para fazer login.","webauthn-passwordless-display-name":"Chave de Segurança","webauthn-passwordless-help-text":"Use sua chave de segurança para fazer login sem senha.","webauthn-login-title":"Login com Chave de Segurança","webauthn-registration-title":"Registrar Chave de Segurança","webauthn-available-authenticators":"Autenticadores disponíveis","webauthn-unsupported-browser-text":"WebAuthn não é suportada pelo seu navegador. Tente outro navegador ou entre em contato com um administrador.","webauthn-error-title":"Erro de Chave de Segurança","webauthn-error-registration":"Falha ao registrar sua Chave de Segurança.","webauthn-error-api-get":"Falha ao autenticar usando a Chave de Segurança.","webauthn-error-different-user":"O primeiro usuário autenticado não corresponde àquele autenticado pela Chave de Segurança.","webauthn-error-auth-verification":"O resultado da autenticação da Chave de Segurança é inválido.
{0}","webauthn-error-register-verification":"O resultado do registro da Chave de Segurança é inválido.
{0}","webauthn-error-user-not-found":"Usuário desconhecido autenticado pela Chave de Segurança.","identity-provider-redirector":"Conecte-se com outro Provedor de Identidade","identity-provider-login-label":"Ou entre com",finalDeletionConfirmation:"Se você apagar a sua conta, ela não poderá ser recuperada. Para manter a sua conta, clique em Cancelar.",irreversibleAction:"Esta ação é irreversível",deleteAccountConfirm:"Confirmação de descadastramento",deletingImplies:"Apagar a sua conta implica em:",errasingData:"Remover todos os seus dados",loggingOutImmediately:"Sair da aplicação imediatamente",accountUnusable:"Qualquer uso subsequente da aplicação não será possível com esta conta",userDeletedSuccessfully:"Usuário excluído com sucesso",readOnlyUsernameMessage:"Você^não pode atualizar o seu nome de usuário, uma vez que é apenas de leitura.","frontchannel-logout.title":"Saindo","frontchannel-logout.message":"Você está saindo dos seguintes aplicativos",logoutConfirmTitle:"Saindo",logoutConfirmHeader:"Você realmente deseja sair?",doLogout:"Sair"}}}]); \ No newline at end of file diff --git a/3685.6e17d20d.iframe.bundle.js b/3685.6e17d20d.iframe.bundle.js deleted file mode 100644 index 4ddb1141..00000000 --- a/3685.6e17d20d.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3685,8470],{"./dist/login/Template.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Template});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_assert__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/assert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/lib/usePrepareTemplate.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Template(props){var _props$displayInfo=props.displayInfo,displayInfo=void 0!==_props$displayInfo&&_props$displayInfo,_props$displayMessage=props.displayMessage,displayMessage=void 0===_props$displayMessage||_props$displayMessage,_props$displayRequire=props.displayRequiredFields,displayRequiredFields=void 0!==_props$displayRequire&&_props$displayRequire,_props$displayWide=props.displayWide,displayWide=void 0!==_props$displayWide&&_props$displayWide,_props$showAnotherWay=props.showAnotherWayIfPresent,showAnotherWayIfPresent=void 0===_props$showAnotherWay||_props$showAnotherWay,headerNode=props.headerNode,_props$showUsernameNo=props.showUsernameNode,showUsernameNode=void 0===_props$showUsernameNo?null:_props$showUsernameNo,_props$infoNode=props.infoNode,infoNode=void 0===_props$infoNode?null:_props$infoNode,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,children=props.children,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,changeLocale=i18n.changeLocale,labelBySupportedLanguageTag=i18n.labelBySupportedLanguageTag,currentLanguageTag=i18n.currentLanguageTag,realm=kcContext.realm,locale=kcContext.locale,auth=kcContext.auth,url=kcContext.url,message=kcContext.message,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__.M)({doFetchDefaultThemeResources:doUseDefaultCss,styles:[url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly.min.css",url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly-additions.min.css",url.resourcesCommonPath+"/lib/zocial/zocial.css",url.resourcesPath+"/css/login.css"],htmlClassName:getClassName("kcHtmlClass"),bodyClassName:getClassName("kcBodyClass")}).isReady?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcLoginClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header",className:getClassName("kcHeaderClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header-wrapper",className:getClassName("kcHeaderWrapperClass")},{children:msg("loginTitleHtml",realm.displayNameHtml)}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcFormCardClass"),displayWide&&getClassName("kcFormCardAccountClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("header",Object.assign({className:getClassName("kcFormHeaderClass")},{children:[realm.internationalizationEnabled&&((0,_tools_assert__WEBPACK_IMPORTED_MODULE_3__.h)(void 0!==locale),!0)&&locale.supported.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale-wrapper",className:getClassName("kcLocaleWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-dropdown",id:"kc-locale-dropdown"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"kc-current-locale-link"},{children:labelBySupportedLanguageTag[currentLanguageTag]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",{children:locale.supported.map((function(_ref){var languageTag=_ref.languageTag;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",Object.assign({className:"kc-dropdown-item"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",onClick:function onClick(){return changeLocale(languageTag)}},{children:labelBySupportedLanguageTag[languageTag]}))}),languageTag)}))})]}))}))})),void 0===auth||!auth.showUsername||auth.showResetCredentials?displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"})),msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:"col-md-10"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode}))}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode})):displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))," ",msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"col-md-10"},{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-content"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-content-wrapper"},{children:[displayMessage&&void 0!==message&&("warning"!==message.type||!isAppInitiatedAction)&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)("alert","alert-"+message.type)},{children:["success"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackSuccessIcon")}),"warning"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackWarningIcon")}),"error"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackErrorIcon")}),"info"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackInfoIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:"kc-feedback-text",dangerouslySetInnerHTML:{__html:message.summary}})]})),children,void 0!==auth&&auth.showTryAnotherWayLink&&showAnotherWayIfPresent&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-try-another-way-form",action:url.loginAction,method:"post",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&getClassName("kcContentWrapperClass"))},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&[getClassName("kcFormSocialAccountContentClass"),getClassName("kcFormSocialAccountClass")])},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",name:"tryAnotherWay",value:"on"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"try-another-way",onClick:function onClick(){return document.forms["kc-select-try-another-way-form"].submit(),!1}},{children:msg("doTryAnotherWay")}))]}))}))})),displayInfo&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info",className:getClassName("kcSignUpClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info-wrapper",className:getClassName("kcInfoAreaWrapperClass")},{children:infoNode}))}))]}))}))]}))]})):null}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginDeviceVerifyUserCode.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOauthGrant});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_Template__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/Template.js"),_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginOauthGrant(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr,getClassName=(0,_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__.v)({doUseDefaultCss,classes}).getClassName;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_Template__WEBPACK_IMPORTED_MODULE_3__.default,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("oauth2DeviceVerificationTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-user-verify-device-user-code-form",className:getClassName("kcFormClass"),action:url.oauth2DeviceVerificationAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"device-user-code",className:getClassName("kcLabelClass")},{children:msg("verifyOAuth2DeviceUserCode")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{id:"device-user-code",name:"device_user_code",autoComplete:"off",type:"text",className:getClassName("kcInputClass"),autoFocus:!0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormButtonsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))}))]}))]}))}))}}}]); \ No newline at end of file diff --git a/3685.cbfd3f65.iframe.bundle.js b/3685.cbfd3f65.iframe.bundle.js new file mode 100644 index 00000000..0e0519fb --- /dev/null +++ b/3685.cbfd3f65.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3685],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginDeviceVerifyUserCode.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOauthGrant});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginOauthGrant(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,Template=props.Template,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("oauth2DeviceVerificationTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-user-verify-device-user-code-form",className:getClassName("kcFormClass"),action:url.oauth2DeviceVerificationAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"device-user-code",className:getClassName("kcLabelClass")},{children:msg("verifyOAuth2DeviceUserCode")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{id:"device-user-code",name:"device_user_code",autoComplete:"off",type:"text",className:getClassName("kcInputClass"),autoFocus:!0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormButtonsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/3765.2608ff8d.iframe.bundle.js b/3765.fa285d87.iframe.bundle.js similarity index 99% rename from 3765.2608ff8d.iframe.bundle.js rename to 3765.fa285d87.iframe.bundle.js index 9fd61765..cfb168f3 100644 --- a/3765.2608ff8d.iframe.bundle.js +++ b/3765.fa285d87.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3765],{"./dist/account/i18n/baseMessages/sk.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",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)"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3765],{"./dist/account/i18n/baseMessages/sk.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",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)",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/3778.67eaf6b2.iframe.bundle.js b/3778.6817f21b.iframe.bundle.js similarity index 99% rename from 3778.67eaf6b2.iframe.bundle.js rename to 3778.6817f21b.iframe.bundle.js index d479774d..2c7a5755 100644 --- a/3778.67eaf6b2.iframe.bundle.js +++ b/3778.6817f21b.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3778],{"./dist/account/i18n/baseMessages/no.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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ører","role_manage-realm":"Administrere sikkerhetsdomene","role_manage-users":"Administrere brukere","role_manage-applications":"Administrere applikasjoner","role_manage-identity-providers":"Administrere identitetsleverandører","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å 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øper",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ølgende programmer på mobilen din.",totpStep2:"Åpne applikasjonen og skann strekkoden eller skriv inn koden.",totpStep3:"Skriv inn engangskoden gitt av applikasjonen og klikk Lagre for å fullføre.",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ør er ikke spesifisert.",invalidFederatedIdentityActionMessage:"Ugyldig eller manglende handling.",identityProviderNotFoundMessage:"Spesifisert identitetsleverandør 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ør feilet.",identityProviderRemovedMessage:"Fjerning av identitetsleverandør var vellykket.",identityProviderAlreadyLinkedMessage:"Federert identitet returnert av {0} er allerede koblet til en annen bruker.",staleCodeAccountMessage:"Siden har utløpt. Vennligst prøv en gang til.",consentDenied:"Samtykke avslått.",accountDisabledMessage:"Konto er deaktivert, kontakt administrator.",accountTemporarilyDisabledMessage:"Konto er midlertidig deaktivert, kontakt administrator eller prøv igjen senere.",invalidPasswordMinLengthMessage:"Ugyldig passord: minimum lengde {0}.",invalidPasswordMinLowerCaseCharsMessage:"Ugyldig passord: må inneholde minimum {0} små bokstaver.",invalidPasswordMinDigitsMessage:"Ugyldig passord: må inneholde minimum {0} sifre.",invalidPasswordMinUpperCaseCharsMessage:"Ugyldig passord: må inneholde minimum {0} store bokstaver.",invalidPasswordMinSpecialCharsMessage:"Ugyldig passord: må inneholde minimum {0} spesialtegn.",invalidPasswordNotUsernameMessage:"Ugyldig passord: kan ikke være likt brukernavn.",invalidPasswordRegexPatternMessage:"Ugyldig passord: tilfredsstiller ikke kravene for passord-mønster.",invalidPasswordHistoryMessage:"Ugyldig passord: kan ikke være likt noen av de {0} foregående passordene."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3778],{"./dist/account/i18n/baseMessages/no.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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ører","role_manage-realm":"Administrere sikkerhetsdomene","role_manage-users":"Administrere brukere","role_manage-applications":"Administrere applikasjoner","role_manage-identity-providers":"Administrere identitetsleverandører","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å 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øper",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ølgende programmer på mobilen din.",totpStep2:"Åpne applikasjonen og skann strekkoden eller skriv inn koden.",totpStep3:"Skriv inn engangskoden gitt av applikasjonen og klikk Lagre for å fullføre.",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ør er ikke spesifisert.",invalidFederatedIdentityActionMessage:"Ugyldig eller manglende handling.",identityProviderNotFoundMessage:"Spesifisert identitetsleverandør 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ør feilet.",identityProviderRemovedMessage:"Fjerning av identitetsleverandør var vellykket.",identityProviderAlreadyLinkedMessage:"Federert identitet returnert av {0} er allerede koblet til en annen bruker.",staleCodeAccountMessage:"Siden har utløpt. Vennligst prøv en gang til.",consentDenied:"Samtykke avslått.",accountDisabledMessage:"Konto er deaktivert, kontakt administrator.",accountTemporarilyDisabledMessage:"Konto er midlertidig deaktivert, kontakt administrator eller prøv igjen senere.",invalidPasswordMinLengthMessage:"Ugyldig passord: minimum lengde {0}.",invalidPasswordMinLowerCaseCharsMessage:"Ugyldig passord: må inneholde minimum {0} små bokstaver.",invalidPasswordMinDigitsMessage:"Ugyldig passord: må inneholde minimum {0} sifre.",invalidPasswordMinUpperCaseCharsMessage:"Ugyldig passord: må inneholde minimum {0} store bokstaver.",invalidPasswordMinSpecialCharsMessage:"Ugyldig passord: må inneholde minimum {0} spesialtegn.",invalidPasswordNotUsernameMessage:"Ugyldig passord: kan ikke være likt brukernavn.",invalidPasswordRegexPatternMessage:"Ugyldig passord: tilfredsstiller ikke kravene for passord-mønster.",invalidPasswordHistoryMessage:"Ugyldig passord: kan ikke være likt noen av de {0} foregående passordene.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/3900.3e36467a.iframe.bundle.js b/3900.3e36467a.iframe.bundle.js new file mode 100644 index 00000000..e276c9e3 --- /dev/null +++ b/3900.3e36467a.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3900],{"./dist/login/i18n/baseMessages/ar.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"تسجيل دخول",doRegister:"تسجيل جديد",doCancel:"إلغاء",doSubmit:"إرسال",doBack:"رجوع",doYes:"نعم",doNo:"لا",doContinue:"استمرار",doIgnore:"تجاهل",doAccept:"موافقة",doDecline:"رفض",doForgotPassword:"نسيت كلمة المرور؟",doClickHere:"انقر هنا",doImpersonate:"انتحال شخصية",doTryAgain:"المحاولة مرة أخرى",doTryAnotherWay:"المجاولة بطريقة أخرى",doConfirmDelete:"تأكيد الحذف",errorDeletingAccount:"حدث خطأ أثناء حذف الحساب",deletingAccountForbidden:"ليس لديك الصلاحية الكافية لحذف حسابك، قم بالتواصل مع مسؤول النظام.",kerberosNotConfigured:"لم يتم تهيئة البروتوكول Kerberos",kerberosNotConfiguredTitle:"لم يتم تهيئة البروتوكول Kerberos",bypassKerberosDetail:"إما أنك لم تقم بتسجيل الدخول بواسطة البروتوكول Kerberos أو أن متصفحك لم يتم إعداده لتسجيل الدخول بواسطة البروتوكول Kerberos. الرجاء النقر على زر استمرار لتسجيل الدخول من خلال وسائل أخرى",kerberosNotSetUp:"لم يتم تهيئة البروتوكول Kerberos. لا يمكنك تسجيل الدخول.",registerTitle:"تسجيل",loginAccountTitle:"تسجيل الدخول إلى حسابك",loginTitle:"تسجيل الدخول إلى {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} انتحال شخصية المستخدم",impersonateTitleHtml:"{0} انتحال شخصية المستخدم",realmChoice:"المنظومة",unknownUser:"مستخدم غير معروف",loginTotpTitle:"إعداد تطبيق هاتف مصادق",loginProfileTitle:"تحديث معلومات الحساب",loginIdpReviewProfileTitle:"تحديث معلومات الحساب",loginTimeout:"انتهت مهلة محاولة تسجيل الدخول. سيتم البدء في عملية تسجيل الدخول من جديد.",reauthenticate:"يرجى إعادة المصادقة للمتابعة",oauthGrantTitle:"منح صلاحية الوصول إلى {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"تأكد من أنك تثق في {0} من خلال معرفة كيف سيتعامل {0} مع بياناتك.",oauthGrantReview:"يمكنك مراجعة ",oauthGrantTos:"بنود الخدمة.",oauthGrantPolicy:"سياسة الخصوصية.",errorTitle:"نعتذر...",errorTitleHtml:"نعتذر ...",emailVerifyTitle:"التحقق من البريد الإلكتروني",emailForgotTitle:"نسيت كلمة المرور؟",updateEmailTitle:"تحديث البريد الإلكتروني",emailUpdateConfirmationSentTitle:"تم إرسال رسالة التحقق عبر البريد الإلكتروني",emailUpdateConfirmationSent:"تم إرسال رسالة التحقق عبر البريد الإلكتروني إلى {0}. يجب عليك اتباع التعليمات لإكمال تحديث البريد الإلكتروني.",emailUpdatedTitle:"تم تحديث البريد الإلكتروني",emailUpdated:"تم تحديث البريد الإلكتروني الخاص بالحساب إلى {0}.",updatePasswordTitle:"تم تحديث كلمة المرور",codeSuccessTitle:"رمز النجاح",codeErrorTitle:"رمز الخطأ: {0}",displayUnsupported:"نوع العرض المطلوب غير مدعوم",browserRequired:"المتصفح مطلوب لعملية تسجيل الدخول",browserContinue:"المتصفح مطلوب لإكمال عملية تسجيل الدخول",browserContinuePrompt:"فتح المتصفح لإكمال عملية تسجيل الدخول؟ [ن/ل]:",browserContinueAnswer:"ن",usb:"منفذ USB",nfc:"قارئ بطاقة NFC",bluetooth:"بلوتوث",internal:"داخلي",unknown:"غير معروف",termsTitle:"الشروط والأحكام",termsText:"

يجب تحديد الشروط والأحكام

",termsPlainText:"يجب تحديد الشروط والأحكام.",termsAcceptanceRequired:"يجب الموافقة على الشروط والأحكام.",acceptTerms:"أوافق على الشروط والأحكام",recaptchaFailed:"فشل في اختبار Recaptcha",recaptchaNotConfigured:"مطلوب اختبار Recaptcha، ولكن لم يتم تكوينه",consentDenied:"تم رفض الموافقة.",noAccount:"مستخدم جديد؟",username:"اسم المستخدم",usernameOrEmail:"اسم المستخدم أو البريد الإلكتروني",firstName:"الاسم الأول",givenName:"الاسم الأول",fullName:"الاسم الكامل",lastName:"الاسم الأخير",familyName:"اسم العائلة",email:"البريد الإلكتروني",password:"كلمة المرور",passwordConfirm:"تأكيد كلمة المرور",passwordNew:"كلمة مرور جديدة",passwordNewConfirm:"تأكيد كلمة المرور الجديدة",hidePassword:"إخفاء كلمة المرور",showPassword:"إظهار كلمة المرور",rememberMe:"تذكرني",authenticatorCode:"رمز لمرة واحدة",address:"العنوان",street:"الشارع",locality:"المدينة",region:"الولاية أو المنطقة",postal_code:"الرمز البريدي",country:"الدولة",emailVerified:"تم التحقق من البريد الإلكتروني",website:"الموقع الإلكتروني",phoneNumber:"رقم الهاتف",phoneNumberVerified:"تم التحقق من رقم الهاتف",gender:"الجنس",birthday:"تاريخ الميلاد",zoneinfo:"التوقيت",gssDelegationCredential:"تفويض الاعتماد GSS",logoutOtherSessions:"تسجيل الخروج من الأجهزة الأخرى",profileScopeConsentText:"ملف تعريفي للمستخدم",emailScopeConsentText:"البريد الإلكتروني",addressScopeConsentText:"العنوان",phoneScopeConsentText:"رقم الهاتف",offlineAccessScopeConsentText:"الوصول دون اتصال",samlRoleListScopeConsentText:"الأدوار الخاصة بي",rolesScopeConsentText:"أدوار المستخدم",restartLoginTooltip:"إعادة تسجيل الدخول",loginTotpIntro:"تحتاج إلى إعداد مولّد كلمة مرور لمرة واحدة للوصول إلى هذا الحساب",loginTotpStep1:"قم بتثبيت إحدى التطبيقات التالية على هاتفك المتنقل:",loginTotpStep2:"افتح التطبيق ثم امسح رمز الاستجابة السريعة:",loginTotpStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",loginTotpStep3DeviceName:"ضع اسمًا للجهاز حتى يسهل عليك إدارة أجهزة المصادقة.",loginTotpManualStep2:"افتح التطبيق ثم أدخل المفتاح:",loginTotpManualStep3:"استخدم قيم التكوين التالية إذا سمح التطبيق بتعيينها:",loginTotpUnableToScan:"غير قادر على المسح؟",loginTotpScanBarcode:"مسح رمز الاستجابة السريعة؟",loginCredential:"بيانات الدخول",loginOtpOneTime:"رمز لمرة واحدة",loginTotpType:"النوع",loginTotpAlgorithm:"الخوارزمية",loginTotpDigits:"عدد الخانات",loginTotpInterval:"المدة الزمنية",loginTotpCounter:"العداد",loginTotpDeviceName:"اسم الجهاز","loginTotp.totp":"على أساس الوقت","loginTotp.hotp":"على أساس العداد",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"حدد طريقة تسجيل الدخول",oauthGrantRequest:"هل تود منح صلاحية الوصول هذه؟",inResource:"في",oauth2DeviceVerificationTitle:"تسجيل الدخول على الأجهزة",verifyOAuth2DeviceUserCode:"أدخل الرمز الظاهر على جهازك ثم انقر على زر الإرسال",oauth2DeviceInvalidUserCodeMessage:"رمز غير صالح، يرجى المحاولة مرة أخرى.",oauth2DeviceExpiredUserCodeMessage:"انتهت صلاحية الرمز. يرجى العودة إلى جهازك ثم محاولة الاتصال مرة أخرى.",oauth2DeviceVerificationCompleteHeader:"تم تسجيل الدخول على الجهاز بنجاح",oauth2DeviceVerificationCompleteMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى جهازك.",oauth2DeviceVerificationFailedHeader:"فشل في تسجيل الدخول على الجهاز",oauth2DeviceVerificationFailedMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى جهازك ومحاولة الاتصال مرة أخرى.",oauth2DeviceConsentDeniedMessage:"تم رفض الموافقة على الاتصال بالجهاز.",oauth2DeviceAuthorizationGrantDisabledMessage:"لا يُسمح للعميل ببدء الإجراء OAuth 2.0 Device Authorization Grant، حيث أنه معطل.",emailVerifyInstruction1:"تم إرسال بريد إلكتروني يحتوي على إرشادات للتحقق من عنوان بريدك الإلكتروني إلى عنوانك {0}.",emailVerifyInstruction2:"ألم تستلم رمز التحقق على بريدك الإلكتروني؟",emailVerifyInstruction3:"لإعادة إرسال البريد الإلكتروني.",emailLinkIdpTitle:"ربط {0}",emailLinkIdp1:"تم إرسال رسالة بريد إلكتروني بها إرشادات لربط الحساب {0} ({1}) بالحساب {2} الخاص بك.",emailLinkIdp2:"ألم تستلم رمز التحقق على بريدك الإلكتروني؟",emailLinkIdp3:"لإعادة إرسال البريد الإلكتروني.",emailLinkIdp4:"إذا كنت قد تحققت بالفعل من البريد الإلكتروني في متصفح مختلف",emailLinkIdp5:"للاستمرار.",backToLogin:"» العودة إلى تسجيل الدخول",emailInstruction:"أدخل اسم المستخدم أو عنوان البريد الإلكتروني الخاص بك وسنرسل لك تعليمات حول كيفية إنشاء كلمة مرور جديدة.",emailInstructionUsername:"أدخل اسم المستخدم الخاص بك وسنرسل لك تعليمات حول كيفية إنشاء كلمة مرور جديدة.",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":"واجهة سطر الأوامر للمسؤول","client_realm-management":"إدارة المنظومة",client_broker:"وسيط",requiredFields:"الحقول المطلوبة",invalidUserMessage:"اسم المستخدم أو كلمة مرور غير صالحة.",invalidUsernameMessage:"اسم المستخدم غير صالح.",invalidUsernameOrEmailMessage:"اسم المستخدم أو البريد الإلكتروني غير صالح.",invalidPasswordMessage:"كلمة المرور غير صالحة.",invalidEmailMessage:"البريد الإلكتروني غير صالح.",accountDisabledMessage:"الحساب معطل، تواصل مع مسؤول النظام.",accountTemporarilyDisabledMessage:"الحساب معطل مؤقتًا، تواصل مع مسؤول النظام أو حاول مرة أخرى لاحقًا.",expiredCodeMessage:"نفذ الوقت المسموح للدخول. الرجاء تسجيل الدخول مرة أخرى.",expiredActionMessage:"انتهى الإجراء. الرجاء الاستمرار في تسجيل الدخول الآن.",expiredActionTokenNoSessionMessage:"انتهى الإجراء.",expiredActionTokenSessionExistsMessage:"انتهى الإجراء. يرجى البدء مرة أخرى.",sessionLimitExceeded:"هناك جلسات كثيرة جدًا",missingFirstNameMessage:"الرجاء تحديد الاسم الأول.",missingLastNameMessage:"الرجاء تحديد الاسم الأخير.",missingEmailMessage:"الرجاء تحديد البريد الإلكتروني.",missingUsernameMessage:"الرجاء تحديد اسم المستخدم.",missingPasswordMessage:"الرجاء تحديد كلمة المرور.",missingTotpMessage:"الرجاء تحديد رمز التحقق.",missingTotpDeviceNameMessage:"الرجاء تحديد اسم الجهاز.",notMatchPasswordMessage:"كلمات المرور غير متطابقة.","error-invalid-value":"قيمة غير صالحة.","error-invalid-blank":"يرجى تحديد قيمة.","error-empty":"يرجى تحديد قيمة.","error-invalid-length":"الطول يجب أن يكون بين {1} و {2}.","error-invalid-length-too-short":"الطول يجب ألا يقل عن {1}.","error-invalid-length-too-long":"الطول يجب ألا يزيد عن {2}.","error-invalid-email":"بريد إلكتروني غير صالح.","error-invalid-number":"رقم غير صالح.","error-number-out-of-range":"الرقم يجب أن يكون بين {1} و {2}.","error-number-out-of-range-too-small":"الرقم يجب ألا تقل قيمته عن {1}.","error-number-out-of-range-too-big":"الرقم يجب ألا تزيد قيمته عن {2}.","error-pattern-no-match":"قيمة غير صالحة.","error-invalid-uri":"عنوان موقع غير صالح.","error-invalid-uri-scheme":"بادئة عنوان موقع غير صالحة.","error-invalid-uri-fragment":"ملحق عنوان موقع غير صالح.","error-user-attribute-required":"يرجى تحديد هذا الحقل.","error-invalid-date":"تاريخ غير صالح.","error-user-attribute-read-only":"هذا الحقل للقراءة فقط.","error-username-invalid-character":"القيمة تحتوي على حرف غير صالح.","error-person-name-invalid-character":"القيمة تحتوي على حرف غير صالح.","error-reset-otp-missing-id":"يرجى اختيار إعداد لخاصية رمز التحقق.",invalidPasswordExistingMessage:"كلمة المرور الحالية غير صالحة.",invalidPasswordBlacklistedMessage:"كلمة المرور غير صالحة: كلمة المرور في القائمة السوداء.",invalidPasswordConfirmMessage:"تأكيد كلمة المرور غير متطابق.",invalidTotpMessage:"رمز التحقق غير صالح.",usernameExistsMessage:"اسم المستخدم مستخدم مسبقًا.",emailExistsMessage:"البريد الإلكتروني مستخدم مسبقًا.",federatedIdentityExistsMessage:"المستخدم صاحب ({0}: {1}) موجود مسبقًا. الرجاء تسجيل الدخول إلى صفحة إدارة الحساب لربط الحساب.",federatedIdentityUnavailableMessage:"المستخدم {0} المصادق عليه بواسطة مزود الحسابات {1} غير موجود. الرجاء التواصل مع مسؤول النظام.",federatedIdentityUnmatchedEssentialClaimMessage:"رمز المصادقة للتعريف الذي تم إصداره من مزود الحسابات لا يتطابق مع القيم التي إعدادها مسبقًا. الرجاء التواصل مع مسؤول النظام.",confirmLinkIdpTitle:"الحساب موجود مسبقًا",federatedIdentityConfirmLinkMessage:"المستخدم صاحب ({0}: {1}) موجود مسبقًا. كيف تريد الاستمرار؟",federatedIdentityConfirmReauthenticateMessage:"المصادقة لربط حسابك بـ {0}",nestedFirstBrokerFlowMessage:"لم يتم ربط مستخدم {0} ({1}) بأي مستخدم معروف.",confirmLinkIdpReviewProfile:"مراجعة الملف الشخصي",confirmLinkIdpContinue:"إضافة إلى الحساب الحالي",configureTotpMessage:"تحتاج إلى إعداد المصادقة بالهاتف الذكي لتفعيل حسابك.",configureBackupCodesMessage:"تحتاج إلى إعداد رموز المصادقة الاحتياطية لتفعيل حسابك.",updateProfileMessage:"تحتاج إلى تحديث الملف الشخصي لتفعيل حسابك.",updatePasswordMessage:"تحتاج إلى تحديث كلمة المرور لتفعيل حسابك.",updateEmailMessage:"تحتاج إلى تحديث البريد الإلكتروني لتفعيل حسابك.",resetPasswordMessage:"تحتاج إلى تحديث كلمة المرور الخاصة بك.",verifyEmailMessage:"تحتاج إلى التحقق من البريد الإلكتروني لتفعيل حسابك.",linkIdpMessage:"تحتاج إلى التحقق من البريد الإلكتروني لربط حسابك بـ {0}.",emailSentMessage:"من المفترض أن تتلقى بريدًا إلكترونيًا عما قريب يحتوي على مزيد من الإرشادات.",emailSendErrorMessage:"فشل في إرسال البريد الإلكتروني، يرجى المحاولة مرة أخرى في وقت لاحق.",accountUpdatedMessage:"تم تحديث الحساب الخاص بك.",accountPasswordUpdatedMessage:"تم تحديث كلمة المرور الخاصة بك.",delegationCompleteHeader:"تم تسجيل الدخول بنجاح",delegationCompleteMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى تطبيق وحدة التحكم الخاصة بك.",delegationFailedHeader:"فشل في تسجيل الدخول",delegationFailedMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى تطبيق وحدة التحكم ومحاولة تسجيل الدخول مرة أخرى.",noAccessMessage:"لا وصول",invalidPasswordMinLengthMessage:"كلمة المرور غير صالحة: الحد الأدنى للطول {0}.",invalidPasswordMaxLengthMessage:"كلمة المرور غير صالحة: الحد الأقصى للطول {0}.",invalidPasswordMinDigitsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} أرقام على الأقل.",invalidPasswordMinLowerCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف صغيرة على الأقل.",invalidPasswordMinUpperCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف كبيرة على الأقل.",invalidPasswordMinSpecialCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} رموز على الأقل.",invalidPasswordNotUsernameMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لاسم المستخدم.",invalidPasswordNotEmailMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للبريد الإلكتروني.",invalidPasswordRegexPatternMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للأنماط المحددة.",invalidPasswordHistoryMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لأي من كلمات المرور الـ {0} الأخيرة.",invalidPasswordGenericMessage:"كلمة المرور غير صالحة: كلمة المرور الجديدة لا تتطابق مع سياسات كلمة المرور.",failedToProcessResponseMessage:"فشل في معالجة الاستجابة",httpsRequiredMessage:"البروتوكول HTTPS مطلوب",realmNotEnabledMessage:"المنظومة غير مفعلة",invalidRequestMessage:"طلب غير صالح",successLogout:"لقد قمت بتسجيل الخروج",failedLogout:"فشل في تسجيل الخروج",unknownLoginRequesterMessage:"طالب تسجيل الدخول غير معروف",loginRequesterNotEnabledMessage:"طالب تسجيل الدخول غير مفعل",bearerOnlyMessage:"لا يسمح للتطبيقات Bearer-only ببدء تسجيل الدخول باستخدام المتصفح",standardFlowDisabledMessage:"لا يسمح للعميل ببدء تسجيل الدخول باستخدام المتصفح مع قيمة response_type المعطاة. تم تعطيل الإجراء القياسي standard flow لهذا العميل.",implicitFlowDisabledMessage:"لا يسمح للعميل ببدء تسجيل الدخول باستخدام المتصفح مع قيمة response_type المعطاة. تم تعطيل الإجراء الضمني implicit flow لهذا العميل.",invalidRedirectUriMessage:"رابط إعادة التوجيه غير صالح",unsupportedNameIdFormatMessage:"صيغة غير مدعومة للقيمة NameID",invalidRequesterMessage:"طالب غير صالح",registrationNotAllowedMessage:"التسجيل غير مسموح به",resetCredentialNotAllowedMessage:"إعادة تعيين بيانات الدخول غير مسموح به",permissionNotApprovedMessage:"لم تتم الموافقة على الإذن.",noRelayStateInResponseMessage:"لا تواجد لقيمة Relay State في استجابة مزود الحسابات.",insufficientPermissionMessage:"أذونات غير كافية لربط الهويات.",couldNotProceedWithAuthenticationRequestMessage:"تعذرت متابعة طلب المصادقة لمزود الحسابات.",couldNotObtainTokenMessage:"تعذر الحصول على رمز مصادقة من مزود الحسابات.",unexpectedErrorRetrievingTokenMessage:"خطأ غير متوقع عند استرداد رمز المصادقة من مزود الحسابات.",unexpectedErrorHandlingResponseMessage:"خطأ غير متوقع عند التعامل مع الاستجابة من مزود الحسابات.",identityProviderAuthenticationFailedMessage:"فشلت المصادقة. تعذرت المصادقة مع مزود الحسابات.",couldNotSendAuthenticationRequestMessage:"تعذر إرسال طلب المصادقة إلى مزود الحسابات.",unexpectedErrorHandlingRequestMessage:"خطأ غير متوقع عند معالجة طلب المصادقة لمزود الحسابات.",invalidAccessCodeMessage:"رمز الوصول غير صالح.",sessionNotActiveMessage:"الجلسة غير نشطة.",invalidCodeMessage:"حدث خطأ، يرجى تسجيل الدخول مرة أخرى من خلال التطبيق الخاص بك.",cookieNotFoundMessage:"لم يتم العثور على ملف تعريف الارتباط. يرجى التأكد من تمكين ملفات تعريف الارتباط في متصفحك.",insufficientLevelOfAuthentication:"لم يتم استيفاء مستوى المصادقة المطلوب.",identityProviderUnexpectedErrorMessage:"خطأ غير متوقع عند المصادقة مع مزود الحسابات",identityProviderMissingStateMessage:"المعامل state مفقود في رد مزود الحسابات.",identityProviderInvalidResponseMessage:"رد غير صالح من مزود الحسابات.",identityProviderInvalidSignatureMessage:"توقيع غير صالح في رد مزود الحسابات.",identityProviderNotFoundMessage:"تعذر العثور على مزود الحسابات بالمعرف.",identityProviderLinkSuccess:"لقد نجحت في التحقق من بريدك الإلكتروني. يرجى الرجوع إلى متصفحك والمتابعة هناك في عملية تسجيل الدخول.",staleCodeMessage:"هذه الصفحة لم تعد صالحة، يرجى الرجوع إلى التطبيق الخاص بك وتسجيل الدخول مرة أخرى",realmSupportsNoCredentialsMessage:"لا تدعم المنظومة أي نوع من بيانات الدخول.",credentialSetupRequired:"لا يمكن تسجيل الدخول، مطلوب إعداد بيانات الدخول.",identityProviderNotUniqueMessage:"تدعم المنظومة عدة مزودي حسابات. تعذر تحديد مزود الحسابات الذي يجب استخدامه للمصادقة معه.",emailVerifiedMessage:"تم التحقق من عنوان البريد الإلكتروني الخاص بك.",staleEmailVerificationLink:"الرابط الذي نقرت عليه هو رابط قديم ولم يعد صالحًا. ربما تكون قد تحققت مسبقًا من بريدك الإلكتروني.",identityProviderAlreadyLinkedMessage:"الهوية الموحدة التي أرجعها {0} مرتبطة مسبقًا بمستخدم آخر.",confirmAccountLinking:"تأكيد ربط الحساب {0} من مزود الحسابات {1} مع حسابك.",confirmEmailAddressVerification:"تأكد من صحة عنوان البريد الإلكتروني {0}.",confirmExecutionOfActions:"قم بتنفيذ الإجراءات التالية",backToApplication:"» العودة إلى التطبيق",missingParameterMessage:"عوامل مفقودة: {0}",clientNotFoundMessage:"العميل غير موجود.",clientDisabledMessage:"العميل معطل.",invalidParameterMessage:"عامل غير صالح: {0}",alreadyLoggedIn:"لقد قمت بتسجيل الدخول مسبقًا.",differentUserAuthenticated:"لقد تمت مصادقتك مسبقًا كمستخدم مختلف ' {0} ' في هذه الجلسة. الرجاء تسجيل الخروج أولا.",brokerLinkingSessionExpired:"تم طلب ربط حساب الوسيط، ولكن الجلسة الحالية لم تعد صالحة.",proceedWithAction:"« انقر هنا للمتابعة",acrNotFulfilled:"لم يتم استيفاء متطلبات المصادقة","requiredAction.CONFIGURE_TOTP":"إعداد خاصية رمز التحقق","requiredAction.TERMS_AND_CONDITIONS":"الأحكام والشروط","requiredAction.UPDATE_PASSWORD":"تحديث كلمة المرور","requiredAction.UPDATE_PROFILE":"تحديث الملف التعريفي","requiredAction.VERIFY_EMAIL":"التحقق من البريد الإلكتروني","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"توليد رموز مصادقة الاسترداد","requiredAction.webauthn-register-passwordless":"المصادقة دون كلمة مرور باستخدام Webauthn",invalidTokenRequiredActions:"الإجراءات المطلوبة المدرجة في الرابط غير صالحة",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":"رمز البريد الالكتروني:","console-accept-terms":"قبول الشروط؟ [ن/ل]:","console-accept":"ن","openshift.scope.user_info":"معلومات المستخدم","openshift.scope.user_check-access":"معلومات وصول المستخدم","openshift.scope.user_full":"الوصول الكامل","openshift.scope.list-projects":"قائمة المشاريع","saml.post-form.title":"إعادة توجيه المصادقة","saml.post-form.message":"يتم الآن إعادة التوجيه، الرجاء الانتظار.","saml.post-form.js-disabled":"تم تعطيل جافاسكربت. نوصي بشدة لتمكينه. انقر على الزر أدناه للمتابعة. ","saml.artifactResolutionServiceInvalidResponse":"غير قادر على إيجاد المعرف artifact.","otp-display-name":"تطبيق مصادق","otp-help-text":"أدخل رمز التحقق الصادرة من التطبيق المصادق.","otp-reset-description":"أي إعداد لخاصية رمز التحقق ترغب بإزالته؟","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":"سجل الدخول باستخدام اسم المستخدم وكلمة المرور.","auth-recovery-authn-code-form-display-name":"رمز مصادقة الاسترداد","auth-recovery-authn-code-form-help-text":"أدخل رمز مصادقة الاسترداد من قائمة تم إنشاؤها مسبقًا.","auth-recovery-code-info-message":"أدخل رمز مصادقة الاسترداد المحدد.","auth-recovery-code-prompt":"رمز مصادقة الاسترداد #{0}","auth-recovery-code-header":"تسجيل الدخول باستخدام رمز مصادقة الاسترداد","recovery-codes-error-invalid":"رمز مصادقة الاسترداد غير صالح","recovery-code-config-header":"رموز مصادقة الاسترداد","recovery-code-config-warning-title":"لن تظهر رموز الاسترداد هذه مرة أخرى بعد مغادرة الصفحة","recovery-code-config-warning-message":"تأكد من طباعتها أو تنزيلها أو نسخها إلى مدير كلمات المرور واحتفظ بها. سيؤدي إلغاء هذا الإعداد إلى إزالة رموز مصادقة الاسترداد هذه من حسابك.","recovery-codes-print":"طباعة","recovery-codes-download":"تنزيل","recovery-codes-copy":"نسخ","recovery-codes-copied":"تم النسخ","recovery-codes-confirmation-message":"لقد قمت بحفظ هذه الرموز في مكان ما آمن","recovery-codes-action-complete":"إكمال الإعداد","recovery-codes-action-cancel":"إلغاء الإعداد","recovery-codes-download-file-header":"احتفظ برموز مصادقة الاسترداد هذه في مكان آمن.","recovery-codes-download-file-description":"رموز مصادقة الاسترداد هي رموز مرور تستخدم مرة واحدة وتسمح لك بتسجيل الدخول إلى حسابك إذا لم يكن لديك وصول إلى المصدق الخاص بك.","recovery-codes-download-file-date":"تم إنشاء هذه الرموز في","recovery-codes-label-default":"رموز مصادقة الاسترداد","webauthn-display-name":"مفتاح أمان","webauthn-help-text":"استخدم مفتاح الأمان لتسجيل الدخول.","webauthn-passwordless-display-name":"مفتاح أمان","webauthn-passwordless-help-text":"استخدم مفتاح الأمان لتسجيل الدخول دون كلمة مرور.","webauthn-login-title":"تسجيل الدخول باستخدام مفتاح الأمان","webauthn-registration-title":"تسجيل مفتاح أمان","webauthn-available-authenticators":"مفاتيح الأمان المتاحة","webauthn-unsupported-browser-text":"الخاصية WebAuthn غير مدعومة في هذا المتصفح. جرب متصفح آخر أو تواصل مع مسؤول النظام.","webauthn-doAuthenticate":"تسجيل الدخول باستخدام مفتاح الأمان","webauthn-createdAt-label":"تم إنشاؤه في","webauthn-error-title":"خطأ في مفتاح الأمان","webauthn-error-registration":"فشل في تسجيل مفتاح الأمان الخاص بك.
{0}","webauthn-error-api-get":"فشلت المصادقة بواسطة مفتاح الأمان.
{0}","webauthn-error-different-user":"أول مستخدم تمت مصادقته ليس هو الشخص الذي تمت مصادقته بواسطة مفتاح الأمان.","webauthn-error-auth-verification":"نتيجة مصادقة مفتاح الأمان غير صالحة.
{0}","webauthn-error-register-verification":"نتيجة تسجيل مفتاح الأمان غير صالحة.
{0}","webauthn-error-user-not-found":"مستخدم غير معروف تمت مصادقته بواسطة مفتاح الأمان.","identity-provider-redirector":"اتصل بمزود حسابات آخر","identity-provider-login-label":"أو قم بتسجيل الدخول باستخدام","idp-email-verification-display-name":"تأكيد البريد الإلكتروني","idp-email-verification-help-text":"ربط حسابك عن طريق التحقق من صحة البريد الإلكتروني الخاص بك.","idp-username-password-form-display-name":"اسم المستخدم و كلمة المرور","idp-username-password-form-help-text":"ربط حسابك عن طريق تسجيل الدخول.",finalDeletionConfirmation:"إذا قمت بحذف حسابك، فلا يمكن استعادته. للاحتفاظ بحسابك، انقر فوق إلغاء.",irreversibleAction:"هذا الإجراء لا رجعة فيه",deleteAccountConfirm:"تأكيد حذف الحساب",deletingImplies:"حذف حسابك يعني ضمناً:",errasingData:"محو جميع البيانات الخاصة بك",loggingOutImmediately:"تسجيل خروجك على الفور",accountUnusable:"أي استخدام لاحق للتطبيق لن يكون ممكناً مع هذا الحساب",userDeletedSuccessfully:"تم حذف المستخدم بنجاح","access-denied":"تم رفض الوصول","access-denied-when-idp-auth":"تم رفض الاتفاقية أثناء المصادقة مع {0}","frontchannel-logout.title":"تسجيل الخروج","frontchannel-logout.message":"أنت تقوم بتسجيل الخروج من التطبيقات التالية",logoutConfirmTitle:"تسجيل الخروج",logoutConfirmHeader:"هل تود تسجيل الخروج؟",doLogout:"تسجيل الخروج",readOnlyUsernameMessage:"لا يمكنك تحديث اسم المستخدم الخاص بك لأنه للقراءة فقط."}}}]); \ No newline at end of file diff --git a/3900.a01e955a.iframe.bundle.js b/3900.a01e955a.iframe.bundle.js deleted file mode 100644 index 3dc2f2e3..00000000 --- a/3900.a01e955a.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3900],{"./dist/login/i18n/baseMessages/ar.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"تسجيل دخول",doRegister:"تسجيل جديد",doCancel:"إلغاء",doSubmit:"إرسال",doBack:"رجوع",doYes:"نعم",doNo:"لا",doContinue:"استمرار",doIgnore:"تجاهل",doAccept:"موافقة",doDecline:"رفض",doForgotPassword:"نسيت كلمة المرور؟",doClickHere:"انقر هنا",doImpersonate:"انتحال شخصية",doTryAgain:"المحاولة مرة أخرى",doTryAnotherWay:"المجاولة بطريقة أخرى",doConfirmDelete:"تأكيد الحذف",errorDeletingAccount:"حدث خطأ أثناء حذف الحساب",deletingAccountForbidden:"ليس لديك الصلاحية الكافية لحذف حسابك، قم بالتواصل مع مسؤول النظام.",kerberosNotConfigured:"لم يتم تهيئة البروتوكول Kerberos",kerberosNotConfiguredTitle:"لم يتم تهيئة البروتوكول Kerberos",bypassKerberosDetail:"إما أنك لم تقم بتسجيل الدخول بواسطة البروتوكول Kerberos أو أن متصفحك لم يتم إعداده لتسجيل الدخول بواسطة البروتوكول Kerberos. الرجاء النقر على زر استمرار لتسجيل الدخول من خلال وسائل أخرى",kerberosNotSetUp:"لم يتم تهيئة البروتوكول Kerberos. لا يمكنك تسجيل الدخول.",registerTitle:"تسجيل",loginAccountTitle:"تسجيل الدخول إلى حسابك",loginTitle:"تسجيل الدخول إلى {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} انتحال شخصية المستخدم",impersonateTitleHtml:"{0} انتحال شخصية المستخدم",realmChoice:"المنظومة",unknownUser:"مستخدم غير معروف",loginTotpTitle:"إعداد تطبيق هاتف مصادق",loginProfileTitle:"تحديث معلومات الحساب",loginIdpReviewProfileTitle:"تحديث معلومات الحساب",loginTimeout:"انتهت مهلة محاولة تسجيل الدخول. سيتم البدء في عملية تسجيل الدخول من جديد.",reauthenticate:"يرجى إعادة المصادقة للمتابعة",oauthGrantTitle:"منح صلاحية الوصول إلى {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"تأكد من أنك تثق في {0} من خلال معرفة كيف سيتعامل {0} مع بياناتك.",oauthGrantReview:"يمكنك مراجعة ",oauthGrantTos:"بنود الخدمة.",oauthGrantPolicy:"سياسة الخصوصية.",errorTitle:"نعتذر...",errorTitleHtml:"نعتذر ...",emailVerifyTitle:"التحقق من البريد الإلكتروني",emailForgotTitle:"نسيت كلمة المرور؟",updateEmailTitle:"تحديث البريد الإلكتروني",emailUpdateConfirmationSentTitle:"تم إرسال رسالة التحقق عبر البريد الإلكتروني",emailUpdateConfirmationSent:"تم إرسال رسالة التحقق عبر البريد الإلكتروني إلى {0}. يجب عليك اتباع التعليمات لإكمال تحديث البريد الإلكتروني.",emailUpdatedTitle:"تم تحديث البريد الإلكتروني",emailUpdated:"تم تحديث البريد الإلكتروني الخاص بالحساب إلى {0}.",updatePasswordTitle:"تم تحديث كلمة المرور",codeSuccessTitle:"رمز النجاح",codeErrorTitle:"رمز الخطأ: {0}",displayUnsupported:"نوع العرض المطلوب غير مدعوم",browserRequired:"المتصفح مطلوب لعملية تسجيل الدخول",browserContinue:"المتصفح مطلوب لإكمال عملية تسجيل الدخول",browserContinuePrompt:"فتح المتصفح لإكمال عملية تسجيل الدخول؟ [ن/ل]:",browserContinueAnswer:"ن",usb:"منفذ USB",nfc:"قارئ بطاقة NFC",bluetooth:"بلوتوث",internal:"داخلي",unknown:"غير معروف",termsTitle:"الشروط والأحكام",termsText:"

يجب تحديد الشروط والأحكام

",termsPlainText:"يجب تحديد الشروط والأحكام.",recaptchaFailed:"فشل في اختبار Recaptcha",recaptchaNotConfigured:"مطلوب اختبار Recaptcha، ولكن لم يتم تكوينه",consentDenied:"تم رفض الموافقة.",noAccount:"مستخدم جديد؟",username:"اسم المستخدم",usernameOrEmail:"اسم المستخدم أو البريد الإلكتروني",firstName:"الاسم الأول",givenName:"الاسم الأول",fullName:"الاسم الكامل",lastName:"الاسم الأخير",familyName:"اسم العائلة",email:"البريد الإلكتروني",password:"كلمة المرور",passwordConfirm:"تأكيد كلمة المرور",passwordNew:"كلمة مرور جديدة",passwordNewConfirm:"تأكيد كلمة المرور الجديدة",rememberMe:"تذكرني",authenticatorCode:"رمز لمرة واحدة",address:"العنوان",street:"الشارع",locality:"المدينة",region:"الولاية أو المنطقة",postal_code:"الرمز البريدي",country:"الدولة",emailVerified:"تم التحقق من البريد الإلكتروني",website:"الموقع الإلكتروني",phoneNumber:"رقم الهاتف",phoneNumberVerified:"تم التحقق من رقم الهاتف",gender:"الجنس",birthday:"تاريخ الميلاد",zoneinfo:"التوقيت",gssDelegationCredential:"تفويض الاعتماد GSS",logoutOtherSessions:"تسجيل الخروج من الأجهزة الأخرى",profileScopeConsentText:"ملف تعريفي للمستخدم",emailScopeConsentText:"البريد الإلكتروني",addressScopeConsentText:"العنوان",phoneScopeConsentText:"رقم الهاتف",offlineAccessScopeConsentText:"الوصول دون اتصال",samlRoleListScopeConsentText:"الأدوار الخاصة بي",rolesScopeConsentText:"أدوار المستخدم",restartLoginTooltip:"إعادة تسجيل الدخول",loginTotpIntro:"تحتاج إلى إعداد مولّد كلمة مرور لمرة واحدة للوصول إلى هذا الحساب",loginTotpStep1:"قم بتثبيت إحدى التطبيقات التالية على هاتفك المتنقل:",loginTotpStep2:"افتح التطبيق ثم امسح رمز الاستجابة السريعة:",loginTotpStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",loginTotpStep3DeviceName:"ضع اسمًا للجهاز حتى يسهل عليك إدارة أجهزة المصادقة.",loginTotpManualStep2:"افتح التطبيق ثم أدخل المفتاح:",loginTotpManualStep3:"استخدم قيم التكوين التالية إذا سمح التطبيق بتعيينها:",loginTotpUnableToScan:"غير قادر على المسح؟",loginTotpScanBarcode:"مسح رمز الاستجابة السريعة؟",loginCredential:"بيانات الدخول",loginOtpOneTime:"رمز لمرة واحدة",loginTotpType:"النوع",loginTotpAlgorithm:"الخوارزمية",loginTotpDigits:"عدد الخانات",loginTotpInterval:"المدة الزمنية",loginTotpCounter:"العداد",loginTotpDeviceName:"اسم الجهاز","loginTotp.totp":"على أساس الوقت","loginTotp.hotp":"على أساس العداد",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"حدد طريقة تسجيل الدخول",oauthGrantRequest:"هل تود منح صلاحية الوصول هذه؟",inResource:"في",oauth2DeviceVerificationTitle:"تسجيل الدخول على الأجهزة",verifyOAuth2DeviceUserCode:"أدخل الرمز الظاهر على جهازك ثم انقر على زر الإرسال",oauth2DeviceInvalidUserCodeMessage:"رمز غير صالح، يرجى المحاولة مرة أخرى.",oauth2DeviceExpiredUserCodeMessage:"انتهت صلاحية الرمز. يرجى العودة إلى جهازك ثم محاولة الاتصال مرة أخرى.",oauth2DeviceVerificationCompleteHeader:"تم تسجيل الدخول على الجهاز بنجاح",oauth2DeviceVerificationCompleteMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى جهازك.",oauth2DeviceVerificationFailedHeader:"فشل في تسجيل الدخول على الجهاز",oauth2DeviceVerificationFailedMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى جهازك ومحاولة الاتصال مرة أخرى.",oauth2DeviceConsentDeniedMessage:"تم رفض الموافقة على الاتصال بالجهاز.",oauth2DeviceAuthorizationGrantDisabledMessage:"لا يُسمح للعميل ببدء الإجراء OAuth 2.0 Device Authorization Grant، حيث أنه معطل.",emailVerifyInstruction1:"تم إرسال بريد إلكتروني يحتوي على إرشادات للتحقق من عنوان بريدك الإلكتروني إلى عنوانك {0}.",emailVerifyInstruction2:"ألم تستلم رمز التحقق على بريدك الإلكتروني؟",emailVerifyInstruction3:"لإعادة إرسال البريد الإلكتروني.",emailLinkIdpTitle:"ربط {0}",emailLinkIdp1:"تم إرسال رسالة بريد إلكتروني بها إرشادات لربط الحساب {0} ({1}) بالحساب {2} الخاص بك.",emailLinkIdp2:"ألم تستلم رمز التحقق على بريدك الإلكتروني؟",emailLinkIdp3:"لإعادة إرسال البريد الإلكتروني.",emailLinkIdp4:"إذا كنت قد تحققت بالفعل من البريد الإلكتروني في متصفح مختلف",emailLinkIdp5:"للاستمرار.",backToLogin:"» العودة إلى تسجيل الدخول",emailInstruction:"أدخل اسم المستخدم أو عنوان البريد الإلكتروني الخاص بك وسنرسل لك تعليمات حول كيفية إنشاء كلمة مرور جديدة.",emailInstructionUsername:"أدخل اسم المستخدم الخاص بك وسنرسل لك تعليمات حول كيفية إنشاء كلمة مرور جديدة.",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":"واجهة سطر الأوامر للمسؤول","client_realm-management":"إدارة المنظومة",client_broker:"وسيط",requiredFields:"الحقول المطلوبة",invalidUserMessage:"اسم المستخدم أو كلمة مرور غير صالحة.",invalidUsernameMessage:"اسم المستخدم غير صالح.",invalidUsernameOrEmailMessage:"اسم المستخدم أو البريد الإلكتروني غير صالح.",invalidPasswordMessage:"كلمة المرور غير صالحة.",invalidEmailMessage:"البريد الإلكتروني غير صالح.",accountDisabledMessage:"الحساب معطل، تواصل مع مسؤول النظام.",accountTemporarilyDisabledMessage:"الحساب معطل مؤقتًا، تواصل مع مسؤول النظام أو حاول مرة أخرى لاحقًا.",expiredCodeMessage:"نفذ الوقت المسموح للدخول. الرجاء تسجيل الدخول مرة أخرى.",expiredActionMessage:"انتهى الإجراء. الرجاء الاستمرار في تسجيل الدخول الآن.",expiredActionTokenNoSessionMessage:"انتهى الإجراء.",expiredActionTokenSessionExistsMessage:"انتهى الإجراء. يرجى البدء مرة أخرى.",sessionLimitExceeded:"هناك جلسات كثيرة جدًا",missingFirstNameMessage:"الرجاء تحديد الاسم الأول.",missingLastNameMessage:"الرجاء تحديد الاسم الأخير.",missingEmailMessage:"الرجاء تحديد البريد الإلكتروني.",missingUsernameMessage:"الرجاء تحديد اسم المستخدم.",missingPasswordMessage:"الرجاء تحديد كلمة المرور.",missingTotpMessage:"الرجاء تحديد رمز التحقق.",missingTotpDeviceNameMessage:"الرجاء تحديد اسم الجهاز.",notMatchPasswordMessage:"كلمات المرور غير متطابقة.","error-invalid-value":"قيمة غير صالحة.","error-invalid-blank":"يرجى تحديد قيمة.","error-empty":"يرجى تحديد قيمة.","error-invalid-length":"الطول يجب أن يكون بين {1} و {2}.","error-invalid-length-too-short":"الطول يجب ألا يقل عن {1}.","error-invalid-length-too-long":"الطول يجب ألا يزيد عن {2}.","error-invalid-email":"بريد إلكتروني غير صالح.","error-invalid-number":"رقم غير صالح.","error-number-out-of-range":"الرقم يجب أن يكون بين {1} و {2}.","error-number-out-of-range-too-small":"الرقم يجب ألا تقل قيمته عن {1}.","error-number-out-of-range-too-big":"الرقم يجب ألا تزيد قيمته عن {2}.","error-pattern-no-match":"قيمة غير صالحة.","error-invalid-uri":"عنوان موقع غير صالح.","error-invalid-uri-scheme":"بادئة عنوان موقع غير صالحة.","error-invalid-uri-fragment":"ملحق عنوان موقع غير صالح.","error-user-attribute-required":"يرجى تحديد هذا الحقل.","error-invalid-date":"تاريخ غير صالح.","error-user-attribute-read-only":"هذا الحقل للقراءة فقط.","error-username-invalid-character":"القيمة تحتوي على حرف غير صالح.","error-person-name-invalid-character":"القيمة تحتوي على حرف غير صالح.",invalidPasswordExistingMessage:"كلمة المرور الحالية غير صالحة.",invalidPasswordBlacklistedMessage:"كلمة المرور غير صالحة: كلمة المرور في القائمة السوداء.",invalidPasswordConfirmMessage:"تأكيد كلمة المرور غير متطابق.",invalidTotpMessage:"رمز التحقق غير صالح.",usernameExistsMessage:"اسم المستخدم مستخدم مسبقًا.",emailExistsMessage:"البريد الإلكتروني مستخدم مسبقًا.",federatedIdentityExistsMessage:"المستخدم صاحب ({0}: {1}) موجود مسبقًا. الرجاء تسجيل الدخول إلى صفحة إدارة الحساب لربط الحساب.",federatedIdentityUnavailableMessage:"المستخدم {0} المصادق عليه بواسطة مزود الحسابات {1} غير موجود. الرجاء التواصل مع مسؤول النظام.",confirmLinkIdpTitle:"الحساب موجود مسبقًا",federatedIdentityConfirmLinkMessage:"المستخدم صاحب ({0}: {1}) موجود مسبقًا. كيف تريد الاستمرار؟",federatedIdentityConfirmReauthenticateMessage:"المصادقة لربط حسابك بـ {0}",nestedFirstBrokerFlowMessage:"لم يتم ربط مستخدم {0} ({1}) بأي مستخدم معروف.",confirmLinkIdpReviewProfile:"مراجعة الملف الشخصي",confirmLinkIdpContinue:"إضافة إلى الحساب الحالي",configureTotpMessage:"تحتاج إلى إعداد المصادقة بالهاتف الذكي لتفعيل حسابك.",configureBackupCodesMessage:"تحتاج إلى إعداد رموز المصادقة الاحتياطية لتفعيل حسابك.",updateProfileMessage:"تحتاج إلى تحديث الملف الشخصي لتفعيل حسابك.",updatePasswordMessage:"تحتاج إلى تحديث كلمة المرور لتفعيل حسابك.",updateEmailMessage:"تحتاج إلى تحديث البريد الإلكتروني لتفعيل حسابك.",resetPasswordMessage:"تحتاج إلى تحديث كلمة المرور الخاصة بك.",verifyEmailMessage:"تحتاج إلى التحقق من البريد الإلكتروني لتفعيل حسابك.",linkIdpMessage:"تحتاج إلى التحقق من البريد الإلكتروني لربط حسابك بـ {0}.",emailSentMessage:"من المفترض أن تتلقى بريدًا إلكترونيًا عما قريب يحتوي على مزيد من الإرشادات.",emailSendErrorMessage:"فشل في إرسال البريد الإلكتروني، يرجى المحاولة مرة أخرى في وقت لاحق.",accountUpdatedMessage:"تم تحديث الحساب الخاص بك.",accountPasswordUpdatedMessage:"تم تحديث كلمة المرور الخاصة بك.",delegationCompleteHeader:"تم تسجيل الدخول بنجاح",delegationCompleteMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى تطبيق وحدة التحكم الخاصة بك.",delegationFailedHeader:"فشل في تسجيل الدخول",delegationFailedMessage:"يمكنك إغلاق نافذة المتصفح هذه والعودة إلى تطبيق وحدة التحكم ومحاولة تسجيل الدخول مرة أخرى.",noAccessMessage:"لا وصول",invalidPasswordMinLengthMessage:"كلمة المرور غير صالحة: الحد الأدنى للطول {0}.",invalidPasswordMaxLengthMessage:"كلمة المرور غير صالحة: الحد الأقصى للطول {0}.",invalidPasswordMinDigitsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} أرقام على الأقل.",invalidPasswordMinLowerCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف صغيرة على الأقل.",invalidPasswordMinUpperCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف كبيرة على الأقل.",invalidPasswordMinSpecialCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} رموز على الأقل.",invalidPasswordNotUsernameMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لاسم المستخدم.",invalidPasswordNotEmailMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للبريد الإلكتروني.",invalidPasswordRegexPatternMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للأنماط المحددة.",invalidPasswordHistoryMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لأي من كلمات المرور الـ {0} الأخيرة.",invalidPasswordGenericMessage:"كلمة المرور غير صالحة: كلمة المرور الجديدة لا تتطابق مع سياسات كلمة المرور.",failedToProcessResponseMessage:"فشل في معالجة الاستجابة",httpsRequiredMessage:"البروتوكول HTTPS مطلوب",realmNotEnabledMessage:"المنظومة غير مفعلة",invalidRequestMessage:"طلب غير صالح",successLogout:"لقد قمت بتسجيل الخروج",failedLogout:"فشل في تسجيل الخروج",unknownLoginRequesterMessage:"طالب تسجيل الدخول غير معروف",loginRequesterNotEnabledMessage:"طالب تسجيل الدخول غير مفعل",bearerOnlyMessage:"لا يسمح للتطبيقات Bearer-only ببدء تسجيل الدخول باستخدام المتصفح",standardFlowDisabledMessage:"لا يسمح للعميل ببدء تسجيل الدخول باستخدام المتصفح مع قيمة response_type المعطاة. تم تعطيل الإجراء القياسي standard flow لهذا العميل.",implicitFlowDisabledMessage:"لا يسمح للعميل ببدء تسجيل الدخول باستخدام المتصفح مع قيمة response_type المعطاة. تم تعطيل الإجراء الضمني implicit flow لهذا العميل.",invalidRedirectUriMessage:"رابط إعادة التوجيه غير صالح",unsupportedNameIdFormatMessage:"صيغة غير مدعومة للقيمة NameID",invalidRequesterMessage:"طالب غير صالح",registrationNotAllowedMessage:"التسجيل غير مسموح به",resetCredentialNotAllowedMessage:"إعادة تعيين بيانات الدخول غير مسموح به",permissionNotApprovedMessage:"لم تتم الموافقة على الإذن.",noRelayStateInResponseMessage:"لا تواجد لقيمة Relay State في استجابة مزود الحسابات.",insufficientPermissionMessage:"أذونات غير كافية لربط الهويات.",couldNotProceedWithAuthenticationRequestMessage:"تعذرت متابعة طلب المصادقة لمزود الحسابات.",couldNotObtainTokenMessage:"تعذر الحصول على رمز مصادقة من مزود الحسابات.",unexpectedErrorRetrievingTokenMessage:"خطأ غير متوقع عند استرداد رمز المصادقة من مزود الحسابات.",unexpectedErrorHandlingResponseMessage:"خطأ غير متوقع عند التعامل مع الاستجابة من مزود الحسابات.",identityProviderAuthenticationFailedMessage:"فشلت المصادقة. تعذرت المصادقة مع مزود الحسابات.",couldNotSendAuthenticationRequestMessage:"تعذر إرسال طلب المصادقة إلى مزود الحسابات.",unexpectedErrorHandlingRequestMessage:"خطأ غير متوقع عند معالجة طلب المصادقة لمزود الحسابات.",invalidAccessCodeMessage:"رمز الوصول غير صالح.",sessionNotActiveMessage:"الجلسة غير نشطة.",invalidCodeMessage:"حدث خطأ، يرجى تسجيل الدخول مرة أخرى من خلال التطبيق الخاص بك.",cookieNotFoundMessage:"لم يتم العثور على ملف تعريف الارتباط. يرجى التأكد من تمكين ملفات تعريف الارتباط في متصفحك.",insufficientLevelOfAuthentication:"لم يتم استيفاء مستوى المصادقة المطلوب.",identityProviderUnexpectedErrorMessage:"خطأ غير متوقع عند المصادقة مع مزود الحسابات",identityProviderMissingStateMessage:"المعامل state مفقود في رد مزود الحسابات.",identityProviderInvalidResponseMessage:"رد غير صالح من مزود الحسابات.",identityProviderInvalidSignatureMessage:"توقيع غير صالح في رد مزود الحسابات.",identityProviderNotFoundMessage:"تعذر العثور على مزود الحسابات بالمعرف.",identityProviderLinkSuccess:"لقد نجحت في التحقق من بريدك الإلكتروني. يرجى الرجوع إلى متصفحك والمتابعة هناك في عملية تسجيل الدخول.",staleCodeMessage:"هذه الصفحة لم تعد صالحة، يرجى الرجوع إلى التطبيق الخاص بك وتسجيل الدخول مرة أخرى",realmSupportsNoCredentialsMessage:"لا تدعم المنظومة أي نوع من بيانات الدخول.",credentialSetupRequired:"لا يمكن تسجيل الدخول، مطلوب إعداد بيانات الدخول.",identityProviderNotUniqueMessage:"تدعم المنظومة عدة مزودي حسابات. تعذر تحديد مزود الحسابات الذي يجب استخدامه للمصادقة معه.",emailVerifiedMessage:"تم التحقق من عنوان البريد الإلكتروني الخاص بك.",staleEmailVerificationLink:"الرابط الذي نقرت عليه هو رابط قديم ولم يعد صالحًا. ربما تكون قد تحققت مسبقًا من بريدك الإلكتروني.",identityProviderAlreadyLinkedMessage:"الهوية الموحدة التي أرجعها {0} مرتبطة مسبقًا بمستخدم آخر.",confirmAccountLinking:"تأكيد ربط الحساب {0} من مزود الحسابات {1} مع حسابك.",confirmEmailAddressVerification:"تأكد من صحة عنوان البريد الإلكتروني {0}.",confirmExecutionOfActions:"قم بتنفيذ الإجراءات التالية",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",backToApplication:"» العودة إلى التطبيق",missingParameterMessage:"عوامل مفقودة: {0}",clientNotFoundMessage:"العميل غير موجود.",clientDisabledMessage:"العميل معطل.",invalidParameterMessage:"عامل غير صالح: {0}",alreadyLoggedIn:"لقد قمت بتسجيل الدخول مسبقًا.",differentUserAuthenticated:"لقد تمت مصادقتك مسبقًا كمستخدم مختلف ' {0} ' في هذه الجلسة. الرجاء تسجيل الخروج أولا.",brokerLinkingSessionExpired:"تم طلب ربط حساب الوسيط، ولكن الجلسة الحالية لم تعد صالحة.",proceedWithAction:"« انقر هنا للمتابعة",acrNotFulfilled:"لم يتم استيفاء متطلبات المصادقة","requiredAction.CONFIGURE_TOTP":"إعداد خاصية رمز التحقق","requiredAction.terms_and_conditions":"الأحكام والشروط","requiredAction.UPDATE_PASSWORD":"تحديث كلمة المرور","requiredAction.UPDATE_PROFILE":"تحديث الملف التعريفي","requiredAction.VERIFY_EMAIL":"التحقق من البريد الإلكتروني","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"توليد رموز مصادقة الاسترداد","requiredAction.webauthn-register-passwordless":"المصادقة دون كلمة مرور باستخدام Webauthn",invalidTokenRequiredActions:"الإجراءات المطلوبة المدرجة في الرابط غير صالحة",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":"رمز البريد الالكتروني:","console-accept-terms":"قبول الشروط؟ [ن/ل]:","console-accept":"ن","openshift.scope.user_info":"معلومات المستخدم","openshift.scope.user_check-access":"معلومات وصول المستخدم","openshift.scope.user_full":"الوصول الكامل","openshift.scope.list-projects":"قائمة المشاريع","saml.post-form.title":"إعادة توجيه المصادقة","saml.post-form.message":"يتم الآن إعادة التوجيه، الرجاء الانتظار.","saml.post-form.js-disabled":"تم تعطيل جافاسكربت. نوصي بشدة لتمكينه. انقر على الزر أدناه للمتابعة. ","saml.artifactResolutionServiceInvalidResponse":"غير قادر على إيجاد المعرف artifact.","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":"سجل الدخول باستخدام اسم المستخدم وكلمة المرور.","auth-recovery-authn-code-form-display-name":"رمز مصادقة الاسترداد","auth-recovery-authn-code-form-help-text":"أدخل رمز مصادقة الاسترداد من قائمة تم إنشاؤها مسبقًا.","auth-recovery-code-info-message":"أدخل رمز مصادقة الاسترداد المحدد.","auth-recovery-code-prompt":"رمز مصادقة الاسترداد #{0}","auth-recovery-code-header":"تسجيل الدخول باستخدام رمز مصادقة الاسترداد","recovery-codes-error-invalid":"رمز مصادقة الاسترداد غير صالح","recovery-code-config-header":"رموز مصادقة الاسترداد","recovery-code-config-warning-title":"لن تظهر رموز الاسترداد هذه مرة أخرى بعد مغادرة الصفحة","recovery-code-config-warning-message":"تأكد من طباعتها أو تنزيلها أو نسخها إلى مدير كلمات المرور واحتفظ بها. سيؤدي إلغاء هذا الإعداد إلى إزالة رموز مصادقة الاسترداد هذه من حسابك.","recovery-codes-print":"طباعة","recovery-codes-download":"تنزيل","recovery-codes-copy":"نسخ","recovery-codes-copied":"تم النسخ","recovery-codes-confirmation-message":"لقد قمت بحفظ هذه الرموز في مكان ما آمن","recovery-codes-action-complete":"إكمال الإعداد","recovery-codes-action-cancel":"إلغاء الإعداد","recovery-codes-download-file-header":"احتفظ برموز مصادقة الاسترداد هذه في مكان آمن.","recovery-codes-download-file-description":"رموز مصادقة الاسترداد هي رموز مرور تستخدم مرة واحدة وتسمح لك بتسجيل الدخول إلى حسابك إذا لم يكن لديك وصول إلى المصدق الخاص بك.","recovery-codes-download-file-date":"تم إنشاء هذه الرموز في","recovery-codes-label-default":"رموز مصادقة الاسترداد","webauthn-display-name":"مفتاح أمان","webauthn-help-text":"استخدم مفتاح الأمان لتسجيل الدخول.","webauthn-passwordless-display-name":"مفتاح أمان","webauthn-passwordless-help-text":"استخدم مفتاح الأمان لتسجيل الدخول دون كلمة مرور.","webauthn-login-title":"تسجيل الدخول باستخدام مفتاح الأمان","webauthn-registration-title":"تسجيل مفتاح أمان","webauthn-available-authenticators":"مفاتيح الأمان المتاحة","webauthn-unsupported-browser-text":"الخاصية WebAuthn غير مدعومة في هذا المتصفح. جرب متصفح آخر أو تواصل مع مسؤول النظام.","webauthn-doAuthenticate":"تسجيل الدخول باستخدام مفتاح الأمان","webauthn-createdAt-label":"تم إنشاؤه في","webauthn-error-title":"خطأ في مفتاح الأمان","webauthn-error-registration":"فشل في تسجيل مفتاح الأمان الخاص بك.
{0}","webauthn-error-api-get":"فشلت المصادقة بواسطة مفتاح الأمان.
{0}","webauthn-error-different-user":"أول مستخدم تمت مصادقته ليس هو الشخص الذي تمت مصادقته بواسطة مفتاح الأمان.","webauthn-error-auth-verification":"نتيجة مصادقة مفتاح الأمان غير صالحة.
{0}","webauthn-error-register-verification":"نتيجة تسجيل مفتاح الأمان غير صالحة.
{0}","webauthn-error-user-not-found":"مستخدم غير معروف تمت مصادقته بواسطة مفتاح الأمان.","identity-provider-redirector":"اتصل بمزود حسابات آخر","identity-provider-login-label":"أو قم بتسجيل الدخول باستخدام","idp-email-verification-display-name":"تأكيد البريد الإلكتروني","idp-email-verification-help-text":"ربط حسابك عن طريق التحقق من صحة البريد الإلكتروني الخاص بك.","idp-username-password-form-display-name":"اسم المستخدم و كلمة المرور","idp-username-password-form-help-text":"ربط حسابك عن طريق تسجيل الدخول.",finalDeletionConfirmation:"إذا قمت بحذف حسابك، فلا يمكن استعادته. للاحتفاظ بحسابك، انقر فوق إلغاء.",irreversibleAction:"هذا الإجراء لا رجعة فيه",deleteAccountConfirm:"تأكيد حذف الحساب",deletingImplies:"حذف حسابك يعني ضمناً:",errasingData:"محو جميع البيانات الخاصة بك",loggingOutImmediately:"تسجيل خروجك على الفور",accountUnusable:"أي استخدام لاحق للتطبيق لن يكون ممكناً مع هذا الحساب",userDeletedSuccessfully:"تم حذف المستخدم بنجاح","access-denied":"تم رفض الوصول","frontchannel-logout.title":"تسجيل الخروج","frontchannel-logout.message":"أنت تقوم بتسجيل الخروج من التطبيقات التالية",logoutConfirmTitle:"تسجيل الخروج",logoutConfirmHeader:"هل تود تسجيل الخروج؟",doLogout:"تسجيل الخروج",readOnlyUsernameMessage:"لا يمكنك تحديث اسم المستخدم الخاص بك لأنه للقراءة فقط."}}}]); \ No newline at end of file diff --git a/3917.d8e9cbae.iframe.bundle.js b/3917.59ebeb87.iframe.bundle.js similarity index 51% rename from 3917.d8e9cbae.iframe.bundle.js rename to 3917.59ebeb87.iframe.bundle.js index dff6f546..41ecbdc6 100644 --- a/3917.d8e9cbae.iframe.bundle.js +++ b/3917.59ebeb87.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3917],{"./dist/account/i18n/baseMessages/ar.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"حفظ",doCancel:"إلغاء",doLogOutAllSessions:"تسجيل الخروج لجميع الجلسات",doRemove:"إزالة",doAdd:"إضافة",doSignOut:"تسجيل خروج",doLogIn:"تسجيل دخول",doLink:"ربط",noAccessMessage:"الوصول غير مسموح",personalInfoSidebarTitle:"البيانات الشخصية",accountSecuritySidebarTitle:"أمان الحساب",signingInSidebarTitle:"عملية تسجيل الدخول",deviceActivitySidebarTitle:"نشاط الأجهزة",linkedAccountsSidebarTitle:"الحسابات المرتبطة",editAccountHtmlTitle:"تعديل الحساب",personalInfoHtmlTitle:"البيانات الشخصية",federatedIdentitiesHtmlTitle:"الهويات المتحدة",accountLogHtmlTitle:"سجل الحساب",changePasswordHtmlTitle:"تغيير كلمة المرور",deviceActivityHtmlTitle:"نشاط الأجهزة",sessionsHtmlTitle:"الجلسات",accountManagementTitle:"إدارة الحساب",authenticatorTitle:"تطبيقات المصادقة",applicationsHtmlTitle:"التطبيقات",linkedAccountsHtmlTitle:"الحسابات المرتبطة",accountManagementWelcomeMessage:"أهلاً بك في صفحة إدارة الحساب",personalInfoIntroMessage:"قم بإدارة البيانات الأساسية الخاصة بك",accountSecurityTitle:"أمان الحساب",accountSecurityIntroMessage:"تحكم في كلمة المرور والوصول لحسابك",applicationsIntroMessage:"قم بتتبع وإدارة أذونات التطبيقات للوصول إلى حسابك",resourceIntroMessage:"شارك الموارد مع أعضاء الفريق",passwordLastUpdateMessage:"تم تغيير كلمة المرور الخاصة بك في",updatePasswordTitle:"تغيير كلمة المرور",updatePasswordMessageTitle:"تأكد من اختيار كلمة مرور قوية",updatePasswordMessage:"كلمة المرور القوية تتكون من مزيج من الأرقام والحروف والرموز، بحيث يصعب تخمينها ولا تمثل كلمات حقيقية، وتستخدم لهذا الحساب فقط.",personalSubTitle:"بياناتك الأساسية",personalSubMessage:"قم بإدارة البيانات الأساسية الخاصة بك.",authenticatorCode:"رمز لمرة واحدة",email:"البريد الإلكتروني",firstName:"الاسم الأول",givenName:"الاسم الأول",fullName:"الاسم الكامل",lastName:"الاسم الأخير",familyName:"اسم العائلة",password:"كلمة المرور",currentPassword:"كلمة المرور الحالية",passwordConfirm:"تأكيد",passwordNew:"كلمة مرور جديدة",username:"اسم المستخدم",address:"العنوان",street:"الشارع",locality:"المدينة",region:"الولاية أو المنطقة",postal_code:"الرمز البريدي",country:"الدولة",emailVerified:"تم التحقق من البريد الإلكتروني",website:"الموقع الإلكتروني",phoneNumber:"رقم الهاتف",phoneNumberVerified:"تم التحقق من رقم الهاتف",gender:"الجنس",birthday:"تاريخ الميلاد",zoneinfo:"التوقيت",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-groups":"عرض المجموعات","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":"واجهة سطر الأوامر للمسؤول","client_realm-management":"إدارة المنظومة",client_broker:"وسيط",requiredFields:"الحقول المطلوبة",allFieldsRequired:"جميع الحقول مطلوبة",backToApplication:"» العودة إلى التطبيق",backTo:"العودة إلى {0}",date:"التاريخ",event:"الحدث",ip:"عنوان الشبكة",client:"العميل",clients:"العملاء",details:"التفاصيل",started:"ابتدأ في",lastAccess:"آخر وصول",expires:"ينتهي في",applications:"التطبيقات",account:"الحساب",federatedIdentity:"الهوية المتحدة",authenticator:"تطبيقات المصادقة","device-activity":"نشاط الأجهزة",sessions:"الجلسات",log:"السجل",application:"التطبيق",availableRoles:"الأدوار المتاحة",grantedPermissions:"الأذونات الممنوحة",grantedPersonalInfo:"البيانات الشخصية الممنوحة",additionalGrants:"المنح الإضافية",action:"الإجراء",inResource:"في",fullAccess:"وصول شامل",offlineToken:"رمز دون اتصال",revoke:"إبطال المنحة",configureAuthenticators:"تطبيقات المصادقة المهيئة",mobile:"هاتف متنقل",totpStep1:"قم بتثبيت إحدى التطبيقات التالية على هاتفك المتنقل:",totpStep2:"افتح التطبيق ثم امسح رمز الاستجابة السريعة:",totpStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",totpStep3DeviceName:"ضع اسمًا للجهاز حتى يسهل عليك إدارة أجهزة المصادقة.",totpManualStep2:"افتح التطبيق ثم أدخل المفتاح:",totpManualStep3:"استخدم قيم التكوين التالية إذا سمح التطبيق بتعيينها:",totpUnableToScan:"غير قادر على المسح؟",totpScanBarcode:"مسح رمز الاستجابة السريعة؟","totp.totp":"على أساس الوقت","totp.hotp":"على أساس العداد",totpType:"النوع",totpAlgorithm:"الخوارزمية",totpDigits:"عدد الخانات",totpInterval:"المدة الزمنية",totpCounter:"العداد",totpDeviceName:"اسم الجهاز",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"هذا الإجراء لا رجعة فيه",deletingImplies:"حذف حسابك يؤدي إلى:",errasingData:"محو جميع البيانات الخاصة بك",loggingOutImmediately:"تسجيل خروجك على الفور",accountUnusable:"أي استخدام لاحق للتطبيق لن يكون ممكنًا مع هذا الحساب",missingUsernameMessage:"الرجاء تحديد اسم المستخدم.",missingFirstNameMessage:"الرجاء تحديد الاسم الأول.",invalidEmailMessage:"البريد الإلكتروني غير صالح.",missingLastNameMessage:"الرجاء تحديد الاسم الأخير.",missingEmailMessage:"الرجاء تحديد البريد الإلكتروني.",missingPasswordMessage:"الرجاء تحديد كلمة المرور.",notMatchPasswordMessage:"كلمات المرور غير متطابقة.",invalidUserMessage:"مستخدم غير صالح",updateReadOnlyAttributesRejectedMessage:"تم رفض تحديث البيانات التي هي للقراءة فقط",missingTotpMessage:"الرجاء تحديد رمز التحقق.",missingTotpDeviceNameMessage:"الرجاء تحديد اسم الجهاز.",invalidPasswordExistingMessage:"كلمة المرور الحالية غير صالحة.",invalidPasswordConfirmMessage:"تأكيد كلمة المرور غير متطابق.",invalidTotpMessage:"رمز التحقق غير صالح.",usernameExistsMessage:"اسم المستخدم مستخدم مسبقًا.",emailExistsMessage:"البريد الإلكتروني مستخدم مسبقًا.",readOnlyUserMessage:"لا يمكنك تحديث حسابك لأنه في وضعية القراءة فقط.",readOnlyUsernameMessage:"لا يمكنك تحديث اسم المستخدم لأنه في وضعية القراءة فقط.",readOnlyPasswordMessage:"لا يمكنك تحديث كلمة المرور لأن حسابك في وضعية القراءة فقط.",successTotpMessage:"تم تهيئة تطبيق مصادقة.",successTotpRemovedMessage:"تم إزالة تطبيق مصادقة.",successGrantRevokedMessage:"تم إبطال الصلاحيات الممنوحة بنجاح.",accountUpdatedMessage:"تم تحديث الحساب الخاص بك.",accountPasswordUpdatedMessage:"تم تحديث كلمة المرور الخاصة بك.",missingIdentityProviderMessage:"مزود الحسابات غير محدد.",invalidFederatedIdentityActionMessage:"إجراء غير صالح أو مفقود.",identityProviderNotFoundMessage:"لم يتم العثور على مزود الحسابات المحدد.",federatedIdentityLinkNotActiveMessage:"هذه الهوية لم تعد نشطة.",federatedIdentityRemovingLastProviderMessage:"لا يمكنك إزالة آخر هوية متحدة لأنه ليس لديك كلمة مرور.",identityProviderRedirectErrorMessage:"فشل في إعادة التوجيه إلى مزود الحسابات.",identityProviderRemovedMessage:"تمت إزالة مزود الحسابات بنجاح.",identityProviderAlreadyLinkedMessage:"الهوية الموحدة التي أرجعها {0} مرتبطة مسبقًا بمستخدم آخر.",staleCodeAccountMessage:"انتهت صلاحية الصفحة. يرجى المحاولة مرة أخرى.",consentDenied:"تم رفض الاتفاقية.",accountDisabledMessage:"الحساب معطل، تواصل مع مسؤول النظام.",accountTemporarilyDisabledMessage:"الحساب معطل مؤقتًا، تواصل مع مسؤول النظام أو حاول مرة أخرى لاحقًا.",invalidPasswordMinLengthMessage:"كلمة المرور غير صالحة: الحد الأدنى للطول {0}.",invalidPasswordMaxLengthMessage:"كلمة المرور غير صالحة: الحد الأقصى للطول {0}.",invalidPasswordMinLowerCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف صغيرة على الأقل.",invalidPasswordMinDigitsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} أرقام على الأقل.",invalidPasswordMinUpperCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف كبيرة على الأقل.",invalidPasswordMinSpecialCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} رموز على الأقل.",invalidPasswordNotUsernameMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لاسم المستخدم.",invalidPasswordNotEmailMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للبريد الإلكتروني.",invalidPasswordRegexPatternMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للأنماط المحددة.",invalidPasswordHistoryMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لأي من كلمات المرور الـ {0} الأخيرة.",invalidPasswordBlacklistedMessage:"كلمة المرور غير صالحة: كلمة المرور في القائمة السوداء.",invalidPasswordGenericMessage:"كلمة المرور غير صالحة: كلمة المرور الجديدة لا تتطابق مع سياسات كلمة المرور.",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:"لم يتم مشاركة المورد",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"الاسم",applicationType:"نوع التطبيق",applicationInUse:"تطبيق قيد الاستخدام فقط",clearAllFilter:"مسح كل عوامل التصفية",activeFilters:"عوامل التصفية النشطة",filterByName:"التصفية بالاسم...",allApps:"جميع التطبيقات",internalApps:"التطبيقات الداخلية",thirdpartyApps:"تطبيقات طرف ثالث",appResults:"النتائج",clientNotFoundMessage:"العميل غير موجود.",authorizedProvider:"مزود حسابات معتمد",authorizedProviderMessage:"مزودو الحسابات المعتمدون المرتبطون بحسابك",identityProvider:"مزود حسابات",identityProviderMessage:"لربط حسابك بمزودي الحسابات الذين قمت بإعدادهم",socialLogin:"تسجيل دخول منصات التواصل الاجتماعي",userDefined:"معرف من قبل المستخدم",removeAccess:"إزالة صلاحية الوصول",removeAccessMessage:"ستحتاج إلى منح صلاحية الوصول مرة أخرى، إذا كنت تريد استخدام حساب التطبيق هذا.",authenticatorStatusMessage:"المصادقة الثنائية حاليًا",authenticatorFinishSetUpTitle:"المصادقة الثنائية الخاصة بك",authenticatorFinishSetUpMessage:"في كل مرة تقوم فيها بتسجيل الدخول إلى حسابك، سيطلب منك تقديم رمز مصادقة ثنائي.",authenticatorSubTitle:"إعداد المصادقة الثنائية",authenticatorSubMessage:"لتعزيز أمان حسابك، قم بتمكين طريقة واحدة على الأقل من طرق المصادقة الثنائية المتاحة.",authenticatorMobileTitle:"المصادقة بالهاتف الذكي",authenticatorMobileMessage:"استخدم المصادقة بالهاتف الذكي للحصول على رموز التحقق كمصادقة ثنائية.",authenticatorMobileFinishSetUpMessage:"تم ربط المصادقة بهاتفك.",authenticatorActionSetup:"إعداد",authenticatorSMSTitle:"رمز الرسائل النصية القصيرة",authenticatorSMSMessage:"سيتم إرسال رمز التحقق إلى هاتفك كمصادقة ثنائية.",authenticatorSMSFinishSetUpMessage:"تم إرسال الرسالة النصية إلى",authenticatorDefaultStatus:"افتراضي",authenticatorChangePhone:"تغيير رقم الهاتف الجوال",authenticatorMobileSetupTitle:"إعداد تطبيق هاتف مصادق",smscodeIntroMessage:"أدخل رقم هاتفك المحمول وسوف يتم إرسال رمز التحقق إلى هاتفك.",mobileSetupStep1:"قم بتثبيت تطبيق مصادقة على هاتفك. التطبيقات المدرجة هنا هي المدعومة.",mobileSetupStep2:"افتح التطبيق وقم بمسح رمز الاستجابة السريعة:",mobileSetupStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",scanBarCode:"تريد مسح رمز الاستجابة السريعة؟",enterBarCode:"أدخل رمز التحقق ذات الاستخدام الواحد",doCopy:"نسخ",doFinish:"إنهاء",authenticatorSMSCodeSetupTitle:"إعداد رمز الرسائل النصية القصيرة",chooseYourCountry:"اختر دولتك",enterYourPhoneNumber:"أدخل رقم الهاتف الجوال",sendVerficationCode:"إرسال رمز تحقق",enterYourVerficationCode:"أدخل رمز التحقق",authenticatorBackupCodesSetupTitle:"إعداد رموز المصادقة الاحتياطية",realmName:"المنظومة",doDownload:"تنزيل",doPrint:"طباعة",generateNewBackupCodes:"توليد رموز مصادقة احتياطية جديدة",backtoAuthenticatorPage:"العودة إلى صفحة المصادقة",resources:"الموارد",sharedwithMe:"تم مشاركتها معي",share:"مشاركة",sharedwith:"تم مشاركتها مع",accessPermissions:"أذونات الوصول",permissionRequests:"طلبات الإذن",approve:"موافقة",approveAll:"موافقة على الكل",people:"أشخاص",perPage:"لكل صفحة",currentPage:"الصفحة الحالية",sharetheResource:"مشاركة المورد",group:"مجموعة",selectPermission:"اختر الإذن",addPeople:"أضف أشخاصًا لمشاركة موردك معهم",addTeam:"أضف فريقًا لمشاركة موردك معهم",myPermissions:"الأذونات الخاصة بي",waitingforApproval:"بانتظار الموافقة",anyPermission:"أي إذن","openshift.scope.user_info":"معلومات المستخدم","openshift.scope.user_check-access":"معلومات وصول المستخدم","openshift.scope.user_full":"الوصول الكامل","openshift.scope.list-projects":"قائمة المشاريع","error-invalid-value":"قيمة غير صالحة.","error-invalid-blank":"يرجى تحديد قيمة.","error-empty":"يرجى تحديد قيمة.","error-invalid-length":"الحقل {0} يجب أن يكون طوله بين {1} و {2}.","error-invalid-length-too-short":"الحقل {0} يجب ألا يقل طوله عن {1}.","error-invalid-length-too-long":"الحقل {0} يجب ألا يزيد طوله عن {2}.","error-invalid-email":"بريد إلكتروني غير صالح.","error-invalid-number":"رقم غير صالح.","error-number-out-of-range":"الحقل {0} يجب أن يكون رقمًا بين {1} و {2}.","error-number-out-of-range-too-small":"الحقل {0} يجب ألا تقل قيمته عن {1}.","error-number-out-of-range-too-big":"الحقل {0} يجب ألا تزيد قيمته عن {2}.","error-pattern-no-match":"قيمة غير صالحة.","error-invalid-uri":"عنوان موقع غير صالح.","error-invalid-uri-scheme":"بادئة عنوان موقع غير صالحة.","error-invalid-uri-fragment":"ملحق عنوان موقع غير صالح.","error-user-attribute-required":"يرجى تحديد الحقل {0}.","error-invalid-date":"تاريخ غير صالح.","error-user-attribute-read-only":"الحقل {0} للقراءة فقط.","error-username-invalid-character":"اسم المستخدم يحتوي على حرف غير صالح.","error-person-name-invalid-character":"الاسم يحتوي على حرف غير صالح."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3917],{"./dist/account/i18n/baseMessages/ar.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"حفظ",doCancel:"إلغاء",doLogOutAllSessions:"تسجيل الخروج لجميع الجلسات",doRemove:"إزالة",doAdd:"إضافة",doSignOut:"تسجيل خروج",doLogIn:"تسجيل دخول",doLink:"ربط",noAccessMessage:"الوصول غير مسموح",personalInfoSidebarTitle:"البيانات الشخصية",accountSecuritySidebarTitle:"أمان الحساب",signingInSidebarTitle:"عملية تسجيل الدخول",deviceActivitySidebarTitle:"نشاط الأجهزة",linkedAccountsSidebarTitle:"الحسابات المرتبطة",editAccountHtmlTitle:"تعديل الحساب",personalInfoHtmlTitle:"البيانات الشخصية",federatedIdentitiesHtmlTitle:"الهويات المتحدة",accountLogHtmlTitle:"سجل الحساب",changePasswordHtmlTitle:"تغيير كلمة المرور",deviceActivityHtmlTitle:"نشاط الأجهزة",sessionsHtmlTitle:"الجلسات",accountManagementTitle:"إدارة الحساب",authenticatorTitle:"تطبيقات المصادقة",applicationsHtmlTitle:"التطبيقات",linkedAccountsHtmlTitle:"الحسابات المرتبطة",accountManagementWelcomeMessage:"أهلاً بك في صفحة إدارة الحساب",personalInfoIntroMessage:"قم بإدارة البيانات الأساسية الخاصة بك",accountSecurityTitle:"أمان الحساب",accountSecurityIntroMessage:"تحكم في كلمة المرور والوصول لحسابك",applicationsIntroMessage:"قم بتتبع وإدارة أذونات التطبيقات للوصول إلى حسابك",resourceIntroMessage:"شارك الموارد مع أعضاء الفريق",passwordLastUpdateMessage:"تم تغيير كلمة المرور الخاصة بك في",updatePasswordTitle:"تغيير كلمة المرور",updatePasswordMessageTitle:"تأكد من اختيار كلمة مرور قوية",updatePasswordMessage:"كلمة المرور القوية تتكون من مزيج من الأرقام والحروف والرموز، بحيث يصعب تخمينها ولا تمثل كلمات حقيقية، وتستخدم لهذا الحساب فقط.",personalSubTitle:"بياناتك الأساسية",personalSubMessage:"قم بإدارة البيانات الأساسية الخاصة بك.",authenticatorCode:"رمز لمرة واحدة",email:"البريد الإلكتروني",firstName:"الاسم الأول",givenName:"الاسم الأول",fullName:"الاسم الكامل",lastName:"الاسم الأخير",familyName:"اسم العائلة",password:"كلمة المرور",currentPassword:"كلمة المرور الحالية",passwordConfirm:"تأكيد",passwordNew:"كلمة مرور جديدة",username:"اسم المستخدم",address:"العنوان",street:"الشارع",locality:"المدينة",region:"الولاية أو المنطقة",postal_code:"الرمز البريدي",country:"الدولة",emailVerified:"تم التحقق من البريد الإلكتروني",website:"الموقع الإلكتروني",phoneNumber:"رقم الهاتف",phoneNumberVerified:"تم التحقق من رقم الهاتف",gender:"الجنس",birthday:"تاريخ الميلاد",zoneinfo:"التوقيت",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-groups":"عرض المجموعات","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":"واجهة سطر الأوامر للمسؤول","client_realm-management":"إدارة المنظومة",client_broker:"وسيط",requiredFields:"الحقول المطلوبة",allFieldsRequired:"جميع الحقول مطلوبة",backToApplication:"» العودة إلى التطبيق",backTo:"العودة إلى {0}",date:"التاريخ",event:"الحدث",ip:"عنوان الشبكة",client:"العميل",clients:"العملاء",details:"التفاصيل",started:"ابتدأ في",lastAccess:"آخر وصول",expires:"ينتهي في",applications:"التطبيقات",account:"الحساب",federatedIdentity:"الهوية المتحدة",authenticator:"تطبيقات المصادقة","device-activity":"نشاط الأجهزة",sessions:"الجلسات",log:"السجل",application:"التطبيق",availableRoles:"الأدوار المتاحة",grantedPermissions:"الأذونات الممنوحة",grantedPersonalInfo:"البيانات الشخصية الممنوحة",additionalGrants:"المنح الإضافية",action:"الإجراء",inResource:"في",fullAccess:"وصول شامل",offlineToken:"رمز دون اتصال",revoke:"إبطال المنحة",configureAuthenticators:"تطبيقات المصادقة المهيئة",mobile:"هاتف متنقل",totpStep1:"قم بتثبيت إحدى التطبيقات التالية على هاتفك المتنقل:",totpStep2:"افتح التطبيق ثم امسح رمز الاستجابة السريعة:",totpStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",totpStep3DeviceName:"ضع اسمًا للجهاز حتى يسهل عليك إدارة أجهزة المصادقة.",totpManualStep2:"افتح التطبيق ثم أدخل المفتاح:",totpManualStep3:"استخدم قيم التكوين التالية إذا سمح التطبيق بتعيينها:",totpUnableToScan:"غير قادر على المسح؟",totpScanBarcode:"مسح رمز الاستجابة السريعة؟","totp.totp":"على أساس الوقت","totp.hotp":"على أساس العداد",totpType:"النوع",totpAlgorithm:"الخوارزمية",totpDigits:"عدد الخانات",totpInterval:"المدة الزمنية",totpCounter:"العداد",totpDeviceName:"اسم الجهاز",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"هذا الإجراء لا رجعة فيه",deletingImplies:"حذف حسابك يؤدي إلى:",errasingData:"محو جميع البيانات الخاصة بك",loggingOutImmediately:"تسجيل خروجك على الفور",accountUnusable:"أي استخدام لاحق للتطبيق لن يكون ممكنًا مع هذا الحساب",missingUsernameMessage:"الرجاء تحديد اسم المستخدم.",missingFirstNameMessage:"الرجاء تحديد الاسم الأول.",invalidEmailMessage:"البريد الإلكتروني غير صالح.",missingLastNameMessage:"الرجاء تحديد الاسم الأخير.",missingEmailMessage:"الرجاء تحديد البريد الإلكتروني.",missingPasswordMessage:"الرجاء تحديد كلمة المرور.",notMatchPasswordMessage:"كلمات المرور غير متطابقة.",invalidUserMessage:"مستخدم غير صالح",updateReadOnlyAttributesRejectedMessage:"تم رفض تحديث البيانات التي هي للقراءة فقط",missingTotpMessage:"الرجاء تحديد رمز التحقق.",missingTotpDeviceNameMessage:"الرجاء تحديد اسم الجهاز.",invalidPasswordExistingMessage:"كلمة المرور الحالية غير صالحة.",invalidPasswordConfirmMessage:"تأكيد كلمة المرور غير متطابق.",invalidTotpMessage:"رمز التحقق غير صالح.",usernameExistsMessage:"اسم المستخدم مستخدم مسبقًا.",emailExistsMessage:"البريد الإلكتروني مستخدم مسبقًا.",readOnlyUserMessage:"لا يمكنك تحديث حسابك لأنه في وضعية القراءة فقط.",readOnlyUsernameMessage:"لا يمكنك تحديث اسم المستخدم لأنه في وضعية القراءة فقط.",readOnlyPasswordMessage:"لا يمكنك تحديث كلمة المرور لأن حسابك في وضعية القراءة فقط.",successTotpMessage:"تم تهيئة تطبيق مصادقة.",successTotpRemovedMessage:"تم إزالة تطبيق مصادقة.",successGrantRevokedMessage:"تم إبطال الصلاحيات الممنوحة بنجاح.",accountUpdatedMessage:"تم تحديث الحساب الخاص بك.",accountPasswordUpdatedMessage:"تم تحديث كلمة المرور الخاصة بك.",missingIdentityProviderMessage:"مزود الحسابات غير محدد.",invalidFederatedIdentityActionMessage:"إجراء غير صالح أو مفقود.",identityProviderNotFoundMessage:"لم يتم العثور على مزود الحسابات المحدد.",federatedIdentityLinkNotActiveMessage:"هذه الهوية لم تعد نشطة.",federatedIdentityRemovingLastProviderMessage:"لا يمكنك إزالة آخر هوية متحدة لأنه ليس لديك كلمة مرور.",identityProviderRedirectErrorMessage:"فشل في إعادة التوجيه إلى مزود الحسابات.",identityProviderRemovedMessage:"تمت إزالة مزود الحسابات بنجاح.",identityProviderAlreadyLinkedMessage:"الهوية الموحدة التي أرجعها {0} مرتبطة مسبقًا بمستخدم آخر.",staleCodeAccountMessage:"انتهت صلاحية الصفحة. يرجى المحاولة مرة أخرى.",consentDenied:"تم رفض الاتفاقية.","access-denied-when-idp-auth":"تم رفض الاتفاقية أثناء المصادقة مع {0}",accountDisabledMessage:"الحساب معطل، تواصل مع مسؤول النظام.",accountTemporarilyDisabledMessage:"الحساب معطل مؤقتًا، تواصل مع مسؤول النظام أو حاول مرة أخرى لاحقًا.",invalidPasswordMinLengthMessage:"كلمة المرور غير صالحة: الحد الأدنى للطول {0}.",invalidPasswordMaxLengthMessage:"كلمة المرور غير صالحة: الحد الأقصى للطول {0}.",invalidPasswordMinLowerCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف صغيرة على الأقل.",invalidPasswordMinDigitsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} أرقام على الأقل.",invalidPasswordMinUpperCaseCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} حروف كبيرة على الأقل.",invalidPasswordMinSpecialCharsMessage:"كلمة المرور غير صالحة: يجب أن تحتوي على {0} رموز على الأقل.",invalidPasswordNotUsernameMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لاسم المستخدم.",invalidPasswordNotEmailMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للبريد الإلكتروني.",invalidPasswordRegexPatternMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة للأنماط المحددة.",invalidPasswordHistoryMessage:"كلمة المرور غير صالحة: يجب ألا تكون مطابقة لأي من كلمات المرور الـ {0} الأخيرة.",invalidPasswordBlacklistedMessage:"كلمة المرور غير صالحة: كلمة المرور في القائمة السوداء.",invalidPasswordGenericMessage:"كلمة المرور غير صالحة: كلمة المرور الجديدة لا تتطابق مع سياسات كلمة المرور.",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:"لم يتم مشاركة المورد",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"الاسم",applicationType:"نوع التطبيق",applicationInUse:"تطبيق قيد الاستخدام فقط",clearAllFilter:"مسح كل عوامل التصفية",activeFilters:"عوامل التصفية النشطة",filterByName:"التصفية بالاسم...",allApps:"جميع التطبيقات",internalApps:"التطبيقات الداخلية",thirdpartyApps:"تطبيقات طرف ثالث",appResults:"النتائج",clientNotFoundMessage:"العميل غير موجود.",authorizedProvider:"مزود حسابات معتمد",authorizedProviderMessage:"مزودو الحسابات المعتمدون المرتبطون بحسابك",identityProvider:"مزود حسابات",identityProviderMessage:"لربط حسابك بمزودي الحسابات الذين قمت بإعدادهم",socialLogin:"تسجيل دخول منصات التواصل الاجتماعي",userDefined:"معرف من قبل المستخدم",removeAccess:"إزالة صلاحية الوصول",removeAccessMessage:"ستحتاج إلى منح صلاحية الوصول مرة أخرى، إذا كنت تريد استخدام حساب التطبيق هذا.",authenticatorStatusMessage:"المصادقة الثنائية حاليًا",authenticatorFinishSetUpTitle:"المصادقة الثنائية الخاصة بك",authenticatorFinishSetUpMessage:"في كل مرة تقوم فيها بتسجيل الدخول إلى حسابك، سيطلب منك تقديم رمز مصادقة ثنائي.",authenticatorSubTitle:"إعداد المصادقة الثنائية",authenticatorSubMessage:"لتعزيز أمان حسابك، قم بتمكين طريقة واحدة على الأقل من طرق المصادقة الثنائية المتاحة.",authenticatorMobileTitle:"المصادقة بالهاتف الذكي",authenticatorMobileMessage:"استخدم المصادقة بالهاتف الذكي للحصول على رموز التحقق كمصادقة ثنائية.",authenticatorMobileFinishSetUpMessage:"تم ربط المصادقة بهاتفك.",authenticatorActionSetup:"إعداد",authenticatorSMSTitle:"رمز الرسائل النصية القصيرة",authenticatorSMSMessage:"سيتم إرسال رمز التحقق إلى هاتفك كمصادقة ثنائية.",authenticatorSMSFinishSetUpMessage:"تم إرسال الرسالة النصية إلى",authenticatorDefaultStatus:"افتراضي",authenticatorChangePhone:"تغيير رقم الهاتف الجوال",authenticatorMobileSetupTitle:"إعداد تطبيق هاتف مصادق",smscodeIntroMessage:"أدخل رقم هاتفك المحمول وسوف يتم إرسال رمز التحقق إلى هاتفك.",mobileSetupStep1:"قم بتثبيت تطبيق مصادقة على هاتفك. التطبيقات المدرجة هنا هي المدعومة.",mobileSetupStep2:"افتح التطبيق وقم بمسح رمز الاستجابة السريعة:",mobileSetupStep3:"أدخل رمز التحقق ذات الاستخدام الواحد والصادر من التطبيق ثم انقر على زر الحفظ لإتمام الإعداد.",scanBarCode:"تريد مسح رمز الاستجابة السريعة؟",enterBarCode:"أدخل رمز التحقق ذات الاستخدام الواحد",doCopy:"نسخ",doFinish:"إنهاء",authenticatorSMSCodeSetupTitle:"إعداد رمز الرسائل النصية القصيرة",chooseYourCountry:"اختر دولتك",enterYourPhoneNumber:"أدخل رقم الهاتف الجوال",sendVerficationCode:"إرسال رمز تحقق",enterYourVerficationCode:"أدخل رمز التحقق",authenticatorBackupCodesSetupTitle:"إعداد رموز المصادقة الاحتياطية",realmName:"المنظومة",doDownload:"تنزيل",doPrint:"طباعة",generateNewBackupCodes:"توليد رموز مصادقة احتياطية جديدة",backtoAuthenticatorPage:"العودة إلى صفحة المصادقة",resources:"الموارد",sharedwithMe:"تم مشاركتها معي",share:"مشاركة",sharedwith:"تم مشاركتها مع",accessPermissions:"أذونات الوصول",permissionRequests:"طلبات الإذن",approve:"موافقة",approveAll:"موافقة على الكل",people:"أشخاص",perPage:"لكل صفحة",currentPage:"الصفحة الحالية",sharetheResource:"مشاركة المورد",group:"مجموعة",selectPermission:"اختر الإذن",addPeople:"أضف أشخاصًا لمشاركة موردك معهم",addTeam:"أضف فريقًا لمشاركة موردك معهم",myPermissions:"الأذونات الخاصة بي",waitingforApproval:"بانتظار الموافقة",anyPermission:"أي إذن","openshift.scope.user_info":"معلومات المستخدم","openshift.scope.user_check-access":"معلومات وصول المستخدم","openshift.scope.user_full":"الوصول الكامل","openshift.scope.list-projects":"قائمة المشاريع","error-invalid-value":"قيمة غير صالحة.","error-invalid-blank":"يرجى تحديد قيمة.","error-empty":"يرجى تحديد قيمة.","error-invalid-length":"الحقل {0} يجب أن يكون طوله بين {1} و {2}.","error-invalid-length-too-short":"الحقل {0} يجب ألا يقل طوله عن {1}.","error-invalid-length-too-long":"الحقل {0} يجب ألا يزيد طوله عن {2}.","error-invalid-email":"بريد إلكتروني غير صالح.","error-invalid-number":"رقم غير صالح.","error-number-out-of-range":"الحقل {0} يجب أن يكون رقمًا بين {1} و {2}.","error-number-out-of-range-too-small":"الحقل {0} يجب ألا تقل قيمته عن {1}.","error-number-out-of-range-too-big":"الحقل {0} يجب ألا تزيد قيمته عن {2}.","error-pattern-no-match":"قيمة غير صالحة.","error-invalid-uri":"عنوان موقع غير صالح.","error-invalid-uri-scheme":"بادئة عنوان موقع غير صالحة.","error-invalid-uri-fragment":"ملحق عنوان موقع غير صالح.","error-user-attribute-required":"يرجى تحديد الحقل {0}.","error-invalid-date":"تاريخ غير صالح.","error-user-attribute-read-only":"الحقل {0} للقراءة فقط.","error-username-invalid-character":"اسم المستخدم يحتوي على حرف غير صالح.","error-person-name-invalid-character":"الاسم يحتوي على حرف غير صالح."}}}]); \ No newline at end of file diff --git a/3946.da1ae0b6.iframe.bundle.js b/3946.706eed25.iframe.bundle.js similarity index 65% rename from 3946.da1ae0b6.iframe.bundle.js rename to 3946.706eed25.iframe.bundle.js index c78a74ac..c3817cd7 100644 --- a/3946.da1ae0b6.iframe.bundle.js +++ b/3946.706eed25.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3946],{"./dist/account/i18n/baseMessages/fi.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Tallenna",doCancel:"Peruuta",doLogOutAllSessions:"Kirjaudu ulos kaikista sessioista",doRemove:"Poista",doAdd:"Lisää",doSignOut:"Kirjaudu ulos",doLogIn:"Kirjaudu sisään",doLink:"Yhdistä",noAccessMessage:"Pääsy evätty",editAccountHtmlTitle:"Muokkaa käyttäjää",personalInfoHtmlTitle:"Henkilökohtaiset tiedot",federatedIdentitiesHtmlTitle:"Yhteinen tunnistaminen",accountLogHtmlTitle:"Käyttäjä loki",changePasswordHtmlTitle:"Vaihda salasana",deviceActivityHtmlTitle:"Device Activity",sessionsHtmlTitle:"Istunnot",accountManagementTitle:"Keycloak Käyttäjä Hallinta",authenticatorTitle:"Kaksinkertainen kirjautuminen",applicationsHtmlTitle:"Sovellukset",linkedAccountsHtmlTitle:"Yhdistetyt tilit",accountManagementWelcomeMessage:"Tervetuloa Keycloak-tilin hallintaan",personalInfoIntroMessage:"Hallinnoi perustietoja",accountSecurityTitle:"Tilin turvallisuus",accountSecurityIntroMessage:"Hallitse salasanaasi ja tilin pääsyasetuksia",applicationsIntroMessage:"Seuraa ja hallitse sovelluksiasi, joilla on pääsy tilille",resourceIntroMessage:"Jaa resurssejasi tiimin jäsenten kesken",passwordLastUpdateMessage:"Salasanasi päivitettiin",updatePasswordTitle:"Päivitä salasana",updatePasswordMessageTitle:"Varmista, että valitsemasi salasana on vahva",updatePasswordMessage:"Vahva salasana sisältää sekaisin numeroita, kirjaimia ja symboleja. Se on vaikea arvata, ei muistuta oikeita sanoja ja on käytössä vain tällä tilillä.",personalSubTitle:"Henkilökohtaiset tiedot",personalSubMessage:"Hallitse näitä perustietojasi: etunimi, sukunimi ja sähköposti",authenticatorCode:"Kertakäyttökoodi",email:"Sähköposti",firstName:"Etunimi",givenName:"Sukunimi",fullName:"Koko nimi",lastName:"Sukunimi",familyName:"Sukunimi",password:"Salasana",currentPassword:"Nykyinen salasana",passwordConfirm:"Salasana uudelleen",passwordNew:"Uusi salasana",username:"Käyttäjänimi",address:"Osoite",street:"Katu",locality:"Kaupunki",region:"Osavaltio, Provinssi, tai Alue",postal_code:"Postinumero",country:"Maa",emailVerified:"Sähköposti vahvistettu",website:"Verkkosivu",phoneNumber:"Puhelinnumero",phoneNumberVerified:"Puhelinnumero varmennettu",gender:"Sukupuoli",birthday:"Syntymäpäivä",zoneinfo:"Aikavyöhyke",gssDelegationCredential:"GSS Delegation Credential",profileScopeConsentText:"Käyttäjän profiili",emailScopeConsentText:"Sähköpostiosoite",addressScopeConsentText:"Osoite",phoneScopeConsentText:"Puhelinnumero",offlineAccessScopeConsentText:"Offline-käyttö",samlRoleListScopeConsentText:"Omat roolit",rolesScopeConsentText:"Käyttäjäroolit",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Luo realm","role_view-realm":"Näytä realm","role_view-users":"Näytä käyttäjät","role_view-applications":"Näytä sovellukset","role_view-clients":"Näytä asiakkaat","role_view-events":"Näytä tapahtumat","role_view-identity-providers":"Näytä henkilöllisyyden tarjoajat","role_view-consent":"Näytä suostumukset","role_manage-realm":"Hallinnoi realmia","role_manage-users":"Hallinnoi käyttäjiä","role_manage-applications":"Hallinnoi sovelluksia","role_manage-identity-providers":"Hallinnoi henkilöllisyyden tarjoajia","role_manage-clients":"Hallinnoi asiakkaita","role_manage-events":"Hallinnoi tapahtumia","role_view-profile":"Näytä profiili","role_manage-account":"Hallitse tiliä","role_manage-account-links":"Hallitse tilin linkkejä","role_manage-consent":"Hallitse suostumuksia","role_read-token":"Lue token","role_offline-access":"Offline-pääsy",role_uma_authorization:"Hanki käyttöoikeudet",client_account:"Tili","client_account-console":"Tilin konsoli","client_security-admin-console":"Turvallisuus-hallintapaneeli","client_admin-cli":"Admin CLI","client_realm-management":"Realm Hallinta",client_broker:"Broker",requiredFields:"Vaaditut kentät",allFieldsRequired:"Kaikki kentät vaaditaan",backToApplication:"« Takaisin sovellukseen",backTo:"Takaisin {0}",date:"Päivämäärä",event:"Event",ip:"IP",client:"Asiakas",clients:"Asiakkaat",details:"Yksityiskohdat",started:"Luotu",lastAccess:"Viimeksi käytetty",expires:"Vanhenee",applications:"Sovellukset",account:"Käyttäjätili",federatedIdentity:"Yhteinen tunnistaminen",authenticator:"Kaksinkertainen kirjautuminen","device-activity":"Laiteaktiviteetti",sessions:"Istunnot",log:"Loki",application:"Sovellus",availableRoles:"Saatavilla olevat roolit",availablePermissions:"Saatavilla olevat oikeudet",grantedPermissions:"Myönnetyt oikeudet",grantedPersonalInfo:"Henkilökohtaiset tiedot",additionalGrants:"Vaihtoehtoiset oikeudet",action:"Toiminto",inResource:"in",fullAccess:"Täydet oikeudet",offlineToken:"Offline Token",revoke:"Kumoa oikeudet",configureAuthenticators:"Konfiguroitu kaksivaiheinen kirjautuminen",mobile:"Mobiili",totpStep1:'Asenna FreeOTP tai Google Authenticator ohjelma laiteellesi. Kummatkin sovellukset ovat saatavilla Google Play ja Apple App Store kaupoissa.',totpStep2:"Avaa sovellus ja skannaa QR-koodi tai kirjoita avain.",totpStep3:"Täytä saamasi kertaluontoinen koodisi allaolevaan kenttään ja paina Tallenna.",totpStep3DeviceName:"Anna laitteelle nimi, jotta voit hallinnoida OTP-laitteitasi.",totpManualStep2:"Avaa sovellus ja syötä koodi",totpManualStep3:"Käytä seuraavia asetuksia mikäli sovellus sallii niiden syötön",totpUnableToScan:"Ongelmia skannuksessa?",totpScanBarcode:"Skannaa viivakoodi?","totp.totp":"Aikapohjainen","totp.hotp":"Laskuripohjainen",totpType:"Tyyppi",totpAlgorithm:"Algoritmi",totpDigits:"Numerot",totpInterval:"Intervalli",totpCounter:"Laskuri",totpDeviceName:"Laitteen nimi",irreversibleAction:"Tätä toimintoa ei voi peruuttaa",deletingImplies:"Tilin poisto tarkoittaa sitä, että:",errasingData:"Kaikki tietosi poistetaan",loggingOutImmediately:"Sinut kirjataan ulos välittömästi",accountUnusable:"Tämän sovelluksen käyttö ei myöhemmin enää ole mahdollista tällä käyttäjätilillä",missingUsernameMessage:"Anna käyttäjätunnus.",missingFirstNameMessage:"Anna etunimi.",invalidEmailMessage:"Virheellinen sähköpostiosoite.",missingLastNameMessage:"Anna sukunimi.",missingEmailMessage:"Anna sähköpostiosoite.",missingPasswordMessage:"Anna salasana.",notMatchPasswordMessage:"Salasanat eivät täsmää.",invalidUserMessage:"Väärä käyttäjä",updateReadOnlyAttributesRejectedMessage:"Vain-luku-ominaisuuden päivittäminen hylätty",missingTotpMessage:"Ole hyvä ja määritä varmennuskoodi.",missingTotpDeviceNameMessage:"Ole hyvä ja määritä laitteen nimi.",invalidPasswordExistingMessage:"Vanha salasana on virheellinen.",invalidPasswordConfirmMessage:"Salasanan vahivistus ei täsmää.",invalidTotpMessage:"Väärä varmennuskoodi.",usernameExistsMessage:"Käyttäjänimi on varattu.",emailExistsMessage:"Sähköpostiosoite on jo käytössä.",readOnlyUserMessage:"Et voi muokata käyttäjätiliäsi.",readOnlyUsernameMessage:'Et voi päivittää käyttäjänimeäsi, koska se on "vain-luku"-tilassa.',readOnlyPasswordMessage:"Et voi vaihtaa salasanaa.",successTotpMessage:"Mobiiliautentikointi konfiguroitu.",successTotpRemovedMessage:"Mobiiliautentikointi poistettu.",successGrantRevokedMessage:"Lupa peruutettu onnistuneesti.",accountUpdatedMessage:"Käyttäjätiedot päivitetty.",accountPasswordUpdatedMessage:"Salasana vaihdettu.",missingIdentityProviderMessage:"Henkilöllisyyden tarjoajaa ei määritetty.",invalidFederatedIdentityActionMessage:"Väärä tai puuttuva toiminto.",identityProviderNotFoundMessage:"Määritettyä henkilöllisyyden tarjoajaa ei löydy.",federatedIdentityLinkNotActiveMessage:"Tämä henkilöllisyys ei ole enää aktiivinen.",federatedIdentityRemovingLastProviderMessage:"Et voi poistaa viimeistä yhdistettyä henkilöllisyyttä, koska sinulla ei ole salasanaa.",identityProviderRedirectErrorMessage:"Uudelleenohjaus henkilöllisyyden tarjoajaan epäonnistui.",identityProviderRemovedMessage:"Henkilöllisyyden tarjoaja poistettu onnistuneesti.",identityProviderAlreadyLinkedMessage:"Yhdistetty henkilöllisyys, minkä {0} palautti, on jo linkitetty toiseen käyttäjään.",staleCodeAccountMessage:"Sivu vanhentui. Ole hyvä ja yritä vielä kerran.",consentDenied:"Suostumus evätty.",accountDisabledMessage:"Tili on poistettu käytöstä, ota yhteyttä järjestelmänvalvojaan.",accountTemporarilyDisabledMessage:"Tili on väliaikaisesti poissa käytöstä, ota yhteyttä järjestelmänvalvojaan tai yritä myöhemmin uudelleen.",invalidPasswordMinLengthMessage:"Virheellinen salasana: vähimmäispituus {0}.",invalidPasswordMaxLengthMessage:"Virheellinen salasana: maksimipituus {0}.",invalidPasswordMinLowerCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} pientä kirjainta.",invalidPasswordMinDigitsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} numeroa.",invalidPasswordMinUpperCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} isoa kirjainta.",invalidPasswordMinSpecialCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} erikoismerkkiä.",invalidPasswordNotUsernameMessage:"Virheellinen salasana: salasana ei saa olla sama kuin käyttäjätunnus.",invalidPasswordNotEmailMessage:"Virheellinen salasana: ei voi olla sama kuin sähköposti.",invalidPasswordRegexPatternMessage:"Virheellinen salasana: fails to match regex pattern(s).",invalidPasswordHistoryMessage:"Virheellinen salasana: salasana ei saa olla sama kuin {0} edellistä salasanaasi.",invalidPasswordBlacklistedMessage:"Väärä salasana, salasana on lisätty mustalle listalle.",invalidPasswordGenericMessage:"Virheellinen salasana: uusi salasana ei täytä salasanavaatimuksia.",myResources:"Minun resurssini",myResourcesSub:"Minun resurssini",doDeny:"Kiellä",doRevoke:"Peru",doApprove:"Hyväksy",doRemoveSharing:"Poista Jakaminen",doRemoveRequest:"Poista Pyyntö",peopleAccessResource:"Ihmiset, joilla on pääsy tähän resurssiin",resourceManagedPolicies:"Luvat antavat pääsyn tähän resurssiin",resourceNoPermissionsGrantingAccess:"Ei lupia, mitkä antavat pääsyn tähän resurssiin",anyAction:"Mikä tahansa toiminto",description:"Kuvaus",name:"Nimi",scopes:"Scopes",resource:"Resurssi",user:"Käyttäjä",peopleSharingThisResource:"Ihmiset, jotka jakavat tämän resurssin",shareWithOthers:"Jaa toisten kanssa",needMyApproval:"Tarvitsee minulta luvan",requestsWaitingApproval:"Pyyntösi odottaa hyväksymistä",icon:"Ikoni",requestor:"Pyynnön esittäjä",owner:"Omistaja",resourcesSharedWithMe:"Minun kanssani jaetut resurssit",permissionRequestion:"Lupapyyntö",permission:"Lupa",shares:"jaettu",notBeingShared:"Tätä resurssia ei ole jaettu.",notHaveAnyResource:"Sinulla ei ole mitään resursseja",noResourcesSharedWithYou:"Kanssasi ei ole jaettuna resursseja",havePermissionRequestsWaitingForApproval:"Sinulla on {0} lupapyyntöä odottamassa hyväksyntää.",clickHereForDetails:"Klikkaa tästä nähdäksesi yksityiskohdat.",resourceIsNotBeingShared:"Resurssia ei ole jaettu",locale_ca:"Català",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"Nimi",applicationType:"Ohjelman tyyppi",applicationInUse:"Vain sovelluksen sisäinen käyttö",clearAllFilter:"Poista kaikki suodattimet",activeFilters:"Aktiiviset suodattimet",filterByName:"Suodata nimen mukaan ...",allApps:"Kaikki sovellukset",internalApps:"Sisäiset sovellukset",thirdpartyApps:"Kolmannen osapuolen sovellukset",appResults:"Tulokset",clientNotFoundMessage:"Asiakasta ei löytynyt.",authorizedProvider:"Valtuutettu palveluntarjoaja",authorizedProviderMessage:"Tiliisi linkitetyt valtuutetut palveluntarjoajat",identityProvider:"Henkilöllisyyden tarjoaja",identityProviderMessage:"Linkittääksesi tilin asettamiesi henkilöllisyyden tarjoajien kanssa",socialLogin:"Kirjaudu sosiaalisen median tunnuksilla",userDefined:"Käyttäjän määrittämä",removeAccess:"Poista käyttöoikeus",removeAccessMessage:"Sinun täytyy myöntää käyttöoikeus uudelleen, jos haluat käyttää tätä sovellustiliä.",authenticatorStatusMessage:"Kaksivaiheinen tunnistautuminen on tällä hetkellä",authenticatorFinishSetUpTitle:"Sinun kaksivaiheinen tunnistautuminen",authenticatorFinishSetUpMessage:"Joka kerta kun kirjaudut Keycloak-tilillesi, sinua pyydetään antamaan kaksivaiheisen tunnistautumisen koodi.",authenticatorSubTitle:"Aseta kaksivaiheinen tunnistautuminen",authenticatorSubMessage:"Parantaaksesi tilisi turvallisuutta, ota käyttöön vähintään yksi tarjolla olevista kaksivaiheisen tunnistautumisen tavoista.",authenticatorMobileTitle:"Mobiili-tunnistautuminen",authenticatorMobileMessage:"Käytä mobiili-todentajaa saadaksesi vahvistuskoodit kaksivaiheiseen tunnistautumiseen",authenticatorMobileFinishSetUpMessage:"Tunnistautuminen on sidottu puhelimeesi.",authenticatorActionSetup:"Aseta",authenticatorSMSTitle:"SMS-koodi",authenticatorSMSMessage:"Keycloak lähettää sinulle vahvistuskoodit kaksivaiheista tunnistautumista varten.",authenticatorSMSFinishSetUpMessage:"Tekstiviestit lähetetään numeroon",authenticatorDefaultStatus:"Oletus",authenticatorChangePhone:"Vaihda puhelinnumero",authenticatorBackupCodesTitle:"Varmuuskoodit",authenticatorBackupCodesMessage:"Hanki 8-numeroiset varmuuskoodisi",authenticatorBackupCodesFinishSetUpMessage:"12 varmuuskoodia luotiin tällä kertaa. Jokaisen niistä voi käyttää yhden kerran.",authenticatorMobileSetupTitle:"Mobiili-todentajan asetukset",smscodeIntroMessage:"Syötä puhelinnumerosi ja vahvistuskoodi lähetetään puhelimeesi.",mobileSetupStep1:"Asenna todentaja-sovellus puhelimeesi. Listatut sovellukset ovat tuettuna.",mobileSetupStep2:"Avaa sovellus ja skannaa viivakoodi:",mobileSetupStep3:"Syötä saamasi kertaluontoinen koodi allaolevaan kenttään ja paina Tallenna viimeistelläksesi asetuksen.",scanBarCode:"Haluatko skannata viivakoodin?",enterBarCode:"Syötä kertaluontoinen koodisi",doCopy:"Copy",doFinish:"Valmis",authenticatorSMSCodeSetupTitle:"SMS-koodin asetukset",chooseYourCountry:"Valitse maa",enterYourPhoneNumber:"Syötä puhelinnumerosi",sendVerficationCode:"Lähetä vahvistuskoodi",enterYourVerficationCode:"Syötä vahvistuskoodisi",authenticatorBackupCodesSetupTitle:"Varmuuskoodien asetukset",backupcodesIntroMessage:"Jos menetät pääsyn puhelimeesi, voit silti kirjautua tilillesi käyttämällä varmuuskoodeja. Pidä ne turvassa ja saatavilla.",realmName:"Realm",doDownload:"Lataa",doPrint:"Tulosta","backupCodesTips-1":"Jokaisen varmuuskoodin voi käyttää yhden kerran.","backupCodesTips-2":"Nämä koodit on luotu",generateNewBackupCodes:"Luo uudet varmuuskoodit","backupCodesTips-3":"Kun luot uudet varmuuskoodit, nykyiset varmuuskoodit lakkaavat toimimasta.",backtoAuthenticatorPage:"Takaisin Authenticator-sivulle",resources:"Resurssit",sharedwithMe:"Jaettu kanssani",share:"Jaa",sharedwith:"Jaettu heidän kanssa",accessPermissions:"Käyttöoikeudet",permissionRequests:"Lupapyynnöt",approve:"Hyväksy",approveAll:"Hyväksy kaikki",people:"ihmiset",perPage:"per sivu",currentPage:"Nykyinen sivu",sharetheResource:"Jaa resurssi",group:"Ryhmä",selectPermission:"Valitse lupa",addPeople:"Lisää henkilöitä, joille haluat jakaa resurssisi",addTeam:"Lisää tiimi, jolle haluat jakaa resurssisi",myPermissions:"Oikeuteni",waitingforApproval:"Odottaa hyväksyntää",anyPermission:"Mikä tahansa lupa","openshift.scope.user_info":"Käyttäjän tiedot","openshift.scope.user_check-access":"Käyttäjän käyttöoikeustiedot","openshift.scope.user_full":"Täysi käyttöoikeus","openshift.scope.list-projects":"Listaa projektit","error-invalid-value":"Väärä arvo.","error-invalid-blank":"Ole hyvä ja määritä arvo.","error-empty":"Ole hyvä ja määritä arvo. ","error-invalid-length":"Ominaisuudella {0} täytyy olla pituus väliltä {1} ja {2}.","error-invalid-length-too-short":"Ominaisuudella {0} täytyy olla minimipituus {1}.","error-invalid-length-too-long":"Ominaisuudella {0} täytyy olla maksimipituus {2}.","error-invalid-email":"Väärä sähköpostiosoite.","error-invalid-number":"Väärä numero.","error-number-out-of-range":"Ominaisuuden {0} täytyy olla numero väliltä {1} ja {2}.","error-number-out-of-range-too-small":"Ominaisuudella {0} täytyy olla minimiarvona {1}.","error-number-out-of-range-too-big":"Ominaisuudella {0} täytyy olla maksimiarvona {2}.","error-pattern-no-match":"Väärä arvo.","error-invalid-uri":"Väärä URL.","error-invalid-uri-scheme":"Väärä URL:n malli.","error-invalid-uri-fragment":"Väärä URL:n osa.","error-user-attribute-required":"Ole hyvä ja määritä ominaisuus {0}.","error-invalid-date":"Väärä päivämäärä.","error-user-attribute-read-only":'Kenttä {0} on "vain luku"-tilassa.',"error-username-invalid-character":"Käyttäjänimi sisältää vääriä merkkejä.","error-person-name-invalid-character":"Nimi sisältää vääriä merkkejä."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[3946],{"./dist/account/i18n/baseMessages/fi.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Tallenna",doCancel:"Peruuta",doLogOutAllSessions:"Kirjaudu ulos kaikista sessioista",doRemove:"Poista",doAdd:"Lisää",doSignOut:"Kirjaudu ulos",doLogIn:"Kirjaudu sisään",doLink:"Yhdistä",noAccessMessage:"Pääsy evätty",editAccountHtmlTitle:"Muokkaa käyttäjää",personalInfoHtmlTitle:"Henkilökohtaiset tiedot",federatedIdentitiesHtmlTitle:"Yhteinen tunnistaminen",accountLogHtmlTitle:"Käyttäjä loki",changePasswordHtmlTitle:"Vaihda salasana",deviceActivityHtmlTitle:"Device Activity",sessionsHtmlTitle:"Istunnot",accountManagementTitle:"Keycloak Käyttäjä Hallinta",authenticatorTitle:"Kaksinkertainen kirjautuminen",applicationsHtmlTitle:"Sovellukset",linkedAccountsHtmlTitle:"Yhdistetyt tilit",accountManagementWelcomeMessage:"Tervetuloa Keycloak-tilin hallintaan",personalInfoIntroMessage:"Hallinnoi perustietoja",accountSecurityTitle:"Tilin turvallisuus",accountSecurityIntroMessage:"Hallitse salasanaasi ja tilin pääsyasetuksia",applicationsIntroMessage:"Seuraa ja hallitse sovelluksiasi, joilla on pääsy tilille",resourceIntroMessage:"Jaa resurssejasi tiimin jäsenten kesken",passwordLastUpdateMessage:"Salasanasi päivitettiin",updatePasswordTitle:"Päivitä salasana",updatePasswordMessageTitle:"Varmista, että valitsemasi salasana on vahva",updatePasswordMessage:"Vahva salasana sisältää sekaisin numeroita, kirjaimia ja symboleja. Se on vaikea arvata, ei muistuta oikeita sanoja ja on käytössä vain tällä tilillä.",personalSubTitle:"Henkilökohtaiset tiedot",personalSubMessage:"Hallitse näitä perustietojasi: etunimi, sukunimi ja sähköposti",authenticatorCode:"Kertakäyttökoodi",email:"Sähköposti",firstName:"Etunimi",givenName:"Sukunimi",fullName:"Koko nimi",lastName:"Sukunimi",familyName:"Sukunimi",password:"Salasana",currentPassword:"Nykyinen salasana",passwordConfirm:"Salasana uudelleen",passwordNew:"Uusi salasana",username:"Käyttäjänimi",address:"Osoite",street:"Katu",locality:"Kaupunki",region:"Osavaltio, Provinssi, tai Alue",postal_code:"Postinumero",country:"Maa",emailVerified:"Sähköposti vahvistettu",website:"Verkkosivu",phoneNumber:"Puhelinnumero",phoneNumberVerified:"Puhelinnumero varmennettu",gender:"Sukupuoli",birthday:"Syntymäpäivä",zoneinfo:"Aikavyöhyke",gssDelegationCredential:"GSS Delegation Credential",profileScopeConsentText:"Käyttäjän profiili",emailScopeConsentText:"Sähköpostiosoite",addressScopeConsentText:"Osoite",phoneScopeConsentText:"Puhelinnumero",offlineAccessScopeConsentText:"Offline-käyttö",samlRoleListScopeConsentText:"Omat roolit",rolesScopeConsentText:"Käyttäjäroolit",role_admin:"Admin","role_realm-admin":"Realm Admin","role_create-realm":"Luo realm","role_view-realm":"Näytä realm","role_view-users":"Näytä käyttäjät","role_view-applications":"Näytä sovellukset","role_view-clients":"Näytä asiakkaat","role_view-events":"Näytä tapahtumat","role_view-identity-providers":"Näytä henkilöllisyyden tarjoajat","role_view-consent":"Näytä suostumukset","role_manage-realm":"Hallinnoi realmia","role_manage-users":"Hallinnoi käyttäjiä","role_manage-applications":"Hallinnoi sovelluksia","role_manage-identity-providers":"Hallinnoi henkilöllisyyden tarjoajia","role_manage-clients":"Hallinnoi asiakkaita","role_manage-events":"Hallinnoi tapahtumia","role_view-profile":"Näytä profiili","role_manage-account":"Hallitse tiliä","role_manage-account-links":"Hallitse tilin linkkejä","role_manage-consent":"Hallitse suostumuksia","role_read-token":"Lue token","role_offline-access":"Offline-pääsy",role_uma_authorization:"Hanki käyttöoikeudet",client_account:"Tili","client_account-console":"Tilin konsoli","client_security-admin-console":"Turvallisuus-hallintapaneeli","client_admin-cli":"Admin CLI","client_realm-management":"Realm Hallinta",client_broker:"Broker",requiredFields:"Vaaditut kentät",allFieldsRequired:"Kaikki kentät vaaditaan",backToApplication:"« Takaisin sovellukseen",backTo:"Takaisin {0}",date:"Päivämäärä",event:"Event",ip:"IP",client:"Asiakas",clients:"Asiakkaat",details:"Yksityiskohdat",started:"Luotu",lastAccess:"Viimeksi käytetty",expires:"Vanhenee",applications:"Sovellukset",account:"Käyttäjätili",federatedIdentity:"Yhteinen tunnistaminen",authenticator:"Kaksinkertainen kirjautuminen","device-activity":"Laiteaktiviteetti",sessions:"Istunnot",log:"Loki",application:"Sovellus",availableRoles:"Saatavilla olevat roolit",availablePermissions:"Saatavilla olevat oikeudet",grantedPermissions:"Myönnetyt oikeudet",grantedPersonalInfo:"Henkilökohtaiset tiedot",additionalGrants:"Vaihtoehtoiset oikeudet",action:"Toiminto",inResource:"in",fullAccess:"Täydet oikeudet",offlineToken:"Offline Token",revoke:"Kumoa oikeudet",configureAuthenticators:"Konfiguroitu kaksivaiheinen kirjautuminen",mobile:"Mobiili",totpStep1:'Asenna FreeOTP tai Google Authenticator ohjelma laiteellesi. Kummatkin sovellukset ovat saatavilla Google Play ja Apple App Store kaupoissa.',totpStep2:"Avaa sovellus ja skannaa QR-koodi tai kirjoita avain.",totpStep3:"Täytä saamasi kertaluontoinen koodisi allaolevaan kenttään ja paina Tallenna.",totpStep3DeviceName:"Anna laitteelle nimi, jotta voit hallinnoida OTP-laitteitasi.",totpManualStep2:"Avaa sovellus ja syötä koodi",totpManualStep3:"Käytä seuraavia asetuksia mikäli sovellus sallii niiden syötön",totpUnableToScan:"Ongelmia skannuksessa?",totpScanBarcode:"Skannaa viivakoodi?","totp.totp":"Aikapohjainen","totp.hotp":"Laskuripohjainen",totpType:"Tyyppi",totpAlgorithm:"Algoritmi",totpDigits:"Numerot",totpInterval:"Intervalli",totpCounter:"Laskuri",totpDeviceName:"Laitteen nimi",irreversibleAction:"Tätä toimintoa ei voi peruuttaa",deletingImplies:"Tilin poisto tarkoittaa sitä, että:",errasingData:"Kaikki tietosi poistetaan",loggingOutImmediately:"Sinut kirjataan ulos välittömästi",accountUnusable:"Tämän sovelluksen käyttö ei myöhemmin enää ole mahdollista tällä käyttäjätilillä",missingUsernameMessage:"Anna käyttäjätunnus.",missingFirstNameMessage:"Anna etunimi.",invalidEmailMessage:"Virheellinen sähköpostiosoite.",missingLastNameMessage:"Anna sukunimi.",missingEmailMessage:"Anna sähköpostiosoite.",missingPasswordMessage:"Anna salasana.",notMatchPasswordMessage:"Salasanat eivät täsmää.",invalidUserMessage:"Väärä käyttäjä",updateReadOnlyAttributesRejectedMessage:"Vain-luku-ominaisuuden päivittäminen hylätty",missingTotpMessage:"Ole hyvä ja määritä varmennuskoodi.",missingTotpDeviceNameMessage:"Ole hyvä ja määritä laitteen nimi.",invalidPasswordExistingMessage:"Vanha salasana on virheellinen.",invalidPasswordConfirmMessage:"Salasanan vahivistus ei täsmää.",invalidTotpMessage:"Väärä varmennuskoodi.",usernameExistsMessage:"Käyttäjänimi on varattu.",emailExistsMessage:"Sähköpostiosoite on jo käytössä.",readOnlyUserMessage:"Et voi muokata käyttäjätiliäsi.",readOnlyUsernameMessage:'Et voi päivittää käyttäjänimeäsi, koska se on "vain-luku"-tilassa.',readOnlyPasswordMessage:"Et voi vaihtaa salasanaa.",successTotpMessage:"Mobiiliautentikointi konfiguroitu.",successTotpRemovedMessage:"Mobiiliautentikointi poistettu.",successGrantRevokedMessage:"Lupa peruutettu onnistuneesti.",accountUpdatedMessage:"Käyttäjätiedot päivitetty.",accountPasswordUpdatedMessage:"Salasana vaihdettu.",missingIdentityProviderMessage:"Henkilöllisyyden tarjoajaa ei määritetty.",invalidFederatedIdentityActionMessage:"Väärä tai puuttuva toiminto.",identityProviderNotFoundMessage:"Määritettyä henkilöllisyyden tarjoajaa ei löydy.",federatedIdentityLinkNotActiveMessage:"Tämä henkilöllisyys ei ole enää aktiivinen.",federatedIdentityRemovingLastProviderMessage:"Et voi poistaa viimeistä yhdistettyä henkilöllisyyttä, koska sinulla ei ole salasanaa.",identityProviderRedirectErrorMessage:"Uudelleenohjaus henkilöllisyyden tarjoajaan epäonnistui.",identityProviderRemovedMessage:"Henkilöllisyyden tarjoaja poistettu onnistuneesti.",identityProviderAlreadyLinkedMessage:"Yhdistetty henkilöllisyys, minkä {0} palautti, on jo linkitetty toiseen käyttäjään.",staleCodeAccountMessage:"Sivu vanhentui. Ole hyvä ja yritä vielä kerran.",consentDenied:"Suostumus evätty.",accountDisabledMessage:"Tili on poistettu käytöstä, ota yhteyttä järjestelmänvalvojaan.",accountTemporarilyDisabledMessage:"Tili on väliaikaisesti poissa käytöstä, ota yhteyttä järjestelmänvalvojaan tai yritä myöhemmin uudelleen.",invalidPasswordMinLengthMessage:"Virheellinen salasana: vähimmäispituus {0}.",invalidPasswordMaxLengthMessage:"Virheellinen salasana: maksimipituus {0}.",invalidPasswordMinLowerCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} pientä kirjainta.",invalidPasswordMinDigitsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} numeroa.",invalidPasswordMinUpperCaseCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} isoa kirjainta.",invalidPasswordMinSpecialCharsMessage:"Virheellinen salasana: salasanassa tulee olla vähintään {0} erikoismerkkiä.",invalidPasswordNotUsernameMessage:"Virheellinen salasana: salasana ei saa olla sama kuin käyttäjätunnus.",invalidPasswordNotEmailMessage:"Virheellinen salasana: ei voi olla sama kuin sähköposti.",invalidPasswordRegexPatternMessage:"Virheellinen salasana: fails to match regex pattern(s).",invalidPasswordHistoryMessage:"Virheellinen salasana: salasana ei saa olla sama kuin {0} edellistä salasanaasi.",invalidPasswordBlacklistedMessage:"Väärä salasana, salasana on lisätty mustalle listalle.",invalidPasswordGenericMessage:"Virheellinen salasana: uusi salasana ei täytä salasanavaatimuksia.",myResources:"Minun resurssini",myResourcesSub:"Minun resurssini",doDeny:"Kiellä",doRevoke:"Peru",doApprove:"Hyväksy",doRemoveSharing:"Poista Jakaminen",doRemoveRequest:"Poista Pyyntö",peopleAccessResource:"Ihmiset, joilla on pääsy tähän resurssiin",resourceManagedPolicies:"Luvat antavat pääsyn tähän resurssiin",resourceNoPermissionsGrantingAccess:"Ei lupia, mitkä antavat pääsyn tähän resurssiin",anyAction:"Mikä tahansa toiminto",description:"Kuvaus",name:"Nimi",scopes:"Scopes",resource:"Resurssi",user:"Käyttäjä",peopleSharingThisResource:"Ihmiset, jotka jakavat tämän resurssin",shareWithOthers:"Jaa toisten kanssa",needMyApproval:"Tarvitsee minulta luvan",requestsWaitingApproval:"Pyyntösi odottaa hyväksymistä",icon:"Ikoni",requestor:"Pyynnön esittäjä",owner:"Omistaja",resourcesSharedWithMe:"Minun kanssani jaetut resurssit",permissionRequestion:"Lupapyyntö",permission:"Lupa",shares:"jaettu",notBeingShared:"Tätä resurssia ei ole jaettu.",notHaveAnyResource:"Sinulla ei ole mitään resursseja",noResourcesSharedWithYou:"Kanssasi ei ole jaettuna resursseja",havePermissionRequestsWaitingForApproval:"Sinulla on {0} lupapyyntöä odottamassa hyväksyntää.",clickHereForDetails:"Klikkaa tästä nähdäksesi yksityiskohdat.",resourceIsNotBeingShared:"Resurssia ei ole jaettu",locale_ca:"Català",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"Nimi",applicationType:"Ohjelman tyyppi",applicationInUse:"Vain sovelluksen sisäinen käyttö",clearAllFilter:"Poista kaikki suodattimet",activeFilters:"Aktiiviset suodattimet",filterByName:"Suodata nimen mukaan ...",allApps:"Kaikki sovellukset",internalApps:"Sisäiset sovellukset",thirdpartyApps:"Kolmannen osapuolen sovellukset",appResults:"Tulokset",clientNotFoundMessage:"Asiakasta ei löytynyt.",authorizedProvider:"Valtuutettu palveluntarjoaja",authorizedProviderMessage:"Tiliisi linkitetyt valtuutetut palveluntarjoajat",identityProvider:"Henkilöllisyyden tarjoaja",identityProviderMessage:"Linkittääksesi tilin asettamiesi henkilöllisyyden tarjoajien kanssa",socialLogin:"Kirjaudu sosiaalisen median tunnuksilla",userDefined:"Käyttäjän määrittämä",removeAccess:"Poista käyttöoikeus",removeAccessMessage:"Sinun täytyy myöntää käyttöoikeus uudelleen, jos haluat käyttää tätä sovellustiliä.",authenticatorStatusMessage:"Kaksivaiheinen tunnistautuminen on tällä hetkellä",authenticatorFinishSetUpTitle:"Sinun kaksivaiheinen tunnistautuminen",authenticatorFinishSetUpMessage:"Joka kerta kun kirjaudut Keycloak-tilillesi, sinua pyydetään antamaan kaksivaiheisen tunnistautumisen koodi.",authenticatorSubTitle:"Aseta kaksivaiheinen tunnistautuminen",authenticatorSubMessage:"Parantaaksesi tilisi turvallisuutta, ota käyttöön vähintään yksi tarjolla olevista kaksivaiheisen tunnistautumisen tavoista.",authenticatorMobileTitle:"Mobiili-tunnistautuminen",authenticatorMobileMessage:"Käytä mobiili-todentajaa saadaksesi vahvistuskoodit kaksivaiheiseen tunnistautumiseen",authenticatorMobileFinishSetUpMessage:"Tunnistautuminen on sidottu puhelimeesi.",authenticatorActionSetup:"Aseta",authenticatorSMSTitle:"SMS-koodi",authenticatorSMSMessage:"Keycloak lähettää sinulle vahvistuskoodit kaksivaiheista tunnistautumista varten.",authenticatorSMSFinishSetUpMessage:"Tekstiviestit lähetetään numeroon",authenticatorDefaultStatus:"Oletus",authenticatorChangePhone:"Vaihda puhelinnumero",authenticatorBackupCodesTitle:"Varmuuskoodit",authenticatorBackupCodesMessage:"Hanki 8-numeroiset varmuuskoodisi",authenticatorBackupCodesFinishSetUpMessage:"12 varmuuskoodia luotiin tällä kertaa. Jokaisen niistä voi käyttää yhden kerran.",authenticatorMobileSetupTitle:"Mobiili-todentajan asetukset",smscodeIntroMessage:"Syötä puhelinnumerosi ja vahvistuskoodi lähetetään puhelimeesi.",mobileSetupStep1:"Asenna todentaja-sovellus puhelimeesi. Listatut sovellukset ovat tuettuna.",mobileSetupStep2:"Avaa sovellus ja skannaa viivakoodi:",mobileSetupStep3:"Syötä saamasi kertaluontoinen koodi allaolevaan kenttään ja paina Tallenna viimeistelläksesi asetuksen.",scanBarCode:"Haluatko skannata viivakoodin?",enterBarCode:"Syötä kertaluontoinen koodisi",doCopy:"Copy",doFinish:"Valmis",authenticatorSMSCodeSetupTitle:"SMS-koodin asetukset",chooseYourCountry:"Valitse maa",enterYourPhoneNumber:"Syötä puhelinnumerosi",sendVerficationCode:"Lähetä vahvistuskoodi",enterYourVerficationCode:"Syötä vahvistuskoodisi",authenticatorBackupCodesSetupTitle:"Varmuuskoodien asetukset",backupcodesIntroMessage:"Jos menetät pääsyn puhelimeesi, voit silti kirjautua tilillesi käyttämällä varmuuskoodeja. Pidä ne turvassa ja saatavilla.",realmName:"Realm",doDownload:"Lataa",doPrint:"Tulosta","backupCodesTips-1":"Jokaisen varmuuskoodin voi käyttää yhden kerran.","backupCodesTips-2":"Nämä koodit on luotu",generateNewBackupCodes:"Luo uudet varmuuskoodit","backupCodesTips-3":"Kun luot uudet varmuuskoodit, nykyiset varmuuskoodit lakkaavat toimimasta.",backtoAuthenticatorPage:"Takaisin Authenticator-sivulle",resources:"Resurssit",sharedwithMe:"Jaettu kanssani",share:"Jaa",sharedwith:"Jaettu heidän kanssa",accessPermissions:"Käyttöoikeudet",permissionRequests:"Lupapyynnöt",approve:"Hyväksy",approveAll:"Hyväksy kaikki",people:"ihmiset",perPage:"per sivu",currentPage:"Nykyinen sivu",sharetheResource:"Jaa resurssi",group:"Ryhmä",selectPermission:"Valitse lupa",addPeople:"Lisää henkilöitä, joille haluat jakaa resurssisi",addTeam:"Lisää tiimi, jolle haluat jakaa resurssisi",myPermissions:"Oikeuteni",waitingforApproval:"Odottaa hyväksyntää",anyPermission:"Mikä tahansa lupa","openshift.scope.user_info":"Käyttäjän tiedot","openshift.scope.user_check-access":"Käyttäjän käyttöoikeustiedot","openshift.scope.user_full":"Täysi käyttöoikeus","openshift.scope.list-projects":"Listaa projektit","error-invalid-value":"Väärä arvo.","error-invalid-blank":"Ole hyvä ja määritä arvo.","error-empty":"Ole hyvä ja määritä arvo. ","error-invalid-length":"Ominaisuudella {0} täytyy olla pituus väliltä {1} ja {2}.","error-invalid-length-too-short":"Ominaisuudella {0} täytyy olla minimipituus {1}.","error-invalid-length-too-long":"Ominaisuudella {0} täytyy olla maksimipituus {2}.","error-invalid-email":"Väärä sähköpostiosoite.","error-invalid-number":"Väärä numero.","error-number-out-of-range":"Ominaisuuden {0} täytyy olla numero väliltä {1} ja {2}.","error-number-out-of-range-too-small":"Ominaisuudella {0} täytyy olla minimiarvona {1}.","error-number-out-of-range-too-big":"Ominaisuudella {0} täytyy olla maksimiarvona {2}.","error-pattern-no-match":"Väärä arvo.","error-invalid-uri":"Väärä URL.","error-invalid-uri-scheme":"Väärä URL:n malli.","error-invalid-uri-fragment":"Väärä URL:n osa.","error-user-attribute-required":"Ole hyvä ja määritä ominaisuus {0}.","error-invalid-date":"Väärä päivämäärä.","error-user-attribute-read-only":'Kenttä {0} on "vain luku"-tilassa.',"error-username-invalid-character":"Käyttäjänimi sisältää vääriä merkkejä.","error-person-name-invalid-character":"Nimi sisältää vääriä merkkejä."}}}]); \ No newline at end of file diff --git a/4040.893ff37a.iframe.bundle.js b/4040.91aa0ae5.iframe.bundle.js similarity index 99% rename from 4040.893ff37a.iframe.bundle.js rename to 4040.91aa0ae5.iframe.bundle.js index d86470ff..67671916 100644 --- a/4040.893ff37a.iframe.bundle.js +++ b/4040.91aa0ae5.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4040],{"./dist/account/i18n/baseMessages/ja.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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:"無効なパスワード: 新しいパスワードはパスワード・ポリシーと一致しません。",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:"リソースは共有されていません。",applicationName:"名前",applicationType:"アプリケーション・タイプ",applicationInUse:"使用中のアプリケーションのみ",clearAllFilter:"すべてのフィルターをクリア",activeFilters:"アクティブなフィルター",filterByName:"名前でフィルタリング...",allApps:"すべてのアプリケーション",internalApps:"内部アプリケーション",thirdpartyApps:"サードパーティーのアプリケーション",appResults:"結果",clientNotFoundMessage:"クライアントが見つかりません。",authorizedProvider:"認可済みプロバイダー",authorizedProviderMessage:"アカウントにリンクされた認可済みプロバイダー",identityProvider:"アイデンティティー・プロバイダー",identityProviderMessage:"アカウントと設定したアイデンティティー・プロバイダーをリンクするには",socialLogin:"ソーシャル・ログイン",userDefined:"ユーザー定義",removeAccess:"アクセス権の削除",removeAccessMessage:"このアプリ・アカウントを使用する場合は、アクセス権を再度付与する必要があります。",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:"電話番号の変更",authenticatorMobileSetupTitle:"モバイル・オーセンティケーターのセットアップ",smscodeIntroMessage:"電話番号を入力すると、確認コードがあなたの電話に送信されます。",mobileSetupStep1:"携帯電話にオーセンティケーター・アプリケーションをインストールします。ここにリストされているアプリケーションがサポートされています。",mobileSetupStep2:"アプリケーションを開き、バーコードをスキャンしてください。",mobileSetupStep3:"アプリケーションから提供されたワンタイムコードを入力し、保存をクリックしてセットアップを終了します。",scanBarCode:"バーコードをスキャンしますか?",enterBarCode:"ワンタイムコードを入力してください",doCopy:"コピー",doFinish:"終了",authenticatorSMSCodeSetupTitle:"SMSコードのセットアップ",chooseYourCountry:"国を選んでください",enterYourPhoneNumber:"電話番号を入力してください",sendVerficationCode:"確認コードの送信",enterYourVerficationCode:"確認コードを入力してください",authenticatorBackupCodesSetupTitle:"バックアップ・コードのセットアップ",realmName:"レルム",doDownload:"ダウンロード",doPrint:"印刷",generateNewBackupCodes:"新しいバックアップ・コードを生成する",backtoAuthenticatorPage:"オーセンティケーター・ページに戻る",resources:"リソース",sharedwithMe:"私と共有",share:"共有",sharedwith:"共有",accessPermissions:"アクセス・パーミッション",permissionRequests:"パーミッションの要求",approve:"承認",approveAll:"すべて承認",people:"人",perPage:"1ページあたり",currentPage:"現在のページ",sharetheResource:"リソースの共有",group:"グループ",selectPermission:"パーミッションを選択",addPeople:"あなたのリソースを共有する人を追加",addTeam:"あなたのリソースを共有するチームを追加",myPermissions:"私のパーミッション",waitingforApproval:"承認待ち",anyPermission:"任意のパーミッション","openshift.scope.user_info":"ユーザー情報","openshift.scope.user_check-access":"ユーザーアクセス情報","openshift.scope.user_full":"フルアクセス","openshift.scope.list-projects":"プロジェクトの一覧表示"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4040],{"./dist/account/i18n/baseMessages/ja.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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:"無効なパスワード: 新しいパスワードはパスワード・ポリシーと一致しません。",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:"リソースは共有されていません。",applicationName:"名前",applicationType:"アプリケーション・タイプ",applicationInUse:"使用中のアプリケーションのみ",clearAllFilter:"すべてのフィルターをクリア",activeFilters:"アクティブなフィルター",filterByName:"名前でフィルタリング...",allApps:"すべてのアプリケーション",internalApps:"内部アプリケーション",thirdpartyApps:"サードパーティーのアプリケーション",appResults:"結果",clientNotFoundMessage:"クライアントが見つかりません。",authorizedProvider:"認可済みプロバイダー",authorizedProviderMessage:"アカウントにリンクされた認可済みプロバイダー",identityProvider:"アイデンティティー・プロバイダー",identityProviderMessage:"アカウントと設定したアイデンティティー・プロバイダーをリンクするには",socialLogin:"ソーシャル・ログイン",userDefined:"ユーザー定義",removeAccess:"アクセス権の削除",removeAccessMessage:"このアプリ・アカウントを使用する場合は、アクセス権を再度付与する必要があります。",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:"電話番号の変更",authenticatorMobileSetupTitle:"モバイル・オーセンティケーターのセットアップ",smscodeIntroMessage:"電話番号を入力すると、確認コードがあなたの電話に送信されます。",mobileSetupStep1:"携帯電話にオーセンティケーター・アプリケーションをインストールします。ここにリストされているアプリケーションがサポートされています。",mobileSetupStep2:"アプリケーションを開き、バーコードをスキャンしてください。",mobileSetupStep3:"アプリケーションから提供されたワンタイムコードを入力し、保存をクリックしてセットアップを終了します。",scanBarCode:"バーコードをスキャンしますか?",enterBarCode:"ワンタイムコードを入力してください",doCopy:"コピー",doFinish:"終了",authenticatorSMSCodeSetupTitle:"SMSコードのセットアップ",chooseYourCountry:"国を選んでください",enterYourPhoneNumber:"電話番号を入力してください",sendVerficationCode:"確認コードの送信",enterYourVerficationCode:"確認コードを入力してください",authenticatorBackupCodesSetupTitle:"バックアップ・コードのセットアップ",realmName:"レルム",doDownload:"ダウンロード",doPrint:"印刷",generateNewBackupCodes:"新しいバックアップ・コードを生成する",backtoAuthenticatorPage:"オーセンティケーター・ページに戻る",resources:"リソース",sharedwithMe:"私と共有",share:"共有",sharedwith:"共有",accessPermissions:"アクセス・パーミッション",permissionRequests:"パーミッションの要求",approve:"承認",approveAll:"すべて承認",people:"人",perPage:"1ページあたり",currentPage:"現在のページ",sharetheResource:"リソースの共有",group:"グループ",selectPermission:"パーミッションを選択",addPeople:"あなたのリソースを共有する人を追加",addTeam:"あなたのリソースを共有するチームを追加",myPermissions:"私のパーミッション",waitingforApproval:"承認待ち",anyPermission:"任意のパーミッション","openshift.scope.user_info":"ユーザー情報","openshift.scope.user_check-access":"ユーザーアクセス情報","openshift.scope.user_full":"フルアクセス","openshift.scope.list-projects":"プロジェクトの一覧表示",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/409.24acde94.iframe.bundle.js b/409.271d8517.iframe.bundle.js similarity index 98% rename from 409.24acde94.iframe.bundle.js rename to 409.271d8517.iframe.bundle.js index 239770c1..4176149b 100644 --- a/409.24acde94.iframe.bundle.js +++ b/409.271d8517.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[409],{"./dist/account/i18n/baseMessages/es.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Guardar",doCancel:"Cancelar",doLogOutAllSessions:"Desconectar de todas las sesiones",doRemove:"Eliminar",doAdd:"Añadir",doSignOut:"Desconectar",editAccountHtmlTitle:"Editar cuenta",federatedIdentitiesHtmlTitle:"Identidades federadas",accountLogHtmlTitle:"Registro de la cuenta",changePasswordHtmlTitle:"Cambiar contraseña",sessionsHtmlTitle:"Sesiones",accountManagementTitle:"Gestión de Cuenta Keycloak",authenticatorTitle:"Autenticador",applicationsHtmlTitle:"Aplicaciones",authenticatorCode:"Código de un solo uso",email:"Email",firstName:"Nombre",givenName:"Nombre de pila",fullName:"Nombre completo",lastName:"Apellidos",familyName:"Apellido",password:"Contraseña",passwordConfirm:"Confirma la contraseña",passwordNew:"Nueva contraseña",username:"Usuario",address:"Dirección",street:"Calle",locality:"Ciudad o Municipio",region:"Estado, Provincia, o Región",postal_code:"Código Postal",country:"País",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ón",client_account:"Cuenta","client_security-admin-console":"Consola de Administración de Seguridad","client_realm-management":"Gestión de dominio",client_broker:"Broker",requiredFields:"Campos obligatorios",allFieldsRequired:"Todos los campos obligatorios",backToApplication:"« Volver a la aplicación",backTo:"Volver a {0}",date:"Fecha",event:"Evento",ip:"IP",client:"Cliente",clients:"Clientes",details:"Detalles",started:"Iniciado",lastAccess:"Último acceso",expires:"Expira",applications:"Aplicaciones",account:"Cuenta",federatedIdentity:"Identidad federada",authenticator:"Autenticador",sessions:"Sesiones",log:"Regisro",application:"Aplicación",availablePermissions:"Permisos disponibles",grantedPermissions:"Permisos concedidos",grantedPersonalInfo:"Información personal concedida",additionalGrants:"Permisos adicionales",action:"Acción",inResource:"en",fullAccess:"Acceso total",offlineToken:"Código de autorización offline",revoke:"Revocar permiso",configureAuthenticators:"Autenticadores configurados",mobile:"Móvil",totpStep1:'Instala FreeOTP o Google Authenticator en tu teléfono móvil. Ambas aplicaciones están disponibles en Google Play y en la App Store de Apple.',totpStep2:"Abre la aplicación y escanea el código o introduce la clave.",totpStep3:"Introduce el código único que te muestra la aplicación de autenticación y haz clic en Enviar para finalizar la configuración",missingUsernameMessage:"Por favor indica tu usuario.",missingFirstNameMessage:"Por favor indica el nombre.",invalidEmailMessage:"Email no válido",missingLastNameMessage:"Por favor indica tus apellidos.",missingEmailMessage:"Por favor indica el email.",missingPasswordMessage:"Por favor indica tu contraseña.",notMatchPasswordMessage:"Las contraseñas no coinciden.",missingTotpMessage:"Por favor indica tu código de autenticación",invalidPasswordExistingMessage:"La contraseña actual no es correcta.",invalidPasswordConfirmMessage:"La confirmación de contraseña no coincide.",invalidTotpMessage:"El código de autenticación no es válido.",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ña porque tu cuenta es de solo lectura.",successTotpMessage:"Aplicación de autenticación móvil configurada.",successTotpRemovedMessage:"Aplicación de autenticación móvil eliminada.",successGrantRevokedMessage:"Permiso revocado correctamente",accountUpdatedMessage:"Tu cuenta se ha actualizado.",accountPasswordUpdatedMessage:"Tu contraseña se ha actualizado.",missingIdentityProviderMessage:"Proveedor de identidad no indicado.",invalidFederatedIdentityActionMessage:"Acción no válida o no indicada.",identityProviderNotFoundMessage:"No se encontró un proveedor de identidad.",federatedIdentityLinkNotActiveMessage:"Esta identidad ya no está activa",federatedIdentityRemovingLastProviderMessage:"No puedes eliminar la última identidad federada porque no tienes fijada una contraseña.",identityProviderRedirectErrorMessage:"Error en la redirección al proveedor de identidad",identityProviderRemovedMessage:"Proveedor de identidad borrado correctamente.",accountDisabledMessage:"La cuenta está desactivada, contacta con el administrador.",accountTemporarilyDisabledMessage:"La cuenta está temporalmente desactivada, contacta con el administrador o inténtalo de nuevo más tarde.",invalidPasswordMinLengthMessage:"Contraseña incorrecta: longitud mínima {0}.",invalidPasswordMinLowerCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras minúsculas.",invalidPasswordMinDigitsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres numéricos.",invalidPasswordMinUpperCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras mayúsculas.",invalidPasswordMinSpecialCharsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",invalidPasswordNotUsernameMessage:"Contraseña incorrecta: no puede ser igual al nombre de usuario.",invalidPasswordRegexPatternMessage:"Contraseña incorrecta: no cumple la expresión regular.",invalidPasswordHistoryMessage:"Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[409],{"./dist/account/i18n/baseMessages/es.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Guardar",doCancel:"Cancelar",doLogOutAllSessions:"Desconectar de todas las sesiones",doRemove:"Eliminar",doAdd:"Añadir",doSignOut:"Desconectar",editAccountHtmlTitle:"Editar cuenta",federatedIdentitiesHtmlTitle:"Identidades federadas",accountLogHtmlTitle:"Registro de la cuenta",changePasswordHtmlTitle:"Cambiar contraseña",sessionsHtmlTitle:"Sesiones",accountManagementTitle:"Gestión de Cuenta Keycloak",authenticatorTitle:"Autenticador",applicationsHtmlTitle:"Aplicaciones",authenticatorCode:"Código de un solo uso",email:"Email",firstName:"Nombre",givenName:"Nombre de pila",fullName:"Nombre completo",lastName:"Apellidos",familyName:"Apellido",password:"Contraseña",passwordConfirm:"Confirma la contraseña",passwordNew:"Nueva contraseña",username:"Usuario",address:"Dirección",street:"Calle",locality:"Ciudad o Municipio",region:"Estado, Provincia, o Región",postal_code:"Código Postal",country:"País",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ón",client_account:"Cuenta","client_security-admin-console":"Consola de Administración de Seguridad","client_realm-management":"Gestión de dominio",client_broker:"Broker",requiredFields:"Campos obligatorios",allFieldsRequired:"Todos los campos obligatorios",backToApplication:"« Volver a la aplicación",backTo:"Volver a {0}",date:"Fecha",event:"Evento",ip:"IP",client:"Cliente",clients:"Clientes",details:"Detalles",started:"Iniciado",lastAccess:"Último acceso",expires:"Expira",applications:"Aplicaciones",account:"Cuenta",federatedIdentity:"Identidad federada",authenticator:"Autenticador",sessions:"Sesiones",log:"Regisro",application:"Aplicación",availablePermissions:"Permisos disponibles",grantedPermissions:"Permisos concedidos",grantedPersonalInfo:"Información personal concedida",additionalGrants:"Permisos adicionales",action:"Acción",inResource:"en",fullAccess:"Acceso total",offlineToken:"Código de autorización offline",revoke:"Revocar permiso",configureAuthenticators:"Autenticadores configurados",mobile:"Móvil",totpStep1:'Instala FreeOTP o Google Authenticator en tu teléfono móvil. Ambas aplicaciones están disponibles en Google Play y en la App Store de Apple.',totpStep2:"Abre la aplicación y escanea el código o introduce la clave.",totpStep3:"Introduce el código único que te muestra la aplicación de autenticación y haz clic en Enviar para finalizar la configuración",missingUsernameMessage:"Por favor indica tu usuario.",missingFirstNameMessage:"Por favor indica el nombre.",invalidEmailMessage:"Email no válido",missingLastNameMessage:"Por favor indica tus apellidos.",missingEmailMessage:"Por favor indica el email.",missingPasswordMessage:"Por favor indica tu contraseña.",notMatchPasswordMessage:"Las contraseñas no coinciden.",missingTotpMessage:"Por favor indica tu código de autenticación",invalidPasswordExistingMessage:"La contraseña actual no es correcta.",invalidPasswordConfirmMessage:"La confirmación de contraseña no coincide.",invalidTotpMessage:"El código de autenticación no es válido.",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ña porque tu cuenta es de solo lectura.",successTotpMessage:"Aplicación de autenticación móvil configurada.",successTotpRemovedMessage:"Aplicación de autenticación móvil eliminada.",successGrantRevokedMessage:"Permiso revocado correctamente",accountUpdatedMessage:"Tu cuenta se ha actualizado.",accountPasswordUpdatedMessage:"Tu contraseña se ha actualizado.",missingIdentityProviderMessage:"Proveedor de identidad no indicado.",invalidFederatedIdentityActionMessage:"Acción no válida o no indicada.",identityProviderNotFoundMessage:"No se encontró un proveedor de identidad.",federatedIdentityLinkNotActiveMessage:"Esta identidad ya no está activa",federatedIdentityRemovingLastProviderMessage:"No puedes eliminar la última identidad federada porque no tienes fijada una contraseña.",identityProviderRedirectErrorMessage:"Error en la redirección al proveedor de identidad",identityProviderRemovedMessage:"Proveedor de identidad borrado correctamente.",accountDisabledMessage:"La cuenta está desactivada, contacta con el administrador.",accountTemporarilyDisabledMessage:"La cuenta está temporalmente desactivada, contacta con el administrador o inténtalo de nuevo más tarde.",invalidPasswordMinLengthMessage:"Contraseña incorrecta: longitud mínima {0}.",invalidPasswordMinLowerCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras minúsculas.",invalidPasswordMinDigitsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres numéricos.",invalidPasswordMinUpperCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras mayúsculas.",invalidPasswordMinSpecialCharsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",invalidPasswordNotUsernameMessage:"Contraseña incorrecta: no puede ser igual al nombre de usuario.",invalidPasswordRegexPatternMessage:"Contraseña incorrecta: no cumple la expresión regular.",invalidPasswordHistoryMessage:"Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/4119.c9e70457.iframe.bundle.js b/4119.47e85e51.iframe.bundle.js similarity index 80% rename from 4119.c9e70457.iframe.bundle.js rename to 4119.47e85e51.iframe.bundle.js index 12244ba3..ce7cf4c0 100644 --- a/4119.c9e70457.iframe.bundle.js +++ b/4119.47e85e51.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4119],{"./dist/login/i18n/baseMessages/it.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Accedi",doRegister:"Registrati",doCancel:"Annulla",doSubmit:"Invia",doBack:"Indietro",doYes:"Sì",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 è configurato. Non puoi effettuare l'accesso.",registerTitle:"Registrati",loginAccountTitle:"Accedi",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à riavviato.",oauthGrantTitle:"Autenticazione concessa",oauthGrantTitleHtml:"{0}",errorTitle:"Siamo spiacenti…",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:"È richiesto il browser per il login",browserContinue:"È 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 è 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à o Località",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 è 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 è 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à 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 è 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 è disabilitato, contatta il tuo amministratore.",accountTemporarilyDisabledMessage:"L'account è temporaneamente disabilitato; contatta il tuo amministratore o prova più 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 è consentita.",invalidPasswordConfirmMessage:"La password di conferma non coincide.",invalidTotpMessage:"Codice di autenticazione non valido.",usernameExistsMessage:"Username già esistente.",emailExistsMessage:"Email già esistente.",federatedIdentityExistsMessage:"L'utente con {0} {1} esiste già. Effettua il login nella gestione account per associare l'account.",confirmLinkIdpTitle:"Account già esistente",federatedIdentityConfirmLinkMessage:"L'utente con {0} {1} esiste già. 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ù tardi.",accountUpdatedMessage:"Il tuo account è stato aggiornato.",accountPasswordUpdatedMessage:"La tua password è 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ù 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 è consentito di effettuare il login tramite browser",standardFlowDisabledMessage:"Al client non è consentito di effettuare il login tramite browser con questo response_type. Standard flow è stato disabilitato per il client.",implicitFlowDisabledMessage:"Al client non è consentito di effettuare il login tramite browser con questo response_type. Implicit flow è 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à.",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 è 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ì con il login.",staleCodeMessage:"Questa pagina non è più valida, torna alla tua applicazione ed effettua nuovamente l'accesso",realmSupportsNoCredentialsMessage:"Il realm non supporta nessun tipo di credenziali.",credentialSetupRequired:"Impossibile effettuare il login, è richiesto il setup delle credenziali.",identityProviderNotUniqueMessage:"Il realm supporta più di un identity provider. Impossibile determinare quale identity provider deve essere utilizzato per autenticarti.",emailVerifiedMessage:"Il tuo indirizzo email è stato verificato.",staleEmailVerificationLink:"Il link che hai cliccato è un link scaduto e non è più valido. Forse hai già verificato la tua email?",identityProviderAlreadyLinkedMessage:"L'identità federata restituita dall'identity provider {0} è già 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à 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à connesso.",differentUserAuthenticated:"Se già autenticato con l'utente '{0}' in questa sessione. Per favore, fai prima il logout.",brokerLinkingSessionExpired:"È stato richiesta un'associazione a un account broker, ma la sessione corrente non è più 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 è 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":"È richiesto l'aggiornamento della tua password.","console-verify-email":"Devi verificare il tuo indirizzo email. È 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.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.post-form.title":"Reindirizzamento per l'autenticazione","saml.post-form.message":"Reindirizzamento, attendere per favore.","saml.post-form.js-disabled":"JavaScript è disabilitato. È fortemente consigliato abilitarlo. Clicca sul bottone seguente per continuare.","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-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-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 è quello autenticato tramite la chiave di sicurezza.","webauthn-error-auth-verification":"Il risultato dell'autenticazione con la chiave di sicurezza non è valido.","webauthn-error-register-verification":"Il risultato della registrazione della chiave di sicurezza non è valido.","webauthn-error-user-not-found":"Utente sconosciuto autenticato con la chiave di sicurezza.","identity-provider-redirector":"Connettiti con un altro identity provider.","identity-provider-login-label":"Oppure accedi con",readOnlyUsernameMessage:"Non puoi aggiornare il tuo nome utente poiché è in modalità sola lettura."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4119],{"./dist/login/i18n/baseMessages/it.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Accedi",doRegister:"Registrati",doCancel:"Annulla",doSubmit:"Invia",doBack:"Indietro",doYes:"Sì",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 è configurato. Non puoi effettuare l'accesso.",registerTitle:"Registrati",loginAccountTitle:"Accedi",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à riavviato.",oauthGrantTitle:"Autenticazione concessa",oauthGrantTitleHtml:"{0}",errorTitle:"Siamo spiacenti…",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:"È richiesto il browser per il login",browserContinue:"È 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 è 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à o Località",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 è 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 è 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à 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 è 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 è disabilitato, contatta il tuo amministratore.",accountTemporarilyDisabledMessage:"L'account è temporaneamente disabilitato; contatta il tuo amministratore o prova più 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 è consentita.",invalidPasswordConfirmMessage:"La password di conferma non coincide.",invalidTotpMessage:"Codice di autenticazione non valido.",usernameExistsMessage:"Username già esistente.",emailExistsMessage:"Email già esistente.",federatedIdentityExistsMessage:"L'utente con {0} {1} esiste già. Effettua il login nella gestione account per associare l'account.",confirmLinkIdpTitle:"Account già esistente",federatedIdentityConfirmLinkMessage:"L'utente con {0} {1} esiste già. 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ù tardi.",accountUpdatedMessage:"Il tuo account è stato aggiornato.",accountPasswordUpdatedMessage:"La tua password è 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ù 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 è consentito di effettuare il login tramite browser",standardFlowDisabledMessage:"Al client non è consentito di effettuare il login tramite browser con questo response_type. Standard flow è stato disabilitato per il client.",implicitFlowDisabledMessage:"Al client non è consentito di effettuare il login tramite browser con questo response_type. Implicit flow è 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à.",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 è 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ì con il login.",staleCodeMessage:"Questa pagina non è più valida, torna alla tua applicazione ed effettua nuovamente l'accesso",realmSupportsNoCredentialsMessage:"Il realm non supporta nessun tipo di credenziali.",credentialSetupRequired:"Impossibile effettuare il login, è richiesto il setup delle credenziali.",identityProviderNotUniqueMessage:"Il realm supporta più di un identity provider. Impossibile determinare quale identity provider deve essere utilizzato per autenticarti.",emailVerifiedMessage:"Il tuo indirizzo email è stato verificato.",staleEmailVerificationLink:"Il link che hai cliccato è un link scaduto e non è più valido. Forse hai già verificato la tua email?",identityProviderAlreadyLinkedMessage:"L'identità federata restituita dall'identity provider {0} è già 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à 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à connesso.",differentUserAuthenticated:"Se già autenticato con l'utente '{0}' in questa sessione. Per favore, fai prima il logout.",brokerLinkingSessionExpired:"È stato richiesta un'associazione a un account broker, ma la sessione corrente non è più 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 è 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":"È richiesto l'aggiornamento della tua password.","console-verify-email":"Devi verificare il tuo indirizzo email. È 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.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.post-form.title":"Reindirizzamento per l'autenticazione","saml.post-form.message":"Reindirizzamento, attendere per favore.","saml.post-form.js-disabled":"JavaScript è disabilitato. È fortemente consigliato abilitarlo. Clicca sul bottone seguente per continuare.","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-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-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 è quello autenticato tramite la chiave di sicurezza.","webauthn-error-auth-verification":"Il risultato dell'autenticazione con la chiave di sicurezza non è valido.","webauthn-error-register-verification":"Il risultato della registrazione della chiave di sicurezza non è valido.","webauthn-error-user-not-found":"Utente sconosciuto autenticato con la chiave di sicurezza.","identity-provider-redirector":"Connettiti con un altro identity provider.","identity-provider-login-label":"Oppure accedi con",readOnlyUsernameMessage:"Non puoi aggiornare il tuo nome utente poiché è in modalità sola lettura."}}}]); \ No newline at end of file diff --git a/4174.718a8492.iframe.bundle.js b/4174.718a8492.iframe.bundle.js new file mode 100644 index 00000000..584e7d24 --- /dev/null +++ b/4174.718a8492.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4174],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginIdpLinkConfirm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginIdpLinkConfirm});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginIdpLinkConfirm(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,idpAlias=kcContext.idpAlias,msg=i18n.msg;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("confirmLinkIdpTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("form",Object.assign({id:"kc-register-form",action:url.loginAction,method:"post"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"submitAction",id:"updateProfile",value:"updateProfile"},{children:msg("confirmLinkIdpReviewProfile")})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"submitAction",id:"linkAccount",value:"linkAccount"},{children:msg("confirmLinkIdpContinue",idpAlias)}))]}))}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/4174.8a09320c.iframe.bundle.js b/4174.8a09320c.iframe.bundle.js deleted file mode 100644 index 45a04169..00000000 --- a/4174.8a09320c.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4174],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginIdpLinkConfirm.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginIdpLinkConfirm});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginIdpLinkConfirm(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,idpAlias=kcContext.idpAlias,msg=i18n.msg;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("confirmLinkIdpTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("form",Object.assign({id:"kc-register-form",action:url.loginAction,method:"post"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"submitAction",id:"updateProfile",value:"updateProfile"},{children:msg("confirmLinkIdpReviewProfile")})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"submitAction",id:"linkAccount",value:"linkAccount"},{children:msg("confirmLinkIdpContinue",idpAlias)}))]}))}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/4211.3396acbd.iframe.bundle.js b/4211.3396acbd.iframe.bundle.js deleted file mode 100644 index 50de2e62..00000000 --- a/4211.3396acbd.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4211],{"./dist/login/i18n/baseMessages/ca.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Inicia sessió",doRegister:"Registra't",doCancel:"Cancel·lar",doSubmit:"Envia",doYes:"Sí",doNo:"No",doContinue:"Continua",doAccept:"Accepta",doDecline:"Rebutja",doForgotPassword:"Has oblidat la teva contrasenya?",doClickHere:"Fes clic aquí",doImpersonate:"Personifica",kerberosNotConfigured:"Kerberos no configurat",kerberosNotConfiguredTitle:"Kerberos no configurat",bypassKerberosDetail:"O bé no estàs identificat mitjançant Kerberos o el teu navegador no està configurat per identificar-se mitjançant Kerberos. Si us plau fes clic per identificar-te per un altre mitjà.",kerberosNotSetUp:"Kerberos no està configurat. No pots identificar-te.",registerWithTitle:"Registra't amb {0}",registerWithTitleHtml:"{0}",loginAccountTitle:"Accedeix al teu compte",loginTitle:"Inicia sessió a {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Personifica Usuari",impersonateTitleHtml:"{0} Personifica Usuari",realmChoice:"Domini",unknownUser:"Usuari desconegut",loginTotpTitle:"Configura la teva aplicació d'identificació mòbil",loginProfileTitle:"Actualitza la informació del teu compte",loginTimeout:"Has trigat massa a identificar-te. Inicia de nou la identificació.",oauthGrantTitle:"Concessió OAuth",oauthGrantTitleHtml:"{0}",errorTitle:"Ho sentim...",errorTitleHtml:"Ho sentim...",emailVerifyTitle:"Verificació de l'email",emailForgotTitle:"Has oblidat la teva contrasenya?",updatePasswordTitle:"Modificació de contrasenya",codeSuccessTitle:"Codi d'èxit",codeErrorTitle:"Codi d'error: {0}",termsTitle:"Termes i Condicions",termsTitleHtml:"Termes i Condicions",termsText:"

Termes i condicions a definir

",recaptchaFailed:"Reconeixement de text invàlid",recaptchaNotConfigured:"El reconeixement de text és obligatori però no està 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ó",address:"Adreça",street:"Carrer",locality:"Ciutat o Municipi",region:"Estat, Província, o Regió",postal_code:"Codi Postal",country:"País",emailVerified:"Email verificat",gssDelegationCredential:"GSS Delegation Credential",loginTotpStep1:'Instal·la FreeOTP o Google Authenticator al teu telèfon mòbil. Les dues aplicacions estan disponibles a Google Play i en l\'App Store d\'Apple.',loginTotpStep2:"Obre l'aplicació i escaneja el codi o introdueix la clau.",loginTotpStep3:"Introdueix el codi únic que et mostra l'aplicació d'autenticació i fes clic a Envia per finalitzar la configuració",loginOtpOneTime:"Codi d'un sol ús",oauthGrantRequest:"Vols permetre aquests privilegis d'accés?",inResource:"a",emailVerifyInstruction1:"T'hem enviat un email amb instruccions per verificar el teu email.",emailVerifyInstruction2:"No has rebut un codi de verificació al teu email?",emailVerifyInstruction3:"per reenviar l'email.",backToLogin:"« Torna a la identificació",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ó:",personalInfo:"Informació 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ïdors d'identitat","role_manage-realm":"Gestionar domini","role_manage-users":"Gestionar usuaris","role_manage-applications":"Gestionar aplicacions","role_manage-identity-providers":"Gestionar proveïdors 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és sense connexió",client_account:"Compte","client_security-admin-console":"Consola d'Administració de Seguretat","client_realm-management":"Gestió del domini",client_broker:"Broker",invalidUserMessage:"Usuari o contrasenya incorrectes.",invalidEmailMessage:"Email no vàlid",accountDisabledMessage:"El compte està desactivat, contacta amb l'administrador.",accountTemporarilyDisabledMessage:"El compte està temporalment desactivat, contacta amb l'administrador o intenta-ho de nou més tard.",expiredCodeMessage:"S'ha esgotat el temps màxim per a la identificació. 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ó",notMatchPasswordMessage:"Les contrasenyes no coincideixen.",invalidPasswordExistingMessage:"La contrasenya actual no és correcta.",invalidPasswordConfirmMessage:"La confirmació de contrasenya no coincideix.",invalidTotpMessage:"El codi d'autenticació no és vàlid.",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ó del teu compte per enllaçar-lo.",federatedIdentityUsernameExistsMessage:"Ja existeix un usuari amb aquest nom d'usuari. Si us plau accedeix a la gestió del teu compte per enllaçar-lo.",configureTotpMessage:"Has de configurar l'aplicació mòbil 'd'identificació 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és instruccions",emailSendErrorMessage:"Ha fallat l'enviament de l'email, si us plau intenta-ho de nou més tard.",accountUpdatedMessage:"El teu compte s'ha actualitzat.",accountPasswordUpdatedMessage:"La contrasenya s'ha actualitzat.",noAccessMessage:"Sense accés",invalidPasswordMinLengthMessage:"Contrasenya incorrecta: longitud mínima {0}.",invalidPasswordMinDigitsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} caràcters numèrics.",invalidPasswordMinLowerCaseCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} lletres minúscules.",invalidPasswordMinUpperCaseCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} lletres majúscules.",invalidPasswordMinSpecialCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.",invalidPasswordNotUsernameMessage:"Contrasenya incorrecta: no pot ser igual al nom d'usuari.",invalidPasswordRegexPatternMessage:"Contrasenya incorrecta: no compleix l'expressió regular.",invalidPasswordHistoryMessage:"Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes.",failedToProcessResponseMessage:"Fallada en processar la resposta",httpsRequiredMessage:"HTTPS obligatori",realmNotEnabledMessage:"El domini no està activat",invalidRequestMessage:"Petició incorrecta",failedLogout:"Ha fallat la desconnexió.",unknownLoginRequesterMessage:"Sol·licitant d'identificació desconegut",loginRequesterNotEnabledMessage:"El sol·licitant d'inici de sessió està desactivat",bearerOnlyMessage:"Les aplicacions Bearer-only no poden iniciar sessió des del navegador.",directGrantsOnlyMessage:"Els clients de tipus Direct-grants-only no poden iniciar sessió des del navegador.",invalidRedirectUriMessage:"L'URI de redirecció no és correcta",unsupportedNameIdFormatMessage:"NameIDFormat no suportat",invalidRequesterMessage:"Sol·licitant no vàlid",registrationNotAllowedMessage:"El registre no està permès",resetCredentialNotAllowedMessage:"El reinici de les credencials no està permès",permissionNotApprovedMessage:"Permís no aprovat.",noRelayStateInResponseMessage:"Sense estat de retransmissió en la resposta del proveïdor d'identitat.",identityProviderAlreadyLinkedMessage:"La identitat retornada pel proveïdor d'identitat ja està associada a un altre usuari.",insufficientPermissionMessage:"Permisos insuficients per enllaçar identitats.",couldNotProceedWithAuthenticationRequestMessage:"No s'ha pogut continuar amb la petició d'autenticació al proveïdor d'identitat.",couldNotObtainTokenMessage:"No s'ha pogut obtenir el codi del proveïdor d'identitat.",unexpectedErrorRetrievingTokenMessage:"Error inesperat obtenint el token del proveïdor d'identitat",unexpectedErrorHandlingResponseMessage:"Error inesperat processant la resposta del proveïdor d'identitat.",identityProviderAuthenticationFailedMessage:"Ha fallat l'autenticació. No ha estat possible autenticar-se en el proveïdor d'identitat.",couldNotSendAuthenticationRequestMessage:"No s'ha pogut enviar la petició d'identificació al proveïdor d'identitat.",unexpectedErrorHandlingRequestMessage:"Error inesperat durant la petició d'identificació al proveïdor d'identitat.",invalidAccessCodeMessage:"Codi d'accés no vàlid.",sessionNotActiveMessage:"La sessió no està activa",invalidCodeMessage:"Hi ha hagut un error, si us plau identifica't de nou des de la teva aplicació.",identityProviderUnexpectedErrorMessage:"Error no esperat intentant autenticar en el proveïdor d'identitat.",identityProviderNotFoundMessage:"No s'ha trobat cap proveïdor d'identitat.",realmSupportsNoCredentialsMessage:"El domini no suporta cap tipus de credencials.",identityProviderNotUniqueMessage:"El domini suporta múltiples proveïdors d'identitat. No s'ha pogut determinar el proveïdor d'identitat que hauria de ser utilitzat per identificar-se.",emailVerifiedMessage:"El teu email ha estat verificat.",backToApplication:"« Torna a l'aplicació",missingParameterMessage:"Paràmetres que falten: {0}",clientNotFoundMessage:"Client no trobat",invalidParameterMessage:"Paràmetre no vàlid: {0}",alreadyLoggedIn:"You are already logged in."}}}]); \ No newline at end of file diff --git a/4211.e415ff4f.iframe.bundle.js b/4211.e415ff4f.iframe.bundle.js new file mode 100644 index 00000000..630f7f55 --- /dev/null +++ b/4211.e415ff4f.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4211],{"./dist/login/i18n/baseMessages/ca.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Inicia la sessió",doRegister:"Registreu-vos",doCancel:"Cancel·la",doSubmit:"Envia",doBack:"Enrere",doYes:"Sí",doNo:"No",doContinue:"Continua",doIgnore:"Ignora",doAccept:"Accepta",doDecline:"Rebutja",doForgotPassword:"Heu oblidat la vostra contrasenya?",doClickHere:"Feu clic aquí",doImpersonate:"Suplanta",doTryAgain:"Torna-ho a provar",doTryAnotherWay:"Prova d'una altra manera",doConfirmDelete:"Confirma la supressió",errorDeletingAccount:"S'ha produït un error en eliminar el compte",deletingAccountForbidden:"No teniu permisos suficients per a eliminar el vostre compte, contacteu amb l'administrador.",kerberosNotConfigured:"Kerberos no configurat",kerberosNotConfiguredTitle:"Kerberos no configurat",bypassKerberosDetail:"O bé no esteu identificat mitjançant Kerberos o el vostre navegador no està configurat per a identificar-se mitjançant Kerberos. Feu clic per a identificar-vos per un altre mitjà",kerberosNotSetUp:"Kerberos no està configurat. No us podeu identificar.",registerTitle:"Registreu-vos",loginAccountTitle:"Accediu al vostre compte",loginTitle:"Inicia la sessió a {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Suplanta l'usuari",impersonateTitleHtml:"{0} Suplanta l'usuari",realmChoice:"Domini",unknownUser:"Usuari desconegut",loginTotpTitle:"Configuració de l'autenticador mòbil",loginProfileTitle:"Actualització de la informació del compte",loginIdpReviewProfileTitle:"Actualització de la informació del compte",loginTimeout:"S'ha excedit el temps per a realitzar una entrada. L'entrada començarà des del principi.",reauthenticate:"Torneu a identificar-vos per a continuar",oauthGrantTitle:"Concedeix l'accés a {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Assegureu-vos que confieu en {0} assabentant-vos de com {0} gestionarà les vostres dades.",oauthGrantReview:"Podeu revisar les",oauthGrantTos:"condicions del servei.",oauthGrantPolicy:"política de privacitat.",errorTitle:"Ho lamentem...",errorTitleHtml:"Ho lamentem...",emailVerifyTitle:"Verificació del correu electrònic",emailForgotTitle:"Heu oblidat la contrasenya?",updateEmailTitle:"Actualitza el correu electrònic",emailUpdateConfirmationSentTitle:"S'ha enviat un correu de confirmació",emailUpdateConfirmationSent:"S'ha enviat un correu electrònic de confirmació a {0}. Seguiu les instruccions per a completar l'actualització del correu electrònic.",emailUpdatedTitle:"S'ha actualitzat el correu electrònic",emailUpdated:"S'ha actualitzat correctament el correu electrònic del compte a {0}.",updatePasswordTitle:"Actualitza la contrasenya",codeSuccessTitle:"Codi d'èxit",codeErrorTitle:"Codi d'error\\: {0}",displayUnsupported:"El tipus de visualització demanat no és compatible",browserRequired:"Es requereix un navegador per a entrar",browserContinue:"Es requereix un navegador per a completar l'entrada",browserContinuePrompt:"Voleu obrir el navegador i continuar l'entrada? [s/n]:",browserContinueAnswer:"s",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"Interna",unknown:"Desconegut",termsTitle:"Termes i condicions",termsText:"

Termes i condicions a definir

",termsPlainText:"Termes i condicions a definir.",termsAcceptanceRequired:"Heu d'acceptar els nostres termes i condicions.",acceptTerms:"Accepto els termes i condicions",recaptchaFailed:"Recaptcha invàlid",recaptchaNotConfigured:"El Recaptcha és obligatori però no està configurat",consentDenied:"Consentiment rebutjat.",noAccount:"Usuari nou?",username:"Usuari",usernameOrEmail:"Usuari o adreça electrònica",firstName:"Nom",givenName:"Nom de pila",fullName:"Nom complet",lastName:"Cognoms",familyName:"Cognoms",email:"Email",password:"Contrasenya",passwordConfirm:"Confirma la contrasenya",passwordNew:"Contrasenya nova",passwordNewConfirm:"Confirma la contrasenya nova",rememberMe:"Recorda'm",authenticatorCode:"Codi d'un sol ús",address:"Adreça",street:"Carrer",locality:"Ciutat o municipi",region:"Estat, província o regió",postal_code:"Codi postal",country:"País",emailVerified:"Adreça electrònica verificada",website:"Pàgina web",phoneNumber:"Número de telèfon",phoneNumberVerified:"Número de telèfon verificat",gender:"Gènere",birthday:"Natalici",zoneinfo:"Fus horari",gssDelegationCredential:"Credencial de delegació GSS",logoutOtherSessions:"Surt d'altres dispositius",profileScopeConsentText:"Perfil d'usuari",emailScopeConsentText:"Correu electrònic",addressScopeConsentText:"Adreça",phoneScopeConsentText:"Número de telèfon",offlineAccessScopeConsentText:"Accés fora de línia",samlRoleListScopeConsentText:"Els meus rols",rolesScopeConsentText:"Rols d'usuari",restartLoginTooltip:"Torna a iniciar l'entrada",loginTotpIntro:"Heu de configurar un generador de contrasenyes d'un sol ús per a accedir a aquest compte",loginTotpStep1:"Instal·leu una de les aplicacions següents al vostre mòbil:",loginTotpStep2:"Obriu l'aplicació i escanegeu el codi de barres:",loginTotpStep3:"Introduïu el codi d'un sol ús proveït per l'aplicació i feu clic a Envia per a finalitzar la configuració.",loginTotpStep3DeviceName:"Introduïu un nom de dispositiu per a ajudar-vos a gestionar els vostres dispositius OTP.",loginTotpManualStep2:"Obriu l'aplicació i introduïu la clau:",loginTotpManualStep3:"Utilitzeu els valors de configuració següents si l'aplicació permet establir-los:",loginTotpUnableToScan:"No podeu escanejar?",loginTotpScanBarcode:"Voleu escanejar el codi de barres?",loginCredential:"Credencial",loginOtpOneTime:"Codi d'un sol ús",loginTotpType:"Tipus",loginTotpAlgorithm:"Algoritme",loginTotpDigits:"Dígits",loginTotpInterval:"Interval",loginTotpCounter:"Comptador",loginTotpDeviceName:"Nom del dispositiu","loginTotp.totp":"Basat en temps","loginTotp.hotp":"Basat en comptador",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"Seleccioneu un mètode d'entrada",oauthGrantRequest:"Voleu permetre aquests privilegis d'accés?",inResource:"a",oauth2DeviceVerificationTitle:"Entrada per dispositiu",verifyOAuth2DeviceUserCode:"Introduïu el codi proveït pel vostre dispositiu i feu clic a Envia",oauth2DeviceInvalidUserCodeMessage:"El codi no és vàlid, torneu-ho a provar.",oauth2DeviceExpiredUserCodeMessage:"El codi ha caducat. Torneu al vostre dispositiu i intenteu-ho de nou.",oauth2DeviceVerificationCompleteHeader:"Inici de sessió per dispositiu correcte",oauth2DeviceVerificationCompleteMessage:"Podeu tancar aquesta finestra del navegador i tornar al vostre dispositiu.",oauth2DeviceVerificationFailedHeader:"Ha fallat l'inici de sessió per dispositiu",oauth2DeviceVerificationFailedMessage:"Podeu tancar aquesta finestra del navegador i tornar al vostre dispositiu per a tornar a connectar.",oauth2DeviceConsentDeniedMessage:"S'ha rebutjat el consentiment per a connectar al dispositiu.",oauth2DeviceAuthorizationGrantDisabledMessage:"El client no està autoritzat a iniciar una concessió d'autorització de dispositiu OAuth 2.0. El flux és inhabilitat per al client.",emailVerifyInstruction1:"S'ha enviat un correu electrònic a la vostra adreça de correu electrònic {0} amb instruccions per a verificar-la.",emailVerifyInstruction2:"No heu rebut un codi de verificació al vostre correu electrònic?",emailVerifyInstruction3:"per a tornar a enviar el correu electrònic.",emailLinkIdpTitle:"Enllaç a {0}",emailLinkIdp1:"S'ha enviat un correu electrònic amb instruccions per a enllaçar el compte {0} {1} amb el vostre compte {2}.",emailLinkIdp2:"No heu rebut un codi de verificació al vostre correu electrònic?",emailLinkIdp3:"per a tornar a enviar el correu electrònic.",emailLinkIdp4:"si ja heu verificat el correu electrònic en un altre navegador",emailLinkIdp5:"per a continuar.",backToLogin:"« Torna a la identificació",emailInstruction:"Introduïu el vostre nom d'usuari o adreça de correu electrònic i us enviarem instruccions per a establir una contrasenya nova.",emailInstructionUsername:"Introduïu el vostre nom d'usuari i us enviarem instruccions per a establir una contrasenya nova.",copyCodeInstruction:"Copieu i enganxeu aquest codi a la vostra aplicació:",pageExpiredTitle:"La pàgina ha caducat",pageExpiredMsg1:"Per a tornar a iniciar el procés d'entrada",pageExpiredMsg2:"Per a continuar el procés d'entrada",personalInfo:"Informació personal:",role_admin:"Administració","role_realm-admin":"Administrador del domini","role_create-realm":"Crea un domini","role_create-client":"Crea un client","role_view-realm":"Visualitza el domini","role_view-users":"Visualitza els usuaris","role_view-applications":"Visualitza les aplicacions","role_view-clients":"Visualitza els clients","role_view-events":"Visualitza els esdeveniments","role_view-identity-providers":"Visualitza els proveïdors d'identitat","role_manage-realm":"Gestiona el domini","role_manage-users":"Gestiona els usuaris","role_manage-applications":"Gestiona les aplicacions","role_manage-identity-providers":"Gestiona els proveïdors d'identitat","role_manage-clients":"Gestiona els clients","role_manage-events":"Gestiona els esdeveniments","role_view-profile":"Visualitza el perfil","role_manage-account":"Gestiona el compte","role_manage-account-links":"Gestiona els enllaços del compte","role_read-token":"Llegeix el codi d'autorització","role_offline-access":"Accés fora de línia",client_account:"Compte","client_account-console":"Consola del compte","client_security-admin-console":"Consola d'administració de seguretat","client_admin-cli":"CLI d'administració","client_realm-management":"Gestió del domini",client_broker:"Agent",requiredFields:"Camps requerits",invalidUserMessage:"El nom d'usuari o contrasenya no són vàlids.",invalidUsernameMessage:"El nom d'usuari no és vàlid.",invalidUsernameOrEmailMessage:"El nom d'usuari o correu electrònic no són vàlids.",invalidPasswordMessage:"La contrasenya no és vàlida.",invalidEmailMessage:"L'adreça de correu electrònic no és vàlida.",accountDisabledMessage:"El compte està inhabilitat, contacteu amb l'administrador.",accountTemporarilyDisabledMessage:"El compte està temporalment inhabilitat, contacteu amb l'administrador o intenteu-ho de nou més tard.",expiredCodeMessage:"S'ha esgotat el temps màxim per a la identificació. Identifiqueu-vos de nou.",expiredActionMessage:"L'acció ha caducat. Continueu ara amb l'entrada.",expiredActionTokenNoSessionMessage:"L'acció ha caducat.",expiredActionTokenSessionExistsMessage:"L'acció ha caducat. Si us plau, comenceu de nou.",sessionLimitExceeded:"Hi ha massa sessions.",missingFirstNameMessage:"Indiqueu el vostre nom.",missingLastNameMessage:"Indiqueu els vostres cognoms.",missingEmailMessage:"Indiqueu la vostra adreça de correu electrònic.",missingUsernameMessage:"Indiqueu el vostre nom d'usuari.",missingPasswordMessage:"Indiqueu la vostra contrasenya.",missingTotpMessage:"Indiqueu el vostre codi d'autenticació.",missingTotpDeviceNameMessage:"Indiqueu el nom del vostre dispositiu.",notMatchPasswordMessage:"Les contrasenyes no coincideixen.","error-invalid-value":"El valor no és vàlid.","error-invalid-blank":"Especifiqueu un valor.","error-empty":"Especifiqueu un valor.","error-invalid-length":"La llargària ha de ser d'entre {1} i {2}.","error-invalid-length-too-short":"La llargària mínima és de {1}.","error-invalid-length-too-long":"La llargària màxima és de {2}.","error-invalid-email":"L'adreça de correu electrònic no és vàlida.","error-invalid-number":"El nombre no és vàlid.","error-number-out-of-range":"El número ha de ser entre {1} i {2}.","error-number-out-of-range-too-small":"El nombre ha de tindre un valor mínim de {1}.","error-number-out-of-range-too-big":"El nombre ha de tindre un valor màxim de {2}.","error-pattern-no-match":"El valor no és vàlid.","error-invalid-uri":"L'URL no és vàlid.","error-invalid-uri-scheme":"L'esquema d'URL no és vàlid.","error-invalid-uri-fragment":"El fragment d'URL no és vàlid.","error-user-attribute-required":"Especifiqueu aquest camp.","error-invalid-date":"La data no és vàlida.","error-user-attribute-read-only":"Aquest camp és només de lectura.","error-username-invalid-character":"El valor conté un caràcter no vàlid.","error-person-name-invalid-character":"El valor conté un caràcter no vàlid.","error-reset-otp-missing-id":"Seleccioneu una configuració d'OTP.",invalidPasswordExistingMessage:"La contrasenya actual no és vàlida.",invalidPasswordBlacklistedMessage:"La contrasenya no és vàlida: està en una llista negra.",invalidPasswordConfirmMessage:"La confirmació de contrasenya no coincideix.",invalidTotpMessage:"El codi d'autenticació no és vàlid.",usernameExistsMessage:"El nom d'usuari ja existeix.",emailExistsMessage:"El correu electrònic ja existeix.",federatedIdentityExistsMessage:"Ja existeix un usuari amb {0} {1}. Entreu al gestor de comptes per a enllaçar el compte.",federatedIdentityUnavailableMessage:"L'usuari {0} autenticat amb el proveïdor d'identitat {1} no existeix. Contacteu amb l'administrador.",federatedIdentityUnmatchedEssentialClaimMessage:"El codi d'autorització de l'ID emès pel proveïdor d'identitat no concorda amb la declaració essencial configurada. Contacteu amb l'administrador.",confirmLinkIdpTitle:"El compte ja existeix",federatedIdentityConfirmLinkMessage:"Ja existeix un usuari amb {0} {1}. Com voleu continuar?",federatedIdentityConfirmReauthenticateMessage:"Identifiqueu-vos per a enllaçar el vostre compte amb {0}",nestedFirstBrokerFlowMessage:"L'usuari {0} de {1} no està enllaçat a cap usuari conegut.",confirmLinkIdpReviewProfile:"Revisa el perfil",confirmLinkIdpContinue:"Afegeix al compte existent",configureTotpMessage:"Heu de configurar l'aplicació mòbil d'autenticació per a activar el compte.",configureBackupCodesMessage:"Heu de configurar els codis de recuperació per a activar el compte.",updateProfileMessage:"Heu d'actualitzar el vostre perfil d'usuari per a activar el compte.",updatePasswordMessage:"Heu de canviar la contrasenya per a activar el compte.",updateEmailMessage:"Heu d'actualitzar la vostra adreça de correu electrònic per a activar el compte.",resetPasswordMessage:"Heu de canviar la contrasenya.",verifyEmailMessage:"Heu de verificar la vostra adreça de correu electrònic per a activar el compte.",linkIdpMessage:"Heu de verificar la vostra adreça electrònica per a enllaçar el compte amb {0}.",emailSentMessage:"Aviat hauríeu de rebre un correu electrònic amb més instruccions.",emailSendErrorMessage:"Ha fallat l'enviament del correu electrònic, intenteu-ho de nou més tard.",accountUpdatedMessage:"S'ha actualitzat el compte.",accountPasswordUpdatedMessage:"S'ha actualitzat la contrasenya.",delegationCompleteHeader:"Inici de sessió correcte",delegationCompleteMessage:"Podeu tancar aquesta finestra del navegador i tornar a la vostra aplicació de consola.",delegationFailedHeader:"Ha fallat l'inici de sessió",delegationFailedMessage:"Podeu tancar aquesta finestra del navegador i tornar a la vostra aplicació de consola per a tornar a connectar.",noAccessMessage:"Sense accés",invalidPasswordMinLengthMessage:"La contrasenya no és vàlida: la llargària mínima és {0}.",invalidPasswordMaxLengthMessage:"La contrasenya no és vàlida: la llargària màxima és {0}.",invalidPasswordMinDigitsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} caràcters numèrics.",invalidPasswordMinLowerCaseCharsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} lletres minúscules.",invalidPasswordMinUpperCaseCharsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} lletres majúscules.",invalidPasswordMinSpecialCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.",invalidPasswordNotUsernameMessage:"La contrasenya no és vàlida: no pot ser igual al nom d'usuari.",invalidPasswordNotEmailMessage:"La contrasenya no és vàlida: no pot ser igual al correu electrònic.",invalidPasswordRegexPatternMessage:"La contrasenya no és vàlida: no coincideix amb el patró de l'expressió regular.",invalidPasswordHistoryMessage:"Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes.",invalidPasswordGenericMessage:"La contrasenya no és vàlida: la contrasenya nova no coincideix amb les polítiques de contrasenya.",failedToProcessResponseMessage:"No s'ha pogut processar la resposta",httpsRequiredMessage:"Es requereix HTTPS",realmNotEnabledMessage:"El domini no està habilitat",invalidRequestMessage:"Petició incorrecta",successLogout:"No esteu identificat",failedLogout:"Ha fallat la desconnexió.",unknownLoginRequesterMessage:"Sol·licitant d'identificació desconegut",loginRequesterNotEnabledMessage:"El sol·licitant d'inici de sessió està desactivat",bearerOnlyMessage:"Les aplicacions Bearer-only no poden iniciar sessió des del navegador.",standardFlowDisabledMessage:"El client no està autoritzat a iniciar una entrada per navegador amb el tipus de resposta donada. El flux estàndard està inhabilitat per al client.",implicitFlowDisabledMessage:"El client no està autoritzat a iniciar una entrada per navegador amb el tipus de resposta donada. El flux implícit està inhabilitat per al client.",invalidRedirectUriMessage:"L'URI de redirecció no és vàlid",unsupportedNameIdFormatMessage:"El NameIDFormat no està implementat",invalidRequesterMessage:"El sol·licitant no és vàlid",registrationNotAllowedMessage:"El registre no està permès",resetCredentialNotAllowedMessage:"El reinici de les credencials no està permès",permissionNotApprovedMessage:"Permís no aprovat.",noRelayStateInResponseMessage:"Sense estat de retransmissió en la resposta del proveïdor d'identitat.",insufficientPermissionMessage:"Permisos insuficients per a enllaçar identitats.",couldNotProceedWithAuthenticationRequestMessage:"No s'ha pogut continuar amb la petició d'autenticació al proveïdor d'identitat.",couldNotObtainTokenMessage:"No s'ha pogut obtenir el codi d'autorització del proveïdor d'identitat.",unexpectedErrorRetrievingTokenMessage:"Error inesperat en obtenir el codi d'autorització del proveïdor d'identitat",unexpectedErrorHandlingResponseMessage:"Error inesperat processant la resposta del proveïdor d'identitat.",identityProviderAuthenticationFailedMessage:"Ha fallat l'autenticació. No ha estat possible autenticar-se en el proveïdor d'identitat.",couldNotSendAuthenticationRequestMessage:"No s'ha pogut enviar la petició d'identificació al proveïdor d'identitat.",unexpectedErrorHandlingRequestMessage:"Error inesperat durant la petició d'identificació al proveïdor d'identitat.",invalidAccessCodeMessage:"Codi d'accés no vàlid.",sessionNotActiveMessage:"La sessió no està activa",invalidCodeMessage:"S'ha produït un error, identifiqueu-vos de nou des de la vostra aplicació.",cookieNotFoundMessage:"No s'ha trobat la galeta. Assegureu-vos que les galetes estan habilitades al vostre navegador.",insufficientLevelOfAuthentication:"El nivell d'autenticació sol·licitat no s'ha satisfet.",identityProviderUnexpectedErrorMessage:"Error no esperat intentant autenticar en el proveïdor d'identitat.",identityProviderMissingStateMessage:"Manca un paràmetre d'estat a la resposta del proveïdor d'identitat.",identityProviderInvalidResponseMessage:"La resposta del proveïdor d'identitat no és vàlida.",identityProviderInvalidSignatureMessage:"La signatura de la resposta del proveïdor d'identitat no és vàlida.",identityProviderNotFoundMessage:"No s'ha trobat cap proveïdor d'identitat.",identityProviderLinkSuccess:"Heu verificat el vostre correu electrònic correctament. Torneu al vostre navegador original i continueu amb l'entrada allà.",staleCodeMessage:"Aquesta pàgina ja no és vàlida, torneu a la vostra aplicació i torneu a entrar",realmSupportsNoCredentialsMessage:"El domini no suporta cap tipus de credencials.",credentialSetupRequired:"No es pot entrar, es requereix la configuració de credencials.",identityProviderNotUniqueMessage:"El domini suporta múltiples proveïdors d'identitat. No s'ha pogut determinar el proveïdor d'identitat que hauria de ser utilitzat per identificar-se.",emailVerifiedMessage:"S'ha verificat el vostre correu electrònic.",staleEmailVerificationLink:"L'enllaç en què heu clicat és un enllaç antic que ja no és vàlid. Potser ja heu verificat el vostre correu electrònic.",identityProviderAlreadyLinkedMessage:"La identitat federada retornada per {0} ja està enllaçada a un altre usuari.",confirmAccountLinking:"Confirmeu l'enllaçat del compte {0} del proveïdor d'identitat {1} amb el vostre compte.",confirmEmailAddressVerification:"Confirmeu la validesa de l'adreça de correu electrònic {0}.",confirmExecutionOfActions:"Completeu les accions següents",locale_ar:"àrab",locale_ca:"català",locale_cs:"txec",locale_da:"danès",locale_de:"alemany",locale_en:"anglès",locale_es:"castellà",locale_fi:"finès",locale_fr:"francès",locale_hu:"hongarès",locale_it:"italià",locale_ja:"japonès",locale_lt:"lituà",locale_lv:"letó",locale_nl:"neerlandès",locale_no:"noruec",locale_pl:"polonès",locale_pt_BR:"portuguès (Brasil)",locale_ru:"rus",locale_sk:"eslovè",locale_sv:"suec",locale_tr:"turc","locale_zh-CN":"xinès simplificat",backToApplication:"« Torna a l'aplicació",missingParameterMessage:"Manquen paràmetres\\: {0}",clientNotFoundMessage:"No s'ha trobat el client.",clientDisabledMessage:"El client és inhabilitat.",invalidParameterMessage:"El paràmetre no és vàlid\\: {0}",alreadyLoggedIn:"Ja esteu identificat.",differentUserAuthenticated:"Ja esteu identificat amb l'usuari diferent «{0}» en aquesta sessió. Desconnecteu primer.",brokerLinkingSessionExpired:"S'ha sol·licitat l'enllaçat d'un compte agent, però la sessió actual ja no és vàlida.",proceedWithAction:"» Feu clic aquí per a continuar",acrNotFulfilled:"Els requisits d'autenticació no s'han satisfet","requiredAction.CONFIGURE_TOTP":"Configura l'OTP","requiredAction.TERMS_AND_CONDITIONS":"Termes i condicions","requiredAction.UPDATE_PASSWORD":"Actualitza la contrasenya","requiredAction.UPDATE_PROFILE":"Actualitza el perfil","requiredAction.VERIFY_EMAIL":"Verifica el correu electrònic","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Genera codis de recuperació","requiredAction.webauthn-register-passwordless":"Registre sense contrasenya WebAuthn",invalidTokenRequiredActions:"Les accions requerides a l'enllaç no són vàlides",doX509Login:"Us identificareu com a\\:",clientCertificate:"Certificat de client X509\\:",noCertificate:"[Cap certificat]",pageNotFound:"No s'ha trobat la pàgina",internalServerError:"S'ha produït un error intern","console-username":"Nom d'usuari:","console-password":"Contrasenya:","console-otp":"Contrasenya d'un sol ús:","console-new-password":"Contrasenya nova:","console-confirm-password":"Confirma la contrasenya:","console-update-password":"Es requereix que actualitzeu la vostra contrasenya.","console-verify-email":"Heu de verificar l'adreça de correu electrònic. Hem enviat un correu electrònic a {0} que conté un codi de verificació. Introduïu aquest codi al camp següent.","console-email-code":"Codi de verificació:","console-accept-terms":"Voleu acceptar els termes? [s/n]:","console-accept":"s","openshift.scope.user_info":"Informació d'usuari","openshift.scope.user_check-access":"Informació d'accessos d'usuari","openshift.scope.user_full":"Accés total","openshift.scope.list-projects":"Llista els projectes","saml.post-form.title":"Redirecció d'autenticació","saml.post-form.message":"S'està redirigint, espereu.","saml.post-form.js-disabled":"El JavaScript està inhabilitat. Us recomanem que l'habiliteu. Feu clic al botó de sota per a continuar.","saml.artifactResolutionServiceInvalidResponse":"No s'ha pogut resoldre l'artefacte.","otp-display-name":"Aplicació d'autenticació","otp-help-text":"Introduïu el codi de verificació de l'aplicació d'autenticació.","otp-reset-description":"Quina configuració d'OTP voleu suprimir?","password-display-name":"Contrasenya","password-help-text":"Entreu introduint la vostra contrasenya.","auth-username-form-display-name":"Nom d'usuari","auth-username-form-help-text":"Comenceu a identificar-vos introduint el vostre nom d'usuari","auth-username-password-form-display-name":"Nom d'usuari i contrasenya","auth-username-password-form-help-text":"Entreu introduint el vostre nom d'usuari i contrasenya.","auth-recovery-authn-code-form-display-name":"Codi d'autenticació de recuperació","auth-recovery-authn-code-form-help-text":"Introduïu un codi d'autenticació de recuperació d'una llista prèviament generada.","auth-recovery-code-info-message":"Introduïu el codi de recuperació especificat.","auth-recovery-code-prompt":"Codi de recuperació #{0}","auth-recovery-code-header":"Entreu amb un codi d'autenticació de recuperació","recovery-codes-error-invalid":"El codi d'autenticació de recuperació no és vàlid","recovery-code-config-header":"Codis d'autenticació de recuperació","recovery-code-config-warning-title":"Aquests codis de recuperació no es tornaran a mostrar després que abandoneu la pàgina","recovery-code-config-warning-message":"Assegureu-vos que els imprimiu, baixeu o copieu a un gestor de contrasenyes i els deseu de manera segura. Cancel·lar aquesta configuració eliminarà aquests codis de recuperació del vostre compte.","recovery-codes-print":"Imprimeix","recovery-codes-download":"Baixa","recovery-codes-copy":"Copia","recovery-codes-copied":"S'ha copiat","recovery-codes-confirmation-message":"He desat aquests codis en algun lloc segur","recovery-codes-action-complete":"Completa la configuració","recovery-codes-action-cancel":"Cancel·la la configuració","recovery-codes-download-file-header":"Deseu aquests codis de recuperació en un lloc segur.","recovery-codes-download-file-description":"Els codis de recuperació són codis d'accés d'un sol ús que vos permeten entrar al vostre compte si no teniu accés al vostre autenticador.","recovery-codes-download-file-date":"Aquests codis s'han generat el","recovery-codes-label-default":"Codis de recuperació","webauthn-display-name":"Clau de seguretat","webauthn-help-text":"Utilitzeu la vostra clau de seguretat per a entrar.","webauthn-passwordless-display-name":"Clau de seguretat","webauthn-passwordless-help-text":"Utilitzeu la vostra clau de seguretat per a entrar sense contrasenya.","webauthn-login-title":"Entrada amb clau de seguretat","webauthn-registration-title":"Registre d'una clau de seguretat","webauthn-available-authenticators":"Claus de seguretat disponibles","webauthn-unsupported-browser-text":"El WebAuthn no està implementat per aquest navegador. Proveu-ho amb un altre o contacteu amb l'administrador.","webauthn-doAuthenticate":"Entra amb una clau de seguretat","webauthn-createdAt-label":"Creada","webauthn-error-title":"Error de la clau de seguretat","webauthn-error-registration":"No s'ha pogut registrar la vostra clau de seguretat.
{0}","webauthn-error-api-get":"No s'ha pogut identificar amb la clau de seguretat.
{0}","webauthn-error-different-user":"L'usuari identificat primer no és l'autenticat per la clau de seguretat.","webauthn-error-auth-verification":"El resultat de l'autenticació amb clau de seguretat no és vàlid.
{0}","webauthn-error-register-verification":"El resultat del registre amb clau de seguretat no és vàlid.
{0}","webauthn-error-user-not-found":"L'usuari identificat per la clau de seguretat és desconegut.","identity-provider-redirector":"Connecta amb un altre proveïdor d'identitat","identity-provider-login-label":"O entra amb","idp-email-verification-display-name":"Verificació de correu electrònic","idp-email-verification-help-text":"Enllaceu el compte verificant la vostra adreça de correu electrònic.","idp-username-password-form-display-name":"Nom d'usuari i contrasenya","idp-username-password-form-help-text":"Enllaceu el vostre compte mitjançant una identificació.",finalDeletionConfirmation:"Si elimineu el vostre compte, no es podrà restaurar. Per a mantenir el vostre compte, feu clic en Cancel·la.",irreversibleAction:"Aquesta acció és irreversible",deleteAccountConfirm:"Confirmació de supressió del compte",deletingImplies:"La supressió del vostre compte implica:",errasingData:"Eliminar totes les vostres dades",loggingOutImmediately:"Desconnectar-vos immediatament",accountUnusable:"Qualsevol ús posterior de l'aplicació no serà possible amb aquest compte",userDeletedSuccessfully:"S'ha eliminat l'usuari correctament","access-denied":"S'ha denegat l'accés","access-denied-when-idp-auth":"S'ha denegat l'accés mentre s'autenticava amb {0}","frontchannel-logout.title":"Sortida","frontchannel-logout.message":"Esteu sortint de les aplicacions següents",logoutConfirmTitle:"Sortida",logoutConfirmHeader:"Esteu segur que voleu sortir?",doLogout:"Surt",readOnlyUsernameMessage:"No podeu actualitzar el vostre nom d'usuari perquè és de només lectura."}}}]); \ No newline at end of file diff --git a/4247.40a68100.iframe.bundle.js b/4247.40a68100.iframe.bundle.js deleted file mode 100644 index 81229d5d..00000000 --- a/4247.40a68100.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4247],{"./dist/login/i18n/baseMessages/hu.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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ó",loginAccountTitle:"Jelentkezzen be a fiókjába",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.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.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. ","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-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-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","identity-provider-login-label":"Egyéb bejelentkezési módok",readOnlyUsernameMessage:"A felhasználó név nem módosítható."}}}]); \ No newline at end of file diff --git a/4247.7f1489a4.iframe.bundle.js b/4247.7f1489a4.iframe.bundle.js new file mode 100644 index 00000000..137f44d3 --- /dev/null +++ b/4247.7f1489a4.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4247],{"./dist/login/i18n/baseMessages/hu.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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",doConfirmDelete:"Törlés megerősítése",errorDeletingAccount:"Hiba történt a fiók törlése közben",deletingAccountForbidden:"Nincs jogosultsága a felhasználói fiókjának törléséhez. Kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.",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ó",loginAccountTitle:"Jelentkezzen be a fiókjába",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",loginIdpReviewProfileTitle:"Fiók adatainak 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.",reauthenticate:"Kérem, jelentkezzen be újra a folytatáshoz",oauthGrantTitle:"Hozzáférés engedélyezése a következő számára: {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Győződjön meg arról, hogy megbízik a(z) {0} alkalmazásban azáltal, hogy megismeri, hogyan kezeli az adatait.",oauthGrantReview:"Tekintse át ",oauthGrantTos:"a Felhasználási feltételeket.",oauthGrantPolicy:"az Adatvédelmi irányelveket.",errorTitle:"Nagyon sajnáljuk...",errorTitleHtml:"Nagyon sajnáljuk ...",emailVerifyTitle:"E-mail ellenőrzés",emailForgotTitle:"Elfelejtette a jelszavát?",updateEmailTitle:"E-mail cím módosítása",emailUpdateConfirmationSentTitle:"Megerősítő e-mail elküldve",emailUpdateConfirmationSent:"Egy megerősítő e-mail került elküldésre a(z) {0} címre. Kövesse az abban található utasításokat a változtatások véglegesítéséhez.",emailUpdatedTitle:"E-mail cím módosítva",emailUpdated:"A fiók e-mail címe a következőre módosult: {0}.",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",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"Belső",unknown:"Ismeretlen",termsTitle:"Felhasználási feltételek",termsText:"

Felhasználási feltételek helye

",termsPlainText:"Felhasználási feltételek helye",termsAcceptanceRequired:"El kell fogadnia a felhasználási feltételeket.",acceptTerms:"Elfogadom a felhasználási feltételeket",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",email:"E-mail cím",password:"Jelszó",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 e-mail cím",website:"Weboldal",phoneNumber:"Telefonszám",phoneNumberVerified:"Ellenőrzött telefonszám",gender:"Nem",birthday:"Születési dátum",zoneinfo:"Időzóna",gssDelegationCredential:"GSS delegált hitelesítés",logoutOtherSessions:"Kijelentkezés más eszközökről",profileScopeConsentText:"Felhasználói fiók",emailScopeConsentText:"E-mail 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ú",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"Válasszon egy belépési módszert",oauthGrantRequest:"Engedélyezi a következő hozzáférés jogosultságokat?",inResource:"Itt:",oauth2DeviceVerificationTitle:"Eszköz hitelesítése",verifyOAuth2DeviceUserCode:"Írja be az eszköz által generált kódot, majd kattintson az Elküld gombra",oauth2DeviceInvalidUserCodeMessage:"Érvénytelen kód, kérem, próbálja újra.",oauth2DeviceExpiredUserCodeMessage:"A kód érvényessége lejárt. Kérem, térjen vissza az eszközhöz és próbálja újra.",oauth2DeviceVerificationCompleteHeader:"Eszköz hitelesítése sikeres",oauth2DeviceVerificationCompleteMessage:"Bezárhatja ezt az oldalt és visszatérhet az eszközhöz.",oauth2DeviceVerificationFailedHeader:"Eszköz hitelesítése sikertelen",oauth2DeviceVerificationFailedMessage:"Bezárhatja ezt az oldalt. Kérem, térjen vissza az eszközhöz és próbáljon meg csatlakozni újra.",oauth2DeviceConsentDeniedMessage:"Jóváhagyó nyilatkozat elutasítva az eszköz számára.",oauth2DeviceAuthorizationGrantDisabledMessage:"Az alkalmazás nem indíthat OAuth 2.0 Eszköz Hitelesítést. Ez a folyamat nincsen engedélyezve ezen alkalmazás számára.",emailVerifyInstruction1:"A megadott e-mail címre elküldtük az e-mail cím megerősítéséhez szükséges lépéseket tartalmazó üzenetet.",emailVerifyInstruction2:"Nem kapott megerősítő kódot tartalmazó e-mail ü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 e-mail üzenetben elküldtük Önnek.",emailLinkIdp2:"Nem kapott megerősítő kódot tartalmazó e-mail ü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 e-mail címét",emailLinkIdp5:"a folytatáshoz.",backToLogin:"« Vissza a belépéshez",emailInstruction:"Adja meg a felhasználónevét vagy e-mail címét, hogy az új jelszó beállításához szükséges tudnivalókat elküldhessük Önnek.",emailInstructionUsername:"Adja meg a felhasználónevé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_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_read-token":"Olvasási token","role_offline-access":"Offline hozzáférés",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 e-mail cím.",invalidPasswordMessage:"Érvénytelen jelszó.",invalidEmailMessage:"Érvénytelen e-mail cím.",accountDisabledMessage:"Felhasználói fiókja inaktív, kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.",accountTemporarilyDisabledMessage:"Felhasználói fiókja átmenetileg inaktív, kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával, 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.",sessionLimitExceeded:"Túl sok az aktív munkamenet",missingFirstNameMessage:"Kérem, adja meg a keresztnevet.",missingLastNameMessage:"Kérem, adja meg a vezetéknevet.",missingEmailMessage:"Kérem, adja meg az e-mail címet.",missingUsernameMessage:"Kérem, adja meg a felhasználónevét.",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.","error-invalid-value":"Érvénytelen érték","error-invalid-blank":"Kérem, adja meg a mező értékét.","error-empty":"Kérem, adja meg a mező értékét.","error-invalid-length":"A hossznak {1} és {2} karakter között kell lennie.","error-invalid-length-too-short":"A minimális hossz {1} karakter.","error-invalid-length-too-long":"A maximális hossz {2} karakter.","error-invalid-email":"Érvénytelen e-mail cím.","error-invalid-number":"Érvénytelen szám.","error-number-out-of-range":"A szám {1} és {2} közötti értéket vehet fel.","error-number-out-of-range-too-small":"A szám minimális értéke: {1}.","error-number-out-of-range-too-big":"A szám maximális értéke: {2}.","error-pattern-no-match":"Érvénytelen érték.","error-invalid-uri":"Érvénytelen URL.","error-invalid-uri-scheme":"Érvénytelen URL séma.","error-invalid-uri-fragment":"Érvénytelen URL fragmens.","error-user-attribute-required":"Kérem, töltse ki ezt a mezőt.","error-invalid-date":"Érvénytelen dátum.","error-user-attribute-read-only":"Ez a mező csak olvasható.","error-username-invalid-character":"A felhasználónév érvénytelen karaktert tartalmaz.","error-person-name-invalid-character":"A név érvénytelen karaktert tartalmaz.","error-reset-otp-missing-id":"Kérem, válasszon egyszer használatos hitelesítési (OTP) eljárást.",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 e-mail 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.",federatedIdentityUnavailableMessage:"A(z) {1} személyazonosság-kezelő által hitelesített felhasználó, {0} nem létezik. Kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.",federatedIdentityUnmatchedEssentialClaimMessage:"A személyazonosság-kezelő által kiállított ID token nem egyezik az alapvető beállítással. Kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.",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 következővel: {0}",nestedFirstBrokerFlowMessage:"A(z) {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.",configureBackupCodesMessage:"Fiókja aktiválásához előbb létre kell hoznia Biztonsági Kódokat.",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.",updateEmailMessage:"Fiókja aktiválásához előbb módosítania kell e-mail címét.",resetPasswordMessage:"Cserélje le jelszavát!",verifyEmailMessage:"Fiókja aktiválásához előbb erősítse meg e-mail címét.",linkIdpMessage:"Fiókja összekötéséhez előbb erősítse meg e-mail címét a következővel: {0}.",emailSentMessage:"Hamarosan e-mail üzenetet küldünk a további tudnivalókról.",emailSendErrorMessage:"Az e-mail ü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}.",invalidPasswordMaxLengthMessage:"Érvénytelen jelszó: maximum hossz: {0}.",invalidPasswordMinDigitsMessage:"Érvénytelen jelszó: legalább {0} darab számjegyet kell tartalmaznia.",invalidPasswordMinLowerCaseCharsMessage:"Érvénytelen jelszó: legalább {0} darab kisbetűt 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.",invalidPasswordNotEmailMessage:"Érvénytelen jelszó: nem lehet azonos az e-mail címmel.",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.",successLogout:"Sikeres kilépé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.",cookieNotFoundMessage:"Süti nem található. Kérem, ellenőrizze, hogy a böngészőjében engedélyezve vannak-e a sütik.",insufficientLevelOfAuthentication:"A kért hitelesítési szint nem teljesült",identityProviderUnexpectedErrorMessage:"Váratlan hiba történt a személyazonosság-kezelőn keresztül intézett hitelesítés során.",identityProviderMissingStateMessage:'Nincsen "state" a személyazonosság-kezelő válaszüzenetében.',identityProviderInvalidResponseMessage:"Érvénytelen válasz a személyazonosság-kezelőtől.",identityProviderInvalidSignatureMessage:"Érvénytelen aláírás a személyazonosság-kezelő válaszüzenetében.",identityProviderNotFoundMessage:"A megadott azonosítóval személyazonosság-kezelő nem található.",identityProviderLinkSuccess:"Sikeresen megerősítette e-mail 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 e-mail 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 e-mail 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} e-mail cím érvényességét.",confirmExecutionOfActions:"Hajtsa végre a következő művelet(ek)et",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fi:"Suomi",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_lv:"Latviešu",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",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",acrNotFulfilled:"A hitelesítési követelmények nem teljesültek","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":"E-mail cím megerősítése","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Biztonsági kódok generálása","requiredAction.webauthn-register-passwordless":"Jelszó nélküli WebAuthn regisztrálása",invalidTokenRequiredActions:"A linkben található szükséges műveletek érvénytelenek.",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 e-mail címét. Egy e-mail üzenetet küldtünk a(z) {0} e-mail címre amely egy megerősítő kódot tartalmaz. Kérem, írja be a kapott kódot a lenti beviteli mezőbe.","console-email-code":"e-mail üzenetben kapott ellenőrző kód:","console-accept-terms":"Elfogadja a felhasználási feltételeket? [i/n]:","console-accept":"i","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.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. ","saml.artifactResolutionServiceInvalidResponse":"Az artifact nem található.","otp-display-name":"Hitelesítő alkalmazás","otp-help-text":"Adja meg az ellenőrző kódot a hitelesítő alkalmazásból","otp-reset-description":"Melyik OTP beállítást kell eltávolítani?","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.","auth-recovery-authn-code-form-display-name":"Biztonsági hitelesítő kód","auth-recovery-authn-code-form-help-text":"Írjon be egy biztonsági kódot a korábban generáltak közül.","auth-recovery-code-info-message":"Írja be a használni kívánt biztonsági kódot","auth-recovery-code-prompt":"Biztonsági kód #{0}","auth-recovery-code-header":"Bejelentkezés egy biztonsági kód segítségével","recovery-codes-error-invalid":"Érvénytelen biztonsági kód","recovery-code-config-header":"Biztonsági hitelesítő kódok","recovery-code-config-warning-title":"Ezen kódok megtekintésére nincs lehetőség az oldal elhagyása után","recovery-code-config-warning-message":"Nyomtassa ki, töltse le vagy mentse el a kódokat egy biztonságos helyre. A beállítás megszakítása törli ezeket a kódokat a felhasználói fiókjából.","recovery-codes-print":"Nyomtatás","recovery-codes-download":"Letöltés","recovery-codes-copy":"Másolás","recovery-codes-copied":"Vágólapra másolva","recovery-codes-confirmation-message":"Elmentettem a biztonsági kódokat egy biztonságos helyre","recovery-codes-action-complete":"Beállítás befejezése","recovery-codes-action-cancel":"Beállítás megszakítása","recovery-codes-download-file-header":"Tartsa a biztonsági kódokat egy biztonságos helyen","recovery-codes-download-file-description":"A biztonsági kódok egyszer használatos jelkódok, melyek segítségével bejelentkezhet a fiókjába, ha nem fér hozzá a hitelesítő alkalmazáshoz.","recovery-codes-download-file-date":"Biztonsági kódok generálva","recovery-codes-label-default":"Biztonsági kódok","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-unsupported-browser-text":"A WebAuthn protokoll a böngésző által nem támogatott. Próbálja egy másikkal, vagy vegye fel a kapcsolatot az alkalmazás adminisztrátorával.","webauthn-doAuthenticate":"Bejelentkezés biztonsági kulccsal","webauthn-createdAt-label":"Létrehozva","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","identity-provider-login-label":"Egyéb bejelentkezési módok","idp-email-verification-display-name":"E-mail megerősítés","idp-email-verification-help-text":"Felhasználói fiók összekapcsolása az e-mail cím megerősítésével.","idp-username-password-form-display-name":"Felhasználónév és jelszó","idp-username-password-form-help-text":"Felhasználói fiók összekapcsolása bejelentkezéssel.",finalDeletionConfirmation:"A felhasználói fiók törlése után annak visszaállítására nincs mód. A fiókja megtartásához kattintson a Mégse gombra.",irreversibleAction:"Ez a művelet visszavonhatatlan",deleteAccountConfirm:"Felhasználói fiók törlésének megerősítése",deletingImplies:"A felhasználói fiókjának törlésével jár:",errasingData:"Összes adatának törlése",loggingOutImmediately:"Azonnali kijelentkezés",accountUnusable:"Az alkalmazás további használata nem lesz lehetséges ezzel a felhasználói fiókkal",userDeletedSuccessfully:"Felhasználói fiók törlése sikeres","access-denied":"Hozzáférés megtagadva","access-denied-when-idp-auth":"Hozzáférés megtagadva hitelesítés során: {0}","frontchannel-logout.title":"Kijelentkezés","frontchannel-logout.message":"A következő alkalmazásokból jelentkezik ki",logoutConfirmTitle:"Kijelentkezés",logoutConfirmHeader:"Valóban ki szeretne jelentkezni?",doLogout:"Kijelentkezés",readOnlyUsernameMessage:"A felhasználónév nem módosítható."}}}]); \ No newline at end of file diff --git a/4290.3df66729.iframe.bundle.js b/4290.3df66729.iframe.bundle.js deleted file mode 100644 index 283ae3cc..00000000 --- a/4290.3df66729.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4290],{"./dist/account/i18n/baseMessages/fr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Sauvegarder",doCancel:"Annuler",doLogOutAllSessions:"Déconnexion de toutes les sessions",doRemove:"Supprimer",doAdd:"Ajouter",doSignOut:"Déconnexion",editAccountHtmlTitle:"Édition du compte",federatedIdentitiesHtmlTitle:"Identités fédérées",accountLogHtmlTitle:"Accès 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énom",givenName:"Prénom",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é",region:"État, Province ou Région",postal_code:"Code Postal",country:"Pays",emailVerified:"Courriel vérifié",gssDelegationCredential:"Accréditation de délégation GSS",role_admin:"Administrateur","role_realm-admin":"Administrateur du domaine","role_create-realm":"Créer 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 événements","role_view-identity-providers":"Voir les fournisseurs d'identités","role_manage-realm":"Gérer le domaine","role_manage-users":"Gérer les utilisateurs","role_manage-applications":"Gérer les applications","role_manage-identity-providers":"Gérer les fournisseurs d'identités","role_manage-clients":"Gérer les clients","role_manage-events":"Gérer les événements","role_view-profile":"Voir le profil","role_manage-account":"Gérer le compte","role_read-token":"Lire le jeton d'authentification","role_offline-access":"Accès hors-ligne",client_account:"Compte","client_security-admin-console":"Console d'administration de la sécurité","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 à l'application",backTo:"Revenir à {0}",date:"Date",event:"Evénement",ip:"IP",client:"Client",clients:"Clients",details:"Détails",started:"Début",lastAccess:"Dernier accès",expires:"Expiration",applications:"Applications",account:"Compte",federatedIdentity:"Identité fédérée",authenticator:"Authentification",sessions:"Sessions",log:"Connexion",application:"Application",availablePermissions:"Permissions disponibles",grantedPermissions:"Permissions accordées",grantedPersonalInfo:"Informations personnelles accordées",additionalGrants:"Droits additionnels",action:"Action",inResource:"dans",fullAccess:"Accès complet",offlineToken:"Jeton d'authentification hors-ligne",revoke:"Révoquer un droit",configureAuthenticators:"Authentifications configurées.",mobile:"Téléphone 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 à 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é sur le temps","totp.hotp":"Basé 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énom.",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éjà.",emailExistsMessage:"Le courriel existe déjà.",readOnlyUserMessage:"Vous ne pouvez pas mettre à jour votre compte car il est en lecture seule.",readOnlyPasswordMessage:"Vous ne pouvez pas mettre à jour votre mot de passe car votre compte est en lecture seule.",successTotpMessage:"L'authentification via téléphone mobile est configurée.",successTotpRemovedMessage:"L'authentification via téléphone mobile est supprimée.",successGrantRevokedMessage:"Droit révoqué avec succès.",accountUpdatedMessage:"Votre compte a été mis à jour.",accountPasswordUpdatedMessage:"Votre mot de passe a été mis à jour.",missingIdentityProviderMessage:"Le fournisseur d'identité n'est pas spécifié.",invalidFederatedIdentityActionMessage:"Action manquante ou invalide.",identityProviderNotFoundMessage:"Le fournisseur d'identité spécifié n'est pas trouvé.",federatedIdentityLinkNotActiveMessage:"Cette identité n'est plus active dorénavant.",federatedIdentityRemovingLastProviderMessage:"Vous ne pouvez pas supprimer votre dernière fédération d'identité sans avoir de mot de passe spécifié.",identityProviderRedirectErrorMessage:"Erreur de redirection vers le fournisseur d'identité.",identityProviderRemovedMessage:"Le fournisseur d'identité a été supprimé correctement.",identityProviderAlreadyLinkedMessage:"Le fournisseur d'identité retourné par {0} est déjà lié à un autre utilisateur.",accountDisabledMessage:"Ce compte est désactivé, veuillez contacter votre administrateur.",accountTemporarilyDisabledMessage:"Ce compte est temporairement désactivé, veuillez contacter votre administrateur ou réessayez 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ère(s) spéciaux.",invalidPasswordNotUsernameMessage:"Mot de passe invalide: ne doit pas être identique au nom d'utilisateur.",invalidPasswordRegexPatternMessage:"Mot de passe invalide: ne valide pas l'expression rationnelle.",invalidPasswordHistoryMessage:"Mot de passe invalide: ne doit pas être égal aux {0} derniers mots de passe.",applicationName:"Nom de l'application",update:"Mettre à jour",status:"Statut",authenticatorActionSetup:"Configurer","device-activity":"Activité des Appareils",accountSecurityTitle:"Sécurité du Compte",accountManagementWelcomeMessage:"Bienvenue dans la Gestion de Compte Keycloak",personalInfoHtmlTitle:"Informations Personnelles",personalInfoIntroMessage:"Gérez vos informations de base",personalSubMessage:"Gérez ces informations de base: votre prénom, nom de famille et email",accountSecurityIntroMessage:"Gérez votre mot de passe et l'accès à votre compte",applicationsIntroMessage:"Auditez et gérez les permissions d'accès des applications aux données de votre compte",applicationType:"Type d'application"}}}]); \ No newline at end of file diff --git a/4290.87d15a5b.iframe.bundle.js b/4290.87d15a5b.iframe.bundle.js new file mode 100644 index 00000000..bed77a0f --- /dev/null +++ b/4290.87d15a5b.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4290],{"./dist/account/i18n/baseMessages/fr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Sauvegarder",doCancel:"Annuler",doLogOutAllSessions:"Déconnexion de toutes les sessions",doRemove:"Supprimer",doAdd:"Ajouter",doSignOut:"Déconnexion",editAccountHtmlTitle:"Édition du compte",federatedIdentitiesHtmlTitle:"Identités fédérées",accountLogHtmlTitle:"Accès 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énom",givenName:"Prénom",fullName:"Nom complet",lastName:"Nom",familyName:"Nom de famille",password:"Mot de passe",passwordConfirm:"Confirmation",passwordNew:"Nouveau mot de passe",username:"Nom d'utilisateur",address:"Adresse",street:"Rue",locality:"Ville ou Localité",region:"État, Province ou Région",postal_code:"Code Postal",country:"Pays",emailVerified:"Courriel vérifié",gssDelegationCredential:"Accréditation de délégation GSS",role_admin:"Administrateur","role_realm-admin":"Administrateur du domaine","role_create-realm":"Créer 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 événements","role_view-identity-providers":"Voir les fournisseurs d'identités","role_manage-realm":"Gérer le domaine","role_manage-users":"Gérer les utilisateurs","role_manage-applications":"Gérer les applications","role_manage-identity-providers":"Gérer les fournisseurs d'identités","role_manage-clients":"Gérer les clients","role_manage-events":"Gérer les événements","role_view-profile":"Voir le profil","role_manage-account":"Gérer le compte","role_read-token":"Lire le jeton d'authentification","role_offline-access":"Accès hors-ligne",client_account:"Compte","client_security-admin-console":"Console d'administration de la sécurité","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 à l'application",backTo:"Revenir à {0}",date:"Date",event:"Evénement",ip:"IP",client:"Client",clients:"Clients",details:"Détails",started:"Début",lastAccess:"Dernier accès",expires:"Expiration",applications:"Applications",account:"Compte",federatedIdentity:"Identité fédérée",authenticator:"Authentification",sessions:"Sessions",log:"Connexion",application:"Application",availablePermissions:"Permissions disponibles",grantedPermissions:"Permissions accordées",grantedPersonalInfo:"Informations personnelles accordées",additionalGrants:"Droits additionnels",action:"Action",inResource:"dans",fullAccess:"Accès complet",offlineToken:"Jeton d'authentification hors-ligne",revoke:"Révoquer un droit",configureAuthenticators:"Authentifications configurées.",mobile:"Téléphone 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 à 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é sur le temps","totp.hotp":"Basé 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énom.",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éjà.",emailExistsMessage:"Le courriel existe déjà.",readOnlyUserMessage:"Vous ne pouvez pas mettre à jour votre compte car il est en lecture seule.",readOnlyPasswordMessage:"Vous ne pouvez pas mettre à jour votre mot de passe car votre compte est en lecture seule.",successTotpMessage:"L'authentification via téléphone mobile est configurée.",successTotpRemovedMessage:"L'authentification via téléphone mobile est supprimée.",successGrantRevokedMessage:"Droit révoqué avec succès.",accountUpdatedMessage:"Votre compte a été mis à jour.",accountPasswordUpdatedMessage:"Votre mot de passe a été mis à jour.",missingIdentityProviderMessage:"Le fournisseur d'identité n'est pas spécifié.",invalidFederatedIdentityActionMessage:"Action manquante ou invalide.",identityProviderNotFoundMessage:"Le fournisseur d'identité spécifié n'est pas trouvé.",federatedIdentityLinkNotActiveMessage:"Cette identité n'est plus active dorénavant.",federatedIdentityRemovingLastProviderMessage:"Vous ne pouvez pas supprimer votre dernière fédération d'identité sans avoir de mot de passe spécifié.",identityProviderRedirectErrorMessage:"Erreur de redirection vers le fournisseur d'identité.",identityProviderRemovedMessage:"Le fournisseur d'identité a été supprimé correctement.",identityProviderAlreadyLinkedMessage:"Le fournisseur d'identité retourné par {0} est déjà lié à un autre utilisateur.",accountDisabledMessage:"Ce compte est désactivé, veuillez contacter votre administrateur.",accountTemporarilyDisabledMessage:"Ce compte est temporairement désactivé, veuillez contacter votre administrateur ou réessayez 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ère(s) spéciaux.",invalidPasswordNotUsernameMessage:"Mot de passe invalide: ne doit pas être identique au nom d'utilisateur.",invalidPasswordRegexPatternMessage:"Mot de passe invalide: ne valide pas l'expression rationnelle.",invalidPasswordHistoryMessage:"Mot de passe invalide: ne doit pas être égal aux {0} derniers mots de passe.",applicationName:"Nom de l'application",update:"Mettre à jour",status:"Statut",authenticatorActionSetup:"Configurer","device-activity":"Activité des Appareils",accountSecurityTitle:"Sécurité du Compte",accountManagementWelcomeMessage:"Bienvenue dans la Gestion de Compte Keycloak",personalInfoSidebarTitle:"Informations personnelles",accountSecuritySidebarTitle:"Sécurité du compte",signingInSidebarTitle:"Authentification",deviceActivitySidebarTitle:"Activité des appareils",linkedAccountsSidebarTitle:"Comptes liés",personalInfoHtmlTitle:"Informations Personnelles",personalInfoIntroMessage:"Gérez vos informations de base",personalSubMessage:"Gérez ces informations de base: votre prénom, nom de famille et email",accountSecurityIntroMessage:"Gérez votre mot de passe et l'accès à votre compte",applicationsIntroMessage:"Auditez et gérez les permissions d'accès des applications aux données de votre compte",applicationType:"Type d'application",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/4543.90ad729d.iframe.bundle.js b/4543.90ad729d.iframe.bundle.js new file mode 100644 index 00000000..c946e394 --- /dev/null +++ b/4543.90ad729d.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4543],{"./dist/account/i18n/baseMessages/th.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"บันทึก",doCancel:"ยกเลิก",doLogOutAllSessions:"ออกจากระบบทุกเซสชัน",doRemove:"ลบ",doAdd:"เพิ่ม",doSignOut:"ออกจากระบบ",doLogIn:"เข้าสู่ระบบ",doLink:"ลิงก์",noAccessMessage:"ไม่อนุญาตให้เข้าถึง",personalInfoSidebarTitle:"ข้อมูลส่วนตัว",accountSecuritySidebarTitle:"ความปลอดภัยของบัญชี",signingInSidebarTitle:"กำลังเข้าสู่ระบบ",deviceActivitySidebarTitle:"กิจกรรมของอุปกรณ์",linkedAccountsSidebarTitle:"บัญชีที่เชื่อมโยง",editAccountHtmlTitle:"แก้ไขบัญชี",personalInfoHtmlTitle:"ข้อมูลส่วนตัว",federatedIdentitiesHtmlTitle:"Federated Identities",accountLogHtmlTitle:"บันทึกการใช้งานบัญชี",changePasswordHtmlTitle:"เปลี่ยนรหัสผ่าน",deviceActivityHtmlTitle:"กิจกรรมของอุปกรณ์",sessionsHtmlTitle:"เซสชัน",accountManagementTitle:"การจัดการบัญชี Keycloak",authenticatorTitle:"Authenticator",applicationsHtmlTitle:"แอปพลิเคชัน",linkedAccountsHtmlTitle:"บัญชีที่เชื่อมโยง",accountManagementWelcomeMessage:"ยินดีต้อนรับสู่การจัดการบัญชี Keycloak",personalInfoIntroMessage:"จัดการข้อมูลพื้นฐานของคุณ",accountSecurityTitle:"ความปลอดภัยของบัญชี",accountSecurityIntroMessage:"ควบคุมรหัสผ่านและการเข้าถึงบัญชีของคุณ",applicationsIntroMessage:"ติดตามและจัดการการอนุญาตให้แอปพลิเคชันเข้าถึงบัญชีของคุณ",resourceIntroMessage:"แบ่งปันทรัพยากรของคุณให้แก่สมาชิกในทีม",passwordLastUpdateMessage:"รหัสผ่านของคุณได้รับการปรับปรุง ณ",updatePasswordTitle:"ปรับปรุงรหัสผ่าน",updatePasswordMessageTitle:"โปรดตรวจสอบให้แน่ใจว่าคุณเลือกรหัสผ่านที่แข็งแกร่ง",updatePasswordMessage:"รหัสผ่านที่แข็งแกร่งประกอบด้วยตัวเลข ตัวอักษร และสัญลักษณ์ โดยยากที่จะถูกเดารูปแบบ ไม่คล้ายคำจริง และใช้เฉพาะสำหรับบัญชีนี้เท่านั้น",personalSubTitle:"ข้อมูลส่วนตัวของคุณ",personalSubMessage:"จัดการข้อมูลพื้นฐานของคุณ",authenticatorCode:"รหัสสำหรับใช้ครั้งเดียว",email:"อีเมล",firstName:"ชื่อ",givenName:"ชื่อ",fullName:"ชื่อ-นามสกุล",lastName:"นามสกุล",familyName:"นามสกุล",password:"รหัสผ่าน",currentPassword:"รหัสผ่านปัจจุบัน",passwordConfirm:"ยืนยันรหัสผ่าน",passwordNew:"รหัสผ่านใหม่",username:"ชื่อผู้ใช้งาน",address:"ที่อยู่",street:"ถนน",locality:"เมืองหรือตำบล",region:"รัฐ จังหวัด หรือภูมิภาค",postal_code:"รหัสไปรษณีย์",country:"ประเทศ",emailVerified:"ตรวจสอบอีเมลแล้ว",website:"หน้าเว็บ",phoneNumber:"หมายเลขโทรศัพท์",phoneNumberVerified:"ตรวจสอบหมายเลขโทรศัพท์แล้ว",gender:"เพศ",birthday:"วันเกิด",zoneinfo:"โซนเวลา",gssDelegationCredential:"GSS Delegation Credential",profileScopeConsentText:"โปรไฟล์ผู้ใช้งาน",emailScopeConsentText:"ที่อยู่อีเมล",addressScopeConsentText:"ที่อยู่",phoneScopeConsentText:"หมายเลขโทรศัพท์",offlineAccessScopeConsentText:"การเข้าถึงแบบออฟไลน์",samlRoleListScopeConsentText:"บทบาทของฉัน",rolesScopeConsentText:"บทบาทผู้ใช้งาน",role_admin:"ผู้ดูแลระบบ","role_realm-admin":"ผู้ดูแลระบบ realm","role_create-realm":"สร้าง realm","role_view-realm":"ดู realm","role_view-users":"ดูผู้ใช้งาน","role_view-applications":"ดูแอปพลิเคชัน","role_view-groups":"ดูกลุ่ม","role_view-clients":"ดูไคลเอนต์","role_view-events":"ดูเหตุการณ์","role_view-identity-providers":"ดูผู้ให้บริการตัวตน","role_view-consent":"ดูการยินยอม","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_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":"การจัดการ realm",client_broker:"ตัวแทน",requiredFields:"ช่องที่ต้องกรอกข้อมูล",allFieldsRequired:"ต้องกรอกข้อมูลทุกช่อง",backToApplication:"« กลับไปยังแอปพลิเคชัน",backTo:"กลับไปยัง {0}",date:"วันที่",event:"เหตุการณ์",ip:"IP",client:"ไคลเอนต์",clients:"ไคลเอนต์",details:"รายละเอียด",started:"เริ่มต้น",lastAccess:"การเข้าถึงครั้งสุดท้าย",expires:"หมดอายุ",applications:"แอปพลิเคชัน",account:"บัญชี",federatedIdentity:"Federated Identity",authenticator:"Authenticator","device-activity":"กิจกรรมของอุปกรณ์",sessions:"เซสชัน",log:"บันทึก",application:"แอปพลิเคชัน",availableRoles:"บทบาทที่มีอยู่",grantedPermissions:"การอนุญาตที่ได้รับ",grantedPersonalInfo:"ข้อมูลส่วนตัวที่ได้รับอนุญาต",additionalGrants:"การอนุญาตเพิ่มเติม",action:"การกระทำ",inResource:"ใน",fullAccess:"การเข้าถึงเต็มรูปแบบ",offlineToken:"โทเค็นแบบออฟไลน์",revoke:"ยกเลิกการอนุญาต",configureAuthenticators:"Authenticators ที่กำหนดค่าแล้ว",mobile:"มือถือ",totpStep1:"ติดตั้งแอปพลิเคชันใดแอปพลิเคชันหนึ่งต่อไปนี้บนมือถือของคุณ:",totpStep2:"เปิดแอปพลิเคชันและสแกนบาร์โค้ด:",totpStep3:"ใส่รหัสสำหรับใช้ครั้งเดียวจากแอปพลิเคชัน และคลิกบันทึกเพื่อสิ้นสุดการตั้งค่า",totpStep3DeviceName:"ระบุชื่ออุปกรณ์เพื่อช่วยให้คุณจัดการอุปกรณ์ OTP ของคุณได้สะดวกขึ้น",totpManualStep2:"เปิดแอปพลิเคชันและใส่รหัส:",totpManualStep3:"ใช้ค่าการกำหนดค่าต่อไปนี้หากแอปพลิเคชันอนุญาตให้ตั้งค่า:",totpUnableToScan:"ไม่สามารถสแกนได้?",totpScanBarcode:"สแกนบาร์โค้ด?","totp.totp":"Time-based","totp.hotp":"Counter-based",totpType:"ประเภท",totpAlgorithm:"ขั้นตอนวิธี",totpDigits:"หลัก",totpInterval:"ช่วงเวลา",totpCounter:"Counter",totpDeviceName:"ชื่อของอุปกรณ์",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"การกระทำนี้ไม่สามารถย้อนกลับได้",deletingImplies:"การลบบัญชีของคุณจะ:",errasingData:"ลบข้อมูลทั้งหมดของคุณ",loggingOutImmediately:"ออกจากระบบทันที",accountUnusable:"ไม่สามารถใช้แอปพลิเคชันด้วยบัญชีนี้ได้อีกต่อไป",missingUsernameMessage:"โปรดระบุชื่อผู้ใช้งาน",missingFirstNameMessage:"โปรดระบุชื่อ",invalidEmailMessage:"ที่อยู่อีเมลไม่ถูกต้อง",missingLastNameMessage:"โปรดระบุนามสกุล",missingEmailMessage:"โปรดระบุอีเมล",missingPasswordMessage:"โปรดระบุรหัสผ่าน",notMatchPasswordMessage:"รหัสผ่านไม่ตรงกัน",invalidUserMessage:"ผู้ใช้งานไม่ถูกต้อง",updateReadOnlyAttributesRejectedMessage:"ไม่สามารถอัพเดตแอตทริบิวต์ที่เป็นแบบอ่านเท่านั้น",missingTotpMessage:"โปรดระบุรหัสสำหรับใช้ครั้งเดียว",missingTotpDeviceNameMessage:"โปรดระบุชื่ออุปกรณ์",invalidPasswordExistingMessage:"รหัสผ่านที่มีอยู่ไม่ถูกต้อง",invalidPasswordConfirmMessage:"การยืนยันรหัสผ่านไม่ถูกต้อง",invalidTotpMessage:"รหัสสำหรับใช้ครั้งเดียวไม่ถูกต้อง",usernameExistsMessage:"ชื่อผู้ใช้งานมีอยู่แล้ว",emailExistsMessage:"อีเมลมีอยู่แล้ว",readOnlyUserMessage:"คุณไม่สามารถอัพเดตบัญชีของคุณได้ เนื่องจากเป็นบัญชีแบบอ่านอย่างเดียว",readOnlyUsernameMessage:"คุณไม่สามารถอัพเดตชื่อผู้ใช้งานของคุณได้ เนื่องจากเป็นบัญชีแบบอ่านอย่างเดียว",readOnlyPasswordMessage:"คุณไม่สามารถอัพเดตรหัสผ่านของคุณได้ เนื่องจากบัญชีของคุณเป็นบัญชีแบบอ่านอย่างเดียว",successTotpMessage:"กำหนดค่า Mobile authenticator แล้ว",successTotpRemovedMessage:"ลบ Mobile authenticator แล้ว",successGrantRevokedMessage:"ถอนการให้อนุญาตสำเร็จแล้ว",accountUpdatedMessage:"ได้อัพเดตบัญชีของคุณแล้ว",accountPasswordUpdatedMessage:"ได้อัพเดตรหัสผ่านของคุณแล้ว",missingIdentityProviderMessage:"ไม่ได้ระบุผู้ให้บริการตัวตน",invalidFederatedIdentityActionMessage:"การกระทำไม่ถูกต้องหรือไม่มี",identityProviderNotFoundMessage:"ไม่พบผู้ให้บริการตัวตนที่ระบุ",federatedIdentityLinkNotActiveMessage:"ตัวตนนี้ไม่ได้ใช้งานแล้ว",federatedIdentityRemovingLastProviderMessage:"คุณไม่สามารถลบ federated identity สุดท้ายได้เนื่องจากคุณไม่มีรหัสผ่าน",identityProviderRedirectErrorMessage:"ล้มเหลวในการเปลี่ยนเส้นทางไปยังผู้ให้บริการตัวตน",identityProviderRemovedMessage:"ลบผู้ให้บริการตัวตนเรียบร้อยแล้ว",identityProviderAlreadyLinkedMessage:"Federated identity ที่ส่งคืนโดย {0} ได้เชื่อมโยงกับผู้ใช้งานอื่นแล้ว",staleCodeAccountMessage:"หน้าหมดอายุแล้ว โปรดลองอีกครั้ง",consentDenied:"การยินยอมถูกปฏิเสธ","access-denied-when-idp-auth":"การเข้าถึงถูกปฏิเสธเมื่อพิสูจน์ตัวจริงด้วย {0}",accountDisabledMessage:"บัญชีถูกปิดใช้งาน กรุณาติดต่อผู้ดูแลระบบของคุณ",accountTemporarilyDisabledMessage:"บัญชีถูกปิดใช้งานชั่วคราว กรุณาติดต่อผู้ดูแลระบบของคุณหรือลองอีกครั้งในภายหลัง",invalidPasswordMinLengthMessage:"รหัสผ่านไม่ถูกต้อง: ความยาวขั้นต่ำ {0}",invalidPasswordMaxLengthMessage:"รหัสผ่านไม่ถูกต้อง: ความยาวสูงสุด {0}",invalidPasswordMinLowerCaseCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีอักขระพิมพ์เล็กอย่างน้อย {0} ตัว",invalidPasswordMinDigitsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีจำนวนเลขอย่างน้อย {0} หลัก",invalidPasswordMinUpperCaseCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีอักขระพิมพ์ใหญ่อย่างน้อย {0} ตัว",invalidPasswordMinSpecialCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีอักขระพิเศษอย่างน้อย {0} ตัว",invalidPasswordNotUsernameMessage:"รหัสผ่านไม่ถูกต้อง: จะต้องไม่ตรงกับชื่อผู้ใช้งาน",invalidPasswordNotEmailMessage:"รหัสผ่านไม่ถูกต้อง: จะต้องไม่ตรงกับอีเมล",invalidPasswordRegexPatternMessage:"รหัสผ่านไม่ถูกต้อง: ไม่ผ่าน regex pattern",invalidPasswordHistoryMessage:"รหัสผ่านไม่ถูกต้อง: จะต้องไม่ซ้ำกับรหัสผ่านเดิมที่ผ่านมา {0} ครั้ง",invalidPasswordBlacklistedMessage:"รหัสผ่านไม่ถูกต้อง: รหัสผ่านอยู่ในบัญชีดำ",invalidPasswordGenericMessage:"รหัสผ่านไม่ถูกต้อง: รหัสผ่านใหม่ไม่ตรงตามนโยบายการตั้งรหัสผ่าน",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:"ทรัพยากรไม่ได้ถูกแบ่งปัน",applicationName:"ชื่อ",applicationType:"ประเภทแอปพลิเคชัน",applicationInUse:"แอปพลิเคชันที่ใช้งานอยู่เท่านั้น",clearAllFilter:"ล้างตัวกรองทั้งหมด",activeFilters:"ตัวกรองที่ใช้งานอยู่",filterByName:"กรองตามชื่อ ...",allApps:"แอปพลิเคชันทั้งหมด",internalApps:"แอปพลิเคชันภายใน",thirdpartyApps:"แอปพลิเคชันของบุคคลที่สาม",appResults:"ผลลัพธ์",clientNotFoundMessage:"ไม่พบไคลเอนต์",authorizedProvider:"ผู้ให้บริการที่ได้รับการอนุญาต",authorizedProviderMessage:"ผู้ให้บริการที่ได้รับอนุญาตให้เชื่อมโยงกับบัญชีของคุณ",identityProvider:"ผู้ให้บริการตัวตน",identityProviderMessage:"เพื่อเชื่อมโยงบัญชีของคุณกับผู้ให้บริการตัวตนที่คุณกำหนดค่าไว้",socialLogin:"การเข้าสู่ระบบด้วยโซเชียลมีเดีย",userDefined:"ผู้ใช้งานที่กำหนดไว้",removeAccess:"ลบการเข้าถึง",removeAccessMessage:"คุณจะต้องให้อนุญาตใหม่ หากคุณต้องการใช้บัญชีแอปนี้",authenticatorStatusMessage:"การตรวจสอบสิทธิ์สองปัจจัยกำลัง",authenticatorFinishSetUpTitle:"การตรวจสอบสิทธิ์สองปัจจัยของคุณ",authenticatorFinishSetUpMessage:"ทุกครั้งที่คุณล็อกอินเข้าสู่บัญชี Keycloak ของคุณ คุณจะถูกขอให้ใส่รหัสผ่านสำหรับการตรวจสอบสิทธิ์สองปัจจัย",authenticatorSubTitle:"ตั้งค่าการตรวจสอบสิทธิ์สองปัจจัย",authenticatorSubMessage:"เพื่อเพิ่มความปลอดภัยของบัญชีของคุณ กรุณาเปิดใช้งานวิธีการตรวจสอบสิทธิ์สองปัจจัยที่มีให้",authenticatorMobileTitle:"Mobile Authenticator",authenticatorMobileMessage:"ใช้ Mobile Authenticator เพื่อรับรหัสยืนยันการตรวจสอบสิทธิ์สองปัจจัย",authenticatorMobileFinishSetUpMessage:"Authenticator ได้ถูกผูกกับโทรศัพท์ของคุณแล้ว",authenticatorActionSetup:"ตั้งค่า",authenticatorSMSTitle:"SMS Code",authenticatorSMSMessage:"Keycloak จะส่งรหัสยืนยันไปยังโทรศัพท์ของคุณเพื่อตรวจสอบสิทธิ์สองปัจจัย",authenticatorSMSFinishSetUpMessage:"ข้อความถูกส่งไปยัง",authenticatorDefaultStatus:"ค่าเริ่มต้น",authenticatorChangePhone:"เปลี่ยนหมายเลขโทรศัพท์",authenticatorMobileSetupTitle:"การตั้งค่า Mobile Authenticator",smscodeIntroMessage:"ใส่หมายเลขโทรศัพท์ของคุณ รหัสยืนยันจะถูกส่งไปยังโทรศัพท์ของคุณ",mobileSetupStep1:"ติดตั้งแอปพลิเคชัน authenticator บนโทรศัพท์ของคุณ แอปพลิเคชันที่แสดงไว้ในนี้ได้รับการสนับสนุน",mobileSetupStep2:"เปิดแอปพลิเคชันและสแกนบาร์โค้ด:",mobileSetupStep3:"ใส่รหัสผ่านครั้งเดียวที่แอปพลิเคชันให้และคลิกบันทึกเพื่อสิ้นสุดการตั้งค่า",scanBarCode:"ต้องการสแกนบาร์โค้ด?",enterBarCode:"ใส่รหัสแบบใช้ครั้งเดียว",doCopy:"คัดลอก",doFinish:"สิ้นสุด",authenticatorSMSCodeSetupTitle:"การตั้งค่า SMS Code",chooseYourCountry:"เลือกประเทศของคุณ",enterYourPhoneNumber:"ใส่หมายเลขโทรศัพท์ของคุณ",sendVerficationCode:"ส่งรหัสยืนยัน",enterYourVerficationCode:"ใส่รหัสยืนยันของคุณ",authenticatorBackupCodesSetupTitle:"การตั้งค่ารหัสกู้คืน",realmName:"Realm",doDownload:"ดาวน์โหลด",doPrint:"พิมพ์",generateNewBackupCodes:"สร้างรหัสกู้คืนใหม่",backtoAuthenticatorPage:"กลับไปยังหน้า Authenticator",resources:"ทรัพยากร",sharedwithMe:"แบ่งปันกับฉัน",share:"แบ่งปัน",sharedwith:"แบ่งปันกับ",accessPermissions:"การอนุญาตให้เข้าถึง",permissionRequests:"คำขอการอนุญาต",approve:"อนุมัติ",approveAll:"อนุมัติทั้งหมด",people:"ผู้คน",perPage:"ต่อหน้า",currentPage:"หน้าปัจจุบัน",sharetheResource:"แบ่งปันทรัพยากร",group:"กลุ่ม",selectPermission:"เลือกการอนุญาต",addPeople:"เพิ่มผู้คนเพื่อแบ่งปันทรัพยากรด้วย",addTeam:"เพิ่มทีมเพื่อแบ่งปันทรัพยากรด้วย",myPermissions:"การอนุญาตของฉัน",waitingforApproval:"รอการอนุมัติ",anyPermission:"การอนุญาตใด ๆ","openshift.scope.user_info":"ข้อมูลผู้ใช้งาน","openshift.scope.user_check-access":"ข้อมูลการเข้าถึงผู้ใช้งาน","openshift.scope.user_full":"การเข้าถึงแบบเต็ม","openshift.scope.list-projects":"รายการโครงการ","error-invalid-value":"ค่าไม่ถูกต้อง","error-invalid-blank":"โปรดระบุค่า","error-empty":"โปรดระบุค่า","error-invalid-length":"ลักษณะประจำ {0} จะต้องมีความยาวระหว่าง {1} และ {2}","error-invalid-length-too-short":"ลักษณะประจำ {0} จะต้องมีความยาวขั้นต่ำ {1}","error-invalid-length-too-long":"ลักษณะประจำ {0} จะต้องมีความยาวสูงสุด {2}","error-invalid-email":"ที่อยู่อีเมลไม่ถูกต้อง","error-invalid-number":"จำนวนไม่ถูกต้อง","error-number-out-of-range":"ลักษณะประจำ {0} จะต้องเป็นจำนวนระหว่าง {1} และ {2}","error-number-out-of-range-too-small":"ลักษณะประจำ {0} จะต้องมีค่าขั้นต่ำ {1}","error-number-out-of-range-too-big":"ลักษณะประจำ {0} จะต้องมีค่าสูงสุด {2}","error-pattern-no-match":"ค่าไม่ถูกต้อง","error-invalid-uri":"URL ไม่ถูกต้อง","error-invalid-uri-scheme":"scheme URL ไม่ถูกต้อง","error-invalid-uri-fragment":"fragment URL ไม่ถูกต้อง","error-user-attribute-required":"โปรดระบุลักษณะประจำ {0}","error-invalid-date":"วันที่ไม่ถูกต้อง","error-user-attribute-read-only":"เขตข้อมูล {0} เป็นแบบอ่านอย่างเดียว","error-username-invalid-character":"ชื่อผู้ใช้งานมีอักขระไม่ถูกต้อง","error-person-name-invalid-character":"ชื่อมีอักขระไม่ถูกต้อง"}}}]); \ No newline at end of file diff --git a/4660.464990ba.iframe.bundle.js b/4660.464990ba.iframe.bundle.js new file mode 100644 index 00000000..305dc0e2 --- /dev/null +++ b/4660.464990ba.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4660],{"./dist/login/i18n/baseMessages/fr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Connexion",doRegister:"Enregistrement",doCancel:"Annuler",doSubmit:"Soumettre",doBack:"Retour",doYes:"Oui",doNo:"Non",doContinue:"Continuer",doIgnore:"Ignorer",doAccept:"Accepter",doDecline:"Décliner",doForgotPassword:"Mot de passe oublié ?",doClickHere:"Cliquez ici",doImpersonate:"Usurper l'identité",doTryAgain:"Réessayer",doTryAnotherWay:"Essayer une autre méthode",doConfirmDelete:"Confirmer la suppression",errorDeletingAccount:"Erreur lors de la suppression du compte",deletingAccountForbidden:"Permissions insuffisantes pour supprimer votre propre compte, contactez un administrateur.",kerberosNotConfigured:"Kerberos non configuré",kerberosNotConfiguredTitle:"Kerberos non configuré",bypassKerberosDetail:"Si vous n'êtes pas connecté via Kerberos ou bien que votre navigateur n'est pas configuré pour la connexion via Kerberos. Veuillez cliquer pour vous connecter via un autre moyen.",kerberosNotSetUp:"Kerberos n'est pas configuré. Connexion impossible.",registerTitle:"S'enregistrer",loginAccountTitle:"Connectez-vous à votre compte",registerWithTitle:"Enregistrement avec {0}",registerWithTitleHtml:"{0}",loginTitle:"Se connecter à {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} utilisateur usurpé",impersonateTitleHtml:"{0} utilisateur usurpé",realmChoice:"Domaine",unknownUser:"Utilisateur inconnu",loginTotpTitle:"Configuration de l'authentification par mobile",loginProfileTitle:"Mise à jour du compte",loginIdpReviewProfileTitle:"Vérifiez vos informations de profil",loginTimeout:"Le temps imparti pour la connexion est écoulé. Le processus de connexion redémarre depuis le début.",oauthGrantTitle:"Accorder l'accès à {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Assurez-vous de faire confiance à {0} en apprenant comment {0} traitera vos données.",oauthGrantReview:"Vous pourriez examiner",oauthGrantTos:"les conditions générales d'utilisation.",oauthGrantPolicy:"la politique de confidentialité.",errorTitle:"Nous sommes désolés...",errorTitleHtml:"Nous sommes désolés...",emailVerifyTitle:"Vérification du courriel",emailForgotTitle:"Mot de passe oublié ?",updateEmailTitle:"Mise à jour du courriel",emailUpdateConfirmationSentTitle:"Courriel de confirmation envoyé",emailUpdateConfirmationSent:"Un courriel de confirmation a été envoyé à {0}. Vous devez suivre les instructions de ce dernier afin de compléter la mise à jour.",emailUpdatedTitle:"Adresse courriel mis à jour",emailUpdated:"La mise à jour de votre adresse courriel vers {0} a été complétée avec succès.",updatePasswordTitle:"Mise à jour du mot de passe",codeSuccessTitle:"Code succès",codeErrorTitle:"Code d'erreur : {0}",displayUnsupported:"Type d'affichage demandé non supporté",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 à définir

",termsPlainText:"Termes et conditions à définir",termsAcceptanceRequired:"Vous devez accepter les termes et conditions.",acceptTerms:"J'accepte les termes et conditions",recaptchaFailed:"Re-captcha invalide",recaptchaNotConfigured:"Re-captcha est requis, mais il n'est pas configuré",consentDenied:"Consentement refusé.",noAccount:"Nouvel utilisateur ?",username:"Nom d'utilisateur",usernameOrEmail:"Nom d'utilisateur ou courriel",firstName:"Prénom",givenName:"Prénom",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 à usage unique",address:"Adresse",street:"Rue",locality:"Ville ou Localité",region:"État, Province ou Région",postal_code:"Code postal",country:"Pays",emailVerified:"Courriel vérifié",website:"Page web",phoneNumber:"Numéro de téléphone",phoneNumberVerified:"Numéro de téléphone vérifié",gender:"Sexe",birthday:"Date de naissance",zoneinfo:"Fuseau horaire",gssDelegationCredential:"Accréditation de délégation GSS",logoutOtherSessions:"Se déconnecter des autres appareils",profileScopeConsentText:"Profil utilisateur",emailScopeConsentText:"Courriel",addressScopeConsentText:"Adresse",phoneScopeConsentText:"Numéro de téléphone",offlineAccessScopeConsentText:"Accès hors-ligne",samlRoleListScopeConsentText:"Mes rôles",rolesScopeConsentText:"Rôles utilisateur",restartLoginTooltip:"Redémarrer la connexion",loginTotpIntro:"Il est nécessaire de configurer un générateur One Time Password pour accéder à 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 à usage unique fourni par l'application et cliquez sur Sauvegarder pour terminer.",loginTotpStep3DeviceName:"Renseignez un nom d'appareil pour vous aider à gérer vos a appareils OTP.",loginTotpManualStep2:"Ouvrez l'application et saisissez la clé",loginTotpManualStep3:"Utilisez la configuration de valeur suivante si l'application permet son édition",loginTotpUnableToScan:"Impossible de scanner?",loginTotpScanBarcode:"Scanner le code barre ?",loginCredential:"Accréditation",loginOtpOneTime:"Code à usage unique",loginTotpType:"Type",loginTotpAlgorithm:"Algorithme",loginTotpDigits:"Chiffres",loginTotpInterval:"Intervalle",loginTotpCounter:"Compteur",loginTotpDeviceName:"Nom d'appareil","loginTotp.totp":"Basé sur le temps","loginTotp.hotp":"Basé sur les compteurs",loginChooseAuthenticator:"Sélectionnez une méthode de connexion",oauthGrantRequest:"Voulez-vous accorder ces privilèges d'accès ?",inResource:"dans",oauth2DeviceVerificationTitle:"Connexion de l'appareil",verifyOAuth2DeviceUserCode:"Entrez le code à usage unique fourni par votre appareil et cliquez sur Soumettre.",oauth2DeviceInvalidUserCodeMessage:"Code invalide, veuillez réessayer.",oauth2DeviceExpiredUserCodeMessage:"Le code a expiré. Veuillez réessayer de vous connecter depuis votre appareil.",oauth2DeviceVerificationCompleteHeader:"Connexion de l'appareil réussie",oauth2DeviceVerificationCompleteMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre appareil.",oauth2DeviceVerificationFailedHeader:"Échec de la connexion au dispositif",oauth2DeviceVerificationFailedMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre appareil, puis réessayer de vous connecter.",oauth2DeviceConsentDeniedMessage:"Consentement refusé pour connecter l'appareil.",oauth2DeviceAuthorizationGrantDisabledMessage:"Le client n'est pas autorisé à initier OAuth 2.0 Device Authorization Grant. Le flux est désactivé pour ce client.",emailVerifyInstruction1:"Un courriel avec des instructions à suivre vous a été envoyé.",emailVerifyInstruction2:"Vous n'avez pas reçu 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 été envoyé.",emailLinkIdp2:"Vous n'avez pas reçu de code dans le courriel ?",emailLinkIdp3:"pour renvoyer le courriel.",emailLinkIdp4:"Si vous avez déjà vérifié votre courriel dans un autre navigateur",emailLinkIdp5:"pour continuer.",backToLogin:"« Retour à la connexion",emailInstruction:"Entrez votre nom d'utilisateur ou votre courriel ; un courriel va vous être envoyé vous permettant de créer un nouveau mot de passe.",emailInstructionUsername:"Entrez votre nom d'utilisateur ; un courriel va vous être envoyé vous permettant de créer un nouveau mot de passe.",copyCodeInstruction:"Copiez le code et recopiez le dans votre application :",pageExpiredTitle:"La page a expiré",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éer un domaine","role_create-client":"Créer 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 événements","role_view-identity-providers":"Voir les fournisseurs d'identité","role_manage-realm":"Gérer le domaine","role_manage-users":"Gérer les utilisateurs","role_manage-applications":"Gérer les applications","role_manage-identity-providers":"Gérer les fournisseurs d'identité","role_manage-clients":"Gérer les clients","role_manage-events":"Gérer les événements","role_view-profile":"Voir le profil","role_manage-account":"Gérer le compte","role_manage-account-links":"Gérer les liens de compte","role_read-token":"Lire le jeton d'authentification","role_offline-access":"Accès hors-ligne",client_account:"Compte","client_account-console":"Console de gestion du compte","client_security-admin-console":"Console d'administration de la sécurité","client_admin-cli":"Admin CLI","client_realm-management":"Gestion du domaine",client_broker:"Broker",requiredFields:"Champs requis",invalidUserMessage:"Nom d'utilisateur ou mot de passe invalide.",invalidUsernameMessage:"Nom d'utilisateur invalide.",invalidUsernameOrEmailMessage:"Nom d'utilisateur ou courriel invalide.",invalidPasswordMessage:"Mot de passe invalide.",invalidEmailMessage:"Courriel invalide.",accountDisabledMessage:"Compte désactivé, contactez votre administrateur.",accountTemporarilyDisabledMessage:"Ce compte est temporairement désactivé, contactez votre administrateur ou bien réessayez plus tard.",expiredCodeMessage:"Connexion expirée. Veuillez vous reconnecter.",expiredActionMessage:"Action expirée. Merci de continuer la connexion.",expiredActionTokenNoSessionMessage:"Action expirée.",expiredActionTokenSessionExistsMessage:"Action expirée. Merci de recommencer.",missingFirstNameMessage:"Veuillez entrer votre prénom.",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.",missingTotpDeviceNameMessage:"Veuillez entrer le nom de votre appareil.",notMatchPasswordMessage:"Les mots de passe ne sont pas identiques.","error-invalid-value":"Valeur invalide.","error-invalid-blank":"Veuillez entrer une valeur.","error-empty":"Veuillez entrer une valeur.","error-invalid-length":"La longueur doit être entre {1} et {2}.","error-invalid-length-too-short":"La longueur minimale est {1}.","error-invalid-length-too-long":"La longueur maximale est {2}.","error-invalid-email":"Courriel invalide.","error-invalid-number":"Nombre invalide.","error-number-out-of-range":"Le nombre doit être entre {1} et {2}.","error-number-out-of-range-too-small":"Le nombre doit avoir une valeur minimale de {1}.","error-number-out-of-range-too-big":"Le nombre doit avoir une valeur maximale de {2}.","error-pattern-no-match":"Valeur invalide.","error-invalid-uri":"URL invalide.","error-invalid-uri-scheme":"Schéma d'URL invalide.","error-invalid-uri-fragment":"Fragment d'URL invalide.","error-user-attribute-required":"Veuillez renseigner ce champ.","error-invalid-date":"Date invalide.","error-user-attribute-read-only":"Ce champ est en lecture seule.","error-username-invalid-character":"La valeur contient des caractères invalides.","error-person-name-invalid-character":"La valeur contient des caractères invalides.",invalidPasswordExistingMessage:"Mot de passe existant invalide.",invalidPasswordBlacklistedMessage:"Mot de passe invalide : ce mot de passe est blacklisté.",invalidPasswordConfirmMessage:"Le mot de passe de confirmation ne correspond pas.",invalidTotpMessage:"Le code d'authentification est invalide.",usernameExistsMessage:"Le nom d'utilisateur existe déjà.",emailExistsMessage:"Le courriel existe déjà.",federatedIdentityExistsMessage:"L'utilisateur avec {0} {1} existe déjà. Veuillez accéder à au gestionnaire de compte pour lier le compte.",federatedIdentityEmailExistsMessage:"Cet utilisateur avec ce courriel existe déjà. Veuillez vous connecter au gestionnaire de compte pour lier le compte.",confirmLinkIdpTitle:"Ce compte existe déjà",federatedIdentityConfirmLinkMessage:"L'utilisateur {0} {1} existe déjà. Que souhaitez-vous faire ?",federatedIdentityConfirmReauthenticateMessage:"Identifiez vous afin de lier votre compte avec {0}",nestedFirstBrokerFlowMessage:"L'utilisateur {0} {1} n'est lié à aucun utilisateur connu.",confirmLinkIdpReviewProfile:"Vérifiez vos informations de profil",confirmLinkIdpContinue:"Souhaitez-vous lier {0} à votre compte existant",configureTotpMessage:"Vous devez configurer l'authentification par mobile pour activer votre compte.",updateProfileMessage:"Vous devez mettre à jour votre profil pour activer votre compte.",updatePasswordMessage:"Vous devez changer votre mot de passe pour activer votre compte.",updateEmailMessage:"Vous devez mettre à votre addresse de courriel pour activer votre compte.",resetPasswordMessage:"Vous devez changer votre mot de passe.",verifyEmailMessage:"Vous devez vérifier votre courriel pour activer votre compte.",linkIdpMessage:"Vous devez vérifier 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 été mis à jour.",accountPasswordUpdatedMessage:"Votre mot de passe a été mis à jour.",delegationCompleteHeader:"Connexion réussie",delegationCompleteMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre application console.",delegationFailedHeader:"Connexion échouée",delegationFailedMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre application console, puis réessayer de vous connecter.",noAccessMessage:"Aucun accès",invalidPasswordMinLengthMessage:"Mot de passe invalide : longueur minimale requise de {0}.",invalidPasswordMaxLengthMessage:"Mot de passe invalide : longueur maximale 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ère(s) spéciaux.",invalidPasswordNotUsernameMessage:"Mot de passe invalide : ne doit pas être identique au nom d'utilisateur.",invalidPasswordNotEmailMessage:"Mot de passe invalide: ne doit pas être identique au courriel.",invalidPasswordRegexPatternMessage:"Mot de passe invalide : ne valide pas l'expression rationnelle.",invalidPasswordHistoryMessage:"Mot de passe invalide : ne doit pas être égal aux {0} derniers mots de passe.",invalidPasswordGenericMessage:"Mot de passe invalide : le nouveau mot de passe ne répond pas à la politique de mot de passe.",failedToProcessResponseMessage:"Erreur lors du traitement de la réponse",httpsRequiredMessage:"Le protocole HTTPS est requis",realmNotEnabledMessage:"Le domaine n'est pas activé",invalidRequestMessage:"Requête invalide",successLogout:"Vous êtes déconnecté",failedLogout:"La déconnexion a échouée",unknownLoginRequesterMessage:"Compte inconnu du demandeur",loginRequesterNotEnabledMessage:"La connexion du demandeur n'est pas active",bearerOnlyMessage:"Les applications Bearer-only ne sont pas autorisées à initier la connexion par navigateur.",standardFlowDisabledMessage:"Le client n'est pas autorisé à initier une connexion avec le navigateur avec ce response_type. Le flux standard est désactivé pour le client.",implicitFlowDisabledMessage:"Le client n'est pas autorisé à initier une connexion avec le navigateur avec ce response_type. Le flux implicite est désactivé pour le client.",invalidRedirectUriMessage:"L'URI de redirection est invalide",unsupportedNameIdFormatMessage:"NameIDFormat non supporté",invalidRequesterMessage:"Demandeur invalide",registrationNotAllowedMessage:"L'enregistrement n'est pas autorisé",resetCredentialNotAllowedMessage:"La remise à zéro n'est pas autorisée",permissionNotApprovedMessage:"La permission n'est pas approuvée.",noRelayStateInResponseMessage:"Aucun état de relais dans la réponse du fournisseur d'identité.",insufficientPermissionMessage:"Permissions insuffisantes pour lier les identités.",couldNotProceedWithAuthenticationRequestMessage:"Impossible de continuer avec la requête d'authentification vers le fournisseur d'identité.",couldNotObtainTokenMessage:"Impossible de récupérer le jeton du fournisseur d'identité.",unexpectedErrorRetrievingTokenMessage:"Erreur inattendue lors de la récupération du jeton provenant du fournisseur d'identité.",unexpectedErrorHandlingResponseMessage:"Erreur inattendue lors du traitement de la réponse provenant du fournisseur d'identité.",identityProviderAuthenticationFailedMessage:"L'authentification a échouée. Impossible de s'authentifier avec le fournisseur d'identité.",couldNotSendAuthenticationRequestMessage:"Impossible d'envoyer la requête d'authentification vers le fournisseur d'identité.",unexpectedErrorHandlingRequestMessage:"Erreur inattendue lors du traitement de la requête vers le fournisseur d'identité.",invalidAccessCodeMessage:"Code d'accès invalide.",sessionNotActiveMessage:"La session n'est pas active.",invalidCodeMessage:"Une erreur est survenue, veuillez vous reconnecter à votre application.",cookieNotFoundMessage:"Cookie introuvable. Assurez-vous que les cookies soient activés dans votre navigateur.",identityProviderUnexpectedErrorMessage:"Erreur inattendue lors de l'authentification avec fournisseur d'identité.",identityProviderMissingStateMessage:"Paramètre d'état manquant dans la réponse du fournisseur d'identité.",identityProviderNotFoundMessage:"Impossible de trouver le fournisseur d'identité avec cet identifiant.",identityProviderLinkSuccess:"Votre compte a été correctement lié avec {0} compte {1} .",staleCodeMessage:"Cette page n'est plus valide, merci de retourner à votre application et de vous connecter à nouveau.",realmSupportsNoCredentialsMessage:"Ce domaine ne supporte aucun type d'accréditation.",credentialSetupRequired:"Connexion impossible, configuration d'accréditation requise.",identityProviderNotUniqueMessage:"Ce domaine autorise plusieurs fournisseurs d'identité. Impossible de déterminer le fournisseur d'identité avec lequel s'authentifier.",emailVerifiedMessage:"Votre courriel a été vérifié.",staleEmailVerificationLink:"Le lien que vous avez cliqué est périmé et n'est plus valide. Peut-être avez vous déjà vérifié votre mot de passe ?",identityProviderAlreadyLinkedMessage:"L'identité fédérée retournée par {0} est déjà liée à un autre utilisateur.",confirmAccountLinking:"Confirmez la liaison du compte {0} du fournisseur d'entité {1} avec votre compte.",confirmEmailAddressVerification:"Confirmez la validité de l'adresse courriel {0}.",confirmExecutionOfActions:"Suivez les instructions suivantes",backToApplication:"« Revenir à l'application",missingParameterMessage:"Paramètres manquants : {0}",clientNotFoundMessage:"Client inconnu.",clientDisabledMessage:"Client désactivé.",invalidParameterMessage:"Paramètre invalide : {0}",alreadyLoggedIn:"Vous êtes déjà connecté.",differentUserAuthenticated:"Vous êtes déjà authentifié avec un autre utilisateur '{0}' dans cette session. Merci de vous déconnecter.",brokerLinkingSessionExpired:"La liaison entre comptes broker a été demandée, mais la session n'est plus valide.",proceedWithAction:"» Cliquez ici","requiredAction.CONFIGURE_TOTP":"Configurer OTP","requiredAction.TERMS_AND_CONDITIONS":"Termes et conditions","requiredAction.UPDATE_PASSWORD":"Mettre à jour votre mot de passe","requiredAction.UPDATE_PROFILE":"Mettre à jour votre profil","requiredAction.VERIFY_EMAIL":"Valider votre adresse email",doX509Login:"Vous allez être connecté en tant que:",clientCertificate:"X509 certificat client:",noCertificate:"[Pas de certificat]",pageNotFound:"Page non trouvée",internalServerError:"Une erreur interne du serveur s'est produite","identity-provider-redirector":"Connexion avec un autre fournisseur d'identité","identity-provider-login-label":"Ou se connecter avec","idp-email-verification-display-name":"Vérification du courriel","idp-email-verification-help-text":"Lier votre compte en validant votre courriel.","idp-username-password-form-display-name":"Nom d'utilisateur et mot de passe","idp-username-password-form-help-text":"Lier votre compte en vous connectant.","console-username":"Nom d'utilisateur:","console-password":"Mot de passe:","console-otp":"Code à usage unique:","console-new-password":"Nouveau mot de passe:","console-confirm-password":"Confirmez les mot de passe:","console-update-password":"La mise à jour de votre mot de passe est requise.","console-verify-email":"Vous devez vérifier votre adresse courriel. Nous avons envoyé un courriel à {0} contenant un code de vérification. Veuillez saisir ce code ci-dessous.","console-email-code":"Code courriel:","console-accept-terms":"Accepter les conditions? [o/n]:","console-accept":"o","password-display-name":"Mot de passe","password-help-text":"Connectez-vous en saisissant votre mot de passe.","auth-username-form-display-name":"Nom d'utilisateur","auth-username-form-help-text":"Commencez la connexion en saisissant votre nom d'utilisateur.","auth-username-password-form-display-name":"Nom d'utilisateur et mot de passe","auth-username-password-form-help-text":"Connectez-vous en saisissant votre nom d'utilisateur et votre mot de passe.","webauthn-display-name":"Clé de Sécurité","webauthn-help-text":"Utilisez votre clé de sécurité pour vous connecter.","webauthn-passwordless-display-name":"Clé de Sécurité","webauthn-passwordless-help-text":"Utilisez votre clé de sécurité pour vous connecter sans mot de passe.","webauthn-login-title":"Connexion avec une Clé de Sécurité","webauthn-registration-title":"Enregistrement d'une Clé de Sécurité","webauthn-available-authenticators":"Clés de Sécurité disponibles","webauthn-unsupported-browser-text":"WebAuthn n'est pas supporté par ce navigateur. Essayez une autre méthode ou contactez votre administrateur.","webauthn-doAuthenticate":"Se connecter avec une Clé de Sécurité","webauthn-createdAt-label":"Créé le","webauthn-error-title":"Erreur lors de l'utilisation de la Clé de Sécurité","webauthn-error-registration":"L'enregistrement de la Clé de Sécurité a échoué.
{0}","webauthn-error-api-get":"L'authentification via la Clé de Sécurité a échoué.
{0}","webauthn-error-different-user":"Le premier utilisateur authentifié ne correspond pas à celui qui est authentifié par la Clé de Sécurité.","webauthn-error-auth-verification":"Le résultat de l'authentification produite par la clé de sécurité est invalide.
{0}","webauthn-error-register-verification":"Le résultat de l'enregistrement de la clé de sécurité est invalide.
{0}","webauthn-error-user-not-found":"La Clé de Sécurité a authentifié un utilisateur inconnu.",finalDeletionConfirmation:"Si vous supprimez votre compte, il ne pourra pas être restauré. Pour conserver votre compte, cliquez sur Annuler.",irreversibleAction:"Cette action est irréversible",deleteAccountConfirm:"Confirmation de suppression de compte",deletingImplies:"Supprimer votre compte implique:",errasingData:"Supprimer toutes vos données",loggingOutImmediately:"Vous déconnecter immédiatement",accountUnusable:"Toute utilisation future de l'application sera impossible avec ce compte",userDeletedSuccessfully:"Utilisateur supprimé avec succès","access-denied":"Accès refusé","frontchannel-logout.title":"Déconnexion","frontchannel-logout.message":"Vous êtes déconnecté des applications suivantes",logoutConfirmTitle:"Déconnexion",logoutConfirmHeader:"Êtes-vous sûr de vouloir vous déconnecter ?",doLogout:"Se déconnecter"}}}]); \ No newline at end of file diff --git a/4660.c814c862.iframe.bundle.js b/4660.c814c862.iframe.bundle.js deleted file mode 100644 index afd37d05..00000000 --- a/4660.c814c862.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4660],{"./dist/login/i18n/baseMessages/fr.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Connexion",doRegister:"Enregistrement",doCancel:"Annuler",doSubmit:"Soumettre",doBack:"Retour",doYes:"Oui",doNo:"Non",doContinue:"Continuer",doIgnore:"Ignorer",doAccept:"Accepter",doDecline:"Décliner",doForgotPassword:"Mot de passe oublié ?",doClickHere:"Cliquez ici",doImpersonate:"Usurper l'identité",doTryAgain:"Réessayer",doTryAnotherWay:"Essayer une autre méthode",doConfirmDelete:"Confirmer la suppression",errorDeletingAccount:"Erreur lors de la suppression du compte",deletingAccountForbidden:"Permissions insuffisantes pour supprimer votre propre compte, contactez un administrateur.",kerberosNotConfigured:"Kerberos non configuré",kerberosNotConfiguredTitle:"Kerberos non configuré",bypassKerberosDetail:"Si vous n'êtes pas connecté via Kerberos ou bien que votre navigateur n'est pas configuré pour la connexion via Kerberos. Veuillez cliquer pour vous connecter via un autre moyen.",kerberosNotSetUp:"Kerberos n'est pas configuré. Connexion impossible.",registerTitle:"S'enregistrer",loginAccountTitle:"Connectez-vous à votre compte",registerWithTitle:"Enregistrement avec {0}",registerWithTitleHtml:"{0}",loginTitle:"Se connecter à {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} utilisateur usurpé",impersonateTitleHtml:"{0} utilisateur usurpé",realmChoice:"Domaine",unknownUser:"Utilisateur inconnu",loginTotpTitle:"Configuration de l'authentification par mobile",loginProfileTitle:"Mise à jour du compte",loginIdpReviewProfileTitle:"Vérifiez vos informations de profil",loginTimeout:"Le temps imparti pour la connexion est écoulé. Le processus de connexion redémarre depuis le début.",oauthGrantTitle:"OAuth Grant",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Assurez-vous de faire confiance à {0} en apprenant comment {0} traitera vos données.",oauthGrantReview:"Vous pourriez examiner",oauthGrantTos:"les conditions générales d'utilisation.",oauthGrantPolicy:"la politique de confidentialité.",errorTitle:"Nous sommes désolés...",errorTitleHtml:"Nous sommes désolés...",emailVerifyTitle:"Vérification du courriel",emailForgotTitle:"Mot de passe oublié ?",updateEmailTitle:"Mise à jour du courriel",emailUpdateConfirmationSentTitle:"Courriel de confirmation envoyé",emailUpdateConfirmationSent:"Un courriel de confirmation a été envoyé à {0}. Vous devez suivre les instructions de ce dernier afin de compléter la mise à jour.",emailUpdatedTitle:"Adresse courriel mis à jour",emailUpdated:"La mise à jour de votre adresse courriel vers {0} a été complétée avec succès.",updatePasswordTitle:"Mise à jour du mot de passe",codeSuccessTitle:"Code succès",codeErrorTitle:"Code d'erreur : {0}",displayUnsupported:"Type d'affichage demandé non supporté",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 à définir

",termsPlainText:"Termes et conditions à définir",recaptchaFailed:"Re-captcha invalide",recaptchaNotConfigured:"Re-captcha est requis, mais il n'est pas configuré",consentDenied:"Consentement refusé.",noAccount:"Nouvel utilisateur ?",username:"Nom d'utilisateur",usernameOrEmail:"Nom d'utilisateur ou courriel",firstName:"Prénom",givenName:"Prénom",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 à usage unique",address:"Adresse",street:"Rue",locality:"Ville ou Localité",region:"État, Province ou Région",postal_code:"Code postal",country:"Pays",emailVerified:"Courriel vérifié",website:"Page web",phoneNumber:"Numéro de téléphone",phoneNumberVerified:"Numéro de téléphone vérifié",gender:"Sexe",birthday:"Date de naissance",zoneinfo:"Fuseau horaire",gssDelegationCredential:"Accréditation de délégation GSS",logoutOtherSessions:"Se déconnecter des autres appareils",profileScopeConsentText:"Profil utilisateur",emailScopeConsentText:"Courriel",addressScopeConsentText:"Adresse",phoneScopeConsentText:"Numéro de téléphone",offlineAccessScopeConsentText:"Accès hors-ligne",samlRoleListScopeConsentText:"Mes rôles",rolesScopeConsentText:"Rôles utilisateur",restartLoginTooltip:"Redémarrer la connexion",loginTotpIntro:"Il est nécessaire de configurer un générateur One Time Password pour accéder à 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 à usage unique fourni par l'application et cliquez sur Sauvegarder pour terminer.",loginTotpStep3DeviceName:"Renseignez un nom d'appareil pour vous aider à gérer vos a appareils OTP.",loginTotpManualStep2:"Ouvrez l'application et saisissez la clé",loginTotpManualStep3:"Utilisez la configuration de valeur suivante si l'application permet son édition",loginTotpUnableToScan:"Impossible de scanner?",loginTotpScanBarcode:"Scanner le code barre ?",loginCredential:"Accréditation",loginOtpOneTime:"Code à usage unique",loginTotpType:"Type",loginTotpAlgorithm:"Algorithme",loginTotpDigits:"Chiffres",loginTotpInterval:"Intervalle",loginTotpCounter:"Compteur",loginTotpDeviceName:"Nom d'appareil","loginTotp.totp":"Basé sur le temps","loginTotp.hotp":"Basé sur les compteurs",loginChooseAuthenticator:"Sélectionnez une méthode de connexion",oauthGrantRequest:"Voulez-vous accorder ces privilèges d'accès ?",inResource:"dans",oauth2DeviceVerificationTitle:"Connexion de l'appareil",verifyOAuth2DeviceUserCode:"Entrez le code à usage unique fourni par votre appareil et cliquez sur Soumettre.",oauth2DeviceInvalidUserCodeMessage:"Code invalide, veuillez réessayer.",oauth2DeviceExpiredUserCodeMessage:"Le code a expiré. Veuillez réessayer de vous connecter depuis votre appareil.",oauth2DeviceVerificationCompleteHeader:"Connexion de l'appareil réussie",oauth2DeviceVerificationCompleteMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre appareil.",oauth2DeviceVerificationFailedHeader:"Échec de la connexion au dispositif",oauth2DeviceVerificationFailedMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre appareil, puis réessayer de vous connecter.",oauth2DeviceConsentDeniedMessage:"Consentement refusé pour connecter l'appareil.",oauth2DeviceAuthorizationGrantDisabledMessage:"Le client n'est pas autorisé à initier OAuth 2.0 Device Authorization Grant. Le flux est désactivé pour ce client.",emailVerifyInstruction1:"Un courriel avec des instructions à suivre vous a été envoyé.",emailVerifyInstruction2:"Vous n'avez pas reçu 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 été envoyé.",emailLinkIdp2:"Vous n'avez pas reçu de code dans le courriel ?",emailLinkIdp3:"pour renvoyer le courriel.",emailLinkIdp4:"Si vous avez déjà vérifié votre courriel dans un autre navigateur",emailLinkIdp5:"pour continuer.",backToLogin:"« Retour à la connexion",emailInstruction:"Entrez votre nom d'utilisateur ou votre courriel ; un courriel va vous être envoyé vous permettant de créer un nouveau mot de passe.",emailInstructionUsername:"Entrez votre nom d'utilisateur ; un courriel va vous être envoyé vous permettant de créer un nouveau mot de passe.",copyCodeInstruction:"Copiez le code et recopiez le dans votre application :",pageExpiredTitle:"La page a expiré",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éer un domaine","role_create-client":"Créer 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 événements","role_view-identity-providers":"Voir les fournisseurs d'identité","role_manage-realm":"Gérer le domaine","role_manage-users":"Gérer les utilisateurs","role_manage-applications":"Gérer les applications","role_manage-identity-providers":"Gérer les fournisseurs d'identité","role_manage-clients":"Gérer les clients","role_manage-events":"Gérer les événements","role_view-profile":"Voir le profil","role_manage-account":"Gérer le compte","role_manage-account-links":"Gérer les liens de compte","role_read-token":"Lire le jeton d'authentification","role_offline-access":"Accès hors-ligne",client_account:"Compte","client_account-console":"Console de gestion du compte","client_security-admin-console":"Console d'administration de la sécurité","client_admin-cli":"Admin CLI","client_realm-management":"Gestion du domaine",client_broker:"Broker",requiredFields:"Champs requis",invalidUserMessage:"Nom d'utilisateur ou mot de passe invalide.",invalidUsernameMessage:"Nom d'utilisateur invalide.",invalidUsernameOrEmailMessage:"Nom d'utilisateur ou courriel invalide.",invalidPasswordMessage:"Mot de passe invalide.",invalidEmailMessage:"Courriel invalide.",accountDisabledMessage:"Compte désactivé, contactez votre administrateur.",accountTemporarilyDisabledMessage:"Ce compte est temporairement désactivé, contactez votre administrateur ou bien réessayez plus tard.",expiredCodeMessage:"Connexion expirée. Veuillez vous reconnecter.",expiredActionMessage:"Action expirée. Merci de continuer la connexion.",expiredActionTokenNoSessionMessage:"Action expirée.",expiredActionTokenSessionExistsMessage:"Action expirée. Merci de recommencer.",missingFirstNameMessage:"Veuillez entrer votre prénom.",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.",missingTotpDeviceNameMessage:"Veuillez entrer le nom de votre appareil.",notMatchPasswordMessage:"Les mots de passe ne sont pas identiques.","error-invalid-value":"Valeur invalide.","error-invalid-blank":"Veuillez entrer une valeur.","error-empty":"Veuillez entrer une valeur.","error-invalid-length":"La longueur doit être entre {1} et {2}.","error-invalid-length-too-short":"La longueur minimale est {1}.","error-invalid-length-too-long":"La longueur maximale est {2}.","error-invalid-email":"Courriel invalide.","error-invalid-number":"Nombre invalide.","error-number-out-of-range":"Le nombre doit être entre {1} et {2}.","error-number-out-of-range-too-small":"Le nombre doit avoir une valeur minimale de {1}.","error-number-out-of-range-too-big":"Le nombre doit avoir une valeur maximale de {2}.","error-pattern-no-match":"Valeur invalide.","error-invalid-uri":"URL invalide.","error-invalid-uri-scheme":"Schéma d'URL invalide.","error-invalid-uri-fragment":"Fragment d'URL invalide.","error-user-attribute-required":"Veuillez renseigner ce champ.","error-invalid-date":"Date invalide.","error-user-attribute-read-only":"Ce champ est en lecture seule.","error-username-invalid-character":"La valeur contient des caractères invalides.","error-person-name-invalid-character":"La valeur contient des caractères invalides.",invalidPasswordExistingMessage:"Mot de passe existant invalide.",invalidPasswordBlacklistedMessage:"Mot de passe invalide : ce mot de passe est blacklisté.",invalidPasswordConfirmMessage:"Le mot de passe de confirmation ne correspond pas.",invalidTotpMessage:"Le code d'authentification est invalide.",usernameExistsMessage:"Le nom d'utilisateur existe déjà.",emailExistsMessage:"Le courriel existe déjà.",federatedIdentityExistsMessage:"L'utilisateur avec {0} {1} existe déjà. Veuillez accéder à au gestionnaire de compte pour lier le compte.",federatedIdentityEmailExistsMessage:"Cet utilisateur avec ce courriel existe déjà. Veuillez vous connecter au gestionnaire de compte pour lier le compte.",confirmLinkIdpTitle:"Ce compte existe déjà",federatedIdentityConfirmLinkMessage:"L'utilisateur {0} {1} existe déjà. Que souhaitez-vous faire ?",federatedIdentityConfirmReauthenticateMessage:"Identifiez vous afin de lier votre compte avec {0}",nestedFirstBrokerFlowMessage:"L'utilisateur {0} {1} n'est lié à aucun utilisateur connu.",confirmLinkIdpReviewProfile:"Vérifiez vos informations de profil",confirmLinkIdpContinue:"Souhaitez-vous lier {0} à votre compte existant",configureTotpMessage:"Vous devez configurer l'authentification par mobile pour activer votre compte.",updateProfileMessage:"Vous devez mettre à jour votre profil pour activer votre compte.",updatePasswordMessage:"Vous devez changer votre mot de passe pour activer votre compte.",updateEmailMessage:"Vous devez mettre à votre addresse de courriel pour activer votre compte.",resetPasswordMessage:"Vous devez changer votre mot de passe.",verifyEmailMessage:"Vous devez vérifier votre courriel pour activer votre compte.",linkIdpMessage:"Vous devez vérifier 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 été mis à jour.",accountPasswordUpdatedMessage:"Votre mot de passe a été mis à jour.",delegationCompleteHeader:"Connexion réussie",delegationCompleteMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre application console.",delegationFailedHeader:"Connexion échouée",delegationFailedMessage:"Vous pouvez fermer cette fenêtre de navigateur et retourner sur votre application console, puis réessayer de vous connecter.",noAccessMessage:"Aucun accès",invalidPasswordMinLengthMessage:"Mot de passe invalide : longueur minimale requise de {0}.",invalidPasswordMaxLengthMessage:"Mot de passe invalide : longueur maximale 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ère(s) spéciaux.",invalidPasswordNotUsernameMessage:"Mot de passe invalide : ne doit pas être identique au nom d'utilisateur.",invalidPasswordNotEmailMessage:"Mot de passe invalide: ne doit pas être identique au courriel.",invalidPasswordRegexPatternMessage:"Mot de passe invalide : ne valide pas l'expression rationnelle.",invalidPasswordHistoryMessage:"Mot de passe invalide : ne doit pas être égal aux {0} derniers mots de passe.",invalidPasswordGenericMessage:"Mot de passe invalide : le nouveau mot de passe ne répond pas à la politique de mot de passe.",failedToProcessResponseMessage:"Erreur lors du traitement de la réponse",httpsRequiredMessage:"Le protocole HTTPS est requis",realmNotEnabledMessage:"Le domaine n'est pas activé",invalidRequestMessage:"Requête invalide",successLogout:"Vous êtes déconnecté",failedLogout:"La déconnexion a échouée",unknownLoginRequesterMessage:"Compte inconnu du demandeur",loginRequesterNotEnabledMessage:"La connexion du demandeur n'est pas active",bearerOnlyMessage:"Les applications Bearer-only ne sont pas autorisées à initier la connexion par navigateur.",standardFlowDisabledMessage:"Le client n'est pas autorisé à initier une connexion avec le navigateur avec ce response_type. Le flux standard est désactivé pour le client.",implicitFlowDisabledMessage:"Le client n'est pas autorisé à initier une connexion avec le navigateur avec ce response_type. Le flux implicite est désactivé pour le client.",invalidRedirectUriMessage:"L'URI de redirection est invalide",unsupportedNameIdFormatMessage:"NameIDFormat non supporté",invalidRequesterMessage:"Demandeur invalide",registrationNotAllowedMessage:"L'enregistrement n'est pas autorisé",resetCredentialNotAllowedMessage:"La remise à zéro n'est pas autorisée",permissionNotApprovedMessage:"La permission n'est pas approuvée.",noRelayStateInResponseMessage:"Aucun état de relais dans la réponse du fournisseur d'identité.",insufficientPermissionMessage:"Permissions insuffisantes pour lier les identités.",couldNotProceedWithAuthenticationRequestMessage:"Impossible de continuer avec la requête d'authentification vers le fournisseur d'identité.",couldNotObtainTokenMessage:"Impossible de récupérer le jeton du fournisseur d'identité.",unexpectedErrorRetrievingTokenMessage:"Erreur inattendue lors de la récupération du jeton provenant du fournisseur d'identité.",unexpectedErrorHandlingResponseMessage:"Erreur inattendue lors du traitement de la réponse provenant du fournisseur d'identité.",identityProviderAuthenticationFailedMessage:"L'authentification a échouée. Impossible de s'authentifier avec le fournisseur d'identité.",couldNotSendAuthenticationRequestMessage:"Impossible d'envoyer la requête d'authentification vers le fournisseur d'identité.",unexpectedErrorHandlingRequestMessage:"Erreur inattendue lors du traitement de la requête vers le fournisseur d'identité.",invalidAccessCodeMessage:"Code d'accès invalide.",sessionNotActiveMessage:"La session n'est pas active.",invalidCodeMessage:"Une erreur est survenue, veuillez vous reconnecter à votre application.",cookieNotFoundMessage:"Cookie introuvable. Assurez-vous que les cookies soient activés dans votre navigateur.",identityProviderUnexpectedErrorMessage:"Erreur inattendue lors de l'authentification avec fournisseur d'identité.",identityProviderMissingStateMessage:"Paramètre d'état manquant dans la réponse du fournisseur d'identité.",identityProviderNotFoundMessage:"Impossible de trouver le fournisseur d'identité avec cet identifiant.",identityProviderLinkSuccess:"Votre compte a été correctement lié avec {0} compte {1} .",staleCodeMessage:"Cette page n'est plus valide, merci de retourner à votre application et de vous connecter à nouveau.",realmSupportsNoCredentialsMessage:"Ce domaine ne supporte aucun type d'accréditation.",credentialSetupRequired:"Connexion impossible, configuration d'accréditation requise.",identityProviderNotUniqueMessage:"Ce domaine autorise plusieurs fournisseurs d'identité. Impossible de déterminer le fournisseur d'identité avec lequel s'authentifier.",emailVerifiedMessage:"Votre courriel a été vérifié.",staleEmailVerificationLink:"Le lien que vous avez cliqué est périmé et n'est plus valide. Peut-être avez vous déjà vérifié votre mot de passe ?",identityProviderAlreadyLinkedMessage:"L'identité fédérée retournée par {0} est déjà liée à un autre utilisateur.",confirmAccountLinking:"Confirmez la liaison du compte {0} du fournisseur d'entité {1} avec votre compte.",confirmEmailAddressVerification:"Confirmez la validité de l'adresse courriel {0}.",confirmExecutionOfActions:"Suivez les instructions suivantes",backToApplication:"« Revenir à l'application",missingParameterMessage:"Paramètres manquants : {0}",clientNotFoundMessage:"Client inconnu.",clientDisabledMessage:"Client désactivé.",invalidParameterMessage:"Paramètre invalide : {0}",alreadyLoggedIn:"Vous êtes déjà connecté.",differentUserAuthenticated:"Vous êtes déjà authentifié avec un autre utilisateur '{0}' dans cette session. Merci de vous déconnecter.",brokerLinkingSessionExpired:"La liaison entre comptes broker a été demandée, mais la session n'est plus valide.",proceedWithAction:"» Cliquez ici","requiredAction.CONFIGURE_TOTP":"Configurer OTP","requiredAction.terms_and_conditions":"Termes et conditions","requiredAction.UPDATE_PASSWORD":"Mettre à jour votre mot de passe","requiredAction.UPDATE_PROFILE":"Mettre à jour votre profil","requiredAction.VERIFY_EMAIL":"Valider votre adresse email",doX509Login:"Vous allez être connecté en tant que:",clientCertificate:"X509 certificat client:",noCertificate:"[Pas de certificat]",pageNotFound:"Page non trouvée",internalServerError:"Une erreur interne du serveur s'est produite","identity-provider-redirector":"Connexion avec un autre fournisseur d'identité","identity-provider-login-label":"Ou se connecter avec","idp-email-verification-display-name":"Vérification du courriel","idp-email-verification-help-text":"Lier votre compte en validant votre courriel.","idp-username-password-form-display-name":"Nom d'utilisateur et mot de passe","idp-username-password-form-help-text":"Lier votre compte en vous connectant.","console-username":"Nom d'utilisateur:","console-password":"Mot de passe:","console-otp":"Code à usage unique:","console-new-password":"Nouveau mot de passe:","console-confirm-password":"Confirmez les mot de passe:","console-update-password":"La mise à jour de votre mot de passe est requise.","console-verify-email":"Vous devez vérifier votre adresse courriel. Nous avons envoyé un courriel à {0} contenant un code de vérification. Veuillez saisir ce code ci-dessous.","console-email-code":"Code courriel:","console-accept-terms":"Accepter les conditions? [o/n]:","console-accept":"o",finalDeletionConfirmation:"Si vous supprimez votre compte, il ne pourra pas être restauré. Pour conserver votre compte, cliquez sur Annuler.",irreversibleAction:"Cette action est irréversible",deleteAccountConfirm:"Confirmation de suppression de compte",deletingImplies:"Supprimer votre compte implique:",errasingData:"Supprimer toutes vos données",loggingOutImmediately:"Vous déconnecter immédiatement",accountUnusable:"Toute utilisation future de l'application sera impossible avec ce compte",userDeletedSuccessfully:"Utilisateur supprimé avec succès","access-denied":"Accès refusé","frontchannel-logout.title":"Déconnexion","frontchannel-logout.message":"Vous êtes déconnecté des applications suivantes",logoutConfirmTitle:"Déconnexion",logoutConfirmHeader:"Êtes-vous sûr de vouloir vous déconnecter ?",doLogout:"Se déconnecter"}}}]); \ No newline at end of file diff --git a/473.51eab5f0.iframe.bundle.js b/473.51eab5f0.iframe.bundle.js new file mode 100644 index 00000000..662eb542 --- /dev/null +++ b/473.51eab5f0.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[473],{"./dist/account/i18n/baseMessages/el.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={"role_manage-identity-providers":"Διαχείριση παρόχων ταυτότητας",doRemove:"Αφαίρεση",doAdd:"Προσθήκη",doSignOut:"Έξοδος",doLink:"Σύνδεση",personalInfoSidebarTitle:"Προσωπικά στοιχεία",accountSecuritySidebarTitle:"Ασφάλεια λογαριασμού",signingInSidebarTitle:"Σε είσοδο",deviceActivitySidebarTitle:"Δραστηριότητα συσκευών","role_manage-account-links":"Διαχείριση συνδέσεων λογαριασμού",linkedAccountsSidebarTitle:"Συνδεδεμένοι λογαριασμοί",editAccountHtmlTitle:"Επεξεργασία Λογαριασμού",personalInfoHtmlTitle:"Προσωπικά Στοιχεία",changePasswordHtmlTitle:"Αλλαγή Κωδικού",requiredFields:"Απαιτούμενα πεδία",sessionsHtmlTitle:"Συνεδρίες",accountManagementTitle:"Διαχείριση Λογαριασμού Keycloak",authenticatorTitle:"Εφαρμογή Ταυτοποίησης",applicationsHtmlTitle:"Εφαρμογές",linkedAccountsHtmlTitle:"Συνδεδεμένοι λογαριασμοί",accountManagementWelcomeMessage:"Καλώς Ήλθατε στη Διαχείριση Λογαριασμού στο Keycloak",personalInfoIntroMessage:"Διαχειριστείτε τα βασικά στοιχεία",accountSecurityIntroMessage:"Ελέγξτε το κωδικό και τη πρόσβαση σας",passwordLastUpdateMessage:"Ο κωδικός πρόσβασης σας ενημερώθηκε στις",updatePasswordMessageTitle:"Βεβαιωθείτε ότι επιλέξατε ένα ισχυρό κωδικό",updatePasswordMessage:"Ένας ισχυρός κωδικός πρόσβασης είναι συνδυασμός ψηφίων, γραμμάτων και συμβόλων. Είναι δύσκολο να βρεθεί, δεν είναι υπαρκτή λέξη και το χρησιμοποιείται μόνο σε αυτό το λογαριασμό.",email:"Email",firstName:"Όνομα",lastName:"Επώνυμο",familyName:"Επώνυμο",password:"Κωδικός πρόσβασης",passwordConfirm:"Επιβεβαίωση",currentPassword:"Τρέχων Κωδικός Πρόσβασης",passwordNew:"Νέος Κωδικός Πρόσβασης",username:"Όνομα χρήστη",address:"Διεύθυνση",street:"Οδός",locality:"Πόλη ή Δήμος",postal_code:"Ταχυδρομικός Κώδικας",country:"Χώρα",emailVerified:"Επιβεβαιωμένο Email",website:"Ιστοσελίδα",phoneNumber:"Τηλέφωνο",phoneNumberVerified:"Επιβεβαιωμένο τηλέφωνο",gender:"Φύλο",birthday:"Ημερομηνία γέννησης",zoneinfo:"Ζώνη ώρας",gssDelegationCredential:"GSS διαπιστευτήρια εξουσιοδότησης",profileScopeConsentText:"Προφίλ χρήστη",emailScopeConsentText:"Διεύθυνση email",addressScopeConsentText:"Διεύθυνση",phoneScopeConsentText:"Τηλέφωνο",samlRoleListScopeConsentText:"Οι Ρόλοι Μου",rolesScopeConsentText:"Ρόλοι χρήστη",role_admin:"Διαχειριστής","role_view-identity-providers":"Εμφάνιση παρόχων ταυτότητας","role_manage-realm":"Διαχείριση τομέα","role_manage-users":"Διαχείριση χρηστών","role_manage-applications":"Διαχείριση εφαρμογών","role_realm-admin":"Διαχειριστή Τόπου","role_create-realm":"Δημιουργία τομέα","role_view-realm":"Εμφάνιση τομέα","role_view-users":"Εμφάνιση χρηστών","role_view-applications":"Εμφάνιση εφαρμογών","role_view-clients":"Εμφάνιση πελατών","role_view-events":"Εμφάνιση συμβάντων","role_manage-clients":"Διαχείριση πελατών","role_manage-events":"Διαχείριση συμβάντων","role_view-profile":"Εμφάνιση προφίλ","role_manage-account":"Διαχείριση λογαριασμού","role_read-token":"Ανάγνωση διακριτικού","role_offline-access":"Πρόσβαση εκτός-σύνδεσης",client_account:"Λογαριασμός","client_account-console":"Κονσόλα Λογαριασμού","client_admin-cli":"CLI Διαχείρισης","client_realm-management":"Διαχείριση Τομέα",client_broker:"Μεσολαβητής",inResource:"σε",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",invalidEmailMessage:"Μη έγκυρη διεύθυνση email.",accountDisabledMessage:"Ο λογαριασμός έχει απενεργοποιηθεί, επικοινωνήστε με το διαχειριστή.",consentDenied:"Άρνηση Συναίνεσης.",locale_ca:"Català",locale_cs:"Čeština",locale_de:"Deutsch",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",doSave:"Αποθήκευση",doCancel:"Ακύρωση",doLogIn:"Είσοδος",updatePasswordTitle:"Ενημέρωση Κωδικού Πρόσβασης",locale_ar:"عربي",authenticatorCode:"Κωδικός μίας-χρήσης",locale_en:"English",givenName:"Όνομα",region:"Νομός ή Περιφέρεια",fullName:"Ονοματεπώνυμο",offlineAccessScopeConsentText:"Πρόσβαση εκτός-σύνδεσης",accountSecurityTitle:"Ασφάλεια Λογαριασμού",invalidPasswordGenericMessage:"Μη έγκυρος κωδικός πρόσβασης: ο νέος κωδικός δε συμφωνεί με τις πολιτικές κωδικών.",invalidPasswordHistoryMessage:"Μη έγκυρος κωδικός πρόσβασης: δε πρέπει να είναι το ίδιο με τους τελευταίους {0} κωδικούς.",invalidPasswordRegexPatternMessage:"Μη έγκυρος κωδικός πρόσβασης: δε ταιριάζει με τα μοτίβα regex.",invalidPasswordNotEmailMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίσο με το email.",invalidPasswordNotUsernameMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίσο με το όνομα χρήστη.",invalidPasswordMinSpecialCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ειδικούς χαρακτήρες.",invalidPasswordMinUpperCaseCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} κεφαλαίους χαρακτήρες.",invalidPasswordMinLowerCaseCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} πεζούς χαρακτήρες.",invalidPasswordMinDigitsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ψηφία.",invalidPasswordMaxLengthMessage:"Μη έγκυρος κωδικός πρόσβασης: μέγιστο μήκος {0}.",invalidPasswordMinLengthMessage:"Μη έγκυρος κωδικός πρόσβασης: ελάχιστο μήκος {0}.",accountPasswordUpdatedMessage:"Ο κωδικός πρόσβασης ενημερώθηκε.",accountUpdatedMessage:"Ο λογαριασμός σας έχει ενημερωθεί.",emailExistsMessage:"Το email υπάρχει ήδη.",usernameExistsMessage:"Το όνομα χρήστη υπάρχει ήδη.",invalidTotpMessage:"Μη έγκυρος κωδικός μίας χρήσης.",invalidPasswordConfirmMessage:"Η επιβεβαίωση του κωδικού πρόσβασης δε ταιριάζει.",invalidPasswordBlacklistedMessage:"Μη έγκυρος κωδικός πρόσβασης: ο κωδικός είναι απαγορευμένος.",invalidPasswordExistingMessage:"Μη έγκυρος υπάρχοντας κωδικός πρόσβασης.","error-invalid-date":"Μη έγκυρη ημερομηνία.","error-invalid-uri-fragment":"Μη έγκυρο κομμάτι URL.","error-invalid-uri-scheme":"Μη έγκυρο σχήμα URL.","error-invalid-uri":"Μη έγκυρο URL.","error-pattern-no-match":"Μη έγκυρη τιμή.","error-invalid-number":"Μη έγκυρος αριθμός.","error-invalid-email":"Μη έγκυρη διεύθυνση email.","error-empty":"Παρακαλώ ορίστε τιμή.","error-invalid-blank":"Παρακαλώ ορίστε τιμή.","error-invalid-value":"Μη έγκυρη τιμή.",notMatchPasswordMessage:"Οι κωδικοί πρόσβασης δε ταιριάζουν.",missingTotpDeviceNameMessage:"Παρακαλώ ορίστε όνομα συσκευής.",missingTotpMessage:"Παρακαλώ εισάγετε ένα κωδικό από εφαρμογή ταυτοποίησης.",missingPasswordMessage:"Παρακαλώ ορίστε κωδικό πρόσβασης.",missingUsernameMessage:"Παρακαλώ ορίστε όνομα χρήστη.",missingEmailMessage:"Παρακαλώ ορίστε email.",missingLastNameMessage:"Παρακαλώ ορίστε επώνυμο.",missingFirstNameMessage:"Παρακαλώ ορίστε ένα όνομα.",readOnlyUsernameMessage:"Δε μπορείτε να ενημερώσετε το όνομα χρήστη σας καθώς είναι μόνο-για-ανάγνωση.","access-denied-when-idp-auth":"Δεν επιτρέπεται η πρόσβαση κατά τη ταυτοποίηση με {0}",accountUnusable:"Κάθε μεταγενέστερη χρήση αυτής της εφαρμογής δεν θα είναι δυνατή με αυτό το λογαριασμό",loggingOutImmediately:"Άμεση αποσύνδεση σας",errasingData:"Διαγραφή όλων των δεδομένων σας",deletingImplies:"Η διαγραφή του λογαριασμού σας συνεπάγεται:",irreversibleAction:"Αυτή η ενέργεια είναι μη αναστρέψιμη","openshift.scope.list-projects":"Εμφάνιση λίστας έργων","openshift.scope.user_full":"Πλήρης Πρόσβαση","openshift.scope.user_check-access":"Πληροφορίες πρόσβασης χρήστη","openshift.scope.user_info":"Πληροφορίες χρήστη",clientNotFoundMessage:"Ο πελάτης δε βρέθηκε.",identityProviderAlreadyLinkedMessage:"Η ομόσπονδη ταυτότητα που επιστρέφει το {0} είναι ήδη συνδεδεμένη με ένα άλλο χρήστη.","role_view-groups":"Εμφάνιση ομάδων",role_uma_authorization:"Απόκτηση δικαιωμάτων","client_security-admin-console":"κονσόλα διαχειριστή ασφαλείας",allFieldsRequired:"Απαιτούνται όλα τα πεδία",backTo:"Πίσω στο{0}",date:"Ημερομηνία",event:"Γεγονός",ip:"IP",client:"Πελάτης",clients:"Πελάτες",details:"Λεπτομέρειες",started:"Ξεκίνησε",expires:"Λήγει",applications:"Εφαρμογές",account:"Λογαριασμός",federatedIdentity:"Ομόσπονδη Ταυτότητα","device-activity":"Δραστηριότητα συσκευών",sessions:"Συνεδρίες",log:"Λογότυπο",application:"Εφαρμογή",availableRoles:"Διαθέσιμοι Ρόλοι",grantedPersonalInfo:"Εκχωρημένες Προσωπικές Πληροφορίες",additionalGrants:"Επιπλέον Χορηγήσεις",action:"Δράση",doLogOutAllSessions:"Έξοδος από όλες τις συνεδρίες",accountLogHtmlTitle:"Αρχείο Λογαριασμού",noAccessMessage:"Δεν επιτρέπεται η πρόσβαση",deviceActivityHtmlTitle:"Δραστηριότητα Συσκευών",federatedIdentitiesHtmlTitle:"Ομόσπονδες Ταυτότητες",applicationsIntroMessage:"Διαχειριστείτε το δικαίωμα της εφαρμογής σας να έχει πρόσβαση στο λογαριασμό σας",resourceIntroMessage:"Μοιράστε τους πόρους σας μεταξύ των μελών της ομάδας",personalSubTitle:"Τα Προσωπικά σας Στοιχεία",personalSubMessage:"Διαχειριστείτε τα βασικά στοιχεία σας.","role_view-consent":"Εμφάνιση εγκρίσεων","role_manage-consent":"Διαχείριση εγκρίσεων",backToApplication:"« Πίσω στην εφαρμογή",lastAccess:"Τελευταία Πρόσβαση",authenticator:"Ταυτοποιητής",grantedPermissions:"Εκχωρημένα Δικαιώματα",fullAccess:"Πλήρης Πρόσβαση",configureAuthenticators:"Ρυθμισμένες Εφαρμογές Ταυτοποίησης",mobile:"Κινητό",totpStep2:"Ανοίξτε την εφαρμογή και σαρώστε την εικόνα του κωδικού:",totpStep3DeviceName:"Ορίστε ένα Όνομα Συσκευής για να σας βοηθήσει στη διαχείριση των συσκευών OTP.",totpManualStep2:"Ξεκινήστε την εφαρμογή και εισάγετε το κλειδί:",totpUnableToScan:"Αδυναμία σάρωσης;",totpScanBarcode:"Σάρωση της εικόνας του κωδικού;",totpStep1:"Εγκαταστήστε μία από τις παρακάτω εφαρμογές στο κινητό σας:",totpStep3:"Δώστε το κωδικό μίας χρήσης όπως εμφανίζεται στην εφαρμογή σας και επιλέξτε το Αποθήκευση για να ολοκληρωθεί η αρχική ρύθμιση.","totp.totp":"Χρονικός","totp.hotp":"Σειριακός",totpType:"Τύπος",totpAlgorithm:"Αλγόριθμος",totpDigits:"Ψηφία",totpInterval:"Διάστημα",totpCounter:"Μετρητής",totpDeviceName:"Όνομα Συσκευής",offlineToken:"Διακριτικό Εκτός Σύνδεσης",revoke:"Ανάκληση Χορήγησης",totpManualStep3:"Χρησιμοποιείστε τις παρακάτω τιμές ρυθμίσεων αν η εφαρμογή το υποστηρίζει:",invalidUserMessage:"Μη έγκυρος χρήστης",updateReadOnlyAttributesRejectedMessage:"Απορρίφθηκε η ενημέρωση του μόνο-ανάγνωσης χαρακτηριστικού",readOnlyUserMessage:"Δε μπορείτε να ενημερώσετε το λογαριασμό σας καθώς είναι μόνο-για-ανάγνωση.",successTotpMessage:"Ενεργοποιήθηκε η εφαρμογή ταυτοποίησης στο κινητό.",successGrantRevokedMessage:"Η χορήγηση ανακλήθηκε επιτυχώς.",invalidFederatedIdentityActionMessage:"Μη έγκυρη ή απούσα δράση.",identityProviderNotFoundMessage:"Δε βρέθηκε ο ορισμένος πάροχος ταυτότητας.",federatedIdentityLinkNotActiveMessage:"Αυτή η ταυτότητα δεν είναι πια ενεργή.",identityProviderRedirectErrorMessage:"Αποτυχία στην ανακατεύθυνση προς το πάροχο ταυτότητας.",identityProviderRemovedMessage:"Ο πάροχος ταυτότητας αφαιρέθηκε επιτυχώς.",myResources:"Οι Πόροι Μου",myResourcesSub:"Οι πόροι μου",doDeny:"Άρνηση",doRevoke:"Ανάκληση",doApprove:"Έγκριση",doRemoveSharing:"Αφαίρεση Διαμοιρασμού",doRemoveRequest:"Αφαίρεση Αίτησης",peopleAccessResource:"Άτομα με πρόσβαση σε αυτό το πόρο",resourceNoPermissionsGrantingAccess:"Καμιά άδεια που χορηγεί πρόσβαση σε αυτό το πόρο",anyAction:"Κάθε δράση",name:"Όνομα",scopes:"Εμβέλειες",resource:"Πόρος",user:"Χρήστης",shareWithOthers:"Διαμοιρασμός με άλλους",needMyApproval:"Χρειάζεται την έγκριση μου",requestsWaitingApproval:"Οι αιτήσεις που αναμένουν έγκριση",icon:"Εικονίδιο",requestor:"Αιτών",owner:"Ιδιοκτήτης",permissionRequestion:"Αίτηση Άδειας",permission:"Άδεια",shares:"διαμοιρασμός(οί)",notBeingShared:"Αυτός ο πόρος δε διαμοιράζεται.",notHaveAnyResource:"Δεν έχετε κανένα πόρο",havePermissionRequestsWaitingForApproval:"Έχετε {0} αιτήση(εις) για άδεια σε αναμονή προς έγκριση.",clickHereForDetails:"Πατήστε εδώ για λεπτομέρειες.",applicationName:"Όνομα",applicationInUse:"Μόνο εφαρμογή σε-χρήση",clearAllFilter:"Καθαρισμός φίλτρων",activeFilters:"Ενεργά φίλτρα",filterByName:"Φιλτράρισμα Ανά Όνομα ...",internalApps:"Εσωτερικές εφαρμογές",thirdpartyApps:"Εφαρμογές Τρίτων",appResults:"Αποτελέσματα",authenticatorSubTitle:"Ορισμός Ταυτοποίησης Δύο-Παραγόντων",authenticatorMobileTitle:"Εφαρμογή Ταυτοποίησης στο Κινητό",authenticatorMobileMessage:"Χρησιμοποιείστε μία Εφαρμογή Ταυτοποίησης στο κινητό για να έχετε τους κωδικούς Επιβεβαίωσης σαν ταυτοποίηση δύο-παραγόντων.",authenticatorMobileFinishSetUpMessage:"Η εφαρμογή ταυτοποίησης έχει δεθεί με το κινητό σας.",authenticatorActionSetup:"Ρύθμιση",authenticatorSMSTitle:"Κωδικός SMS",authenticatorSMSFinishSetUpMessage:"Μηνύματα κειμένου στέλνονται στο",authenticatorDefaultStatus:"Προεπιλογή",authorizedProvider:"Πιστοποιημένος Πάροχος",identityProvider:"Πάροχος Ταυτότητας",identityProviderMessage:"Για να συνδέσετε το λογαριασμό σας με παρόχους ταυτότητας που έχετε ρυθμίσει",socialLogin:"Κοινωνική Είσοδος",userDefined:"Ορισμένη από το Χρήστη",removeAccess:"Αφαίρεση Πρόσβασης",authenticatorStatusMessage:"Η ταυτοποίηση δύο-παραγόντων αυτή τη στιγμή είναι",authenticatorFinishSetUpTitle:"Η Ταυτοποίηση Δύο Παραγόντων Σας",smscodeIntroMessage:"Ορίστε ένα αριθμό τηλεφώνου και ένας κωδικός επιβεβαίωσης θα σταλεί στο κινητό σας.",mobileSetupStep2:"Ανοίξτε την εφαρμογή και σαρώστε το κωδικό QR:",scanBarCode:"Θέλετε να σαρώσετε το κωδικό QR;",enterBarCode:"Εισάγετε το κωδικό μίας-φοράς",doCopy:"Αντιγραφή",doFinish:"Ολοκλήρωση",authenticatorSMSCodeSetupTitle:"Ρύθμιση Κωδικού SMS",chooseYourCountry:"Επιλέξτε τη χώρα σας",enterYourPhoneNumber:"Εισάγετε το τηλεφωνικό αριθμό σας",sendVerficationCode:"Αποστολή Κωδικού Επιβεβαίωσης",enterYourVerficationCode:"Εισάγετε το κωδικό επιβεβαίωσης",realmName:"Τομέας",doDownload:"Λήψη",doPrint:"Εκτύπωση",generateNewBackupCodes:"Παραγωγή Νέων Κωδικών Ανάκτησης Ταυτοποίησης",backtoAuthenticatorPage:"Πίσω στη Σελίδα Εφαρμογής Ταυτοποίησης",resources:"Πόροι",share:"Διαμοιρασμός",sharedwith:"Μοιράζεται με",permissionRequests:"Αιτήσεις Αδειών",approve:"Έγκριση",approveAll:"Έγκριση όλων",people:"άτομα",perPage:"ανά σελίδα",currentPage:"Τρέχουσα Σελίδα",sharetheResource:"Διαμοιρασμός πόρου",group:"Ομάδα",addPeople:"Προσθήκη ατόμων στα οποία θα διαμοιράσετε το πόρο σας",myPermissions:"Οι Άδειες Μου",waitingforApproval:"Αναμονή για έγκριση",anyPermission:"Κάθε Άδεια","error-invalid-length-too-short":"Το χαρακτηριστικό {0} πρέπει να έχει ελάχιστο μήκος {1}.","error-number-out-of-range-too-small":"Το χαρακτηριστικό {0} πρέπει να έχει ελάχιστη τιμή {1}.","error-user-attribute-required":"Παρακαλώ ορίστε το χαρακτηριστικό {0}.","error-user-attribute-read-only":"Το πεδίο {0} είναι μόνο για ανάγνωση.","error-person-name-invalid-character":"Το όνομα περιέχει ένα μη έγκυρο χαρακτήρα.",readOnlyPasswordMessage:"Δε μπορείτε να ενημερώσετε το κωδικό πρόσβασης σας καθώς είναι μόνο-για-ανάγνωση.",successTotpRemovedMessage:"Αφαιρέθηκε η εφαρμογή ταυτοποίησης στο κινητό.",authenticatorFinishSetUpMessage:"Κάθε φορά που συνδέστε στο λογαριασμό σας στο Keycloak, θα πρέπει να παρέχετε ένα κωδικό ταυτοποίησης δύο-παραγόντων.",authenticatorSubMessage:"Για να βελτιώσετε τη ασφάλεια του λογαριασμού σας, ενεργοποιήστε τουλάχιστον μια από τις διαθέσιμες μεθόδους ταυτοποίησης δύο-παραγόντων.",authenticatorSMSMessage:"Το Keycloak θα στείλει ένα κωδικό Επιβεβαίωσης στο κινητό σαν ταυτοποίηση δύο-παραγόντων.",authenticatorChangePhone:"Αλλαγή Τηλεφωνικού Αριθμού",authenticatorMobileSetupTitle:"Ρύθμιση Εφαρμογής Ταυτοποίησης",mobileSetupStep1:"Εγκαταστήστε μία εφαρμογή ταυτοποίησης στο κινητό σας. Υποστηρίζονται οι παρακάτω εφαρμογές.",mobileSetupStep3:"Εισάγετε το κωδικό μίας-φοράς που παρήχθει από την εφαρμογή και πατήστε Αποθήκευση για ολοκλήρωση.",authenticatorBackupCodesSetupTitle:"Ρύθμιση Κωδικών Ανάκτησης Ταυτοποίησης",sharedwithMe:"Μοιράζονται με Εμένα",accessPermissions:"Άδειες Πρόσβασης",selectPermission:"Επιλογή Άδειας",addTeam:"Προσθήκη ομάδας στην οποία θα διαμοιράσετε το πόρο σας","error-invalid-length":"Το χαρακτηριστικό {0} πρέπει να έχει μήκος μεταξύ {1} και {2}.","error-number-out-of-range":"Το χαρακτηριστικό {0} πρέπει να είναι ένας αριθμός μεταξύ {1} και {2}.","error-number-out-of-range-too-big":"Το χαρακτηριστικό {0} πρέπει να έχει μέγιστη τιμή {2}.","error-username-invalid-character":"Το όνομα χρήστη περιέχει ένα μη έγκυρο χαρακτήρα.",missingIdentityProviderMessage:"Δεν ορίστηκε πάροχος ταυτότητας.",federatedIdentityRemovingLastProviderMessage:"Δε μπορείτε να αφαιρέσετε τη τελευταία ομόσπονδη ταυτότητα καθώς δεν έχετε κωδικό πρόσβασης.",staleCodeAccountMessage:"Η σελίδα έληξε. Παρακαλώ δοκιμάστε άλλη μια φορά.",accountTemporarilyDisabledMessage:"Ο λογαριασμός έχει απενεργοποιηθεί προσωρινά, επικοινωνήστε με το διαχειριστή ή δοκιμάστε αργότερα.",resourceManagedPolicies:"Άδειες που χορηγούν πρόσβαση σε αυτό το πόρο",description:"Περιγραφή",peopleSharingThisResource:"Άτομα που διαμοιράζουν αυτό το πόρο",resourcesSharedWithMe:"Πόροι μου διαμοιράζονται με εμένα",noResourcesSharedWithYou:"Δε διαμοιράζεται πόρος με εσάς",resourceIsNotBeingShared:"Αυτός ο πόρος δεν διαμοιράζεται",applicationType:"Τύπος Εφαρμογής",allApps:"Όλες οι εφαρμογές",authorizedProviderMessage:"Πιστοποιημένοι Πάροχοι που είναι συνδεδεμένοι με το λογαριασμό σας",removeAccessMessage:"Πρέπει να χορηγήσετε ξανά πρόσβαση, αν θέλετε να χρησιμοποιήσετε αυτό το λογαριασμό εφαρμογής.","error-invalid-length-too-long":"Το χαρακτηριστικό {0} πρέπει να έχει μέγιστο μήκος {2}."}}}]); \ No newline at end of file diff --git a/487.82a7739e.iframe.bundle.js b/487.82a7739e.iframe.bundle.js new file mode 100644 index 00000000..34219818 --- /dev/null +++ b/487.82a7739e.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[487],{"./dist/login/i18n/baseMessages/de.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Anmelden",doRegister:"Registrieren",doCancel:"Abbrechen",doSubmit:"Absenden",doBack:"Zurück",doYes:"Ja",doNo:"Nein",doContinue:"Weiter",doIgnore:"Ignorieren",doAccept:"Annehmen",doDecline:"Ablehnen",doForgotPassword:"Passwort vergessen?",doClickHere:"Hier klicken",doImpersonate:"Identitätswechsel",doTryAgain:"Erneut versuchen",doTryAnotherWay:"Einen anderen Weg versuchen",doConfirmDelete:"Löschung bestätigen",errorDeletingAccount:"Beim Löschen des Kontos ist ein Fehler aufgetreten",deletingAccountForbidden:"Sie haben nicht genügend Berechtigungen, um Ihr eigenes Konto zu löschen, 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ür eine Anmeldung mit Kerberos konfiguriert. Bitte klicken Sie auf Weiter, damit Sie sich auf eine andere Art anmelden können",kerberosNotSetUp:"Kerberos ist nicht konfiguriert. Sie können sich damit nicht anmelden.",registerTitle:"Registrierung",loginAccountTitle:"Bei Ihrem Konto anmelden",loginTitle:"Anmeldung bei {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Identitätswechsel",impersonateTitleHtml:"{0} Identitätswechsel",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.",reauthenticate:"Zum Fortsetzen bitte erneut anmelden",oauthGrantTitle:"OAuth gewähren",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ützt",browserRequired:"Browser für die Anmeldung erforderlich",browserContinue:"Browser erforderlich, um die Anmeldung abzuschließen",browserContinuePrompt:"Browser öffnen und Anmeldung fortsetzen? [y/n]:",browserContinueAnswer:"y",termsTitle:"Bedingungen und Konditionen",termsTitleHtml:"Bedingungen und Konditionen",termsText:"

Zu definierende Bedingungen und Konditionen

",recaptchaFailed:"Ungültiges 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ätigen",passwordNew:"Neues Passwort",passwordNewConfirm:"Neues Passwort bestätigen",rememberMe:"Angemeldet bleiben",authenticatorCode:"One-time Code",address:"Adresse",street:"Straße",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äten abmelden",profileScopeConsentText:"Nutzerkonto",emailScopeConsentText:"E-Mail Adresse",addressScopeConsentText:"Adresse",phoneScopeConsentText:"Telefonnummer",offlineAccessScopeConsentText:"Offline Zugriff",samlRoleListScopeConsentText:"Meine Rollen",rolesScopeConsentText:"Nutzerrollen",restartLoginTooltip:"Login neu starten",loginTotpIntro:"Sie müssen einen One Time Passwort-Generator einrichten, um auf dieses Konto zugreifen zu können.",loginTotpStep1:"Installieren Sie eine der folgenden Applikationen auf Ihrem Smartphone:",loginTotpStep2:"Öffnen Sie die Applikation und scannen Sie den QR-Code.",loginTotpStep3:"Geben Sie den von der Applikation generierten One-time Code ein und klicken Sie auf Absenden.",loginTotpStep3DeviceName:"Geben Sie einen Gerätenamen an, um die Verwaltung Ihrer OTP-Geräte zu erleichtern.",loginTotpManualStep2:"Öffnen Sie die Applikation und geben Sie den folgenden Schlüssel ein.",loginTotpManualStep3:"Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese für die Applikation anpassen können:",loginTotpUnableToScan:"Sie können den QR-Code nicht scannen?",loginTotpScanBarcode:"QR-Code scannen?",loginCredential:"Anmeldeinformation",loginOtpOneTime:"One-time code",loginTotpType:"Typ",loginTotpAlgorithm:"Algorithmus",loginTotpDigits:"Ziffern",loginTotpInterval:"Intervall",loginTotpCounter:"Zähler",loginTotpDeviceName:"Gerätename","loginTotp.totp":"zeitbasiert (time-based)","loginTotp.hotp":"zählerbasiert (counter-based)",loginChooseAuthenticator:"Login Methode auswählen",oauthGrantRequest:"Wollen Sie diese Zugriffsrechte gewähren?",inResource:"in",emailVerifyInstruction1:"Eine E-Mail mit weiteren Anweisungen wurde an Sie versendet.",emailVerifyInstruction2:"Falls Sie keine E-Mail erhalten haben, dann können Sie",emailVerifyInstruction3:"um eine neue E-Mail versenden zu lassen.",emailLinkIdpTitle:"{0} verknüpfen",emailLinkIdp1:"Eine E-Mail mit weiteren Anweisungen um {0} Konto {1} mit Ihrem {2} Konto zu verknüpfen 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ück 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.",emailInstructionUsername:"Geben Sie Ihren Benutzernamen 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ügen ihn in die Applikation ein:",pageExpiredTitle:"Diese Seite ist nicht mehr gültig.",pageExpiredMsg1:"Um den Anmeldevorgang neu zu starten",pageExpiredMsg2:"Um den Anmeldevorgang fortzusetzen",personalInfo:"Persönliche 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ötigte Felder",invalidUserMessage:"Ungültiger Benutzername oder Passwort.",invalidUsernameMessage:"Ungültiger Benutzername.",invalidUsernameOrEmailMessage:"Ungültiger Benutzername oder E-Mail.",invalidPasswordMessage:"Ungültiges Passwort.",invalidEmailMessage:"Ungültige E-Mail-Adresse.",accountDisabledMessage:"Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.",accountTemporarilyDisabledMessage:"Ihr Benutzerkonto ist temporär gesperrt. Bitte kontaktieren Sie den Admin oder versuchen Sie es später noch einmal.",expiredCodeMessage:"Zeitüberschreitung bei der Anmeldung. Bitte melden Sie sich erneut an.",expiredActionMessage:"Die Aktion ist nicht mehr gültig. Bitte fahren Sie nun mit der Anmeldung fort.",expiredActionTokenNoSessionMessage:"Die Aktion ist nicht mehr gültig.",expiredActionTokenSessionExistsMessage:"Die Aktion ist nicht mehr gültig. 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ätenamen ein.",notMatchPasswordMessage:"Passwörter sind nicht identisch.",invalidPasswordExistingMessage:"Das aktuelle Passwort ist ungültig.",invalidPasswordBlacklistedMessage:"Ungültiges Passwort: Das Passwort steht auf der Blockliste (schwarzen Liste).",invalidPasswordConfirmMessage:"Die Passwortbestätigung ist nicht identisch.",invalidTotpMessage:"Ungültiger 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üpfen.",confirmLinkIdpTitle:"Das Benutzerkonto existiert bereits.",federatedIdentityConfirmLinkMessage:"Ein Benutzer mit {0} {1} existiert bereits. Wie möchten Sie fortfahren?",federatedIdentityConfirmReauthenticateMessage:"Anmelden um das Benutzerkonto mit {0} zu verknüpfen",nestedFirstBrokerFlowMessage:"Der {0} Benutzer {1} ist mit keinem bekannten Benutzer verknüpfen.",confirmLinkIdpReviewProfile:"Benutzerkonto überprüfen",confirmLinkIdpContinue:"Zu einem bestehenden Benutzerkonto hinzufügen",configureTotpMessage:"Sie müssen eine Mehrfachauthentifizierung einrichten, um das Benutzerkonto zu aktivieren.",updateProfileMessage:"Sie müssen Ihr Benutzerkonto aktualisieren, um das Benutzerkonto zu aktivieren.",updatePasswordMessage:"Sie müssen Ihr Passwort ändern, um das Benutzerkonto zu aktivieren.",resetPasswordMessage:"Sie müssen Ihr Passwort ändern.",verifyEmailMessage:"Sie müssen Ihre E-Mail-Adresse verifizieren, um das Benutzerkonto zu aktivieren.",linkIdpMessage:"Sie müssen Ihre E-Mail-Adresse verifizieren, um Ihr Benutzerkonto mit {0} zu verknüpfen.",emailSentMessage:"Sie sollten in Kürze eine E-Mail mit weiteren Instruktionen erhalten.",emailSendErrorMessage:"Die E-Mail konnte nicht versendet werden. Bitte versuchen Sie es später noch einmal.",accountUpdatedMessage:"Ihr Benutzerkonto wurde aktualisiert.",accountPasswordUpdatedMessage:"Ihr Passwort wurde aktualisiert.",delegationCompleteHeader:"Login Erfolgreich",delegationCompleteMessage:"Sie können dieses Browserfenster schließen und zu Ihrer Konsolenanwendung zurückkehren.",delegationFailedHeader:"Login Fehlgeschlagen",delegationFailedMessage:"Sie können dieses Browserfenster schließen und zu Ihrer Konsolenanwendung zurückkehren und versuchen, sich erneut anzumelden.",noAccessMessage:"Kein Zugriff",invalidPasswordMinLengthMessage:"Ungültiges Passwort: Es muss mindestens {0} Zeichen lang sein.",invalidPasswordMinDigitsMessage:"Ungültiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten.",invalidPasswordMinLowerCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Kleinbuchstaben beinhalten.",invalidPasswordMinUpperCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Großbuchstaben beinhalten.",invalidPasswordMinSpecialCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten.",invalidPasswordNotUsernameMessage:"Ungültiges Passwort: Es darf nicht gleich sein wie der Benutzername.",invalidPasswordNotEmailMessage:"Ungültiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein.",invalidPasswordRegexPatternMessage:"Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.",invalidPasswordHistoryMessage:"Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.",invalidPasswordGenericMessage:"Ungültiges Passwort: Es verletzt die Passwort-Richtlinien.",failedToProcessResponseMessage:"Konnte Antwort nicht verarbeiten.",httpsRequiredMessage:"HTTPS erforderlich.",realmNotEnabledMessage:"Realm nicht aktiviert.",invalidRequestMessage:"Ungültiger Request.",successLogout:"Sie sind abgemeldet.",failedLogout:"Logout fehlgeschlagen.",unknownLoginRequesterMessage:"Ungültiger Login Requester.",loginRequesterNotEnabledMessage:"Login Requester nicht aktiviert.",bearerOnlyMessage:"Bearer-only Clients können sich nicht via Browser anmelden.",standardFlowDisabledMessage:"Client darf sich mit diesem response_type nicht via Browser anmelden. Standard Flow ist für diesen Client deaktiviert.",implicitFlowDisabledMessage:"Client darf sich mit diesem response_type nicht via Browser anmelden. Implicit Flow ist für diesen Client deaktiviert.",invalidRedirectUriMessage:"Ungültige Redirect Uri.",unsupportedNameIdFormatMessage:"Nicht unterstütztes NameIDFormat.",invalidRequesterMessage:"Ungültiger Requester.",registrationNotAllowedMessage:"Registrierung nicht erlaubt.",resetCredentialNotAllowedMessage:"Reset Credential nicht erlaubt.",permissionNotApprovedMessage:"Berechtigung nicht bestätigt.",noRelayStateInResponseMessage:"Kein Relay State in der Antwort von Identity Provider.",insufficientPermissionMessage:"Nicht genügend Rechte, um die Identität zu verknüpfen.",couldNotProceedWithAuthenticationRequestMessage:"Konnte die Authentifizierungsanfrage nicht weiter verarbeiten.",couldNotObtainTokenMessage:"Konnte kein Token vom Identity Provider erhalten.",unexpectedErrorRetrievingTokenMessage:"Unerwarteter Fehler während dem Empfang des Tokens vom Identity Provider.",unexpectedErrorHandlingResponseMessage:"Unerwarteter Fehler während der Bearbeitung der Antwort vom Identity Provider.",identityProviderAuthenticationFailedMessage:"Authentifizierung fehlgeschlagen. Authentifizierung mit dem Identity Provider nicht möglich.",couldNotSendAuthenticationRequestMessage:"Konnte Authentifizierungsanfrage nicht an den Identity Provider senden.",unexpectedErrorHandlingRequestMessage:"Unerwarteter Fehler während der Bearbeitung der Anfrage an den Identity Provider.",invalidAccessCodeMessage:"Ungültiger Access-Code.",sessionNotActiveMessage:"Session nicht aktiv.",invalidCodeMessage:"Ungültiger Code, bitte melden Sie sich erneut über die Applikation an.",cookieNotFoundMessage:"Cookie konnte nicht gefunden werden. Bitte stellen Sie sicher, dass Cookies in Ihrem Browser aktiviert sind.",identityProviderUnexpectedErrorMessage:"Unerwarteter Fehler während der Authentifizierung mit dem Identity Provider.",identityProviderMissingStateMessage:"Fehlender state Parameter in der Antwort vom Identitätsanbieter.",identityProviderNotFoundMessage:"Konnte keinen Identity Provider zu der Identität finden.",identityProviderLinkSuccess:"Sie haben Ihre E-Mail-Adresse erfolgreich verifiziert. Bitte kehren Sie zu Ihrem ursprünglichen Browser zurück und fahren Sie dort mit der Anmeldung fort. ",staleCodeMessage:"Diese Seite ist nicht mehr gültig, bitte kehren Sie zu Ihrer Applikation zurük und melden Sie sich erneut an.",realmSupportsNoCredentialsMessage:"Realm unterstützt keine Credential Typen.",credentialSetupRequired:"Anmeldung nicht möglich, Einrichtung der Anmeldeinformationen erforderlich.",identityProviderNotUniqueMessage:"Der Realm unterstützt mehrere Identity Provider. Es konnte kein eindeutiger Identity Provider zum Authentifizieren gewählt werden.",emailVerifiedMessage:"Ihre E-Mail-Adresse wurde erfolgreich verifiziert.",staleEmailVerificationLink:"Der von Ihnen angeklickte Link ist nicht mehr gültig. Haben Sie Ihre E-Mail-Adresse eventuell bereits verifiziert?",identityProviderAlreadyLinkedMessage:"Die Identität welche von dem Identity Provider zurückgegeben wurde ist bereits mit einem anderen Benutzer verknüpft.",confirmAccountLinking:"Bestätigen Sie den Account {0} des Identity Provider {1} mit Ihrem Account zu verknüpfen.",confirmEmailAddressVerification:"Bestätigen Sie, dass die E-Mail-Adresse {0} gültig ist.",confirmExecutionOfActions:"Führen Sie die folgende(n) Aktion(en) aus",backToApplication:"« Zurück zur Applikation",missingParameterMessage:"Fehlender Parameter: {0}",clientNotFoundMessage:"Client nicht gefunden.",clientDisabledMessage:"Client deaktiviert.",invalidParameterMessage:"Ungültiger 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ültig.",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","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Wiederherstellungscodes einrichten","requiredAction.webauthn-register-passwordless":"Kennwortlose Authentifizierung einrichten",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ätigen:","console-update-password":"Eine Aktualisierung Ihres Passworts ist erforderlich.","console-verify-email":"Sie müssen Ihre E-Mail-Adresse verifizieren. Wir haben eine E-Mail an {0} gesendet, die einen Verifizierungscode enthält. 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.scope.user_info":"Nutzerinformation","openshift.scope.user_check-access":"Benutzerzugriffsinformationen","openshift.scope.user_full":"Voller Zugriff","openshift.scope.list-projects":"Projekte auflisten","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äche unten, um fortzufahren. ","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.","error-reset-otp-missing-id":"Bitte wählen Sie eine OTP Konfiguration aus.","auth-recovery-authn-code-form-display-name":"Wiederherstellungscode","auth-recovery-authn-code-form-help-text":"Geben Sie einen Wiederherstellungscode aus einer zuvor erstellten Liste ein.","auth-recovery-code-info-message":"Geben Sie den angegebenen Wiederherstellungscode ein.","auth-recovery-code-prompt":"Wiederherstellungscode #{0}","auth-recovery-code-header":"Anmeldung mit einem Wiederherstellungscode","recovery-codes-error-invalid":"Ungültiger Wiederherstellungscode","recovery-code-config-header":"Wiederherstellungscode","recovery-code-config-warning-title":"Diese Wiederherstellungscodes werden nach Verlassen dieser Seite nicht mehr angezeigt","recovery-code-config-warning-message":"Drucken Sie sie aus, laden Sie sie herunter oder kopieren Sie sie in einen Passwort-Manager und speichern Sie sie. Wenn Sie diese Einrichtung abbrechen, werden die Wiederherstellungscodes von Ihrem Konto entfernt.","recovery-codes-print":"Drucken","recovery-codes-download":"Herunterladen","recovery-codes-copy":"Kopieren","recovery-codes-copied":"Kopiert","recovery-codes-confirmation-message":"Ich habe diese Codes an einem sicheren Ort gespeichert","recovery-codes-action-complete":"Fertigstellen","recovery-codes-action-cancel":"Abbrechen","recovery-codes-download-file-header":"Bewahren Sie diese Wiederherstellungscodes an einem sicheren Ort auf.","recovery-codes-download-file-description":"Wiederherstellungscodes sind einmalig verwendbare Passwörter, mit denen Sie sich bei Ihrem Konto anmelden können, wenn Sie keinen Zugriff auf Ihren Authentifikator haben.","recovery-codes-download-file-date":"Diese Codes wurden generiert am","recovery-codes-label-default":"Wiederherstellungscodes","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ügbare Authentifikatoren","webauthn-unsupported-browser-text":"WebAuthn wird von diesem Browser nicht unterstützt. Versuchen Sie es mit einem anderen oder wenden Sie sich an Ihren Administrator.","webauthn-doAuthenticate":"Anmelden mit Security-Token","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ültig.
{0}","webauthn-error-register-verification":"Das Ergebnis der Security-Token Registrierung ist ungültig.
{0}","webauthn-error-user-not-found":"Unbekannter Benutzer, der mit dem Security-Token authentifiziert wurde.","identity-provider-redirector":"Mit einem anderen Indentitätsprovider verbinden","identity-provider-login-label":"Oder anmelden mit","idp-email-verification-display-name":"E-Mail Verifizierung","idp-email-verification-help-text":"Bestätigen Sie Ihr Benutzerkonto über den Empfang einer E-Mail","idp-username-password-form-display-name":"Passwort Verifizierung","idp-username-password-form-help-text":"Bestätigen Sie Ihr Benutzerkonto mit Benutzername und Passwort",finalDeletionConfirmation:"Wenn Sie Ihr Konto löschen, kann es nicht wiederhergestellt werden. Um Ihr Konto zu behalten, klicken Sie auf Abbrechen.",irreversibleAction:"Diese Aktion ist unwiderruflich",deleteAccountConfirm:"Löschung des Kontos bestätigen",deletingImplies:"Die Löschung Ihres Kontos bedeutet:",errasingData:"Löschen aller Ihrer Daten",loggingOutImmediately:"Sofortige Abmeldung",accountUnusable:"Eine spätere Nutzung der Anwendung ist mit diesem Konto nicht mehr möglich",userDeletedSuccessfully:"Nutzer erfolgreich gelöscht","access-denied":"Zugriff verweigert","frontchannel-logout.title":"Abmelden","frontchannel-logout.message":"Sie melden sich von folgenden Anwendungen ab",logoutConfirmTitle:"Abmelden",logoutConfirmHeader:"Wollen Sie sich abmelden?",doLogout:"Abmelden",readOnlyUsernameMessage:"Sie können Ihren Benutzernamen nicht ändern, da er schreibgeschützt ist."}}}]); \ No newline at end of file diff --git a/487.9fc73fb0.iframe.bundle.js b/487.9fc73fb0.iframe.bundle.js deleted file mode 100644 index 7379a392..00000000 --- a/487.9fc73fb0.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[487],{"./dist/login/i18n/baseMessages/de.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Anmelden",doRegister:"Registrieren",doCancel:"Abbrechen",doSubmit:"Absenden",doBack:"Zurück",doYes:"Ja",doNo:"Nein",doContinue:"Weiter",doIgnore:"Ignorieren",doAccept:"Annehmen",doDecline:"Ablehnen",doForgotPassword:"Passwort vergessen?",doClickHere:"Hier klicken",doImpersonate:"Identitätswechsel",doTryAgain:"Erneut versuchen",doTryAnotherWay:"Einen anderen Weg versuchen",doConfirmDelete:"Löschung bestätigen",errorDeletingAccount:"Beim Löschen des Kontos ist ein Fehler aufgetreten",deletingAccountForbidden:"Sie haben nicht genügend Berechtigungen, um Ihr eigenes Konto zu löschen, 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ür eine Anmeldung mit Kerberos konfiguriert. Bitte klicken Sie auf Weiter, damit Sie sich auf eine andere Art anmelden können",kerberosNotSetUp:"Kerberos ist nicht konfiguriert. Sie können sich damit nicht anmelden.",registerTitle:"Registrierung",loginAccountTitle:"Bei Ihrem Konto anmelden",loginTitle:"Anmeldung bei {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Identitätswechsel",impersonateTitleHtml:"{0} Identitätswechsel",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.",reauthenticate:"Zum Fortsetzen bitte erneut anmelden",oauthGrantTitle:"OAuth gewähren",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ützt",browserRequired:"Browser für die Anmeldung erforderlich",browserContinue:"Browser erforderlich, um die Anmeldung abzuschließen",browserContinuePrompt:"Browser öffnen und Anmeldung fortsetzen? [y/n]:",browserContinueAnswer:"y",termsTitle:"Bedingungen und Konditionen",termsTitleHtml:"Bedingungen und Konditionen",termsText:"

Zu definierende Bedingungen und Konditionen

",recaptchaFailed:"Ungültiges 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ätigen",passwordNew:"Neues Passwort",passwordNewConfirm:"Neues Passwort bestätigen",rememberMe:"Angemeldet bleiben",authenticatorCode:"One-time Code",address:"Adresse",street:"Straße",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äten 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üssen einen One Time Passwort-Generator einrichten, um auf dieses Konto zugreifen zu können.",loginTotpStep1:"Installieren Sie eine der folgenden Applikationen auf Ihrem Smartphone:",loginTotpStep2:"Öffnen Sie die Applikation und scannen Sie den QR-Code.",loginTotpStep3:"Geben Sie den von der Applikation generierten One-time Code ein und klicken Sie auf Absenden.",loginTotpStep3DeviceName:"Geben Sie einen Gerätenamen an, um die Verwaltung Ihrer OTP-Geräte zu erleichtern.",loginTotpManualStep2:"Öffnen Sie die Applikation und geben Sie den folgenden Schlüssel ein.",loginTotpManualStep3:"Verwenden Sie die folgenden Konfigurationswerte, falls Sie diese für die Applikation anpassen können:",loginTotpUnableToScan:"Sie können den QR-Code nicht scannen?",loginTotpScanBarcode:"QR-Code scannen?",loginCredential:"Anmeldeinformation",loginOtpOneTime:"One-time code",loginTotpType:"Typ",loginTotpAlgorithm:"Algorithmus",loginTotpDigits:"Ziffern",loginTotpInterval:"Intervall",loginTotpCounter:"Zähler",loginTotpDeviceName:"Gerätename","loginTotp.totp":"zeitbasiert (time-based)","loginTotp.hotp":"zählerbasiert (counter-based)",loginChooseAuthenticator:"Login Methode auswählen",oauthGrantRequest:"Wollen Sie diese Zugriffsrechte gewähren?",inResource:"in",emailVerifyInstruction1:"Eine E-Mail mit weiteren Anweisungen wurde an Sie versendet.",emailVerifyInstruction2:"Falls Sie keine E-Mail erhalten haben, dann können Sie",emailVerifyInstruction3:"um eine neue E-Mail versenden zu lassen.",emailLinkIdpTitle:"{0} verknüpfen",emailLinkIdp1:"Eine E-Mail mit weiteren Anweisungen um {0} Konto {1} mit Ihrem {2} Konto zu verknüpfen 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ück 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.",emailInstructionUsername:"Geben Sie Ihren Benutzernamen 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ügen ihn in die Applikation ein:",pageExpiredTitle:"Diese Seite ist nicht mehr gültig.",pageExpiredMsg1:"Um den Anmeldevorgang neu zu starten",pageExpiredMsg2:"Um den Anmeldevorgang fortzusetzen",personalInfo:"Persönliche 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ötigte Felder",invalidUserMessage:"Ungültiger Benutzername oder Passwort.",invalidUsernameMessage:"Ungültiger Benutzername.",invalidUsernameOrEmailMessage:"Ungültiger Benutzername oder E-Mail.",invalidPasswordMessage:"Ungültiges Passwort.",invalidEmailMessage:"Ungültige E-Mail-Adresse.",accountDisabledMessage:"Ihr Benutzerkonto ist gesperrt, bitte kontaktieren Sie den Admin.",accountTemporarilyDisabledMessage:"Ihr Benutzerkonto ist temporär gesperrt. Bitte kontaktieren Sie den Admin oder versuchen Sie es später noch einmal.",expiredCodeMessage:"Zeitüberschreitung bei der Anmeldung. Bitte melden Sie sich erneut an.",expiredActionMessage:"Die Aktion ist nicht mehr gültig. Bitte fahren Sie nun mit der Anmeldung fort.",expiredActionTokenNoSessionMessage:"Die Aktion ist nicht mehr gültig.",expiredActionTokenSessionExistsMessage:"Die Aktion ist nicht mehr gültig. 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ätenamen ein.",notMatchPasswordMessage:"Passwörter sind nicht identisch.",invalidPasswordExistingMessage:"Das aktuelle Passwort ist ungültig.",invalidPasswordBlacklistedMessage:"Ungültiges Passwort: Das Passwort steht auf der Blockliste (schwarzen Liste).",invalidPasswordConfirmMessage:"Die Passwortbestätigung ist nicht identisch.",invalidTotpMessage:"Ungültiger 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üpfen.",confirmLinkIdpTitle:"Das Benutzerkonto existiert bereits.",federatedIdentityConfirmLinkMessage:"Ein Benutzer mit {0} {1} existiert bereits. Wie möchten Sie fortfahren?",federatedIdentityConfirmReauthenticateMessage:"Anmelden um das Benutzerkonto mit {0} zu verknüpfen",nestedFirstBrokerFlowMessage:"Der {0} Benutzer {1} ist mit keinem bekannten Benutzer verknüpfen.",confirmLinkIdpReviewProfile:"Benutzerkonto überprüfen",confirmLinkIdpContinue:"Zu einem bestehenden Benutzerkonto hinzufügen",configureTotpMessage:"Sie müssen eine Mehrfachauthentifizierung einrichten, um das Benutzerkonto zu aktivieren.",updateProfileMessage:"Sie müssen Ihr Benutzerkonto aktualisieren, um das Benutzerkonto zu aktivieren.",updatePasswordMessage:"Sie müssen Ihr Passwort ändern, um das Benutzerkonto zu aktivieren.",resetPasswordMessage:"Sie müssen Ihr Passwort ändern.",verifyEmailMessage:"Sie müssen Ihre E-Mail-Adresse verifizieren, um das Benutzerkonto zu aktivieren.",linkIdpMessage:"Sie müssen Ihre E-Mail-Adresse verifizieren, um Ihr Benutzerkonto mit {0} zu verknüpfen.",emailSentMessage:"Sie sollten in Kürze eine E-Mail mit weiteren Instruktionen erhalten.",emailSendErrorMessage:"Die E-Mail konnte nicht versendet werden. Bitte versuchen Sie es später nochmal einmal.",accountUpdatedMessage:"Ihr Benutzerkonto wurde aktualisiert.",accountPasswordUpdatedMessage:"Ihr Passwort wurde aktualisiert.",delegationCompleteHeader:"Login Erfolgreich",delegationCompleteMessage:"Sie können dieses Browserfenster schließen und zu Ihrer Konsolenanwendung zurückkehren.",delegationFailedHeader:"Login Fehlgeschlagen",delegationFailedMessage:"Sie können dieses Browserfenster schließen und zu Ihrer Konsolenanwendung zurückkehren und versuchen, sich erneut anzumelden.",noAccessMessage:"Kein Zugriff",invalidPasswordMinLengthMessage:"Ungültiges Passwort: Es muss mindestens {0} Zeichen lang sein.",invalidPasswordMinDigitsMessage:"Ungültiges Passwort: Es muss mindestens {0} Zahl(en) beinhalten.",invalidPasswordMinLowerCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Kleinbuchstaben beinhalten.",invalidPasswordMinUpperCaseCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Großbuchstaben beinhalten.",invalidPasswordMinSpecialCharsMessage:"Ungültiges Passwort: Es muss mindestens {0} Sonderzeichen beinhalten.",invalidPasswordNotUsernameMessage:"Ungültiges Passwort: Es darf nicht gleich sein wie der Benutzername.",invalidPasswordNotEmailMessage:"Ungültiges Passwort: darf nicht identisch mit der E-Mail-Adresse sein.",invalidPasswordRegexPatternMessage:"Ungültiges Passwort: Es entspricht nicht dem Regex-Muster.",invalidPasswordHistoryMessage:"Ungültiges Passwort: Es darf nicht einem der letzten {0} Passwörter entsprechen.",invalidPasswordGenericMessage:"Ungültiges Passwort: Es verletzt die Passwort-Richtlinien.",failedToProcessResponseMessage:"Konnte Antwort nicht verarbeiten.",httpsRequiredMessage:"HTTPS erforderlich.",realmNotEnabledMessage:"Realm nicht aktiviert.",invalidRequestMessage:"Ungültiger Request.",successLogout:"Sie sind abgemeldet.",failedLogout:"Logout fehlgeschlagen.",unknownLoginRequesterMessage:"Ungültiger Login Requester.",loginRequesterNotEnabledMessage:"Login Requester nicht aktiviert.",bearerOnlyMessage:"Bearer-only Clients können sich nicht via Browser anmelden.",standardFlowDisabledMessage:"Client darf sich mit diesem response_type nicht via Browser anmelden. Standard Flow ist für diesen Client deaktiviert.",implicitFlowDisabledMessage:"Client darf sich mit diesem response_type nicht via Browser anmelden. Implicit Flow ist für diesen Client deaktiviert.",invalidRedirectUriMessage:"Ungültige Redirect Uri.",unsupportedNameIdFormatMessage:"Nicht unterstütztes NameIDFormat.",invalidRequesterMessage:"Ungültiger Requester.",registrationNotAllowedMessage:"Registrierung nicht erlaubt.",resetCredentialNotAllowedMessage:"Reset Credential nicht erlaubt.",permissionNotApprovedMessage:"Berechtigung nicht bestätigt.",noRelayStateInResponseMessage:"Kein Relay State in der Antwort von Identity Provider.",insufficientPermissionMessage:"Nicht genügend Rechte, um die Identität zu verknüpfen.",couldNotProceedWithAuthenticationRequestMessage:"Konnte die Authentifizierungsanfrage nicht weiter verarbeiten.",couldNotObtainTokenMessage:"Konnte kein Token vom Identity Provider erhalten.",unexpectedErrorRetrievingTokenMessage:"Unerwarteter Fehler während dem Empfang des Tokens vom Identity Provider.",unexpectedErrorHandlingResponseMessage:"Unerwarteter Fehler während der Bearbeitung der Antwort vom Identity Provider.",identityProviderAuthenticationFailedMessage:"Authentifizierung fehlgeschlagen. Authentifizierung mit dem Identity Provider nicht möglich.",couldNotSendAuthenticationRequestMessage:"Konnte Authentifizierungsanfrage nicht an den Identity Provider senden.",unexpectedErrorHandlingRequestMessage:"Unerwarteter Fehler während der Bearbeitung der Anfrage an den Identity Provider.",invalidAccessCodeMessage:"Ungültiger Access-Code.",sessionNotActiveMessage:"Session nicht aktiv.",invalidCodeMessage:"Ungültiger Code, bitte melden Sie sich erneut über die Applikation an.",cookieNotFoundMessage:"Cookie konnte nicht gefunden werden. Bitte stellen Sie sicher, dass Cookies in Ihrem Browser aktiviert sind.",identityProviderUnexpectedErrorMessage:"Unerwarteter Fehler während der Authentifizierung mit dem Identity Provider.",identityProviderMissingStateMessage:"Fehlender state Parameter in der Antwort vom Identitätsanbieter.",identityProviderNotFoundMessage:"Konnte keinen Identity Provider zu der Identität finden.",identityProviderLinkSuccess:"Sie haben Ihre E-Mail-Adresse erfolgreich verifiziert. Bitte kehren Sie zu Ihrem ursprünglichen Browser zurück und fahren Sie dort mit der Anmeldung fort. ",staleCodeMessage:"Diese Seite ist nicht mehr gültig, bitte kehren Sie zu Ihrer Applikation zurük und melden Sie sich erneut an.",realmSupportsNoCredentialsMessage:"Realm unterstützt keine Credential Typen.",credentialSetupRequired:"Anmeldung nicht möglich, Einrichtung der Anmeldeinformationen erforderlich.",identityProviderNotUniqueMessage:"Der Realm unterstützt mehrere Identity Provider. Es konnte kein eindeutiger Identity Provider zum Authentifizieren gewählt werden.",emailVerifiedMessage:"Ihre E-Mail-Adresse wurde erfolgreich verifiziert.",staleEmailVerificationLink:"Der von Ihnen angeklickte Link ist nicht mehr gültig. Haben Sie Ihre E-Mail-Adresse eventuell bereits verifiziert?",identityProviderAlreadyLinkedMessage:"Die Identität welche von dem Identity Provider zurückgegeben wurde ist bereits mit einem anderen Benutzer verknüpft.",confirmAccountLinking:"Bestätigen Sie den Account {0} des Identity Provider {1} mit Ihrem Account zu verknüpfen.",confirmEmailAddressVerification:"Bestätigen Sie, dass die E-Mail-Adresse {0} gültig ist.",confirmExecutionOfActions:"Führen Sie die folgende(n) Aktion(en) aus",backToApplication:"« Zurück zur Applikation",missingParameterMessage:"Fehlender Parameter: {0}",clientNotFoundMessage:"Client nicht gefunden.",clientDisabledMessage:"Client deaktiviert.",invalidParameterMessage:"Ungültiger 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ültig.",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","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Wiederherstellungscodes einrichten","requiredAction.webauthn-register-passwordless":"Kennwortlose Authentifizierung einrichten",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ätigen:","console-update-password":"Eine Aktualisierung Ihres Passworts ist erforderlich.","console-verify-email":"Sie müssen Ihre E-Mail-Adresse verifizieren. Wir haben eine E-Mail an {0} gesendet, die einen Verifizierungscode enthält. 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.scope.user_info":"Nutzerinformation","openshift.scope.user_check-access":"Benutzerzugriffsinformationen","openshift.scope.user_full":"Voller Zugriff","openshift.scope.list-projects":"Projekte auflisten","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äche unten, um fortzufahren. ","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.","auth-recovery-authn-code-form-display-name":"Wiederherstellungscode","auth-recovery-authn-code-form-help-text":"Geben Sie einen Wiederherstellungscode aus einer zuvor erstellten Liste ein.","auth-recovery-code-info-message":"Geben Sie den angegebenen Wiederherstellungscode ein.","auth-recovery-code-prompt":"Wiederherstellungscode #{0}","auth-recovery-code-header":"Anmeldung mit einem Wiederherstellungscode","recovery-codes-error-invalid":"Ungültiger Wiederherstellungscode","recovery-code-config-header":"Wiederherstellungscode","recovery-code-config-warning-title":"Diese Wiederherstellungscodes werden nach Verlassen dieser Seite nicht mehr angezeigt","recovery-code-config-warning-message":"Drucken Sie sie aus, laden Sie sie herunter oder kopieren Sie sie in einen Passwort-Manager und speichern Sie sie. Wenn Sie diese Einrichtung abbrechen, werden die Wiederherstellungscodes von Ihrem Konto entfernt.","recovery-codes-print":"Drucken","recovery-codes-download":"Herunterladen","recovery-codes-copy":"Kopieren","recovery-codes-copied":"Kopiert","recovery-codes-confirmation-message":"Ich habe diese Codes an einem sicheren Ort gespeichert","recovery-codes-action-complete":"Fertigstellen","recovery-codes-action-cancel":"Abbrechen","recovery-codes-download-file-header":"Bewahren Sie diese Wiederherstellungscodes an einem sicheren Ort auf.","recovery-codes-download-file-description":"Wiederherstellungscodes sind einmalig verwendbare Passwörter, mit denen Sie sich bei Ihrem Konto anmelden können, wenn Sie keinen Zugriff auf Ihren Authentifikator haben.","recovery-codes-download-file-date":"Diese Codes wurden generiert am","recovery-codes-label-default":"Wiederherstellungscodes","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ügbare Authentifikatoren","webauthn-unsupported-browser-text":"WebAuthn wird von diesem Browser nicht unterstützt. Versuchen Sie es mit einem anderen oder wenden Sie sich an Ihren Administrator.","webauthn-doAuthenticate":"Anmelden mit Security-Token","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ültig.
{0}","webauthn-error-register-verification":"Das Ergebnis der Security-Token Registrierung ist ungültig.
{0}","webauthn-error-user-not-found":"Unbekannter Benutzer, der mit dem Security-Token authentifiziert wurde.","identity-provider-redirector":"Mit einem anderen Indentitätsprovider verbinden","identity-provider-login-label":"Oder anmelden mit","idp-email-verification-display-name":"E-Mail Verifizierung","idp-email-verification-help-text":"Bestätigen Sie Ihr Benutzerkonto über den Empfang einer E-Mail","idp-username-password-form-display-name":"Passwort Verifizierung","idp-username-password-form-help-text":"Bestätigen Sie Ihr Benutzerkonto mit Benutzername und Passwort",finalDeletionConfirmation:"Wenn Sie Ihr Konto löschen, kann es nicht wiederhergestellt werden. Um Ihr Konto zu behalten, klicken Sie auf Abbrechen.",irreversibleAction:"Diese Aktion ist unwiderruflich",deleteAccountConfirm:"Löschung des Kontos bestätigen",deletingImplies:"Die Löschung Ihres Kontos bedeutet:",errasingData:"Löschen aller Ihrer Daten",loggingOutImmediately:"Sofortige Abmeldung",accountUnusable:"Eine spätere Nutzung der Anwendung ist mit diesem Konto nicht mehr möglich",userDeletedSuccessfully:"Nutzer erfolgreich gelöscht","access-denied":"Zugriff verweigert","frontchannel-logout.title":"Abmelden","frontchannel-logout.message":"Sie melden sich von folgenden Anwendungen ab",logoutConfirmTitle:"Abmelden",logoutConfirmHeader:"Wollen Sie sich abmelden?",doLogout:"Abmelden",readOnlyUsernameMessage:"Sie können Ihren Benutzernamen nicht ändern, da er schreibgeschützt ist."}}}]); \ No newline at end of file diff --git a/4950.6ca1f81b.iframe.bundle.js b/4950.6ca1f81b.iframe.bundle.js deleted file mode 100644 index 9ad99374..00000000 --- a/4950.6ca1f81b.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4950],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginConfigTotp.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginConfigTotp});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginConfigTotp(props){var _a,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,isAppInitiatedAction=kcContext.isAppInitiatedAction,totp=kcContext.totp,mode=kcContext.mode,messagesPerField=kcContext.messagesPerField,msg=i18n.msg,msgStr=i18n.msgStr,algToKeyUriAlg={HmacSHA1:"SHA1",HmacSHA256:"SHA256",HmacSHA512:"SHA512"};return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginTotpTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("ol",Object.assign({id:"kc-totp-settings"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep1")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",Object.assign({id:"kc-totp-supported-apps"},{children:totp.supportedApplications.map((function(app){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",{children:msg(app)})}))}))]}),mode&&"manual"==mode?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpManualStep2")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"kc-totp-secret-key"},{children:totp.totpSecretEncoded}))}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:totp.qrUrl,id:"mode-barcode"},{children:msg("loginTotpScanBarcode")}))})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpManualStep3")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("ul",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-type"},{children:[msg("loginTotpType"),": ",msg("loginTotp."+totp.policy.type)]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-algorithm"},{children:[msg("loginTotpAlgorithm"),": ",null!==(_a=null==algToKeyUriAlg?void 0:algToKeyUriAlg[totp.policy.algorithm])&&void 0!==_a?_a:totp.policy.algorithm]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-digits"},{children:[msg("loginTotpDigits"),": ",totp.policy.digits]})),"totp"===totp.policy.type?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-period"},{children:[msg("loginTotpInterval"),": ",totp.policy.period]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-counter"},{children:[msg("loginTotpCounter"),": ",totp.policy.initialCounter]}))]})})]})]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep2")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("img",{id:"kc-totp-secret-qr-code",src:"data:image/png;base64, "+totp.totpSecretQrCode,alt:"Figure: Barcode"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:totp.manualUrl,id:"mode-manual"},{children:msg("loginTotpUnableToScan")}))})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep3")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep3DeviceName")})]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("form",Object.assign({action:url.loginAction,className:getClassName("kcFormClass"),id:"kc-totp-settings-form",method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"totp",className:getClassName("kcLabelClass")},{children:msg("authenticatorCode")}))," ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"text",id:"totp",name:"totp",autoComplete:"off",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("totp")}),messagesPerField.existsError("totp")&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"input-error-otp-code",className:getClassName("kcInputErrorMessageClass"),"aria-live":"polite"},{children:messagesPerField.get("totp")}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"totpSecret",name:"totpSecret",value:totp.totpSecret}),mode&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"mode",value:mode})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"userLabel",className:getClassName("kcLabelClass")},{children:msg("loginTotpDeviceName")}))," ",totp.otpCredentials.length>=1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"text",id:"userLabel",name:"userLabel",autoComplete:"off",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("userLabel")}),messagesPerField.existsError("userLabel")&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"input-error-otp-label",className:getClassName("kcInputErrorMessageClass"),"aria-live":"polite"},{children:messagesPerField.get("userLabel")}))]}))]})),isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),id:"saveTOTPBtn",value:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass"),getClassName("kcButtonLargeClass")),id:"cancelTOTPBtn",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),id:"saveTOTPBtn",value:msgStr("doSubmit")})]}))]})}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/4950.d1d44b30.iframe.bundle.js b/4950.d1d44b30.iframe.bundle.js new file mode 100644 index 00000000..eaca1857 --- /dev/null +++ b/4950.d1d44b30.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[4950],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginConfigTotp.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginConfigTotp});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginConfigTotp(props){var _a,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,isAppInitiatedAction=kcContext.isAppInitiatedAction,totp=kcContext.totp,mode=kcContext.mode,messagesPerField=kcContext.messagesPerField,msg=i18n.msg,msgStr=i18n.msgStr,algToKeyUriAlg={HmacSHA1:"SHA1",HmacSHA256:"SHA256",HmacSHA512:"SHA512"};return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginTotpTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("ol",Object.assign({id:"kc-totp-settings"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep1")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",Object.assign({id:"kc-totp-supported-apps"},{children:totp.supportedApplications.map((function(app){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",{children:msg(app)})}))}))]}),mode&&"manual"==mode?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpManualStep2")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"kc-totp-secret-key"},{children:totp.totpSecretEncoded}))}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:totp.qrUrl,id:"mode-barcode"},{children:msg("loginTotpScanBarcode")}))})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpManualStep3")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("ul",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-type"},{children:[msg("loginTotpType"),": ",msg("loginTotp."+totp.policy.type)]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-algorithm"},{children:[msg("loginTotpAlgorithm"),": ",null!==(_a=null==algToKeyUriAlg?void 0:algToKeyUriAlg[totp.policy.algorithm])&&void 0!==_a?_a:totp.policy.algorithm]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-digits"},{children:[msg("loginTotpDigits"),": ",totp.policy.digits]})),"totp"===totp.policy.type?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-period"},{children:[msg("loginTotpInterval"),": ",totp.policy.period]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",Object.assign({id:"kc-totp-counter"},{children:[msg("loginTotpCounter"),": ",totp.policy.initialCounter]}))]})})]})]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep2")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("img",{id:"kc-totp-secret-qr-code",src:"data:image/png;base64, "+totp.totpSecretQrCode,alt:"Figure: Barcode"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("br",{}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:totp.manualUrl,id:"mode-manual"},{children:msg("loginTotpUnableToScan")}))})]}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("li",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep3")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("p",{children:msg("loginTotpStep3DeviceName")})]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("form",Object.assign({action:url.loginAction,className:getClassName("kcFormClass"),id:"kc-totp-settings-form",method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"totp",className:getClassName("kcLabelClass")},{children:msg("authenticatorCode")}))," ",(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"text",id:"totp",name:"totp",autoComplete:"off",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("totp")}),messagesPerField.existsError("totp")&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"input-error-otp-code",className:getClassName("kcInputErrorMessageClass"),"aria-live":"polite"},{children:messagesPerField.get("totp")}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"totpSecret",name:"totpSecret",value:totp.totpSecret}),mode&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",id:"mode",value:mode})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"userLabel",className:getClassName("kcLabelClass")},{children:msg("loginTotpDeviceName")}))," ",totp.otpCredentials.length>=1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"text",id:"userLabel",name:"userLabel",autoComplete:"off",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("userLabel")}),messagesPerField.existsError("userLabel")&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({id:"input-error-otp-label",className:getClassName("kcInputErrorMessageClass"),"aria-live":"polite"},{children:messagesPerField.get("userLabel")}))]}))]})),isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),id:"saveTOTPBtn",value:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("button",Object.assign({type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass"),getClassName("kcButtonLargeClass")),id:"cancelTOTPBtn",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"submit",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),id:"saveTOTPBtn",value:msgStr("doSubmit")})]}))]})}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/500.33ce351b.iframe.bundle.js b/500.33ce351b.iframe.bundle.js new file mode 100644 index 00000000..b8ae8b1c --- /dev/null +++ b/500.33ce351b.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[500],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/UpdateEmail.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>UpdateEmail});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function UpdateEmail(props){var _a,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction,email=kcContext.email;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("updateEmailTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-update-email-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",name:"email",defaultValue:null!==(_a=email.value)&&void 0!==_a?_a:"",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("email")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/500.d663255e.iframe.bundle.js b/500.d663255e.iframe.bundle.js deleted file mode 100644 index f528b04e..00000000 --- a/500.d663255e.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[500],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/UpdateEmail.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>UpdateEmail});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function UpdateEmail(props){var _a,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction,email=kcContext.email;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("updateEmailTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-update-email-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",name:"email",defaultValue:null!==(_a=email.value)&&void 0!==_a?_a:"",className:getClassName("kcInputClass"),"aria-invalid":messagesPerField.existsError("email")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5025.c64d5443.iframe.bundle.js b/5025.c64d5443.iframe.bundle.js deleted file mode 100644 index c4b798c4..00000000 --- a/5025.c64d5443.iframe.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 5025.c64d5443.iframe.bundle.js.LICENSE.txt */ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5025],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginOtp.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOtp});__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.async-iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.math.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.json.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.object.create.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.object.set-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_24__=__webpack_require__("./node_modules/react/index.js"),_tools_headInsert__WEBPACK_IMPORTED_MODULE_25__=__webpack_require__("./dist/tools/headInsert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_26__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_27__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _regeneratorRuntime(){_regeneratorRuntime=function _regeneratorRuntime(){return exports};var exports={},Op=Object.prototype,hasOwn=Op.hasOwnProperty,defineProperty=Object.defineProperty||function(obj,key,desc){obj[key]=desc.value},$Symbol="function"==typeof Symbol?Symbol:{},iteratorSymbol=$Symbol.iterator||"@@iterator",asyncIteratorSymbol=$Symbol.asyncIterator||"@@asyncIterator",toStringTagSymbol=$Symbol.toStringTag||"@@toStringTag";function define(obj,key,value){return Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}),obj[key]}try{define({},"")}catch(err){define=function define(obj,key,value){return obj[key]=value}}function wrap(innerFn,outerFn,self,tryLocsList){var protoGenerator=outerFn&&outerFn.prototype instanceof Generator?outerFn:Generator,generator=Object.create(protoGenerator.prototype),context=new Context(tryLocsList||[]);return defineProperty(generator,"_invoke",{value:makeInvokeMethod(innerFn,self,context)}),generator}function tryCatch(fn,obj,arg){try{return{type:"normal",arg:fn.call(obj,arg)}}catch(err){return{type:"throw",arg:err}}}exports.wrap=wrap;var ContinueSentinel={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var IteratorPrototype={};define(IteratorPrototype,iteratorSymbol,(function(){return this}));var getProto=Object.getPrototypeOf,NativeIteratorPrototype=getProto&&getProto(getProto(values([])));NativeIteratorPrototype&&NativeIteratorPrototype!==Op&&hasOwn.call(NativeIteratorPrototype,iteratorSymbol)&&(IteratorPrototype=NativeIteratorPrototype);var Gp=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(IteratorPrototype);function defineIteratorMethods(prototype){["next","throw","return"].forEach((function(method){define(prototype,method,(function(arg){return this._invoke(method,arg)}))}))}function AsyncIterator(generator,PromiseImpl){function invoke(method,arg,resolve,reject){var record=tryCatch(generator[method],generator,arg);if("throw"!==record.type){var result=record.arg,value=result.value;return value&&"object"==typeof value&&hasOwn.call(value,"__await")?PromiseImpl.resolve(value.__await).then((function(value){invoke("next",value,resolve,reject)}),(function(err){invoke("throw",err,resolve,reject)})):PromiseImpl.resolve(value).then((function(unwrapped){result.value=unwrapped,resolve(result)}),(function(error){return invoke("throw",error,resolve,reject)}))}reject(record.arg)}var previousPromise;defineProperty(this,"_invoke",{value:function value(method,arg){function callInvokeWithMethodAndArg(){return new PromiseImpl((function(resolve,reject){invoke(method,arg,resolve,reject)}))}return previousPromise=previousPromise?previousPromise.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(innerFn,self,context){var state="suspendedStart";return function(method,arg){if("executing"===state)throw new Error("Generator is already running");if("completed"===state){if("throw"===method)throw arg;return doneResult()}for(context.method=method,context.arg=arg;;){var delegate=context.delegate;if(delegate){var delegateResult=maybeInvokeDelegate(delegate,context);if(delegateResult){if(delegateResult===ContinueSentinel)continue;return delegateResult}}if("next"===context.method)context.sent=context._sent=context.arg;else if("throw"===context.method){if("suspendedStart"===state)throw state="completed",context.arg;context.dispatchException(context.arg)}else"return"===context.method&&context.abrupt("return",context.arg);state="executing";var record=tryCatch(innerFn,self,context);if("normal"===record.type){if(state=context.done?"completed":"suspendedYield",record.arg===ContinueSentinel)continue;return{value:record.arg,done:context.done}}"throw"===record.type&&(state="completed",context.method="throw",context.arg=record.arg)}}}function maybeInvokeDelegate(delegate,context){var methodName=context.method,method=delegate.iterator[methodName];if(void 0===method)return context.delegate=null,"throw"===methodName&&delegate.iterator.return&&(context.method="return",context.arg=void 0,maybeInvokeDelegate(delegate,context),"throw"===context.method)||"return"!==methodName&&(context.method="throw",context.arg=new TypeError("The iterator does not provide a '"+methodName+"' method")),ContinueSentinel;var record=tryCatch(method,delegate.iterator,context.arg);if("throw"===record.type)return context.method="throw",context.arg=record.arg,context.delegate=null,ContinueSentinel;var info=record.arg;return info?info.done?(context[delegate.resultName]=info.value,context.next=delegate.nextLoc,"return"!==context.method&&(context.method="next",context.arg=void 0),context.delegate=null,ContinueSentinel):info:(context.method="throw",context.arg=new TypeError("iterator result is not an object"),context.delegate=null,ContinueSentinel)}function pushTryEntry(locs){var entry={tryLoc:locs[0]};1 in locs&&(entry.catchLoc=locs[1]),2 in locs&&(entry.finallyLoc=locs[2],entry.afterLoc=locs[3]),this.tryEntries.push(entry)}function resetTryEntry(entry){var record=entry.completion||{};record.type="normal",delete record.arg,entry.completion=record}function Context(tryLocsList){this.tryEntries=[{tryLoc:"root"}],tryLocsList.forEach(pushTryEntry,this),this.reset(!0)}function values(iterable){if(iterable){var iteratorMethod=iterable[iteratorSymbol];if(iteratorMethod)return iteratorMethod.call(iterable);if("function"==typeof iterable.next)return iterable;if(!isNaN(iterable.length)){var i=-1,next=function next(){for(;++i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName,nextLoc},"next"===this.method&&(this.arg=void 0),ContinueSentinel}},exports}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function LoginOtp(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_27__.v)({doUseDefaultCss,classes}).getClassName,otpLogin=kcContext.otpLogin,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react__WEBPACK_IMPORTED_MODULE_24__.useEffect)((function(){var isCleanedUp=!1,_headInsert=(0,_tools_headInsert__WEBPACK_IMPORTED_MODULE_25__.t)({type:"javascript",src:kcContext.url.resourcesCommonPath+"/node_modules/jquery/dist/jquery.min.js"}),prLoaded=_headInsert.prLoaded,remove=_headInsert.remove;return function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise((function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value)}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err)}_next(void 0)}))}}(_regeneratorRuntime().mark((function _callee(){return _regeneratorRuntime().wrap((function _callee$(_context){for(;;)switch(_context.prev=_context.next){case 0:return _context.next=2,prLoaded;case 2:if(!isCleanedUp){_context.next=4;break}return _context.abrupt("return");case 4:$(document).ready((function(){$(".card-pf-view-single-select").click((function(){$(this).hasClass("active")?($(this).removeClass("active"),$(this).children().removeAttr("name")):($(".card-pf-view-single-select").removeClass("active"),$(".card-pf-view-single-select").children().removeAttr("name"),$(this).addClass("active"),$(this).children().attr("name","selectedCredentialId"))}));var defaultCred=$(".card-pf-view-single-select")[0];defaultCred&&defaultCred.click()}));case 5:case"end":return _context.stop()}}),_callee)})))(),function(){isCleanedUp=!0,remove()}}),[]),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("doLogIn")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)("form",Object.assign({id:"kc-otp-login-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[otpLogin.userOtpCredentials.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:otpLogin.userOtpCredentials.map((function(otpCredential){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)("div",Object.assign({className:getClassName("kcSelectOTPListClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("input",{type:"hidden",value:"${otpCredential.id}"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)("div",Object.assign({className:getClassName("kcSelectOTPListItemClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("span",{className:getClassName("kcAuthenticatorOtpCircleClass")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("h2",Object.assign({className:getClassName("kcSelectOTPItemHeadingClass")},{children:otpCredential.userLabel}))]}))]}),otpCredential.id)}))}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("label",Object.assign({htmlFor:"otp",className:getClassName("kcLabelClass")},{children:msg("loginOtpOneTime")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("input",{id:"otp",name:"otp",autoComplete:"off",type:"text",className:getClassName("kcInputClass"),autoFocus:!0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_23__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_26__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"login",id:"kc-login",type:"submit",value:msgStr("doLogIn")})}))]}))]}))}))}},"./dist/tools/HTMLElement.prototype.prepend.js":()=>{HTMLElement.prototype.prepend||(HTMLElement.prototype.prepend=function(childNode){if("string"==typeof childNode)throw new Error("Error with HTMLElement.prototype.appendFirst polyfill");this.insertBefore(childNode,this.firstChild)})},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{__webpack_require__.d(__webpack_exports__,{t:()=>headInsert});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./dist/tools/HTMLElement.prototype.prepend.js");var evt_tools_Deferred__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/evt/tools/Deferred.js");function headInsert(params){var htmlElement=document.createElement(function(){switch(params.type){case"css":return"link";case"javascript":return"script"}}()),dLoaded=new evt_tools_Deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;return htmlElement.addEventListener("load",(function(){return dLoaded.resolve()})),Object.assign(htmlElement,function(){switch(params.type){case"css":return{href:params.href,type:"text/css",rel:"stylesheet",media:"screen,print"};case"javascript":return{src:params.src,type:"text/javascript"}}}()),document.getElementsByTagName("head")[0][function(){switch(params.type){case"javascript":return"appendChild";case"css":return function(){switch(params.position){case"append":return"appendChild";case"prepend":return"prepend"}}()}}()](htmlElement),{prLoaded:dLoaded.pr,remove:function remove(){return htmlElement.remove()}}}},"./node_modules/tsafe/esm/typeGuard.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5025.caa9aaa7.iframe.bundle.js b/5025.caa9aaa7.iframe.bundle.js new file mode 100644 index 00000000..ce03d97b --- /dev/null +++ b/5025.caa9aaa7.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5025],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginOtp.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOtp});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginOtp(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_4__.v)({doUseDefaultCss,classes}).getClassName,otpLogin=kcContext.otpLogin,url=kcContext.url,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("style",{children:'\n input[type="radio"]:checked~label.kcSelectOTPListClass{\n border: 2px solid #39a5dc;\n }'}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("doLogIn")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("form",Object.assign({id:"kc-otp-login-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[otpLogin.userOtpCredentials.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:otpLogin.userOtpCredentials.map((function(otpCredential,index){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{id:"kc-otp-credential-"+index,name:"selectedCredentialId",type:"radio",value:otpCredential.id,style:{display:"none"}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"kc-otp-credential-"+index,className:getClassName("kcSelectOTPListClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcSelectOTPListItemClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcAuthenticatorOtpCircleClass")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h2",Object.assign({className:getClassName("kcSelectOTPItemHeadingClass")},{children:otpCredential.userLabel}))]}))}),otpCredential.id)]},otpCredential.id)}))}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({htmlFor:"otp",className:getClassName("kcLabelClass")},{children:msg("loginOtpOneTime")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{id:"otp",name:"otp",autoComplete:"off",type:"text",className:getClassName("kcInputClass"),autoFocus:!0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_3__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),name:"login",id:"kc-login",type:"submit",value:msgStr("doLogIn")})}))]}))]}))}))]})}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5119.6c253a5c.iframe.bundle.js b/5119.6c253a5c.iframe.bundle.js new file mode 100644 index 00000000..1dd1785b --- /dev/null +++ b/5119.6c253a5c.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5119],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Login.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Login});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i4&&getClassName("kcFormSocialAccountDoubleListClass"))},{children:social.providers.map((function(p){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("li",Object.assign({className:getClassName("kcFormSocialAccountListLinkClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("a",Object.assign({href:p.loginUrl,id:"zocial-"+p.alias,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_15__.W)("zocial",p.providerId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("span",{children:p.displayName})}))}),p.providerId)}))}))}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5119.ff9b9f95.iframe.bundle.js b/5119.ff9b9f95.iframe.bundle.js deleted file mode 100644 index d8b8da4a..00000000 --- a/5119.ff9b9f95.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5119],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Login.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Login});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_17__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i4&&getClassName("kcFormSocialAccountDoubleListClass"))},{children:social.providers.map((function(p){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("li",Object.assign({className:getClassName("kcFormSocialAccountListLinkClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("a",Object.assign({href:p.loginUrl,id:"zocial-"+p.alias,className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_15__.W)("zocial",p.providerId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_13__.jsx)("span",{children:p.displayName})}))}),p.providerId)}))}))}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5407.af98593d.iframe.bundle.js b/5407.af98593d.iframe.bundle.js new file mode 100644 index 00000000..2c784436 --- /dev/null +++ b/5407.af98593d.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5407],{"./dist/login/i18n/baseMessages/th.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"เข้าสู่ระบบ",doRegister:"ลงทะเบียน",doCancel:"ยกเลิก",doSubmit:"ส่ง",doBack:"ย้อนกลับ",doYes:"ใช่",doNo:"ไม่ใช่",doContinue:"ดำเนินการต่อ",doIgnore:"ไม่สนใจ",doAccept:"ยอมรับ",doDecline:"ปฏิเสธ",doForgotPassword:"ลืมรหัสผ่าน?",doClickHere:"คลิกที่นี่",doImpersonate:"สวมบทบาท",doTryAgain:"ลองอีกครั้ง",doTryAnotherWay:"ลองวิธีอื่น",doConfirmDelete:"ยืนยันการลบ",errorDeletingAccount:"เกิดข้อผิดพลาดขณะลบบัญชี",deletingAccountForbidden:"คุณไม่มีสิทธิ์เพียงพอในการลบบัญชีของคุณเอง ติดต่อผู้ดูแลระบบ",kerberosNotConfigured:"Kerberos ไม่ได้ถูกกำหนดค่า",kerberosNotConfiguredTitle:"Kerberos ไม่ได้ถูกกำหนดค่า",bypassKerberosDetail:'คุณไม่ได้เข้าสู่ระบบด้วย Kerberos หรือเบราว์เซอร์ของคุณไม่ได้ถูกตั้งค่าให้เข้าสู่ระบบด้วย Kerberos กรุณาคลิกที่ "ดำเนินการต่อ" เพื่อเข้าสู่ระบบโดยวิธีอื่น',kerberosNotSetUp:"Kerberos ไม่ได้ถูกตั้งค่า คุณไม่สามารถเข้าสู่ระบบได้",registerTitle:"ลงทะเบียน",loginAccountTitle:"เข้าสู่ระบบด้วยบัญชีของคุณ",loginTitle:"เข้าสู่ระบบไปยัง {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} สวมบทบาทผู้ใช้งาน",impersonateTitleHtml:"{0} สวมบทบาทผู้ใช้งาน",realmChoice:"Realm",unknownUser:"ผู้ใช้งานที่ไม่รู้จัก",loginTotpTitle:"การตั้งค่า Mobile Authenticator",loginProfileTitle:"ปรับปรุงข้อมูลบัญชีผู้ใช้งาน",loginIdpReviewProfileTitle:"ปรับปรุงข้อมูลบัญชีผู้ใช้งาน",loginTimeout:"การพยายามเข้าสู่ระบบของคุณหมดเวลา การเข้าสู่ระบบจะเริ่มต้นใหม่",reauthenticate:"กรุณาพิสูจน์ตัวจริงอีกครั้งเพื่อดำเนินการต่อ",oauthGrantTitle:"ให้อนุญาต {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"ตรวจสอบว่าคุณไว้วางใจ {0} โดยการทำความเข้าใจว่า {0} จะจัดการข้อมูลของคุณอย่างไร",oauthGrantReview:"คุณสามารถทบทวน",oauthGrantTos:"ข้อตกลงการใช้งาน",oauthGrantPolicy:"นโยบายคุ้มครองข้อมูลส่วนบุคคล",errorTitle:"เราขอโทษ...",errorTitleHtml:"เราขอโทษ ...",emailVerifyTitle:"การยืนยันอีเมล",emailForgotTitle:"ลืมรหัสผ่านของคุณ?",updateEmailTitle:"ปรับปรุงอีเมล",emailUpdateConfirmationSentTitle:"ส่งอีเมลยืนยันแล้ว",emailUpdateConfirmationSent:"อีเมลยืนยันถูกส่งไปยัง {0} คุณต้องปฏิบัติตามคำแนะนำในอีเมลเพื่อสิ้นสุดการปรับปรุงอีเมล",emailUpdatedTitle:"อีเมลถูกปรับปรุงแล้ว",emailUpdated:"อีเมลของบัญชีถูกปรับปรุงเป็น {0} เรียบร้อยแล้ว",updatePasswordTitle:"ปรับปรุงรหัสผ่าน",codeSuccessTitle:"รหัสสำเร็จ",codeErrorTitle:"รหัสข้อผิดพลาด: {0}",displayUnsupported:"ไม่สนับสนุนการแสดงผลที่ร้องขอ",browserRequired:"ต้องใช้เบราว์เซอร์ในการเข้าสู่ระบบ",browserContinue:"ต้องใช้เบราว์เซอร์ในการเข้าสู่ระบบต่อ",browserContinuePrompt:"เปิดเบราว์เซอร์และเข้าสู่ระบบต่อ? [y/n]:",browserContinueAnswer:"y",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"ภายใน",unknown:"ไม่ทราบ",termsTitle:"ข้อกำหนดและเงื่อนไข",termsText:"

ข้อกำหนดและเงื่อนไขที่จะกำหนด

",termsPlainText:"ข้อกำหนดและเงื่อนไขที่จะกำหนด",termsAcceptanceRequired:"คุณต้องยอมรับข้อกำหนดและเงื่อนไขของเรา",acceptTerms:"ฉันยอมรับข้อกำหนดและเงื่อนไข",recaptchaFailed:"Recaptcha ไม่ถูกต้อง",recaptchaNotConfigured:"ต้องใช้ Recaptcha แต่ไม่ได้กำหนดค่า",consentDenied:"การขอความยินยอมถูกปฏิเสธ",noAccount:"ผู้ใช้งานใหม่?",username:"ชื่อผู้ใช้งาน",usernameOrEmail:"ชื่อผู้ใช้งานหรืออีเมล",firstName:"ชื่อ",givenName:"ชื่อ",fullName:"ชื่อ-นามสกุล",lastName:"นามสกุล",familyName:"นามสกุล",email:"อีเมล",password:"รหัสผ่าน",passwordConfirm:"ยืนยันรหัสผ่าน",passwordNew:"รหัสผ่านใหม่",passwordNewConfirm:"ยืนยันรหัสผ่านใหม่",rememberMe:"จดจำฉันไว้",authenticatorCode:"รหัสสำหรับใช้ครั้งเดียว",address:"ที่อยู่",street:"ถนน",locality:"อำเภอ/เขต",region:"จังหวัด",postal_code:"รหัสไปรษณีย์",country:"ประเทศ",emailVerified:"อีเมลที่ยืนยันแล้ว",website:"เว็บไซต์",phoneNumber:"หมายเลขโทรศัพท์",phoneNumberVerified:"หมายเลขโทรศัพท์ที่ยืนยันแล้ว",gender:"เพศ",birthday:"วันเกิด",zoneinfo:"เขตเวลา",gssDelegationCredential:"GSS Delegation Credential",logoutOtherSessions:"ออกจากระบบจากอุปกรณ์อื่น",profileScopeConsentText:"โปรไฟล์ผู้ใช้งาน",emailScopeConsentText:"ที่อยู่อีเมล",addressScopeConsentText:"ที่อยู่",phoneScopeConsentText:"หมายเลขโทรศัพท์",offlineAccessScopeConsentText:"การเข้าถึงแบบออฟไลน์",samlRoleListScopeConsentText:"บทบาทของฉัน",rolesScopeConsentText:"บทบาทผู้ใช้งาน",restartLoginTooltip:"เริ่มการเข้าสู่ระบบใหม่",loginTotpIntro:"คุณต้องตั้งค่าอุปกรณ์สำหรับสร้างรหัสแบบใช้ครั้งเดียวเพื่อเข้าถึงบัญชีนี้",loginTotpStep1:"ติดตั้งแอปพลิเคชันใดแอปพลิเคชันหนึ่งจากรายการต่อไปนี้ลงในโทรศัพท์ของคุณ:",loginTotpStep2:"เปิดแอปพลิเคชันและสแกนบาร์โค้ด:",loginTotpStep3:'ใส่รหัสผ่านครั้งเดียวที่แอปพลิเคชันให้และคลิก "ส่ง" เพื่อสิ้นสุดการตั้งค่า',loginTotpStep3DeviceName:"กำหนดชื่ออุปกรณ์เพื่อช่วยจัดการอุปกรณ์ OTP ของคุณ",loginTotpManualStep2:"เปิดแอปพลิเคชันและใส่คีย์:",loginTotpManualStep3:"ใช้การตั้งค่าต่อไปนี้หากแอปพลิเคชันสามารถระบุการตั้งค่าได้:",loginTotpUnableToScan:"ไม่สามารถสแกนได้?",loginTotpScanBarcode:"สแกนบาร์โค้ด?",loginCredential:"Credential ข้อมูลประจำตัว",loginOtpOneTime:"รหัสสำหรับใช้ครั้งเดียว",loginTotpType:"ประเภท",loginTotpAlgorithm:"ขั้นตอนวิธี",loginTotpDigits:"หลัก",loginTotpInterval:"ช่วงเวลา",loginTotpCounter:"Counter",loginTotpDeviceName:"ชื่ออุปกรณ์","loginTotp.totp":"Time-based","loginTotp.hotp":"Counter-based",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"เลือกวิธีการเข้าสู่ระบบ",oauthGrantRequest:"คุณอนุญาตให้ใช้สิทธิ์ในการเข้าถึงเหล่านี้หรือไม่?",inResource:"ใน",oauth2DeviceVerificationTitle:"การเข้าสู่ระบบของอุปกรณ์",verifyOAuth2DeviceUserCode:'ระบุรหัสที่ได้รับจากอุปกรณ์ของคุณและคลิก "ส่ง"',oauth2DeviceInvalidUserCodeMessage:"รหัสไม่ถูกต้อง โปรดลองอีกครั้ง",oauth2DeviceExpiredUserCodeMessage:"รหัสหมดอายุแล้ว โปรดกลับไปที่อุปกรณ์ของคุณและลองเชื่อมต่ออีกครั้ง",oauth2DeviceVerificationCompleteHeader:"การเข้าสู่ระบบของอุปกรณ์สำเร็จ",oauth2DeviceVerificationCompleteMessage:"คุณสามารถปิดหน้าต่างเบราว์เซอร์นี้และกลับไปที่อุปกรณ์ของคุณ",oauth2DeviceVerificationFailedHeader:"การเข้าสู่ระบบของอุปกรณ์ล้มเหลว",oauth2DeviceVerificationFailedMessage:"คุณสามารถปิดหน้าต่างเบราว์เซอร์นี้และกลับไปที่อุปกรณ์ของคุณและลองเชื่อมต่ออีกครั้ง",oauth2DeviceConsentDeniedMessage:"การขอความยินยอมให้เชื่อมต่อกับอุปกรณ์ถูกปฏิเสธ",oauth2DeviceAuthorizationGrantDisabledMessage:"ไคลเอนต์ไม่ได้รับการยินยอมให้เริ่ม OAuth 2.0 Device Authorization Grant การทำงานนี้ถูกปิดใช้งานสำหรับไคลเอนต์",emailVerifyInstruction1:"ได้ส่งอีเมลที่มีคำแนะนำในการยืนยันที่อยู่อีเมลของคุณไปยังที่อยู่อีเมลของคุณ {0}",emailVerifyInstruction2:"ไม่ได้รับรหัสยืนยันในอีเมลของคุณ?",emailVerifyInstruction3:"เพื่อส่งอีเมลอีกครั้ง",emailLinkIdpTitle:"ลิงก์ {0}",emailLinkIdp1:"ได้ส่งอีเมลที่มีคำแนะนำในการเชื่อมโยงบัญชี {0} {1} กับ {2} บัญชีของคุณ",emailLinkIdp2:"ไม่ได้รับรหัสยืนยันในอีเมลของคุณ?",emailLinkIdp3:"เพื่อส่งอีเมลอีกครั้ง",emailLinkIdp4:"หากคุณได้ยืนยันอีเมลในบราวเซอร์อื่นแล้ว",emailLinkIdp5:"เพื่อดำเนินการต่อ",backToLogin:"« กลับไปที่การเข้าสู่ระบบ",emailInstruction:"ระบุชื่อผู้ใช้งานหรือที่อยู่อีเมลของคุณ เราจะส่งคำแนะนำในการสร้างรหัสผ่านใหม่ให้คุณ",emailInstructionUsername:"ระบุชื่อผู้ใช้งานของคุณ เราจะส่งคำแนะนำในการสร้างรหัสผ่านใหม่ให้คุณ",copyCodeInstruction:"โปรดคัดลอกและวางรหัสนี้ในแอปพลิเคชันของคุณ:",pageExpiredTitle:"หน้านี้หมดเวลาแล้ว",pageExpiredMsg1:"เพื่อเริ่มกระบวนการเข้าสู่ระบบอีกครั้ง",pageExpiredMsg2:"เพื่อดำเนินการเข้าสู่ระบบต่อ",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_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":"การจัดการ realm",client_broker:"ตัวแทน",requiredFields:"ฟิลด์ที่ต้องระบุ",invalidUserMessage:"ชื่อผู้ใช้งานหรือรหัสผ่านไม่ถูกต้อง",invalidUsernameMessage:"ชื่อผู้ใช้งานไม่ถูกต้อง",invalidUsernameOrEmailMessage:"ชื่อผู้ใช้งานหรืออีเมลไม่ถูกต้อง",invalidPasswordMessage:"รหัสผ่านไม่ถูกต้อง",invalidEmailMessage:"ที่อยู่อีเมลไม่ถูกต้อง",accountDisabledMessage:"บัญชีถูกปิดใช้งาน ติดต่อผู้ดูแลระบบของคุณ",accountTemporarilyDisabledMessage:"บัญชีถูกปิดใช้งานชั่วคราว ติดต่อผู้ดูแลระบบของคุณหรือลองใหม่ในภายหลัง",expiredCodeMessage:"การเข้าสู่ระบบหมดเวลา กรุณาเข้าสู่ระบบอีกครั้ง",expiredActionMessage:"การกระทำหมดเวลา กรุณาเข้าสู่ระบบในตอนนี้",expiredActionTokenNoSessionMessage:"การกระทำหมดเวลา",expiredActionTokenSessionExistsMessage:"การกระทำหมดเวลา กรุณาเริ่มต้นใหม่",sessionLimitExceeded:"มีเซสชันมากเกินไป",missingFirstNameMessage:"กรุณาระบุชื่อ",missingLastNameMessage:"กรุณาระบุนามสกุล",missingEmailMessage:"กรุณาระบุอีเมล",missingUsernameMessage:"กรุณาระบุชื่อผู้ใช้งาน",missingPasswordMessage:"กรุณาระบุรหัสผ่าน",missingTotpMessage:"กรุณาระบุรหัสของ authenticator",missingTotpDeviceNameMessage:"กรุณาระบุชื่ออุปกรณ์",notMatchPasswordMessage:"รหัสผ่านไม่ตรงกัน","error-invalid-value":"ค่าไม่ถูกต้อง","error-invalid-blank":"กรุณาระบุค่า","error-empty":"กรุณาระบุค่า","error-invalid-length":"ความยาวต้องอยู่ระหว่าง {1} และ {2} อักษร","error-invalid-length-too-short":"ความยาวขั้นต่ำคือ {1} อักษร","error-invalid-length-too-long":"ความยาวสูงสุดคือ {2} อักษร","error-invalid-email":"ที่อยู่อีเมลไม่ถูกต้อง","error-invalid-number":"จำนวนไม่ถูกต้อง","error-number-out-of-range":"จำนวนต้องอยู่ระหว่าง {1} และ {2}","error-number-out-of-range-too-small":"จำนวนต้องมีค่าขั้นต่ำ {1}","error-number-out-of-range-too-big":"จำนวนต้องมีค่าสูงสุด {2}","error-pattern-no-match":"ค่าไม่ถูกต้อง","error-invalid-uri":"URL ไม่ถูกต้อง","error-invalid-uri-scheme":"scheme URL ไม่ถูกต้อง","error-invalid-uri-fragment":"fragment URL ไม่ถูกต้อง","error-user-attribute-required":"กรุณาระบุฟิลด์นี้","error-invalid-date":"วันที่ไม่ถูกต้อง","error-user-attribute-read-only":"ฟิลด์นี้เป็นแบบอ่านอย่างเดียว","error-username-invalid-character":"ค่ามีอักขระที่ไม่ถูกต้อง","error-person-name-invalid-character":"ค่ามีอักขระที่ไม่ถูกต้อง","error-reset-otp-missing-id":"กรุณาเลือกการตั้งค่า OTP",invalidPasswordExistingMessage:"รหัสผ่านเดิมไม่ถูกต้อง",invalidPasswordBlacklistedMessage:"รหัสผ่านไม่ถูกต้อง: รหัสผ่านอยู่ในบัญชีดำ",invalidPasswordConfirmMessage:"การยืนยันรหัสผ่านไม่ตรงกัน",invalidTotpMessage:"รหัส Authenticator ไม่ถูกต้อง",usernameExistsMessage:"มีชื่อผู้ใช้งานนี้อยู่แล้ว",emailExistsMessage:"มีอีเมลอยู่แล้ว",federatedIdentityExistsMessage:"ผู้ใช้งานที่มี {0} {1} มีอยู่แล้ว กรุณาเข้าสู่ระบบจัดการบัญชีเพื่อเชื่อมโยงบัญชี",federatedIdentityUnavailableMessage:"ผู้ใช้งาน {0} ที่ได้รับการตรวจสอบจากผู้ให้บริการตัวตน {1} ไม่มีอยู่ กรุณาติดต่อผู้ดูแลระบบของคุณ",federatedIdentityUnmatchedEssentialClaimMessage:"ไอดีโทเค็นที่ออกโดยผู้ให้บริการตัวตนไม่ตรงกับการอ้างสิทธิ์ที่จำเป็นที่กำหนดไว้ กรุณาติดต่อผู้ดูแลระบบของคุณ",confirmLinkIdpTitle:"มีบัญชีอยู่แล้ว",federatedIdentityConfirmLinkMessage:"ผู้ใช้งานที่มี {0} {1} มีอยู่แล้ว คุณต้องการดำเนินการอย่างไรต่อ?",federatedIdentityConfirmReauthenticateMessage:"ตรวจสอบตัวตนเพื่อเชื่อมโยงบัญชีของคุณกับ {0}",nestedFirstBrokerFlowMessage:"ผู้ใช้งาน {0} {1} ไม่ได้เชื่อมโยงกับผู้ใช้งานที่รู้จัก",confirmLinkIdpReviewProfile:"รีวิวโปรไฟล์",confirmLinkIdpContinue:"เพิ่มเข้าไปในบัญชีที่มีอยู่",configureTotpMessage:"คุณต้องตั้งค่า Mobile Authenticator เพื่อเปิดใช้งานบัญชีของคุณ",configureBackupCodesMessage:"คุณต้องตั้งค่ารหัสสำรองเพื่อเปิดใช้งานบัญชีของคุณ",updateProfileMessage:"คุณต้องปรับปรุงโปรไฟล์ผู้ใช้งานเพื่อเปิดใช้งานบัญชีของคุณ",updatePasswordMessage:"คุณต้องเปลี่ยนรหัสผ่านเพื่อเปิดใช้งานบัญชีของคุณ",updateEmailMessage:"คุณต้องปรับปรุงที่อยู่อีเมลเพื่อเปิดใช้งานบัญชีของคุณ",resetPasswordMessage:"คุณต้องเปลี่ยนรหัสผ่าน",verifyEmailMessage:"คุณต้องยืนยันที่อยู่อีเมลเพื่อเปิดใช้งานบัญชีของคุณ",linkIdpMessage:"คุณจำเป็นต้องยืนยันที่อยู่อีเมลเพื่อเชื่อมโยงบัญชีของคุณกับ {0}",emailSentMessage:"คุณจะได้รับอีเมลในไม่ช้านี้พร้อมคำแนะนำเพิ่มเติม",emailSendErrorMessage:"การส่งอีเมลล้มเหลว โปรดลองอีกครั้งในภายหลัง",accountUpdatedMessage:"บัญชีของคุณได้รับการปรับปรุงแล้ว",accountPasswordUpdatedMessage:"รหัสผ่านของคุณได้รับการปรับปรุงแล้ว",delegationCompleteHeader:"เข้าสู่ระบบสำเร็จ",delegationCompleteMessage:"คุณสามารถปิดหน้าต่างเบราว์เซอร์นี้และกลับไปที่แอปพลิเคชันคอนโซลของคุณ.",delegationFailedHeader:"เข้าสู่ระบบล้มเหลว",delegationFailedMessage:"คุณสามารถปิดหน้าต่างเบราว์เซอร์นี้และกลับไปที่แอปพลิเคชันคอนโซลของคุณและลองเข้าสู่ระบบอีกครั้ง.",noAccessMessage:"ไม่มีการเข้าถึง",invalidPasswordMinLengthMessage:"รหัสผ่านไม่ถูกต้อง: ความยาวขั้นต่ำ {0} อักษร",invalidPasswordMaxLengthMessage:"รหัสผ่านไม่ถูกต้อง: ความยาวสูงสุด {0} อักษร",invalidPasswordMinDigitsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีอย่างน้อย {0} หลัก",invalidPasswordMinLowerCaseCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีตัวอักษรพิมพ์เล็กอย่างน้อย {0} อักษร",invalidPasswordMinUpperCaseCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีตัวอักษรพิมพ์ใหญ่อย่างน้อย {0} อักษร",invalidPasswordMinSpecialCharsMessage:"รหัสผ่านไม่ถูกต้อง: ต้องมีอักขระพิเศษอย่างน้อย {0} อักษร",invalidPasswordNotUsernameMessage:"รหัสผ่านไม่ถูกต้อง: ต้องไม่เหมือนกับชื่อผู้ใช้งาน",invalidPasswordNotEmailMessage:"รหัสผ่านไม่ถูกต้อง: ต้องไม่เหมือนกับอีเมล",invalidPasswordRegexPatternMessage:"รหัสผ่านไม่ถูกต้อง: ไม่ตรงกับรูปแบบ regex",invalidPasswordHistoryMessage:"รหัสผ่านไม่ถูกต้อง: ต้องไม่เหมือนกับ {0} รหัสผ่านล่าสุด",invalidPasswordGenericMessage:"รหัสผ่านไม่ถูกต้อง: รหัสผ่านใหม่ไม่เป็นไปตามนโยบายการตั้งรหัสผ่าน",failedToProcessResponseMessage:"การประมวลผลการตอบสนองล้มเหลว",httpsRequiredMessage:"จำเป็นต้องใช้ HTTPS",realmNotEnabledMessage:"ไม่ได้เปิดใช้ realm",invalidRequestMessage:"คำขอไม่ถูกต้อง",successLogout:"คุณออกจากระบบแล้ว",failedLogout:"การออกจากระบบล้มเหลว",unknownLoginRequesterMessage:"ผู้ร้องขอเข้าสู่ระบบที่ไม่รู้จัก",loginRequesterNotEnabledMessage:"ผู้ร้องขอเข้าสู่ระบบที่ไม่ได้เปิดใช้งาน",bearerOnlyMessage:"แอปพลิเคชันที่ใช้ Bearer-only ไม่ได้รับอนุญาตให้เริ่มการเข้าสู่ระบบผ่านเบราว์เซอร์",standardFlowDisabledMessage:"ไคลเอนต์ไม่ได้รับอนุญาตให้เริ่มการเข้าสู่ระบบผ่านเบราว์เซอร์ด้วย response_type ที่ระบุ Standard flow ถูกระงับสำหรับไคลเอนต์",implicitFlowDisabledMessage:"ไคลเอนต์ไม่ได้รับอนุญาตให้เริ่มการเข้าสู่ระบบผ่านเบราว์เซอร์ด้วย response_type ที่ระบุ Implicit flow ถูกระงับสำหรับไคลเอนต์",invalidRedirectUriMessage:"Uri redirect ไม่ถูกต้อง",unsupportedNameIdFormatMessage:"รูปแบบ NameIDFormat ที่ไม่รองรับ",invalidRequesterMessage:"ผู้ร้องขอไม่ถูกต้อง",registrationNotAllowedMessage:"ไม่อนุญาตให้ลงทะเบียน",resetCredentialNotAllowedMessage:"ไม่อนุญาตให้รีเซ็ต Credential",permissionNotApprovedMessage:"ไม่ได้รับการอนุมัติสิทธิ์",noRelayStateInResponseMessage:"ไม่มีสถานะ relay ในการตอบสนองจากผู้ให้บริการตัวตน",insufficientPermissionMessage:"สิทธิ์ไม่เพียงพอในการเชื่อมโยงตัวตน",couldNotProceedWithAuthenticationRequestMessage:"ไม่สามารถดำเนินการต่อเพื่อส่งคำขอพิสูจน์ตัวจริงไปยังผู้ให้บริการตัวตน",couldNotObtainTokenMessage:"ไม่สามารถรับโทเค็นจากผู้ให้บริการตัวตน",unexpectedErrorRetrievingTokenMessage:"เกิดข้อผิดพลาดที่ไม่คาดคิดขณะรับโทเค็นจากผู้ให้บริการตัวตน",unexpectedErrorHandlingResponseMessage:"เกิดข้อผิดพลาดที่ไม่คาดคิดขณะจัดการการตอบสนองจากผู้ให้บริการตัวตน",identityProviderAuthenticationFailedMessage:"การตรวจสอบล้มเหลว ไม่สามารถตรวจสอบกับผู้ให้บริการตัวตน",couldNotSendAuthenticationRequestMessage:"ไม่สามารถส่งคำขอพิสูจน์ตัวจริงไปยังผู้ให้บริการตัวตน",unexpectedErrorHandlingRequestMessage:"เกิดข้อผิดพลาดที่ไม่คาดคิดขณะจัดการคำขอพิสูจน์ตัวจริงไปยังผู้ให้บริการตัวตน",invalidAccessCodeMessage:"Access code ไม่ถูกต้อง",sessionNotActiveMessage:"ไม่ได้ใช้งานเซสชัน",invalidCodeMessage:"เกิดข้อผิดพลาด กรุณาเข้าสู่ระบบผ่านแอปพลิเคชันของคุณอีกครั้ง",cookieNotFoundMessage:"ไม่พบคุกกี้ โปรดตรวจสอบให้แน่ใจว่าคุณได้เปิดใช้งานคุกกี้ในเบราว์เซอร์แล้ว",insufficientLevelOfAuthentication:"ระดับการพิสูจน์ตัวจริงที่ร้องขอมีไม่เพียงพอ",identityProviderUnexpectedErrorMessage:"เกิดข้อผิดพลาดที่ไม่คาดคิดขณะพิสูจน์ตัวจริงกับผู้ให้บริการตัวตน",identityProviderMissingStateMessage:"ไม่พบพารามิเตอร์ state จากการตอบสนองของผู้ให้บริการตัวตน",identityProviderInvalidResponseMessage:"การตอบสนองจากผู้ให้บริการตัวตนไม่ถูกต้อง",identityProviderInvalidSignatureMessage:"ลายเซ็นในการตอบสนองจากผู้ให้บริการตัวตนไม่ถูกต้อง",identityProviderNotFoundMessage:"ไม่พบผู้ให้บริการตัวตนด้วยตัวระบุนี้",identityProviderLinkSuccess:"คุณได้ยืนยันที่อยู่อีเมลของคุณเรียบร้อยแล้ว กรุณากลับไปที่เบราว์เซอร์เดิมของคุณและดำเนินการเข้าสู่ระบบที่นั่น",staleCodeMessage:"หน้านี้ไม่ถูกต้องอีกต่อไป กรุณากลับไปที่แอปพลิเคชันของคุณและเข้าสู่ระบบอีกครั้ง",realmSupportsNoCredentialsMessage:"realm ไม่สนับสนุนประเภท credential ใด ๆ",credentialSetupRequired:"ไม่สามารถเข้าสู่ระบบ จำเป็นต้องตั้งค่าข้อมูลประจำตัว",identityProviderNotUniqueMessage:"realm สนับสนุนผู้ให้บริการตัวตนหลายแหล่ง ไม่สามารถระบุได้ว่าควรพิสูจน์ตัวจริงผ่านผู้ให้บริการตัวตนใด",emailVerifiedMessage:"ยืนยันที่อยู่อีเมลของคุณแล้ว",staleEmailVerificationLink:"ลิงก์ที่คุณคลิกเป็นลิงก์ที่เก่าและไม่ถูกต้อง บางทีคุณอาจจะยืนยันอีเมลของคุณแล้ว",identityProviderAlreadyLinkedMessage:"Federated identity ที่ส่งคืนมาจากผู้ให้บริการ {0} มีการเชื่อมโยงกับผู้ใช้งานอื่นแล้ว",confirmAccountLinking:"ยืนยันการเชื่อมโยงบัญชี {0} ของผู้ให้บริการตัวตน {1} กับบัญชีของคุณ",confirmEmailAddressVerification:"ยืนยันความถูกต้องของที่อยู่อีเมล {0}",confirmExecutionOfActions:"ดำเนินการต่อไปนี้",backToApplication:"« กลับไปที่แอปพลิเคชัน",missingParameterMessage:"ไม่มีพารามิเตอร์: {0}",clientNotFoundMessage:"ไม่พบไคลเอนต์",clientDisabledMessage:"ไคลเอนต์ถูกปิดใช้งาน",invalidParameterMessage:"พารามิเตอร์ไม่ถูกต้อง: {0}",alreadyLoggedIn:"คุณเข้าสู่ระบบแล้ว",differentUserAuthenticated:"คุณได้พิสูจน์ตัวจริงเป็นผู้ใช้งานอื่น '{0}' ในเซสชันนี้แล้ว กรุณาออกจากระบบก่อน",brokerLinkingSessionExpired:"ได้ขอการเชื่อมโยงบัญชีของโบรกเกอร์ แต่เซสชันปัจจุบันไม่ถูกต้องแล้ว",proceedWithAction:"» คลิกที่นี่เพื่อดำเนินการ",acrNotFulfilled:"คุณสมบัติไม่เป็นไปตามข้อกำหนดในการพิสูจน์ตัวจริง","requiredAction.CONFIGURE_TOTP":"ตั้งค่า OTP","requiredAction.terms_and_conditions":"ข้อกำหนดและเงื่อนไข","requiredAction.UPDATE_PASSWORD":"ปรับปรุงรหัสผ่าน","requiredAction.UPDATE_PROFILE":"ปรับปรุงโปรไฟล์","requiredAction.VERIFY_EMAIL":"ยืนยันอีเมล","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"สร้างรหัสกู้คืน","requiredAction.webauthn-register-passwordless":"Webauthn Register Passwordless",invalidTokenRequiredActions:"การกระทำที่จำเป็นที่อยู่ในลิงก์ไม่ถูกต้อง",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":"รหัสอีเมล:","console-accept-terms":"ยอมรับข้อกำหนด? [y/n]:","console-accept":"y","openshift.scope.user_info":"ข้อมูลผู้ใช้งาน","openshift.scope.user_check-access":"ข้อมูลการเข้าถึงของผู้ใช้งาน","openshift.scope.user_full":"การเข้าถึงแบบเต็มรูปแบบ","openshift.scope.list-projects":"รายการโปรเจค","saml.post-form.title":"การเปลี่ยนเส้นทางการพิสูจน์ตัวจริง","saml.post-form.message":"กำลังเปลี่ยนเส้นทาง โปรดรอ","saml.post-form.js-disabled":"JavaScript ถูกปิดใช้งาน เราขอแนะนำให้คุณเปิดใช้งาน คลิกที่ปุ่มด้านล่างเพื่อดำเนินการต่อ","saml.artifactResolutionServiceInvalidResponse":"ไม่สามารถ resolve artifact ได้","otp-display-name":"แอปพลิเคชัน Authenticator","otp-help-text":"ระบุรหัสยืนยันจากแอปพลิเคชัน Authenticator","otp-reset-description":"การตั้งค่า OTP ใดที่ควรถูกลบ?","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":"ลงชื่อเข้าใช้โดยการระบุชื่อผู้ใช้งานและรหัสผ่าน","auth-recovery-authn-code-form-display-name":"รหัสพิสูจน์ตัวจริงเพื่อการกู้คืน","auth-recovery-authn-code-form-help-text":"ระบุรหัสพิสูจน์ตัวจริงเพื่อการกู้คืนจากรายการที่สร้างไว้ก่อนหน้า","auth-recovery-code-info-message":"กรุณาระบุรหัสกู้คืนที่ระบุ","auth-recovery-code-prompt":"รหัสกู้คืน #{0}","auth-recovery-code-header":"เข้าสู่ระบบด้วยรหัสพิสูจน์ตัวจริงเพื่อการกู้คืน","recovery-codes-error-invalid":"รหัสพิสูจน์ตัวจริงเพื่อการกู้คืนไม่ถูกต้อง","recovery-code-config-header":"พิสูจน์ตัวจริงเพื่อการกู้คืน","recovery-code-config-warning-title":"รหัสกู้คืนเหล่านี้จะไม่ปรากฏอีกหลังจากที่คุณออกจากหน้านี้ไปแล้ว","recovery-code-config-warning-message":"ตรวจสอบให้แน่ใจว่าคุณได้พิมพ์ ดาวน์โหลด หรือคัดลอกรหัส เก็บไว้ในที่ที่ปลอดภัย หากคุณยกเลิกการตั้งค่า รหัสกู้คืนเหล่านี้จะถูกลบออกจากบัญชีของคุณ","recovery-codes-print":"พิมพ์","recovery-codes-download":"ดาวน์โหลด","recovery-codes-copy":"คัดลอก","recovery-codes-copied":"คัดลอกแล้ว","recovery-codes-confirmation-message":"ฉันได้บันทึกรหัสเหล่านี้ไว้ในที่ที่ปลอดภัยแล้ว","recovery-codes-action-complete":"การตั้งค่าเสร็จสมบูรณ์","recovery-codes-action-cancel":"ยกเลิกการตั้งค่า","recovery-codes-download-file-header":"เก็บรหัสกู้คืนเหล่านี้ไว้ในที่ที่ปลอดภัย","recovery-codes-download-file-description":"รหัสกู้คืนคือรหัสผ่านที่ใช้ได้เพียงครั้งเดียวที่จะช่วยให้คุณสามารถเข้าสู่ระบบได้หากคุณไม่สามารถเข้าถึง authenticator ของคุณ","recovery-codes-download-file-date":"รหัสเหล่านี้ถูกสร้างขึ้นเมื่อ","recovery-codes-label-default":"รหัสกู้คืน","webauthn-display-name":"คีย์รักษาความปลอดภัย","webauthn-help-text":"ใช้คีย์รักษาความปลอดภัยของคุณเพื่อเข้าสู่ระบบ","webauthn-passwordless-display-name":"คีย์รักษาความปลอดภัย","webauthn-passwordless-help-text":"ใช้คีย์รักษาความปลอดภัยสำหรับการเข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่าน","webauthn-login-title":"การเข้าสู่ระบบด้วยคีย์รักษาความปลอดภัย","webauthn-registration-title":"การลงทะเบียนคีย์รักษาความปลอดภัย","webauthn-available-authenticators":"คีย์รักษาความปลอดภัยที่มีอยู่","webauthn-unsupported-browser-text":"เว็บเบราว์เซอร์นี้ไม่สนับสนุน WebAuthn ลองใช้เบราว์เซอร์อื่นหรือติดต่อผู้ดูแลระบบของคุณ","webauthn-doAuthenticate":"เข้าสู่ระบบด้วยคีย์รักษาความปลอดภัย","webauthn-createdAt-label":"สร้างแล้ว","webauthn-error-title":"ข้อผิดพลาดของคีย์รักษาความปลอดภัย","webauthn-error-registration":"การลงทะเบียนคีย์รักษาความปลอดภัยของคุณไม่สำเร็จ
{0}","webauthn-error-api-get":"การพิสูจน์ตัวจริงโดยใช้คีย์รักษาความปลอดภัยไม่สำเร็จ
{0}","webauthn-error-different-user":"ผู้ใช้งานที่พิสูจน์ตัวจริงรายแรกไม่ใช่รายที่ได้รับการพิสูจน์ตัวจริงจากคีย์รักษาความปลอดภัย","webauthn-error-auth-verification":"ผลการพิสูจน์ตัวจริงของคีย์รักษาความปลอดภัยไม่ถูกต้อง
{0}","webauthn-error-register-verification":"ผลการลงทะเบียนของคีย์รักษาความปลอดภัยไม่ถูกต้อง
{0}","webauthn-error-user-not-found":"ผู้ใช้งานที่ไม่รู้จักได้รับการพิสูจน์ตัวจริงจากคีย์รักษาความปลอดภัย","identity-provider-redirector":"เชื่อมต่อกับผู้ให้บริการตัวตนอื่น","identity-provider-login-label":"หรือเข้าสู่ระบบโดยใช้","idp-email-verification-display-name":"การทวนสอบอีเมล","idp-email-verification-help-text":"เชื่อมโยงบัญชีของคุณโดยการทวนสอบอีเมลของคุณ","idp-username-password-form-display-name":"ชื่อผู้ใช้งานและรหัสผ่าน","idp-username-password-form-help-text":"เชื่อมโยงบัญชีของคุณโดยเข้าสู่ระบบ",finalDeletionConfirmation:"หากคุณลบบัญชีของคุณ จะไม่สามารถกู้คืนได้ หากต้องการเก็บบัญชีของคุณ ให้คลิกยกเลิก",irreversibleAction:"การกระทำนี้ไม่สามารถย้อนกลับได้",deleteAccountConfirm:"ยืนยันการลบบัญชี",deletingImplies:"การลบบัญชีของคุณหมายถึง:",errasingData:"การลบข้อมูลทั้งหมดของคุณ",loggingOutImmediately:"การออกจากระบบในทันที",accountUnusable:"ไม่สามารถใช้แอปพลิเคชันโดยใช้บัญชีนี้ได้",userDeletedSuccessfully:"ลบผู้ใช้งานสำเร็จแล้ว","access-denied":"ปฏิเสธการเข้าถึง","access-denied-when-idp-auth":"การเข้าถึงถูกปฏิเสธเมื่อพิสูจน์ตัวจริงด้วย {0}","frontchannel-logout.title":"กำลังออกจากระบบ","frontchannel-logout.message":"คุณกำลังออกจากระบบจากแอปพลิเคชันต่อไปนี้",logoutConfirmTitle:"กำลังออกจากระบบ",logoutConfirmHeader:"คุณต้องการออกจากระบบหรือไม่?",doLogout:"ออกจากระบบ",readOnlyUsernameMessage:"คุณไม่สามารถปรับปรุงชื่อผู้ใช้งานของคุณเนื่องจากเป็นข้อมูลแบบอ่านอย่างเดียว"}}}]); \ No newline at end of file diff --git a/5583.37e40d5f.iframe.bundle.js b/5583.37e40d5f.iframe.bundle.js deleted file mode 100644 index 828f3898..00000000 --- a/5583.37e40d5f.iframe.bundle.js +++ /dev/null @@ -1,2 +0,0 @@ -/*! For license information please see 5583.37e40d5f.iframe.bundle.js.LICENSE.txt */ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5583],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/lib/usePrepareTemplate.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{M:()=>usePrepareTemplate});__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.string.split.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.async-iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.math.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.json.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.object.create.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.object.set-prototype-of.js");var react__WEBPACK_IMPORTED_MODULE_25__=__webpack_require__("./node_modules/react/index.js"),_tools_headInsert__WEBPACK_IMPORTED_MODULE_26__=__webpack_require__("./dist/tools/headInsert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_27__=__webpack_require__("./dist/tools/clsx.js");function _regeneratorRuntime(){_regeneratorRuntime=function _regeneratorRuntime(){return exports};var exports={},Op=Object.prototype,hasOwn=Op.hasOwnProperty,defineProperty=Object.defineProperty||function(obj,key,desc){obj[key]=desc.value},$Symbol="function"==typeof Symbol?Symbol:{},iteratorSymbol=$Symbol.iterator||"@@iterator",asyncIteratorSymbol=$Symbol.asyncIterator||"@@asyncIterator",toStringTagSymbol=$Symbol.toStringTag||"@@toStringTag";function define(obj,key,value){return Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}),obj[key]}try{define({},"")}catch(err){define=function define(obj,key,value){return obj[key]=value}}function wrap(innerFn,outerFn,self,tryLocsList){var protoGenerator=outerFn&&outerFn.prototype instanceof Generator?outerFn:Generator,generator=Object.create(protoGenerator.prototype),context=new Context(tryLocsList||[]);return defineProperty(generator,"_invoke",{value:makeInvokeMethod(innerFn,self,context)}),generator}function tryCatch(fn,obj,arg){try{return{type:"normal",arg:fn.call(obj,arg)}}catch(err){return{type:"throw",arg:err}}}exports.wrap=wrap;var ContinueSentinel={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var IteratorPrototype={};define(IteratorPrototype,iteratorSymbol,(function(){return this}));var getProto=Object.getPrototypeOf,NativeIteratorPrototype=getProto&&getProto(getProto(values([])));NativeIteratorPrototype&&NativeIteratorPrototype!==Op&&hasOwn.call(NativeIteratorPrototype,iteratorSymbol)&&(IteratorPrototype=NativeIteratorPrototype);var Gp=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(IteratorPrototype);function defineIteratorMethods(prototype){["next","throw","return"].forEach((function(method){define(prototype,method,(function(arg){return this._invoke(method,arg)}))}))}function AsyncIterator(generator,PromiseImpl){function invoke(method,arg,resolve,reject){var record=tryCatch(generator[method],generator,arg);if("throw"!==record.type){var result=record.arg,value=result.value;return value&&"object"==typeof value&&hasOwn.call(value,"__await")?PromiseImpl.resolve(value.__await).then((function(value){invoke("next",value,resolve,reject)}),(function(err){invoke("throw",err,resolve,reject)})):PromiseImpl.resolve(value).then((function(unwrapped){result.value=unwrapped,resolve(result)}),(function(error){return invoke("throw",error,resolve,reject)}))}reject(record.arg)}var previousPromise;defineProperty(this,"_invoke",{value:function value(method,arg){function callInvokeWithMethodAndArg(){return new PromiseImpl((function(resolve,reject){invoke(method,arg,resolve,reject)}))}return previousPromise=previousPromise?previousPromise.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(innerFn,self,context){var state="suspendedStart";return function(method,arg){if("executing"===state)throw new Error("Generator is already running");if("completed"===state){if("throw"===method)throw arg;return doneResult()}for(context.method=method,context.arg=arg;;){var delegate=context.delegate;if(delegate){var delegateResult=maybeInvokeDelegate(delegate,context);if(delegateResult){if(delegateResult===ContinueSentinel)continue;return delegateResult}}if("next"===context.method)context.sent=context._sent=context.arg;else if("throw"===context.method){if("suspendedStart"===state)throw state="completed",context.arg;context.dispatchException(context.arg)}else"return"===context.method&&context.abrupt("return",context.arg);state="executing";var record=tryCatch(innerFn,self,context);if("normal"===record.type){if(state=context.done?"completed":"suspendedYield",record.arg===ContinueSentinel)continue;return{value:record.arg,done:context.done}}"throw"===record.type&&(state="completed",context.method="throw",context.arg=record.arg)}}}function maybeInvokeDelegate(delegate,context){var methodName=context.method,method=delegate.iterator[methodName];if(void 0===method)return context.delegate=null,"throw"===methodName&&delegate.iterator.return&&(context.method="return",context.arg=void 0,maybeInvokeDelegate(delegate,context),"throw"===context.method)||"return"!==methodName&&(context.method="throw",context.arg=new TypeError("The iterator does not provide a '"+methodName+"' method")),ContinueSentinel;var record=tryCatch(method,delegate.iterator,context.arg);if("throw"===record.type)return context.method="throw",context.arg=record.arg,context.delegate=null,ContinueSentinel;var info=record.arg;return info?info.done?(context[delegate.resultName]=info.value,context.next=delegate.nextLoc,"return"!==context.method&&(context.method="next",context.arg=void 0),context.delegate=null,ContinueSentinel):info:(context.method="throw",context.arg=new TypeError("iterator result is not an object"),context.delegate=null,ContinueSentinel)}function pushTryEntry(locs){var entry={tryLoc:locs[0]};1 in locs&&(entry.catchLoc=locs[1]),2 in locs&&(entry.finallyLoc=locs[2],entry.afterLoc=locs[3]),this.tryEntries.push(entry)}function resetTryEntry(entry){var record=entry.completion||{};record.type="normal",delete record.arg,entry.completion=record}function Context(tryLocsList){this.tryEntries=[{tryLoc:"root"}],tryLocsList.forEach(pushTryEntry,this),this.reset(!0)}function values(iterable){if(iterable){var iteratorMethod=iterable[iteratorSymbol];if(iteratorMethod)return iteratorMethod.call(iterable);if("function"==typeof iterable.next)return iterable;if(!isNaN(iterable.length)){var i=-1,next=function next(){for(;++i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName,nextLoc},"next"===this.method&&(this.arg=void 0),ContinueSentinel}},exports}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{HTMLElement.prototype.prepend||(HTMLElement.prototype.prepend=function(childNode){if("string"==typeof childNode)throw new Error("Error with HTMLElement.prototype.appendFirst polyfill");this.insertBefore(childNode,this.firstChild)})},"./dist/tools/assert.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{h:()=>tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.h});var tsafe_assert__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs")},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{__webpack_require__.d(__webpack_exports__,{t:()=>headInsert});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./dist/tools/HTMLElement.prototype.prepend.js");var evt_tools_Deferred__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/evt/tools/Deferred.js");function headInsert(params){var htmlElement=document.createElement(function(){switch(params.type){case"css":return"link";case"javascript":return"script"}}()),dLoaded=new evt_tools_Deferred__WEBPACK_IMPORTED_MODULE_2__.Deferred;return htmlElement.addEventListener("load",(function(){return dLoaded.resolve()})),Object.assign(htmlElement,function(){switch(params.type){case"css":return{href:params.href,type:"text/css",rel:"stylesheet",media:"screen,print"};case"javascript":return{src:params.src,type:"text/javascript"}}}()),document.getElementsByTagName("head")[0][function(){switch(params.type){case"javascript":return"appendChild";case"css":return function(){switch(params.position){case"append":return"appendChild";case"prepend":return"prepend"}}()}}()](htmlElement),{prLoaded:dLoaded.pr,remove:function remove(){return htmlElement.remove()}}}},"./node_modules/tsafe/esm/typeGuard.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5753.2ac6c3d6.iframe.bundle.js b/5753.2ac6c3d6.iframe.bundle.js deleted file mode 100644 index bf970433..00000000 --- a/5753.2ac6c3d6.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5753],{"./dist/login/i18n/baseMessages/lv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Pieslēgties",doRegister:"Reģistrēties",doCancel:"Atcelt",doSubmit:"Iesniegt",doBack:"Atpakaļ",doYes:"Jā",doNo:"Nē",doContinue:"Turpināt",doIgnore:"Ignorēt",doAccept:"Pieņemt",doDecline:"Atteikties",doForgotPassword:"Aizmirsāt paroli?",doClickHere:"Spiediet šeit",doImpersonate:"Uzdoties",doTryAgain:"Mēģināt vēlreiz",doTryAnotherWay:"Mēģināt citā veidā",doConfirmDelete:"Apstiprināt dzēšanu",errorDeletingAccount:"Kļūda dzēšot kontu",deletingAccountForbidden:"Jums nav piešķirtas atļaujas sava konta dzēšanai, sazinieties ar administratoru.",kerberosNotConfigured:"Kerberos nav konfigurēts",kerberosNotConfiguredTitle:"Kerberos nav konfigurēts",bypassKerberosDetail:"Jūs neesat pieslēdzies izmantojot Kerberos vai jūsu pārlūks nav iestatīts Kerberos autentifikācijai. Spiediet turpināt, lai pieslēgtos citā veidā",kerberosNotSetUp:"Kerberos nav uzstādīts. Jūs nevarat pieslēgties.",registerTitle:"Reģistrācija",loginAccountTitle:"Pieslēgties savam kontam",loginTitle:"Pieslēgties {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} uzdoties par lietotāju",impersonateTitleHtml:"{0} uzdoties par lietotāju",realmChoice:"Realm",unknownUser:"Nezināms lietotājs",loginTotpTitle:"Mobilā autentifikatora uzstādīšana",loginProfileTitle:"Atjaunot profila informāciju",loginIdpReviewProfileTitle:"Atjaunot konta informācija",loginTimeout:"Jūs pārāk ilgi pieslēdzaties. Pieslēgšanās process tiks sākts no jauna.",oauthGrantTitle:"Piešķirt atļauju {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Notikusi kļūme...",errorTitleHtml:"Notikusi kļūme ...",emailVerifyTitle:"E-pasta apstiprināšana",emailForgotTitle:"Aizmirsāt paroli?",updatePasswordTitle:"Atjaunot paroli",codeSuccessTitle:"Kods",codeErrorTitle:"Kļūdas kods: {0}",displayUnsupported:"Pieprasītais attēlošanas veids netiek atbalstīts",browserRequired:"Nepieciešama pieslēgšanās caur pārlūku",browserContinue:"Nepieciešama pieslēgšanās caur pārlūku, lai turpinātu autentifikāciju",browserContinuePrompt:"Vai atvērt pārlūku lai turpinātu pieslēgšanos? [y/n]:",browserContinueAnswer:"y",termsTitle:"Noteikumi un nosacījumi",termsText:"

Noteikumi un nosacījumi jānosaka

",termsPlainText:"Noteikumi un nosacījumi jānosaka",recaptchaFailed:"Nekorekts Recaptcha",recaptchaNotConfigured:"Recaptcha ir obligāts, bet nav uzstādīts",consentDenied:"Piekrišana liegta.",noAccount:"Jauns lietotājs?",username:"Lietotājvārds",usernameOrEmail:"Lietotājvārds vai e-pasts",firstName:"Vārds",givenName:"Vārds",fullName:"Pilns vārds",lastName:"Uzvārds",familyName:"Uzvārds",email:"E-pasts",password:"Parole",passwordConfirm:"Parole atkārtoti",passwordNew:"Jauna parole",passwordNewConfirm:"Jauna parole atkārtoti",rememberMe:"Atcerēties mani",authenticatorCode:"Vienreizējā parole",address:"Adrese",street:"Iela",locality:"Pilsēta",region:"Novads vai reģions",postal_code:"Pasta indegs",country:"Valsts",emailVerified:"E-pasts apstiprināts",website:"Tīmekļa vietne",phoneNumber:"Tālruņa numurs",phoneNumberVerified:"Tālruņa numurs apstiprināts",gender:"Dzimums",birthday:"Dzimšanas datums",zoneinfo:"Laika josla",gssDelegationCredential:"GSS delegācijas atslēga",logoutOtherSessions:"Atteikties no visām ierīcēm",profileScopeConsentText:"Lietotāja profils",emailScopeConsentText:"E-pasta adrese",addressScopeConsentText:"Adrese",phoneScopeConsentText:"Tālrunis",offlineAccessScopeConsentText:"Bezsaustes piekļuve",samlRoleListScopeConsentText:"Manas lomas",rolesScopeConsentText:"Lietotāju lomas",restartLoginTooltip:"Atkārtot pieslēgšanos",emailVerifyInstruction1:"E-pasts ar instrukcijām e-pasta apstiprināšanai ir nosūtīts",emailVerifyInstruction2:"Nesaņēmāt apsiptināšanas kodu savā e-pastā?",emailVerifyInstruction3:"lai atkārtoti nosūtītu e-pastu.",emailLinkIdpTitle:"Saistīt {0}",emailLinkIdp1:"E-pasts ar instrukcijām, lai saistītu {0} kontu {1} ar savu {2} kontu ir nosūtīts.",emailLinkIdp2:"Nesaņēmāt apsiptināšanas kodu savā e-pastā?",emailLinkIdp3:"lai atkārtoti nosūtītu e-pastu.",emailLinkIdp4:"Ja jūs jau apstiprinājāt e-pastu citā pārlūkā",emailLinkIdp5:"lai turpinātu.",backToLogin:"« Atpakaļ uz pieslēgšanos",emailInstruction:"Ievadiet lietotājvārdu vai e-pasta adresi un mēs nosūtīsim jums instrukcijas kā izveidot jaunu paroli.",copyCodeInstruction:"Lūdzu nokopējiet šo kodu un ielīmējiet savā lietojumprogrammā:",pageExpiredTitle:"Lapa ir beigusies",pageExpiredMsg1:"Lai atsāktu pieslēgšanās procesu",pageExpiredMsg2:"Lai turpinātu pieslēgšanās procesu",personalInfo:"Personiskā informācija:",role_admin:"Administrators","role_realm-admin":"Realm administrators","role_create-realm":"Izveidot realm","role_view-realm":"Skatīt realm","role_view-users":"Skatīt lietoājus","role_view-applications":"Skatīt lietojumprogrammas","role_view-clients":"Skatīt klientus","role_view-events":"Skatīt notikumus","role_view-identity-providers":"Skatīt identitātes sniedzējus","role_manage-realm":"Pārvaldīt realm","role_manage-users":"Pārvaldīt lietotājus","role_manage-applications":"Pārvaldīt lietojumprogrammas","role_manage-identity-providers":"Pārvaldīt identitātes sniedzējus","role_manage-clients":"Pārvaldīt klientus","role_manage-events":"Pārvaldīt notikumus","role_view-profile":"Skatīt profilu","role_manage-account":"Pārvaldīt kontu","role_manage-account-links":"Pārvaldīt konta saites","role_read-token":"Lasīt talonu (token)","role_offline-access":"Bezsaistes piekļuve",role_uma_authorization:"Iegūt atļaujas",client_account:"Konts","client_security-admin-console":"Drošības administrācijas konsole","client_admin-cli":"Administrācijas CLI","client_realm-management":"Realm pārvaldība",client_broker:"Brokeris",invalidUserMessage:"Nekorekts lietotājvārds vai parole.",invalidEmailMessage:"Nekorekta e-pasta adrese.",accountDisabledMessage:"Konts ir atspējots, sazinieties ar administratoru.",accountTemporarilyDisabledMessage:"Konts ir uz laiku atspējots, sazinieties ar administratoru vai mēģiniet vēlāk.",expiredCodeMessage:"Pieslēgšanās noilgums. Lūdzu pieslēdzieties atkārtoti.",expiredActionMessage:"Darbība noilgusi. Lūdzu turpiniet ar pieslēgšanos.",expiredActionTokenNoSessionMessage:"Darbība noilgusi.",expiredActionTokenSessionExistsMessage:"Darbība noilgusi. Lūdzu uzsāciet to no jauna.",missingFirstNameMessage:"Lūdzu norādi vārdu.",missingLastNameMessage:"Lūdzu norādi uzvārdu.",missingEmailMessage:"Lūdzu norādi e-pastu.",missingUsernameMessage:"Lūdzu norādi lietotājvārdu.",missingPasswordMessage:"Lūdzu norādi paroli.",notMatchPasswordMessage:"Paroles nesakrīt.",invalidPasswordExistingMessage:"Nekorekta pašreizējā parole.",invalidPasswordBlacklistedMessage:"Nekorekta parole: parole ir melnajā sarakstā.",invalidPasswordConfirmMessage:"Paroles apstiprinājums nav pareizs.",usernameExistsMessage:"Lietotājvārds jau eksistē.",emailExistsMessage:"E-pasts jau eksistē.",federatedIdentityExistsMessage:"Lietotājvārds ar {0} {1} jau eksistē. Lūdzu pieslēdzieties konta pārvaldniekam lai savienotu kontus.",confirmLinkIdpTitle:"Konts jau eksistē",federatedIdentityConfirmLinkMessage:"Konts ar {0} {1} jau eksistē. Kā vēlies turpināt?",federatedIdentityConfirmReauthenticateMessage:"Pieslēdzieties ar {0}, lai savienotu kontu ar {1}",confirmLinkIdpReviewProfile:"Pārskatīt profilu",confirmLinkIdpContinue:"Pievienot eksistējošam kontam",accountUpdatedMessage:"Jūsu konts ir atjaunots.",accountPasswordUpdatedMessage:"Jūsu parole ir atjaunota.",delegationCompleteHeader:"Pieslēgšanās veiksmīga",delegationCompleteMessage:"Jūs varat aizvērt šo pārlūka logu un doties atpakaļ uz konsoles lietojumprogrammu.",delegationFailedHeader:"Pieslēgšanās neizdevās",delegationFailedMessage:"Jūs varat aizvērt šo pārlūka logu un doties atpakaļ uz konsoles lietojumprogrammu un mēģināt pieslēgties atkārtoti.",noAccessMessage:"Nav piekļuves",invalidPasswordMinLengthMessage:"Nekorekta parole: minimālais paroles garums {0}.",invalidPasswordMinDigitsMessage:"Nekorekta parole: tai jāsatur vismaz {0} cipari.",invalidPasswordMinLowerCaseCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} mazie burti.",invalidPasswordMinUpperCaseCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} lielie burti.",invalidPasswordMinSpecialCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} speciālie simboli.",invalidPasswordNotUsernameMessage:"Nekorekta parole: tā nedrīkst sakrist ar lietotājvārdu.",invalidPasswordRegexPatternMessage:"Nekorekta parole: netabilst regex šablonam(iem).",invalidPasswordHistoryMessage:"Nekorekta parole: nedrīkst būt vienāda ar iepriekšējām {0} parolēm.",invalidPasswordGenericMessage:"Nekorekta parole: jaunā parole neatbilst paroles noteikumiem.",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lv:"Latviešu",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",backToApplication:"« Atpakaļ uz lietojumprogrammu",missingParameterMessage:"Trūkst parametru: {0}",clientNotFoundMessage:"Klients nav atrasts.",clientDisabledMessage:"Klients atspējos.",invalidParameterMessage:"Nekorekts parametrs: {0}",alreadyLoggedIn:"Tu jau esi pieslēdzies.",differentUserAuthenticated:"Jūs jau esat pieslēdzies ar citu lietotāju '{0}' šajā sesijā. Lūdzu vispirms atslēgties.",proceedWithAction:"» Spiediet šeit lai turpinātu","requiredAction.CONFIGURE_TOTP":"Konfigurēt OTP","requiredAction.terms_and_conditions":"Noteikumi un nosacījumi","requiredAction.UPDATE_PASSWORD":"Atjaunot paroli","requiredAction.UPDATE_PROFILE":"Atjaunot profilu","requiredAction.VERIFY_EMAIL":"Apstiprināt e-pastu",pageNotFound:"Lapa nav atrasta",internalServerError:"Notikusi servera kļūme","console-username":"Lietotājvārds:","console-password":"Parole:","console-otp":"Vienreizējā parole:","console-new-password":"Jauna parole:","console-confirm-password":"Parole atkārtoti:","console-update-password":"Jums ir jāatjauno parole.","console-verify-email":"Jums ir jāapstiprina e-pasta adrese. E-pasts tika nosūtīts uz {0}, kas satur apstiprinājuma kodu. Lūdzu ievadiet šo kodu ievadlaukā zemāk.","console-email-code":"E-pasta kods:","console-accept-terms":"Piekrist noteikumiem? [y/n]:","console-accept":"y"}}}]); \ No newline at end of file diff --git a/5753.87a0dc2d.iframe.bundle.js b/5753.87a0dc2d.iframe.bundle.js new file mode 100644 index 00000000..b7e25610 --- /dev/null +++ b/5753.87a0dc2d.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5753],{"./dist/login/i18n/baseMessages/lv.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Pieslēgties",doRegister:"Reģistrēties",doCancel:"Atcelt",doSubmit:"Iesniegt",doBack:"Atpakaļ",doYes:"Jā",doNo:"Nē",doContinue:"Turpināt",doIgnore:"Ignorēt",doAccept:"Pieņemt",doDecline:"Atteikties",doForgotPassword:"Aizmirsāt paroli?",doClickHere:"Spiediet šeit",doImpersonate:"Uzdoties",doTryAgain:"Mēģināt vēlreiz",doTryAnotherWay:"Mēģināt citā veidā",doConfirmDelete:"Apstiprināt dzēšanu",errorDeletingAccount:"Kļūda dzēšot kontu",deletingAccountForbidden:"Jums nav piešķirtas atļaujas sava konta dzēšanai, sazinieties ar administratoru.",kerberosNotConfigured:"Kerberos nav konfigurēts",kerberosNotConfiguredTitle:"Kerberos nav konfigurēts",bypassKerberosDetail:"Jūs neesat pieslēdzies izmantojot Kerberos vai jūsu pārlūks nav iestatīts Kerberos autentifikācijai. Spiediet turpināt, lai pieslēgtos citā veidā",kerberosNotSetUp:"Kerberos nav uzstādīts. Jūs nevarat pieslēgties.",registerTitle:"Reģistrācija",loginAccountTitle:"Pieslēgties savam kontam",loginTitle:"Pieslēgties {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} uzdoties par lietotāju",impersonateTitleHtml:"{0} uzdoties par lietotāju",realmChoice:"Realm",unknownUser:"Nezināms lietotājs",loginTotpTitle:"Mobilā autentifikatora uzstādīšana",loginProfileTitle:"Atjaunot profila informāciju",loginIdpReviewProfileTitle:"Atjaunot konta informācija",loginTimeout:"Jūs pārāk ilgi pieslēdzaties. Pieslēgšanās process tiks sākts no jauna.",oauthGrantTitle:"Piešķirt atļauju {0}",oauthGrantTitleHtml:"{0}",errorTitle:"Notikusi kļūme...",errorTitleHtml:"Notikusi kļūme ...",emailVerifyTitle:"E-pasta apstiprināšana",emailForgotTitle:"Aizmirsāt paroli?",updatePasswordTitle:"Atjaunot paroli",codeSuccessTitle:"Kods",codeErrorTitle:"Kļūdas kods: {0}",displayUnsupported:"Pieprasītais attēlošanas veids netiek atbalstīts",browserRequired:"Nepieciešama pieslēgšanās caur pārlūku",browserContinue:"Nepieciešama pieslēgšanās caur pārlūku, lai turpinātu autentifikāciju",browserContinuePrompt:"Vai atvērt pārlūku lai turpinātu pieslēgšanos? [y/n]:",browserContinueAnswer:"y",termsTitle:"Noteikumi un nosacījumi",termsText:"

Noteikumi un nosacījumi jānosaka

",termsPlainText:"Noteikumi un nosacījumi jānosaka",recaptchaFailed:"Nekorekts Recaptcha",recaptchaNotConfigured:"Recaptcha ir obligāts, bet nav uzstādīts",consentDenied:"Piekrišana liegta.",noAccount:"Jauns lietotājs?",username:"Lietotājvārds",usernameOrEmail:"Lietotājvārds vai e-pasts",firstName:"Vārds",givenName:"Vārds",fullName:"Pilns vārds",lastName:"Uzvārds",familyName:"Uzvārds",email:"E-pasts",password:"Parole",passwordConfirm:"Parole atkārtoti",passwordNew:"Jauna parole",passwordNewConfirm:"Jauna parole atkārtoti",rememberMe:"Atcerēties mani",authenticatorCode:"Vienreizējā parole",address:"Adrese",street:"Iela",locality:"Pilsēta",region:"Novads vai reģions",postal_code:"Pasta indegs",country:"Valsts",emailVerified:"E-pasts apstiprināts",website:"Tīmekļa vietne",phoneNumber:"Tālruņa numurs",phoneNumberVerified:"Tālruņa numurs apstiprināts",gender:"Dzimums",birthday:"Dzimšanas datums",zoneinfo:"Laika josla",gssDelegationCredential:"GSS delegācijas atslēga",logoutOtherSessions:"Atteikties no visām ierīcēm",profileScopeConsentText:"Lietotāja profils",emailScopeConsentText:"E-pasta adrese",addressScopeConsentText:"Adrese",phoneScopeConsentText:"Tālrunis",offlineAccessScopeConsentText:"Bezsaustes piekļuve",samlRoleListScopeConsentText:"Manas lomas",rolesScopeConsentText:"Lietotāju lomas",restartLoginTooltip:"Atkārtot pieslēgšanos",emailVerifyInstruction1:"E-pasts ar instrukcijām e-pasta apstiprināšanai ir nosūtīts",emailVerifyInstruction2:"Nesaņēmāt apsiptināšanas kodu savā e-pastā?",emailVerifyInstruction3:"lai atkārtoti nosūtītu e-pastu.",emailLinkIdpTitle:"Saistīt {0}",emailLinkIdp1:"E-pasts ar instrukcijām, lai saistītu {0} kontu {1} ar savu {2} kontu ir nosūtīts.",emailLinkIdp2:"Nesaņēmāt apsiptināšanas kodu savā e-pastā?",emailLinkIdp3:"lai atkārtoti nosūtītu e-pastu.",emailLinkIdp4:"Ja jūs jau apstiprinājāt e-pastu citā pārlūkā",emailLinkIdp5:"lai turpinātu.",backToLogin:"« Atpakaļ uz pieslēgšanos",emailInstruction:"Ievadiet lietotājvārdu vai e-pasta adresi un mēs nosūtīsim jums instrukcijas kā izveidot jaunu paroli.",copyCodeInstruction:"Lūdzu nokopējiet šo kodu un ielīmējiet savā lietojumprogrammā:",pageExpiredTitle:"Lapa ir beigusies",pageExpiredMsg1:"Lai atsāktu pieslēgšanās procesu",pageExpiredMsg2:"Lai turpinātu pieslēgšanās procesu",personalInfo:"Personiskā informācija:",role_admin:"Administrators","role_realm-admin":"Realm administrators","role_create-realm":"Izveidot realm","role_view-realm":"Skatīt realm","role_view-users":"Skatīt lietoājus","role_view-applications":"Skatīt lietojumprogrammas","role_view-clients":"Skatīt klientus","role_view-events":"Skatīt notikumus","role_view-identity-providers":"Skatīt identitātes sniedzējus","role_manage-realm":"Pārvaldīt realm","role_manage-users":"Pārvaldīt lietotājus","role_manage-applications":"Pārvaldīt lietojumprogrammas","role_manage-identity-providers":"Pārvaldīt identitātes sniedzējus","role_manage-clients":"Pārvaldīt klientus","role_manage-events":"Pārvaldīt notikumus","role_view-profile":"Skatīt profilu","role_manage-account":"Pārvaldīt kontu","role_manage-account-links":"Pārvaldīt konta saites","role_read-token":"Lasīt talonu (token)","role_offline-access":"Bezsaistes piekļuve",role_uma_authorization:"Iegūt atļaujas",client_account:"Konts","client_security-admin-console":"Drošības administrācijas konsole","client_admin-cli":"Administrācijas CLI","client_realm-management":"Realm pārvaldība",client_broker:"Brokeris",invalidUserMessage:"Nekorekts lietotājvārds vai parole.",invalidEmailMessage:"Nekorekta e-pasta adrese.",accountDisabledMessage:"Konts ir atspējots, sazinieties ar administratoru.",accountTemporarilyDisabledMessage:"Konts ir uz laiku atspējots, sazinieties ar administratoru vai mēģiniet vēlāk.",expiredCodeMessage:"Pieslēgšanās noilgums. Lūdzu pieslēdzieties atkārtoti.",expiredActionMessage:"Darbība noilgusi. Lūdzu turpiniet ar pieslēgšanos.",expiredActionTokenNoSessionMessage:"Darbība noilgusi.",expiredActionTokenSessionExistsMessage:"Darbība noilgusi. Lūdzu uzsāciet to no jauna.",missingFirstNameMessage:"Lūdzu norādi vārdu.",missingLastNameMessage:"Lūdzu norādi uzvārdu.",missingEmailMessage:"Lūdzu norādi e-pastu.",missingUsernameMessage:"Lūdzu norādi lietotājvārdu.",missingPasswordMessage:"Lūdzu norādi paroli.",notMatchPasswordMessage:"Paroles nesakrīt.",invalidPasswordExistingMessage:"Nekorekta pašreizējā parole.",invalidPasswordBlacklistedMessage:"Nekorekta parole: parole ir melnajā sarakstā.",invalidPasswordConfirmMessage:"Paroles apstiprinājums nav pareizs.",usernameExistsMessage:"Lietotājvārds jau eksistē.",emailExistsMessage:"E-pasts jau eksistē.",federatedIdentityExistsMessage:"Lietotājvārds ar {0} {1} jau eksistē. Lūdzu pieslēdzieties konta pārvaldniekam lai savienotu kontus.",confirmLinkIdpTitle:"Konts jau eksistē",federatedIdentityConfirmLinkMessage:"Konts ar {0} {1} jau eksistē. Kā vēlies turpināt?",federatedIdentityConfirmReauthenticateMessage:"Pieslēdzieties ar {0}, lai savienotu kontu ar {1}",confirmLinkIdpReviewProfile:"Pārskatīt profilu",confirmLinkIdpContinue:"Pievienot eksistējošam kontam",accountUpdatedMessage:"Jūsu konts ir atjaunots.",accountPasswordUpdatedMessage:"Jūsu parole ir atjaunota.",delegationCompleteHeader:"Pieslēgšanās veiksmīga",delegationCompleteMessage:"Jūs varat aizvērt šo pārlūka logu un doties atpakaļ uz konsoles lietojumprogrammu.",delegationFailedHeader:"Pieslēgšanās neizdevās",delegationFailedMessage:"Jūs varat aizvērt šo pārlūka logu un doties atpakaļ uz konsoles lietojumprogrammu un mēģināt pieslēgties atkārtoti.",noAccessMessage:"Nav piekļuves",invalidPasswordMinLengthMessage:"Nekorekta parole: minimālais paroles garums {0}.",invalidPasswordMinDigitsMessage:"Nekorekta parole: tai jāsatur vismaz {0} cipari.",invalidPasswordMinLowerCaseCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} mazie burti.",invalidPasswordMinUpperCaseCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} lielie burti.",invalidPasswordMinSpecialCharsMessage:"Nekorekta parole: tai jāsatur vismaz {0} speciālie simboli.",invalidPasswordNotUsernameMessage:"Nekorekta parole: tā nedrīkst sakrist ar lietotājvārdu.",invalidPasswordRegexPatternMessage:"Nekorekta parole: netabilst regex šablonam(iem).",invalidPasswordHistoryMessage:"Nekorekta parole: nedrīkst būt vienāda ar iepriekšējām {0} parolēm.",invalidPasswordGenericMessage:"Nekorekta parole: jaunā parole neatbilst paroles noteikumiem.",backToApplication:"« Atpakaļ uz lietojumprogrammu",missingParameterMessage:"Trūkst parametru: {0}",clientNotFoundMessage:"Klients nav atrasts.",clientDisabledMessage:"Klients atspējos.",invalidParameterMessage:"Nekorekts parametrs: {0}",alreadyLoggedIn:"Tu jau esi pieslēdzies.",differentUserAuthenticated:"Jūs jau esat pieslēdzies ar citu lietotāju '{0}' šajā sesijā. Lūdzu vispirms atslēgties.",proceedWithAction:"» Spiediet šeit lai turpinātu","requiredAction.CONFIGURE_TOTP":"Konfigurēt OTP","requiredAction.TERMS_AND_CONDITIONS":"Noteikumi un nosacījumi","requiredAction.UPDATE_PASSWORD":"Atjaunot paroli","requiredAction.UPDATE_PROFILE":"Atjaunot profilu","requiredAction.VERIFY_EMAIL":"Apstiprināt e-pastu",pageNotFound:"Lapa nav atrasta",internalServerError:"Notikusi servera kļūme","console-username":"Lietotājvārds:","console-password":"Parole:","console-otp":"Vienreizējā parole:","console-new-password":"Jauna parole:","console-confirm-password":"Parole atkārtoti:","console-update-password":"Jums ir jāatjauno parole.","console-verify-email":"Jums ir jāapstiprina e-pasta adrese. E-pasts tika nosūtīts uz {0}, kas satur apstiprinājuma kodu. Lūdzu ievadiet šo kodu ievadlaukā zemāk.","console-email-code":"E-pasta kods:","console-accept-terms":"Piekrist noteikumiem? [y/n]:","console-accept":"y"}}}]); \ No newline at end of file diff --git a/5975.271a7822.iframe.bundle.js b/5975.271a7822.iframe.bundle.js deleted file mode 100644 index a8666de4..00000000 --- a/5975.271a7822.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5975],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/shared/UserProfileFormFields.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{M:()=>UserProfileFormFields});__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var jsx_runtime=__webpack_require__("./node_modules/react/jsx-runtime.js"),react=__webpack_require__("./node_modules/react/index.js"),clsx=__webpack_require__("./dist/tools/clsx.js"),id=(__webpack_require__("./node_modules/core-js/modules/es.array.reduce.js"),__webpack_require__("./node_modules/core-js/modules/es.array.concat.js"),__webpack_require__("./node_modules/core-js/modules/es.object.from-entries.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.object.entries.js"),__webpack_require__("./node_modules/core-js/modules/es.array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.array.find.js"),__webpack_require__("./node_modules/core-js/modules/es.parse-int.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./dist/tools/Array.prototype.every.js"),__webpack_require__("./node_modules/tsafe/esm/id.mjs")),useConstCallback=__webpack_require__("./dist/tools/useConstCallback.js"),emailRegexp=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);iparseInt(max)){var msgArgs=["error-invalid-length-too-long",max];errors.push({errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:msg.apply(void 0,msgArgs)},errors.length),errorMessageStr:msgStr.apply(void 0,msgArgs),validatorName})}if(void 0!==min&&value.lengthparseInt(_max)){var _msgArgs5=["error-number-out-of-range-too-big",_max];errors.push({validatorName:_validatorName4,errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:msg.apply(void 0,_msgArgs5)},errors.length),errorMessageStr:msgStr.apply(void 0,_msgArgs5)})}else if(void 0!==_min&&intValue=0)){var _msgArgs7=[(0,id.id)("notAValidOption")];errors.push({validatorName:_validatorName5,errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:advancedMsg.apply(void 0,_msgArgs7)},errors.length),errorMessageStr:advancedMsgStr.apply(void 0,_msgArgs7)})}return errors}));return{getErrors}}({kcContext:{messagesPerField:kcContext.messagesPerField,profile:{attributes:attributesWithPassword}},i18n}),getErrors=_useGetErrors.getErrors,initialInternalState=(0,react.useMemo)((function(){return Object.fromEntries(attributesWithPassword.map((function(attribute){return{attribute,errors:getErrors({name:attribute.name,fieldValueByAttributeName:Object.fromEntries(attributesWithPassword.map((function(_ref){var name=_ref.name,value=_ref.value;return[name,{value:null!=value?value:""}]})))})}})).map((function(_ref2){var _a,attribute=_ref2.attribute,errors=_ref2.errors;return[attribute.name,{value:null!==(_a=attribute.value)&&void 0!==_a?_a:"",errors,doDisplayPotentialErrorMessages:0!==errors.length}]})))}),[attributesWithPassword]),_useReducer=(0,react.useReducer)((function(state,params){var _Object$assign2;return Object.assign(Object.assign({},state),((_Object$assign2={})[params.name]=Object.assign(Object.assign({},state[params.name]),function(){var _Object$assign;switch(params.action){case"focus lost":return{doDisplayPotentialErrorMessages:!0};case"update value":return{value:params.newValue,errors:getErrors({name:params.name,fieldValueByAttributeName:Object.assign(Object.assign({},state),(_Object$assign={},_Object$assign[params.name]={value:params.newValue},_Object$assign))})}}}()),_Object$assign2))}),initialInternalState),_useReducer2=_slicedToArray(_useReducer,2),formValidationInternalState=_useReducer2[0],formValidationDispatch=_useReducer2[1];return{formValidationState:(0,react.useMemo)((function(){return{fieldStateByAttributeName:Object.fromEntries(Object.entries(formValidationInternalState).map((function(_ref3){var _ref4=_slicedToArray(_ref3,2),name=_ref4[0],_ref4$=_ref4[1],value=_ref4$.value,errors=_ref4$.errors;return[name,{value,displayableErrors:_ref4$.doDisplayPotentialErrorMessages?errors:[]}]}))),isFormSubmittable:Object.entries(formValidationInternalState).every((function(_ref5){var _ref6=_slicedToArray(_ref5,2),name=_ref6[0],_ref6$=_ref6[1],value=_ref6$.value;return 0===_ref6$.errors.length&&(""!==value||!attributesWithPassword.find((function(attribute){return attribute.name===name})).required)}))}}),[formValidationInternalState,attributesWithPassword]),formValidationDispatch,attributesWithPassword}}function UserProfileFormFields(props){var kcContext=props.kcContext,onIsFormSubmittableValueChange=props.onIsFormSubmittableValueChange,i18n=props.i18n,getClassName=props.getClassName,BeforeField=props.BeforeField,AfterField=props.AfterField,advancedMsg=i18n.advancedMsg,msg=i18n.msg,_useFormValidation=useFormValidation({kcContext,i18n}),_useFormValidation$fo=_useFormValidation.formValidationState,fieldStateByAttributeName=_useFormValidation$fo.fieldStateByAttributeName,isFormSubmittable=_useFormValidation$fo.isFormSubmittable,formValidationDispatch=_useFormValidation.formValidationDispatch,attributesWithPassword=_useFormValidation.attributesWithPassword;(0,react.useEffect)((function(){onIsFormSubmittableValueChange(isFormSubmittable)}),[isFormSubmittable]);var currentGroup="";return(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:attributesWithPassword.map((function(attribute,i){var _a,divId,options,_attribute$group=attribute.group,group=void 0===_attribute$group?"":_attribute$group,_attribute$groupDispl=attribute.groupDisplayHeader,groupDisplayHeader=void 0===_attribute$groupDispl?"":_attribute$groupDispl,_attribute$groupDispl2=attribute.groupDisplayDescription,groupDisplayDescription=void 0===_attribute$groupDispl2?"":_attribute$groupDispl2,_fieldStateByAttribut=fieldStateByAttributeName[attribute.name],value=_fieldStateByAttribut.value,displayableErrors=_fieldStateByAttribut.displayableErrors,formGroupClassName=(0,clsx.W)(getClassName("kcFormGroupClass"),0!==displayableErrors.length&&getClassName("kcFormGroupErrorClass"));return(0,jsx_runtime.jsxs)(react.Fragment,{children:[group!==currentGroup&&""!==(currentGroup=group)&&(0,jsx_runtime.jsxs)("div",Object.assign({className:formGroupClassName},{children:[(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:(0,jsx_runtime.jsx)("label",Object.assign({id:"header-"+group,className:getClassName("kcFormGroupHeader")},{children:advancedMsg(groupDisplayHeader)||currentGroup}))})),""!==groupDisplayDescription&&(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,jsx_runtime.jsx)("label",Object.assign({id:"description-"+group,className:getClassName("kcLabelClass")},{children:advancedMsg(groupDisplayDescription)}))}))]})),BeforeField&&(0,jsx_runtime.jsx)(BeforeField,{attribute}),(0,jsx_runtime.jsxs)("div",Object.assign({className:formGroupClassName},{children:[(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:[(0,jsx_runtime.jsx)("label",Object.assign({htmlFor:attribute.name,className:getClassName("kcLabelClass")},{children:advancedMsg(null!==(_a=attribute.displayName)&&void 0!==_a?_a:"")})),attribute.required&&(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:"*"})]})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(options=attribute.validators.options,void 0!==options?(0,jsx_runtime.jsx)("select",Object.assign({id:attribute.name,name:attribute.name,onChange:function onChange(event){return formValidationDispatch({action:"update value",name:attribute.name,newValue:event.target.value})},onBlur:function onBlur(){return formValidationDispatch({action:"focus lost",name:attribute.name})},value},{children:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("option",Object.assign({value:"",selected:!0,disabled:!0,hidden:!0},{children:msg("selectAnOption")})),options.options.map((function(option){return(0,jsx_runtime.jsx)("option",Object.assign({value:option},{children:option}),option)}))]})})):(0,jsx_runtime.jsx)("input",{type:function(){switch(attribute.name){case"password-confirm":case"password":return"password";default:return"text"}}(),id:attribute.name,name:attribute.name,value,onChange:function onChange(event){return formValidationDispatch({action:"update value",name:attribute.name,newValue:event.target.value})},onBlur:function onBlur(){return formValidationDispatch({action:"focus lost",name:attribute.name})},className:getClassName("kcInputClass"),"aria-invalid":0!==displayableErrors.length,disabled:attribute.readOnly,autoComplete:attribute.autocomplete})),0!==displayableErrors.length&&(divId="input-error-"+attribute.name,(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("style",{children:"#"+divId+" > span: { display: block; }"}),(0,jsx_runtime.jsx)("span",Object.assign({id:divId,className:getClassName("kcInputErrorMessageClass"),style:{position:1===displayableErrors.length?"absolute":void 0},"aria-live":"polite"},{children:displayableErrors.map((function(_ref){return _ref.errorMessage}))}))]}))]}))]})),AfterField&&(0,jsx_runtime.jsx)(AfterField,{attribute})]},i)}))})}},"./dist/tools/Array.prototype.every.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{"use strict";__webpack_require__("./node_modules/core-js/modules/es.array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),Array.prototype.every||(Array.prototype.every=function(callbackfn,thisArg){var T,k;if(null==this)throw new TypeError("this is null or not defined");var O=Object(this),len=O.length>>>0;if("function"!=typeof callbackfn&&"[object Function]"!==Object.prototype.toString.call(callbackfn))throw new TypeError;for(arguments.length>1&&(T=thisArg),k=0;k{"use strict";__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{var aCallable=__webpack_require__("./node_modules/core-js/internals/a-callable.js"),toObject=__webpack_require__("./node_modules/core-js/internals/to-object.js"),IndexedObject=__webpack_require__("./node_modules/core-js/internals/indexed-object.js"),lengthOfArrayLike=__webpack_require__("./node_modules/core-js/internals/length-of-array-like.js"),$TypeError=TypeError,createMethod=function(IS_RIGHT){return function(that,callbackfn,argumentsLength,memo){aCallable(callbackfn);var O=toObject(that),self=IndexedObject(O),length=lengthOfArrayLike(O),index=IS_RIGHT?length-1:0,i=IS_RIGHT?-1:1;if(argumentsLength<2)for(;;){if(index in self){memo=self[index],index+=i;break}if(index+=i,IS_RIGHT?index<0:length<=index)throw $TypeError("Reduce of empty array with no initial value")}for(;IS_RIGHT?index>=0:length>index;index+=i)index in self&&(memo=callbackfn(memo,self[index],index,O));return memo}};module.exports={left:createMethod(!1),right:createMethod(!0)}},"./node_modules/core-js/modules/es.array.reduce.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var $=__webpack_require__("./node_modules/core-js/internals/export.js"),$reduce=__webpack_require__("./node_modules/core-js/internals/array-reduce.js").left,arrayMethodIsStrict=__webpack_require__("./node_modules/core-js/internals/array-method-is-strict.js"),CHROME_VERSION=__webpack_require__("./node_modules/core-js/internals/engine-v8-version.js");$({target:"Array",proto:!0,forced:!__webpack_require__("./node_modules/core-js/internals/engine-is-node.js")&&CHROME_VERSION>79&&CHROME_VERSION<83||!arrayMethodIsStrict("reduce")},{reduce:function reduce(callbackfn){var length=arguments.length;return $reduce(this,callbackfn,length,length>1?arguments[1]:void 0)}})},"./node_modules/tsafe/esm/typeGuard.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5975.d9cc5f44.iframe.bundle.js b/5975.d9cc5f44.iframe.bundle.js new file mode 100644 index 00000000..fcdd591d --- /dev/null +++ b/5975.d9cc5f44.iframe.bundle.js @@ -0,0 +1 @@ +(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[5975],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/shared/UserProfileFormFields.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{"use strict";__webpack_require__.d(__webpack_exports__,{M:()=>UserProfileFormFields});__webpack_require__("./node_modules/core-js/modules/es.array.map.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var jsx_runtime=__webpack_require__("./node_modules/react/jsx-runtime.js"),react=__webpack_require__("./node_modules/react/index.js"),clsx=__webpack_require__("./dist/tools/clsx.js"),id=(__webpack_require__("./node_modules/core-js/modules/es.array.reduce.js"),__webpack_require__("./node_modules/core-js/modules/es.array.concat.js"),__webpack_require__("./node_modules/core-js/modules/es.object.from-entries.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.object.entries.js"),__webpack_require__("./node_modules/core-js/modules/es.array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.array.find.js"),__webpack_require__("./node_modules/core-js/modules/es.parse-int.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.constructor.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.index-of.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./dist/tools/Array.prototype.every.js"),__webpack_require__("./node_modules/tsafe/esm/id.mjs")),useConstCallback=__webpack_require__("./dist/tools/useConstCallback.js"),emailRegexp=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);iparseInt(max)){var msgArgs=["error-invalid-length-too-long",max];errors.push({errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:msg.apply(void 0,msgArgs)},errors.length),errorMessageStr:msgStr.apply(void 0,msgArgs),validatorName})}if(void 0!==min&&value.lengthparseInt(_max)){var _msgArgs5=["error-number-out-of-range-too-big",_max];errors.push({validatorName:_validatorName4,errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:msg.apply(void 0,_msgArgs5)},errors.length),errorMessageStr:msgStr.apply(void 0,_msgArgs5)})}else if(void 0!==_min&&intValue=0)){var _msgArgs7=[(0,id.id)("notAValidOption")];errors.push({validatorName:_validatorName5,errorMessage:(0,jsx_runtime.jsx)(react.Fragment,{children:advancedMsg.apply(void 0,_msgArgs7)},errors.length),errorMessageStr:advancedMsgStr.apply(void 0,_msgArgs7)})}return errors}));return{getErrors}}({kcContext:{messagesPerField:kcContext.messagesPerField,profile:{attributes:attributesWithPassword}},i18n}),getErrors=_useGetErrors.getErrors,initialInternalState=(0,react.useMemo)((function(){return Object.fromEntries(attributesWithPassword.map((function(attribute){return{attribute,errors:getErrors({name:attribute.name,fieldValueByAttributeName:Object.fromEntries(attributesWithPassword.map((function(_ref){var name=_ref.name,value=_ref.value;return[name,{value:null!=value?value:""}]})))})}})).map((function(_ref2){var _a,attribute=_ref2.attribute,errors=_ref2.errors;return[attribute.name,{value:null!==(_a=attribute.value)&&void 0!==_a?_a:"",errors,doDisplayPotentialErrorMessages:0!==errors.length}]})))}),[attributesWithPassword]),_useReducer=(0,react.useReducer)((function(state,params){var _Object$assign2;return Object.assign(Object.assign({},state),((_Object$assign2={})[params.name]=Object.assign(Object.assign({},state[params.name]),function(){var _Object$assign;switch(params.action){case"focus lost":return{doDisplayPotentialErrorMessages:!0};case"update value":return{value:params.newValue,errors:getErrors({name:params.name,fieldValueByAttributeName:Object.assign(Object.assign({},state),(_Object$assign={},_Object$assign[params.name]={value:params.newValue},_Object$assign))})}}}()),_Object$assign2))}),initialInternalState),_useReducer2=_slicedToArray(_useReducer,2),formValidationInternalState=_useReducer2[0],formValidationDispatch=_useReducer2[1];return{formValidationState:(0,react.useMemo)((function(){return{fieldStateByAttributeName:Object.fromEntries(Object.entries(formValidationInternalState).map((function(_ref3){var _ref4=_slicedToArray(_ref3,2),name=_ref4[0],_ref4$=_ref4[1],value=_ref4$.value,errors=_ref4$.errors;return[name,{value,displayableErrors:_ref4$.doDisplayPotentialErrorMessages?errors:[]}]}))),isFormSubmittable:Object.entries(formValidationInternalState).every((function(_ref5){var _ref6=_slicedToArray(_ref5,2),name=_ref6[0],_ref6$=_ref6[1],value=_ref6$.value;return 0===_ref6$.errors.length&&(""!==value||!attributesWithPassword.find((function(attribute){return attribute.name===name})).required)}))}}),[formValidationInternalState,attributesWithPassword]),formValidationDispatch,attributesWithPassword}}function UserProfileFormFields(props){var kcContext=props.kcContext,onIsFormSubmittableValueChange=props.onIsFormSubmittableValueChange,i18n=props.i18n,getClassName=props.getClassName,BeforeField=props.BeforeField,AfterField=props.AfterField,advancedMsg=i18n.advancedMsg,msg=i18n.msg,_useFormValidation=useFormValidation({kcContext,i18n}),_useFormValidation$fo=_useFormValidation.formValidationState,fieldStateByAttributeName=_useFormValidation$fo.fieldStateByAttributeName,isFormSubmittable=_useFormValidation$fo.isFormSubmittable,formValidationDispatch=_useFormValidation.formValidationDispatch,attributesWithPassword=_useFormValidation.attributesWithPassword;(0,react.useEffect)((function(){onIsFormSubmittableValueChange(isFormSubmittable)}),[isFormSubmittable]);var currentGroup="";return(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:attributesWithPassword.map((function(attribute,i){var _a,divId,options,_attribute$group=attribute.group,group=void 0===_attribute$group?"":_attribute$group,_attribute$groupDispl=attribute.groupDisplayHeader,groupDisplayHeader=void 0===_attribute$groupDispl?"":_attribute$groupDispl,_attribute$groupDispl2=attribute.groupDisplayDescription,groupDisplayDescription=void 0===_attribute$groupDispl2?"":_attribute$groupDispl2,_fieldStateByAttribut=fieldStateByAttributeName[attribute.name],value=_fieldStateByAttribut.value,displayableErrors=_fieldStateByAttribut.displayableErrors,formGroupClassName=(0,clsx.W)(getClassName("kcFormGroupClass"),0!==displayableErrors.length&&getClassName("kcFormGroupErrorClass"));return(0,jsx_runtime.jsxs)(react.Fragment,{children:[group!==currentGroup&&""!==(currentGroup=group)&&(0,jsx_runtime.jsxs)("div",Object.assign({className:formGroupClassName},{children:[(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:(0,jsx_runtime.jsx)("label",Object.assign({id:"header-"+group,className:getClassName("kcFormGroupHeader")},{children:advancedMsg(groupDisplayHeader)||currentGroup}))})),""!==groupDisplayDescription&&(0,jsx_runtime.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,jsx_runtime.jsx)("label",Object.assign({id:"description-"+group,className:getClassName("kcLabelClass")},{children:advancedMsg(groupDisplayDescription)}))}))]})),BeforeField&&(0,jsx_runtime.jsx)(BeforeField,{attribute}),(0,jsx_runtime.jsxs)("div",Object.assign({className:formGroupClassName},{children:[(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:[(0,jsx_runtime.jsx)("label",Object.assign({htmlFor:attribute.name,className:getClassName("kcLabelClass")},{children:advancedMsg(null!==(_a=attribute.displayName)&&void 0!==_a?_a:"")})),attribute.required&&(0,jsx_runtime.jsx)(jsx_runtime.Fragment,{children:"*"})]})),(0,jsx_runtime.jsxs)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:[(options=attribute.validators.options,void 0!==options?(0,jsx_runtime.jsx)("select",Object.assign({id:attribute.name,name:attribute.name,onChange:function onChange(event){return formValidationDispatch({action:"update value",name:attribute.name,newValue:event.target.value})},onBlur:function onBlur(){return formValidationDispatch({action:"focus lost",name:attribute.name})},value},{children:(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("option",Object.assign({value:"",selected:!0,disabled:!0,hidden:!0},{children:msg("selectAnOption")})),options.options.map((function(option){return(0,jsx_runtime.jsx)("option",Object.assign({value:option},{children:option}),option)}))]})})):(0,jsx_runtime.jsx)("input",{type:function(){switch(attribute.name){case"password-confirm":case"password":return"password";default:return"text"}}(),id:attribute.name,name:attribute.name,value,onChange:function onChange(event){return formValidationDispatch({action:"update value",name:attribute.name,newValue:event.target.value})},onBlur:function onBlur(){return formValidationDispatch({action:"focus lost",name:attribute.name})},className:getClassName("kcInputClass"),"aria-invalid":0!==displayableErrors.length,disabled:attribute.readOnly,autoComplete:attribute.autocomplete})),0!==displayableErrors.length&&(divId="input-error-"+attribute.name,(0,jsx_runtime.jsxs)(jsx_runtime.Fragment,{children:[(0,jsx_runtime.jsx)("style",{children:"#"+divId+" > span: { display: block; }"}),(0,jsx_runtime.jsx)("span",Object.assign({id:divId,className:getClassName("kcInputErrorMessageClass"),style:{position:1===displayableErrors.length?"absolute":void 0},"aria-live":"polite"},{children:displayableErrors.map((function(_ref){return _ref.errorMessage}))}))]}))]}))]})),AfterField&&(0,jsx_runtime.jsx)(AfterField,{attribute})]},i)}))})}},"./dist/tools/Array.prototype.every.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{"use strict";__webpack_require__("./node_modules/core-js/modules/es.array.every.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),Array.prototype.every||(Array.prototype.every=function(callbackfn,thisArg){var T,k;if(null==this)throw new TypeError("this is null or not defined");var O=Object(this),len=O.length>>>0;if("function"!=typeof callbackfn&&"[object Function]"!==Object.prototype.toString.call(callbackfn))throw new TypeError;for(arguments.length>1&&(T=thisArg),k=0;k{"use strict";__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{var aCallable=__webpack_require__("./node_modules/core-js/internals/a-callable.js"),toObject=__webpack_require__("./node_modules/core-js/internals/to-object.js"),IndexedObject=__webpack_require__("./node_modules/core-js/internals/indexed-object.js"),lengthOfArrayLike=__webpack_require__("./node_modules/core-js/internals/length-of-array-like.js"),$TypeError=TypeError,createMethod=function(IS_RIGHT){return function(that,callbackfn,argumentsLength,memo){aCallable(callbackfn);var O=toObject(that),self=IndexedObject(O),length=lengthOfArrayLike(O),index=IS_RIGHT?length-1:0,i=IS_RIGHT?-1:1;if(argumentsLength<2)for(;;){if(index in self){memo=self[index],index+=i;break}if(index+=i,IS_RIGHT?index<0:length<=index)throw $TypeError("Reduce of empty array with no initial value")}for(;IS_RIGHT?index>=0:length>index;index+=i)index in self&&(memo=callbackfn(memo,self[index],index,O));return memo}};module.exports={left:createMethod(!1),right:createMethod(!0)}},"./node_modules/core-js/modules/es.array.reduce.js":(__unused_webpack_module,__unused_webpack_exports,__webpack_require__)=>{"use strict";var $=__webpack_require__("./node_modules/core-js/internals/export.js"),$reduce=__webpack_require__("./node_modules/core-js/internals/array-reduce.js").left,arrayMethodIsStrict=__webpack_require__("./node_modules/core-js/internals/array-method-is-strict.js"),CHROME_VERSION=__webpack_require__("./node_modules/core-js/internals/engine-v8-version.js");$({target:"Array",proto:!0,forced:!__webpack_require__("./node_modules/core-js/internals/engine-is-node.js")&&CHROME_VERSION>79&&CHROME_VERSION<83||!arrayMethodIsStrict("reduce")},{reduce:function reduce(callbackfn){var length=arguments.length;return $reduce(this,callbackfn,length,length>1?arguments[1]:void 0)}})},"./node_modules/tsafe/esm/typeGuard.mjs":(__unused_webpack___webpack_module__,__webpack_exports__,__webpack_require__)=>{"use strict";function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6056.19a44ded.iframe.bundle.js b/6056.19a44ded.iframe.bundle.js new file mode 100644 index 00000000..a5bba8d0 --- /dev/null +++ b/6056.19a44ded.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6056],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginPassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginPassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6056.6975f6af.iframe.bundle.js b/6056.6975f6af.iframe.bundle.js deleted file mode 100644 index daaa342b..00000000 --- a/6056.6975f6af.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6056],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginPassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginPassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/react/jsx-runtime.js"),react__WEBPACK_IMPORTED_MODULE_13__=__webpack_require__("./node_modules/react/index.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_14__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_15__=__webpack_require__("./dist/tools/useConstCallback.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_16__=__webpack_require__("./dist/login/lib/useGetClassName.js");function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6152.64235fc1.iframe.bundle.js b/6152.64235fc1.iframe.bundle.js new file mode 100644 index 00000000..f11b18c0 --- /dev/null +++ b/6152.64235fc1.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6152],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUpdateProfile.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUpdateProfile});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginUpdateProfile(props){var _a,_b,_c,_d,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,user=kcContext.user,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginProfileTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-update-profile-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[user.editUsernameAllowed&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("username",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",defaultValue:null!==(_a=user.username)&&void 0!==_a?_a:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",name:"email",defaultValue:null!==(_b=user.email)&&void 0!==_b?_b:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("firstName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"firstName",className:getClassName("kcLabelClass")},{children:msg("firstName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"firstName",name:"firstName",defaultValue:null!==(_c=user.firstName)&&void 0!==_c?_c:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("lastName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"lastName",className:getClassName("kcLabelClass")},{children:msg("lastName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"lastName",name:"lastName",defaultValue:null!==(_d=user.lastName)&&void 0!==_d?_d:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6152.c7762423.iframe.bundle.js b/6152.c7762423.iframe.bundle.js deleted file mode 100644 index 9490c3dc..00000000 --- a/6152.c7762423.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6152],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUpdateProfile.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUpdateProfile});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginUpdateProfile(props){var _a,_b,_c,_d,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,user=kcContext.user,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("loginProfileTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-update-profile-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[user.editUsernameAllowed&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("username",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",defaultValue:null!==(_a=user.username)&&void 0!==_a?_a:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("email",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"email",className:getClassName("kcLabelClass")},{children:msg("email")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"email",name:"email",defaultValue:null!==(_b=user.email)&&void 0!==_b?_b:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("firstName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"firstName",className:getClassName("kcLabelClass")},{children:msg("firstName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"firstName",name:"firstName",defaultValue:null!==(_c=user.firstName)&&void 0!==_c?_c:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("lastName",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"lastName",className:getClassName("kcLabelClass")},{children:msg("lastName")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"lastName",name:"lastName",defaultValue:null!==(_d=user.lastName)&&void 0!==_d?_d:"",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6213.8031b1b6.iframe.bundle.js b/6213.8031b1b6.iframe.bundle.js deleted file mode 100644 index 0a6f8ca9..00000000 --- a/6213.8031b1b6.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6213],{"./dist/account/i18n/baseMessages/ca.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Desa",doCancel:"Cancel·la",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ó de Compte Keycloak",authenticatorTitle:"Autenticador",applicationsHtmlTitle:"Aplicacions",authenticatorCode:"Codi d'un sol ús",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ça",street:"Carrer",locality:"Ciutat o Municipi",region:"Estat, Província, o Regió",postal_code:"Postal code",country:"País",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ïdors d'identitat","role_manage-realm":"Gestionar domini","role_manage-users":"Gestinar usuaris","role_manage-applications":"Gestionar aplicacions","role_manage-identity-providers":"Gestionar proveïdors 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és sense connexió",client_account:"Compte","client_security-admin-console":"Consola d'Administració de Seguretat","client_realm-management":"Gestió de domini",client_broker:"Broker",requiredFields:"Camps obligatoris",allFieldsRequired:"Tots els camps obligatoris",backToApplication:"« Torna a l'aplicació",backTo:"Torna a {0}",date:"Data",event:"Event",ip:"IP",client:"Client",clients:"Clients",details:"Detalls",started:"Iniciat",lastAccess:"Últim accés",expires:"Expira",applications:"Aplicacions",account:"Compte",federatedIdentity:"Identitat federada",authenticator:"Autenticador",sessions:"Sessions",log:"Registre",application:"Aplicació",availablePermissions:"Permisos disponibles",grantedPermissions:"Permisos concedits",grantedPersonalInfo:"Informació personal concedida",additionalGrants:"Permisos addicionals",action:"Acció",inResource:"a",fullAccess:"Accés total",offlineToken:"Codi d'autorització offline",revoke:"Revocar permís",configureAuthenticators:"Autenticadors configurats",mobile:"Mòbil",totpStep1:'Instal·la FreeOTP o Google Authenticator al teu telèfon mòbil. Les dues aplicacions estan disponibles a Google Play i en l\'App Store d\'Apple.',totpStep2:"Obre l'aplicació i escaneja el codi o introdueix la clau.",totpStep3:"Introdueix el codi únic que et mostra l'aplicació d'autenticació i fes clic a Envia per finalitzar la configuració",missingUsernameMessage:"Si us plau indica el teu usuari.",missingFirstNameMessage:"Si us plau indica el nom.",invalidEmailMessage:"Email no vàlid",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ó",invalidPasswordExistingMessage:"La contrasenya actual no és correcta.",invalidPasswordConfirmMessage:"La confirmació de contrasenya no coincideix.",invalidTotpMessage:"El código de autenticación no es válido.",usernameExistsMessage:"L'usuari ja existeix",emailExistsMessage:"L'email ja existeix",readOnlyUserMessage:"No pots actualitzar el teu usuari perquè el teu compte és de només lectura.",readOnlyPasswordMessage:"No pots actualitzar la contrasenya perquè el teu compte és de només lectura.",successTotpMessage:"Aplicació d'autenticació mòbil configurada.",successTotpRemovedMessage:"Aplicació d'autenticació mòbil eliminada.",successGrantRevokedMessage:"Permís revocat correctament",accountUpdatedMessage:"El teu compte s'ha actualitzat.",accountPasswordUpdatedMessage:"La contrasenya s'ha actualitzat.",missingIdentityProviderMessage:"Proveïdor d'identitat no indicat.",invalidFederatedIdentityActionMessage:"Acció no vàlida o no indicada.",identityProviderNotFoundMessage:"No s'ha trobat un proveïdor d'identitat.",federatedIdentityLinkNotActiveMessage:"Aquesta identitat ja no està activa",federatedIdentityRemovingLastProviderMessage:"No pots eliminar l'última identitat federada perquè no tens fixada una contrasenya.",identityProviderRedirectErrorMessage:"Error en la redirecció al proveïdor d'identitat",identityProviderRemovedMessage:"Proveïdor d'identitat esborrat correctament.",accountDisabledMessage:"El compte està desactivada, contacteu amb l'administrador.",accountTemporarilyDisabledMessage:"El compte està temporalment desactivat, contacta amb l'administrador o intenta-ho de nou més tard.",invalidPasswordMinLengthMessage:"Contrasenya incorrecta: longitud mínima {0}.",invalidPasswordMinLowerCaseCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} lletres minúscules.",invalidPasswordMinDigitsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres numéricos.",invalidPasswordMinUpperCaseCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} lletres majúscules.",invalidPasswordMinSpecialCharsMessage:"Contrasenya incorrecta: ha de contenir almenys {0} caràcters especials.",invalidPasswordNotUsernameMessage:"Contrasenya incorrecta: no pot ser igual al nom d'usuari.",invalidPasswordRegexPatternMessage:"Contrasenya incorrecta: no compleix l'expressió regular.",invalidPasswordHistoryMessage:"Contrasenya incorrecta: no pot ser igual a cap de les últimes {0} contrasenyes."}}}]); \ No newline at end of file diff --git a/6213.e86d704a.iframe.bundle.js b/6213.e86d704a.iframe.bundle.js new file mode 100644 index 00000000..1ce4484f --- /dev/null +++ b/6213.e86d704a.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6213],{"./dist/account/i18n/baseMessages/ca.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Desa",doCancel:"Cancel·la",doLogOutAllSessions:"Surt de totes les sessions",doRemove:"Elimina",doAdd:"Afegeix",doSignOut:"Surt",doLogIn:"Entra",doLink:"Enllaça",noAccessMessage:"Accés no permès",personalInfoSidebarTitle:"Informació personal",accountSecuritySidebarTitle:"Seguretat del compte",signingInSidebarTitle:"Identificació",deviceActivitySidebarTitle:"Activitat dels dispositius",linkedAccountsSidebarTitle:"Comptes enllaçats",editAccountHtmlTitle:"Edita el compte",personalInfoHtmlTitle:"Informació personal",federatedIdentitiesHtmlTitle:"Identitats federades",accountLogHtmlTitle:"Registre del compte",changePasswordHtmlTitle:"Canvia la contrasenya",deviceActivityHtmlTitle:"Activitat dels dispositius",sessionsHtmlTitle:"Sessions",accountManagementTitle:"Gestor de comptes del Keycloak",authenticatorTitle:"Autenticador",applicationsHtmlTitle:"Aplicacions",linkedAccountsHtmlTitle:"Comptes enllaçats",accountManagementWelcomeMessage:"Us donem la benvinguda al gestor de comptes del Keycloak",personalInfoIntroMessage:"Gestioneu la vostra informació bàsica",accountSecurityTitle:"Seguretat del compte",accountSecurityIntroMessage:"Controleu la vostra contrasenya i l'accés al compte",applicationsIntroMessage:"Feu seguiment i gestioneu els permisos de les aplicacions per a accedir al vostre compte",resourceIntroMessage:"Compartiu recursos entre membres del vostre equip",passwordLastUpdateMessage:"La contrasenya es va actualitzar el",updatePasswordTitle:"Actualitza la contrasenya",updatePasswordMessageTitle:"Assegureu-vos d'establir una contrasenya forta",updatePasswordMessage:"Una contrasenya forta conté una combinació de números, lletres i símbols. És difícil d'endevinar, no es pareix a una paraula real, i només s'utilitza per a aquest compte.",personalSubTitle:"La vostra informació personal",personalSubMessage:"Gestioneu la vostra informació bàsica.",authenticatorCode:"Codi d'un sol ús",email:"Correu electrònic",firstName:"Nom",givenName:"Nom de pila",fullName:"Nom complet",lastName:"Cognoms",familyName:"Cognom",password:"Contrasenya",currentPassword:"Contrasenya actual",passwordConfirm:"Confirmació",passwordNew:"Contrasenya nova",username:"Nom d'usuari",address:"Adreça",street:"Carrer",locality:"Ciutat o municipi",region:"Estat, província, o regió",postal_code:"Codi postal",country:"País",emailVerified:"Correu electrònic verificat",website:"Pàgina web",phoneNumber:"Número de telèfon",phoneNumberVerified:"Número de telèfon verificat",gender:"Gènere",birthday:"Natalici",zoneinfo:"Fus horari",gssDelegationCredential:"Credencial de delegació GSS",profileScopeConsentText:"Perfil d'usuari",emailScopeConsentText:"Correu electrònic",addressScopeConsentText:"Adreça",phoneScopeConsentText:"Número de telèfon",offlineAccessScopeConsentText:"Accés fora de línia",samlRoleListScopeConsentText:"Els meus rols",rolesScopeConsentText:"Rols d'usuari",role_admin:"Administrador","role_realm-admin":"Administrador del domini","role_create-realm":"Crea un domini","role_view-realm":"Visualitza el domini","role_view-users":"Visualitza els usuaris","role_view-applications":"Visualitza les aplicacions","role_view-groups":"Visualitza els grups","role_view-clients":"Visualitza els clients","role_view-events":"Visualitza els esdeveniments","role_view-identity-providers":"Visualitza els proveïdors d'identitat","role_view-consent":"Visualitza els consentiments","role_manage-realm":"Gestiona el domini","role_manage-users":"Gestiona els usuaris","role_manage-applications":"Gestiona les aplicacions","role_manage-identity-providers":"Gestiona els proveïdors d'identitat","role_manage-clients":"Gestiona els clients","role_manage-events":"Gestiona els esdeveniments","role_view-profile":"Visualitza el perfil","role_manage-account":"Gestiona el compte","role_manage-account-links":"Gestiona els enllaços del compte","role_manage-consent":"Gestiona els consentiments","role_read-token":"Llegeix el codi d'autorització","role_offline-access":"Accés fora de línia",role_uma_authorization:"Obté permisos",client_account:"Compte","client_account-console":"Consola del compte","client_security-admin-console":"consola d'administració de seguretat","client_admin-cli":"CLI d'administració","client_realm-management":"Gestió del domini",client_broker:"Agent",requiredFields:"Camps obligatoris",allFieldsRequired:"Tots els camps són obligatoris",backToApplication:"« Torna a l'aplicació",backTo:"Torna a {0}",date:"Data",event:"Esdeveniment",ip:"IP",client:"Client",clients:"Clients",details:"Detalls",started:"Iniciat",lastAccess:"Últim accés",expires:"Caduca",applications:"Aplicacions",account:"Compte",federatedIdentity:"Identitat federada",authenticator:"Autenticador","device-activity":"Activitat dels dispositius",sessions:"Sessions",log:"Registre",application:"Aplicació",availableRoles:"Rols disponibles",grantedPermissions:"Permisos concedits",grantedPersonalInfo:"Informació personal concedida",additionalGrants:"Concessions addicionals",action:"Acció",inResource:"a",fullAccess:"Accés total",offlineToken:"Codi d'autorització fora de línia",revoke:"Revoca el permís",configureAuthenticators:"Autenticadors configurats",mobile:"Mòbil",totpStep1:"Instal·leu una de les aplicacions següents al vostre mòbil:",totpStep2:"Obriu l'aplicació i escanegeu el codi de barres:",totpStep3:"Introduïu el codi d'un sol ús proveït per l'aplicació i feu clic a Desa per a finalitzar la configuració.",totpStep3DeviceName:"Introduïu un nom de dispositiu per a ajudar-vos a gestionar els vostres dispositius OTP.",totpManualStep2:"Obriu l'aplicació i introduïu la clau:",totpManualStep3:"Utilitzeu els valors de configuració següents si l'aplicació permet establir-los:",totpUnableToScan:"No podeu escanejar?",totpScanBarcode:"Voleu escanejar el codi de barres?","totp.totp":"Basat en temps","totp.hotp":"Basat en comptador",totpType:"Tipus",totpAlgorithm:"Algoritme",totpDigits:"Dígits",totpInterval:"Interval",totpCounter:"Comptador",totpDeviceName:"Nom del dispositiu",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"Aquesta acció és irreversible",deletingImplies:"La supressió del vostre compte implica:",errasingData:"Suprimir totes les vostres dades",loggingOutImmediately:"Desconnectar-vos immediatament",accountUnusable:"Qualsevol ús posterior de l'aplicació no serà possible amb aquest compte",missingUsernameMessage:"Indiqueu el vostre nom d'usuari.",missingFirstNameMessage:"Indiqueu el vostre nom.",invalidEmailMessage:"L'adreça de correu electrònic no és vàlida.",missingLastNameMessage:"Indiqueu els vostres cognoms.",missingEmailMessage:"Indiqueu la vostra adreça de correu electrònic.",missingPasswordMessage:"Indiqueu la contrasenya.",notMatchPasswordMessage:"Les contrasenyes no coincideixen.",invalidUserMessage:"L'usuari no és vàlid.",updateReadOnlyAttributesRejectedMessage:"S'ha rebutjat l'actualització d'un atribut de només lectura.",missingTotpMessage:"Indiqueu el codi d'autenticació.",missingTotpDeviceNameMessage:"Indiqueu el nom de dispositiu.",invalidPasswordExistingMessage:"La contrasenya actual no és correcta.",invalidPasswordConfirmMessage:"La confirmació de contrasenya no coincideix.",invalidTotpMessage:"El codi d'autenticació no és vàlid.",usernameExistsMessage:"El nom d'usuari ja existeix.",emailExistsMessage:"El correu electrònic ja existeix.",readOnlyUserMessage:"No podeu actualitzar el vostre compte perquè és de només lectura.",readOnlyUsernameMessage:"No podeu actualitzar el vostre nom d'usuari perquè és de només lectura.",readOnlyPasswordMessage:"No podeu actualitzar la vostra contrasenya perquè és de només lectura.",successTotpMessage:"S'ha configurat l'aplicació d'autenticació mòbil.",successTotpRemovedMessage:"S'ha eliminat l'aplicació d'autenticació mòbil.",successGrantRevokedMessage:"S'ha revocat el permís correctament.",accountUpdatedMessage:"S'ha actualitzat el vostre compte.",accountPasswordUpdatedMessage:"S'ha actualitzat la vostra contrasenya.",missingIdentityProviderMessage:"No s'ha indicat el proveïdor d'identitat.",invalidFederatedIdentityActionMessage:"Acció no vàlida o no indicada.",identityProviderNotFoundMessage:"No s'ha trobat un proveïdor d'identitat.",federatedIdentityLinkNotActiveMessage:"Aquesta identitat ja no està activa.",federatedIdentityRemovingLastProviderMessage:"No podeu eliminar l'última identitat federada perquè no teniu establerta una contrasenya.",identityProviderRedirectErrorMessage:"No s'ha pogut redirigir al proveïdor d'identitat.",identityProviderRemovedMessage:"S'ha eliminat el proveïdor d'identitat correctament.",identityProviderAlreadyLinkedMessage:"La identitat federada retornada per {0} ja està enllaçada a un altre usuari.",staleCodeAccountMessage:"La pàgina ha caducat. Proveu-ho de nou.",consentDenied:"Consentiment rebutjat.","access-denied-when-idp-auth":"S'ha denegat l'accés mentre s'autenticava amb {0}",accountDisabledMessage:"El compte està inhabilitat, contacteu amb l'administrador.",accountTemporarilyDisabledMessage:"El compte està temporalment inhabilitat, contacteu amb l'administrador o intenteu-ho de nou més tard.",invalidPasswordMinLengthMessage:"La contrasenya no és vàlida: la llargària mínima és {0}.",invalidPasswordMaxLengthMessage:"La contrasenya no és vàlida: la llargària màxima és {0}.",invalidPasswordMinLowerCaseCharsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} lletres minúscules.",invalidPasswordMinDigitsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} caràcters numèrics.",invalidPasswordMinUpperCaseCharsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} lletres majúscules.",invalidPasswordMinSpecialCharsMessage:"La contrasenya no és vàlida: ha de contenir almenys {0} caràcters especials.",invalidPasswordNotUsernameMessage:"La contrasenya no és vàlida: no pot ser igual al nom d'usuari.",invalidPasswordNotEmailMessage:"La contrasenya no és vàlida: no pot ser igual al correu electrònic.",invalidPasswordRegexPatternMessage:"La contrasenya no és vàlida: no coincideix amb el patró de l'expressió regular.",invalidPasswordHistoryMessage:"La contrasenya no és vàlida: no pot ser igual a les últimes {0} contrasenyes.",invalidPasswordBlacklistedMessage:"La contrasenya no és vàlida: està en una llista negra.",invalidPasswordGenericMessage:"La contrasenya no és vàlida: la contrasenya nova no coincideix amb les polítiques de contrasenya.",myResources:"Els meus recursos",myResourcesSub:"Els meus recursos",doDeny:"Rebutja",doRevoke:"Revoca",doApprove:"Aprova",doRemoveSharing:"Deixa de compartir",doRemoveRequest:"Retira la petició",peopleAccessResource:"Gent amb accés a aquest recurs",resourceManagedPolicies:"Permisos que concedeixen accés a aquest recurs",resourceNoPermissionsGrantingAccess:"No hi ha cap permís que concedeixi accés a aquest recurs",anyAction:"Qualsevol acció",description:"Descripció",name:"Nom",scopes:"Àmbits",resource:"Recurs",user:"Usuari",peopleSharingThisResource:"Gent compartint aquest recurs",shareWithOthers:"Comparteix amb altres",needMyApproval:"Requereix la meua aprovació",requestsWaitingApproval:"Les vostres peticions que esperen aprovació",icon:"Icona",requestor:"Sol·licitant",owner:"Propietari",resourcesSharedWithMe:"Recursos compartits amb mi",permissionRequestion:"Petició de permís",permission:"Permís",shares:"comparticions",notBeingShared:"Aquest recurs no s'està compartint.",notHaveAnyResource:"No teniu cap recurs",noResourcesSharedWithYou:"No hi ha cap recurs compartit amb vosaltres",havePermissionRequestsWaitingForApproval:"Teniu {0} peticions de permís esperant l'aprovació.",clickHereForDetails:"Feu clic aquí per a obtenir més detalls.",resourceIsNotBeingShared:"El recurs no s'està compartint",locale_ar:"àrab",locale_ca:"català",locale_cs:"txec",locale_de:"alemany",locale_en:"anglès",locale_es:"castellà",locale_fr:"francès",locale_hu:"hongarès",locale_fa:"persa",locale_it:"italià",locale_ja:"japonès",locale_lt:"lituà",locale_nl:"neerlandès",locale_no:"noruec",locale_pl:"polonès","locale_pt-BR":"portuguès (Brasil)",locale_ru:"rus",locale_sk:"eslovè",locale_sv:"suec",locale_tr:"turc","locale_zh-CN":"xinès simplificat",locale_fi:"finès",applicationName:"Nom",applicationType:"Tipus d'aplicació",applicationInUse:"Només aplicacions en ús",clearAllFilter:"Esborra tots els filtres",activeFilters:"Filtres actius",filterByName:"Filtra per nom…",allApps:"Totes les aplicacions",internalApps:"Aplicacions internes",thirdpartyApps:"Aplicacions de tercers",appResults:"Resultats",clientNotFoundMessage:"No s'ha trobat el client.",authorizedProvider:"Proveïdor autoritzat",authorizedProviderMessage:"Proveïdors autoritzats enllaçats amb el vostre compte",identityProvider:"Proveïdor d'identitat",identityProviderMessage:"Per a enllaçar el vostre compte amb els proveïdors d'identitat que heu configurat",socialLogin:"Identificació social",userDefined:"Definit per l'usuari",removeAccess:"Elimina l'accés",removeAccessMessage:"Haureu de tornar a concedir l'accés de nou si voleu utilitzar el compte d'aquesta aplicació.",authenticatorStatusMessage:"L'autenticació de doble factor està",authenticatorFinishSetUpTitle:"La vostra autenticació de doble factor",authenticatorFinishSetUpMessage:"Cada vegada que entreu al vostre compte del Keycloak, se us demanarà que introduïu un codi d'autenticació de doble factor.",authenticatorSubTitle:"Configura l'autenticació de doble factor",authenticatorSubMessage:"Per a millorar la seguretat del vostre compte, habiliteu almenys un dels mètodes d'autenticació de doble factor.",authenticatorMobileTitle:"Autenticador mòbil",authenticatorMobileMessage:"Utilitzeu un autenticador mòbil per a obtenir codis de verificació com a autenticació de doble factor.",authenticatorMobileFinishSetUpMessage:"S'ha associat l'autenticador al vostre telèfon.",authenticatorActionSetup:"Configura",authenticatorSMSTitle:"Codi SMS",authenticatorSMSMessage:"El Keycloak enviarà el codi de verificació al vostre telèfon com a autenticació de doble factor.",authenticatorSMSFinishSetUpMessage:"Els missatges de text s'envien al",authenticatorDefaultStatus:"Predefinit",authenticatorChangePhone:"Canvia el número de telèfon",authenticatorMobileSetupTitle:"Configuració de l'autenticador mòbil",smscodeIntroMessage:"Introduïu el vostre número de telèfon i se us enviarà un codi de verificació.",mobileSetupStep1:"Instal·leu una aplicació d'autenticació al telèfon. Les aplicacions llistades a sota són compatibles.",mobileSetupStep2:"Obriu l'aplicació i escanegeu el codi de barres:",mobileSetupStep3:"Introduïu el codi d'un sol ús proveït per l'aplicació i feu clic a Desa per a finalitzar la configuració.",scanBarCode:"Voleu escanejar el codi de barres?",enterBarCode:"Introduïu el codi d'un sol ús",doCopy:"Copia",doFinish:"Finalitza",authenticatorSMSCodeSetupTitle:"Configuració del codi SMS",chooseYourCountry:"Seleccioneu el vostre país",enterYourPhoneNumber:"Introduïu el vostre número de telèfon",sendVerficationCode:"Envia un codi de verificació",enterYourVerficationCode:"Introduïu el codi de verificació",authenticatorBackupCodesSetupTitle:"Configuració dels codis d'autenticació de recuperació",realmName:"Domini",doDownload:"Baixa",doPrint:"Imprimeix",generateNewBackupCodes:"Genera codis d'autenticació de recuperació nous",backtoAuthenticatorPage:"Torna a la pàgina de l'autenticador",resources:"Recursos",sharedwithMe:"Compartit amb mi",share:"Comparteix",sharedwith:"Compartit amb",accessPermissions:"Permisos d'accés",permissionRequests:"Peticions de permís",approve:"Aprova",approveAll:"Aprova-ho tot",people:"persones",perPage:"per pàgina",currentPage:"Pàgina actual",sharetheResource:"Comparteix el recurs",group:"Grup",selectPermission:"Seleccioneu el permís",addPeople:"Afegiu persones amb qui compartir els vostres recursos",addTeam:"Afegiu un equip amb qui compartir els vostres recursos",myPermissions:"Els meus permisos",waitingforApproval:"Esperant l'aprovació",anyPermission:"Qualsevol permís","openshift.scope.user_info":"Informació d'usuari","openshift.scope.user_check-access":"Informació d'accessos d'usuari","openshift.scope.user_full":"Accés total","openshift.scope.list-projects":"Llista els projectes","error-invalid-value":"El valor no és vàlid.","error-invalid-blank":"Especifiqueu un valor.","error-empty":"Especifiqueu un valor.","error-invalid-length":"L'atribut {0} ha de tindre una llargària d'entre {1} i {2}.","error-invalid-length-too-short":"L'atribut {0} ha de tindre una llargària mínima de {1}.","error-invalid-length-too-long":"L'atribut {0} ha de tindre una llargària màxima de {2}.","error-invalid-email":"L'adreça de correu electrònic no és vàlida.","error-invalid-number":"El nombre no és vàlid.","error-number-out-of-range":"L'atribut {0} ha de ser un número entre {1} i {2}.","error-number-out-of-range-too-small":"L'atribut {0} ha de tindre valor mínim de {1}.","error-number-out-of-range-too-big":"L'atribut {0} ha de tindre valor màxim de {2}.","error-pattern-no-match":"El valor no és vàlid.","error-invalid-uri":"L'URL no és vàlid.","error-invalid-uri-scheme":"L'esquema d'URL no és vàlid.","error-invalid-uri-fragment":"El fragment d'URL no és vàlid.","error-user-attribute-required":"Especifiqueu l'atribut {0}.","error-invalid-date":"La data no és vàlida.","error-user-attribute-read-only":"El camp {0} és només de lectura.","error-username-invalid-character":"El nom d'usuari conté un caràcter no vàlid.","error-person-name-invalid-character":"El nom conté un caràcter no vàlid."}}}]); \ No newline at end of file diff --git a/6344.50f830ec.iframe.bundle.js b/6344.9aa6fd70.iframe.bundle.js similarity index 71% rename from 6344.50f830ec.iframe.bundle.js rename to 6344.9aa6fd70.iframe.bundle.js index 89844c5c..c447c586 100644 --- a/6344.50f830ec.iframe.bundle.js +++ b/6344.9aa6fd70.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6344],{"./dist/account/i18n/baseMessages/da.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",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à",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_it:"Italian",locale_ja:"日本語",locale_nl:"Nederlands",locale_no:"Norsk",locale_lt:"Lietuvių","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska","locale_zh-CN":"中文简体",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",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.",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",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",authenticatorSMSCodeSetupTitle:"SMS Kode Opsætning",chooseYourCountry:"Vælg dit land",enterYourPhoneNumber:"Indtast dit telefonnummer",sendVerficationCode:"Send Verifikationskode",enterYourVerficationCode:"Indtast din verifikationskode",authenticatorBackupCodesSetupTitle:"Backup Kode Opsætning",realmName:"Rige",doDownload:"Download",doPrint:"Print",generateNewBackupCodes:"Generer Nye Backup Koder",backtoAuthenticatorPage:"Tilbage til Authenticator siden",resources:"Ressourcer",sharedwithMe:"Delt med mig",share:"Del",sharedwith:"Delt med",accessPermissions:"Adgangstilladelser",permissionRequests:"Rettigheds forespørgsler",approve:"Godkend",approveAll:"Godkend alle",people:"Folk",perPage:"per side",currentPage:"Nuværende Side",sharetheResource:"Del Ressourcen",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"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6344],{"./dist/account/i18n/baseMessages/da.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",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à",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fr:"Français",locale_it:"Italian",locale_ja:"日本語",locale_nl:"Nederlands",locale_no:"Norsk",locale_lt:"Lietuvių","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska","locale_zh-CN":"中文简体",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",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.",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",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",authenticatorSMSCodeSetupTitle:"SMS Kode Opsætning",chooseYourCountry:"Vælg dit land",enterYourPhoneNumber:"Indtast dit telefonnummer",sendVerficationCode:"Send Verifikationskode",enterYourVerficationCode:"Indtast din verifikationskode",authenticatorBackupCodesSetupTitle:"Backup Kode Opsætning",realmName:"Rige",doDownload:"Download",doPrint:"Print",generateNewBackupCodes:"Generer Nye Backup Koder",backtoAuthenticatorPage:"Tilbage til Authenticator siden",resources:"Ressourcer",sharedwithMe:"Delt med mig",share:"Del",sharedwith:"Delt med",accessPermissions:"Adgangstilladelser",permissionRequests:"Rettigheds forespørgsler",approve:"Godkend",approveAll:"Godkend alle",people:"Folk",perPage:"per side",currentPage:"Nuværende Side",sharetheResource:"Del Ressourcen",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"}}}]); \ No newline at end of file diff --git a/6726.a452d4c7.iframe.bundle.js b/6726.a452d4c7.iframe.bundle.js deleted file mode 100644 index cc151d66..00000000 --- a/6726.a452d4c7.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6726],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginResetPassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginResetPassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginResetPassword(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,realm=kcContext.realm,auth=kcContext.auth,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("emailForgotTitle"),infoNode:msg("emailInstruction")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-reset-password-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:realm.loginWithEmailAllowed?realm.registrationEmailAsUsername?msg("email"):msg("usernameOrEmail"):msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",className:getClassName("kcInputClass"),autoFocus:!0,defaultValue:void 0!==auth&&auth.showUsername?auth.attemptedUsername:void 0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),getClassName("kcFormSettingClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",Object.assign({href:url.loginUrl},{children:msg("backToLogin")}))})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/6726.f54404fc.iframe.bundle.js b/6726.f54404fc.iframe.bundle.js new file mode 100644 index 00000000..f5838bca --- /dev/null +++ b/6726.f54404fc.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[6726],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginResetPassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginResetPassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginResetPassword(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,url=kcContext.url,realm=kcContext.realm,auth=kcContext.auth,msg=i18n.msg,msgStr=i18n.msgStr;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("emailForgotTitle"),infoNode:msg("emailInstruction")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-reset-password-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"username",className:getClassName("kcLabelClass")},{children:realm.loginWithEmailAllowed?realm.registrationEmailAsUsername?msg("email"):msg("usernameOrEmail"):msg("username")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",className:getClassName("kcInputClass"),autoFocus:!0,defaultValue:void 0!==auth&&auth.showUsername?auth.attemptedUsername:void 0})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),getClassName("kcFormSettingClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("span",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("a",Object.assign({href:url.loginUrl},{children:msg("backToLogin")}))})}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/7146.ef8490f2.iframe.bundle.js b/7146.9c644242.iframe.bundle.js similarity index 99% rename from 7146.ef8490f2.iframe.bundle.js rename to 7146.9c644242.iframe.bundle.js index 5408194a..9d4e75d6 100644 --- a/7146.ef8490f2.iframe.bundle.js +++ b/7146.9c644242.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7146],{"./dist/account/i18n/baseMessages/zh-CN.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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} 个旧密码相同"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7146],{"./dist/account/i18n/baseMessages/zh-CN.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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} 个旧密码相同",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/7273.0c059ee6.iframe.bundle.js b/7273.0c059ee6.iframe.bundle.js new file mode 100644 index 00000000..2b645b61 --- /dev/null +++ b/7273.0c059ee6.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7273],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUpdatePassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUpdatePassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginUpdatePassword(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction,username=kcContext.username;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("updatePasswordTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-passwd-update-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",value:username,readOnly:!0,autoComplete:"username",style:{display:"none"}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password",name:"password",autoComplete:"current-password",style:{display:"none"}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-new",className:getClassName("kcLabelClass")},{children:msg("passwordNew")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-new",name:"password-new",autoFocus:!0,autoComplete:"new-password",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password-confirm",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-confirm",className:getClassName("kcLabelClass")},{children:msg("passwordConfirm")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-confirm",name:"password-confirm",autoComplete:"new-password",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:isAppInitiatedAction&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:"checkbox"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("label",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"checkbox",id:"logout-sessions",name:"logout-sessions",value:"on",checked:!0}),msgStr("logoutOtherSessions")]})}))}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/7273.c2f17dad.iframe.bundle.js b/7273.c2f17dad.iframe.bundle.js deleted file mode 100644 index 0cef7df7..00000000 --- a/7273.c2f17dad.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7273],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginUpdatePassword.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginUpdatePassword});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginUpdatePassword(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_3__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr,url=kcContext.url,messagesPerField=kcContext.messagesPerField,isAppInitiatedAction=kcContext.isAppInitiatedAction,username=kcContext.username;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("updatePasswordTitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({id:"kc-passwd-update-form",className:getClassName("kcFormClass"),action:url.loginAction,method:"post"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"text",id:"username",name:"username",value:username,readOnly:!0,autoComplete:"username",style:{display:"none"}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password",name:"password",autoComplete:"current-password",style:{display:"none"}}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-new",className:getClassName("kcLabelClass")},{children:msg("passwordNew")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-new",name:"password-new",autoFocus:!0,autoComplete:"new-password",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcFormGroupClass"),messagesPerField.printIfExists("password-confirm",getClassName("kcFormGroupErrorClass")))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcLabelWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("label",Object.assign({htmlFor:"password-confirm",className:getClassName("kcLabelClass")},{children:msg("passwordConfirm")}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcInputWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"password",id:"password-confirm",name:"password-confirm",autoComplete:"new-password",className:getClassName("kcInputClass")})}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-options",className:getClassName("kcFormOptionsClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:getClassName("kcFormOptionsWrapperClass")},{children:isAppInitiatedAction&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({className:"checkbox"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("label",{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{type:"checkbox",id:"logout-sessions",name:"logout-sessions",value:"on",checked:!0}),msgStr("logoutOtherSessions")]})}))}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-form-buttons",className:getClassName("kcFormButtonsClass")},{children:isAppInitiatedAction?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.Fragment,{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),type:"submit",defaultValue:msgStr("doSubmit")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("button",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),type:"submit",name:"cancel-aia",value:"true"},{children:msg("doCancel")}))]}):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonBlockClass"),getClassName("kcButtonLargeClass")),type:"submit",value:msgStr("doSubmit")})}))]}))]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/7765.4cce873f.iframe.bundle.js b/7765.4cce873f.iframe.bundle.js deleted file mode 100644 index e693e03f..00000000 --- a/7765.4cce873f.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7765],{"./dist/login/i18n/baseMessages/sk.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",emailInstructionUsername:"Zadajte svoje používateľské meno 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.",federatedIdentityUnavailableMessage:"Používateľ {0} autentifikovaný poskytovateľom identity {1} neexistuje. Kontaktujte svojho administrátora.",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",readOnlyUsernameMessage:"Nemôžete aktualizovať svoje používateľské meno, pretože je iba na čítanie."}}}]); \ No newline at end of file diff --git a/7765.7a3a63ce.iframe.bundle.js b/7765.7a3a63ce.iframe.bundle.js new file mode 100644 index 00000000..188dda5e --- /dev/null +++ b/7765.7a3a63ce.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7765],{"./dist/login/i18n/baseMessages/sk.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Prihlásenie",doRegister:"Registrácia",doCancel:"Zrušiť",doSubmit:"Odoslať",doBack:"Späť",doYes:"Áno",doNo:"Nie",doContinue:"Pokračovať",doIgnore:"Ignorovať",doAccept:"Potvrdiť",doDecline:"Odmietnuť",doForgotPassword:"Zabudli ste heslo?",doClickHere:"Kliknite tu",doImpersonate:"Prevteliť",doTryAgain:"Skúste to znova",doTryAnotherWay:"Skúste iný spôsob",doConfirmDelete:"Potvrdiť vymazanie",errorDeletingAccount:"Pri odstraňovaní účtu došlo k chybe",deletingAccountForbidden:"Nemáte dostatočné oprávnenie na vymazanie vlastného účtu, kontaktujte administrátora.",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ť.",registerTitle:"Registrácia",loginAccountTitle:"Prihláste sa do svojho účtu",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",loginIdpReviewProfileTitle:"Aktualizácia informácií o účte",loginTimeout:"Prihlasovanie trvalo príliš dlho. Prihlasovací proces začína od začiatku.",reauthenticate:"Pre pokračovanie sa prosím prihláste znova",oauthGrantTitle:"Poskytnúť prístup {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Uistite sa, že dôverujete {0}. Zistite, ako bude {0} narábať s vašimi údajmi. ",oauthGrantReview:"Môžete si prezrieť ",oauthGrantTos:"podmienky služby.",oauthGrantPolicy:"zásady ochrany osobných údajov.",errorTitle:"Je nám ľúto ...",errorTitleHtml:"Ospravedlňujeme sa ...",emailVerifyTitle:"Overenie e-mailom",emailForgotTitle:"Zabudli ste heslo?",updateEmailTitle:"Aktualizovať e-mail ",emailUpdateConfirmationSentTitle:"Odoslaný potvrdzujúci e-mail",emailUpdateConfirmationSent:"Na adresu {0} bol odoslaný potvrdzujúci e-mail. Na dokončenie aktualizácie e-mailu postupujte podľa pokynov.",emailUpdatedTitle:"Email aktualizovaný",emailUpdated:"Email účtu bol úspešne aktualizovaný na {0}.",updatePasswordTitle:"Aktualizácia hesla",codeSuccessTitle:"Kód úspechu",codeErrorTitle:"Kód chyby: {0}",displayUnsupported:"Nepodporovaný typ displeja ",browserRequired:"Pre prihlásenie je potrebný prehliadač",browserContinue:"Pre dokončenie prihlásenia je potrebný prehliadač",browserContinuePrompt:"Otvoriť prehliadač a pokračovať v prihlasovaní? [a/n]:",browserContinueAnswer:"a",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"Interný ",unknown:"Neznámy",termsTitle:"Zmluvné podmienky",termsText:"

Zmluvné podmienky, ktoré sa majú definovať

",termsPlainText:"Podmienky, ktoré sa majú definovať. ",termsAcceptanceRequired:"Musíte súhlasiť s našimi podmienkami.",acceptTerms:"Súhlasím s podmienkami",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",hidePassword:"Skryť heslo",showPassword:"Zobraziť heslo",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ý",website:"Webová stránka ",phoneNumber:"Telefónne číslo",phoneNumberVerified:"Overené telefónne číslo",gender:"Pohlavie",birthday:"Dátum narodenia",zoneinfo:"Časové pásmo",gssDelegationCredential:"GSS delegované oprávnenie",logoutOtherSessions:"Odhlásenie z iných zariadení ",profileScopeConsentText:"Profil používateľa ",emailScopeConsentText:"Emailová adresa",addressScopeConsentText:"Adresa",phoneScopeConsentText:"Telefónne číslo",offlineAccessScopeConsentText:"Offline prístup",samlRoleListScopeConsentText:"Moje role",rolesScopeConsentText:"Užívateľské roly",restartLoginTooltip:"Znovu spustiť prihlásenie",loginTotpIntro:"Pre prístup k tomuto účtu je potrebné nastaviť generátor jednorazových kódov",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",loginTotpStep3DeviceName:"Uveďte názov zariadenia, ktorý vám pomôže spravovať zariadenia OTP. ",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?",loginCredential:"Prihlasovacie údaje ",loginOtpOneTime:"Jednorazový kód",loginTotpType:"Typ",loginTotpAlgorithm:"Algoritmus",loginTotpDigits:"Číslica",loginTotpInterval:"Interval",loginTotpCounter:"Počítadlo",loginTotpDeviceName:"Názov zariadenia ","loginTotp.totp":"Založené na čase","loginTotp.hotp":"Založené na počítadle",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"Vyberte spôsob prihlásenia",oauthGrantRequest:"Udeľujete tieto prístupové oprávnenia?",inResource:"v",oauth2DeviceVerificationTitle:"Prihlásenie zariadenia ",verifyOAuth2DeviceUserCode:"Zadajte kód poskytnutý vaším zariadením a kliknite na tlačidlo Odoslať",oauth2DeviceInvalidUserCodeMessage:"Neplatný kód, skúste to prosím znova.",oauth2DeviceExpiredUserCodeMessage:"Kód stratil platnosť. Vráťte sa prosím k svojmu zariadeniu a skúste sa pripojiť znova.",oauth2DeviceVerificationCompleteHeader:"Úspešné prihlásenie zariadenia",oauth2DeviceVerificationCompleteMessage:"Môžete zavrieť toto okno prehliadača a vrátiť sa k svojmu zariadeniu.",oauth2DeviceVerificationFailedHeader:"Prihlásenie zariadenia zlyhalo",oauth2DeviceVerificationFailedMessage:"Môžete zavrieť toto okno prehliadača, vrátiť sa k svojmu zariadeniu a skúsiť sa pripojiť znova.",oauth2DeviceConsentDeniedMessage:"Súhlas s pripojením zariadenia zamietnutý.",oauth2DeviceAuthorizationGrantDisabledMessage:"Klientovi nie je povolené iniciovať OAuth 2.0 Device Authorization Grant. Tento flow je pre klienta zakázaný.",emailVerifyInstruction1:"Bol Vám odoslaný e-mail s pokynmi na overenie vašej e-mailovej adresy.",emailVerifyInstruction2:"Nezískali ste v e-maile 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-maile overovací 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.",emailInstructionUsername:"Zadajte svoje používateľské meno 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_account-console":"Užívateľská konzola","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",requiredFields:"Povinné polia ",invalidUserMessage:"Neplatné používateľské meno alebo heslo.",invalidUsernameMessage:"Neplatné používateľské meno. ",invalidUsernameOrEmailMessage:"Neplatné používateľské meno alebo e-mail.",invalidPasswordMessage:"Neplatné 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.",sessionLimitExceeded:"Prekročený limit relácií ",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.",missingTotpDeviceNameMessage:"Prosím, zadajte názov zariadenia. ",notMatchPasswordMessage:"Heslá sa nezhodujú.","error-invalid-value":"Neplatná hodnota. ","error-invalid-blank":"Prosím uveďte hodnotu.","error-empty":"Prosím uveďte hodnotu.","error-invalid-length":"Dĺžka musí byť medzi {1} a {2}.","error-invalid-length-too-short":"Minimálna dĺžka je {1}.","error-invalid-length-too-long":"Maximálna dĺžka je {2}.","error-invalid-email":"Neplatná e-mailová adresa.","error-invalid-number":"Neplatné číslo.","error-number-out-of-range":"Číslo musí byť medzi {1} a {2}.","error-number-out-of-range-too-small":"Číslo musí mať minimálnu hodnotu {1}.","error-number-out-of-range-too-big":"Číslo musí mať maximálnu hodnotu {2}.","error-pattern-no-match":"Neplatná hodnota.","error-invalid-uri":"Neplatná adresa URL.","error-invalid-uri-scheme":"Neplatná schéma URL.","error-invalid-uri-fragment":"Neplatný fragment URL.","error-user-attribute-required":"Prosím, uveďte toto pole.","error-invalid-date":"Neplatný dátum.","error-user-attribute-read-only":"Toto pole je určené len na čítanie.","error-username-invalid-character":"Hodnota obsahuje neplatný znak.","error-person-name-invalid-character":"Hodnota obsahuje neplatný znak.","error-reset-otp-missing-id":"Prosím, vyberte konfiguráciu OTP.",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.",federatedIdentityUnavailableMessage:"Používateľ {0} autentifikovaný poskytovateľom identity {1} neexistuje. Kontaktujte svojho administrátora.",federatedIdentityUnmatchedEssentialClaimMessage:"Identifikačný token vydaný poskytovateľom identity sa nezhoduje s nakonfigurovaným essential claim. Obráťte sa na svojho správcu.",confirmLinkIdpTitle:"Účet už existuje",federatedIdentityConfirmLinkMessage:"Používateľ s {0} {1} už existuje. Ako chcete pokračovať?",federatedIdentityConfirmReauthenticateMessage:"Overiť prepojiť váš účet s {0}",nestedFirstBrokerFlowMessage:"Užívateľ {0} {1} nie je prepojený so žiadnym známym používateľom.",confirmLinkIdpReviewProfile:"Skontrolujte profil",confirmLinkIdpContinue:"Pridať do existujúceho účtu",configureTotpMessage:"Na aktiváciu vášho účtu musíte nastaviť aplikáciu Mobile Authenticator.",configureBackupCodesMessage:"Pre aktiváciu vášho účtu musíte nastaviť záložné kódy.",updateProfileMessage:"Ak chcete aktivovať svoj účet, musíte aktualizovať svoj užívateľský profil.",updatePasswordMessage:"Ak chcete aktivovať svoj účet, musíte zmeniť heslo.",updateEmailMessage:"Pre aktiváciu účtu musíte aktualizovať svoju e-mailovú adresu.",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é.",delegationCompleteHeader:"Úspešné prihlásenie",delegationCompleteMessage:"Môžete zavrieť toto okno prehliadača a vrátiť sa do konzolovej aplikácie.",delegationFailedHeader:"Prihlásenie zlyhalo",delegationFailedMessage:"Môžete zavrieť toto okno prehliadača, vrátiť sa do konzolovej aplikácie a skúsiť sa prihlásiť znova.",noAccessMessage:"Žiadny prístup",invalidPasswordMinLengthMessage:"Neplatné heslo: minimálna dĺžka {0}.",invalidPasswordMaxLengthMessage:"Neplatné heslo: maximá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.",invalidPasswordNotEmailMessage:"Neplatné heslo: nesmie sa rovnať e-mailu.",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",successLogout:"Odhlásili ste sa",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.",cookieNotFoundMessage:"Súbor cookie nebol nájdený. Uistite sa, že sú vo vašom prehliadači povolené súbory cookie.",insufficientLevelOfAuthentication:"Požadovaná úroveň overenia nebola splnená.",identityProviderUnexpectedErrorMessage:"Neočakávaná chyba pri autentifikácii s poskytovateľom identity",identityProviderMissingStateMessage:"V odpovedi poskytovateľa identity chýba parameter state.",identityProviderMissingCodeOrErrorMessage:"V odpovedi poskytovateľa identity chýba parameter code alebo error.",identityProviderInvalidResponseMessage:"Neplatná odpoveď od poskytovateľa identity.",identityProviderInvalidSignatureMessage:"Neplatný podpis v odpovedi od poskytovateľa 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.",credentialSetupRequired:"Nie je môžné sa prihlásiť, vyžaduje sa nastavenie prihlasovacích údajov.",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ý 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",acrNotFulfilled:"Nesplnené požiadavky na overenie","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","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Generovať kódy obnovy","requiredAction.webauthn-register-passwordless":"Webauthn Passwordless Registrácia",invalidTokenRequiredActions:"Požadované akcie zahrnuté v odkaze nie sú platné",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","console-username":"Používateľské meno:","console-password":"Heslo:","console-otp":"Jednorazové heslo:","console-new-password":"Nové heslo:","console-confirm-password":"Potvrdiť heslo:","console-update-password":"Vyžaduje sa aktualizácia hesla.","console-verify-email":"Potrebujete overiť svoju e-mailovú adresu. Odoslali sme e-mail na adresu {0}, ktorý obsahuje overovací kód. Zadajte tento kód do poľa nižšie.","console-email-code":"Emailový kód:","console-accept-terms":"Prijímate podmienky? [a/n]:","console-accept":"a","openshift.scope.user_info":"Informácie o používateľovi","openshift.scope.user_check-access":"Informácie o prístupe používateľa","openshift.scope.user_full":"Plný prístup","openshift.scope.list-projects":"Zoznam projektov","saml.post-form.title":"Presmerovanie overenia","saml.post-form.message":"Presmerovanie, počkajte prosím.","saml.post-form.js-disabled":"JavaScript je vypnutý. Dôrazne odporúčame ho zapnúť. Ak chcete pokračovať, kliknite na tlačidlo nižšie. ","saml.artifactResolutionServiceInvalidResponse":"Použitie SAML Artifact zlyhalo.","otp-display-name":"Authenticator Application","otp-help-text":"Zadajte overovací kód z aplikácie autentifikátora.","otp-reset-description":"Ktorú konfiguráciu OTP treba odstrániť?","password-display-name":"Heslo","password-help-text":"Prihlásenie zadaním hesla.","auth-username-form-display-name":"Používateľské meno","auth-username-form-help-text":"Začnite prihlasovanie zadaním svojho používateľského mena","auth-username-password-form-display-name":"Používateľské meno a heslo","auth-username-password-form-help-text":"Prihláste sa zadaním svojho používateľského mena a hesla.","auth-recovery-authn-code-form-display-name":"Overovací kód pre obnovenie","auth-recovery-authn-code-form-help-text":"Zadajte overovací kód obnovy z vopred vygenerovaného zoznamu.","auth-recovery-code-info-message":"Zadajte zadaný kód obnovy.","auth-recovery-code-prompt":"Kód obnovy #{0}","auth-recovery-code-header":"Prihlásenie pomocou overovacieho kódu obnovy","recovery-codes-error-invalid":"Neplatný overovací kód obnovy","recovery-code-config-header":"Overovacie kódy obnovy","recovery-code-config-warning-title":"Tieto kódy obnovenia sa po opustení tejto stránky už nezobrazia","recovery-code-config-warning-message":"Uistite sa, že ste si ich vytlačili, stiahli alebo skopírovali do správcu hesiel a uložili. Zrušenie tohto nastavenia odstráni tieto kódy na obnovenie z vášho účtu.","recovery-codes-print":"Tlačiť","recovery-codes-download":"Stiahnuť","recovery-codes-copy":"Kopírovať","recovery-codes-copied":"Kopírovať","recovery-codes-confirmation-message":"Uložil som tieto kódy na bezpečné miesto","recovery-codes-action-complete":"Ukončiť nastavenie","recovery-codes-action-cancel":"Zrušiť nastavenie","recovery-codes-download-file-header":"Uchovajte tieto kódy na obnovu na bezpečnom mieste.","recovery-codes-download-file-description":"Kódy na obnovenie sú jednorázové prístupové kódy, ktoré vám umožnia prihlásiť sa do vášho účtu, ak nemáte prístup k autentifikátoru.","recovery-codes-download-file-date":"Tieto kódy boli vygenerované dňa","recovery-codes-label-default":"Kódy na obnovenie","webauthn-display-name":"Bezpečnostný kľúč","webauthn-help-text":"Použite svoj bezpečnostný kľúč na prihlásenie.","webauthn-passwordless-display-name":"Bezpečnostný kľúč","webauthn-passwordless-help-text":"Použite svoj bezpečnostný kľúč na prihlásenie bez hesla.","webauthn-login-title":"Prihlásenie bezpečnostným kľúčom","webauthn-registration-title":"Registrácia bezpečnostným kľúčom","webauthn-available-authenticators":"Dostupné bezpečnostné kľúče","webauthn-unsupported-browser-text":"WebAuthn nie je podporovaný týmto prehliadačom. Skúste iný alebo kontaktujte svojho administrátora.","webauthn-doAuthenticate":"Prihlásenie pomocou bezpečnostného kľúča","webauthn-createdAt-label":"Vytvorené","webauthn-error-title":"Chybný bezpečnostný kľúč","webauthn-error-registration":"Nepodarilo sa zaregistrovať bezpečnostný kľúč.
{0}","webauthn-error-api-get":"Nepodarilo sa overiť pomocou bezpečnostného kľúča.
{0}","webauthn-error-different-user":"Prvý overený používateľ nie je ten, ktorý bol overený bezpečnostným kľúčom.","webauthn-error-auth-verification":"Výsledok overenia bezpečnostného kľúča je neplatný.
{0}","webauthn-error-register-verification":"Výsledok registrácie bezpečnostného kľúča je neplatný.
{0}","webauthn-error-user-not-found":"Neznámy používateľ overený bezpečnostným kľúčom.","identity-provider-redirector":"Pripojenie k inému poskytovateľovi identít","identity-provider-login-label":"Prihláste sa pomocou","idp-email-verification-display-name":"Overenie e-mailu","idp-email-verification-help-text":"Pripojte svoj účet overením e-mailu.","idp-username-password-form-display-name":"Prihlasovacie meno a heslo","idp-username-password-form-help-text":"Pripojte svoj účet prihlásením.",finalDeletionConfirmation:"Ak vymažete svoj účet, nebude možné ho obnoviť. Ak si chcete účet ponechať, kliknite na tlačidlo Zrušiť.",irreversibleAction:"Táto akcia je nezvratná",deleteAccountConfirm:"Potvrdenie odstránenia účtu",deletingImplies:"Odstránenie vášho účtu znamená:",errasingData:"Vymazanie všetkých vašich údajov",loggingOutImmediately:"Okamžité odhlásenie",accountUnusable:"Žiadne ďalšie použitie aplikácie nebude s týmto účtom možné",userDeletedSuccessfully:"Užívateľ bol úspešne odstránený","access-denied":"Prístup zamietnutý","access-denied-when-idp-auth":"Prístup zamietnutý pri overovaní pomocou {0}","frontchannel-logout.title":"Odhlásenie","frontchannel-logout.message":"Odhlasujete sa z nasledujúcich aplikácií",logoutConfirmTitle:"Odhlásenie",logoutConfirmHeader:"Chcete sa odhlásiť?",doLogout:"Odhlásiť",readOnlyUsernameMessage:"Nemôžete aktualizovať svoje používateľské meno, pretože je iba na čítanie."}}}]); \ No newline at end of file diff --git a/7799.a3c4a09c.iframe.bundle.js b/7799.62695c23.iframe.bundle.js similarity index 99% rename from 7799.a3c4a09c.iframe.bundle.js rename to 7799.62695c23.iframe.bundle.js index e931cd44..4b92db06 100644 --- a/7799.a3c4a09c.iframe.bundle.js +++ b/7799.62695c23.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7799],{"./dist/account/i18n/baseMessages/pl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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ł.",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"}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7799],{"./dist/account/i18n/baseMessages/pl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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ł.",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",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/7851.ebfaa3e2.iframe.bundle.js b/7851.2de3bd89.iframe.bundle.js similarity index 99% rename from 7851.ebfaa3e2.iframe.bundle.js rename to 7851.2de3bd89.iframe.bundle.js index 13aa74de..35031258 100644 --- a/7851.ebfaa3e2.iframe.bundle.js +++ b/7851.2de3bd89.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7851],{"./dist/account/i18n/baseMessages/ru.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Сохранить",doCancel:"Отмена",doLogOutAllSessions:"Выйти из всех сессий",doRemove:"Удалить",doAdd:"Добавить",doSignOut:"Выход",doSignIn:"Вход",update:"Обновить",remove:"Удалить",refreshPage:"Обновить страницу",refresh:"Обновить",pageNotFound:"Страница не найдена",invalidRoute:"{0} неправильный путь.",continue:"Продолжить",doLogIn:"Вход",accountManagementWelcomeMessage:"Добро пожаловать в консоль управления вашей учетной записью",loadingMessage:"Консоль управления учетной записью - загрузка ...",accountSecuritySidebarTitle:"Безопасность",editAccountHtmlTitle:"Изменение учетной записи",federatedIdentitiesHtmlTitle:"Федеративные идентификаторы",accountLogHtmlTitle:"Лог учетной записи",changePasswordHtmlTitle:"Смена пароля",sessionsHtmlTitle:"Сессии",accountManagementTitle:"Управление учетной записью",authenticatorTitle:"Аутентификатор",applicationsHtmlTitle:"Приложения",applicationsIntroMessage:"Отслеживайте и управляйте разрешениями приложений на доступ к вашей учетной записи",accountSecurityIntroMessage:"Изменение пароля и доступа к учетной записи",personalInfoSidebarTitle:"Личная информация",personalInfoHtmlTitle:"Личная информация",personalSubMessage:"Управление данными о себе",personalInfoIntroMessage:"Управление данными о себе",selectLocale:"Выбор языка",applicationsPageTitle:"Приложения",applicationsSubMessage:"Управляйте разрешениями ваших приложений",applicationName:"Имя",applicationType:"Тип приложения",status:"Статус",client:"Клиент",internalApp:"Внутренний",thirdPartyApp:"Внешний",inUse:"Используется",notInUse:"Не используется",signingIn:"Вход",signingInSidebarTitle:"Вход",signingInSubMessage:"Настройте варианты входа","password-display-name":"Пароль",credentialCreatedAt:"Создан","basic-authentication":"Базовая аутентификация","password-help-text":"Вход с использованием ввода пароля","two-factor":"Двухфакторная аутентификация","otp-display-name":"приложение аутентификатор","otp-help-text":"Ввод проверочного кода из приложения аутентификатора",setUpNew:"Настроить {0}",removeCred:"Удалить {0}",stopUsingCred:"Остановить использование {0}?",successRemovedMessage:"{0} был удалён.",notSetUp:"{0} не настроено.",authenticatorMobileSetupTitle:"Настройка мобильного приложения аутентификатора",totpStep1:"Установите одно из следующих приложений на ваш мобильный телефон:",totpStep2:"Откройте приложение и просканируйте QR-код:",totpStep3:"Введите одноразовый код, выданный приложением, и нажмите Подтвердить для завершения настройки.",totpManualStep2:"Откройте приложение и введите ключ:",totpManualStep3:"Используйте следующие настройки, если приложение позволяет их устанавливать:",totpStep3DeviceName:"Укажите имя устройства, которое поможет вам найти его в списке ваших устройств.",totpUnableToScan:"Не удается выполнить сканирование?",totpScanBarcode:"Сканировать QR-код?",authenticatorCode:"Одноразовый код",totpDeviceName:"Имя устройства",totpType:"Тип",totpAlgorithm:"Алгоритм",totpDigits:"Количество цифр",totpInterval:"Интервал",totpCounter:"Счетчик",deviceActivitySidebarTitle:"Активные устройства",deviceActivityHtmlTitle:"Активные устройства",signedInDevicesExplanation:"Выполните выход с незнакомых устройств",signedInDevices:"Выполнен вход на устройствах",currentDevice:"Текущее устройство",currentSession:"Текущая сессия",lastAccessedOn:"Последний доступ",ipAddress:"IP адрес","device-activity":"Активные устройства",signOutWarning:"Завершить сессию?",signOutAllDevices:"Выход на всех устройствах",signOutAllDevicesWarning:"Это действие приведет к выходу из системы всех устройств, которые вошли в вашу учетную запись, включая текущее устройство, которое вы используете.",signedOutSession:"Сессия завершена {0}/{1}",email:"E-mail",firstName:"Имя",givenName:"Имя",fullName:"{0} {1}",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",clients:"Клиенты",details:"Детали",started:"Начата",lastAccess:"Последний доступ",expires:"Истекает",applications:"Приложения",account:"Учетная запись",federatedIdentity:"Федеративный идентификатор",authenticator:"Аутентификатор",sessions:"Сессии",log:"Журнал",application:"Приложение",availablePermissions:"Доступные разрешения",grantedPermissions:"Согласованные разрешения",grantedPersonalInfo:"Согласованная персональная информация",additionalGrants:"Дополнительные согласования",action:"Действие",inResource:"в",fullAccess:"Полный доступ",offlineToken:"Оффлайн токен",revoke:"Отозвать согласование",missingUsernameMessage:"Введите имя пользователя.",missingFirstNameMessage:"Введите имя.",invalidEmailMessage:"Введите корректный E-mail.",missingLastNameMessage:"Введите фамилию.",missingEmailMessage:"Введите E-mail.",missingPasswordMessage:"Введите пароль.",notMatchPasswordMessage:"Пароли не совпадают.",missingTotpMessage:"Введите код аутентификатора.",invalidPasswordExistingMessage:"Существующий пароль неверный.",invalidPasswordConfirmMessage:"Подтверждение пароля не совпадает.",invalidTotpMessage:"Неверный код аутентификатора.",usernameExistsMessage:"Имя пользователя уже существует.",emailExistsMessage:"E-mail уже существует.",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} паролями.",invalidPasswordGenericMessage:"Некорректный пароль: новый пароль не соответствует правилам пароля."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[7851],{"./dist/account/i18n/baseMessages/ru.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Сохранить",doCancel:"Отмена",doLogOutAllSessions:"Выйти из всех сессий",doRemove:"Удалить",doAdd:"Добавить",doSignOut:"Выход",doSignIn:"Вход",update:"Обновить",remove:"Удалить",refreshPage:"Обновить страницу",refresh:"Обновить",pageNotFound:"Страница не найдена",invalidRoute:"{0} неправильный путь.",continue:"Продолжить",doLogIn:"Вход",accountManagementWelcomeMessage:"Добро пожаловать в консоль управления вашей учетной записью",loadingMessage:"Консоль управления учетной записью - загрузка ...",accountSecuritySidebarTitle:"Безопасность",editAccountHtmlTitle:"Изменение учетной записи",federatedIdentitiesHtmlTitle:"Федеративные идентификаторы",accountLogHtmlTitle:"Лог учетной записи",changePasswordHtmlTitle:"Смена пароля",sessionsHtmlTitle:"Сессии",accountManagementTitle:"Управление учетной записью",authenticatorTitle:"Аутентификатор",applicationsHtmlTitle:"Приложения",applicationsIntroMessage:"Отслеживайте и управляйте разрешениями приложений на доступ к вашей учетной записи",accountSecurityIntroMessage:"Изменение пароля и доступа к учетной записи",personalInfoSidebarTitle:"Личная информация",personalInfoHtmlTitle:"Личная информация",personalSubMessage:"Управление данными о себе",personalInfoIntroMessage:"Управление данными о себе",selectLocale:"Выбор языка",applicationsPageTitle:"Приложения",applicationsSubMessage:"Управляйте разрешениями ваших приложений",applicationName:"Имя",applicationType:"Тип приложения",status:"Статус",client:"Клиент",internalApp:"Внутренний",thirdPartyApp:"Внешний",inUse:"Используется",notInUse:"Не используется",signingIn:"Вход",signingInSidebarTitle:"Вход",signingInSubMessage:"Настройте варианты входа","password-display-name":"Пароль",credentialCreatedAt:"Создан","basic-authentication":"Базовая аутентификация","password-help-text":"Вход с использованием ввода пароля","two-factor":"Двухфакторная аутентификация","otp-display-name":"приложение аутентификатор","otp-help-text":"Ввод проверочного кода из приложения аутентификатора",setUpNew:"Настроить {0}",removeCred:"Удалить {0}",stopUsingCred:"Остановить использование {0}?",successRemovedMessage:"{0} был удалён.",notSetUp:"{0} не настроено.",authenticatorMobileSetupTitle:"Настройка мобильного приложения аутентификатора",totpStep1:"Установите одно из следующих приложений на ваш мобильный телефон:",totpStep2:"Откройте приложение и просканируйте QR-код:",totpStep3:"Введите одноразовый код, выданный приложением, и нажмите Подтвердить для завершения настройки.",totpManualStep2:"Откройте приложение и введите ключ:",totpManualStep3:"Используйте следующие настройки, если приложение позволяет их устанавливать:",totpStep3DeviceName:"Укажите имя устройства, которое поможет вам найти его в списке ваших устройств.",totpUnableToScan:"Не удается выполнить сканирование?",totpScanBarcode:"Сканировать QR-код?",authenticatorCode:"Одноразовый код",totpDeviceName:"Имя устройства",totpType:"Тип",totpAlgorithm:"Алгоритм",totpDigits:"Количество цифр",totpInterval:"Интервал",totpCounter:"Счетчик",deviceActivitySidebarTitle:"Активные устройства",deviceActivityHtmlTitle:"Активные устройства",signedInDevicesExplanation:"Выполните выход с незнакомых устройств",signedInDevices:"Выполнен вход на устройствах",currentDevice:"Текущее устройство",currentSession:"Текущая сессия",lastAccessedOn:"Последний доступ",ipAddress:"IP адрес","device-activity":"Активные устройства",signOutWarning:"Завершить сессию?",signOutAllDevices:"Выход на всех устройствах",signOutAllDevicesWarning:"Это действие приведет к выходу из системы всех устройств, которые вошли в вашу учетную запись, включая текущее устройство, которое вы используете.",signedOutSession:"Сессия завершена {0}/{1}",email:"E-mail",firstName:"Имя",givenName:"Имя",fullName:"{0} {1}",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",clients:"Клиенты",details:"Детали",started:"Начата",lastAccess:"Последний доступ",expires:"Истекает",applications:"Приложения",account:"Учетная запись",federatedIdentity:"Федеративный идентификатор",authenticator:"Аутентификатор",sessions:"Сессии",log:"Журнал",application:"Приложение",availablePermissions:"Доступные разрешения",grantedPermissions:"Согласованные разрешения",grantedPersonalInfo:"Согласованная персональная информация",additionalGrants:"Дополнительные согласования",action:"Действие",inResource:"в",fullAccess:"Полный доступ",offlineToken:"Оффлайн токен",revoke:"Отозвать согласование",missingUsernameMessage:"Введите имя пользователя.",missingFirstNameMessage:"Введите имя.",invalidEmailMessage:"Введите корректный E-mail.",missingLastNameMessage:"Введите фамилию.",missingEmailMessage:"Введите E-mail.",missingPasswordMessage:"Введите пароль.",notMatchPasswordMessage:"Пароли не совпадают.",missingTotpMessage:"Введите код аутентификатора.",invalidPasswordExistingMessage:"Существующий пароль неверный.",invalidPasswordConfirmMessage:"Подтверждение пароля не совпадает.",invalidTotpMessage:"Неверный код аутентификатора.",usernameExistsMessage:"Имя пользователя уже существует.",emailExistsMessage:"E-mail уже существует.",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} паролями.",invalidPasswordGenericMessage:"Некорректный пароль: новый пароль не соответствует правилам пароля.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/8060.1e3abd08.iframe.bundle.js b/8060.1e3abd08.iframe.bundle.js new file mode 100644 index 00000000..784836c5 --- /dev/null +++ b/8060.1e3abd08.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8060],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Terms.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Terms});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),evt_hooks__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/evt/hooks/index.js"),_tools_Markdown__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/Markdown.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/login/lib/useGetClassName.js"),_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useDownloadTerms.js");function Terms(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr;(0,evt_hooks__WEBPACK_IMPORTED_MODULE_3__.useRerenderOnStateChange)(_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__.R);var url=kcContext.url,termMarkdown=_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__.R.state;return void 0===termMarkdown?null:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("termsTitle")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-terms-text"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tools_Markdown__WEBPACK_IMPORTED_MODULE_4__.U,{children:termMarkdown})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({className:"form-actions",action:url.loginAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonClass"),getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),name:"accept",id:"kc-accept",type:"submit",value:msgStr("doAccept")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),name:"cancel",id:"kc-decline",type:"submit",value:msgStr("doDecline")})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"clearfix"})]}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/8060.d37247c8.iframe.bundle.js b/8060.d37247c8.iframe.bundle.js deleted file mode 100644 index c7ddf3a5..00000000 --- a/8060.d37247c8.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8060],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/Terms.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Terms});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./dist/tools/clsx.js"),evt_hooks__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/evt/hooks/index.js"),_tools_Markdown__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/Markdown.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/login/lib/useGetClassName.js"),_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useDownloadTerms.js");function Terms(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,Template=props.Template,classes=props.classes,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,msgStr=i18n.msgStr;(0,evt_hooks__WEBPACK_IMPORTED_MODULE_3__.useRerenderOnStateChange)(_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__.R);var url=kcContext.url,termMarkdown=_login_lib_useDownloadTerms__WEBPACK_IMPORTED_MODULE_6__.R.state;return void 0===termMarkdown?null:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{displayMessage:!1,headerNode:msg("termsTitle")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",Object.assign({id:"kc-terms-text"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)(_tools_Markdown__WEBPACK_IMPORTED_MODULE_4__.U,{children:termMarkdown})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsxs)("form",Object.assign({className:"form-actions",action:url.loginAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonClass"),getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),name:"accept",id:"kc-accept",type:"submit",value:msgStr("doAccept")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_2__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),name:"cancel",id:"kc-decline",type:"submit",value:msgStr("doDecline")})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_1__.jsx)("div",{className:"clearfix"})]}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/8280.f5635749.iframe.bundle.js b/8280.f5635749.iframe.bundle.js new file mode 100644 index 00000000..958f2a63 --- /dev/null +++ b/8280.f5635749.iframe.bundle.js @@ -0,0 +1,2 @@ +/*! For license information please see 8280.f5635749.iframe.bundle.js.LICENSE.txt */ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8280],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/lib/usePrepareTemplate.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{M:()=>usePrepareTemplate});__webpack_require__("./node_modules/core-js/modules/es.promise.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.array.reverse.js"),__webpack_require__("./node_modules/core-js/modules/es.array.for-each.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.for-each.js"),__webpack_require__("./node_modules/core-js/modules/es.string.split.js"),__webpack_require__("./node_modules/core-js/modules/es.regexp.exec.js"),__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.object.define-property.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.async-iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.math.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.json.to-string-tag.js"),__webpack_require__("./node_modules/core-js/modules/es.object.create.js"),__webpack_require__("./node_modules/core-js/modules/es.object.get-prototype-of.js"),__webpack_require__("./node_modules/core-js/modules/es.object.set-prototype-of.js");var react=__webpack_require__("./node_modules/react/index.js"),Deferred=(__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./dist/tools/HTMLElement.prototype.prepend.js"),__webpack_require__("./node_modules/evt/tools/Deferred.js"));function headInsert(params){var htmlElement=document.createElement(function(){switch(params.type){case"css":return"link";case"javascript":return"script"}}()),dLoaded=new Deferred.Deferred;return htmlElement.addEventListener("load",(function(){return dLoaded.resolve()})),Object.assign(htmlElement,function(){switch(params.type){case"css":return{href:params.href,type:"text/css",rel:"stylesheet",media:"screen,print"};case"javascript":return{src:params.src,type:"text/javascript"}}}()),document.getElementsByTagName("head")[0][function(){switch(params.type){case"javascript":return"appendChild";case"css":return function(){switch(params.position){case"append":return"appendChild";case"prepend":return"prepend"}}()}}()](htmlElement),{prLoaded:dLoaded.pr,remove:function remove(){return htmlElement.remove()}}}var clsx=__webpack_require__("./dist/tools/clsx.js");function _regeneratorRuntime(){_regeneratorRuntime=function _regeneratorRuntime(){return exports};var exports={},Op=Object.prototype,hasOwn=Op.hasOwnProperty,defineProperty=Object.defineProperty||function(obj,key,desc){obj[key]=desc.value},$Symbol="function"==typeof Symbol?Symbol:{},iteratorSymbol=$Symbol.iterator||"@@iterator",asyncIteratorSymbol=$Symbol.asyncIterator||"@@asyncIterator",toStringTagSymbol=$Symbol.toStringTag||"@@toStringTag";function define(obj,key,value){return Object.defineProperty(obj,key,{value,enumerable:!0,configurable:!0,writable:!0}),obj[key]}try{define({},"")}catch(err){define=function define(obj,key,value){return obj[key]=value}}function wrap(innerFn,outerFn,self,tryLocsList){var protoGenerator=outerFn&&outerFn.prototype instanceof Generator?outerFn:Generator,generator=Object.create(protoGenerator.prototype),context=new Context(tryLocsList||[]);return defineProperty(generator,"_invoke",{value:makeInvokeMethod(innerFn,self,context)}),generator}function tryCatch(fn,obj,arg){try{return{type:"normal",arg:fn.call(obj,arg)}}catch(err){return{type:"throw",arg:err}}}exports.wrap=wrap;var ContinueSentinel={};function Generator(){}function GeneratorFunction(){}function GeneratorFunctionPrototype(){}var IteratorPrototype={};define(IteratorPrototype,iteratorSymbol,(function(){return this}));var getProto=Object.getPrototypeOf,NativeIteratorPrototype=getProto&&getProto(getProto(values([])));NativeIteratorPrototype&&NativeIteratorPrototype!==Op&&hasOwn.call(NativeIteratorPrototype,iteratorSymbol)&&(IteratorPrototype=NativeIteratorPrototype);var Gp=GeneratorFunctionPrototype.prototype=Generator.prototype=Object.create(IteratorPrototype);function defineIteratorMethods(prototype){["next","throw","return"].forEach((function(method){define(prototype,method,(function(arg){return this._invoke(method,arg)}))}))}function AsyncIterator(generator,PromiseImpl){function invoke(method,arg,resolve,reject){var record=tryCatch(generator[method],generator,arg);if("throw"!==record.type){var result=record.arg,value=result.value;return value&&"object"==typeof value&&hasOwn.call(value,"__await")?PromiseImpl.resolve(value.__await).then((function(value){invoke("next",value,resolve,reject)}),(function(err){invoke("throw",err,resolve,reject)})):PromiseImpl.resolve(value).then((function(unwrapped){result.value=unwrapped,resolve(result)}),(function(error){return invoke("throw",error,resolve,reject)}))}reject(record.arg)}var previousPromise;defineProperty(this,"_invoke",{value:function value(method,arg){function callInvokeWithMethodAndArg(){return new PromiseImpl((function(resolve,reject){invoke(method,arg,resolve,reject)}))}return previousPromise=previousPromise?previousPromise.then(callInvokeWithMethodAndArg,callInvokeWithMethodAndArg):callInvokeWithMethodAndArg()}})}function makeInvokeMethod(innerFn,self,context){var state="suspendedStart";return function(method,arg){if("executing"===state)throw new Error("Generator is already running");if("completed"===state){if("throw"===method)throw arg;return doneResult()}for(context.method=method,context.arg=arg;;){var delegate=context.delegate;if(delegate){var delegateResult=maybeInvokeDelegate(delegate,context);if(delegateResult){if(delegateResult===ContinueSentinel)continue;return delegateResult}}if("next"===context.method)context.sent=context._sent=context.arg;else if("throw"===context.method){if("suspendedStart"===state)throw state="completed",context.arg;context.dispatchException(context.arg)}else"return"===context.method&&context.abrupt("return",context.arg);state="executing";var record=tryCatch(innerFn,self,context);if("normal"===record.type){if(state=context.done?"completed":"suspendedYield",record.arg===ContinueSentinel)continue;return{value:record.arg,done:context.done}}"throw"===record.type&&(state="completed",context.method="throw",context.arg=record.arg)}}}function maybeInvokeDelegate(delegate,context){var methodName=context.method,method=delegate.iterator[methodName];if(void 0===method)return context.delegate=null,"throw"===methodName&&delegate.iterator.return&&(context.method="return",context.arg=void 0,maybeInvokeDelegate(delegate,context),"throw"===context.method)||"return"!==methodName&&(context.method="throw",context.arg=new TypeError("The iterator does not provide a '"+methodName+"' method")),ContinueSentinel;var record=tryCatch(method,delegate.iterator,context.arg);if("throw"===record.type)return context.method="throw",context.arg=record.arg,context.delegate=null,ContinueSentinel;var info=record.arg;return info?info.done?(context[delegate.resultName]=info.value,context.next=delegate.nextLoc,"return"!==context.method&&(context.method="next",context.arg=void 0),context.delegate=null,ContinueSentinel):info:(context.method="throw",context.arg=new TypeError("iterator result is not an object"),context.delegate=null,ContinueSentinel)}function pushTryEntry(locs){var entry={tryLoc:locs[0]};1 in locs&&(entry.catchLoc=locs[1]),2 in locs&&(entry.finallyLoc=locs[2],entry.afterLoc=locs[3]),this.tryEntries.push(entry)}function resetTryEntry(entry){var record=entry.completion||{};record.type="normal",delete record.arg,entry.completion=record}function Context(tryLocsList){this.tryEntries=[{tryLoc:"root"}],tryLocsList.forEach(pushTryEntry,this),this.reset(!0)}function values(iterable){if(iterable){var iteratorMethod=iterable[iteratorSymbol];if(iteratorMethod)return iteratorMethod.call(iterable);if("function"==typeof iterable.next)return iterable;if(!isNaN(iterable.length)){var i=-1,next=function next(){for(;++i=0;--i){var entry=this.tryEntries[i],record=entry.completion;if("root"===entry.tryLoc)return handle("end");if(entry.tryLoc<=this.prev){var hasCatch=hasOwn.call(entry,"catchLoc"),hasFinally=hasOwn.call(entry,"finallyLoc");if(hasCatch&&hasFinally){if(this.prev=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc<=this.prev&&hasOwn.call(entry,"finallyLoc")&&this.prev=0;--i){var entry=this.tryEntries[i];if(entry.finallyLoc===finallyLoc)return this.complete(entry.completion,entry.afterLoc),resetTryEntry(entry),ContinueSentinel}},catch:function _catch(tryLoc){for(var i=this.tryEntries.length-1;i>=0;--i){var entry=this.tryEntries[i];if(entry.tryLoc===tryLoc){var record=entry.completion;if("throw"===record.type){var thrown=record.arg;resetTryEntry(entry)}return thrown}}throw new Error("illegal catch attempt")},delegateYield:function delegateYield(iterable,resultName,nextLoc){return this.delegate={iterator:values(iterable),resultName,nextLoc},"next"===this.method&&(this.arg=void 0),ContinueSentinel}},exports}function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||_unsupportedIterableToArray(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _createForOfIteratorHelper(o,allowArrayLike){var it="undefined"!=typeof Symbol&&o[Symbol.iterator]||o["@@iterator"];if(!it){if(Array.isArray(o)||(it=_unsupportedIterableToArray(o))||allowArrayLike&&o&&"number"==typeof o.length){it&&(o=it);var i=0,F=function F(){};return{s:F,n:function n(){return i>=o.length?{done:!0}:{done:!1,value:o[i++]}},e:function e(_e2){throw _e2},f:F}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var err,normalCompletion=!0,didErr=!1;return{s:function s(){it=it.call(o)},n:function n(){var step=it.next();return normalCompletion=step.done,step},e:function e(_e3){didErr=!0,err=_e3},f:function f(){try{normalCompletion||null==it.return||it.return()}finally{if(didErr)throw err}}}}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg),value=info.value}catch(error){return void reject(error)}info.done?resolve(value):Promise.resolve(value).then(_next,_throw)}function _slicedToArray(arr,i){return function _arrayWithHoles(arr){if(Array.isArray(arr))return arr}(arr)||function _iterableToArrayLimit(arr,i){var _i=null==arr?null:"undefined"!=typeof Symbol&&arr[Symbol.iterator]||arr["@@iterator"];if(null!=_i){var _s,_e,_x,_r,_arr=[],_n=!0,_d=!1;try{if(_x=(_i=_i.call(arr)).next,0===i){if(Object(_i)!==_i)return;_n=!1}else for(;!(_n=(_s=_x.call(_i)).done)&&(_arr.push(_s.value),_arr.length!==i);_n=!0);}catch(err){_d=!0,_e=err}finally{try{if(!_n&&null!=_i.return&&(_r=_i.return(),Object(_r)!==_r))return}finally{if(_d)throw _e}}return _arr}}(arr,i)||_unsupportedIterableToArray(arr,i)||function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _unsupportedIterableToArray(o,minLen){if(o){if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);return"Object"===n&&o.constructor&&(n=o.constructor.name),"Map"===n||"Set"===n?Array.from(o):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?_arrayLikeToArray(o,minLen):void 0}}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{HTMLElement.prototype.prepend||(HTMLElement.prototype.prepend=function(childNode){if("string"==typeof childNode)throw new Error("Error with HTMLElement.prototype.appendFirst polyfill");this.insertBefore(childNode,this.firstChild)})},"./dist/tools/assert.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{h:()=>tsafe_assert__WEBPACK_IMPORTED_MODULE_0__.h});var tsafe_assert__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs")},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/5025.c64d5443.iframe.bundle.js.LICENSE.txt b/8280.f5635749.iframe.bundle.js.LICENSE.txt similarity index 100% rename from 5025.c64d5443.iframe.bundle.js.LICENSE.txt rename to 8280.f5635749.iframe.bundle.js.LICENSE.txt diff --git a/8470.1d61229b.iframe.bundle.js b/8470.1d61229b.iframe.bundle.js deleted file mode 100644 index 650b3554..00000000 --- a/8470.1d61229b.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8470],{"./dist/login/Template.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Template});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_assert__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/assert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/lib/usePrepareTemplate.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Template(props){var _props$displayInfo=props.displayInfo,displayInfo=void 0!==_props$displayInfo&&_props$displayInfo,_props$displayMessage=props.displayMessage,displayMessage=void 0===_props$displayMessage||_props$displayMessage,_props$displayRequire=props.displayRequiredFields,displayRequiredFields=void 0!==_props$displayRequire&&_props$displayRequire,_props$displayWide=props.displayWide,displayWide=void 0!==_props$displayWide&&_props$displayWide,_props$showAnotherWay=props.showAnotherWayIfPresent,showAnotherWayIfPresent=void 0===_props$showAnotherWay||_props$showAnotherWay,headerNode=props.headerNode,_props$showUsernameNo=props.showUsernameNode,showUsernameNode=void 0===_props$showUsernameNo?null:_props$showUsernameNo,_props$infoNode=props.infoNode,infoNode=void 0===_props$infoNode?null:_props$infoNode,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,children=props.children,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,changeLocale=i18n.changeLocale,labelBySupportedLanguageTag=i18n.labelBySupportedLanguageTag,currentLanguageTag=i18n.currentLanguageTag,realm=kcContext.realm,locale=kcContext.locale,auth=kcContext.auth,url=kcContext.url,message=kcContext.message,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__.M)({doFetchDefaultThemeResources:doUseDefaultCss,styles:[url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly.min.css",url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly-additions.min.css",url.resourcesCommonPath+"/lib/zocial/zocial.css",url.resourcesPath+"/css/login.css"],htmlClassName:getClassName("kcHtmlClass"),bodyClassName:getClassName("kcBodyClass")}).isReady?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcLoginClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header",className:getClassName("kcHeaderClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header-wrapper",className:getClassName("kcHeaderWrapperClass")},{children:msg("loginTitleHtml",realm.displayNameHtml)}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcFormCardClass"),displayWide&&getClassName("kcFormCardAccountClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("header",Object.assign({className:getClassName("kcFormHeaderClass")},{children:[realm.internationalizationEnabled&&((0,_tools_assert__WEBPACK_IMPORTED_MODULE_3__.h)(void 0!==locale),!0)&&locale.supported.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale-wrapper",className:getClassName("kcLocaleWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-dropdown",id:"kc-locale-dropdown"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"kc-current-locale-link"},{children:labelBySupportedLanguageTag[currentLanguageTag]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",{children:locale.supported.map((function(_ref){var languageTag=_ref.languageTag;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",Object.assign({className:"kc-dropdown-item"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",onClick:function onClick(){return changeLocale(languageTag)}},{children:labelBySupportedLanguageTag[languageTag]}))}),languageTag)}))})]}))}))})),void 0===auth||!auth.showUsername||auth.showResetCredentials?displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"})),msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:"col-md-10"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode}))}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode})):displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))," ",msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"col-md-10"},{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-content"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-content-wrapper"},{children:[displayMessage&&void 0!==message&&("warning"!==message.type||!isAppInitiatedAction)&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)("alert","alert-"+message.type)},{children:["success"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackSuccessIcon")}),"warning"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackWarningIcon")}),"error"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackErrorIcon")}),"info"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackInfoIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:"kc-feedback-text",dangerouslySetInnerHTML:{__html:message.summary}})]})),children,void 0!==auth&&auth.showTryAnotherWayLink&&showAnotherWayIfPresent&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-try-another-way-form",action:url.loginAction,method:"post",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&getClassName("kcContentWrapperClass"))},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&[getClassName("kcFormSocialAccountContentClass"),getClassName("kcFormSocialAccountClass")])},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",name:"tryAnotherWay",value:"on"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"try-another-way",onClick:function onClick(){return document.forms["kc-select-try-another-way-form"].submit(),!1}},{children:msg("doTryAnotherWay")}))]}))}))})),displayInfo&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info",className:getClassName("kcSignUpClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info-wrapper",className:getClassName("kcInfoAreaWrapperClass")},{children:infoNode}))}))]}))}))]}))]})):null}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName}}]); \ No newline at end of file diff --git a/8470.e4d33991.iframe.bundle.js b/8470.e4d33991.iframe.bundle.js new file mode 100644 index 00000000..728ec026 --- /dev/null +++ b/8470.e4d33991.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8470],{"./dist/login/Template.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Template});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_assert__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/assert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/lib/usePrepareTemplate.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Template(props){var _props$displayInfo=props.displayInfo,displayInfo=void 0!==_props$displayInfo&&_props$displayInfo,_props$displayMessage=props.displayMessage,displayMessage=void 0===_props$displayMessage||_props$displayMessage,_props$displayRequire=props.displayRequiredFields,displayRequiredFields=void 0!==_props$displayRequire&&_props$displayRequire,_props$displayWide=props.displayWide,displayWide=void 0!==_props$displayWide&&_props$displayWide,_props$showAnotherWay=props.showAnotherWayIfPresent,showAnotherWayIfPresent=void 0===_props$showAnotherWay||_props$showAnotherWay,headerNode=props.headerNode,_props$showUsernameNo=props.showUsernameNode,showUsernameNode=void 0===_props$showUsernameNo?null:_props$showUsernameNo,_props$infoNode=props.infoNode,infoNode=void 0===_props$infoNode?null:_props$infoNode,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,children=props.children,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,changeLocale=i18n.changeLocale,labelBySupportedLanguageTag=i18n.labelBySupportedLanguageTag,currentLanguageTag=i18n.currentLanguageTag,realm=kcContext.realm,locale=kcContext.locale,auth=kcContext.auth,url=kcContext.url,message=kcContext.message,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__.M)({doFetchDefaultThemeResources:doUseDefaultCss,styles:[url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly.min.css",url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly-additions.min.css",url.resourcesCommonPath+"/lib/zocial/zocial.css",url.resourcesPath+"/css/login.css"],htmlClassName:getClassName("kcHtmlClass"),bodyClassName:getClassName("kcBodyClass")}).isReady?(document.title=i18n.msgStr("loginTitle",kcContext.realm.displayName),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcLoginClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header",className:getClassName("kcHeaderClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header-wrapper",className:getClassName("kcHeaderWrapperClass")},{children:msg("loginTitleHtml",realm.displayNameHtml)}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcFormCardClass"),displayWide&&getClassName("kcFormCardAccountClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("header",Object.assign({className:getClassName("kcFormHeaderClass")},{children:[realm.internationalizationEnabled&&((0,_tools_assert__WEBPACK_IMPORTED_MODULE_3__.h)(void 0!==locale),!0)&&locale.supported.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale-wrapper",className:getClassName("kcLocaleWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-dropdown",id:"kc-locale-dropdown"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"kc-current-locale-link"},{children:labelBySupportedLanguageTag[currentLanguageTag]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",{children:locale.supported.map((function(_ref){var languageTag=_ref.languageTag;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",Object.assign({className:"kc-dropdown-item"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",onClick:function onClick(){return changeLocale(languageTag)}},{children:labelBySupportedLanguageTag[languageTag]}))}),languageTag)}))})]}))}))})),void 0===auth||!auth.showUsername||auth.showResetCredentials?displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"})),msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:"col-md-10"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode}))}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode})):displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))," ",msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"col-md-10"},{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-content"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-content-wrapper"},{children:[displayMessage&&void 0!==message&&("warning"!==message.type||!isAppInitiatedAction)&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)("alert","alert-"+message.type)},{children:["success"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackSuccessIcon")}),"warning"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackWarningIcon")}),"error"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackErrorIcon")}),"info"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackInfoIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:"kc-feedback-text",dangerouslySetInnerHTML:{__html:message.summary}})]})),children,void 0!==auth&&auth.showTryAnotherWayLink&&showAnotherWayIfPresent&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-try-another-way-form",action:url.loginAction,method:"post",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&getClassName("kcContentWrapperClass"))},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&[getClassName("kcFormSocialAccountContentClass"),getClassName("kcFormSocialAccountClass")])},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",name:"tryAnotherWay",value:"on"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"try-another-way",onClick:function onClick(){return document.forms["kc-select-try-another-way-form"].submit(),!1}},{children:msg("doTryAnotherWay")}))]}))}))})),displayInfo&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info",className:getClassName("kcSignUpClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info-wrapper",className:getClassName("kcInfoAreaWrapperClass")},{children:infoNode}))}))]}))}))]}))]}))):null}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName}}]); \ No newline at end of file diff --git a/8609.0c60d300.iframe.bundle.js b/8609.0c60d300.iframe.bundle.js new file mode 100644 index 00000000..afd12951 --- /dev/null +++ b/8609.0c60d300.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[8609],{"./dist/account/i18n/baseMessages/fa.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"ذخیره",doCancel:"لغو کنید",doLogOutAllSessions:"از تمام جلسات خارج شوید",doRemove:"حذف",doAdd:"اضافه",doSignOut:"خروج",doLogIn:"ورود",doLink:"پیوند دادن",noAccessMessage:"دسترسی مجاز نیست",personalInfoSidebarTitle:"اطلاعات شخصی",accountSecuritySidebarTitle:"امنیت حساب",signingInSidebarTitle:"وارد شدن",deviceActivitySidebarTitle:"فعالیت دستگاه",linkedAccountsSidebarTitle:"حساب های مرتبط",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:"پست الکترونیک",firstName:"نام",givenName:"لقب",fullName:"نام و نام خانوادگی",lastName:"نام خانوادگی",familyName:"نام خانوادگی",password:"رمز عبور",currentPassword:"رمز عبور فعلی",passwordConfirm:"تائید",passwordNew:"رمز عبور جدید",username:"نام کاربری",address:"نشانی",street:"خیابان",locality:"شهر یا محله",region:"ایالت، استان یا منطقه",postal_code:"کد پستی",country:"کشور",emailVerified:"ایمیل تایید شده",website:"صفحه وب",phoneNumber:"شماره تلفن",phoneNumberVerified:"شماره تلفن تایید شد",gender:"جنسیت",birthday:"تاریخ تولد",zoneinfo:"منطقه زمانی",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-groups":"مشاهده گروه ها","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:"آی پی",client:"مشتری",clients:"مشتریان",details:"جزئیات",started:"آغاز شده",lastAccess:"آخرین دسترسی",expires:"منقضی می شود",applications:"برنامه های کاربردی",account:"حساب",federatedIdentity:"هویت فدرال",authenticator:"احراز هویت","device-activity":"فعالیت دستگاه",sessions:"جلسات",log:"گزارش",application:"کاربرد",availableRoles:"نقش های موجود",grantedPermissions:"مجوزهای اعطا شده",grantedPersonalInfo:"اطلاعات شخصی اعطا شده",additionalGrants:"اعطا شده های اضافی",action:"عمل",inResource:"که در",fullAccess:"دسترسی کامل",offlineToken:"توکن آفلاین",revoke:"لغو امتیاز",configureAuthenticators:"تاییدکنندگان هویت پیکربندی شده",mobile:"تلفن همراه",totpStep1:"یکی از برنامه های زیر را روی تلفن همراه خود نصب کنید:",totpStep2:"برنامه را باز کنید و بارکد را اسکن کنید:",totpStep3:"کد یکبار مصرف ارائه شده توسط برنامه را وارد کنید و روی ذخیره کلیک کنید تا تنظیمات تمام شود.",totpStep3DeviceName:"یک نام دستگاه برای کمک به مدیریت دستگاه های OTP خود ارائه دهید.",totpManualStep2:"برنامه را باز کنید و کلید را وارد کنید:",totpManualStep3:"اگر برنامه اجازه تنظیم آنها را می دهد، از مقادیر پیکربندی زیر استفاده کنید:",totpUnableToScan:"نمی توانید اسکن کنید؟",totpScanBarcode:"اسکن بارکد?","totp.totp":"مبتنی بر زمان","totp.hotp":"مبتنی بر شمارنده",totpType:"نوع",totpAlgorithm:"الگوریتم",totpDigits:"ارقام",totpInterval:"فاصله",totpCounter:"شمارنده",totpDeviceName:"نام دستگاه",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"این عمل برگشت ناپذیر است",deletingImplies:"حذف اکانت به این معنی است:",errasingData:"پاک کردن تمام داده های شما",loggingOutImmediately:"خروج بلافاصله شما از سیستم",accountUnusable:"امکان پذیر نبودن هرگونه استفاده بعدی",missingUsernameMessage:"لطفا نام کاربری را مشخص کنید.",missingFirstNameMessage:"لطفا نام را مشخص کنید.",invalidEmailMessage:"آدرس ایمیل نامعتبر است.",missingLastNameMessage:"لطفا نام خانوادگی را مشخص کنید.",missingEmailMessage:"لطفا ایمیل را مشخص کنید.",missingPasswordMessage:"لطفا رمز عبور را مشخص کنید.",notMatchPasswordMessage:"گذرواژه ها مطابقت ندارند.",invalidUserMessage:"کاربر نامعتبر",updateReadOnlyAttributesRejectedMessage:"به‌روزرسانی ویژگی فقط خواندنی رد شد",missingTotpMessage:"لطفا کد احراز هویت را مشخص کنید.",missingTotpDeviceNameMessage:"لطفا نام دستگاه را مشخص کنید.",invalidPasswordExistingMessage:"رمز عبور موجود نامعتبر است.",invalidPasswordConfirmMessage:"تأیید رمز عبور مطابقت ندارد.",invalidTotpMessage:"کد احراز هویت نامعتبر است.",usernameExistsMessage:"نام کاربری از قبل وجود دارد.",emailExistsMessage:"ایمیل از قبل وجود دارد.",readOnlyUserMessage:"نمی‌توانید حساب خود را به‌روزرسانی کنید زیرا فقط قابل رویت است.",readOnlyUsernameMessage:"شما نمی توانید نام کاربری خود را به روز کنید زیرا فقط قابل رویت است.",readOnlyPasswordMessage:"نمی توانید رمز عبور خود را به روز کنید زیرا حساب شما فقط قابل رویت است.",successTotpMessage:"احراز هویت موبایل پیکربندی شد.",successTotpRemovedMessage:"احراز هویت موبایل حذف شد.",successGrantRevokedMessage:"گرنت با موفقیت لغو شد.",accountUpdatedMessage:"حساب شما به روز شده است.",accountPasswordUpdatedMessage:"رمز عبور شما به روز شده است.",missingIdentityProviderMessage:"ارائه دهنده هویت مشخص نشده است.",invalidFederatedIdentityActionMessage:"اقدام نامعتبر یا از دست رفته است.",identityProviderNotFoundMessage:"ارائه دهنده هویت مشخص شده یافت نشد.",federatedIdentityLinkNotActiveMessage:"این هویت دیگر فعال نیست.",federatedIdentityRemovingLastProviderMessage:"شما نمی توانید آخرین هویت فدرال را حذف کنید زیرا رمز عبور ندارید.",identityProviderRedirectErrorMessage:"هدایت به ارائه دهنده هویت انجام نشد.",identityProviderRemovedMessage:"ارائه دهنده هویت با موفقیت حذف شد.",identityProviderAlreadyLinkedMessage:"هویت فدرال بازگردانده شده توسط {0} قبلاً به کاربر دیگری پیوند داده شده است.",staleCodeAccountMessage:"صفحه منقضی شد لطفا یک بار دیگر امتحان کنید.",consentDenied:"رضایت رد شد.","access-denied-when-idp-auth":"هنگام احراز هویت با {0}، دسترسی ممنوع شد",accountDisabledMessage:"حساب غیرفعال است، با سرپرست خود تماس بگیرید.",accountTemporarilyDisabledMessage:"حساب به طور موقت غیرفعال است، با سرپرست خود تماس بگیرید یا بعداً دوباره امتحان کنید.",invalidPasswordMinLengthMessage:"رمز عبور نامعتبر: حداقل طول {0}.",invalidPasswordMaxLengthMessage:"رمز عبور نامعتبر: حداکثر طول {0}.",invalidPasswordMinLowerCaseCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} نویسه کوچک باشد.",invalidPasswordMinDigitsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} رقم عددی باشد.",invalidPasswordMinUpperCaseCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} نویسه بزرگ باشد.",invalidPasswordMinSpecialCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} کاراکتر خاص باشد.",invalidPasswordNotUsernameMessage:"رمز عبور نامعتبر: نباید برابر با نام کاربری باشد.",invalidPasswordNotEmailMessage:"رمز عبور نامعتبر: نباید برابر با ایمیل باشد.",invalidPasswordRegexPatternMessage:"رمز عبور نامعتبر: با الگو(های) regex مطابقت ندارد.",invalidPasswordHistoryMessage:"گذرواژه نامعتبر: نباید با هیچ یک از رمزهای عبور آخر {0} برابر باشد.",invalidPasswordBlacklistedMessage:"رمز عبور نامعتبر: رمز عبور در لیست سیاه قرار گرفته است.",invalidPasswordGenericMessage:"رمز عبور نامعتبر: رمز عبور جدید با خط استانداردهای رمز عبور مطابقت ندارد.",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:"منبع به اشتراک گذاشته نمی شود",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"نام",applicationType:"نوع اپلیکیشن",applicationInUse:"فقط برنامه در حال استفاده",clearAllFilter:"پاک کردن تمام فیلترها",activeFilters:"فیلترهای فعال",filterByName:"فیلتر بر اساس نام ...",allApps:"همه برنامه ها",internalApps:"برنامه های داخلی",thirdpartyApps:"برنامه های شخص ثالث",appResults:"نتایج",clientNotFoundMessage:"مشتری پیدا نشد",authorizedProvider:"ارائه دهنده مجاز",authorizedProviderMessage:"ارائه دهندگان مجاز با حساب شما مرتبط شده اند",identityProvider:"ارائه دهنده هویت",identityProviderMessage:"برای پیوند دادن حساب خود با ارائه دهندگان هویتی که پیکربندی کرده اید",socialLogin:"ورود به سیستم اجتماعی",userDefined:"تعریف شده توسط کاربر",removeAccess:"دسترسی را حذف کنید",removeAccessMessage:"اگر می‌خواهید از این حساب برنامه استفاده کنید، باید دوباره اجازه دسترسی بدهید.",authenticatorStatusMessage:"وضعیت احراز هویت دو مرحله ای:",authenticatorFinishSetUpTitle:"احراز هویت دو مرحله ای شما",authenticatorFinishSetUpMessage:"هر بار که وارد حساب Keycloak خود می شوید، از شما خواسته می شود یک کد احراز هویت دو مرحله ای ارائه دهید.",authenticatorSubTitle:"احراز هویت دو مرحله ای را تنظیم کنید",authenticatorSubMessage:"برای افزایش امنیت حساب خود، حداقل یکی از روش های احراز هویت دو مرحله ای موجود را فعال کنید.",authenticatorMobileTitle:"ارائه دهندگان احراز هویت تلفن همراه",authenticatorMobileMessage:"از ارائه دهندگان احراز هویت تلفن همراه برای دریافت کدهای تأیید به عنوان احراز هویت دو مرحله ای استفاده کنید.",authenticatorMobileFinishSetUpMessage:"احراز هویت به تلفن شما متصل شده است.",authenticatorActionSetup:"پیکربندی",authenticatorSMSTitle:"کد پیامکی",authenticatorSMSMessage:"Keycloak کد تأیید صحت را به عنوان تأیید هویت دو مرحله ای به تلفن شما ارسال می کند.",authenticatorSMSFinishSetUpMessage:"پیام های متنی ارسال میشوند به",authenticatorDefaultStatus:"پیش فرض",authenticatorChangePhone:"تغییر شماره تلفن",authenticatorMobileSetupTitle:"راه اندازی دستگاه تأیید اعتبار موبایل",smscodeIntroMessage:"شماره تلفن خود را وارد کنید و یک کد تأیید به تلفن شما ارسال می شود.",mobileSetupStep1:"یک برنامه احراز هویت بر روی گوشی خود نصب کنید. برنامه های لیست شده در اینجا پشتیبانی می شوند.",mobileSetupStep2:"برنامه را باز کنید و بارکد را اسکن کنید:",mobileSetupStep3:"کد یکبار مصرف ارائه شده توسط برنامه را وارد کنید و روی Save کلیک کنید تا تنظیمات تمام شود.",scanBarCode:"می خواهید بارکد را اسکن کنید؟",enterBarCode:"کد یکبار مصرف را وارد کنید",doCopy:"کپی",doFinish:"اتمام",authenticatorSMSCodeSetupTitle:"تنظیم کد SMS",chooseYourCountry:"کشورتان را انتخاب کنید",enterYourPhoneNumber:"شماره تلفن خود را وارد کنید",sendVerficationCode:"ارسال کد تایید",enterYourVerficationCode:"کد تأیید خود را وارد کنید",authenticatorBackupCodesSetupTitle:"راه اندازی کدهای احراز هویت بازیابی",realmName:"قلمرو",doDownload:"بارگیری",doPrint:"چاب",generateNewBackupCodes:"کدهای احراز هویت بازیابی جدید را ایجاد کنید",backtoAuthenticatorPage:"بازگشت به صفحه احراز هویت",resources:"منابع",sharedwithMe:"به اشتراک گذاشته شده با من",share:"اشتراک گذاری",sharedwith:"به اشتراک گذاشته شده با",accessPermissions:"مجوزهای دسترسی",permissionRequests:"درخواست های مجوز",approve:"تایید",approveAll:"همه را تایید کنید",people:"مردم",perPage:"هر صفحه",currentPage:"صفحه فعلی",sharetheResource:"منبع را به اشتراک بگذارید",group:"گروه",selectPermission:"مجوز را انتخاب کنید",addPeople:"افرادی را اضافه کنید تا منابع خود را با آنها به اشتراک بگذارید",addTeam:"تیمی را اضافه کنید تا منبع خود را با آنها به اشتراک بگذارید",myPermissions:"مجوزهای من",waitingforApproval:"منتظر پذیرفته شدن",anyPermission:"هر گونه مجوز","openshift.scope.user_info":"اطلاعات کاربر","openshift.scope.user_check-access":"اطلاعات دسترسی کاربر","openshift.scope.user_full":"دسترسی کامل","openshift.scope.list-projects":"لیست پروژه ها","error-invalid-value":"مقدار نامعتبر است.","error-invalid-blank":"لطفا مقدار را مشخص کنید","error-empty":"لطفا مقدار را مشخص کنید","error-invalid-length":"مشخصه {0} باید طولی بین {1} و {2} داشته باشد.","error-invalid-length-too-short":"مشخصه {0} باید حداقل طول {1} داشته باشد.","error-invalid-length-too-long":"مشخصه {0} باید حداکثر طول {2} داشته باشد.","error-invalid-email":"آدرس ایمیل نامعتبر است.","error-invalid-number":"عدد نامعتبر.","error-number-out-of-range":"مشخصه {0} باید عددی بین {1} و {2} باشد.","error-number-out-of-range-too-small":"مشخصه {0} باید حداقل مقدار {1} را داشته باشد.","error-number-out-of-range-too-big":"مشخصه {0} باید حداکثر مقدار {2} را داشته باشد.","error-pattern-no-match":"مقدار نامعتبر است.","error-invalid-uri":"URL نامعتبر است.","error-invalid-uri-scheme":"طرح URL نامعتبر است.","error-invalid-uri-fragment":"تکه URL نامعتبر است.","error-user-attribute-required":"لطفاً ویژگی {0} را مشخص کنید.","error-invalid-date":"تاریخ نامعتبر است.","error-user-attribute-read-only":"فیلد {0} فقط قابل رویت است.","error-username-invalid-character":"نام کاربری حاوی نویسه نامعتبر است.","error-person-name-invalid-character":"نام حاوی نویسه نامعتبر است."}}}]); \ No newline at end of file diff --git a/9061.882c1910.iframe.bundle.js b/9061.882c1910.iframe.bundle.js new file mode 100644 index 00000000..d61f3360 --- /dev/null +++ b/9061.882c1910.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9061],{"./dist/account/i18n/baseMessages/hu.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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",noAccessMessage:"Nincs hozzáférés",personalInfoSidebarTitle:"Személyes adatok",accountSecuritySidebarTitle:"Fiók biztonság",signingInSidebarTitle:"Bejelentkezés",deviceActivitySidebarTitle:"Eszköz történet",linkedAccountsSidebarTitle:"Összekapcsolt fiókok",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, e-mail cím",authenticatorCode:"Egyszer használatos kód",email:"E-mail 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 e-mail cím",website:"Weboldal",phoneNumber:"Telefonszám",phoneNumberVerified:"Ellenőrzött telefonszám",gender:"Nem",birthday:"Születési dátum",zoneinfo:"Időzóna",gssDelegationCredential:"GSS delegált hitelesítés",profileScopeConsentText:"Felhasználói fiók",emailScopeConsentText:"E-mail 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-groups":"Csoportok 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",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",irreversibleAction:"Ez a művelet visszavonhatatlan",deletingImplies:"A felhasználói fiókjának törlésével jár:",errasingData:"Összes adatának törlése",loggingOutImmediately:"Azonnali kijelentkezés",accountUnusable:"Az alkalmazás további használata nem lesz lehetséges ezzel a felhasználói fiókkal",missingUsernameMessage:"Kérem, adja meg a felhasználónevét.",missingFirstNameMessage:"Kérem, adja meg a keresztnevet.",invalidEmailMessage:"Érvénytelen e-mail cím.",missingLastNameMessage:"Kérem, adja meg a vezetéknevet.",missingEmailMessage:"Kérem, adja meg az e-mail címet.",missingPasswordMessage:"Kérem, adja meg a jelszót.",notMatchPasswordMessage:"A jelszavak nem egyeznek meg.",invalidUserMessage:"Érvénytelen felhasználó",updateReadOnlyAttributesRejectedMessage:"Csak olvasható tulajdonság módosítása megtagadva",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 e-mail 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.","access-denied-when-idp-auth":"Hozzáférés megtagadva hitelesítés során: {0}",accountDisabledMessage:"Felhasználói fiókja inaktív, kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával.",accountTemporarilyDisabledMessage:"Felhasználói fiókja átmenetileg inaktív, kérem, vegye fel a kapcsolatot az alkalmazás adminisztrátorával, vagy próbálkozzon később.",invalidPasswordMinLengthMessage:"Érvénytelen jelszó: minimum hossz: {0}.",invalidPasswordMaxLengthMessage:"Érvénytelen jelszó: maximum 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.",invalidPasswordNotEmailMessage:"Érvénytelen jelszó: nem lehet azonos az e-mail címmel.",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.",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",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_hu:"Magyar",locale_fa:"فارسی",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",applicationName:"Név",applicationType:"Alkalmazás típus",applicationInUse:"Csak használatban lévő alkalmazás",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ó.",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:"Közösségi bejelentkezés",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.",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",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",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",authenticatorBackupCodesSetupTitle:"Tartalék kódok beállítása",realmName:"Tartomány",doDownload:"Letöltés",doPrint:"Nyomtatás",generateNewBackupCodes:"Új tartalék kódok generálása",backtoAuthenticatorPage:"Vissza a hitelesítő lapra",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.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","error-invalid-value":"Érvénytelen érték","error-invalid-blank":"Kérem, adja meg a mező értékét.","error-empty":"Kérem, adja meg a mező értékét.","error-invalid-length":"{0} hossza {1} és {2} karakter között kell legyen.","error-invalid-length-too-short":"{0} minimális hossza {1} karakter.","error-invalid-length-too-long":"{0} maximális hossza {2} karakter.","error-invalid-email":"Érvénytelen e-mail cím.","error-invalid-number":"Érvénytelen szám.","error-number-out-of-range":"{0} értéke {1} és {2} közötti szám kell legyen.","error-number-out-of-range-too-small":"{0} minimum értéke: {1}.","error-number-out-of-range-too-big":"{0} maximum értéke: {2}.","error-pattern-no-match":"Érvénytelen érték.","error-invalid-uri":"Érvénytelen URL.","error-invalid-uri-scheme":"Érvénytelen URL séma.","error-invalid-uri-fragment":"Érvénytelen URL fragmens.","error-user-attribute-required":"Kérem, adja meg a(z) {0} értékét.","error-invalid-date":"Érvénytelen dátum.","error-user-attribute-read-only":"A(z) {0} mező csak olvasható.","error-username-invalid-character":"A felhasználónév érvénytelen karaktert tartalmaz.","error-person-name-invalid-character":"A név érvénytelen karaktert tartalmaz."}}}]); \ No newline at end of file diff --git a/9061.bdd52f4d.iframe.bundle.js b/9061.bdd52f4d.iframe.bundle.js deleted file mode 100644 index 69f109d1..00000000 --- a/9061.bdd52f4d.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9061],{"./dist/account/i18n/baseMessages/hu.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",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",applicationName:"Név",applicationType:"Alkalmazás típus",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ó.",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",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.",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",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",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",authenticatorBackupCodesSetupTitle:"Tartalék kódok beállítása",realmName:"Tartomány",doDownload:"Letöltés",doPrint:"Nyomtatás",generateNewBackupCodes:"Új tartalék kódok generálása",backtoAuthenticatorPage:"Vissza a hitelesítő lapra",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.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"}}}]); \ No newline at end of file diff --git a/9096.c212d2a8.iframe.bundle.js b/9096.8e9406dc.iframe.bundle.js similarity index 99% rename from 9096.c212d2a8.iframe.bundle.js rename to 9096.8e9406dc.iframe.bundle.js index 53e2d90d..7ef1d502 100644 --- a/9096.c212d2a8.iframe.bundle.js +++ b/9096.8e9406dc.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9096],{"./dist/login/i18n/baseMessages/nl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Inloggen",doRegister:"Registreer",doCancel:"Annuleer",doSubmit:"Verzenden",doBack:"Terug",doYes:"Ja",doNo:"Nee",doContinue:"Doorgaan",doIgnore:"Negeer",doAccept:"Accepteren",doDecline:"Afwijzen",doForgotPassword:"Wachtwoord vergeten?",doClickHere:"Klik hier",doImpersonate:"Identiteit overnemen",doTryAgain:"Probeer opnieuw",doTryAnotherWay:"Probeer op een ander manier",doConfirmDelete:"Bevestig verwijderen",errorDeletingAccount:"Onverwachte fout bij het verwijderen van account",deletingAccountForbidden:"U heeft onvoldoende rechten om dit account te verwijderen, neem contact op met beheer.",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",loginAccountTitle:"Inloggen met uw account",loginTitle:"Log in met {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Identiteit overnemen",impersonateTitleHtml:"{0} Identiteit overnemen",realmChoice:"Realm",unknownUser:"Onbekende gebruiker",loginTotpTitle:"Mobiele Authenticator Instellen",loginProfileTitle:"Update accountinformatie",loginTimeout:"U bent te lang bezig geweest met inloggen. Het inlogproces begint opnieuw.",reauthenticate:"Log opnieuw in om verder te gaan",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",loginTotpDeviceName:"Apparaatnaam","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","identity-provider-redirector":"Gebruik een andere Identity Provider","identity-provider-login-label":"Of login met","idp-email-verification-display-name":"E-mail Verificatie","idp-email-verification-help-text":"Bevestig uw account per e-mail.","idp-username-password-form-display-name":"Gebruikersnaam en wachtwoord","idp-username-password-form-help-text":"Bevestig uw account door in te loggen."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9096],{"./dist/login/i18n/baseMessages/nl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Inloggen",doRegister:"Registreer",doCancel:"Annuleer",doSubmit:"Verzenden",doBack:"Terug",doYes:"Ja",doNo:"Nee",doContinue:"Doorgaan",doIgnore:"Negeer",doAccept:"Accepteren",doDecline:"Afwijzen",doForgotPassword:"Wachtwoord vergeten?",doClickHere:"Klik hier",doImpersonate:"Identiteit overnemen",doTryAgain:"Probeer opnieuw",doTryAnotherWay:"Probeer op een ander manier",doConfirmDelete:"Bevestig verwijderen",errorDeletingAccount:"Onverwachte fout bij het verwijderen van account",deletingAccountForbidden:"U heeft onvoldoende rechten om dit account te verwijderen, neem contact op met beheer.",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",loginAccountTitle:"Inloggen met uw account",loginTitle:"Log in met {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Identiteit overnemen",impersonateTitleHtml:"{0} Identiteit overnemen",realmChoice:"Realm",unknownUser:"Onbekende gebruiker",loginTotpTitle:"Mobiele Authenticator Instellen",loginProfileTitle:"Update accountinformatie",loginTimeout:"U bent te lang bezig geweest met inloggen. Het inlogproces begint opnieuw.",reauthenticate:"Log opnieuw in om verder te gaan",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",loginTotpDeviceName:"Apparaatnaam","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","identity-provider-redirector":"Gebruik een andere Identity Provider","identity-provider-login-label":"Of login met","idp-email-verification-display-name":"E-mail Verificatie","idp-email-verification-help-text":"Bevestig uw account per e-mail.","idp-username-password-form-display-name":"Gebruikersnaam en wachtwoord","idp-username-password-form-help-text":"Bevestig uw account door in te loggen."}}}]); \ No newline at end of file diff --git a/9292.43d1dd5b.iframe.bundle.js b/9292.43d1dd5b.iframe.bundle.js new file mode 100644 index 00000000..16c5af27 --- /dev/null +++ b/9292.43d1dd5b.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9292],{"./dist/login/i18n/baseMessages/fa.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"ورود",doRegister:"ثبت نام",doCancel:"لغو",doSubmit:"ارسال",doBack:"بازگشت",doYes:"بله",doNo:"خیر",doContinue:"ادامه",doIgnore:"نادیده‌گیری",doAccept:"پذیرفتن",doDecline:"رد کردن",doForgotPassword:"رمز عبور خود را فراموش کرده‌اید?",doClickHere:"اینجا را کلیک کنید",doImpersonate:"تقلید کردن",doTryAgain:"تلاش مجدد",doTryAnotherWay:"راه دیگری را امتحان کنید",doConfirmDelete:"تایید حذف",errorDeletingAccount:"خطایی هنگام حذف حساب رخ داد",deletingAccountForbidden:"شما مجوز کافی برای حذف حساب خود را ندارید، با ادمین تماس بگیرید.",kerberosNotConfigured:"Kerberos تنظیم نشده است",kerberosNotConfiguredTitle:"Kerberos تنظیم نشده است",bypassKerberosDetail:"یا توسط Kerberos وارد نشده اید یا مرورگر شما برای ورود به Kerberos تنظیم نشده است. لطفا روی ادامه کلیک کنید تا از راه های دیگر وارد شوید",kerberosNotSetUp:"Kerberos راه اندازی نشده است. شما نمی توانید وارد شوید.",registerTitle:"ثبت نام",loginAccountTitle:"به حساب خود وارد شوید",loginTitle:"به {0} وارد شوید",loginTitleHtml:"{0}",impersonateTitle:"{0} تقلید کاربر",impersonateTitleHtml:"{0} تقلید کاربر",realmChoice:"قلمرو",unknownUser:"کاربر ناشناس",loginTotpTitle:"راه اندازی دستگاه تأیید اعتبار موبایل",loginProfileTitle:"به روز رسانی اطلاعات حساب",loginIdpReviewProfileTitle:"به روز رسانی اطلاعات حساب",loginTimeout:"زمان تلاش برای ورود شما به پایان رسید. ورود از ابتدا شروع خواهد شد.",reauthenticate:"لطفاً برای ادامه دوباره احراز هویت کنید",oauthGrantTitle:"اعطای دسترسی به {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"با یادگیری نحوه مدیریت {0} با داده های شما، مطمئن شوید که به {0} اعتماد دارید.",oauthGrantReview:"شما می توانید بررسی کنید",oauthGrantTos:"شرایط استفاده از خدمات.",oauthGrantPolicy:"سیاست حفظ حریم خصوصی.",errorTitle:"متاسفیم...",errorTitleHtml:"ما متاسفیم...",emailVerifyTitle:"تایید ایمیل",emailForgotTitle:"رمز عبور خود را فراموش کرده اید؟",updateEmailTitle:"ایمیل را به روز کنید",emailUpdateConfirmationSentTitle:"ایمیل تایید فرستاده شد",emailUpdateConfirmationSent:"یک ایمیل تأیید به {0} ارسال شده است. برای تکمیل به‌روزرسانی ایمیل، باید دستورالعمل‌های قبلی را دنبال کنید.",emailUpdatedTitle:"ایمیل به روز شد",emailUpdated:"ایمیل حساب با موفقیت به {0} به روز شد.",updatePasswordTitle:"رمز عبور را به روز کنید",codeSuccessTitle:"کد موفقیت",codeErrorTitle:"کد خطا: {0}",displayUnsupported:"نوع نمایش درخواستی پشتیبانی نمی شود",browserRequired:"برای ورود به سیستم مرورگر لازم است",browserContinue:"برای تکمیل ورود به مرورگر نیاز است",browserContinuePrompt:"مرورگر را باز کنید و به ورود ادامه دهید؟ [y/n]:",browserContinueAnswer:"y",usb:"USB",nfc:"NFC",bluetooth:"بلوتوث",internal:"داخلی",unknown:"ناشناخته",termsTitle:"شرایط و ضوابط",termsText:"

شرایط و شرایطی که باید تعریف شوند

",termsPlainText:"شرایط و ضوابط باید تعریف شود.",recaptchaFailed:"Recaptcha نامعتبر است",recaptchaNotConfigured:"Recaptcha مورد نیاز است، اما پیکربندی نشده است",consentDenied:"رضایت رد شد.",noAccount:"کاربر جدید هستید؟",username:"نام کاربری",usernameOrEmail:"نام کاربری یا پست الکترونیک",firstName:"نام",givenName:"لقب",fullName:"نام کامل",lastName:"نام خانوادگی",familyName:"نام خانوادگی",email:"ایمیل",password:"رمز عبور",passwordConfirm:"تائید رمز عبور",passwordNew:"رمز عبور جدید",passwordNewConfirm:"تائید رمز عبور جدید",rememberMe:"مرا به خاطر بسپار",authenticatorCode:"کد یکبار مصرف",address:"آدرس",street:"خیابان",locality:"شهر یا محله",region:"ایالت، استان یا منطقه",postal_code:"کد پستی",country:"کشور",emailVerified:"ایمیل تأییده شده است",website:"صفحه وب",phoneNumber:"شماره تلفن",phoneNumberVerified:"شماره تلفن تایید شد",gender:"جنسیت",birthday:"تاریخ تولد",zoneinfo:"منطقه زمانی",gssDelegationCredential:"اعتبارنامه نمایندگی GSS",logoutOtherSessions:"از دستگاه های دیگر خارج شوید",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":"مبتنی بر شمارنده",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"روش ورود را انتخاب کنید",oauthGrantRequest:"آیا به این امتیازات دسترسی می دهید؟",inResource:"در",oauth2DeviceVerificationTitle:"ورود به دستگاه",verifyOAuth2DeviceUserCode:"کد ارائه شده توسط دستگاه خود را وارد کرده و روی ارسال کلیک کنید",oauth2DeviceInvalidUserCodeMessage:"کد نامعتبر است، لطفا دوباره امتحان کنید.",oauth2DeviceExpiredUserCodeMessage:"کد منقضی شده است. لطفاً به دستگاه خود برگردید و دوباره سعی کنید وصل شوید.",oauth2DeviceVerificationCompleteHeader:"ورود دستگاه با موفقیت انجام شد",oauth2DeviceVerificationCompleteMessage:"می توانید این پنجره مرورگر را ببندید و به دستگاه خود بازگردید.",oauth2DeviceVerificationFailedHeader:"ورود دستگاه ناموفق بود",oauth2DeviceVerificationFailedMessage:"می توانید این پنجره مرورگر را ببندید و به دستگاه خود بازگردید و دوباره سعی کنید وصل شوید.",oauth2DeviceConsentDeniedMessage:"رضایت برای اتصال دستگاه رد شد.",oauth2DeviceAuthorizationGrantDisabledMessage:"مشتری مجاز به شروع OAuth 2.0 Device Authorization Grant نیست. جریان برای مشتری غیرفعال است.",emailVerifyInstruction1:"یک ایمیل حاوی دستورالعمل هایی برای تأیید آدرس ایمیل شما به آدرس شما {0} ارسال شده است.",emailVerifyInstruction2:"آیا کد تأیید در ایمیل خود دریافت نکرده اید؟",emailVerifyInstruction3:"برای ارسال مجدد ایمیل",emailLinkIdpTitle:"پیوند {0}",emailLinkIdp1:"یک ایمیل با دستورالعمل پیوند {0} حساب {1} با حساب {2} شما برای شما ارسال شده است.",emailLinkIdp2:"آیا کد تأیید در ایمیل خود دریافت نکرده اید؟",emailLinkIdp3:"برای ارسال مجدد ایمیل",emailLinkIdp4:"اگر قبلاً ایمیل را در مرورگر دیگری تأیید کرده اید",emailLinkIdp5:"ادامه.",backToLogin:"« بازگشت به صفحه ورود",emailInstruction:"نام کاربری یا آدرس ایمیل خود را وارد کنید و ما دستورالعمل هایی در مورد نحوه ایجاد رمز عبور جدید برای شما ارسال خواهیم کرد.",emailInstructionUsername:"نام کاربری خود را وارد کنید و ما دستورالعمل هایی در مورد نحوه ایجاد رمز عبور جدید برای شما ارسال خواهیم کرد.",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":"خواندن 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:"اقدام منقضی شده است. لطفا دوباره شروع کنید.",sessionLimitExceeded:"تعداد جلسات بسیار زیاد است",missingFirstNameMessage:"لطفا نام را مشخص کنید",missingLastNameMessage:"لطفا نام خانوادگی را مشخص کنید",missingEmailMessage:"لطفا ایمیل را مشخص کنید",missingUsernameMessage:"لطفا نام کاربری را مشخص کنید",missingPasswordMessage:"لطفا رمز عبور را مشخص کنید",missingTotpMessage:"لطفا کد احراز هویت را مشخص کنید.",missingTotpDeviceNameMessage:"لطفا نام دستگاه را مشخص کنید.",notMatchPasswordMessage:"گذرواژه ها مطابقت ندارند","error-invalid-value":"مقدار نامعتبر است.","error-invalid-blank":"لطفا مقدار را مشخص کنید","error-empty":"لطفا مقدار را مشخص کنید","error-invalid-length":"طول باید بین {1} و {2} باشد.","error-invalid-length-too-short":"حداقل طول {1} است.","error-invalid-length-too-long":"حداکثر طول {2} است.","error-invalid-email":"آدرس ایمیل نامعتبر است.","error-invalid-number":"عدد نامعتبر.","error-number-out-of-range":"شماره باید بین {1} و {2} باشد.","error-number-out-of-range-too-small":"عدد باید حداقل مقدار {1} را داشته باشد.","error-number-out-of-range-too-big":"عدد باید حداکثر مقدار {2} را داشته باشد.","error-pattern-no-match":"مقدار نامعتبر است.","error-invalid-uri":"URL نامعتبر است.","error-invalid-uri-scheme":"طرح URL نامعتبر است.","error-invalid-uri-fragment":"قطعه URL نامعتبر است.","error-user-attribute-required":"لطفا این فیلد را مشخص کنید.","error-invalid-date":"تاریخ نامعتبر است.","error-user-attribute-read-only":"این فیلد فقط خواندنی است.","error-username-invalid-character":"مقدار حاوی کاراکتر نامعتبر است.","error-person-name-invalid-character":"مقدار حاوی نویسه نامعتبر است.",invalidPasswordExistingMessage:"رمز عبور موجود نامعتبر است.",invalidPasswordBlacklistedMessage:"رمز عبور نامعتبر: رمز عبور در لیست سیاه قرار گرفته است.",invalidPasswordConfirmMessage:"تأیید رمز عبور مطابقت ندارد.",invalidTotpMessage:"کد احراز هویت نامعتبر است.",usernameExistsMessage:"نام کاربری از قبل وجود دارد.",emailExistsMessage:"ایمیل از قبل وجود دارد.",federatedIdentityExistsMessage:"کاربر با {0} {1} از قبل وجود دارد. لطفا برای پیوند دادن حساب به مدیریت حساب وارد شوید.",federatedIdentityUnavailableMessage:"کاربر {0} احراز هویت شده با ارائه دهنده هویت {1} وجود ندارد. لطفا با ادمین خود تماس بگیرید.",confirmLinkIdpTitle:"حساب از قبل وجود دارد",federatedIdentityConfirmLinkMessage:"کاربر با {0} {1} از قبل وجود دارد. چگونه می خواهید ادامه دهید؟",federatedIdentityConfirmReauthenticateMessage:"برای پیوند دادن حساب خود با {0} احراز هویت",nestedFirstBrokerFlowMessage:"کاربر {0} {1} به هیچ کاربر شناخته شده ای پیوند داده نشده است.",confirmLinkIdpReviewProfile:"بررسی نمایه",confirmLinkIdpContinue:"اضافه‌‌کردن به حساب موحود",configureTotpMessage:"برای فعال کردن حساب خود باید اعتبارسنجی از طریق موبایل را راه اندازی کنید.",configureBackupCodesMessage:"برای فعال کردن حساب خود باید کدهای پشتیبان را تنظیم کنید.",updateProfileMessage:"برای فعال کردن حساب کاربری خود باید پروفایل کاربری خود را به روز کنید.",updatePasswordMessage:"برای فعال کردن حساب خود باید رمز عبور خود را تغییر دهید.",updateEmailMessage:"برای فعال کردن حساب خود باید آدرس ایمیل خود را به روز کنید.",resetPasswordMessage:"شما باید رمز عبور خود را تغییر دهید.",verifyEmailMessage:"برای فعال کردن حساب خود باید آدرس ایمیل خود را تأیید کنید.",linkIdpMessage:"برای پیوند دادن حساب خود با {0}، باید آدرس ایمیل خود را تأیید کنید.",emailSentMessage:"شما باید به زودی یک ایمیل با دستورالعمل های بیشتر دریافت کنید.",emailSendErrorMessage:"ایمیل ارسال نشد، لطفاً بعداً دوباره امتحان کنید.",accountUpdatedMessage:"حساب شما به روز شده است.",accountPasswordUpdatedMessage:"رمز عبور شما به روز شده است.",delegationCompleteHeader:"ورود با موفقیت",delegationCompleteMessage:"می توانید این پنجره مرورگر را ببندید و به برنامه کنسول خود بازگردید.",delegationFailedHeader:"ورود ناموفق بود",delegationFailedMessage:"می توانید این پنجره مرورگر را ببندید و به برنامه کنسول خود برگردید و دوباره سعی کنید وارد شوید.",noAccessMessage:"بذون دسترسی",invalidPasswordMinLengthMessage:"رمز عبور نامعتبر: حداقل طول {0}.",invalidPasswordMaxLengthMessage:"رمز عبور نامعتبر: حداکثر طول {0}.",invalidPasswordMinDigitsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} رقم عددی باشد.",invalidPasswordMinLowerCaseCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} نویسه کوچک باشد.",invalidPasswordMinUpperCaseCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} نویسه بزرگ باشد.",invalidPasswordMinSpecialCharsMessage:"رمز عبور نامعتبر: باید حداقل دارای {0} کاراکتر خاص باشد.",invalidPasswordNotUsernameMessage:"رمز عبور نامعتبر: نباید برابر با نام کاربری باشد.",invalidPasswordNotEmailMessage:"رمز عبور نامعتبر: نباید برابر با ایمیل باشد.",invalidPasswordRegexPatternMessage:"رمز عبور نامعتبر: با الگو(های) regex مطابقت ندارد.",invalidPasswordHistoryMessage:"گذرواژه نامعتبر: نباید با هیچ یک از رمزهای عبور اخیر {0} برابر باشد.",invalidPasswordGenericMessage:"رمز عبور نامعتبر: رمز عبور جدید با خط مشی های رمز عبور مطابقت ندارد.",failedToProcessResponseMessage:"پاسخ پردازش نشد",httpsRequiredMessage:"HTTPS مورد نیاز است",realmNotEnabledMessage:"قلمرو فعال نیست",invalidRequestMessage:"درخواست نامعتبر",successLogout:"شما از سیستم خارج شده اید",failedLogout:"خروج ناموفق بود",unknownLoginRequesterMessage:"درخواست کننده ورود نامشخص",loginRequesterNotEnabledMessage:"درخواست کننده ورود فعال نیست",bearerOnlyMessage:"برنامه های فقط حامل مجاز به شروع ورود به مرورگر نیستند",standardFlowDisabledMessage:"مشتری مجاز به شروع ورود به مرورگر با response_type نیست. جریان استاندارد برای مشتری غیرفعال است.",implicitFlowDisabledMessage:"مشتری مجاز به شروع ورود به مرورگر با answer_type نیست. جریان ضمنی برای مشتری غیرفعال است.",invalidRedirectUriMessage:"uri تغییر مسیر نامعتبر است",unsupportedNameIdFormatMessage:"NameIDFormat پشتیبانی نشده",invalidRequesterMessage:"درخواست کننده نامعتبر است",registrationNotAllowedMessage:"ثبت نام مجاز نیست",resetCredentialNotAllowedMessage:"بازنشانی اعتبار مجاز نیست",permissionNotApprovedMessage:"مجوز تایید نشد",noRelayStateInResponseMessage:"هیچ حالت رله ای در پاسخ از ارائه دهنده هویت وجود ندارد.",insufficientPermissionMessage:"مجوزهای کافی برای پیوند دادن هویت ها وجود ندارد.",couldNotProceedWithAuthenticationRequestMessage:"نمی‌توان با درخواست احراز هویت به ارائه‌دهنده هویت ادامه داد.",couldNotObtainTokenMessage:"رمز از ارائه دهنده هویت دریافت نشد.",unexpectedErrorRetrievingTokenMessage:"خطای غیرمنتظره هنگام بازیابی رمز از ارائه دهنده هویت.",unexpectedErrorHandlingResponseMessage:"خطای غیرمنتظره هنگام رسیدگی به پاسخ ارائه‌دهنده هویت.",identityProviderAuthenticationFailedMessage:"احراز هویت ناموفق بود. با ارائه‌دهنده هویت احراز هویت امکان‌پذیر نیست.",couldNotSendAuthenticationRequestMessage:"درخواست احراز هویت به ارائه دهنده هویت ارسال نشد.",unexpectedErrorHandlingRequestMessage:"خطای غیرمنتظره هنگام رسیدگی به درخواست احراز هویت به ارائه‌دهنده هویت.",invalidAccessCodeMessage:"کد دسترسی نامعتبر.",sessionNotActiveMessage:"نشست فعال نیست",invalidCodeMessage:"خطایی رخ داده است، لطفاً دوباره از طریق برنامه خود وارد شوید.",cookieNotFoundMessage:"کوکی پیدا نشد لطفا مطمئن شوید که کوکی ها در مرورگر شما فعال هستند.",insufficientLevelOfAuthentication:"سطح درخواستی احراز هویت برآورده نشده است.",identityProviderUnexpectedErrorMessage:"خطای غیرمنتظره هنگام احراز هویت با ارائه دهنده هویت",identityProviderMissingStateMessage:"پارامتر حالت در پاسخ از ارائه دهنده هویت وجود ندارد.",identityProviderInvalidResponseMessage:"پاسخ نامعتبر از ارائه دهنده هویت.",identityProviderInvalidSignatureMessage:"امضای نامعتبر در پاسخ از ارائه دهنده هویت.",identityProviderNotFoundMessage:"ارائه دهنده هویت با شناسه یافت نشد.",identityProviderLinkSuccess:"شما با موفقیت ایمیل خود را تأیید کردید. لطفاً به مرورگر اصلی خود برگردید و در آنجا با ورود به سیستم ادامه دهید.",staleCodeMessage:"این صفحه دیگر معتبر نیست، لطفاً به برنامه خود برگردید و دوباره وارد شوید",realmSupportsNoCredentialsMessage:"قلمرو از هیچ نوع اعتبارنامه ای پشتیبانی نمی کند.",credentialSetupRequired:"نمی توان به سیستم وارد شد، راه اندازی اعتبارنامه لازم است.",identityProviderNotUniqueMessage:"قلمرو از چندین ارائه دهنده هویت پشتیبانی می کند. نمی توان تعیین کرد که با کدام ارائه دهنده هویت باید برای احراز هویت استفاده شود.",emailVerifiedMessage:"آدرس ایمیل شما تایید شده است.",staleEmailVerificationLink:"پیوندی که روی آن کلیک کردید یک پیوند قدیمی است و دیگر معتبر نیست. شاید قبلا ایمیل خود را تایید کرده باشید.",identityProviderAlreadyLinkedMessage:"هویت فدرال بازگردانده شده توسط {0} قبلاً به کاربر دیگری پیوند داده شده است.",confirmAccountLinking:"پیوند حساب {0} ارائه دهنده هویت {1} را با حساب خود تأیید کنید.",confirmEmailAddressVerification:"اعتبار آدرس ایمیل {0} را تأیید کنید.",confirmExecutionOfActions:"عمل(های) زیر را انجام دهید",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fa:"فارسی",locale_fi:"Suomi",locale_fr:"Français",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",backToApplication:"« بازگشت به برنامه",missingParameterMessage:"پارامترهای از دست رفته: {0}",clientNotFoundMessage:"مشتری یافت نشد",clientDisabledMessage:"مشتری غیرفعال است.",invalidParameterMessage:"پارامتر نامعتبر: {0}",alreadyLoggedIn:"شما پیشتر وارد شدهاید - لاگین کرده اید.",differentUserAuthenticated:"شما قبلاً به عنوان کاربر دیگری '{0}' در این جلسه احراز هویت شده اید. لطفا ابتدا از سیستم خارج شوید.",brokerLinkingSessionExpired:"درخواست پیوند حساب کارگزاری داده است، اما جلسه فعلی دیگر معتبر نیست.",proceedWithAction:"» برای ادامه اینجا را کلیک کنید",acrNotFulfilled:"الزامات احراز هویت برآورده نشده است","requiredAction.CONFIGURE_TOTP":"OTP را تنظیم کنید","requiredAction.TERMS_AND_CONDITIONS":"شرایط و ضوابط","requiredAction.UPDATE_PASSWORD":"رمز عبور را به روز کنید","requiredAction.UPDATE_PROFILE":"بروزرسانی پروفایل","requiredAction.VERIFY_EMAIL":"تأیید ایمیل","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"کدهای بازیابی را ایجاد کنید","requiredAction.webauthn-register-passwordless":"Webauthn ثبت نام بدون رمز عبور",invalidTokenRequiredActions:"اقدامات لازم موجود در پیوند معتبر نیستند",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":"کد ایمیل:","console-accept-terms":"شرایط را می‌پذیرید؟ [y/n]:","console-accept":"y","openshift.scope.user_info":"اطلاعات کاربر","openshift.scope.user_check-access":"اطلاعات دسترسی کاربر","openshift.scope.user_full":"دسترسی کامل","openshift.scope.list-projects":"لیست پروژه ها","saml.post-form.title":"تغییر مسیر احراز هویت","saml.post-form.message":"در حال تغییر مسیر، لطفا صبر کنید.","saml.post-form.js-disabled":"جاوا اسکریپت غیرفعال است. ما قویاً توصیه می کنیم آن را فعال کنید. برای ادامه روی دکمه زیر کلیک کنید.","saml.artifactResolutionServiceInvalidResponse":"قادر به حل مصنوع نیست.","otp-display-name":"برنامه Authenticator","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":"با وارد کردن نام کاربری و رمز عبور خود وارد شوید.","auth-recovery-authn-code-form-display-name":"کد احراز هویت بازیابی","auth-recovery-authn-code-form-help-text":"یک کد احراز هویت بازیابی را از لیستی که قبلا ایجاد شده است وارد کنید.","auth-recovery-code-info-message":"کد بازیابی مشخص شده را وارد کنید.","auth-recovery-code-prompt":"کد بازیابی #{0}","auth-recovery-code-header":"با یک کد احراز هویت بازیابی وارد شوید","recovery-codes-error-invalid":"کد احراز هویت بازیابی نامعتبر است","recovery-code-config-header":"کدهای احراز هویت بازیابی","recovery-code-config-warning-title":"این کدهای بازیابی پس از خروج از این صفحه دیگر ظاهر نمی شوند","recovery-code-config-warning-message":"مطمئن شوید که آنها را چاپ، دانلود یا در یک مدیر رمز عبور کپی کنید و ذخیره کنید. لغو این تنظیم، این کدهای بازیابی را از حساب شما حذف می کند.","recovery-codes-print":"چاپ","recovery-codes-download":"دانلود","recovery-codes-copy":"کپی","recovery-codes-copied":"کپی شد","recovery-codes-confirmation-message":"من این کدها را در جایی امن ذخیره کرده ام","recovery-codes-action-complete":"راه اندازی کامل","recovery-codes-action-cancel":"لغو راه اندازی","recovery-codes-download-file-header":"این کدهای بازیابی را در جایی امن نگه دارید.","recovery-codes-download-file-description":"کدهای بازیابی گذرواژه های یکبار مصرف هستند که به شما امکان می دهند در صورت عدم دسترسی به احراز هویت خود وارد حساب کاربری خود شوید.","recovery-codes-download-file-date":"این کدها در تاریخ تولید شدند","recovery-codes-label-default":"کدهای بازیابی","webauthn-display-name":"کلید امنیتی","webauthn-help-text":"برای ورود به سیستم از کلید امنیتی خود استفاده کنید.","webauthn-passwordless-display-name":"کلید امنیتی","webauthn-passwordless-help-text":"از کلید امنیتی خود برای ورود بدون رمز عبور استفاده کنید.","webauthn-login-title":"ورود به سیستم کلید امنیتی","webauthn-registration-title":"ثبت کلید امنیتی","webauthn-available-authenticators":"کلیدهای امنیتی موجود","webauthn-unsupported-browser-text":"WebAuthn توسط این مرورگر پشتیبانی نمی شود. یکی دیگر را امتحان کنید یا با سرپرست خود تماس بگیرید.","webauthn-doAuthenticate":"با کلید امنیتی وارد شوید","webauthn-createdAt-label":"ایجاد شده در","webauthn-error-title":"خطای کلید امنیتی","webauthn-error-registration":"کلید امنیتی شما ثبت نشد.
{0}","webauthn-error-api-get":"با کلید امنیتی احراز هویت انجام نشد.
{0}","webauthn-error-different-user":"اولین کاربر احراز هویت شده کسی نیست که توسط کلید امنیتی احراز هویت شده است.","webauthn-error-auth-verification":"نتیجه احراز هویت کلید امنیتی نامعتبر است.
{0}","webauthn-error-register-verification":"نتیجه ثبت کلید امنیتی نامعتبر است.
{0}","webauthn-error-user-not-found":"کاربر ناشناس با کلید امنیتی احراز هویت شده است.","identity-provider-redirector":"با یک ارائه‌دهنده هویت دیگر ارتباط برقرار کنید","identity-provider-login-label":"یا با وارد شوید","idp-email-verification-display-name":"تایید ایمیل","idp-email-verification-help-text":"حساب خود را با اعتبارسنجی ایمیل خود پیوند دهید.","idp-username-password-form-display-name":"نام کاربری و رمز عبور","idp-username-password-form-help-text":"با ورود حساب کاربری خود را پیوند دهید.",finalDeletionConfirmation:"اگر حساب خود را حذف کنید، قابل بازیابی نیست. برای حفظ حساب خود، روی لغو کلیک کنید.",irreversibleAction:"این عمل برگشت ناپذیر است",deleteAccountConfirm:"تایید حذف حساب",deletingImplies:"حذف حساب به این معنی است:",errasingData:"پاک کردن تمام داده های شما",loggingOutImmediately:"خروج بلافاصله شما",accountUnusable:"هر گونه استفاده بعدی از برنامه با این حساب امکان پذیر نخواهد بود",userDeletedSuccessfully:"کاربر با موفقیت حذف شد","access-denied":"دسترسی رد شد","access-denied-when-idp-auth":"هنگام احراز هویت با {0}، دسترسی ممنوع شد","frontchannel-logout.title":"خروج از سیستم","frontchannel-logout.message":"شما در حال خروج از برنامه های زیر هستید",logoutConfirmTitle:"خروج",logoutConfirmHeader:"آیا می خواهید از سیستم خارج شوید؟",doLogout:"خروج",readOnlyUsernameMessage:"شما نمی توانید نام کاربری خود را به روز کنید زیرا فقط خواندنی است."}}}]); \ No newline at end of file diff --git a/9650.2a74e019.iframe.bundle.js b/9650.2a74e019.iframe.bundle.js new file mode 100644 index 00000000..2a7c5b00 --- /dev/null +++ b/9650.2a74e019.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9650],{"./dist/login/i18n/baseMessages/el.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Είσοδος",doRegister:"Εγγραφή",doCancel:"Ακύρωση",doSubmit:"Εφαρμογή",doBack:"Επιστροφή",doYes:"Ναι",doNo:"Όχι",doContinue:"Συνέχεια",doIgnore:"Αγνόηση",doAccept:"Αποδοχή",doDecline:"Απόρριψη",doForgotPassword:"Ξεχάσατε το κωδικό;",doClickHere:"Πατήστε Εδώ",doImpersonate:"Προσποίηση",doTryAgain:"Δοκιμή Ξανά",doTryAnotherWay:"Δοκιμή με άλλη μέθοδο",doConfirmDelete:"Επιβεβαίωση διαγραφής",errorDeletingAccount:"Σφάλμα κατά τη διαγραφή του λογαριασμού",deletingAccountForbidden:"Δεν έχετε το δικαίωμα να διαγράψετε τον λογαριασμό σας, επικοινωνήστε με τον διαχειριστή.",kerberosNotConfigured:"Το Kerberos Δεν Έχει Ρυθμιστεί",kerberosNotConfiguredTitle:"Το Kerberos Δεν Έχει Ρυθμιστεί",bypassKerberosDetail:"Είτε δεν έχετε συνδεθεί μέσω Kerberos ή ο περιηγητής σας δεν έχει ρυθμιστεί για είσοδο με Kerberos. Πατήστε για να συνεχίσετε την είσοδο με άλλες μεθόδους",kerberosNotSetUp:"Το Kerberos δεν έχει ρυθμιστεί. Δεν μπορείτε να εισέλθετε.",registerTitle:"Εγγραφή",loginAccountTitle:"Είσοδος στο λογαριασμό σας",loginTitle:"Είσοδος στο {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Προσποίηση Χρήστη",impersonateTitleHtml:"{0} Προσποίηση Χρήστη",realmChoice:"Περιοχή",unknownUser:"Άγνωστος χρήστης",loginTotpTitle:"Ρύθμιση Authenticator Κινητού",loginProfileTitle:"Ενημέρωση Πληροφοριών Λογαριασμού",loginIdpReviewProfileTitle:"Ενημέρωση Πληροφοριών Λογαριασμού",loginTimeout:"Η προσπάθεια εισόδου σας έληξε. Είσοδος από την αρχή.",reauthenticate:"Για να συνεχίσετε παρακαλώ για αυθεντικοποίηση ξανά",oauthGrantTitle:"Δώστε Πρόσβαση στο {0}",oauthGrantTitleHtml:"{0}",oauthGrantInformation:"Βεβαιωθείτε ότι εμπιστεύεστε το {0} μαθαίνοντας πως το {0} θα χειρίζεται τα δεδομένα σας.",oauthGrantReview:"Μπορείτε να ελέγξετε τα ",oauthGrantTos:"όροι της υπηρεσίας.",oauthGrantPolicy:"πολιτική ιδιωτικότητας.",errorTitle:"Ζητάμε συγνώμη...",errorTitleHtml:"Ζητάμε συγνώμη ...",emailVerifyTitle:"Πιστοποίηση Email",emailForgotTitle:"Ξεχάσατε το Κωδικό;",updateEmailTitle:"Ενημέρωση email",emailUpdateConfirmationSentTitle:"Στάλθηκε email επιβεβαίωσης",emailUpdateConfirmationSent:"Ένα email επιβεβαίωσης στάλθηκε στο {0}. Ακολουθήστε τις οδηγίες εκεί, ώστε να ολοκληρώσετε την ενημέρωση του email.",emailUpdatedTitle:"Ενημέρωση email",emailUpdated:"Το email του λογαριασμού άλλαξε επιτυχώς σε {0}.",updatePasswordTitle:"Ενημέρωση κωδικού",codeSuccessTitle:"Επιτυχής κωδικός",codeErrorTitle:"Αριθμός σφάλματος: {0}",displayUnsupported:"Μη υποστηριζόμενος τύπος οθόνης",browserRequired:"Απαιτείται browser για την είσοδο",browserContinue:"Απαιτείται browser για την ολοκλήρωση της εισόδου",browserContinuePrompt:"Εκκίνηση browser και συνέχεια στην είσοδο [ν/ο]:",browserContinueAnswer:"ν",usb:"USB",nfc:"NFC",bluetooth:"Bluetooth",internal:"Εσωτερικό",unknown:"Άγνωστο",termsTitle:"Όροι και Συνθήκες",termsText:"

Δεν έχουν οριστεί Όροι και Συνθήκες

",termsPlainText:"Δεν έχουν οριστεί Όροι και Συνθήκες.",recaptchaFailed:"Άκυρο Recaptcha",recaptchaNotConfigured:"Απαιτείται Recaptcha, αλλά δεν έχει ρυθμιστεί",consentDenied:"Άρνηση Συναίνεσης.",noAccount:"Νέος χρήστης;",username:"Όνομα χρήστη",usernameOrEmail:"Όνομα χρήστη ή email",firstName:"Όνομα",givenName:"Όνομα",fullName:"Ονοματεπώνυμο",lastName:"Επώνυμο",familyName:"Επώνυμο",email:"Email",password:"Κωδικός πρόσβασης",passwordConfirm:"Επιβεβαίωση κωδικού",passwordNew:"Νέος Κωδικός Πρόσβασης",passwordNewConfirm:"Επιβεβαίωση Νέου Κωδικού",rememberMe:"Να με θυμάσαι",authenticatorCode:"Κωδικός μίας-χρήσης",address:"Διεύθυνση",street:"Οδός",locality:"Πόλη ή Δήμος",region:"Νομός ή Περιφέρεια",postal_code:"Ταχυδρομικός Κώδικας",country:"Χώρα",emailVerified:"Επιβεβαιωμένο Email",website:"Ιστοσελίδα",phoneNumber:"Τηλέφωνο",phoneNumberVerified:"Επιβεβαιωμένο τηλέφωνο",gender:"Φύλο",birthday:"Ημερομηνία γέννησης",zoneinfo:"Ζώνη ώρας",gssDelegationCredential:"GSS διαπιστευτήρια εξουσιοδότησης",logoutOtherSessions:"Έξοδος από άλλες συσκευές",profileScopeConsentText:"Προφίλ χρήστη",emailScopeConsentText:"Διεύθυνση email",addressScopeConsentText:"Διεύθυνση",phoneScopeConsentText:"Τηλέφωνο",offlineAccessScopeConsentText:"Πρόσβαση εκτός-σύνδεσης",samlRoleListScopeConsentText:"Οι Ρόλοι Μου",rolesScopeConsentText:"Ρόλοι χρήστη",restartLoginTooltip:"Επανεκκίνηση Εισόδου",loginTotpIntro:"Πρέπει να ορίσετε μια γεννήτρια Κωδικών Μίας Χρήσης για να έχετε πρόσβαση στο λογαριασμό",loginTotpStep1:"Εγκαταστήστε μία από τις ακόλουθες εφαρμογές στο κινητό σας:",loginTotpStep2:"Ανοίξτε την εφαρμογή και σαρώστε το Κώδικα QR:",loginTotpStep3:"Εισάγετε το κωδικό μίας-χρήσης όπως παρέχεται από την εφαρμογή και πατήστε το Υποβολή για να ολοκληρώσετε.",loginTotpStep3DeviceName:"Παρέχετε ένα Όνομα Συσκευής για ευκολία διαχείρισης των συσκευών OTP.",loginTotpManualStep2:"Ανοίξτε την εφαρμογή και εισάγετε το μυστικό κλειδί:",loginTotpManualStep3:"Χρησιμοποιείστε τις παρακάτω τιμές ρυθμίσεων αν η εφαρμογή το υποστηρίζει:",loginTotpUnableToScan:"Πρόβλημα στη σάρωση;",loginTotpScanBarcode:"Σάρωση του QR;",loginCredential:"Διαπιστευτήρια",loginOtpOneTime:"Κωδικός μίας-χρήσης",loginTotpType:"Τύπος",loginTotpAlgorithm:"Αλγόριθμος",loginTotpDigits:"Ψηφία",loginTotpInterval:"Διάστημα",loginTotpCounter:"Μετρητής",loginTotpDeviceName:"Όνομα Συσκευής","loginTotp.totp":"Χρονικός","loginTotp.hotp":"Σειριακός",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",totpAppMicrosoftAuthenticatorName:"Microsoft Authenticator",loginChooseAuthenticator:"Επιλέξτε μέθοδο εισόδου",oauthGrantRequest:"Παραχωρείτε αυτά τα δικαιώματα πρόσβασης;",inResource:"σε",oauth2DeviceVerificationTitle:"Σύνδεση Συσκευής",verifyOAuth2DeviceUserCode:"Εισάγετε τον κωδικό που παρέχεται από την συσκευή και πατήστε Υποβολή",oauth2DeviceInvalidUserCodeMessage:"Άκυρος κωδικός, παρακαλώ προσπαθήστε ξανά.",oauth2DeviceExpiredUserCodeMessage:"Ο κωδικός έχει λήξει. Παρακαλώ πηγαίνετε πίσω στη συσκευή σας και προσπαθήστε να συνδεθείτε ξανά.",oauth2DeviceVerificationCompleteHeader:"Επιτυχής σύνδεση συσκευής",oauth2DeviceVerificationCompleteMessage:"Μπορείτε να κλείσετε το παράθυρο του browser και να επιστρέψετε στη συσκευή σας.",oauth2DeviceVerificationFailedHeader:"Η σύνδεση της συσκευής απέτυχε",oauth2DeviceVerificationFailedMessage:"Μπορείτε να κλείσετε αυτόν τον περιηγητή και να πάτε πίσω στη συσκευή σας και να πρσπαθήσετε να συνδεθείτε ξανά.",oauth2DeviceConsentDeniedMessage:"Δεν δώθηκε συγκατάθεση για σύνδεση στη συσκευή.",oauth2DeviceAuthorizationGrantDisabledMessage:"Ο πελάτης δεν επιτρέπεται να ξεκινήσει το OAuth 2.0 για τη χορήγηση εξουσιοδότησης της συσκευής. Αυτή η ροή είναι απενεργοποιημένη για τον πελάτη.",emailVerifyInstruction1:"Σας στάλθηκε ένα email με οδηγίες για το πως να επιβεβαιώσετε τη διεύθυνση σας {0}.",emailVerifyInstruction2:"Δεν έχετε λάβει έναν κωδικό επαλήθευσης στο email σας;",emailVerifyInstruction3:"να ξανασταλεί το email.",emailLinkIdpTitle:"Σύνδεση {0}",emailLinkIdp1:"Στάλθηκε ένα email με οδηγίες για να συνδέσετε το {0} λογαριασμό {1} με το {2} λογαριασμό.",emailLinkIdp2:"Δεν έχετε λάβει έναν κωδικό επαλήθευσης στο email σας;",emailLinkIdp3:"να ξανασταλεί το email.",emailLinkIdp4:"Αν έχετε ήδη επαλυθεύσει το email σε έναν διαφορετικό περιηγητή",emailLinkIdp5:"για συνέχεια.",backToLogin:"« Επιστροφή στην Είσοδο",emailInstruction:"Εισάγετε το όνομα χρήστη ή τη διεύθυνση email και θα σας σταλούν οδηγίες για το πως να δημιουργήσετε ένα νέο κωδικό.",emailInstructionUsername:"Εισάγετε το όνομα χρήστη και θα σας σταλούν οδηγίες για το πως να δημιουργήσετε ένα νέο κωδικό.",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:"Μη έγκυρο όνομα χρήστη ή email.",invalidPasswordMessage:"Μη έγκυρος κωδικός πρόσβασης.",invalidEmailMessage:"Μη έγκυρη διεύθυνση email.",accountDisabledMessage:"Ο λογαριασμός έχει απενεργοποιηθεί, επικοινωνήστε με το διαχειριστή.",accountTemporarilyDisabledMessage:"Ο λογαριασμός έχει απενεργοποιηθεί προσωρινά, επικοινωνήστε με το διαχειριστή ή δοκιμάστε αργότερα.",expiredCodeMessage:"Λήξη χρόνου σύνδεσης. Παρακαλώ συνδεθείτε ξανά.",expiredActionMessage:"Η ενέργεια έληξε. Προχωρείστε τώρα με σύνδεση.",expiredActionTokenNoSessionMessage:"Η ενέργεια έληξε.",expiredActionTokenSessionExistsMessage:"Η ενέργεια έλειξε. Παρακαλώ αρχίστε ξανά.",sessionLimitExceeded:"Πάρα πολλές συνεδρίες",missingFirstNameMessage:"Παρακαλώ ορίστε ένα όνομα.",missingLastNameMessage:"Παρακαλώ ορίστε επώνυμο.",missingEmailMessage:"Παρακαλώ ορίστε email.",missingUsernameMessage:"Παρακαλώ ορίστε όνομα χρήστη.",missingPasswordMessage:"Παρακαλώ ορίστε κωδικό πρόσβασης.",missingTotpMessage:"Παρακαλώ εισάγετε ένα κωδικό από εφαρμογή ταυτοποίησης.",missingTotpDeviceNameMessage:"Παρακαλώ ορίστε όνομα συσκευής.",notMatchPasswordMessage:"Οι κωδικοί πρόσβασης δε ταιριάζουν.","error-invalid-value":"Μη έγκυρη τιμή.","error-invalid-blank":"Παρακαλώ ορίστε τιμή.","error-empty":"Παρακαλώ ορίστε τιμή.","error-invalid-length":"Το μήκος πρέπει να είναι μεταξύ {1} και {2}.","error-invalid-length-too-short":"Ελάχιστο μήκος {1}.","error-invalid-length-too-long":"Μέγιστο μήκος {2}.","error-invalid-email":"Μη έγκυρη διεύθυνση email.","error-invalid-number":"Μη έγκυρος αριθμός.","error-number-out-of-range":"Ο αριθμός πρέπει να είναι μεταξύ {1} και {2}.","error-number-out-of-range-too-small":"Ο αριθμός πρέπει να έχει ελάχιστη τιμή {1}.","error-number-out-of-range-too-big":"Ο αριθμός πρέπει να έχει μέγιστη τιμή {1}.","error-pattern-no-match":"Μη έγκυρη τιμή.","error-invalid-uri":"Μη έγκυρο URL.","error-invalid-uri-scheme":"Μη έγκυρο σχήμα URL.","error-invalid-uri-fragment":"Μη έγκυρο κομμάτι URL.","error-user-attribute-required":"Παρακαλώ ορίστε αυτό το πεδίο.","error-invalid-date":"Μη έγκυρη ημερομηνία.","error-user-attribute-read-only":"Αυτό το πεδίο είναι για ανάγνωση μόνο.","error-username-invalid-character":"Η τιμή περιέχει μη έγκυρους χαρακτήρες.","error-person-name-invalid-character":"Η τιμή περιέχει μη έγκυρο χαρακτήρα.",invalidPasswordExistingMessage:"Μη έγκυρος υπάρχοντας κωδικός πρόσβασης.",invalidPasswordBlacklistedMessage:"Μη έγκυρος κωδικός πρόσβασης: ο κωδικός είναι απαγορευμένος.",invalidPasswordConfirmMessage:"Η επιβεβαίωση του κωδικού πρόσβασης δε ταιριάζει.",invalidTotpMessage:"Μη έγκυρος κωδικός μίας χρήσης.",usernameExistsMessage:"Το όνομα χρήστη υπάρχει ήδη.",emailExistsMessage:"Το email υπάρχει ήδη.",federatedIdentityExistsMessage:"Ο χρήστης με {0} {1} υπάρχει ήδη. Παρακαλώ συνδεθείτε στη διαχείριση λογαριασμού για να συνδέσετε το λογαριασμό.",federatedIdentityUnavailableMessage:"Δεν υπάρχει ο χρήστης {0} που συνδέθηκε με το πάροχο ταυτότητας {1} . Επικοινωνήστε με το διαχειριστή.",confirmLinkIdpTitle:"Ο λογαριασμός υπάρχει ήδη",federatedIdentityConfirmLinkMessage:"Ο χρήστης {0} {1} υπάρχει ήδη. Σίγουρα να συνεχίσω;",federatedIdentityConfirmReauthenticateMessage:"Αυθεντικοποίηση για σύνδεση του λογαριασμού σας με το {0}",nestedFirstBrokerFlowMessage:"Ο {0} χρήστης {1} δεν έχει συνδεθεί με κάποιο γνωστό χρήστη.",confirmLinkIdpReviewProfile:"Εξέταση προφίλ",confirmLinkIdpContinue:"Προσθήκη σε υπάρχων λογαριασμό",configureTotpMessage:"Ρυθμίστε μια Εφαρμογή Ταυτοποίησης στο κινητό σας για να ενεργοποιήσετε το λογαριασμό.",configureBackupCodesMessage:"Πρέπει να ορίσετε Κωδικούς Ασφαλείας για να ενεργοποιήσετε το λογαριασμό σας.",updateProfileMessage:"Πρέπει να ενημερώσετε το προφίλ χρήστη σας για να ενεργοποιήσετε το λογαριασμό σας.",updatePasswordMessage:"Πρέπει να αλλάξετε το κωδικό πρόσβασης για να ενεργοποιήσετε το λογαριασμό σας.",updateEmailMessage:"Πρέπει να ενημερώσετε το email σας για να ενεργοποιήσετε το λογαριασμός σας.",resetPasswordMessage:"Πρέπει να αλλάξετε το κωδικό πρόσβασης σας.",verifyEmailMessage:"Πρέπει να επιβεβαιώσετε το email σας για να ενεργοποιήσετε το λογαριασμό σας.",linkIdpMessage:"Πρέπει να επιβεβαιώσετε το email σας για να συνδέσετε το λογαριασμό σας με το {0}.",emailSentMessage:"Θα λάβετε ένα email σύντομα με επιπλέων πληροφορίες.",emailSendErrorMessage:"Αποτυχία αποστολής email, παρακαλώ δοκιμάστε αργότερα.",accountUpdatedMessage:"Ο λογαριασμός σας έχει ενημερωθεί.",accountPasswordUpdatedMessage:"Ο κωδικός πρόσβασης ενημερώθηκε.",delegationCompleteHeader:"Επιτυχής Είσοδος",delegationCompleteMessage:"Μπορείτε να κλείστε αυτό το παράθυρο του browser και να επιστρέψετε στην εφαρμογή κονσόλας.",delegationFailedHeader:"Αποτυχία Εισόδου",delegationFailedMessage:"Μπορείτε να κλείσετε αυτό το παράθυρο και να επιστρέψετε στην εφαρμογή κονσόλας σας και να δοκιμάσετε να μπείτε ξανά.",noAccessMessage:"Καμία πρόσβαση",invalidPasswordMinLengthMessage:"Μη έγκυρος κωδικός πρόσβασης: ελάχιστο μήκος {0}.",invalidPasswordMaxLengthMessage:"Μη έγκυρος κωδικός πρόσβασης: μέγιστο μήκος {0}.",invalidPasswordMinDigitsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ψηφία.",invalidPasswordMinLowerCaseCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} πεζούς χαρακτήρες.",invalidPasswordMinUpperCaseCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} κεφαλαίους χαρακτήρες.",invalidPasswordMinSpecialCharsMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να περιέχει τουλάχιστον {0} ειδικούς χαρακτήρες.",invalidPasswordNotUsernameMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίσο με το όνομα χρήστη.",invalidPasswordNotEmailMessage:"Μη έγκυρος κωδικός πρόσβασης: πρέπει να μην είναι ίσο με το email.",invalidPasswordRegexPatternMessage:"Μη έγκυρος κωδικός πρόσβασης: δε ταιριάζει με τα μοτίβα regex.",invalidPasswordHistoryMessage:"Μη έγκυρος κωδικός πρόσβασης: δε πρέπει να είναι το ίδιο με τους τελευταίους {0} κωδικούς.",invalidPasswordGenericMessage:"Μη έγκυρος κωδικός πρόσβασης: ο νέος κωδικός δε συμφωνεί με τις πολιτικές κωδικών.",failedToProcessResponseMessage:"Αδυναμία επεξεργασίας της απάντησης",httpsRequiredMessage:"Απαιτείται HTTPS",realmNotEnabledMessage:"Ο τομέας δεν είναι ενεργός",invalidRequestMessage:"Μη Έγκυρη Αίτηση",successLogout:"Έχετε αποσυνδεθεί",failedLogout:"Αποτυχία αποσύνδεσης",unknownLoginRequesterMessage:"Άγνωστος αιτών σύνδεσης",loginRequesterNotEnabledMessage:"Δεν έχει ενεργοποιηθεί ο αιτών Σύνδεσης",bearerOnlyMessage:"Εφαρμογές τύπου Bearer-only δεν επιτρέπονται να εκκινήσουν είσοδο μέσω browser",standardFlowDisabledMessage:"Ο πελάτης δεν επιτρέπεται να ξεκινά είσοδο μέσω browser με το δοθέν response_type. Η πρότυπη ροή έχει απενεργοποιηθεί για αυτό το πελάτη.",implicitFlowDisabledMessage:"Ο πελάτης δεν επιτρέπεται να ξεκινά είσοδο μέσω browser με το δοθέν response_type. Η έμμεση ροή έχει απενεργοποιηθεί για αυτό το πελάτη.",invalidRedirectUriMessage:"Μη έγκυρο redirect uri",unsupportedNameIdFormatMessage:"Μη υποστηριζόμενη NamedIDFormat",invalidRequesterMessage:"Μη έγκυρος αιτών",registrationNotAllowedMessage:"Η εγγραφή δεν επιτρέπεται",resetCredentialNotAllowedMessage:"Η Επαναφορά Διαπιστευτηρίων δεν επιτρέπεται",permissionNotApprovedMessage:"Η άδεια δεν εγκρίθηκε.",noRelayStateInResponseMessage:"Δεν υπάρχει κατάσταση μεταβίβασης στην απάντηση από το πάροχο ταυτότητας.",insufficientPermissionMessage:"Δεν επαρκούν τα δικαιώματα για σύνδεση των ταυτοτήτων.",couldNotProceedWithAuthenticationRequestMessage:"Αδυναμία ολοκλήρωσης του ελέγχου ταυτότητας στο πάροχο ταυτότητας.",couldNotObtainTokenMessage:"Αδυναμία απόκτησης διακριτικού από το πάροχο ταυτότητας.",unexpectedErrorRetrievingTokenMessage:"Απρόσμενο σφάλμα κατά την απόκτηση διακριτικού από το πάροχο ταυτότητας.",unexpectedErrorHandlingResponseMessage:"Απρόσμενο σφάλμα κατά το χειρισμό της απάντησης από το πάροχο ταυτότητας.",identityProviderAuthenticationFailedMessage:"Η ταυτοποίηση απέτυχε. Αδυναμία ελέγχου της ταυτότητας με το πάροχο ταυτότητας.",couldNotSendAuthenticationRequestMessage:"Αδυναμία αποστολής του αιτήματος ελέγχου ταυτότητας στο πάροχο ταυτότητας.",unexpectedErrorHandlingRequestMessage:"Απρόσμενο σφάλμα κατά το χειρισμό του αιτήματος ταυτοποποίησης στο πάροχο ταυτότητας.",invalidAccessCodeMessage:"Μη έγκυρος κωδικός πρόσβασης.",sessionNotActiveMessage:"Η συνεδρία δεν είναι ενεργή.",invalidCodeMessage:"Συνέβη ένα σφάλμα, παρακαλώ για επανασύνδεση μέσω της εφαρμογής σας.",cookieNotFoundMessage:"Δε βρέθηκε το cookie. Παρακαλώ βεβαιωθείτε ότι τα cookies είναι ενεργά στο browser σας.",insufficientLevelOfAuthentication:"Δεν ικανοποιήθηκε το επίπεδο ταυτοποίησης που ζητήθηκε.",identityProviderUnexpectedErrorMessage:"Απρόσμενο σφάλμα κατά τη ταυτοποίηση με το πάροχο ταυτότητας",identityProviderMissingStateMessage:"Λείπει η παράμετρος state από την απάντηση του παρόχου ταυτότητας.",identityProviderInvalidResponseMessage:"Μη έγκυρη απάντηση από το πάροχο ταυτότητας.",identityProviderInvalidSignatureMessage:"Μη έγκυρη υπογραφή στην απάντηση από το πάροχο ταυτότητας.",identityProviderNotFoundMessage:"Αδυναμία εύρεσης ενός παρόχου ταυτότητας με το αναγνωριστικό.",identityProviderLinkSuccess:"Επιβεβαιώσατε το email σας επιτυχώς. Παρακαλώ επιστρέψτε στο αρχικό browser και συνεχίστε εκεί την είσοδο.",staleCodeMessage:"Αυτή η σελίδα δεν είναι πια έγκυρη, παρακαλώ επιστρέψτε στην εφαρμογή σας και συνδεθείτε ξανά",realmSupportsNoCredentialsMessage:"Ο τομέας δεν υποστηρίζει κανένα τύπο διαπιστευτηρίων.",credentialSetupRequired:"Αδυναμία εισόδου, απαιτείται ρύθμιση των διαπιστευτηρίων.",identityProviderNotUniqueMessage:"Ο τομέας υποστηρίζει πολλαπλούς παρόχους ταυτότητας. Αδυναμία επιλογής του παρόχου ταυτότητας που θα χρησιμοποιηθεί για τη ταυτοποίηση.",emailVerifiedMessage:"Η διεύθυνση email σας έχει επιβεβαιωθεί.",staleEmailVerificationLink:"Ο σύνδεσμός που πατήσατε είναι παλιός και δεν είναι έγκυρος πια. Ίσως έχετε ήδη επιβεβαιώσει το email σας.",identityProviderAlreadyLinkedMessage:"Η ομόσπονδη ταυτότητα που επιστρέφει το {0} είναι ήδη συνδεδεμένη με ένα άλλο χρήστη.",confirmAccountLinking:"Επιβεβαιώστε τη σύνδεση του λογαριασμού {0} στο πάροχο ταυτότητας {1} με το λογαριασμό σας.",confirmEmailAddressVerification:"Επιβεβαιώστε την εγκυρότητα της διεύθυνσης email {0}.",confirmExecutionOfActions:"Πραγματοποιήστε την ακόλουθη ενέργεια(ες)",locale_ar:"عربي",locale_ca:"Català",locale_cs:"Čeština",locale_da:"Dansk",locale_de:"Deutsch",locale_en:"English",locale_es:"Español",locale_fr:"Français",locale_gr:"Ελληνικά",locale_hu:"Magyar",locale_it:"Italiano",locale_ja:"日本語",locale_lt:"Lietuvių",locale_nl:"Nederlands",locale_no:"Norsk",locale_pl:"Polski",locale_pt_BR:"Português (Brasil)","locale_pt-BR":"Português (Brasil)",locale_ru:"Русский",locale_sk:"Slovenčina",locale_sv:"Svenska",locale_tr:"Türkçe","locale_zh-CN":"中文简体",locale_fi:"Suomi",backToApplication:"« Επιστροφή στην Εφαρμογή",missingParameterMessage:"Λείπουν οι παράμετροι: {0}",clientNotFoundMessage:"Ο πελάτης δε βρέθηκε.",clientDisabledMessage:"Ο πελάτης απενεργοποιήθηκε.",invalidParameterMessage:"Μη έγκυρη παράμετρος: {0}",alreadyLoggedIn:"Έχετε ήδη συνδεθεί.",differentUserAuthenticated:"Έχετε ήδη ταυτοποιηθεί σε αυτή τη συνεδρία ως ο άλλος χρήστης '{0}'. Παρακαλώ πρώτα να αποσυνδεθείτε.",brokerLinkingSessionExpired:"Αιτήθηκε σύνδεση με λογαριασμό μεσολαβητή, αλλά η τρέχουσα συνεδρία δεν είναι πια έγκυρη.",proceedWithAction:"» Πατήστε εδώ για να προχωρήσετε",acrNotFulfilled:"Δεν ικανοποιούνται οι απαιτήσεις ταυτοποίησης","requiredAction.CONFIGURE_TOTP":"Ρύθμιση OTP","requiredAction.terms_and_conditions":"Όροι και Συνθήκες","requiredAction.UPDATE_PASSWORD":"Ενημέρωση Κωδικού Πρόσβασης","requiredAction.UPDATE_PROFILE":"Ενημέρωση Προφίλ","requiredAction.VERIFY_EMAIL":"Επιβεβαίωση Email","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Δημιουργία Κωδικών Ανάκτησης","requiredAction.webauthn-register-passwordless":"Εγγραφή σε Webauthn Χωρίς-Κωδικό-Πρόσβασης",invalidTokenRequiredActions:"Οι απαιτούμενες ενέργειες που περιλαμβάνονται σε αυτό το σύνδεσμο δεν είναι έγκυρες",doX509Login:"Θα συνδεθείτε ως:",clientCertificate:"Πιστοποιητικό πελάτη X509:",noCertificate:"[Κανένα Πιστοποιητικό]",pageNotFound:"Η σελίδα δε βρέθηκε",internalServerError:"Συνέβη ένα εσωτερικό σφάλμα στην υπηρεσία","console-username":"Όνομα Χρήστη:","console-password":"Κωδικός Πρόσβασης:","console-otp":"Κωδικός Μίας Χρήσης:","console-new-password":"Νέος Κωδικός Πρόσβασης:","console-confirm-password":"Επιβεβαίωση Κωδικού:","console-update-password":"Απαιτείται η ενημέρωση του κωδικού πρόσβασης σας.","console-verify-email":"Πρέπει να επιβεβαιώσετε την διεύθυνση email σας. Στάλθηκε ένα email στο {0} το οποίο περιέχει ένα κωδικό επιβεβαίωσης. Παρακαλώ εισάγετε το κωδικό στο παρακάτω πεδίο.","console-email-code":"Κωδικός Email:","console-accept-terms":"Αποδοχή Όρων [ν/ο]:","console-accept":"ν","openshift.scope.user_info":"Πληροφορίες χρήστη","openshift.scope.user_check-access":"Πληροφορίες πρόσβασης χρήστη","openshift.scope.user_full":"Πλήρης Πρόσβαση","openshift.scope.list-projects":"Εμφάνιση λίστας έργων","saml.post-form.title":"Ανακατεύθυνση Ταυτοποίησης","saml.post-form.message":"Ανακατεύθυνση, παρακαλώ αναμένατε.","saml.post-form.js-disabled":"Έχει απενεργοποιηθεί η JavaScript. Συνιστούμε να την ενεργοποιήσετε. Πατήστε το κουμπί παρακάτω για να συνεχίσετε. ","saml.artifactResolutionServiceInvalidResponse":"Αδυναμία επίλυσης του στοιχείου.","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":"Συνδεθείτε με το όνομα χρήστη και το κωδικό πρόσβασης σας.","auth-recovery-authn-code-form-display-name":"Κωδικός Ανάκτησης Ταυτοποίησης","auth-recovery-authn-code-form-help-text":"Δώστε ένα κωδικό ανάκτησης ταυτοποίησης από μια προϋπάρχουσα λίστα.","auth-recovery-code-info-message":"Δώστε το καθορισμένο κωδικό ανάκτησης.","auth-recovery-code-prompt":"Κωδικός ανάκτησης #{0}","auth-recovery-code-header":"Σύνδεση με ένα κωδικό ανάκτησης ταυτοποίησης","recovery-codes-error-invalid":"Μη έγκυρος κωδικός ανάκτησης ταυτοποίησης","recovery-code-config-header":"Κωδικοί Ανάκτησης Ταυτοποίησης","recovery-code-config-warning-title":"Αυτοί οι κωδικοί ανάκτησης δεν θα είναι πια ορατή μετά που θα βγείτε από τη σελίδα","recovery-code-config-warning-message":"Βεβαιωθείτε ότι τους εκτυπώσατε, κατεβάσατε ή αντιγράψατε στο διαχειριστή κωδικών σας με ασφάλεια. Η ακύρωση αυτής της διαδικασίας θα αφαιρέσει αυτούς του κωδικούς ανάκτησης από το λογαριασμό σας.","recovery-codes-print":"Εκτύπωση","recovery-codes-download":"Λήψη","recovery-codes-copy":"Αντιγραφή","recovery-codes-copied":"Αντιγράφηκε","recovery-codes-confirmation-message":"Αποθήκευσα αυτούς του κωδικούς με ασφάλεια","recovery-codes-action-complete":"Ολοκλήρωση διαδικασίας","recovery-codes-action-cancel":"Ακύρωση διαδικασίας","recovery-codes-download-file-header":"Κρατήστε αυτούς του κωδικούς ανάκτησης κάπου ασφαλές.","recovery-codes-download-file-description":"Οι κωδικοί ανάκτησης είναι μυστικά μίας χρήσης που επιτρέπουν να συνδεθείτε στο λογαριασμό αν δεν έχετε πρόσβαση στην εφαρμογή ταυτοποίησης.","recovery-codes-download-file-date":"Αυτοί οι κωδικοί δημιουργήθηκαν στις","recovery-codes-label-default":"Κωδικοί ανάκτησης","webauthn-display-name":"Κλειδί Ασφαλείας","webauthn-help-text":"Χρήση του κλειδιού ασφαλείας σας για σύνδεση.","webauthn-passwordless-display-name":"Κλειδί Ασφαλείας","webauthn-passwordless-help-text":"Χρήση του κλειδιού ασφαλείας για σύνδεση χωρίς κωδικό πρόσβασης.","webauthn-login-title":"Είσοδος με Κλειδί Ασφαλείας","webauthn-registration-title":"Εγγραφή Κλειδιού Ασφαλείας","webauthn-available-authenticators":"Διαθέσιμα Κλειδιά Ασφαλείας","webauthn-unsupported-browser-text":"Το WebAuthn δεν υποστηρίζεται από αυτό το browser. Δοκιμάστε κάποιον άλλο ή επικοινωνήστε με το διαχειριστή.","webauthn-doAuthenticate":"Σύνδεση με το Κλειδί Ασφαλείας","webauthn-createdAt-label":"Δημιουργήθηκε","webauthn-error-title":"Σφάλμα Κλειδιού Ασφαλείας","webauthn-error-registration":"Αποτυχία εγγραφής του κλειδιού ασφαλείας σας.
{0}","webauthn-error-api-get":"Αποτυχία ταυτοποίησης μέσω του Κλειδιού ασφαλείας.
{0}","webauthn-error-different-user":"Ο αρχικός ταυτοποιημένος χρήστης δεν είναι ο ίδιος με αυτό που ταυτοποιήθηκε με το Κλειδί ασφαλείας.","webauthn-error-auth-verification":"Μη έγκυρο αποτέλεσμα ταυτοποίησης του Κλειδιού ασφαλείας.
{0}","webauthn-error-register-verification":"Μη έγκυρο αποτέλεσμα εγγραφής του Κλειδιού ασφαλείας.
{0}","webauthn-error-user-not-found":"Άγνωστος χρήστης ταυτοποιήθηκε με το Κλειδί ασφαλείας.","identity-provider-redirector":"Σύνδεση με ένα άλλο Πάροχο Ταυτότητας","identity-provider-login-label":"Ή σύνδεση με","idp-email-verification-display-name":"Πιστοποίηση Email","idp-email-verification-help-text":"Σύνδεση του λογαριασμού με επιβεβαίωση του email σας.","idp-username-password-form-display-name":"Όνομα χρήστη και κωδικός πρόσβασης","idp-username-password-form-help-text":"Σύνδεση του λογαριασμού σας μέσω της εισόδου σας.",finalDeletionConfirmation:"Αν διαγράψετε το λογαριασμό σας, η ανάκτηση θα είναι αδύνατη. Για να παραμείνει, πατήστε Ακύρωση.",irreversibleAction:"Αυτή η ενέργεια είναι μη αναστρέψιμη",deleteAccountConfirm:"Επιβεβαίωση διαγραφής λογαριασμού",deletingImplies:"Η διαγραφή του λογαριασμού σας συνεπάγεται:",errasingData:"Διαγραφή όλων των δεδομένων σας",loggingOutImmediately:"Άμεση αποσύνδεση σας",accountUnusable:"Κάθε μεταγενέστερη χρήση αυτής της εφαρμογής δεν θα είναι δυνατή με αυτό το λογαριασμό",userDeletedSuccessfully:"Ο χρήστης διαγράφηκε με επιτυχία","access-denied":"Δεν επιτρέπεται η πρόσβαση","access-denied-when-idp-auth":"Δεν επιτρέπεται η πρόσβαση κατά τη ταυτοποίηση με {0}","frontchannel-logout.title":"Αποσύνδεση","frontchannel-logout.message":"Αποσυνδέεστε από τις παρακάτω εφαρμογές",logoutConfirmTitle:"Αποσύνδεση",logoutConfirmHeader:"Σίγουρα να γίνει αποσύνδεση;",doLogout:"Αποσύνδεση",readOnlyUsernameMessage:"Δε μπορείτε να ενημερώσετε το όνομα χρήστη σας καθώς είναι μόνο-για-ανάγνωση."}}}]); \ No newline at end of file diff --git a/9719.d1cd92f3.iframe.bundle.js b/9719.d1cd92f3.iframe.bundle.js deleted file mode 100644 index 18b66b9d..00000000 --- a/9719.d1cd92f3.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9719,8470],{"./dist/login/Template.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>Template});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_assert__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./dist/tools/assert.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/lib/usePrepareTemplate.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useGetClassName.js");function Template(props){var _props$displayInfo=props.displayInfo,displayInfo=void 0!==_props$displayInfo&&_props$displayInfo,_props$displayMessage=props.displayMessage,displayMessage=void 0===_props$displayMessage||_props$displayMessage,_props$displayRequire=props.displayRequiredFields,displayRequiredFields=void 0!==_props$displayRequire&&_props$displayRequire,_props$displayWide=props.displayWide,displayWide=void 0!==_props$displayWide&&_props$displayWide,_props$showAnotherWay=props.showAnotherWayIfPresent,showAnotherWayIfPresent=void 0===_props$showAnotherWay||_props$showAnotherWay,headerNode=props.headerNode,_props$showUsernameNo=props.showUsernameNode,showUsernameNode=void 0===_props$showUsernameNo?null:_props$showUsernameNo,_props$infoNode=props.infoNode,infoNode=void 0===_props$infoNode?null:_props$infoNode,kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,children=props.children,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__.v)({doUseDefaultCss,classes}).getClassName,msg=i18n.msg,changeLocale=i18n.changeLocale,labelBySupportedLanguageTag=i18n.labelBySupportedLanguageTag,currentLanguageTag=i18n.currentLanguageTag,realm=kcContext.realm,locale=kcContext.locale,auth=kcContext.auth,url=kcContext.url,message=kcContext.message,isAppInitiatedAction=kcContext.isAppInitiatedAction;return(0,_lib_usePrepareTemplate__WEBPACK_IMPORTED_MODULE_5__.M)({doFetchDefaultThemeResources:doUseDefaultCss,styles:[url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly.min.css",url.resourcesCommonPath+"/node_modules/patternfly/dist/css/patternfly-additions.min.css",url.resourcesCommonPath+"/lib/zocial/zocial.css",url.resourcesPath+"/css/login.css"],htmlClassName:getClassName("kcHtmlClass"),bodyClassName:getClassName("kcBodyClass")}).isReady?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcLoginClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header",className:getClassName("kcHeaderClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-header-wrapper",className:getClassName("kcHeaderWrapperClass")},{children:msg("loginTitleHtml",realm.displayNameHtml)}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcFormCardClass"),displayWide&&getClassName("kcFormCardAccountClass"))},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("header",Object.assign({className:getClassName("kcFormHeaderClass")},{children:[realm.internationalizationEnabled&&((0,_tools_assert__WEBPACK_IMPORTED_MODULE_3__.h)(void 0!==locale),!0)&&locale.supported.length>1&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-locale-wrapper",className:getClassName("kcLocaleWrapperClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-dropdown",id:"kc-locale-dropdown"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"kc-current-locale-link"},{children:labelBySupportedLanguageTag[currentLanguageTag]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("ul",{children:locale.supported.map((function(_ref){var languageTag=_ref.languageTag;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("li",Object.assign({className:"kc-dropdown-item"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",onClick:function onClick(){return changeLocale(languageTag)}},{children:labelBySupportedLanguageTag[languageTag]}))}),languageTag)}))})]}))}))})),void 0===auth||!auth.showUsername||auth.showResetCredentials?displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"})),msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:"col-md-10"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode}))}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("h1",Object.assign({id:"kc-page-title"},{children:headerNode})):displayRequiredFields?(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcContentWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcLabelWrapperClass"),"subtitle")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("span",Object.assign({className:"subtitle"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"required"},{children:"*"}))," ",msg("requiredFields")]}))})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"col-md-10"},{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]}))]})):(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)(react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.Fragment,{children:[showUsernameNode,(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-username"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("label",Object.assign({id:"kc-attempted-username"},{children:null==auth?void 0:auth.attemptedUsername})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({id:"reset-login",href:url.loginRestartFlowUrl},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:"kc-login-tooltip"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("i",{className:getClassName("kcResetFlowIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",Object.assign({className:"kc-tooltip-text"},{children:msg("restartLoginTooltip")}))]}))}))]}))}))]})]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-content"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({id:"kc-content-wrapper"},{children:[displayMessage&&void 0!==message&&("warning"!==message.type||!isAppInitiatedAction)&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)("alert","alert-"+message.type)},{children:["success"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackSuccessIcon")}),"warning"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackWarningIcon")}),"error"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackErrorIcon")}),"info"===message.type&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:getClassName("kcFeedbackInfoIcon")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("span",{className:"kc-feedback-text",dangerouslySetInnerHTML:{__html:message.summary}})]})),children,void 0!==auth&&auth.showTryAnotherWayLink&&showAnotherWayIfPresent&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("form",Object.assign({id:"kc-select-try-another-way-form",action:url.loginAction,method:"post",className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&getClassName("kcContentWrapperClass"))},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(displayWide&&[getClassName("kcFormSocialAccountContentClass"),getClassName("kcFormSocialAccountClass")])},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("input",{type:"hidden",name:"tryAnotherWay",value:"on"}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("a",Object.assign({href:"#",id:"try-another-way",onClick:function onClick(){return document.forms["kc-select-try-another-way-form"].submit(),!1}},{children:msg("doTryAnotherWay")}))]}))}))})),displayInfo&&(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info",className:getClassName("kcSignUpClass")},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_2__.jsx)("div",Object.assign({id:"kc-info-wrapper",className:getClassName("kcInfoAreaWrapperClass")},{children:infoNode}))}))]}))}))]}))]})):null}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginOauthGrant.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOauthGrant});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_Template__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/login/Template.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginOauthGrant(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,url=kcContext.url,oauth=kcContext.oauth,client=kcContext.client,msg=i18n.msg,msgStr=i18n.msgStr,advancedMsg=i18n.advancedMsg,advancedMsgStr=i18n.advancedMsgStr,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_6__.v)({doUseDefaultCss,classes}).getClassName;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(_Template__WEBPACK_IMPORTED_MODULE_5__.default,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("oauthGrantTitle",client.name?advancedMsgStr(client.name):client.clientId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({id:"kc-oauth",className:"content-area"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("h3",{children:msg("oauthGrantRequest")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("ul",{children:oauth.clientScopesRequested.map((function(clientScope){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("li",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span",{children:advancedMsg(clientScope.consentScreenText)})},clientScope.consentScreenText)}))}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("form",Object.assign({className:"form-actions",action:url.oauthAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{type:"hidden",name:"code",value:oauth.code}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",Object.assign({id:"kc-form-options"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",Object.assign({id:"kc-form-buttons"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({className:getClassName("kcFormButtonsWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),name:"accept",id:"kc-login",type:"submit",value:msgStr("doYes")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),name:"cancel",id:"kc-cancel",type:"submit",value:msgStr("doNo")})]}))}))]}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"clearfix"})]}))}))}}}]); \ No newline at end of file diff --git a/9719.ffa2c0ab.iframe.bundle.js b/9719.ffa2c0ab.iframe.bundle.js new file mode 100644 index 00000000..529c28a4 --- /dev/null +++ b/9719.ffa2c0ab.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9719],{"./dist/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{a:()=>createUseClassName});var _tools_clsx__WEBPACK_IMPORTED_MODULE_0__=__webpack_require__("./dist/tools/clsx.js"),_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__=__webpack_require__("./dist/tools/useConstCallback.js");function createUseClassName(params){var defaultClasses=params.defaultClasses;return{useGetClassName:function useGetClassName(params){var classes=params.classes;return{getClassName:(0,_tools_useConstCallback__WEBPACK_IMPORTED_MODULE_1__.O)((function(classKey){return(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_0__.W)(classKey,defaultClasses[classKey],null==classes?void 0:classes[classKey])}))}}}}},"./dist/login/lib/useGetClassName.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{v:()=>useGetClassName});var useGetClassName=(0,__webpack_require__("./dist/lib/useGetClassName.js").a)({defaultClasses:{kcBodyClass:void 0,kcHtmlClass:"login-pf",kcLoginClass:"login-pf-page",kcContentWrapperClass:"row",kcHeaderClass:"login-pf-page-header",kcHeaderWrapperClass:void 0,kcFormCardClass:"card-pf",kcFormCardAccountClass:"login-pf-accounts",kcFormSocialAccountClass:"login-pf-social-section",kcFormSocialAccountContentClass:"col-xs-12 col-sm-6",kcFormHeaderClass:"login-pf-header",kcLocaleWrapperClass:void 0,kcFeedbackErrorIcon:"pficon pficon-error-circle-o",kcFeedbackWarningIcon:"pficon pficon-warning-triangle-o",kcFeedbackSuccessIcon:"pficon pficon-ok",kcFeedbackInfoIcon:"pficon pficon-info",kcResetFlowIcon:"pficon pficon-arrow fa-2x",kcFormGroupClass:"form-group",kcLabelWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcSignUpClass:"login-pf-signup",kcInfoAreaWrapperClass:void 0,kcLogoClass:"login-pf-brand",kcContainerClass:"container-fluid",kcContentClass:"col-sm-8 col-sm-offset-2 col-md-6 col-md-offset-3 col-lg-6 col-lg-offset-3",kcFeedbackAreaClass:"col-md-12",kcLocaleClass:"col-xs-12 col-sm-1",kcAlertIconClasserror:"pficon pficon-error-circle-o",kcFormAreaClass:"col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2 col-lg-8 col-lg-offset-2",kcFormSocialAccountListClass:"login-pf-social list-unstyled login-pf-social-all",kcFormSocialAccountDoubleListClass:"login-pf-social-double-col",kcFormSocialAccountListLinkClass:"login-pf-social-link",kcWebAuthnKeyIcon:"pficon pficon-key",kcWebAuthnDefaultIcon:"pficon pficon-key",kcFormClass:"form-horizontal",kcFormGroupErrorClass:"has-error",kcLabelClass:"control-label",kcInputClass:"form-control",kcInputErrorMessageClass:"pf-c-form__helper-text pf-m-error required kc-feedback-text",kcInputWrapperClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsWrapperClass:void 0,kcFormOptionsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormButtonsClass:"col-xs-12 col-sm-12 col-md-12 col-lg-12",kcFormSettingClass:"login-pf-settings",kcTextareaClass:"form-control",kcInfoAreaClass:"col-xs-12 col-sm-4 col-md-4 col-lg-5 details",kcFormGroupHeader:"pf-c-form__group",kcButtonClass:"btn",kcButtonPrimaryClass:"btn-primary",kcButtonDefaultClass:"btn-default",kcButtonLargeClass:"btn-lg",kcButtonBlockClass:"btn-block",kcInputLargeClass:"input-lg",kcInputGroup:"pf-c-input-group",kcSrOnlyClass:"sr-only",kcSelectAuthListClass:"list-group list-view-pf",kcSelectAuthListItemClass:"list-group-item list-view-pf-stacked",kcSelectAuthListItemFillClass:"pf-l-split__item pf-m-fill",kcSelectAuthListItemIconPropertyClass:"fa-2x select-auth-box-icon-properties",kcSelectAuthListItemIconClass:"pf-l-split__item select-auth-box-icon",kcSelectAuthListItemTitle:"select-auth-box-paragraph",kcSelectAuthListItemInfoClass:"list-view-pf-main-info",kcSelectAuthListItemLeftClass:"list-view-pf-left",kcSelectAuthListItemBodyClass:"list-view-pf-body",kcSelectAuthListItemDescriptionClass:"list-view-pf-description",kcSelectAuthListItemHeadingClass:"list-group-item-heading",kcSelectAuthListItemHelpTextClass:"list-group-item-text",kcAuthenticatorDefaultClass:"fa list-view-pf-icon-lg",kcAuthenticatorPasswordClass:"fa fa-unlock list-view-pf-icon-lg",kcAuthenticatorOTPClass:"fa fa-mobile list-view-pf-icon-lg",kcAuthenticatorWebAuthnClass:"fa fa-key list-view-pf-icon-lg",kcAuthenticatorWebAuthnPasswordlessClass:"fa fa-key list-view-pf-icon-lg",kcSelectOTPListClass:"card-pf card-pf-view card-pf-view-select card-pf-view-single-select col-xs-12",kcSelectOTPListItemClass:"card-pf-body card-pf-top-element",kcAuthenticatorOtpCircleClass:"fa fa-mobile card-pf-icon-circle",kcSelectOTPItemHeadingClass:"card-pf-title text-center",kcFormOptionsWrapperClass:void 0}}).useGetClassName},"./dist/login/pages/LoginOauthGrant.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>LoginOauthGrant});__webpack_require__("./node_modules/core-js/modules/es.object.assign.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js"),__webpack_require__("./node_modules/core-js/modules/es.array.map.js");var react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__=__webpack_require__("./node_modules/react/jsx-runtime.js"),_tools_clsx__WEBPACK_IMPORTED_MODULE_4__=__webpack_require__("./dist/tools/clsx.js"),_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__=__webpack_require__("./dist/login/lib/useGetClassName.js");function LoginOauthGrant(props){var kcContext=props.kcContext,i18n=props.i18n,doUseDefaultCss=props.doUseDefaultCss,classes=props.classes,Template=props.Template,url=kcContext.url,oauth=kcContext.oauth,client=kcContext.client,msg=i18n.msg,msgStr=i18n.msgStr,advancedMsg=i18n.advancedMsg,advancedMsgStr=i18n.advancedMsgStr,getClassName=(0,_login_lib_useGetClassName__WEBPACK_IMPORTED_MODULE_5__.v)({doUseDefaultCss,classes}).getClassName;return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)(Template,Object.assign({},{kcContext,i18n,doUseDefaultCss,classes},{headerNode:msg("oauthGrantTitle",client.name?advancedMsgStr(client.name):client.clientId)},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({id:"kc-oauth",className:"content-area"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("h3",{children:msg("oauthGrantRequest")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("ul",{children:oauth.clientScopesRequested.map((function(clientScope){return(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("li",{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("span",{children:advancedMsg(clientScope.consentScreenText)})},clientScope.consentScreenText)}))}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("form",Object.assign({className:"form-actions",action:url.oauthAction,method:"POST"},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{type:"hidden",name:"code",value:oauth.code}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({className:getClassName("kcFormGroupClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",Object.assign({id:"kc-form-options"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:getClassName("kcFormOptionsWrapperClass")})})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",Object.assign({id:"kc-form-buttons"},{children:(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsxs)("div",Object.assign({className:getClassName("kcFormButtonsWrapperClass")},{children:[(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcButtonClass"),getClassName("kcButtonPrimaryClass"),getClassName("kcButtonLargeClass")),name:"accept",id:"kc-login",type:"submit",value:msgStr("doYes")}),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("input",{className:(0,_tools_clsx__WEBPACK_IMPORTED_MODULE_4__.W)(getClassName("kcButtonClass"),getClassName("kcButtonDefaultClass"),getClassName("kcButtonLargeClass")),name:"cancel",id:"kc-cancel",type:"submit",value:msgStr("doNo")})]}))}))]}))]})),(0,react_jsx_runtime__WEBPACK_IMPORTED_MODULE_3__.jsx)("div",{className:"clearfix"})]}))}))}},"./dist/tools/clsx.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.d(__webpack_exports__,{W:()=>clsx});__webpack_require__("./node_modules/core-js/modules/es.array.is-array.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.description.js"),__webpack_require__("./node_modules/core-js/modules/es.object.to-string.js"),__webpack_require__("./node_modules/core-js/modules/es.symbol.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.string.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.iterator.js"),__webpack_require__("./node_modules/core-js/modules/web.dom-collections.iterator.js"),__webpack_require__("./node_modules/core-js/modules/es.array.from.js"),__webpack_require__("./node_modules/core-js/modules/es.array.slice.js"),__webpack_require__("./node_modules/core-js/modules/es.function.name.js");var tsafe_assert__WEBPACK_IMPORTED_MODULE_11__=__webpack_require__("./node_modules/tsafe/esm/assert.mjs"),tsafe_typeGuard__WEBPACK_IMPORTED_MODULE_12__=__webpack_require__("./node_modules/tsafe/esm/typeGuard.mjs");function _toConsumableArray(arr){return function _arrayWithoutHoles(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function _iterableToArray(iter){if("undefined"!=typeof Symbol&&null!=iter[Symbol.iterator]||null!=iter["@@iterator"])return Array.from(iter)}(arr)||function _unsupportedIterableToArray(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function _nonIterableSpread(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i{function typeGuard(_value,isMatched){return isMatched}__webpack_require__.d(__webpack_exports__,{z:()=>typeGuard})}}]); \ No newline at end of file diff --git a/9749.4c5ddc9f.iframe.bundle.js b/9749.9ade338c.iframe.bundle.js similarity index 98% rename from 9749.4c5ddc9f.iframe.bundle.js rename to 9749.9ade338c.iframe.bundle.js index 3b0f49aa..e149ebb4 100644 --- a/9749.4c5ddc9f.iframe.bundle.js +++ b/9749.9ade338c.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9749],{"./dist/account/i18n/baseMessages/cs.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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 +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9749],{"./dist/account/i18n/baseMessages/cs.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={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.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/9782.8743a5c2.iframe.bundle.js b/9782.8743a5c2.iframe.bundle.js deleted file mode 100644 index 59efaf48..00000000 --- a/9782.8743a5c2.iframe.bundle.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9782],{"./dist/login/i18n/baseMessages/es.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Iniciar sesión",doRegister:"Regístrate",doCancel:"Cancelar",doSubmit:"Enviar",doYes:"Sí",doNo:"No",doContinue:"Continuar",doAccept:"Aceptar",doDecline:"Declinar",doForgotPassword:"¿Has olvidado tu contraseña?",doClickHere:"Haz clic aquí",doImpersonate:"Personificar",kerberosNotConfigured:"Kerberos no configurado",kerberosNotConfiguredTitle:"Kerberos no configurado",bypassKerberosDetail:"O bien no estás identificado mediante Kerberos o tu navegador no está configurado para identificarse mediante Kerberos. Por favor haz clic para identificarte por otro medio.",kerberosNotSetUp:"Kerberos no está configurado. No puedes identificarte.",registerWithTitle:"Regístrate con {0}",registerWithTitleHtml:"{0}",loginAccountTitle:"Acceder a tu cuenta",loginTitle:"Inicia sesión en {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Personificar Usuario",impersonateTitleHtml:"{0} Personificar Usuario",realmChoice:"Dominio",unknownUser:"Usuario desconocido",loginTotpTitle:"Configura tu aplicación de identificación móvil",loginProfileTitle:"Actualiza la información de tu cuenta",loginTimeout:"Has tardado demasiado en identificarte. Inicia de nuevo la identificación.",oauthGrantTitle:"Concesión OAuth",oauthGrantTitleHtml:"{0}",errorTitle:"Lo sentimos...",errorTitleHtml:"Lo sentimos...",emailVerifyTitle:"Verificación del email",emailForgotTitle:"¿Has olvidado tu contraseña?",updatePasswordTitle:"Modificación de contraseña",codeSuccessTitle:"Código de éxito",codeErrorTitle:"Código de error: {0}",termsTitle:"Términos y Condiciones",termsTitleHtml:"Términos y Condiciones",termsText:"

Términes y condiciones a definir

",recaptchaFailed:"Reconocimiento de texto inválido",recaptchaNotConfigured:"El reconocimiento de texto es obligatorio pero no está configurado",consentDenied:"Consentimiento rechazado.",noAccount:"¿Usuario nuevo?",username:"Usuario",usernameOrEmail:"Usuario o email",firstName:"Nombre",givenName:"Nombre de pila",fullName:"Nombre completo",lastName:"Apellidos",familyName:"Apellidos",email:"Email",password:"Contraseña",passwordConfirm:"Confirma la contraseña",passwordNew:"Nueva contraseña",passwordNewConfirm:"Confirma la nueva contraseña",rememberMe:"Seguir conectado",authenticatorCode:"Código de identificación",address:"Dirección",street:"Calle",locality:"Ciudad o Municipio",region:"Estado, Provincia, o Región",postal_code:"Código Postal",country:"País",emailVerified:"Email verificado",gssDelegationCredential:"GSS Delegation Credential",loginTotpStep1:'Instala FreeOTP o Google Authenticator en tu teléfono móvil. Ambas aplicaciones están disponibles en Google Play y en la App Store de Apple.',loginTotpStep2:"Abre la aplicación y escanea el código o introduce la clave.",loginTotpStep3:"Introduce el código único que te muestra la aplicación de autenticación y haz clic en Enviar para finalizar la configuración",loginOtpOneTime:"Código de un solo uso",oauthGrantRequest:"¿Quieres permitir estos privilegios de acceso?",inResource:"en",emailVerifyInstruction1:"Te hemos enviado un email con instrucciones para verificar tu email.",emailVerifyInstruction2:"¿No has recibido un código de verificación en tu email?",emailVerifyInstruction3:"para reenviar el email.",backToLogin:"« Volver a la identificación",emailInstruction:"Indica tu usuario o email y te enviaremos instrucciones indicando cómo generar una nueva contraseña.",copyCodeInstruction:"Por favor, copia y pega este código en tu aplicación:",personalInfo:"Información 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ón",client_account:"Cuenta","client_security-admin-console":"Consola de Administración de Seguridad","client_realm-management":"Gestión del dominio",client_broker:"Broker",invalidUserMessage:"Usuario o contraseña incorrectos.",invalidEmailMessage:"Email no válido",accountDisabledMessage:"La cuenta está desactivada, contacta con el administrador.",accountTemporarilyDisabledMessage:"La cuenta está temporalmente desactivada, contacta con el administrador o inténtalo de nuevo más tarde.",expiredCodeMessage:"Se agotó el tiempo máximo para la identificación. 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ña.",missingTotpMessage:"Por favor indica tu código de autenticación",notMatchPasswordMessage:"Las contraseñas no coinciden.",invalidPasswordExistingMessage:"La contraseña actual no es correcta.",invalidPasswordConfirmMessage:"La confirmación de contraseña no coincide.",invalidTotpMessage:"El código de autenticación no es válido.",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ón de tu cuenta para enlazarlo.",federatedIdentityUsernameExistsMessage:"Ya existe un usuario con este nombre de usuario. Por favor accede a la gestión de tu cuenta para enlazarlo.",configureTotpMessage:"Tienes que configurar la aplicación móvil de identificación para activar tu cuenta.",updateProfileMessage:"Tienes que actualizar tu perfil de usuario para activar tu cuenta.",updatePasswordMessage:"Tienes que cambiar tu contraseña para activar tu cuenta.",verifyEmailMessage:"Tienes que verificar tu email para activar tu cuenta.",emailSentMessage:"En breve deberías recibir un mensaje con más instrucciones",emailSendErrorMessage:"Falló el envío del email, por favor inténtalo de nuevo más tarde.",accountUpdatedMessage:"Tu cuenta se ha actualizado.",accountPasswordUpdatedMessage:"Tu contraseña se ha actualizado.",noAccessMessage:"Sin acceso",invalidPasswordMinLengthMessage:"Contraseña incorrecta: longitud mínima {0}.",invalidPasswordMinDigitsMessage:"Contraseña incorrecta: debe contaner al menos {0} caracteres numéricos.",invalidPasswordMinLowerCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras minúsculas.",invalidPasswordMinUpperCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras mayúsculas.",invalidPasswordMinSpecialCharsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",invalidPasswordNotUsernameMessage:"Contraseña incorrecta: no puede ser igual al nombre de usuario.",invalidPasswordRegexPatternMessage:"Contraseña incorrecta: no cumple la expresión regular.",invalidPasswordHistoryMessage:"Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas.",failedToProcessResponseMessage:"Fallo al procesar la respuesta",httpsRequiredMessage:"HTTPS obligatorio",realmNotEnabledMessage:"El dominio no está activado",invalidRequestMessage:"Petición incorrecta",failedLogout:"Falló la desconexión.",unknownLoginRequesterMessage:"Solicitante de identificación desconocido",loginRequesterNotEnabledMessage:"El solicitante de inicio de sesión está desactivado",bearerOnlyMessage:"Las aplicaciones Bearer-only no pueden iniciar sesión desde el navegador.",directGrantsOnlyMessage:"Los clientes de tipo Direct-grants-only no pueden iniciar sesión desde el navegador.",invalidRedirectUriMessage:"La URI de redirección no es correcta",unsupportedNameIdFormatMessage:"NameIDFormat no soportado",invalidRequesterMessage:"Solicitante no válido",registrationNotAllowedMessage:"El registro no está permitido",resetCredentialNotAllowedMessage:"El reinicio de las credenciales no está permitido",permissionNotApprovedMessage:"Permiso no aprobado.",noRelayStateInResponseMessage:"Sin estado de retransmisión en la respuesta del proveedor de identidad.",identityProviderAlreadyLinkedMessage:"La identidad devuelta por el proveedor de identidad ya está asociada a otro usuario.",insufficientPermissionMessage:"Permisos insuficientes para enlazar identidades.",couldNotProceedWithAuthenticationRequestMessage:"No se pudo continuar con la petición de autenticación al proveedor de identidad.",couldNotObtainTokenMessage:".No se pudo obtener el código 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ó la autenticación. No fue posible autenticarse en el proveedor de identidad.",couldNotSendAuthenticationRequestMessage:"No se pudo enviar la petición de identificación al proveedor de identidad.",unexpectedErrorHandlingRequestMessage:"Error inesperado durante la petición de identificación al proveedor de identidad.",invalidAccessCodeMessage:"Código de acceso no válido.",sessionNotActiveMessage:"La sesión no está activa",invalidCodeMessage:"Ha ocurrido un error, por favor identificate de nuevo desde tu aplicación.",identityProviderUnexpectedErrorMessage:"Error no esperado intentado autenticar en el proveedor de identidad.",identityProviderNotFoundMessage:"No se encontró un proveedor de identidad.",realmSupportsNoCredentialsMessage:"El dominio no soporta ningún tipo de credenciales.",identityProviderNotUniqueMessage:"El dominio soporta múltiples proveedores de identidad. No se pudo determinar el proveedor de identidad que debería ser utilizado para identificarse.",emailVerifiedMessage:"Tu email ha sido verificado.",backToApplication:"« Volver a la aplicación",missingParameterMessage:"Parámetros que faltan: {0}",clientNotFoundMessage:"Cliente no encontrado",invalidParameterMessage:"Parámetro no válido: {0}",alreadyLoggedIn:"You are already logged in."}}}]); \ No newline at end of file diff --git a/9782.af69b249.iframe.bundle.js b/9782.af69b249.iframe.bundle.js new file mode 100644 index 00000000..e05e25cf --- /dev/null +++ b/9782.af69b249.iframe.bundle.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[9782],{"./dist/login/i18n/baseMessages/es.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doLogIn:"Iniciar sesión",doRegister:"Regístrate",doCancel:"Cancelar",doSubmit:"Enviar",doYes:"Sí",doNo:"No",doContinue:"Continuar",doAccept:"Aceptar",doDecline:"Declinar",doForgotPassword:"¿Has olvidado tu contraseña?",doClickHere:"Haz clic aquí",doImpersonate:"Personificar",kerberosNotConfigured:"Kerberos no configurado",kerberosNotConfiguredTitle:"Kerberos no configurado",bypassKerberosDetail:"O bien no estás identificado mediante Kerberos o tu navegador no está configurado para identificarse mediante Kerberos. Por favor haz clic para identificarte por otro medio.",kerberosNotSetUp:"Kerberos no está configurado. No puedes identificarte.",registerWithTitle:"Regístrate con {0}",registerWithTitleHtml:"{0}",loginAccountTitle:"Acceder a tu cuenta",loginTitle:"Inicia sesión en {0}",loginTitleHtml:"{0}",impersonateTitle:"{0} Personificar Usuario",impersonateTitleHtml:"{0} Personificar Usuario",realmChoice:"Dominio",unknownUser:"Usuario desconocido",loginTotpTitle:"Configura tu aplicación de identificación móvil",loginProfileTitle:"Actualiza la información de tu cuenta",loginTimeout:"Has tardado demasiado en identificarte. Inicia de nuevo la identificación.",oauthGrantTitle:"Concesión OAuth",oauthGrantTitleHtml:"{0}",errorTitle:"Lo sentimos...",errorTitleHtml:"Lo sentimos...",emailVerifyTitle:"Verificación del email",emailForgotTitle:"¿Has olvidado tu contraseña?",updatePasswordTitle:"Modificación de contraseña",codeSuccessTitle:"Código de éxito",codeErrorTitle:"Código de error: {0}",termsTitle:"Términos y Condiciones",termsTitleHtml:"Términos y Condiciones",termsText:"

Términes y condiciones a definir

",recaptchaFailed:"Reconocimiento de texto inválido",recaptchaNotConfigured:"El reconocimiento de texto es obligatorio pero no está configurado",consentDenied:"Consentimiento rechazado.",noAccount:"¿Usuario nuevo?",username:"Usuario",usernameOrEmail:"Usuario o email",firstName:"Nombre",givenName:"Nombre de pila",fullName:"Nombre completo",lastName:"Apellidos",familyName:"Apellidos",email:"Email",password:"Contraseña",passwordConfirm:"Confirma la contraseña",passwordNew:"Nueva contraseña",passwordNewConfirm:"Confirma la nueva contraseña",rememberMe:"Seguir conectado",authenticatorCode:"Código de identificación",address:"Dirección",street:"Calle",locality:"Ciudad o Municipio",region:"Estado, Provincia, o Región",postal_code:"Código Postal",country:"País",emailVerified:"Email verificado",gssDelegationCredential:"GSS Delegation Credential",loginTotpIntro:"Es necesario configurar un generador de claves de un sólo uso para acceder a esta cuenta",loginTotpStep1:'Instala FreeOTP o Google Authenticator en tu teléfono móvil. Ambas aplicaciones están disponibles en Google Play y en la App Store de Apple.',loginTotpStep2:"Abre la aplicación y escanea el código o introduce la clave.",loginTotpStep3:"Introduce el código único que te muestra la aplicación de autenticación y haz clic en Enviar para finalizar la configuración",loginTotpStep3DeviceName:"Introduce un nombre de dispositivo para que te ayude a gestionar tus dispositivos OTP.",loginTotpManualStep2:"Abre la aplicación e introduce la clave:",loginTotpManualStep3:"Usa los siguientes parámetros de configuración si la aplicación te permite introducirlos:",loginTotpUnableToScan:"¿No consigues escanear?",loginTotpScanBarcode:"¿Escanear el código de barras?",loginCredential:"Credenciales",loginOtpOneTime:"Código de un solo uso",loginTotpType:"Tipo",loginTotpAlgorithm:"Algoritmo",loginTotpDigits:"Dígitos",loginTotpInterval:"Intervalo",loginTotpCounter:"Contador",loginTotpDeviceName:"Nombre del dispositivo",oauthGrantRequest:"¿Quieres permitir estos privilegios de acceso?",inResource:"en",emailVerifyInstruction1:"Te hemos enviado un email con instrucciones para verificar tu email.",emailVerifyInstruction2:"¿No has recibido un código de verificación en tu email?",emailVerifyInstruction3:"para reenviar el email.",backToLogin:"« Volver a la identificación",emailInstruction:"Indica tu usuario o email y te enviaremos instrucciones indicando cómo generar una nueva contraseña.",copyCodeInstruction:"Por favor, copia y pega este código en tu aplicación:",personalInfo:"Información 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ón",client_account:"Cuenta","client_security-admin-console":"Consola de Administración de Seguridad","client_realm-management":"Gestión del dominio",client_broker:"Broker",invalidUserMessage:"Usuario o contraseña incorrectos.",invalidEmailMessage:"Email no válido",accountDisabledMessage:"La cuenta está desactivada, contacta con el administrador.",accountTemporarilyDisabledMessage:"La cuenta está temporalmente desactivada, contacta con el administrador o inténtalo de nuevo más tarde.",expiredCodeMessage:"Se agotó el tiempo máximo para la identificación. Por favor identificate de nuevo.",expiredActionMessage:"Acción caducada. Continúe con el inicio de sesión ahora.",sessionLimitExceeded:"Hay demasiadas sesiones.",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ña.",missingTotpMessage:"Por favor indica tu código de autenticación",notMatchPasswordMessage:"Las contraseñas no coinciden.",invalidPasswordExistingMessage:"La contraseña actual no es correcta.",invalidPasswordBlacklistedMessage:"Contraseña no válida: la contraseña está en la lista negra.",invalidPasswordConfirmMessage:"La confirmación de contraseña no coincide.",invalidTotpMessage:"El código de autenticación no es válido.",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ón de tu cuenta para enlazarlo.",federatedIdentityUsernameExistsMessage:"Ya existe un usuario con este nombre de usuario. Por favor accede a la gestión de tu cuenta para enlazarlo.",federatedIdentityExistsMessage:"El usuario con {0} {1} ya existe. Inicie sesión en la administración de cuentas para vincular la cuenta.",federatedIdentityUnavailableMessage:"El usuario {0} autenticado con el proveedor de identidad {1} no existe. Póngase en contacto con su administrador.",configureTotpMessage:"Tienes que configurar la aplicación móvil de identificación para activar tu cuenta.",configureBackupCodesMessage:"Tienes que configurar códigos de respaldo para activar su cuenta.",updateProfileMessage:"Tienes que actualizar tu perfil de usuario para activar tu cuenta.",updatePasswordMessage:"Tienes que cambiar tu contraseña para activar tu cuenta.",updateEmailMessage:"Tienes que actualizar su dirección de correo electrónico para activar su cuenta.",resetPasswordMessage:"Tienes que cambiar tu contraseña.",verifyEmailMessage:"Tienes que verificar tu email para activar tu cuenta.",linkIdpMessage:"Debe verificar su dirección de correo electrónico para vincular su cuenta con {0}.",emailSentMessage:"En breve deberías recibir un mensaje con más instrucciones",emailSendErrorMessage:"Falló el envío del email, por favor inténtalo de nuevo más tarde.",accountUpdatedMessage:"Tu cuenta se ha actualizado.",accountPasswordUpdatedMessage:"Tu contraseña se ha actualizado.",noAccessMessage:"Sin acceso",invalidPasswordMinLengthMessage:"Contraseña incorrecta: longitud mínima {0}.",invalidPasswordMinDigitsMessage:"Contraseña incorrecta: debe contaner al menos {0} caracteres numéricos.",invalidPasswordMinLowerCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras minúsculas.",invalidPasswordMinUpperCaseCharsMessage:"Contraseña incorrecta: debe contener al menos {0} letras mayúsculas.",invalidPasswordMinSpecialCharsMessage:"Contraseña incorrecta: debe contener al menos {0} caracteres especiales.",invalidPasswordNotUsernameMessage:"Contraseña incorrecta: no puede ser igual al nombre de usuario.",invalidPasswordRegexPatternMessage:"Contraseña incorrecta: no cumple la expresión regular.",invalidPasswordHistoryMessage:"Contraseña incorrecta: no puede ser igual a ninguna de las últimas {0} contraseñas.",failedToProcessResponseMessage:"Fallo al procesar la respuesta",httpsRequiredMessage:"HTTPS obligatorio",realmNotEnabledMessage:"El dominio no está activado",invalidRequestMessage:"Petición incorrecta",failedLogout:"Falló la desconexión.",unknownLoginRequesterMessage:"Solicitante de identificación desconocido",loginRequesterNotEnabledMessage:"El solicitante de inicio de sesión está desactivado",bearerOnlyMessage:"Las aplicaciones Bearer-only no pueden iniciar sesión desde el navegador.",directGrantsOnlyMessage:"Los clientes de tipo Direct-grants-only no pueden iniciar sesión desde el navegador.",invalidRedirectUriMessage:"La URI de redirección no es correcta",unsupportedNameIdFormatMessage:"NameIDFormat no soportado",invalidRequesterMessage:"Solicitante no válido",registrationNotAllowedMessage:"El registro no está permitido",resetCredentialNotAllowedMessage:"El reinicio de las credenciales no está permitido",permissionNotApprovedMessage:"Permiso no aprobado.",noRelayStateInResponseMessage:"Sin estado de retransmisión en la respuesta del proveedor de identidad.",identityProviderAlreadyLinkedMessage:"La identidad devuelta por el proveedor de identidad ya está asociada a otro usuario.",insufficientPermissionMessage:"Permisos insuficientes para enlazar identidades.",couldNotProceedWithAuthenticationRequestMessage:"No se pudo continuar con la petición de autenticación al proveedor de identidad.",couldNotObtainTokenMessage:".No se pudo obtener el código 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ó la autenticación. No fue posible autenticarse en el proveedor de identidad.",couldNotSendAuthenticationRequestMessage:"No se pudo enviar la petición de identificación al proveedor de identidad.",unexpectedErrorHandlingRequestMessage:"Error inesperado durante la petición de identificación al proveedor de identidad.",invalidAccessCodeMessage:"Código de acceso no válido.",sessionNotActiveMessage:"La sesión no está activa",invalidCodeMessage:"Ha ocurrido un error, por favor identificate de nuevo desde tu aplicación.",identityProviderUnexpectedErrorMessage:"Error no esperado intentado autenticar en el proveedor de identidad.",identityProviderNotFoundMessage:"No se encontró un proveedor de identidad.",realmSupportsNoCredentialsMessage:"El dominio no soporta ningún tipo de credenciales.",identityProviderNotUniqueMessage:"El dominio soporta múltiples proveedores de identidad. No se pudo determinar el proveedor de identidad que debería ser utilizado para identificarse.",emailVerifiedMessage:"Tu email ha sido verificado.",staleEmailVerificationLink:"El enlace en el que hizo clic es un enlace obsoleto antiguo y ya no es válido. Tal vez ya hayas verificado tu correo electrónico.",identityProviderInvalidResponseMessage:"Respuesta no válida del proveedor de identidad.",confirmAccountLinking:"Confirme la vinculación de la cuenta {0} del proveedor de identidad {1} con su cuenta.",identityProviderMissingStateMessage:"Falta el parámetro de estado en respuesta del proveedor de identidad.",confirmEmailAddressVerification:"Confirme la validez de la dirección de correo electrónico {0}.",confirmExecutionOfActions:"Realice las siguientes acciones",backToApplication:"« Volver a la aplicación",missingParameterMessage:"Parámetros que faltan: {0}",clientNotFoundMessage:"Cliente no encontrado",invalidParameterMessage:"Parámetro no válido: {0}",alreadyLoggedIn:"Ya se ha autentificado.",proceedWithAction:"» Haz click aquí para proceder","requiredAction.CONFIGURE_TOTP":"Configurar OTP","requiredAction.TERMS_AND_CONDITIONS":"Términos y condiciones","requiredAction.UPDATE_PASSWORD":"Actualización de contraseña","requiredAction.UPDATE_PROFILE":"Actualización del perfil","requiredAction.VERIFY_EMAIL":"Verificar correo electrónico","requiredAction.CONFIGURE_RECOVERY_AUTHN_CODES":"Generar códigos de recuperación","requiredAction.webauthn-register-passwordless":"Webauthn Registro sin contraseña",pageNotFound:"Página no encontrada",internalServerError:"Se ha producido un error interno del servidor.","identity-provider-redirector":"Inicie sesión con otro proveedor de identidad","identity-provider-login-label":"O inicie sesión con","idp-email-verification-display-name":"Verificacion de email","idp-email-verification-help-text":"Vincule su cuenta validando su correo electrónico.","idp-username-password-form-display-name":"Usuario y contraseña","idp-username-password-form-help-text":"Vincule su cuenta iniciando sesión.","access-denied":"Acceso denegado",logoutConfirmTitle:"Cerrando sesión",logoutConfirmHeader:"¿Quieres cerrar sesión?",doLogout:"Cerrar sesión"}}}]); \ No newline at end of file diff --git a/980.f1b0837f.iframe.bundle.js b/980.d25a9db7.iframe.bundle.js similarity index 99% rename from 980.f1b0837f.iframe.bundle.js rename to 980.d25a9db7.iframe.bundle.js index 2aec33ee..88ade103 100644 --- a/980.f1b0837f.iframe.bundle.js +++ b/980.d25a9db7.iframe.bundle.js @@ -1 +1 @@ -"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[980],{"./dist/account/i18n/baseMessages/nl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Opslaan",doCancel:"Annuleer",doLogOutAllSessions:"Alle sessies uitloggen",doRemove:"Verwijder",doAdd:"Voeg toe",doSignOut:"Afmelden",doLogIn:"Inloggen",doLink:"Link",noAccessMessage:"Geen toegang",personalInfoSidebarTitle:"Persoonsgegevens",accountSecuritySidebarTitle:"Account beveiliging",signingInSidebarTitle:"Inloggen",deviceActivitySidebarTitle:"Apparaat activiteit",linkedAccountsSidebarTitle:"Gelinkte accounts",editAccountHtmlTitle:"Bewerk account",federatedIdentitiesHtmlTitle:"Federated Identities",accountLogHtmlTitle:"Account log",changePasswordHtmlTitle:"Verander wachtwoord",sessionsHtmlTitle:"Sessies",accountManagementTitle:"Keycloak Accountbeheer",authenticatorTitle:"Authenticator",applicationsHtmlTitle:"Toepassingen",accountManagementWelcomeMessage:"Welkom bij Keycloak Account Management",personalInfoIntroMessage:"Beheer uw basisgegevens",accountSecurityTitle:"Account Beveiliging",accountSecurityIntroMessage:"Beheer uw wachtwoord en account toegang",applicationsIntroMessage:"Volg en beheer uw app-toestemming voor toegang tot uw account",resourceIntroMessage:"Deel uw bronnen met uw team",passwordLastUpdateMessage:"Uw wachtwoord was veranderd op",updatePasswordTitle:"Wachtwoord Bijwerken",updatePasswordMessageTitle:"Zorg ervoor dat u een sterk wachtwoord kiest",updatePasswordMessage:"Een sterk wachtwoord bevat een mix van nummers, letters, en symbolen. Het is moeilijk te gokken, lijkt niet op een echt woord, en wordt alleen gebruikt voor dit account.",personalSubTitle:"Uw persoonlijke informatie",personalSubMessage:"Beheer uw basisgegevens.",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",website:"Website",phoneNumber:"Telefoonnummer",phoneNumberVerified:"Geverifieerd telefoonnummer",gender:"Geslacht",birthday:"Geboortedatum",zoneinfo:"Tijdzone",gssDelegationCredential:"GSS gedelegeerde aanmeldgegevens",profileScopeConsentText:"Gebruiker profiel",emailScopeConsentText:"E-mailadres",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefoonnummer",offlineAccessScopeConsentText:"Offline Toegang",samlRoleListScopeConsentText:"Mijn Rollen",rolesScopeConsentText:"Gebruikersrollen",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-groups":"Bekijk groepen","role_view-clients":"Bekijk clients","role_view-events":"Bekijk gebeurtenissen","role_view-identity-providers":"Bekijk identity providers","role_view-consent":"Bekijk toestemmingen","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_manage-consent":"Beheer toestemmingen","role_read-token":"Lees token","role_offline-access":"Offline toegang",role_uma_authorization:"Verkrijg UMA rechten",client_account:"Account","client_account-console":"Account Console","client_security-admin-console":"Console Veiligheidsbeheer","client_admin-cli":"Beheer CLI","client_realm-management":"Realmbeheer",client_broker:"Broker",requiredFields:"Verplichte velden",allFieldsRequired:"Alle velden verplicht",backToApplication:"« Terug naar Applicatie",backTo:"Terug naar {0}",date:"Datum",event:"Gebeurtenis",ip:"IP",client:"Client",clients:"Clients",details:"Details",started:"Gestart",lastAccess:"Laatste toegang",expires:"Vervalt",applications:"Applicaties",account:"Account",federatedIdentity:"Federated Identity",authenticator:"Authenticator",sessions:"Sessies",log:"Log",application:"Applicatie",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.",totpStep3DeviceName:"Geef een apparaatnaam op om uw OTP-apparaten te identificeren.",totpManualStep2:"Open de applicatie en voer de sleutel in:",totpManualStep3:"Gebruik de volgende configuratie waardes als de applicatie ze ondersteund:",totpUnableToScan:"Kunt u niet scannen?",totpScanBarcode:"Scan de barcode?","totp.totp":"Tijdgebaseerd","totp.hotp":"Tellergebaseerd",totpType:"Type",totpAlgorithm:"Algoritme",totpDigits:"Cijfers",totpInterval:"Interval",totpCounter:"Teller",totpDeviceName:"Apparaatnaam",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",irreversibleAction:"Deze actie is onomkeerbaar",deletingImplies:"Het verwijderen van uw account houdt het volgende in:",errasingData:"Al uw gegevens wissen",loggingOutImmediately:"Meteen uitloggen",accountUnusable:"Dit account kan niet meer gebruikt worden voor gebruik in de applicatie",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.",invalidUserMessage:"Ongeldige gebruiker",updateReadOnlyAttributesRejectedMessage:"Update van alleen-lezen kenmerk afgewezen",missingTotpMessage:"Authenticatiecode ontbreekt.",missingTotpDeviceNameMessage:"Geef een apparaatnaam op.",invalidPasswordExistingMessage:"Ongeldig bestaand wachtwoord.",invalidPasswordConfirmMessage:"Wachtwoordbevestiging komt niet overeen.",invalidTotpMessage:"Ongeldige authenticatiecode.",usernameExistsMessage:"Gebruikersnaam bestaat reeds.",emailExistsMessage:"E-mailadres bestaat reeds.",readOnlyUserMessage:"U kunt uw account niet bijwerken aangezien het account alleen-lezen is.",readOnlyUsernameMessage:"U kunt uw gebruikersnaam niet wijzigen omdat uw 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.",myResources:"Mijn Bronnen",myResourcesSub:"Mijn bronnen",doDeny:"Afwijzen",doRevoke:"Intrekken",doApprove:"Goedkeuren",doRemoveSharing:"Niet meer delen",doRemoveRequest:"Aanvraag verwijderen",peopleAccessResource:"Personen met toegang tot deze bron",resourceManagedPolicies:"Rechten die toegang verlenen tot deze bron",resourceNoPermissionsGrantingAccess:"Er zijn geen rechten verleend die toegang verlenen tot deze bron",anyAction:"Elke actie",description:"Beschrijving",name:"Naam",scopes:"Bereik",resource:"Bron",user:"Gebruiker",peopleSharingThisResource:"Personen die deze bron delen",shareWithOthers:"Met anderen delen",needMyApproval:"Heeft mijn goedkeuring nodig",requestsWaitingApproval:"Uw aanvragen wachten op goedkeuring",icon:"Icon",requestor:"Aanvrager",owner:"Eigenaar",resourcesSharedWithMe:"Bronnen die met mij gedeeld zijn",permissionRequestion:"Toestemmingsverzoek",permission:"Toestemming",shares:"aandelen",notBeingShared:"Deze bron wordt niet gedeeld.",notHaveAnyResource:"U heeft geen bronnen",noResourcesSharedWithYou:"Er zijn geen bronnen met u gedeeld",havePermissionRequestsWaitingForApproval:"U heeft {0} toestemmingsverzoeken die wachten op goedkeuring.",clickHereForDetails:"Klik hier voor details.",resourceIsNotBeingShared:"Deze bron wordt niet gedeeld",applicationName:"Applicatienaam",applicationType:"Applicatietype",applicationInUse:"Alleen apps die in gebruik zijn",clearAllFilter:"Alle filters leegmaken",activeFilters:"Actieve filters",filterByName:"Filter op Naam ...",allApps:"Alle applicaties",internalApps:"Interne applicaties",thirdpartyApps:"Derde partij applicaties",appResults:"Resultaten",clientNotFoundMessage:"Client niet gevonden.",authorizedProvider:"Geautoriseerde Provider",authorizedProviderMessage:"Geautoriseerde providers gekoppeld aan uw account",identityProvider:"Identiteitsprovider",identityProviderMessage:"Om uw account te koppelen aan de identiteitsproviders die u heeft ingesteld",socialLogin:"Social Login",userDefined:"Gebruiker gedefinieerde",removeAccess:"Toegang intrekken",removeAccessMessage:"U moet opnieuw toegang verlenen als u dit app-account wilt gebruiken.",authenticatorStatusMessage:"Tweefactorauthenticatie is momenteel",authenticatorFinishSetUpTitle:"Uw tweefactorauthenticatie",authenticatorFinishSetUpMessage:"Elke keer wanneer u zich aanmeldt bij uw Keycloak-account, wordt u gevraagd om een tweefactorauthenticatiecode op te geven.",authenticatorSubTitle:"Stel tweefactorauthenticatie in",authenticatorSubMessage:"Schakel ten minste één van de beschikbare methoden voor tweefactorauthenticatie in om de beveiliging van uw account te verbeteren.",authenticatorMobileTitle:"Mobiele authenticator",authenticatorMobileMessage:"Gebruik mobiele authenticator om verificatiecodes te krijgen als tweefactorauthenticatie.",authenticatorMobileFinishSetUpMessage:"De authenticator is verbonden aan uw telefoon.",authenticatorActionSetup:"Instellen",authenticatorSMSTitle:"SMS Code",authenticatorSMSMessage:"Keycloak stuurt de verificatiecode naar uw telefoon als tweefactorauthenticatie.",authenticatorSMSFinishSetUpMessage:"Tekstberichten worden verstuurd naar",authenticatorDefaultStatus:"Standaard",authenticatorChangePhone:"Telefoonnummer wijzigen",authenticatorMobileSetupTitle:"Mobiele authenticator instellen",smscodeIntroMessage:"Voer uw telefoonnummer in en er wordt een verificatiecode naar uw telefoon verzonden.",mobileSetupStep1:"Installeer een authenticator-app op uw telefoon. De hier vermelde apps worden ondersteund.",mobileSetupStep2:"Open de applicatie en scan de barcode:",mobileSetupStep3:"Voer de eenmalige code in die door de app wordt verstrekt en klik op Opslaan om de installatie te voltooien.",scanBarCode:"Wilt u de barcode scannen?",enterBarCode:"Vul de eenmalige code in",doCopy:"Kopiëren",doFinish:"Afronden",authenticatorSMSCodeSetupTitle:"SMS Code instellen",chooseYourCountry:"Kies uw land",enterYourPhoneNumber:"Voer uw telefoonnummer in",sendVerficationCode:"Verificatiecode versturen",enterYourVerficationCode:"Voer uw verificatiecode in",authenticatorBackupCodesSetupTitle:"Herstelverificatiecodes instellen",realmName:"Realm",doDownload:"Downloaden",doPrint:"Printen",generateNewBackupCodes:"Genereer nieuwe herstelverificatiecodes",backtoAuthenticatorPage:"Terug naar de Authenticator pagina",resources:"Bronnen",sharedwithMe:"Met mij gedeeld",share:"Deel",sharedwith:"Gedeeld met",accessPermissions:"Toegangsrechten",permissionRequests:"Toestemmingsverzoeken",approve:"Goedkeuren",approveAll:"Alles goedkeuren",people:"personen",perPage:"per pagina",currentPage:"Huidige pagina",sharetheResource:"Deel de bron",group:"Groep",selectPermission:"Selecteer toestemming",addPeople:"Voeg personen toe om uw bron mee te delen",addTeam:"Voeg een team toe om uw bron mee te delen",myPermissions:"Mijn toestemmingen",waitingforApproval:"Wacht op goedkeuring",anyPermission:"Alle toestemmingen","openshift.scope.user_info":"Gebruikersinformatie","openshift.scope.user_check-access":"Gebruikerstoegangsinformatie","openshift.scope.user_full":"Volledige toegang","openshift.scope.list-projects":"Lijst van projecten","error-invalid-value":"Ongeldige waarde.","error-invalid-blank":"Geef een waarde op.","error-empty":"Geef een waarde op.","error-invalid-length":"Attribuut {0} moet een lengte tussen {1} en {2} hebben.","error-invalid-length-too-short":"Attribuut {0} moet minimaal {1} lang zijn.","error-invalid-length-too-long":"Attribute {0} mag niet langer dan {2} zijn.","error-invalid-email":"Ongeldig e-mailadres.","error-invalid-number":"Ongeldig nummer.","error-number-out-of-range":"Attribuut {0} moet een nummer tussen {1} en {2} zijn.","error-number-out-of-range-too-small":"Attribuut {0} moet minimaal een waarde van {1} hebben.","error-number-out-of-range-too-big":"Attribuut {0} mag maximaal een waarde van {2} hebben.","error-pattern-no-match":"Ongeldige waarde.","error-invalid-uri":"Ongeldige URL.","error-invalid-uri-scheme":"Ongeldig URL schema.","error-invalid-uri-fragment":"Ongeldig URL fragment.","error-user-attribute-required":"Specificeer attribuut {0}.","error-invalid-date":"Ongeldige datum.","error-user-attribute-read-only":"Het veld {0} staat op alleen-lezen.","error-username-invalid-character":"Gebruikersnaam bevat een ongeldig karakter.","error-person-name-invalid-character":"Naam bevat een ongeldig karakter."}}}]); \ No newline at end of file +"use strict";(self.webpackChunkkeycloakify=self.webpackChunkkeycloakify||[]).push([[980],{"./dist/account/i18n/baseMessages/nl.js":(__unused_webpack_module,__webpack_exports__,__webpack_require__)=>{__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{default:()=>__WEBPACK_DEFAULT_EXPORT__});const __WEBPACK_DEFAULT_EXPORT__={doSave:"Opslaan",doCancel:"Annuleer",doLogOutAllSessions:"Alle sessies uitloggen",doRemove:"Verwijder",doAdd:"Voeg toe",doSignOut:"Afmelden",doLogIn:"Inloggen",doLink:"Link",noAccessMessage:"Geen toegang",personalInfoSidebarTitle:"Persoonsgegevens",accountSecuritySidebarTitle:"Account beveiliging",signingInSidebarTitle:"Inloggen",deviceActivitySidebarTitle:"Apparaat activiteit",linkedAccountsSidebarTitle:"Gelinkte accounts",editAccountHtmlTitle:"Bewerk account",federatedIdentitiesHtmlTitle:"Federated Identities",accountLogHtmlTitle:"Account log",changePasswordHtmlTitle:"Verander wachtwoord",sessionsHtmlTitle:"Sessies",accountManagementTitle:"Keycloak Accountbeheer",authenticatorTitle:"Authenticator",applicationsHtmlTitle:"Toepassingen",accountManagementWelcomeMessage:"Welkom bij Keycloak Account Management",personalInfoIntroMessage:"Beheer uw basisgegevens",accountSecurityTitle:"Account Beveiliging",accountSecurityIntroMessage:"Beheer uw wachtwoord en account toegang",applicationsIntroMessage:"Volg en beheer uw app-toestemming voor toegang tot uw account",resourceIntroMessage:"Deel uw bronnen met uw team",passwordLastUpdateMessage:"Uw wachtwoord was veranderd op",updatePasswordTitle:"Wachtwoord Bijwerken",updatePasswordMessageTitle:"Zorg ervoor dat u een sterk wachtwoord kiest",updatePasswordMessage:"Een sterk wachtwoord bevat een mix van nummers, letters, en symbolen. Het is moeilijk te gokken, lijkt niet op een echt woord, en wordt alleen gebruikt voor dit account.",personalSubTitle:"Uw persoonlijke informatie",personalSubMessage:"Beheer uw basisgegevens.",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",website:"Website",phoneNumber:"Telefoonnummer",phoneNumberVerified:"Geverifieerd telefoonnummer",gender:"Geslacht",birthday:"Geboortedatum",zoneinfo:"Tijdzone",gssDelegationCredential:"GSS gedelegeerde aanmeldgegevens",profileScopeConsentText:"Gebruiker profiel",emailScopeConsentText:"E-mailadres",addressScopeConsentText:"Adres",phoneScopeConsentText:"Telefoonnummer",offlineAccessScopeConsentText:"Offline Toegang",samlRoleListScopeConsentText:"Mijn Rollen",rolesScopeConsentText:"Gebruikersrollen",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-groups":"Bekijk groepen","role_view-clients":"Bekijk clients","role_view-events":"Bekijk gebeurtenissen","role_view-identity-providers":"Bekijk identity providers","role_view-consent":"Bekijk toestemmingen","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_manage-consent":"Beheer toestemmingen","role_read-token":"Lees token","role_offline-access":"Offline toegang",role_uma_authorization:"Verkrijg UMA rechten",client_account:"Account","client_account-console":"Account Console","client_security-admin-console":"Console Veiligheidsbeheer","client_admin-cli":"Beheer CLI","client_realm-management":"Realmbeheer",client_broker:"Broker",requiredFields:"Verplichte velden",allFieldsRequired:"Alle velden verplicht",backToApplication:"« Terug naar Applicatie",backTo:"Terug naar {0}",date:"Datum",event:"Gebeurtenis",ip:"IP",client:"Client",clients:"Clients",details:"Details",started:"Gestart",lastAccess:"Laatste toegang",expires:"Vervalt",applications:"Applicaties",account:"Account",federatedIdentity:"Federated Identity",authenticator:"Authenticator",sessions:"Sessies",log:"Log",application:"Applicatie",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.",totpStep3DeviceName:"Geef een apparaatnaam op om uw OTP-apparaten te identificeren.",totpManualStep2:"Open de applicatie en voer de sleutel in:",totpManualStep3:"Gebruik de volgende configuratie waardes als de applicatie ze ondersteund:",totpUnableToScan:"Kunt u niet scannen?",totpScanBarcode:"Scan de barcode?","totp.totp":"Tijdgebaseerd","totp.hotp":"Tellergebaseerd",totpType:"Type",totpAlgorithm:"Algoritme",totpDigits:"Cijfers",totpInterval:"Interval",totpCounter:"Teller",totpDeviceName:"Apparaatnaam",totpAppFreeOTPName:"FreeOTP",totpAppGoogleName:"Google Authenticator",irreversibleAction:"Deze actie is onomkeerbaar",deletingImplies:"Het verwijderen van uw account houdt het volgende in:",errasingData:"Al uw gegevens wissen",loggingOutImmediately:"Meteen uitloggen",accountUnusable:"Dit account kan niet meer gebruikt worden voor gebruik in de applicatie",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.",invalidUserMessage:"Ongeldige gebruiker",updateReadOnlyAttributesRejectedMessage:"Update van alleen-lezen kenmerk afgewezen",missingTotpMessage:"Authenticatiecode ontbreekt.",missingTotpDeviceNameMessage:"Geef een apparaatnaam op.",invalidPasswordExistingMessage:"Ongeldig bestaand wachtwoord.",invalidPasswordConfirmMessage:"Wachtwoordbevestiging komt niet overeen.",invalidTotpMessage:"Ongeldige authenticatiecode.",usernameExistsMessage:"Gebruikersnaam bestaat reeds.",emailExistsMessage:"E-mailadres bestaat reeds.",readOnlyUserMessage:"U kunt uw account niet bijwerken aangezien het account alleen-lezen is.",readOnlyUsernameMessage:"U kunt uw gebruikersnaam niet wijzigen omdat uw 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.",myResources:"Mijn Bronnen",myResourcesSub:"Mijn bronnen",doDeny:"Afwijzen",doRevoke:"Intrekken",doApprove:"Goedkeuren",doRemoveSharing:"Niet meer delen",doRemoveRequest:"Aanvraag verwijderen",peopleAccessResource:"Personen met toegang tot deze bron",resourceManagedPolicies:"Rechten die toegang verlenen tot deze bron",resourceNoPermissionsGrantingAccess:"Er zijn geen rechten verleend die toegang verlenen tot deze bron",anyAction:"Elke actie",description:"Beschrijving",name:"Naam",scopes:"Bereik",resource:"Bron",user:"Gebruiker",peopleSharingThisResource:"Personen die deze bron delen",shareWithOthers:"Met anderen delen",needMyApproval:"Heeft mijn goedkeuring nodig",requestsWaitingApproval:"Uw aanvragen wachten op goedkeuring",icon:"Icon",requestor:"Aanvrager",owner:"Eigenaar",resourcesSharedWithMe:"Bronnen die met mij gedeeld zijn",permissionRequestion:"Toestemmingsverzoek",permission:"Toestemming",shares:"aandelen",notBeingShared:"Deze bron wordt niet gedeeld.",notHaveAnyResource:"U heeft geen bronnen",noResourcesSharedWithYou:"Er zijn geen bronnen met u gedeeld",havePermissionRequestsWaitingForApproval:"U heeft {0} toestemmingsverzoeken die wachten op goedkeuring.",clickHereForDetails:"Klik hier voor details.",resourceIsNotBeingShared:"Deze bron wordt niet gedeeld",applicationName:"Applicatienaam",applicationType:"Applicatietype",applicationInUse:"Alleen apps die in gebruik zijn",clearAllFilter:"Alle filters leegmaken",activeFilters:"Actieve filters",filterByName:"Filter op Naam ...",allApps:"Alle applicaties",internalApps:"Interne applicaties",thirdpartyApps:"Derde partij applicaties",appResults:"Resultaten",clientNotFoundMessage:"Client niet gevonden.",authorizedProvider:"Geautoriseerde Provider",authorizedProviderMessage:"Geautoriseerde providers gekoppeld aan uw account",identityProvider:"Identiteitsprovider",identityProviderMessage:"Om uw account te koppelen aan de identiteitsproviders die u heeft ingesteld",socialLogin:"Social Login",userDefined:"Gebruiker gedefinieerde",removeAccess:"Toegang intrekken",removeAccessMessage:"U moet opnieuw toegang verlenen als u dit app-account wilt gebruiken.",authenticatorStatusMessage:"Tweefactorauthenticatie is momenteel",authenticatorFinishSetUpTitle:"Uw tweefactorauthenticatie",authenticatorFinishSetUpMessage:"Elke keer wanneer u zich aanmeldt bij uw Keycloak-account, wordt u gevraagd om een tweefactorauthenticatiecode op te geven.",authenticatorSubTitle:"Stel tweefactorauthenticatie in",authenticatorSubMessage:"Schakel ten minste één van de beschikbare methoden voor tweefactorauthenticatie in om de beveiliging van uw account te verbeteren.",authenticatorMobileTitle:"Mobiele authenticator",authenticatorMobileMessage:"Gebruik mobiele authenticator om verificatiecodes te krijgen als tweefactorauthenticatie.",authenticatorMobileFinishSetUpMessage:"De authenticator is verbonden aan uw telefoon.",authenticatorActionSetup:"Instellen",authenticatorSMSTitle:"SMS Code",authenticatorSMSMessage:"Keycloak stuurt de verificatiecode naar uw telefoon als tweefactorauthenticatie.",authenticatorSMSFinishSetUpMessage:"Tekstberichten worden verstuurd naar",authenticatorDefaultStatus:"Standaard",authenticatorChangePhone:"Telefoonnummer wijzigen",authenticatorMobileSetupTitle:"Mobiele authenticator instellen",smscodeIntroMessage:"Voer uw telefoonnummer in en er wordt een verificatiecode naar uw telefoon verzonden.",mobileSetupStep1:"Installeer een authenticator-app op uw telefoon. De hier vermelde apps worden ondersteund.",mobileSetupStep2:"Open de applicatie en scan de barcode:",mobileSetupStep3:"Voer de eenmalige code in die door de app wordt verstrekt en klik op Opslaan om de installatie te voltooien.",scanBarCode:"Wilt u de barcode scannen?",enterBarCode:"Vul de eenmalige code in",doCopy:"Kopiëren",doFinish:"Afronden",authenticatorSMSCodeSetupTitle:"SMS Code instellen",chooseYourCountry:"Kies uw land",enterYourPhoneNumber:"Voer uw telefoonnummer in",sendVerficationCode:"Verificatiecode versturen",enterYourVerficationCode:"Voer uw verificatiecode in",authenticatorBackupCodesSetupTitle:"Herstelverificatiecodes instellen",realmName:"Realm",doDownload:"Downloaden",doPrint:"Printen",generateNewBackupCodes:"Genereer nieuwe herstelverificatiecodes",backtoAuthenticatorPage:"Terug naar de Authenticator pagina",resources:"Bronnen",sharedwithMe:"Met mij gedeeld",share:"Deel",sharedwith:"Gedeeld met",accessPermissions:"Toegangsrechten",permissionRequests:"Toestemmingsverzoeken",approve:"Goedkeuren",approveAll:"Alles goedkeuren",people:"personen",perPage:"per pagina",currentPage:"Huidige pagina",sharetheResource:"Deel de bron",group:"Groep",selectPermission:"Selecteer toestemming",addPeople:"Voeg personen toe om uw bron mee te delen",addTeam:"Voeg een team toe om uw bron mee te delen",myPermissions:"Mijn toestemmingen",waitingforApproval:"Wacht op goedkeuring",anyPermission:"Alle toestemmingen","openshift.scope.user_info":"Gebruikersinformatie","openshift.scope.user_check-access":"Gebruikerstoegangsinformatie","openshift.scope.user_full":"Volledige toegang","openshift.scope.list-projects":"Lijst van projecten","error-invalid-value":"Ongeldige waarde.","error-invalid-blank":"Geef een waarde op.","error-empty":"Geef een waarde op.","error-invalid-length":"Attribuut {0} moet een lengte tussen {1} en {2} hebben.","error-invalid-length-too-short":"Attribuut {0} moet minimaal {1} lang zijn.","error-invalid-length-too-long":"Attribute {0} mag niet langer dan {2} zijn.","error-invalid-email":"Ongeldig e-mailadres.","error-invalid-number":"Ongeldig nummer.","error-number-out-of-range":"Attribuut {0} moet een nummer tussen {1} en {2} zijn.","error-number-out-of-range-too-small":"Attribuut {0} moet minimaal een waarde van {1} hebben.","error-number-out-of-range-too-big":"Attribuut {0} mag maximaal een waarde van {2} hebben.","error-pattern-no-match":"Ongeldige waarde.","error-invalid-uri":"Ongeldige URL.","error-invalid-uri-scheme":"Ongeldig URL schema.","error-invalid-uri-fragment":"Ongeldig URL fragment.","error-user-attribute-required":"Specificeer attribuut {0}.","error-invalid-date":"Ongeldige datum.","error-user-attribute-read-only":"Het veld {0} staat op alleen-lezen.","error-username-invalid-character":"Gebruikersnaam bevat een ongeldig karakter.","error-person-name-invalid-character":"Naam bevat een ongeldig karakter.",locale_fa:"فارسی"}}}]); \ No newline at end of file diff --git a/iframe.html b/iframe.html index 2b9cca91..027a1667 100644 --- a/iframe.html +++ b/iframe.html @@ -361,4 +361,4 @@ - window['STORIES'] = [{"titlePrefix":"","directory":"./stories","files":"**/*.stories.@(ts|tsx|mdx)","importPathMatcher":"^\\.[\\\\/](?:stories(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(ts|tsx|mdx))$"}]; \ No newline at end of file + window['STORIES'] = [{"titlePrefix":"","directory":"./stories","files":"**/*.stories.@(ts|tsx|mdx)","importPathMatcher":"^\\.[\\\\/](?:stories(?:\\/(?!\\.)(?:(?:(?!(?:^|\\/)\\.).)*?)\\/|\\/|$)(?!\\.)(?=.)[^/]*?\\.stories\\.(ts|tsx|mdx))$"}]; \ No newline at end of file diff --git a/keycloak-resources/resources/css/account.css b/keycloak-resources/account/resources/css/account.css similarity index 99% rename from keycloak-resources/resources/css/account.css rename to keycloak-resources/account/resources/css/account.css index 3878e43a..5296852d 100644 --- a/keycloak-resources/resources/css/account.css +++ b/keycloak-resources/account/resources/css/account.css @@ -29,7 +29,7 @@ header .navbar { .navbar-pf .navbar-utility { right: 20px; - top: -34px; + top: -34px !important; font-size: 12px; } diff --git a/keycloak-resources/resources/img/icon-sidebar-active.png b/keycloak-resources/account/resources/img/icon-sidebar-active.png similarity index 100% rename from keycloak-resources/resources/img/icon-sidebar-active.png rename to keycloak-resources/account/resources/img/icon-sidebar-active.png diff --git a/keycloak-resources/resources/img/keycloak-logo.png b/keycloak-resources/account/resources/img/keycloak-logo.png similarity index 100% rename from keycloak-resources/resources/img/keycloak-logo.png rename to keycloak-resources/account/resources/img/keycloak-logo.png diff --git a/keycloak-resources/resources/img/logo.png b/keycloak-resources/account/resources/img/logo.png similarity index 100% rename from keycloak-resources/resources/img/logo.png rename to keycloak-resources/account/resources/img/logo.png diff --git a/keycloak-resources/resources/resources_common/img/favicon.ico b/keycloak-resources/account/resources/resources-common/img/favicon.ico similarity index 100% rename from keycloak-resources/resources/resources_common/img/favicon.ico rename to keycloak-resources/account/resources/resources-common/img/favicon.ico diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly-additions.min.css b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly-additions.min.css rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly.min.css b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly.min.css rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/font-awesome/fonts/fontawesome-webfont.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 b/keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 rename to keycloak-resources/account/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff2 diff --git a/keycloak-resources/account/resources/resources-common/package-lock.json b/keycloak-resources/account/resources/resources-common/package-lock.json new file mode 100644 index 00000000..f0886ad5 --- /dev/null +++ b/keycloak-resources/account/resources/resources-common/package-lock.json @@ -0,0 +1,1035 @@ +{ + "name": "keycloak-npm-dependencies", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "keycloak-npm-dependencies", + "version": "1.0.0", + "license": "Apache-2.0", + "dependencies": { + "jquery": "3.6.4", + "patternfly": "3.59.5" + } + }, + "node_modules/@types/c3": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@types/c3/-/c3-0.6.4.tgz", + "integrity": "sha512-W7i7oSmHsXYhseZJsIYexelv9HitGsWdQhx3mcy4NWso+GedpCYr02ghpkNvnZ4oTIjNeISdrOnM70s7HiuV+g==", + "optional": true, + "dependencies": { + "@types/d3": "^4" + } + }, + "node_modules/@types/d3": { + "version": "4.13.12", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-4.13.12.tgz", + "integrity": "sha512-/bbFtkOBc04gGGN8N9rMG5ps3T0eIj5I8bnYe9iIyeM5qoOrydPCbFYlEPUnj2h9ibc2i+QZfDam9jY5XTrTxQ==", + "optional": true, + "dependencies": { + "@types/d3-array": "^1", + "@types/d3-axis": "^1", + "@types/d3-brush": "^1", + "@types/d3-chord": "^1", + "@types/d3-collection": "*", + "@types/d3-color": "^1", + "@types/d3-dispatch": "^1", + "@types/d3-drag": "^1", + "@types/d3-dsv": "^1", + "@types/d3-ease": "^1", + "@types/d3-force": "^1", + "@types/d3-format": "^1", + "@types/d3-geo": "^1", + "@types/d3-hierarchy": "^1", + "@types/d3-interpolate": "^1", + "@types/d3-path": "^1", + "@types/d3-polygon": "^1", + "@types/d3-quadtree": "^1", + "@types/d3-queue": "*", + "@types/d3-random": "^1", + "@types/d3-request": "*", + "@types/d3-scale": "^1", + "@types/d3-selection": "^1", + "@types/d3-shape": "^1", + "@types/d3-time": "^1", + "@types/d3-time-format": "^2", + "@types/d3-timer": "^1", + "@types/d3-transition": "^1", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "^1" + } + }, + "node_modules/@types/d3-array": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.9.tgz", + "integrity": "sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==", + "optional": true + }, + "node_modules/@types/d3-axis": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.16.tgz", + "integrity": "sha512-p7085weOmo4W+DzlRRVC/7OI/jugaKbVa6WMQGCQscaMylcbuaVEGk7abJLNyGVFLeCBNrHTdDiqRGnzvL0nXQ==", + "optional": true, + "dependencies": { + "@types/d3-selection": "^1" + } + }, + "node_modules/@types/d3-brush": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.1.5.tgz", + "integrity": "sha512-4zGkBafJf5zCsBtLtvDj/pNMo5X9+Ii/1hUz0GvQ+wEwelUBm2AbIDAzJnp2hLDFF307o0fhxmmocHclhXC+tw==", + "optional": true, + "dependencies": { + "@types/d3-selection": "^1" + } + }, + "node_modules/@types/d3-chord": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.11.tgz", + "integrity": "sha512-0DdfJ//bxyW3G9Nefwq/LDgazSKNN8NU0lBT3Cza6uVuInC2awMNsAcv1oKyRFLn9z7kXClH5XjwpveZjuz2eg==", + "optional": true + }, + "node_modules/@types/d3-collection": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.10.tgz", + "integrity": "sha512-54Fdv8u5JbuXymtmXm2SYzi1x/Svt+jfWBU5junkhrCewL92VjqtCBDn97coBRVwVFmYNnVTNDyV8gQyPYfm+A==", + "optional": true + }, + "node_modules/@types/d3-color": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.2.tgz", + "integrity": "sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA==", + "optional": true + }, + "node_modules/@types/d3-dispatch": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.9.tgz", + "integrity": "sha512-zJ44YgjqALmyps+II7b1mZLhrtfV/FOxw9owT87mrweGWcg+WK5oiJX2M3SYJ0XUAExBduarysfgbR11YxzojQ==", + "optional": true + }, + "node_modules/@types/d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-7NeTnfolst1Js3Vs7myctBkmJWu6DMI3k597AaHUX98saHjHWJ6vouT83UrpE+xfbSceHV+8A0JgxuwgqgmqWw==", + "optional": true, + "dependencies": { + "@types/d3-selection": "^1" + } + }, + "node_modules/@types/d3-dsv": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.2.1.tgz", + "integrity": "sha512-LLmJmjiqp/fTNEdij5bIwUJ6P6TVNk5hKM9/uk5RPO2YNgEu9XvKO0dJ7Iqd3psEdmZN1m7gB1bOsjr4HmO2BA==", + "optional": true + }, + "node_modules/@types/d3-ease": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.11.tgz", + "integrity": "sha512-wUigPL0kleGZ9u3RhzBP07lxxkMcUjL5IODP42mN/05UNL+JJCDnpEPpFbJiPvLcTeRKGIRpBBJyP/1BNwYsVA==", + "optional": true + }, + "node_modules/@types/d3-force": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.4.tgz", + "integrity": "sha512-fkorLTKvt6AQbFBQwn4aq7h9rJ4c7ZVcPMGB8X6eFFveAyMZcv7t7m6wgF4Eg93rkPgPORU7sAho1QSHNcZu6w==", + "optional": true + }, + "node_modules/@types/d3-format": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.2.tgz", + "integrity": "sha512-WeGCHAs7PHdZYq6lwl/+jsl+Nfc1J2W1kNcMeIMYzQsT6mtBDBgtJ/rcdjZ0k0rVIvqEZqhhuD5TK/v3P2gFHQ==", + "optional": true + }, + "node_modules/@types/d3-geo": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.12.3.tgz", + "integrity": "sha512-yZbPb7/5DyL/pXkeOmZ7L5ySpuGr4H48t1cuALjnJy5sXQqmSSAYBiwa6Ya/XpWKX2rJqGDDubmh3nOaopOpeA==", + "optional": true, + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-AbStKxNyWiMDQPGDguG2Kuhlq1Sv539pZSxYbx4UZeYkutpPwXCcgyiRrlV4YH64nIOsKx7XVnOMy9O7rJsXkg==", + "optional": true + }, + "node_modules/@types/d3-interpolate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz", + "integrity": "sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg==", + "optional": true, + "dependencies": { + "@types/d3-color": "^1" + } + }, + "node_modules/@types/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==", + "optional": true + }, + "node_modules/@types/d3-polygon": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.8.tgz", + "integrity": "sha512-1TOJPXCBJC9V3+K3tGbTqD/CsqLyv/YkTXAcwdsZzxqw5cvpdnCuDl42M4Dvi8XzMxZNCT9pL4ibrK2n4VmAcw==", + "optional": true + }, + "node_modules/@types/d3-quadtree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.9.tgz", + "integrity": "sha512-5E0OJJn2QVavITFEc1AQlI8gLcIoDZcTKOD3feKFckQVmFV4CXhqRFt83tYNVNIN4ZzRkjlAMavJa1ldMhf5rA==", + "optional": true + }, + "node_modules/@types/d3-queue": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-queue/-/d3-queue-3.0.8.tgz", + "integrity": "sha512-1FWOiI/MYwS5Z1Sa9EvS1Xet3isiVIIX5ozD6iGnwHonGcqL+RcC1eThXN5VfDmAiYt9Me9EWNEv/9J9k9RIKQ==", + "optional": true + }, + "node_modules/@types/d3-random": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.3.tgz", + "integrity": "sha512-XXR+ZbFCoOd4peXSMYJzwk0/elP37WWAzS/DG+90eilzVbUSsgKhBcWqylGWe+lA2ubgr7afWAOBaBxRgMUrBQ==", + "optional": true + }, + "node_modules/@types/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-4nRKDUBg3EBx8VowpMvM3NAVMiMMI1qFUOYv3OJsclGjHX6xjtu09nsWhRQ0fvSUla3MEjb5Ch4IeaYarMEi1w==", + "optional": true, + "dependencies": { + "@types/d3-dsv": "^1" + } + }, + "node_modules/@types/d3-scale": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-1.0.17.tgz", + "integrity": "sha512-baIP5/gw+PS8Axs1lfZCeIjcOXen/jxQmgFEjbYThwaj2drvivOIrJMh2Ig4MeenrogCH6zkhiOxCPRkvN1scA==", + "optional": true, + "dependencies": { + "@types/d3-time": "^1" + } + }, + "node_modules/@types/d3-selection": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.3.tgz", + "integrity": "sha512-GjKQWVZO6Sa96HiKO6R93VBE8DUW+DDkFpIMf9vpY5S78qZTlRRSNUsHr/afDpF7TvLDV7VxrUFOWW7vdIlYkA==", + "optional": true + }, + "node_modules/@types/d3-shape": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz", + "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==", + "optional": true, + "dependencies": { + "@types/d3-path": "^1" + } + }, + "node_modules/@types/d3-time": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.1.tgz", + "integrity": "sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw==", + "optional": true + }, + "node_modules/@types/d3-time-format": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.1.tgz", + "integrity": "sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA==", + "optional": true + }, + "node_modules/@types/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-ZnAbquVqy+4ZjdW0cY6URp+qF/AzTVNda2jYyOzpR2cPT35FTXl78s15Bomph9+ckOiI1TtkljnWkwbIGAb6rg==", + "optional": true + }, + "node_modules/@types/d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-J+a3SuF/E7wXbOSN19p8ZieQSFIm5hU2Egqtndbc54LXaAEOpLfDx4sBu/PKAKzHOdgKK1wkMhINKqNh4aoZAg==", + "optional": true, + "dependencies": { + "@types/d3-selection": "^1" + } + }, + "node_modules/@types/d3-voronoi": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz", + "integrity": "sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==", + "optional": true + }, + "node_modules/@types/d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-3kHkL6sPiDdbfGhzlp5gIHyu3kULhtnHTTAl3UBZVtWB1PzcLL8vdmz5mTx7plLiUqOA2Y+yT2GKjt/TdA2p7Q==", + "optional": true, + "dependencies": { + "@types/d3-interpolate": "^1", + "@types/d3-selection": "^1" + } + }, + "node_modules/@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", + "optional": true + }, + "node_modules/bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/bootstrap-datepicker": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/bootstrap-datepicker/-/bootstrap-datepicker-1.9.0.tgz", + "integrity": "sha512-9rYYbaVOheGYxjOr/+bJCmRPihfy+LkLSg4fIFMT9Od8WwWB/MB50w0JO1eBgKUMbb7PFHQD5uAfI3ArAxZRXA==", + "optional": true, + "dependencies": { + "jquery": ">=1.7.1 <4.0.0" + } + }, + "node_modules/bootstrap-sass": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz", + "integrity": "sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA==", + "optional": true + }, + "node_modules/bootstrap-select": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.12.2.tgz", + "integrity": "sha1-WNCVs/1YSzFEOGb745tv3U5OEqQ=", + "optional": true, + "dependencies": { + "jquery": ">=1.8" + } + }, + "node_modules/bootstrap-slider": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/bootstrap-slider/-/bootstrap-slider-9.10.0.tgz", + "integrity": "sha1-EQPWvADPv6jPyaJZmrUYxVZD2j8=", + "optional": true + }, + "node_modules/bootstrap-switch": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/bootstrap-switch/-/bootstrap-switch-3.3.4.tgz", + "integrity": "sha1-cOCusqh3wNx2aZHeEI4hcPwpov8=", + "optional": true, + "peerDependencies": { + "bootstrap": "^3.1.1", + "jquery": ">=1.9.0" + } + }, + "node_modules/bootstrap-touchspin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bootstrap-touchspin/-/bootstrap-touchspin-3.1.1.tgz", + "integrity": "sha1-l3nerHKq9Xfl52K4USx0fIcdlZc=", + "optional": true + }, + "node_modules/c3": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/c3/-/c3-0.4.24.tgz", + "integrity": "sha512-mVCFtN5ZWUT5UE7ilFQ7KBQ7TUCdKIq6KsDt1hH/1m6gC1tBjvzFTO7fqhaiWHfhNOjjM7makschdhg6DkWQMA==", + "optional": true, + "dependencies": { + "d3": "~3.5.0" + } + }, + "node_modules/d3": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", + "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=", + "optional": true + }, + "node_modules/datatables.net": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.4.tgz", + "integrity": "sha512-z9LG4O0VYOYzp+rnArLExvnUWV8ikyWBcHYZEKDfVuz7BKxQdEq4a/tpO0Trbm+FL1+RY7UEIh+UcYNY/hwGxA==", + "optional": true, + "dependencies": { + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-bs": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.11.4.tgz", + "integrity": "sha512-lQaytqSOcSv51jFoT7RyDbaoziCStSDl5Ym1yOBP+ZXIOsS9fd4zOFZyDQlmGFyUpa8JAy84C4r8jM1GQ3/olA==", + "optional": true, + "dependencies": { + "datatables.net": ">=1.11.3", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-colreorder": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/datatables.net-colreorder/-/datatables.net-colreorder-1.5.5.tgz", + "integrity": "sha512-AUwv5A/87I4hg7GY/WbhRrDhqng9b019jLvvKutHibSPCEtMDWqyNtuP0q8zYoquqU9UQ1/nqXLW/ld8TzIDYQ==", + "optional": true, + "dependencies": { + "datatables.net": ">=1.11.3", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-colreorder-bs": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/datatables.net-colreorder-bs/-/datatables.net-colreorder-bs-1.3.3.tgz", + "integrity": "sha1-Op3LCN7r612FQHlZHgbkk615OlM=", + "optional": true, + "dependencies": { + "datatables.net-bs": ">=1.10.9", + "datatables.net-colreorder": ">=1.2.0", + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-select": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.2.7.tgz", + "integrity": "sha512-C3XDi7wpruGjDXV36dc9hN/FrAX9GOFvBZ7+KfKJTBNkGFbbhdzHS91SMeGiwRXPYivAyxfPTcVVndVaO83uBQ==", + "optional": true, + "dependencies": { + "datatables.net": "^1.10.15", + "jquery": ">=1.7" + } + }, + "node_modules/drmonty-datatables-colvis": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/drmonty-datatables-colvis/-/drmonty-datatables-colvis-1.1.2.tgz", + "integrity": "sha1-lque37SGQ8wu3aP4e4iTPN7oEnw=", + "optional": true, + "dependencies": { + "jquery": ">=1.7.0" + } + }, + "node_modules/eonasdan-bootstrap-datetimepicker": { + "version": "4.17.49", + "resolved": "https://registry.npmjs.org/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.49.tgz", + "integrity": "sha512-7KZeDpkj+A6AtPR3XjX8gAnRPUkPSfW0OmMANG1dkUOPMtLSzbyoCjDIdEcfRtQPU5X0D9Gob7wWKn0h4QWy7A==", + "optional": true, + "dependencies": { + "bootstrap": "^3.3", + "jquery": "^3.5.1", + "moment": "^2.10", + "moment-timezone": "^0.4.0" + }, + "peerDependencies": { + "bootstrap": "^3.3", + "jquery": "^1.8.3 || ^2.0 || ^3.0", + "moment": "^2.10", + "moment-timezone": "^0.4.0 || ^0.5.0" + } + }, + "node_modules/font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=", + "engines": { + "node": ">=0.10.3" + } + }, + "node_modules/font-awesome-sass": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome-sass/-/font-awesome-sass-4.7.0.tgz", + "integrity": "sha1-TtppPpFQCc4Asijglk3F7Km8NOE=", + "optional": true + }, + "node_modules/google-code-prettify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/google-code-prettify/-/google-code-prettify-1.0.5.tgz", + "integrity": "sha1-n0d/Ik2/piNy5e+AOn4VdBBAAIQ=", + "optional": true + }, + "node_modules/jquery": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + }, + "node_modules/jquery-match-height": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/jquery-match-height/-/jquery-match-height-0.7.2.tgz", + "integrity": "sha1-+NnzulMU2qsQnPB0CGdL4gS+Xw4=", + "optional": true + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.4.1.tgz", + "integrity": "sha1-gfWYw61eIs2teWtn7NjYjQ9bqgY=", + "optional": true, + "dependencies": { + "moment": ">= 2.6.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/patternfly": { + "version": "3.59.5", + "resolved": "https://registry.npmjs.org/patternfly/-/patternfly-3.59.5.tgz", + "integrity": "sha512-SMQynv9eFrWWG0Ujta5+jPjxHdQB3xkTLiDW5VP8XXc0nGUxXb4EnZh21qiMeGGJYaKpu9CzaPEpCvuBxgYWHQ==", + "dependencies": { + "bootstrap": "~3.4.1", + "font-awesome": "^4.7.0", + "jquery": "~3.4.1" + }, + "optionalDependencies": { + "@types/c3": "^0.6.0", + "bootstrap-datepicker": "^1.7.1", + "bootstrap-sass": "^3.4.0", + "bootstrap-select": "1.12.2", + "bootstrap-slider": "^9.9.0", + "bootstrap-switch": "3.3.4", + "bootstrap-touchspin": "~3.1.1", + "c3": "~0.4.11", + "d3": "~3.5.17", + "datatables.net": "^1.10.15", + "datatables.net-colreorder": "^1.4.1", + "datatables.net-colreorder-bs": "~1.3.2", + "datatables.net-select": "~1.2.0", + "drmonty-datatables-colvis": "~1.1.2", + "eonasdan-bootstrap-datetimepicker": "^4.17.47", + "font-awesome-sass": "^4.7.0", + "google-code-prettify": "~1.0.5", + "jquery-match-height": "^0.7.2", + "moment": "^2.19.1", + "moment-timezone": "^0.4.1", + "patternfly-bootstrap-combobox": "~1.1.7", + "patternfly-bootstrap-treeview": "~2.1.10" + } + }, + "node_modules/patternfly-bootstrap-combobox": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/patternfly-bootstrap-combobox/-/patternfly-bootstrap-combobox-1.1.7.tgz", + "integrity": "sha1-al48zRFwwhs8S0qhaKdBPh3btuE=", + "optional": true + }, + "node_modules/patternfly-bootstrap-treeview": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/patternfly-bootstrap-treeview/-/patternfly-bootstrap-treeview-2.1.10.tgz", + "integrity": "sha512-P9+iFu34CwX+R5Fd7/EWbxTug0q9mDj53PnZIIh5ie54KX2kD0+54lCWtpD9SVylDwDtDv3n3A6gbFVkx7HsuA==", + "optional": true, + "dependencies": { + "bootstrap": "^3.4.1", + "jquery": "^3.4.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/patternfly/node_modules/jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + } + }, + "dependencies": { + "@types/c3": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/@types/c3/-/c3-0.6.4.tgz", + "integrity": "sha512-W7i7oSmHsXYhseZJsIYexelv9HitGsWdQhx3mcy4NWso+GedpCYr02ghpkNvnZ4oTIjNeISdrOnM70s7HiuV+g==", + "optional": true, + "requires": { + "@types/d3": "^4" + } + }, + "@types/d3": { + "version": "4.13.12", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-4.13.12.tgz", + "integrity": "sha512-/bbFtkOBc04gGGN8N9rMG5ps3T0eIj5I8bnYe9iIyeM5qoOrydPCbFYlEPUnj2h9ibc2i+QZfDam9jY5XTrTxQ==", + "optional": true, + "requires": { + "@types/d3-array": "^1", + "@types/d3-axis": "^1", + "@types/d3-brush": "^1", + "@types/d3-chord": "^1", + "@types/d3-collection": "*", + "@types/d3-color": "^1", + "@types/d3-dispatch": "^1", + "@types/d3-drag": "^1", + "@types/d3-dsv": "^1", + "@types/d3-ease": "^1", + "@types/d3-force": "^1", + "@types/d3-format": "^1", + "@types/d3-geo": "^1", + "@types/d3-hierarchy": "^1", + "@types/d3-interpolate": "^1", + "@types/d3-path": "^1", + "@types/d3-polygon": "^1", + "@types/d3-quadtree": "^1", + "@types/d3-queue": "*", + "@types/d3-random": "^1", + "@types/d3-request": "*", + "@types/d3-scale": "^1", + "@types/d3-selection": "^1", + "@types/d3-shape": "^1", + "@types/d3-time": "^1", + "@types/d3-time-format": "^2", + "@types/d3-timer": "^1", + "@types/d3-transition": "^1", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "^1" + } + }, + "@types/d3-array": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.9.tgz", + "integrity": "sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==", + "optional": true + }, + "@types/d3-axis": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.16.tgz", + "integrity": "sha512-p7085weOmo4W+DzlRRVC/7OI/jugaKbVa6WMQGCQscaMylcbuaVEGk7abJLNyGVFLeCBNrHTdDiqRGnzvL0nXQ==", + "optional": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-brush": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.1.5.tgz", + "integrity": "sha512-4zGkBafJf5zCsBtLtvDj/pNMo5X9+Ii/1hUz0GvQ+wEwelUBm2AbIDAzJnp2hLDFF307o0fhxmmocHclhXC+tw==", + "optional": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-chord": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.11.tgz", + "integrity": "sha512-0DdfJ//bxyW3G9Nefwq/LDgazSKNN8NU0lBT3Cza6uVuInC2awMNsAcv1oKyRFLn9z7kXClH5XjwpveZjuz2eg==", + "optional": true + }, + "@types/d3-collection": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.10.tgz", + "integrity": "sha512-54Fdv8u5JbuXymtmXm2SYzi1x/Svt+jfWBU5junkhrCewL92VjqtCBDn97coBRVwVFmYNnVTNDyV8gQyPYfm+A==", + "optional": true + }, + "@types/d3-color": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.2.tgz", + "integrity": "sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA==", + "optional": true + }, + "@types/d3-dispatch": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.9.tgz", + "integrity": "sha512-zJ44YgjqALmyps+II7b1mZLhrtfV/FOxw9owT87mrweGWcg+WK5oiJX2M3SYJ0XUAExBduarysfgbR11YxzojQ==", + "optional": true + }, + "@types/d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-7NeTnfolst1Js3Vs7myctBkmJWu6DMI3k597AaHUX98saHjHWJ6vouT83UrpE+xfbSceHV+8A0JgxuwgqgmqWw==", + "optional": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-dsv": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.2.1.tgz", + "integrity": "sha512-LLmJmjiqp/fTNEdij5bIwUJ6P6TVNk5hKM9/uk5RPO2YNgEu9XvKO0dJ7Iqd3psEdmZN1m7gB1bOsjr4HmO2BA==", + "optional": true + }, + "@types/d3-ease": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.11.tgz", + "integrity": "sha512-wUigPL0kleGZ9u3RhzBP07lxxkMcUjL5IODP42mN/05UNL+JJCDnpEPpFbJiPvLcTeRKGIRpBBJyP/1BNwYsVA==", + "optional": true + }, + "@types/d3-force": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.4.tgz", + "integrity": "sha512-fkorLTKvt6AQbFBQwn4aq7h9rJ4c7ZVcPMGB8X6eFFveAyMZcv7t7m6wgF4Eg93rkPgPORU7sAho1QSHNcZu6w==", + "optional": true + }, + "@types/d3-format": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.2.tgz", + "integrity": "sha512-WeGCHAs7PHdZYq6lwl/+jsl+Nfc1J2W1kNcMeIMYzQsT6mtBDBgtJ/rcdjZ0k0rVIvqEZqhhuD5TK/v3P2gFHQ==", + "optional": true + }, + "@types/d3-geo": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.12.3.tgz", + "integrity": "sha512-yZbPb7/5DyL/pXkeOmZ7L5ySpuGr4H48t1cuALjnJy5sXQqmSSAYBiwa6Ya/XpWKX2rJqGDDubmh3nOaopOpeA==", + "optional": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-AbStKxNyWiMDQPGDguG2Kuhlq1Sv539pZSxYbx4UZeYkutpPwXCcgyiRrlV4YH64nIOsKx7XVnOMy9O7rJsXkg==", + "optional": true + }, + "@types/d3-interpolate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz", + "integrity": "sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg==", + "optional": true, + "requires": { + "@types/d3-color": "^1" + } + }, + "@types/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==", + "optional": true + }, + "@types/d3-polygon": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.8.tgz", + "integrity": "sha512-1TOJPXCBJC9V3+K3tGbTqD/CsqLyv/YkTXAcwdsZzxqw5cvpdnCuDl42M4Dvi8XzMxZNCT9pL4ibrK2n4VmAcw==", + "optional": true + }, + "@types/d3-quadtree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.9.tgz", + "integrity": "sha512-5E0OJJn2QVavITFEc1AQlI8gLcIoDZcTKOD3feKFckQVmFV4CXhqRFt83tYNVNIN4ZzRkjlAMavJa1ldMhf5rA==", + "optional": true + }, + "@types/d3-queue": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-queue/-/d3-queue-3.0.8.tgz", + "integrity": "sha512-1FWOiI/MYwS5Z1Sa9EvS1Xet3isiVIIX5ozD6iGnwHonGcqL+RcC1eThXN5VfDmAiYt9Me9EWNEv/9J9k9RIKQ==", + "optional": true + }, + "@types/d3-random": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.3.tgz", + "integrity": "sha512-XXR+ZbFCoOd4peXSMYJzwk0/elP37WWAzS/DG+90eilzVbUSsgKhBcWqylGWe+lA2ubgr7afWAOBaBxRgMUrBQ==", + "optional": true + }, + "@types/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-4nRKDUBg3EBx8VowpMvM3NAVMiMMI1qFUOYv3OJsclGjHX6xjtu09nsWhRQ0fvSUla3MEjb5Ch4IeaYarMEi1w==", + "optional": true, + "requires": { + "@types/d3-dsv": "^1" + } + }, + "@types/d3-scale": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-1.0.17.tgz", + "integrity": "sha512-baIP5/gw+PS8Axs1lfZCeIjcOXen/jxQmgFEjbYThwaj2drvivOIrJMh2Ig4MeenrogCH6zkhiOxCPRkvN1scA==", + "optional": true, + "requires": { + "@types/d3-time": "^1" + } + }, + "@types/d3-selection": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.3.tgz", + "integrity": "sha512-GjKQWVZO6Sa96HiKO6R93VBE8DUW+DDkFpIMf9vpY5S78qZTlRRSNUsHr/afDpF7TvLDV7VxrUFOWW7vdIlYkA==", + "optional": true + }, + "@types/d3-shape": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz", + "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==", + "optional": true, + "requires": { + "@types/d3-path": "^1" + } + }, + "@types/d3-time": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.1.tgz", + "integrity": "sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw==", + "optional": true + }, + "@types/d3-time-format": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.1.tgz", + "integrity": "sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA==", + "optional": true + }, + "@types/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-ZnAbquVqy+4ZjdW0cY6URp+qF/AzTVNda2jYyOzpR2cPT35FTXl78s15Bomph9+ckOiI1TtkljnWkwbIGAb6rg==", + "optional": true + }, + "@types/d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-J+a3SuF/E7wXbOSN19p8ZieQSFIm5hU2Egqtndbc54LXaAEOpLfDx4sBu/PKAKzHOdgKK1wkMhINKqNh4aoZAg==", + "optional": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-voronoi": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz", + "integrity": "sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==", + "optional": true + }, + "@types/d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-3kHkL6sPiDdbfGhzlp5gIHyu3kULhtnHTTAl3UBZVtWB1PzcLL8vdmz5mTx7plLiUqOA2Y+yT2GKjt/TdA2p7Q==", + "optional": true, + "requires": { + "@types/d3-interpolate": "^1", + "@types/d3-selection": "^1" + } + }, + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", + "optional": true + }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" + }, + "bootstrap-datepicker": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/bootstrap-datepicker/-/bootstrap-datepicker-1.9.0.tgz", + "integrity": "sha512-9rYYbaVOheGYxjOr/+bJCmRPihfy+LkLSg4fIFMT9Od8WwWB/MB50w0JO1eBgKUMbb7PFHQD5uAfI3ArAxZRXA==", + "optional": true, + "requires": { + "jquery": ">=1.7.1 <4.0.0" + } + }, + "bootstrap-sass": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/bootstrap-sass/-/bootstrap-sass-3.4.1.tgz", + "integrity": "sha512-p5rxsK/IyEDQm2CwiHxxUi0MZZtvVFbhWmyMOt4lLkA4bujDA1TGoKT0i1FKIWiugAdP+kK8T5KMDFIKQCLYIA==", + "optional": true + }, + "bootstrap-select": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/bootstrap-select/-/bootstrap-select-1.12.2.tgz", + "integrity": "sha1-WNCVs/1YSzFEOGb745tv3U5OEqQ=", + "optional": true, + "requires": { + "jquery": ">=1.8" + } + }, + "bootstrap-slider": { + "version": "9.10.0", + "resolved": "https://registry.npmjs.org/bootstrap-slider/-/bootstrap-slider-9.10.0.tgz", + "integrity": "sha1-EQPWvADPv6jPyaJZmrUYxVZD2j8=", + "optional": true + }, + "bootstrap-switch": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/bootstrap-switch/-/bootstrap-switch-3.3.4.tgz", + "integrity": "sha1-cOCusqh3wNx2aZHeEI4hcPwpov8=", + "optional": true, + "requires": {} + }, + "bootstrap-touchspin": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bootstrap-touchspin/-/bootstrap-touchspin-3.1.1.tgz", + "integrity": "sha1-l3nerHKq9Xfl52K4USx0fIcdlZc=", + "optional": true + }, + "c3": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/c3/-/c3-0.4.24.tgz", + "integrity": "sha512-mVCFtN5ZWUT5UE7ilFQ7KBQ7TUCdKIq6KsDt1hH/1m6gC1tBjvzFTO7fqhaiWHfhNOjjM7makschdhg6DkWQMA==", + "optional": true, + "requires": { + "d3": "~3.5.0" + } + }, + "d3": { + "version": "3.5.17", + "resolved": "https://registry.npmjs.org/d3/-/d3-3.5.17.tgz", + "integrity": "sha1-vEZ0gAQ3iyGjYMn8fPUjF5B2L7g=", + "optional": true + }, + "datatables.net": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-1.11.4.tgz", + "integrity": "sha512-z9LG4O0VYOYzp+rnArLExvnUWV8ikyWBcHYZEKDfVuz7BKxQdEq4a/tpO0Trbm+FL1+RY7UEIh+UcYNY/hwGxA==", + "optional": true, + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-bs": { + "version": "1.11.4", + "resolved": "https://registry.npmjs.org/datatables.net-bs/-/datatables.net-bs-1.11.4.tgz", + "integrity": "sha512-lQaytqSOcSv51jFoT7RyDbaoziCStSDl5Ym1yOBP+ZXIOsS9fd4zOFZyDQlmGFyUpa8JAy84C4r8jM1GQ3/olA==", + "optional": true, + "requires": { + "datatables.net": ">=1.11.3", + "jquery": ">=1.7" + } + }, + "datatables.net-colreorder": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/datatables.net-colreorder/-/datatables.net-colreorder-1.5.5.tgz", + "integrity": "sha512-AUwv5A/87I4hg7GY/WbhRrDhqng9b019jLvvKutHibSPCEtMDWqyNtuP0q8zYoquqU9UQ1/nqXLW/ld8TzIDYQ==", + "optional": true, + "requires": { + "datatables.net": ">=1.11.3", + "jquery": ">=1.7" + } + }, + "datatables.net-colreorder-bs": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/datatables.net-colreorder-bs/-/datatables.net-colreorder-bs-1.3.3.tgz", + "integrity": "sha1-Op3LCN7r612FQHlZHgbkk615OlM=", + "optional": true, + "requires": { + "datatables.net-bs": ">=1.10.9", + "datatables.net-colreorder": ">=1.2.0", + "jquery": ">=1.7" + } + }, + "datatables.net-select": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/datatables.net-select/-/datatables.net-select-1.2.7.tgz", + "integrity": "sha512-C3XDi7wpruGjDXV36dc9hN/FrAX9GOFvBZ7+KfKJTBNkGFbbhdzHS91SMeGiwRXPYivAyxfPTcVVndVaO83uBQ==", + "optional": true, + "requires": { + "datatables.net": "^1.10.15", + "jquery": ">=1.7" + } + }, + "drmonty-datatables-colvis": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/drmonty-datatables-colvis/-/drmonty-datatables-colvis-1.1.2.tgz", + "integrity": "sha1-lque37SGQ8wu3aP4e4iTPN7oEnw=", + "optional": true, + "requires": { + "jquery": ">=1.7.0" + } + }, + "eonasdan-bootstrap-datetimepicker": { + "version": "4.17.49", + "resolved": "https://registry.npmjs.org/eonasdan-bootstrap-datetimepicker/-/eonasdan-bootstrap-datetimepicker-4.17.49.tgz", + "integrity": "sha512-7KZeDpkj+A6AtPR3XjX8gAnRPUkPSfW0OmMANG1dkUOPMtLSzbyoCjDIdEcfRtQPU5X0D9Gob7wWKn0h4QWy7A==", + "optional": true, + "requires": { + "bootstrap": "^3.3", + "jquery": "^3.5.1", + "moment": "^2.10", + "moment-timezone": "^0.4.0" + } + }, + "font-awesome": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", + "integrity": "sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=" + }, + "font-awesome-sass": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/font-awesome-sass/-/font-awesome-sass-4.7.0.tgz", + "integrity": "sha1-TtppPpFQCc4Asijglk3F7Km8NOE=", + "optional": true + }, + "google-code-prettify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/google-code-prettify/-/google-code-prettify-1.0.5.tgz", + "integrity": "sha1-n0d/Ik2/piNy5e+AOn4VdBBAAIQ=", + "optional": true + }, + "jquery": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==" + }, + "jquery-match-height": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/jquery-match-height/-/jquery-match-height-0.7.2.tgz", + "integrity": "sha1-+NnzulMU2qsQnPB0CGdL4gS+Xw4=", + "optional": true + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "optional": true + }, + "moment-timezone": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.4.1.tgz", + "integrity": "sha1-gfWYw61eIs2teWtn7NjYjQ9bqgY=", + "optional": true, + "requires": { + "moment": ">= 2.6.0" + } + }, + "patternfly": { + "version": "3.59.5", + "resolved": "https://registry.npmjs.org/patternfly/-/patternfly-3.59.5.tgz", + "integrity": "sha512-SMQynv9eFrWWG0Ujta5+jPjxHdQB3xkTLiDW5VP8XXc0nGUxXb4EnZh21qiMeGGJYaKpu9CzaPEpCvuBxgYWHQ==", + "requires": { + "@types/c3": "^0.6.0", + "bootstrap": "~3.4.1", + "bootstrap-datepicker": "^1.7.1", + "bootstrap-sass": "^3.4.0", + "bootstrap-select": "1.12.2", + "bootstrap-slider": "^9.9.0", + "bootstrap-switch": "3.3.4", + "bootstrap-touchspin": "~3.1.1", + "c3": "~0.4.11", + "d3": "~3.5.17", + "datatables.net": "^1.10.15", + "datatables.net-colreorder": "^1.4.1", + "datatables.net-colreorder-bs": "~1.3.2", + "datatables.net-select": "~1.2.0", + "drmonty-datatables-colvis": "~1.1.2", + "eonasdan-bootstrap-datetimepicker": "^4.17.47", + "font-awesome": "^4.7.0", + "font-awesome-sass": "^4.7.0", + "google-code-prettify": "~1.0.5", + "jquery": "~3.4.1", + "jquery-match-height": "^0.7.2", + "moment": "^2.19.1", + "moment-timezone": "^0.4.1", + "patternfly-bootstrap-combobox": "~1.1.7", + "patternfly-bootstrap-treeview": "~2.1.10" + }, + "dependencies": { + "jquery": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", + "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==" + } + } + }, + "patternfly-bootstrap-combobox": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/patternfly-bootstrap-combobox/-/patternfly-bootstrap-combobox-1.1.7.tgz", + "integrity": "sha1-al48zRFwwhs8S0qhaKdBPh3btuE=", + "optional": true + }, + "patternfly-bootstrap-treeview": { + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/patternfly-bootstrap-treeview/-/patternfly-bootstrap-treeview-2.1.10.tgz", + "integrity": "sha512-P9+iFu34CwX+R5Fd7/EWbxTug0q9mDj53PnZIIh5ie54KX2kD0+54lCWtpD9SVylDwDtDv3n3A6gbFVkx7HsuA==", + "optional": true, + "requires": { + "bootstrap": "^3.4.1", + "jquery": "^3.4.1" + } + } + } +} diff --git a/keycloak-resources/account/resources/resources-common/package.json b/keycloak-resources/account/resources/resources-common/package.json new file mode 100644 index 00000000..bf3007b3 --- /dev/null +++ b/keycloak-resources/account/resources/resources-common/package.json @@ -0,0 +1,11 @@ +{ + "name": "keycloak-npm-dependencies", + "version": "1.0.0", + "description": "Keycloak NPM Dependencies", + "license": "Apache-2.0", + "repository": "https://github.com/keycloak/keycloak", + "dependencies": { + "jquery": "3.6.4", + "patternfly": "3.59.5" + } +} diff --git a/keycloak-resources/keycloakify.buildinfo b/keycloak-resources/keycloakify.buildinfo new file mode 100644 index 00000000..3712b3f8 --- /dev/null +++ b/keycloak-resources/keycloakify.buildinfo @@ -0,0 +1,8 @@ +{ + "keycloakifyVersion": "9.5.3", + "buildOptions": { + "loginThemeResourcesFromKeycloakVersion": "11.0.3", + "cacheDirPath": "../../../node_modules/.cache/keycloakify", + "npmWorkspaceRootDirPath": "../../.." + } +} \ No newline at end of file diff --git a/keycloak-resources/resources/css/login.css b/keycloak-resources/login/resources/css/login.css similarity index 100% rename from keycloak-resources/resources/css/login.css rename to keycloak-resources/login/resources/css/login.css diff --git a/keycloak-resources/resources/img/feedback-error-arrow-down.png b/keycloak-resources/login/resources/img/feedback-error-arrow-down.png similarity index 100% rename from keycloak-resources/resources/img/feedback-error-arrow-down.png rename to keycloak-resources/login/resources/img/feedback-error-arrow-down.png diff --git a/keycloak-resources/resources/img/feedback-error-sign.png b/keycloak-resources/login/resources/img/feedback-error-sign.png similarity index 100% rename from keycloak-resources/resources/img/feedback-error-sign.png rename to keycloak-resources/login/resources/img/feedback-error-sign.png diff --git a/keycloak-resources/resources/img/feedback-success-arrow-down.png b/keycloak-resources/login/resources/img/feedback-success-arrow-down.png similarity index 100% rename from keycloak-resources/resources/img/feedback-success-arrow-down.png rename to keycloak-resources/login/resources/img/feedback-success-arrow-down.png diff --git a/keycloak-resources/resources/img/feedback-success-sign.png b/keycloak-resources/login/resources/img/feedback-success-sign.png similarity index 100% rename from keycloak-resources/resources/img/feedback-success-sign.png rename to keycloak-resources/login/resources/img/feedback-success-sign.png diff --git a/keycloak-resources/resources/img/feedback-warning-arrow-down.png b/keycloak-resources/login/resources/img/feedback-warning-arrow-down.png similarity index 100% rename from keycloak-resources/resources/img/feedback-warning-arrow-down.png rename to keycloak-resources/login/resources/img/feedback-warning-arrow-down.png diff --git a/keycloak-resources/resources/img/feedback-warning-sign.png b/keycloak-resources/login/resources/img/feedback-warning-sign.png similarity index 100% rename from keycloak-resources/resources/img/feedback-warning-sign.png rename to keycloak-resources/login/resources/img/feedback-warning-sign.png diff --git a/keycloak-resources/resources/img/keycloak-bg.png b/keycloak-resources/login/resources/img/keycloak-bg.png similarity index 100% rename from keycloak-resources/resources/img/keycloak-bg.png rename to keycloak-resources/login/resources/img/keycloak-bg.png diff --git a/keycloak-resources/resources/img/keycloak-logo-text.png b/keycloak-resources/login/resources/img/keycloak-logo-text.png similarity index 100% rename from keycloak-resources/resources/img/keycloak-logo-text.png rename to keycloak-resources/login/resources/img/keycloak-logo-text.png diff --git a/keycloak-resources/login/resources/img/keycloak-logo.png b/keycloak-resources/login/resources/img/keycloak-logo.png new file mode 100644 index 00000000..ffa5b0bf Binary files /dev/null and b/keycloak-resources/login/resources/img/keycloak-logo.png differ diff --git a/keycloak-resources/login/resources/resources-common/img/favicon.ico b/keycloak-resources/login/resources/resources-common/img/favicon.ico new file mode 100644 index 00000000..48188ded Binary files /dev/null and b/keycloak-resources/login/resources/resources-common/img/favicon.ico differ diff --git a/keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.eot b/keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.eot similarity index 100% rename from keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.eot rename to keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.eot diff --git a/keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.svg b/keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.svg similarity index 100% rename from keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.svg rename to keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.svg diff --git a/keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.ttf b/keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.ttf rename to keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.woff b/keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/lib/zocial/zocial-regular-webfont.woff rename to keycloak-resources/login/resources/resources-common/lib/zocial/zocial-regular-webfont.woff diff --git a/keycloak-resources/resources/resources_common/lib/zocial/zocial.css b/keycloak-resources/login/resources/resources-common/lib/zocial/zocial.css similarity index 100% rename from keycloak-resources/resources/resources_common/lib/zocial/zocial.css rename to keycloak-resources/login/resources/resources-common/lib/zocial/zocial.css diff --git a/keycloak-resources/resources/resources_common/node_modules/autofill-event/README.md b/keycloak-resources/login/resources/resources-common/node_modules/autofill-event/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/autofill-event/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/autofill-event/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/autofill-event/autofill-event.js b/keycloak-resources/login/resources/resources-common/node_modules/autofill-event/autofill-event.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/autofill-event/autofill-event.js rename to keycloak-resources/login/resources/resources-common/node_modules/autofill-event/autofill-event.js diff --git a/keycloak-resources/resources/resources_common/node_modules/autofill-event/bower.json b/keycloak-resources/login/resources/resources-common/node_modules/autofill-event/bower.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/autofill-event/bower.json rename to keycloak-resources/login/resources/resources-common/node_modules/autofill-event/bower.json diff --git a/keycloak-resources/resources/resources_common/node_modules/autofill-event/package.json b/keycloak-resources/login/resources/resources-common/node_modules/autofill-event/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/autofill-event/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/autofill-event/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/LICENSE b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/LICENSE similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/LICENSE rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/LICENSE diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/README.md b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/api.md b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/api.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/api.md rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/api.md diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/devtools/createdocs.js b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/devtools/createdocs.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/devtools/createdocs.js rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/devtools/createdocs.js diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/docs/api.md b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/api.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/docs/api.md rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/api.md diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/docs/footer.md b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/footer.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/docs/footer.md rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/footer.md diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/docs/readme.md b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/readme.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/docs/readme.md rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/docs/readme.md diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/package.json b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/src/Filesaver.js b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/src/Filesaver.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/src/Filesaver.js rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/src/Filesaver.js diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/src/changename.js b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/src/changename.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/src/changename.js rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/src/changename.js diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/test/assets/test.txt b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/test/assets/test.txt similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/test/assets/test.txt rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/test/assets/test.txt diff --git a/keycloak-resources/resources/resources_common/node_modules/filesaver/test/filesaver-test.js b/keycloak-resources/login/resources/resources-common/node_modules/filesaver/test/filesaver-test.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/filesaver/test/filesaver-test.js rename to keycloak-resources/login/resources/resources-common/node_modules/filesaver/test/filesaver-test.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/AUTHORS.txt b/keycloak-resources/login/resources/resources-common/node_modules/jquery/AUTHORS.txt similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/AUTHORS.txt rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/AUTHORS.txt diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/LICENSE.txt b/keycloak-resources/login/resources/resources-common/node_modules/jquery/LICENSE.txt similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/LICENSE.txt rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/LICENSE.txt diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/README.md b/keycloak-resources/login/resources/resources-common/node_modules/jquery/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/bower.json b/keycloak-resources/login/resources/resources-common/node_modules/jquery/bower.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/bower.json rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/bower.json diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.min.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.min.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.min.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.min.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.slim.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.slim.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.slim.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.slim.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.slim.min.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.slim.min.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/dist/jquery.slim.min.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/dist/jquery.slim.min.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/LICENSE.txt b/keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/LICENSE.txt similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/LICENSE.txt rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/LICENSE.txt diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/dist/sizzle.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/dist/sizzle.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/dist/sizzle.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/dist/sizzle.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/dist/sizzle.min.js b/keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/dist/sizzle.min.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/external/sizzle/dist/sizzle.min.js rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/external/sizzle/dist/sizzle.min.js diff --git a/keycloak-resources/resources/resources_common/node_modules/jquery/package.json b/keycloak-resources/login/resources/resources-common/node_modules/jquery/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/jquery/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/jquery/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/LICENSE.txt b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/LICENSE.txt similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/LICENSE.txt rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/LICENSE.txt diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/README.md b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly-additions.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly-additions.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.css diff --git a/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css new file mode 100644 index 00000000..648b3cb8 --- /dev/null +++ b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly-additions.min.css @@ -0,0 +1,5 @@ +.slider{display:inline-block;vertical-align:middle;position:relative}.slider.slider-horizontal{width:100%;height:16px}.slider.slider-horizontal .slider-track{height:8px;width:100%;margin-top:-4px;top:50%;left:0}.slider.slider-horizontal .slider-selection,.slider.slider-horizontal .slider-track-high,.slider.slider-horizontal .slider-track-low{height:100%;top:0;bottom:0}.slider.slider-horizontal .slider-handle,.slider.slider-horizontal .slider-tick{margin-left:-8px}.slider.slider-horizontal .slider-handle.triangle,.slider.slider-horizontal .slider-tick.triangle{position:relative;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%);border-width:0 8px 8px 8px;width:0;height:0;border-bottom-color:#ededed;margin-top:0}.slider.slider-horizontal .slider-tick-container{white-space:nowrap;position:absolute;top:0;left:0;width:100%}.slider.slider-horizontal .slider-tick-label-container{white-space:nowrap;margin-top:16px}.slider.slider-horizontal .slider-tick-label-container .slider-tick-label{padding-top:16px * .2;display:inline-block;text-align:center}.slider.slider-horizontal.slider-rtl .slider-track{left:initial;right:0}.slider.slider-horizontal.slider-rtl .slider-handle,.slider.slider-horizontal.slider-rtl .slider-tick{margin-left:initial;margin-right:-8px}.slider.slider-horizontal.slider-rtl .slider-tick-container{left:initial;right:0}.slider.slider-vertical{height:210px;width:16px}.slider.slider-vertical .slider-track{width:8px;height:100%;left:25%;top:0}.slider.slider-vertical .slider-selection{width:100%;left:0;top:0;bottom:0}.slider.slider-vertical .slider-track-high,.slider.slider-vertical .slider-track-low{width:100%;left:0;right:0}.slider.slider-vertical .slider-handle,.slider.slider-vertical .slider-tick{margin-top:-8px}.slider.slider-vertical .slider-handle.triangle,.slider.slider-vertical .slider-tick.triangle{border-width:8px 0 8px 8px;width:1px;height:1px;border-left-color:#ededed;border-right-color:#ededed;margin-left:0;margin-right:0}.slider.slider-vertical .slider-tick-label-container{white-space:nowrap}.slider.slider-vertical .slider-tick-label-container .slider-tick-label{padding-left:16px * .2}.slider.slider-vertical.slider-rtl .slider-track{left:initial;right:25%}.slider.slider-vertical.slider-rtl .slider-selection{left:initial;right:0}.slider.slider-vertical.slider-rtl .slider-handle.triangle,.slider.slider-vertical.slider-rtl .slider-tick.triangle{border-width:8px 8px 8px 0}.slider.slider-vertical.slider-rtl .slider-tick-label-container .slider-tick-label{padding-left:initial;padding-right:16px * .2}.slider.slider-disabled .slider-handle{background-image:linear-gradient(to bottom,#dfdfdf 0,#bebebe 100%);background-repeat:repeat-x}.slider.slider-disabled .slider-track{background-image:linear-gradient(to bottom,#e5e5e5 0,#e9e9e9 100%);background-repeat:repeat-x;cursor:not-allowed}.slider input{display:none}.slider .tooltip.top{margin-top:-36px}.slider .tooltip-inner{white-space:nowrap;max-width:none}.slider .hide{display:none}.slider-track{position:absolute;cursor:pointer;background-image:linear-gradient(to bottom,#f5f5f5 0,#f9f9f9 100%);background-repeat:repeat-x;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);border-radius:1px}.slider-selection{position:absolute;background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);background-repeat:repeat-x;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-sizing:border-box;border-radius:1px}.slider-selection.tick-slider-selection{background-image:linear-gradient(to bottom,#0088ce 0,#39a5dc 100%);background-repeat:repeat-x}.slider-track-high,.slider-track-low{position:absolute;background:0 0;box-sizing:border-box;border-radius:1px}.slider-handle{position:absolute;top:0;width:16px;height:16px;background-color:#39a5dc;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;filter:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);border:0 solid transparent}.slider-handle.round{border-radius:50%}.slider-handle.triangle{background:transparent none}.slider-handle.custom{background:transparent none}.slider-handle.custom::before{line-height:16px;font-size:20px;content:'\2605';color:#726204}.slider-tick{position:absolute;width:16px;height:16px;background-image:linear-gradient(to bottom,#f9f9f9 0,#f5f5f5 100%);background-repeat:repeat-x;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-sizing:border-box;filter:none;opacity:.8;border:0 solid transparent}.slider-tick.round{border-radius:50%}.slider-tick.triangle{background:transparent none}.slider-tick.custom{background:transparent none}.slider-tick.custom::before{line-height:16px;font-size:20px;content:'\2605';color:#726204}.slider-tick.in-selection{background-image:linear-gradient(to bottom,#0088ce 0,#39a5dc 100%);background-repeat:repeat-x;opacity:1}@media (min-width:768px){.form-inline .combobox-container,.form-search .combobox-container{display:inline-block;margin-bottom:0;vertical-align:top}.form-inline .combobox-container .input-group-addon,.form-search .combobox-container .input-group-addon{width:auto}}.combobox-selected .caret{display:none}.combobox-container:not(.combobox-selected) .glyphicon-remove{display:none}.typeahead-long{max-height:300px;overflow-y:auto}.control-group.error .combobox-container .add-on{color:#b94a48;border-color:#b94a48}.control-group.error .combobox-container .caret{border-top-color:#b94a48}.control-group.warning .combobox-container .add-on{color:#c09853;border-color:#c09853}.control-group.warning .combobox-container .caret{border-top-color:#c09853}.control-group.success .combobox-container .add-on{color:#468847;border-color:#468847}.control-group.success .combobox-container .caret{border-top-color:#468847}.datepicker{border-radius:1px;direction:ltr}.datepicker-inline{width:220px}.datepicker-rtl{direction:rtl}.datepicker-rtl.dropdown-menu{left:auto}.datepicker-rtl table tr td span{float:right}.datepicker-dropdown{top:0;left:0;padding:4px}.datepicker-dropdown:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #bbb;border-top:0;border-bottom-color:rgba(0,0,0,.2);position:absolute}.datepicker-dropdown:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;border-top:0;position:absolute}.datepicker-dropdown.datepicker-orient-left:before{left:6px}.datepicker-dropdown.datepicker-orient-left:after{left:7px}.datepicker-dropdown.datepicker-orient-right:before{right:6px}.datepicker-dropdown.datepicker-orient-right:after{right:7px}.datepicker-dropdown.datepicker-orient-bottom:before{top:-7px}.datepicker-dropdown.datepicker-orient-bottom:after{top:-6px}.datepicker-dropdown.datepicker-orient-top:before{bottom:-7px;border-bottom:0;border-top:7px solid #bbb}.datepicker-dropdown.datepicker-orient-top:after{bottom:-6px;border-bottom:0;border-top:6px solid #fff}.datepicker table{margin:0;-webkit-touch-callout:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.datepicker table tr td,.datepicker table tr th{text-align:center;width:30px;height:30px;border-radius:4px;border:none}.table-striped .datepicker table tr td,.table-striped .datepicker table tr th{background-color:transparent}.datepicker table tr td.new,.datepicker table tr td.old{color:#9c9c9c}.datepicker table tr td.day:hover,.datepicker table tr td.focused{background:#f1f1f1;cursor:pointer}.datepicker table tr td.disabled,.datepicker table tr td.disabled:hover{background:0 0;color:#9c9c9c;cursor:default}.datepicker table tr td.highlighted{color:#000;background-color:#d9edf7;border-color:#85c5e5;border-radius:0}.datepicker table tr td.highlighted.focus,.datepicker table tr td.highlighted:focus{color:#000;background-color:#afd9ee;border-color:#298fc2}.datepicker table tr td.highlighted:hover{color:#000;background-color:#afd9ee;border-color:#52addb}.datepicker table tr td.highlighted.active,.datepicker table tr td.highlighted:active,.open>.dropdown-toggle.datepicker table tr td.highlighted{color:#000;background-color:#afd9ee;background-image:none;border-color:#52addb}.datepicker table tr td.highlighted.active.focus,.datepicker table tr td.highlighted.active:focus,.datepicker table tr td.highlighted.active:hover,.datepicker table tr td.highlighted:active.focus,.datepicker table tr td.highlighted:active:focus,.datepicker table tr td.highlighted:active:hover,.open>.dropdown-toggle.datepicker table tr td.highlighted.focus,.open>.dropdown-toggle.datepicker table tr td.highlighted:focus,.open>.dropdown-toggle.datepicker table tr td.highlighted:hover{color:#000;background-color:#91cbe8;border-color:#298fc2}.datepicker table tr td.highlighted.disabled.focus,.datepicker table tr td.highlighted.disabled:focus,.datepicker table tr td.highlighted.disabled:hover,.datepicker table tr td.highlighted[disabled].focus,.datepicker table tr td.highlighted[disabled]:focus,.datepicker table tr td.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.highlighted.focus,fieldset[disabled] .datepicker table tr td.highlighted:focus,fieldset[disabled] .datepicker table tr td.highlighted:hover{background-color:#d9edf7;border-color:#85c5e5}.datepicker table tr td.highlighted .badge{color:#d9edf7;background-color:#000}.datepicker table tr td.highlighted.focused{background:#afd9ee}.datepicker table tr td.highlighted.disabled,.datepicker table tr td.highlighted.disabled:active{background:#d9edf7;color:#9c9c9c}.datepicker table tr td.today{color:#000;background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today.focus,.datepicker table tr td.today:focus{color:#000;background-color:#ffc966;border-color:#b37400}.datepicker table tr td.today:hover{color:#000;background-color:#ffc966;border-color:#f59e00}.datepicker table tr td.today.active,.datepicker table tr td.today:active,.open>.dropdown-toggle.datepicker table tr td.today{color:#000;background-color:#ffc966;background-image:none;border-color:#f59e00}.datepicker table tr td.today.active.focus,.datepicker table tr td.today.active:focus,.datepicker table tr td.today.active:hover,.datepicker table tr td.today:active.focus,.datepicker table tr td.today:active:focus,.datepicker table tr td.today:active:hover,.open>.dropdown-toggle.datepicker table tr td.today.focus,.open>.dropdown-toggle.datepicker table tr td.today:focus,.open>.dropdown-toggle.datepicker table tr td.today:hover{color:#000;background-color:#ffbc42;border-color:#b37400}.datepicker table tr td.today.disabled.focus,.datepicker table tr td.today.disabled:focus,.datepicker table tr td.today.disabled:hover,.datepicker table tr td.today[disabled].focus,.datepicker table tr td.today[disabled]:focus,.datepicker table tr td.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.today.focus,fieldset[disabled] .datepicker table tr td.today:focus,fieldset[disabled] .datepicker table tr td.today:hover{background-color:#ffdb99;border-color:#ffb733}.datepicker table tr td.today .badge{color:#ffdb99;background-color:#000}.datepicker table tr td.today.focused{background:#ffc966}.datepicker table tr td.today.disabled,.datepicker table tr td.today.disabled:active{background:#ffdb99;color:#9c9c9c}.datepicker table tr td.range{color:#000;background-color:#f1f1f1;border-color:#bebebe;border-radius:0}.datepicker table tr td.range.focus,.datepicker table tr td.range:focus{color:#000;background-color:#d8d8d8;border-color:#7f7f7f}.datepicker table tr td.range:hover{color:#000;background-color:#d8d8d8;border-color:#a0a0a0}.datepicker table tr td.range.active,.datepicker table tr td.range:active,.open>.dropdown-toggle.datepicker table tr td.range{color:#000;background-color:#d8d8d8;background-image:none;border-color:#a0a0a0}.datepicker table tr td.range.active.focus,.datepicker table tr td.range.active:focus,.datepicker table tr td.range.active:hover,.datepicker table tr td.range:active.focus,.datepicker table tr td.range:active:focus,.datepicker table tr td.range:active:hover,.open>.dropdown-toggle.datepicker table tr td.range.focus,.open>.dropdown-toggle.datepicker table tr td.range:focus,.open>.dropdown-toggle.datepicker table tr td.range:hover{color:#000;background-color:#c6c6c6;border-color:#7f7f7f}.datepicker table tr td.range.disabled.focus,.datepicker table tr td.range.disabled:focus,.datepicker table tr td.range.disabled:hover,.datepicker table tr td.range[disabled].focus,.datepicker table tr td.range[disabled]:focus,.datepicker table tr td.range[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.focus,fieldset[disabled] .datepicker table tr td.range:focus,fieldset[disabled] .datepicker table tr td.range:hover{background-color:#f1f1f1;border-color:#bebebe}.datepicker table tr td.range .badge{color:#f1f1f1;background-color:#000}.datepicker table tr td.range.focused{background:#d8d8d8}.datepicker table tr td.range.disabled,.datepicker table tr td.range.disabled:active{background:#f1f1f1;color:#9c9c9c}.datepicker table tr td.range.highlighted{color:#000;background-color:#e5eff4;border-color:#9dc3d6}.datepicker table tr td.range.highlighted.focus,.datepicker table tr td.range.highlighted:focus{color:#000;background-color:#c1d9e5;border-color:#488bac}.datepicker table tr td.range.highlighted:hover{color:#000;background-color:#c1d9e5;border-color:#72a9c4}.datepicker table tr td.range.highlighted.active,.datepicker table tr td.range.highlighted:active,.open>.dropdown-toggle.datepicker table tr td.range.highlighted{color:#000;background-color:#c1d9e5;background-image:none;border-color:#72a9c4}.datepicker table tr td.range.highlighted.active.focus,.datepicker table tr td.range.highlighted.active:focus,.datepicker table tr td.range.highlighted.active:hover,.datepicker table tr td.range.highlighted:active.focus,.datepicker table tr td.range.highlighted:active:focus,.datepicker table tr td.range.highlighted:active:hover,.open>.dropdown-toggle.datepicker table tr td.range.highlighted.focus,.open>.dropdown-toggle.datepicker table tr td.range.highlighted:focus,.open>.dropdown-toggle.datepicker table tr td.range.highlighted:hover{color:#000;background-color:#a8cadb;border-color:#488bac}.datepicker table tr td.range.highlighted.disabled.focus,.datepicker table tr td.range.highlighted.disabled:focus,.datepicker table tr td.range.highlighted.disabled:hover,.datepicker table tr td.range.highlighted[disabled].focus,.datepicker table tr td.range.highlighted[disabled]:focus,.datepicker table tr td.range.highlighted[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.highlighted.focus,fieldset[disabled] .datepicker table tr td.range.highlighted:focus,fieldset[disabled] .datepicker table tr td.range.highlighted:hover{background-color:#e5eff4;border-color:#9dc3d6}.datepicker table tr td.range.highlighted .badge{color:#e5eff4;background-color:#000}.datepicker table tr td.range.highlighted.focused{background:#c1d9e5}.datepicker table tr td.range.highlighted.disabled,.datepicker table tr td.range.highlighted.disabled:active{background:#e5eff4;color:#9c9c9c}.datepicker table tr td.range.today{color:#000;background-color:#f8cb79;border-color:#f3a618}.datepicker table tr td.range.today.focus,.datepicker table tr td.range.today:focus{color:#000;background-color:#f6b848;border-color:#855807}.datepicker table tr td.range.today:hover{color:#000;background-color:#f6b848;border-color:#c4820a}.datepicker table tr td.range.today.active,.datepicker table tr td.range.today:active,.open>.dropdown-toggle.datepicker table tr td.range.today{color:#000;background-color:#f6b848;background-image:none;border-color:#c4820a}.datepicker table tr td.range.today.active.focus,.datepicker table tr td.range.today.active:focus,.datepicker table tr td.range.today.active:hover,.datepicker table tr td.range.today:active.focus,.datepicker table tr td.range.today:active:focus,.datepicker table tr td.range.today:active:hover,.open>.dropdown-toggle.datepicker table tr td.range.today.focus,.open>.dropdown-toggle.datepicker table tr td.range.today:focus,.open>.dropdown-toggle.datepicker table tr td.range.today:hover{color:#000;background-color:#f4ab26;border-color:#855807}.datepicker table tr td.range.today.disabled.focus,.datepicker table tr td.range.today.disabled:focus,.datepicker table tr td.range.today.disabled:hover,.datepicker table tr td.range.today[disabled].focus,.datepicker table tr td.range.today[disabled]:focus,.datepicker table tr td.range.today[disabled]:hover,fieldset[disabled] .datepicker table tr td.range.today.focus,fieldset[disabled] .datepicker table tr td.range.today:focus,fieldset[disabled] .datepicker table tr td.range.today:hover{background-color:#f8cb79;border-color:#f3a618}.datepicker table tr td.range.today .badge{color:#f8cb79;background-color:#000}.datepicker table tr td.range.today.disabled,.datepicker table tr td.range.today.disabled:active{background:#f8cb79;color:#9c9c9c}.datepicker table tr td.selected,.datepicker table tr td.selected.highlighted{color:#fff;background-color:#9c9c9c;border-color:#555;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.selected.focus,.datepicker table tr td.selected.highlighted.focus,.datepicker table tr td.selected.highlighted:focus,.datepicker table tr td.selected:focus{color:#fff;background-color:#838383;border-color:#161616}.datepicker table tr td.selected.highlighted:hover,.datepicker table tr td.selected:hover{color:#fff;background-color:#838383;border-color:#373737}.datepicker table tr td.selected.active,.datepicker table tr td.selected.highlighted.active,.datepicker table tr td.selected.highlighted:active,.datepicker table tr td.selected:active,.open>.dropdown-toggle.datepicker table tr td.selected,.open>.dropdown-toggle.datepicker table tr td.selected.highlighted{color:#fff;background-color:#838383;background-image:none;border-color:#373737}.datepicker table tr td.selected.active.focus,.datepicker table tr td.selected.active:focus,.datepicker table tr td.selected.active:hover,.datepicker table tr td.selected.highlighted.active.focus,.datepicker table tr td.selected.highlighted.active:focus,.datepicker table tr td.selected.highlighted.active:hover,.datepicker table tr td.selected.highlighted:active.focus,.datepicker table tr td.selected.highlighted:active:focus,.datepicker table tr td.selected.highlighted:active:hover,.datepicker table tr td.selected:active.focus,.datepicker table tr td.selected:active:focus,.datepicker table tr td.selected:active:hover,.open>.dropdown-toggle.datepicker table tr td.selected.focus,.open>.dropdown-toggle.datepicker table tr td.selected.highlighted.focus,.open>.dropdown-toggle.datepicker table tr td.selected.highlighted:focus,.open>.dropdown-toggle.datepicker table tr td.selected.highlighted:hover,.open>.dropdown-toggle.datepicker table tr td.selected:focus,.open>.dropdown-toggle.datepicker table tr td.selected:hover{color:#fff;background-color:#717171;border-color:#161616}.datepicker table tr td.selected.disabled.focus,.datepicker table tr td.selected.disabled:focus,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected.highlighted.disabled.focus,.datepicker table tr td.selected.highlighted.disabled:focus,.datepicker table tr td.selected.highlighted.disabled:hover,.datepicker table tr td.selected.highlighted[disabled].focus,.datepicker table tr td.selected.highlighted[disabled]:focus,.datepicker table tr td.selected.highlighted[disabled]:hover,.datepicker table tr td.selected[disabled].focus,.datepicker table tr td.selected[disabled]:focus,.datepicker table tr td.selected[disabled]:hover,fieldset[disabled] .datepicker table tr td.selected.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted.focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:focus,fieldset[disabled] .datepicker table tr td.selected.highlighted:hover,fieldset[disabled] .datepicker table tr td.selected:focus,fieldset[disabled] .datepicker table tr td.selected:hover{background-color:#9c9c9c;border-color:#555}.datepicker table tr td.selected .badge,.datepicker table tr td.selected.highlighted .badge{color:#9c9c9c;background-color:#fff}.datepicker table tr td.active,.datepicker table tr td.active.highlighted{color:#fff;background-color:#0088ce;border-color:#00659c;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td.active.focus,.datepicker table tr td.active.highlighted.focus,.datepicker table tr td.active.highlighted:focus,.datepicker table tr td.active:focus{color:#fff;background-color:#00669b;border-color:#00121d}.datepicker table tr td.active.highlighted:hover,.datepicker table tr td.active:hover{color:#fff;background-color:#00669b;border-color:#003d5f}.datepicker table tr td.active.active,.datepicker table tr td.active.highlighted.active,.datepicker table tr td.active.highlighted:active,.datepicker table tr td.active:active,.open>.dropdown-toggle.datepicker table tr td.active,.open>.dropdown-toggle.datepicker table tr td.active.highlighted{color:#fff;background-color:#00669b;background-image:none;border-color:#003d5f}.datepicker table tr td.active.active.focus,.datepicker table tr td.active.active:focus,.datepicker table tr td.active.active:hover,.datepicker table tr td.active.highlighted.active.focus,.datepicker table tr td.active.highlighted.active:focus,.datepicker table tr td.active.highlighted.active:hover,.datepicker table tr td.active.highlighted:active.focus,.datepicker table tr td.active.highlighted:active:focus,.datepicker table tr td.active.highlighted:active:hover,.datepicker table tr td.active:active.focus,.datepicker table tr td.active:active:focus,.datepicker table tr td.active:active:hover,.open>.dropdown-toggle.datepicker table tr td.active.focus,.open>.dropdown-toggle.datepicker table tr td.active.highlighted.focus,.open>.dropdown-toggle.datepicker table tr td.active.highlighted:focus,.open>.dropdown-toggle.datepicker table tr td.active.highlighted:hover,.open>.dropdown-toggle.datepicker table tr td.active:focus,.open>.dropdown-toggle.datepicker table tr td.active:hover{color:#fff;background-color:#004f77;border-color:#00121d}.datepicker table tr td.active.disabled.focus,.datepicker table tr td.active.disabled:focus,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active.highlighted.disabled.focus,.datepicker table tr td.active.highlighted.disabled:focus,.datepicker table tr td.active.highlighted.disabled:hover,.datepicker table tr td.active.highlighted[disabled].focus,.datepicker table tr td.active.highlighted[disabled]:focus,.datepicker table tr td.active.highlighted[disabled]:hover,.datepicker table tr td.active[disabled].focus,.datepicker table tr td.active[disabled]:focus,.datepicker table tr td.active[disabled]:hover,fieldset[disabled] .datepicker table tr td.active.focus,fieldset[disabled] .datepicker table tr td.active.highlighted.focus,fieldset[disabled] .datepicker table tr td.active.highlighted:focus,fieldset[disabled] .datepicker table tr td.active.highlighted:hover,fieldset[disabled] .datepicker table tr td.active:focus,fieldset[disabled] .datepicker table tr td.active:hover{background-color:#0088ce;border-color:#00659c}.datepicker table tr td.active .badge,.datepicker table tr td.active.highlighted .badge{color:#0088ce;background-color:#fff}.datepicker table tr td span{display:block;width:23%;height:54px;line-height:54px;float:left;margin:1%;cursor:pointer;border-radius:4px}.datepicker table tr td span.focused,.datepicker table tr td span:hover{background:#f1f1f1}.datepicker table tr td span.disabled,.datepicker table tr td span.disabled:hover{background:0 0;color:#9c9c9c;cursor:default}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{color:#fff;background-color:#0088ce;border-color:#00659c;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover.focus,.datepicker table tr td span.active.disabled:hover:focus,.datepicker table tr td span.active.focus,.datepicker table tr td span.active:focus,.datepicker table tr td span.active:hover.focus,.datepicker table tr td span.active:hover:focus{color:#fff;background-color:#00669b;border-color:#00121d}.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover:hover,.datepicker table tr td span.active:hover,.datepicker table tr td span.active:hover:hover{color:#fff;background-color:#00669b;border-color:#003d5f}.datepicker table tr td span.active.active,.datepicker table tr td span.active.disabled.active,.datepicker table tr td span.active.disabled:active,.datepicker table tr td span.active.disabled:hover.active,.datepicker table tr td span.active.disabled:hover:active,.datepicker table tr td span.active:active,.datepicker table tr td span.active:hover.active,.datepicker table tr td span.active:hover:active,.open>.dropdown-toggle.datepicker table tr td span.active,.open>.dropdown-toggle.datepicker table tr td span.active.disabled,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open>.dropdown-toggle.datepicker table tr td span.active:hover{color:#fff;background-color:#00669b;background-image:none;border-color:#003d5f}.datepicker table tr td span.active.active.focus,.datepicker table tr td span.active.active:focus,.datepicker table tr td span.active.active:hover,.datepicker table tr td span.active.disabled.active.focus,.datepicker table tr td span.active.disabled.active:focus,.datepicker table tr td span.active.disabled.active:hover,.datepicker table tr td span.active.disabled:active.focus,.datepicker table tr td span.active.disabled:active:focus,.datepicker table tr td span.active.disabled:active:hover,.datepicker table tr td span.active.disabled:hover.active.focus,.datepicker table tr td span.active.disabled:hover.active:focus,.datepicker table tr td span.active.disabled:hover.active:hover,.datepicker table tr td span.active.disabled:hover:active.focus,.datepicker table tr td span.active.disabled:hover:active:focus,.datepicker table tr td span.active.disabled:hover:active:hover,.datepicker table tr td span.active:active.focus,.datepicker table tr td span.active:active:focus,.datepicker table tr td span.active:active:hover,.datepicker table tr td span.active:hover.active.focus,.datepicker table tr td span.active:hover.active:focus,.datepicker table tr td span.active:hover.active:hover,.datepicker table tr td span.active:hover:active.focus,.datepicker table tr td span.active:hover:active:focus,.datepicker table tr td span.active:hover:active:hover,.open>.dropdown-toggle.datepicker table tr td span.active.disabled.focus,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:focus,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:hover,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:hover.focus,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:hover:focus,.open>.dropdown-toggle.datepicker table tr td span.active.disabled:hover:hover,.open>.dropdown-toggle.datepicker table tr td span.active.focus,.open>.dropdown-toggle.datepicker table tr td span.active:focus,.open>.dropdown-toggle.datepicker table tr td span.active:hover,.open>.dropdown-toggle.datepicker table tr td span.active:hover.focus,.open>.dropdown-toggle.datepicker table tr td span.active:hover:focus,.open>.dropdown-toggle.datepicker table tr td span.active:hover:hover{color:#fff;background-color:#004f77;border-color:#00121d}.datepicker table tr td span.active.disabled.disabled.focus,.datepicker table tr td span.active.disabled.disabled:focus,.datepicker table tr td span.active.disabled.disabled:hover,.datepicker table tr td span.active.disabled.focus,.datepicker table tr td span.active.disabled:focus,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active.disabled:hover.disabled.focus,.datepicker table tr td span.active.disabled:hover.disabled:focus,.datepicker table tr td span.active.disabled:hover.disabled:hover,.datepicker table tr td span.active.disabled:hover[disabled].focus,.datepicker table tr td span.active.disabled:hover[disabled]:focus,.datepicker table tr td span.active.disabled:hover[disabled]:hover,.datepicker table tr td span.active.disabled[disabled].focus,.datepicker table tr td span.active.disabled[disabled]:focus,.datepicker table tr td span.active.disabled[disabled]:hover,.datepicker table tr td span.active:hover.disabled.focus,.datepicker table tr td span.active:hover.disabled:focus,.datepicker table tr td span.active:hover.disabled:hover,.datepicker table tr td span.active:hover[disabled].focus,.datepicker table tr td span.active:hover[disabled]:focus,.datepicker table tr td span.active:hover[disabled]:hover,.datepicker table tr td span.active[disabled].focus,.datepicker table tr td span.active[disabled]:focus,.datepicker table tr td span.active[disabled]:hover,fieldset[disabled] .datepicker table tr td span.active.disabled.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover,fieldset[disabled] .datepicker table tr td span.active.disabled:hover.focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,fieldset[disabled] .datepicker table tr td span.active.focus,fieldset[disabled] .datepicker table tr td span.active:focus,fieldset[disabled] .datepicker table tr td span.active:hover,fieldset[disabled] .datepicker table tr td span.active:hover.focus,fieldset[disabled] .datepicker table tr td span.active:hover:focus,fieldset[disabled] .datepicker table tr td span.active:hover:hover{background-color:#0088ce;border-color:#00659c}.datepicker table tr td span.active .badge,.datepicker table tr td span.active.disabled .badge,.datepicker table tr td span.active.disabled:hover .badge,.datepicker table tr td span.active:hover .badge{color:#0088ce;background-color:#fff}.datepicker table tr td span.new,.datepicker table tr td span.old{color:#9c9c9c}.datepicker .datepicker-switch{width:145px}.datepicker .datepicker-switch,.datepicker .next,.datepicker .prev,.datepicker tfoot tr th{cursor:pointer}.datepicker .datepicker-switch:hover,.datepicker .next:hover,.datepicker .prev:hover,.datepicker tfoot tr th:hover{background:#f1f1f1}.datepicker .next.disabled,.datepicker .prev.disabled{visibility:hidden}.datepicker .cw{font-size:10px;width:12px;padding:0 2px 0 5px;vertical-align:middle}.input-group.date .input-group-addon{cursor:pointer}.input-daterange{width:100%}.input-daterange input{text-align:center}.input-daterange input:first-child{border-radius:3px 0 0 3px}.input-daterange input:last-child{border-radius:0 3px 3px 0}.input-daterange .input-group-addon{width:auto;min-width:16px;padding:4px 5px;line-height:1.66666667;border-width:1px 0;margin-left:-5px;margin-right:-5px}select.bs-select-hidden,select.selectpicker{display:none!important}.bootstrap-select>.dropdown-toggle{width:100%;padding-right:25px;z-index:1}.bootstrap-select>.dropdown-toggle.bs-placeholder,.bootstrap-select>.dropdown-toggle.bs-placeholder:active,.bootstrap-select>.dropdown-toggle.bs-placeholder:focus,.bootstrap-select>.dropdown-toggle.bs-placeholder:hover{color:#999}.bootstrap-select>select{position:absolute!important;bottom:0;left:50%;display:block!important;width:.5px!important;height:100%!important;padding:0!important;opacity:0!important;border:none}.bootstrap-select>select.mobile-device{top:0;left:0;display:block!important;width:100%!important;z-index:2}.error .bootstrap-select .dropdown-toggle,.has-error .bootstrap-select .dropdown-toggle{border-color:#b94a48}.bootstrap-select.fit-width{width:auto!important}.bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:220px}.bootstrap-select .dropdown-toggle:focus{outline:thin dotted #333!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px}.bootstrap-select.form-control{margin-bottom:0;padding:0;border:none}.bootstrap-select.form-control:not([class*=col-]){width:100%}.bootstrap-select.form-control.input-group-btn{z-index:auto}.bootstrap-select.form-control.input-group-btn:not(:first-child):not(:last-child)>.btn{border-radius:0}.bootstrap-select.btn-group:not(.input-group-btn),.bootstrap-select.btn-group[class*=col-]{float:none;display:inline-block;margin-left:0}.bootstrap-select.btn-group.dropdown-menu-right,.bootstrap-select.btn-group[class*=col-].dropdown-menu-right,.row .bootstrap-select.btn-group[class*=col-].dropdown-menu-right{float:right}.form-group .bootstrap-select.btn-group,.form-horizontal .bootstrap-select.btn-group,.form-inline .bootstrap-select.btn-group{margin-bottom:0}.form-group-lg .bootstrap-select.btn-group.form-control,.form-group-sm .bootstrap-select.btn-group.form-control{padding:0}.form-group-lg .bootstrap-select.btn-group.form-control .dropdown-toggle,.form-group-sm .bootstrap-select.btn-group.form-control .dropdown-toggle{height:100%;font-size:inherit;line-height:inherit;border-radius:inherit}.form-inline .bootstrap-select.btn-group .form-control{width:100%}.bootstrap-select.btn-group.disabled,.bootstrap-select.btn-group>.disabled{cursor:not-allowed}.bootstrap-select.btn-group.disabled:focus,.bootstrap-select.btn-group>.disabled:focus{outline:0!important}.bootstrap-select.btn-group.bs-container{position:absolute;height:0!important;padding:0!important}.bootstrap-select.btn-group.bs-container .dropdown-menu{z-index:1060}.bootstrap-select.btn-group .dropdown-toggle .filter-option{display:inline-block;overflow:hidden;width:100%;text-align:left}.bootstrap-select.btn-group .dropdown-toggle .caret{position:absolute;top:50%;right:12px;margin-top:-2px;vertical-align:middle}.bootstrap-select.btn-group[class*=col-] .dropdown-toggle{width:100%}.bootstrap-select.btn-group .dropdown-menu{min-width:100%;box-sizing:border-box}.bootstrap-select.btn-group .dropdown-menu.inner{position:static;float:none;border:0;padding:0;margin:0;border-radius:0;box-shadow:none}.bootstrap-select.btn-group .dropdown-menu li{position:relative}.bootstrap-select.btn-group .dropdown-menu li.active small{color:#fff}.bootstrap-select.btn-group .dropdown-menu li.disabled a{cursor:not-allowed}.bootstrap-select.btn-group .dropdown-menu li a{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.bootstrap-select.btn-group .dropdown-menu li a.opt{position:relative;padding-left:2.25em}.bootstrap-select.btn-group .dropdown-menu li a span.check-mark{display:none}.bootstrap-select.btn-group .dropdown-menu li a span.text{display:inline-block}.bootstrap-select.btn-group .dropdown-menu li small{padding-left:.5em}.bootstrap-select.btn-group .dropdown-menu .notify{position:absolute;bottom:5px;width:96%;margin:0 2%;min-height:26px;padding:3px 5px;background:#f5f5f5;border:1px solid #e3e3e3;box-shadow:inset 0 1px 1px rgba(0,0,0,.05);pointer-events:none;opacity:.9;box-sizing:border-box}.bootstrap-select.btn-group .no-results{padding:3px;background:#f5f5f5;margin:0 5px;white-space:nowrap}.bootstrap-select.btn-group.fit-width .dropdown-toggle .filter-option{position:static}.bootstrap-select.btn-group.fit-width .dropdown-toggle .caret{position:static;top:auto;margin-top:-1px}.bootstrap-select.btn-group.show-tick .dropdown-menu li.selected a span.check-mark{position:absolute;display:inline-block;right:15px;margin-top:5px}.bootstrap-select.btn-group.show-tick .dropdown-menu li a span.text{margin-right:34px}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle{z-index:1061}.bootstrap-select.show-menu-arrow .dropdown-toggle:before{content:'';border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid rgba(204,204,204,.2);position:absolute;bottom:-4px;left:9px;display:none}.bootstrap-select.show-menu-arrow .dropdown-toggle:after{content:'';border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;position:absolute;bottom:-4px;left:10px;display:none}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:before{bottom:auto;top:-3px;border-top:7px solid rgba(204,204,204,.2);border-bottom:0}.bootstrap-select.show-menu-arrow.dropup .dropdown-toggle:after{bottom:auto;top:-3px;border-top:6px solid #fff;border-bottom:0}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:before{right:12px;left:auto}.bootstrap-select.show-menu-arrow.pull-right .dropdown-toggle:after{right:13px;left:auto}.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:after,.bootstrap-select.show-menu-arrow.open>.dropdown-toggle:before{display:block}.bs-actionsbox,.bs-donebutton,.bs-searchbox{padding:4px 8px}.bs-actionsbox{width:100%;box-sizing:border-box}.bs-actionsbox .btn-group button{width:50%}.bs-donebutton{float:left;width:100%;box-sizing:border-box}.bs-donebutton .btn-group button{width:100%}.bs-searchbox+.bs-actionsbox{padding:0 8px 4px}.bs-searchbox .form-control{margin-bottom:0;width:100%;float:none}.bootstrap-switch{display:inline-block;direction:ltr;cursor:pointer;border-radius:1px;border:1px solid;border-color:#bbb;position:relative;text-align:left;overflow:hidden;line-height:8px;z-index:0;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-switch .bootstrap-switch-container{display:inline-block;top:0;border-radius:1px;transform:translate3d(0,0,0)}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on,.bootstrap-switch .bootstrap-switch-label{box-sizing:border-box;cursor:pointer;display:table-cell;vertical-align:middle;padding:2px 6px;font-size:12px;line-height:20px}.bootstrap-switch .bootstrap-switch-handle-off,.bootstrap-switch .bootstrap-switch-handle-on{text-align:center;z-index:1}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-primary,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-primary{color:#fff;background:#0088ce}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-info,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-info{color:#fff;background:#00659c}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-success,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-success{color:#fff;background:#3f9c35}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-warning,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-warning{background:#ec7a08;color:#fff}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-danger,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-danger{color:#fff;background:#a30000}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{color:#000;background:#f1f1f1}.bootstrap-switch .bootstrap-switch-label{text-align:center;margin-top:-1px;margin-bottom:-1px;z-index:100;color:#4d5258;background:#f1f1f1}.bootstrap-switch span::before{content:"\200b"}.bootstrap-switch .bootstrap-switch-handle-on{border-top-left-radius:1px - 1;border-bottom-left-radius:1px - 1}.bootstrap-switch .bootstrap-switch-handle-off{border-top-right-radius:1px - 1;border-bottom-right-radius:1px - 1}.bootstrap-switch input[type=checkbox],.bootstrap-switch input[type=radio]{position:absolute!important;top:0;left:0;margin:0;z-index:-1;opacity:0;visibility:hidden}.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-mini .bootstrap-switch-label{padding:1px 5px;font-size:11px;line-height:1.5}.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-small .bootstrap-switch-label{padding:2px 6px;font-size:11px;line-height:1.5}.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-large .bootstrap-switch-label{padding:2px 10px;font-size:14px;line-height:1.3333333}.bootstrap-switch.bootstrap-switch-disabled,.bootstrap-switch.bootstrap-switch-indeterminate,.bootstrap-switch.bootstrap-switch-readonly{cursor:default!important}.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-disabled .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-indeterminate .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-off,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-handle-on,.bootstrap-switch.bootstrap-switch-readonly .bootstrap-switch-label{opacity:.5;cursor:default!important}.bootstrap-switch.bootstrap-switch-animate .bootstrap-switch-container{transition:margin-left .5s}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-on{border-top-left-radius:0;border-bottom-left-radius:0;border-top-right-radius:1px - 1;border-bottom-right-radius:1px - 1}.bootstrap-switch.bootstrap-switch-inverse .bootstrap-switch-handle-off{border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:1px - 1;border-bottom-left-radius:1px - 1}.bootstrap-switch.bootstrap-switch-focused{border-color:#0088ce;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,136,206,.6)}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-off .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-on .bootstrap-switch-label{border-top-right-radius:1px - 1;border-bottom-right-radius:1px - 1}.bootstrap-switch.bootstrap-switch-inverse.bootstrap-switch-on .bootstrap-switch-label,.bootstrap-switch.bootstrap-switch-off .bootstrap-switch-label{border-top-left-radius:1px - 1;border-bottom-left-radius:1px - 1}.bootstrap-touchspin .input-group-btn-vertical{position:relative;white-space:nowrap;width:1%;vertical-align:middle;display:table-cell}.bootstrap-touchspin .input-group-btn-vertical>.btn{display:block;float:none;width:100%;max-width:100%;padding:8px 10px;margin-left:-1px;position:relative}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up{border-radius:0;border-top-right-radius:4px}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down{margin-top:-2px;border-radius:0;border-bottom-right-radius:4px}.bootstrap-touchspin .input-group-btn-vertical i{position:absolute;top:3px;left:5px;font-size:9px;font-weight:400}.c3 svg{font:10px sans-serif;-webkit-tap-highlight-color:transparent}.c3 line,.c3 path{fill:none;stroke:#000}.c3 text{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.c3-bars path,.c3-event-rect,.c3-legend-item-tile,.c3-xgrid-focus,.c3-ygrid{shape-rendering:crispEdges}.c3-chart-arc path{stroke:#fff}.c3-chart-arc rect{stroke:#fff;stroke-width:1}.c3-chart-arc text{fill:#fff;font-size:13px}.c3-grid line{stroke:#aaa}.c3-grid text{fill:#aaa}.c3-xgrid,.c3-ygrid{stroke-dasharray:3 3}.c3-text.c3-empty{fill:grey;font-size:2em}.c3-line{stroke-width:1px}.c3-circle._expanded_{stroke-width:1px;stroke:#fff}.c3-selected-circle{fill:#fff;stroke-width:2px}.c3-bar{stroke-width:0}.c3-bar._expanded_{fill-opacity:1;fill-opacity:.75}.c3-target.c3-focused{opacity:1}.c3-target.c3-focused path.c3-line,.c3-target.c3-focused path.c3-step{stroke-width:2px}.c3-target.c3-defocused{opacity:.3!important}.c3-region{fill:#4682b4;fill-opacity:.1}.c3-brush .extent{fill-opacity:.1}.c3-legend-item{font-size:12px}.c3-legend-item-hidden{opacity:.15}.c3-legend-background{opacity:.75;fill:#fff;stroke:#d3d3d3;stroke-width:1}.c3-title{font:14px sans-serif}.c3-tooltip-container{z-index:10}.c3-tooltip{border-collapse:collapse;border-spacing:0;background-color:#fff;empty-cells:show;box-shadow:7px 7px 12px -9px #777;opacity:.9}.c3-tooltip tr{border:1px solid #ccc}.c3-tooltip th{background-color:#aaa;font-size:14px;padding:2px 5px;text-align:left;color:#fff}.c3-tooltip td{font-size:13px;padding:3px 6px;background-color:#fff;border-left:1px dotted #999}.c3-tooltip td>span{display:inline-block;width:10px;height:10px;margin-right:6px}.c3-tooltip td.value{text-align:right}.c3-area{stroke-width:0;opacity:.2}.c3-chart-arcs-title{dominant-baseline:middle;font-size:1.3em}.c3-chart-arcs .c3-chart-arcs-background{fill:#e0e0e0;stroke:#fff}.c3-chart-arcs .c3-chart-arcs-gauge-unit{fill:#000;font-size:16px}.c3-chart-arcs .c3-chart-arcs-gauge-max{fill:#777}.c3-chart-arcs .c3-chart-arcs-gauge-min{fill:#777}.c3-chart-arc .c3-gauge-value{fill:#000}.c3-chart-arc.c3-target g path{opacity:1}.c3-chart-arc.c3-target.c3-focused g path{opacity:1}/*! + * Datetimepicker for Bootstrap 3 + * version : 4.17.47 + * https://github.com/Eonasdan/bootstrap-datetimepicker/ + */.bootstrap-datetimepicker-widget{list-style:none}.bootstrap-datetimepicker-widget.dropdown-menu{display:block;margin:2px 0;padding:4px;width:19em}@media (min-width:768px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:992px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}@media (min-width:1200px){.bootstrap-datetimepicker-widget.dropdown-menu.timepicker-sbs{width:38em}}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:'';display:inline-block;position:absolute}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:before{border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0,0,0,.2);top:-7px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom:after{border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #fff;top:-6px;left:8px}.bootstrap-datetimepicker-widget.dropdown-menu.top:before{border-left:7px solid transparent;border-right:7px solid transparent;border-top:7px solid #ccc;border-top-color:rgba(0,0,0,.2);bottom:-7px;left:6px}.bootstrap-datetimepicker-widget.dropdown-menu.top:after{border-left:6px solid transparent;border-right:6px solid transparent;border-top:6px solid #fff;bottom:-6px;left:7px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:before{left:auto;right:6px}.bootstrap-datetimepicker-widget.dropdown-menu.pull-right:after{left:auto;right:7px}.bootstrap-datetimepicker-widget .list-unstyled{margin:0}.bootstrap-datetimepicker-widget a[data-action]{padding:6px 0}.bootstrap-datetimepicker-widget a[data-action]:active{box-shadow:none}.bootstrap-datetimepicker-widget .timepicker-hour,.bootstrap-datetimepicker-widget .timepicker-minute,.bootstrap-datetimepicker-widget .timepicker-second{width:54px;font-weight:700;font-size:1em;margin:0}.bootstrap-datetimepicker-widget button[data-action]{padding:6px}.bootstrap-datetimepicker-widget .btn[data-action=incrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Hours";content:"Increment Hours"}.bootstrap-datetimepicker-widget .btn[data-action=incrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Increment Minutes";content:"Increment Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=decrementHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Hours";content:"Decrement Hours"}.bootstrap-datetimepicker-widget .btn[data-action=decrementMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Decrement Minutes";content:"Decrement Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=showHours]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Hours"}.bootstrap-datetimepicker-widget .btn[data-action=showMinutes]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Show Minutes"}.bootstrap-datetimepicker-widget .btn[data-action=togglePeriod]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle AM/PM"}.bootstrap-datetimepicker-widget .btn[data-action=clear]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Clear the picker"}.bootstrap-datetimepicker-widget .btn[data-action=today]::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Set the date to today"}.bootstrap-datetimepicker-widget .picker-switch{text-align:center}.bootstrap-datetimepicker-widget .picker-switch::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Toggle Date and Time Screens"}.bootstrap-datetimepicker-widget .picker-switch td{padding:0;margin:0;height:auto;width:auto;line-height:inherit}.bootstrap-datetimepicker-widget .picker-switch td span{line-height:2.5;height:2.5em;width:100%}.bootstrap-datetimepicker-widget table{width:100%;margin:0}.bootstrap-datetimepicker-widget table td,.bootstrap-datetimepicker-widget table th{text-align:center;border-radius:1px}.bootstrap-datetimepicker-widget table th{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table th.picker-switch{width:145px}.bootstrap-datetimepicker-widget table th.disabled,.bootstrap-datetimepicker-widget table th.disabled:hover{background:0 0;color:#9c9c9c;cursor:not-allowed}.bootstrap-datetimepicker-widget table th.prev::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Previous Month"}.bootstrap-datetimepicker-widget table th.next::after{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0;content:"Next Month"}.bootstrap-datetimepicker-widget table thead tr:first-child th{cursor:pointer}.bootstrap-datetimepicker-widget table thead tr:first-child th:hover{background:0 0}.bootstrap-datetimepicker-widget table td{height:54px;line-height:54px;width:54px}.bootstrap-datetimepicker-widget table td.cw{font-size:.8em;height:20px;line-height:20px;color:#9c9c9c}.bootstrap-datetimepicker-widget table td.day{height:20px;line-height:20px;width:20px}.bootstrap-datetimepicker-widget table td.day:hover,.bootstrap-datetimepicker-widget table td.hour:hover,.bootstrap-datetimepicker-widget table td.minute:hover,.bootstrap-datetimepicker-widget table td.second:hover{background:0 0;cursor:pointer}.bootstrap-datetimepicker-widget table td.new,.bootstrap-datetimepicker-widget table td.old{color:#9c9c9c}.bootstrap-datetimepicker-widget table td.today{position:relative}.bootstrap-datetimepicker-widget table td.today:before{content:'';display:inline-block;border:solid transparent;border-width:0 0 7px 7px;border-bottom-color:#0088ce;border-top-color:rgba(0,0,0,.2);position:absolute;bottom:4px;right:4px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background-color:#0088ce;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td.active.today:before{border-bottom-color:#fff}.bootstrap-datetimepicker-widget table td.disabled,.bootstrap-datetimepicker-widget table td.disabled:hover{background:0 0;color:#9c9c9c;cursor:not-allowed}.bootstrap-datetimepicker-widget table td span{display:inline-block;width:54px;height:54px;line-height:54px;margin:2px 1.5px;cursor:pointer;border-radius:1px}.bootstrap-datetimepicker-widget table td span:hover{background:0 0}.bootstrap-datetimepicker-widget table td span.active{background-color:#0088ce;color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.25)}.bootstrap-datetimepicker-widget table td span.old{color:#9c9c9c}.bootstrap-datetimepicker-widget table td span.disabled,.bootstrap-datetimepicker-widget table td span.disabled:hover{background:0 0;color:#9c9c9c;cursor:not-allowed}.bootstrap-datetimepicker-widget.usetwentyfour td.hour{height:27px;line-height:27px}.bootstrap-datetimepicker-widget.wider{width:21em}.bootstrap-datetimepicker-widget .datepicker-decades .decade{line-height:1.8em!important}.input-group.date .input-group-addon{cursor:pointer}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.text-overflow-pf{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.fixed-height-accordion-pf{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fixed-height-accordion-pf .panel{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.fixed-height-accordion-pf .panel.panel-open{-ms-flex:1;flex:1}.fixed-height-accordion-pf .panel .collapse.in{-ms-flex:1;flex:1;overflow-y:auto}.about-modal-pf{background-color:#292e34;background-image:url(../img/bg-modal-about-pf.png);background-position:right bottom;background-repeat:no-repeat;background-size:216px auto}@media (min-width:768px){.about-modal-pf{background-size:auto}}.about-modal-pf .modal-body{color:#fff;padding-bottom:16px;padding-left:40px;padding-right:40px}@media (min-width:768px){.about-modal-pf .modal-body{padding-left:80px;padding-right:80px}}.about-modal-pf .modal-header{background-color:transparent}.about-modal-pf .pficon-close{color:#fff}.product-versions-pf{margin-bottom:30px;margin-top:30px}.product-versions-pf li strong{margin-right:10px}.trademark-pf{font-size:11px}.applauncher-pf{display:inline-block;overflow:visible}.applauncher-pf .applauncher-pf-title{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.applauncher-pf .dropdown-toggle.disabled{cursor:not-allowed}.applauncher-pf.open>.dropdown-menu{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.applauncher-pf .applauncher-pf-item{width:100%}.applauncher-pf .applauncher-pf-link{display:-ms-flexbox;display:flex;white-space:initial;-ms-flex-align:center;align-items:center}@media (min-width:768px){.applauncher-pf-block-list .applauncher-pf-item{-ms-flex:0 0 50%;flex:0 0 50%}}.applauncher-pf-block-list .applauncher-pf-link{-ms-flex-wrap:wrap;flex-wrap:wrap}@media (min-width:768px){.applauncher-pf-block-list .applauncher-pf-link{-ms-flex-direction:column;flex-direction:column;text-align:center;padding:15px 0;height:100%}}.applauncher-pf-block-list .applauncher-pf-link-icon{padding:0}.applauncher-pf-block-list .applauncher-pf-link-title{margin-top:auto}@media (min-width:768px){.applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link{padding:9px}.applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon{-ms-flex:1 0 0;flex:1 0 0;text-align:left}.applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title{-ms-flex:3;flex:3}}.applauncher-pf .dropdown-menu{padding:9px;min-width:220px}.applauncher-pf .applauncher-pf-link{border-style:solid;border-width:1px;border-color:transparent}.applauncher-pf .applauncher-pf-link:hover{background-color:#f5f5f5;border-color:#bbb;color:#0088ce;text-decoration:none;box-shadow:0 0 2px 0 #d1d1d1}.applauncher-pf .applauncher-pf-link-icon{font-size:1.2em;text-align:center;width:1.28571429em}@media (min-width:768px){.applauncher-pf .applauncher-pf-link-icon{font-size:2em}}@media (min-width:768px){.navbar-utility .applauncher-pf .dropdown-menu{right:0}}.navbar-pf .applauncher-pf.open>.dropdown-toggle,.navbar-pf .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf .navbar-utility .applauncher-pf.open>.dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf-alt .applauncher-pf.open>.dropdown-toggle,.navbar-pf-alt .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf-alt .navbar-utility .applauncher-pf.open>.dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf.open>.dropdown-toggle:focus{background-color:#232323;color:#f5f5f5}@media (min-width:768px){.navbar-pf .applauncher-pf.open>.dropdown-toggle,.navbar-pf .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf .navbar-utility .applauncher-pf.open>.dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf-alt .applauncher-pf.open>.dropdown-toggle,.navbar-pf-alt .applauncher-pf.open>.dropdown-toggle:focus,.navbar-pf-alt .navbar-utility .applauncher-pf.open>.dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf.open>.dropdown-toggle:focus{background-color:#363636;border-color:#2b2b2b;color:#d1d1d1}}@media (max-width:767px){.navbar-pf .applauncher-pf.open .dropdown-menu>li>a,.navbar-pf .navbar-utility .applauncher-pf.open .dropdown-menu>li>a,.navbar-pf-alt .applauncher-pf.open .dropdown-menu>li>a,.navbar-pf-alt .navbar-utility .applauncher-pf.open .dropdown-menu>li>a{padding-left:20px}.navbar-pf .applauncher-pf.open .dropdown-menu>li>a .applauncher-pf-link-icon,.navbar-pf .navbar-utility .applauncher-pf.open .dropdown-menu>li>a .applauncher-pf-link-icon,.navbar-pf-alt .applauncher-pf.open .dropdown-menu>li>a .applauncher-pf-link-icon,.navbar-pf-alt .navbar-utility .applauncher-pf.open .dropdown-menu>li>a .applauncher-pf-link-icon{padding-right:20px}}.navbar-pf .applauncher-pf .dropdown-toggle,.navbar-pf .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf-alt .applauncher-pf .dropdown-toggle,.navbar-pf-alt .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle{color:#d1d1d1;text-align:left;text-decoration:none;border-width:0;display:block;padding-left:20px}.navbar-pf .applauncher-pf .dropdown-toggle.disabled,.navbar-pf .applauncher-pf.dropdown>.dropdown-toggle.disabled,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle.disabled,.navbar-pf .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle.disabled,.navbar-pf-alt .applauncher-pf .dropdown-toggle.disabled,.navbar-pf-alt .applauncher-pf.dropdown>.dropdown-toggle.disabled,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle.disabled,.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle.disabled{color:#8b8d8f!important}.navbar-pf .applauncher-pf .dropdown-toggle:focus,.navbar-pf .applauncher-pf .dropdown-toggle:hover,.navbar-pf .applauncher-pf.dropdown>.dropdown-toggle:focus,.navbar-pf .applauncher-pf.dropdown>.dropdown-toggle:hover,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle:focus,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle:hover,.navbar-pf .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle:focus,.navbar-pf .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle:hover,.navbar-pf-alt .applauncher-pf .dropdown-toggle:focus,.navbar-pf-alt .applauncher-pf .dropdown-toggle:hover,.navbar-pf-alt .applauncher-pf.dropdown>.dropdown-toggle:focus,.navbar-pf-alt .applauncher-pf.dropdown>.dropdown-toggle:hover,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle:focus,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle:hover,.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle:focus,.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle:hover{color:#f5f5f5}@media (min-width:768px){.navbar-pf .applauncher-pf .dropdown-toggle,.navbar-pf .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle,.navbar-pf .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf-alt .applauncher-pf .dropdown-toggle,.navbar-pf-alt .applauncher-pf.dropdown>.dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle,.navbar-pf-alt .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle{border-left:1px solid #2b2b2b;padding:7px 10px;line-height:1}}.navbar-pf .applauncher-pf .applauncher-pf-icon,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-icon,.navbar-pf-alt .applauncher-pf .applauncher-pf-icon,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-icon{padding-right:4px;position:relative}@media (min-width:768px){.navbar-pf .applauncher-pf .applauncher-pf-icon,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-icon,.navbar-pf-alt .applauncher-pf .applauncher-pf-icon,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-icon{padding:0}}.navbar-pf .applauncher-pf .applauncher-pf-title,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-title,.navbar-pf-alt .applauncher-pf .applauncher-pf-title,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-title{display:inline;position:relative;margin:0}.navbar-pf .applauncher-pf .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link{overflow:hidden;width:100%}.navbar-pf .applauncher-pf .applauncher-pf-link:hover,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link:hover,.navbar-pf-alt .applauncher-pf .applauncher-pf-link:hover,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link:hover{background-color:transparent;border-color:transparent;box-shadow:none}.navbar-pf .applauncher-pf .applauncher-pf-link-title,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-title,.navbar-pf-alt .applauncher-pf .applauncher-pf-link-title,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-title{overflow:hidden}@media (min-width:768px){.navbar-pf .applauncher-pf,.navbar-pf .navbar-utility .applauncher-pf,.navbar-pf-alt .applauncher-pf,.navbar-pf-alt .navbar-utility .applauncher-pf{display:inline-block;overflow:visible}.navbar-pf .applauncher-pf .applauncher-pf-title,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-title,.navbar-pf-alt .applauncher-pf .applauncher-pf-title,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-title{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.navbar-pf .applauncher-pf .dropdown-toggle.disabled,.navbar-pf .navbar-utility .applauncher-pf .dropdown-toggle.disabled,.navbar-pf-alt .applauncher-pf .dropdown-toggle.disabled,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-toggle.disabled{cursor:not-allowed}.navbar-pf .applauncher-pf.open>.dropdown-menu,.navbar-pf .navbar-utility .applauncher-pf.open>.dropdown-menu,.navbar-pf-alt .applauncher-pf.open>.dropdown-menu,.navbar-pf-alt .navbar-utility .applauncher-pf.open>.dropdown-menu{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.navbar-pf .applauncher-pf .applauncher-pf-item,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-item,.navbar-pf-alt .applauncher-pf .applauncher-pf-item,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-item{width:100%}.navbar-pf .applauncher-pf .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link{display:-ms-flexbox;display:flex;white-space:initial;-ms-flex-align:center;align-items:center}.navbar-pf .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link{-ms-flex-wrap:wrap;flex-wrap:wrap}.navbar-pf .applauncher-pf-block-list .applauncher-pf-link-icon,.navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-icon,.navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link-icon,.navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-icon{padding:0}.navbar-pf .applauncher-pf-block-list .applauncher-pf-link-title,.navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-title,.navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link-title,.navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link-title{margin-top:auto}.navbar-pf .applauncher-pf .dropdown-menu,.navbar-pf .navbar-utility .applauncher-pf .dropdown-menu,.navbar-pf-alt .applauncher-pf .dropdown-menu,.navbar-pf-alt .navbar-utility .applauncher-pf .dropdown-menu{padding:9px;min-width:220px}.navbar-pf .applauncher-pf .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .applauncher-pf .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link{border-style:solid;border-width:1px;border-color:transparent}.navbar-pf .applauncher-pf .applauncher-pf-link:hover,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link:hover,.navbar-pf-alt .applauncher-pf .applauncher-pf-link:hover,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link:hover{background-color:#f5f5f5;border-color:#bbb;color:#0088ce;text-decoration:none;box-shadow:0 0 2px 0 #d1d1d1}.navbar-pf .applauncher-pf .applauncher-pf-link-icon,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-icon,.navbar-pf-alt .applauncher-pf .applauncher-pf-link-icon,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-icon{font-size:1.2em;text-align:center;width:1.28571429em}}@media (min-width:768px) and (min-width:768px){.navbar-pf .applauncher-pf-block-list .applauncher-pf-item,.navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-item,.navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-item,.navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-item{-ms-flex:0 0 50%;flex:0 0 50%}}@media (min-width:768px) and (min-width:768px){.navbar-pf .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf-alt .applauncher-pf-block-list .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf-block-list .applauncher-pf-link{-ms-flex-direction:column;flex-direction:column;text-align:center;padding:15px 0;height:100%}}@media (min-width:768px) and (min-width:768px){.navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link,.navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link,.navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link,.navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link{padding:9px}.navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon,.navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon,.navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon,.navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-icon{-ms-flex:1 0 0;flex:1 0 0;text-align:left}.navbar-pf .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title,.navbar-pf .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title,.navbar-pf-alt .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title,.navbar-pf-alt .navbar-utility .applauncher-pf:not(.applauncher-pf-block-list) .applauncher-pf-link-title{-ms-flex:3;flex:3}}@media (min-width:768px) and (min-width:768px){.navbar-pf .applauncher-pf .applauncher-pf-link-icon,.navbar-pf .navbar-utility .applauncher-pf .applauncher-pf-link-icon,.navbar-pf-alt .applauncher-pf .applauncher-pf-link-icon,.navbar-pf-alt .navbar-utility .applauncher-pf .applauncher-pf-link-icon{font-size:2em}}@media (min-width:768px){.navbar-iconic .applauncher-pf .dropdown-toggle,.navbar-iconic .applauncher-pf.dropdown>.dropdown-toggle,.navbar-iconic .navbar-utility .applauncher-pf .dropdown-toggle,.navbar-iconic .navbar-utility .applauncher-pf.dropdown>.dropdown-toggle{padding:22px 10px}}.blank-slate-pf{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:1px;margin-bottom:20px;padding:30px;text-align:center}@media (min-width:768px){.blank-slate-pf{padding:60px 60px}}@media (min-width:992px){.blank-slate-pf{padding:90px 120px}}.blank-slate-pf .blank-slate-pf-icon{color:#9c9c9c;font-size:57.6px;line-height:57.6px}.blank-slate-pf .blank-slate-pf-main-action{margin-top:20px}.blank-slate-pf .blank-slate-pf-secondary-action{margin-top:20px}.blank-slate-pf .blank-slate-pf-secondary-action a{display:inline-block;padding:5px 15px}.blank-slate-pf .blank-slate-pf-secondary-action a+a:before{background-color:#8b8d8f;content:"";display:inline-block;height:10px;left:calc(-15px - 2px);position:relative;width:1px}.blank-slate-pf button{margin-bottom:5px}.blank-slate-pf.blank-slate-content-pf{background:0 0;border:0;padding:0;margin:20px}.combobox-container.combobox-selected .glyphicon-remove{display:inline-block}.combobox-container .caret{margin-left:0}.combobox-container .combobox::-ms-clear{display:none}.combobox-container .dropdown-menu{margin-top:-1px;width:100%}.combobox-container .glyphicon-remove{display:none;top:auto;width:12px}.combobox-container .glyphicon-remove:before{content:"\e60b";font-family:PatternFlyIcons-webfont}.combobox-container .input-group-addon{background-color:#f1f1f1;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;border-color:#bbb;color:#4d5258;position:relative}.combobox-container .input-group-addon.active,.combobox-container .input-group-addon:active,.combobox-container .input-group-addon:focus,.combobox-container .input-group-addon:hover,.open .dropdown-toggle.combobox-container .input-group-addon{background-color:#f1f1f1;background-image:none;border-color:#bbb;color:#4d5258}.combobox-container .input-group-addon.active,.combobox-container .input-group-addon:active,.open .dropdown-toggle.combobox-container .input-group-addon{background-image:none}.combobox-container .input-group-addon.active.focus,.combobox-container .input-group-addon.active:focus,.combobox-container .input-group-addon.active:hover,.combobox-container .input-group-addon:active.focus,.combobox-container .input-group-addon:active:focus,.combobox-container .input-group-addon:active:hover,.open .dropdown-toggle.combobox-container .input-group-addon.focus,.open .dropdown-toggle.combobox-container .input-group-addon:focus,.open .dropdown-toggle.combobox-container .input-group-addon:hover{background-color:#e5e5e5;border-color:#a9a9a9}.combobox-container .input-group-addon.disabled,.combobox-container .input-group-addon.disabled.active,.combobox-container .input-group-addon.disabled:active,.combobox-container .input-group-addon.disabled:focus,.combobox-container .input-group-addon.disabled:hover,.combobox-container .input-group-addon[disabled],.combobox-container .input-group-addon[disabled].active,.combobox-container .input-group-addon[disabled]:active,.combobox-container .input-group-addon[disabled]:focus,.combobox-container .input-group-addon[disabled]:hover,fieldset[disabled] .combobox-container .input-group-addon,fieldset[disabled] .combobox-container .input-group-addon.active,fieldset[disabled] .combobox-container .input-group-addon:active,fieldset[disabled] .combobox-container .input-group-addon:focus,fieldset[disabled] .combobox-container .input-group-addon:hover{background-color:#f1f1f1;border-color:#bbb}.combobox-container .input-group-addon:active{box-shadow:inset 0 2px 8px rgba(3,3,3,.2)}.bootstrap-datepicker.form-control[readonly]{background-color:#fff;border-color:#bbb!important;color:#363636;box-shadow:inset 0 1px 1px rgba(3,3,3,.075)}.bootstrap-datepicker.form-control[readonly]:focus{border-color:#0088ce;outline:0!important;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 8px rgba(0,136,206,.6)}.bootstrap-datepicker.form-control[readonly]:focus{border-color:#0088ce!important}.has-error .bootstrap-datepicker.form-control[readonly]:focus{border-color:#900;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #f33}.has-success .bootstrap-datepicker.form-control[readonly]:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #67b168}.has-warning .bootstrap-datepicker.form-control[readonly]:focus{border-color:#bb6106;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #faad60}.bootstrap-datepicker.form-control[readonly]:hover{border-color:#7dc3e8!important}.has-error .bootstrap-datepicker.form-control[readonly]:hover{border-color:#900!important}.has-success .bootstrap-datepicker.form-control[readonly]:hover{border-color:#2b542c!important}.has-warning .bootstrap-datepicker.form-control[readonly]:hover{border-color:#bb6106!important}.has-error .bootstrap-datepicker.form-control[readonly]{border-color:#c00!important}.has-success .bootstrap-datepicker.form-control[readonly]{border-color:#3c763d!important}.has-warning .bootstrap-datepicker.form-control[readonly]{border-color:#ec7a08!important}.datepicker{border-radius:1px}.datepicker .datepicker-switch,.datepicker tfoot .clear,.datepicker tfoot .today{font-size:14px;font-weight:500}.datepicker .next,.datepicker .prev{font-weight:500}.datepicker table tr td,.datepicker table tr th{border-radius:1px}.datepicker table tr td.active,.datepicker table tr td.active.disabled,.datepicker table tr td.active.disabled:hover,.datepicker table tr td.active:hover{background:#0088ce!important;color:#fff!important;text-shadow:none}.datepicker table tr td.day.focused,.datepicker table tr td.day:hover{background:#def3ff}.datepicker table tr td.selected,.datepicker table tr td.selected.disabled,.datepicker table tr td.selected.disabled:hover,.datepicker table tr td.selected:hover{text-shadow:none}.datepicker table tr td span{border-radius:1px}.datepicker table tr td span.active,.datepicker table tr td span.active.disabled,.datepicker table tr td span.active.disabled:hover,.datepicker table tr td span.active:hover{background:#0088ce;text-shadow:none}.datepicker table tr td span:hover{background:#def3ff}.datepicker tfoot tr th:hover,.datepicker thead tr:first-child th:hover{background:#def3ff}.input-daterange input:first-child{border-radius:1px 0 0 1px}.input-daterange input:last-child{border-radius:0 1px 1px 0}.input-daterange .input-group-addon{background-color:#f1f1f1;border-color:#bbb;line-height:1.66666667;padding:2px 6px}.bootstrap-select.btn-group.form-control{margin-bottom:0}.bootstrap-select.btn-group .btn{transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.bootstrap-select.btn-group .btn:hover{border-color:#7dc3e8}.bootstrap-select.btn-group .btn .caret{margin-top:-4px}.bootstrap-select.btn-group .btn:focus{border-color:#0088ce;outline:0!important;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 8px rgba(0,136,206,.6)}.has-error .bootstrap-select.btn-group .btn{border-color:#c00}.has-error .bootstrap-select.btn-group .btn:focus{border-color:#900;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #f33}.has-success .bootstrap-select.btn-group .btn{border-color:#3c763d}.has-success .bootstrap-select.btn-group .btn:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #67b168}.has-warning .bootstrap-select.btn-group .btn{border-color:#ec7a08}.has-warning .bootstrap-select.btn-group .btn:focus{border-color:#bb6106;box-shadow:inset 0 1px 1px rgba(3,3,3,.075),0 0 6px #faad60}.bootstrap-select.btn-group .dropdown-menu>.active>a,.bootstrap-select.btn-group .dropdown-menu>.active>a:active{background-color:#def3ff!important;border-color:#bee1f4!important;color:#363636!important}.bootstrap-select.btn-group .dropdown-menu>.active>a small,.bootstrap-select.btn-group .dropdown-menu>.active>a:active small{color:#9c9c9c!important}.bootstrap-select.btn-group .dropdown-menu>.disabled>a{color:#9c9c9c!important}.bootstrap-select.btn-group .dropdown-menu>.selected>a{background-color:#0088ce!important;border-color:#0088ce!important;color:#fff!important}.bootstrap-select.btn-group .dropdown-menu>.selected>a small{color:rgba(255,255,255,.5)!important}.bootstrap-select.btn-group .dropdown-menu .divider{background:#ededed!important;margin:4px 1px!important}.bootstrap-select.btn-group .dropdown-menu dt{color:#8b8d8f;font-weight:400;padding:1px 10px}.bootstrap-select.btn-group .dropdown-menu li>a.opt{padding:1px 10px}.bootstrap-select.btn-group .dropdown-menu li a:active small{color:rgba(255,255,255,.5)!important}.bootstrap-select.btn-group .dropdown-menu li a:focus small,.bootstrap-select.btn-group .dropdown-menu li a:hover small{color:#9c9c9c}.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:focus small,.bootstrap-select.btn-group .dropdown-menu li:not(.disabled) a:hover small{color:#9c9c9c}.slider-tick-label-container{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;margin-left:0!important}.slider-tick-label{width:auto!important}.slider .tooltip{top:-10px}.slider-track{background-color:#ededed;box-shadow:inset 0 2px 3px rgba(0,0,0,.1),0 0 2px #ededed;border:1px solid #bbb}.slider-selection{background-image:linear-gradient(to bottom,#0088ce 0,#39a5dc 100%);background-repeat:repeat-x}.slider-handle{width:16px;height:16px;border:1px solid #bbb}.slider-tick{background-color:transparent!important;background-image:radial-gradient(rgba(0,0,0,.3),rgba(0,0,0,.3) 2px,transparent 2px)!important;box-shadow:none}.slider-pf{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.slider-pf *{margin-right:10px}.slider-pf :last-child{margin:0}.slider-pf .slider{width:auto;-ms-flex:1 1 100%;flex:1 1 100%}.bootstrap-switch .bootstrap-switch-handle-off.bootstrap-switch-default,.bootstrap-switch .bootstrap-switch-handle-on.bootstrap-switch-default{background:#fafafa}.bootstrap-switch .bootstrap-switch-label{background:#f1f1f1;box-shadow:0 0 2px rgba(3,3,3,.4);background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;position:relative;z-index:9}.bootstrap-touchspin .input-group-btn-vertical>.btn{padding-bottom:6px;padding-top:6px}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-down{border-bottom-right-radius:1px}.bootstrap-touchspin .input-group-btn-vertical .bootstrap-touchspin-up{border-top-right-radius:1px}.bootstrap-touchspin .input-group-btn-vertical i{font-size:8px;left:6px;top:2px}.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-down,.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-up{font-size:12px;line-height:12px;top:0}.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-down,.bootstrap-touchspin .input-group-btn-vertical i.fa-angle-up{left:7px}.treeview .list-group{border-top:0}.treeview .list-group-item{background:0 0;border-bottom:1px solid transparent!important;border-top:1px solid transparent!important;cursor:default!important;margin-bottom:0;overflow:hidden;padding:0 10px;text-overflow:ellipsis;white-space:nowrap}.treeview .list-group-item:hover{background:0 0!important}.treeview .list-group-item.node-selected{background:0 0!important;border-color:transparent!important;color:inherit!important}.treeview .list-group-item.node-check-changed span.node-icon,.treeview .list-group-item.node-check-changed span.text{color:#39a5dc}.treeview span.icon{display:inline-block;font-size:13px;min-width:10px;text-align:center}.treeview span.icon>[class*=fa-angle]{font-size:15px}.treeview span.icon.check-icon{margin-right:10px}.treeview span.icon.expand-icon{cursor:pointer!important}.treeview span.image{background-repeat:no-repeat;background-size:contain;display:inline-block;height:1.19em;line-height:1em;margin-right:5px;vertical-align:middle;width:12px}.treeview span.indent{margin-right:5px}.treeview .node-disabled{color:#d1d1d1;cursor:not-allowed}.treeview .node-disabled span.expand-icon{cursor:default!important}.treeview .node-hidden{display:none}.treeview-pf-hover .list-group-item{cursor:pointer!important}.treeview-pf-hover .list-group-item:hover{background-color:#def3ff!important;border-color:#bee1f4!important}.treeview-pf-select .list-group-item{cursor:pointer!important}.treeview-pf-select .list-group-item.node-selected{background:#0088ce!important;border-color:#0088ce!important;color:#fff!important}.card-pf{background:#fff;border-top:2px solid transparent;box-shadow:0 1px 1px rgba(3,3,3,.175);margin:0 -10px 20px;padding:0 20px}.card-pf.card-pf-accented{border-top-color:#39a5dc}.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a,.card-pf.card-pf-aggregate-status .card-pf-title a{color:#363636}.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a.add,.card-pf.card-pf-aggregate-status .card-pf-title a.add{color:#0088ce}.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a.add:hover,.card-pf.card-pf-aggregate-status .card-pf-title a.add:hover{color:#00659c}.card-pf.card-pf-aggregate-status .card-pf-aggregate-status-notifications a:hover,.card-pf.card-pf-aggregate-status .card-pf-title a:hover{color:#00659c}.card-pf.card-pf-aggregate-status{padding:0 10px;text-align:center}.card-pf.card-pf-aggregate-status-mini{padding-bottom:10px;position:relative}@media (min-width:768px){.card-pf.card-pf-bleed-left{margin-left:-20px}.card-pf.card-pf-bleed-right{border-right:1px solid #d1d1d1;margin-right:-20px}}.card-pf-aggregate-status-notifications{font-size:24px;font-weight:300}.card-pf-aggregate-status-mini .card-pf-aggregate-status-notifications{line-height:1}.card-pf-aggregate-status-notifications .card-pf-aggregate-status-notification+.card-pf-aggregate-status-notification{border-left:1px solid #d1d1d1;margin-left:3px;padding-left:10px}.card-pf-aggregate-status-notifications .fa,.card-pf-aggregate-status-notifications .fab,.card-pf-aggregate-status-notifications .fal,.card-pf-aggregate-status-notifications .far,.card-pf-aggregate-status-notifications .fas,.card-pf-aggregate-status-notifications .pficon{font-size:18px;margin-right:7px}.card-pf-body{margin:20px 0 0;padding:0 0 20px}.card-pf-aggregate-status .card-pf-body{margin-top:10px;padding-bottom:10px}.card-pf-aggregate-status-mini .card-pf-body{margin-bottom:0;margin-top:0;padding-bottom:0;position:absolute;right:20px;top:15px}.card-pf-utilization .card-pf-title+.card-pf-body{margin-top:-8px}.card-pf-body>:last-child{margin-bottom:0}.card-pf-footer{background-color:#fafafa;border-top:1px solid #d1d1d1;margin:0 -20px!important;padding:20px 20px 10px}.card-pf-footer a .fa,.card-pf-footer a .fab,.card-pf-footer a .fal,.card-pf-footer a .far,.card-pf-footer a .fas,.card-pf-footer a .pficon{margin-right:5px}.card-pf-footer .card-pf-time-frame-filter{margin-top:-2px}.card-pf-link-with-icon{padding-left:21px;position:relative}.card-pf-link-with-icon .fa,.card-pf-link-with-icon .fab,.card-pf-link-with-icon .fal,.card-pf-link-with-icon .far,.card-pf-link-with-icon .fas,.card-pf-link-with-icon .pficon{font-size:16px;left:0;position:absolute;top:0}.card-pf-footer .card-pf-time-frame-filter,.card-pf-heading .card-pf-time-frame-filter{float:right;margin-left:20px}.card-pf-heading{border-bottom:1px solid #d1d1d1;margin:0 -20px 20px;padding:0 20px 0}.card-pf-heading .card-pf-time-frame-filter{margin-top:-5px}.card-pf-heading-details{float:right;font-size:10px}.card-pf-subtitle{font-size:16px;margin-top:20px;margin-bottom:10px}[class^=col] .card-pf-subtitle{margin-top:0}@media (max-width:767px){.card-pf-body [class^=col]+[class^=col]>.card-pf-subtitle{margin-top:40px}}.card-pf-title{font-size:16px;font-weight:400;margin:20px 0;padding:0}.card-pf-aggregate-status .card-pf-title{font-size:14px;margin:10px 0 0}.card-pf-aggregate-status .card-pf-title .fa,.card-pf-aggregate-status .card-pf-title .fab,.card-pf-aggregate-status .card-pf-title .fal,.card-pf-aggregate-status .card-pf-title .far,.card-pf-aggregate-status .card-pf-title .fas,.card-pf-aggregate-status .card-pf-title .pficon{color:#292e34;font-size:16px;margin-right:7px}.card-pf-title .card-pf-aggregate-status-count{font-size:16px}.card-pf-aggregate-status-mini .card-pf-title .card-pf-aggregate-status-count{display:block;font-size:24px;font-weight:300;margin-bottom:3px}.card-pf-aggregate-status-mini .card-pf-title{font-size:12px;margin-top:5px}.card-pf-aggregate-status-mini .card-pf-title a{display:inline-block}.card-pf-aggregate-status-mini .card-pf-title .fa,.card-pf-aggregate-status-mini .card-pf-title .fab,.card-pf-aggregate-status-mini .card-pf-title .fal,.card-pf-aggregate-status-mini .card-pf-title .far,.card-pf-aggregate-status-mini .card-pf-title .fas,.card-pf-aggregate-status-mini .card-pf-title .pficon{font-size:26px;margin-right:0;min-width:26px;position:absolute;left:20px;text-align:center;top:15px}.card-pf-utilization-details{border-bottom:1px solid #d1d1d1;display:table;margin:12px 0 15px;padding:0 0 15px;width:100%}.card-pf-utilization-details .card-pf-utilization-card-details-count,.card-pf-utilization-details .card-pf-utilization-card-details-description{float:left;line-height:1}.card-pf-utilization-details .card-pf-utilization-card-details-count{font-size:26px;font-weight:300;margin-right:10px}.card-pf-utilization-details .card-pf-utilization-card-details-line-1,.card-pf-utilization-details .card-pf-utilization-card-details-line-2{display:block}.card-pf-utilization-details .card-pf-utilization-card-details-line-1{font-size:10px;margin-bottom:2px}.cards-pf{background:#f5f5f5}.cards-pf .row-cards-pf{padding:0 20px}.cards-pf .row-cards-pf:first-child{padding-top:20px}.container-cards-pf{margin-top:20px}.row-cards-pf{margin-left:-10px;margin-right:-10px}.card-pf-view{border:2px solid transparent}.card-pf-view .card-pf-heading-kebab .dropdown-kebab-pf{margin-top:-3px}.card-pf-view .card-pf-heading-kebab+.progress-pf-legend p{margin-bottom:0}.card-pf-view .card-pf-heading-kebab+.progress-pf-legend .progress{margin-bottom:7px;margin-top:16px}.card-pf-view .card-pf-info{margin-top:15px}.card-pf-view .card-pf-info strong{font-size:13px;margin-right:10px}.card-pf-view .card-pf-item{display:inline-block;font-size:16px;padding:0 13px 0 15px}.card-pf-view .card-pf-item:first-child{padding-left:0}.card-pf-view .card-pf-item:last-child{padding-right:0}.card-pf-view .card-pf-item+.card-pf-item{border-left:1px solid #d1d1d1}.card-pf-view .card-pf-item .fa-check{color:#3f9c35}.card-pf-view .card-pf-item .fa+.card-pf-item-text,.card-pf-view .card-pf-item .fab+.card-pf-item-text,.card-pf-view .card-pf-item .fal+.card-pf-item-text,.card-pf-view .card-pf-item .far+.card-pf-item-text,.card-pf-view .card-pf-item .fas+.card-pf-item-text,.card-pf-view .card-pf-item .pficon+.card-pf-item-text{margin-left:10px}.card-pf-view .card-pf-items{margin-top:15px}.card-pf-view .card-pf-title{font-size:20px;font-weight:300;margin-bottom:0;margin-top:15px}.card-pf-view .card-pf-title .fa,.card-pf-view .card-pf-title .fab,.card-pf-view .card-pf-title .fal,.card-pf-view .card-pf-title .far,.card-pf-view .card-pf-title .fas,.card-pf-view .card-pf-title .pficon{font-size:18px;margin-right:2px}.col-lg-2 .card-pf-view .card-pf-title{font-size:16px}.card-pf-view .card-pf-top-element .card-pf-icon-circle{border:2px solid #39a5dc;border-radius:50%;display:block;font-size:46px;height:106px;line-height:102px;margin:0 auto;text-align:center;width:106px}.col-lg-2 .card-pf-view .card-pf-top-element .card-pf-icon-circle{font-size:23px;height:54px;line-height:50px;width:54px}.card-pf-view .card-pf-view-checkbox{position:absolute;top:11px;left:15px}.card-pf-view .card-pf-view-checkbox input[type=checkbox]{display:none}.card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox]{display:block}@media (min-width:768px){.card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox]{visibility:hidden}.card-pf-view.card-pf-view-multi-select .card-pf-view-checkbox input[type=checkbox]:checked{visibility:visible}}.card-pf-view.card-pf-view-multi-select:hover .card-pf-view-checkbox input[type=checkbox]{visibility:visible}.card-pf-view.card-pf-view-select{position:relative}.card-pf-view.card-pf-view-select:hover{box-shadow:0 1px 6px rgba(3,3,3,.35)}.card-pf-view.card-pf-view-select.active{border:2px solid #39a5dc}.card-pf-view.card-pf-view-single-select{cursor:pointer}.card-pf-view.card-pf-view-xs .card-pf-title{font-size:16px;font-weight:400;margin-bottom:10px}.card-pf-view.card-pf-view-xs .card-pf-title .fa,.card-pf-view.card-pf-view-xs .card-pf-title .fab,.card-pf-view.card-pf-view-xs .card-pf-title .fal,.card-pf-view.card-pf-view-xs .card-pf-title .far,.card-pf-view.card-pf-view-xs .card-pf-title .fas,.card-pf-view.card-pf-view-xs .card-pf-title .pficon{font-size:14px;margin-right:5px}.bullet-chart-pf{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.bullet-chart-pf.bullet-chart-pf-vertical{height:100%;-ms-flex-direction:row;flex-direction:row}.bullet-chart-pf-chart{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-direction:row;flex-direction:row;width:100%}.bullet-chart-pf-vertical .bullet-chart-pf-chart{-ms-flex:initial;flex:initial;-ms-flex-direction:column-reverse;flex-direction:column-reverse;height:100%;width:initial}.bullet-chart-pf-title-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;margin:10px 0 25px;padding-right:10px;text-align:right}.bullet-chart-pf-vertical .bullet-chart-pf-title-container{margin-bottom:0;padding-right:0;text-align:center}.bullet-chart-pf-title{font-size:14px}.bullet-chart-pf-details{color:#9c9c9c;font-size:12px;line-height:9px}.bullet-chart-pf-container{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex:5;flex:5}.bullet-chart-pf-vertical .bullet-chart-pf-container{-ms-flex-direction:row-reverse;flex-direction:row-reverse;-ms-flex:initial;flex:initial}.bullet-chart-pf-vertical .bullet-chart-pf-container.show-axis{margin-left:-25px}.bullet-chart-pf-data-container{-ms-flex:1;flex:1;position:relative}.bullet-chart-pf-vertical .bullet-chart-pf-data-container{height:initial}.bullet-chart-pf-vertical-data-container{display:-ms-flexbox;display:flex;-ms-flex:5;flex:5;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center}.bullet-chart-pf-vertical-data-container .bullet-chart-pf-data-container{-ms-flex:initial;flex:initial}.bullet-chart-pf-values-container{height:20px;margin:20px 0;position:relative}.bullet-chart-pf-vertical .bullet-chart-pf-values-container{height:100%;margin:0 20px;width:20px}.bullet-chart-pf-value-bar{height:100%;position:absolute;transition:left .6s ease}.bullet-chart-pf-vertical .bullet-chart-pf-value-bar{bottom:0;height:initial;top:initial;width:100%}.bullet-chart-pf-value-dot{border-radius:50%;border-style:solid;border-width:0;height:20px;-ms-transform:translateX(-50%);transform:translateX(-50%);position:absolute;transition:left .6s ease;width:20px}.bullet-chart-pf-vertical .bullet-chart-pf-value-dot{top:initial;-ms-transform:translateY(50%);transform:translateY(50%)}.bullet-chart-pf-threshold-indicator{border:0 solid #72767b;border-left-width:1px;height:100%;position:absolute;top:0;z-index:400}.bullet-chart-pf-vertical .bullet-chart-pf-threshold-indicator{border-left-width:0;border-top-width:1px;height:1px;left:0;top:initial;width:100%}.bullet-chart-pf-threshold-indicator.error{border-color:#c00}.bullet-chart-pf-threshold-indicator.warning{border-color:#ec7a08}.bullet-chart-pf-range-bar{height:100%;left:0;position:absolute;top:0}.bullet-chart-pf-vertical .bullet-chart-pf-range-bar{bottom:0;height:initial;top:initial;width:100%}.bullet-chart-pf-range-bar.range-1{background-color:#f5f5f5}.bullet-chart-pf-range-bar.range-2{background-color:#ededed}.bullet-chart-pf-range-bar.range-3{background-color:#dbdbdb}.bullet-chart-pf-axis{border-top:1px solid #72767b;height:25px;position:relative}.bullet-chart-pf-vertical .bullet-chart-pf-axis{height:initial;width:25px;border-right:1px solid #72767b;border-top:0}.bullet-chart-pf-title-container .bullet-chart-pf-axis{border-top:0}.bullet-chart-pf-axis-tic{padding-top:5px;position:absolute;text-align:center;width:30px}.bullet-chart-pf-vertical .bullet-chart-pf-axis-tic{padding-top:0;padding-right:5px;width:100%;text-align:right;line-height:21px}.bullet-chart-pf-axis-tic:before{border-left:1px solid #72767b;content:"";height:3px;left:50%;position:absolute;top:-1px}.bullet-chart-pf-vertical .bullet-chart-pf-axis-tic:before{border-left:0;border-top:1px solid #72767b;height:initial;left:initial;right:-1px;top:calc(50% - 1px);width:3px}.bullet-chart-pf-overflow{-ms-flex:1;flex:1}.bullet-chart-pf-legend{margin-top:7px;text-align:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:center;justify-content:center}.bullet-chart-pf-vertical .bullet-chart-pf-legend{-ms-flex-direction:column;flex-direction:column;margin-left:10px;margin-top:0;text-align:left}.bullet-chart-pf-legend-item{display:inline-block;margin-right:10px}.bullet-chart-pf-vertical .bullet-chart-pf-legend-item{margin-right:0;margin-top:10px}.bullet-chart-pf-legend-item-box{display:inline-block;height:13px;margin-right:3px;width:13px}.bullet-chart-pf-legend-item-box.range-1{background-color:#f5f5f5}.bullet-chart-pf-legend-item-box.range-2{background-color:#ededed}.bullet-chart-pf-legend-item-box.range-3{background-color:#dbdbdb}.bullet-chart-pf-legend-item-text{display:inline-block;line-height:14px;max-width:150px;overflow:hidden;position:relative;text-overflow:ellipsis;top:1px;white-space:nowrap;word-wrap:normal}.c3 path{stroke:#d1d1d1}.c3 svg{font-family:"Open Sans",Helvetica,Arial,sans-serif}.c3-axis-x .tick line{stroke:#d1d1d1}.c3-axis-y .tick line{display:none}.c3-chart-arc path{stroke:#fff}.c3-grid line{stroke:#d1d1d1}.c3-line{stroke-width:2px}.c3-tooltip{background:#393f44;box-shadow:none;opacity:.9}.c3-tooltip td{background:0 0;border:0;color:#fff;font-size:12px;padding:5px 10px}.c3-tooltip th{background:0 0;font-size:12px;padding:5px 10px 0;border-bottom:solid 2px #030303}.c3-tooltip tr{border:0}.c3-tooltip tr+tr>td{padding-top:0}.c3-tooltip-sparkline,.donut-tooltip-pf{background:#393f44;color:#fff;opacity:.9;padding:2px 6px}.c3-xgrid,.c3-ygrid{stroke-dasharray:0 0}.chart-pf-sparkline{margin-left:-5px;margin-right:-5px}.donut-title-big-pf{font-size:30px;font-weight:300}.donut-title-small-pf{font-size:12px;font-weight:400}.line-chart-pf .c3-zoom-rect{opacity:1!important;fill:#fafafa;stroke:#d1d1d1;stroke-width:1px}.pct-donut-chart-pf .pct-donut-chart-pf-label{display:block}.pct-donut-chart-pf .pct-donut-chart-pf-left,.pct-donut-chart-pf .pct-donut-chart-pf-right,.pct-donut-chart-pf.pct-donut-chart-pf-left,.pct-donut-chart-pf.pct-donut-chart-pf-right{display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row;-ms-flex-pack:center;justify-content:center;-ms-flex-align:center;align-items:center}.pct-donut-chart-pf.pct-donut-chart-pf-left,.pct-donut-chart-pf.pct-donut-chart-pf-right{display:-ms-inline-flexbox;display:inline-flex}.pct-donut-chart-pf .pct-donut-chart-pf-left,.pct-donut-chart-pf.pct-donut-chart-pf-left{-ms-flex-direction:row-reverse;flex-direction:row-reverse}.close{text-shadow:none;z-index:1;position:relative;opacity:.6}.close:focus,.close:hover{opacity:.9}.contextselector-pf{float:left}.contextselector-pf .bootstrap-select{width:202px!important}@media (min-width:480px){.contextselector-pf .bootstrap-select{width:242px!important}}.contextselector-pf .bootstrap-select.open>.dropdown-toggle,.contextselector-pf .bootstrap-select.open>.dropdown-toggle:focus,.contextselector-pf .bootstrap-select.open>.dropdown-toggle:hover{background:rgba(255,255,255,.24);color:#fff}.contextselector-pf .bootstrap-select.open>.dropdown-toggle:focus{outline:0!important}.contextselector-pf .bootstrap-select>.dropdown-toggle{background:0 0;border:0;box-shadow:none!important;color:#d1d1d1;font-weight:400;padding-bottom:19px;padding-left:10px;padding-top:19px}.contextselector-pf .bootstrap-select>.dropdown-toggle:focus{outline:thin dotted!important;outline:5px auto -webkit-focus-ring-color!important;outline-offset:-2px!important}.contextselector-pf .bootstrap-select>.dropdown-toggle:hover{outline:0!important}.contextselector-pf .bootstrap-select>.dropdown-toggle:focus,.contextselector-pf .bootstrap-select>.dropdown-toggle:hover{background-color:rgba(255,255,255,.14)}.contextselector-pf .bootstrap-select>.dropdown-toggle .filter-option{text-overflow:ellipsis;position:relative}.contextselector-pf .bootstrap-select .dropdown-menu li a span.text{display:block;overflow-x:hidden;text-overflow:ellipsis;width:100%}.layout-pf-fixed .navbar-pf-vertical.navbar-pf-contextselector{z-index:1040}@media (min-width:992px){.navbar-pf-vertical .nav.contextselector-pf{margin-left:10px}}.contextselector-pf{float:left}.contextselector-pf-title{display:inline-block;line-height:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:170px}@media (min-width:480px){.contextselector-pf-title{width:210px}}@media (min-width:768px){.contextselector-pf .contextselector-pf-list{max-height:200px;overflow-y:auto}}.contextselector-pf .contextselector-pf-list a{color:#393f44;display:block}.contextselector-pf .contextselector-pf-list li{border-color:transparent;border-style:solid;border-width:1px 0;padding:1px 10px}.contextselector-pf .contextselector-pf-list li:hover{background:#def3ff;border-color:#bee1f4}.contextselector-pf .contextselector-pf-list li:hover a{text-decoration:none}.contextselector-pf .dropdown.open,.contextselector-pf .dropdown:hover{background-color:#303030}.contextselector-pf .dropdown-menu{margin-top:0;width:100%}.contextselector-pf .form-group{margin:0 5px 5px 5px}.navbar-pf-vertical .nav.contextselector-pf .nav-item-iconic{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;padding:23px 20px 18px 10px}.ColVis_Button:active:focus{outline:0}.ColVis_catcher{position:absolute;z-index:999}.ColVis_collection{background-color:#fff;border:1px solid #bbb;border-radius:1px;box-shadow:0 6px 12px rgba(3,3,3,.175);background-clip:padding-box;list-style:none;margin:-1px 0 0;padding:5px 10px;width:150px;z-index:1000}.ColVis_collection label{font-weight:400;margin-bottom:5px;margin-top:5px;padding-left:20px}.ColVis_collectionBackground{background-color:#fff;height:100%;left:0;position:fixed;top:0;width:100%;z-index:998}.dataTables_header{background-color:#f5f5f5;border:1px solid #d1d1d1;border-bottom:none;padding:5px;position:relative;text-align:center}.dataTables_header .btn{box-shadow:none}.dataTables_header .ColVis{position:absolute;right:5px;text-align:left;top:5px}.dataTables_header .ColVis+.dataTables_info{padding-right:30px}.dataTables_header .dataTables_filter{position:absolute}.dataTables_header .dataTables_filter input{border:1px solid #bbb;height:24px}@media (max-width:767px){.dataTables_header .dataTables_filter input{width:100px}}.dataTables_header .dataTables_info{padding:2px 0}@media (max-width:480px){.dataTables_header .dataTables_info{text-align:right}}.dataTables_header .dataTables_info b{font-weight:700}.dataTables_footer{background-color:#fff;border:1px solid #d1d1d1;border-top:none;overflow:hidden}.dataTables_paginate{background:#fafafa;float:right;margin:0}.dataTables_paginate .pagination{float:left;margin:0}.dataTables_paginate .pagination>li>span{border-color:#fff #d1d1d1 #f5f5f5;border-width:0 1px;font-size:16px;font-weight:400;padding:0;text-align:center;width:31px}.dataTables_paginate .pagination>li.last>span{border-right:none}.dataTables_paginate .pagination>li.disabled>span{background:#f5f5f5;border-left-color:#ededed;border-right-color:#ededed}.dataTables_paginate .pagination-input{float:left;font-size:12px;line-height:1em;padding:4px 15px 0;text-align:right}.dataTables_paginate .pagination-input .paginate_input{border:1px solid #d1d1d1;box-shadow:inset 0 1px 1px rgba(3,3,3,.075);font-size:12px;font-weight:600;height:19px;margin-right:8px;padding-right:3px;text-align:right;width:30px}.dataTables_paginate .pagination-input .paginate_of{position:relative}.dataTables_paginate .pagination-input .paginate_of b{margin-left:3px}.dataTables_empty{background:#f5f5f5}.DTCR_clonedTable{background-color:rgba(255,255,255,.7);z-index:202}.DTCR_pointer{background-color:#0088ce;width:1px;z-index:201}.date-time-picker-pf .input-group-addon .fa,.date-time-picker-pf .input-group-addon .fab,.date-time-picker-pf .input-group-addon .fal,.date-time-picker-pf .input-group-addon .far,.date-time-picker-pf .input-group-addon .fas,.date-time-picker-pf .input-group-addon .pficon{width:12px}.date-time-range-picker-pf .form-control,.date-time-range-picker-pf .form-control:not(:first-child):not(:last-child){border-radius:1px}.date-time-range-picker-pf .form-control:first-child{border-bottom-right-radius:1px;border-top-right-radius:1px}.date-time-range-picker-pf .form-control:last-child{border-bottom-left-radius:1px;border-top-left-radius:1px}.date-time-range-picker-pf .input-group-addon{background-color:transparent;border:none;line-height:1.66666667;padding:2px 6px}.date-time-range-picker-pf .dropdown-kebab-pf{float:right;margin-left:0;margin-right:-15px}.experimental-pf>*{border:2px solid #92d400}.experimental-pf-bar{background-color:#92d400;border:none;text-align:center;position:relative}.experimental-pf-more-info{background-color:#92d400;border:0;color:#030303;display:block;width:100%;padding-top:10px;padding-bottom:10px;position:static}@media (min-width:992px){.experimental-pf-more-info{padding:0 10px;position:absolute;right:0;top:0;width:auto}}@media (min-width:992px){.experimental-pf-text{padding-left:150px;padding-right:150px}}.experimental-pf-text a{color:#030303;text-decoration:underline}.experimental-pf-text a:hover{color:#030303;cursor:pointer}.btn-experimental-pf{background-color:#92d400;background-image:linear-gradient(to bottom,#ace12e 0,#92d400 100%);background-repeat:repeat-x;border-color:#92d400;color:#4d5258}.btn-experimental-pf.active,.btn-experimental-pf:active,.btn-experimental-pf:focus,.btn-experimental-pf:hover,.open .dropdown-toggle.btn-experimental-pf{background-color:#92d400;background-image:none;border-color:#92d400;color:#4d5258}.btn-experimental-pf.active,.btn-experimental-pf:active,.open .dropdown-toggle.btn-experimental-pf{background-image:none}.btn-experimental-pf.active.focus,.btn-experimental-pf.active:focus,.btn-experimental-pf.active:hover,.btn-experimental-pf:active.focus,.btn-experimental-pf:active:focus,.btn-experimental-pf:active:hover,.open .dropdown-toggle.btn-experimental-pf.focus,.open .dropdown-toggle.btn-experimental-pf:focus,.open .dropdown-toggle.btn-experimental-pf:hover{background-color:#80bb00;border-color:#79b000}.btn-experimental-pf.disabled,.btn-experimental-pf.disabled.active,.btn-experimental-pf.disabled:active,.btn-experimental-pf.disabled:focus,.btn-experimental-pf.disabled:hover,.btn-experimental-pf[disabled],.btn-experimental-pf[disabled].active,.btn-experimental-pf[disabled]:active,.btn-experimental-pf[disabled]:focus,.btn-experimental-pf[disabled]:hover,fieldset[disabled] .btn-experimental-pf,fieldset[disabled] .btn-experimental-pf.active,fieldset[disabled] .btn-experimental-pf:active,fieldset[disabled] .btn-experimental-pf:focus,fieldset[disabled] .btn-experimental-pf:hover{background-color:#92d400;border-color:#92d400}.filter-pf-category-select{display:-ms-flexbox;display:flex}.filter-pf-category-select-value{border-left-width:0}.filter-pf-category-item{margin-bottom:5px}.filter-pf-category-label{font-weight:700;margin-right:5px;padding:5px 0 6px 5px}.filter-pf-select .caret{position:absolute;top:50%;right:10px;-ms-transform:translateY(-50%);transform:translateY(-50%)}.filter-pf-select-dropdown{background-color:#fff;background-image:none;color:#8b8d8f;font-size:12px;font-style:italic;font-weight:400;padding-right:25px;text-align:left}.filter-pf-select-dropdown .caret{font-style:normal}.filter-pf-select-dropdown.filter-selected{font-style:normal;color:inherit}.filter-pf-active-label{margin-right:5px}.footer-pf,.footer-pf-alt{background-color:#030303;color:#9c9c9c;font-size:11px;line-height:17px;padding-left:25px;padding-top:10px}.layout-pf-alt-fixed-with-footer .footer-pf,.layout-pf-alt-fixed-with-footer .footer-pf-alt,.layout-pf-fixed-with-footer .footer-pf,.layout-pf-fixed-with-footer .footer-pf-alt{bottom:0;left:0;position:fixed;right:0;z-index:1030}.hint-block-pf{background-color:#def3ff;color:#004368;padding:10px 15px 15px}.hint-block-pf .hint-block-pf-title{font-size:16px;font-weight:500;line-height:1.1;margin-bottom:10px}.hint-block-pf .hint-block-pf-body{font-size:13px;font-weight:300;line-height:1.4}.hint-block-pf>.btn{margin-top:30px}@font-face{font-family:PatternFlyIcons-webfont;src:url(../fonts/PatternFlyIcons-webfont.eot);src:url(../fonts/PatternFlyIcons-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/PatternFlyIcons-webfont.ttf) format("truetype"),url(../fonts/PatternFlyIcons-webfont.woff) format("woff"),url(../fonts/PatternFlyIcons-webfont.svg#PatternFlyIcons-webfont) format("svg");font-weight:400;font-style:normal}[class*=" pficon-"],[class^=pficon-]{display:inline-block;font-family:PatternFlyIcons-webfont;font-style:normal;font-variant:normal;font-weight:400;line-height:1;speak:none;text-transform:none;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.pficon-add-circle-o:before{content:"\e61b"}.pficon-applications:before{content:"\e936"}.pficon-arrow:before{content:"\e929"}.pficon-asleep:before{content:"\e925"}.pficon-automation:before{content:"\e937"}.pficon-build:before{content:"\e902"}.pficon-builder-image:before{content:"\e800"}.pficon-bundle:before{content:"\e918"}.pficon-blueprint:before{content:"\e915"}.pficon-catalog:before{content:"\e939"}.pficon-chat:before{content:"\e928"}.pficon-close:before{content:"\e60b"}.pficon-cloud-security:before{content:"\e903"}.pficon-cloud-tenant:before{content:"\e904"}.pficon-cluster:before{content:"\e620"}.pficon-connected:before{content:"\e938"}.pficon-container-node:before{content:"\e621"}.pficon-cpu:before{content:"\e927"}.pficon-degraded:before{content:"\e91b"}.pficon-delete:before{content:"\e611"}.pficon-disconnected:before{content:"\e93c"}.pficon-domain:before{content:"\e919"}.pficon-drag-drop:before{content:"\e950"}.pficon-edit:before{content:"\e60a"}.pficon-enhancement:before{content:"\e93a"}.pficon-enterprise:before{content:"\e906"}.pficon-equalizer:before{content:"\e610"}.pficon-error-circle-o:before{color:#c00;content:"\e926"}.pficon-export:before{content:"\e616"}.pficon-flag:before,.pficon-messages:before{content:"\e603"}.pficon-flavor:before{content:"\e907"}.pficon-filter:before{content:"\e943"}.pficon-folder-close:before{content:"\e607"}.pficon-folder-open:before{content:"\e606"}.pficon-help:before{content:"\e605"}.pficon-history:before{content:"\e93b"}.pficon-home:before{content:"\e618"}.pficon-image:before{content:"\e61f"}.pficon-import:before{content:"\e615"}.pficon-in-progress:before{content:"\e92c"}.pficon-info:before{content:"\e92b"}.pficon-infrastructure:before{content:"\e93d"}.pficon-integration:before{content:"\e948"}.pficon-key:before{content:"\e924"}.pficon-locked:before{content:"\e923"}.pficon-maintenance:before{content:"\e92d"}.pficon-memory:before{content:"\e908"}.pficon-middleware:before{content:"\e917"}.pficon-migration:before{content:"\e92e"}.pficon-monitoring:before{content:"\e944"}.pficon-network:before{content:"\e909"}.pficon-network-range:before{content:"\e94a"}.pficon-on:before{content:"\e931"}.pficon-on-running:before{content:"\e930"}.pficon-optimize:before{content:"\e93e"}.pficon-orders:before{content:"\e93f"}.pficon-off:before{content:"\e92f"}.pficon-ok:before{color:#3f9c35;content:"\e602"}.pficon-paused:before{content:"\e932"}.pficon-pending:before{content:"\e933"}.pficon-plugged:before{content:"\e940"}.pficon-port:before{content:"\e945"}.pficon-print:before{content:"\e612"}.pficon-process-automation:before{content:"\e949"}.pficon-private:before{content:"\e914"}.pficon-project:before{content:"\e905"}.pficon-rebalance:before{content:"\e91c"}.pficon-rebooting:before{content:"\e934"}.pficon-refresh:before,.pficon-restart:before{content:"\e617"}.pficon-regions:before{content:"\e90a"}.pficon-registry:before{content:"\e623"}.pficon-remove:before{content:"\e611"}.pficon-replicator:before{content:"\e624"}.pficon-repository:before{content:"\e90b"}.pficon-resource-pool:before{content:"\e90c"}.pficon-resources-almost-empty:before{content:"\e91d"}.pficon-resources-almost-full:before{content:"\e912"}.pficon-resources-full:before{content:"\e92a"}.pficon-route:before{content:"\e625"}.pficon-running:before{content:"\e614"}.pficon-satellite:before{content:"\e94b"}.pficon-save:before{content:"\e601"}.pficon-screen:before{content:"\e600"}.pficon-search:before{content:"\e921"}.pficon-security:before{content:"\e946"}.pficon-server:before{content:"\e90d"}.pficon-server-group:before{content:"\e91a"}.pficon-service:before{content:"\e61e"}.pficon-services:before{content:"\e947"}.pficon-service-catalog:before{content:"\e941"}.pficon-settings:before{content:"\e610"}.pficon-sort-common-asc:before{content:"\e94e"}.pficon-sort-common-desc:before{content:"\e94f"}.pficon-spinner:before{content:"\e614"}.pficon-spinner2:before{content:"\e613"}.pficon-storage-domain:before{content:"\e90e"}.pficon-template:before{content:"\e94c"}.pficon-tenant:before{content:"\e916"}.pficon-thumb-tack-o:before{content:"\e920"}.pficon-topology:before{content:"\e608"}.pficon-trend-down:before{content:"\e900"}.pficon-trend-up:before{content:"\e901"}.pficon-unknown:before{content:"\e935"}.pficon-user:before{content:"\e91e"}.pficon-users:before{content:"\e91f"}.pficon-unlocked:before{content:"\e922"}.pficon-unplugged:before{content:"\e942"}.pficon-vcenter:before{content:"\e94d"}.pficon-virtual-machine:before{content:"\e90f"}.pficon-volume:before{content:"\e910"}.pficon-warning-triangle-o:before{color:#ec7a08;content:"\e913"}.pficon-zone:before{content:"\e911"}.navbar-nav>li>.dropdown-menu.infotip{border-top-width:1px!important;margin-top:10px}@media (max-width:767px){.navbar-pf .navbar-nav .open .dropdown-menu.infotip{background-color:#fff!important;margin-top:0}}.infotip{min-width:235px;padding:0}.infotip .list-group{border-top:0;margin:0;padding:8px 0}.infotip .list-group .list-group-item{border:none;margin:0 15px 0 34px;padding:5px 0}.infotip .list-group .list-group-item>.i{color:#4d5258;font-size:13px;left:-20px;position:absolute;top:8px}.infotip .list-group .list-group-item>a{color:#4d5258;line-height:13px}.infotip .list-group .list-group-item>.close{float:right}.infotip .footer{background-color:#f5f5f5;padding:6px 15px}.infotip .footer a:hover{color:#0088ce}.infotip .arrow,.infotip .arrow:after{border-color:transparent;border-style:solid;display:block;height:0;position:absolute;width:0}.infotip .arrow{border-width:11px}.infotip .arrow:after{border-width:10px;content:""}.infotip.bottom .arrow,.infotip.bottom-left .arrow,.infotip.bottom-right .arrow{border-bottom-color:#bbb;border-top-width:0;left:50%;margin-left:-11px;top:-11px}.infotip.bottom .arrow:after,.infotip.bottom-left .arrow:after,.infotip.bottom-right .arrow:after{border-top-width:0;border-bottom-color:#fff;content:" ";margin-left:-10px;top:1px}.infotip.bottom-left .arrow{left:20%}.infotip.bottom-right .arrow{left:80%}.infotip.top .arrow{border-bottom-width:0;border-top-color:#bbb;bottom:-11px;left:50%;margin-left:-11px}.infotip.top .arrow:after{border-bottom-width:0;border-top-color:#f5f5f5;bottom:1px;content:" ";margin-left:-10px}.infotip.right .arrow{border-left-width:0;border-right-color:#bbb;left:-11px;margin-top:-11px;top:50%}.infotip.right .arrow:after{bottom:-10px;border-left-width:0;border-right-color:#fff;content:" ";left:1px}.infotip.left .arrow{border-left-color:#bbb;border-right-width:0;margin-top:-11px;right:-11px;top:50%}.infotip.left .arrow:after{border-left-color:#fff;border-right-width:0;bottom:-10px;content:" ";right:1px}.layout-pf,.layout-pf body{min-height:100%}.layout-pf.layout-pf-fixed.transitions .container-pf-nav-pf-vertical{transition:all .2s cubic-bezier(.35,0,.25,1)}.layout-pf.layout-pf-fixed body{padding-top:60px}.layout-pf.layout-pf-fixed .navbar-pf{left:0;position:fixed;top:0;right:0;z-index:1030}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-vertical-with-badges{margin-left:250px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-nav{margin-left:75px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-nav.hidden-icons-pf{margin-left:0}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.hidden-nav{margin-left:0}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.hide-nav-pf{visibility:hidden!important}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-secondary-nav-pf,.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-tertiary-nav-pf{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges,.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{margin-left:250px}@media (min-width:1200px){.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf{margin-left:400px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.nav-pf-vertical-with-badges{margin-left:500px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hidden-nav{margin-left:0}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{margin-left:250px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{margin-left:250px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav{margin-left:275px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.nav-pf-vertical-with-badges{margin-left:325px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-secondary-nav-pf{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{margin-left:250px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-tertiary-nav-pf{margin-left:200px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{margin-left:250px}.layout-pf.layout-pf-fixed .container-pf-nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-nav.hidden-icons-pf{margin-left:0}}.layout-pf.layout-pf-fixed-with-footer body{padding-bottom:37px}.layout-pf-alt,.layout-pf-alt body{min-height:100%}.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll,.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll body{height:100%;min-height:0}.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll .container-pf-alt-nav-pf-vertical-alt{height:100%;overflow:auto}.layout-pf-alt.layout-pf-alt-fixed.layout-pf-alt-fixed-inner-scroll .container-pf-alt-nav-pf-vertical-alt.container-cards-pf{margin-top:0;padding-top:20px}.layout-pf-alt.layout-pf-alt-fixed.transitions .container-pf-alt-nav-pf-vertical-alt{transition:all .2s cubic-bezier(.35,0,.25,1)}.layout-pf-alt.layout-pf-alt-fixed body{padding-top:60px}.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt{margin-left:250px}.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt.collapsed-nav{margin-left:75px}.layout-pf-alt.layout-pf-alt-fixed .container-pf-alt-nav-pf-vertical-alt.hidden-nav{margin-left:0}.layout-pf-alt.layout-pf-alt-fixed-with-footer body{padding-bottom:37px}.loading-state-pf{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-align:center;align-items:center;font-size:12px;height:100%}.loading-state-pf:before{content:"";height:25%;display:block}.loading-state-pf.loading-state-pf-lg{font-size:15px}.loading-state-pf.loading-state-pf-sm{font-size:9px}.loading-state-pf.loading-state-pf-xs{font-size:6px}a.disabled{color:#8b8d8f;cursor:not-allowed;text-decoration:none}.list-pf{border-bottom:1px solid #ededed}.list-pf-item{border-color:#ededed;border-left-color:#fff;border-right-color:#fff;border-style:solid;border-width:1px;border-bottom:none}.list-pf-item:hover{background-color:#edf8ff}.list-pf-item.active{background-color:#edf8ff;border-color:#bbb;border-bottom-width:1px;border-bottom-style:solid;box-shadow:0 2px 6px rgba(3,3,3,.2)}.list-pf-expansion{background-color:#fff}.list-pf-container{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;padding:20px}.list-pf-expansion .list-pf-container{border-top:1px solid #bbb}@media (min-width:992px){.list-pf:not(.list-pf-stacked) .list-pf-container{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}}.list-pf-chevron{min-width:1.2em}.list-pf-chevron,.list-pf-select{margin-right:10px}.list-pf-chevron+.list-pf-content,.list-pf-select+.list-pf-content{border-left:1px solid #d1d1d1;padding-left:20px}.list-pf-chevron .fa,.list-pf-chevron .fab,.list-pf-chevron .fal,.list-pf-chevron .far,.list-pf-chevron .fas,.list-pf-select .fa,.list-pf-select .fab,.list-pf-select .fal,.list-pf-select .far,.list-pf-select .fas{font-size:22px}.list-pf-content-flex{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:nowrap;flex-wrap:nowrap;-ms-flex-pack:start;justify-content:flex-start;min-width:0}@media (min-width:992px){.list-pf:not(.list-pf-stacked) .list-pf-content-flex{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}}.list-pf-left{-ms-flex-positive:0;flex-grow:0;margin-left:0;margin-right:20px}.list-pf-icon{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center}.list-pf-icon-bordered{border-radius:50%;border:2px solid #39a5dc}.list-pf-icon-small{font-size:1.4em;height:30px;line-height:30px;width:30px}.list-pf-content-wrapper{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:0}@media (min-width:992px){.list-pf-content-wrapper{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.list-pf-content-wrapper>*+*{margin-left:40px}}.list-pf-stacked .list-pf-content-wrapper{-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}.list-pf-main-content{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-preferred-size:70%;flex-basis:70%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:0}@media (min-width:992px){.list-pf:not(.list-pf-stacked) .list-pf-main-content{-ms-flex-wrap:nowrap;flex-wrap:nowrap;width:auto}.list-pf:not(.list-pf-stacked) .list-pf-main-content>*+*{margin-left:40px}}.list-pf-title{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:100%;flex-basis:100%;font-weight:700;min-width:0;word-wrap:break-word}.list-pf-description{-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-preferred-size:100%;flex-basis:100%;min-width:0;word-wrap:break-word}.list-pf-additional-content{display:-ms-flexbox;display:flex;-ms-flex-preferred-size:31%;flex-basis:31%;-ms-flex-positive:1;flex-grow:1;-ms-flex-negative:1;flex-shrink:1;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.list-pf-actions{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-positive:0;flex-grow:0;margin-left:40px}.list-pf-actions>*+*{margin-left:10px}.list-view-pf .list-group-item{-ms-flex-align:start;align-items:flex-start;background-clip:padding-box;border-color:transparent #fff;border-style:solid;border-width:1px;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-bottom:0;padding-top:0}.list-view-pf .list-group-item:after,.list-view-pf .list-group-item:before{display:table;content:" "}.list-view-pf .list-group-item:after{clear:both}.list-view-pf .list-group-item.list-view-pf-expand-active{background-color:#def3ff;box-shadow:0 2px 6px rgba(3,3,3,.2);z-index:1}.list-view-pf .list-group-item.active{color:#555;background-color:#def3ff;background-clip:border-box;border-color:#bbb transparent transparent;z-index:auto}.list-view-pf .list-group-item:hover{background-color:#edf8ff;border-left-color:transparent;border-right-color:transparent}.list-view-pf .list-group-item.list-view-pf-expand-active{border:solid 1px #bbb}.list-view-pf .list-group-item.list-view-pf-expand-active:first-child{border-top-color:#bbb}.list-view-pf .list-group-item:first-child{border-top:1px solid transparent}@media (min-width:992px){.list-view-pf .list-group-item{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}}.list-view-pf .list-group-item-heading{font-size:16px}.list-view-pf .list-group-item-heading small{display:block;font-size:9.6px;font-weight:400}@media (min-width:992px){.list-view-pf .list-group-item-heading{-ms-flex:1 0 calc(25% - 20px);flex:1 0 calc(25% - 20px);float:left;font-size:12px;margin:0 20px 0 0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:calc(25% - 20px)}}.list-view-pf .list-group-item-text{color:currentColor!important;margin-bottom:10px}@media (min-width:992px){.list-view-pf .list-group-item-text{-ms-flex:1 0 auto;flex:1 0 auto;float:left;margin:0 40px 0 0;width:calc(75% - 40px)}}.list-view-pf .close{float:none;position:absolute;right:15px}.list-view-pf-actions{float:right;margin-bottom:20px;margin-left:20px;margin-top:20px;-ms-flex-order:2;order:2}.list-view-pf-actions .dropdown-kebab-pf,.list-view-pf-actions button,.list-view-pf-actions>a{margin-left:10px}.list-view-pf-top-align .list-view-pf-actions{-ms-flex-item-align:start;align-self:flex-start}.list-view-pf-additional-info{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}@media (min-width:992px){.list-view-pf-additional-info{-ms-flex:1 0 auto;flex:1 0 auto;float:left;width:50%}}.list-view-pf-additional-info-item{-ms-flex-align:center;align-items:center;display:inline-block;display:-ms-flexbox;display:flex;margin-right:20px;max-width:100%;text-align:center}.list-view-pf-additional-info-item.list-view-pf-additional-info-item-stacked{text-align:center;-ms-flex-direction:column;flex-direction:column}.list-view-pf-additional-info-item.list-view-pf-additional-info-item-stacked strong{font-size:13px;line-height:1em}.list-view-pf-additional-info-item .fa,.list-view-pf-additional-info-item .fab,.list-view-pf-additional-info-item .fal,.list-view-pf-additional-info-item .far,.list-view-pf-additional-info-item .fas,.list-view-pf-additional-info-item .pficon{font-size:16px;margin-right:10px}.list-view-pf-additional-info-item strong{font-size:16px;font-weight:600;margin-right:5px}.list-view-pf-additional-info-item:last-child{margin-right:0}.list-view-pf-additional-info-item-donut-chart{width:60px}.list-view-pf-body{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;display:table-cell;-ms-flex:1;flex:1;min-width:0;vertical-align:top;width:100%}@media (min-width:992px){.list-view-pf-body{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-direction:row;flex-direction:row}}.list-view-pf-checkbox{border-right:1px solid #d1d1d1;float:left;margin-bottom:20px;margin-right:15px;margin-top:20px;padding:3px 10px 3px 0}.list-view-pf-top-align .list-view-pf-checkbox{-ms-flex-item-align:start;align-self:flex-start}.list-view-pf-description{-ms-flex:1 0 50%;flex:1 0 50%}.list-view-pf-stacked .list-view-pf-description{display:block;-ms-flex:none;flex:none}@media (min-width:992px){.list-view-pf-description{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;float:left;width:50%}}.list-view-pf-left{display:table-cell;padding-right:20px;text-align:center;vertical-align:top}.list-view-pf-left .list-view-pf-calendar{font-size:11px;line-height:1em}.list-view-pf-left .list-view-pf-calendar strong{display:block;font-size:44px;font-weight:300;line-height:1em}.list-view-pf-left .fa,.list-view-pf-left .fab,.list-view-pf-left .fal,.list-view-pf-left .far,.list-view-pf-left .fas,.list-view-pf-left .pficon{border-radius:50%;font-size:2em}.list-view-pf-left .fa.list-view-pf-icon-md,.list-view-pf-left .fab.list-view-pf-icon-md,.list-view-pf-left .fal.list-view-pf-icon-md,.list-view-pf-left .far.list-view-pf-icon-md,.list-view-pf-left .fas.list-view-pf-icon-md,.list-view-pf-left .pficon.list-view-pf-icon-md{background-color:#f5f5f5;height:50px;line-height:50px;width:50px}.list-view-pf-left .fa.list-view-pf-icon-danger,.list-view-pf-left .fab.list-view-pf-icon-danger,.list-view-pf-left .fal.list-view-pf-icon-danger,.list-view-pf-left .far.list-view-pf-icon-danger,.list-view-pf-left .fas.list-view-pf-icon-danger,.list-view-pf-left .pficon.list-view-pf-icon-danger{background-color:#ffe6e6;color:#c00}.list-view-pf-left .fa.list-view-pf-icon-info,.list-view-pf-left .fab.list-view-pf-icon-info,.list-view-pf-left .fal.list-view-pf-icon-info,.list-view-pf-left .far.list-view-pf-icon-info,.list-view-pf-left .fas.list-view-pf-icon-info,.list-view-pf-left .pficon.list-view-pf-icon-info{color:#8b8d8f}.list-view-pf-left .fa.list-view-pf-icon-lg,.list-view-pf-left .fab.list-view-pf-icon-lg,.list-view-pf-left .fal.list-view-pf-icon-lg,.list-view-pf-left .far.list-view-pf-icon-lg,.list-view-pf-left .fas.list-view-pf-icon-lg,.list-view-pf-left .pficon.list-view-pf-icon-lg{background-color:#f5f5f5;height:60px;line-height:60px;width:60px}.list-view-pf-left .fa.list-view-pf-icon-sm,.list-view-pf-left .fab.list-view-pf-icon-sm,.list-view-pf-left .fal.list-view-pf-icon-sm,.list-view-pf-left .far.list-view-pf-icon-sm,.list-view-pf-left .fas.list-view-pf-icon-sm,.list-view-pf-left .pficon.list-view-pf-icon-sm{border:2px solid #39a5dc;font-size:1.4em;height:30px;line-height:30px;width:30px}.list-view-pf-left .fa.list-view-pf-icon-sm:before,.list-view-pf-left .fab.list-view-pf-icon-sm:before,.list-view-pf-left .fal.list-view-pf-icon-sm:before,.list-view-pf-left .far.list-view-pf-icon-sm:before,.list-view-pf-left .fas.list-view-pf-icon-sm:before,.list-view-pf-left .pficon.list-view-pf-icon-sm:before{display:block;line-height:26px}.list-view-pf-left .fa.list-view-pf-icon-success,.list-view-pf-left .fab.list-view-pf-icon-success,.list-view-pf-left .fal.list-view-pf-icon-success,.list-view-pf-left .far.list-view-pf-icon-success,.list-view-pf-left .fas.list-view-pf-icon-success,.list-view-pf-left .pficon.list-view-pf-icon-success{background-color:#e9f4e9;color:#3f9c35}.list-view-pf-left .fa.list-view-pf-icon-warning,.list-view-pf-left .fab.list-view-pf-icon-warning,.list-view-pf-left .fal.list-view-pf-icon-warning,.list-view-pf-left .far.list-view-pf-icon-warning,.list-view-pf-left .fas.list-view-pf-icon-warning,.list-view-pf-left .pficon.list-view-pf-icon-warning{background-color:#fdf2e5;color:#ec7a08}.list-view-pf-main-info{-ms-flex-align:start;align-items:flex-start;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;min-width:0;padding-bottom:20px;padding-top:20px}@media (min-width:992px){.list-view-pf-main-info{-ms-flex-align:center;-ms-grid-row-align:center;align-items:center}.list-view-pf-top-align .list-view-pf-main-info{-ms-flex-align:start;-ms-grid-row-align:flex-start;align-items:flex-start}}.list-view-pf-stacked .list-group-item-heading{float:none;font-size:16px;line-height:1.2em;margin-bottom:5px;margin-right:40px;width:auto}.list-view-pf-stacked .list-group-item-text{float:none;width:auto}.list-view-pf-view{background:#ededed;border:none;margin-top:30px}.list-group-item-header{box-sizing:content-box;cursor:pointer;margin:0 -15px;padding:0 15px;width:100%}.list-view-pf-expand{cursor:pointer;float:left;margin-bottom:20px;margin-right:2px;margin-top:20px;padding:3px 0}.list-view-pf-expand.active,.list-view-pf-expand:hover{color:#0088ce}.list-view-pf-additional-info-item .list-view-pf-expand{margin:0;padding:0}.list-view-pf-expand .fa-angle-right{cursor:pointer;font-size:17px;margin-right:5px;margin-top:2px;width:10px}.list-group-item-container{background:#fff;border-top:solid 1px #bbb;box-sizing:content-box;margin:-1px -15px 0;-ms-flex-order:3;order:3;padding:15px;position:relative;width:100%}.list-view-pf-editable.active .bootstrap-switch,.list-view-pf-editable.active .list-view-pf-actions .list-view-pf-cancel,.list-view-pf-editable.active .list-view-pf-actions .list-view-pf-save,.list-view-pf-editable.active .list-view-pf-editor,.list-view-pf-editable.active .list-view-pf-editor.bootstrap-select,.list-view-pf-editable.list-view-pf-create .bootstrap-switch,.list-view-pf-editable.list-view-pf-create .list-view-pf-actions .list-view-pf-cancel,.list-view-pf-editable.list-view-pf-create .list-view-pf-actions .list-view-pf-save,.list-view-pf-editable.list-view-pf-create .list-view-pf-editor,.list-view-pf-editable.list-view-pf-create .list-view-pf-editor.bootstrap-select{display:initial}.list-view-pf-editable.active .dropdown-kebab-pf,.list-view-pf-editable.active .list-view-pf-edit,.list-view-pf-editable.active .list-view-pf-value:not(.list-view-pf-readonly),.list-view-pf-editable.list-view-pf-create .dropdown-kebab-pf,.list-view-pf-editable.list-view-pf-create .list-view-pf-edit,.list-view-pf-editable.list-view-pf-create .list-view-pf-value:not(.list-view-pf-readonly){display:none}.list-view-pf-editable .bootstrap-switch,.list-view-pf-editable .list-view-pf-actions .list-view-pf-cancel,.list-view-pf-editable .list-view-pf-actions .list-view-pf-save,.list-view-pf-editable .list-view-pf-editor,.list-view-pf-editable .list-view-pf-editor.bootstrap-select{display:none}@media (min-width:768px){.list-view-pf-editable.active .list-view-pf-additional-info{margin-top:20px}}@media (min-width:992px){.list-view-pf-editable.active .list-view-pf-additional-info{margin-top:0}}.list-view-pf-editable.active .list-view-pf-additional-info .list-view-pf-additional-info-item{margin-top:20px}@media (min-width:768px){.list-view-pf-editable.active .list-view-pf-additional-info .list-view-pf-additional-info-item{margin-top:0}}.list-view-pf-editable .list-view-pf-textbox{margin-right:20px;width:100%}.list-view-pf-editable .list-view-pf-readonly{color:#8b8d8f}.list-view-pf-editable .list-view-pf-actions{margin:10px 0;width:100px;text-align:right}.list-view-pf-editable .list-view-pf-actions .list-view-pf-cancel,.list-view-pf-editable .list-view-pf-actions .list-view-pf-save{font-size:24px}@media (max-width:768px){.list-view-pf-editable .list-view-pf-actions .list-view-pf-cancel,.list-view-pf-editable .list-view-pf-actions .list-view-pf-save{margin-left:0}}.list-view-pf-editable .list-view-pf-description{-ms-flex:100%;flex:100%}@media (min-width:768px){.list-view-pf-editable .list-view-pf-description{-ms-flex:100%;flex:100%}}@media (min-width:992px){.list-view-pf-editable .list-view-pf-description{-ms-flex:25%;flex:25%}}.list-view-pf-editable .list-view-pf-additional-info{-ms-flex:100%;flex:100%}.list-view-pf-editable .list-view-pf-additional-info .list-view-pf-additional-info-item{-ms-flex:100%;flex:100%}@media (min-width:768px){.list-view-pf-editable .list-view-pf-additional-info{-ms-flex:100%;flex:100%}.list-view-pf-editable .list-view-pf-additional-info .list-view-pf-additional-info-item{-ms-flex:1;flex:1}}@media (min-width:992px){.list-view-pf-editable .list-view-pf-additional-info{-ms-flex:75%;flex:75%}.list-view-pf-editable .list-view-pf-additional-info .list-view-pf-additional-info-item{-ms-flex:1;flex:1}}.list-view-pf-dnd .dndDragging.drag-original{display:none}.list-view-pf-dnd .dndDragging.drag-original .list-view-pf-dnd-original-items{display:block}.list-view-pf-dnd .dndDragging .list-view-pf-dnd-drag-items{display:inline-block}.list-view-pf-dnd .dndDragging .list-view-pf-dnd-original-items{display:none}.list-view-pf-dnd .dndPlaceholder{background-color:#ededed;padding:20px 0}.list-view-pf-dnd .list-group-item-header{margin-left:-10px}.list-view-pf-dnd .list-group-item-header:before{background-image:linear-gradient(to bottom,#0088ce 60%,#fff 0);background-position:left;background-repeat:repeat-y;background-size:2px 5px;border:4px solid #0088ce;border-color:#00659c;content:"";height:55px;left:4px;position:absolute;top:5px;width:10px}.list-view-pf-dnd-drag-items{display:none}.login-pf{height:100%;background:#030303 url(../img/bg-login.jpg) repeat-x 50% 0;background-size:auto}@media (min-width:768px){.login-pf{background-size:100% auto}}.login-pf #brand{position:relative;top:-70px}.login-pf #brand img{display:block;height:18px;margin:0 auto;max-width:100%}@media (min-width:768px){.login-pf #brand img{margin:0;text-align:left}}.login-pf #badge{display:block;margin:20px auto 70px;position:relative;text-align:center}@media (min-width:768px){.login-pf #badge{float:right;margin-right:64px;margin-top:50px}}.login-pf body{background:#030303 url(../img/bg-login.jpg) repeat-x 50% 0;background-size:auto}@media (min-width:768px){.login-pf body{background-size:100% auto}}.login-pf .container{background-color:rgba(255,255,255,.055);clear:right;color:#fff;padding-bottom:40px;padding-top:20px;width:auto}@media (min-width:768px){.login-pf .container{bottom:13%;padding-left:80px;position:absolute;width:100%}}.login-pf .container .details p:first-child{border-top:1px solid rgba(255,255,255,.3);padding-top:25px;margin-top:25px}@media (min-width:768px){.login-pf .container .details{border-left:1px solid rgba(255,255,255,.3);padding-left:40px}.login-pf .container .details p:first-child{border-top:0;padding-top:0;margin-top:0}}.login-pf .container .details p{margin-bottom:2px}.login-pf .container .form-horizontal .control-label{font-size:13px;font-weight:400;text-align:left}.login-pf .container .form-horizontal .form-group:last-child,.login-pf .container .form-horizontal .form-group:last-child .help-block:last-child{margin-bottom:0}.login-pf .container .help-block{color:#fff}@media (min-width:768px){.login-pf .container .login{padding-right:40px}}.login-pf .container .submit{text-align:right}.login-pf-page{padding-top:20px}.login-pf-page .login-pf-brand{margin-top:0;max-width:360px;width:70%}@media (min-width:768px){.login-pf-page .login-pf-brand{margin-top:22px}}.login-pf-page .login-pf-page-header{margin-bottom:20px;text-align:center}@media (min-width:768px){.login-pf-page .login-pf-page-header{margin-bottom:40px}}.login-pf-page .login-pf-page-header p{color:#fff;font-size:14px;margin-left:auto;margin-right:auto;margin-top:20px}.login-pf-page .card-pf{padding:10px 20px 30px 20px;margin-bottom:0}@media (min-width:768px){.login-pf-page .card-pf{padding:20px 40px 30px 40px}}.login-pf-page .card-pf p{color:#72767b}.login-pf-page .form-control{height:36px}.login-pf-page .checkbox-label{color:#72767b;font-weight:300;margin-bottom:15px}@media (min-width:768px){.login-pf-page .checkbox-label{margin:0}}.login-pf-page .btn-primary{margin-top:40px}.login-pf-page .login-pf-header{margin-bottom:20px;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}@media (min-width:768px){.login-pf-page .login-pf-header{margin-bottom:10px}}.login-pf-page .login-pf-header h1{text-align:center}.login-pf-page .login-pf-header h1{font-size:16px}@media (min-width:768px){.login-pf-page .login-pf-header h1{font-size:24px}}.login-pf-page .login-pf-header .bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn){width:auto;-ms-flex-item-align:end;align-self:flex-end}.login-pf-page .login-pf-header .bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) .dropdown-toggle{color:#4d5258;background:0 0;padding:0 15px 0 0;font-weight:300}.login-pf-page .login-pf-header .bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) .dropdown-toggle:not(:focus){box-shadow:none;border:1px solid transparent}.login-pf-page .login-pf-header .bootstrap-select:not([class*=col-]):not([class*=form-control]):not(.input-group-btn) .dropdown-toggle .caret{right:0}.login-pf-page .login-pf-signup{margin:40px 0 0;font-size:15px;text-align:center}.login-pf-page .login-pf-signup a{margin-left:10px}.login-pf-page .login-pf-settings{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap}.login-pf-page .login-pf-page-footer{display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-bottom:50px}@media (min-width:768px){.login-pf-page .login-pf-page-footer{padding-bottom:100px}}.login-pf-page .login-pf-page-footer-links{display:-ms-flexbox;display:flex;margin:60px 0 0 0}.login-pf-page .login-pf-page-footer-links li:not(:last-of-type){position:relative;margin:0 20px 0 0}.login-pf-page .login-pf-page-footer-links li:not(:last-of-type):after{content:".";color:#fff;position:absolute;top:0;right:-10px}.login-pf-page .login-pf-page-footer-link{color:#fff;font-size:14px}.login-pf-page .login-pf-page-footer-sso-services{-ms-flex:1 0 100%;flex:1 0 100%;margin-top:40px;text-align:center;color:#fff}.login-pf-page .login-pf-page-footer-sso-services-logos{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:0;margin:0;list-style:none;-ms-flex-pack:center;justify-content:center}.login-pf-page .login-pf-page-footer-sso-services-logos li{margin:0 5px 5px}.login-pf-page.login-pf-page-accounts{margin-left:20px;margin-right:20px}.login-pf-page .login-pf-accounts{display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between;-ms-flex-wrap:wrap;flex-wrap:wrap;max-width:840px;margin-left:auto;margin-right:auto}.login-pf-page .login-pf-accounts .login-pf-header,.login-pf-page .login-pf-accounts .login-pf-signup{-ms-flex-preferred-size:100%;flex-basis:100%}.login-pf-page .login-pf-social-section{-ms-flex-preferred-size:100%;flex-basis:100%;padding:0}@media (min-width:768px){.login-pf-page .login-pf-social-section{-ms-flex:0 1 50%;flex:0 1 50%;max-width:50%}}@media (min-width:768px){.login-pf-page .login-pf-social-section:first-of-type{padding-right:40px}.login-pf-page .login-pf-social-section:last-of-type{padding-left:39px;border-left:1px solid #d1d1d1}}.login-pf-page .login-pf-social{margin:40px 0 0 0}@media (min-width:768px){.login-pf-page .login-pf-social{margin:0}.login-pf-page .login-pf-social-double-col{-ms-flex-wrap:wrap;flex-wrap:wrap;display:-ms-flexbox;display:flex;-ms-flex-pack:justify;justify-content:space-between}.login-pf-page .login-pf-social-double-col .login-pf-social-link{-ms-flex-preferred-size:48%;flex-basis:48%}}.login-pf-page .login-pf-social:not(.login-pf-social-all) .login-pf-social-link-more{display:none}.login-pf-page .login-pf-social-link{margin-bottom:15px}.login-pf-page .login-pf-social-link a{display:block;padding:7px 0;font-size:14px;background:#f5f5f5;text-align:center;color:#72767b}.login-pf-page .login-pf-social-link a img{margin:0 10px 0 0;width:20px;height:20px}.login-pf-page .login-pf-social-link a:hover{text-decoration:none;background:#ededed}.login-pf-page .login-pf-social-toggle{float:right;padding:0}.login-pf-page .login-pf-social-toggle .caret{margin-left:5px}.login-pf-page .login-pf-social-toggle-active .caret{-ms-transform:rotate(-180deg);transform:rotate(-180deg)}.navbar-pf{background:#030303;border:0;border-radius:0;border-top:3px solid #39a5dc;margin-bottom:0;min-height:0}.navbar-pf .navbar-brand{color:#f5f5f5;height:auto;padding:12px 0;margin:0 0 0 20px}.navbar-pf .navbar-brand img{display:block}.navbar-pf .navbar-collapse{border-top:0;box-shadow:none;padding:0}.navbar-pf .navbar-header{border-bottom:1px solid #292929;float:none}.navbar-pf .navbar-nav{margin:0}.navbar-pf .navbar-nav>.active>a,.navbar-pf .navbar-nav>.active>a:focus,.navbar-pf .navbar-nav>.active>a:hover,.navbar-pf .navbar-nav>.active>button,.navbar-pf .navbar-nav>.active>button:focus,.navbar-pf .navbar-nav>.active>button:hover{background-color:rgba(255,255,255,.24);color:#f5f5f5}.navbar-pf .navbar-nav>li>a,.navbar-pf .navbar-nav>li>button{color:#d1d1d1;line-height:1;padding:10px 20px;text-shadow:none}.navbar-pf .navbar-nav>li>a:focus,.navbar-pf .navbar-nav>li>a:hover,.navbar-pf .navbar-nav>li>button:focus,.navbar-pf .navbar-nav>li>button:hover{color:#f5f5f5;text-decoration:none}.navbar-pf .navbar-nav>li>a>.dropdown-title,.navbar-pf .navbar-nav>li>a>.pficon-user,.navbar-pf .navbar-nav>li>button>.dropdown-title,.navbar-pf .navbar-nav>li>button>.pficon-user{position:relative}.navbar-pf .navbar-nav>li>a>.pficon-user,.navbar-pf .navbar-nav>li>button>.pficon-user{padding-right:4px}.navbar-pf .navbar-nav>.open>a,.navbar-pf .navbar-nav>.open>a:focus,.navbar-pf .navbar-nav>.open>a:hover,.navbar-pf .navbar-nav>.open>button,.navbar-pf .navbar-nav>.open>button:focus,.navbar-pf .navbar-nav>.open>button:hover{background-color:rgba(255,255,255,.24);color:#f5f5f5;outline:0}.navbar-pf .navbar-nav .badge{background-color:#0088ce;border-radius:20px;color:#fff;cursor:pointer;font-size:9px;font-weight:700;left:26px;margin:0;padding:2px 4px;position:absolute;min-width:10px;min-height:10px;top:6px}@media (min-width:768px){.navbar-pf .navbar-nav .badge{left:auto;right:6px;top:3px}}.navbar-pf .navbar-nav .badge.badge-pf-bordered{border:1px solid #030303}@media (max-width:767px){.navbar-pf .navbar-nav .active .dropdown-menu,.navbar-pf .navbar-nav .active .navbar-persistent,.navbar-pf .navbar-nav .open .dropdown-menu{background-color:#171717!important;margin-left:0;padding-bottom:0;padding-top:0}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open>a,.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open>a:focus,.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open>a:hover,.navbar-pf .navbar-nav .active .dropdown-menu>.active>a,.navbar-pf .navbar-nav .active .dropdown-menu>.active>a:focus,.navbar-pf .navbar-nav .active .dropdown-menu>.active>a:hover,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open>a,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open>a:focus,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open>a:hover,.navbar-pf .navbar-nav .active .navbar-persistent>.active>a,.navbar-pf .navbar-nav .active .navbar-persistent>.active>a:focus,.navbar-pf .navbar-nav .active .navbar-persistent>.active>a:hover,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open>a,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open>a:focus,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open>a:hover,.navbar-pf .navbar-nav .open .dropdown-menu>.active>a,.navbar-pf .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-pf .navbar-nav .open .dropdown-menu>.active>a:hover{background-color:rgba(255,255,255,.24)!important;color:#f5f5f5}.navbar-pf .navbar-nav .active .dropdown-menu>li>a,.navbar-pf .navbar-nav .active .navbar-persistent>li>a,.navbar-pf .navbar-nav .open .dropdown-menu>li>a{background-color:transparent;border:0;color:#d1d1d1;outline:0;padding-left:30px}.navbar-pf .navbar-nav .active .dropdown-menu>li>a:hover,.navbar-pf .navbar-nav .active .navbar-persistent>li>a:hover,.navbar-pf .navbar-nav .open .dropdown-menu>li>a:hover{color:#f5f5f5}.navbar-pf .navbar-nav .active .dropdown-menu .divider,.navbar-pf .navbar-nav .active .navbar-persistent .divider,.navbar-pf .navbar-nav .open .dropdown-menu .divider{background-color:#292929;margin:0 1px}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-header,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-header,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-header{padding-bottom:0;padding-left:30px}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.open .dropdown-toggle,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open .dropdown-toggle,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.open .dropdown-toggle{color:#f5f5f5}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu.pull-left,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.pull-left,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu.pull-left{float:none!important}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu>a:after,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu>a:after,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu>a:after{display:none}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-header,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-header,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-header{padding-left:45px}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu{border:0;bottom:auto;box-shadow:none;display:block;float:none;margin:0;min-width:0;padding:0;position:relative;left:auto;right:auto;top:auto}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu>li>a,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu>li>a,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu>li>a{padding:5px 15px 5px 45px;line-height:20px}.navbar-pf .navbar-nav .active .dropdown-menu .dropdown-submenu .dropdown-menu .dropdown-menu>li>a,.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu .dropdown-menu>li>a,.navbar-pf .navbar-nav .open .dropdown-menu .dropdown-submenu .dropdown-menu .dropdown-menu>li>a{padding-left:60px}.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu.open .dropdown-menu{display:block}.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu>a:after{display:inline-block!important;position:relative;right:auto;top:1px}.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-menu{display:none}.navbar-pf .navbar-nav .active .navbar-persistent .dropdown-submenu .dropdown-submenu>a:after{display:none!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu{background-color:#fff!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.active>a,.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.active>a:active{background-color:#def3ff!important;border-color:#bee1f4!important;color:#363636!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.active>a small,.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.active>a:active small{color:#9c9c9c!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.disabled>a{color:#9c9c9c!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.selected>a,.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.selected>a:active{background-color:#0088ce!important;border-color:#0088ce!important;color:#fff!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.selected>a small,.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu>.selected>a:active small{color:rgba(255,255,255,.5)!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu li>a.opt{border-bottom:1px solid transparent;border-top:1px solid transparent;color:#363636;padding-left:10px;padding-right:10px}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu li a:active small{color:rgba(255,255,255,.5)!important}.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu li a:focus small,.navbar-pf .navbar-nav .context-bootstrap-select .open>.dropdown-menu li a:hover small{color:#9c9c9c}.navbar-pf .navbar-nav .context-bootstrap-select>.open>.dropdown-menu{padding-bottom:5px;padding-top:5px}}.navbar-pf .navbar-persistent{display:none}.navbar-pf .active>.navbar-persistent{display:block}.navbar-pf .navbar-primary{float:none}.navbar-pf .navbar-primary .context{border-bottom:1px solid #292929}.navbar-pf .navbar-primary .context.context-bootstrap-select .bootstrap-select.btn-group,.navbar-pf .navbar-primary .context.context-bootstrap-select .bootstrap-select.btn-group[class*=span]{margin:8px 20px 9px;width:auto}.navbar-pf .navbar-primary>li>.navbar-persistent>.dropdown-submenu>a{position:relative}.navbar-pf .navbar-primary>li>.navbar-persistent>.dropdown-submenu>a:after{content:"\f107";display:inline-block;font-family:FontAwesome;font-weight:400}@media (max-width:767px){.navbar-pf .navbar-primary>li>.navbar-persistent>.dropdown-submenu>a:after{height:10px;margin-left:4px;vertical-align:baseline}}.navbar-pf .navbar-toggle{border:0;margin:0;padding:10px 20px}.navbar-pf .navbar-toggle:focus,.navbar-pf .navbar-toggle:hover{background-color:transparent;outline:0}.navbar-pf .navbar-toggle:focus .icon-bar,.navbar-pf .navbar-toggle:hover .icon-bar{box-shadow:0 0 3px #fff}.navbar-pf .navbar-toggle .icon-bar{background-color:#fff}.navbar-pf .navbar-utility{border-bottom:1px solid #292929}.navbar-pf .navbar-utility li.dropdown>a,.navbar-pf .navbar-utility li.dropdown>button{position:relative}.navbar-pf .navbar-utility li.dropdown>a:hover,.navbar-pf .navbar-utility li.dropdown>button:hover{outline:0!important}.navbar-pf .navbar-utility li.dropdown>a .fab,.navbar-pf .navbar-utility li.dropdown>a .fal,.navbar-pf .navbar-utility li.dropdown>a .far,.navbar-pf .navbar-utility li.dropdown>a .fas,.navbar-pf .navbar-utility li.dropdown>a .pficon,.navbar-pf .navbar-utility li.dropdown>a>.fa,.navbar-pf .navbar-utility li.dropdown>button .fab,.navbar-pf .navbar-utility li.dropdown>button .fal,.navbar-pf .navbar-utility li.dropdown>button .far,.navbar-pf .navbar-utility li.dropdown>button .fas,.navbar-pf .navbar-utility li.dropdown>button .pficon,.navbar-pf .navbar-utility li.dropdown>button>.fa{line-height:0}@media (max-width:767px){.navbar-pf .navbar-utility>li+li{border-top:1px solid #292929}}@media (min-width:768px){.navbar-pf .navbar-brand{padding:8px 0 7px}.navbar-pf .navbar-nav>li>a,.navbar-pf .navbar-nav>li>button{padding-bottom:14px;padding-top:14px}.navbar-pf .navbar-persistent{font-size:14px}.navbar-pf .navbar-primary{font-size:14px;background-image:linear-gradient(to bottom,#1d1d1d 0,#030303 100%);background-repeat:repeat-x}.navbar-pf .navbar-primary.persistent-secondary .context .dropdown-menu{top:auto}.navbar-pf .navbar-primary.persistent-secondary .dropup .dropdown-menu{bottom:-5px;top:auto}.navbar-pf .navbar-primary.persistent-secondary>li{position:static}.navbar-pf .navbar-primary.persistent-secondary>li.active{margin-bottom:32px}.navbar-pf .navbar-primary.persistent-secondary>li.active>.navbar-persistent{display:block;left:0;position:absolute}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent{background:#f5f5f5;border-bottom:1px solid #d1d1d1;padding:0;width:100%}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent a{text-decoration:none!important}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active:before,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active:hover:before{background:#0088ce;bottom:-1px;content:"";display:block;height:2px;left:20px;position:absolute;right:20px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active:hover>a,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active>a,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active>a:hover{color:#0088ce!important}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.active .active>a{color:#f5f5f5}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu:hover>.dropdown-menu{display:none}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu.open>.dropdown-menu{display:block;left:20px;margin-top:1px;top:100%}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu.open>.dropdown-toggle{color:#252525}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu.open>.dropdown-toggle:after{border-top-color:#252525}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu>.dropdown-toggle{padding-right:35px!important}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.dropdown-submenu>.dropdown-toggle:after{position:absolute;right:20px;top:10px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.open:before,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li:hover:before{background:#bbb;bottom:-1px;content:"";display:block;height:2px;left:20px;position:absolute;right:20px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.open>a,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li:hover>a{color:#252525}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li.open>a:after,.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li:hover>a:after{border-top-color:#252525}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li>a{background-color:transparent;display:block;line-height:1;padding:9px 20px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li>a.dropdown-toggle{padding-right:35px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li>a.dropdown-toggle:after{font-size:15px;position:absolute;right:20px;top:9px}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li>a:hover{color:#252525}.navbar-pf .navbar-primary.persistent-secondary>li>.navbar-persistent>li a{color:#4d5258}.navbar-pf .navbar-primary>li>a,.navbar-pf .navbar-primary>li>button{border-bottom:1px solid transparent;border-top:1px solid transparent;position:relative;margin:-1px 0 0}.navbar-pf .navbar-primary>li>a:hover,.navbar-pf .navbar-primary>li>button:hover{background-color:rgba(255,255,255,.14);border-top-color:#5c5c5c;color:#d1d1d1;background-image:linear-gradient(to bottom,#363636 0,#1d1d1d 100%);background-repeat:repeat-x}.navbar-pf .navbar-primary .open>a,.navbar-pf .navbar-primary .open>a:focus,.navbar-pf .navbar-primary .open>a:hover,.navbar-pf .navbar-primary .open>button,.navbar-pf .navbar-primary .open>button:focus,.navbar-pf .navbar-primary .open>button:hover,.navbar-pf .navbar-primary>.active>a,.navbar-pf .navbar-primary>.active>a:focus,.navbar-pf .navbar-primary>.active>a:hover,.navbar-pf .navbar-primary>.active>button,.navbar-pf .navbar-primary>.active>button:focus,.navbar-pf .navbar-primary>.active>button:hover{background-color:rgba(255,255,255,.24);border-bottom-color:#303030;border-top-color:#696969;box-shadow:none;color:#f5f5f5;background-image:linear-gradient(to bottom,#434343 0,#303030 100%);background-repeat:repeat-x}.navbar-pf .navbar-primary li.context.context-bootstrap-select .filter-option{max-width:160px;text-overflow:ellipsis}.navbar-pf .navbar-primary li.context.dropdown{border-bottom:0}.navbar-pf .navbar-primary li.context.context-bootstrap-select,.navbar-pf .navbar-primary li.context>a{background-color:#1f1f1f;border-bottom-color:#3e3e3e;border-right:1px solid #3e3e3e;border-top-color:#3b3b3b;font-weight:600;background-image:linear-gradient(to bottom,#323232 0,#1f1f1f 100%);background-repeat:repeat-x}.navbar-pf .navbar-primary li.context.context-bootstrap-select:hover,.navbar-pf .navbar-primary li.context>a:hover{background-color:#323232;border-bottom-color:#4a4a4a;border-right-color:#4a4a4a;border-top-color:#4a4a4a;background-image:linear-gradient(to bottom,#3f3f3f 0,#323232 100%);background-repeat:repeat-x}.navbar-pf .navbar-primary li.context.open>a{background-color:#454545;border-bottom-color:#575757;border-right-color:#575757;border-top-color:#5a5a5a;background-image:linear-gradient(to bottom,#4c4c4c 0,#454545 100%);background-repeat:repeat-x}.navbar-pf .navbar-utility{border-bottom:0;position:absolute;right:0;top:0}.navbar-pf .navbar-utility>.active>a,.navbar-pf .navbar-utility>.active>a:focus,.navbar-pf .navbar-utility>.active>a:hover,.navbar-pf .navbar-utility>.active>button,.navbar-pf .navbar-utility>.active>button:focus,.navbar-pf .navbar-utility>.active>button:hover,.navbar-pf .navbar-utility>.open>a,.navbar-pf .navbar-utility>.open>a:focus,.navbar-pf .navbar-utility>.open>a:hover,.navbar-pf .navbar-utility>.open>button,.navbar-pf .navbar-utility>.open>button:focus,.navbar-pf .navbar-utility>.open>button:hover{background:rgba(255,255,255,.24);color:#f5f5f5}.navbar-pf .navbar-utility>li>a,.navbar-pf .navbar-utility>li>button{border:solid #2b2b2b;border-width:0 0 0 1px;color:#d1d1d1!important;padding:7px 10px;font-size:11px;margin:0}.navbar-pf .navbar-utility>li>a:hover,.navbar-pf .navbar-utility>li>button:hover{background:rgba(255,255,255,.14);border-left-color:#373737;outline:0}.navbar-pf .navbar-utility>li.open>a,.navbar-pf .navbar-utility>li.open>button{border-left-color:#444;color:#f5f5f5!important}.navbar-pf .navbar-utility .open .dropdown-menu{left:auto;right:0}.navbar-pf .navbar-utility .open .dropdown-menu .dropdown-menu{left:auto;right:100%}.navbar-pf .navbar-utility .open .dropdown-menu{border-top-width:0}.navbar-pf .open .dropdown-submenu>.dropdown-menu,.navbar-pf .open.bootstrap-select .dropdown-menu{border-top-width:1px!important}}@media (max-width:360px){.navbar-pf .navbar-brand{margin-left:10px;width:75%}.navbar-pf .navbar-brand img{height:auto;max-width:100%}.navbar-pf .navbar-toggle{padding-left:0}}.navbar-pf-alt{background-color:#030303;background-image:"bg-navbar-pf-alt.svg";background-repeat:no-repeat;background-size:auto 100%;border:none;border-radius:0;border-top:2px solid #39a5dc;margin-bottom:0}.navbar-pf-alt .infotip.bottom-right .arrow{left:90%}.layout-pf-alt-fixed .navbar-pf-alt{left:0;position:fixed;right:0;top:0;z-index:1030}.navbar-pf-alt .nav.navbar-nav>li>.dropdown-menu.infotip{margin-top:0}.navbar-pf-alt .nav .nav-item-iconic{cursor:pointer;line-height:1;max-height:58px;padding:21px 12px;position:relative}.navbar-pf-alt .nav .nav-item-iconic:focus,.navbar-pf-alt .nav .nav-item-iconic:hover{background-color:transparent}.navbar-pf-alt .nav .nav-item-iconic:focus .caret,.navbar-pf-alt .nav .nav-item-iconic:focus .fa,.navbar-pf-alt .nav .nav-item-iconic:focus .fab,.navbar-pf-alt .nav .nav-item-iconic:focus .fal,.navbar-pf-alt .nav .nav-item-iconic:focus .far,.navbar-pf-alt .nav .nav-item-iconic:focus .fas,.navbar-pf-alt .nav .nav-item-iconic:focus .glyphicon,.navbar-pf-alt .nav .nav-item-iconic:focus .pficon,.navbar-pf-alt .nav .nav-item-iconic:hover .caret,.navbar-pf-alt .nav .nav-item-iconic:hover .fa,.navbar-pf-alt .nav .nav-item-iconic:hover .fab,.navbar-pf-alt .nav .nav-item-iconic:hover .fal,.navbar-pf-alt .nav .nav-item-iconic:hover .far,.navbar-pf-alt .nav .nav-item-iconic:hover .fas,.navbar-pf-alt .nav .nav-item-iconic:hover .glyphicon,.navbar-pf-alt .nav .nav-item-iconic:hover .pficon{color:#fff}.navbar-pf-alt .nav .nav-item-iconic .badge{background-color:#0088ce;border-radius:20px;color:#fff;cursor:pointer;font-size:9px;font-weight:700;margin:0 0 -11px -12px;min-width:0;padding:2px 4px}.navbar-pf-alt .nav .nav-item-iconic .caret,.navbar-pf-alt .nav .nav-item-iconic .fa,.navbar-pf-alt .nav .nav-item-iconic .fab,.navbar-pf-alt .nav .nav-item-iconic .fal,.navbar-pf-alt .nav .nav-item-iconic .far,.navbar-pf-alt .nav .nav-item-iconic .fas,.navbar-pf-alt .nav .nav-item-iconic .pficon{color:#d1d1d1;font-size:16px}.navbar-pf-alt .nav .nav-item-iconic .caret{font-size:12px;width:auto}.navbar-pf-alt .nav .open>.nav-item-iconic,.navbar-pf-alt .nav .open>.nav-item-iconic:focus,.navbar-pf-alt .nav .open>.nav-item-iconic:hover{background:0 0}.navbar-pf-alt .nav .open>.nav-item-iconic .caret,.navbar-pf-alt .nav .open>.nav-item-iconic .fa,.navbar-pf-alt .nav .open>.nav-item-iconic .fab,.navbar-pf-alt .nav .open>.nav-item-iconic .fal,.navbar-pf-alt .nav .open>.nav-item-iconic .far,.navbar-pf-alt .nav .open>.nav-item-iconic .fas,.navbar-pf-alt .nav .open>.nav-item-iconic .pficon,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .caret,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .fa,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .fab,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .fal,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .far,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .fas,.navbar-pf-alt .nav .open>.nav-item-iconic:focus .pficon,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .caret,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .fa,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .fab,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .fal,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .far,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .fas,.navbar-pf-alt .nav .open>.nav-item-iconic:hover .pficon{color:#fff}.navbar-pf-alt .navbar-brand{color:#fff;height:auto;margin:0 0 0 25px;min-height:35px;padding:11px 0 12px}.navbar-pf-alt .navbar-brand .navbar-brand-name{display:inline;margin-left:0 15px 0 0;margin-right:0 15px 0 0}@media (max-width:480px){.navbar-pf-alt .navbar-brand .navbar-brand-name{display:none}}.navbar-pf-alt .navbar-brand .navbar-brand-icon{display:inline;margin-left:0 15px 0 0;margin-right:0 15px 0 0}.navbar-pf-alt .navbar-iconic{margin-right:0}.navbar-pf-alt .navbar-toggle{border:0;display:block;float:left;margin:13px 15px}.navbar-pf-alt .navbar-toggle:focus .icon-bar,.navbar-pf-alt .navbar-toggle:hover .icon-bar{background:#fff}.navbar-pf-alt .navbar-toggle+.navbar-brand{margin-left:0}.navbar-pf-alt .navbar-toggle .icon-bar{background:#d1d1d1}.navbar-pf-vertical{background-color:#1d1d1d;border:none;border-radius:0;border-top:2px solid #39a5dc;margin-bottom:0}.navbar-pf-vertical .infotip.bottom-right .arrow{left:90%}.layout-pf-fixed .navbar-pf-vertical{left:0;position:fixed;right:0;top:0;z-index:1030}.navbar-pf-vertical .nav.navbar-nav>li>.dropdown-menu.infotip{margin-top:0}.navbar-pf-vertical .nav .nav-item-iconic{color:#d1d1d1;cursor:pointer;line-height:1;max-height:58px;padding:21px 12px;position:relative;margin:0;border:0}.navbar-pf-vertical .nav .nav-item-iconic:hover{outline:0!important}.navbar-pf-vertical .nav .nav-item-iconic:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color}.navbar-pf-vertical .nav .nav-item-iconic:focus,.navbar-pf-vertical .nav .nav-item-iconic:hover{background-color:rgba(255,255,255,.14);text-decoration:none}.navbar-pf-vertical .nav .nav-item-iconic .badge{background-color:#0088ce;border-radius:20px;color:#fff;cursor:pointer;font-size:9px;font-weight:700;left:20px;margin:0;padding:2px 4px;position:absolute;min-width:10px;min-height:10px;top:18px}.navbar-pf-vertical .nav .nav-item-iconic .badge.badge-pf-bordered{border:1px solid #1d1d1d}.navbar-pf-vertical .nav .nav-item-iconic .caret,.navbar-pf-vertical .nav .nav-item-iconic .fa,.navbar-pf-vertical .nav .nav-item-iconic .fab,.navbar-pf-vertical .nav .nav-item-iconic .fal,.navbar-pf-vertical .nav .nav-item-iconic .far,.navbar-pf-vertical .nav .nav-item-iconic .fas,.navbar-pf-vertical .nav .nav-item-iconic .pficon{color:#d1d1d1;font-size:16px;position:relative}.navbar-pf-vertical .nav .nav-item-iconic .caret{font-size:12px;width:auto}.navbar-pf-vertical .nav .nav-item-iconic>.dropdown-title{position:relative;display:inline-block;line-height:1.55}.navbar-pf-vertical .nav .nav-item-iconic>.pficon-user{padding-right:calc(4px + 3px);float:left}.navbar-pf-vertical .nav .open>.nav-item-iconic,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover{background:rgba(255,255,255,.24);color:#fff;outline:0}.navbar-pf-vertical .nav .open>.nav-item-iconic .caret,.navbar-pf-vertical .nav .open>.nav-item-iconic .fa,.navbar-pf-vertical .nav .open>.nav-item-iconic .fab,.navbar-pf-vertical .nav .open>.nav-item-iconic .fal,.navbar-pf-vertical .nav .open>.nav-item-iconic .far,.navbar-pf-vertical .nav .open>.nav-item-iconic .fas,.navbar-pf-vertical .nav .open>.nav-item-iconic .pficon,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .caret,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .fa,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .fab,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .fal,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .far,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .fas,.navbar-pf-vertical .nav .open>.nav-item-iconic:focus .pficon,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .caret,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .fa,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .fab,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .fal,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .far,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .fas,.navbar-pf-vertical .nav .open>.nav-item-iconic:hover .pficon{color:#fff}.navbar-pf-vertical .navbar-brand{color:#fff;height:auto;margin:0 0 0 25px;min-height:35px;padding:11px 0 12px}.navbar-pf-vertical .navbar-brand .navbar-brand-name{display:inline-block;margin:0 15px 0 0}@media (max-width:480px){.navbar-pf-vertical .navbar-brand .navbar-brand-name{display:none}}.navbar-pf-vertical .navbar-brand .navbar-brand-icon{display:inline-block;margin:0 15px 0 0;max-height:35px}.navbar-pf-vertical .navbar-brand .navbar-brand-txt{line-height:34px}.navbar-pf-vertical .navbar-iconic{margin-right:0}.navbar-pf-vertical .navbar-toggle{border:0;display:block;float:left;margin:13px 15px}.navbar-pf-vertical .navbar-toggle:focus .icon-bar,.navbar-pf-vertical .navbar-toggle:hover .icon-bar{background:#fff}.navbar-pf-vertical .navbar-toggle+.navbar-brand{margin-left:0}.navbar-pf-vertical .navbar-toggle .icon-bar{background:#d1d1d1}.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt{transition:all .2s cubic-bezier(.35,0,.25,1)}.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt.collapsed .list-group-item .list-group-item-value{transition:opacity 0s .1s,opacity .1s linear}.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt .list-group-item .badge{transition:all .2s cubic-bezier(.35,0,.25,1)}.layout-pf-alt-fixed.transitions .nav-pf-vertical-alt .list-group-item .list-group-item-value{transition:opacity .5s ease-out;transition-delay:150ms}.nav-pf-vertical-alt{background:#fff}.ie9.layout-pf-alt-fixed .nav-pf-vertical-alt{box-sizing:content-box}.layout-pf-alt-fixed .nav-pf-vertical-alt{border-right:1px solid #d1d1d1;bottom:0;overflow-x:hidden;overflow-y:auto;left:0;position:fixed;top:60px;width:250px;z-index:1030}.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed{width:75px!important}.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed .list-group-item .badge{padding:2px 3px;right:21px;top:36px}.layout-pf-alt-fixed .nav-pf-vertical-alt.collapsed .list-group-item .list-group-item-value{opacity:0}.layout-pf-alt-fixed .nav-pf-vertical-alt.hidden{display:none}.layout-pf-alt-fixed .nav-pf-vertical-alt.hidden.show-mobile-nav{box-shadow:0 0 3px rgba(3,3,3,.15);display:block!important}.layout-pf-alt-fixed-with-footer .nav-pf-vertical-alt{bottom:37px}.nav-pf-vertical-alt .list-group{border-top:0;margin-bottom:0}.nav-pf-vertical-alt .list-group-item{padding:0}.nav-pf-vertical-alt .list-group-item a{color:#363636;display:block;font-size:14px;height:63px;padding:17px 20px 17px 25px;position:relative;white-space:nowrap}.nav-pf-vertical-alt .list-group-item a:focus{color:#363636;text-decoration:none}.nav-pf-vertical-alt .list-group-item a:hover{color:#39a5dc;text-decoration:none}.nav-pf-vertical-alt .list-group-item.active{background-color:#fff;border-color:#f5f5f5}.nav-pf-vertical-alt .list-group-item.active:before{background:#39a5dc;content:" ";display:block;height:100%;left:0;position:absolute;top:0;width:5px}.nav-pf-vertical-alt .list-group-item.active a{color:#39a5dc}.nav-pf-vertical-alt .list-group-item .badge{background:#363636;border:1px solid #fff;border-radius:3px;color:#fff;font-weight:700;font-size:9px;padding:5px;position:absolute;right:15px;text-align:center;top:21px}.nav-pf-vertical-alt .list-group-item .badge.notifications{background:#0088ce}.nav-pf-vertical-alt .list-group-item .fa,.nav-pf-vertical-alt .list-group-item .fab,.nav-pf-vertical-alt .list-group-item .fal,.nav-pf-vertical-alt .list-group-item .far,.nav-pf-vertical-alt .list-group-item .fas,.nav-pf-vertical-alt .list-group-item .glyphicon,.nav-pf-vertical-alt .list-group-item .pficon{float:left;font-size:18px;line-height:30px;margin-right:10px;text-align:center;width:18px}.nav-pf-vertical-alt .list-group-item .list-group-item-value{display:inline-block;line-height:30px;opacity:1;overflow:hidden;text-overflow:ellipsis;width:140px}.nav-pf-vertical-alt .list-group-item-separator{border-top-width:5px}.sidebar-pf .nav-pf-vertical-alt{margin-left:-20px;margin-right:-20px}.drawer-pf{background-color:#fafafa;border:1px solid #d1d1d1;box-shadow:0 6px 12px rgba(3,3,3,.175);overflow-y:auto;position:absolute;right:0;width:320px;z-index:2}.drawer-pf .panel{border-bottom:none;border-left:none;border-right:none}.drawer-pf .panel-group .panel-heading+.panel-collapse .panel-body{border-top:none;border-bottom:1px solid #d1d1d1;padding:0}.drawer-pf .panel-counter{display:block;font-style:italic;line-height:1.2;padding-left:18px;padding-top:5px}.drawer-pf .panel-heading{border-bottom:1px solid #d1d1d1}.drawer-pf .panel-group{bottom:0;margin-bottom:0;position:absolute;top:25px;width:100%}.drawer-pf .panel-title a{cursor:pointer;display:block}.drawer-pf.drawer-pf-expanded{width:inherit}@media (max-width:767px){.drawer-pf.drawer-pf-expanded{left:0;width:100%}}@media (min-width:767px){.drawer-pf.drawer-pf-expanded{left:270px}}.drawer-pf.drawer-pf-expanded .drawer-pf-toggle-expand:before{content:"\f101"}.drawer-pf .blank-slate-pf{border:0;margin-bottom:0;padding:30px}.drawer-pf .blank-slate-pf .blank-slate-pf-icon{font-size:3em;line-height:1em}.drawer-pf .blank-slate-pf h1{font-size:1em;margin-bottom:0;margin-top:15px}.drawer-pf-close,.drawer-pf-toggle-expand{color:#252525;cursor:pointer;line-height:inherit;padding:2px 10px;position:absolute}.drawer-pf-close:focus,.drawer-pf-close:hover,.drawer-pf-toggle-expand:focus,.drawer-pf-toggle-expand:hover{color:#0088ce;text-decoration:none}.drawer-pf-toggle-expand{left:0}.drawer-pf-toggle-expand:before{content:"\f100";font-family:FontAwesome}.drawer-pf-toggle-expand:hover{color:#0088ce}.drawer-pf-close{right:0}.drawer-pf-action{display:-ms-flexbox;display:flex;border-bottom:1px solid #d1d1d1}.drawer-pf-action .btn-link{color:#0088ce;padding:10px 0}.drawer-pf-action .btn-link .fa,.drawer-pf-action .btn-link .fab,.drawer-pf-action .btn-link .fal,.drawer-pf-action .btn-link .far,.drawer-pf-action .btn-link .fas,.drawer-pf-action .btn-link .pficon{margin-right:3px}.drawer-pf-action .btn-link .pficon-close{position:relative;top:1px}.drawer-pf-action .btn-link:hover{color:#00659c}.drawer-pf-action-link{border-left:solid 1px #d1d1d1;-ms-flex:1 1 0%;flex:1 1 0%;margin:10px 0;text-align:center}.drawer-pf-action-link:first-of-type{border-left-width:0}.drawer-pf-action-link .btn-link{padding:0}.drawer-pf-loading{color:#4d5258;font-size:14px;padding:20px 15px}.drawer-pf-notification{border-bottom:1px solid #d1d1d1;padding:15px}.drawer-pf-notification .date{border-right:1px solid #aaa;display:inline-block;line-height:1;margin-right:5px;padding-right:9px}.drawer-pf-notification>.dropdown-kebab-pf{margin-top:-3px}.drawer-pf-notification .pficon{font-size:14px;margin-top:3px}.drawer-pf-notification:last-of-type{border-bottom:none}.drawer-pf-notification:hover{background-color:#def3ff}.drawer-pf-notification.unread .drawer-pf-notification-message{font-weight:700;cursor:pointer}.drawer-pf-notification.expanded-notification .date{border-right:none;padding-right:0}.drawer-pf-notification-content{cursor:default}.drawer-pf-notification-info,.drawer-pf-notification-message{display:block;padding-left:27px;padding-right:19px}.expanded-notification .drawer-pf-notification-info,.expanded-notification .drawer-pf-notification-message{display:inline-block}.drawer-pf-title{background-color:#fafafa;border-bottom:1px solid #d1d1d1;position:absolute;width:100%}.drawer-pf-title h3{font-size:12px;margin:0;padding:6px 15px}.drawer-pf-notification.expanded-notification .drawer-pf-notification-content{display:-ms-flexbox;display:flex}@media (max-width:991px){.drawer-pf-notification.expanded-notification .drawer-pf-notification-content{-ms-flex-direction:column;flex-direction:column}}.drawer-pf-notification.expanded-notification .drawer-pf-notification-content .drawer-pf-notification-message{-ms-flex:1 1;flex:1 1}.navbar-pf-vertical .drawer-pf{height:calc(100vh - 58px - 20px);top:58px}@media (max-width:767px){.navbar-pf-vertical .drawer-pf{width:100%;height:calc(100vh - 58px)}}.navbar-pf-vertical .nav .drawer-pf-trigger .drawer-pf-trigger-icon{border-left:1px solid #2b2b2b;border-right:1px solid #2b2b2b;padding-left:15px;padding-right:15px}.navbar-pf-vertical .nav .drawer-pf-trigger.open .drawer-pf-trigger-icon{background-color:#232323}.navbar-pf .drawer-pf{height:calc(100vh - 25px - 20px);top:25px;border-top:0}@media (max-width:767px){.navbar-pf .drawer-pf{width:100%;height:calc(100vh - 25px - 32px);top:calc(25px + 10px)}}.navbar-pf .drawer-pf-trigger-icon{cursor:pointer}.search-pf.has-button{border-collapse:separate;display:table}.search-pf.has-button .form-group{display:table-cell;width:100%}.search-pf.has-button .form-group .btn{box-shadow:none;float:left;margin-left:-1px}.search-pf.has-button .form-group .btn.btn-lg{font-size:14.5px}.search-pf.has-button .form-group .btn.btn-sm{font-size:10.7px}.search-pf.has-button .form-group .form-control{float:left}.search-pf .has-clear .clear{background:rgba(255,255,255,0);border:0;height:25px;line-height:1;padding:0;position:absolute;right:1px;top:1px;width:28px}.search-pf .has-clear .clear:focus{outline:0}.search-pf .has-clear .form-control{padding-right:30px}.search-pf .has-clear .form-control::-ms-clear{display:none}.search-pf .has-clear .input-lg+.clear{height:31px;width:28px}.search-pf .has-clear .input-sm+.clear{height:20px;width:28px}.search-pf .has-clear .input-sm+.clear span{font-size:10px}.search-pf .has-clear .search-pf-input-group{position:relative}.sidebar-header{border-bottom:1px solid #ececec;padding-bottom:11px;margin:50px 0 20px}.sidebar-header .actions{margin-top:-2px}.sidebar-pf .sidebar-header+.list-group{border-top:0;margin-top:-10px}.sidebar-pf .sidebar-header+.list-group .list-group-item{background:0 0;border-color:#ececec;padding-left:0}.sidebar-pf .sidebar-header+.list-group .list-group-item-heading{font-size:12px}.sidebar-pf .nav-category h2{color:#9c9c9c;font-size:12px;font-weight:400;line-height:21px;margin:0;padding:8px 0}.sidebar-pf .nav-category+.nav-category{margin-top:10px}.sidebar-pf .nav-pills>li.active>a{background:#0088ce!important;border-color:#0088ce!important;color:#fff}@media (min-width:768px){.sidebar-pf .nav-pills>li.active>a:after{content:"\f105";font-family:FontAwesome;display:block;position:absolute;right:10px;top:1px}}.sidebar-pf .nav-pills>li.active>a .fa,.sidebar-pf .nav-pills>li.active>a .fab,.sidebar-pf .nav-pills>li.active>a .fal,.sidebar-pf .nav-pills>li.active>a .far,.sidebar-pf .nav-pills>li.active>a .fas{color:#fff}.sidebar-pf .nav-pills>li>a{border-bottom:1px solid transparent;border-radius:0;border-top:1px solid transparent;color:#363636;font-size:13px;line-height:21px;padding:1px 20px}.sidebar-pf .nav-pills>li>a:hover{background:#def3ff;border-color:#bee1f4}.sidebar-pf .nav-pills>li>a .fa,.sidebar-pf .nav-pills>li>a .fab,.sidebar-pf .nav-pills>li>a .fal,.sidebar-pf .nav-pills>li>a .far,.sidebar-pf .nav-pills>li>a .fas{color:#6a7079;font-size:15px;margin-right:10px;text-align:center;vertical-align:middle;width:15px}.sidebar-pf .nav-stacked{margin-left:-20px;margin-right:-20px}.sidebar-pf .nav-stacked li+li{margin-top:0}.sidebar-pf .panel{background:0 0}.sidebar-pf .panel-body{padding:6px 20px}.sidebar-pf .panel-body .nav-pills>li>a{padding-left:37px}.sidebar-pf .panel-heading{padding:9px 20px}.sidebar-pf .panel-title{font-size:12px}.sidebar-pf .panel-title>a:before{display:inline-block;margin-left:1px;margin-right:4px;width:9px}.sidebar-pf .panel-title>a.collapsed:before{margin-left:3px;margin-right:2px}@media (min-width:767px){.sidebar-header-bleed-left{margin-left:-20px}.sidebar-header-bleed-left>h2{margin-left:20px}.sidebar-header-bleed-right{margin-right:-20px}.sidebar-header-bleed-right .actions{margin-right:20px}.sidebar-header-bleed-right>h2{margin-right:20px}.sidebar-header-bleed-right+.list-group{margin-right:-20px}.sidebar-pf .panel-group .panel-default,.sidebar-pf .treeview{border-left:0;border-right:0;margin-left:-20px;margin-right:-20px}.sidebar-pf .treeview{margin-top:5px}.sidebar-pf .treeview .list-group-item{padding-left:20px;padding-right:20px}.sidebar-pf .treeview .list-group-item.node-selected:after{content:"\f105";font-family:FontAwesome;display:block;position:absolute;right:10px;top:1px}}@media (min-width:768px){.sidebar-pf{background:#fafafa}.sidebar-pf.sidebar-pf-left{border-right:1px solid #d1d1d1}.sidebar-pf.sidebar-pf-right{border-left:1px solid #d1d1d1}.sidebar-pf>.nav-category,.sidebar-pf>.nav-stacked{margin-top:5px}}.skiplink-pf{position:absolute;top:12px;left:-300%;z-index:1050}.skiplink-pf:focus{left:10px}@keyframes rotation{from{transform:rotate(0)}to{transform:rotate(359deg)}}.spinner{animation:rotation .6s infinite linear;border-bottom:4px solid rgba(3,3,3,.25);border-left:4px solid rgba(3,3,3,.25);border-right:4px solid rgba(3,3,3,.25);border-radius:100%;border-top:4px solid rgba(3,3,3,.75);height:24px;margin:0 auto;position:relative;width:24px}.spinner.spinner-inline{display:inline-block;margin-right:3px}.spinner.spinner-lg{border-width:5px;height:30px;width:30px}.spinner.spinner-sm{border-width:3px;height:18px;width:18px}.spinner.spinner-xs{border-width:2px;height:12px;width:12px}.spinner.spinner-inverse{border-bottom-color:rgba(255,255,255,.25);border-left-color:rgba(255,255,255,.25);border-right-color:rgba(255,255,255,.25);border-top-color:rgba(255,255,255,.75)}.ie9 .spinner{background:url(../img/spinner.gif) no-repeat;border:0}.ie9 .spinner.spinner-inverse{background-image:url(../img/spinner-inverse.gif)}.ie9 .spinner.spinner-inverse-lg{background-image:url(../img/spinner-inverse-lg.gif)}.ie9 .spinner.spinner-inverse-sm{background-image:url(../img/spinner-inverse-sm.gif)}.ie9 .spinner.spinner-inverse-xs{background-image:url(../img/spinner-inverse-xs.gif)}.ie9 .spinner.spinner-lg{background-image:url(../img/spinner-lg.gif)}.ie9 .spinner.spinner-sm{background-image:url(../img/spinner-sm.gif)}.ie9 .spinner.spinner-xs{background-image:url(../img/spinner-xs.gif)}.prettyprint .atn,.prettyprint .com,.prettyprint .fun,.prettyprint .var{color:#3f9c35}.prettyprint .atv,.prettyprint .str{color:#a30000}.prettyprint .clo,.prettyprint .dec,.prettyprint .kwd,.prettyprint .opn,.prettyprint .pln,.prettyprint .pun{color:#363636}.prettyprint .lit,.prettyprint .tag,.prettyprint .typ{color:#00659c}.prettyprint ol.linenums{margin-bottom:0}table.dataTable{height:100%;margin-bottom:0;max-width:none!important}table.dataTable tbody>tr>td.table-view-pf-actions{padding:0;vertical-align:middle}table.dataTable tbody>tr:hover>td.table-view-pf-actions{background-color:#f5f5f5;border-bottom-color:#d1d1d1}table.dataTable tbody>tr.selected{color:#fff;background-color:#0088ce}table.dataTable tbody>tr.selected>td{border-bottom-color:#00659c}table.dataTable tbody>tr.selected>td.table-view-pf-actions{background-color:#f5f5f5;border-bottom-color:#d1d1d1}table.dataTable tbody>tr.selected:hover>td{background-color:inherit;border-bottom-color:#00659c}table.dataTable tbody>tr.selected:hover>td.table-view-pf-actions{background-color:#f5f5f5;border-bottom-color:#d1d1d1}table.dataTable thead .sorting,table.dataTable thead .sorting_asc,table.dataTable thead .sorting_asc_disabled,table.dataTable thead .sorting_desc,table.dataTable thead .sorting_desc_disabled{cursor:pointer}table.dataTable thead .sorting_asc,table.dataTable thead .sorting_desc{color:#0088ce!important;position:relative}table.dataTable thead .sorting_asc:after,table.dataTable thead .sorting_desc:after{content:"\f107";font-family:FontAwesome;font-size:10px;font-weight:400;height:9px;left:7px;line-height:12px;position:relative;top:2px;vertical-align:baseline;width:12px}table.dataTable thead .sorting_asc:before,table.dataTable thead .sorting_desc:before{background:#0088ce;content:"";height:2px;position:absolute;left:0;top:0;width:100%}table.dataTable thead .sorting_asc:after{content:"\f106";top:-3px}table.dataTable th:active{outline:0}.table-view-pf-empty.blank-slate-pf{background-color:#f5f5f5;border:1px solid #d1d1d1;border-radius:0;margin-top:-1px}.table-view-pf-toolbar.toolbar-pf{background-color:#f5f5f5;border-bottom:none;border-left:1px solid #d1d1d1;border-right:1px solid #d1d1d1;border-top:1px solid #d1d1d1;box-shadow:none;margin-left:0;margin-right:0}.table-view-pf-toolbar.toolbar-pf .toolbar-pf-results{border-top:1px solid #d1d1d1;min-height:40px;line-height:40px}.table-view-pf-toolbar-external.toolbar-pf{border-bottom:none;border-top:none;box-shadow:none}.table-view-pf-toolbar-external.toolbar-pf .toolbar-pf-results{border-top:1px solid #d1d1d1;min-height:40px;line-height:40px}.table-view-pf-colvis-menu>li{padding:5px 10px}.table-view-pf-colvis-menu>li:hover{background-color:#def3ff}.table-view-pf-colvis-menu>li>input{margin-top:0;margin-right:10px;vertical-align:middle}.table-view-pf-colvis-menu>li>label{margin-bottom:0}.table-view-pf-actions{background-color:#f1f1f1;height:100%}.table-view-pf-actions .btn,.table-view-pf-actions .dropdown-toggle{border:none;box-shadow:none;height:100%;width:100%}.table-view-pf-actions .dropdown,.table-view-pf-actions .table-view-pf-btn{height:100%}.table-view-pf-actions .dropdown-menu.dropdown-menu-right{right:-5px}.table-view-pf-actions:last-child{width:24px}.table-view-pf-select{width:33px}.table-view-pf-select-results{text-align:right}.bootstrap-datetimepicker-widget .today-button-pf:before{content:"Today"}@media (min-width:992px){.bootstrap-datetimepicker-widget.timepicker-sbs .accordion-toggle,.bootstrap-datetimepicker-widget.timepicker-sbs .datepicker{border-right:1px solid #d1d1d1}.bootstrap-datetimepicker-widget.timepicker-sbs .timepicker{padding-left:0;margin-top:50px}.bootstrap-datetimepicker-widget.timepicker-sbs .picker-switch{width:50%}}.bootstrap-datetimepicker-widget a[data-action]{border:0;box-shadow:none;color:#363636;display:block;padding-bottom:4px;padding-top:4px}.bootstrap-datetimepicker-widget a[data-action]:hover{color:#0088ce}.bootstrap-datetimepicker-widget.dropdown-menu{left:0!important;padding:0;width:calc(100% - 25px)}.bootstrap-datetimepicker-widget.dropdown-menu:after,.bootstrap-datetimepicker-widget.dropdown-menu:before{content:none}.bootstrap-datetimepicker-widget.dropdown-menu.top{margin-bottom:-1px}.bootstrap-datetimepicker-widget.dropdown-menu.bottom{margin-top:-1px}.bootstrap-datetimepicker-widget .timepicker-hour{width:100%}.bootstrap-datetimepicker-widget .timepicker-hour:after{content:":";float:right}.timepicker-hours table td,.timepicker-minutes table td{font-weight:700;line-height:30px;height:30px}.timepicker-hours table td:hover,.timepicker-minutes table td:hover{color:#0088ce}.timepicker-hours .table-condensed>tbody>tr>td,.timepicker-minutes .table-condensed>tbody>tr>td{padding:0}.time-picker-pf .input-group-addon .fa,.time-picker-pf .input-group-addon .fab,.time-picker-pf .input-group-addon .fal,.time-picker-pf .input-group-addon .far,.time-picker-pf .input-group-addon .fas,.time-picker-pf .input-group-addon .pficon{width:12px}.time-picker-pf .input-group-addon:not(.active){box-shadow:none}.timepicker-picker table td a span,.timepicker-picker table td span{height:24px;line-height:24px;margin:0;width:100%}.timepicker-picker .table-condensed>tbody>tr>td{height:25px;line-height:18px;padding:0}.timepicker-picker button[data-action]{padding-bottom:0;padding-top:0}.timepicker-picker .separator{display:none}.timepicker-picker tr:nth-child(2) td{background-color:#def3ff;border-color:#bee1f4;border-style:solid;border-width:1px;border-left:0;border-right:0}.toast-pf{background-color:#fff;border-color:#bbb;box-shadow:0 2px 6px rgba(3,3,3,.2);padding-left:68px;margin-bottom:5px}.toast-pf.alert-danger>.pficon{background-color:#c00}.toast-pf.alert-info>.pficon{background-color:#8b8d8f}.toast-pf.alert-success>.pficon{background-color:#3f9c35}.toast-pf.alert-warning>.pficon{background-color:#ec7a08}.toast-pf .dropdown-kebab-pf{margin-left:10px}.toast-pf>.pficon{background-color:#4d5258;bottom:-1px;box-shadow:2px 0 5px -2px rgba(3,3,3,.2);left:-1px;padding-top:10px;text-align:center;top:-1px;width:53px}.toast-pf>.pficon:before{color:rgba(255,255,255,.74)}.toast-pf .toast-pf-action{margin-left:15px}.toast-pf .dropdown-kebab-pf .btn-link{padding-top:0;padding-bottom:0;vertical-align:text-bottom}@media (min-width:992px){.toast-pf{display:inline-block}}@media (min-width:992px){.toast-pf-max-width{max-width:31.1%}}.toast-pf-top-right{left:20px;position:absolute;right:20px;top:12px;z-index:1055}@media (min-width:992px){.toast-pf-top-right{left:auto}}.toast-notifications-list-pf{margin-left:20px;position:fixed;right:20px;top:80px;z-index:1055}.toast-notifications-list-pf .toast-pf{clear:both;float:right}@media (min-width:768px){.toast-notifications-list-pf{max-width:calc(50%)}}@media (min-width:992px){.toast-notifications-list-pf{max-width:calc(33.1%)}}.toolbar-pf{background:#fff;border-bottom:1px solid #d1d1d1;box-shadow:0 1px 0 rgba(3,3,3,.045);padding-top:10px}.toolbar-pf .form-group{margin-bottom:10px}@media (min-width:768px){.toolbar-pf .form-group{border-right:1px solid #d1d1d1;float:left;margin-bottom:0;padding-left:20px;padding-right:20px}}.toolbar-pf .form-group:last-child{border-right:0;margin-bottom:0;padding-right:0}.toolbar-pf .form-group .btn+.btn,.toolbar-pf .form-group .btn+.btn-group,.toolbar-pf .form-group .btn-group+.btn,.toolbar-pf .form-group .btn-group+.btn-group{margin-left:5px}.toolbar-pf .form-group .btn+.btn-link,.toolbar-pf .form-group .btn+.dropdown,.toolbar-pf .form-group .btn-group+.btn-link,.toolbar-pf .form-group .btn-group+.dropdown{margin-left:10px}.toolbar-pf .form-group .btn-link{color:#252525;font-size:16px;line-height:1;padding:4px 0}.toolbar-pf .form-group .btn-link:active,.toolbar-pf .form-group .btn-link:focus,.toolbar-pf .form-group .btn-link:hover{color:#0088ce}.toolbar-pf .form-group .dropdown-kebab-pf .btn-link{padding:4px 10px;margin-left:-10px;margin-right:-10px}.toolbar-pf-actions{display:table;margin-bottom:10px;width:100%}@media (min-width:768px){.toolbar-pf-actions .toolbar-pf-filter{padding-left:0}}.toolbar-pf-view-selector{font-size:16px}.toolbar-pf-view-selector .btn-link.active{color:#0088ce;cursor:default}.toolbar-pf-action-right{float:right}@media (max-width:768px){.toolbar-pf-action-right{float:none}}.toolbar-pf-find{font-size:14px;position:relative}.find-pf-dropdown-container{background:#fff;border:solid 1px #bbb;display:none;right:-20px;padding:5px;position:absolute;top:35px;width:300px;z-index:10000}@media (max-width:768px){.find-pf-dropdown-container{left:30px;top:-5px;width:calc(100% - 30px)}}.find-pf-dropdown-container:after,.find-pf-dropdown-container:before{content:"";position:absolute}.find-pf-dropdown-container:before{border-bottom:11px solid #bbb;border-left:11px solid transparent;border-right:11px solid transparent;right:35px;top:-12px}.toolbar-pf-find:last-child .find-pf-dropdown-container:before{right:15px}@media (max-width:768px){.find-pf-dropdown-container:before{border-bottom:11px solid transparent;border-right:11px solid #bbb;border-top:11px solid transparent;left:-22px;right:initial;top:8px}}.find-pf-dropdown-container:after{border-bottom:10px solid #fff;border-left:10px solid transparent;border-right:10px solid transparent;right:36px;top:-10px}.toolbar-pf-find:last-child .find-pf-dropdown-container:after{right:16px}@media (max-width:768px){.find-pf-dropdown-container:after{border-bottom:10px solid transparent;border-right:10px solid #fff;border-top:10px solid transparent;left:-20px;right:initial;top:9px}}.find-pf-dropdown-container input{height:30px;padding:5px 117px 5px 5px;width:100%}.find-pf-dropdown-container .find-pf-buttons{position:absolute;right:10px;top:5px}.find-pf-dropdown-container .find-pf-buttons .btn{border:none;cursor:pointer;margin-left:0!important;padding:0;width:18px}.find-pf-dropdown-container .find-pf-buttons .btn .fa-angle-down,.find-pf-dropdown-container .find-pf-buttons .btn .fa-angle-up{font-weight:700;font-size:18px}.find-pf-dropdown-container .find-pf-buttons .btn .pficon-close{font-size:14px}.find-pf-dropdown-container .find-pf-buttons span{height:30px;line-height:30px;vertical-align:middle}.find-pf-dropdown-container .find-pf-buttons .find-pf-nums{color:#8b8d8f;margin-right:3px}.toolbar-pf-results{border-top:1px solid #d1d1d1;margin-top:10px}.toolbar-pf-results h5,.toolbar-pf-results p,.toolbar-pf-results ul{display:inline-block;line-height:26.66666667px;margin-bottom:0;margin-top:0}@media (min-width:768px){.toolbar-pf-results h5,.toolbar-pf-results p,.toolbar-pf-results ul{line-height:40px}}.toolbar-pf-results h5{font-weight:700;margin-right:20px}.toolbar-pf-results .label{font-size:11px}.toolbar-pf-results .label a{color:#fff;display:inline-block;margin-left:5px}.tree-list-view-pf{background-color:#ededed;border:none;margin-top:30px;overflow-x:hidden}.tree-list-view-pf>.list-group-item:first-child{border-top:1px solid transparent}.tree-list-view-pf .list-group-item{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;border-color:#ededed;padding:0;background-clip:padding-box}.tree-list-view-pf .list-group-item.active{background-color:#fff;color:currentColor;z-index:auto}.tree-list-view-pf .list-group-item.active:hover{border-color:#ededed}.tree-list-view-pf .list-group-item.active>.list-group-item-header{background-color:#def3ff;color:#555}.tree-list-view-pf .list-group-item.active>.list-group-item-header:before{background-color:#def3ff}.tree-list-view-pf .list-group-item.active>.list-group-item-header:hover{background-color:#edf8ff}.tree-list-view-pf .list-group-item.active>.list-group-item-header:hover:before{background-color:#edf8ff}.tree-list-view-pf .list-group-item.active>.list-group-item-header .list-group-item-text{color:#555}.tree-list-view-pf .list-group-item.active .list-group-item-text{color:currentColor}.tree-list-view-pf .list-group-item .list-group-item{border-bottom:none;padding-left:45px}.tree-list-view-pf .list-group-item .list-group-item .list-group-item-header:before{border-bottom:solid 1px #ededed;content:"";height:calc(100% + 1px);left:-100%;position:absolute;width:100%}.tree-list-view-pf .list-group-item-container{border-top-color:#ededed;margin:0;padding:0}.tree-list-view-pf .list-group-item-header{box-sizing:border-box;margin:0;position:inherit}.tree-list-view-pf .list-group-item-header:hover{background-color:#edf8ff;border-left-color:transparent;border-right-color:transparent}.tree-list-view-pf .list-group-item-header:hover:before{background-color:#edf8ff}@media (min-width:992px){.tree-list-view-pf .list-group-item-heading{width:calc(25% - 20px)}}.nav-pf-vertical{background:#292e34;border-right:1px solid #292e34;bottom:0;left:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:60px;width:200px;z-index:1030}.layout-pf-fixed-with-footer .nav-pf-vertical{bottom:37px}.ie9.layout-pf-fixed .nav-pf-vertical{box-sizing:content-box}.nav-pf-vertical.hidden.show-mobile-nav{box-shadow:0 0 3px rgba(3,3,3,.15);display:block!important}.nav-pf-vertical.hide-nav-pf{visibility:hidden!important}.nav-pf-vertical .list-group{border-top:0;margin-bottom:0}.nav-pf-vertical .list-group-item{background-color:transparent;border-color:#030303;padding:0}.nav-pf-vertical .list-group-item>a{background-color:transparent;color:#d1d1d1;cursor:pointer;display:block;font-size:14px;font-weight:400;height:63px;line-height:26px;padding:17px 20px 17px 25px;position:relative;white-space:nowrap;width:200px}@supports (display:flex){.nav-pf-vertical .list-group-item>a{display:-ms-flexbox;display:flex;padding-right:0}}.nav-pf-vertical .list-group-item>a .fa,.nav-pf-vertical .list-group-item>a .fab,.nav-pf-vertical .list-group-item>a .fal,.nav-pf-vertical .list-group-item>a .far,.nav-pf-vertical .list-group-item>a .fas,.nav-pf-vertical .list-group-item>a .glyphicon,.nav-pf-vertical .list-group-item>a .pficon{color:#72767b;float:left;font-size:20px;line-height:26px;margin-right:10px;text-align:center;width:24px}.nav-pf-vertical .list-group-item>a:focus,.nav-pf-vertical .list-group-item>a:hover{text-decoration:none}.nav-pf-vertical .list-group-item.active>a,.nav-pf-vertical .list-group-item:hover>a,.nav-pf-vertical .list-group-item>a:focus{background-color:#393f44;color:#fff;font-weight:600}.nav-pf-vertical .list-group-item.active>a .fa,.nav-pf-vertical .list-group-item.active>a .fab,.nav-pf-vertical .list-group-item.active>a .fal,.nav-pf-vertical .list-group-item.active>a .far,.nav-pf-vertical .list-group-item.active>a .fas,.nav-pf-vertical .list-group-item.active>a .glyphicon,.nav-pf-vertical .list-group-item.active>a .pficon,.nav-pf-vertical .list-group-item:hover>a .fa,.nav-pf-vertical .list-group-item:hover>a .fab,.nav-pf-vertical .list-group-item:hover>a .fal,.nav-pf-vertical .list-group-item:hover>a .far,.nav-pf-vertical .list-group-item:hover>a .fas,.nav-pf-vertical .list-group-item:hover>a .glyphicon,.nav-pf-vertical .list-group-item:hover>a .pficon,.nav-pf-vertical .list-group-item>a:focus .fa,.nav-pf-vertical .list-group-item>a:focus .fab,.nav-pf-vertical .list-group-item>a:focus .fal,.nav-pf-vertical .list-group-item>a:focus .far,.nav-pf-vertical .list-group-item>a:focus .fas,.nav-pf-vertical .list-group-item>a:focus .glyphicon,.nav-pf-vertical .list-group-item>a:focus .pficon{color:#39a5dc}.nav-pf-vertical .list-group-item.active>a:before{background:#39a5dc;content:" ";height:100%;left:0;position:absolute;top:0;width:3px}.nav-pf-vertical .list-group-item.active:hover{background-color:transparent;border-color:#030303}.nav-pf-vertical .list-group-item .list-group-item-value{display:block;line-height:25px;max-width:120px;overflow:hidden;text-overflow:ellipsis}@supports (display:flex){.nav-pf-vertical .list-group-item .list-group-item-value{-ms-flex:1;flex:1;max-width:none;padding-right:15px}}.nav-pf-vertical .list-group-item-separator{border-top-color:#030303;border-top-width:2px}.nav-pf-vertical.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.nav-pf-vertical-with-badges .list-group-item>a{width:250px}.nav-pf-vertical h5{color:#fff;cursor:default;font-size:13px;font-weight:600;margin:30px 20px 10px 20px}.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .fa,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .fab,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .fal,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .far,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .fas,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .glyphicon,.nav-pf-vertical.hidden-icons-pf>.list-group>.list-group-item>a .pficon{display:none}.nav-pf-vertical.hidden-icons-pf.collapsed{display:none}.nav-pf-vertical .badge-container-pf{position:absolute;right:15px;top:20px}@supports (display:flex){.nav-pf-vertical .badge-container-pf{padding-left:0;padding-right:15px;position:relative;right:0;margin-top:-3px;top:5px}}.nav-pf-vertical .badge-container-pf .badge{background:#292e34;color:#fff;float:left;font-size:12px;font-weight:700;line-height:1.66666667;margin:0;padding:0 7px;text-align:center}.nav-pf-vertical .badge-container-pf .badge .fa,.nav-pf-vertical .badge-container-pf .badge .fab,.nav-pf-vertical .badge-container-pf .badge .fal,.nav-pf-vertical .badge-container-pf .badge .far,.nav-pf-vertical .badge-container-pf .badge .fas,.nav-pf-vertical .badge-container-pf .badge .pficon{font-size:14px;height:20px;line-height:1.66666667;margin-right:3px;margin-top:-1px}.nav-pf-vertical-tooltip.tooltip{margin-left:15px}.nav-pf-vertical-tooltip.tooltip .tooltip-inner{background-color:#fff;color:#292e34}.nav-pf-vertical-tooltip.tooltip .tooltip-arrow{border-bottom-color:#fff;left:calc(50% - 15px)!important}.hover-secondary-nav-pf{width:calc(200px * 2)}.hover-secondary-nav-pf.nav-pf-vertical-with-badges{width:calc(250px * 2)}.hover-tertiary-nav-pf{width:calc(200px * 3)}.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:calc(250px * 3)}.hover-tertiary-nav-pf .nav-pf-secondary-nav{width:calc(200px * 2)}.hover-tertiary-nav-pf .nav-pf-secondary-nav .collapsed-tertiary-nav-pf{width:200px}.hover-tertiary-nav-pf .nav-pf-tertiary-nav{left:calc(200px * 2)}.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-secondary-nav{width:calc(250px * 2)}.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-secondary-nav .collapsed-tertiary-nav-pf{width:250px}.hover-tertiary-nav-pf.nav-pf-vertical-with-badges .nav-pf-tertiary-nav{left:calc(250px * 2)}.nav-pf-vertical.collapsed{width:75px}.nav-pf-vertical.collapsed.collapsed-secondary-nav-pf{width:200px}.nav-pf-vertical.collapsed.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed.collapsed-tertiary-nav-pf{width:200px}.nav-pf-vertical.collapsed.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed.hover-secondary-nav-pf{width:calc(75px + 200px)}.nav-pf-vertical.collapsed.hover-secondary-nav-pf.nav-pf-vertical-with-badges{width:calc(75px + 250px)}.nav-pf-vertical.collapsed.hover-tertiary-nav-pf{width:calc(75px + (200px * 2))}.nav-pf-vertical.collapsed.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:calc(75px + (250px * 2))}.show-mobile-nav.show-mobile-secondary{width:200px}.show-mobile-nav.show-mobile-secondary.nav-pf-vertical-with-badges{width:250px}.show-mobile-nav.show-mobile-tertiary{width:200px}.show-mobile-nav.show-mobile-tertiary.nav-pf-vertical-with-badges{width:250px}.show-mobile-nav .mobile-nav-item-pf .nav-pf-secondary-nav,.show-mobile-nav .mobile-secondary-item-pf .nav-pf-secondary-nav{left:0;opacity:1;visibility:visible;z-index:1034}.show-mobile-nav .mobile-nav-item-pf>.nav-pf-tertiary-nav,.show-mobile-nav .mobile-secondary-item-pf>.nav-pf-tertiary-nav{left:0;opacity:1;visibility:visible;z-index:1038}.show-mobile-nav .nav-pf-secondary-nav{left:0}.secondary-nav-item-pf:hover .show-mobile-nav .nav-pf-secondary-nav{opacity:0;visibility:hidden}.show-mobile-nav .tertiary-nav-item-pf:hover .nav-pf-tertiary-nav{opacity:0;visibility:hidden}.show-mobile-nav .tertiary-nav-item-pf.mobile-nav-item-pf:hover .nav-pf-tertiary-nav{opacity:1;visibility:visible}.secondary-nav-item-pf>a{cursor:default}.secondary-nav-item-pf>a:after{color:#72767b;content:"\f105";display:block;font-family:FontAwesome;font-size:24px;line-height:30px;padding:14px 0;position:absolute;right:20px;top:0}@supports (display:flex){.secondary-nav-item-pf>a .list-group-item-value{padding-right:35px}}.secondary-nav-item-pf.active>a,.secondary-nav-item-pf:hover>a{width:calc(200px + 1px);z-index:1031}.secondary-nav-item-pf.active>a:after,.secondary-nav-item-pf:hover>a:after{right:21px}.collapsed-secondary-nav-pf .secondary-nav-item-pf.active>a,.collapsed-secondary-nav-pf .secondary-nav-item-pf:hover>a{z-index:0}.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active>a,.collapsed-tertiary-nav-pf .secondary-nav-item-pf:hover>a{z-index:0}.nav-pf-vertical-with-badges .secondary-nav-item-pf.active>a,.nav-pf-vertical-with-badges .secondary-nav-item-pf:hover>a{width:calc(250px + 1px)}.nav-pf-vertical.collapsed-secondary-nav-pf{width:200px}.nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed-secondary-nav-pf .secondary-nav-item-pf.active>a,.nav-pf-vertical.collapsed-secondary-nav-pf .secondary-nav-item-pf.hover>a{z-index:1030}.nav-pf-vertical.collapsed-secondary-nav-pf.hover-tertiary-nav-pf{width:200px}.nav-pf-vertical.collapsed-secondary-nav-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed-secondary-nav-pf .nav-pf-secondary-nav{left:0}.nav-pf-vertical.collapsed-secondary-nav-pf .nav-pf-tertiary-nav{left:200px}.nav-pf-vertical.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges .nav-pf-tertiary-nav{left:250px}.nav-pf-vertical.collapsed-tertiary-nav-pf{width:200px}.nav-pf-vertical.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed-tertiary-nav-pf .nav-pf-secondary-nav{width:200px}.nav-pf-vertical.collapsed-tertiary-nav-pf .nav-pf-secondary-nav.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active>a,.nav-pf-vertical.collapsed-tertiary-nav-pf .secondary-nav-item-pf.hover>a,.nav-pf-vertical.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.active>a,.nav-pf-vertical.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.hover>a{z-index:0}@media (min-width:1200px){.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf{width:calc(200px * 2)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.nav-pf-vertical-with-badges{width:calc(250px * 2)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf{width:200px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.hover-tertiary-nav-pf{width:calc(200px * 2)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-secondary-nav-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:calc(250px * 2)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf{width:200px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed{width:calc(75px + 200px)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-secondary-nav-pf{width:200px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-secondary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-tertiary-nav-pf{width:200px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.collapsed-tertiary-nav-pf.nav-pf-vertical-with-badges{width:250px}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.hover-tertiary-nav-pf{width:calc(75px + (200px * 2))}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.collapsed.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:calc(75px + (250px * 2))}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hover-tertiary-nav-pf{width:calc(200px * 3)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf.hover-tertiary-nav-pf.nav-pf-vertical-with-badges{width:calc(250px * 3)}.nav-pf-vertical.nav-pf-persistent-secondary.secondary-visible-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav{visibility:visible;opacity:1}}.nav-item-pf-header{color:#fff;font-size:16px;margin:18px 20px 10px 20px}.nav-item-pf-header>a{cursor:pointer;margin-right:7px}.nav-item-pf-header>a:focus,.nav-item-pf-header>a:hover{color:#0088ce;text-decoration:none}.nav-pf-vertical.collapsed{width:75px}.nav-pf-vertical.collapsed .list-group-item>a{width:75px}.nav-pf-vertical.collapsed .list-group-item>a>.list-group-item-value{display:none}.nav-pf-vertical.collapsed .list-group-item>a>.badge-container-pf{display:none}.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active>a,.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf>a{width:75px}.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active>a:after,.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf>a:after{right:10px}.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active>a,.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf:hover>a{width:77px}.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf.active>a:after,.nav-pf-vertical.collapsed .list-group-item.secondary-nav-item-pf:hover>a:after{right:11px}.nav-pf-secondary-nav{background:#393f44;border:1px solid #292e34;border-bottom:none;border-top:none;bottom:0;display:block;left:200px;opacity:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:60px;visibility:hidden;width:200px;z-index:1030}.collapsed-secondary-nav-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav{left:0;opacity:1;visibility:visible;z-index:1032}.collapsed-tertiary-nav-pf .secondary-nav-item-pf.active .nav-pf-secondary-nav{left:0;opacity:1;visibility:visible}.hover-secondary-nav-pf .secondary-nav-item-pf.is-hover .nav-pf-secondary-nav{opacity:1;visibility:visible}.ie9.layout-pf-fixed .nav-pf-secondary-nav{box-sizing:content-box}.layout-pf-fixed-with-footer .nav-pf-secondary-nav{bottom:37px}.nav-pf-secondary-nav .list-group-item{border:none;padding:0 0 5px 0;width:200px}.nav-pf-secondary-nav .list-group-item>a{background-color:#393f44;color:#d1d1d1;font-size:12px;font-weight:inherit;height:inherit;padding:4px 0 2px 0;margin-left:20px;width:calc(200px - 20px)}.nav-pf-secondary-nav .list-group-item.active>a:before{display:none}.nav-pf-secondary-nav .list-group-item.active>a,.nav-pf-secondary-nav .list-group-item:hover>a,.nav-pf-secondary-nav .list-group-item>a:focus{background-color:#4d5258;color:#fff}.nav-pf-secondary-nav .list-group-item .badge-container-pf{top:5px}.nav-pf-secondary-nav .list-group-item .badge-container-pf .badge{background:#292e34;color:#fff}.nav-pf-secondary-nav .list-group-item .list-group-item-value{padding-left:5px}.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf>a{cursor:default}.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf>a:after{color:#72767b;content:"\f105";display:block;font-family:FontAwesome;font-size:20px;line-height:20px;padding:0;position:absolute;right:20px;top:4px}@supports (display:flex){.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf>a .list-group-item-value{padding-right:35px}}.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active>a,.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover>a{width:calc(200px - 19px);z-index:1033}.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active>a:after,.nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover>a:after{right:21px}.nav-pf-vertical-with-badges .nav-pf-secondary-nav{left:250px;width:250px}.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item{width:250px}.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item>a{width:calc(250px - 20px)}.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf.active>a,.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item.tertiary-nav-item-pf:hover>a{width:calc(250px - 19px)}.nav-pf-tertiary-nav{background:#4d5258;border:1px solid #292e34;border-bottom:none;border-top:none;bottom:0;display:block;left:calc(200px * 2);opacity:0;overflow-x:hidden;overflow-y:auto;position:fixed;top:60px;visibility:hidden;width:200px;z-index:1030}.nav-pf-vertical-with-badges .nav-pf-tertiary-nav{left:250px;width:250px}.nav-pf-vertical-with-badges .nav-pf-tertiary-nav .show-mobile-nav{left:0}.collapsed-tertiary-nav-pf .tertiary-nav-item-pf.active .nav-pf-tertiary-nav{left:0;opacity:1;visibility:visible;z-index:1033}.hover-tertiary-nav-pf .tertiary-nav-item-pf.is-hover .nav-pf-tertiary-nav{opacity:1;visibility:visible}.collapsed.collapsed-tertiary-nav-pf .hover-tertiary-nav-pf .tertiary-nav-item-pf.is-hover .nav-pf-tertiary-nav{left:0}.ie9.layout-pf-fixed .nav-pf-tertiary-nav{box-sizing:content-box}.layout-pf-fixed-with-footer .nav-pf-tertiary-nav{bottom:37px}.nav-pf-tertiary-nav .nav-item-pf-header{color:#fff;margin:18px 20px 10px 20px}.nav-pf-tertiary-nav h5{color:#fff;margin:30px 20px 10px 20px}.nav-pf-tertiary-nav .list-group-item{border:none;padding:0 0 5px 0}.nav-pf-tertiary-nav .list-group-item>a{background-color:transparent;color:#d1d1d1;font-size:12px;font-weight:inherit;height:inherit;margin:0 20px 0 20px;padding:4px 0 2px 0}.nav-pf-tertiary-nav .list-group-item.active>a:before{display:none}.nav-pf-tertiary-nav .list-group-item.active>a,.nav-pf-tertiary-nav .list-group-item:hover>a,.nav-pf-tertiary-nav .list-group-item>a:focus{background-color:#393f44;color:#fff}.nav-pf-tertiary-nav .list-group-item .badge-container-pf{top:5px}.nav-pf-tertiary-nav .list-group-item .badge-container-pf .badge{background:#292e34;color:#fff}.nav-pf-tertiary-nav .list-group-item .list-group-item-value{padding-left:5px}.collapsed .nav-pf-secondary-nav{left:75px}.collapsed .nav-pf-secondary-nav .list-group-item>a{width:calc(200px - 20px)}.collapsed .nav-pf-secondary-nav .list-group-item>a>.list-group-item-value{display:inline-block}.collapsed .nav-pf-secondary-nav .list-group-item>a>.badge-container-pf{display:inline-block}.collapsed .nav-pf-tertiary-nav{left:calc(75px + 200px)}.collapsed .nav-pf-tertiary-nav .list-group-item>a{width:calc(200px - 20px)}.collapsed .nav-pf-tertiary-nav .list-group-item>a>.list-group-item-value{display:inline-block}.collapsed .nav-pf-tertiary-nav .list-group-item>a>.badge-container-pf{display:inline-block}.collapsed.collapsed-secondary-nav-pf,.collapsed.collapsed-tertiary-nav-pf{width:200px}.collapsed.collapsed-secondary-nav-pf .secondary-nav-item-pf:hover>a,.collapsed.collapsed-tertiary-nav-pf .secondary-nav-item-pf:hover>a{z-index:1030}.collapsed.collapsed-secondary-nav-pf .nav-pf-secondary-nav,.collapsed.collapsed-tertiary-nav-pf .nav-pf-secondary-nav{left:0}.collapsed.collapsed-secondary-nav-pf .nav-pf-tertiary-nav{left:200px}.collapsed.collapsed-tertiary-nav-pf .nav-pf-tertiary-nav{left:0}.collapsed.hover-secondary-nav-pf{width:calc(75px + 200px)}.collapsed.hover-secondary-nav-pf.collapsed-secondary-nav-pf,.collapsed.hover-secondary-nav-pf.collapsed-tertiary-nav-pf{width:200px}.collapsed.hover-tertiary-nav-pf{width:calc(75px + (200px * 2))}.collapsed.hover-tertiary-nav-pf.collapsed-secondary-nav-pf{width:calc(200px * 2)}.collapsed.hover-tertiary-nav-pf.collapsed-tertiary-nav-pf{width:200px}.collapsed.nav-pf-vertical-with-badges .nav-pf-secondary-nav .list-group-item>a{width:calc(250px - 20px)}.collapsed.nav-pf-vertical-with-badges .nav-pf-tertiary-nav{left:calc(75px + 250px)}.collapsed.nav-pf-vertical-with-badges .nav-pf-tertiary-nav .list-group-item>a{width:calc(250px - 20px)}.collapsed.nav-pf-vertical-with-badges.collapsed-secondary-nav-pf,.collapsed.nav-pf-vertical-with-badges.collapsed-tertiary-nav-pf{width:250px}.collapsed.nav-pf-vertical-with-badges.collapsed-secondary-nav-pf .nav-pf-tertiary-nav{left:250px}.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf{width:calc(75px + 250px)}.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf.collapsed-secondary-nav-pf,.collapsed.nav-pf-vertical-with-badges.hover-secondary-nav-pf.collapsed-tertiary-nav-pf{width:250px}.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf{width:calc(75px + (200px * 2))}.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf.collapsed-secondary-nav-pf{width:calc(200px * 2)}.collapsed.nav-pf-vertical-with-badges.hover-tertiary-nav-pf.collapsed-tertiary-nav-pf{width:200px}.secondary-collapse-toggle-pf{display:none;font-family:FontAwesome;font-size:inherit;opacity:0;pointer-events:none;-webkit-font-smoothing:antialiased}.secondary-collapse-toggle-pf:before{content:"\f190"}.secondary-collapse-toggle-pf.collapsed:before{content:"\f18e"}.tertiary-collapse-toggle-pf{display:none;font-family:FontAwesome;font-size:inherit;opacity:0;pointer-events:none;-webkit-font-smoothing:antialiased}.tertiary-collapse-toggle-pf:before{content:"\f190"}.tertiary-collapse-toggle-pf.collapsed:before{content:"\f18e"}.nav-pf-vertical-collapsible-menus .secondary-collapse-toggle-pf{display:inline-block}.nav-pf-vertical-collapsible-menus .secondary-nav-item-pf.active .secondary-collapse-toggle-pf{opacity:1;pointer-events:all}.nav-pf-vertical-collapsible-menus .tertiary-collapse-toggle-pf{display:inline-block}.nav-pf-vertical-collapsible-menus .tertiary-nav-item-pf.active .tertiary-collapse-toggle-pf{opacity:1;pointer-events:all}.show-mobile-nav .secondary-collapse-toggle-pf{display:inline-block;opacity:1;pointer-events:all}.show-mobile-nav .secondary-collapse-toggle-pf:before{content:"\f190"}.show-mobile-nav .tertiary-collapse-toggle-pf{display:inline-block;opacity:1;pointer-events:all}.show-mobile-nav .tertiary-collapse-toggle-pf:before{content:"\f190"}.force-hide-secondary-nav-pf .nav-pf-secondary-nav{display:none!important}.force-hide-secondary-nav-pf .nav-pf-tertiary-nav{display:none!important}.nav-pf-vertical.transitions{transition:width .1s}.nav-pf-vertical.transitions .nav-pf-secondary-nav{transition:visibility .1s,opacity .1s linear}.nav-pf-vertical.transitions .nav-pf-tertiary-nav{transition:visibility .1s,opacity .1s linear}.wizard-pf{padding:10px;margin:0 auto;max-height:900px;width:auto}.wizard-pf .modal-content{min-height:100%}.wizard-pf-body{background:#fff;padding:0;position:static}.wizard-pf-sidebar{background:#fafafa;border-right:1px solid #d1d1d1;display:none}@media (min-width:768px){.wizard-pf-sidebar{display:inherit;-ms-flex:0 0 auto;flex:0 0 auto;overflow-x:hidden;overflow-y:auto}.wizard-pf-sidebar .list-group{border-top:0;margin-bottom:0}.wizard-pf-sidebar .list-group-item{background-color:transparent;border-color:#ededed;padding:0}.wizard-pf-sidebar .list-group-item>a{color:#030303;cursor:pointer;display:block;font-size:14px;font-weight:700;height:50px;outline:0;padding-top:11px;padding-left:20px;position:relative;white-space:nowrap;width:14em}.wizard-pf-sidebar .list-group-item>a:hover{background-color:#ededed;text-decoration:none}.wizard-pf-sidebar .list-group-item>a:hover:focus{text-decoration:none}.wizard-pf-sidebar .list-group-item>a:hover:focus span{text-decoration:underline}.wizard-pf-sidebar .list-group-item.active{background-color:#ededed}.wizard-pf-sidebar .list-group-item.active:hover{border-color:#ededed}.wizard-pf-sidebar .list-group-item.active>a{color:#39a5dc;cursor:default}.wizard-pf-sidebar .list-group-item.active>a:before{content:" ";background:#39a5dc;height:100%;left:0;position:absolute;top:0;width:3px}.wizard-pf-sidebar .list-group-item.active>a:after{color:#39a5dc;content:"\f105";display:block;font-family:FontAwesome;font-size:24px;font-weight:500;line-height:30px;padding-top:10px;position:absolute;right:23px;top:0}}.wizard-pf-substep-number{display:inline-block;margin-right:5px;vertical-align:middle;width:25px}.wizard-pf-substep-title{display:inline-block;margin-right:5px;text-align:left;vertical-align:middle}.wizard-pf-steps{border-bottom:solid 1px #d1d1d1}@media (min-width:768px){.wizard-pf-steps{text-align:center}}.wizard-pf-steps-indicator{background:#ededed;border-top:1px solid #d1d1d1;display:inline-block;display:-ms-flexbox;display:flex;font-size:16px;list-style:none;margin-bottom:0;padding:15px 0}@media (min-width:768px){.wizard-pf-steps-indicator{background:#fff;height:120px;padding:38px 0 0;-ms-flex-pack:distribute;justify-content:space-around}}.wizard-pf-steps-indicator .wizard-pf-step{counter-increment:section;float:left;-ms-flex-positive:1;flex-grow:1;-ms-flex-preferred-size:0;flex-basis:0;line-height:15px;margin:0;padding:0;position:relative;text-align:center}.wizard-pf-steps-indicator .wizard-pf-step:not(.active){display:none}@media (min-width:768px){.wizard-pf-steps-indicator .wizard-pf-step:not(.active){display:block}}.wizard-pf-steps-indicator .wizard-pf-step a{-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;font-weight:700}@media (min-width:768px){.wizard-pf-steps-indicator .wizard-pf-step a{font-weight:400;-ms-flex-pack:center;justify-content:center}}.wizard-pf-steps-indicator .wizard-pf-step a .wizard-pf-step-title{margin-left:10px}@media (min-width:768px){.wizard-pf-steps-indicator .wizard-pf-step a .wizard-pf-step-title{margin-left:0}}.wizard-pf-steps-indicator .wizard-pf-step a .wizard-pf-step-title-substep{font-weight:400;margin-left:10px;text-transform:capitalize}.wizard-pf-steps-indicator .wizard-pf-step a .wizard-pf-step-title-substep:before{content:"\00BB";font-size:20px;margin-right:10px}.wizard-pf-steps-indicator .wizard-pf-step a .wizard-pf-step-title-substep:not(.active){display:none}@media (min-width:768px){.wizard-pf-steps-indicator .wizard-pf-step .wizard-pf-step-title-substep{display:none}.wizard-pf-steps-indicator .wizard-pf-step:before{background-color:#bbb;content:"";height:2px;left:0;position:absolute;right:0;top:40px}.wizard-pf-steps-indicator .wizard-pf-step:first-child:before{left:50%;right:0}.wizard-pf-steps-indicator .wizard-pf-step:last-child:before{left:0;right:50%}.wizard-pf-steps-indicator .wizard-pf-step:only-of-type:before{background-color:transparent}}.wizard-pf-steps-indicator .wizard-pf-step a{color:#030303;cursor:pointer;font-size:16px;margin-left:1em;margin-right:1em;text-decoration:none}.wizard-pf-steps-indicator .wizard-pf-step:not(.active):not(.disabled) a:hover .wizard-pf-step-number{background-color:#bbb;border-color:#bbb;color:#fff}.wizard-pf-steps-indicator .wizard-pf-step .wizard-pf-step-number{background-color:#fff;border-radius:50%;border:solid 2px #39a5dc;color:#bbb;font-size:12px;font-weight:700;height:25px;line-height:22px;width:25px;display:inline-block}@media (min-width:768px){.wizard-pf-steps-indicator .wizard-pf-step .wizard-pf-step-number{left:calc(50% - 13px);position:absolute;top:27px}}.wizard-pf-steps-indicator .wizard-pf-step.active .wizard-pf-step-number{background-color:#39a5dc;border-color:#39a5dc;cursor:default;color:#fff}.wizard-pf-steps-indicator .wizard-pf-step.active~.wizard-pf-step .wizard-pf-step-number{border-color:#bbb;background:#fff}.wizard-pf-main{height:100%;padding:1em;vertical-align:top;width:100%}@media (min-width:768px){.wizard-pf-main{overflow:auto;padding:3em;-ms-flex:1 1 auto;flex:1 1 auto}}.wizard-pf-main .blank-slate-pf{background-color:transparent;border:none;left:0;right:0}.wizard-pf-contents textarea{resize:vertical}.wizard-pf-review-steps{list-style:none}.wizard-pf-review-steps .list-group,.wizard-pf-review-steps .list-group-item{border:none;margin-bottom:0}.wizard-pf-review-steps>ul>li{float:left;line-height:15px;margin:0;padding-top:0;position:relative;width:100%}.wizard-pf-review-steps>ul>li>a{color:#030303;cursor:pointer;font-size:16px;padding-left:30px;padding-right:5px;text-decoration:none;transition:250ms}.wizard-pf-review-steps>ul>li>a:before{content:"\f107";display:block;font-family:FontAwesome;font-size:24px;font-weight:500;left:20px;position:absolute;top:0}.wizard-pf-review-steps>ul>li>a.collapsed:before{content:"\f105"}.wizard-pf-review-substeps{padding-left:22px}.wizard-pf-review-substeps>ul>li{float:left;line-height:15px;margin:0;position:relative;width:100%}.wizard-pf-review-substeps>ul>li a{color:#030303;cursor:pointer;font-size:16px;padding-left:30px;padding-right:5px;text-decoration:none;transition:250ms}.wizard-pf-review-substeps>ul>li a:before{content:"\f107";display:block;font-family:FontAwesome;font-size:24px;font-weight:500;left:20px;position:absolute;top:10px}.wizard-pf-review-substeps>ul>li a.collapsed:before{content:"\f105"}.wizard-pf-review-content{padding-top:10px;padding-left:40px}.wizard-pf-review-content .wizard-pf-review-item{padding:5px 0}.wizard-pf-review-content .wizard-pf-review-item.sub-item{margin-left:10px}.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-label{font-weight:700;padding-right:10px}.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field{font-weight:700;margin:5px 0;padding-right:10px}.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field:first-of-type{margin-top:0}.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field:last-of-type{margin-bottom:0}.wizard-pf-review-content .wizard-pf-review-item .wizard-pf-review-item-field.sub-field{margin-left:10px}.wizard-pf-success-icon{color:#3f9c35;font-size:67.2px;line-height:67.2px}.wizard-pf-footer{background:#fff;border-top:1px solid #d1d1d1;margin-top:0;padding-bottom:17px;display:-ms-flexbox;display:flex;-ms-flex-pack:end;justify-content:flex-end}.wizard-pf-footer .wizard-pf-cancel{margin-right:25px;-ms-flex-order:-1;order:-1}.wizard-pf-footer .wizard-pf-next{-ms-flex-order:1;order:1;margin-left:8px}@media (min-width:768px){.wizard-pf-row{display:-ms-flexbox;display:flex;width:100%;height:900px;max-height:65vh}}@media (min-width:992px){.wizard-pf{padding:30px 0;width:900px}.wizard-pf-sidebar .list-group-item>a{width:18em}}.wizard-pf-steps-alt,.wizard-pf-steps-alt ul{list-style:none;margin:0;padding:0}.wizard-pf-steps-alt{margin:15px 0 15px 15px}@media (min-width:768px){.wizard-pf-steps-alt{display:none}}.wizard-pf-steps-alt-indicator{position:relative}.wizard-pf-steps-alt-indicator:after{color:#4d5258;content:"\f107";display:block;font-family:FontAwesome;font-size:24px;font-weight:500;position:absolute;right:17px;top:50%;-ms-transform:translateY(-50%);transform:translateY(-50%)}@media (min-width:768px){.wizard-pf-steps-alt-indicator:after{display:none}}.wizard-pf-steps-alt-indicator.active:after{content:"\f106"}.wizard-pf-step-alt{position:relative;z-index:1}.wizard-pf-step-alt:not(:last-child){padding-bottom:10px}.wizard-pf-step-alt a{display:-ms-flexbox;display:flex;-ms-flex:1;flex:1}.wizard-pf-step-alt a:focus,.wizard-pf-step-alt a:hover{text-decoration:none}.wizard-pf-step-alt a:focus .wizard-pf-step-alt-title,.wizard-pf-step-alt a:hover .wizard-pf-step-alt-title{color:#39a5dc}.wizard-pf-step-alt ul{margin-left:11px}.wizard-pf-step-alt .wizard-pf-step-alt-number{border-radius:50%;font-size:12px;font-weight:700;height:24px;width:24px;display:inline-block;text-align:center;-ms-flex:0 0 auto;flex:0 0 auto;border:2px solid #39a5dc;background-color:#fff}.wizard-pf-step-alt .wizard-pf-step-alt-title{color:#030303;font-weight:700;text-transform:capitalize;display:inline-block;margin-left:5px;-ms-flex-item-align:center;align-self:center}.wizard-pf-step-alt.active .wizard-pf-step-alt-number{background-color:#39a5dc;border-color:#39a5dc;cursor:default;color:#fff}.wizard-pf-step-alt.active .wizard-pf-step-alt-title{color:#39a5dc}.wizard-pf-step-alt.active~.wizard-pf-step-alt .wizard-pf-step-alt-number{color:#bbb;border-color:#bbb}.wizard-pf-step-alt:not(.active) a:hover .wizard-pf-step-alt-number{border-color:#bbb;background:#bbb;color:#fff}.wizard-pf-step-alt:before{content:"";position:absolute;left:11px;height:100%;border-left:2px solid #bbb;z-index:-1}.wizard-pf-step-alt-substep{display:-ms-flexbox;display:flex;border-left:2px solid transparent}.wizard-pf-step-alt-substep a{padding:5px 0 5px 18px;color:#393f44}.wizard-pf-step-alt-substep.active,.wizard-pf-step-alt-substep:not(.disabled):hover{background-color:#ededed;border-color:#39a5dc}.wizard-pf-step-alt-substep.active a,.wizard-pf-step-alt-substep:not(.disabled):hover a{color:#39a5dc}.wizard-pf-step-alt-substep.active a{font-weight:700}.wizard-pf-sidebar .list-group-item.disabled>a:hover,.wizard-pf-step-alt-substep.disabled>a:hover,.wizard-pf-step.disabled>a:hover{cursor:not-allowed} \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/patternfly.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue.min.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue.min.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/patternfly.min.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue-additions.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue-additions.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue-additions.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue-additions.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue-additions.min.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue-additions.min.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue-additions.min.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue-additions.min.css diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/css/rcue.css rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue.css diff --git a/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue.min.css b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue.min.css new file mode 100644 index 00000000..86e1a1b6 --- /dev/null +++ b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/css/rcue.min.css @@ -0,0 +1,8 @@ +@font-face{font-family:"Open Sans";font-style:normal;font-weight:300;src:url(../fonts/OpenSans-Light-webfont.eot);src:local("Open Sans Light"),local("OpenSans-Light"),url(../fonts/OpenSans-Light-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Light-webfont.woff2) format("woff2"),url(../fonts/OpenSans-Light-webfont.woff) format("woff"),url(../fonts/OpenSans-Light-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Light-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:400;src:url(../fonts/OpenSans-Regular-webfont.eot);src:local("Open Sans"),local("OpenSans"),url(../fonts/OpenSans-Regular-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Regular-webfont.woff2) format("woff2"),url(../fonts/OpenSans-Regular-webfont.woff) format("woff"),url(../fonts/OpenSans-Regular-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Regular-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:italic;font-weight:300;src:url(../fonts/OpenSans-LightItalic-webfont.eot);src:local("Open Sans Light Italic"),local("OpenSansLight-Italic"),url(../fonts/OpenSans-LightItalic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-LightItalic-webfont.woff2) format("woff2"),url(../fonts/OpenSans-LightItalic-webfont.woff) format("woff"),url(../fonts/OpenSans-LightItalic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-LightItalic-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:italic;font-weight:400;src:url(../fonts/OpenSans-Italic-webfont.eot);src:local("Open Sans Italic"),local("OpenSans-Italic"),url(../fonts/OpenSans-Italic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Italic-webfont.woff2) format("woff2"),url(../fonts/OpenSans-Italic-webfont.woff) format("woff"),url(../fonts/OpenSans-Italic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Italic-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:600;src:url(../fonts/OpenSans-Semibold-webfont.eot);src:local("Open Sans Semibold"),local("OpenSans-Semibold-webfont"),url(../fonts/OpenSans-Semibold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Semibold-webfont.woff2) format("woff2"),url(../fonts/OpenSans-Semibold-webfont.woff) format("woff"),url(../fonts/OpenSans-Semibold-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Semibold-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:italic;font-weight:600;src:url(../fonts/OpenSans-SemiboldItalic-webfont.eot);src:local("Open Sans Semibold Italic"),local("OpenSans-SemiboldItalic-webfont"),url(../fonts/OpenSans-SemiboldItalic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-SemiboldItalic-webfont.woff2) format("woff2"),url(../fonts/OpenSans-SemiboldItalic-webfont.woff) format("woff"),url(../fonts/OpenSans-SemiboldItalic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-SemiboldItalic-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:700;src:url(../fonts/OpenSans-Bold-webfont.eot);src:local("Open Sans Bold"),local("OpenSans-Bold"),url(../fonts/OpenSans-Bold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-Bold-webfont.woff2) format("woff2"),url(../fonts/OpenSans-Bold-webfont.woff) format("woff"),url(../fonts/OpenSans-Bold-webfont.ttf) format("truetype"),url(../fonts/OpenSans-Bold-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:italic;font-weight:700;src:url(../fonts/OpenSans-BoldItalic-webfont.eot);src:local("Open Sans Bold Italic"),local("OpenSans-BoldItalic"),url(../fonts/OpenSans-BoldItalic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-BoldItalic-webfont.woff2) format("woff2"),url(../fonts/OpenSans-BoldItalic-webfont.woff) format("woff"),url(../fonts/OpenSans-BoldItalic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-BoldItalic-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:italic;font-weight:800;src:url(../fonts/OpenSans-ExtraBoldItalic-webfont.eot);src:local("Open Sans Extrabold Italic"),local("OpenSans-ExtraboldItalic"),url(../fonts/OpenSans-ExtraBoldItalic-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-ExtraBoldItalic-webfont.woff2) format("woff2"),url(../fonts/OpenSans-ExtraBoldItalic-webfont.woff) format("woff"),url(../fonts/OpenSans-ExtraBoldItalic-webfont.ttf) format("truetype"),url(../fonts/OpenSans-ExtraBoldItalic-webfont.svg#OpenSans) format("svg")}@font-face{font-family:"Open Sans";font-style:normal;font-weight:800;src:url(../fonts/OpenSans-ExtraBold-webfont.eot);src:local("Open Sans Extrabold"),local("OpenSans-Extrabold"),url(../fonts/OpenSans-ExtraBold-webfont.eot?#iefix) format("embedded-opentype"),url(../fonts/OpenSans-ExtraBold-webfont.woff2) format("woff2"),url(../fonts/OpenSans-ExtraBold-webfont.woff) format("woff"),url(../fonts/OpenSans-ExtraBold-webfont.ttf) format("truetype"),url(../fonts/OpenSans-ExtraBold-webfont.svg#OpenSans) format("svg")}/*! + * Bootstrap v3.4.1 (https://getbootstrap.com/) + * Copyright 2011-2019 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}figure{margin:1em 40px}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]{-webkit-appearance:textfield;box-sizing:content-box}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{border:0;padding:0}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{color:#000!important;text-shadow:none!important;background:0 0!important;box-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}a[href^="#"]:after,a[href^="javascript:"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:"Glyphicons Halflings";src:url(../fonts/glyphicons-halflings-regular.eot);src:url(../fonts/glyphicons-halflings-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/glyphicons-halflings-regular.woff2) format("woff2"),url(../fonts/glyphicons-halflings-regular.woff) format("woff"),url(../fonts/glyphicons-halflings-regular.ttf) format("truetype"),url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format("svg")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:"Glyphicons Halflings";font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\002a"}.glyphicon-plus:before{content:"\002b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before{content:"\e227"}.glyphicon-btc:before{content:"\e227"}.glyphicon-xbt:before{content:"\e227"}.glyphicon-yen:before{content:"\00a5"}.glyphicon-jpy:before{content:"\00a5"}.glyphicon-ruble:before{content:"\20bd"}.glyphicon-rub:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*{box-sizing:border-box}:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:"Open Sans",Helvetica,Arial,sans-serif;font-size:12px;line-height:1.66666667;color:#363636;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#0088ce;text-decoration:none}a:focus,a:hover{color:#00659c;text-decoration:underline}a:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:1px}.img-thumbnail{padding:4px;line-height:1.66666667;background-color:#fff;border:1px solid #ddd;border-radius:1px;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #f1f1f1}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#9c9c9c}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:24px}.h2,h2{font-size:22px}.h3,h3{font-size:16px}.h4,h4{font-size:15px}.h5,h5{font-size:13px}.h6,h6{font-size:11px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:13px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:18px}}.small,small{font-size:91%}.mark,mark{padding:.2em;background-color:#fcf8e3}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#9c9c9c}.text-primary{color:#39a5dc}a.text-primary:focus,a.text-primary:hover{color:#228bc0}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#ec7a08}a.text-warning:focus,a.text-warning:hover{color:#bb6106}.text-danger{color:#c00}a.text-danger:focus,a.text-danger:hover{color:#900}.bg-primary{color:#fff;background-color:#39a5dc}a.bg-primary:focus,a.bg-primary:hover{background-color:#228bc0}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #f1f1f1}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-right:5px;padding-left:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.66666667}dt{font-weight:700}dd{margin-left:0}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:15px;border-left:5px solid #f1f1f1}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.66666667;color:#9c9c9c}blockquote .small:before,blockquote footer:before,blockquote small:before{content:"\2014 \00A0"}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;text-align:right;border-right:5px solid #f1f1f1;border-left:0}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:""}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:"\00A0 \2014"}address{margin-bottom:20px;font-style:normal;line-height:1.66666667}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,monospace}code{padding:2px 4px;font-size:90%;color:#004368;background-color:#def3ff;border-radius:1px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:1px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:9.5px;margin:0 0 10px;font-size:11px;line-height:1.66666667;color:#363636;word-break:break-all;word-wrap:break-word;background-color:#fafafa;border:1px solid #ccc;border-radius:1px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{padding-right:20px;padding-left:20px;margin-right:auto;margin-left:auto}@media (min-width:768px){.container{width:760px}}@media (min-width:992px){.container{width:980px}}@media (min-width:1200px){.container{width:1180px}}.container-fluid{padding-right:20px;padding-left:20px;margin-right:auto;margin-left:auto}.row{margin-right:-20px;margin-left:-20px}.row-no-gutters{margin-right:0;margin-left:0}.row-no-gutters [class*=col-]{padding-right:0;padding-left:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-right:20px;padding-left:20px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}table col[class*=col-]{position:static;display:table-column;float:none}table td[class*=col-],table th[class*=col-]{position:static;display:table-cell;float:none}caption{padding-top:10px;padding-bottom:10px;color:#9c9c9c;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:20px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:10px;line-height:1.66666667;vertical-align:top;border-top:1px solid #d1d1d1}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #d1d1d1}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #d1d1d1}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered{border:1px solid #d1d1d1}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #d1d1d1}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f5f5f5}.table-hover>tbody>tr:hover{background-color:#def3ff}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#def3ff}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#c4eaff}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{min-height:.01%;overflow-x:auto}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:15px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #d1d1d1}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:18px;line-height:inherit;color:#363636;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{box-sizing:border-box;-webkit-appearance:none;-moz-appearance:none;appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;line-height:normal}fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=checkbox]:focus,input[type=file]:focus,input[type=radio]:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}output{display:block;padding-top:3px;font-size:12px;line-height:1.66666667;color:#363636}.form-control{display:block;width:100%;height:26px;padding:2px 6px;font-size:12px;line-height:1.66666667;color:#363636;background-color:#fff;background-image:none;border:1px solid #bbb;border-radius:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#0088ce;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(0,136,206,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control:-moz-placeholder{color:#999;font-style:italic}.form-control::-moz-placeholder{color:#999;font-style:italic;opacity:1}.form-control:-ms-input-placeholder{color:#999;font-style:italic}.form-control::-webkit-input-placeholder{color:#999;font-style:italic}.form-control::-ms-expand{background-color:transparent;border:0}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#f5f5f5;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=datetime-local].form-control,input[type=month].form-control,input[type=time].form-control{line-height:26px}.input-group-sm input[type=date],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm input[type=time],input[type=date].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm,input[type=time].input-sm{line-height:22px}.input-group-lg input[type=date],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg input[type=time],input[type=date].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg,input[type=time].input-lg{line-height:33px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox.disabled label,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .radio label{cursor:not-allowed}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;font-weight:400;vertical-align:middle;cursor:pointer}.checkbox-inline.disabled,.radio-inline.disabled,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio-inline{cursor:not-allowed}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.form-control-static{min-height:32px;padding-top:3px;padding-bottom:3px;margin-bottom:0}.form-control-static.input-lg,.form-control-static.input-sm{padding-right:0;padding-left:0}.input-sm{height:22px;padding:2px 6px;font-size:11px;line-height:1.5;border-radius:1px}select.input-sm{height:22px;line-height:22px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:22px;padding:2px 6px;font-size:11px;line-height:1.5;border-radius:1px}.form-group-sm select.form-control{height:22px;line-height:22px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:22px;min-height:31px;padding:3px 6px;font-size:11px;line-height:1.5}.input-lg{height:33px;padding:6px 10px;font-size:14px;line-height:1.3333333;border-radius:1px}select.input-lg{height:33px;line-height:33px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:33px;padding:6px 10px;font-size:14px;line-height:1.3333333;border-radius:1px}.form-group-lg select.form-control{height:33px;line-height:33px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:33px;min-height:34px;padding:7px 10px;font-size:14px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:32.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:26px;height:26px;line-height:26px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:33px;height:33px;line-height:33px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:22px;height:22px;line-height:22px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;background-color:#dff0d8;border-color:#3c763d}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#ec7a08}.has-warning .form-control{border-color:#ec7a08;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#bb6106;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #faad60}.has-warning .input-group-addon{color:#ec7a08;background-color:#fcf8e3;border-color:#ec7a08}.has-warning .form-control-feedback{color:#ec7a08}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#c00}.has-error .form-control{border-color:#c00;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#900;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #f33}.has-error .input-group-addon{color:#c00;background-color:#f2dede;border-color:#c00}.has-error .form-control-feedback{color:#c00}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#767676}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{padding-top:3px;margin-top:0;margin-bottom:0}.form-horizontal .checkbox,.form-horizontal .radio{min-height:23px}.form-horizontal .form-group{margin-right:-20px;margin-left:-20px}@media (min-width:768px){.form-horizontal .control-label{padding-top:3px;margin-bottom:0;text-align:right}}.form-horizontal .has-feedback .form-control-feedback{right:20px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:7px;font-size:14px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:3px;font-size:11px}}.btn{display:inline-block;margin-bottom:0;font-weight:600;text-align:center;white-space:nowrap;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;padding:2px 6px;font-size:12px;line-height:1.66666667;border-radius:1px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#4d5258;text-decoration:none}.btn.active,.btn:active{background-image:none;outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#4d5258;background-color:#f1f1f1;border-color:#bbb}.btn-default.focus,.btn-default:focus{color:#4d5258;background-color:#d8d8d8;border-color:#7b7b7b}.btn-default:hover{color:#4d5258;background-color:#d8d8d8;border-color:#9c9c9c}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{color:#4d5258;background-color:#d8d8d8;background-image:none;border-color:#9c9c9c}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#4d5258;background-color:#c6c6c6;border-color:#7b7b7b}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#f1f1f1;border-color:#bbb}.btn-default .badge{color:#f1f1f1;background-color:#4d5258}.btn-primary{color:#fff;background-color:#0088ce;border-color:#00659c}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#00669b;border-color:#00121d}.btn-primary:hover{color:#fff;background-color:#00669b;border-color:#003d5f}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#00669b;background-image:none;border-color:#003d5f}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#004f77;border-color:#00121d}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0088ce;border-color:#00659c}.btn-primary .badge{color:#0088ce;background-color:#fff}.btn-success{color:#fff;background-color:#3f9c35;border-color:#37892f}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#307628;border-color:#112a0e}.btn-success:hover{color:#fff;background-color:#307628;border-color:#255b1f}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#307628;background-image:none;border-color:#255b1f}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#255b1f;border-color:#112a0e}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#3f9c35;border-color:#37892f}.btn-success .badge{color:#3f9c35;background-color:#fff}.btn-info{color:#fff;background-color:#00659c;border-color:#005483}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#004469;border-color:#000203}.btn-info:hover{color:#fff;background-color:#004469;border-color:#002d45}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#004469;background-image:none;border-color:#002d45}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#002d45;border-color:#000203}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#00659c;border-color:#005483}.btn-info .badge{color:#00659c;background-color:#fff}.btn-warning{color:#fff;background-color:#ec7a08;border-color:#d36d07}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#bb6106;border-color:#582e03}.btn-warning:hover{color:#fff;background-color:#bb6106;border-color:#984f05}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#bb6106;background-image:none;border-color:#984f05}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#984f05;border-color:#582e03}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#ec7a08;border-color:#d36d07}.btn-warning .badge{color:#ec7a08;background-color:#fff}.btn-danger{color:#fff;background-color:#a30000;border-color:#8b0000}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#700000;border-color:#0b0000}.btn-danger:hover{color:#fff;background-color:#700000;border-color:#4e0000}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#700000;background-image:none;border-color:#4e0000}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#4c0000;border-color:#0b0000}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#a30000;border-color:#8b0000}.btn-danger .badge{color:#a30000;background-color:#fff}.btn-link{font-weight:400;color:#0088ce;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#00659c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#9c9c9c;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:6px 10px;font-size:14px;line-height:1.3333333;border-radius:1px}.btn-group-sm>.btn,.btn-sm{padding:2px 6px;font-size:11px;line-height:1.5;border-radius:1px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:11px;line-height:1.5;border-radius:1px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:0 dashed;border-right:0 solid transparent;border-left:0 solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;font-size:12px;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid #bbb;border-radius:1px;box-shadow:0 6px 12px rgba(0,0,0,.175)}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{margin:9px 0;background-color:#ededed;height:1px;margin:4px 1px;overflow:hidden}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.66666667;color:#363636;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{color:#4d5258;text-decoration:none;background-color:#def3ff}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;background-color:#0088ce;outline:0}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#9c9c9c}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;cursor:not-allowed;background-color:transparent;background-image:none}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{right:0;left:auto}.dropdown-menu-left{right:auto;left:0}.dropdown-header{display:block;padding:3px 20px;font-size:11px;line-height:1.66666667;color:#9c9c9c;white-space:nowrap}.dropdown-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{content:"";border-top:0;border-bottom:0 dashed}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{right:auto;left:0}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-bottom-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-right:8px;padding-left:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-right:12px;padding-left:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:0 0 0;border-bottom-width:0}.dropup .btn-lg .caret{border-width:0 0 0}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-left-radius:1px;border-top-right-radius:1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-top-left-radius:0;border-top-right-radius:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-left-radius:0;border-top-right-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{display:table-cell;float:none;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-right:0;padding-left:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:33px;padding:6px 10px;font-size:14px;line-height:1.3333333;border-radius:1px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:33px;line-height:33px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:22px;padding:2px 6px;font-size:11px;line-height:1.5;border-radius:1px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:22px;line-height:22px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:2px 6px;font-size:12px;font-weight:400;line-height:1;color:#363636;text-align:center;background-color:#f1f1f1;border:1px solid #bbb;border-radius:1px}.input-group-addon.input-sm{padding:2px 6px;font-size:11px;border-radius:1px}.input-group-addon.input-lg{padding:6px 10px;font-size:14px;border-radius:1px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{padding-left:0;margin-bottom:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#f1f1f1}.nav>li.disabled>a{color:#9c9c9c}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#9c9c9c;text-decoration:none;cursor:not-allowed;background-color:transparent}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#f1f1f1;border-color:#0088ce}.nav .nav-divider{margin:9px 0;background-color:#e5e5e5;background-color:#ededed;height:1px;margin:4px 1px;overflow:hidden}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ededed}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.66666667;border:1px solid transparent;border-radius:1px 1px 0 0}.nav-tabs>li>a:hover{border-color:transparent transparent #ededed}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#0088ce;cursor:default;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:1px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ededed}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ededed;border-radius:1px 1px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:1px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#39a5dc}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{margin-bottom:5px;text-align:center}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:1px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ededed}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ededed;border-radius:1px 1px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;border:1px solid transparent}@media (min-width:768px){.navbar{border-radius:1px}}@media (min-width:768px){.navbar-header{float:left}}.navbar-collapse{padding-right:20px;padding-left:20px;overflow-x:visible;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-right:0;padding-left:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}@media (min-width:768px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-20px;margin-left:-20px}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0 0 1px}@media (min-width:768px){.navbar-static-top{border-radius:0}}.navbar-brand{float:left;height:50px;padding:15px 20px;font-size:14px;line-height:20px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-20px}}.navbar-toggle{position:relative;float:right;padding:9px 10px;margin-right:20px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:1px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:768px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -20px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:768px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{padding:10px 20px;margin-right:-20px;margin-left:-20px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin-top:12px;margin-bottom:12px}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:768px){.navbar-form{width:auto;padding-top:0;padding-bottom:0;margin-right:0;margin-left:0;border:0;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-top-left-radius:1px;border-top-right-radius:1px;border-bottom-right-radius:0;border-bottom-left-radius:0}.navbar-btn{margin-top:12px;margin-bottom:12px}.navbar-btn.btn-sm{margin-top:14px;margin-bottom:14px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:768px){.navbar-text{float:left;margin-right:20px;margin-left:20px}}@media (min-width:768px){.navbar-left{float:left!important;float:left}.navbar-right{float:right!important;float:right;margin-right:-20px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{color:#555;background-color:#e7e7e7}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#c2c2c2}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-text{color:#c2c2c2}.navbar-inverse .navbar-nav>li>a{color:#c2c2c2}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{color:#fff;background-color:#080808}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#c2c2c2}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-link{color:#c2c2c2}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#c2c2c2}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:20px;list-style:none;background-color:transparent;border-radius:1px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{padding:0 5px;color:#4d5258;content:"\f105\00a0"}.breadcrumb>.active{color:#4d5258}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:1px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:2px 6px;margin-left:-1px;line-height:1.66666667;color:#0088ce;text-decoration:none;background-color:#f5f5f5;border:1px solid #bbb}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#00659c;background-color:#ededed;border-color:#ddd}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;cursor:default;background-color:#39a5dc;border-color:#39a5dc}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#9c9c9c;cursor:not-allowed;background-color:#fff;border-color:#ddd}.pagination-lg>li>a,.pagination-lg>li>span{padding:6px 10px;font-size:14px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pagination-sm>li>a,.pagination-sm>li>span{padding:2px 6px;font-size:11px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pager{padding-left:0;margin:20px 0;text-align:center;list-style:none}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#f5f5f5;border:1px solid #bbb;border-radius:0}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#ededed}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#8b8d8f;cursor:not-allowed;background-color:#f5f5f5}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#9c9c9c}.label-default[href]:focus,.label-default[href]:hover{background-color:#838383}.label-primary{background-color:#39a5dc}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#228bc0}.label-success{background-color:#3f9c35}.label-success[href]:focus,.label-success[href]:hover{background-color:#307628}.label-info{background-color:#00659c}.label-info[href]:focus,.label-info[href]:hover{background-color:#004469}.label-warning{background-color:#ec7a08}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#bb6106}.label-danger{background-color:#c00}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#900}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:11px;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:middle;background-color:#9c9c9c;border-radius:1px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#0088ce;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#f1f1f1}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:18px;font-weight:200}.jumbotron>hr{border-top-color:#d8d8d8}.container .jumbotron,.container-fluid .jumbotron{padding-right:20px;padding-left:20px;border-radius:1px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-right:60px;padding-left:60px}.jumbotron .h1,.jumbotron h1{font-size:54px}}.thumbnail{display:block;padding:4px;margin-bottom:20px;line-height:1.66666667;background-color:#fff;border:1px solid #ddd;border-radius:1px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-right:auto;margin-left:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#0088ce}.thumbnail .caption{padding:9px;color:#363636}.alert{padding:11px;margin-bottom:20px;border:1px solid transparent;border-radius:1px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:500}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:31px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{color:#363636;background-color:#e9f4e9;border-color:#3f9c35}.alert-success hr{border-top-color:#37892f}.alert-success .alert-link{color:#1d1d1d}.alert-info{color:#363636;background-color:#f5f5f5;border-color:#8b8d8f}.alert-info hr{border-top-color:#7e8082}.alert-info .alert-link{color:#1d1d1d}.alert-warning{color:#363636;background-color:#fdf2e5;border-color:#ec7a08}.alert-warning hr{border-top-color:#d36d07}.alert-warning .alert-link{color:#1d1d1d}.alert-danger{color:#363636;background-color:#ffe6e6;border-color:#c00}.alert-danger hr{border-top-color:#b30000}.alert-danger .alert-link{color:#1d1d1d}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:20px;margin-bottom:20px;overflow:hidden;background-color:#ededed;border-radius:1px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0%;height:100%;font-size:11px;line-height:20px;color:#fff;text-align:center;background-color:#39a5dc;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(3,3,3,.15) 25%,rgba(3,3,3,.15) 26%,transparent 27%,transparent 49%,rgba(3,3,3,.15) 50%,rgba(3,3,3,.15) 51%,transparent 52%,transparent 74%,rgba(3,3,3,.15) 75%,rgba(3,3,3,.15) 76%,transparent 77%);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#3f9c35}.progress-striped .progress-bar-success{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(3,3,3,.15) 25%,rgba(3,3,3,.15) 26%,transparent 27%,transparent 49%,rgba(3,3,3,.15) 50%,rgba(3,3,3,.15) 51%,transparent 52%,transparent 74%,rgba(3,3,3,.15) 75%,rgba(3,3,3,.15) 76%,transparent 77%)}.progress-bar-info{background-color:#00659c}.progress-striped .progress-bar-info{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(3,3,3,.15) 25%,rgba(3,3,3,.15) 26%,transparent 27%,transparent 49%,rgba(3,3,3,.15) 50%,rgba(3,3,3,.15) 51%,transparent 52%,transparent 74%,rgba(3,3,3,.15) 75%,rgba(3,3,3,.15) 76%,transparent 77%)}.progress-bar-warning{background-color:#ec7a08}.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(3,3,3,.15) 25%,rgba(3,3,3,.15) 26%,transparent 27%,transparent 49%,rgba(3,3,3,.15) 50%,rgba(3,3,3,.15) 51%,transparent 52%,transparent 74%,rgba(3,3,3,.15) 75%,rgba(3,3,3,.15) 76%,transparent 77%)}.progress-bar-danger{background-color:#c00}.progress-striped .progress-bar-danger{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(-45deg,rgba(3,3,3,.15) 25%,rgba(3,3,3,.15) 26%,transparent 27%,transparent 49%,rgba(3,3,3,.15) 50%,rgba(3,3,3,.15) 51%,transparent 52%,transparent 74%,rgba(3,3,3,.15) 75%,rgba(3,3,3,.15) 76%,transparent 77%)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{overflow:hidden;zoom:1}.media-body{width:10000px}.media-object{display:block}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{padding-left:0;margin-bottom:20px}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #f5f5f5}.list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{color:#9c9c9c;cursor:not-allowed;background-color:#fafafa}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#9c9c9c}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#39a5dc;border-color:#39a5dc}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#e6f4fb}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{color:#555;text-decoration:none;background-color:#def3ff}button.list-group-item{width:100%;text-align:left}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#ec7a08;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#ec7a08}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#ec7a08;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#ec7a08;border-color:#ec7a08}.list-group-item-danger{color:#c00;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#c00}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#c00;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#c00;border-color:#c00}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:20px;background-color:#fff;border:1px solid transparent;border-radius:1px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-left-radius:0;border-top-right-radius:0}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:14px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #d1d1d1;border-bottom-right-radius:0;border-bottom-left-radius:0}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-left-radius:0;border-top-right-radius:0}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.list-group+.panel-footer{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-right:15px;padding-left:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:0;border-top-right-radius:0}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:0}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:0}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #d1d1d1}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}.panel>.table-responsive{margin-bottom:0;border:0}.panel-group{margin-bottom:20px}.panel-group .panel{margin-bottom:0;border-radius:1px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d1d1d1}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d1d1d1}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#363636;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#363636}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#39a5dc}.panel-primary>.panel-heading{color:#fff;background-color:#39a5dc;border-color:#39a5dc}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#39a5dc}.panel-primary>.panel-heading .badge{color:#39a5dc;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#39a5dc}.panel-success{border-color:#3f9c35}.panel-success>.panel-heading{color:#fff;background-color:#3f9c35;border-color:#3f9c35}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3f9c35}.panel-success>.panel-heading .badge{color:#3f9c35;background-color:#fff}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3f9c35}.panel-info{border-color:#00659c}.panel-info>.panel-heading{color:#fff;background-color:#00659c;border-color:#00659c}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#00659c}.panel-info>.panel-heading .badge{color:#00659c;background-color:#fff}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#00659c}.panel-warning{border-color:#ec7a08}.panel-warning>.panel-heading{color:#fff;background-color:#ec7a08;border-color:#ec7a08}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ec7a08}.panel-warning>.panel-heading .badge{color:#ec7a08;background-color:#fff}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ec7a08}.panel-danger{border-color:#c00}.panel-danger>.panel-heading{color:#fff;background-color:#c00;border-color:#c00}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#c00}.panel-danger>.panel-heading .badge{color:#c00;background-color:#fff}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#c00}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:1px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:1px}.well-sm{padding:9px;border-radius:1px}.close{float:right;font-size:18px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}.modal-open{overflow:hidden}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;display:none;overflow:hidden;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-ms-transform:translate(0,-25%);transform:translate(0,-25%);transition:transform .3s ease-out}.modal.in .modal-dialog{-ms-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;background-clip:padding-box;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:1px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.in{opacity:.5}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.66666667}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-bottom:0;margin-left:5px}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Open Sans",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.66666667;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:11px;opacity:0}.tooltip.in{opacity:.9}.tooltip.top{padding:8px 0;margin-top:-3px}.tooltip.right{padding:0 8px;margin-left:3px}.tooltip.bottom{padding:8px 0;margin-top:3px}.tooltip.left{padding:0 8px;margin-left:-3px}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-8px;border-width:8px 8px 0;border-top-color:#393f44}.tooltip.top-left .tooltip-arrow{right:8px;bottom:0;margin-bottom:-8px;border-width:8px 8px 0;border-top-color:#393f44}.tooltip.top-right .tooltip-arrow{bottom:0;left:8px;margin-bottom:-8px;border-width:8px 8px 0;border-top-color:#393f44}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-8px;border-width:8px 8px 8px 0;border-right-color:#393f44}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-8px;border-width:8px 0 8px 8px;border-left-color:#393f44}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-8px;border-width:0 8px 8px;border-bottom-color:#393f44}.tooltip.bottom-left .tooltip-arrow{top:0;right:8px;margin-top:-8px;border-width:0 8px 8px;border-bottom-color:#393f44}.tooltip.bottom-right .tooltip-arrow{top:0;left:8px;margin-top:-8px;border-width:0 8px 8px;border-bottom-color:#393f44}.tooltip-inner{max-width:220px;padding:3px 8px;color:#fff;text-align:center;background-color:#393f44;border-radius:1px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:220px;padding:1px;font-family:"Open Sans",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;line-height:1.66666667;line-break:auto;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;word-wrap:normal;white-space:normal;font-size:12px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid #bbb;border-radius:1px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover>.arrow{border-width:11px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow:after{content:"";border-width:10px}.popover.top>.arrow{bottom:-11px;left:50%;margin-left:-11px;border-top-color:#999;border-top-color:#bbb;border-bottom-width:0}.popover.top>.arrow:after{bottom:1px;margin-left:-10px;content:" ";border-top-color:#fff;border-bottom-width:0}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-right-color:#999;border-right-color:#bbb;border-left-width:0}.popover.right>.arrow:after{bottom:-10px;left:1px;content:" ";border-right-color:#fff;border-left-width:0}.popover.bottom>.arrow{top:-11px;left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:#bbb}.popover.bottom>.arrow:after{top:1px;margin-left:-10px;content:" ";border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:#bbb}.popover.left>.arrow:after{right:1px;bottom:-10px;content:" ";border-right-width:0;border-left-color:#fff}.popover-title{padding:8px 14px;margin:0;font-size:12px;background-color:#f5f5f5;border-bottom:1px solid #e8e8e8;border-radius:0}.popover-content{padding:9px 14px}.carousel{position:relative}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner>.item{position:relative;display:none;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;bottom:0;left:0;width:15%;font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0);opacity:.5}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x}.carousel-control.right{right:0;left:auto;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x}.carousel-control:focus,.carousel-control:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block;margin-top:-10px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;font-family:serif;line-height:1}.carousel-control .icon-prev:before{content:"\2039"}.carousel-control .icon-next:before{content:"\203a"}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;padding-left:0;margin-left:-30%;text-align:center;list-style:none}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;cursor:pointer;background-color:rgba(0,0,0,0);border:1px solid #fff;border-radius:10px}.carousel-indicators .active{width:12px;height:12px;margin:0;background-color:#fff}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{right:20%;left:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{display:table;content:" "}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-right:auto;margin-left:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-md,.visible-sm,.visible-xs{display:none!important}.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}}@media (max-width:767px){.visible-xs-block{display:block!important}}@media (max-width:767px){.visible-xs-inline{display:inline!important}}@media (max-width:767px){.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-block{display:block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline{display:inline!important}}@media (min-width:768px) and (max-width:991px){.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-block{display:block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline{display:inline!important}}@media (min-width:992px) and (max-width:1199px){.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}}@media (min-width:1200px){.visible-lg-block{display:block!important}}@media (min-width:1200px){.visible-lg-inline{display:inline!important}}@media (min-width:1200px){.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}}@media print{.hidden-print{display:none!important}}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:FontAwesome;src:url(../fonts/fontawesome-webfont.eot?v=4.7.0);src:url(../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0) format('embedded-opentype'),url(../fonts/fontawesome-webfont.woff2?v=4.7.0) format('woff2'),url(../fonts/fontawesome-webfont.woff?v=4.7.0) format('woff'),url(../fonts/fontawesome-webfont.ttf?v=4.7.0) format('truetype'),url(../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular) format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:solid .08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left{margin-right:.3em}.fa.fa-pull-right{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0)}100%{transform:rotate(359deg)}}.fa-rotate-90{-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook-f:before,.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before,.fa-gratipay:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before,.fa-resistance:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before,.fa-y-combinator-square:before,.fa-yc-square:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}.fa-buysellads:before{content:"\f20d"}.fa-connectdevelop:before{content:"\f20e"}.fa-dashcube:before{content:"\f210"}.fa-forumbee:before{content:"\f211"}.fa-leanpub:before{content:"\f212"}.fa-sellsy:before{content:"\f213"}.fa-shirtsinbulk:before{content:"\f214"}.fa-simplybuilt:before{content:"\f215"}.fa-skyatlas:before{content:"\f216"}.fa-cart-plus:before{content:"\f217"}.fa-cart-arrow-down:before{content:"\f218"}.fa-diamond:before{content:"\f219"}.fa-ship:before{content:"\f21a"}.fa-user-secret:before{content:"\f21b"}.fa-motorcycle:before{content:"\f21c"}.fa-street-view:before{content:"\f21d"}.fa-heartbeat:before{content:"\f21e"}.fa-venus:before{content:"\f221"}.fa-mars:before{content:"\f222"}.fa-mercury:before{content:"\f223"}.fa-intersex:before,.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-venus-double:before{content:"\f226"}.fa-mars-double:before{content:"\f227"}.fa-venus-mars:before{content:"\f228"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-neuter:before{content:"\f22c"}.fa-genderless:before{content:"\f22d"}.fa-facebook-official:before{content:"\f230"}.fa-pinterest-p:before{content:"\f231"}.fa-whatsapp:before{content:"\f232"}.fa-server:before{content:"\f233"}.fa-user-plus:before{content:"\f234"}.fa-user-times:before{content:"\f235"}.fa-bed:before,.fa-hotel:before{content:"\f236"}.fa-viacoin:before{content:"\f237"}.fa-train:before{content:"\f238"}.fa-subway:before{content:"\f239"}.fa-medium:before{content:"\f23a"}.fa-y-combinator:before,.fa-yc:before{content:"\f23b"}.fa-optin-monster:before{content:"\f23c"}.fa-opencart:before{content:"\f23d"}.fa-expeditedssl:before{content:"\f23e"}.fa-battery-4:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-battery-3:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-battery-2:before,.fa-battery-half:before{content:"\f242"}.fa-battery-1:before,.fa-battery-quarter:before{content:"\f243"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-mouse-pointer:before{content:"\f245"}.fa-i-cursor:before{content:"\f246"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-sticky-note:before{content:"\f249"}.fa-sticky-note-o:before{content:"\f24a"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-diners-club:before{content:"\f24c"}.fa-clone:before{content:"\f24d"}.fa-balance-scale:before{content:"\f24e"}.fa-hourglass-o:before{content:"\f250"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-hourglass:before{content:"\f254"}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:"\f255"}.fa-hand-paper-o:before,.fa-hand-stop-o:before{content:"\f256"}.fa-hand-scissors-o:before{content:"\f257"}.fa-hand-lizard-o:before{content:"\f258"}.fa-hand-spock-o:before{content:"\f259"}.fa-hand-pointer-o:before{content:"\f25a"}.fa-hand-peace-o:before{content:"\f25b"}.fa-trademark:before{content:"\f25c"}.fa-registered:before{content:"\f25d"}.fa-creative-commons:before{content:"\f25e"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-tripadvisor:before{content:"\f262"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-get-pocket:before{content:"\f265"}.fa-wikipedia-w:before{content:"\f266"}.fa-safari:before{content:"\f267"}.fa-chrome:before{content:"\f268"}.fa-firefox:before{content:"\f269"}.fa-opera:before{content:"\f26a"}.fa-internet-explorer:before{content:"\f26b"}.fa-television:before,.fa-tv:before{content:"\f26c"}.fa-contao:before{content:"\f26d"}.fa-500px:before{content:"\f26e"}.fa-amazon:before{content:"\f270"}.fa-calendar-plus-o:before{content:"\f271"}.fa-calendar-minus-o:before{content:"\f272"}.fa-calendar-times-o:before{content:"\f273"}.fa-calendar-check-o:before{content:"\f274"}.fa-industry:before{content:"\f275"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-map-o:before{content:"\f278"}.fa-map:before{content:"\f279"}.fa-commenting:before{content:"\f27a"}.fa-commenting-o:before{content:"\f27b"}.fa-houzz:before{content:"\f27c"}.fa-vimeo:before{content:"\f27d"}.fa-black-tie:before{content:"\f27e"}.fa-fonticons:before{content:"\f280"}.fa-reddit-alien:before{content:"\f281"}.fa-edge:before{content:"\f282"}.fa-credit-card-alt:before{content:"\f283"}.fa-codiepie:before{content:"\f284"}.fa-modx:before{content:"\f285"}.fa-fort-awesome:before{content:"\f286"}.fa-usb:before{content:"\f287"}.fa-product-hunt:before{content:"\f288"}.fa-mixcloud:before{content:"\f289"}.fa-scribd:before{content:"\f28a"}.fa-pause-circle:before{content:"\f28b"}.fa-pause-circle-o:before{content:"\f28c"}.fa-stop-circle:before{content:"\f28d"}.fa-stop-circle-o:before{content:"\f28e"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-hashtag:before{content:"\f292"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-percent:before{content:"\f295"}.fa-gitlab:before{content:"\f296"}.fa-wpbeginner:before{content:"\f297"}.fa-wpforms:before{content:"\f298"}.fa-envira:before{content:"\f299"}.fa-universal-access:before{content:"\f29a"}.fa-wheelchair-alt:before{content:"\f29b"}.fa-question-circle-o:before{content:"\f29c"}.fa-blind:before{content:"\f29d"}.fa-audio-description:before{content:"\f29e"}.fa-volume-control-phone:before{content:"\f2a0"}.fa-braille:before{content:"\f2a1"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before{content:"\f2a3"}.fa-deaf:before,.fa-deafness:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-low-vision:before{content:"\f2a8"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-pied-piper:before{content:"\f2ae"}.fa-first-order:before{content:"\f2b0"}.fa-yoast:before{content:"\f2b1"}.fa-themeisle:before{content:"\f2b2"}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:"\f2b3"}.fa-fa:before,.fa-font-awesome:before{content:"\f2b4"}.fa-handshake-o:before{content:"\f2b5"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-o:before{content:"\f2b7"}.fa-linode:before{content:"\f2b8"}.fa-address-book:before{content:"\f2b9"}.fa-address-book-o:before{content:"\f2ba"}.fa-address-card:before,.fa-vcard:before{content:"\f2bb"}.fa-address-card-o:before,.fa-vcard-o:before{content:"\f2bc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-circle-o:before{content:"\f2be"}.fa-user-o:before{content:"\f2c0"}.fa-id-badge:before{content:"\f2c1"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-drivers-license-o:before,.fa-id-card-o:before{content:"\f2c3"}.fa-quora:before{content:"\f2c4"}.fa-free-code-camp:before{content:"\f2c5"}.fa-telegram:before{content:"\f2c6"}.fa-thermometer-4:before,.fa-thermometer-full:before,.fa-thermometer:before{content:"\f2c7"}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-shower:before{content:"\f2cc"}.fa-bath:before,.fa-bathtub:before,.fa-s15:before{content:"\f2cd"}.fa-podcast:before{content:"\f2ce"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-times-rectangle:before,.fa-window-close:before{content:"\f2d3"}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:"\f2d4"}.fa-bandcamp:before{content:"\f2d5"}.fa-grav:before{content:"\f2d6"}.fa-etsy:before{content:"\f2d7"}.fa-imdb:before{content:"\f2d8"}.fa-ravelry:before{content:"\f2d9"}.fa-eercast:before{content:"\f2da"}.fa-microchip:before{content:"\f2db"}.fa-snowflake-o:before{content:"\f2dc"}.fa-superpowers:before{content:"\f2dd"}.fa-wpexplorer:before{content:"\f2de"}.fa-meetup:before{content:"\f2e0"}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.text-overflow-pf{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;word-wrap:normal}.alert{border-width:1px;padding-left:47px;padding-right:14px;position:relative;word-wrap:break-word}.alert .alert-link{color:#0088ce}.alert .alert-link:hover{color:#00659c}.alert>.btn.pull-right{margin-top:-3px}.alert>.pficon{font-size:22px;position:absolute;left:13px;top:10px}.alert .close{opacity:.85}.alert .close:focus,.alert .close:hover{opacity:1}.alert .pficon-info{color:#4d5258}.alert-dismissable{padding-right:28px}.alert-dismissable .close{right:-13px;top:1px}.badge{margin-left:6px}.nav-pills>li>a>.badge{margin-left:6px}.breadcrumb{padding-left:0}.breadcrumb>.active strong{font-weight:600}.breadcrumb>li{display:inline}.breadcrumb>li+li:before{color:#9c9c9c;content:"\f105";font-family:FontAwesome;font-size:11px;padding:0 9px 0 7px}.btn{box-shadow:0 2px 3px rgba(3,3,3,.1)}.btn:active{box-shadow:inset 0 2px 8px rgba(3,3,3,.2)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{background-color:#fafafa!important;background-image:none!important;border-color:#d1d1d1!important;color:#8b8d8f!important;opacity:1}.btn.disabled:active,.btn[disabled]:active,fieldset[disabled] .btn:active{box-shadow:none}.btn.disabled.btn-link,.btn[disabled].btn-link,fieldset[disabled] .btn.btn-link{background-color:transparent!important;border:0}.btn-danger{background-color:#a30000;background-image:linear-gradient(to bottom,#c00 0,#a30000 100%);background-repeat:repeat-x;border-color:#8b0000;color:#fff}.btn-danger.active,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open .dropdown-toggle.btn-danger{background-color:#a30000;background-image:none;border-color:#8b0000;color:#fff}.btn-danger.active,.btn-danger:active,.open .dropdown-toggle.btn-danger{background-image:none}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open .dropdown-toggle.btn-danger.focus,.open .dropdown-toggle.btn-danger:focus,.open .dropdown-toggle.btn-danger:hover{background-color:#8a0000;border-color:#670000}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#a30000;border-color:#8b0000}.btn-default{background-color:#f1f1f1;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;border-color:#bbb;color:#4d5258}.btn-default.active,.btn-default:active,.btn-default:focus,.btn-default:hover,.open .dropdown-toggle.btn-default{background-color:#f1f1f1;background-image:none;border-color:#bbb;color:#4d5258}.btn-default.active,.btn-default:active,.open .dropdown-toggle.btn-default{background-image:none}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open .dropdown-toggle.btn-default.focus,.open .dropdown-toggle.btn-default:focus,.open .dropdown-toggle.btn-default:hover{background-color:#e5e5e5;border-color:#a9a9a9}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#f1f1f1;border-color:#bbb}.btn-link,.btn-link:active{box-shadow:none}.btn-primary{background-color:#0088ce;background-image:linear-gradient(to bottom,#39a5dc 0,#0088ce 100%);background-repeat:repeat-x;border-color:#00659c;color:#fff}.btn-primary.active,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open .dropdown-toggle.btn-primary{background-color:#0088ce;background-image:none;border-color:#00659c;color:#fff}.btn-primary.active,.btn-primary:active,.open .dropdown-toggle.btn-primary{background-image:none}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open .dropdown-toggle.btn-primary.focus,.open .dropdown-toggle.btn-primary:focus,.open .dropdown-toggle.btn-primary:hover{background-color:#0077b5;border-color:#004e78}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#0088ce;border-color:#00659c}.btn-group-xs .btn,.btn-group-xs>.btn,.btn-xs{font-weight:400}.caret{font-family:FontAwesome;font-weight:400;height:9px;position:relative;vertical-align:baseline;width:12px}.caret:before{bottom:0;content:"\f107";left:0;line-height:12px;position:absolute;text-align:center;top:-1px;right:0}.dropup .caret:before{content:"\f106"}.dropdown-toggle:focus{outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.dropdown-menu .divider{background-color:#ededed;height:1px;margin:4px 1px;overflow:hidden}.dropdown-menu>li>a{border-color:transparent;border-style:solid;border-width:1px 0;padding:1px 10px}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{border-color:#bee1f4}.dropdown-menu>li>a:active{background-color:#0088ce;border-color:#0088ce;color:#fff!important}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{background-color:#0088ce!important;border-color:#0088ce!important}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{border-color:transparent}.dropdown-menu>.selected>a{background-color:#0088ce;border-color:#0088ce;color:#fff}.dropdown-menu>.selected>a small{color:rgba(255,255,255,.5)}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{border-color:transparent}.dropdown-header{padding-left:10px;padding-right:10px;text-transform:uppercase}.btn-group>.dropdown-menu,.dropdown>.dropdown-menu,.input-group-btn>.dropdown-menu{margin-top:-1px}.dropup .dropdown-menu{margin-bottom:-1px}.dropdown-submenu{position:relative}.dropdown-submenu:hover>a{background-color:#def3ff;border-color:#bee1f4}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu.pull-left{float:none!important}.dropdown-submenu.pull-left>.dropdown-menu{left:auto;margin-left:10px;right:100%}.dropdown-submenu>a{padding-right:20px!important}.dropdown-submenu>a:after{content:"\f105";font-family:FontAwesome;display:block;position:absolute;right:10px;top:2px}.dropdown-submenu>.dropdown-menu{left:100%;margin-top:0;top:-6px}.dropup .dropdown-submenu>.dropdown-menu{bottom:-5px;top:auto}.open .dropdown-submenu.active>.dropdown-menu{display:block}.dropdown-kebab-pf .btn-link,.dropdown-kebab-pf.btn-group>.btn:first-child{color:#252525;font-size:16px;line-height:1;padding:4px 10px;margin-left:-10px;margin-right:-10px}.dropdown-kebab-pf .btn-link:active,.dropdown-kebab-pf .btn-link:focus,.dropdown-kebab-pf .btn-link:hover,.dropdown-kebab-pf.btn-group>.btn:first-child:active,.dropdown-kebab-pf.btn-group>.btn:first-child:focus,.dropdown-kebab-pf.btn-group>.btn:first-child:hover{color:#0088ce}.dropdown-kebab-pf.btn-group{margin-left:10px}.dropdown-kebab-pf .dropdown-menu{left:-15px;margin-top:11px}.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right{left:auto;right:-15px}.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right:after,.dropdown-kebab-pf .dropdown-menu.dropdown-menu-right:before{left:auto;right:6px}.dropdown-kebab-pf .dropdown-menu:after,.dropdown-kebab-pf .dropdown-menu:before{border-bottom-color:#bbb;border-bottom-style:solid;border-bottom-width:10px;border-left:10px solid transparent;border-right:10px solid transparent;content:"";display:inline-block;left:6px;position:absolute;top:-11px}.dropdown-kebab-pf .dropdown-menu:after{border-bottom-color:#fff;top:-10px}.dropdown-kebab-pf.dropup .dropdown-menu{margin-bottom:11px;margin-top:0}.dropdown-kebab-pf.dropup .dropdown-menu:after,.dropdown-kebab-pf.dropup .dropdown-menu:before{border-bottom:none;border-top-color:#bbb;border-top-style:solid;border-top-width:10px;bottom:-11px;top:auto}.dropdown-kebab-pf.dropup .dropdown-menu:after{border-top-color:#fff;bottom:-10px}.form-horizontal-pf-align-left .control-label{text-align:left}@media (min-width:768px){.form-horizontal-pf-align-left.required-pf .control-label:not(.required-pf){padding-left:30px}}.chars-remaining-pf span{font-weight:600;padding-right:5px}.chars-warn-remaining-pf{color:#c00}.fields-status-pf{color:#8b8d8f;margin-bottom:15px}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{box-shadow:none;color:#8b8d8f}.form-control[disabled]:hover,.form-control[readonly]:hover,fieldset[disabled] .form-control:hover{border-color:#bbb}.form-control:hover{border-color:#7dc3e8}.has-error .form-control:hover{border-color:#900}.has-success .form-control:hover{border-color:#2b542c}.has-warning .form-control:hover{border-color:#bb6106}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label,.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label,.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#363636}.help-block{margin-bottom:0}.input-group .input-group-btn .btn{box-shadow:none}label{font-weight:600}label.required-pf:before{color:#c00;content:"*";margin-right:3px}span.required-pf{color:#c00}.fields-section-pf{border-color:#ededed;border-style:solid;border-width:1px 0 0;margin-top:25px;padding:15px 0 0}.fields-section-header-pf{border:none;font-size:12px;margin:0;padding-right:10px;width:auto}.fields-section-header-pf .fa-angle-right{cursor:pointer;font-size:14px;width:14px}.form-control-pf-editable{display:-ms-flexbox;display:flex}.form-control-pf-editable.form-control-pf-full-width{display:block}.form-control-pf-editable.form-control-pf-full-width>.form-control-pf-value{text-align:left}.form-control-pf-editable.form-control-pf-full-width .action-buttons{float:right}.form-control-pf-editable.form-control-pf-edit>.form-control-pf-value{display:none}.form-control-pf-editable.form-control-pf-edit>.bootstrap-select.btn-group:not(.input-group-btn),.form-control-pf-editable.form-control-pf-edit>:not(.form-control-pf-value):not(.spinner){display:inline-block}.form-control-pf-editable.form-control-pf-updating>.spinner{display:inline-block}.form-control-pf-editable.form-control-pf-updating>:not(.spinner){display:none}.form-control-pf-editable>.form-control-pf-value{background:0 0;border:1px solid transparent;display:inline-block;padding:2px 6px}.form-control-pf-editable>.form-control-pf-value:focus{border-color:#bbb}.form-control-pf-editable>.form-control-pf-value:hover{border-color:#bbb;cursor:pointer}.form-control-pf-editable>.form-control-pf-value+:not(textarea){-ms-flex:1;flex:1}.form-control-pf-editable>.form-control-pf-value i{margin-left:6px}.form-control-pf-editable>:not(.form-control-pf-value){display:none}.form-control-pf-editable>.form-control-pf-textbox{position:relative}.form-control-pf-editable>.form-control-pf-textbox input{padding-right:26px}.form-control-pf-editable>.form-control-pf-textbox .form-control-pf-empty{background:0 0;border:none;color:#bbb;height:100%;position:absolute;right:0;top:0}.form-control-pf-editable>.btn{margin-left:3px}.form-control-pf-editable>.spinner{margin:4px 0}.form-control-pf-editable>.bootstrap-select.btn-group:not(.input-group-btn){display:none}.form-control-pf-editable>textarea{display:block;min-height:84px;resize:vertical}.label{border-radius:0;font-size:100%;font-weight:600}h1 .label,h2 .label,h3 .label,h4 .label,h5 .label,h6 .label{font-size:75%}.list-group{border-top:1px solid #ededed}.list-group .list-group-item:first-child{border-top:0}.list-group-item{border-left:0;border-right:0}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#fafafa}.list-group-item-heading{font-weight:600}.modal-header{background-color:#f5f5f5;border-bottom:none;padding:10px 18px}.modal-header .close{margin-top:2px}.modal-title{font-size:13px;font-weight:700}.modal-footer{border-top:none;margin-top:15px;padding:14px 15px 15px}.modal-footer>.btn{padding-left:10px;padding-right:10px}.modal-footer>.btn>.fa-angle-left{margin-right:5px}.modal-footer>.btn>.fa-angle-right{margin-left:5px}.message-dialog-pf .modal-body{display:-ms-flexbox;display:flex}.message-dialog-pf .modal-body .fa,.message-dialog-pf .modal-body .fab,.message-dialog-pf .modal-body .fal,.message-dialog-pf .modal-body .far,.message-dialog-pf .modal-body .fas,.message-dialog-pf .modal-body .pficon{font-size:30px;margin-right:15px}.pager li>a,.pager li>span{background-color:#f1f1f1;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;border-color:#bbb;color:#4d5258;font-weight:600;line-height:22px;padding:2px 14px}.open .dropdown-toggle.pager li>a,.open .dropdown-toggle.pager li>span,.pager li>a.active,.pager li>a:active,.pager li>a:focus,.pager li>a:hover,.pager li>span.active,.pager li>span:active,.pager li>span:focus,.pager li>span:hover{background-color:#f1f1f1;background-image:none;border-color:#bbb;color:#4d5258}.open .dropdown-toggle.pager li>a,.open .dropdown-toggle.pager li>span,.pager li>a.active,.pager li>a:active,.pager li>span.active,.pager li>span:active{background-image:none}.open .dropdown-toggle.pager li>a.focus,.open .dropdown-toggle.pager li>a:focus,.open .dropdown-toggle.pager li>a:hover,.open .dropdown-toggle.pager li>span.focus,.open .dropdown-toggle.pager li>span:focus,.open .dropdown-toggle.pager li>span:hover,.pager li>a.active.focus,.pager li>a.active:focus,.pager li>a.active:hover,.pager li>a:active.focus,.pager li>a:active:focus,.pager li>a:active:hover,.pager li>span.active.focus,.pager li>span.active:focus,.pager li>span.active:hover,.pager li>span:active.focus,.pager li>span:active:focus,.pager li>span:active:hover{background-color:#e5e5e5;border-color:#a9a9a9}.pager li>a.disabled,.pager li>a.disabled.active,.pager li>a.disabled:active,.pager li>a.disabled:focus,.pager li>a.disabled:hover,.pager li>a[disabled],.pager li>a[disabled].active,.pager li>a[disabled]:active,.pager li>a[disabled]:focus,.pager li>a[disabled]:hover,.pager li>span.disabled,.pager li>span.disabled.active,.pager li>span.disabled:active,.pager li>span.disabled:focus,.pager li>span.disabled:hover,.pager li>span[disabled],.pager li>span[disabled].active,.pager li>span[disabled]:active,.pager li>span[disabled]:focus,.pager li>span[disabled]:hover,fieldset[disabled] .pager li>a,fieldset[disabled] .pager li>a.active,fieldset[disabled] .pager li>a:active,fieldset[disabled] .pager li>a:focus,fieldset[disabled] .pager li>a:hover,fieldset[disabled] .pager li>span,fieldset[disabled] .pager li>span.active,fieldset[disabled] .pager li>span:active,fieldset[disabled] .pager li>span:focus,fieldset[disabled] .pager li>span:hover{background-color:#f1f1f1;border-color:#bbb}.pager li>a>.i,.pager li>span>.i{font-size:18px;vertical-align:top;margin:2px 0}.pager li a:active{background-image:none;box-shadow:inset 0 3px 5px rgba(3,3,3,.125);outline:0}.pager .disabled>a,.pager .disabled>a:active,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{background:#f5f5f5;box-shadow:none;color:#8b8d8f;cursor:not-allowed}.pager .next>a>.i,.pager .next>span>.i{margin-left:5px}.pager .previous>a>.i,.pager .previous>span>.i{margin-right:5px}.pager-sm li>a,.pager-sm li>span{font-weight:400;line-height:16px;padding:1px 10px}.pager-sm li>a>.i,.pager-sm li>span>.i{font-size:12px}.pagination>li>a,.pagination>li>span{background-color:#f1f1f1;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x;border-color:#bbb;color:#4d5258;cursor:default;font-weight:600;padding:2px 10px}.open .dropdown-toggle.pagination>li>a,.open .dropdown-toggle.pagination>li>span,.pagination>li>a.active,.pagination>li>a:active,.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span.active,.pagination>li>span:active,.pagination>li>span:focus,.pagination>li>span:hover{background-color:#f1f1f1;background-image:none;border-color:#bbb;color:#4d5258}.open .dropdown-toggle.pagination>li>a,.open .dropdown-toggle.pagination>li>span,.pagination>li>a.active,.pagination>li>a:active,.pagination>li>span.active,.pagination>li>span:active{background-image:none}.open .dropdown-toggle.pagination>li>a.focus,.open .dropdown-toggle.pagination>li>a:focus,.open .dropdown-toggle.pagination>li>a:hover,.open .dropdown-toggle.pagination>li>span.focus,.open .dropdown-toggle.pagination>li>span:focus,.open .dropdown-toggle.pagination>li>span:hover,.pagination>li>a.active.focus,.pagination>li>a.active:focus,.pagination>li>a.active:hover,.pagination>li>a:active.focus,.pagination>li>a:active:focus,.pagination>li>a:active:hover,.pagination>li>span.active.focus,.pagination>li>span.active:focus,.pagination>li>span.active:hover,.pagination>li>span:active.focus,.pagination>li>span:active:focus,.pagination>li>span:active:hover{background-color:#e5e5e5;border-color:#a9a9a9}.pagination>li>a.disabled,.pagination>li>a.disabled.active,.pagination>li>a.disabled:active,.pagination>li>a.disabled:focus,.pagination>li>a.disabled:hover,.pagination>li>a[disabled],.pagination>li>a[disabled].active,.pagination>li>a[disabled]:active,.pagination>li>a[disabled]:focus,.pagination>li>a[disabled]:hover,.pagination>li>span.disabled,.pagination>li>span.disabled.active,.pagination>li>span.disabled:active,.pagination>li>span.disabled:focus,.pagination>li>span.disabled:hover,.pagination>li>span[disabled],.pagination>li>span[disabled].active,.pagination>li>span[disabled]:active,.pagination>li>span[disabled]:focus,.pagination>li>span[disabled]:hover,fieldset[disabled] .pagination>li>a,fieldset[disabled] .pagination>li>a.active,fieldset[disabled] .pagination>li>a:active,fieldset[disabled] .pagination>li>a:focus,fieldset[disabled] .pagination>li>a:hover,fieldset[disabled] .pagination>li>span,fieldset[disabled] .pagination>li>span.active,fieldset[disabled] .pagination>li>span:active,fieldset[disabled] .pagination>li>span:focus,fieldset[disabled] .pagination>li>span:hover{background-color:#f1f1f1;border-color:#bbb}.pagination>li>a>.i,.pagination>li>span>.i{font-size:15px;vertical-align:top;margin:2px 0}.pagination>li>a:active,.pagination>li>span:active{box-shadow:inset 0 2px 8px rgba(3,3,3,.2)}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{background-color:#f1f1f1;border-color:#bbb;box-shadow:inset 0 2px 8px rgba(3,3,3,.2);color:#4d5258;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{box-shadow:none;cursor:not-allowed;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x}.pagination-sm>li>a,.pagination-sm>li>span{padding:2px 6px;font-size:11px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-top-left-radius:1px;border-bottom-left-radius:1px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-top-right-radius:1px;border-bottom-right-radius:1px}.pagination-sm>li>a,.pagination-sm>li>span{font-weight:400}.pagination-sm>li>a>.i,.pagination-sm>li>span>.i{font-size:12px;margin-top:2px}.content-view-pf-pagination{background-color:#f5f5f5;border:1px solid #d1d1d1;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:justify;justify-content:space-between}.content-view-pf-pagination.table-view-pf-pagination{border-top:none}.content-view-pf-pagination .form-group{-ms-flex-align:baseline;align-items:baseline;display:-ms-flexbox;display:flex;-ms-flex-positive:1;flex-grow:1;float:left;margin:5px}@supports (display:flex){.content-view-pf-pagination .form-group{float:none}}.content-view-pf-pagination .form-group:last-child{-ms-flex-pack:end;justify-content:flex-end;float:right}@supports (display:flex){.content-view-pf-pagination .form-group:last-child{float:none}}.content-view-pf-pagination .form-group .pagination-pf-pagesize.bootstrap-select.btn-group,.content-view-pf-pagination .form-group .pagination-pf-pagesize.btn-group{display:-ms-flexbox;display:flex;float:none;margin-bottom:0;margin-left:0;margin-right:5px;width:auto}.content-view-pf-pagination .form-group .dropdown-menu{min-width:auto}.content-view-pf-pagination .pagination-pf-page{margin-left:10px;margin-right:5px;padding:0 2px 2px;text-align:right;width:2.5em}.content-view-pf-pagination .pagination{display:-ms-flexbox;display:flex;margin:0 0 0 10px}.content-view-pf-pagination .pagination a{float:none}@supports (display:flex){.content-view-pf-pagination .pagination a{display:block}}.panel-title{font-weight:700}.panel-group .panel{color:#4d5258}.panel-group .panel+.panel{margin-top:-1px}.panel-group .panel-default{border-color:#bbb;border-top-color:#bbb}.panel-group .panel-default .panel-heading{background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x}.panel-group .panel-default .panel-heading+.panel-collapse .panel-body{border-top:1px solid #d1d1d1}.panel-group .panel-info{border-color:#00659c}.panel-group .panel-info .panel-heading{background-color:#dae5f4}.panel-group .panel-info+.panel-default{border-top-color:#00659c}.panel-group .panel-primary{border-color:#39a5dc}.panel-group .panel-primary .panel-heading{background-color:#def0f9}.panel-group .panel-primary+.panel-default{border-top-color:#39a5dc}.panel-group .panel-primary+.panel-info{border-top-color:#39a5dc}.panel-group .panel-success{border-color:#3f9c35}.panel-group .panel-success .panel-heading{background-color:#e9f4e9}.panel-group .panel-success+.panel-default{border-top-color:#3f9c35}.panel-group .panel-success+.panel-info{border-top-color:#3f9c35}.panel-group .panel-success+.panel-primary{border-top-color:#3f9c35}.panel-group .panel-warning{border-color:#ec7a08}.panel-group .panel-warning .panel-heading{background-color:#fdf2e5}.panel-group .panel-warning+.panel-default{border-top-color:#ec7a08}.panel-group .panel-warning+.panel-info{border-top-color:#ec7a08}.panel-group .panel-warning+.panel-primary{border-top-color:#ec7a08}.panel-group .panel-warning+.panel-success{border-top-color:#ec7a08}.panel-group .panel-danger{border-color:#c00}.panel-group .panel-danger .panel-heading{background-color:#ffe6e6}.panel-group .panel-danger+.panel-default{border-top-color:#c00}.panel-group .panel-danger+.panel-info{border-top-color:#c00}.panel-group .panel-danger+.panel-primary{border-top-color:#c00}.panel-group .panel-danger+.panel-success{border-top-color:#c00}.panel-group .panel-danger+.panel-warning{border-top-color:#c00}.panel-group .panel-title{font-weight:500;line-height:1}.panel-group .panel-title>a{color:#4d5258;font-weight:600}.panel-group .panel-title>a:before{content:"\f107";display:inline-block;font-family:FontAwesome;font-size:13px;margin-right:5px;text-align:center;vertical-align:0;width:8px}.panel-group .panel-title>a:focus{outline:0;text-decoration:none}.panel-group .panel-title>a:hover{text-decoration:none}.panel-group .panel-title>a.collapsed:before{content:"\f105"}.popover{box-shadow:0 2px 2px rgba(3,3,3,.08);padding:0}.popover.bottom .popover-title:before{content:"";position:absolute;top:-20px;left:50%;-ms-transform:translateX(-50%);transform:translateX(-50%);border-top-width:0;border-width:10px;border-color:transparent;border-bottom-color:#f5f5f5;border-style:solid}.popover-content{color:#4d5258;line-height:18px;padding:10px 14px}.popover-title{border-bottom:none;border-radius:0;color:#4d5258;font-size:13px;font-weight:700;min-height:34px}.popover-title .close{height:22px;position:absolute;right:8px;top:6px}.popover-title.closable{padding-right:30px}.popover-pf-info{color:#292e34}.popover-pf-info:active,.popover-pf-info:hover{color:#00659c}@keyframes progress-bar-stripes{from{background-position:0 0}to{background-position:40px 0}}.progress{box-shadow:inset 0 0 1px rgba(3,3,3,.25)}.progress.progress-label-left,.progress.progress-label-top-right{overflow:visible;position:relative}.progress.progress-label-left{margin-left:40px}.progress.progress-sm{height:14px;margin-bottom:14px}.progress.progress-xs{height:6px;margin-bottom:6px}td>.progress:first-child:last-child{margin-bottom:0;margin-top:3px}.progress-bar{box-shadow:none}.progress-label-left .progress-bar span,.progress-label-right .progress-bar span,.progress-label-top-right .progress-bar span{color:#363636;position:absolute;text-align:right}.progress-label-left .progress-bar span{font-size:14px;left:-40px;top:0;width:35px}.progress-label-right .progress-bar span,.progress-label-top-right .progress-bar span{font-size:11px;overflow:hidden;right:0;text-overflow:ellipsis;white-space:nowrap}.progress-label-right .progress-bar span strong,.progress-label-top-right .progress-bar span strong{font-weight:600}.progress-label-right .progress-bar span{max-width:85px;top:0}.progress-label-top-right .progress-bar span{max-width:47%;top:-30px}.progress-label-left.progress-sm .progress-bar span,.progress-label-top-right.progress-sm .progress-bar span{font-size:12px}.progress-sm .progress-bar{line-height:14px}.progress-xs .progress-bar{line-height:6px}.progress-bar-remaining{background:0 0}.progress-container{position:relative}.progress-container.progress-description-left{padding-left:90px}.progress-container.progress-label-right{padding-right:90px}.progress-description{margin-bottom:10px;max-width:52%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.progress-description .count{font-size:20.004px;font-weight:300;line-height:1;margin-right:5px}.progress-description .fa,.progress-description .fab,.progress-description .fal,.progress-description .far,.progress-description .fas,.progress-description .pficon{font-size:14px;margin-right:3px}.progress-description-left .progress-description{left:0;margin-bottom:0;max-width:85px;position:absolute;top:0}.progress-description .tooltip{white-space:normal}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:2px 10px 3px}.table>tbody>tr>td>a:hover,.table>tbody>tr>th>a:hover,.table>tfoot>tr>td>a:hover,.table>tfoot>tr>th>a:hover,.table>thead>tr>td>a:hover,.table>thead>tr>th>a:hover{text-decoration:none}.table>tbody>tr>th,.table>tfoot>tr>th,.table>thead>tr>th{font-family:"Open Sans";font-style:normal;font-weight:600}.table>thead{background-clip:padding-box;background-color:#f5f5f5;background-image:linear-gradient(to bottom,#fafafa 0,#ededed 100%);background-repeat:repeat-x}.table-bordered{border:1px solid #d1d1d1}.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #d1d1d1}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:1px}.table-striped>tbody>tr:nth-of-type(even){background-color:#f5f5f5}.table-striped>tbody>tr:nth-of-type(odd){background-color:transparent}.table-hover>tbody>tr:hover>td,.table-hover>tbody>tr:hover>th{background-color:#def3ff;border-bottom-color:#7dc3e8}.table-treegrid span.indent{margin-left:10px;margin-right:10px}.table-treegrid span.icon{display:inline-block;font-size:13px;margin-right:5px;min-width:10px;text-align:center}.table-treegrid span.collapse-icon,.table-treegrid span.expand-icon{cursor:pointer}.table-treegrid>tbody>tr.odd{background-color:#f5f5f5}.nav-tabs{font-size:14px}.nav-tabs>li>a{color:#4d5258;margin-right:-1px;padding-bottom:5px;padding-top:5px}.nav-tabs>li>a:active,.nav-tabs>li>a:focus,.nav-tabs>li>a:hover{background:0 0;border-color:#ededed;color:#252525}.nav-tabs>li>.dropdown-menu{border-top:0;border-color:#ededed}.nav-tabs>li>.dropdown-menu.pull-right{right:-1px}.nav-tabs+.nav-tabs-pf,.nav-tabs.nav-tabs-pf-secondary{font-size:12px}.nav-tabs+.nav-tabs-pf>li:first-child>a,.nav-tabs.nav-tabs-pf-secondary>li:first-child>a{padding-left:15px}.nav-tabs+.nav-tabs-pf>li:first-child>a:before,.nav-tabs.nav-tabs-pf-secondary>li:first-child>a:before{left:15px!important}.nav-tabs .open>a,.nav-tabs .open>a:focus,.nav-tabs .open>a:hover{background-color:transparent;border-color:#ededed}@media (min-width:768px){.nav-tabs-pf.nav-justified{border-bottom:1px solid #ededed}}.nav-tabs-pf.nav-justified>li:first-child>a{padding-left:15px}.nav-tabs-pf.nav-justified>li>a{border-bottom:0}.nav-tabs-pf.nav-justified>li>a:before{left:0!important;right:0!important}.nav-tabs-pf>li{margin-bottom:0}.nav-tabs-pf>li.active>a:before{background:#0088ce;bottom:-1px;content:"";display:block;height:2px;left:15px;position:absolute;right:15px}.nav-tabs-pf>li.active>a,.nav-tabs-pf>li.active>a:active,.nav-tabs-pf>li.active>a:focus,.nav-tabs-pf>li.active>a:hover{background-color:transparent;border:0!important;color:#0088ce}.nav-tabs-pf>li.active>a:active:before,.nav-tabs-pf>li.active>a:before,.nav-tabs-pf>li.active>a:focus:before,.nav-tabs-pf>li.active>a:hover:before{background:#0088ce}.nav-tabs-pf>li:first-child>a{padding-left:0}.nav-tabs-pf>li:first-child>a:before{left:0!important}.nav-tabs-pf>li>a{border:0;line-height:1;margin-right:0;padding-bottom:10px;padding-top:10px}.nav-tabs-pf>li>a:active:before,.nav-tabs-pf>li>a:focus:before,.nav-tabs-pf>li>a:hover:before{background:#bbb;bottom:-1px;content:"";display:block;height:2px;left:15px;position:absolute;right:15px}.nav-tabs-pf>li>.dropdown-menu{left:15px;margin-top:1px}.nav-tabs-pf>li>.dropdown-menu.pull-right{left:auto;right:15px}.nav-tabs-pf .open>a,.nav-tabs-pf .open>a:focus,.nav-tabs-pf .open>a:hover{background-color:transparent}.tooltip{font-size:12px;line-height:1.4}.tooltip-inner{padding:7px 12px;text-align:left}.h1,.h2,h1,h2{font-weight:300}.page-header .actions{margin-top:8px}.page-header .actions a>.pficon{margin-right:4px}@media (min-width:767px){.page-header-bleed-left{margin-left:-20px}.page-header-bleed-right{margin-right:-20px}.page-header-bleed-right .actions{margin-right:20px}} \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Bold-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Bold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-BoldItalic-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-BoldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBold-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-ExtraBoldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Italic-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Italic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Light-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Light-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-LightItalic-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-LightItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Regular-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Regular-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-Semibold-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-Semibold-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/OpenSans-SemiboldItalic-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf similarity index 96% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf index cc9c5da9..3ad9eebe 100644 Binary files a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.ttf and b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.ttf differ diff --git a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff similarity index 96% rename from keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff index f33ebc71..f019b7f8 100644 Binary files a/keycloak-resources/resources/resources_common/node_modules/rcue/dist/fonts/PatternFlyIcons-webfont.woff and b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/PatternFlyIcons-webfont.woff differ diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/fontawesome-webfont.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.ttf b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.ttf similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.ttf rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.ttf diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.woff b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.woff rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.woff2 b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff2 similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/bootstrap/fonts/glyphicons-halflings-regular.woff2 rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/fonts/glyphicons-halflings-regular.woff2 diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/Logo_Horizontal_Reversed.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/Logo_Horizontal_Reversed.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/Logo_Horizontal_Reversed.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/Logo_Horizontal_Reversed.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-Logo-NoText.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-Logo-NoText.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-Logo-NoText.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-Logo-NoText.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-Logo-Text.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-Logo-Text.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-Logo-Text.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-Logo-Text.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/OpenShift-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/OpenShift-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_Atomic-Logo-NoText.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_Atomic-Logo-NoText.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_Atomic-Logo-NoText.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_Atomic-Logo-NoText.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_Atomic-Logo-Text.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_Atomic-Logo-Text.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_Atomic-Logo-Text.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_Atomic-Logo-Text.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_atomic.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_atomic.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/RH_atomic.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/RH_atomic.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-114.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-114.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-114.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-114.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-144.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-144.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-144.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-144.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-152.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-152.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-152.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-152.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-180.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-180.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-180.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-180.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-57.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-57.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-57.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-57.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-72.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-72.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-72.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-72.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-76.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-76.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-76.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/apple-touch-icon-precomposed-76.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login-2.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login-2.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login-2.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login-2.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login.jpg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login.jpg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login.jpg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login.jpg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-login.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-login.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-modal-about-pf.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-modal-about-pf.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-modal-about-pf.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-modal-about-pf.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-navbar-pf-alt.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-navbar-pf-alt.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/bg-navbar-pf-alt.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/bg-navbar-pf-alt.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/brand-alt.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/brand-alt.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/brand-alt.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/brand-alt.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/brand.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/brand.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/brand.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/brand.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/dropbox-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/dropbox-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/dropbox-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/dropbox-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/facebook-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/facebook-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/facebook-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/facebook-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/favicon.ico b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/favicon.ico similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/favicon.ico rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/favicon.ico diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/fedora-logo.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/fedora-logo.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/fedora-logo.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/fedora-logo.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/git-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/git-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/git-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/git-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/github-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/github-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/github-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/github-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/gmail.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/gmail.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/gmail.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/gmail.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-calendar.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-calendar.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-calendar.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-calendar.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-drive.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-drive.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-drive.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-drive.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/google-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/google-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/instagram-logo.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/instagram-logo.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/instagram-logo.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/instagram-logo.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/kubernetes-Logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/kubernetes-Logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/kubernetes-Logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/kubernetes-Logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/kubernetes.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/kubernetes.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/kubernetes.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/kubernetes.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/linkedin-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/linkedin-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/linkedin-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/linkedin-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/logo-alt.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/logo-alt.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/logo-alt.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/logo-alt.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/open-id-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/open-id-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/open-id-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/open-id-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/rcue-full.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/rcue-full.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/rcue-full.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/rcue-full.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/rcue.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/rcue.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/rcue.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/rcue.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/redhat_reverse.png b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/redhat_reverse.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/redhat_reverse.png rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/redhat_reverse.png diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/skype-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/skype-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/skype-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/skype-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-lg.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-lg.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-lg.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-lg.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-sm.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-sm.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-sm.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-sm.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-xs.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-xs.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse-xs.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse-xs.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-inverse.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-inverse.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-lg.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-lg.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-lg.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-lg.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-sm.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-sm.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-sm.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-sm.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-xs.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-xs.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner-xs.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner-xs.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner.gif b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/spinner.gif rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/spinner.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/stack-exchange-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/stack-exchange-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/stack-exchange-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/stack-exchange-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/twitter-logo.svg b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/twitter-logo.svg similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/dist/img/twitter-logo.svg rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/dist/img/twitter-logo.svg diff --git a/keycloak-resources/resources/resources_common/node_modules/patternfly/package.json b/keycloak-resources/login/resources/resources-common/node_modules/patternfly/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/patternfly/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/patternfly/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/LICENSE b/keycloak-resources/login/resources/resources-common/node_modules/safename/LICENSE similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/LICENSE rename to keycloak-resources/login/resources/resources-common/node_modules/safename/LICENSE diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/README.md b/keycloak-resources/login/resources/resources-common/node_modules/safename/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/safename/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/bower.json b/keycloak-resources/login/resources/resources-common/node_modules/safename/bower.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/bower.json rename to keycloak-resources/login/resources/resources-common/node_modules/safename/bower.json diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/docs/api.md b/keycloak-resources/login/resources/resources-common/node_modules/safename/docs/api.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/docs/api.md rename to keycloak-resources/login/resources/resources-common/node_modules/safename/docs/api.md diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/docs/createdocs.js b/keycloak-resources/login/resources/resources-common/node_modules/safename/docs/createdocs.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/docs/createdocs.js rename to keycloak-resources/login/resources/resources-common/node_modules/safename/docs/createdocs.js diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/docs/footer.md b/keycloak-resources/login/resources/resources-common/node_modules/safename/docs/footer.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/docs/footer.md rename to keycloak-resources/login/resources/resources-common/node_modules/safename/docs/footer.md diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/docs/readme.md b/keycloak-resources/login/resources/resources-common/node_modules/safename/docs/readme.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/docs/readme.md rename to keycloak-resources/login/resources/resources-common/node_modules/safename/docs/readme.md diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/package.json b/keycloak-resources/login/resources/resources-common/node_modules/safename/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/safename/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/safename.js b/keycloak-resources/login/resources/resources-common/node_modules/safename/safename.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/safename.js rename to keycloak-resources/login/resources/resources-common/node_modules/safename/safename.js diff --git a/keycloak-resources/resources/resources_common/node_modules/safename/test/safename-test.js b/keycloak-resources/login/resources/resources-common/node_modules/safename/test/safename-test.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/safename/test/safename-test.js rename to keycloak-resources/login/resources/resources-common/node_modules/safename/test/safename-test.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/LICENSE b/keycloak-resources/login/resources/resources-common/node_modules/select2/LICENSE similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/LICENSE rename to keycloak-resources/login/resources/resources-common/node_modules/select2/LICENSE diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/README.md b/keycloak-resources/login/resources/resources-common/node_modules/select2/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/select2/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/bower.json b/keycloak-resources/login/resources/resources-common/node_modules/select2/bower.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/bower.json rename to keycloak-resources/login/resources/resources-common/node_modules/select2/bower.json diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/component.json b/keycloak-resources/login/resources/resources-common/node_modules/select2/component.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/component.json rename to keycloak-resources/login/resources/resources-common/node_modules/select2/component.json diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/composer.json b/keycloak-resources/login/resources/resources-common/node_modules/select2/composer.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/composer.json rename to keycloak-resources/login/resources/resources-common/node_modules/select2/composer.json diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/package.json b/keycloak-resources/login/resources/resources-common/node_modules/select2/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/select2/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/release.sh b/keycloak-resources/login/resources/resources-common/node_modules/select2/release.sh similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/release.sh rename to keycloak-resources/login/resources/resources-common/node_modules/select2/release.sh diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2-bootstrap.css b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2-bootstrap.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2-bootstrap.css rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2-bootstrap.css diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2-spinner.gif b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2-spinner.gif similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2-spinner.gif rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2-spinner.gif diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2.css b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2.css rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2.css diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2.jquery.json b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2.jquery.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2.jquery.json rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2.jquery.json diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2.png b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2.png rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2.png diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ar.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ar.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ar.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ar.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_az.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_az.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_az.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_az.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_bg.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_bg.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_bg.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_bg.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ca.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ca.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ca.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ca.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_cs.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_cs.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_cs.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_cs.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_da.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_da.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_da.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_da.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_de.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_de.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_de.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_de.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_el.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_el.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_el.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_el.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_en.js.template b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_en.js.template similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_en.js.template rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_en.js.template diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_es.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_es.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_es.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_es.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_et.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_et.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_et.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_et.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_eu.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_eu.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_eu.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_eu.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fa.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fa.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fa.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fa.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fi.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fi.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fi.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fi.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fr.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fr.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_fr.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_fr.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_gl.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_gl.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_gl.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_gl.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_he.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_he.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_he.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_he.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_hr.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_hr.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_hr.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_hr.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_hu.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_hu.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_hu.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_hu.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_id.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_id.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_id.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_id.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_is.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_is.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_is.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_is.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_it.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_it.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_it.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_it.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ja.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ja.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ja.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ja.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ka.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ka.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ka.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ka.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ko.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ko.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ko.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ko.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_lt.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_lt.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_lt.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_lt.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_lv.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_lv.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_lv.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_lv.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_mk.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_mk.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_mk.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_mk.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ms.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ms.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ms.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ms.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_nl.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_nl.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_nl.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_nl.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_no.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_no.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_no.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_no.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pl.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pl.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pl.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pl.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pt-BR.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pt-BR.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pt-BR.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pt-BR.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pt-PT.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pt-PT.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_pt-PT.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_pt-PT.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ro.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ro.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ro.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ro.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_rs.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_rs.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_rs.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_rs.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ru.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ru.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ru.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ru.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_sk.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_sk.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_sk.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_sk.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_sv.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_sv.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_sv.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_sv.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_th.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_th.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_th.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_th.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_tr.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_tr.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_tr.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_tr.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ug-CN.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ug-CN.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_ug-CN.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_ug-CN.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_uk.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_uk.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_uk.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_uk.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_vi.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_vi.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_vi.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_vi.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_zh-CN.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_zh-CN.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_zh-CN.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_zh-CN.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_zh-TW.js b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_zh-TW.js similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2_locale_zh-TW.js rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2_locale_zh-TW.js diff --git a/keycloak-resources/resources/resources_common/node_modules/select2/select2x2.png b/keycloak-resources/login/resources/resources-common/node_modules/select2/select2x2.png similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/select2/select2x2.png rename to keycloak-resources/login/resources/resources-common/node_modules/select2/select2x2.png diff --git a/keycloak-resources/resources/resources_common/node_modules/text-security/LICENSE b/keycloak-resources/login/resources/resources-common/node_modules/text-security/LICENSE similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/text-security/LICENSE rename to keycloak-resources/login/resources/resources-common/node_modules/text-security/LICENSE diff --git a/keycloak-resources/resources/resources_common/node_modules/text-security/README.md b/keycloak-resources/login/resources/resources-common/node_modules/text-security/README.md similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/text-security/README.md rename to keycloak-resources/login/resources/resources-common/node_modules/text-security/README.md diff --git a/keycloak-resources/resources/resources_common/node_modules/text-security/package.json b/keycloak-resources/login/resources/resources-common/node_modules/text-security/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/text-security/package.json rename to keycloak-resources/login/resources/resources-common/node_modules/text-security/package.json diff --git a/keycloak-resources/resources/resources_common/node_modules/text-security/text-security-disc.woff b/keycloak-resources/login/resources/resources-common/node_modules/text-security/text-security-disc.woff similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/text-security/text-security-disc.woff rename to keycloak-resources/login/resources/resources-common/node_modules/text-security/text-security-disc.woff diff --git a/keycloak-resources/resources/resources_common/node_modules/text-security/text-security.css b/keycloak-resources/login/resources/resources-common/node_modules/text-security/text-security.css similarity index 100% rename from keycloak-resources/resources/resources_common/node_modules/text-security/text-security.css rename to keycloak-resources/login/resources/resources-common/node_modules/text-security/text-security.css diff --git a/keycloak-resources/resources/resources_common/package-lock.json b/keycloak-resources/login/resources/resources-common/package-lock.json similarity index 100% rename from keycloak-resources/resources/resources_common/package-lock.json rename to keycloak-resources/login/resources/resources-common/package-lock.json diff --git a/keycloak-resources/resources/resources_common/package.json b/keycloak-resources/login/resources/resources-common/package.json similarity index 100% rename from keycloak-resources/resources/resources_common/package.json rename to keycloak-resources/login/resources/resources-common/package.json diff --git a/keycloak-resources/resources/resources_common/lib/angular/errors.json b/keycloak-resources/resources/resources_common/lib/angular/errors.json deleted file mode 100644 index 0fe72864..00000000 --- a/keycloak-resources/resources/resources_common/lib/angular/errors.json +++ /dev/null @@ -1 +0,0 @@ -{"id":"ng","generated":"Thu Aug 13 2015 11:47:38 GMT-0700 (PDT)","errors":{"ng":{"areq":"Argument '{0}' is {1}","cpta":"Can't copy! TypedArray destination cannot be mutated.","test":"no injector found for element argument to getTestability","cpws":"Can't copy! Making copies of Window or Scope instances is not supported.","btstrpd":"App Already Bootstrapped with this Element '{0}'","cpi":"Can't copy! Source and destination are identical.","badname":"hasOwnProperty is not a valid {0} name"},"$http":{"legacy":"The method `{0}` on the promise returned from `$http` has been disabled.","badreq":"Http request configuration must be an object. Received: {0}"},"ngRepeat":{"badident":"alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name.","iexp":"Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.","dupes":"Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}","iidexp":"'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'."},"$sce":{"imatcher":"Matchers may only be \"self\", string patterns or RegExp objects","icontext":"Attempted to trust a value in invalid context. Context: {0}; Value: {1}","iwcard":"Illegal sequence *** in string matcher. String: {0}","insecurl":"Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}","iequirks":"Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks mode. You can fix this by adding the text 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/keycloak-resources/resources/resources_common/lib/angular/treeview/LICENSE b/keycloak-resources/resources/resources_common/lib/angular/treeview/LICENSE deleted file mode 100644 index 514acd34..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/angular/treeview/README.md b/keycloak-resources/resources/resources_common/lib/angular/treeview/README.md deleted file mode 100644 index 31c824fa..00000000 --- a/keycloak-resources/resources/resources_common/lib/angular/treeview/README.md +++ /dev/null @@ -1,122 +0,0 @@ -Angular Treeview -================ - -Pure [AngularJS](https://www.angularjs.org) based tree menu directive. - -[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/preview.png)](https://jsfiddle.net/eu81273/8LWUc/) - -## Installation - -Copy the script and css into your project and add a script and link tag to your page. - -```html - - -``` - -Add a dependency to your application module. - -```javascript -angular.module('myApp', ['angularTreeview']); -``` - -Add a tree to your application. See [Usage](#usage). - -## Usage - -Attributes of angular treeview are below. - -- 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. - -Here is a simple example. - - -```html -
-
-``` - -Example model: - -```javascript -$scope.treedata = -[ - { "label" : "User", "id" : "role1", "children" : [ - { "label" : "subUser1", "id" : "role11", "children" : [] }, - { "label" : "subUser2", "id" : "role12", "children" : [ - { "label" : "subUser2-1", "id" : "role121", "children" : [ - { "label" : "subUser2-1-1", "id" : "role1211", "children" : [] }, - { "label" : "subUser2-1-2", "id" : "role1212", "children" : [] } - ]} - ]} - ]}, - { "label" : "Admin", "id" : "role2", "children" : [] }, - { "label" : "Guest", "id" : "role3", "children" : [] } -]; -``` - -## Selection - -If tree node is selected, then that selected tree node is saved to $scope."TREE ID".currentNode. By using $watch, the controller can recognize the tree selection. - - -```javascript -$scope.$watch( 'abc.currentNode', function( newObj, oldObj ) { - if( $scope.abc && angular.isObject($scope.abc.currentNode) ) { - console.log( 'Node Selected!!' ); - console.log( $scope.abc.currentNode ); - } -}, false); -``` - -## Examples - -#### Basic example -[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle01.png)](https://jsfiddle.net/eu81273/8LWUc/) - -[jsFiddle - http://jsfiddle.net/eu81273/8LWUc/](https://jsfiddle.net/eu81273/8LWUc/) - -#### Multiple treeview example -[![ScreenShot](https://github.com/eu81273/angular.treeview/raw/master/img/jsfiddle02.png)](https://jsfiddle.net/eu81273/b9Pnw/) - -[jsFiddle - http://jsfiddle.net/eu81273/b9Pnw/](https://jsfiddle.net/eu81273/b9Pnw/) - -## Browser Compatibility - -Same with AngularJS. Safari, Chrome, Firefox, Opera, IE8, IE9 and mobile browsers (Android, Chrome Mobile, iOS Safari). - -## Changelogs - -#### version 0.1.6 -- Fixed the bug that 'null' string appears before each 'div' generated. (Thanks to Iaac) - -#### version 0.1.5 -- support multiple treeview. (Thanks to Axel Pesme) - -#### version 0.1.4 -- prevented memory leaks. - -#### version 0.1.3 -- removed unnecessary codes. - -#### version 0.1.2 -- removed some jQuery dependency. (Issue #2) - -## License - -The MIT License. - -Copyright ⓒ 2013 AHN JAE-HA. - -See [LICENSE](https://github.com/eu81273/angular.treeview/blob/master/LICENSE) diff --git a/keycloak-resources/resources/resources_common/lib/angular/treeview/angular.treeview.js b/keycloak-resources/resources/resources_common/lib/angular/treeview/angular.treeview.js deleted file mode 100644 index 0e6512a1..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/angular/treeview/angular.treeview.min.js b/keycloak-resources/resources/resources_common/lib/angular/treeview/angular.treeview.min.js deleted file mode 100644 index e02a85bb..00000000 --- a/keycloak-resources/resources/resources_common/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+'}}
    -// 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/keycloak-resources/resources/resources_common/lib/angular/version.json b/keycloak-resources/resources/resources_common/lib/angular/version.json deleted file mode 100644 index 7325f62f..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/filesaver/FileSaver.js b/keycloak-resources/resources/resources_common/lib/filesaver/FileSaver.js deleted file mode 100644 index fb714942..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/FileAPI.min.js b/keycloak-resources/resources/resources_common/lib/fileupload/FileAPI.min.js deleted file mode 100644 index 7cc0ff4c..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-html5-shim.min.js b/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-html5-shim.min.js deleted file mode 100644 index 64d91823..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-shim.js b/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-shim.js deleted file mode 100644 index f526e58a..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-shim.min.js b/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload-shim.min.js deleted file mode 100644 index e76e175e..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload.js b/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload.js deleted file mode 100644 index 0daaa690..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload.min.js b/keycloak-resources/resources/resources_common/lib/fileupload/angular-file-upload.min.js deleted file mode 100644 index ae51b1f3..00000000 --- a/keycloak-resources/resources/resources_common/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 g=0;g 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/keycloak-resources/resources/resources_common/lib/ui-ace/min/ace.js b/keycloak-resources/resources/resources_common/lib/ui-ace/min/ace.js deleted file mode 100644 index faa3034d..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/min/mode-javascript.js b/keycloak-resources/resources/resources_common/lib/ui-ace/min/mode-javascript.js deleted file mode 100644 index 26a8bdc8..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/min/theme-github.js b/keycloak-resources/resources/resources_common/lib/ui-ace/min/theme-github.js deleted file mode 100644 index 2401002c..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/min/worker-javascript.js b/keycloak-resources/resources/resources_common/lib/ui-ace/min/worker-javascript.js deleted file mode 100644 index bca38f05..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/theme-github.js b/keycloak-resources/resources/resources_common/lib/ui-ace/theme-github.js deleted file mode 100644 index d19512c6..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/ui-ace.js b/keycloak-resources/resources/resources_common/lib/ui-ace/ui-ace.js deleted file mode 100644 index a664fb1f..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/ui-ace.min.js b/keycloak-resources/resources/resources_common/lib/ui-ace/ui-ace.min.js deleted file mode 100644 index c69ced86..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/lib/ui-ace/worker-javascript.js b/keycloak-resources/resources/resources_common/lib/ui-ace/worker-javascript.js deleted file mode 100644 index 064fbac4..00000000 --- a/keycloak-resources/resources/resources_common/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/keycloak-resources/resources/resources_common/node_modules/angular-cookies/LICENSE.md b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/LICENSE.md deleted file mode 100644 index 2c395eef..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Angular - -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/keycloak-resources/resources/resources_common/node_modules/angular-cookies/README.md b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/README.md deleted file mode 100644 index 7b190d34..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/README.md +++ /dev/null @@ -1,68 +0,0 @@ -# packaged angular-cookies - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/tree/master/src/ngCookies). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-cookies -``` - -Then add `ngCookies` as a dependency for your app: - -```javascript -angular.module('myApp', [require('angular-cookies')]); -``` - -### bower - -```shell -bower install angular-cookies -``` - -Add a ` -``` - -Then add `ngCookies` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngCookies']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngCookies). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.js b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.js deleted file mode 100644 index 29cd78d1..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.js +++ /dev/null @@ -1,253 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular) {'use strict'; - -/** - * @ngdoc module - * @name ngCookies - * @description - * - * The `ngCookies` module provides a convenient wrapper for reading and writing browser cookies. - * - * See {@link ngCookies.$cookies `$cookies`} for usage. - */ - - -angular.module('ngCookies', ['ng']). - info({ angularVersion: '1.8.0' }). - /** - * @ngdoc provider - * @name $cookiesProvider - * @description - * Use `$cookiesProvider` to change the default behavior of the {@link ngCookies.$cookies $cookies} service. - * */ - provider('$cookies', [/** @this */function $CookiesProvider() { - /** - * @ngdoc property - * @name $cookiesProvider#defaults - * @description - * - * Object containing default options to pass when setting cookies. - * - * The object may have following properties: - * - * - **path** - `{string}` - The cookie will be available only for this path and its - * sub-paths. By default, this is the URL that appears in your `` tag. - * - **domain** - `{string}` - The cookie will be available only for this domain and - * its sub-domains. For security reasons the user agent will not accept the cookie - * if the current domain is not a sub-domain of this domain or equal to it. - * - **expires** - `{string|Date}` - String of the form "Wdy, DD Mon YYYY HH:MM:SS GMT" - * or a Date object indicating the exact date/time this cookie will expire. - * - **secure** - `{boolean}` - If `true`, then the cookie will only be available through a - * secured connection. - * - **samesite** - `{string}` - prevents the browser from sending the cookie along with cross-site requests. - * Accepts the values `lax` and `strict`. See the [OWASP Wiki](https://www.owasp.org/index.php/SameSite) - * for more info. Note that as of May 2018, not all browsers support `SameSite`, - * so it cannot be used as a single measure against Cross-Site-Request-Forgery (CSRF) attacks. - * - * Note: By default, the address that appears in your `` tag will be used as the path. - * This is important so that cookies will be visible for all routes when html5mode is enabled. - * - * @example - * - * ```js - * angular.module('cookiesProviderExample', ['ngCookies']) - * .config(['$cookiesProvider', function($cookiesProvider) { - * // Setting default options - * $cookiesProvider.defaults.domain = 'foo.com'; - * $cookiesProvider.defaults.secure = true; - * }]); - * ``` - **/ - var defaults = this.defaults = {}; - - function calcOptions(options) { - return options ? angular.extend({}, defaults, options) : defaults; - } - - /** - * @ngdoc service - * @name $cookies - * - * @description - * Provides read/write access to browser's cookies. - * - *
      - * Up until AngularJS 1.3, `$cookies` exposed properties that represented the - * current browser cookie values. In version 1.4, this behavior has changed, and - * `$cookies` now provides a standard api of getters, setters etc. - *
      - * - * Requires the {@link ngCookies `ngCookies`} module to be installed. - * - * @example - * - * ```js - * angular.module('cookiesExample', ['ngCookies']) - * .controller('ExampleController', ['$cookies', function($cookies) { - * // Retrieving a cookie - * var favoriteCookie = $cookies.get('myFavorite'); - * // Setting a cookie - * $cookies.put('myFavorite', 'oatmeal'); - * }]); - * ``` - */ - this.$get = ['$$cookieReader', '$$cookieWriter', function($$cookieReader, $$cookieWriter) { - return { - /** - * @ngdoc method - * @name $cookies#get - * - * @description - * Returns the value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {string} Raw cookie value. - */ - get: function(key) { - return $$cookieReader()[key]; - }, - - /** - * @ngdoc method - * @name $cookies#getObject - * - * @description - * Returns the deserialized value of given cookie key - * - * @param {string} key Id to use for lookup. - * @returns {Object} Deserialized cookie value. - */ - getObject: function(key) { - var value = this.get(key); - return value ? angular.fromJson(value) : value; - }, - - /** - * @ngdoc method - * @name $cookies#getAll - * - * @description - * Returns a key value object with all the cookies - * - * @returns {Object} All cookies - */ - getAll: function() { - return $$cookieReader(); - }, - - /** - * @ngdoc method - * @name $cookies#put - * - * @description - * Sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {string} value Raw value to be stored. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - put: function(key, value, options) { - $$cookieWriter(key, value, calcOptions(options)); - }, - - /** - * @ngdoc method - * @name $cookies#putObject - * - * @description - * Serializes and sets a value for given cookie key - * - * @param {string} key Id for the `value`. - * @param {Object} value Value to be stored. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - putObject: function(key, value, options) { - this.put(key, angular.toJson(value), options); - }, - - /** - * @ngdoc method - * @name $cookies#remove - * - * @description - * Remove given cookie - * - * @param {string} key Id of the key-value pair to delete. - * @param {Object=} options Options object. - * See {@link ngCookies.$cookiesProvider#defaults $cookiesProvider.defaults} - */ - remove: function(key, options) { - $$cookieWriter(key, undefined, calcOptions(options)); - } - }; - }]; - }]); - -/** - * @name $$cookieWriter - * @requires $document - * - * @description - * This is a private service for writing cookies - * - * @param {string} name Cookie name - * @param {string=} value Cookie value (if undefined, cookie will be deleted) - * @param {Object=} options Object with options that need to be stored for the cookie. - */ -function $$CookieWriter($document, $log, $browser) { - var cookiePath = $browser.baseHref(); - var rawDocument = $document[0]; - - function buildCookieString(name, value, options) { - var path, expires; - options = options || {}; - expires = options.expires; - path = angular.isDefined(options.path) ? options.path : cookiePath; - if (angular.isUndefined(value)) { - expires = 'Thu, 01 Jan 1970 00:00:00 GMT'; - value = ''; - } - if (angular.isString(expires)) { - expires = new Date(expires); - } - - var str = encodeURIComponent(name) + '=' + encodeURIComponent(value); - str += path ? ';path=' + path : ''; - str += options.domain ? ';domain=' + options.domain : ''; - str += expires ? ';expires=' + expires.toUTCString() : ''; - str += options.secure ? ';secure' : ''; - str += options.samesite ? ';samesite=' + options.samesite : ''; - - // per http://www.ietf.org/rfc/rfc2109.txt browser must allow at minimum: - // - 300 cookies - // - 20 cookies per unique domain - // - 4096 bytes per cookie - var cookieLength = str.length + 1; - if (cookieLength > 4096) { - $log.warn('Cookie \'' + name + - '\' possibly not set or overflowed because it was too large (' + - cookieLength + ' > 4096 bytes)!'); - } - - return str; - } - - return function(name, value, options) { - rawDocument.cookie = buildCookieString(name, value, options); - }; -} - -$$CookieWriter.$inject = ['$document', '$log', '$browser']; - -angular.module('ngCookies').provider('$$cookieWriter', /** @this */ function $$CookieWriterProvider() { - this.$get = $$CookieWriter; -}); - - -})(window, window.angular); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js deleted file mode 100644 index 873220d5..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(n,e){'use strict';function m(d,k,l){var a=l.baseHref(),h=d[0];return function(f,b,c){var d,g;c=c||{};g=c.expires;d=e.isDefined(c.path)?c.path:a;e.isUndefined(b)&&(g="Thu, 01 Jan 1970 00:00:00 GMT",b="");e.isString(g)&&(g=new Date(g));b=encodeURIComponent(f)+"="+encodeURIComponent(b);b=b+(d?";path="+d:"")+(c.domain?";domain="+c.domain:"");b+=g?";expires="+g.toUTCString():"";b+=c.secure?";secure":"";b+=c.samesite?";samesite="+c.samesite:"";c=b.length+1;4096 4096 bytes)!");h.cookie=b}}e.module("ngCookies",["ng"]).info({angularVersion:"1.8.0"}).provider("$cookies",[function(){var d=this.defaults={};this.$get=["$$cookieReader","$$cookieWriter",function(k,l){return{get:function(a){return k()[a]},getObject:function(a){return(a=this.get(a))?e.fromJson(a):a},getAll:function(){return k()},put:function(a,h,f){l(a,h,f?e.extend({},d,f):d)},putObject:function(a,d,f){this.put(a,e.toJson(d),f)},remove:function(a,h){l(a,void 0,h?e.extend({},d,h):d)}}}]}]);m.$inject= -["$document","$log","$browser"];e.module("ngCookies").provider("$$cookieWriter",function(){this.$get=m})})(window,window.angular); -//# sourceMappingURL=angular-cookies.min.js.map diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js.map b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js.map deleted file mode 100644 index c642643b..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/angular-cookies.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-cookies.min.js", -"lineCount":8, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkB,CAqM3BC,QAASA,EAAc,CAACC,CAAD,CAAYC,CAAZ,CAAkBC,CAAlB,CAA4B,CACjD,IAAIC,EAAaD,CAAAE,SAAA,EAAjB,CACIC,EAAcL,CAAA,CAAU,CAAV,CAoClB,OAAO,SAAQ,CAACM,CAAD,CAAOC,CAAP,CAAcC,CAAd,CAAuB,CAlCW,IAC3CC,CAD2C,CACrCC,CACVF,EAAA,CAiCoDA,CAjCpD,EAAqB,EACrBE,EAAA,CAAUF,CAAAE,QACVD,EAAA,CAAOX,CAAAa,UAAA,CAAkBH,CAAAC,KAAlB,CAAA,CAAkCD,CAAAC,KAAlC,CAAiDN,CACpDL,EAAAc,YAAA,CAAoBL,CAApB,CAAJ,GACEG,CACA,CADU,+BACV,CAAAH,CAAA,CAAQ,EAFV,CAIIT,EAAAe,SAAA,CAAiBH,CAAjB,CAAJ,GACEA,CADF,CACY,IAAII,IAAJ,CAASJ,CAAT,CADZ,CAIIK,EAAAA,CAAMC,kBAAA,CAsB6BV,CAtB7B,CAANS,CAAiC,GAAjCA,CAAuCC,kBAAA,CAAmBT,CAAnB,CAE3CQ,EAAA,CADAA,CACA,EADON,CAAA,CAAO,QAAP,CAAkBA,CAAlB,CAAyB,EAChC,GAAOD,CAAAS,OAAA,CAAiB,UAAjB,CAA8BT,CAAAS,OAA9B,CAA+C,EAAtD,CACAF,EAAA,EAAOL,CAAA,CAAU,WAAV,CAAwBA,CAAAQ,YAAA,EAAxB,CAAgD,EACvDH,EAAA,EAAOP,CAAAW,OAAA,CAAiB,SAAjB,CAA6B,EACpCJ,EAAA,EAAOP,CAAAY,SAAA,CAAmB,YAAnB,CAAkCZ,CAAAY,SAAlC,CAAqD,EAMxDC,EAAAA,CAAeN,CAAAO,OAAfD,CAA4B,CACb,KAAnB,CAAIA,CAAJ,EACEpB,CAAAsB,KAAA,CAAU,UAAV,CASqCjB,CATrC,CACE,6DADF;AAEEe,CAFF,CAEiB,iBAFjB,CASFhB,EAAAmB,OAAA,CAJOT,CAG6B,CAtCW,CAxLnDjB,CAAA2B,OAAA,CAAe,WAAf,CAA4B,CAAC,IAAD,CAA5B,CAAAC,KAAA,CACO,CAAEC,eAAgB,OAAlB,CADP,CAAAC,SAAA,CAQY,UARZ,CAQwB,CAAaC,QAAyB,EAAG,CAsC7D,IAAIC,EAAW,IAAAA,SAAXA,CAA2B,EAiC/B,KAAAC,KAAA,CAAY,CAAC,gBAAD,CAAmB,gBAAnB,CAAqC,QAAQ,CAACC,CAAD,CAAiBC,CAAjB,CAAiC,CACxF,MAAO,CAWLC,IAAKA,QAAQ,CAACC,CAAD,CAAM,CACjB,MAAOH,EAAA,EAAA,CAAiBG,CAAjB,CADU,CAXd,CAyBLC,UAAWA,QAAQ,CAACD,CAAD,CAAM,CAEvB,MAAO,CADH5B,CACG,CADK,IAAA2B,IAAA,CAASC,CAAT,CACL,EAAQrC,CAAAuC,SAAA,CAAiB9B,CAAjB,CAAR,CAAkCA,CAFlB,CAzBpB,CAuCL+B,OAAQA,QAAQ,EAAG,CACjB,MAAON,EAAA,EADU,CAvCd,CAuDLO,IAAKA,QAAQ,CAACJ,CAAD,CAAM5B,CAAN,CAAaC,CAAb,CAAsB,CACjCyB,CAAA,CAAeE,CAAf,CAAoB5B,CAApB,CAAuCC,CAvFpC,CAAUV,CAAA0C,OAAA,CAAe,EAAf,CAAmBV,CAAnB,CAuF0BtB,CAvF1B,CAAV,CAAkDsB,CAuFrD,CADiC,CAvD9B,CAuELW,UAAWA,QAAQ,CAACN,CAAD,CAAM5B,CAAN,CAAaC,CAAb,CAAsB,CACvC,IAAA+B,IAAA,CAASJ,CAAT,CAAcrC,CAAA4C,OAAA,CAAenC,CAAf,CAAd,CAAqCC,CAArC,CADuC,CAvEpC,CAsFLmC,OAAQA,QAAQ,CAACR,CAAD,CAAM3B,CAAN,CAAe,CAC7ByB,CAAA,CAAeE,CAAf,CAAoBS,IAAAA,EAApB,CAA2CpC,CAtHxC,CAAUV,CAAA0C,OAAA,CAAe,EAAf,CAAmBV,CAAnB,CAsH8BtB,CAtH9B,CAAV,CAAkDsB,CAsHrD,CAD6B,CAtF1B,CADiF,CAA9E,CAvEiD,CAAzC,CARxB,CAmOA/B,EAAA8C,QAAA;AAAyB,CAAC,WAAD,CAAc,MAAd,CAAsB,UAAtB,CAEzB/C,EAAA2B,OAAA,CAAe,WAAf,CAAAG,SAAA,CAAqC,gBAArC,CAAoEkB,QAA+B,EAAG,CACpG,IAAAf,KAAA,CAAYhC,CADwF,CAAtG,CAlP2B,CAA1B,CAAD,CAuPGF,MAvPH,CAuPWA,MAAAC,QAvPX;", -"sources":["angular-cookies.js"], -"names":["window","angular","$$CookieWriter","$document","$log","$browser","cookiePath","baseHref","rawDocument","name","value","options","path","expires","isDefined","isUndefined","isString","Date","str","encodeURIComponent","domain","toUTCString","secure","samesite","cookieLength","length","warn","cookie","module","info","angularVersion","provider","$CookiesProvider","defaults","$get","$$cookieReader","$$cookieWriter","get","key","getObject","fromJson","getAll","put","extend","putObject","toJson","remove","undefined","$inject","$$CookieWriterProvider"] -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/bower.json b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/bower.json deleted file mode 100644 index a242299e..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/bower.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "angular-cookies", - "version": "1.8.0", - "license": "MIT", - "main": "./angular-cookies.js", - "ignore": [], - "dependencies": { - "angular": "1.8.0" - } -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/index.js b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/index.js deleted file mode 100644 index 65766754..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./angular-cookies'); -module.exports = 'ngCookies'; diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/package.json b/keycloak-resources/resources/resources_common/node_modules/angular-cookies/package.json deleted file mode 100644 index 6b7e0cec..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-cookies/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "angular-cookies@1.8.0", - "_id": "angular-cookies@1.8.0", - "_inBundle": false, - "_integrity": "sha512-gWO3RKF0WMmXhseiN3Aw9aEmQ3mB53wSdAxpeKKHbiDwU7vmK+MBuebyOX9qbwZYubn5nM8LByZVmg7T6jOV1w==", - "_location": "/angular-cookies", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-cookies@1.8.0", - "name": "angular-cookies", - "escapedName": "angular-cookies", - "rawSpec": "1.8.0", - "saveSpec": null, - "fetchSpec": "1.8.0" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-cookies/-/angular-cookies-1.8.0.tgz", - "_shasum": "c981c843652e716c1cf993451c2509f00a4b0169", - "_spec": "angular-cookies@1.8.0", - "_where": "C:\\GitHub\\keycloak\\themes\\src\\main\\resources\\theme\\keycloak\\common\\resources", - "author": { - "name": "Angular Core Team", - "email": "angular-core+npm@google.com" - }, - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "AngularJS module for cookies", - "homepage": "http://angularjs.org", - "jspm": { - "shim": { - "angular-cookies": { - "deps": [ - "angular" - ] - } - } - }, - "keywords": [ - "angular", - "framework", - "browser", - "cookies", - "client-side" - ], - "license": "MIT", - "main": "index.js", - "name": "angular-cookies", - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular.js.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.8.0" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-loader/LICENSE.md b/keycloak-resources/resources/resources_common/node_modules/angular-loader/LICENSE.md deleted file mode 100644 index 2c395eef..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-loader/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Angular - -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/keycloak-resources/resources/resources_common/node_modules/angular-loader/README.md b/keycloak-resources/resources/resources_common/node_modules/angular-loader/README.md deleted file mode 100644 index 7322047b..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-loader/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# packaged angular-loader - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js/blob/master/src/loader.js). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular-loader -``` - -Add a ` -``` - -Note that this package is not in CommonJS format, so doing `require('angular-loader')` will -return `undefined`. - -### bower - -```shell -bower install angular-loader -``` - -Add a ` -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/guide/bootstrap). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.js b/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.js deleted file mode 100644 index f2c0bce5..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.js +++ /dev/null @@ -1,638 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ - -(function() {'use strict'; - // NOTE: - // These functions are copied here from `src/Angular.js`, because they are needed inside the - // `angular-loader.js` closure and need to be available before the main `angular.js` script has - // been loaded. - function isFunction(value) {return typeof value === 'function';} - function isDefined(value) {return typeof value !== 'undefined';} - function isNumber(value) {return typeof value === 'number';} - function isObject(value) {return value !== null && typeof value === 'object';} - function isScope(obj) {return obj && obj.$evalAsync && obj.$watch;} - function isUndefined(value) {return typeof value === 'undefined';} - function isWindow(obj) {return obj && obj.window === obj;} - function sliceArgs(args, startIndex) {return Array.prototype.slice.call(args, startIndex || 0);} - function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && window.document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; - } - -/* exported toDebugString */ - -function serializeObject(obj, maxDepth) { - var seen = []; - - // There is no direct way to stringify object until reaching a specific depth - // and a very deep object can cause a performance issue, so we copy the object - // based on this specific depth and then stringify it. - if (isValidObjectMaxDepth(maxDepth)) { - // This file is also included in `angular-loader`, so `copy()` might not always be available in - // the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed. - obj = angular.copy(obj, null, maxDepth); - } - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '...'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj, maxDepth) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (isUndefined(obj)) { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj, maxDepth); - } - return obj; -} - -/* exported - minErrConfig, - errorHandlingConfig, - isValidObjectMaxDepth -*/ - -var minErrConfig = { - objectMaxDepth: 5, - urlErrorParamsEnabled: true -}; - -/** - * @ngdoc function - * @name angular.errorHandlingConfig - * @module ng - * @kind function - * - * @description - * Configure several aspects of error handling in AngularJS if used as a setter or return the - * current configuration if used as a getter. The following options are supported: - * - * - **objectMaxDepth**: The maximum depth to which objects are traversed when stringified for error messages. - * - * Omitted or undefined options will leave the corresponding configuration values unchanged. - * - * @param {Object=} config - The configuration object. May only contain the options that need to be - * updated. Supported keys: - * - * * `objectMaxDepth` **{Number}** - The max depth for stringifying objects. Setting to a - * non-positive or non-numeric value, removes the max depth limit. - * Default: 5 - * - * * `urlErrorParamsEnabled` **{Boolean}** - Specifies whether the generated error url will - * contain the parameters of the thrown error. Disabling the parameters can be useful if the - * generated error url is very long. - * - * Default: true. When used without argument, it returns the current value. - */ -function errorHandlingConfig(config) { - if (isObject(config)) { - if (isDefined(config.objectMaxDepth)) { - minErrConfig.objectMaxDepth = isValidObjectMaxDepth(config.objectMaxDepth) ? config.objectMaxDepth : NaN; - } - if (isDefined(config.urlErrorParamsEnabled) && isBoolean(config.urlErrorParamsEnabled)) { - minErrConfig.urlErrorParamsEnabled = config.urlErrorParamsEnabled; - } - } else { - return minErrConfig; - } -} - -/** - * @private - * @param {Number} maxDepth - * @return {boolean} - */ -function isValidObjectMaxDepth(maxDepth) { - return isNumber(maxDepth) && maxDepth > 0; -} - - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * AngularJS. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace'). Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - - var url = 'https://errors.angularjs.org/1.8.0/'; - var regex = url.replace('.', '\\.') + '[\\s\\S]*'; - var errRegExp = new RegExp(regex, 'g'); - - return function() { - var code = arguments[0], - template = arguments[1], - message = '[' + (module ? module + ':' : '') + code + '] ', - templateArgs = sliceArgs(arguments, 2).map(function(arg) { - return toDebugString(arg, minErrConfig.objectMaxDepth); - }), - paramPrefix, i; - - // A minErr message has two parts: the message itself and the url that contains the - // encoded message. - // The message's parameters can contain other error messages which also include error urls. - // To prevent the messages from getting too long, we strip the error urls from the parameters. - - message += template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1); - - if (index < templateArgs.length) { - return templateArgs[index].replace(errRegExp, ''); - } - - return match; - }); - - message += '\n' + url + (module ? module + '/' : '') + code; - - if (minErrConfig.urlErrorParamsEnabled) { - for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { - message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]); - } - } - - return new ErrorConstructor(message); - }; -} - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring AngularJS {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving AngularJS - * modules. - * All modules (AngularJS core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * Passing one argument retrieves an existing {@link angular.Module}, - * whereas passing more than one argument creates a new {@link angular.Module} - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {angular.Module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - - var info = {}; - - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('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.', name); - } - - /** @type {!Array.>} */ - var invokeQueue = []; - - /** @type {!Array.} */ - var configBlocks = []; - - /** @type {!Array.} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc method - * @name angular.Module#info - * @module ng - * - * @param {Object=} info Information about the module - * @returns {Object|Module} The current info object for this module if called as a getter, - * or `this` if called as a setter. - * - * @description - * Read and write custom information about this module. - * For example you could put the version of the module in here. - * - * ```js - * angular.module('myModule', []).info({ version: '1.0.0' }); - * ``` - * - * The version could then be read back out by accessing the module elsewhere: - * - * ``` - * var version = angular.module('myModule').info().version; - * ``` - * - * You can also retrieve this information during runtime via the - * {@link $injector#modules `$injector.modules`} property: - * - * ```js - * var version = $injector.modules['myModule'].info().version; - * ``` - */ - info: function(value) { - if (isDefined(value)) { - if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value'); - info = value; - return this; - } - return info; - }, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLaterAndSetModuleName('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLaterAndSetModuleName('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLaterAndSetModuleName('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constants are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#decorator - * @module ng - * @param {string} name The name of the service to decorate. - * @param {Function} decorFn This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. - * @description - * See {@link auto.$provide#decorator $provide.decorator()}. - */ - decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link $animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLaterAndSetModuleName('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name - this must be a valid AngularJS expression identifier - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - * - *
      - * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
      - */ - filter: invokeLaterAndSetModuleName('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#component - * @module ng - * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match ``), - * or an object map of components where the keys are the names and the values are the component definition objects. - * @param {Object} options Component definition object (a simplified - * {@link ng.$compile#directive-definition-object directive definition object}) - * - * @description - * See {@link ng.$compileProvider#component $compileProvider.component()}. - */ - component: invokeLaterAndSetModuleName('$compileProvider', 'component'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to configure services by injecting their - * {@link angular.Module#provider `providers`}, e.g. for adding routes to the - * {@link ngRoute.$routeProvider $routeProvider}. - * - * Note that you can only inject {@link angular.Module#provider `providers`} and - * {@link angular.Module#constant `constants`} into this function. - * - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - - /** - * @param {string} provider - * @param {string} method - * @returns {angular.Module} - */ - function invokeLaterAndSetModuleName(provider, method, queue) { - if (!queue) queue = invokeQueue; - return function(recipeName, factoryFunction) { - if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name; - queue.push([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -setupModuleLoader(window); -})(window); - -/** - * Closure compiler type information - * - * @typedef { { - * requires: !Array., - * invokeQueue: !Array.>, - * - * service: function(string, Function):angular.Module, - * factory: function(string, Function):angular.Module, - * value: function(string, *):angular.Module, - * - * filter: function(string, Function):angular.Module, - * - * init: function(Function):angular.Module - * } } - */ -angular.Module; - diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.min.js deleted file mode 100644 index 33ebe2d2..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-loader/angular-loader.min.js +++ /dev/null @@ -1,10 +0,0 @@ -/* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(){'use strict';function g(a,f){f=f||Error;return function(){var d=arguments[0],e;e="["+(a?a+":":"")+d+"] http://errors.angularjs.org/1.8.0/"+(a?a+"/":"")+d;for(d=1;d` to your `index.html`: - -```html - -``` - -Then add `ngResource` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngResource']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngResource). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.js b/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.js deleted file mode 100644 index 3937ed18..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.js +++ /dev/null @@ -1,911 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular) {'use strict'; - -var $resourceMinErr = angular.$$minErr('$resource'); - -// Helper functions and regex to lookup a dotted path on an object -// stopping at undefined/null. The path must be composed of ASCII -// identifiers (just like $parse) -var MEMBER_NAME_REGEX = /^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/; - -function isValidDottedPath(path) { - return (path != null && path !== '' && path !== 'hasOwnProperty' && - MEMBER_NAME_REGEX.test('.' + path)); -} - -function lookupDottedPath(obj, path) { - if (!isValidDottedPath(path)) { - throw $resourceMinErr('badmember', 'Dotted member path "@{0}" is invalid.', path); - } - var keys = path.split('.'); - for (var i = 0, ii = keys.length; i < ii && angular.isDefined(obj); i++) { - var key = keys[i]; - obj = (obj !== null) ? obj[key] : undefined; - } - return obj; -} - -/** - * Create a shallow copy of an object and clear other fields from the destination - */ -function shallowClearAndCopy(src, dst) { - dst = dst || {}; - - angular.forEach(dst, function(value, key) { - delete dst[key]; - }); - - for (var key in src) { - if (src.hasOwnProperty(key) && !(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - - return dst; -} - -/** - * @ngdoc module - * @name ngResource - * @description - * - * The `ngResource` module provides interaction support with RESTful services - * via the $resource service. - * - * See {@link ngResource.$resourceProvider} and {@link ngResource.$resource} for usage. - */ - -/** - * @ngdoc provider - * @name $resourceProvider - * - * @description - * - * Use `$resourceProvider` to change the default behavior of the {@link ngResource.$resource} - * service. - * - * ## Dependencies - * Requires the {@link ngResource } module to be installed. - * - */ - -/** - * @ngdoc service - * @name $resource - * @requires $http - * @requires ng.$log - * @requires $q - * @requires ng.$timeout - * - * @description - * A factory which creates a resource object that lets you interact with - * [RESTful](http://en.wikipedia.org/wiki/Representational_State_Transfer) server-side data sources. - * - * The returned resource object has action methods which provide high-level behaviors without - * the need to interact with the low level {@link ng.$http $http} service. - * - * Requires the {@link ngResource `ngResource`} module to be installed. - * - * By default, trailing slashes will be stripped from the calculated URLs, - * which can pose problems with server backends that do not expect that - * behavior. This can be disabled by configuring the `$resourceProvider` like - * this: - * - * ```js - app.config(['$resourceProvider', function($resourceProvider) { - // Don't strip trailing slashes from calculated URLs - $resourceProvider.defaults.stripTrailingSlashes = false; - }]); - * ``` - * - * @param {string} url A parameterized URL template with parameters prefixed by `:` as in - * `/user/:username`. If you are using a URL with a port number (e.g. - * `http://example.com:8080/api`), it will be respected. - * - * If you are using a url with a suffix, just add the suffix, like this: - * `$resource('http://example.com/resource.json')` or `$resource('http://example.com/:id.json')` - * or even `$resource('http://example.com/resource/:resource_id.:format')` - * If the parameter before the suffix is empty, :resource_id in this case, then the `/.` will be - * collapsed down to a single `.`. If you need this sequence to appear and not collapse then you - * can escape it with `/\.`. - * - * @param {Object=} paramDefaults Default values for `url` parameters. These can be overridden in - * `actions` methods. If a parameter value is a function, it will be called every time - * a param value needs to be obtained for a request (unless the param was overridden). The - * function will be passed the current data value as an argument. - * - * Each key value in the parameter object is first bound to url template if present and then any - * excess keys are appended to the url search query after the `?`. - * - * Given a template `/path/:verb` and parameter `{verb: 'greet', salutation: 'Hello'}` results in - * URL `/path/greet?salutation=Hello`. - * - * If the parameter value is prefixed with `@`, then the value for that parameter will be - * extracted from the corresponding property on the `data` object (provided when calling actions - * with a request body). - * For example, if the `defaultParam` object is `{someParam: '@someProp'}` then the value of - * `someParam` will be `data.someProp`. - * Note that the parameter will be ignored, when calling a "GET" action method (i.e. an action - * method that does not accept a request body). - * - * @param {Object.=} actions Hash with declaration of custom actions that will be available - * in addition to the default set of resource actions (see below). If a custom action has the same - * key as a default action (e.g. `save`), then the default action will be *overwritten*, and not - * extended. - * - * The declaration should be created in the format of {@link ng.$http#usage $http.config}: - * - * { - * action1: {method:?, params:?, isArray:?, headers:?, ...}, - * action2: {method:?, params:?, isArray:?, headers:?, ...}, - * ... - * } - * - * Where: - * - * - **`action`** – {string} – The name of action. This name becomes the name of the method on - * your resource object. - * - **`method`** – {string} – Case insensitive HTTP method (e.g. `GET`, `POST`, `PUT`, - * `DELETE`, `JSONP`, etc). - * - **`params`** – {Object=} – Optional set of pre-bound parameters for this action. If any of - * the parameter value is a function, it will be called every time when a param value needs to - * be obtained for a request (unless the param was overridden). The function will be passed the - * current data value as an argument. - * - **`url`** – {string} – Action specific `url` override. The url templating is supported just - * like for the resource-level urls. - * - **`isArray`** – {boolean=} – If true then the returned object for this action is an array, - * see `returns` section. - * - **`transformRequest`** – - * `{function(data, headersGetter)|Array.}` – - * Transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * By default, transformRequest will contain one function that checks if the request data is - * an object and serializes it using `angular.toJson`. To prevent this behavior, set - * `transformRequest` to an empty array: `transformRequest: []` - * - **`transformResponse`** – - * `{function(data, headersGetter, status)|Array.}` – - * Transform function or an array of such functions. The transform function takes the HTTP - * response body, headers and status and returns its transformed (typically deserialized) - * version. - * By default, transformResponse will contain one function that checks if the response looks - * like a JSON string and deserializes it using `angular.fromJson`. To prevent this behavior, - * set `transformResponse` to an empty array: `transformResponse: []` - * - **`cache`** – `{boolean|Cache}` – A boolean value or object created with - * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of the HTTP response. - * See {@link $http#caching $http Caching} for more information. - * - **`timeout`** – `{number}` – Timeout in milliseconds.
      - * **Note:** In contrast to {@link ng.$http#usage $http.config}, {@link ng.$q promises} are - * **not** supported in `$resource`, because the same value would be used for multiple requests. - * If you are looking for a way to cancel requests, you should use the `cancellable` option. - * - **`cancellable`** – `{boolean}` – If true, the request made by a "non-instance" call will be - * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return - * value. Calling `$cancelRequest()` for a non-cancellable or an already completed/cancelled - * request will have no effect. - * - **`withCredentials`** – `{boolean}` – Whether to set the `withCredentials` flag on the - * XHR object. See - * [XMLHttpRequest.withCredentials](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials) - * for more information. - * - **`responseType`** – `{string}` – See - * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType). - * - **`interceptor`** – `{Object=}` – The interceptor object has four optional methods - - * `request`, `requestError`, `response`, and `responseError`. See - * {@link ng.$http#interceptors $http interceptors} for details. Note that - * `request`/`requestError` interceptors are applied before calling `$http`, thus before any - * global `$http` interceptors. Also, rejecting or throwing an error inside the `request` - * interceptor will result in calling the `responseError` interceptor. - * The resource instance or collection is available on the `resource` property of the - * `http response` object passed to `response`/`responseError` interceptors. - * Keep in mind that the associated promise will be resolved with the value returned by the - * response interceptors. Make sure you return an appropriate value and not the `response` - * object passed as input. For reference, the default `response` interceptor (which gets applied - * if you don't specify a custom one) returns `response.resource`.
      - * See {@link ngResource.$resource#using-interceptors below} for an example of using - * interceptors in `$resource`. - * - **`hasBody`** – `{boolean}` – If true, then the request will have a body. - * If not specified, then only POST, PUT and PATCH requests will have a body. * - * @param {Object} options Hash with custom settings that should extend the - * default `$resourceProvider` behavior. The supported options are: - * - * - **`stripTrailingSlashes`** – {boolean} – If true then the trailing - * slashes from any calculated URL will be stripped. (Defaults to true.) - * - **`cancellable`** – {boolean} – If true, the request made by a "non-instance" call will be - * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return value. - * This can be overwritten per action. (Defaults to false.) - * - * @returns {Object} A resource "class" object with methods for the default set of resource actions - * optionally extended with custom `actions`. The default set contains these actions: - * ```js - * { - * 'get': {method: 'GET'}, - * 'save': {method: 'POST'}, - * 'query': {method: 'GET', isArray: true}, - * 'remove': {method: 'DELETE'}, - * 'delete': {method: 'DELETE'} - * } - * ``` - * - * Calling these methods invoke {@link ng.$http} with the specified http method, destination and - * parameters. When the data is returned from the server then the object is an instance of the - * resource class. The actions `save`, `remove` and `delete` are available on it as methods with - * the `$` prefix. This allows you to easily perform CRUD operations (create, read, update, - * delete) on server-side data like this: - * ```js - * var User = $resource('/user/:userId', {userId: '@id'}); - * User.get({userId: 123}).$promise.then(function(user) { - * user.abc = true; - * user.$save(); - * }); - * ``` - * - * It is important to realize that invoking a `$resource` object method immediately returns an - * empty reference (object or array depending on `isArray`). Once the data is returned from the - * server the existing reference is populated with the actual data. This is a useful trick since - * usually the resource is assigned to a model which is then rendered by the view. Having an empty - * object results in no rendering, once the data arrives from the server then the object is - * populated with the data and the view automatically re-renders itself showing the new data. This - * means that in most cases one never has to write a callback function for the action methods. - * - * The action methods on the class object or instance object can be invoked with the following - * parameters: - * - * - "class" actions without a body: `Resource.action([parameters], [success], [error])` - * - "class" actions with a body: `Resource.action([parameters], postData, [success], [error])` - * - instance actions: `instance.$action([parameters], [success], [error])` - * - * - * When calling instance methods, the instance itself is used as the request body (if the action - * should have a body). By default, only actions using `POST`, `PUT` or `PATCH` have request - * bodies, but you can use the `hasBody` configuration option to specify whether an action - * should have a body or not (regardless of its HTTP method). - * - * - * Success callback is called with (value (Object|Array), responseHeaders (Function), - * status (number), statusText (string)) arguments, where `value` is the populated resource - * instance or collection object. The error callback is called with (httpResponse) argument. - * - * Class actions return an empty instance (with the additional properties listed below). - * Instance actions return a promise for the operation. - * - * The Resource instances and collections have these additional properties: - * - * - `$promise`: The {@link ng.$q promise} of the original server interaction that created this - * instance or collection. - * - * On success, the promise is resolved with the same resource instance or collection object, - * updated with data from server. This makes it easy to use in the - * {@link ngRoute.$routeProvider `resolve` section of `$routeProvider.when()`} to defer view - * rendering until the resource(s) are loaded. - * - * On failure, the promise is rejected with the {@link ng.$http http response} object. - * - * If an interceptor object was provided, the promise will instead be resolved with the value - * returned by the response interceptor (on success) or responceError interceptor (on failure). - * - * - `$resolved`: `true` after first server interaction is completed (either with success or - * rejection), `false` before that. Knowing if the Resource has been resolved is useful in - * data-binding. If there is a response/responseError interceptor and it returns a promise, - * `$resolved` will wait for that too. - * - * The Resource instances and collections have these additional methods: - * - * - `$cancelRequest`: If there is a cancellable, pending request related to the instance or - * collection, calling this method will abort the request. - * - * The Resource instances have these additional methods: - * - * - `toJSON`: It returns a simple object without any of the extra properties added as part of - * the Resource API. This object can be serialized through {@link angular.toJson} safely - * without attaching AngularJS-specific fields. Notice that `JSON.stringify` (and - * `angular.toJson`) automatically use this method when serializing a Resource instance - * (see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify#toJSON%28%29_behavior)). - * - * @example - * - * ### Basic usage - * - ```js - // Define a CreditCard class - var CreditCard = $resource('/users/:userId/cards/:cardId', - {userId: 123, cardId: '@id'}, { - charge: {method: 'POST', params: {charge: true}} - }); - - // We can retrieve a collection from the server - var cards = CreditCard.query(); - // GET: /users/123/cards - // server returns: [{id: 456, number: '1234', name: 'Smith'}] - - // Wait for the request to complete - cards.$promise.then(function() { - var card = cards[0]; - - // Each item is an instance of CreditCard - expect(card instanceof CreditCard).toEqual(true); - - // Non-GET methods are mapped onto the instances - card.name = 'J. Smith'; - card.$save(); - // POST: /users/123/cards/456 {id: 456, number: '1234', name: 'J. Smith'} - // server returns: {id: 456, number: '1234', name: 'J. Smith'} - - // Our custom method is mapped as well (since it uses POST) - card.$charge({amount: 9.99}); - // POST: /users/123/cards/456?amount=9.99&charge=true {id: 456, number: '1234', name: 'J. Smith'} - }); - - // We can create an instance as well - var newCard = new CreditCard({number: '0123'}); - newCard.name = 'Mike Smith'; - - var savePromise = newCard.$save(); - // POST: /users/123/cards {number: '0123', name: 'Mike Smith'} - // server returns: {id: 789, number: '0123', name: 'Mike Smith'} - - savePromise.then(function() { - // Once the promise is resolved, the created instance - // is populated with the data returned by the server - expect(newCard.id).toEqual(789); - }); - ``` - * - * The object returned from a call to `$resource` is a resource "class" which has one "static" - * method for each action in the definition. - * - * Calling these methods invokes `$http` on the `url` template with the given HTTP `method`, - * `params` and `headers`. - * - * @example - * - * ### Accessing the response - * - * When the data is returned from the server then the object is an instance of the resource type and - * all of the non-GET methods are available with `$` prefix. This allows you to easily support CRUD - * operations (create, read, update, delete) on server-side data. - * - ```js - var User = $resource('/users/:userId', {userId: '@id'}); - User.get({userId: 123}).$promise.then(function(user) { - user.abc = true; - user.$save(); - }); - ``` - * - * It's worth noting that the success callback for `get`, `query` and other methods gets called with - * the resource instance (populated with the data that came from the server) as well as an `$http` - * header getter function, the HTTP status code and the response status text. So one could rewrite - * the above example and get access to HTTP headers as follows: - * - ```js - var User = $resource('/users/:userId', {userId: '@id'}); - User.get({userId: 123}, function(user, getResponseHeaders) { - user.abc = true; - user.$save(function(user, putResponseHeaders) { - // `user` => saved `User` object - // `putResponseHeaders` => `$http` header getter - }); - }); - ``` - * - * @example - * - * ### Creating custom actions - * - * In this example we create a custom method on our resource to make a PUT request: - * - ```js - var app = angular.module('app', ['ngResource']); - - // Some APIs expect a PUT request in the format URL/object/ID - // Here we are creating an 'update' method - app.factory('Notes', ['$resource', function($resource) { - return $resource('/notes/:id', {id: '@id'}, { - update: {method: 'PUT'} - }); - }]); - - // In our controller we get the ID from the URL using `$location` - app.controller('NotesCtrl', ['$location', 'Notes', function($location, Notes) { - // First, retrieve the corresponding `Note` object from the server - // (Assuming a URL of the form `.../notes?id=XYZ`) - var noteId = $location.search().id; - var note = Notes.get({id: noteId}); - - note.$promise.then(function() { - note.content = 'Hello, world!'; - - // Now call `update` to save the changes on the server - Notes.update(note); - // This will PUT /notes/ID with the note object as the request payload - - // Since `update` is a non-GET method, it will also be available on the instance - // (prefixed with `$`), so we could replace the `Note.update()` call with: - //note.$update(); - }); - }]); - ``` - * - * @example - * - * ### Cancelling requests - * - * If an action's configuration specifies that it is cancellable, you can cancel the request related - * to an instance or collection (as long as it is a result of a "non-instance" call): - * - ```js - // ...defining the `Hotel` resource... - var Hotel = $resource('/api/hotels/:id', {id: '@id'}, { - // Let's make the `query()` method cancellable - query: {method: 'get', isArray: true, cancellable: true} - }); - - // ...somewhere in the PlanVacationController... - ... - this.onDestinationChanged = function onDestinationChanged(destination) { - // We don't care about any pending request for hotels - // in a different destination any more - if (this.availableHotels) { - this.availableHotels.$cancelRequest(); - } - - // Let's query for hotels in `destination` - // (calls: /api/hotels?location=) - this.availableHotels = Hotel.query({location: destination}); - }; - ``` - * - * @example - * - * ### Using interceptors - * - * You can use interceptors to transform the request or response, perform additional operations, and - * modify the returned instance/collection. The following example, uses `request` and `response` - * interceptors to augment the returned instance with additional info: - * - ```js - var Thing = $resource('/api/things/:id', {id: '@id'}, { - save: { - method: 'POST', - interceptor: { - request: function(config) { - // Before the request is sent out, store a timestamp on the request config - config.requestTimestamp = Date.now(); - return config; - }, - response: function(response) { - // Get the instance from the response object - var instance = response.resource; - - // Augment the instance with a custom `saveLatency` property, computed as the time - // between sending the request and receiving the response. - instance.saveLatency = Date.now() - response.config.requestTimestamp; - - // Return the instance - return instance; - } - } - } - }); - - Thing.save({foo: 'bar'}).$promise.then(function(thing) { - console.log('That thing was saved in ' + thing.saveLatency + 'ms.'); - }); - ``` - * - */ -angular.module('ngResource', ['ng']). - info({ angularVersion: '1.8.0' }). - provider('$resource', function ResourceProvider() { - var PROTOCOL_AND_IPV6_REGEX = /^https?:\/\/\[[^\]]*][^/]*/; - - var provider = this; - - /** - * @ngdoc property - * @name $resourceProvider#defaults - * @description - * Object containing default options used when creating `$resource` instances. - * - * The default values satisfy a wide range of usecases, but you may choose to overwrite any of - * them to further customize your instances. The available properties are: - * - * - **stripTrailingSlashes** – `{boolean}` – If true, then the trailing slashes from any - * calculated URL will be stripped.
      - * (Defaults to true.) - * - **cancellable** – `{boolean}` – If true, the request made by a "non-instance" call will be - * cancelled (if not already completed) by calling `$cancelRequest()` on the call's return - * value. For more details, see {@link ngResource.$resource}. This can be overwritten per - * resource class or action.
      - * (Defaults to false.) - * - **actions** - `{Object.}` - A hash with default actions declarations. Actions are - * high-level methods corresponding to RESTful actions/methods on resources. An action may - * specify what HTTP method to use, what URL to hit, if the return value will be a single - * object or a collection (array) of objects etc. For more details, see - * {@link ngResource.$resource}. The actions can also be enhanced or overwritten per resource - * class.
      - * The default actions are: - * ```js - * { - * get: {method: 'GET'}, - * save: {method: 'POST'}, - * query: {method: 'GET', isArray: true}, - * remove: {method: 'DELETE'}, - * delete: {method: 'DELETE'} - * } - * ``` - * - * #### Example - * - * For example, you can specify a new `update` action that uses the `PUT` HTTP verb: - * - * ```js - * angular. - * module('myApp'). - * config(['$resourceProvider', function ($resourceProvider) { - * $resourceProvider.defaults.actions.update = { - * method: 'PUT' - * }; - * }]); - * ``` - * - * Or you can even overwrite the whole `actions` list and specify your own: - * - * ```js - * angular. - * module('myApp'). - * config(['$resourceProvider', function ($resourceProvider) { - * $resourceProvider.defaults.actions = { - * create: {method: 'POST'}, - * get: {method: 'GET'}, - * getAll: {method: 'GET', isArray:true}, - * update: {method: 'PUT'}, - * delete: {method: 'DELETE'} - * }; - * }); - * ``` - * - */ - this.defaults = { - // Strip slashes by default - stripTrailingSlashes: true, - - // Make non-instance requests cancellable (via `$cancelRequest()`) - cancellable: false, - - // Default actions configuration - actions: { - 'get': {method: 'GET'}, - 'save': {method: 'POST'}, - 'query': {method: 'GET', isArray: true}, - 'remove': {method: 'DELETE'}, - 'delete': {method: 'DELETE'} - } - }; - - this.$get = ['$http', '$log', '$q', '$timeout', function($http, $log, $q, $timeout) { - - var noop = angular.noop, - forEach = angular.forEach, - extend = angular.extend, - copy = angular.copy, - isArray = angular.isArray, - isDefined = angular.isDefined, - isFunction = angular.isFunction, - isNumber = angular.isNumber, - encodeUriQuery = angular.$$encodeUriQuery, - encodeUriSegment = angular.$$encodeUriSegment; - - function Route(template, defaults) { - this.template = template; - this.defaults = extend({}, provider.defaults, defaults); - this.urlParams = {}; - } - - Route.prototype = { - setUrlParams: function(config, params, actionUrl) { - var self = this, - url = actionUrl || self.template, - val, - encodedVal, - protocolAndIpv6 = ''; - - var urlParams = self.urlParams = Object.create(null); - forEach(url.split(/\W/), function(param) { - if (param === 'hasOwnProperty') { - throw $resourceMinErr('badname', 'hasOwnProperty is not a valid parameter name.'); - } - if (!(new RegExp('^\\d+$').test(param)) && param && - (new RegExp('(^|[^\\\\]):' + param + '(\\W|$)').test(url))) { - urlParams[param] = { - isQueryParamValue: (new RegExp('\\?.*=:' + param + '(?:\\W|$)')).test(url) - }; - } - }); - url = url.replace(/\\:/g, ':'); - url = url.replace(PROTOCOL_AND_IPV6_REGEX, function(match) { - protocolAndIpv6 = match; - return ''; - }); - - params = params || {}; - forEach(self.urlParams, function(paramInfo, urlParam) { - val = params.hasOwnProperty(urlParam) ? params[urlParam] : self.defaults[urlParam]; - if (isDefined(val) && val !== null) { - if (paramInfo.isQueryParamValue) { - encodedVal = encodeUriQuery(val, true); - } else { - encodedVal = encodeUriSegment(val); - } - url = url.replace(new RegExp(':' + urlParam + '(\\W|$)', 'g'), function(match, p1) { - return encodedVal + p1; - }); - } else { - url = url.replace(new RegExp('(/?):' + urlParam + '(\\W|$)', 'g'), function(match, - leadingSlashes, tail) { - if (tail.charAt(0) === '/') { - return tail; - } else { - return leadingSlashes + tail; - } - }); - } - }); - - // strip trailing slashes and set the url (unless this behavior is specifically disabled) - if (self.defaults.stripTrailingSlashes) { - url = url.replace(/\/+$/, '') || '/'; - } - - // Collapse `/.` if found in the last URL path segment before the query. - // E.g. `http://url.com/id/.format?q=x` becomes `http://url.com/id.format?q=x`. - url = url.replace(/\/\.(?=\w+($|\?))/, '.'); - // Replace escaped `/\.` with `/.`. - // (If `\.` comes from a param value, it will be encoded as `%5C.`.) - config.url = protocolAndIpv6 + url.replace(/\/(\\|%5C)\./, '/.'); - - - // set params - delegate param encoding to $http - forEach(params, function(value, key) { - if (!self.urlParams[key]) { - config.params = config.params || {}; - config.params[key] = value; - } - }); - } - }; - - - function resourceFactory(url, paramDefaults, actions, options) { - var route = new Route(url, options); - - actions = extend({}, provider.defaults.actions, actions); - - function extractParams(data, actionParams) { - var ids = {}; - actionParams = extend({}, paramDefaults, actionParams); - forEach(actionParams, function(value, key) { - if (isFunction(value)) { value = value(data); } - ids[key] = value && value.charAt && value.charAt(0) === '@' ? - lookupDottedPath(data, value.substr(1)) : value; - }); - return ids; - } - - function defaultResponseInterceptor(response) { - return response.resource; - } - - function Resource(value) { - shallowClearAndCopy(value || {}, this); - } - - Resource.prototype.toJSON = function() { - var data = extend({}, this); - delete data.$promise; - delete data.$resolved; - delete data.$cancelRequest; - return data; - }; - - forEach(actions, function(action, name) { - var hasBody = action.hasBody === true || (action.hasBody !== false && /^(POST|PUT|PATCH)$/i.test(action.method)); - var numericTimeout = action.timeout; - var cancellable = isDefined(action.cancellable) ? - action.cancellable : route.defaults.cancellable; - - if (numericTimeout && !isNumber(numericTimeout)) { - $log.debug('ngResource:\n' + - ' Only numeric values are allowed as `timeout`.\n' + - ' Promises are not supported in $resource, because the same value would ' + - 'be used for multiple requests. If you are looking for a way to cancel ' + - 'requests, you should use the `cancellable` option.'); - delete action.timeout; - numericTimeout = null; - } - - Resource[name] = function(a1, a2, a3, a4) { - var params = {}, data, onSuccess, onError; - - switch (arguments.length) { - case 4: - onError = a4; - onSuccess = a3; - // falls through - case 3: - case 2: - if (isFunction(a2)) { - if (isFunction(a1)) { - onSuccess = a1; - onError = a2; - break; - } - - onSuccess = a2; - onError = a3; - // falls through - } else { - params = a1; - data = a2; - onSuccess = a3; - break; - } - // falls through - case 1: - if (isFunction(a1)) onSuccess = a1; - else if (hasBody) data = a1; - else params = a1; - break; - case 0: break; - default: - throw $resourceMinErr('badargs', - 'Expected up to 4 arguments [params, data, success, error], got {0} arguments', - arguments.length); - } - - var isInstanceCall = this instanceof Resource; - var value = isInstanceCall ? data : (action.isArray ? [] : new Resource(data)); - var httpConfig = {}; - var requestInterceptor = action.interceptor && action.interceptor.request || undefined; - var requestErrorInterceptor = action.interceptor && action.interceptor.requestError || - undefined; - var responseInterceptor = action.interceptor && action.interceptor.response || - defaultResponseInterceptor; - var responseErrorInterceptor = action.interceptor && action.interceptor.responseError || - $q.reject; - var successCallback = onSuccess ? function(val) { - onSuccess(val, response.headers, response.status, response.statusText); - } : undefined; - var errorCallback = onError || undefined; - var timeoutDeferred; - var numericTimeoutPromise; - var response; - - forEach(action, function(value, key) { - switch (key) { - default: - httpConfig[key] = copy(value); - break; - case 'params': - case 'isArray': - case 'interceptor': - case 'cancellable': - break; - } - }); - - if (!isInstanceCall && cancellable) { - timeoutDeferred = $q.defer(); - httpConfig.timeout = timeoutDeferred.promise; - - if (numericTimeout) { - numericTimeoutPromise = $timeout(timeoutDeferred.resolve, numericTimeout); - } - } - - if (hasBody) httpConfig.data = data; - route.setUrlParams(httpConfig, - extend({}, extractParams(data, action.params || {}), params), - action.url); - - // Start the promise chain - var promise = $q. - resolve(httpConfig). - then(requestInterceptor). - catch(requestErrorInterceptor). - then($http); - - promise = promise.then(function(resp) { - var data = resp.data; - - if (data) { - // Need to convert action.isArray to boolean in case it is undefined - if (isArray(data) !== (!!action.isArray)) { - throw $resourceMinErr('badcfg', - 'Error in resource configuration for action `{0}`. Expected response to ' + - 'contain an {1} but got an {2} (Request: {3} {4})', name, action.isArray ? 'array' : 'object', - isArray(data) ? 'array' : 'object', httpConfig.method, httpConfig.url); - } - if (action.isArray) { - value.length = 0; - forEach(data, function(item) { - if (typeof item === 'object') { - value.push(new Resource(item)); - } else { - // Valid JSON values may be string literals, and these should not be converted - // into objects. These items will not have access to the Resource prototype - // methods, but unfortunately there - value.push(item); - } - }); - } else { - var promise = value.$promise; // Save the promise - shallowClearAndCopy(data, value); - value.$promise = promise; // Restore the promise - } - } - - resp.resource = value; - response = resp; - return responseInterceptor(resp); - }, function(rejectionOrResponse) { - rejectionOrResponse.resource = value; - response = rejectionOrResponse; - return responseErrorInterceptor(rejectionOrResponse); - }); - - promise = promise['finally'](function() { - value.$resolved = true; - if (!isInstanceCall && cancellable) { - value.$cancelRequest = noop; - $timeout.cancel(numericTimeoutPromise); - timeoutDeferred = numericTimeoutPromise = httpConfig.timeout = null; - } - }); - - // Run the `success`/`error` callbacks, but do not let them affect the returned promise. - promise.then(successCallback, errorCallback); - - if (!isInstanceCall) { - // we are creating instance / collection - // - set the initial promise - // - return the instance / collection - value.$promise = promise; - value.$resolved = false; - if (cancellable) value.$cancelRequest = cancelRequest; - - return value; - } - - // instance call - return promise; - - function cancelRequest(value) { - promise.catch(noop); - if (timeoutDeferred !== null) { - timeoutDeferred.resolve(value); - } - } - }; - - - Resource.prototype['$' + name] = function(params, success, error) { - if (isFunction(params)) { - error = success; success = params; params = {}; - } - var result = Resource[name].call(this, params, this, success, error); - return result.$promise || result; - }; - }); - - return Resource; - } - - return resourceFactory; - }]; - }); - - -})(window, window.angular); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.min.js deleted file mode 100644 index 2679cade..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-resource/angular-resource.min.js +++ /dev/null @@ -1,15 +0,0 @@ -/* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(T,a){'use strict';function M(m,f){f=f||{};a.forEach(f,function(a,d){delete f[d]});for(var d in m)!m.hasOwnProperty(d)||"$"===d.charAt(0)&&"$"===d.charAt(1)||(f[d]=m[d]);return f}var B=a.$$minErr("$resource"),H=/^(\.[a-zA-Z_$@][0-9a-zA-Z_$@]*)+$/;a.module("ngResource",["ng"]).info({angularVersion:"1.8.0"}).provider("$resource",function(){var m=/^https?:\/\/\[[^\]]*][^/]*/,f=this;this.defaults={stripTrailingSlashes:!0,cancellable:!1,actions:{get:{method:"GET"},save:{method:"POST"},query:{method:"GET", -isArray:!0},remove:{method:"DELETE"},"delete":{method:"DELETE"}}};this.$get=["$http","$log","$q","$timeout",function(d,F,G,N){function C(a,d){this.template=a;this.defaults=n({},f.defaults,d);this.urlParams={}}var O=a.noop,r=a.forEach,n=a.extend,R=a.copy,P=a.isArray,D=a.isDefined,x=a.isFunction,I=a.isNumber,y=a.$$encodeUriQuery,S=a.$$encodeUriSegment;C.prototype={setUrlParams:function(a,d,f){var g=this,c=f||g.template,s,h,n="",b=g.urlParams=Object.create(null);r(c.split(/\W/),function(a){if("hasOwnProperty"=== -a)throw B("badname");!/^\d+$/.test(a)&&a&&(new RegExp("(^|[^\\\\]):"+a+"(\\W|$)")).test(c)&&(b[a]={isQueryParamValue:(new RegExp("\\?.*=:"+a+"(?:\\W|$)")).test(c)})});c=c.replace(/\\:/g,":");c=c.replace(m,function(b){n=b;return""});d=d||{};r(g.urlParams,function(b,a){s=d.hasOwnProperty(a)?d[a]:g.defaults[a];D(s)&&null!==s?(h=b.isQueryParamValue?y(s,!0):S(s),c=c.replace(new RegExp(":"+a+"(\\W|$)","g"),function(b,a){return h+a})):c=c.replace(new RegExp("(/?):"+a+"(\\W|$)","g"),function(b,a,e){return"/"=== -e.charAt(0)?e:a+e})});g.defaults.stripTrailingSlashes&&(c=c.replace(/\/+$/,"")||"/");c=c.replace(/\/\.(?=\w+($|\?))/,".");a.url=n+c.replace(/\/(\\|%5C)\./,"/.");r(d,function(b,c){g.urlParams[c]||(a.params=a.params||{},a.params[c]=b)})}};return function(m,y,z,g){function c(b,c){var d={};c=n({},y,c);r(c,function(c,f){x(c)&&(c=c(b));var e;if(c&&c.charAt&&"@"===c.charAt(0)){e=b;var k=c.substr(1);if(null==k||""===k||"hasOwnProperty"===k||!H.test("."+k))throw B("badmember",k);for(var k=k.split("."),h=0, -n=k.length;h` to your `index.html`: - -```html - -``` - -Then add `ngRoute` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngRoute']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngRoute). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.js b/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.js deleted file mode 100644 index 09b82d35..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.js +++ /dev/null @@ -1,1266 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular) {'use strict'; - -/* global shallowCopy: true */ - -/** - * Creates a shallow copy of an object, an array or a primitive. - * - * Assumes that there are no proto properties for objects. - */ -function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; - - for (var i = 0, ii = src.length; i < ii; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - } - - return dst || src; -} - -/* global routeToRegExp: true */ - -/** - * @param {string} path - The path to parse. (It is assumed to have query and hash stripped off.) - * @param {Object} opts - Options. - * @return {Object} - An object containing an array of path parameter names (`keys`) and a regular - * expression (`regexp`) that can be used to identify a matching URL and extract the path - * parameter values. - * - * @description - * Parses the given path, extracting path parameter names and a regular expression to match URLs. - * - * Originally inspired by `pathRexp` in `visionmedia/express/lib/utils.js`. - */ -function routeToRegExp(path, opts) { - var keys = []; - - var pattern = path - .replace(/([().])/g, '\\$1') - .replace(/(\/)?:(\w+)(\*\?|[?*])?/g, function(_, slash, key, option) { - var optional = option === '?' || option === '*?'; - var star = option === '*' || option === '*?'; - keys.push({name: key, optional: optional}); - slash = slash || ''; - return ( - (optional ? '(?:' + slash : slash + '(?:') + - (star ? '(.+?)' : '([^/]+)') + - (optional ? '?)?' : ')') - ); - }) - .replace(/([/$*])/g, '\\$1'); - - if (opts.ignoreTrailingSlashes) { - pattern = pattern.replace(/\/+$/, '') + '/*'; - } - - return { - keys: keys, - regexp: new RegExp( - '^' + pattern + '(?:[?#]|$)', - opts.caseInsensitiveMatch ? 'i' : '' - ) - }; -} - -/* global routeToRegExp: false */ -/* global shallowCopy: false */ - -// `isArray` and `isObject` are necessary for `shallowCopy()` (included via `src/shallowCopy.js`). -// They are initialized inside the `$RouteProvider`, to ensure `window.angular` is available. -var isArray; -var isObject; -var isDefined; -var noop; - -/** - * @ngdoc module - * @name ngRoute - * @description - * - * The `ngRoute` module provides routing and deeplinking services and directives for AngularJS apps. - * - * ## Example - * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`. - * - */ -/* global -ngRouteModule */ -var ngRouteModule = angular. - module('ngRoute', []). - info({ angularVersion: '1.8.0' }). - provider('$route', $RouteProvider). - // Ensure `$route` will be instantiated in time to capture the initial `$locationChangeSuccess` - // event (unless explicitly disabled). This is necessary in case `ngView` is included in an - // asynchronously loaded template. - run(instantiateRoute); -var $routeMinErr = angular.$$minErr('ngRoute'); -var isEagerInstantiationEnabled; - - -/** - * @ngdoc provider - * @name $routeProvider - * @this - * - * @description - * - * Used for configuring routes. - * - * ## Example - * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`. - * - * ## Dependencies - * Requires the {@link ngRoute `ngRoute`} module to be installed. - */ -function $RouteProvider() { - isArray = angular.isArray; - isObject = angular.isObject; - isDefined = angular.isDefined; - noop = angular.noop; - - function inherit(parent, extra) { - return angular.extend(Object.create(parent), extra); - } - - var routes = {}; - - /** - * @ngdoc method - * @name $routeProvider#when - * - * @param {string} path Route path (matched against `$location.path`). If `$location.path` - * contains redundant trailing slash or is missing one, the route will still match and the - * `$location.path` will be updated to add or drop the trailing slash to exactly match the - * route definition. - * - * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up - * to the next slash are matched and stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain named groups starting with a colon and ending with a star: - * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name` - * when the route matches. - * * `path` can contain optional named groups with a question mark: e.g.`:name?`. - * - * For example, routes like `/color/:color/largecode/:largecode*\/edit` will match - * `/color/brown/largecode/code/with/slashes/edit` and extract: - * - * * `color: brown` - * * `largecode: code/with/slashes`. - * - * - * @param {Object} route Mapping information to be assigned to `$route.current` on route - * match. - * - * Object properties: - * - * - `controller` – `{(string|Function)=}` – Controller fn that should be associated with - * newly created scope or the name of a {@link angular.Module#controller registered - * controller} if passed as a string. - * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller. - * If present, the controller will be published to scope under the `controllerAs` name. - * - `template` – `{(string|Function)=}` – html template as a string or a function that - * returns an html template as a string which should be used by {@link - * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives. - * This property takes precedence over `templateUrl`. - * - * If `template` is a function, it will be called with the following parameters: - * - * - `{Array.}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * One of `template` or `templateUrl` is required. - * - * - `templateUrl` – `{(string|Function)=}` – path or function that returns a path to an html - * template that should be used by {@link ngRoute.directive:ngView ngView}. - * - * If `templateUrl` is a function, it will be called with the following parameters: - * - * - `{Array.}` - route parameters extracted from the current - * `$location.path()` by applying the current route - * - * One of `templateUrl` or `template` is required. - * - * - `resolve` - `{Object.=}` - An optional map of dependencies which should - * be injected into the controller. If any of these dependencies are promises, the router - * will wait for them all to be resolved or one to be rejected before the controller is - * instantiated. - * If all the promises are resolved successfully, the values of the resolved promises are - * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is - * fired. If any of the promises are rejected the - * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired. - * For easier access to the resolved dependencies from the template, the `resolve` map will - * be available on the scope of the route, under `$resolve` (by default) or a custom name - * specified by the `resolveAs` property (see below). This can be particularly useful, when - * working with {@link angular.Module#component components} as route templates.
      - *
      - * **Note:** If your scope already contains a property with this name, it will be hidden - * or overwritten. Make sure, you specify an appropriate name for this property, that - * does not collide with other properties on the scope. - *
      - * The map object is: - * - * - `key` – `{string}`: a name of a dependency to be injected into the controller. - * - `factory` - `{string|Function}`: If `string` then it is an alias for a service. - * Otherwise if function, then it is {@link auto.$injector#invoke injected} - * and the return value is treated as the dependency. If the result is a promise, it is - * resolved before its value is injected into the controller. Be aware that - * `ngRoute.$routeParams` will still refer to the previous route within these resolve - * functions. Use `$route.current.params` to access the new route parameters, instead. - * - * - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on - * the scope of the route. If omitted, defaults to `$resolve`. - * - * - `redirectTo` – `{(string|Function)=}` – value to update - * {@link ng.$location $location} path with and trigger route redirection. - * - * If `redirectTo` is a function, it will be called with the following parameters: - * - * - `{Object.}` - route parameters extracted from the current - * `$location.path()` by applying the current route templateUrl. - * - `{string}` - current `$location.path()` - * - `{Object}` - current `$location.search()` - * - * The custom `redirectTo` function is expected to return a string which will be used - * to update `$location.url()`. If the function throws an error, no further processing will - * take place and the {@link ngRoute.$route#$routeChangeError $routeChangeError} event will - * be fired. - * - * Routes that specify `redirectTo` will not have their controllers, template functions - * or resolves called, the `$location` will be changed to the redirect url and route - * processing will stop. The exception to this is if the `redirectTo` is a function that - * returns `undefined`. In this case the route transition occurs as though there was no - * redirection. - * - * - `resolveRedirectTo` – `{Function=}` – a function that will (eventually) return the value - * to update {@link ng.$location $location} URL with and trigger route redirection. In - * contrast to `redirectTo`, dependencies can be injected into `resolveRedirectTo` and the - * return value can be either a string or a promise that will be resolved to a string. - * - * Similar to `redirectTo`, if the return value is `undefined` (or a promise that gets - * resolved to `undefined`), no redirection takes place and the route transition occurs as - * though there was no redirection. - * - * If the function throws an error or the returned promise gets rejected, no further - * processing will take place and the - * {@link ngRoute.$route#$routeChangeError $routeChangeError} event will be fired. - * - * `redirectTo` takes precedence over `resolveRedirectTo`, so specifying both on the same - * route definition, will cause the latter to be ignored. - * - * - `[reloadOnUrl=true]` - `{boolean=}` - reload route when any part of the URL changes - * (including the path) even if the new URL maps to the same route. - * - * If the option is set to `false` and the URL in the browser changes, but the new URL maps - * to the same route, then a `$routeUpdate` event is broadcasted on the root scope (without - * reloading the route). - * - * - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()` - * or `$location.hash()` changes. - * - * If the option is set to `false` and the URL in the browser changes, then a `$routeUpdate` - * event is broadcasted on the root scope (without reloading the route). - * - *
      - * **Note:** This option has no effect if `reloadOnUrl` is set to `false`. - *
      - * - * - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive - * - * If the option is set to `true`, then the particular route can be matched without being - * case sensitive - * - * @returns {Object} self - * - * @description - * Adds a new route definition to the `$route` service. - */ - this.when = function(path, route) { - //copy original route object to preserve params inherited from proto chain - var routeCopy = shallowCopy(route); - if (angular.isUndefined(routeCopy.reloadOnUrl)) { - routeCopy.reloadOnUrl = true; - } - if (angular.isUndefined(routeCopy.reloadOnSearch)) { - routeCopy.reloadOnSearch = true; - } - if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) { - routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch; - } - routes[path] = angular.extend( - routeCopy, - {originalPath: path}, - path && routeToRegExp(path, routeCopy) - ); - - // create redirection for trailing slashes - if (path) { - var redirectPath = (path[path.length - 1] === '/') - ? path.substr(0, path.length - 1) - : path + '/'; - - routes[redirectPath] = angular.extend( - {originalPath: path, redirectTo: path}, - routeToRegExp(redirectPath, routeCopy) - ); - } - - return this; - }; - - /** - * @ngdoc property - * @name $routeProvider#caseInsensitiveMatch - * @description - * - * A boolean property indicating if routes defined - * using this provider should be matched using a case insensitive - * algorithm. Defaults to `false`. - */ - this.caseInsensitiveMatch = false; - - /** - * @ngdoc method - * @name $routeProvider#otherwise - * - * @description - * Sets route definition that will be used on route change when no other route definition - * is matched. - * - * @param {Object|string} params Mapping information to be assigned to `$route.current`. - * If called with a string, the value maps to `redirectTo`. - * @returns {Object} self - */ - this.otherwise = function(params) { - if (typeof params === 'string') { - params = {redirectTo: params}; - } - this.when(null, params); - return this; - }; - - /** - * @ngdoc method - * @name $routeProvider#eagerInstantiationEnabled - * @kind function - * - * @description - * Call this method as a setter to enable/disable eager instantiation of the - * {@link ngRoute.$route $route} service upon application bootstrap. You can also call it as a - * getter (i.e. without any arguments) to get the current value of the - * `eagerInstantiationEnabled` flag. - * - * Instantiating `$route` early is necessary for capturing the initial - * {@link ng.$location#$locationChangeStart $locationChangeStart} event and navigating to the - * appropriate route. Usually, `$route` is instantiated in time by the - * {@link ngRoute.ngView ngView} directive. Yet, in cases where `ngView` is included in an - * asynchronously loaded template (e.g. in another directive's template), the directive factory - * might not be called soon enough for `$route` to be instantiated _before_ the initial - * `$locationChangeSuccess` event is fired. Eager instantiation ensures that `$route` is always - * instantiated in time, regardless of when `ngView` will be loaded. - * - * The default value is true. - * - * **Note**:
      - * You may want to disable the default behavior when unit-testing modules that depend on - * `ngRoute`, in order to avoid an unexpected request for the default route's template. - * - * @param {boolean=} enabled - If provided, update the internal `eagerInstantiationEnabled` flag. - * - * @returns {*} The current value of the `eagerInstantiationEnabled` flag if used as a getter or - * itself (for chaining) if used as a setter. - */ - isEagerInstantiationEnabled = true; - this.eagerInstantiationEnabled = function eagerInstantiationEnabled(enabled) { - if (isDefined(enabled)) { - isEagerInstantiationEnabled = enabled; - return this; - } - - return isEagerInstantiationEnabled; - }; - - - this.$get = ['$rootScope', - '$location', - '$routeParams', - '$q', - '$injector', - '$templateRequest', - '$sce', - '$browser', - function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce, $browser) { - - /** - * @ngdoc service - * @name $route - * @requires $location - * @requires $routeParams - * - * @property {Object} current Reference to the current route definition. - * The route definition contains: - * - * - `controller`: The controller constructor as defined in the route definition. - * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for - * controller instantiation. The `locals` contain - * the resolved values of the `resolve` map. Additionally the `locals` also contain: - * - * - `$scope` - The current route scope. - * - `$template` - The current route template HTML. - * - * The `locals` will be assigned to the route scope's `$resolve` property. You can override - * the property name, using `resolveAs` in the route definition. See - * {@link ngRoute.$routeProvider $routeProvider} for more info. - * - * @property {Object} routes Object with all route configuration Objects as its properties. - * - * @description - * `$route` is used for deep-linking URLs to controllers and views (HTML partials). - * It watches `$location.url()` and tries to map the path to an existing route definition. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API. - * - * The `$route` service is typically used in conjunction with the - * {@link ngRoute.directive:ngView `ngView`} directive and the - * {@link ngRoute.$routeParams `$routeParams`} service. - * - * @example - * This example shows how changing the URL hash causes the `$route` to match a route against the - * URL, and the `ngView` pulls in the partial. - * - * - * - *
      - * Choose: - * Moby | - * Moby: Ch1 | - * Gatsby | - * Gatsby: Ch4 | - * Scarlet Letter
      - * - *
      - * - *
      - * - *
      $location.path() = {{$location.path()}}
      - *
      $route.current.templateUrl = {{$route.current.templateUrl}}
      - *
      $route.current.params = {{$route.current.params}}
      - *
      $route.current.scope.name = {{$route.current.scope.name}}
      - *
      $routeParams = {{$routeParams}}
      - *
      - *
      - * - * - * controller: {{name}}
      - * Book Id: {{params.bookId}}
      - *
      - * - * - * controller: {{name}}
      - * Book Id: {{params.bookId}}
      - * Chapter Id: {{params.chapterId}} - *
      - * - * - * angular.module('ngRouteExample', ['ngRoute']) - * - * .controller('MainController', function($scope, $route, $routeParams, $location) { - * $scope.$route = $route; - * $scope.$location = $location; - * $scope.$routeParams = $routeParams; - * }) - * - * .controller('BookController', function($scope, $routeParams) { - * $scope.name = 'BookController'; - * $scope.params = $routeParams; - * }) - * - * .controller('ChapterController', function($scope, $routeParams) { - * $scope.name = 'ChapterController'; - * $scope.params = $routeParams; - * }) - * - * .config(function($routeProvider, $locationProvider) { - * $routeProvider - * .when('/Book/:bookId', { - * templateUrl: 'book.html', - * controller: 'BookController', - * resolve: { - * // I will cause a 1 second delay - * delay: function($q, $timeout) { - * var delay = $q.defer(); - * $timeout(delay.resolve, 1000); - * return delay.promise; - * } - * } - * }) - * .when('/Book/:bookId/ch/:chapterId', { - * templateUrl: 'chapter.html', - * controller: 'ChapterController' - * }); - * - * // configure html5 to get links working on jsfiddle - * $locationProvider.html5Mode(true); - * }); - * - * - * - * - * it('should load and compile correct template', function() { - * element(by.linkText('Moby: Ch1')).click(); - * var content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller: ChapterController/); - * expect(content).toMatch(/Book Id: Moby/); - * expect(content).toMatch(/Chapter Id: 1/); - * - * element(by.partialLinkText('Scarlet')).click(); - * - * content = element(by.css('[ng-view]')).getText(); - * expect(content).toMatch(/controller: BookController/); - * expect(content).toMatch(/Book Id: Scarlet/); - * }); - * - *
      - */ - - /** - * @ngdoc event - * @name $route#$routeChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a route change. At this point the route services starts - * resolving all of the dependencies needed for the route change to occur. - * Typically this involves fetching the view template as well as any dependencies - * defined in `resolve` route property. Once all of the dependencies are resolved - * `$routeChangeSuccess` is fired. - * - * The route change (and the `$location` change that triggered it) can be prevented - * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} - * for more details about event object. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} next Future route information. - * @param {Route} current Current route information. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a route change has happened successfully. - * The `resolve` dependencies are now available in the `current.locals` property. - * - * {@link ngRoute.directive:ngView ngView} listens for the directive - * to instantiate the controller and render the view. - * - * @param {Object} angularEvent Synthetic event object. - * @param {Route} current Current route information. - * @param {Route|Undefined} previous Previous route information, or undefined if current is - * first route entered. - */ - - /** - * @ngdoc event - * @name $route#$routeChangeError - * @eventType broadcast on root scope - * @description - * Broadcasted if a redirection function fails or any redirection or resolve promises are - * rejected. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current route information. - * @param {Route} previous Previous route information. - * @param {Route} rejection The thrown error or the rejection reason of the promise. Usually - * the rejection reason is the error that caused the promise to get rejected. - */ - - /** - * @ngdoc event - * @name $route#$routeUpdate - * @eventType broadcast on root scope - * @description - * Broadcasted if the same instance of a route (including template, controller instance, - * resolved dependencies, etc.) is being reused. This can happen if either `reloadOnSearch` or - * `reloadOnUrl` has been set to `false`. - * - * @param {Object} angularEvent Synthetic event object - * @param {Route} current Current/previous route information. - */ - - var forceReload = false, - preparedRoute, - preparedRouteIsUpdateOnly, - $route = { - routes: routes, - - /** - * @ngdoc method - * @name $route#reload - * - * @description - * Causes `$route` service to reload the current route even if - * {@link ng.$location $location} hasn't changed. - * - * As a result of that, {@link ngRoute.directive:ngView ngView} - * creates new scope and reinstantiates the controller. - */ - reload: function() { - forceReload = true; - - var fakeLocationEvent = { - defaultPrevented: false, - preventDefault: function fakePreventDefault() { - this.defaultPrevented = true; - forceReload = false; - } - }; - - $rootScope.$evalAsync(function() { - prepareRoute(fakeLocationEvent); - if (!fakeLocationEvent.defaultPrevented) commitRoute(); - }); - }, - - /** - * @ngdoc method - * @name $route#updateParams - * - * @description - * Causes `$route` service to update the current URL, replacing - * current route parameters with those specified in `newParams`. - * Provided property names that match the route's path segment - * definitions will be interpolated into the location's path, while - * remaining properties will be treated as query params. - * - * @param {!Object} newParams mapping of URL parameter names to values - */ - updateParams: function(newParams) { - if (this.current && this.current.$$route) { - newParams = angular.extend({}, this.current.params, newParams); - $location.path(interpolate(this.current.$$route.originalPath, newParams)); - // interpolate modifies newParams, only query params are left - $location.search(newParams); - } else { - throw $routeMinErr('norout', 'Tried updating route with no current route'); - } - } - }; - - $rootScope.$on('$locationChangeStart', prepareRoute); - $rootScope.$on('$locationChangeSuccess', commitRoute); - - return $route; - - ///////////////////////////////////////////////////// - - /** - * @param on {string} current url - * @param route {Object} route regexp to match the url against - * @return {?Object} - * - * @description - * Check if the route matches the current url. - * - * Inspired by match in - * visionmedia/express/lib/router/router.js. - */ - function switchRouteMatcher(on, route) { - var keys = route.keys, - params = {}; - - if (!route.regexp) return null; - - var m = route.regexp.exec(on); - if (!m) return null; - - for (var i = 1, len = m.length; i < len; ++i) { - var key = keys[i - 1]; - - var val = m[i]; - - if (key && val) { - params[key.name] = val; - } - } - return params; - } - - function prepareRoute($locationEvent) { - var lastRoute = $route.current; - - preparedRoute = parseRoute(); - preparedRouteIsUpdateOnly = isNavigationUpdateOnly(preparedRoute, lastRoute); - - if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) { - if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) { - if ($locationEvent) { - $locationEvent.preventDefault(); - } - } - } - } - - function commitRoute() { - var lastRoute = $route.current; - var nextRoute = preparedRoute; - - if (preparedRouteIsUpdateOnly) { - lastRoute.params = nextRoute.params; - angular.copy(lastRoute.params, $routeParams); - $rootScope.$broadcast('$routeUpdate', lastRoute); - } else if (nextRoute || lastRoute) { - forceReload = false; - $route.current = nextRoute; - - var nextRoutePromise = $q.resolve(nextRoute); - - $browser.$$incOutstandingRequestCount('$route'); - - nextRoutePromise. - then(getRedirectionData). - then(handlePossibleRedirection). - then(function(keepProcessingRoute) { - return keepProcessingRoute && nextRoutePromise. - then(resolveLocals). - then(function(locals) { - // after route change - if (nextRoute === $route.current) { - if (nextRoute) { - nextRoute.locals = locals; - angular.copy(nextRoute.params, $routeParams); - } - $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute); - } - }); - }).catch(function(error) { - if (nextRoute === $route.current) { - $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error); - } - }).finally(function() { - // Because `commitRoute()` is called from a `$rootScope.$evalAsync` block (see - // `$locationWatch`), this `$$completeOutstandingRequest()` call will not cause - // `outstandingRequestCount` to hit zero. This is important in case we are redirecting - // to a new route which also requires some asynchronous work. - - $browser.$$completeOutstandingRequest(noop, '$route'); - }); - } - } - - function getRedirectionData(route) { - var data = { - route: route, - hasRedirection: false - }; - - if (route) { - if (route.redirectTo) { - if (angular.isString(route.redirectTo)) { - data.path = interpolate(route.redirectTo, route.params); - data.search = route.params; - data.hasRedirection = true; - } else { - var oldPath = $location.path(); - var oldSearch = $location.search(); - var newUrl = route.redirectTo(route.pathParams, oldPath, oldSearch); - - if (angular.isDefined(newUrl)) { - data.url = newUrl; - data.hasRedirection = true; - } - } - } else if (route.resolveRedirectTo) { - return $q. - resolve($injector.invoke(route.resolveRedirectTo)). - then(function(newUrl) { - if (angular.isDefined(newUrl)) { - data.url = newUrl; - data.hasRedirection = true; - } - - return data; - }); - } - } - - return data; - } - - function handlePossibleRedirection(data) { - var keepProcessingRoute = true; - - if (data.route !== $route.current) { - keepProcessingRoute = false; - } else if (data.hasRedirection) { - var oldUrl = $location.url(); - var newUrl = data.url; - - if (newUrl) { - $location. - url(newUrl). - replace(); - } else { - newUrl = $location. - path(data.path). - search(data.search). - replace(). - url(); - } - - if (newUrl !== oldUrl) { - // Exit out and don't process current next value, - // wait for next location change from redirect - keepProcessingRoute = false; - } - } - - return keepProcessingRoute; - } - - function resolveLocals(route) { - if (route) { - var locals = angular.extend({}, route.resolve); - angular.forEach(locals, function(value, key) { - locals[key] = angular.isString(value) ? - $injector.get(value) : - $injector.invoke(value, null, null, key); - }); - var template = getTemplateFor(route); - if (angular.isDefined(template)) { - locals['$template'] = template; - } - return $q.all(locals); - } - } - - function getTemplateFor(route) { - var template, templateUrl; - if (angular.isDefined(template = route.template)) { - if (angular.isFunction(template)) { - template = template(route.params); - } - } else if (angular.isDefined(templateUrl = route.templateUrl)) { - if (angular.isFunction(templateUrl)) { - templateUrl = templateUrl(route.params); - } - if (angular.isDefined(templateUrl)) { - route.loadedTemplateUrl = $sce.valueOf(templateUrl); - template = $templateRequest(templateUrl); - } - } - return template; - } - - /** - * @returns {Object} the current active route, by matching it against the URL - */ - function parseRoute() { - // Match a route - var params, match; - angular.forEach(routes, function(route, path) { - if (!match && (params = switchRouteMatcher($location.path(), route))) { - match = inherit(route, { - params: angular.extend({}, $location.search(), params), - pathParams: params}); - match.$$route = route; - } - }); - // No route matched; fallback to "otherwise" route - return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}}); - } - - /** - * @param {Object} newRoute - The new route configuration (as returned by `parseRoute()`). - * @param {Object} oldRoute - The previous route configuration (as returned by `parseRoute()`). - * @returns {boolean} Whether this is an "update-only" navigation, i.e. the URL maps to the same - * route and it can be reused (based on the config and the type of change). - */ - function isNavigationUpdateOnly(newRoute, oldRoute) { - // IF this is not a forced reload - return !forceReload - // AND both `newRoute`/`oldRoute` are defined - && newRoute && oldRoute - // AND they map to the same Route Definition Object - && (newRoute.$$route === oldRoute.$$route) - // AND `reloadOnUrl` is disabled - && (!newRoute.reloadOnUrl - // OR `reloadOnSearch` is disabled - || (!newRoute.reloadOnSearch - // AND both routes have the same path params - && angular.equals(newRoute.pathParams, oldRoute.pathParams) - ) - ); - } - - /** - * @returns {string} interpolation of the redirect path with the parameters - */ - function interpolate(string, params) { - var result = []; - angular.forEach((string || '').split(':'), function(segment, i) { - if (i === 0) { - result.push(segment); - } else { - var segmentMatch = segment.match(/(\w+)(?:[?*])?(.*)/); - var key = segmentMatch[1]; - result.push(params[key]); - result.push(segmentMatch[2] || ''); - delete params[key]; - } - }); - return result.join(''); - } - }]; -} - -instantiateRoute.$inject = ['$injector']; -function instantiateRoute($injector) { - if (isEagerInstantiationEnabled) { - // Instantiate `$route` - $injector.get('$route'); - } -} - -ngRouteModule.provider('$routeParams', $RouteParamsProvider); - - -/** - * @ngdoc service - * @name $routeParams - * @requires $route - * @this - * - * @description - * The `$routeParams` service allows you to retrieve the current set of route parameters. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * The route parameters are a combination of {@link ng.$location `$location`}'s - * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}. - * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched. - * - * In case of parameter name collision, `path` params take precedence over `search` params. - * - * The service guarantees that the identity of the `$routeParams` object will remain unchanged - * (but its properties will likely change) even when a route change occurs. - * - * Note that the `$routeParams` are only updated *after* a route change completes successfully. - * This means that you cannot rely on `$routeParams` being correct in route resolve functions. - * Instead you can use `$route.current.params` to access the new route's parameters. - * - * @example - * ```js - * // Given: - * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby - * // Route: /Chapter/:chapterId/Section/:sectionId - * // - * // Then - * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'} - * ``` - */ -function $RouteParamsProvider() { - this.$get = function() { return {}; }; -} - -ngRouteModule.directive('ngView', ngViewFactory); -ngRouteModule.directive('ngView', ngViewFillContentFactory); - - -/** - * @ngdoc directive - * @name ngView - * @restrict ECA - * - * @description - * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by - * including the rendered template of the current route into the main layout (`index.html`) file. - * Every time the current route changes, the included view changes with it according to the - * configuration of the `$route` service. - * - * Requires the {@link ngRoute `ngRoute`} module to be installed. - * - * @animations - * | Animation | Occurs | - * |----------------------------------|-------------------------------------| - * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM | - * | {@link ng.$animate#leave leave} | when the old element is removed from to the DOM | - * - * The enter and leave animation occur concurrently. - * - * @scope - * @priority 400 - * @param {string=} onload Expression to evaluate whenever the view updates. - * - * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll - * $anchorScroll} to scroll the viewport after the view is updated. - * - * - If the attribute is not set, disable scrolling. - * - If the attribute is set without value, enable scrolling. - * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated - * as an expression yields a truthy value. - * @example - - -
      - Choose: - Moby | - Moby: Ch1 | - Gatsby | - Gatsby: Ch4 | - Scarlet Letter
      - -
      -
      -
      -
      - -
      $location.path() = {{main.$location.path()}}
      -
      $route.current.templateUrl = {{main.$route.current.templateUrl}}
      -
      $route.current.params = {{main.$route.current.params}}
      -
      $routeParams = {{main.$routeParams}}
      -
      -
      - - -
      - controller: {{book.name}}
      - Book Id: {{book.params.bookId}}
      -
      -
      - - -
      - controller: {{chapter.name}}
      - Book Id: {{chapter.params.bookId}}
      - Chapter Id: {{chapter.params.chapterId}} -
      -
      - - - .view-animate-container { - position:relative; - height:100px!important; - background:white; - border:1px solid black; - height:40px; - overflow:hidden; - } - - .view-animate { - padding:10px; - } - - .view-animate.ng-enter, .view-animate.ng-leave { - transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s; - - display:block; - width:100%; - border-left:1px solid black; - - position:absolute; - top:0; - left:0; - right:0; - bottom:0; - padding:10px; - } - - .view-animate.ng-enter { - left:100%; - } - .view-animate.ng-enter.ng-enter-active { - left:0; - } - .view-animate.ng-leave.ng-leave-active { - left:-100%; - } - - - - angular.module('ngViewExample', ['ngRoute', 'ngAnimate']) - .config(['$routeProvider', '$locationProvider', - function($routeProvider, $locationProvider) { - $routeProvider - .when('/Book/:bookId', { - templateUrl: 'book.html', - controller: 'BookCtrl', - controllerAs: 'book' - }) - .when('/Book/:bookId/ch/:chapterId', { - templateUrl: 'chapter.html', - controller: 'ChapterCtrl', - controllerAs: 'chapter' - }); - - $locationProvider.html5Mode(true); - }]) - .controller('MainCtrl', ['$route', '$routeParams', '$location', - function MainCtrl($route, $routeParams, $location) { - this.$route = $route; - this.$location = $location; - this.$routeParams = $routeParams; - }]) - .controller('BookCtrl', ['$routeParams', function BookCtrl($routeParams) { - this.name = 'BookCtrl'; - this.params = $routeParams; - }]) - .controller('ChapterCtrl', ['$routeParams', function ChapterCtrl($routeParams) { - this.name = 'ChapterCtrl'; - this.params = $routeParams; - }]); - - - - - it('should load and compile correct template', function() { - element(by.linkText('Moby: Ch1')).click(); - var content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller: ChapterCtrl/); - expect(content).toMatch(/Book Id: Moby/); - expect(content).toMatch(/Chapter Id: 1/); - - element(by.partialLinkText('Scarlet')).click(); - - content = element(by.css('[ng-view]')).getText(); - expect(content).toMatch(/controller: BookCtrl/); - expect(content).toMatch(/Book Id: Scarlet/); - }); - -
      - */ - - -/** - * @ngdoc event - * @name ngView#$viewContentLoaded - * @eventType emit on the current ngView scope - * @description - * Emitted every time the ngView content is reloaded. - */ -ngViewFactory.$inject = ['$route', '$anchorScroll', '$animate']; -function ngViewFactory($route, $anchorScroll, $animate) { - return { - restrict: 'ECA', - terminal: true, - priority: 400, - transclude: 'element', - link: function(scope, $element, attr, ctrl, $transclude) { - var currentScope, - currentElement, - previousLeaveAnimation, - autoScrollExp = attr.autoscroll, - onloadExp = attr.onload || ''; - - scope.$on('$routeChangeSuccess', update); - update(); - - function cleanupLastView() { - if (previousLeaveAnimation) { - $animate.cancel(previousLeaveAnimation); - previousLeaveAnimation = null; - } - - if (currentScope) { - currentScope.$destroy(); - currentScope = null; - } - if (currentElement) { - previousLeaveAnimation = $animate.leave(currentElement); - previousLeaveAnimation.done(function(response) { - if (response !== false) previousLeaveAnimation = null; - }); - currentElement = null; - } - } - - function update() { - var locals = $route.current && $route.current.locals, - template = locals && locals.$template; - - if (angular.isDefined(template)) { - var newScope = scope.$new(); - var current = $route.current; - - // Note: This will also link all children of ng-view that were contained in the original - // html. If that content contains controllers, ... they could pollute/change the scope. - // However, using ng-view on an element with additional content does not make sense... - // Note: We can't remove them in the cloneAttchFn of $transclude as that - // function is called before linking the content, which would apply child - // directives to non existing elements. - var clone = $transclude(newScope, function(clone) { - $animate.enter(clone, null, currentElement || $element).done(function onNgViewEnter(response) { - if (response !== false && angular.isDefined(autoScrollExp) - && (!autoScrollExp || scope.$eval(autoScrollExp))) { - $anchorScroll(); - } - }); - cleanupLastView(); - }); - - currentElement = clone; - currentScope = current.scope = newScope; - currentScope.$emit('$viewContentLoaded'); - currentScope.$eval(onloadExp); - } else { - cleanupLastView(); - } - } - } - }; -} - -// This directive is called during the $transclude call of the first `ngView` directive. -// It will replace and compile the content of the element with the loaded template. -// We need this directive so that the element content is already filled when -// the link function of another directive on the same element as ngView -// is called. -ngViewFillContentFactory.$inject = ['$compile', '$controller', '$route']; -function ngViewFillContentFactory($compile, $controller, $route) { - return { - restrict: 'ECA', - priority: -400, - link: function(scope, $element) { - var current = $route.current, - locals = current.locals; - - $element.html(locals.$template); - - var link = $compile($element.contents()); - - if (current.controller) { - locals.$scope = scope; - var controller = $controller(current.controller, locals); - if (current.controllerAs) { - scope[current.controllerAs] = controller; - } - $element.data('$ngControllerController', controller); - $element.children().data('$ngControllerController', controller); - } - scope[current.resolveAs || '$resolve'] = locals; - - link(scope); - } - }; -} - - -})(window, window.angular); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.min.js deleted file mode 100644 index 567eb157..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-route/angular-route.min.js +++ /dev/null @@ -1,17 +0,0 @@ -/* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(I,b){'use strict';function z(b,h){var d=[],c=b.replace(/([().])/g,"\\$1").replace(/(\/)?:(\w+)(\*\?|[?*])?/g,function(b,c,h,k){b="?"===k||"*?"===k;k="*"===k||"*?"===k;d.push({name:h,optional:b});c=c||"";return(b?"(?:"+c:c+"(?:")+(k?"(.+?)":"([^/]+)")+(b?"?)?":")")}).replace(/([/$*])/g,"\\$1");h.ignoreTrailingSlashes&&(c=c.replace(/\/+$/,"")+"/*");return{keys:d,regexp:new RegExp("^"+c+"(?:[?#]|$)",h.caseInsensitiveMatch?"i":"")}}function A(b){p&&b.get("$route")}function v(u,h,d){return{restrict:"ECA", -terminal:!0,priority:400,transclude:"element",link:function(c,f,g,l,k){function q(){r&&(d.cancel(r),r=null);m&&(m.$destroy(),m=null);s&&(r=d.leave(s),r.done(function(b){!1!==b&&(r=null)}),s=null)}function C(){var g=u.current&&u.current.locals;if(b.isDefined(g&&g.$template)){var g=c.$new(),l=u.current;s=k(g,function(g){d.enter(g,null,s||f).done(function(d){!1===d||!b.isDefined(w)||w&&!c.$eval(w)||h()});q()});m=l.scope=g;m.$emit("$viewContentLoaded");m.$eval(p)}else q()}var m,s,r,w=g.autoscroll,p=g.onload|| -"";c.$on("$routeChangeSuccess",C);C()}}}function x(b,h,d){return{restrict:"ECA",priority:-400,link:function(c,f){var g=d.current,l=g.locals;f.html(l.$template);var k=b(f.contents());if(g.controller){l.$scope=c;var q=h(g.controller,l);g.controllerAs&&(c[g.controllerAs]=q);f.data("$ngControllerController",q);f.children().data("$ngControllerController",q)}c[g.resolveAs||"$resolve"]=l;k(c)}}}var D,E,F,G,y=b.module("ngRoute",[]).info({angularVersion:"1.8.0"}).provider("$route",function(){function u(d, -c){return b.extend(Object.create(d),c)}D=b.isArray;E=b.isObject;F=b.isDefined;G=b.noop;var h={};this.when=function(d,c){var f;f=void 0;if(D(c)){f=f||[];for(var g=0,l=c.length;g` to your `index.html`: - -```html - -``` - -Then add `ngSanitize` as a dependency for your app: - -```javascript -angular.module('myApp', ['ngSanitize']); -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/api/ngSanitize). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.js b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.js deleted file mode 100644 index 87d18362..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.js +++ /dev/null @@ -1,913 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window, angular) {'use strict'; - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -var $sanitizeMinErr = angular.$$minErr('$sanitize'); -var bind; -var extend; -var forEach; -var isArray; -var isDefined; -var lowercase; -var noop; -var nodeContains; -var htmlParser; -var htmlSanitizeWriter; - -/** - * @ngdoc module - * @name ngSanitize - * @description - * - * The `ngSanitize` module provides functionality to sanitize HTML. - * - * See {@link ngSanitize.$sanitize `$sanitize`} for usage. - */ - -/** - * @ngdoc service - * @name $sanitize - * @kind function - * - * @description - * Sanitizes an html string by stripping all potentially dangerous tokens. - * - * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a whitelist) are - * then serialized back to a properly escaped HTML string. This means that no unsafe input can make - * it into the returned string. - * - * The whitelist for URL sanitization of attribute values is configured using the functions - * `aHrefSanitizationWhitelist` and `imgSrcSanitizationWhitelist` of {@link $compileProvider}. - * - * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}. - * - * @param {string} html HTML input. - * @returns {string} Sanitized HTML. - * - * @example - - - -
      - Snippet: - - - - - - - - - - - - - - - - - - - - - - - - - -
      DirectiveHowSourceRendered
      ng-bind-htmlAutomatically uses $sanitize
      <div ng-bind-html="snippet">
      </div>
      ng-bind-htmlBypass $sanitize by explicitly trusting the dangerous value -
      <div ng-bind-html="deliberatelyTrustDangerousSnippet()">
      -</div>
      -
      ng-bindAutomatically escapes
      <div ng-bind="snippet">
      </div>
      -
      -
      - - it('should sanitize the html snippet by default', function() { - expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). - toBe('

      an html\nclick here\nsnippet

      '); - }); - - it('should inline raw snippet if bound to a trusted value', function() { - expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')). - toBe("

      an html\n" + - "click here\n" + - "snippet

      "); - }); - - it('should escape snippet without any filter', function() { - expect(element(by.css('#bind-default div')).getAttribute('innerHTML')). - toBe("<p style=\"color:blue\">an html\n" + - "<em onmouseover=\"this.textContent='PWN3D!'\">click here</em>\n" + - "snippet</p>"); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new text'); - expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')). - toBe('new text'); - expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe( - 'new text'); - expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe( - "new <b onclick=\"alert(1)\">text</b>"); - }); -
      -
      - */ - - -/** - * @ngdoc provider - * @name $sanitizeProvider - * @this - * - * @description - * Creates and configures {@link $sanitize} instance. - */ -function $SanitizeProvider() { - var hasBeenInstantiated = false; - var svgEnabled = false; - - this.$get = ['$$sanitizeUri', function($$sanitizeUri) { - hasBeenInstantiated = true; - if (svgEnabled) { - extend(validElements, svgElements); - } - return function(html) { - var buf = []; - htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) { - return !/^unsafe:/.test($$sanitizeUri(uri, isImage)); - })); - return buf.join(''); - }; - }]; - - - /** - * @ngdoc method - * @name $sanitizeProvider#enableSvg - * @kind function - * - * @description - * Enables a subset of svg to be supported by the sanitizer. - * - *
      - *

      By enabling this setting without taking other precautions, you might expose your - * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned - * outside of the containing element and be rendered over other elements on the page (e.g. a login - * link). Such behavior can then result in phishing incidents.

      - * - *

      To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg - * tags within the sanitized content:

      - * - *
      - * - *
      
      -   *   .rootOfTheIncludedContent svg {
      -   *     overflow: hidden !important;
      -   *   }
      -   *   
      - *
      - * - * @param {boolean=} flag Enable or disable SVG support in the sanitizer. - * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called - * without an argument or self for chaining otherwise. - */ - this.enableSvg = function(enableSvg) { - if (isDefined(enableSvg)) { - svgEnabled = enableSvg; - return this; - } else { - return svgEnabled; - } - }; - - - /** - * @ngdoc method - * @name $sanitizeProvider#addValidElements - * @kind function - * - * @description - * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe - * and are not stripped off during sanitization. You can extend the following lists of elements: - * - * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML - * elements. HTML elements considered safe will not be removed during sanitization. All other - * elements will be stripped off. - * - * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as - * "void elements" (similar to HTML - * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These - * elements have no end tag and cannot have content. - * - * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only - * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for - * `$sanitize`. - * - *
      - * This method must be called during the {@link angular.Module#config config} phase. Once the - * `$sanitize` service has been instantiated, this method has no effect. - *
      - * - *
      - * Keep in mind that extending the built-in lists of elements may expose your app to XSS or - * other vulnerabilities. Be very mindful of the elements you add. - *
      - * - * @param {Array|Object} elements - A list of valid HTML elements or an object with one or - * more of the following properties: - * - **htmlElements** - `{Array}` - A list of elements to extend the current list of - * HTML elements. - * - **htmlVoidElements** - `{Array}` - A list of elements to extend the current list of - * void HTML elements; i.e. elements that do not have an end tag. - * - **svgElements** - `{Array}` - A list of elements to extend the current list of SVG - * elements. The list of SVG elements is only taken into account if SVG is - * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`. - * - * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`. - * - * @return {$sanitizeProvider} Returns self for chaining. - */ - this.addValidElements = function(elements) { - if (!hasBeenInstantiated) { - if (isArray(elements)) { - elements = {htmlElements: elements}; - } - - addElementsTo(svgElements, elements.svgElements); - addElementsTo(voidElements, elements.htmlVoidElements); - addElementsTo(validElements, elements.htmlVoidElements); - addElementsTo(validElements, elements.htmlElements); - } - - return this; - }; - - - /** - * @ngdoc method - * @name $sanitizeProvider#addValidAttrs - * @kind function - * - * @description - * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are - * not stripped off during sanitization. - * - * **Note**: - * The new attributes will not be treated as URI attributes, which means their values will not be - * sanitized as URIs using `$compileProvider`'s - * {@link ng.$compileProvider#aHrefSanitizationWhitelist aHrefSanitizationWhitelist} and - * {@link ng.$compileProvider#imgSrcSanitizationWhitelist imgSrcSanitizationWhitelist}. - * - *
      - * This method must be called during the {@link angular.Module#config config} phase. Once the - * `$sanitize` service has been instantiated, this method has no effect. - *
      - * - *
      - * Keep in mind that extending the built-in list of attributes may expose your app to XSS or - * other vulnerabilities. Be very mindful of the attributes you add. - *
      - * - * @param {Array} attrs - A list of valid attributes. - * - * @returns {$sanitizeProvider} Returns self for chaining. - */ - this.addValidAttrs = function(attrs) { - if (!hasBeenInstantiated) { - extend(validAttrs, arrayToMap(attrs, true)); - } - return this; - }; - - ////////////////////////////////////////////////////////////////////////////////////////////////// - // Private stuff - ////////////////////////////////////////////////////////////////////////////////////////////////// - - bind = angular.bind; - extend = angular.extend; - forEach = angular.forEach; - isArray = angular.isArray; - isDefined = angular.isDefined; - lowercase = angular.$$lowercase; - noop = angular.noop; - - htmlParser = htmlParserImpl; - htmlSanitizeWriter = htmlSanitizeWriterImpl; - - nodeContains = window.Node.prototype.contains || /** @this */ function(arg) { - // eslint-disable-next-line no-bitwise - return !!(this.compareDocumentPosition(arg) & 16); - }; - - // Regular Expressions for parsing tags and attributes - var SURROGATE_PAIR_REGEXP = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g, - // Match everything outside of normal chars and " (quote character) - NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g; - - - // Good source of info about elements and attributes - // http://dev.w3.org/html5/spec/Overview.html#semantics - // http://simon.html5.org/html-elements - - // Safe Void Elements - HTML5 - // http://dev.w3.org/html5/spec/Overview.html#void-elements - var voidElements = stringToMap('area,br,col,hr,img,wbr'); - - // Elements that you can, intentionally, leave open (and which close themselves) - // http://dev.w3.org/html5/spec/Overview.html#optional-tags - var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'), - optionalEndTagInlineElements = stringToMap('rp,rt'), - optionalEndTagElements = extend({}, - optionalEndTagInlineElements, - optionalEndTagBlockElements); - - // Safe Block Elements - HTML5 - var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' + - 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' + - 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul')); - - // Inline Elements - HTML5 - var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' + - 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' + - 'samp,small,span,strike,strong,sub,sup,time,tt,u,var')); - - // SVG Elements - // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements - // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted. - // They can potentially allow for arbitrary javascript to be executed. See #11290 - var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' + - 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' + - 'radialGradient,rect,stop,svg,switch,text,title,tspan'); - - // Blocked Elements (will be stripped) - var blockedElements = stringToMap('script,style'); - - var validElements = extend({}, - voidElements, - blockElements, - inlineElements, - optionalEndTagElements); - - //Attributes that have href and hence need to be sanitized - var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base'); - - var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' + - 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' + - 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' + - 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' + - 'valign,value,vspace,width'); - - // SVG attributes (without "id" and "name" attributes) - // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes - var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' + - 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' + - 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' + - 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' + - 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' + - 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' + - 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' + - 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' + - 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' + - 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' + - 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' + - 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' + - 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' + - 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' + - 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true); - - var validAttrs = extend({}, - uriAttrs, - svgAttrs, - htmlAttrs); - - function stringToMap(str, lowercaseKeys) { - return arrayToMap(str.split(','), lowercaseKeys); - } - - function arrayToMap(items, lowercaseKeys) { - var obj = {}, i; - for (i = 0; i < items.length; i++) { - obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true; - } - return obj; - } - - function addElementsTo(elementsMap, newElements) { - if (newElements && newElements.length) { - extend(elementsMap, arrayToMap(newElements)); - } - } - - /** - * Create an inert document that contains the dirty HTML that needs sanitizing - * Depending upon browser support we use one of three strategies for doing this. - * Support: Safari 10.x -> XHR strategy - * Support: Firefox -> DomParser strategy - */ - var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) { - var inertDocument; - if (document && document.implementation) { - inertDocument = document.implementation.createHTMLDocument('inert'); - } else { - throw $sanitizeMinErr('noinert', 'Can\'t create an inert html document'); - } - var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body'); - - // Check for the Safari 10.1 bug - which allows JS to run inside the SVG G element - inertBodyElement.innerHTML = ''; - if (!inertBodyElement.querySelector('svg')) { - return getInertBodyElement_XHR; - } else { - // Check for the Firefox bug - which prevents the inner img JS from being sanitized - inertBodyElement.innerHTML = '

      '; - if (inertBodyElement.querySelector('svg img')) { - return getInertBodyElement_DOMParser; - } else { - return getInertBodyElement_InertDocument; - } - } - - function getInertBodyElement_XHR(html) { - // We add this dummy element to ensure that the rest of the content is parsed as expected - // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag. - html = '' + html; - try { - html = encodeURI(html); - } catch (e) { - return undefined; - } - var xhr = new window.XMLHttpRequest(); - xhr.responseType = 'document'; - xhr.open('GET', 'data:text/html;charset=utf-8,' + html, false); - xhr.send(null); - var body = xhr.response.body; - body.firstChild.remove(); - return body; - } - - function getInertBodyElement_DOMParser(html) { - // We add this dummy element to ensure that the rest of the content is parsed as expected - // e.g. leading whitespace is maintained and tags like `` do not get hoisted to the `` tag. - html = '' + html; - try { - var body = new window.DOMParser().parseFromString(html, 'text/html').body; - body.firstChild.remove(); - return body; - } catch (e) { - return undefined; - } - } - - function getInertBodyElement_InertDocument(html) { - inertBodyElement.innerHTML = html; - - // Support: IE 9-11 only - // strip custom-namespaced attributes on IE<=11 - if (document.documentMode) { - stripCustomNsAttrs(inertBodyElement); - } - - return inertBodyElement; - } - })(window, window.document); - - /** - * @example - * htmlParser(htmlString, { - * start: function(tag, attrs) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * }); - * - * @param {string} html string - * @param {object} handler - */ - function htmlParserImpl(html, handler) { - if (html === null || html === undefined) { - html = ''; - } else if (typeof html !== 'string') { - html = '' + html; - } - - var inertBodyElement = getInertBodyElement(html); - if (!inertBodyElement) return ''; - - //mXSS protection - var mXSSAttempts = 5; - do { - if (mXSSAttempts === 0) { - throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable'); - } - mXSSAttempts--; - - // trigger mXSS if it is going to happen by reading and writing the innerHTML - html = inertBodyElement.innerHTML; - inertBodyElement = getInertBodyElement(html); - } while (html !== inertBodyElement.innerHTML); - - var node = inertBodyElement.firstChild; - while (node) { - switch (node.nodeType) { - case 1: // ELEMENT_NODE - handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes)); - break; - case 3: // TEXT NODE - handler.chars(node.textContent); - break; - } - - var nextNode; - if (!(nextNode = node.firstChild)) { - if (node.nodeType === 1) { - handler.end(node.nodeName.toLowerCase()); - } - nextNode = getNonDescendant('nextSibling', node); - if (!nextNode) { - while (nextNode == null) { - node = getNonDescendant('parentNode', node); - if (node === inertBodyElement) break; - nextNode = getNonDescendant('nextSibling', node); - if (node.nodeType === 1) { - handler.end(node.nodeName.toLowerCase()); - } - } - } - } - node = nextNode; - } - - while ((node = inertBodyElement.firstChild)) { - inertBodyElement.removeChild(node); - } - } - - function attrToMap(attrs) { - var map = {}; - for (var i = 0, ii = attrs.length; i < ii; i++) { - var attr = attrs[i]; - map[attr.name] = attr.value; - } - return map; - } - - - /** - * Escapes all potentially dangerous characters, so that the - * resulting string can be safely inserted into attribute or - * element text. - * @param value - * @returns {string} escaped text - */ - function encodeEntities(value) { - return value. - replace(/&/g, '&'). - replace(SURROGATE_PAIR_REGEXP, function(value) { - var hi = value.charCodeAt(0); - var low = value.charCodeAt(1); - return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';'; - }). - replace(NON_ALPHANUMERIC_REGEXP, function(value) { - return '&#' + value.charCodeAt(0) + ';'; - }). - replace(//g, '>'); - } - - /** - * create an HTML/XML writer which writes to buffer - * @param {Array} buf use buf.join('') to get out sanitized html string - * @returns {object} in the form of { - * start: function(tag, attrs) {}, - * end: function(tag) {}, - * chars: function(text) {}, - * comment: function(text) {} - * } - */ - function htmlSanitizeWriterImpl(buf, uriValidator) { - var ignoreCurrentElement = false; - var out = bind(buf, buf.push); - return { - start: function(tag, attrs) { - tag = lowercase(tag); - if (!ignoreCurrentElement && blockedElements[tag]) { - ignoreCurrentElement = tag; - } - if (!ignoreCurrentElement && validElements[tag] === true) { - out('<'); - out(tag); - forEach(attrs, function(value, key) { - var lkey = lowercase(key); - var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background'); - if (validAttrs[lkey] === true && - (uriAttrs[lkey] !== true || uriValidator(value, isImage))) { - out(' '); - out(key); - out('="'); - out(encodeEntities(value)); - out('"'); - } - }); - out('>'); - } - }, - end: function(tag) { - tag = lowercase(tag); - if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) { - out(''); - } - // eslint-disable-next-line eqeqeq - if (tag == ignoreCurrentElement) { - ignoreCurrentElement = false; - } - }, - chars: function(chars) { - if (!ignoreCurrentElement) { - out(encodeEntities(chars)); - } - } - }; - } - - - /** - * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare - * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want - * to allow any of these custom attributes. This method strips them all. - * - * @param node Root element to process - */ - function stripCustomNsAttrs(node) { - while (node) { - if (node.nodeType === window.Node.ELEMENT_NODE) { - var attrs = node.attributes; - for (var i = 0, l = attrs.length; i < l; i++) { - var attrNode = attrs[i]; - var attrName = attrNode.name.toLowerCase(); - if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) { - node.removeAttributeNode(attrNode); - i--; - l--; - } - } - } - - var nextNode = node.firstChild; - if (nextNode) { - stripCustomNsAttrs(nextNode); - } - - node = getNonDescendant('nextSibling', node); - } - } - - function getNonDescendant(propName, node) { - // An element is clobbered if its `propName` property points to one of its descendants - var nextNode = node[propName]; - if (nextNode && nodeContains.call(node, nextNode)) { - throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText); - } - return nextNode; - } -} - -function sanitizeText(chars) { - var buf = []; - var writer = htmlSanitizeWriter(buf, noop); - writer.chars(chars); - return buf.join(''); -} - - -// define ngSanitize module and register $sanitize service -angular.module('ngSanitize', []) - .provider('$sanitize', $SanitizeProvider) - .info({ angularVersion: '1.8.0' }); - -/** - * @ngdoc filter - * @name linky - * @kind function - * - * @description - * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and - * plain email address links. - * - * Requires the {@link ngSanitize `ngSanitize`} module to be installed. - * - * @param {string} text Input text. - * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in. - * @param {object|function(url)} [attributes] Add custom attributes to the link element. - * - * Can be one of: - * - * - `object`: A map of attributes - * - `function`: Takes the url as a parameter and returns a map of attributes - * - * If the map of attributes contains a value for `target`, it overrides the value of - * the target parameter. - * - * - * @returns {string} Html-linkified and {@link $sanitize sanitized} text. - * - * @usage - - * - * @example - - -

      - Snippet: - - - - - - - - - - - - - - - - - - - - - - - - - - -
      FilterSourceRendered
      linky filter -
      <div ng-bind-html="snippet | linky">
      </div>
      -
      -
      -
      linky target -
      <div ng-bind-html="snippetWithSingleURL | linky:'_blank'">
      </div>
      -
      -
      -
      linky custom attributes -
      <div ng-bind-html="snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}">
      </div>
      -
      -
      -
      no filter
      <div ng-bind="snippet">
      </div>
      - - - angular.module('linkyExample', ['ngSanitize']) - .controller('ExampleController', ['$scope', function($scope) { - $scope.snippet = - 'Pretty text with some links:\n' + - 'http://angularjs.org/,\n' + - 'mailto:us@somewhere.org,\n' + - 'another@somewhere.org,\n' + - 'and one more: ftp://127.0.0.1/.'; - $scope.snippetWithSingleURL = 'http://angularjs.org/'; - }]); - - - it('should linkify the snippet with urls', function() { - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(4); - }); - - it('should not linkify snippet without the linky filter', function() { - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()). - toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' + - 'another@somewhere.org, and one more: ftp://127.0.0.1/.'); - expect(element.all(by.css('#escaped-html a')).count()).toEqual(0); - }); - - it('should update', function() { - element(by.model('snippet')).clear(); - element(by.model('snippet')).sendKeys('new http://link.'); - expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()). - toBe('new http://link.'); - expect(element.all(by.css('#linky-filter a')).count()).toEqual(1); - expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()) - .toBe('new http://link.'); - }); - - it('should work with the target property', function() { - expect(element(by.id('linky-target')). - element(by.binding("snippetWithSingleURL | linky:'_blank'")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank'); - }); - - it('should optionally add custom attributes', function() { - expect(element(by.id('linky-custom-attributes')). - element(by.binding("snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}")).getText()). - toBe('http://angularjs.org/'); - expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow'); - }); - - - */ -angular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) { - var LINKY_URL_REGEXP = - /((s?ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i, - MAILTO_REGEXP = /^mailto:/i; - - var linkyMinErr = angular.$$minErr('linky'); - var isDefined = angular.isDefined; - var isFunction = angular.isFunction; - var isObject = angular.isObject; - var isString = angular.isString; - - return function(text, target, attributes) { - if (text == null || text === '') return text; - if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text); - - var attributesFn = - isFunction(attributes) ? attributes : - isObject(attributes) ? function getAttributesObject() {return attributes;} : - function getEmptyAttributesObject() {return {};}; - - var match; - var raw = text; - var html = []; - var url; - var i; - while ((match = raw.match(LINKY_URL_REGEXP))) { - // We can not end in these as they are sometimes found at the end of the sentence - url = match[0]; - // if we did not match ftp/http/www/mailto then assume mailto - if (!match[2] && !match[4]) { - url = (match[3] ? 'http://' : 'mailto:') + url; - } - i = match.index; - addText(raw.substr(0, i)); - addLink(url, match[0].replace(MAILTO_REGEXP, '')); - raw = raw.substring(i + match[0].length); - } - addText(raw); - return $sanitize(html.join('')); - - function addText(text) { - if (!text) { - return; - } - html.push(sanitizeText(text)); - } - - function addLink(url, text) { - var key, linkAttributes = attributesFn(url); - html.push(''); - addText(text); - html.push(''); - } - }; -}]); - - -})(window, window.angular); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js deleted file mode 100644 index 42f78b84..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js +++ /dev/null @@ -1,18 +0,0 @@ -/* - AngularJS v1.8.0 - (c) 2010-2020 Google, Inc. http://angularjs.org - License: MIT -*/ -(function(s,c){'use strict';function P(c){var h=[];C(h,E).chars(c);return h.join("")}var D=c.$$minErr("$sanitize"),F,h,G,H,I,q,E,J,K,C;c.module("ngSanitize",[]).provider("$sanitize",function(){function f(a,e){return B(a.split(","),e)}function B(a,e){var d={},b;for(b=0;b/g,">")}function A(a){for(;a;){if(a.nodeType===s.Node.ELEMENT_NODE)for(var e=a.attributes,d=0,b=e.length;d"))},end:function(a){a=q(a);d||!0!==m[a]||!0===r[a]||(b(""));a==d&&(d=!1)},chars:function(a){d|| -b(L(a))}}};J=s.Node.prototype.contains||function(a){return!!(this.compareDocumentPosition(a)&16)};var z=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,u=/([^#-~ |!])/g,r=f("area,br,col,hr,img,wbr"),x=f("colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr"),p=f("rp,rt"),n=h({},p,x),x=h({},x,f("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul")),p=h({},p,f("a,abbr,acronym,b,bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var")), -l=f("circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,radialGradient,rect,stop,svg,switch,text,title,tspan"),w=f("script,style"),m=h({},r,x,p,n),O=f("background,cite,href,longdesc,src,xlink:href,xml:base"),n=f("abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,valign,value,vspace,width"), -p=f("accent-height,accumulate,additive,alphabetic,arabic-form,ascent,baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan", -!0),M=h({},O,p,n),N=function(a,e){function d(b){b=""+b;try{var d=(new a.DOMParser).parseFromString(b,"text/html").body;d.firstChild.remove();return d}catch(e){}}function b(a){c.innerHTML=a;e.documentMode&&A(c);return c}var g;if(e&&e.implementation)g=e.implementation.createHTMLDocument("inert");else throw D("noinert");var c=(g.documentElement||g.getDocumentElement()).querySelector("body");c.innerHTML='';return c.querySelector("svg")? -(c.innerHTML='

      ',c.querySelector("svg img")?d:b):function(b){b=""+b;try{b=encodeURI(b)}catch(d){return}var e=new a.XMLHttpRequest;e.responseType="document";e.open("GET","data:text/html;charset=utf-8,"+b,!1);e.send(null);b=e.response.body;b.firstChild.remove();return b}}(s,s.document)}).info({angularVersion:"1.8.0"});c.module("ngSanitize").filter("linky",["$sanitize",function(f){var h=/((s?ftp|https?):\/\/|(www\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\S*[^\s.;,(){}<>"\u201d\u2019]/i, -t=/^mailto:/i,q=c.$$minErr("linky"),s=c.isDefined,A=c.isFunction,v=c.isObject,y=c.isString;return function(c,z,u){function r(c){c&&l.push(P(c))}function x(c,g){var f,a=p(c);l.push("');r(g);l.push("")}if(null==c||""===c)return c;if(!y(c))throw q("notstring",c);for(var p=A(u)?u:v(u)?function(){return u}:function(){return{}},n=c,l=[],w,m;c=n.match(h);)w=c[0],c[2]|| -c[4]||(w=(c[3]?"http://":"mailto:")+w),m=c.index,r(n.substr(0,m)),x(w,c[0].replace(t,"")),n=n.substring(m+c[0].length);r(n);return f(l.join(""))}}])})(window,window.angular); -//# sourceMappingURL=angular-sanitize.min.js.map diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js.map b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js.map deleted file mode 100644 index 133f378a..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/angular-sanitize.min.js.map +++ /dev/null @@ -1,8 +0,0 @@ -{ -"version":3, -"file":"angular-sanitize.min.js", -"lineCount":17, -"mappings":"A;;;;;aAKC,SAAQ,CAACA,CAAD,CAASC,CAAT,CAAkB,CAyrB3BC,QAASA,EAAY,CAACC,CAAD,CAAQ,CAC3B,IAAIC,EAAM,EACGC,EAAAC,CAAmBF,CAAnBE,CAAwBC,CAAxBD,CACbH,MAAA,CAAaA,CAAb,CACA,OAAOC,EAAAI,KAAA,CAAS,EAAT,CAJoB,CA5qB7B,IAAIC,EAAkBR,CAAAS,SAAA,CAAiB,WAAjB,CAAtB,CACIC,CADJ,CAEIC,CAFJ,CAGIC,CAHJ,CAIIC,CAJJ,CAKIC,CALJ,CAMIC,CANJ,CAOIT,CAPJ,CAQIU,CARJ,CASIC,CATJ,CAUIb,CA2qBJJ,EAAAkB,OAAA,CAAe,YAAf,CAA6B,EAA7B,CAAAC,SAAA,CACY,WADZ,CAhjBAC,QAA0B,EAAG,CAkQ3BC,QAASA,EAAW,CAACC,CAAD,CAAMC,CAAN,CAAqB,CACvC,MAAOC,EAAA,CAAWF,CAAAG,MAAA,CAAU,GAAV,CAAX,CAA2BF,CAA3B,CADgC,CAIzCC,QAASA,EAAU,CAACE,CAAD,CAAQH,CAAR,CAAuB,CAAA,IACpCI,EAAM,EAD8B,CAC1BC,CACd,KAAKA,CAAL,CAAS,CAAT,CAAYA,CAAZ,CAAgBF,CAAAG,OAAhB,CAA8BD,CAAA,EAA9B,CACED,CAAA,CAAIJ,CAAA,CAAgBR,CAAA,CAAUW,CAAA,CAAME,CAAN,CAAV,CAAhB,CAAsCF,CAAA,CAAME,CAAN,CAA1C,CAAA,CAAsD,CAAA,CAExD,OAAOD,EALiC,CAQ1CG,QAASA,EAAa,CAACC,CAAD,CAAcC,CAAd,CAA2B,CAC3CA,CAAJ,EAAmBA,CAAAH,OAAnB,EACElB,CAAA,CAAOoB,CAAP,CAAoBP,CAAA,CAAWQ,CAAX,CAApB,CAF6C,CAsJjDC,QAASA,EAAS,CAACC,CAAD,CAAQ,CAExB,IADA,IAAIC,EAAM,EAAV,CACSP,EAAI,CADb,CACgBQ,EAAKF,CAAAL,OAArB,CAAmCD,CAAnC,CAAuCQ,CAAvC,CAA2CR,CAAA,EAA3C,CAAgD,CAC9C,IAAIS,EAAOH,CAAA,CAAMN,CAAN,CACXO,EAAA,CAAIE,CAAAC,KAAJ,CAAA,CAAiBD,CAAAE,MAF6B,CAIhD,MAAOJ,EANiB,CAiB1BK,QAASA,EAAc,CAACD,CAAD,CAAQ,CAC7B,MAAOA,EAAAE,QAAA,CACG,IADH,CACS,OADT,CAAAA,QAAA,CAEGC,CAFH,CAE0B,QAAQ,CAACH,CAAD,CAAQ,CAC7C,IAAII;AAAKJ,CAAAK,WAAA,CAAiB,CAAjB,CACLC,EAAAA,CAAMN,CAAAK,WAAA,CAAiB,CAAjB,CACV,OAAO,IAAP,EAAgC,IAAhC,EAAiBD,CAAjB,CAAsB,KAAtB,GAA0CE,CAA1C,CAAgD,KAAhD,EAA0D,KAA1D,EAAqE,GAHxB,CAF1C,CAAAJ,QAAA,CAOGK,CAPH,CAO4B,QAAQ,CAACP,CAAD,CAAQ,CAC/C,MAAO,IAAP,CAAcA,CAAAK,WAAA,CAAiB,CAAjB,CAAd,CAAoC,GADW,CAP5C,CAAAH,QAAA,CAUG,IAVH,CAUS,MAVT,CAAAA,QAAA,CAWG,IAXH,CAWS,MAXT,CADsB,CAgF/BM,QAASA,EAAkB,CAACC,CAAD,CAAO,CAChC,IAAA,CAAOA,CAAP,CAAA,CAAa,CACX,GAAIA,CAAAC,SAAJ,GAAsBlD,CAAAmD,KAAAC,aAAtB,CAEE,IADA,IAAIjB,EAAQc,CAAAI,WAAZ,CACSxB,EAAI,CADb,CACgByB,EAAInB,CAAAL,OAApB,CAAkCD,CAAlC,CAAsCyB,CAAtC,CAAyCzB,CAAA,EAAzC,CAA8C,CAC5C,IAAI0B,EAAWpB,CAAA,CAAMN,CAAN,CAAf,CACI2B,EAAWD,CAAAhB,KAAAkB,YAAA,EACf,IAAiB,WAAjB,GAAID,CAAJ,EAAoE,CAApE,GAAgCA,CAAAE,YAAA,CAAqB,MAArB,CAA6B,CAA7B,CAAhC,CACET,CAAAU,oBAAA,CAAyBJ,CAAzB,CAEA,CADA1B,CAAA,EACA,CAAAyB,CAAA,EAN0C,CAYhD,CADIM,CACJ,CADeX,CAAAY,WACf,GACEb,CAAA,CAAmBY,CAAnB,CAGFX,EAAA,CAAOa,CAAA,CAAiB,aAAjB,CAAgCb,CAAhC,CAnBI,CADmB,CAwBlCa,QAASA,EAAgB,CAACC,CAAD,CAAWd,CAAX,CAAiB,CAExC,IAAIW,EAAWX,CAAA,CAAKc,CAAL,CACf,IAAIH,CAAJ,EAAgB3C,CAAA+C,KAAA,CAAkBf,CAAlB,CAAwBW,CAAxB,CAAhB,CACE,KAAMnD,EAAA,CAAgB,QAAhB;AAA2FwC,CAAAgB,UAA3F,EAA6GhB,CAAAiB,UAA7G,CAAN,CAEF,MAAON,EANiC,CA5hB1C,IAAIO,EAAsB,CAAA,CAA1B,CACIC,EAAa,CAAA,CAEjB,KAAAC,KAAA,CAAY,CAAC,eAAD,CAAkB,QAAQ,CAACC,CAAD,CAAgB,CACpDH,CAAA,CAAsB,CAAA,CAClBC,EAAJ,EACExD,CAAA,CAAO2D,CAAP,CAAsBC,CAAtB,CAEF,OAAO,SAAQ,CAACC,CAAD,CAAO,CACpB,IAAIrE,EAAM,EACVc,EAAA,CAAWuD,CAAX,CAAiBpE,CAAA,CAAmBD,CAAnB,CAAwB,QAAQ,CAACsE,CAAD,CAAMC,CAAN,CAAe,CAC9D,MAAO,CAAC,UAAAC,KAAA,CAAgBN,CAAA,CAAcI,CAAd,CAAmBC,CAAnB,CAAhB,CADsD,CAA/C,CAAjB,CAGA,OAAOvE,EAAAI,KAAA,CAAS,EAAT,CALa,CAL8B,CAA1C,CA6CZ,KAAAqE,UAAA,CAAiBC,QAAQ,CAACD,CAAD,CAAY,CACnC,MAAI9D,EAAA,CAAU8D,CAAV,CAAJ,EACET,CACO,CADMS,CACN,CAAA,IAFT,EAIST,CAL0B,CAwDrC,KAAAW,iBAAA,CAAwBC,QAAQ,CAACC,CAAD,CAAW,CACpCd,CAAL,GACMrD,CAAA,CAAQmE,CAAR,CAOJ,GANEA,CAMF,CANa,CAACC,aAAcD,CAAf,CAMb,EAHAlD,CAAA,CAAcyC,CAAd,CAA2BS,CAAAT,YAA3B,CAGA,CAFAzC,CAAA,CAAcoD,CAAd,CAA4BF,CAAAG,iBAA5B,CAEA,CADArD,CAAA,CAAcwC,CAAd,CAA6BU,CAAAG,iBAA7B,CACA,CAAArD,CAAA,CAAcwC,CAAd,CAA6BU,CAAAC,aAA7B,CARF,CAWA,OAAO,KAZkC,CA6C3C,KAAAG,cAAA,CAAqBC,QAAQ,CAACnD,CAAD,CAAQ,CAC9BgC,CAAL,EACEvD,CAAA,CAAO2E,CAAP,CAAmB9D,CAAA,CAAWU,CAAX,CAAkB,CAAA,CAAlB,CAAnB,CAEF,OAAO,KAJ4B,CAWrCxB,EAAA,CAAOV,CAAAU,KACPC,EAAA,CAASX,CAAAW,OACTC;CAAA,CAAUZ,CAAAY,QACVC,EAAA,CAAUb,CAAAa,QACVC,EAAA,CAAYd,CAAAc,UACZC,EAAA,CAAYf,CAAAuF,YACZjF,EAAA,CAAON,CAAAM,KAEPW,EAAA,CAgMAuE,QAAuB,CAAChB,CAAD,CAAOiB,CAAP,CAAgB,CACxB,IAAb,GAAIjB,CAAJ,EAA8BkB,IAAAA,EAA9B,GAAqBlB,CAArB,CACEA,CADF,CACS,EADT,CAE2B,QAF3B,GAEW,MAAOA,EAFlB,GAGEA,CAHF,CAGS,EAHT,CAGcA,CAHd,CAMA,KAAImB,EAAmBC,CAAA,CAAoBpB,CAApB,CACvB,IAAKmB,CAAAA,CAAL,CAAuB,MAAO,EAG9B,KAAIE,EAAe,CACnB,GAAG,CACD,GAAqB,CAArB,GAAIA,CAAJ,CACE,KAAMrF,EAAA,CAAgB,QAAhB,CAAN,CAEFqF,CAAA,EAGArB,EAAA,CAAOmB,CAAAG,UACPH,EAAA,CAAmBC,CAAA,CAAoBpB,CAApB,CARlB,CAAH,MASSA,CATT,GASkBmB,CAAAG,UATlB,CAYA,KADI9C,CACJ,CADW2C,CAAA/B,WACX,CAAOZ,CAAP,CAAA,CAAa,CACX,OAAQA,CAAAC,SAAR,EACE,KAAK,CAAL,CACEwC,CAAAM,MAAA,CAAc/C,CAAAgD,SAAAxC,YAAA,EAAd,CAA2CvB,CAAA,CAAUe,CAAAI,WAAV,CAA3C,CACA,MACF,MAAK,CAAL,CACEqC,CAAAvF,MAAA,CAAc8C,CAAAiD,YAAd,CALJ,CASA,IAAItC,CACJ,IAAM,EAAAA,CAAA,CAAWX,CAAAY,WAAX,CAAN,GACwB,CAIjBD,GAJDX,CAAAC,SAICU,EAHH8B,CAAAS,IAAA,CAAYlD,CAAAgD,SAAAxC,YAAA,EAAZ,CAGGG,CADLA,CACKA,CADME,CAAA,CAAiB,aAAjB,CAAgCb,CAAhC,CACNW,CAAAA,CAAAA,CALP,EAMI,IAAA,CAAmB,IAAnB,EAAOA,CAAP,CAAA,CAAyB,CACvBX,CAAA;AAAOa,CAAA,CAAiB,YAAjB,CAA+Bb,CAA/B,CACP,IAAIA,CAAJ,GAAa2C,CAAb,CAA+B,KAC/BhC,EAAA,CAAWE,CAAA,CAAiB,aAAjB,CAAgCb,CAAhC,CACW,EAAtB,GAAIA,CAAAC,SAAJ,EACEwC,CAAAS,IAAA,CAAYlD,CAAAgD,SAAAxC,YAAA,EAAZ,CALqB,CAU7BR,CAAA,CAAOW,CA3BI,CA8Bb,IAAA,CAAQX,CAAR,CAAe2C,CAAA/B,WAAf,CAAA,CACE+B,CAAAQ,YAAA,CAA6BnD,CAA7B,CAvDmC,CA/LvC5C,EAAA,CAoSAgG,QAA+B,CAACjG,CAAD,CAAMkG,CAAN,CAAoB,CACjD,IAAIC,EAAuB,CAAA,CAA3B,CACIC,EAAM7F,CAAA,CAAKP,CAAL,CAAUA,CAAAqG,KAAV,CACV,OAAO,CACLT,MAAOA,QAAQ,CAACU,CAAD,CAAMvE,CAAN,CAAa,CAC1BuE,CAAA,CAAM1F,CAAA,CAAU0F,CAAV,CACDH,EAAAA,CAAL,EAA6BI,CAAA,CAAgBD,CAAhB,CAA7B,GACEH,CADF,CACyBG,CADzB,CAGKH,EAAL,EAAoD,CAAA,CAApD,GAA6BhC,CAAA,CAAcmC,CAAd,CAA7B,GACEF,CAAA,CAAI,GAAJ,CAcA,CAbAA,CAAA,CAAIE,CAAJ,CAaA,CAZA7F,CAAA,CAAQsB,CAAR,CAAe,QAAQ,CAACK,CAAD,CAAQoE,CAAR,CAAa,CAClC,IAAIC,EAAO7F,CAAA,CAAU4F,CAAV,CAAX,CACIjC,EAAmB,KAAnBA,GAAW+B,CAAX/B,EAAqC,KAArCA,GAA4BkC,CAA5BlC,EAAyD,YAAzDA,GAAgDkC,CAC3B,EAAA,CAAzB,GAAItB,CAAA,CAAWsB,CAAX,CAAJ,EACsB,CAAA,CADtB,GACGC,CAAA,CAASD,CAAT,CADH,EAC8B,CAAAP,CAAA,CAAa9D,CAAb,CAAoBmC,CAApB,CAD9B,GAEE6B,CAAA,CAAI,GAAJ,CAIA,CAHAA,CAAA,CAAII,CAAJ,CAGA,CAFAJ,CAAA,CAAI,IAAJ,CAEA,CADAA,CAAA,CAAI/D,CAAA,CAAeD,CAAf,CAAJ,CACA,CAAAgE,CAAA,CAAI,GAAJ,CANF,CAHkC,CAApC,CAYA,CAAAA,CAAA,CAAI,GAAJ,CAfF,CAL0B,CADvB,CAwBLL,IAAKA,QAAQ,CAACO,CAAD,CAAM,CACjBA,CAAA,CAAM1F,CAAA,CAAU0F,CAAV,CACDH,EAAL,EAAoD,CAAA,CAApD,GAA6BhC,CAAA,CAAcmC,CAAd,CAA7B,EAAkF,CAAA,CAAlF,GAA4DvB,CAAA,CAAauB,CAAb,CAA5D,GACEF,CAAA,CAAI,IAAJ,CAEA,CADAA,CAAA,CAAIE,CAAJ,CACA,CAAAF,CAAA,CAAI,GAAJ,CAHF,CAMIE,EAAJ,EAAWH,CAAX,GACEA,CADF,CACyB,CAAA,CADzB,CARiB,CAxBd,CAoCLpG,MAAOA,QAAQ,CAACA,CAAD,CAAQ,CAChBoG,CAAL;AACEC,CAAA,CAAI/D,CAAA,CAAetC,CAAf,CAAJ,CAFmB,CApClB,CAH0C,CAlSnDc,EAAA,CAAejB,CAAAmD,KAAA4D,UAAAC,SAAf,EAA8D,QAAQ,CAACC,CAAD,CAAM,CAE1E,MAAO,CAAG,EAAA,IAAAC,wBAAA,CAA6BD,CAA7B,CAAA,CAAoC,EAApC,CAFgE,CA5KjD,KAkLvBtE,EAAwB,iCAlLD,CAoLzBI,EAA0B,cApLD,CA6LvBoC,EAAe7D,CAAA,CAAY,wBAAZ,CA7LQ,CAiMvB6F,EAA8B7F,CAAA,CAAY,gDAAZ,CAjMP,CAkMvB8F,EAA+B9F,CAAA,CAAY,OAAZ,CAlMR,CAmMvB+F,EAAyBzG,CAAA,CAAO,EAAP,CACewG,CADf,CAEeD,CAFf,CAnMF,CAwMvBG,EAAgB1G,CAAA,CAAO,EAAP,CAAWuG,CAAX,CAAwC7F,CAAA,CAAY,qKAAZ,CAAxC,CAxMO,CA6MvBiG,EAAiB3G,CAAA,CAAO,EAAP,CAAWwG,CAAX,CAAyC9F,CAAA,CAAY,2JAAZ,CAAzC,CA7MM;AAqNvBkD,EAAclD,CAAA,CAAY,wNAAZ,CArNS,CA0NvBqF,EAAkBrF,CAAA,CAAY,cAAZ,CA1NK,CA4NvBiD,EAAgB3D,CAAA,CAAO,EAAP,CACeuE,CADf,CAEemC,CAFf,CAGeC,CAHf,CAIeF,CAJf,CA5NO,CAmOvBP,EAAWxF,CAAA,CAAY,uDAAZ,CAnOY,CAqOvBkG,EAAYlG,CAAA,CAAY,kTAAZ,CArOW;AA6OvBmG,EAAWnG,CAAA,CAAY,guCAAZ;AAcoE,CAAA,CAdpE,CA7OY,CA6PvBiE,EAAa3E,CAAA,CAAO,EAAP,CACekG,CADf,CAEeW,CAFf,CAGeD,CAHf,CA7PU,CA0RvB3B,EAAqE,QAAQ,CAAC7F,CAAD,CAAS0H,CAAT,CAAmB,CAyClGC,QAASA,EAA6B,CAAClD,CAAD,CAAO,CAG3CA,CAAA,CAAO,mBAAP,CAA6BA,CAC7B,IAAI,CACF,IAAImD,EAAOC,CAAA,IAAI7H,CAAA8H,UAAJD,iBAAA,CAAuCpD,CAAvC,CAA6C,WAA7C,CAAAmD,KACXA,EAAA/D,WAAAkE,OAAA,EACA,OAAOH,EAHL,CAIF,MAAOI,CAAP,CAAU,EAR+B,CAa7CC,QAASA,EAAiC,CAACxD,CAAD,CAAO,CAC/CmB,CAAAG,UAAA,CAA6BtB,CAIzBiD,EAAAQ,aAAJ,EACElF,CAAA,CAAmB4C,CAAnB,CAGF,OAAOA,EATwC,CArDjD,IAAIuC,CACJ,IAAIT,CAAJ,EAAgBA,CAAAU,eAAhB,CACED,CAAA,CAAgBT,CAAAU,eAAAC,mBAAA,CAA2C,OAA3C,CADlB,KAGE,MAAM5H,EAAA,CAAgB,SAAhB,CAAN,CAEF,IAAImF,EAAmB0C,CAACH,CAAAI,gBAADD,EAAkCH,CAAAK,mBAAA,EAAlCF,eAAA,CAAoF,MAApF,CAGvB1C,EAAAG,UAAA,CAA6B,sDAC7B,OAAKH,EAAA0C,cAAA,CAA+B,KAA/B,CAAL;CAIE1C,CAAAG,UACA,CAD6B,kEAC7B,CAAIH,CAAA0C,cAAA,CAA+B,SAA/B,CAAJ,CACSX,CADT,CAGSM,CARX,EAYAQ,QAAgC,CAAChE,CAAD,CAAO,CAGrCA,CAAA,CAAO,mBAAP,CAA6BA,CAC7B,IAAI,CACFA,CAAA,CAAOiE,SAAA,CAAUjE,CAAV,CADL,CAEF,MAAOuD,CAAP,CAAU,CACV,MADU,CAGZ,IAAIW,EAAM,IAAI3I,CAAA4I,eACdD,EAAAE,aAAA,CAAmB,UACnBF,EAAAG,KAAA,CAAS,KAAT,CAAgB,+BAAhB,CAAkDrE,CAAlD,CAAwD,CAAA,CAAxD,CACAkE,EAAAI,KAAA,CAAS,IAAT,CACInB,EAAAA,CAAOe,CAAAK,SAAApB,KACXA,EAAA/D,WAAAkE,OAAA,EACA,OAAOH,EAf8B,CAvB2D,CAA5B,CAiErE5H,CAjEqE,CAiE7DA,CAAA0H,SAjE6D,CA1R7C,CAgjB7B,CAAAuB,KAAA,CAEQ,CAAEC,eAAgB,OAAlB,CAFR,CAmIAjJ,EAAAkB,OAAA,CAAe,YAAf,CAAAgI,OAAA,CAAoC,OAApC,CAA6C,CAAC,WAAD,CAAc,QAAQ,CAACC,CAAD,CAAY,CAAA,IACzEC,EACE,2FAFuE;AAGzEC,EAAgB,WAHyD,CAKzEC,EAActJ,CAAAS,SAAA,CAAiB,OAAjB,CAL2D,CAMzEK,EAAYd,CAAAc,UAN6D,CAOzEyI,EAAavJ,CAAAuJ,WAP4D,CAQzEC,EAAWxJ,CAAAwJ,SAR8D,CASzEC,EAAWzJ,CAAAyJ,SAEf,OAAO,SAAQ,CAACC,CAAD,CAAOC,CAAP,CAAevG,CAAf,CAA2B,CA6BxCwG,QAASA,EAAO,CAACF,CAAD,CAAO,CAChBA,CAAL,EAGAlF,CAAAgC,KAAA,CAAUvG,CAAA,CAAayJ,CAAb,CAAV,CAJqB,CAOvBG,QAASA,EAAO,CAACC,CAAD,CAAMJ,CAAN,CAAY,CAAA,IACtB/C,CADsB,CACjBoD,EAAiBC,CAAA,CAAaF,CAAb,CAC1BtF,EAAAgC,KAAA,CAAU,KAAV,CAEA,KAAKG,CAAL,GAAYoD,EAAZ,CACEvF,CAAAgC,KAAA,CAAUG,CAAV,CAAgB,IAAhB,CAAuBoD,CAAA,CAAepD,CAAf,CAAvB,CAA6C,IAA7C,CAGE,EAAA7F,CAAA,CAAU6I,CAAV,CAAJ,EAA2B,QAA3B,EAAuCI,EAAvC,EACEvF,CAAAgC,KAAA,CAAU,UAAV,CACUmD,CADV,CAEU,IAFV,CAIFnF,EAAAgC,KAAA,CAAU,QAAV,CACUsD,CAAArH,QAAA,CAAY,IAAZ,CAAkB,QAAlB,CADV,CAEU,IAFV,CAGAmH,EAAA,CAAQF,CAAR,CACAlF,EAAAgC,KAAA,CAAU,MAAV,CAjB0B,CAnC5B,GAAY,IAAZ,EAAIkD,CAAJ,EAA6B,EAA7B,GAAoBA,CAApB,CAAiC,MAAOA,EACxC,IAAK,CAAAD,CAAA,CAASC,CAAT,CAAL,CAAqB,KAAMJ,EAAA,CAAY,WAAZ,CAA8DI,CAA9D,CAAN,CAYrB,IAVA,IAAIM,EACFT,CAAA,CAAWnG,CAAX,CAAA,CAAyBA,CAAzB,CACAoG,CAAA,CAASpG,CAAT,CAAA,CAAuB6G,QAA4B,EAAG,CAAC,MAAO7G,EAAR,CAAtD,CACA8G,QAAiC,EAAG,CAAC,MAAO,EAAR,CAHtC,CAMIC,EAAMT,CANV,CAOIlF,EAAO,EAPX,CAQIsF,CARJ,CASIlI,CACJ,CAAQwI,CAAR,CAAgBD,CAAAC,MAAA,CAAUhB,CAAV,CAAhB,CAAA,CAEEU,CAQA,CARMM,CAAA,CAAM,CAAN,CAQN,CANKA,CAAA,CAAM,CAAN,CAML;AANkBA,CAAA,CAAM,CAAN,CAMlB,GALEN,CAKF,EALSM,CAAA,CAAM,CAAN,CAAA,CAAW,SAAX,CAAuB,SAKhC,EAL6CN,CAK7C,EAHAlI,CAGA,CAHIwI,CAAAC,MAGJ,CAFAT,CAAA,CAAQO,CAAAG,OAAA,CAAW,CAAX,CAAc1I,CAAd,CAAR,CAEA,CADAiI,CAAA,CAAQC,CAAR,CAAaM,CAAA,CAAM,CAAN,CAAA3H,QAAA,CAAiB4G,CAAjB,CAAgC,EAAhC,CAAb,CACA,CAAAc,CAAA,CAAMA,CAAAI,UAAA,CAAc3I,CAAd,CAAkBwI,CAAA,CAAM,CAAN,CAAAvI,OAAlB,CAER+H,EAAA,CAAQO,CAAR,CACA,OAAOhB,EAAA,CAAU3E,CAAAjE,KAAA,CAAU,EAAV,CAAV,CA3BiC,CAXmC,CAAlC,CAA7C,CAr0B2B,CAA1B,CAAD,CA24BGR,MA34BH,CA24BWA,MAAAC,QA34BX;", -"sources":["angular-sanitize.js"], -"names":["window","angular","sanitizeText","chars","buf","htmlSanitizeWriter","writer","noop","join","$sanitizeMinErr","$$minErr","bind","extend","forEach","isArray","isDefined","lowercase","nodeContains","htmlParser","module","provider","$SanitizeProvider","stringToMap","str","lowercaseKeys","arrayToMap","split","items","obj","i","length","addElementsTo","elementsMap","newElements","attrToMap","attrs","map","ii","attr","name","value","encodeEntities","replace","SURROGATE_PAIR_REGEXP","hi","charCodeAt","low","NON_ALPHANUMERIC_REGEXP","stripCustomNsAttrs","node","nodeType","Node","ELEMENT_NODE","attributes","l","attrNode","attrName","toLowerCase","lastIndexOf","removeAttributeNode","nextNode","firstChild","getNonDescendant","propName","call","outerHTML","outerText","hasBeenInstantiated","svgEnabled","$get","$$sanitizeUri","validElements","svgElements","html","uri","isImage","test","enableSvg","this.enableSvg","addValidElements","this.addValidElements","elements","htmlElements","voidElements","htmlVoidElements","addValidAttrs","this.addValidAttrs","validAttrs","$$lowercase","htmlParserImpl","handler","undefined","inertBodyElement","getInertBodyElement","mXSSAttempts","innerHTML","start","nodeName","textContent","end","removeChild","htmlSanitizeWriterImpl","uriValidator","ignoreCurrentElement","out","push","tag","blockedElements","key","lkey","uriAttrs","prototype","contains","arg","compareDocumentPosition","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","document","getInertBodyElement_DOMParser","body","parseFromString","DOMParser","remove","e","getInertBodyElement_InertDocument","documentMode","inertDocument","implementation","createHTMLDocument","querySelector","documentElement","getDocumentElement","getInertBodyElement_XHR","encodeURI","xhr","XMLHttpRequest","responseType","open","send","response","info","angularVersion","filter","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isFunction","isObject","isString","text","target","addText","addLink","url","linkAttributes","attributesFn","getAttributesObject","getEmptyAttributesObject","raw","match","index","substr","substring"] -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/bower.json b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/bower.json deleted file mode 100644 index d72cde18..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/bower.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "name": "angular-sanitize", - "version": "1.8.0", - "license": "MIT", - "main": "./angular-sanitize.js", - "ignore": [], - "dependencies": { - "angular": "1.8.0" - } -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/index.js b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/index.js deleted file mode 100644 index dd5d22e4..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/index.js +++ /dev/null @@ -1,2 +0,0 @@ -require('./angular-sanitize'); -module.exports = 'ngSanitize'; diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/package.json b/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/package.json deleted file mode 100644 index 0089b4c6..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-sanitize/package.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "_from": "angular-sanitize@1.8.0", - "_id": "angular-sanitize@1.8.0", - "_inBundle": false, - "_integrity": "sha512-j5GiOPCvfcDWK5svEOVoPb11X3UDVy/mdHPRWuy14Iyw86xaq+Bb+x/em2sAOa5MQQeY5ciLXbF3RRp8iCKcNg==", - "_location": "/angular-sanitize", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-sanitize@1.8.0", - "name": "angular-sanitize", - "escapedName": "angular-sanitize", - "rawSpec": "1.8.0", - "saveSpec": null, - "fetchSpec": "1.8.0" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-sanitize/-/angular-sanitize-1.8.0.tgz", - "_shasum": "9f80782d3afeec3bcc0bb92b3ca6f1f421cfbca6", - "_spec": "angular-sanitize@1.8.0", - "_where": "C:\\GitHub\\keycloak\\themes\\src\\main\\resources\\theme\\keycloak\\common\\resources", - "author": { - "name": "Angular Core Team", - "email": "angular-core+npm@google.com" - }, - "bugs": { - "url": "https://github.com/angular/angular.js/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "AngularJS module for sanitizing HTML", - "homepage": "http://angularjs.org", - "jspm": { - "shim": { - "angular-sanitize": { - "deps": [ - "angular" - ] - } - } - }, - "keywords": [ - "angular", - "framework", - "browser", - "html", - "client-side" - ], - "license": "MIT", - "main": "index.js", - "name": "angular-sanitize", - "repository": { - "type": "git", - "url": "git+https://github.com/angular/angular.js.git" - }, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" - }, - "version": "1.8.0" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/README.md b/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/README.md deleted file mode 100644 index a3c5374e..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/README.md +++ /dev/null @@ -1,29 +0,0 @@ -# angular-translate-loader-url (bower shadow repository) - -This is the _Bower shadow_ repository for *angular-translate-loader-url*. - -## Bugs and issues - -Please file any issues and bugs in our main repository at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate/issues). - -## Usage - -### via Bower - -```bash -$ bower install angular-translate-loader-url -``` - -### via NPM - -```bash -$ npm install angular-translate-loader-url -``` - -### via cdnjs - -Please have a look at https://cdnjs.com/libraries/angular-translate-loader-url for specific versions. - -## License - -Licensed under MIT. See more details at [angular-translate/angular-translate](https://github.com/angular-translate/angular-translate). diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.js deleted file mode 100644 index a2e881e1..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.js +++ /dev/null @@ -1,73 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -$translateUrlLoader.$inject = ['$q', '$http']; -angular.module('pascalprecht.translate') -/** - * @ngdoc object - * @name pascalprecht.translate.$translateUrlLoader - * @requires $q - * @requires $http - * - * @description - * Creates a loading function for a typical dynamic url pattern: - * "locale.php?lang=en_US", "locale.php?lang=de_DE", "locale.php?language=nl_NL" etc. - * Prefixing the specified url, the current requested, language id will be applied - * with "?{queryParameter}={key}". - * Using this service, the response of these urls must be an object of - * key-value pairs. - * - * @param {object} options Options object, which gets the url, key and - * optional queryParameter ('lang' is used by default). - */ -.factory('$translateUrlLoader', $translateUrlLoader); - -function $translateUrlLoader($q, $http) { - - 'use strict'; - - return function (options) { - - if (!options || !options.url) { - throw new Error('Couldn\'t use urlLoader since no url is given!'); - } - - var requestParams = {}; - - requestParams[options.queryParameter || 'lang'] = options.key; - - return $http(angular.extend({ - url: options.url, - params: requestParams, - method: 'GET' - }, options.$http)) - .then(function(result) { - return result.data; - }, function () { - return $q.reject(options.key); - }); - }; -} - -$translateUrlLoader.displayName = '$translateUrlLoader'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.min.js deleted file mode 100644 index 04f4c423..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/angular-translate-loader-url.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(e,t){"function"==typeof define&&define.amd?define([],function(){return t()}):"object"==typeof module&&module.exports?module.exports=t():t()}(0,function(){function e(r,n){"use strict";return function(e){if(!e||!e.url)throw new Error("Couldn't use urlLoader since no url is given!");var t={};return t[e.queryParameter||"lang"]=e.key,n(angular.extend({url:e.url,params:t,method:"GET"},e.$http)).then(function(e){return e.data},function(){return r.reject(e.key)})}}return e.$inject=["$q","$http"],angular.module("pascalprecht.translate").factory("$translateUrlLoader",e),e.displayName="$translateUrlLoader","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/bower.json b/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/bower.json deleted file mode 100644 index 5e573106..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/bower.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "name": "angular-translate-loader-url", - "description": "A plugin for Angular Translate", - "version": "2.18.2", - "main": "./angular-translate-loader-url.js", - "ignore": [], - "author": "Pascal Precht", - "license": "MIT", - "dependencies": { - "angular-translate": "~2.18.2" - } -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/package.json b/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/package.json deleted file mode 100644 index c107dda9..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate-loader-url/package.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "_from": "angular-translate-loader-url@2.18.2", - "_id": "angular-translate-loader-url@2.18.2", - "_inBundle": false, - "_integrity": "sha512-jaRF7F5xB6TgtTkDlmpV7DhjTXgJlN2FWQTFc47gM/xynB/nMw6TpNAXnJ/5KZlWSI5IDpisCp6gYeyLucZBgg==", - "_location": "/angular-translate-loader-url", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-translate-loader-url@2.18.2", - "name": "angular-translate-loader-url", - "escapedName": "angular-translate-loader-url", - "rawSpec": "2.18.2", - "saveSpec": null, - "fetchSpec": "2.18.2" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-translate-loader-url/-/angular-translate-loader-url-2.18.2.tgz", - "_shasum": "a85004b53644d15cbb876212ff7db4c66e301d1b", - "_spec": "angular-translate-loader-url@2.18.2", - "_where": "/home/abstractj/github/keycloak/keycloak-server-pull-requests/themes/src/main/resources/theme/keycloak/common/resources", - "author": { - "name": "Pascal Precht" - }, - "bugs": { - "url": "https://github.com/angular-translate/angular-translate/issues" - }, - "bundleDependencies": false, - "dependencies": { - "angular-translate": "~2.18.2" - }, - "deprecated": false, - "description": "Creates a loading function for a typical dynamic url pattern: \"locale.php?lang=en_US\", \"locale.php?lang=de_DE\", \"locale.php?language=nl_NL\" etc. Prefixing the specified url, the current requested, language id will be applied with \"?{queryParameter}={key}\". Using this service, the response of these urls must be an object of key-value pairs.", - "homepage": "https://angular-translate.github.io", - "keywords": [ - "angular", - "translate", - "loader" - ], - "license": "MIT", - "main": "angular-translate-loader-url.js", - "name": "angular-translate-loader-url", - "repository": { - "type": "git", - "url": "git+https://github.com/angular-translate/bower-angular-translate-loader-url.git" - }, - "version": "2.18.2" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/CHANGELOG.md b/keycloak-resources/resources/resources_common/node_modules/angular-translate/CHANGELOG.md deleted file mode 100644 index 3f8a133b..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/CHANGELOG.md +++ /dev/null @@ -1,1009 +0,0 @@ - -## [2.18.2](https://github.com/angular-translate/angular-translate/compare/2.18.1...2.18.2) (2020-01-04) - - -### Bug Fixes - -* **build:** fix build issue ([a14918d](https://github.com/angular-translate/angular-translate/commit/a14918d)) -* Allow line breaks in interpolated expressions. ([70957a3](https://github.com/angular-translate/angular-translate/commit/70957a3)), closes [#1884](https://github.com/angular-translate/angular-translate/issues/1884) [#1824](https://github.com/angular-translate/angular-translate/issues/1824) - - -### Features - -* throw TypeError for translationId ([b363e3b](https://github.com/angular-translate/angular-translate/commit/b363e3b)) - - - - -## [2.18.1](https://github.com/angular-translate/angular-translate/compare/2.18.0...2.18.1) (2018-05-19) - - - - -# [2.18.0](https://github.com/angular-translate/angular-translate/compare/2.17.1...2.18.0) (2018-05-17) - - -### Features - -* add test scope for AngularJS 1.7 ([7a44ddf](https://github.com/angular-translate/angular-translate/commit/7a44ddf)) - - - - -## [2.17.1](https://github.com/angular-translate/angular-translate/compare/2.17.0...2.17.1) (2018-04-15) - - -### Bug Fixes - -* **release:** fix zip artifacts on GitHub won't have `.` ([adb982f](https://github.com/angular-translate/angular-translate/commit/adb982f)), closes [#1840](https://github.com/angular-translate/angular-translate/issues/1840) [#1835](https://github.com/angular-translate/angular-translate/issues/1835) - - -### Features - -* support google closure compiler ([fe47ae7](https://github.com/angular-translate/angular-translate/commit/fe47ae7)) - - - - -# [2.17.0](https://github.com/angular-translate/angular-translate/compare/2.16.0...2.17.0) (2017-12-21) - - -### Bug Fixes - -* **partial loader:** add check for added/removed part while refreshing ([3520418](https://github.com/angular-translate/angular-translate/commit/3520418)), closes [#1781](https://github.com/angular-translate/angular-translate/issues/1781) - - -### Features - -* **service:** format bcp47 with script and language only correctly ([6c3b63e](https://github.com/angular-translate/angular-translate/commit/6c3b63e)) - - - - -# [2.16.0](https://github.com/angular-translate/angular-translate/compare/2.15.2...2.16.0) (2017-11-01) - - -### Bug Fixes - -* Stop using Angular.js lowercase internal method ([efc91c3](https://github.com/angular-translate/angular-translate/commit/efc91c3)), closes [#1797](https://github.com/angular-translate/angular-translate/issues/1797) -* **service:** fix invalid waiting for `forceLanguage` ([0c1a266](https://github.com/angular-translate/angular-translate/commit/0c1a266)), closes [#1770](https://github.com/angular-translate/angular-translate/issues/1770) -* **service:** ignore case when matching wildcards in available languages map ([7f25843](https://github.com/angular-translate/angular-translate/commit/7f25843)) -* **service:** respect case in available languages ([8fb6f5d](https://github.com/angular-translate/angular-translate/commit/8fb6f5d)) - - -### Features - -* **directive:** introduce attr translate-sanitize-strategy ([41c7e1f](https://github.com/angular-translate/angular-translate/commit/41c7e1f)) -* **loader-partial:** addPart specific urlTemplate override ([633fbc9](https://github.com/angular-translate/angular-translate/commit/633fbc9)) -* **service:** add sanitizeStrategy to $translate ([4a2c3ab](https://github.com/angular-translate/angular-translate/commit/4a2c3ab)) - - - - -## [2.15.2](https://github.com/angular-translate/angular-translate/compare/2.15.1...v2.15.2) (2017-06-22) - - -### Bug Fixes - -* Timezone and DST agnostic Unit test ([b3b04bd](https://github.com/angular-translate/angular-translate/commit/b3b04bd)) -* **$translateSanitizationProvider:** fix sanitization of boolean values ([70f4843](https://github.com/angular-translate/angular-translate/commit/70f4843)), closes [#1747](https://github.com/angular-translate/angular-translate/issues/1747) -* **service:** fixed IE8 "Expected identifier" error ([a30e37a](https://github.com/angular-translate/angular-translate/commit/a30e37a)) - - - - -## [2.15.1](https://github.com/angular-translate/angular-translate/compare/2.15.0...v2.15.1) (2017-03-04) - - -### Bug Fixes - -* **cloak:** fix missing decloak introduced by optimize [#1694](https://github.com/angular-translate/angular-translate/issues/1694) ([a9ec123](https://github.com/angular-translate/angular-translate/commit/a9ec123)), closes [#1705](https://github.com/angular-translate/angular-translate/issues/1705) - - - - -# [2.15.0](https://github.com/angular-translate/angular-translate/compare/2.14.0...v2.15.0) (2017-02-27) - - -### Features - -* **cookies:** use $cookies (1.4+) or $cookieStore (<1.4) ([51330f5](https://github.com/angular-translate/angular-translate/commit/51330f5)) -* **filter:** ensure no this==undefined will be injected ([5cb94cb](https://github.com/angular-translate/angular-translate/commit/5cb94cb)) - - - - -# [2.14.0](https://github.com/angular-translate/angular-translate/compare/2.13.1...v2.14.0) (2017-02-11) - - -### Bug Fixes - -* **$translate:** reassign language promises in refresh, update translation tables at the appropriate time, and simplify the routine ([351eb8f](https://github.com/angular-translate/angular-translate/commit/351eb8f)) -* **$translatePartialLoader:** prevent duplicate simultaneous HTTP requests ([8b2cea8](https://github.com/angular-translate/angular-translate/commit/8b2cea8)) -* **service:** add explicit promise rejection handler for $translate.use ([f4dc14a](https://github.com/angular-translate/angular-translate/commit/f4dc14a)) -* **service:** avoid sanitize/esape calls on null/undefined param values ([331e0dd](https://github.com/angular-translate/angular-translate/commit/331e0dd)) -* **service:** fix missing promise rejection handlers ([776993b](https://github.com/angular-translate/angular-translate/commit/776993b)) -* **staticFilesLoader:** do not use empty string as $http params ([ac2a038](https://github.com/angular-translate/angular-translate/commit/ac2a038)), closes [#1646](https://github.com/angular-translate/angular-translate/issues/1646) -* **tests:** rewrite tests for AJS 1.6 compatibility ([7c9d2c9](https://github.com/angular-translate/angular-translate/commit/7c9d2c9)) -* **translate:** handle null translation ([1e57b4f](https://github.com/angular-translate/angular-translate/commit/1e57b4f)), closes [#665](https://github.com/angular-translate/angular-translate/issues/665) -* **translateCloak:** incorrect element reference, inappropriate decloak at onReady, inappropriate decloak at $translateChangeSuccess ([a4d2795](https://github.com/angular-translate/angular-translate/commit/a4d2795)) - - -### Features - -* **dependencies:** update to messageformat 1.0.2 ([d4a0468](https://github.com/angular-translate/angular-translate/commit/d4a0468)) -* **service:** add translationId as param of custom interpolation service interface ([5de40de](https://github.com/angular-translate/angular-translate/commit/5de40de)) -* **tests:** add current AngularJS 1.6 in test scopes ([d8abdc5](https://github.com/angular-translate/angular-translate/commit/d8abdc5)) - - - - -## [2.13.1](https://github.com/angular-translate/angular-translate/compare/2.13.0...v2.13.1) (2016-12-06) - - - - -# [2.13.0](https://github.com/angular-translate/angular-translate/compare/2.12.1...v2.13.0) (2016-10-30) - - -### Bug Fixes - -* **service:** fix .instant() not handling TrustedValueHolderType correctly ([1ede55e](https://github.com/angular-translate/angular-translate/commit/1ede55e)), closes [#1618](https://github.com/angular-translate/angular-translate/issues/1618) -* **service:** reject promise if handler returns undefined ([8fe6f23](https://github.com/angular-translate/angular-translate/commit/8fe6f23)), closes [#1600](https://github.com/angular-translate/angular-translate/issues/1600) -* **service:** return empty string when found in fallback ([d76227e](https://github.com/angular-translate/angular-translate/commit/d76227e)) - - -### Features - -* **sanitize:** sanitize override on instant call ([01fecd0](https://github.com/angular-translate/angular-translate/commit/01fecd0)) -* **service:** add $translate.getTranslationTable(langKey) ([40f9e35](https://github.com/angular-translate/angular-translate/commit/40f9e35)) -* **service:** add file map lookup into static-files loader ([132e49a](https://github.com/angular-translate/angular-translate/commit/132e49a)) -* **service:** add mf configurer [#1619](https://github.com/angular-translate/angular-translate/issues/1619) ([676114b](https://github.com/angular-translate/angular-translate/commit/676114b)) - - - - -## [2.12.1](https://github.com/angular-translate/angular-translate/compare/2.12.0...v2.12.1) (2016-09-15) - - -### Bug Fixes - -* **build:** Add missing translate-attr directive to Gruntfile.js ([e70e9ad](https://github.com/angular-translate/angular-translate/commit/e70e9ad)), closes [#1577](https://github.com/angular-translate/angular-translate/issues/1577) -* **style:** fix code style issues in ~-attr directive ([1848bc8](https://github.com/angular-translate/angular-translate/commit/1848bc8)) - - - - -# [2.12.0](https://github.com/angular-translate/angular-translate/compare/2.11.1...v2.12.0) (2016-09-05) - - -### Bug Fixes - -* **service:** fix infinite loop when fallback language async loading fails ([233f30c](https://github.com/angular-translate/angular-translate/commit/233f30c)) -* **service:** treat date param as-is (no sanitize/escape) ([ab1ecce](https://github.com/angular-translate/angular-translate/commit/ab1ecce)), closes [#1560](https://github.com/angular-translate/angular-translate/issues/1560) - - -### Features - -* **directive:** introduce standalone translate-attr directive ([bcb0f2c](https://github.com/angular-translate/angular-translate/commit/bcb0f2c)) -* **partial loader:** add error response to errorHandler ([e3aba1c](https://github.com/angular-translate/angular-translate/commit/e3aba1c)) -* **service:** introduce new sanitize strategies: sce/sceParameters ([1624df5](https://github.com/angular-translate/angular-translate/commit/1624df5)) -* **service:** provide for sanitize/escape strategy 3rd argument context ([8504c60](https://github.com/angular-translate/angular-translate/commit/8504c60)) - - - - -## [2.11.1](https://github.com/angular-translate/angular-translate/compare/2.11.0...v2.11.1) (2016-07-17) - - -### Bug Fixes - -* **dependencies:** Update messageformat to ~0.3.1 ([04e11c9](https://github.com/angular-translate/angular-translate/commit/04e11c9)) -* **grunt:** add work-around for uglify preserveComments as expected ([32cdedb](https://github.com/angular-translate/angular-translate/commit/32cdedb)), closes [#1461](https://github.com/angular-translate/angular-translate/issues/1461) -* **service:** allow instant function to also take care of post process configuration ([b7d7907](https://github.com/angular-translate/angular-translate/commit/b7d7907)) -* **service:** avoid sanitizing of functions ([492d8e5](https://github.com/angular-translate/angular-translate/commit/492d8e5)), closes [#1529](https://github.com/angular-translate/angular-translate/issues/1529) -* **service:** Correct descriptive ngdocs to match parameters on the service calls ([91711f7](https://github.com/angular-translate/angular-translate/commit/91711f7)) -* **service:** fix interpolation issue with non-string as input ([fa4a80e](https://github.com/angular-translate/angular-translate/commit/fa4a80e)), closes [#1511](https://github.com/angular-translate/angular-translate/issues/1511) -* **service:** fix lost of data in async loader / error in runtime ([5ee0c3e](https://github.com/angular-translate/angular-translate/commit/5ee0c3e)) - - -### Features - -* **directive:** introduce a global keepContent setting ([2015f79](https://github.com/angular-translate/angular-translate/commit/2015f79)) - - - - -# [2.11.0](https://github.com/angular-translate/angular-translate/compare/2.10.0...v2.11.0) (2016-03-20) - - -### Bug Fixes - -* **directive:** reduced number of watchers by applying translateLanguage watcher only when direc ([961fc92](https://github.com/angular-translate/angular-translate/commit/961fc92)) -* **service:** add missing hasOwnProperty check ([823afc0](https://github.com/angular-translate/angular-translate/commit/823afc0)) -* **service:** avoid try to load languages which are explicitly not wanted ([bde935e](https://github.com/angular-translate/angular-translate/commit/bde935e)), closes [#1390](https://github.com/angular-translate/angular-translate/issues/1390) -* **service:** fix edge-case with .use() and .preferredLanguage() ([02688f2](https://github.com/angular-translate/angular-translate/commit/02688f2)) -* **service:** translations for `forceLanguage` will be loaded on demand ([14bc956](https://github.com/angular-translate/angular-translate/commit/14bc956)), closes [#1389](https://github.com/angular-translate/angular-translate/issues/1389) - -### Features - -* **depenceny:** Update messageformat.js to current 0.3.0 release ([fb48f78](https://github.com/angular-translate/angular-translate/commit/fb48f78)) -* **directive:** introduce attr translate-keep-content ([b2cf8a3](https://github.com/angular-translate/angular-translate/commit/b2cf8a3)) -* **service:** add `$translate.resolveClientLocale()` (also at provider) ([d0469ac](https://github.com/angular-translate/angular-translate/commit/d0469ac)) -* **service:** add support for uniformLanguageTag('iso639-1') ([1e037ec](https://github.com/angular-translate/angular-translate/commit/1e037ec)), closes [#1181](https://github.com/angular-translate/angular-translate/issues/1181) -* **service:** improve messageformat.js output caching ([cb31608](https://github.com/angular-translate/angular-translate/commit/cb31608)) -* **service:** introduce getter returning available languages ([3988af0](https://github.com/angular-translate/angular-translate/commit/3988af0)), closes [#1304](https://github.com/angular-translate/angular-translate/issues/1304) -* **service:** introduce post processing for translations ([f0c4874](https://github.com/angular-translate/angular-translate/commit/f0c4874)) -* **service:** support for default translation in missingTranslationHandler ([8c5044c](https://github.com/angular-translate/angular-translate/commit/8c5044c)) - - - - -# [2.10.0](https://github.com/angular-translate/angular-translate/compare/2.9.2...v2.10.0) (2016-02-28) - - -### Bug Fixes - -* **service:** make the fallback $uses / $translate.use work in a correct manner ([7e71a5a](https://github.com/angular-translate/angular-translate/commit/7e71a5a)) - - - - -## [2.9.2](https://github.com/angular-translate/angular-translate/compare/2.9.1...v2.9.2) (2016-02-21) - - -### Bug Fixes - -* **package:** redefine dependency version range (AJS 1.5) ([94eb844](https://github.com/angular-translate/angular-translate/commit/94eb844)), closes [#1394](https://github.com/angular-translate/angular-translate/issues/1394) [#1395](https://github.com/angular-translate/angular-translate/issues/1395) [#1397](https://github.com/angular-translate/angular-translate/issues/1397) -* **package:** redefine dependency version range (AJS 1.5) (fixup) ([20da73d](https://github.com/angular-translate/angular-translate/commit/20da73d)), closes [#1394](https://github.com/angular-translate/angular-translate/issues/1394) [#1395](https://github.com/angular-translate/angular-translate/issues/1395) [#1397](https://github.com/angular-translate/angular-translate/issues/1397) -* **service:** avoid call stack size error, print proper message ([73ea6e3](https://github.com/angular-translate/angular-translate/commit/73ea6e3)) -* **service:** ensure fallback language can be selected as `$uses` ([40ad523](https://github.com/angular-translate/angular-translate/commit/40ad523)) -* **service:** remove invalid argument for promise.finally ([2d72908](https://github.com/angular-translate/angular-translate/commit/2d72908)) - - - - -## [2.9.1](https://github.com/angular-translate/angular-translate/compare/2.9.0...v2.9.1) (2016-02-13) - - -### Bug Fixes - -* **package:** redefine dependency version range (AJS 1.5) ([9ccce6b](https://github.com/angular-translate/angular-translate/commit/9ccce6b)), closes [#1394](https://github.com/angular-translate/angular-translate/issues/1394) [#1395](https://github.com/angular-translate/angular-translate/issues/1395) [#1397](https://github.com/angular-translate/angular-translate/issues/1397) - - - - -# [2.9.0](https://github.com/angular-translate/angular-translate/compare/2.8.1...v2.9.0) (2016-01-24) - - -### Bug Fixes - -* **$translate:** apply notFoundIndicators only when all configured language checked in $translate ([25b13c4](https://github.com/angular-translate/angular-translate/commit/25b13c4)), closes [#1314](https://github.com/angular-translate/angular-translate/issues/1314) -* **directive:** add additional watcher validating cloak ([e7536b5](https://github.com/angular-translate/angular-translate/commit/e7536b5)), closes [#1287](https://github.com/angular-translate/angular-translate/issues/1287) -* **directive:** enforce update on default text change only ([ea94acd](https://github.com/angular-translate/angular-translate/commit/ea94acd)) -* **docs:** correct all occurrences of language names PR #1243 ([5f89d55](https://github.com/angular-translate/angular-translate/commit/5f89d55)) -* **docs:** fix broken link ([e641fe4](https://github.com/angular-translate/angular-translate/commit/e641fe4)) -* **docs:** Fix some typos in spanish ([830a84b](https://github.com/angular-translate/angular-translate/commit/830a84b)) -* **docs:** refresh outdated link ([392cab0](https://github.com/angular-translate/angular-translate/commit/392cab0)) -* **package:** add missing run-scriptlet "clean-test-scopes" ([c22c727](https://github.com/angular-translate/angular-translate/commit/c22c727)) -* **service:** partial loader service refetches list of parts ([069eafd](https://github.com/angular-translate/angular-translate/commit/069eafd)), closes [#1326](https://github.com/angular-translate/angular-translate/issues/1326) - -### Features - -* **build:** update test scope "AJS 1.5" using rc0 ([26cdc05](https://github.com/angular-translate/angular-translate/commit/26cdc05)) -* **dependencies:** add `angular` as the required dependency ([475a9b6](https://github.com/angular-translate/angular-translate/commit/475a9b6)) -* **service:** expose `$translate.negotiateLocale` being public ([9247000](https://github.com/angular-translate/angular-translate/commit/9247000)) -* **service:** force language used for translating ([e591462](https://github.com/angular-translate/angular-translate/commit/e591462)) - - - - -## [2.8.1](https://github.com/angular-translate/angular-translate/compare/2.8.0...v2.8.1) (2015-10-01) - - -### Bug Fixes - -* **service:** Fix `$translate.isReady()` won't return true if ready ([b40a344](https://github.com/angular-translate/angular-translate/commit/b40a344)), closes [#1239](https://github.com/angular-translate/angular-translate/issues/1239) -* **service:** should not abort fallback languages (feature #1070) ([cc410b1](https://github.com/angular-translate/angular-translate/commit/cc410b1)), closes [#1070](https://github.com/angular-translate/angular-translate/issues/1070) - - - - -# [2.8.0](https://github.com/angular-translate/angular-translate/compare/2.7.2...2.8.0) (2015-09-18) - - -### Bug Fixes - -* **build:** ensure MessageFormat will be added correctly when using UMD ([f5e039c](https://github.com/angular-translate/angular-translate/commit/f5e039c)) -* **directive:** Fix behavior of translate-cloak timing ([a6adf47](https://github.com/angular-translate/angular-translate/commit/a6adf47)), closes [#929](https://github.com/angular-translate/angular-translate/issues/929) [#1175](https://github.com/angular-translate/angular-translate/issues/1175) -* **directive:** Fix special IE11 issue #925 ([c4b16d3](https://github.com/angular-translate/angular-translate/commit/c4b16d3)), closes [#925](https://github.com/angular-translate/angular-translate/issues/925) -* **docs:** avoid using absolute links in lang chooser #1136 ([2cdc902](https://github.com/angular-translate/angular-translate/commit/2cdc902)) -* **docs:** Fix more typos in CONTRIBUTING.md, add some infos about tests ([e88b990](https://github.com/angular-translate/angular-translate/commit/e88b990)) -* **docs:** Fix typo in CONTRIBUTING.md ([1c2ac47](https://github.com/angular-translate/angular-translate/commit/1c2ac47)) -* **docs:** Fix typo in zh-cn docs ([2a16eb6](https://github.com/angular-translate/angular-translate/commit/2a16eb6)) -* **service:** abort the last loader if not finished #1070 ([dd4a8b4](https://github.com/angular-translate/angular-translate/commit/dd4a8b4)) -* **service:** update storage before triggering $translateChangeSuccess ([77dd5a2](https://github.com/angular-translate/angular-translate/commit/77dd5a2)) -* **service provider:** change/fix return of preferredLanguage() ([6014a81](https://github.com/angular-translate/angular-translate/commit/6014a81)) - -### Features - -* **directive:** translate-namespace directive ([45523bb](https://github.com/angular-translate/angular-translate/commit/45523bb)) -* **loaders:** addition to e7516dc #1080 (disable legacy $http cbs) ([233a012](https://github.com/angular-translate/angular-translate/commit/233a012)) -* **loaders:** remove use of legacy methods on $http promises #1080 ([e7516dc](https://github.com/angular-translate/angular-translate/commit/e7516dc)) -* **meta:** enrich copyright header with a leagl person ([21da61c](https://github.com/angular-translate/angular-translate/commit/21da61c)) -* **sanitize:** Allow sanitize strategy defined as a service ([8a6cc07](https://github.com/angular-translate/angular-translate/commit/8a6cc07)) -* **service:** add option to customize the nested delimiter ([78161f8](https://github.com/angular-translate/angular-translate/commit/78161f8)) -* **service:** introduce `isReady()` and `onReady()` with event ([9a4bd0d](https://github.com/angular-translate/angular-translate/commit/9a4bd0d)) - - - - -## [2.7.2](https://github.com/angular-translate/angular-translate/compare/2.7.1...2.7.2) (2015-06-01) - - -### Bug Fixes - -* **directive:** ensure value of `translate` will be translated always ([454d702](https://github.com/angular-translate/angular-translate/commit/454d702)) -* **sanitization:** fix/workaround issue when jQuery is not available ([ef1b10a](https://github.com/angular-translate/angular-translate/commit/ef1b10a)) -* **service:** fix silence on error, add missing catch on `refresh()` ([f3ec956](https://github.com/angular-translate/angular-translate/commit/f3ec956)) -* **service:** fix silence on error, add missing catch on `refresh()` ([5a85a64](https://github.com/angular-translate/angular-translate/commit/5a85a64)) -* **service:** make provider's storageKey chainable ([de8c253](https://github.com/angular-translate/angular-translate/commit/de8c253)) - - - - -## [2.7.1](https://github.com/angular-translate/angular-translate/compare/2.7.0...2.7.1) (2015-06-01) - - -### Bug Fixes - -* **docs:** fix typo in $translateChangeSuccess ([89e2569](https://github.com/angular-translate/angular-translate/commit/89e2569)) -* **service:** handle error "this.replace is not a function" ([8616dca](https://github.com/angular-translate/angular-translate/commit/8616dca)) -* **service:** integrate translationCache into service distribution file ([2fcbc60](https://github.com/angular-translate/angular-translate/commit/2fcbc60)) - -### Features - -* **$translateProvider:** add a new option to force async reload ([bdee77f](https://github.com/angular-translate/angular-translate/commit/bdee77f)) - - - - -# [2.7.0](https://github.com/angular-translate/angular-translate/compare/2.6.1...2.7.0) (2015-05-02) - - -### Bug Fixes - -* **directive:** fix issue with `data-` prefixed attributes #954 ([ee253bc](https://github.com/angular-translate/angular-translate/commit/ee253bc)), closes [#954](https://github.com/angular-translate/angular-translate/issues/954) -* **directive:** fix translate-value-* weren't be available on init ([98e8279](https://github.com/angular-translate/angular-translate/commit/98e8279)) -* **directive:** fix wrong initial translation causing overloading ([657ed8a](https://github.com/angular-translate/angular-translate/commit/657ed8a)) -* **directive:** handle interpolation of undefined keys correctly in updateTranslations, fixes is ([3f7cf4c](https://github.com/angular-translate/angular-translate/commit/3f7cf4c)), closes [#971](https://github.com/angular-translate/angular-translate/issues/971) -* **directive:** Make interpolate message format work smoothly also on message format > 0.1.7 - f ([2533f2d](https://github.com/angular-translate/angular-translate/commit/2533f2d)), closes [#789](https://github.com/angular-translate/angular-translate/issues/789) -* **directive:** make translate-values interpolate correctly with newer MessageFormat.js ([887dc1b](https://github.com/angular-translate/angular-translate/commit/887dc1b)) -* **docs:** bug in "Flash of untranslated content" section ([af5d746](https://github.com/angular-translate/angular-translate/commit/af5d746)) -* **docs:** fix invalid link in directive ([985cfd5](https://github.com/angular-translate/angular-translate/commit/985cfd5)) -* **docs:** typo in module type ([f0527b1](https://github.com/angular-translate/angular-translate/commit/f0527b1)) -* **feat:** export module name improving usage module loaders #944 ([cb33f63](https://github.com/angular-translate/angular-translate/commit/cb33f63)) -* **messageformat:** add duck type check for numbers #789 ([bbc1cbe](https://github.com/angular-translate/angular-translate/commit/bbc1cbe)) -* **refresh:** it has to clear all tables if no language key is specified ([3cce795](https://github.com/angular-translate/angular-translate/commit/3cce795)) -* **service:** always remove stored ref for lang promises ([dbd5be9](https://github.com/angular-translate/angular-translate/commit/dbd5be9)), closes [#824](https://github.com/angular-translate/angular-translate/issues/824) [#969](https://github.com/angular-translate/angular-translate/issues/969) -* **service:** do not try to load a predefined fallback language ([3be14df](https://github.com/angular-translate/angular-translate/commit/3be14df)) -* **service:** fix an issue resolving after missing translations ([a13899f](https://github.com/angular-translate/angular-translate/commit/a13899f)) -* **service:** fix possible npe ([1aaab98](https://github.com/angular-translate/angular-translate/commit/1aaab98)) -* **test/refresh:** fix current table refreshing test ([a298ed8](https://github.com/angular-translate/angular-translate/commit/a298ed8)) - -### Features - -* **$translatePartialLoader:** accept function in urlTemplate ([401204a](https://github.com/angular-translate/angular-translate/commit/401204a)) -* **build:** introduce module definition ([00b73ff](https://github.com/angular-translate/angular-translate/commit/00b73ff)) -* **filter:** add new option `$translate.statefulFilter()` ([dec4bf3](https://github.com/angular-translate/angular-translate/commit/dec4bf3)) -* **missingTranslationHandlerFactory:** pass interpolationParams to missingTranslationHandlerFactory ([a361fd0](https://github.com/angular-translate/angular-translate/commit/a361fd0)) -* **sanitization:** refactored, fixed and extended sanitization #993 ([12dbc57](https://github.com/angular-translate/angular-translate/commit/12dbc57)), closes [#993](https://github.com/angular-translate/angular-translate/issues/993) -* **service:** add uniformLanguageTagResolver ([b534e1a](https://github.com/angular-translate/angular-translate/commit/b534e1a)) - -### Performance Improvements - -* **directive:** watch parameters only if exist ([f0e2585](https://github.com/angular-translate/angular-translate/commit/f0e2585)) - - -### BREAKING CHANGES - -* You will get a warning message when using the default setting (not escaping the content). -You can fix (and remove) this warning by explicit set a sanitization strategy -within your config phase configuring $translateProvider. Even configuring the `null` mode will let the -warning disapper. You are highly encouraged specifing any mode except `null` because of security concerns. - - - -## [2.6.1](https://github.com/angular-translate/angular-translate/compare/2.6.0...2.6.1) (2015-03-01) - - -### Bug Fixes - -* **bower spec:** fix bower main property #922 ([3a1ad10](https://github.com/angular-translate/angular-translate/commit/3a1ad10)), closes [#922](https://github.com/angular-translate/angular-translate/issues/922) -* **custom interpolator:** improve handling of interpolator ids which don't exist ([373b46f](https://github.com/angular-translate/angular-translate/commit/373b46f)) -* **static-files-loader:** fix multiple files definition (docu update) #923, pr #936 ([e637c01](https://github.com/angular-translate/angular-translate/commit/e637c01)), closes [#923](https://github.com/angular-translate/angular-translate/issues/923) [#936](https://github.com/angular-translate/angular-translate/issues/936) -* **static-files-loader:** fix multiple files definition #923 ([1b6256a](https://github.com/angular-translate/angular-translate/commit/1b6256a)), closes [#923](https://github.com/angular-translate/angular-translate/issues/923) - - - - -# [2.6.0](https://github.com/angular-translate/angular-translate/compare/2.5.2...2.6.0) (2015-02-08) - - -### Bug Fixes - -* **directive:** ensure internal watcher will be removed ([e69f4a1](https://github.com/angular-translate/angular-translate/commit/e69f4a1)) -* **directive:** fix minor memory leak ([5e4533a](https://github.com/angular-translate/angular-translate/commit/5e4533a)) -* **directive:** fix missing update using dynamic translationIds ([faebe19](https://github.com/angular-translate/angular-translate/commit/faebe19)), closes [#854](https://github.com/angular-translate/angular-translate/issues/854) -* **directive:** newlines before/after translation ids should be ignored ([8dcf3e2](https://github.com/angular-translate/angular-translate/commit/8dcf3e2)), closes [#909](https://github.com/angular-translate/angular-translate/issues/909) -* **directive, service:** return value of translate-default also in case fallback languages are used - rel ([fcd6b3e](https://github.com/angular-translate/angular-translate/commit/fcd6b3e)) -* **filter:** apply notFoundIndicators also for instant translations correctly ([5a9f436](https://github.com/angular-translate/angular-translate/commit/5a9f436)), closes [#866](https://github.com/angular-translate/angular-translate/issues/866) -* **service:** fallback languages follow shortcuts (fixes #758) ([cce897a](https://github.com/angular-translate/angular-translate/commit/cce897a)), closes [#758](https://github.com/angular-translate/angular-translate/issues/758) -* **service:** fix an issue with default interpolator and expressions ([75b7381](https://github.com/angular-translate/angular-translate/commit/75b7381)) -* **service:** use $window/$windowProvider instead of window ([bfa7b7b](https://github.com/angular-translate/angular-translate/commit/bfa7b7b)) - -### Features - -* **$translatePartialLoader:** adds optional priority param to the addPart function ([570617c](https://github.com/angular-translate/angular-translate/commit/570617c)) -* **directive:** add $translateProvider.directityPriority ([b0b7716](https://github.com/angular-translate/angular-translate/commit/b0b7716)) -* **loader:** support for multiple static translation files ([c462ee6](https://github.com/angular-translate/angular-translate/commit/c462ee6)) -* **service:** extend loader api: add isPartLoaded and getRegisteredParts to $translatePartialL ([54f8ab3](https://github.com/angular-translate/angular-translate/commit/54f8ab3)) - - - - -## [2.5.2](https://github.com/angular-translate/angular-translate/compare/2.5.0...2.5.2) (2014-12-10) - - -### Bug Fixes - -* **directive:** missing watch for expression within elements text nodes ([31c0356](https://github.com/angular-translate/angular-translate/commit/31c0356)), closes [#701](https://github.com/angular-translate/angular-translate/issues/701) - - - - -# [2.5.0](https://github.com/angular-translate/angular-translate/compare/2.4.2...2.5.0) (2014-12-07) - - -### Bug Fixes - -* **directive:** ensure directive's text will be parsed at least once ([49cfef0](https://github.com/angular-translate/angular-translate/commit/49cfef0)) -* **loader:** under circum understances translation table got lost ([df37381](https://github.com/angular-translate/angular-translate/commit/df37381)) -* **messageformat-interpolation:** fix support for messageformat 0.2.* ([ac8d5ed](https://github.com/angular-translate/angular-translate/commit/ac8d5ed)) -* **service:** apply fix for empty strings in `navigator.language` ([5b4edd9](https://github.com/angular-translate/angular-translate/commit/5b4edd9)) -* **service:** fix npe when resolving fallback language for `instant` ([7c09d89](https://github.com/angular-translate/angular-translate/commit/7c09d89)) - -### Features - -* **$translateUrlLoader:** allow to use custom query parameter name for url loader ([e360bf8](https://github.com/angular-translate/angular-translate/commit/e360bf8)) -* **module:** use same fallback for module.run when no storage key is set ([247253d](https://github.com/angular-translate/angular-translate/commit/247253d)), closes [#739](https://github.com/angular-translate/angular-translate/issues/739) -* **storage:** rename set() into put() ([ef6a613](https://github.com/angular-translate/angular-translate/commit/ef6a613)) - - -### BREAKING CHANGES - -* This marks storage.set() as deprecated. In the -next major release v3, the old method `set()` will be dropped in favor -of `put()`. -Relates #772 - - - -## [2.4.2](https://github.com/angular-translate/angular-translate/compare/2.4.1...2.4.2) (2014-10-21) - - -### Bug Fixes - -* **partialloader:** fix possible circular dependency ([25f252c](https://github.com/angular-translate/angular-translate/commit/25f252c)), closes [#766](https://github.com/angular-translate/angular-translate/issues/766) - -### Features - -* **directive:** translate attributes (optimize process flow) ([508fd32](https://github.com/angular-translate/angular-translate/commit/508fd32)) -* **directive:** translate attributes using directive ([1d06d2a](https://github.com/angular-translate/angular-translate/commit/1d06d2a)), closes [#568](https://github.com/angular-translate/angular-translate/issues/568) -* **directive:** translate-cloak supports optional value for cloaking ([f7ccb7f](https://github.com/angular-translate/angular-translate/commit/f7ccb7f)) - - - - -## [2.4.1](https://github.com/angular-translate/angular-translate/compare/2.4.0...2.4.1) (2014-10-03) - - -### Bug Fixes - -* **service:** add missing final event on new (async) translations ([22cc8b4](https://github.com/angular-translate/angular-translate/commit/22cc8b4)) -* **service:** constructor `useUrlLoader()` missed optional options ([22f5c4b](https://github.com/angular-translate/angular-translate/commit/22f5c4b)) -* **service, loaders:** the loader options ($http) have been merged wrong ([0c35a95](https://github.com/angular-translate/angular-translate/commit/0c35a95)), closes [#754](https://github.com/angular-translate/angular-translate/issues/754) [#547](https://github.com/angular-translate/angular-translate/issues/547) - - - - -# [2.4.0](https://github.com/angular-translate/angular-translate/compare/2.3.0...2.4.0) (2014-09-22) - - -### Bug Fixes - -* **filter:** interpolated params w/ scope aren't possible starting AJS1.3 ([9465318](https://github.com/angular-translate/angular-translate/commit/9465318)) -* **filter:** mark filter being stateful required since Angular 1.3 rc2 ([bffbf04](https://github.com/angular-translate/angular-translate/commit/bffbf04)) -* **service:** `$nextLang` should be not unset parallel loadings ([d1745e4](https://github.com/angular-translate/angular-translate/commit/d1745e4)), closes [#647](https://github.com/angular-translate/angular-translate/issues/647) -* **service:** avoid possible doubled requested on refresh() ([98d429d](https://github.com/angular-translate/angular-translate/commit/98d429d)) -* **service:** avoid possible npe in internal getTranslationTable() ([9aaa9a0](https://github.com/angular-translate/angular-translate/commit/9aaa9a0)) -* **service:** correctly iterate in fallback languages (fixes #690) ([ac2f35c](https://github.com/angular-translate/angular-translate/commit/ac2f35c)), closes [#690](https://github.com/angular-translate/angular-translate/issues/690) - -### Features - -* **loader:** apply support for loaderOptions.$http ([8613bef](https://github.com/angular-translate/angular-translate/commit/8613bef)) -* **loaders:** introduce loader cache ([b685601](https://github.com/angular-translate/angular-translate/commit/b685601)), closes [#529](https://github.com/angular-translate/angular-translate/issues/529) -* **service:** enrich events with the currently handled language key ([73b289d](https://github.com/angular-translate/angular-translate/commit/73b289d)) -* **service:** interpolate translationId in case of rejected translation ([3efaac5](https://github.com/angular-translate/angular-translate/commit/3efaac5)), closes [#730](https://github.com/angular-translate/angular-translate/issues/730) -* **service:** introduce `versionInfo` function ([e37d89c](https://github.com/angular-translate/angular-translate/commit/e37d89c)) -* **service:** prefer detecting language by `navigator.languages` #722 ([2204f4f](https://github.com/angular-translate/angular-translate/commit/2204f4f)) - - -### BREAKING CHANGES - -* Since filters are stateless and have no access to its scope anymore (see https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f), a context must be given explicitly. This removes the feature of an interpolation based on the scope (context), even without the $rootScope. -However, the feature will still work in AJS <=1.2, so we won't remove it completely yet. Handle the feature as slightly deprecated. - - - -# [2.3.0](https://github.com/angular-translate/angular-translate/compare/2.2.0...2.3.0) (2014-09-16) - - -### Bug Fixes - -* **$translate:** return $missingTranslationHandler result when no translation was found ([7625951](https://github.com/angular-translate/angular-translate/commit/7625951)) -* **bower.json:** Avoid 'invalid-meta angular-bootstrap-affix is missing "ignore" entry in bower.j ([595501a](https://github.com/angular-translate/angular-translate/commit/595501a)), closes [bower/bower#1388](https://github.com/bower/bower/issues/1388) -* **demo:** fixes wrong method call in demo ([47fc943](https://github.com/angular-translate/angular-translate/commit/47fc943)) -* **directive:** change event for listening to `$translateChangeEnd` ([98fe649](https://github.com/angular-translate/angular-translate/commit/98fe649)), closes [#658](https://github.com/angular-translate/angular-translate/issues/658) -* **directive:** improve the cloak-directive's performance ([acab18a](https://github.com/angular-translate/angular-translate/commit/acab18a)) -* **docs:** fix example in directive ngdoc-documentation (fixes #678) ([176b3e9](https://github.com/angular-translate/angular-translate/commit/176b3e9)), closes [#678](https://github.com/angular-translate/angular-translate/issues/678) -* **docs:** Fix typo ([6c2ab30](https://github.com/angular-translate/angular-translate/commit/6c2ab30)) -* **package.json:** remove unnecessary relative paths from package.json ([8e5b87e](https://github.com/angular-translate/angular-translate/commit/8e5b87e)) -* **service:** add shim for indexOf and trim #638 ([b951fd5](https://github.com/angular-translate/angular-translate/commit/b951fd5)) -* **service:** addition of preferred language to fallback language stack is now preventing dupl ([b2bb166](https://github.com/angular-translate/angular-translate/commit/b2bb166)) -* **service:** load fallback languages also for instant and filter ([ed6023a](https://github.com/angular-translate/angular-translate/commit/ed6023a)) -* **service:** use hasOwnProperty of prototype #638 ([d8a5060](https://github.com/angular-translate/angular-translate/commit/d8a5060)) -* **storage:** fix 'DOM Exception 18' at feature detection ([75504cb](https://github.com/angular-translate/angular-translate/commit/75504cb)), closes [#629](https://github.com/angular-translate/angular-translate/issues/629) -* **storage:** fixup 75504cbe ([53a8bad](https://github.com/angular-translate/angular-translate/commit/53a8bad)) -* **translateService:** fixup/rewrite for b48f6bb (specs) ([45ac14d](https://github.com/angular-translate/angular-translate/commit/45ac14d)) -* **translateService:** prevent multiple XHR calls ([b48f6bb](https://github.com/angular-translate/angular-translate/commit/b48f6bb)) - -### Features - -* **directive:** add possibility to mix translation interpolation with other text in element body ([be62131](https://github.com/angular-translate/angular-translate/commit/be62131)), closes [#461](https://github.com/angular-translate/angular-translate/issues/461) - - - - -# [2.2.0](https://github.com/angular-translate/angular-translate/compare/2.1.0...2.2.0) (2014-06-03) - - -### Bug Fixes - -* **$translate:** checks modification ([b91e4de](https://github.com/angular-translate/angular-translate/commit/b91e4de)) -* **$translate:** if translation exists, use the translated string even if it's empty ([4ba736f](https://github.com/angular-translate/angular-translate/commit/4ba736f)) -* **$translate:** if translation exists, use the translated string even if it's empty ([eeb8c2a](https://github.com/angular-translate/angular-translate/commit/eeb8c2a)) -* **$translate:** use case-insensitive check for language key aliases ([09a8bf1](https://github.com/angular-translate/angular-translate/commit/09a8bf1)), closes [#431](https://github.com/angular-translate/angular-translate/issues/431) -* **$translate:** use case-insensitive check for language key aliases ([26ec308](https://github.com/angular-translate/angular-translate/commit/26ec308)), closes [#431](https://github.com/angular-translate/angular-translate/issues/431) -* **$translateProvider:** determinePreferredLanguage was not chainable ([7c29f2f](https://github.com/angular-translate/angular-translate/commit/7c29f2f)), closes [#487](https://github.com/angular-translate/angular-translate/issues/487) -* **$translateProvider:** fix comparison in one case of negotiateLocale() ([c2b94ca](https://github.com/angular-translate/angular-translate/commit/c2b94ca)) -* **$translateProvider:** fix comparison in one case of negotiateLocale() ([fe04c72](https://github.com/angular-translate/angular-translate/commit/fe04c72)) -* **demo:** correct demo of `translate-values` ([efa74fa](https://github.com/angular-translate/angular-translate/commit/efa74fa)) -* **demo:** correct demo of `translate-values` ([7de2ae2](https://github.com/angular-translate/angular-translate/commit/7de2ae2)) -* **demo:** use `.instant()` ([6bea192](https://github.com/angular-translate/angular-translate/commit/6bea192)) -* **directive:** Make translate-value-* work inside ng-if and ng-repeat ([e07eea7](https://github.com/angular-translate/angular-translate/commit/e07eea7)), closes [#433](https://github.com/angular-translate/angular-translate/issues/433) -* **directive:** Make translate-value-* work inside ng-if and ng-repeat ([f22624b](https://github.com/angular-translate/angular-translate/commit/f22624b)), closes [#433](https://github.com/angular-translate/angular-translate/issues/433) -* **docs:** removes explicit protocol declaration for assets ([eaa9bf7](https://github.com/angular-translate/angular-translate/commit/eaa9bf7)), closes [#513](https://github.com/angular-translate/angular-translate/issues/513) -* **gruntfile:** fix image link ([65fc8be](https://github.com/angular-translate/angular-translate/commit/65fc8be)) -* **package.json:** fix repository url ([40af7ce](https://github.com/angular-translate/angular-translate/commit/40af7ce)) -* **package.json:** fix repository url ([a410c9a](https://github.com/angular-translate/angular-translate/commit/a410c9a)) -* **partialLoader:** fixes deprecated usage of arguments.callee ([1ac3a0a](https://github.com/angular-translate/angular-translate/commit/1ac3a0a)) -* **service:** docs annotation ([8ef0415](https://github.com/angular-translate/angular-translate/commit/8ef0415)) -* **service:** docs annotation ([839c4e8](https://github.com/angular-translate/angular-translate/commit/839c4e8)) -* **service:** use the aliased language key if available ([675e9a2](https://github.com/angular-translate/angular-translate/commit/675e9a2)), closes [#530](https://github.com/angular-translate/angular-translate/issues/530) -* **storageLocal:** fixes QUOTAEXCEEDEDERROR (safari private browsing) ([59aa2a0](https://github.com/angular-translate/angular-translate/commit/59aa2a0)) -* fix npe on empty strings (trim()) ([c69de7b](https://github.com/angular-translate/angular-translate/commit/c69de7b)) -* **translateInterpolator:** make it work with 1.3-beta ([97e2241](https://github.com/angular-translate/angular-translate/commit/97e2241)) - -### Features - -* **directive:** add option to define a default translation text ([a802665](https://github.com/angular-translate/angular-translate/commit/a802665)) -* **directive:** add option to define a default translation text ([fc57d26](https://github.com/angular-translate/angular-translate/commit/fc57d26)) -* **directive:** Support for camel casing interpolation variables. ([b345041](https://github.com/angular-translate/angular-translate/commit/b345041)) -* **directive:** Support for camel casing interpolation variables. ([4791e25](https://github.com/angular-translate/angular-translate/commit/4791e25)) -* **messageformat-support:** enhancing for sanitization like default ([ad01686](https://github.com/angular-translate/angular-translate/commit/ad01686)) -* **missingFallbackDefaultText:** enables a feature to return a default text for displaying in case of missing tra ([f24b15e](https://github.com/angular-translate/angular-translate/commit/f24b15e)) -* **service:** add possibility to translate a set of translation ids ([612dc27](https://github.com/angular-translate/angular-translate/commit/612dc27)) -* **service:** add possibility to translate a set of translation ids ([57bd07c](https://github.com/angular-translate/angular-translate/commit/57bd07c)) -* **service:** allow using wildcards in language aliases ([6f0ae3b](https://github.com/angular-translate/angular-translate/commit/6f0ae3b)), closes [#426](https://github.com/angular-translate/angular-translate/issues/426) - - - - -## [2.0.1](https://github.com/angular-translate/angular-translate/compare/2.0.0...2.0.1) (2014-02-25) - - -### Bug Fixes - -* **$translate:** Ensuring that languages will be set based on the order they are requested, not t ([c909cd2](https://github.com/angular-translate/angular-translate/commit/c909cd2)) -* **$translate:** Ensuring that languages will be set based on the order they are requested, not t ([ebd62af](https://github.com/angular-translate/angular-translate/commit/ebd62af)) -* **$translate:** Ensuring that languages will be set based on the order they are requested, not t ([32e1851](https://github.com/angular-translate/angular-translate/commit/32e1851)) -* **instant:** $translate.instant(id) does not return correct fallback ([eec1d77](https://github.com/angular-translate/angular-translate/commit/eec1d77)) -* **instant:** fix possible npe in case of filters with undefineds ([61a9490](https://github.com/angular-translate/angular-translate/commit/61a9490)) -* **refresh:** fix bug in refresh if using partial loader ([95c43b4](https://github.com/angular-translate/angular-translate/commit/95c43b4)) - -### Features - -* **instant:** invoke missing handler within `$translate.instant(id)` ([aaf52b5](https://github.com/angular-translate/angular-translate/commit/aaf52b5)) - - - - -# [2.0.0](https://github.com/angular-translate/angular-translate/compare/1.1.1...2.0.0) (2014-02-16) - - -### Bug Fixes - -* ***:** jshint fixes ([1e3f8a6](https://github.com/angular-translate/angular-translate/commit/1e3f8a6)) -* **$translate:** check for fallbacklanguage ([321803d](https://github.com/angular-translate/angular-translate/commit/321803d)) -* **$translate:** Trim whitespace off translationId ([4939424](https://github.com/angular-translate/angular-translate/commit/4939424)) -* **$translatePartialLoader:** fixes docs annotation ([d6ea84b](https://github.com/angular-translate/angular-translate/commit/d6ea84b)) -* **demo:** fix server routes + add index page ([eb0a2dc](https://github.com/angular-translate/angular-translate/commit/eb0a2dc)) -* **demo:** links to demo resources updated to new locactions ([fddaa49](https://github.com/angular-translate/angular-translate/commit/fddaa49)) -* **deps:** add missing resolution ([a98a2f6](https://github.com/angular-translate/angular-translate/commit/a98a2f6)) -* **docs:** fixes links for languages ([265490f](https://github.com/angular-translate/angular-translate/commit/265490f)) -* **fallbackLanguage:** Fix fallback languages loading and applying ([4c5c47c](https://github.com/angular-translate/angular-translate/commit/4c5c47c)) -* **grunt:** includes translate-cloak directive ([84a59d2](https://github.com/angular-translate/angular-translate/commit/84a59d2)) -* avoid calls with empty translationId (sub issue of #298) ([08f087b](https://github.com/angular-translate/angular-translate/commit/08f087b)) -* fix npe introduced in 4939424a30 (#281) ([173a9bc](https://github.com/angular-translate/angular-translate/commit/173a9bc)), closes [(#281](https://github.com/(/issues/281) [#298](https://github.com/angular-translate/angular-translate/issues/298) -* **guide/ru,uk:** Fix uses->use in multi language ([af59c6a](https://github.com/angular-translate/angular-translate/commit/af59c6a)) -* **instant:** remove language-preload if there were used within instant ([9a3eda6](https://github.com/angular-translate/angular-translate/commit/9a3eda6)) -* **loader-static-files.js:** Now allows empty string as prefix and postfix. ([051f431](https://github.com/angular-translate/angular-translate/commit/051f431)) -* **service:** fallback languages could not load when using `instant()` ([26de486](https://github.com/angular-translate/angular-translate/commit/26de486)) -* **translateCloak:** makes jshint happy ([2058fd3](https://github.com/angular-translate/angular-translate/commit/2058fd3)) -* **translateDirective:** fixes bad coding convention ([d5db4ad](https://github.com/angular-translate/angular-translate/commit/d5db4ad)) - -### Features - -* **$translateProvider:** adds determinePreferredLanguage() ([7cbfabe](https://github.com/angular-translate/angular-translate/commit/7cbfabe)) -* **$translateProvider:** adds registerAvailableLanguagesKeys for negotiation ([6bef6bd](https://github.com/angular-translate/angular-translate/commit/6bef6bd)) -* **filter:** filter now use $translate.instant() since promises could not use ([a1b8a17](https://github.com/angular-translate/angular-translate/commit/a1b8a17)) -* **service:** add $translate.instant() for instant translations ([3a855eb](https://github.com/angular-translate/angular-translate/commit/3a855eb)) -* add an option for post processing compiling ([d5cd943](https://github.com/angular-translate/angular-translate/commit/d5cd943)) -* add option to html escape all values ([e042c44](https://github.com/angular-translate/angular-translate/commit/e042c44)) -* **translateCloak:** adds translate-cloak directive ([c125c56](https://github.com/angular-translate/angular-translate/commit/c125c56)) -* **translateDirective:** teaches directive custom translate-value-* attr ([5c27467](https://github.com/angular-translate/angular-translate/commit/5c27467)), closes [#188](https://github.com/angular-translate/angular-translate/issues/188) - - - - -## [1.1.1](https://github.com/angular-translate/angular-translate/compare/1.1.0...1.1.1) (2013-11-24) - - -### Bug Fixes - -* fixes encoding ([084f08c](https://github.com/angular-translate/angular-translate/commit/084f08c)) -* **docs:** fixes typo ([7e1c4e9](https://github.com/angular-translate/angular-translate/commit/7e1c4e9)) -* **docs:** fixes typo in landing page ([0b999ab](https://github.com/angular-translate/angular-translate/commit/0b999ab)) -* **grunt:** fixes missing storage-key ([635d290](https://github.com/angular-translate/angular-translate/commit/635d290)) -* **translateDirective:** fixes occuring 'translation id undefined' erros ([bb5a2c4](https://github.com/angular-translate/angular-translate/commit/bb5a2c4)) - -### Features - -* add option to html escape all values ([fe94c1f](https://github.com/angular-translate/angular-translate/commit/fe94c1f)) -* shortcuts and links\n\nShortcuts creates a shorter translationId if the last key ([f9f2cf2](https://github.com/angular-translate/angular-translate/commit/f9f2cf2)) -* Update required Node up `0.10` ([b7cf5f4](https://github.com/angular-translate/angular-translate/commit/b7cf5f4)) - - - - -# [1.1.0](https://github.com/angular-translate/angular-translate/compare/1.0.2...1.1.0) (2013-09-02) - - -### Bug Fixes - -* **translateDirective:** fixes bug that directive writes into scope ([4e06468](https://github.com/angular-translate/angular-translate/commit/4e06468)), closes [#128](https://github.com/angular-translate/angular-translate/issues/128) -* **translateDirective:** fixes scope handling ([c566586](https://github.com/angular-translate/angular-translate/commit/c566586)) -* **translateService:** reset proposed language if there's no pending loader ([6b477fc](https://github.com/angular-translate/angular-translate/commit/6b477fc)) - -### Features - -* **$translatePartialLoader:** Basic implementation ([81222bf](https://github.com/angular-translate/angular-translate/commit/81222bf)) -* **invalidate:** added invalidate() method ([d41f91e](https://github.com/angular-translate/angular-translate/commit/d41f91e)) -* **translateProvider:** makes methods chainable ([cdc9e9e](https://github.com/angular-translate/angular-translate/commit/cdc9e9e)) - - - - -## [1.0.2](https://github.com/angular-translate/angular-translate/compare/1.0.1...1.0.2) (2013-08-07) - - -### Bug Fixes - -* **fallbackLanguage:** fixes bug that fallbackLanguage is loaded without loader ([6aa3747](https://github.com/angular-translate/angular-translate/commit/6aa3747)) -* **translateService:** uses should only load if a loader is registered ([604daec](https://github.com/angular-translate/angular-translate/commit/604daec)) -* **typo:** remove unnecessary semicolon ([54cb232](https://github.com/angular-translate/angular-translate/commit/54cb232)) - - - - -## [1.0.1](https://github.com/angular-translate/angular-translate/compare/1.0.0...1.0.1) (2013-07-26) - - -### Bug Fixes - -* **demo:** change src to angular-translate script ([4be93b6](https://github.com/angular-translate/angular-translate/commit/4be93b6)) -* **dependency:** add 'angular-cookies' as bower devDependency ([b6f1426](https://github.com/angular-translate/angular-translate/commit/b6f1426)) -* **platolink:** deep link ([d368bf3](https://github.com/angular-translate/angular-translate/commit/d368bf3)) - - - - -# [1.0.0](https://github.com/angular-translate/angular-translate/compare/0.9.4...1.0.0) (2013-07-23) - - -### Bug Fixes - -* **docs:** fixes methodOf declaration of addInterpolation method ([f1eeba7](https://github.com/angular-translate/angular-translate/commit/f1eeba7)) -* **gh-pages:** plato report ([b85e19b](https://github.com/angular-translate/angular-translate/commit/b85e19b)) -* **tests:** travis CI ([c8624bf](https://github.com/angular-translate/angular-translate/commit/c8624bf)) -* **tests:** travis CI ([629bb8d](https://github.com/angular-translate/angular-translate/commit/629bb8d)) -* fixes gruntfile ([0d500db](https://github.com/angular-translate/angular-translate/commit/0d500db)) - -### Features - -* **messageformat-interpolation:** implements usage of messageformat ([5596e8b](https://github.com/angular-translate/angular-translate/commit/5596e8b)) -* **translateDirective:** teaches directives to use custom interpolation ([bf3dbbb](https://github.com/angular-translate/angular-translate/commit/bf3dbbb)) -* **translateFilter:** teaches filter to use custom interpolation ([46f03cc](https://github.com/angular-translate/angular-translate/commit/46f03cc)) -* **translateService:** adds method to configure indicators for not found translations ([52a039f](https://github.com/angular-translate/angular-translate/commit/52a039f)), closes [#77](https://github.com/angular-translate/angular-translate/issues/77) -* **translateService:** extracts default interpolation in standalone service ([5d8cb56](https://github.com/angular-translate/angular-translate/commit/5d8cb56)) -* **translateService:** implements proposedLanguage() ([6d34792](https://github.com/angular-translate/angular-translate/commit/6d34792)) -* **translateService:** implements usage of different interpolation services ([5e20e24](https://github.com/angular-translate/angular-translate/commit/5e20e24)) -* **translateService:** informs interpolator when locale has changed ([e59b141](https://github.com/angular-translate/angular-translate/commit/e59b141)) -* **translateService:** missingTranslationHandler receives language ([6fe6bb1](https://github.com/angular-translate/angular-translate/commit/6fe6bb1)) - - - - -## [0.9.4](https://github.com/angular-translate/angular-translate/compare/0.9.3...0.9.4) (2013-06-21) - - -### Bug Fixes - -* **translateService:** fixes missingTranslationHandler-invokation bug ([525b353](https://github.com/angular-translate/angular-translate/commit/525b353)), closes [#74](https://github.com/angular-translate/angular-translate/issues/74) - -### Features - -* **translateService:** removes empty options object requirement for loaders ([c09d1db](https://github.com/angular-translate/angular-translate/commit/c09d1db)) - - - - -## [0.9.3](https://github.com/angular-translate/angular-translate/compare/0.9.2...0.9.3) (2013-06-10) - - -### Features - -* **translateService:** let translate service handle multiple promises ([0e5d6d9](https://github.com/angular-translate/angular-translate/commit/0e5d6d9)), closes [#70](https://github.com/angular-translate/angular-translate/issues/70) - - - - -## [0.9.2](https://github.com/angular-translate/angular-translate/compare/0.9.1...0.9.2) (2013-05-30) - - -### Bug Fixes - -* fix bower.json ([c389882](https://github.com/angular-translate/angular-translate/commit/c389882)) - -### Features - -* **translateProvider:** add fallbackLanguage() method ([018991e](https://github.com/angular-translate/angular-translate/commit/018991e)), closes [#67](https://github.com/angular-translate/angular-translate/issues/67) - - - - -## [0.9.1](https://github.com/angular-translate/angular-translate/compare/0.9.0...0.9.1) (2013-05-25) - - -### Bug Fixes - -* **translate.js:** Allow blank translation values ([97591a8](https://github.com/angular-translate/angular-translate/commit/97591a8)) - - - - -# [0.9.0](https://github.com/angular-translate/angular-translate/compare/0.8.1...0.9.0) (2013-05-22) - - -### Features - -* **translateProvider:** add use*() methods for async loaders ([f2329cc](https://github.com/angular-translate/angular-translate/commit/f2329cc)), closes [#58](https://github.com/angular-translate/angular-translate/issues/58) - - - - -## [0.8.1](https://github.com/angular-translate/angular-translate/compare/0.8.0...0.8.1) (2013-05-16) - - -### Bug Fixes - -* **translate.js:** corrected typo ([82569f0](https://github.com/angular-translate/angular-translate/commit/82569f0)) - -### Features - -* **translateProvider:** add methods to use different missingTranslationHandlers ([f6ed3e3](https://github.com/angular-translate/angular-translate/commit/f6ed3e3)) - - -### BREAKING CHANGES - -* S: missingTranslationHandler is no longer supported since its functionality will be replaced with useMissingTranslationHandlerLog. - - - -# [0.8.0](https://github.com/angular-translate/angular-translate/compare/0.7.1...0.8.0) (2013-05-14) - - - - - -## [0.7.1](https://github.com/angular-translate/angular-translate/compare/0.7.0...0.7.1) (2013-05-13) - - -### Features - -* **chore:** rename ngTranslate folder to src ([65012d9](https://github.com/angular-translate/angular-translate/commit/65012d9)) - - - - -# [0.7.0](https://github.com/angular-translate/angular-translate/compare/0.6.0...0.7.0) (2013-05-12) - - -### Bug Fixes - -* **directive:** trim off white space around element.text() ([e10173a](https://github.com/angular-translate/angular-translate/commit/e10173a)) -* **tests:** Fix preferredLanguage tests ([73efcfc](https://github.com/angular-translate/angular-translate/commit/73efcfc)) -* **tests:** fix tests for preferredLanguage() ([f1b5084](https://github.com/angular-translate/angular-translate/commit/f1b5084)) -* **tests:** Old values won't be ignored, so they have to be discarded ([625b1d6](https://github.com/angular-translate/angular-translate/commit/625b1d6)) - -### Features - -* nested objects will be transformed when using `$translateProvider.translations` ([b15cee4](https://github.com/angular-translate/angular-translate/commit/b15cee4)) -* **docs:** add documentation comments ([b1efbca](https://github.com/angular-translate/angular-translate/commit/b1efbca)) -* **storageKey:** add a storageKey method ([dabf822](https://github.com/angular-translate/angular-translate/commit/dabf822)) -* **translateProvider:** add a preferredLanguage property ([563e9bf](https://github.com/angular-translate/angular-translate/commit/563e9bf)) -* **translateProvider:** add storagePrefix() method ([64cd99b](https://github.com/angular-translate/angular-translate/commit/64cd99b)) -* **translateProvider:** add useLoaderFactory() as shortcut method ([2915e8b](https://github.com/angular-translate/angular-translate/commit/2915e8b)) -* **translateProvider:** make translationTable extendable ([8e3a455](https://github.com/angular-translate/angular-translate/commit/8e3a455)), closes [#33](https://github.com/angular-translate/angular-translate/issues/33) -* **translateProvider:** missingTranslationHandler ([3a5819e](https://github.com/angular-translate/angular-translate/commit/3a5819e)) -* **translateService:** add storage() method ([98c2b12](https://github.com/angular-translate/angular-translate/commit/98c2b12)) - - -### BREAKING CHANGES - -* The $STORAGE_KEY isn't represent a current storage key -from now. To discover which key is used now you have to call the storageKey -method without params. - - - -# [0.6.0](https://github.com/angular-translate/angular-translate/compare/0.5.2...0.6.0) (2013-05-03) - - -### Features - -* **ngmin:** add grunt-ngmin ([f630958](https://github.com/angular-translate/angular-translate/commit/f630958)), closes [#20](https://github.com/angular-translate/angular-translate/issues/20) - - - - -## [0.5.2](https://github.com/angular-translate/angular-translate/compare/0.5.1...0.5.2) (2013-04-30) - - -### Bug Fixes - -* **translateDirective:** check for truthy value in watch callback ([98087c7](https://github.com/angular-translate/angular-translate/commit/98087c7)), closes [#18](https://github.com/angular-translate/angular-translate/issues/18) - - - - -## [0.5.1](https://github.com/angular-translate/angular-translate/compare/0.5.0...0.5.1) (2013-04-29) - - -### Features - -* **.bowerrc:** add .bowerrc ([42363ee](https://github.com/angular-translate/angular-translate/commit/42363ee)), closes [#16](https://github.com/angular-translate/angular-translate/issues/16) -* **.jshintrc:** add .jshintrc ([0c8d3da](https://github.com/angular-translate/angular-translate/commit/0c8d3da)), closes [#17](https://github.com/angular-translate/angular-translate/issues/17) -* **bower.json:** rename component.json to bower.json ([17acd10](https://github.com/angular-translate/angular-translate/commit/17acd10)) - - - - -# [0.5.0](https://github.com/angular-translate/angular-translate/compare/0.4.4...0.5.0) (2013-04-25) - - -### Features - -* **conventional-changelogs:** Add grunt-conventional-changelog task ([c8093a7](https://github.com/angular-translate/angular-translate/commit/c8093a7)), closes [#11](https://github.com/angular-translate/angular-translate/issues/11) - - - - -## [0.4.4](https://github.com/angular-translate/angular-translate/compare/0.4.2...0.4.4) (2013-04-23) - - - - - -## [0.4.2](https://github.com/angular-translate/angular-translate/compare/0.4.0...0.4.2) (2013-04-17) - - - - - -# [0.4.0](https://github.com/angular-translate/angular-translate/compare/0.3.0...0.4.0) (2013-04-07) - - - - - -# [0.3.0](https://github.com/angular-translate/angular-translate/compare/0.2.1...0.3.0) (2013-04-06) - - - - - -## [0.2.1](https://github.com/angular-translate/angular-translate/compare/0.2.0...0.2.1) (2013-04-05) - - - - - -# [0.2.0](https://github.com/angular-translate/angular-translate/compare/0.1.2...0.2.0) (2013-04-03) - - - - - -## [0.1.2](https://github.com/angular-translate/angular-translate/compare/0.1.1...0.1.2) (2013-04-02) - - - - - -## [0.1.1](https://github.com/angular-translate/angular-translate/compare/0.1.0...0.1.1) (2013-04-01) - - - - - -# [0.1.0](https://github.com/angular-translate/angular-translate/compare/0.0.5...0.1.0) (2013-04-01) - - - - - -## [0.0.5](https://github.com/angular-translate/angular-translate/compare/0.0.4...0.0.5) (2013-04-01) - - - - - -## [0.0.4](https://github.com/angular-translate/angular-translate/compare/0.0.2...0.0.4) (2013-04-01) - - - - - -## [0.0.2](https://github.com/angular-translate/angular-translate/compare/0.0.1...0.0.2) (2013-03-30) - - - - - -## 0.0.1 (2013-03-28) - - - - diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/LICENSE b/keycloak-resources/resources/resources_common/node_modules/angular-translate/LICENSE deleted file mode 100644 index d4d931c2..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013-2017 The angular-translate team and Pascal Precht - -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/keycloak-resources/resources/resources_common/node_modules/angular-translate/README.md b/keycloak-resources/resources/resources_common/node_modules/angular-translate/README.md deleted file mode 100644 index 3bd51060..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# [![angular-translate](https://raw.github.com/angular-translate/angular-translate/canary/identity/logo/angular-translate-alternative/angular-translate_alternative_medium2.png)](http://angular-translate.github.io) - -[![Greenkeeper badge](https://badges.greenkeeper.io/angular-translate/angular-translate.svg)](https://greenkeeper.io/) - -![Bower](https://img.shields.io/bower/v/angular-translate.svg) [![NPM](https://img.shields.io/npm/v/angular-translate.svg)](https://www.npmjs.com/package/angular-translate) [![cdnjs](https://img.shields.io/cdnjs/v/angular-translate.svg)](https://cdnjs.com/libraries/angular-translate) [![Build Status](https://img.shields.io/travis/angular-translate/angular-translate.svg)](https://travis-ci.org/angular-translate/angular-translate) ![License](https://img.shields.io/npm/l/angular-translate.svg) ![Code Climate](https://img.shields.io/codeclimate/github/angular-translate/angular-translate.svg) ![Code Coverage](https://img.shields.io/codeclimate/coverage/github/angular-translate/angular-translate.svg) - -This is the repository for angular-translate. - -angular-translate is a JavaScript translation library for AngularJS 1.x app. - -For more information about the angular-translate project, please visit our [website](https://angular-translate.github.io). - -## Status -| Branch | Status | -| ------------- |:-------------:| -| master | [![Build Status](https://travis-ci.org/angular-translate/angular-translate.svg?branch=master)](https://travis-ci.org/angular-translate/angular-translate) | -| canary |[![Build Status](https://travis-ci.org/angular-translate/angular-translate.svg?branch=canary)](https://travis-ci.org/angular-translate/angular-translate) | - -## Install -We strongly *recommend* using a package manager like NPM and Bower, or even variants like Yarn or jspm. - -### NPM -``` -npm install --save-dev angular-translate -``` - -### Bower -``` -bower install --save-dev angular-translate -``` - -For more information please visit [chapter "Installation" at our website](https://angular-translate.github.io/docs/#/guide/00_installation). - -## Get started -Check out the [chapter "Getting started" at our website](https://angular-translate.github.io/docs/#/guide/02_getting-started). - -## Get support -Most of the time, we are getting support questions of invalid configurations. We encourage everyone to have a look at our [documentation website](https://angular-translate.github.io/docs/#/guide). If you think the documentation is not correct (bug) or should be optimized (enhancement) please file an issue. - -If you are still having difficulty after looking over your configuration carefully, please post a question to [StackOverflow with a specific tag](http://stackoverflow.com/questions/tagged/angular-translate). Especially if the question are related to AngularJS or even JavaScript/browser basic technologies (maybe your issue is not related to angular-translate after all). - -If you have discovered a bug or have a feature suggestion, feel free to create an issue on GitHub. Please follow the guideline within the issue template. See also next headline. - -*Please note: We cannot provide support for neither JavaScript nor AngularJS itself. In both cases, a platform like StackOverflow is much more ideal.* - -# Contribute -We got a lot of great feedback from the community so far! More and more people -use this module and they are always thankful for it and the awesome support they -get. I just want to make sure that you guys know: All this wouldn't have been -possible without these [great contributors](https://github.com/angular-translate/angular-translate/contributors) -and everybody who comes with new ideas and feature requests! So **THANK YOU**! - -Contributing to angular-translate is fairly easy. - -[This document](CONTRIBUTING.md) shows you how to -get the project, run all provided tests and generate a production ready build. - - -## Public talks -[![Dutch AngularJS Meetup 2013](presentation.png)](https://www.youtube.com/watch?v=9CWifOK_Wi8) -[![Kod.io 2014](presentation2.png)](https://www.youtube.com/watch?v=C7xqaExvaQ4) - -### Links -* Website [angular-translate.github.io](https://angular-translate.github.io/) -* API Reference [angular-translate.github.io/docs/#/api](https://angular-translate.github.io/docs/#/api) -* [Contribution Guidelines](https://github.com/angular-translate/angular-translate/blob/master/CONTRIBUTING.md) - -### Useful resources -There are some very useful things on the web that might be interesting for you, -so make sure to check this list. - -- [Tutorial on ng-newsletter.com](http://ng-newsletter.com/posts/angular-translate.html) -- [Examples and demos](https://github.com/angular-translate/angular-translate/wiki/Demos) - Currently on plnkr.co -- [Tutorial on angular.de](http://angular.de/artikel/angularjs-i18n-ng-translate) - German article -- [angular-translate on GitHub](https://github.com/angular-translate/angular-translate) - The GitHub repository -- [angular-translate on ngmodules.org](http://ngmodules.org/modules/angular-translate) -- [angular-translate mailinglist](https://groups.google.com/forum/#!forum/angular-translate) - Discuss, ask et al! -- [angular-translate-quality](https://www.npmjs.com/package/angular-translate-quality) - Quality check at build time - -## Tests - -### Unit tests - -Note: Check that dependencies are be installed (`npm install`). - -The *unit tests* are available with `npm test` which is actually a shortcut for `grunt test`. It performs tests under the current primary target version of AngularJS. Use `npm run-script test-scopes` for testing other scoped versions as well. - -## License - -Licensed under MIT. diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.js deleted file mode 100644 index e2909f6b..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.js +++ /dev/null @@ -1,50 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -$translateMissingTranslationHandlerLog.$inject = ['$log']; -angular.module('pascalprecht.translate') - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateMissingTranslationHandlerLog - * @requires $log - * - * @description - * Uses angular's `$log` service to give a warning when trying to translate a - * translation id which doesn't exist. - * - * @returns {function} Handler function - */ -.factory('$translateMissingTranslationHandlerLog', $translateMissingTranslationHandlerLog); - -function $translateMissingTranslationHandlerLog ($log) { - - 'use strict'; - - return function (translationId) { - $log.warn('Translation for ' + translationId + ' doesn\'t exist'); - }; -} - -$translateMissingTranslationHandlerLog.displayName = '$translateMissingTranslationHandlerLog'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.min.js deleted file mode 100644 index 2eb5872a..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-handler-log/angular-translate-handler-log.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(n,t){"function"==typeof define&&define.amd?define([],function(){return t()}):"object"==typeof module&&module.exports?module.exports=t():t()}(0,function(){function n(t){"use strict";return function(n){t.warn("Translation for "+n+" doesn't exist")}}return n.$inject=["$log"],angular.module("pascalprecht.translate").factory("$translateMissingTranslationHandlerLog",n),n.displayName="$translateMissingTranslationHandlerLog","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js deleted file mode 100644 index 039d02a0..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.js +++ /dev/null @@ -1,197 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define(["messageformat"], function (a0) { - return (factory(a0)); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require("messageformat")); - } else { - factory(root["MessageFormat"]); - } -}(this, function (MessageFormat) { - -angular.module('pascalprecht.translate') - -/** - * @ngdoc property - * @name pascalprecht.translate.TRANSLATE_MF_INTERPOLATION_CACHE - * @requires TRANSLATE_MF_INTERPOLATION_CACHE - * - * @description - * Uses MessageFormat.js to interpolate strings against some values. - */ -.constant('TRANSLATE_MF_INTERPOLATION_CACHE', '$translateMessageFormatInterpolation') - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateMessageFormatInterpolationProvider - * - * @description - * Configurations for $translateMessageFormatInterpolation - */ -.provider('$translateMessageFormatInterpolation', $translateMessageFormatInterpolationProvider); - -function $translateMessageFormatInterpolationProvider() { - - 'use strict'; - - var configurer; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateMessageFormatInterpolationProvider#messageFormatConfigurer - * @methodOf pascalprecht.translate.$translateMessageFormatInterpolationProvider - * - * @description - * Defines an optional configurer for the MessageFormat instance. - * - * Note: This hook will be called whenever a new instance of MessageFormat will be created. - * - * @param {function} fn callback with the instance as argument - */ - this.messageFormatConfigurer = function (fn) { - configurer = fn; - }; - - /** - * @ngdoc object - * @name pascalprecht.translate.$translateMessageFormatInterpolation - * @requires pascalprecht.translate.TRANSLATE_MF_INTERPOLATION_CACHE - * - * @description - * Uses MessageFormat.js to interpolate strings against some values. - * - * Be aware to configure a proper sanitization strategy. - * - * See also: - * * {@link pascalprecht.translate.$translateSanitization} - * * {@link https://github.com/SlexAxton/messageformat.js} - * - * @return {object} $translateMessageFormatInterpolation Interpolator service - */ - this.$get = ['$translateSanitization', '$cacheFactory', 'TRANSLATE_MF_INTERPOLATION_CACHE', function ($translateSanitization, $cacheFactory, TRANSLATE_MF_INTERPOLATION_CACHE) { - return $translateMessageFormatInterpolation($translateSanitization, $cacheFactory, TRANSLATE_MF_INTERPOLATION_CACHE, configurer); - }]; - -} - -function $translateMessageFormatInterpolation($translateSanitization, $cacheFactory, TRANSLATE_MF_INTERPOLATION_CACHE, messageFormatConfigurer) { - - 'use strict'; - - var $translateInterpolator = {}, - $cache = $cacheFactory.get(TRANSLATE_MF_INTERPOLATION_CACHE), - // instantiate with default locale (which is 'en') - $mf = new MessageFormat('en'), - $identifier = 'messageformat'; - - if (angular.isFunction(messageFormatConfigurer)) { - messageFormatConfigurer($mf); - } - - if (!$cache) { - // create cache if it doesn't exist already - $cache = $cacheFactory(TRANSLATE_MF_INTERPOLATION_CACHE); - } - - $cache.put('en', $mf); - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateMessageFormatInterpolation#setLocale - * @methodOf pascalprecht.translate.$translateMessageFormatInterpolation - * - * @description - * Sets current locale (this is currently not use in this interpolation). - * - * @param {string} locale Language key or locale. - */ - $translateInterpolator.setLocale = function (locale) { - $mf = $cache.get(locale); - if (!$mf) { - $mf = new MessageFormat(locale); - if (angular.isFunction(messageFormatConfigurer)) { - messageFormatConfigurer($mf); - } - $cache.put(locale, $mf); - } - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateMessageFormatInterpolation#getInterpolationIdentifier - * @methodOf pascalprecht.translate.$translateMessageFormatInterpolation - * - * @description - * Returns an identifier for this interpolation service. - * - * @returns {string} $identifier - */ - $translateInterpolator.getInterpolationIdentifier = function () { - return $identifier; - }; - - /** - * @deprecated will be removed in 3.0 - * @see {@link pascalprecht.translate.$translateSanitization} - */ - $translateInterpolator.useSanitizeValueStrategy = function (value) { - $translateSanitization.useStrategy(value); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateMessageFormatInterpolation#interpolate - * @methodOf pascalprecht.translate.$translateMessageFormatInterpolation - * - * @description - * Interpolates given string against given interpolate params using MessageFormat.js. - * - * @returns {string} interpolated string. - */ - $translateInterpolator.interpolate = function (string, interpolationParams, context, sanitizeStrategy) { - interpolationParams = interpolationParams || {}; - interpolationParams = $translateSanitization.sanitize(interpolationParams, 'params', sanitizeStrategy); - - var compiledFunction = $cache.get('mf:' + string); - - // if given string wasn't compiled yet, we do so now and never have to do it again - if (!compiledFunction) { - - // Ensure explicit type if possible - // MessageFormat checks the actual type (i.e. for amount based conditions) - for (var key in interpolationParams) { - if (interpolationParams.hasOwnProperty(key)) { - // ensure number - var number = parseInt(interpolationParams[key], 10); - if (angular.isNumber(number) && ('' + number) === interpolationParams[key]) { - interpolationParams[key] = number; - } - } - } - - compiledFunction = $mf.compile(string); - $cache.put('mf:' + string, compiledFunction); - } - - var interpolatedText = compiledFunction(interpolationParams); - return $translateSanitization.sanitize(interpolatedText, 'text', sanitizeStrategy); - }; - - return $translateInterpolator; -} - -$translateMessageFormatInterpolation.displayName = '$translateMessageFormatInterpolation'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.min.js deleted file mode 100644 index 6050aefe..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-interpolation-messageformat/angular-translate-interpolation-messageformat.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(t,e){"function"==typeof define&&define.amd?define(["messageformat"],function(t){return e(t)}):"object"==typeof module&&module.exports?module.exports=e(require("messageformat")):e(t.MessageFormat)}(this,function(r){function i(u,t,e,n){"use strict";var a={},c=t.get(e),f=new r("en");return angular.isFunction(n)&&n(f),c||(c=t(e)),c.put("en",f),a.setLocale=function(t){(f=c.get(t))||(f=new r(t),angular.isFunction(n)&&n(f),c.put(t,f))},a.getInterpolationIdentifier=function(){return"messageformat"},a.useSanitizeValueStrategy=function(t){return u.useStrategy(t),this},a.interpolate=function(t,e,n,a){e=e||{},e=u.sanitize(e,"params",a);var r=c.get("mf:"+t);if(!r){for(var i in e)if(e.hasOwnProperty(i)){var o=parseInt(e[i],10);angular.isNumber(o)&&""+o===e[i]&&(e[i]=o)}r=f.compile(t),c.put("mf:"+t,r)}var s=r(e);return u.sanitize(s,"text",a)},a}return angular.module("pascalprecht.translate").constant("TRANSLATE_MF_INTERPOLATION_CACHE","$translateMessageFormatInterpolation").provider("$translateMessageFormatInterpolation",function(){"use strict";var a;this.messageFormatConfigurer=function(t){a=t},this.$get=["$translateSanitization","$cacheFactory","TRANSLATE_MF_INTERPOLATION_CACHE",function(t,e,n){return i(t,e,n,a)}]}),i.displayName="$translateMessageFormatInterpolation","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.js deleted file mode 100644 index 79419f2a..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.js +++ /dev/null @@ -1,585 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -angular.module('pascalprecht.translate') -/** - * @ngdoc object - * @name pascalprecht.translate.$translatePartialLoaderProvider - * - * @description - * By using a $translatePartialLoaderProvider you can configure a list of a needed - * translation parts directly during the configuration phase of your application's - * lifetime. All parts you add by using this provider would be loaded by - * angular-translate at the startup as soon as possible. - */ - .provider('$translatePartialLoader', $translatePartialLoader); - -function $translatePartialLoader() { - - 'use strict'; - - /** - * @constructor - * @name Part - * - * @description - * Represents Part object to add and set parts at runtime. - */ - function Part(name, priority, urlTemplate) { - this.name = name; - this.isActive = true; - this.tables = {}; - this.priority = priority || 0; - this.langPromises = {}; - this.urlTemplate = urlTemplate; - } - - /** - * @name parseUrl - * @method - * - * @description - * Returns a parsed url template string and replaces given target lang - * and part name it. - * - * @param {string|function} urlTemplate - Either a string containing an url pattern (with - * '{part}' and '{lang}') or a function(part, lang) - * returning a string. - * @param {string} targetLang - Language key for language to be used. - * @return {string} Parsed url template string - */ - Part.prototype.parseUrl = function (urlTemplate, targetLang) { - if (angular.isFunction(urlTemplate)) { - return urlTemplate(this.name, targetLang); - } - return urlTemplate.replace(/\{part\}/g, this.name).replace(/\{lang\}/g, targetLang); - }; - - Part.prototype.getTable = function (lang, $q, $http, $httpOptions, urlTemplate, errorHandler) { - - //locals - var self = this; - var lastLangPromise = this.langPromises[lang]; - var deferred = $q.defer(); - - //private helper helpers - var fetchData = function () { - return $http( - angular.extend({ - method : 'GET', - url : self.parseUrl(self.urlTemplate || urlTemplate, lang) - }, - $httpOptions) - ); - }; - - //private helper - var handleNewData = function (data) { - self.tables[lang] = data; - deferred.resolve(data); - }; - - //private helper - var rejectDeferredWithPartName = function () { - deferred.reject(self.name); - }; - - //private helper - var tryGettingThisTable = function () { - //data fetching logic - fetchData().then( - function (result) { - handleNewData(result.data); - }, - function (errorResponse) { - if (errorHandler) { - errorHandler(self.name, lang, errorResponse).then(handleNewData, rejectDeferredWithPartName); - } else { - rejectDeferredWithPartName(); - } - }); - }; - - //loading logic - if (!this.tables[lang]) { - //let's try loading the data - if (!lastLangPromise) { - //this is the first request - just go ahead and hit the server - tryGettingThisTable(); - } else { - //this is an additional request after one or more unfinished or failed requests - //chain the deferred off the previous request's promise so that this request conditionally executes - //if the previous request succeeds then the result will be passed through, but if it fails then this request will try again and hit the server - lastLangPromise.then(deferred.resolve, tryGettingThisTable); - } - //retain a reference to the last promise so we can continue the chain if another request is made before any succeed - //you can picture the promise chain as a singly-linked list (formed by the .then handler queues) that's traversed by the execution context - this.langPromises[lang] = deferred.promise; - } - else { - //the part has already been loaded - if lastLangPromise is also undefined then the table has been populated using setPart - //this breaks the promise chain because we're not tying langDeferred's outcome to a previous call's promise handler queues, but we don't care because there's no asynchronous execution context to keep track of anymore - deferred.resolve(this.tables[lang]); - } - return deferred.promise; - }; - - var parts = {}; - - function hasPart(name) { - return Object.prototype.hasOwnProperty.call(parts, name); - } - - function isStringValid(str) { - return angular.isString(str) && str !== ''; - } - - function isPartAvailable(name) { - if (!isStringValid(name)) { - throw new TypeError('Invalid type of a first argument, a non-empty string expected.'); - } - - return (hasPart(name) && parts[name].isActive); - } - - function deepExtend(dst, src) { - for (var property in src) { - if (src[property] && src[property].constructor && - src[property].constructor === Object) { - dst[property] = dst[property] || {}; - deepExtend(dst[property], src[property]); - } else { - dst[property] = src[property]; - } - } - return dst; - } - - function getPrioritizedParts() { - var prioritizedParts = []; - for (var part in parts) { - if (parts[part].isActive) { - prioritizedParts.push(parts[part]); - } - } - prioritizedParts.sort(function (a, b) { - return a.priority - b.priority; - }); - return prioritizedParts; - } - - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoaderProvider#addPart - * @methodOf pascalprecht.translate.$translatePartialLoaderProvider - * - * @description - * Registers a new part of the translation table to be loaded once the - * `angular-translate` gets into runtime phase. It does not actually load any - * translation data, but only registers a part to be loaded in the future. - * - * @param {string} name A name of the part to add - * @param {int} [priority=0] Sets the load priority of this part. - * @param {string|function} urlTemplate Either a string containing an url pattern (with - * '{part}' and '{lang}') or a function(part, lang) - * returning a string. - * - * @returns {object} $translatePartialLoaderProvider, so this method is chainable - * @throws {TypeError} The method could throw a **TypeError** if you pass the param - * of the wrong type. Please, note that the `name` param has to be a - * non-empty **string**. - */ - this.addPart = function (name, priority, urlTemplate) { - if (!isStringValid(name)) { - throw new TypeError('Couldn\'t add part, part name has to be a string!'); - } - - if (!hasPart(name)) { - parts[name] = new Part(name, priority, urlTemplate); - } - parts[name].isActive = true; - - return this; - }; - - /** - * @ngdocs function - * @name pascalprecht.translate.$translatePartialLoaderProvider#setPart - * @methodOf pascalprecht.translate.$translatePartialLoaderProvider - * - * @description - * Sets a translation table to the specified part. This method does not make the - * specified part available, but only avoids loading this part from the server. - * - * @param {string} lang A language of the given translation table - * @param {string} part A name of the target part - * @param {object} table A translation table to set to the specified part - * - * @return {object} $translatePartialLoaderProvider, so this method is chainable - * @throws {TypeError} The method could throw a **TypeError** if you pass params - * of the wrong type. Please, note that the `lang` and `part` params have to be a - * non-empty **string**s and the `table` param has to be an object. - */ - this.setPart = function (lang, part, table) { - if (!isStringValid(lang)) { - throw new TypeError('Couldn\'t set part.`lang` parameter has to be a string!'); - } - if (!isStringValid(part)) { - throw new TypeError('Couldn\'t set part.`part` parameter has to be a string!'); - } - if (typeof table !== 'object' || table === null) { - throw new TypeError('Couldn\'t set part. `table` parameter has to be an object!'); - } - - if (!hasPart(part)) { - parts[part] = new Part(part); - parts[part].isActive = false; - } - - parts[part].tables[lang] = table; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoaderProvider#deletePart - * @methodOf pascalprecht.translate.$translatePartialLoaderProvider - * - * @description - * Removes the previously added part of the translation data. So, `angular-translate` will not - * load it at the startup. - * - * @param {string} name A name of the part to delete - * - * @returns {object} $translatePartialLoaderProvider, so this method is chainable - * - * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong - * type. Please, note that the `name` param has to be a non-empty **string**. - */ - this.deletePart = function (name) { - if (!isStringValid(name)) { - throw new TypeError('Couldn\'t delete part, first arg has to be string.'); - } - - if (hasPart(name)) { - parts[name].isActive = false; - } - - return this; - }; - - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoaderProvider#isPartAvailable - * @methodOf pascalprecht.translate.$translatePartialLoaderProvider - * - * @description - * Checks if the specific part is available. A part becomes available after it was added by the - * `addPart` method. Available parts would be loaded from the server once the `angular-translate` - * asks the loader to that. - * - * @param {string} name A name of the part to check - * - * @returns {boolean} Returns **true** if the part is available now and **false** if not. - * - * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong - * type. Please, note that the `name` param has to be a non-empty **string**. - */ - this.isPartAvailable = isPartAvailable; - - /** - * @ngdoc object - * @name pascalprecht.translate.$translatePartialLoader - * - * @requires $q - * @requires $http - * @requires $injector - * @requires $rootScope - * @requires $translate - * - * @description - * - * @param {object} options Options object - * - * @throws {TypeError} - */ - this.$get = ['$rootScope', '$injector', '$q', '$http', '$log', - function ($rootScope, $injector, $q, $http, $log) { - - /** - * @ngdoc event - * @name pascalprecht.translate.$translatePartialLoader#$translatePartialLoaderStructureChanged - * @eventOf pascalprecht.translate.$translatePartialLoader - * @eventType broadcast on root scope - * - * @description - * A $translatePartialLoaderStructureChanged event is called when a state of the loader was - * changed somehow. It could mean either some part is added or some part is deleted. Anyway when - * you get this event the translation table is not longer current and has to be updated. - * - * @param {string} name A name of the part which is a reason why the event was fired - */ - - var service = function (options) { - if (!isStringValid(options.key)) { - throw new TypeError('Unable to load data, a key is not a non-empty string.'); - } - - if (!isStringValid(options.urlTemplate) && !angular.isFunction(options.urlTemplate)) { - throw new TypeError('Unable to load data, a urlTemplate is not a non-empty string or not a function.'); - } - - var errorHandler = options.loadFailureHandler; - if (errorHandler !== undefined) { - if (!angular.isString(errorHandler)) { - throw new Error('Unable to load data, a loadFailureHandler is not a string.'); - } else { - errorHandler = $injector.get(errorHandler); - } - } - - var loaders = [], - prioritizedParts = getPrioritizedParts(); - - angular.forEach(prioritizedParts, function (part) { - loaders.push( - part.getTable(options.key, $q, $http, options.$http, options.urlTemplate, errorHandler) - ); - part.urlTemplate = part.urlTemplate || options.urlTemplate; - }); - - // workaround for #1781 - var structureHasBeenChangedWhileLoading = false; - var dirtyCheckEventCloser = $rootScope.$on('$translatePartialLoaderStructureChanged', function () { - structureHasBeenChangedWhileLoading = true; - }); - - return $q.all(loaders) - .then(function () { - dirtyCheckEventCloser(); - if (structureHasBeenChangedWhileLoading) { - if (!options.__retries) { - // the part structure has been changed while loading (the origin ones) - // this can happen if an addPart/removePart has been invoked right after a $translate.use(lang) - // TODO maybe we can optimize this with the actual list of missing parts - options.__retries = (options.__retries || 0) + 1; - return service(options); - } else { - // the part structure has been changed again while loading (retried one) - // because this could an infinite loop, this will not load another one again - $log.warn('The partial loader has detected a multiple structure change (with addPort/removePart) ' + - 'while loading translations. You should consider using promises of $translate.use(lang) and ' + - '$translate.refresh(). Also parts should be added/removed right before an explicit refresh ' + - 'if possible.'); - } - } - var table = {}; - prioritizedParts = getPrioritizedParts(); - angular.forEach(prioritizedParts, function (part) { - deepExtend(table, part.tables[options.key]); - }); - return table; - }, function () { - dirtyCheckEventCloser(); - return $q.reject(options.key); - }); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoader#addPart - * @methodOf pascalprecht.translate.$translatePartialLoader - * - * @description - * Registers a new part of the translation table. This method does not actually perform any xhr - * requests to get translation data. The new parts will be loaded in order of priority from the server next time - * `angular-translate` asks the loader to load translations. - * - * @param {string} name A name of the part to add - * @param {int} [priority=0] Sets the load priority of this part. - * - * @returns {object} $translatePartialLoader, so this method is chainable - * - * @fires {$translatePartialLoaderStructureChanged} The $translatePartialLoaderStructureChanged - * event would be fired by this method in case the new part affected somehow on the loaders - * state. This way it means that there are a new translation data available to be loaded from - * the server. - * - * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong - * type. Please, note that the `name` param has to be a non-empty **string**. - */ - service.addPart = function (name, priority, urlTemplate) { - if (!isStringValid(name)) { - throw new TypeError('Couldn\'t add part, first arg has to be a string'); - } - - if (!hasPart(name)) { - parts[name] = new Part(name, priority, urlTemplate); - $rootScope.$emit('$translatePartialLoaderStructureChanged', name); - } else if (!parts[name].isActive) { - parts[name].isActive = true; - $rootScope.$emit('$translatePartialLoaderStructureChanged', name); - } - - return service; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoader#deletePart - * @methodOf pascalprecht.translate.$translatePartialLoader - * - * @description - * Deletes the previously added part of the translation data. The target part could be deleted - * either logically or physically. When the data is deleted logically it is not actually deleted - * from the browser, but the loader marks it as not active and prevents it from affecting on the - * translations. If the deleted in such way part is added again, the loader will use the - * previously loaded data rather than loading it from the server once more time. But if the data - * is deleted physically, the loader will completely remove all information about it. So in case - * of recycling this part will be loaded from the server again. - * - * @param {string} name A name of the part to delete - * @param {boolean=} [removeData=false] An indicator if the loader has to remove a loaded - * translation data physically. If the `removeData` if set to **false** the loaded data will not be - * deleted physically and might be reused in the future to prevent an additional xhr requests. - * - * @returns {object} $translatePartialLoader, so this method is chainable - * - * @fires {$translatePartialLoaderStructureChanged} The $translatePartialLoaderStructureChanged - * event would be fired by this method in case a part deletion process affects somehow on the - * loaders state. This way it means that some part of the translation data is now deprecated and - * the translation table has to be recompiled with the remaining translation parts. - * - * @throws {TypeError} The method could throw a **TypeError** if you pass some param of the - * wrong type. Please, note that the `name` param has to be a non-empty **string** and - * the `removeData` param has to be either **undefined** or **boolean**. - */ - service.deletePart = function (name, removeData) { - if (!isStringValid(name)) { - throw new TypeError('Couldn\'t delete part, first arg has to be string'); - } - - if (removeData === undefined) { - removeData = false; - } else if (typeof removeData !== 'boolean') { - throw new TypeError('Invalid type of a second argument, a boolean expected.'); - } - - if (hasPart(name)) { - var wasActive = parts[name].isActive; - if (removeData) { - var $translate = $injector.get('$translate'); - var cache = $translate.loaderCache(); - if (typeof(cache) === 'string') { - // getting on-demand instance of loader - cache = $injector.get(cache); - } - // Purging items from cache... - if (typeof(cache) === 'object') { - angular.forEach(parts[name].tables, function (value, key) { - cache.remove(parts[name].parseUrl(parts[name].urlTemplate, key)); - }); - } - delete parts[name]; - } else { - parts[name].isActive = false; - } - if (wasActive) { - $rootScope.$emit('$translatePartialLoaderStructureChanged', name); - } - } - - return service; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoader#isPartLoaded - * @methodOf pascalprecht.translate.$translatePartialLoader - * - * @description - * Checks if the registered translation part is loaded into the translation table. - * - * @param {string} name A name of the part - * @param {string} lang A key of the language - * - * @returns {boolean} Returns **true** if the translation of the part is loaded to the translation table and **false** if not. - * - * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong - * type. Please, note that the `name` and `lang` params have to be non-empty **string**. - */ - service.isPartLoaded = function (name, lang) { - return angular.isDefined(parts[name]) && angular.isDefined(parts[name].tables[lang]); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoader#getRegisteredParts - * @methodOf pascalprecht.translate.$translatePartialLoader - * - * @description - * Gets names of the parts that were added with the `addPart`. - * - * @returns {array} Returns array of registered parts, if none were registered then an empty array is returned. - */ - service.getRegisteredParts = function () { - var registeredParts = []; - angular.forEach(parts, function (p) { - if (p.isActive) { - registeredParts.push(p.name); - } - }); - return registeredParts; - }; - - - /** - * @ngdoc function - * @name pascalprecht.translate.$translatePartialLoader#isPartAvailable - * @methodOf pascalprecht.translate.$translatePartialLoader - * - * @description - * Checks if a target translation part is available. The part becomes available just after it was - * added by the `addPart` method. Part's availability does not mean that it was loaded from the - * server, but only that it was added to the loader. The available part might be loaded next - * time the loader is called. - * - * @param {string} name A name of the part to delete - * - * @returns {boolean} Returns **true** if the part is available now and **false** if not. - * - * @throws {TypeError} The method could throw a **TypeError** if you pass the param of the wrong - * type. Please, note that the `name` param has to be a non-empty **string**. - */ - service.isPartAvailable = isPartAvailable; - - return service; - - }]; - -} - -$translatePartialLoader.displayName = '$translatePartialLoader'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.min.js deleted file mode 100644 index 74ad786f..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-partial/angular-translate-loader-partial.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(){"use strict";function a(t,e,r){this.name=t,this.isActive=!0,this.tables={},this.priority=e||0,this.langPromises={},this.urlTemplate=r}a.prototype.parseUrl=function(t,e){return angular.isFunction(t)?t(this.name,e):t.replace(/\{part\}/g,this.name).replace(/\{lang\}/g,e)},a.prototype.getTable=function(e,t,r,a,n,i){var o=this,s=this.langPromises[e],l=t.defer(),u=function(t){o.tables[e]=t,l.resolve(t)},c=function(){l.reject(o.name)},p=function(){r(angular.extend({method:"GET",url:o.parseUrl(o.urlTemplate||n,e)},a)).then(function(t){u(t.data)},function(t){i?i(o.name,e,t).then(u,c):c()})};return this.tables[e]?l.resolve(this.tables[e]):(s?s.then(l.resolve,p):p(),this.langPromises[e]=l.promise),l.promise};var n={};function i(t){return Object.prototype.hasOwnProperty.call(n,t)}function f(t){return angular.isString(t)&&""!==t}function t(t){if(!f(t))throw new TypeError("Invalid type of a first argument, a non-empty string expected.");return i(t)&&n[t].isActive}function d(){var t=[];for(var e in n)n[e].isActive&&t.push(n[e]);return t.sort(function(t,e){return t.priority-e.priority}),t}this.addPart=function(t,e,r){if(!f(t))throw new TypeError("Couldn't add part, part name has to be a string!");return i(t)||(n[t]=new a(t,e,r)),n[t].isActive=!0,this},this.setPart=function(t,e,r){if(!f(t))throw new TypeError("Couldn't set part.`lang` parameter has to be a string!");if(!f(e))throw new TypeError("Couldn't set part.`part` parameter has to be a string!");if("object"!=typeof r||null===r)throw new TypeError("Couldn't set part. `table` parameter has to be an object!");return i(e)||(n[e]=new a(e),n[e].isActive=!1),n[e].tables[t]=r,this},this.deletePart=function(t){if(!f(t))throw new TypeError("Couldn't delete part, first arg has to be string.");return i(t)&&(n[t].isActive=!1),this},this.isPartAvailable=t,this.$get=["$rootScope","$injector","$q","$http","$log",function(o,s,l,u,c){var p=function(r){if(!f(r.key))throw new TypeError("Unable to load data, a key is not a non-empty string.");if(!f(r.urlTemplate)&&!angular.isFunction(r.urlTemplate))throw new TypeError("Unable to load data, a urlTemplate is not a non-empty string or not a function.");var e=r.loadFailureHandler;if(void 0!==e){if(!angular.isString(e))throw new Error("Unable to load data, a loadFailureHandler is not a string.");e=s.get(e)}var a=[],t=d();angular.forEach(t,function(t){a.push(t.getTable(r.key,l,u,r.$http,r.urlTemplate,e)),t.urlTemplate=t.urlTemplate||r.urlTemplate});var n=!1,i=o.$on("$translatePartialLoaderStructureChanged",function(){n=!0});return l.all(a).then(function(){if(i(),n){if(!r.__retries)return r.__retries=(r.__retries||0)+1,p(r);c.warn("The partial loader has detected a multiple structure change (with addPort/removePart) while loading translations. You should consider using promises of $translate.use(lang) and $translate.refresh(). Also parts should be added/removed right before an explicit refresh if possible.")}var e={};return t=d(),angular.forEach(t,function(t){!function t(e,r){for(var a in r)r[a]&&r[a].constructor&&r[a].constructor===Object?(e[a]=e[a]||{},t(e[a],r[a])):e[a]=r[a];return e}(e,t.tables[r.key])}),e},function(){return i(),l.reject(r.key)})};return p.addPart=function(t,e,r){if(!f(t))throw new TypeError("Couldn't add part, first arg has to be a string");return i(t)?n[t].isActive||(n[t].isActive=!0,o.$emit("$translatePartialLoaderStructureChanged",t)):(n[t]=new a(t,e,r),o.$emit("$translatePartialLoaderStructureChanged",t)),p},p.deletePart=function(r,t){if(!f(r))throw new TypeError("Couldn't delete part, first arg has to be string");if(void 0===t)t=!1;else if("boolean"!=typeof t)throw new TypeError("Invalid type of a second argument, a boolean expected.");if(i(r)){var e=n[r].isActive;if(t){var a=s.get("$translate").loaderCache();"string"==typeof a&&(a=s.get(a)),"object"==typeof a&&angular.forEach(n[r].tables,function(t,e){a.remove(n[r].parseUrl(n[r].urlTemplate,e))}),delete n[r]}else n[r].isActive=!1;e&&o.$emit("$translatePartialLoaderStructureChanged",r)}return p},p.isPartLoaded=function(t,e){return angular.isDefined(n[t])&&angular.isDefined(n[t].tables[e])},p.getRegisteredParts=function(){var e=[];return angular.forEach(n,function(t){t.isActive&&e.push(t.name)}),e},p.isPartAvailable=t,p}]}return angular.module("pascalprecht.translate").provider("$translatePartialLoader",t),t.displayName="$translatePartialLoader","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.js deleted file mode 100644 index 7a911f11..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.js +++ /dev/null @@ -1,112 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -$translateStaticFilesLoader.$inject = ['$q', '$http']; -angular.module('pascalprecht.translate') -/** - * @ngdoc object - * @name pascalprecht.translate.$translateStaticFilesLoader - * @requires $q - * @requires $http - * - * @description - * Creates a loading function for a typical static file url pattern: - * "lang-en_US.json", "lang-de_DE.json", etc. Using this builder, - * the response of these urls must be an object of key-value pairs. - * - * @param {object} options Options object, which gets prefix, suffix, key, and fileMap - */ -.factory('$translateStaticFilesLoader', $translateStaticFilesLoader); - -function $translateStaticFilesLoader($q, $http) { - - 'use strict'; - - return function (options) { - - if (!options || (!angular.isArray(options.files) && (!angular.isString(options.prefix) || !angular.isString(options.suffix)))) { - throw new Error('Couldn\'t load static files, no files and prefix or suffix specified!'); - } - - if (!options.files) { - options.files = [{ - prefix: options.prefix, - suffix: options.suffix - }]; - } - - var load = function (file) { - if (!file || (!angular.isString(file.prefix) || !angular.isString(file.suffix))) { - throw new Error('Couldn\'t load static file, no prefix or suffix specified!'); - } - - var fileUrl = [ - file.prefix, - options.key, - file.suffix - ].join(''); - - if (angular.isObject(options.fileMap) && options.fileMap[fileUrl]) { - fileUrl = options.fileMap[fileUrl]; - } - - return $http(angular.extend({ - url: fileUrl, - method: 'GET' - }, options.$http)) - .then(function(result) { - return result.data; - }, function () { - return $q.reject(options.key); - }); - }; - - var promises = [], - length = options.files.length; - - for (var i = 0; i < length; i++) { - promises.push(load({ - prefix: options.files[i].prefix, - key: options.key, - suffix: options.files[i].suffix - })); - } - - return $q.all(promises) - .then(function (data) { - var length = data.length, - mergedData = {}; - - for (var i = 0; i < length; i++) { - for (var key in data[i]) { - mergedData[key] = data[i][key]; - } - } - - return mergedData; - }); - }; -} - -$translateStaticFilesLoader.displayName = '$translateStaticFilesLoader'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js deleted file mode 100644 index a66674d4..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-loader-static-files/angular-translate-loader-static-files.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(e,i){"function"==typeof define&&define.amd?define([],function(){return i()}):"object"==typeof module&&module.exports?module.exports=i():i()}(0,function(){function e(n,a){"use strict";return function(r){if(!(r&&(angular.isArray(r.files)||angular.isString(r.prefix)&&angular.isString(r.suffix))))throw new Error("Couldn't load static files, no files and prefix or suffix specified!");r.files||(r.files=[{prefix:r.prefix,suffix:r.suffix}]);for(var e=function(e){if(!e||!angular.isString(e.prefix)||!angular.isString(e.suffix))throw new Error("Couldn't load static file, no prefix or suffix specified!");var i=[e.prefix,r.key,e.suffix].join("");return angular.isObject(r.fileMap)&&r.fileMap[i]&&(i=r.fileMap[i]),a(angular.extend({url:i,method:"GET"},r.$http)).then(function(e){return e.data},function(){return n.reject(r.key)})},i=[],t=r.files.length,f=0;f= 4) { - var $cookies = $injector.get('$cookies'); - delegate = { - get : function (key) { - return $cookies.get(key); - }, - put : function (key, value) { - $cookies.put(key, value); - } - }; - } else { - var $cookieStore = $injector.get('$cookieStore'); - delegate = { - get : function (key) { - return $cookieStore.get(key); - }, - put : function (key, value) { - $cookieStore.put(key, value); - } - }; - } - - var $translateCookieStorage = { - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateCookieStorage#get - * @methodOf pascalprecht.translate.$translateCookieStorage - * - * @description - * Returns an item from cookieStorage by given name. - * - * @param {string} name Item name - * @return {string} Value of item name - */ - get : function (name) { - return delegate.get(name); - }, - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateCookieStorage#set - * @methodOf pascalprecht.translate.$translateCookieStorage - * - * @description - * Sets an item in cookieStorage by given name. - * - * @deprecated use #put - * - * @param {string} name Item name - * @param {string} value Item value - */ - set : function (name, value) { - delegate.put(name, value); - }, - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateCookieStorage#put - * @methodOf pascalprecht.translate.$translateCookieStorage - * - * @description - * Sets an item in cookieStorage by given name. - * - * @param {string} name Item name - * @param {string} value Item value - */ - put : function (name, value) { - delegate.put(name, value); - } - }; - - return $translateCookieStorage; -} - -$translateCookieStorageFactory.displayName = '$translateCookieStorage'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js deleted file mode 100644 index ee5d0770..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-cookie/angular-translate-storage-cookie.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(t){"use strict";var n;if(1===angular.version.major&&4<=angular.version.minor){var o=t.get("$cookies");n={get:function(t){return o.get(t)},put:function(t,e){o.put(t,e)}}}else{var r=t.get("$cookieStore");n={get:function(t){return r.get(t)},put:function(t,e){r.put(t,e)}}}return{get:function(t){return n.get(t)},set:function(t,e){n.put(t,e)},put:function(t,e){n.put(t,e)}}}return t.$inject=["$injector"],angular.module("pascalprecht.translate").factory("$translateCookieStorage",t),t.displayName="$translateCookieStorage","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.js deleted file mode 100644 index d82b52e9..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.js +++ /dev/null @@ -1,123 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -$translateLocalStorageFactory.$inject = ['$window', '$translateCookieStorage']; -angular.module('pascalprecht.translate') - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateLocalStorage - * @requires $window - * @requires $translateCookieStorage - * - * @description - * Abstraction layer for localStorage. This service is used when telling angular-translate - * to use localStorage as storage. - * - */ -.factory('$translateLocalStorage', $translateLocalStorageFactory); - -function $translateLocalStorageFactory($window, $translateCookieStorage) { - - 'use strict'; - - // Setup adapter - var localStorageAdapter = (function(){ - var langKey; - return { - /** - * @ngdoc function - * @name pascalprecht.translate.$translateLocalStorage#get - * @methodOf pascalprecht.translate.$translateLocalStorage - * - * @description - * Returns an item from localStorage by given name. - * - * @param {string} name Item name - * @return {string} Value of item name - */ - get: function (name) { - if(!langKey) { - langKey = $window.localStorage.getItem(name); - } - - return langKey; - }, - /** - * @ngdoc function - * @name pascalprecht.translate.$translateLocalStorage#set - * @methodOf pascalprecht.translate.$translateLocalStorage - * - * @description - * Sets an item in localStorage by given name. - * - * @deprecated use #put - * - * @param {string} name Item name - * @param {string} value Item value - */ - set: function (name, value) { - langKey=value; - $window.localStorage.setItem(name, value); - }, - /** - * @ngdoc function - * @name pascalprecht.translate.$translateLocalStorage#put - * @methodOf pascalprecht.translate.$translateLocalStorage - * - * @description - * Sets an item in localStorage by given name. - * - * @param {string} name Item name - * @param {string} value Item value - */ - put: function (name, value) { - langKey=value; - $window.localStorage.setItem(name, value); - } - }; - }()); - - var hasLocalStorageSupport = 'localStorage' in $window; - if (hasLocalStorageSupport) { - var testKey = 'pascalprecht.translate.storageTest'; - try { - // this check have to be wrapped within a try/catch because on - // a SecurityError: Dom Exception 18 on iOS - if ($window.localStorage !== null) { - $window.localStorage.setItem(testKey, 'foo'); - $window.localStorage.removeItem(testKey); - hasLocalStorageSupport = true; - } else { - hasLocalStorageSupport = false; - } - } catch (e){ - hasLocalStorageSupport = false; - } - } - var $translateLocalStorage = hasLocalStorageSupport ? localStorageAdapter : $translateCookieStorage; - return $translateLocalStorage; -} - -$translateLocalStorageFactory.displayName = '$translateLocalStorageFactory'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.min.js deleted file mode 100644 index 5df4d0aa..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate-storage-local/angular-translate-storage-local.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(a,t){"use strict";var o,e={get:function(t){return o||(o=a.localStorage.getItem(t)),o},set:function(t,e){o=e,a.localStorage.setItem(t,e)},put:function(t,e){o=e,a.localStorage.setItem(t,e)}},r="localStorage"in a;if(r){var n="pascalprecht.translate.storageTest";try{r=null!==a.localStorage&&(a.localStorage.setItem(n,"foo"),a.localStorage.removeItem(n),!0)}catch(t){r=!1}}return r?e:t}return t.$inject=["$window","$translateCookieStorage"],angular.module("pascalprecht.translate").factory("$translateLocalStorage",t),t.displayName="$translateLocalStorageFactory","pascalprecht.translate"}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.js deleted file mode 100644 index acd0b916..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.js +++ /dev/null @@ -1,3785 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module unless amdModuleId is set - define([], function () { - return (factory()); - }); - } else if (typeof module === 'object' && module.exports) { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(); - } else { - factory(); - } -}(this, function () { - -/** - * @ngdoc overview - * @name pascalprecht.translate - * - * @description - * The main module which holds everything together. - */ -runTranslate.$inject = ['$translate']; -$translate.$inject = ['$STORAGE_KEY', '$windowProvider', '$translateSanitizationProvider', 'pascalprechtTranslateOverrider']; -$translateDefaultInterpolation.$inject = ['$interpolate', '$translateSanitization']; -translateDirective.$inject = ['$translate', '$interpolate', '$compile', '$parse', '$rootScope']; -translateAttrDirective.$inject = ['$translate', '$rootScope']; -translateCloakDirective.$inject = ['$translate', '$rootScope']; -translateFilterFactory.$inject = ['$parse', '$translate']; -$translationCache.$inject = ['$cacheFactory']; -angular.module('pascalprecht.translate', ['ng']) - .run(runTranslate); - -function runTranslate($translate) { - - 'use strict'; - - var key = $translate.storageKey(), - storage = $translate.storage(); - - var fallbackFromIncorrectStorageValue = function () { - var preferred = $translate.preferredLanguage(); - if (angular.isString(preferred)) { - $translate.use(preferred); - // $translate.use() will also remember the language. - // So, we don't need to call storage.put() here. - } else { - storage.put(key, $translate.use()); - } - }; - - fallbackFromIncorrectStorageValue.displayName = 'fallbackFromIncorrectStorageValue'; - - if (storage) { - if (!storage.get(key)) { - fallbackFromIncorrectStorageValue(); - } else { - $translate.use(storage.get(key))['catch'](fallbackFromIncorrectStorageValue); - } - } else if (angular.isString($translate.preferredLanguage())) { - $translate.use($translate.preferredLanguage()); - } -} - -runTranslate.displayName = 'runTranslate'; - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateSanitizationProvider - * - * @description - * - * Configurations for $translateSanitization - */ -angular.module('pascalprecht.translate').provider('$translateSanitization', $translateSanitizationProvider); - -function $translateSanitizationProvider () { - - 'use strict'; - - var $sanitize, - $sce, - currentStrategy = null, // TODO change to either 'sanitize', 'escape' or ['sanitize', 'escapeParameters'] in 3.0. - hasConfiguredStrategy = false, - hasShownNoStrategyConfiguredWarning = false, - strategies; - - /** - * Definition of a sanitization strategy function - * @callback StrategyFunction - * @param {string|object} value - value to be sanitized (either a string or an interpolated value map) - * @param {string} mode - either 'text' for a string (translation) or 'params' for the interpolated params - * @return {string|object} - */ - - /** - * @ngdoc property - * @name strategies - * @propertyOf pascalprecht.translate.$translateSanitizationProvider - * - * @description - * Following strategies are built-in: - *

      - *
      sanitize
      - *
      Sanitizes HTML in the translation text using $sanitize
      - *
      escape
      - *
      Escapes HTML in the translation
      - *
      sanitizeParameters
      - *
      Sanitizes HTML in the values of the interpolation parameters using $sanitize
      - *
      escapeParameters
      - *
      Escapes HTML in the values of the interpolation parameters
      - *
      escaped
      - *
      Support legacy strategy name 'escaped' for backwards compatibility (will be removed in 3.0)
      - *
      - * - */ - - strategies = { - sanitize: function (value, mode/*, context*/) { - if (mode === 'text') { - value = htmlSanitizeValue(value); - } - return value; - }, - escape: function (value, mode/*, context*/) { - if (mode === 'text') { - value = htmlEscapeValue(value); - } - return value; - }, - sanitizeParameters: function (value, mode/*, context*/) { - if (mode === 'params') { - value = mapInterpolationParameters(value, htmlSanitizeValue); - } - return value; - }, - escapeParameters: function (value, mode/*, context*/) { - if (mode === 'params') { - value = mapInterpolationParameters(value, htmlEscapeValue); - } - return value; - }, - sce: function (value, mode, context) { - if (mode === 'text') { - value = htmlTrustValue(value); - } else if (mode === 'params') { - if (context !== 'filter') { - // do html escape in filter context #1101 - value = mapInterpolationParameters(value, htmlEscapeValue); - } - } - return value; - }, - sceParameters: function (value, mode/*, context*/) { - if (mode === 'params') { - value = mapInterpolationParameters(value, htmlTrustValue); - } - return value; - } - }; - // Support legacy strategy name 'escaped' for backwards compatibility. - // TODO should be removed in 3.0 - strategies.escaped = strategies.escapeParameters; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateSanitizationProvider#addStrategy - * @methodOf pascalprecht.translate.$translateSanitizationProvider - * - * @description - * Adds a sanitization strategy to the list of known strategies. - * - * @param {string} strategyName - unique key for a strategy - * @param {StrategyFunction} strategyFunction - strategy function - * @returns {object} this - */ - this.addStrategy = function (strategyName, strategyFunction) { - strategies[strategyName] = strategyFunction; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateSanitizationProvider#removeStrategy - * @methodOf pascalprecht.translate.$translateSanitizationProvider - * - * @description - * Removes a sanitization strategy from the list of known strategies. - * - * @param {string} strategyName - unique key for a strategy - * @returns {object} this - */ - this.removeStrategy = function (strategyName) { - delete strategies[strategyName]; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateSanitizationProvider#useStrategy - * @methodOf pascalprecht.translate.$translateSanitizationProvider - * - * @description - * Selects a sanitization strategy. When an array is provided the strategies will be executed in order. - * - * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions. - * @returns {object} this - */ - this.useStrategy = function (strategy) { - hasConfiguredStrategy = true; - currentStrategy = strategy; - return this; - }; - - /** - * @ngdoc object - * @name pascalprecht.translate.$translateSanitization - * @requires $injector - * @requires $log - * - * @description - * Sanitizes interpolation parameters and translated texts. - * - */ - this.$get = ['$injector', '$log', function ($injector, $log) { - - var cachedStrategyMap = {}; - - var applyStrategies = function (value, mode, context, selectedStrategies) { - angular.forEach(selectedStrategies, function (selectedStrategy) { - if (angular.isFunction(selectedStrategy)) { - value = selectedStrategy(value, mode, context); - } else if (angular.isFunction(strategies[selectedStrategy])) { - value = strategies[selectedStrategy](value, mode, context); - } else if (angular.isString(strategies[selectedStrategy])) { - if (!cachedStrategyMap[strategies[selectedStrategy]]) { - try { - cachedStrategyMap[strategies[selectedStrategy]] = $injector.get(strategies[selectedStrategy]); - } catch (e) { - cachedStrategyMap[strategies[selectedStrategy]] = function() {}; - throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\''); - } - } - value = cachedStrategyMap[strategies[selectedStrategy]](value, mode, context); - } else { - throw new Error('pascalprecht.translate.$translateSanitization: Unknown sanitization strategy: \'' + selectedStrategy + '\''); - } - }); - return value; - }; - - // TODO: should be removed in 3.0 - var showNoStrategyConfiguredWarning = function () { - if (!hasConfiguredStrategy && !hasShownNoStrategyConfiguredWarning) { - $log.warn('pascalprecht.translate.$translateSanitization: No sanitization strategy has been configured. This can have serious security implications. See http://angular-translate.github.io/docs/#/guide/19_security for details.'); - hasShownNoStrategyConfiguredWarning = true; - } - }; - - if ($injector.has('$sanitize')) { - $sanitize = $injector.get('$sanitize'); - } - if ($injector.has('$sce')) { - $sce = $injector.get('$sce'); - } - - return { - /** - * @ngdoc function - * @name pascalprecht.translate.$translateSanitization#useStrategy - * @methodOf pascalprecht.translate.$translateSanitization - * - * @description - * Selects a sanitization strategy. When an array is provided the strategies will be executed in order. - * - * @param {string|StrategyFunction|array} strategy The sanitization strategy / strategies which should be used. Either a name of an existing strategy, a custom strategy function, or an array consisting of multiple names and / or custom functions. - */ - useStrategy: (function (self) { - return function (strategy) { - self.useStrategy(strategy); - }; - })(this), - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateSanitization#sanitize - * @methodOf pascalprecht.translate.$translateSanitization - * - * @description - * Sanitizes a value. - * - * @param {string|object} value The value which should be sanitized. - * @param {string} mode The current sanitization mode, either 'params' or 'text'. - * @param {string|StrategyFunction|array} [strategy] Optional custom strategy which should be used instead of the currently selected strategy. - * @param {string} [context] The context of this call: filter, service. Default is service - * @returns {string|object} sanitized value - */ - sanitize: function (value, mode, strategy, context) { - if (!currentStrategy) { - showNoStrategyConfiguredWarning(); - } - - if (!strategy && strategy !== null) { - strategy = currentStrategy; - } - - if (!strategy) { - return value; - } - - if (!context) { - context = 'service'; - } - - var selectedStrategies = angular.isArray(strategy) ? strategy : [strategy]; - return applyStrategies(value, mode, context, selectedStrategies); - } - }; - }]; - - var htmlEscapeValue = function (value) { - var element = angular.element('
      '); - element.text(value); // not chainable, see #1044 - return element.html(); - }; - - var htmlSanitizeValue = function (value) { - if (!$sanitize) { - throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as \'escape\'.'); - } - return $sanitize(value); - }; - - var htmlTrustValue = function (value) { - if (!$sce) { - throw new Error('pascalprecht.translate.$translateSanitization: Error cannot find $sce service.'); - } - return $sce.trustAsHtml(value); - }; - - var mapInterpolationParameters = function (value, iteratee, stack) { - if (angular.isDate(value)) { - return value; - } else if (angular.isObject(value)) { - var result = angular.isArray(value) ? [] : {}; - - if (!stack) { - stack = []; - } else { - if (stack.indexOf(value) > -1) { - throw new Error('pascalprecht.translate.$translateSanitization: Error cannot interpolate parameter due recursive object'); - } - } - - stack.push(value); - angular.forEach(value, function (propertyValue, propertyKey) { - - /* Skipping function properties. */ - if (angular.isFunction(propertyValue)) { - return; - } - - result[propertyKey] = mapInterpolationParameters(propertyValue, iteratee, stack); - }); - stack.splice(-1, 1); // remove last - - return result; - } else if (angular.isNumber(value)) { - return value; - } else if (value === true || value === false) { - return value; - } else if (!angular.isUndefined(value) && value !== null) { - return iteratee(value); - } else { - return value; - } - }; -} - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateProvider - * @description - * - * $translateProvider allows developers to register translation-tables, asynchronous loaders - * and similar to configure translation behavior directly inside of a module. - * - */ -angular.module('pascalprecht.translate') - .constant('pascalprechtTranslateOverrider', {}) - .provider('$translate', $translate); - -function $translate($STORAGE_KEY, $windowProvider, $translateSanitizationProvider, pascalprechtTranslateOverrider) { - - 'use strict'; - - var $translationTable = {}, - $preferredLanguage, - $availableLanguageKeys = [], - $languageKeyAliases, - $fallbackLanguage, - $fallbackWasString, - $uses, - $nextLang, - $storageFactory, - $storageKey = $STORAGE_KEY, - $storagePrefix, - $missingTranslationHandlerFactory, - $interpolationFactory, - $interpolatorFactories = [], - $loaderFactory, - $cloakClassName = 'translate-cloak', - $loaderOptions, - $notFoundIndicatorLeft, - $notFoundIndicatorRight, - $postCompilingEnabled = false, - $forceAsyncReloadEnabled = false, - $nestedObjectDelimeter = '.', - $isReady = false, - $keepContent = false, - loaderCache, - directivePriority = 0, - statefulFilter = true, - postProcessFn, - uniformLanguageTagResolver = 'default', - languageTagResolver = { - 'default' : function (tag) { - return (tag || '').split('-').join('_'); - }, - java : function (tag) { - var temp = (tag || '').split('-').join('_'); - var parts = temp.split('_'); - return parts.length > 1 ? (parts[0].toLowerCase() + '_' + parts[1].toUpperCase()) : temp; - }, - bcp47 : function (tag) { - var temp = (tag || '').split('_').join('-'); - var parts = temp.split('-'); - - switch (parts.length) { - case 1: // language only - parts[0] = parts[0].toLowerCase(); - break; - case 2: // language-script or language-region - parts[0] = parts[0].toLowerCase(); - if (parts[1].length === 4) { // parts[1] is script - parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase(); - } else { // parts[1] is region - parts[1] = parts[1].toUpperCase(); - } - break; - case 3: // language-script-region - parts[0] = parts[0].toLowerCase(); - parts[1] = parts[1].charAt(0).toUpperCase() + parts[1].slice(1).toLowerCase(); - parts[2] = parts[2].toUpperCase(); - break; - default: - return temp; - } - - return parts.join('-'); - }, - 'iso639-1' : function (tag) { - var temp = (tag || '').split('_').join('-'); - var parts = temp.split('-'); - return parts[0].toLowerCase(); - } - }; - - var version = '2.18.2'; - - // tries to determine the browsers language - var getFirstBrowserLanguage = function () { - - // internal purpose only - if (angular.isFunction(pascalprechtTranslateOverrider.getLocale)) { - return pascalprechtTranslateOverrider.getLocale(); - } - - var nav = $windowProvider.$get().navigator, - browserLanguagePropertyKeys = ['language', 'browserLanguage', 'systemLanguage', 'userLanguage'], - i, - language; - - // support for HTML 5.1 "navigator.languages" - if (angular.isArray(nav.languages)) { - for (i = 0; i < nav.languages.length; i++) { - language = nav.languages[i]; - if (language && language.length) { - return language; - } - } - } - - // support for other well known properties in browsers - for (i = 0; i < browserLanguagePropertyKeys.length; i++) { - language = nav[browserLanguagePropertyKeys[i]]; - if (language && language.length) { - return language; - } - } - - return null; - }; - getFirstBrowserLanguage.displayName = 'angular-translate/service: getFirstBrowserLanguage'; - - // tries to determine the browsers locale - var getLocale = function () { - var locale = getFirstBrowserLanguage() || ''; - if (languageTagResolver[uniformLanguageTagResolver]) { - locale = languageTagResolver[uniformLanguageTagResolver](locale); - } - return locale; - }; - getLocale.displayName = 'angular-translate/service: getLocale'; - - /** - * @name indexOf - * @private - * - * @description - * indexOf polyfill. Kinda sorta. - * - * @param {array} array Array to search in. - * @param {string} searchElement Element to search for. - * - * @returns {int} Index of search element. - */ - var indexOf = function (array, searchElement) { - for (var i = 0, len = array.length; i < len; i++) { - if (array[i] === searchElement) { - return i; - } - } - return -1; - }; - - /** - * @name trim - * @private - * - * @description - * trim polyfill - * - * @returns {string} The string stripped of whitespace from both ends - */ - var trim = function () { - return this.toString().replace(/^\s+|\s+$/g, ''); - }; - - /** - * @name lowercase - * @private - * - * @description - * Return the lowercase string only if the type is string - * - * @returns {string} The string all in lowercase - */ - var lowercase = function (string) { - return angular.isString(string) ? string.toLowerCase() : string; - }; - - var negotiateLocale = function (preferred) { - if (!preferred) { - return; - } - - var avail = [], - locale = lowercase(preferred), - i = 0, - n = $availableLanguageKeys.length; - - for (; i < n; i++) { - avail.push(lowercase($availableLanguageKeys[i])); - } - - // Check for an exact match in our list of available keys - i = indexOf(avail, locale); - if (i > -1) { - return $availableLanguageKeys[i]; - } - - if ($languageKeyAliases) { - var alias; - for (var langKeyAlias in $languageKeyAliases) { - if ($languageKeyAliases.hasOwnProperty(langKeyAlias)) { - var hasWildcardKey = false; - var hasExactKey = Object.prototype.hasOwnProperty.call($languageKeyAliases, langKeyAlias) && - lowercase(langKeyAlias) === lowercase(preferred); - - if (langKeyAlias.slice(-1) === '*') { - hasWildcardKey = lowercase(langKeyAlias.slice(0, -1)) === lowercase(preferred.slice(0, langKeyAlias.length - 1)); - } - if (hasExactKey || hasWildcardKey) { - alias = $languageKeyAliases[langKeyAlias]; - if (indexOf(avail, lowercase(alias)) > -1) { - return alias; - } - } - } - } - } - - // Check for a language code without region - var parts = preferred.split('_'); - - if (parts.length > 1 && indexOf(avail, lowercase(parts[0])) > -1) { - return parts[0]; - } - - // If everything fails, return undefined. - return; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#translations - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Registers a new translation table for specific language key. - * - * To register a translation table for specific language, pass a defined language - * key as first parameter. - * - *
      -   *  // register translation table for language: 'de_DE'
      -   *  $translateProvider.translations('de_DE', {
      -   *    'GREETING': 'Hallo Welt!'
      -   *  });
      -   *
      -   *  // register another one
      -   *  $translateProvider.translations('en_US', {
      -   *    'GREETING': 'Hello world!'
      -   *  });
      -   * 
      - * - * When registering multiple translation tables for for the same language key, - * the actual translation table gets extended. This allows you to define module - * specific translation which only get added, once a specific module is loaded in - * your app. - * - * Invoking this method with no arguments returns the translation table which was - * registered with no language key. Invoking it with a language key returns the - * related translation table. - * - * @param {string} langKey A language key. - * @param {object} translationTable A plain old JavaScript object that represents a translation table. - * - */ - var translations = function (langKey, translationTable) { - - if (!langKey && !translationTable) { - return $translationTable; - } - - if (langKey && !translationTable) { - if (angular.isString(langKey)) { - return $translationTable[langKey]; - } - } else { - if (!angular.isObject($translationTable[langKey])) { - $translationTable[langKey] = {}; - } - angular.extend($translationTable[langKey], flatObject(translationTable)); - } - return this; - }; - - this.translations = translations; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#cloakClassName - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * - * Let's you change the class name for `translate-cloak` directive. - * Default class name is `translate-cloak`. - * - * @param {string} name translate-cloak class name - */ - this.cloakClassName = function (name) { - if (!name) { - return $cloakClassName; - } - $cloakClassName = name; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#nestedObjectDelimeter - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * - * Let's you change the delimiter for namespaced translations. - * Default delimiter is `.`. - * - * @param {string} delimiter namespace separator - */ - this.nestedObjectDelimeter = function (delimiter) { - if (!delimiter) { - return $nestedObjectDelimeter; - } - $nestedObjectDelimeter = delimiter; - return this; - }; - - /** - * @name flatObject - * @private - * - * @description - * Flats an object. This function is used to flatten given translation data with - * namespaces, so they are later accessible via dot notation. - */ - var flatObject = function (data, path, result, prevKey) { - var key, keyWithPath, keyWithShortPath, val; - - if (!path) { - path = []; - } - if (!result) { - result = {}; - } - for (key in data) { - if (!Object.prototype.hasOwnProperty.call(data, key)) { - continue; - } - val = data[key]; - if (angular.isObject(val)) { - flatObject(val, path.concat(key), result, key); - } else { - keyWithPath = path.length ? ('' + path.join($nestedObjectDelimeter) + $nestedObjectDelimeter + key) : key; - if (path.length && key === prevKey) { - // Create shortcut path (foo.bar == foo.bar.bar) - keyWithShortPath = '' + path.join($nestedObjectDelimeter); - // Link it to original path - result[keyWithShortPath] = '@:' + keyWithPath; - } - result[keyWithPath] = val; - } - } - return result; - }; - flatObject.displayName = 'flatObject'; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#addInterpolation - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Adds interpolation services to angular-translate, so it can manage them. - * - * @param {object} factory Interpolation service factory - */ - this.addInterpolation = function (factory) { - $interpolatorFactories.push(factory); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useMessageFormatInterpolation - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use interpolation functionality of messageformat.js. - * This is useful when having high level pluralization and gender selection. - */ - this.useMessageFormatInterpolation = function () { - return this.useInterpolation('$translateMessageFormatInterpolation'); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useInterpolation - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate which interpolation style to use as default, application-wide. - * Simply pass a factory/service name. The interpolation service has to implement - * the correct interface. - * - * @param {string} factory Interpolation service name. - */ - this.useInterpolation = function (factory) { - $interpolationFactory = factory; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useSanitizeStrategy - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Simply sets a sanitation strategy type. - * - * @param {string} value Strategy type. - */ - this.useSanitizeValueStrategy = function (value) { - $translateSanitizationProvider.useStrategy(value); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#preferredLanguage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells the module which of the registered translation tables to use for translation - * at initial startup by passing a language key. Similar to `$translateProvider#use` - * only that it says which language to **prefer**. - * It is recommended to call this after {@link pascalprecht.translate.$translate#fallbackLanguage fallbackLanguage()}. - * - * @param {string} langKey A language key. - */ - this.preferredLanguage = function (langKey) { - if (langKey) { - setupPreferredLanguage(langKey); - return this; - } - return $preferredLanguage; - }; - var setupPreferredLanguage = function (langKey) { - if (langKey) { - $preferredLanguage = langKey; - } - return $preferredLanguage; - }; - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicator - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Sets an indicator which is used when a translation isn't found. E.g. when - * setting the indicator as 'X' and one tries to translate a translation id - * called `NOT_FOUND`, this will result in `X NOT_FOUND X`. - * - * Internally this methods sets a left indicator and a right indicator using - * `$translateProvider.translationNotFoundIndicatorLeft()` and - * `$translateProvider.translationNotFoundIndicatorRight()`. - * - * **Note**: These methods automatically add a whitespace between the indicators - * and the translation id. - * - * @param {string} indicator An indicator, could be any string. - */ - this.translationNotFoundIndicator = function (indicator) { - this.translationNotFoundIndicatorLeft(indicator); - this.translationNotFoundIndicatorRight(indicator); - return this; - }; - - /** - * ngdoc function - * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Sets an indicator which is used when a translation isn't found left to the - * translation id. - * - * @param {string} indicator An indicator. - */ - this.translationNotFoundIndicatorLeft = function (indicator) { - if (!indicator) { - return $notFoundIndicatorLeft; - } - $notFoundIndicatorLeft = indicator; - return this; - }; - - /** - * ngdoc function - * @name pascalprecht.translate.$translateProvider#translationNotFoundIndicatorLeft - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Sets an indicator which is used when a translation isn't found right to the - * translation id. - * - * @param {string} indicator An indicator. - */ - this.translationNotFoundIndicatorRight = function (indicator) { - if (!indicator) { - return $notFoundIndicatorRight; - } - $notFoundIndicatorRight = indicator; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#fallbackLanguage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells the module which of the registered translation tables to use when missing translations - * at initial startup by passing a language key. Similar to `$translateProvider#use` - * only that it says which language to **fallback**. - * - * @param {string||array} langKey A language key. - * - */ - this.fallbackLanguage = function (langKey) { - fallbackStack(langKey); - return this; - }; - - var fallbackStack = function (langKey) { - if (langKey) { - if (angular.isString(langKey)) { - $fallbackWasString = true; - $fallbackLanguage = [langKey]; - } else if (angular.isArray(langKey)) { - $fallbackWasString = false; - $fallbackLanguage = langKey; - } - if (angular.isString($preferredLanguage) && indexOf($fallbackLanguage, $preferredLanguage) < 0) { - $fallbackLanguage.push($preferredLanguage); - } - - return this; - } else { - if ($fallbackWasString) { - return $fallbackLanguage[0]; - } else { - return $fallbackLanguage; - } - } - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#use - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Set which translation table to use for translation by given language key. When - * trying to 'use' a language which isn't provided, it'll throw an error. - * - * You actually don't have to use this method since `$translateProvider#preferredLanguage` - * does the job too. - * - * @param {string} langKey A language key. - */ - this.use = function (langKey) { - if (langKey) { - if (!$translationTable[langKey] && (!$loaderFactory)) { - // only throw an error, when not loading translation data asynchronously - throw new Error('$translateProvider couldn\'t find translationTable for langKey: \'' + langKey + '\''); - } - $uses = langKey; - return this; - } - return $uses; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#resolveClientLocale - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver. - * - * @returns {string} the current client/browser language key - */ - this.resolveClientLocale = function () { - return getLocale(); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#storageKey - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells the module which key must represent the choosed language by a user in the storage. - * - * @param {string} key A key for the storage. - */ - var storageKey = function (key) { - if (!key) { - if ($storagePrefix) { - return $storagePrefix + $storageKey; - } - return $storageKey; - } - $storageKey = key; - return this; - }; - - this.storageKey = storageKey; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useUrlLoader - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use `$translateUrlLoader` extension service as loader. - * - * @param {string} url Url - * @param {Object=} options Optional configuration object - */ - this.useUrlLoader = function (url, options) { - return this.useLoader('$translateUrlLoader', angular.extend({url : url}, options)); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useStaticFilesLoader - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use `$translateStaticFilesLoader` extension service as loader. - * - * @param {Object=} options Optional configuration object - */ - this.useStaticFilesLoader = function (options) { - return this.useLoader('$translateStaticFilesLoader', options); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useLoader - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use any other service as loader. - * - * @param {string} loaderFactory Factory name to use - * @param {Object=} options Optional configuration object - */ - this.useLoader = function (loaderFactory, options) { - $loaderFactory = loaderFactory; - $loaderOptions = options || {}; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useLocalStorage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use `$translateLocalStorage` service as storage layer. - * - */ - this.useLocalStorage = function () { - return this.useStorage('$translateLocalStorage'); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useCookieStorage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use `$translateCookieStorage` service as storage layer. - */ - this.useCookieStorage = function () { - return this.useStorage('$translateCookieStorage'); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useStorage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use custom service as storage layer. - */ - this.useStorage = function (storageFactory) { - $storageFactory = storageFactory; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#storagePrefix - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Sets prefix for storage key. - * - * @param {string} prefix Storage key prefix - */ - this.storagePrefix = function (prefix) { - if (!prefix) { - return prefix; - } - $storagePrefix = prefix; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandlerLog - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to use built-in log handler when trying to translate - * a translation Id which doesn't exist. - * - * This is actually a shortcut method for `useMissingTranslationHandler()`. - * - */ - this.useMissingTranslationHandlerLog = function () { - return this.useMissingTranslationHandler('$translateMissingTranslationHandlerLog'); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useMissingTranslationHandler - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Expects a factory name which later gets instantiated with `$injector`. - * This method can be used to tell angular-translate to use a custom - * missingTranslationHandler. Just build a factory which returns a function - * and expects a translation id as argument. - * - * Example: - *
      -   *  app.config(function ($translateProvider) {
      -   *    $translateProvider.useMissingTranslationHandler('customHandler');
      -   *  });
      -   *
      -   *  app.factory('customHandler', function (dep1, dep2) {
      -   *    return function (translationId) {
      -   *      // something with translationId and dep1 and dep2
      -   *    };
      -   *  });
      -   * 
      - * - * @param {string} factory Factory name - */ - this.useMissingTranslationHandler = function (factory) { - $missingTranslationHandlerFactory = factory; - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#usePostCompiling - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * If post compiling is enabled, all translated values will be processed - * again with AngularJS' $compile. - * - * Example: - *
      -   *  app.config(function ($translateProvider) {
      -   *    $translateProvider.usePostCompiling(true);
      -   *  });
      -   * 
      - * - * @param {string} factory Factory name - */ - this.usePostCompiling = function (value) { - $postCompilingEnabled = !(!value); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#forceAsyncReload - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * If force async reload is enabled, async loader will always be called - * even if $translationTable already contains the language key, adding - * possible new entries to the $translationTable. - * - * Example: - *
      -   *  app.config(function ($translateProvider) {
      -   *    $translateProvider.forceAsyncReload(true);
      -   *  });
      -   * 
      - * - * @param {boolean} value - valid values are true or false - */ - this.forceAsyncReload = function (value) { - $forceAsyncReloadEnabled = !(!value); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#uniformLanguageTag - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate which language tag should be used as a result when determining - * the current browser language. - * - * This setting must be set before invoking {@link pascalprecht.translate.$translateProvider#methods_determinePreferredLanguage determinePreferredLanguage()}. - * - *
      -   * $translateProvider
      -   *   .uniformLanguageTag('bcp47')
      -   *   .determinePreferredLanguage()
      -   * 
      - * - * The resolver currently supports: - * * default - * (traditionally: hyphens will be converted into underscores, i.e. en-US => en_US) - * en-US => en_US - * en_US => en_US - * en-us => en_us - * * java - * like default, but the second part will be always in uppercase - * en-US => en_US - * en_US => en_US - * en-us => en_US - * * BCP 47 (RFC 4646 & 4647) - * EN => en - * en-US => en-US - * en_US => en-US - * en-us => en-US - * sr-latn => sr-Latn - * sr-latn-rs => sr-Latn-RS - * - * See also: - * * http://en.wikipedia.org/wiki/IETF_language_tag - * * http://www.w3.org/International/core/langtags/ - * * http://tools.ietf.org/html/bcp47 - * - * @param {string|object} options - options (or standard) - * @param {string} options.standard - valid values are 'default', 'bcp47', 'java' - */ - this.uniformLanguageTag = function (options) { - - if (!options) { - options = {}; - } else if (angular.isString(options)) { - options = { - standard : options - }; - } - - uniformLanguageTagResolver = options.standard; - - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#determinePreferredLanguage - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Tells angular-translate to try to determine on its own which language key - * to set as preferred language. When `fn` is given, angular-translate uses it - * to determine a language key, otherwise it uses the built-in `getLocale()` - * method. - * - * The `getLocale()` returns a language key in the format `[lang]_[country]` or - * `[lang]` depending on what the browser provides. - * - * Use this method at your own risk, since not all browsers return a valid - * locale (see {@link pascalprecht.translate.$translateProvider#methods_uniformLanguageTag uniformLanguageTag()}). - * - * @param {Function=} fn Function to determine a browser's locale - */ - this.determinePreferredLanguage = function (fn) { - - var locale = (fn && angular.isFunction(fn)) ? fn() : getLocale(); - - if (!$availableLanguageKeys.length) { - $preferredLanguage = locale; - } else { - $preferredLanguage = negotiateLocale(locale) || locale; - } - - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#registerAvailableLanguageKeys - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Registers a set of language keys the app will work with. Use this method in - * combination with - * {@link pascalprecht.translate.$translateProvider#determinePreferredLanguage determinePreferredLanguage}. - * When available languages keys are registered, angular-translate - * tries to find the best fitting language key depending on the browsers locale, - * considering your language key convention. - * - * @param {object} languageKeys Array of language keys the your app will use - * @param {object=} aliases Alias map. - */ - this.registerAvailableLanguageKeys = function (languageKeys, aliases) { - if (languageKeys) { - $availableLanguageKeys = languageKeys; - if (aliases) { - $languageKeyAliases = aliases; - } - return this; - } - return $availableLanguageKeys; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#useLoaderCache - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Registers a cache for internal $http based loaders. - * {@link pascalprecht.translate.$translationCache $translationCache}. - * When false the cache will be disabled (default). When true or undefined - * the cache will be a default (see $cacheFactory). When an object it will - * be treat as a cache object itself: the usage is $http({cache: cache}) - * - * @param {object} cache boolean, string or cache-object - */ - this.useLoaderCache = function (cache) { - if (cache === false) { - // disable cache - loaderCache = undefined; - } else if (cache === true) { - // enable cache using AJS defaults - loaderCache = true; - } else if (typeof(cache) === 'undefined') { - // enable cache using default - loaderCache = '$translationCache'; - } else if (cache) { - // enable cache using given one (see $cacheFactory) - loaderCache = cache; - } - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#directivePriority - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Sets the default priority of the translate directive. The standard value is `0`. - * Calling this function without an argument will return the current value. - * - * @param {number} priority for the translate-directive - */ - this.directivePriority = function (priority) { - if (priority === undefined) { - // getter - return directivePriority; - } else { - // setter with chaining - directivePriority = priority; - return this; - } - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#statefulFilter - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * Since AngularJS 1.3, filters which are not stateless (depending at the scope) - * have to explicit define this behavior. - * Sets whether the translate filter should be stateful or stateless. The standard value is `true` - * meaning being stateful. - * Calling this function without an argument will return the current value. - * - * @param {boolean} state - defines the state of the filter - */ - this.statefulFilter = function (state) { - if (state === undefined) { - // getter - return statefulFilter; - } else { - // setter with chaining - statefulFilter = state; - return this; - } - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#postProcess - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * The post processor will be intercept right after the translation result. It can modify the result. - * - * @param {object} fn Function or service name (string) to be called after the translation value has been set / resolved. The function itself will enrich every value being processed and then continue the normal resolver process - */ - this.postProcess = function (fn) { - if (fn) { - postProcessFn = fn; - } else { - postProcessFn = undefined; - } - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateProvider#keepContent - * @methodOf pascalprecht.translate.$translateProvider - * - * @description - * If keepContent is set to true than translate directive will always use innerHTML - * as a default translation - * - * Example: - *
      -   *  app.config(function ($translateProvider) {
      -   *    $translateProvider.keepContent(true);
      -   *  });
      -   * 
      - * - * @param {boolean} value - valid values are true or false - */ - this.keepContent = function (value) { - $keepContent = !(!value); - return this; - }; - - /** - * @ngdoc object - * @name pascalprecht.translate.$translate - * @requires $interpolate - * @requires $log - * @requires $rootScope - * @requires $q - * - * @description - * The `$translate` service is the actual core of angular-translate. It expects a translation id - * and optional interpolate parameters to translate contents. - * - *
      -   *  $translate('HEADLINE_TEXT').then(function (translation) {
      -   *    $scope.translatedText = translation;
      -   *  });
      -   * 
      - * - * @param {string|array} translationId A token which represents a translation id - * This can be optionally an array of translation ids which - * results that the function returns an object where each key - * is the translation id and the value the translation. - * @param {object=} [interpolateParams={}] An object hash for dynamic values - * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation()) - * @param {string=} [defaultTranslationText=undefined] the optional default translation text that is written as - * as default text in case it is not found in any configured language - * @param {string=} [forceLanguage=false] A language to be used instead of the current language - * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set) - * @returns {object} promise - */ - this.$get = ['$log', '$injector', '$rootScope', '$q', function ($log, $injector, $rootScope, $q) { - - var Storage, - defaultInterpolator = $injector.get($interpolationFactory || '$translateDefaultInterpolation'), - pendingLoader = false, - interpolatorHashMap = {}, - langPromises = {}, - fallbackIndex, - startFallbackIteration; - - var $translate = function (translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy) { - if (!$uses && $preferredLanguage) { - $uses = $preferredLanguage; - } - var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses - (negotiateLocale(forceLanguage) || forceLanguage) : $uses; - - // Check forceLanguage is present - if (forceLanguage) { - loadTranslationsIfMissing(forceLanguage); - } - - // Duck detection: If the first argument is an array, a bunch of translations was requested. - // The result is an object. - if (angular.isArray(translationId)) { - // Inspired by Q.allSettled by Kris Kowal - // https://github.com/kriskowal/q/blob/b0fa72980717dc202ffc3cbf03b936e10ebbb9d7/q.js#L1553-1563 - // This transforms all promises regardless resolved or rejected - var translateAll = function (translationIds) { - var results = {}; // storing the actual results - var promises = []; // promises to wait for - // Wraps the promise a) being always resolved and b) storing the link id->value - var translate = function (translationId) { - var deferred = $q.defer(); - var regardless = function (value) { - results[translationId] = value; - deferred.resolve([translationId, value]); - }; - // we don't care whether the promise was resolved or rejected; just store the values - $translate(translationId, interpolateParams, interpolationId, defaultTranslationText, forceLanguage, sanitizeStrategy).then(regardless, regardless); - return deferred.promise; - }; - for (var i = 0, c = translationIds.length; i < c; i++) { - promises.push(translate(translationIds[i])); - } - // wait for all (including storing to results) - return $q.all(promises).then(function () { - // return the results - return results; - }); - }; - return translateAll(translationId); - } - - var deferred = $q.defer(); - - // trim off any whitespace - if (translationId) { - translationId = trim.apply(translationId); - } else { - throw new TypeError('translationId must be a not empty string'); - } - - var promiseToWaitFor = (function () { - var promise = langPromises[uses] || langPromises[$preferredLanguage]; - - fallbackIndex = 0; - - if ($storageFactory && !promise) { - // looks like there's no pending promise for $preferredLanguage or - // $uses. Maybe there's one pending for a language that comes from - // storage. - var langKey = Storage.get($storageKey); - promise = langPromises[langKey]; - - if ($fallbackLanguage && $fallbackLanguage.length) { - var index = indexOf($fallbackLanguage, langKey); - // maybe the language from storage is also defined as fallback language - // we increase the fallback language index to not search in that language - // as fallback, since it's probably the first used language - // in that case the index starts after the first element - fallbackIndex = (index === 0) ? 1 : 0; - - // but we can make sure to ALWAYS fallback to preferred language at least - if (indexOf($fallbackLanguage, $preferredLanguage) < 0) { - $fallbackLanguage.push($preferredLanguage); - } - } - } - return promise; - }()); - - if (!promiseToWaitFor) { - // no promise to wait for? okay. Then there's no loader registered - // nor is a one pending for language that comes from storage. - // We can just translate. - determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject); - } else { - var promiseResolved = function () { - // $uses may have changed while waiting - if (!forceLanguage) { - uses = $uses; - } - determineTranslation(translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy).then(deferred.resolve, deferred.reject); - }; - promiseResolved.displayName = 'promiseResolved'; - - promiseToWaitFor['finally'](promiseResolved)['catch'](angular.noop); // we don't care about errors here, already handled - } - return deferred.promise; - }; - - /** - * @name applyNotFoundIndicators - * @private - * - * @description - * Applies not fount indicators to given translation id, if needed. - * This function gets only executed, if a translation id doesn't exist, - * which is why a translation id is expected as argument. - * - * @param {string} translationId Translation id. - * @returns {string} Same as given translation id but applied with not found - * indicators. - */ - var applyNotFoundIndicators = function (translationId) { - // applying notFoundIndicators - if ($notFoundIndicatorLeft) { - translationId = [$notFoundIndicatorLeft, translationId].join(' '); - } - if ($notFoundIndicatorRight) { - translationId = [translationId, $notFoundIndicatorRight].join(' '); - } - return translationId; - }; - - /** - * @name useLanguage - * @private - * - * @description - * Makes actual use of a language by setting a given language key as used - * language and informs registered interpolators to also use the given - * key as locale. - * - * @param {string} key Locale key. - */ - var useLanguage = function (key) { - $uses = key; - - // make sure to store new language key before triggering success event - if ($storageFactory) { - Storage.put($translate.storageKey(), $uses); - } - - $rootScope.$emit('$translateChangeSuccess', {language : key}); - - // inform default interpolator - defaultInterpolator.setLocale($uses); - - var eachInterpolator = function (interpolator, id) { - interpolatorHashMap[id].setLocale($uses); - }; - eachInterpolator.displayName = 'eachInterpolatorLocaleSetter'; - - // inform all others too! - angular.forEach(interpolatorHashMap, eachInterpolator); - $rootScope.$emit('$translateChangeEnd', {language : key}); - }; - - /** - * @name loadAsync - * @private - * - * @description - * Kicks off registered async loader using `$injector` and applies existing - * loader options. When resolved, it updates translation tables accordingly - * or rejects with given language key. - * - * @param {string} key Language key. - * @return {Promise} A promise. - */ - var loadAsync = function (key) { - if (!key) { - throw 'No language key specified for loading.'; - } - - var deferred = $q.defer(); - - $rootScope.$emit('$translateLoadingStart', {language : key}); - pendingLoader = true; - - var cache = loaderCache; - if (typeof(cache) === 'string') { - // getting on-demand instance of loader - cache = $injector.get(cache); - } - - var loaderOptions = angular.extend({}, $loaderOptions, { - key : key, - $http : angular.extend({}, { - cache : cache - }, $loaderOptions.$http) - }); - - var onLoaderSuccess = function (data) { - var translationTable = {}; - $rootScope.$emit('$translateLoadingSuccess', {language : key}); - - if (angular.isArray(data)) { - angular.forEach(data, function (table) { - angular.extend(translationTable, flatObject(table)); - }); - } else { - angular.extend(translationTable, flatObject(data)); - } - pendingLoader = false; - deferred.resolve({ - key : key, - table : translationTable - }); - $rootScope.$emit('$translateLoadingEnd', {language : key}); - }; - onLoaderSuccess.displayName = 'onLoaderSuccess'; - - var onLoaderError = function (key) { - $rootScope.$emit('$translateLoadingError', {language : key}); - deferred.reject(key); - $rootScope.$emit('$translateLoadingEnd', {language : key}); - }; - onLoaderError.displayName = 'onLoaderError'; - - $injector.get($loaderFactory)(loaderOptions) - .then(onLoaderSuccess, onLoaderError); - - return deferred.promise; - }; - - if ($storageFactory) { - Storage = $injector.get($storageFactory); - - if (!Storage.get || !Storage.put) { - throw new Error('Couldn\'t use storage \'' + $storageFactory + '\', missing get() or put() method!'); - } - } - - // if we have additional interpolations that were added via - // $translateProvider.addInterpolation(), we have to map'em - if ($interpolatorFactories.length) { - var eachInterpolationFactory = function (interpolatorFactory) { - var interpolator = $injector.get(interpolatorFactory); - // setting initial locale for each interpolation service - interpolator.setLocale($preferredLanguage || $uses); - // make'em recognizable through id - interpolatorHashMap[interpolator.getInterpolationIdentifier()] = interpolator; - }; - eachInterpolationFactory.displayName = 'interpolationFactoryAdder'; - - angular.forEach($interpolatorFactories, eachInterpolationFactory); - } - - /** - * @name getTranslationTable - * @private - * - * @description - * Returns a promise that resolves to the translation table - * or is rejected if an error occurred. - * - * @param langKey - * @returns {Q.promise} - */ - var getTranslationTable = function (langKey) { - var deferred = $q.defer(); - if (Object.prototype.hasOwnProperty.call($translationTable, langKey)) { - deferred.resolve($translationTable[langKey]); - } else if (langPromises[langKey]) { - var onResolve = function (data) { - translations(data.key, data.table); - deferred.resolve(data.table); - }; - onResolve.displayName = 'translationTableResolver'; - langPromises[langKey].then(onResolve, deferred.reject); - } else { - deferred.reject(); - } - return deferred.promise; - }; - - /** - * @name getFallbackTranslation - * @private - * - * @description - * Returns a promise that will resolve to the translation - * or be rejected if no translation was found for the language. - * This function is currently only used for fallback language translation. - * - * @param langKey The language to translate to. - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param sanitizeStrategy - * @returns {Q.promise} - */ - var getFallbackTranslation = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) { - var deferred = $q.defer(); - - var onResolve = function (translationTable) { - if (Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) { - Interpolator.setLocale(langKey); - var translation = translationTable[translationId]; - if (translation.substr(0, 2) === '@:') { - getFallbackTranslation(langKey, translation.substr(2), interpolateParams, Interpolator, sanitizeStrategy) - .then(deferred.resolve, deferred.reject); - } else { - var interpolatedValue = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'service', sanitizeStrategy, translationId); - interpolatedValue = applyPostProcessing(translationId, translationTable[translationId], interpolatedValue, interpolateParams, langKey); - - deferred.resolve(interpolatedValue); - - } - Interpolator.setLocale($uses); - } else { - deferred.reject(); - } - }; - onResolve.displayName = 'fallbackTranslationResolver'; - - getTranslationTable(langKey).then(onResolve, deferred.reject); - - return deferred.promise; - }; - - /** - * @name getFallbackTranslationInstant - * @private - * - * @description - * Returns a translation - * This function is currently only used for fallback language translation. - * - * @param langKey The language to translate to. - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param sanitizeStrategy sanitize strategy override - * - * @returns {string} translation - */ - var getFallbackTranslationInstant = function (langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy) { - var result, translationTable = $translationTable[langKey]; - - if (translationTable && Object.prototype.hasOwnProperty.call(translationTable, translationId) && translationTable[translationId] !== null) { - Interpolator.setLocale(langKey); - result = Interpolator.interpolate(translationTable[translationId], interpolateParams, 'filter', sanitizeStrategy, translationId); - result = applyPostProcessing(translationId, translationTable[translationId], result, interpolateParams, langKey, sanitizeStrategy); - // workaround for TrustedValueHolderType - if (!angular.isString(result) && angular.isFunction(result.$$unwrapTrustedValue)) { - var result2 = result.$$unwrapTrustedValue(); - if (result2.substr(0, 2) === '@:') { - return getFallbackTranslationInstant(langKey, result2.substr(2), interpolateParams, Interpolator, sanitizeStrategy); - } - } else if (result.substr(0, 2) === '@:') { - return getFallbackTranslationInstant(langKey, result.substr(2), interpolateParams, Interpolator, sanitizeStrategy); - } - Interpolator.setLocale($uses); - } - - return result; - }; - - - /** - * @name translateByHandler - * @private - * - * Translate by missing translation handler. - * - * @param translationId - * @param interpolateParams - * @param defaultTranslationText - * @param sanitizeStrategy sanitize strategy override - * - * @returns translation created by $missingTranslationHandler or translationId is $missingTranslationHandler is - * absent - */ - var translateByHandler = function (translationId, interpolateParams, defaultTranslationText, sanitizeStrategy) { - // If we have a handler factory - we might also call it here to determine if it provides - // a default text for a translationid that can't be found anywhere in our tables - if ($missingTranslationHandlerFactory) { - return $injector.get($missingTranslationHandlerFactory)(translationId, $uses, interpolateParams, defaultTranslationText, sanitizeStrategy); - } else { - return translationId; - } - }; - - /** - * @name resolveForFallbackLanguage - * @private - * - * Recursive helper function for fallbackTranslation that will sequentially look - * for a translation in the fallbackLanguages starting with fallbackLanguageIndex. - * - * @param fallbackLanguageIndex - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param defaultTranslationText - * @param sanitizeStrategy - * @returns {Q.promise} Promise that will resolve to the translation. - */ - var resolveForFallbackLanguage = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) { - var deferred = $q.defer(); - - if (fallbackLanguageIndex < $fallbackLanguage.length) { - var langKey = $fallbackLanguage[fallbackLanguageIndex]; - getFallbackTranslation(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy).then( - function (data) { - deferred.resolve(data); - }, - function () { - // Look in the next fallback language for a translation. - // It delays the resolving by passing another promise to resolve. - return resolveForFallbackLanguage(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy).then(deferred.resolve, deferred.reject); - } - ); - } else { - // No translation found in any fallback language - // if a default translation text is set in the directive, then return this as a result - if (defaultTranslationText) { - deferred.resolve(defaultTranslationText); - } else { - var missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText); - - // if no default translation is set and an error handler is defined, send it to the handler - // and then return the result if it isn't undefined - if ($missingTranslationHandlerFactory && missingTranslationHandlerTranslation) { - deferred.resolve(missingTranslationHandlerTranslation); - } else { - deferred.reject(applyNotFoundIndicators(translationId)); - } - } - } - return deferred.promise; - }; - - /** - * @name resolveForFallbackLanguageInstant - * @private - * - * Recursive helper function for fallbackTranslation that will sequentially look - * for a translation in the fallbackLanguages starting with fallbackLanguageIndex. - * - * @param fallbackLanguageIndex - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param sanitizeStrategy - * @returns {string} translation - */ - var resolveForFallbackLanguageInstant = function (fallbackLanguageIndex, translationId, interpolateParams, Interpolator, sanitizeStrategy) { - var result; - - if (fallbackLanguageIndex < $fallbackLanguage.length) { - var langKey = $fallbackLanguage[fallbackLanguageIndex]; - result = getFallbackTranslationInstant(langKey, translationId, interpolateParams, Interpolator, sanitizeStrategy); - if (!result && result !== '') { - result = resolveForFallbackLanguageInstant(fallbackLanguageIndex + 1, translationId, interpolateParams, Interpolator); - } - } - return result; - }; - - /** - * Translates with the usage of the fallback languages. - * - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param defaultTranslationText - * @param sanitizeStrategy - * @returns {Q.promise} Promise, that resolves to the translation. - */ - var fallbackTranslation = function (translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) { - // Start with the fallbackLanguage with index 0 - return resolveForFallbackLanguage((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy); - }; - - /** - * Translates with the usage of the fallback languages. - * - * @param translationId - * @param interpolateParams - * @param Interpolator - * @param sanitizeStrategy - * @returns {String} translation - */ - var fallbackTranslationInstant = function (translationId, interpolateParams, Interpolator, sanitizeStrategy) { - // Start with the fallbackLanguage with index 0 - return resolveForFallbackLanguageInstant((startFallbackIteration > 0 ? startFallbackIteration : fallbackIndex), translationId, interpolateParams, Interpolator, sanitizeStrategy); - }; - - var determineTranslation = function (translationId, interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy) { - - var deferred = $q.defer(); - - var table = uses ? $translationTable[uses] : $translationTable, - Interpolator = (interpolationId) ? interpolatorHashMap[interpolationId] : defaultInterpolator; - - // if the translation id exists, we can just interpolate it - if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) { - var translation = table[translationId]; - - // If using link, rerun $translate with linked translationId and return it - if (translation.substr(0, 2) === '@:') { - - $translate(translation.substr(2), interpolateParams, interpolationId, defaultTranslationText, uses, sanitizeStrategy) - .then(deferred.resolve, deferred.reject); - } else { - // - var resolvedTranslation = Interpolator.interpolate(translation, interpolateParams, 'service', sanitizeStrategy, translationId); - resolvedTranslation = applyPostProcessing(translationId, translation, resolvedTranslation, interpolateParams, uses); - deferred.resolve(resolvedTranslation); - } - } else { - var missingTranslationHandlerTranslation; - // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise - if ($missingTranslationHandlerFactory && !pendingLoader) { - missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, defaultTranslationText); - } - - // since we couldn't translate the inital requested translation id, - // we try it now with one or more fallback languages, if fallback language(s) is - // configured. - if (uses && $fallbackLanguage && $fallbackLanguage.length) { - fallbackTranslation(translationId, interpolateParams, Interpolator, defaultTranslationText, sanitizeStrategy) - .then(function (translation) { - deferred.resolve(translation); - }, function (_translationId) { - deferred.reject(applyNotFoundIndicators(_translationId)); - }); - } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { - // looks like the requested translation id doesn't exists. - // Now, if there is a registered handler for missing translations and no - // asyncLoader is pending, we execute the handler - if (defaultTranslationText) { - deferred.resolve(defaultTranslationText); - } else { - deferred.resolve(missingTranslationHandlerTranslation); - } - } else { - if (defaultTranslationText) { - deferred.resolve(defaultTranslationText); - } else { - deferred.reject(applyNotFoundIndicators(translationId)); - } - } - } - return deferred.promise; - }; - - var determineTranslationInstant = function (translationId, interpolateParams, interpolationId, uses, sanitizeStrategy) { - - var result, table = uses ? $translationTable[uses] : $translationTable, - Interpolator = defaultInterpolator; - - // if the interpolation id exists use custom interpolator - if (interpolatorHashMap && Object.prototype.hasOwnProperty.call(interpolatorHashMap, interpolationId)) { - Interpolator = interpolatorHashMap[interpolationId]; - } - - // if the translation id exists, we can just interpolate it - if (table && Object.prototype.hasOwnProperty.call(table, translationId) && table[translationId] !== null) { - var translation = table[translationId]; - - // If using link, rerun $translate with linked translationId and return it - if (translation.substr(0, 2) === '@:') { - result = determineTranslationInstant(translation.substr(2), interpolateParams, interpolationId, uses, sanitizeStrategy); - } else { - result = Interpolator.interpolate(translation, interpolateParams, 'filter', sanitizeStrategy, translationId); - result = applyPostProcessing(translationId, translation, result, interpolateParams, uses, sanitizeStrategy); - } - } else { - var missingTranslationHandlerTranslation; - // for logging purposes only (as in $translateMissingTranslationHandlerLog), value is not returned to promise - if ($missingTranslationHandlerFactory && !pendingLoader) { - missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy); - } - - // since we couldn't translate the inital requested translation id, - // we try it now with one or more fallback languages, if fallback language(s) is - // configured. - if (uses && $fallbackLanguage && $fallbackLanguage.length) { - fallbackIndex = 0; - result = fallbackTranslationInstant(translationId, interpolateParams, Interpolator, sanitizeStrategy); - } else if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { - // looks like the requested translation id doesn't exists. - // Now, if there is a registered handler for missing translations and no - // asyncLoader is pending, we execute the handler - result = missingTranslationHandlerTranslation; - } else { - result = applyNotFoundIndicators(translationId); - } - } - - return result; - }; - - var clearNextLangAndPromise = function (key) { - if ($nextLang === key) { - $nextLang = undefined; - } - langPromises[key] = undefined; - }; - - var applyPostProcessing = function (translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy) { - var fn = postProcessFn; - - if (fn) { - - if (typeof(fn) === 'string') { - // getting on-demand instance - fn = $injector.get(fn); - } - if (fn) { - return fn(translationId, translation, resolvedTranslation, interpolateParams, uses, sanitizeStrategy); - } - } - - return resolvedTranslation; - }; - - var loadTranslationsIfMissing = function (key) { - if (!$translationTable[key] && $loaderFactory && !langPromises[key]) { - langPromises[key] = loadAsync(key).then(function (translation) { - translations(translation.key, translation.table); - return translation; - }); - } - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#preferredLanguage - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the language key for the preferred language. - * - * @param {string} langKey language String or Array to be used as preferredLanguage (changing at runtime) - * - * @return {string} preferred language key - */ - $translate.preferredLanguage = function (langKey) { - if (langKey) { - setupPreferredLanguage(langKey); - } - return $preferredLanguage; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#cloakClassName - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the configured class name for `translate-cloak` directive. - * - * @return {string} cloakClassName - */ - $translate.cloakClassName = function () { - return $cloakClassName; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#nestedObjectDelimeter - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the configured delimiter for nested namespaces. - * - * @return {string} nestedObjectDelimeter - */ - $translate.nestedObjectDelimeter = function () { - return $nestedObjectDelimeter; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#fallbackLanguage - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the language key for the fallback languages or sets a new fallback stack. - * It is recommended to call this before {@link pascalprecht.translate.$translateProvider#preferredLanguage preferredLanguage()}. - * - * @param {string=} langKey language String or Array of fallback languages to be used (to change stack at runtime) - * - * @return {string||array} fallback language key - */ - $translate.fallbackLanguage = function (langKey) { - if (langKey !== undefined && langKey !== null) { - fallbackStack(langKey); - - // as we might have an async loader initiated and a new translation language might have been defined - // we need to add the promise to the stack also. So - iterate. - if ($loaderFactory) { - if ($fallbackLanguage && $fallbackLanguage.length) { - for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { - if (!langPromises[$fallbackLanguage[i]]) { - langPromises[$fallbackLanguage[i]] = loadAsync($fallbackLanguage[i]); - } - } - } - } - $translate.use($translate.use()); - } - if ($fallbackWasString) { - return $fallbackLanguage[0]; - } else { - return $fallbackLanguage; - } - - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#useFallbackLanguage - * @methodOf pascalprecht.translate.$translate - * - * @description - * Sets the first key of the fallback language stack to be used for translation. - * Therefore all languages in the fallback array BEFORE this key will be skipped! - * - * @param {string=} langKey Contains the langKey the iteration shall start with. Set to false if you want to - * get back to the whole stack - */ - $translate.useFallbackLanguage = function (langKey) { - if (langKey !== undefined && langKey !== null) { - if (!langKey) { - startFallbackIteration = 0; - } else { - var langKeyPosition = indexOf($fallbackLanguage, langKey); - if (langKeyPosition > -1) { - startFallbackIteration = langKeyPosition; - } - } - - } - - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#proposedLanguage - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the language key of language that is currently loaded asynchronously. - * - * @return {string} language key - */ - $translate.proposedLanguage = function () { - return $nextLang; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#storage - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns registered storage. - * - * @return {object} Storage - */ - $translate.storage = function () { - return Storage; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#negotiateLocale - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns a language key based on available languages and language aliases. If a - * language key cannot be resolved, returns undefined. - * - * If no or a falsy key is given, returns undefined. - * - * @param {string} [key] Language key - * @return {string|undefined} Language key or undefined if no language key is found. - */ - $translate.negotiateLocale = negotiateLocale; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#use - * @methodOf pascalprecht.translate.$translate - * - * @description - * Tells angular-translate which language to use by given language key. This method is - * used to change language at runtime. It also takes care of storing the language - * key in a configured store to let your app remember the choosed language. - * - * When trying to 'use' a language which isn't available it tries to load it - * asynchronously with registered loaders. - * - * Returns promise object with loaded language file data or string of the currently used language. - * - * If no or a falsy key is given it returns the currently used language key. - * The returned string will be ```undefined``` if setting up $translate hasn't finished. - * @example - * $translate.use("en_US").then(function(data){ - * $scope.text = $translate("HELLO"); - * }); - * - * @param {string=} key Language key - * @return {object|string} Promise with loaded language data or the language key if a falsy param was given. - */ - $translate.use = function (key) { - if (!key) { - return $uses; - } - - var deferred = $q.defer(); - deferred.promise.then(null, angular.noop); // AJS "Possibly unhandled rejection" - - $rootScope.$emit('$translateChangeStart', {language : key}); - - // Try to get the aliased language key - var aliasedKey = negotiateLocale(key); - // Ensure only registered language keys will be loaded - if ($availableLanguageKeys.length > 0 && !aliasedKey) { - return $q.reject(key); - } - - if (aliasedKey) { - key = aliasedKey; - } - - // if there isn't a translation table for the language we've requested, - // we load it asynchronously - $nextLang = key; - if (($forceAsyncReloadEnabled || !$translationTable[key]) && $loaderFactory && !langPromises[key]) { - langPromises[key] = loadAsync(key).then(function (translation) { - translations(translation.key, translation.table); - deferred.resolve(translation.key); - if ($nextLang === key) { - useLanguage(translation.key); - } - return translation; - }, function (key) { - $rootScope.$emit('$translateChangeError', {language : key}); - deferred.reject(key); - $rootScope.$emit('$translateChangeEnd', {language : key}); - return $q.reject(key); - }); - langPromises[key]['finally'](function () { - clearNextLangAndPromise(key); - })['catch'](angular.noop); // we don't care about errors (clearing) - } else if (langPromises[key]) { - // we are already loading this asynchronously - // resolve our new deferred when the old langPromise is resolved - langPromises[key].then(function (translation) { - if ($nextLang === translation.key) { - useLanguage(translation.key); - } - deferred.resolve(translation.key); - return translation; - }, function (key) { - // find first available fallback language if that request has failed - if (!$uses && $fallbackLanguage && $fallbackLanguage.length > 0 && $fallbackLanguage[0] !== key) { - return $translate.use($fallbackLanguage[0]).then(deferred.resolve, deferred.reject); - } else { - return deferred.reject(key); - } - }); - } else { - deferred.resolve(key); - useLanguage(key); - } - - return deferred.promise; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#resolveClientLocale - * @methodOf pascalprecht.translate.$translate - * - * @description - * This returns the current browser/client's language key. The result is processed with the configured uniform tag resolver. - * - * @returns {string} the current client/browser language key - */ - $translate.resolveClientLocale = function () { - return getLocale(); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#storageKey - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the key for the storage. - * - * @return {string} storage key - */ - $translate.storageKey = function () { - return storageKey(); - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#isPostCompilingEnabled - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns whether post compiling is enabled or not - * - * @return {bool} storage key - */ - $translate.isPostCompilingEnabled = function () { - return $postCompilingEnabled; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#isForceAsyncReloadEnabled - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns whether force async reload is enabled or not - * - * @return {boolean} forceAsyncReload value - */ - $translate.isForceAsyncReloadEnabled = function () { - return $forceAsyncReloadEnabled; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#isKeepContent - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns whether keepContent or not - * - * @return {boolean} keepContent value - */ - $translate.isKeepContent = function () { - return $keepContent; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#refresh - * @methodOf pascalprecht.translate.$translate - * - * @description - * Refreshes a translation table pointed by the given langKey. If langKey is not specified, - * the module will drop all existent translation tables and load new version of those which - * are currently in use. - * - * Refresh means that the module will drop target translation table and try to load it again. - * - * In case there are no loaders registered the refresh() method will throw an Error. - * - * If the module is able to refresh translation tables refresh() method will broadcast - * $translateRefreshStart and $translateRefreshEnd events. - * - * @example - * // this will drop all currently existent translation tables and reload those which are - * // currently in use - * $translate.refresh(); - * // this will refresh a translation table for the en_US language - * $translate.refresh('en_US'); - * - * @param {string} langKey A language key of the table, which has to be refreshed - * - * @return {promise} Promise, which will be resolved in case a translation tables refreshing - * process is finished successfully, and reject if not. - */ - $translate.refresh = function (langKey) { - if (!$loaderFactory) { - throw new Error('Couldn\'t refresh translation table, no loader registered!'); - } - - $rootScope.$emit('$translateRefreshStart', {language : langKey}); - - var deferred = $q.defer(), updatedLanguages = {}; - - //private helper - function loadNewData(languageKey) { - var promise = loadAsync(languageKey); - //update the load promise cache for this language - langPromises[languageKey] = promise; - //register a data handler for the promise - promise.then(function (data) { - //clear the cache for this language - $translationTable[languageKey] = {}; - //add the new data for this language - translations(languageKey, data.table); - //track that we updated this language - updatedLanguages[languageKey] = true; - }, - //handle rejection to appease the $q validation - angular.noop); - return promise; - } - - //set up post-processing - deferred.promise.then( - function () { - for (var key in $translationTable) { - if ($translationTable.hasOwnProperty(key)) { - //delete cache entries that were not updated - if (!(key in updatedLanguages)) { - delete $translationTable[key]; - } - } - } - if ($uses) { - useLanguage($uses); - } - }, - //handle rejection to appease the $q validation - angular.noop - )['finally']( - function () { - $rootScope.$emit('$translateRefreshEnd', {language : langKey}); - } - ); - - if (!langKey) { - // if there's no language key specified we refresh ALL THE THINGS! - var languagesToReload = $fallbackLanguage && $fallbackLanguage.slice() || []; - if ($uses && languagesToReload.indexOf($uses) === -1) { - languagesToReload.push($uses); - } - $q.all(languagesToReload.map(loadNewData)).then(deferred.resolve, deferred.reject); - - } else if ($translationTable[langKey]) { - //just refresh the specified language cache - loadNewData(langKey).then(deferred.resolve, deferred.reject); - - } else { - deferred.reject(); - } - - return deferred.promise; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#instant - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns a translation instantly from the internal state of loaded translation. All rules - * regarding the current language, the preferred language of even fallback languages will be - * used except any promise handling. If a language was not found, an asynchronous loading - * will be invoked in the background. - * - * @param {string|array} translationId A token which represents a translation id - * This can be optionally an array of translation ids which - * results that the function's promise returns an object where - * each key is the translation id and the value the translation. - * @param {object=} [interpolateParams={}] Params - * @param {string=} [interpolationId=undefined] The id of the interpolation to use (use default unless set via useInterpolation()) - * @param {string=} [forceLanguage=false] A language to be used instead of the current language - * @param {string=} [sanitizeStrategy=undefined] force sanitize strategy for this call instead of using the configured one (use default unless set) - * - * @return {string|object} translation - */ - $translate.instant = function (translationId, interpolateParams, interpolationId, forceLanguage, sanitizeStrategy) { - - // we don't want to re-negotiate $uses - var uses = (forceLanguage && forceLanguage !== $uses) ? // we don't want to re-negotiate $uses - (negotiateLocale(forceLanguage) || forceLanguage) : $uses; - - // Detect undefined and null values to shorten the execution and prevent exceptions - if (translationId === null || angular.isUndefined(translationId)) { - return translationId; - } - - // Check forceLanguage is present - if (forceLanguage) { - loadTranslationsIfMissing(forceLanguage); - } - - // Duck detection: If the first argument is an array, a bunch of translations was requested. - // The result is an object. - if (angular.isArray(translationId)) { - var results = {}; - for (var i = 0, c = translationId.length; i < c; i++) { - results[translationId[i]] = $translate.instant(translationId[i], interpolateParams, interpolationId, forceLanguage, sanitizeStrategy); - } - return results; - } - - // We discarded unacceptable values. So we just need to verify if translationId is empty String - if (angular.isString(translationId) && translationId.length < 1) { - return translationId; - } - - // trim off any whitespace - if (translationId) { - translationId = trim.apply(translationId); - } - - var result, possibleLangKeys = []; - if ($preferredLanguage) { - possibleLangKeys.push($preferredLanguage); - } - if (uses) { - possibleLangKeys.push(uses); - } - if ($fallbackLanguage && $fallbackLanguage.length) { - possibleLangKeys = possibleLangKeys.concat($fallbackLanguage); - } - for (var j = 0, d = possibleLangKeys.length; j < d; j++) { - var possibleLangKey = possibleLangKeys[j]; - if ($translationTable[possibleLangKey]) { - if (typeof $translationTable[possibleLangKey][translationId] !== 'undefined') { - result = determineTranslationInstant(translationId, interpolateParams, interpolationId, uses, sanitizeStrategy); - } - } - if (typeof result !== 'undefined') { - break; - } - } - - if (!result && result !== '') { - if ($notFoundIndicatorLeft || $notFoundIndicatorRight) { - result = applyNotFoundIndicators(translationId); - } else { - // Return translation of default interpolator if not found anything. - result = defaultInterpolator.interpolate(translationId, interpolateParams, 'filter', sanitizeStrategy); - - // looks like the requested translation id doesn't exists. - // Now, if there is a registered handler for missing translations and no - // asyncLoader is pending, we execute the handler - var missingTranslationHandlerTranslation; - if ($missingTranslationHandlerFactory && !pendingLoader) { - missingTranslationHandlerTranslation = translateByHandler(translationId, interpolateParams, sanitizeStrategy); - } - - if ($missingTranslationHandlerFactory && !pendingLoader && missingTranslationHandlerTranslation) { - result = missingTranslationHandlerTranslation; - } - } - } - - return result; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#versionInfo - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the current version information for the angular-translate library - * - * @return {string} angular-translate version - */ - $translate.versionInfo = function () { - return version; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#loaderCache - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns the defined loaderCache. - * - * @return {boolean|string|object} current value of loaderCache - */ - $translate.loaderCache = function () { - return loaderCache; - }; - - // internal purpose only - $translate.directivePriority = function () { - return directivePriority; - }; - - // internal purpose only - $translate.statefulFilter = function () { - return statefulFilter; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#isReady - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns whether the service is "ready" to translate (i.e. loading 1st language). - * - * See also {@link pascalprecht.translate.$translate#methods_onReady onReady()}. - * - * @return {boolean} current value of ready - */ - $translate.isReady = function () { - return $isReady; - }; - - var $onReadyDeferred = $q.defer(); - $onReadyDeferred.promise.then(function () { - $isReady = true; - }); - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#onReady - * @methodOf pascalprecht.translate.$translate - * - * @description - * Calls the function provided or resolved the returned promise after the service is "ready" to translate (i.e. loading 1st language). - * - * See also {@link pascalprecht.translate.$translate#methods_isReady isReady()}. - * - * @param {Function=} fn Function to invoke when service is ready - * @return {object} Promise resolved when service is ready - */ - $translate.onReady = function (fn) { - var deferred = $q.defer(); - if (angular.isFunction(fn)) { - deferred.promise.then(fn); - } - if ($isReady) { - deferred.resolve(); - } else { - $onReadyDeferred.promise.then(deferred.resolve); - } - return deferred.promise; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#getAvailableLanguageKeys - * @methodOf pascalprecht.translate.$translate - * - * @description - * This function simply returns the registered language keys being defined before in the config phase - * With this, an application can use the array to provide a language selection dropdown or similar - * without any additional effort - * - * @returns {object} returns the list of possibly registered language keys and mapping or null if not defined - */ - $translate.getAvailableLanguageKeys = function () { - if ($availableLanguageKeys.length > 0) { - return $availableLanguageKeys; - } - return null; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translate#getTranslationTable - * @methodOf pascalprecht.translate.$translate - * - * @description - * Returns translation table by the given language key. - * - * Unless a language is provided it returns a translation table of the current one. - * Note: If translation dictionary is currently downloading or in progress - * it will return null. - * - * @param {string} langKey A token which represents a translation id - * - * @return {object} a copy of angular-translate $translationTable - */ - $translate.getTranslationTable = function (langKey) { - langKey = langKey || $translate.use(); - if (langKey && $translationTable[langKey]) { - return angular.copy($translationTable[langKey]); - } - return null; - }; - - // Whenever $translateReady is being fired, this will ensure the state of $isReady - var globalOnReadyListener = $rootScope.$on('$translateReady', function () { - $onReadyDeferred.resolve(); - globalOnReadyListener(); // one time only - globalOnReadyListener = null; - }); - var globalOnChangeListener = $rootScope.$on('$translateChangeEnd', function () { - $onReadyDeferred.resolve(); - globalOnChangeListener(); // one time only - globalOnChangeListener = null; - }); - - if ($loaderFactory) { - - // If at least one async loader is defined and there are no - // (default) translations available we should try to load them. - if (angular.equals($translationTable, {})) { - if ($translate.use()) { - $translate.use($translate.use()); - } - } - - // Also, if there are any fallback language registered, we start - // loading them asynchronously as soon as we can. - if ($fallbackLanguage && $fallbackLanguage.length) { - var processAsyncResult = function (translation) { - translations(translation.key, translation.table); - $rootScope.$emit('$translateChangeEnd', {language : translation.key}); - return translation; - }; - for (var i = 0, len = $fallbackLanguage.length; i < len; i++) { - var fallbackLanguageId = $fallbackLanguage[i]; - if ($forceAsyncReloadEnabled || !$translationTable[fallbackLanguageId]) { - langPromises[fallbackLanguageId] = loadAsync(fallbackLanguageId).then(processAsyncResult); - } - } - } - } else { - $rootScope.$emit('$translateReady', {language : $translate.use()}); - } - - return $translate; - }]; -} - -$translate.displayName = 'displayName'; - -/** - * @ngdoc object - * @name pascalprecht.translate.$translateDefaultInterpolation - * @requires $interpolate - * - * @description - * Uses angular's `$interpolate` services to interpolate strings against some values. - * - * Be aware to configure a proper sanitization strategy. - * - * See also: - * * {@link pascalprecht.translate.$translateSanitization} - * - * @return {object} $translateDefaultInterpolation Interpolator service - */ -angular.module('pascalprecht.translate').factory('$translateDefaultInterpolation', $translateDefaultInterpolation); - -function $translateDefaultInterpolation ($interpolate, $translateSanitization) { - - 'use strict'; - - var $translateInterpolator = {}, - $locale, - $identifier = 'default'; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateDefaultInterpolation#setLocale - * @methodOf pascalprecht.translate.$translateDefaultInterpolation - * - * @description - * Sets current locale (this is currently not use in this interpolation). - * - * @param {string} locale Language key or locale. - */ - $translateInterpolator.setLocale = function (locale) { - $locale = locale; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateDefaultInterpolation#getInterpolationIdentifier - * @methodOf pascalprecht.translate.$translateDefaultInterpolation - * - * @description - * Returns an identifier for this interpolation service. - * - * @returns {string} $identifier - */ - $translateInterpolator.getInterpolationIdentifier = function () { - return $identifier; - }; - - /** - * @deprecated will be removed in 3.0 - * @see {@link pascalprecht.translate.$translateSanitization} - */ - $translateInterpolator.useSanitizeValueStrategy = function (value) { - $translateSanitization.useStrategy(value); - return this; - }; - - /** - * @ngdoc function - * @name pascalprecht.translate.$translateDefaultInterpolation#interpolate - * @methodOf pascalprecht.translate.$translateDefaultInterpolation - * - * @description - * Interpolates given value agains given interpolate params using angulars - * `$interpolate` service. - * - * Since AngularJS 1.5, `value` must not be a string but can be anything input. - * - * @param {string} value translation - * @param {object} [interpolationParams={}] interpolation params - * @param {string} [context=undefined] current context (filter, directive, service) - * @param {string} [sanitizeStrategy=undefined] sanitize strategy (use default unless set) - * @param {string} translationId current translationId - * - * @returns {string} interpolated string - */ - $translateInterpolator.interpolate = function (value, interpolationParams, context, sanitizeStrategy, translationId) { // jshint ignore:line - interpolationParams = interpolationParams || {}; - interpolationParams = $translateSanitization.sanitize(interpolationParams, 'params', sanitizeStrategy, context); - - var interpolatedText; - if (angular.isNumber(value)) { - // numbers are safe - interpolatedText = '' + value; - } else if (angular.isString(value)) { - // strings must be interpolated (that's the job here) - interpolatedText = $interpolate(value)(interpolationParams); - interpolatedText = $translateSanitization.sanitize(interpolatedText, 'text', sanitizeStrategy, context); - } else { - // neither a number or a string, cant interpolate => empty string - interpolatedText = ''; - } - - return interpolatedText; - }; - - return $translateInterpolator; -} - -$translateDefaultInterpolation.displayName = '$translateDefaultInterpolation'; - -angular.module('pascalprecht.translate').constant('$STORAGE_KEY', 'NG_TRANSLATE_LANG_KEY'); - -angular.module('pascalprecht.translate') -/** - * @ngdoc directive - * @name pascalprecht.translate.directive:translate - * @requires $interpolate, - * @requires $compile, - * @requires $parse, - * @requires $rootScope - * @restrict AE - * - * @description - * Translates given translation id either through attribute or DOM content. - * Internally it uses $translate service to translate the translation id. It possible to - * pass an optional `translate-values` object literal as string into translation id. - * - * @param {string=} translate Translation id which could be either string or interpolated string. - * @param {string=} translate-values Values to pass into translation id. Can be passed as object literal string or interpolated object. - * @param {string=} translate-attr-ATTR translate Translation id and put it into ATTR attribute. - * @param {string=} translate-default will be used unless translation was successful - * @param {string=} translate-sanitize-strategy defines locally sanitize strategy - * @param {boolean=} translate-compile (default true if present) defines locally activation of {@link pascalprecht.translate.$translateProvider#methods_usePostCompiling} - * @param {boolean=} translate-keep-content (default true if present) defines that in case a KEY could not be translated, that the existing content is left in the innerHTML} - * - * @example - - -
      - -
      
      -        
      TRANSLATION_ID
      -
      
      -        
      
      -        
      {{translationId}}
      -
      
      -        
      WITH_VALUES
      -
      
      -        
      WITH_VALUES
      -
      
      -        
      
      -
      -      
      -
      - - angular.module('ngView', ['pascalprecht.translate']) - - .config(function ($translateProvider) { - - $translateProvider.translations('en',{ - 'TRANSLATION_ID': 'Hello there!', - 'WITH_VALUES': 'The following value is dynamic: {{value}}', - 'WITH_CAMEL_CASE_KEY': 'The interpolation key is camel cased: {{camelCaseKey}}' - }).preferredLanguage('en'); - - }); - - angular.module('ngView').controller('TranslateCtrl', function ($scope) { - $scope.translationId = 'TRANSLATION_ID'; - - $scope.values = { - value: 78 - }; - }); - - - it('should translate', function () { - inject(function ($rootScope, $compile) { - $rootScope.translationId = 'TRANSLATION_ID'; - - element = $compile('

      ')($rootScope); - $rootScope.$digest(); - expect(element.text()).toBe('Hello there!'); - - element = $compile('

      ')($rootScope); - $rootScope.$digest(); - expect(element.text()).toBe('Hello there!'); - - element = $compile('

      TRANSLATION_ID

      ')($rootScope); - $rootScope.$digest(); - expect(element.text()).toBe('Hello there!'); - - element = $compile('

      {{translationId}}

      ')($rootScope); - $rootScope.$digest(); - expect(element.text()).toBe('Hello there!'); - - element = $compile('

      ')($rootScope); - $rootScope.$digest(); - expect(element.attr('title')).toBe('Hello there!'); - - element = $compile('

      ')($rootScope); - $rootScope.$digest(); - expect(element.text()).toBe('The interpolation key is camel cased: Hello'); - }); - }); -
      -
      - */ -.directive('translate', translateDirective); -function translateDirective($translate, $interpolate, $compile, $parse, $rootScope) { - - 'use strict'; - - /** - * @name trim - * @private - * - * @description - * trim polyfill - * - * @returns {string} The string stripped of whitespace from both ends - */ - var trim = function() { - return this.toString().replace(/^\s+|\s+$/g, ''); - }; - - /** - * @name lowercase - * @private - * - * @description - * Return the lowercase string only if the type is string - * - * @returns {string} The string all in lowercase - */ - var lowercase = function (string) { - return angular.isString(string) ? string.toLowerCase() : string; - }; - - return { - restrict: 'AE', - scope: true, - priority: $translate.directivePriority(), - compile: function (tElement, tAttr) { - - var translateValuesExist = (tAttr.translateValues) ? - tAttr.translateValues : undefined; - - var translateInterpolation = (tAttr.translateInterpolation) ? - tAttr.translateInterpolation : undefined; - - var translateSanitizeStrategyExist = (tAttr.translateSanitizeStrategy) ? - tAttr.translateSanitizeStrategy : undefined; - - var translateValueExist = tElement[0].outerHTML.match(/translate-value-+/i); - - var interpolateRegExp = '^(.*)(' + $interpolate.startSymbol() + '.*' + $interpolate.endSymbol() + ')(.*)', - watcherRegExp = '^(.*)' + $interpolate.startSymbol() + '(.*)' + $interpolate.endSymbol() + '(.*)'; - - return function linkFn(scope, iElement, iAttr) { - - scope.interpolateParams = {}; - scope.preText = ''; - scope.postText = ''; - scope.translateNamespace = getTranslateNamespace(scope); - var translationIds = {}; - - var initInterpolationParams = function (interpolateParams, iAttr, tAttr) { - // initial setup - if (iAttr.translateValues) { - angular.extend(interpolateParams, $parse(iAttr.translateValues)(scope.$parent)); - } - // initially fetch all attributes if existing and fill the params - if (translateValueExist) { - for (var attr in tAttr) { - if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') { - var attributeName = lowercase(attr.substr(14, 1)) + attr.substr(15); - interpolateParams[attributeName] = tAttr[attr]; - } - } - } - }; - - // Ensures any change of the attribute "translate" containing the id will - // be re-stored to the scope's "translationId". - // If the attribute has no content, the element's text value (white spaces trimmed off) will be used. - var observeElementTranslation = function (translationId) { - - // Remove any old watcher - if (angular.isFunction(observeElementTranslation._unwatchOld)) { - observeElementTranslation._unwatchOld(); - observeElementTranslation._unwatchOld = undefined; - } - - if (angular.equals(translationId , '') || !angular.isDefined(translationId)) { - var iElementText = trim.apply(iElement.text()).replace(/\n/g, ' '); - - // Resolve translation id by inner html if required - var interpolateMatches = iElementText.match(interpolateRegExp); - // Interpolate translation id if required - if (angular.isArray(interpolateMatches)) { - scope.preText = interpolateMatches[1]; - scope.postText = interpolateMatches[3]; - translationIds.translate = $interpolate(interpolateMatches[2])(scope.$parent); - var watcherMatches = iElementText.match(watcherRegExp); - if (angular.isArray(watcherMatches) && watcherMatches[2] && watcherMatches[2].length) { - observeElementTranslation._unwatchOld = scope.$watch(watcherMatches[2], function (newValue) { - translationIds.translate = newValue; - updateTranslations(); - }); - } - } else { - // do not assigne the translation id if it is empty. - translationIds.translate = !iElementText ? undefined : iElementText; - } - } else { - translationIds.translate = translationId; - } - updateTranslations(); - }; - - var observeAttributeTranslation = function (translateAttr) { - iAttr.$observe(translateAttr, function (translationId) { - translationIds[translateAttr] = translationId; - updateTranslations(); - }); - }; - - // initial setup with values - initInterpolationParams(scope.interpolateParams, iAttr, tAttr); - - var firstAttributeChangedEvent = true; - iAttr.$observe('translate', function (translationId) { - if (typeof translationId === 'undefined') { - // case of element "xyz" - observeElementTranslation(''); - } else { - // case of regular attribute - if (translationId !== '' || !firstAttributeChangedEvent) { - translationIds.translate = translationId; - updateTranslations(); - } - } - firstAttributeChangedEvent = false; - }); - - for (var translateAttr in iAttr) { - if (iAttr.hasOwnProperty(translateAttr) && translateAttr.substr(0, 13) === 'translateAttr' && translateAttr.length > 13) { - observeAttributeTranslation(translateAttr); - } - } - - iAttr.$observe('translateDefault', function (value) { - scope.defaultText = value; - updateTranslations(); - }); - - if (translateSanitizeStrategyExist) { - iAttr.$observe('translateSanitizeStrategy', function (value) { - scope.sanitizeStrategy = $parse(value)(scope.$parent); - updateTranslations(); - }); - } - - if (translateValuesExist) { - iAttr.$observe('translateValues', function (interpolateParams) { - if (interpolateParams) { - scope.$parent.$watch(function () { - angular.extend(scope.interpolateParams, $parse(interpolateParams)(scope.$parent)); - }); - } - }); - } - - if (translateValueExist) { - var observeValueAttribute = function (attrName) { - iAttr.$observe(attrName, function (value) { - var attributeName = lowercase(attrName.substr(14, 1)) + attrName.substr(15); - scope.interpolateParams[attributeName] = value; - }); - }; - for (var attr in iAttr) { - if (Object.prototype.hasOwnProperty.call(iAttr, attr) && attr.substr(0, 14) === 'translateValue' && attr !== 'translateValues') { - observeValueAttribute(attr); - } - } - } - - // Master update function - var updateTranslations = function () { - for (var key in translationIds) { - if (translationIds.hasOwnProperty(key) && translationIds[key] !== undefined) { - updateTranslation(key, translationIds[key], scope, scope.interpolateParams, scope.defaultText, scope.translateNamespace); - } - } - }; - - // Put translation processing function outside loop - var updateTranslation = function(translateAttr, translationId, scope, interpolateParams, defaultTranslationText, translateNamespace) { - if (translationId) { - // if translation id starts with '.' and translateNamespace given, prepend namespace - if (translateNamespace && translationId.charAt(0) === '.') { - translationId = translateNamespace + translationId; - } - - $translate(translationId, interpolateParams, translateInterpolation, defaultTranslationText, scope.translateLanguage, scope.sanitizeStrategy) - .then(function (translation) { - applyTranslation(translation, scope, true, translateAttr); - }, function (translationId) { - applyTranslation(translationId, scope, false, translateAttr); - }); - } else { - // as an empty string cannot be translated, we can solve this using successful=false - applyTranslation(translationId, scope, false, translateAttr); - } - }; - - var applyTranslation = function (value, scope, successful, translateAttr) { - if (!successful) { - if (typeof scope.defaultText !== 'undefined') { - value = scope.defaultText; - } - } - if (translateAttr === 'translate') { - // default translate into innerHTML - if (successful || (!successful && !$translate.isKeepContent() && typeof iAttr.translateKeepContent === 'undefined')) { - iElement.empty().append(scope.preText + value + scope.postText); - } - var globallyEnabled = $translate.isPostCompilingEnabled(); - var locallyDefined = typeof tAttr.translateCompile !== 'undefined'; - var locallyEnabled = locallyDefined && tAttr.translateCompile !== 'false'; - if ((globallyEnabled && !locallyDefined) || locallyEnabled) { - $compile(iElement.contents())(scope); - } - } else { - // translate attribute - var attributeName = iAttr.$attr[translateAttr]; - if (attributeName.substr(0, 5) === 'data-') { - // ensure html5 data prefix is stripped - attributeName = attributeName.substr(5); - } - attributeName = attributeName.substr(15); - iElement.attr(attributeName, value); - } - }; - - if (translateValuesExist || translateValueExist || iAttr.translateDefault) { - scope.$watch('interpolateParams', updateTranslations, true); - } - - // Replaced watcher on translateLanguage with event listener - scope.$on('translateLanguageChanged', updateTranslations); - - // Ensures the text will be refreshed after the current language was changed - // w/ $translate.use(...) - var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations); - - // ensure translation will be looked up at least one - if (iElement.text().length) { - if (iAttr.translate) { - observeElementTranslation(iAttr.translate); - } else { - observeElementTranslation(''); - } - } else if (iAttr.translate) { - // ensure attribute will be not skipped - observeElementTranslation(iAttr.translate); - } - updateTranslations(); - scope.$on('$destroy', unbind); - }; - } - }; -} - -/** - * Returns the scope's namespace. - * @private - * @param scope - * @returns {string} - */ -function getTranslateNamespace(scope) { - 'use strict'; - if (scope.translateNamespace) { - return scope.translateNamespace; - } - if (scope.$parent) { - return getTranslateNamespace(scope.$parent); - } -} - -translateDirective.displayName = 'translateDirective'; - -angular.module('pascalprecht.translate') -/** - * @ngdoc directive - * @name pascalprecht.translate.directive:translate-attr - * @restrict A - * - * @description - * Translates attributes like translate-attr-ATTR, but with an object like ng-class. - * Internally it uses `translate` service to translate translation id. It possible to - * pass an optional `translate-values` object literal as string into translation id. - * - * @param {string=} translate-attr Object literal mapping attributes to translation ids. - * @param {string=} translate-values Values to pass into the translation ids. Can be passed as object literal string. - * @param {string=} translate-sanitize-strategy defines locally sanitize strategy - * - * @example - - -
      - - - -
      -
      - - angular.module('ngView', ['pascalprecht.translate']) - - .config(function ($translateProvider) { - - $translateProvider.translations('en',{ - 'TRANSLATION_ID': 'Hello there!', - 'WITH_VALUES': 'The following value is dynamic: {{value}}', - }).preferredLanguage('en'); - - }); - - angular.module('ngView').controller('TranslateCtrl', function ($scope) { - $scope.translationId = 'TRANSLATION_ID'; - - $scope.values = { - value: 78 - }; - }); - - - it('should translate', function () { - inject(function ($rootScope, $compile) { - $rootScope.translationId = 'TRANSLATION_ID'; - - element = $compile('')($rootScope); - $rootScope.$digest(); - expect(element.attr('placeholder)).toBe('Hello there!'); - expect(element.attr('title)).toBe('The following value is dynamic: 5'); - }); - }); - -
      - */ -.directive('translateAttr', translateAttrDirective); -function translateAttrDirective($translate, $rootScope) { - - 'use strict'; - - return { - restrict: 'A', - priority: $translate.directivePriority(), - link: function linkFn(scope, element, attr) { - - var translateAttr, - translateValues, - translateSanitizeStrategy, - previousAttributes = {}; - - // Main update translations function - var updateTranslations = function () { - angular.forEach(translateAttr, function (translationId, attributeName) { - if (!translationId) { - return; - } - previousAttributes[attributeName] = true; - - // if translation id starts with '.' and translateNamespace given, prepend namespace - if (scope.translateNamespace && translationId.charAt(0) === '.') { - translationId = scope.translateNamespace + translationId; - } - $translate(translationId, translateValues, attr.translateInterpolation, undefined, scope.translateLanguage, translateSanitizeStrategy) - .then(function (translation) { - element.attr(attributeName, translation); - }, function (translationId) { - element.attr(attributeName, translationId); - }); - }); - - // Removing unused attributes that were previously used - angular.forEach(previousAttributes, function (flag, attributeName) { - if (!translateAttr[attributeName]) { - element.removeAttr(attributeName); - delete previousAttributes[attributeName]; - } - }); - }; - - // Watch for attribute changes - watchAttribute( - scope, - attr.translateAttr, - function (newValue) { translateAttr = newValue; }, - updateTranslations - ); - // Watch for value changes - watchAttribute( - scope, - attr.translateValues, - function (newValue) { translateValues = newValue; }, - updateTranslations - ); - // Watch for sanitize strategy changes - watchAttribute( - scope, - attr.translateSanitizeStrategy, - function (newValue) { translateSanitizeStrategy = newValue; }, - updateTranslations - ); - - if (attr.translateValues) { - scope.$watch(attr.translateValues, updateTranslations, true); - } - - // Replaced watcher on translateLanguage with event listener - scope.$on('translateLanguageChanged', updateTranslations); - - // Ensures the text will be refreshed after the current language was changed - // w/ $translate.use(...) - var unbind = $rootScope.$on('$translateChangeSuccess', updateTranslations); - - updateTranslations(); - scope.$on('$destroy', unbind); - } - }; -} - -function watchAttribute(scope, attribute, valueCallback, changeCallback) { - 'use strict'; - if (!attribute) { - return; - } - if (attribute.substr(0, 2) === '::') { - attribute = attribute.substr(2); - } else { - scope.$watch(attribute, function(newValue) { - valueCallback(newValue); - changeCallback(); - }, true); - } - valueCallback(scope.$eval(attribute)); -} - -translateAttrDirective.displayName = 'translateAttrDirective'; - -angular.module('pascalprecht.translate') -/** - * @ngdoc directive - * @name pascalprecht.translate.directive:translateCloak - * @requires $translate - * @restrict A - * - * $description - * Adds a `translate-cloak` class name to the given element where this directive - * is applied initially and removes it, once a loader has finished loading. - * - * This directive can be used to prevent initial flickering when loading translation - * data asynchronously. - * - * The class name is defined in - * {@link pascalprecht.translate.$translateProvider#cloakClassName $translate.cloakClassName()}. - * - * @param {string=} translate-cloak If a translationId is provided, it will be used for showing - * or hiding the cloak. Basically it relies on the translation - * resolve. - */ -.directive('translateCloak', translateCloakDirective); - -function translateCloakDirective($translate, $rootScope) { - - 'use strict'; - - return { - compile : function (tElement) { - var applyCloak = function (element) { - element.addClass($translate.cloakClassName()); - }, - removeCloak = function (element) { - element.removeClass($translate.cloakClassName()); - }; - applyCloak(tElement); - - return function linkFn(scope, iElement, iAttr) { - //Create bound functions that incorporate the active DOM element. - var iRemoveCloak = removeCloak.bind(this, iElement), iApplyCloak = applyCloak.bind(this, iElement); - if (iAttr.translateCloak && iAttr.translateCloak.length) { - // Register a watcher for the defined translation allowing a fine tuned cloak - iAttr.$observe('translateCloak', function (translationId) { - $translate(translationId).then(iRemoveCloak, iApplyCloak); - }); - $rootScope.$on('$translateChangeSuccess', function () { - $translate(iAttr.translateCloak).then(iRemoveCloak, iApplyCloak); - }); - } else { - $translate.onReady(iRemoveCloak); - } - }; - } - }; -} - -translateCloakDirective.displayName = 'translateCloakDirective'; - -angular.module('pascalprecht.translate') -/** - * @ngdoc directive - * @name pascalprecht.translate.directive:translateNamespace - * @restrict A - * - * @description - * Translates given translation id either through attribute or DOM content. - * Internally it uses `translate` filter to translate translation id. It is possible to - * pass an optional `translate-values` object literal as string into translation id. - * - * @param {string=} translate namespace name which could be either string or interpolated string. - * - * @example - - -
      - -
      -

      .HEADERS.TITLE

      -

      .HEADERS.WELCOME

      -
      - -
      -

      .TITLE

      -

      .WELCOME

      -
      - -
      -
      - - angular.module('ngView', ['pascalprecht.translate']) - - .config(function ($translateProvider) { - - $translateProvider.translations('en',{ - 'TRANSLATION_ID': 'Hello there!', - 'CONTENT': { - 'HEADERS': { - TITLE: 'Title' - } - }, - 'CONTENT.HEADERS.WELCOME': 'Welcome' - }).preferredLanguage('en'); - - }); - - -
      - */ -.directive('translateNamespace', translateNamespaceDirective); - -function translateNamespaceDirective() { - - 'use strict'; - - return { - restrict: 'A', - scope: true, - compile: function () { - return { - pre: function (scope, iElement, iAttrs) { - scope.translateNamespace = _getTranslateNamespace(scope); - - if (scope.translateNamespace && iAttrs.translateNamespace.charAt(0) === '.') { - scope.translateNamespace += iAttrs.translateNamespace; - } else { - scope.translateNamespace = iAttrs.translateNamespace; - } - } - }; - } - }; -} - -/** - * Returns the scope's namespace. - * @private - * @param scope - * @returns {string} - */ -function _getTranslateNamespace(scope) { - 'use strict'; - if (scope.translateNamespace) { - return scope.translateNamespace; - } - if (scope.$parent) { - return _getTranslateNamespace(scope.$parent); - } -} - -translateNamespaceDirective.displayName = 'translateNamespaceDirective'; - -angular.module('pascalprecht.translate') -/** - * @ngdoc directive - * @name pascalprecht.translate.directive:translateLanguage - * @restrict A - * - * @description - * Forces the language to the directives in the underlying scope. - * - * @param {string=} translate language that will be negotiated. - * - * @example - - -
      - -
      -

      HELLO

      -
      - -
      -

      HELLO

      -
      - -
      -
      - - angular.module('ngView', ['pascalprecht.translate']) - - .config(function ($translateProvider) { - - $translateProvider - .translations('en',{ - 'HELLO': 'Hello world!' - }) - .translations('de',{ - 'HELLO': 'Hallo Welt!' - }) - .preferredLanguage('en'); - - }); - - -
      - */ -.directive('translateLanguage', translateLanguageDirective); - -function translateLanguageDirective() { - - 'use strict'; - - return { - restrict: 'A', - scope: true, - compile: function () { - return function linkFn(scope, iElement, iAttrs) { - - iAttrs.$observe('translateLanguage', function (newTranslateLanguage) { - scope.translateLanguage = newTranslateLanguage; - }); - - scope.$watch('translateLanguage', function(){ - scope.$broadcast('translateLanguageChanged'); - }); - }; - } - }; -} - -translateLanguageDirective.displayName = 'translateLanguageDirective'; - -angular.module('pascalprecht.translate') -/** - * @ngdoc filter - * @name pascalprecht.translate.filter:translate - * @requires $parse - * @requires pascalprecht.translate.$translate - * @function - * - * @description - * Uses `$translate` service to translate contents. Accepts interpolate parameters - * to pass dynamized values though translation. - * - * @param {string} translationId A translation id to be translated. - * @param {*=} interpolateParams Optional object literal (as hash or string) to pass values into translation. - * - * @returns {string} Translated text. - * - * @example - - -
      - -
      {{ 'TRANSLATION_ID' | translate }}
      -
      {{ translationId | translate }}
      -
      {{ 'WITH_VALUES' | translate:'{value: 5}' }}
      -
      {{ 'WITH_VALUES' | translate:values }}
      - -
      -
      - - angular.module('ngView', ['pascalprecht.translate']) - - .config(function ($translateProvider) { - - $translateProvider.translations('en', { - 'TRANSLATION_ID': 'Hello there!', - 'WITH_VALUES': 'The following value is dynamic: {{value}}' - }); - $translateProvider.preferredLanguage('en'); - - }); - - angular.module('ngView').controller('TranslateCtrl', function ($scope) { - $scope.translationId = 'TRANSLATION_ID'; - - $scope.values = { - value: 78 - }; - }); - -
      - */ -.filter('translate', translateFilterFactory); - -function translateFilterFactory($parse, $translate) { - - 'use strict'; - - var translateFilter = function (translationId, interpolateParams, interpolation, forceLanguage) { - if (!angular.isObject(interpolateParams)) { - var ctx = this || { - '__SCOPE_IS_NOT_AVAILABLE': 'More info at https://github.com/angular/angular.js/commit/8863b9d04c722b278fa93c5d66ad1e578ad6eb1f' - }; - interpolateParams = $parse(interpolateParams)(ctx); - } - - return $translate.instant(translationId, interpolateParams, interpolation, forceLanguage); - }; - - if ($translate.statefulFilter()) { - translateFilter.$stateful = true; - } - - return translateFilter; -} - -translateFilterFactory.displayName = 'translateFilterFactory'; - -angular.module('pascalprecht.translate') - -/** - * @ngdoc object - * @name pascalprecht.translate.$translationCache - * @requires $cacheFactory - * - * @description - * The first time a translation table is used, it is loaded in the translation cache for quick retrieval. You - * can load translation tables directly into the cache by consuming the - * `$translationCache` service directly. - * - * @return {object} $cacheFactory object. - */ - .factory('$translationCache', $translationCache); - -function $translationCache($cacheFactory) { - - 'use strict'; - - return $cacheFactory('translations'); -} - -$translationCache.displayName = '$translationCache'; -return 'pascalprecht.translate'; - -})); diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.min.js b/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.min.js deleted file mode 100644 index 065f7b86..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-translate/dist/angular-translate.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/*! - * angular-translate - v2.18.2 - 2020-01-04 - * - * Copyright (c) 2020 The angular-translate team, Pascal Precht; Licensed MIT - */ -!function(t,e){"function"==typeof define&&define.amd?define([],function(){return e()}):"object"==typeof module&&module.exports?module.exports=e():e()}(0,function(){function t(e){"use strict";var n=e.storageKey(),a=e.storage(),t=function(){var t=e.preferredLanguage();angular.isString(t)?e.use(t):a.put(n,e.use())};t.displayName="fallbackFromIncorrectStorageValue",a?a.get(n)?e.use(a.get(n)).catch(t):t():angular.isString(e.preferredLanguage())&&e.use(e.preferredLanguage())}function e(t,r,e,i){"use strict";var T,c,z,x,F,I,_,n,V,R,D,K,U,M,H,G,q={},Y=[],B=t,J=[],Q="translate-cloak",W=!1,X=!1,Z=".",tt=!1,et=!1,nt=0,at=!0,a="default",s={default:function(t){return(t||"").split("-").join("_")},java:function(t){var e=(t||"").split("-").join("_"),n=e.split("_");return 1
      ");return e.text(t),e.html()},i=function(t){if(!n)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sanitize service. Either include the ngSanitize module (https://docs.angularjs.org/api/ngSanitize) or use a sanitization strategy which does not depend on $sanitize, such as 'escape'.");return n(t)},s=function(t){if(!a)throw new Error("pascalprecht.translate.$translateSanitization: Error cannot find $sce service.");return a.trustAsHtml(t)},o=function(t,n,a){if(angular.isDate(t))return t;if(angular.isObject(t)){var r=angular.isArray(t)?[]:{};if(a){if(-1=12.14", - "npm": ">=6.13" - }, - "engines": { - "node": "*" - }, - "homepage": "https://github.com/angular-translate/angular-translate#readme", - "keywords": [ - "angular-translate", - "angular", - "AngularJS", - "translation" - ], - "license": "MIT", - "main": "dist/angular-translate.js", - "name": "angular-translate", - "repository": { - "type": "git", - "url": "git+ssh://git@github.com/angular-translate/angular-translate.git" - }, - "scripts": { - "build": "npm run-script -s check-env && grunt build", - "build-site": "npm run -s build-site-all-languages; npm run -s build-site-plato-report", - "build-site-all-languages": "./build_tools/generate_site.sh", - "build-site-by-language": "./build_tools/generate_site_by_language.sh", - "build-site-plato-report": "rm -rf ./site/plato && plato -d plato -l .jshintrc src/*.js src/**/*.js && mv plato site", - "check-env": "node node_modules/fbjs-scripts/node/check-dev-engines.js package.json", - "clean-test-scopes": "for f in test_scopes/*; do (cd $f; rm -rf bower_components); done", - "compile": "npm run-script -s check-env && grunt compile", - "lint": "grunt lint", - "prepare": "bower install", - "shipit": "npm run-script -s check-env && bower install && bower update && grunt prepare-release", - "start-demo": "node build_tools/server.js", - "test": "npm run-script -s check-env && grunt install-test && grunt test", - "test-headless": "npm run-script -s check-env && grunt test-headless", - "test-scopes": "npm run-script -s check-env && grunt install-test && for f in test_scopes/*; do TEST_SCOPE=\"`basename $f`\" grunt test; done", - "upload-github-release": "node build_tools/upload-github-release.js" - }, - "version": "2.18.2" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/LICENSE b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/LICENSE deleted file mode 100644 index 3a8b61bf..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2016 it-ailen - -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/keycloak-resources/resources/resources_common/node_modules/angular-treeview/README.md b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/README.md deleted file mode 100644 index a65b0abe..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/README.md +++ /dev/null @@ -1 +0,0 @@ -# angular-treeview \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/build/webpack.config.base.js b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/build/webpack.config.base.js deleted file mode 100644 index c4deb062..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/build/webpack.config.base.js +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Created by hyku on 16/9/29. - */ -var path = require("path"); -var webpack = require("webpack"); - -var config = { - entry: { - tree: "./src/tree.js" - }, - output: { - path: path.resolve(__dirname, ".."), - filename: "[name].js" - }, - // resolve: { - // root: path.resolve(__dirname, "./src") - // }, - module: { - loaders: [ - { - test: /\.less$/i, - loaders: ["style", "css", "less"] - }, - { - test: /\.html$/i, - loaders: ["html"] - }, - { - test: /\.css$/i, - loaders: ["style", "css"] - }, - { - test: /\.(jpe?g|png|gif|svg)$/i, - loader: "url-loader?limit=10000&name=images/[name].[ext]" - }, - { - test: /\.(ttf|eot|woff2?)$/, - loader: 'file?name=etc/[name].[ext]' - } - ] - }, - plugins: [ - new webpack.optimize.DedupePlugin(), - new webpack.ProvidePlugin({ - $: "jquery", - jQuery: "jquery" - }), - new webpack.optimize.OccurenceOrderPlugin() - ] -}; - -module.exports = config; diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/images/plus.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/images/plus.png deleted file mode 100644 index d3e74e62..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/images/plus.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/index.js b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/index.js deleted file mode 100644 index 345b1c0d..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/index.js +++ /dev/null @@ -1,7 +0,0 @@ -/** - * Created by hyku on 2016/10/13. - */ - -"use strict"; -require("./tree"); -module.exports = "angular.tree"; diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/package.json b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/package.json deleted file mode 100644 index 4a4ce6a9..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/package.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "_from": "angular-treeview@0.1.5", - "_id": "angular-treeview@0.1.5", - "_inBundle": false, - "_integrity": "sha1-7Hl9TQAbIBcsmD5l2FXrzYFStPo=", - "_location": "/angular-treeview", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-treeview@0.1.5", - "name": "angular-treeview", - "escapedName": "angular-treeview", - "rawSpec": "0.1.5", - "saveSpec": null, - "fetchSpec": "0.1.5" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-treeview/-/angular-treeview-0.1.5.tgz", - "_shasum": "ec797d4d001b20172c983e65d855ebcd8152b4fa", - "_spec": "angular-treeview@0.1.5", - "_where": "/home/abstractj/github/keycloak/keycloak-server-pull-requests/themes/src/main/resources/theme/keycloak/common/resources", - "author": { - "name": "Allen Zou" - }, - "bugs": { - "url": "https://github.com/it-ailen/angular-treeview/issues" - }, - "bundleDependencies": false, - "deprecated": false, - "description": "Treeview with angular.", - "devDependencies": { - "css-loader": "^0.25.0", - "html-loader": "^0.4.4", - "less": "^2.7.1", - "less-loader": "^2.2.3", - "style-loader": "^0.13.1", - "url-loader": "^0.5.7", - "webpack": "^1.13.2" - }, - "homepage": "https://github.com/it-ailen/angular-treeview#readme", - "keywords": [ - "angular", - "treeview" - ], - "license": "MIT", - "main": "index.js", - "name": "angular-treeview", - "repository": { - "type": "git", - "url": "git+https://github.com/it-ailen/angular-treeview.git" - }, - "scripts": { - "build": "webpack --config build/webpack.config.base.js" - }, - "version": "0.1.5" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/tree.js b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/tree.js deleted file mode 100644 index cf34cdb2..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/tree.js +++ /dev/null @@ -1,164 +0,0 @@ -/** - * Created by Allen Zou on 2016/10/13. - */ - -"use strict"; - -require("./view/tree.less"); -var fileIcon = require("./view/imgs/file.png"); -var folderIcon = require("./view/imgs/folder.png"); -var closedFolderIcon = require("./view/imgs/folder-closed.png"); -var plusIcon = require("./view/imgs/plus.png"); -var removeIcon = require("./view/imgs/remove.png"); - -var tree = angular.module("angular.tree", []); -tree - .directive("treeNode", function () { - return { - scope: { - item: "=", - adapter: "=", - icon: "=", - folderOpen: "=", - folderClose: "=", - nodeClick: "=", - childrenLoader: "=", - addItem: "=", - removeItem: "=", - editItem: "=" - }, - require: [], - restrict: "E", - // templateUrl: "directive/tree/node.html", - template: require("./view/node.html"), - link: function($scope, element, attributes, controllers) { - $scope.open = false; - $scope.add_btn = plusIcon; - $scope.remove_btn = removeIcon; - function load_children() { - if ($scope.childrenLoader) { - $scope.childrenLoader($scope.item) - .then(function(children) { - $scope.subNodes = children; - }) - .catch(function(error) { - console.error(error); - $scope.subNodes = []; - }) - } else { - $scope.subNodes = []; - } - } - $scope.wrap_node_click = function() { - if ($scope.item) { - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === "branch") { - if ($scope.open) { - $scope.open = false; - $scope.folderClose && $scope.folderClose($scope.item); - } - else { - $scope.open = true; - $scope.folderOpen && $scope.folderOpen($scope.item); - load_children(); - } - } - $scope.nodeClick && $scope.nodeClick($scope.item); - - } - return false; - }; - $scope.resolve_icon = function() { - var icon = null; - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === 'branch') { - icon = ($scope.icon && $scope.icon($scope.item, $scope.open)) - || (!$scope.open && closedFolderIcon) - || ($scope.open && folderIcon); - } - else { - icon = ($scope.icon && $scope.icon($scope.item)) - || fileIcon; - } - return icon; - }; - $scope.node_class = function() { - var classes = ["node"]; - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === 'branch') { - classes.push("branch"); - if ($scope.open) { - classes.push("open"); - } - else { - classes.push("closed"); - } - } - else { - classes.push("leaf"); - } - return classes; - }; - $scope.add_child = function() { - if ($scope.addItem) { - $scope.addItem($scope.item) - .then(function() { - load_children(); - }) - ; - } - return false; - }; - $scope.remove_self = function() { - if ($scope.removeItem) { - $scope.removeItem($scope.item) - .then(function() { - load_children(); - }) - ; - } - return false; - }; - $scope.edit = function() { - console.log("edit:::"); - console.log($scope.editItem); - $scope.editItem && $scope.editItem($scope.item); - return false; - }; - } - }; - }) - .directive("tree", function () { - var link = function($scope, element, attributes, controllers) { - $scope.itemAdapter = $scope.adapter || function(item) { - console.log("in tree .adapter"); - return item; - }; - $scope.tree_class = function() { - var classes = ["tree"]; - return classes; - } - }; - return { - scope: { - root: "=root", - adapter: "=", - icon: "=", - folderOpen: "=", - folderClose: "=", - nodeClick: "=", - childrenLoader: "=", - addItem: "=", - removeItem: "=", - editItem: "=" - }, - require: [], - restrict: "E", - // templateUrl: "directive/tree/tree.html", - template: require("./view/tree.html"), - link: link - } - }) -; - -module.exports = tree; diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/file.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/file.png deleted file mode 100644 index ffd22db2..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/file.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder-closed.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder-closed.png deleted file mode 100644 index 9c8489c1..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder-closed.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder.png deleted file mode 100644 index fdad546d..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/folder.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/plus.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/plus.png deleted file mode 100644 index 0aac69bf..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/plus.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/remove.png b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/remove.png deleted file mode 100644 index 9e081451..00000000 Binary files a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/imgs/remove.png and /dev/null differ diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/node.html b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/node.html deleted file mode 100644 index 101147d6..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/node.html +++ /dev/null @@ -1,24 +0,0 @@ -
      -
      - - {{ adapter(item).text }} - -
      -
      - - -
      -
      \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.html b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.html deleted file mode 100644 index 7717002d..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.html +++ /dev/null @@ -1,7 +0,0 @@ -
      - - -
      \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.less b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.less deleted file mode 100644 index c6373c88..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/src/view/tree.less +++ /dev/null @@ -1,33 +0,0 @@ -.tree { - @node-height: 16px; - overflow: auto; - .node { - width: 100%; - .directory-level { - position: relative; - padding-right: 4px; - white-space: nowrap; - font-size: @node-height; - line-height: @node-height; - >.icon { - height: @node-height; - } - .operation { - display: inline; - margin-left: 20px; - visibility: hidden; - img { - height: @node-height; - } - } - &:hover { - .operation { - visibility: visible; - } - } - } - .sub-node { - padding-left: 14px; - } - } -} \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/tree.js b/keycloak-resources/resources/resources_common/node_modules/angular-treeview/tree.js deleted file mode 100644 index a121bb0e..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-treeview/tree.js +++ /dev/null @@ -1,604 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; - -/******/ // The require function -/******/ function __webpack_require__(moduleId) { - -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) -/******/ return installedModules[moduleId].exports; - -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false -/******/ }; - -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - -/******/ // Flag the module as loaded -/******/ module.loaded = true; - -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } - - -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; - -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; - -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; - -/******/ // Load entry module and return exports -/******/ return __webpack_require__(0); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ function(module, exports, __webpack_require__) { - - /** - * Created by Allen Zou on 2016/10/13. - */ - - "use strict"; - - __webpack_require__(6); - var fileIcon = __webpack_require__(7); - var folderIcon = __webpack_require__(9); - var closedFolderIcon = __webpack_require__(8); - var plusIcon = __webpack_require__(10); - var removeIcon = __webpack_require__(11); - - var tree = angular.module("angular.tree", []); - tree - .directive("treeNode", function () { - return { - scope: { - item: "=", - adapter: "=", - icon: "=", - folderOpen: "=", - folderClose: "=", - nodeClick: "=", - childrenLoader: "=", - addItem: "=", - removeItem: "=", - editItem: "=" - }, - require: [], - restrict: "E", - // templateUrl: "directive/tree/node.html", - template: __webpack_require__(3), - link: function($scope, element, attributes, controllers) { - $scope.open = false; - $scope.add_btn = plusIcon; - $scope.remove_btn = removeIcon; - function load_children() { - if ($scope.childrenLoader) { - $scope.childrenLoader($scope.item) - .then(function(children) { - $scope.subNodes = children; - }) - .catch(function(error) { - console.error(error); - $scope.subNodes = []; - }) - } else { - $scope.subNodes = []; - } - } - $scope.wrap_node_click = function() { - if ($scope.item) { - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === "branch") { - if ($scope.open) { - $scope.open = false; - $scope.folderClose && $scope.folderClose($scope.item); - } - else { - $scope.open = true; - $scope.folderOpen && $scope.folderOpen($scope.item); - load_children(); - } - } - $scope.nodeClick && $scope.nodeClick($scope.item); - - } - return false; - }; - $scope.resolve_icon = function() { - var icon = null; - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === 'branch') { - icon = ($scope.icon && $scope.icon($scope.item, $scope.open)) - || (!$scope.open && closedFolderIcon) - || ($scope.open && folderIcon); - } - else { - icon = ($scope.icon && $scope.icon($scope.item)) - || fileIcon; - } - return icon; - }; - $scope.node_class = function() { - var classes = ["node"]; - var adaptedItem = $scope.adapter($scope.item); - if (adaptedItem.type === 'branch') { - classes.push("branch"); - if ($scope.open) { - classes.push("open"); - } - else { - classes.push("closed"); - } - } - else { - classes.push("leaf"); - } - return classes; - }; - $scope.add_child = function() { - if ($scope.addItem) { - $scope.addItem($scope.item) - .then(function() { - load_children(); - }) - ; - } - return false; - }; - $scope.remove_self = function() { - if ($scope.removeItem) { - $scope.removeItem($scope.item) - .then(function() { - load_children(); - }) - ; - } - return false; - }; - $scope.edit = function() { - console.log("edit:::"); - console.log($scope.editItem); - $scope.editItem && $scope.editItem($scope.item); - return false; - }; - } - }; - }) - .directive("tree", function () { - var link = function($scope, element, attributes, controllers) { - $scope.itemAdapter = $scope.adapter || function(item) { - console.log("in tree .adapter"); - return item; - }; - $scope.tree_class = function() { - var classes = ["tree"]; - return classes; - } - }; - return { - scope: { - root: "=root", - adapter: "=", - icon: "=", - folderOpen: "=", - folderClose: "=", - nodeClick: "=", - childrenLoader: "=", - addItem: "=", - removeItem: "=", - editItem: "=" - }, - require: [], - restrict: "E", - // templateUrl: "directive/tree/tree.html", - template: __webpack_require__(4), - link: link - } - }) - ; - - module.exports = tree; - - -/***/ }, -/* 1 */ -/***/ function(module, exports, __webpack_require__) { - - exports = module.exports = __webpack_require__(2)(); - // imports - - - // module - exports.push([module.id, ".tree {\n overflow: auto;\n}\n.tree .node {\n width: 100%;\n}\n.tree .node .directory-level {\n position: relative;\n padding-right: 4px;\n white-space: nowrap;\n font-size: 16px;\n line-height: 16px;\n}\n.tree .node .directory-level > .icon {\n height: 16px;\n}\n.tree .node .directory-level .operation {\n display: inline;\n margin-left: 20px;\n visibility: hidden;\n}\n.tree .node .directory-level .operation img {\n height: 16px;\n}\n.tree .node .directory-level:hover .operation {\n visibility: visible;\n}\n.tree .node .sub-node {\n padding-left: 14px;\n}\n", ""]); - - // exports - - -/***/ }, -/* 2 */ -/***/ function(module, exports) { - - /* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra - */ - // css base code, injected by the css-loader - module.exports = function() { - var list = []; - - // return the list of modules as css string - list.toString = function toString() { - var result = []; - for(var i = 0; i < this.length; i++) { - var item = this[i]; - if(item[2]) { - result.push("@media " + item[2] + "{" + item[1] + "}"); - } else { - result.push(item[1]); - } - } - return result.join(""); - }; - - // import a list of modules into the list - list.i = function(modules, mediaQuery) { - if(typeof modules === "string") - modules = [[null, modules, ""]]; - var alreadyImportedModules = {}; - for(var i = 0; i < this.length; i++) { - var id = this[i][0]; - if(typeof id === "number") - alreadyImportedModules[id] = true; - } - for(i = 0; i < modules.length; i++) { - var item = modules[i]; - // skip already imported module - // this implementation is not 100% perfect for weird media query combinations - // when a module is imported multiple times with different media queries. - // I hope this will never occur (Hey this way we have smaller bundles) - if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) { - if(mediaQuery && !item[2]) { - item[2] = mediaQuery; - } else if(mediaQuery) { - item[2] = "(" + item[2] + ") and (" + mediaQuery + ")"; - } - list.push(item); - } - } - }; - return list; - }; - - -/***/ }, -/* 3 */ -/***/ function(module, exports) { - - module.exports = "
      \n
      \n \n {{ adapter(item).text }}\n
      \n \n \n \n \n \n \n \n \n \n
      \n
      \n
      \n \n \n
      \n
      "; - -/***/ }, -/* 4 */ -/***/ function(module, exports) { - - module.exports = "
      \n \n \n
      "; - -/***/ }, -/* 5 */ -/***/ function(module, exports, __webpack_require__) { - - /* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra - */ - var stylesInDom = {}, - memoize = function(fn) { - var memo; - return function () { - if (typeof memo === "undefined") memo = fn.apply(this, arguments); - return memo; - }; - }, - isOldIE = memoize(function() { - return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase()); - }), - getHeadElement = memoize(function () { - return document.head || document.getElementsByTagName("head")[0]; - }), - singletonElement = null, - singletonCounter = 0, - styleElementsInsertedAtTop = []; - - module.exports = function(list, options) { - if(false) { - if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment"); - } - - options = options || {}; - // Force single-tag solution on IE6-9, which has a hard limit on the # of - - - - - - - - -
      - -
      -

      The Basics

      -
      -
      - - -
      -
      -

      Value

      -
      {{ basicsValue }}
      -
      -
      -
      - -
      -

      Multi-Value

      -
      -
      - - -
      -
      -

      Value

      -
      {{ multiValue }}
      -
      -
      -
      -
      - - -
      -
      -

      Config

      -
      {
      -    multiple: true,
      -    query: function (query) {
      -      query.callback({ results: states });
      -    },
      -    initSelection: function(element, callback) {
      -      var val = $(element).select2('val'),
      -        results = [];
      -      for (var i=0; i<val.length; i++) {
      -        results.push(findState(val[i]));
      -      }
      -      callback(results);
      -    }
      -  }
      -

      Value

      -
      {{ multi2Value }}
      -
      -
      -
      - -
      -

      Placeholders

      -
      -
      - - -
      -
      -

      Value

      -
      {{ placeholdersValue }}
      -
      -
      -
      -
      - - -
      -
      -

      Config

      -
      {{ placeholders }}
      -

      Value

      -
      {{ placeholdersMultiValue }}
      -
      -
      -
      - -
      -

      Array Data

      -
      -
      - - -
      -
      -

      Config

      -
      {{ array }}
      -

      Value

      -
      {{ arrayValue }}
      -
      -
      -
      -
      - - -
      -
      -

      Config

      -
      {
      -    query: function (query) {
      -      query.callback({ results: states });
      -    },
      -    initSelection: function(element, callback) {
      -      var val = $(element).select2('val');
      -      return callback(findState(val));
      -    }
      -  }
      -

      Value

      -
      {{ arrayAsyncValue }}
      -
      -
      -
      - -
      - - diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/index.html b/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/index.html deleted file mode 100644 index ff373e78..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/index.html +++ /dev/null @@ -1,47 +0,0 @@ -
      - -
      -
      -

      Demo

      -
      -

      Value is: {{select2}} (choose second)

      - -
      - -
      -

      Value is: {{select2multiple}} (choose second)

      - -
      -
      -
      -

      Options

      -

      You can pass an object to Select2 as the expression: ui-select2="{allowClear:true}" that will be passed directly to $.fn.select2(). You can read more about the supported list of options and what they do on the Select2 Documentation Page. AngularUI will leverage properties passed to Select2 for any complex behavior, there are no parameters necessary for that are specific to AngularUI.

      -
      -
      -

      ui-select2 is incompatible with <select ng-options>. For the best results use <option ng-repeat> instead

      -

      In order to properly support the Select2 placeholder, create an empty <option> tag at the top of the <select> and either set a data-placeholder on the select element or pass a placeholder option to Select2.

      - -

      How?

      -
      -<p>Value is: {{select2}} <a ng-click="select2='two'">(choose second)</a></p>
      -<select ui-select2 ng-model="select2">
      -<option value="">Pick a number</option>
      -<option value="one">First</option>
      -<option value="two">Second</option>
      -<option value="three">Third</option>
      -</select>
      -
      -

      Or try playing around with this sandbox demo to see how AJAX works

      -
      \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/styles.css b/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/styles.css deleted file mode 100644 index 08611a47..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/docs/styles.css +++ /dev/null @@ -1,4 +0,0 @@ - -#directives-select2 select { - width: 200px; -} \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/package.json b/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/package.json deleted file mode 100644 index a1179075..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/package.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "_from": "angular-ui-select2@0.0.5", - "_id": "angular-ui-select2@0.0.5", - "_inBundle": false, - "_integrity": "sha1-FedkOv1pypBj1AXrO+L5XdXsh/U=", - "_location": "/angular-ui-select2", - "_phantomChildren": {}, - "_requested": { - "type": "version", - "registry": true, - "raw": "angular-ui-select2@0.0.5", - "name": "angular-ui-select2", - "escapedName": "angular-ui-select2", - "rawSpec": "0.0.5", - "saveSpec": null, - "fetchSpec": "0.0.5" - }, - "_requiredBy": [ - "/" - ], - "_resolved": "https://registry.npmjs.org/angular-ui-select2/-/angular-ui-select2-0.0.5.tgz", - "_shasum": "15e7643afd69ca9063d405eb3be2f95dd5ec87f5", - "_spec": "angular-ui-select2@0.0.5", - "_where": "/home/abstractj/github/keycloak/keycloak-server-pull-requests/themes/src/main/resources/theme/keycloak/common/resources", - "author": { - "name": "https://github.com/angular-ui/ui-select2/graphs/contributors" - }, - "bugs": { - "url": "https://github.com/angular-ui/ui-select2/issues" - }, - "bundleDependencies": false, - "dependencies": {}, - "deprecated": false, - "description": "AngularUI - The companion suite for AngularJS", - "devDependencies": { - "async": "0.1.x", - "grunt": "~0.4.1", - "grunt-contrib-jshint": "~0.6.4", - "grunt-contrib-watch": "~0.5.3", - "grunt-conventional-changelog": "~1.0.0", - "grunt-karma": "~0.6.2", - "karma": "~0.10.2", - "load-grunt-tasks": "~0.2.0" - }, - "engines": { - "node": ">= 0.8.4" - }, - "homepage": "http://angular-ui.github.com", - "keywords": [ - "angular", - "angularui", - "select2" - ], - "name": "angular-ui-select2", - "repository": { - "type": "git", - "url": "git://github.com/angular-ui/ui-select2.git" - }, - "version": "0.0.5" -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/src/select2.js b/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/src/select2.js deleted file mode 100644 index c3b99ae9..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular-ui-select2/src/select2.js +++ /dev/null @@ -1,238 +0,0 @@ -/** - * Enhanced Select2 Dropmenus - * - * @AJAX Mode - When in this mode, your value will be an object (or array of objects) of the data used by Select2 - * This change is so that you do not have to do an additional query yourself on top of Select2's own query - * @params [options] {object} The configuration options passed to $.fn.select2(). Refer to the documentation - */ -angular.module('ui.select2', []).value('uiSelect2Config', {}).directive('uiSelect2', ['uiSelect2Config', '$timeout', function (uiSelect2Config, $timeout) { - var options = {}; - if (uiSelect2Config) { - angular.extend(options, uiSelect2Config); - } - return { - require: 'ngModel', - priority: 1, - compile: function (tElm, tAttrs) { - var watch, - repeatOption, - repeatAttr, - isSelect = tElm.is('select'), - isMultiple = angular.isDefined(tAttrs.multiple); - - // Enable watching of the options dataset if in use - if (tElm.is('select')) { - repeatOption = tElm.find( 'optgroup[ng-repeat], optgroup[data-ng-repeat], option[ng-repeat], option[data-ng-repeat]'); - - if (repeatOption.length) { - repeatAttr = repeatOption.attr('ng-repeat') || repeatOption.attr('data-ng-repeat'); - watch = jQuery.trim(repeatAttr.split('|')[0]).split(' ').pop(); - } - } - - return function (scope, elm, attrs, controller) { - // instance-specific options - var opts = angular.extend({}, options, scope.$eval(attrs.uiSelect2)); - - /* - Convert from Select2 view-model to Angular view-model. - */ - var convertToAngularModel = function(select2_data) { - var model; - if (opts.simple_tags) { - model = []; - angular.forEach(select2_data, function(value, index) { - model.push(value.id); - }); - } else { - model = select2_data; - } - return model; - }; - - /* - Convert from Angular view-model to Select2 view-model. - */ - var convertToSelect2Model = function(angular_data) { - var model = []; - if (!angular_data) { - return model; - } - - if (opts.simple_tags) { - model = []; - angular.forEach( - angular_data, - function(value, index) { - model.push({'id': value, 'text': value}); - }); - } else { - model = angular_data; - } - return model; - }; - - if (isSelect) { - // Use element', function () { - describe('compiling this directive', function () { - it('should throw an error if we have no model defined', function () { - expect(function(){ - compile(''); - }).toThrow(); - }); - it('should create proper DOM structure', function () { - var element = compile(''); - expect(element.siblings().is('div.select2-container')).toBe(true); - }); - it('should not modify the model if there is no initial value', function(){ - //TODO - }); - }); - describe('when model is changed programmatically', function(){ - describe('for single select', function(){ - it('should set select2 to the value', function(){ - scope.foo = 'First'; - var element = compile(''); - expect(element.select2('val')).toBe('First'); - scope.$apply('foo = "Second"'); - expect(element.select2('val')).toBe('Second'); - }); - it('should handle falsey values', function(){ - scope.foo = 'First'; - var element = compile(''); - expect(element.select2('val')).toBe('First'); - scope.$apply('foo = false'); - expect(element.select2('val')).toBe(null); - scope.$apply('foo = "Second"'); - scope.$apply('foo = null'); - expect(element.select2('val')).toBe(null); - scope.$apply('foo = "Second"'); - scope.$apply('foo = undefined'); - expect(element.select2('val')).toBe(null); - }); - }); - describe('for multiple select', function(){ - it('should set select2 to multiple value', function(){ - scope.foo = ['First']; - var element = compile(''); - expect(element.select2('val')).toEqual(['First']); - scope.$apply('foo = ["Second"]'); - expect(element.select2('val')).toEqual(['Second']); - scope.$apply('foo = ["Second","Third"]'); - expect(element.select2('val')).toEqual(['Second','Third']); - }); - it('should handle falsey values', function(){ - scope.foo = ['First']; - var element = compile(''); - expect(element.val()).toEqual(['First']); - scope.$apply('foo = ["Second"]'); - scope.$apply('foo = false'); - expect(element.select2('val')).toEqual([]); - scope.$apply('foo = ["Second"]'); - scope.$apply('foo = null'); - expect(element.select2('val')).toEqual([]); - scope.$apply('foo = ["Second"]'); - scope.$apply('foo = undefined'); - expect(element.select2('val')).toEqual([]); - }); - }); - }); - it('should observe the disabled attribute', function () { - var element = compile(''); - expect(element.siblings().hasClass('select2-container-disabled')).toBe(false); - scope.$apply('disabled = true'); - expect(element.siblings().hasClass('select2-container-disabled')).toBe(true); - scope.$apply('disabled = false'); - expect(element.siblings().hasClass('select2-container-disabled')).toBe(false); - }); - it('should observe the multiple attribute', function () { - var element = $compile('')(scope); - - expect(element.siblings().hasClass('select2-container-multi')).toBe(false); - scope.$apply('multiple = true'); - expect(element.siblings().hasClass('select2-container-multi')).toBe(true); - scope.$apply('multiple = false'); - expect(element.siblings().hasClass('select2-container-multi')).toBe(false); - }); - it('should observe an option with ng-repeat for changes', function(){ - scope.items = ['first', 'second', 'third']; - scope.foo = 'fourth'; - var element = compile(''); - expect(element.select2('val')).toBe(null); - scope.$apply('foo="fourth";items=["fourth"]'); - $timeout.flush(); - expect(element.select2('val')).toBe('fourth'); - }); - }); - describe('with an element', function () { - describe('compiling this directive', function () { - it('should throw an error if we have no model defined', function () { - expect(function() { - compile(''); - }).toThrow(); - }); - it('should create proper DOM structure', function () { - var element = compile(''); - expect(element.siblings().is('div.select2-container')).toBe(true); - }); - it('should not modify the model if there is no initial value', function(){ - //TODO - }); - }); - describe('when model is changed programmatically', function(){ - describe('for single-select', function(){ - it('should call select2(data, ...) for objects', function(){ - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo={ id: 1, text: "first" }'); - expect(element.select2).toHaveBeenCalledWith('data', { id: 1, text: "first" }); - }); - it('should call select2(val, ...) for strings', function(){ - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo="first"'); - expect(element.select2).toHaveBeenCalledWith('val', 'first'); - }); - }); - describe('for multi-select', function(){ - it('should call select2(data, ...) for arrays', function(){ - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); - expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first" },{ id: 2, text: "second" }]); - }); - it('should call select2(data, []) for falsey values', function(){ - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo=[]'); - expect(element.select2).toHaveBeenCalledWith('data', []); - }); - xit('should call select2(val, ...) for strings', function(){ - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo="first,second"'); - expect(element.select2).toHaveBeenCalledWith('val', 'first,second'); - }); - }); - }); - describe('consumers of ngModel should correctly use $viewValue', function() { - it('should use any formatters if present (select - single select)', function(){ - scope.foo = 'First'; - var element = compile(''); - expect(element.select2('val')).toBe('First - I\'ve been formatted'); - scope.$apply('foo = "Second"'); - expect(element.select2('val')).toBe('Second - I\'ve been formatted'); - }); - - // isMultiple && falsey - it('should use any formatters if present (input multi select - falsey value)', function() { - // need special function to hit this case - // old code checked modelValue... can't just pass undefined to model value because view value will be the same - scope.transformers.fromModel = function(modelValue) { - if (modelValue === "magic") { - return undefined; - } - - return modelValue; - }; - - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo="magic"'); - expect(element.select2).toHaveBeenCalledWith('data', []); - }); - // isMultiple && isArray - it('should use any formatters if present (input multi select)', function() { - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); - expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first - I've been formatted" },{ id: 2, text: "second - I've been formatted" }]); - }); - // isMultiple... - xit('should use any formatters if present (input multi select - non array)', function() { - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo={ id: 1, text: "first" }'); - expect(element.select2).toHaveBeenCalledWith('val', { id: 1, text: "first - I've been formatted" }); - }); - - // !isMultiple - it('should use any formatters if present (input - single select - object)', function() { - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo={ id: 1, text: "first" }'); - expect(element.select2).toHaveBeenCalledWith('data', { id: 1, text: "first - I've been formatted" }); - }); - it('should use any formatters if present (input - single select - non object)', function() { - var element = compile(''); - spyOn($.fn, 'select2'); - scope.$apply('foo="first"'); - expect(element.select2).toHaveBeenCalledWith('val', "first - I've been formatted"); - }); - - it('should not set the default value using scope.$eval', function() { - // testing directive instantiation - change order of test - spyOn($.fn, 'select2'); - spyOn($.fn, 'val'); - scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); - - var element = compile(''); - expect(element.val).not.toHaveBeenCalledWith([{ id: 1, text: "first" },{ id: 2, text: "second" }]); - }); - it('should expect a default value to be set with a call to the render method', function() { - // this should monitor the events after init, when the timeout callback executes - var opts = angular.copy(scope.options); - opts.multiple = true; - - scope.$apply('foo=[{ id: 1, text: "first" },{ id: 2, text: "second" }]'); - - spyOn($.fn, 'select2'); - var element = compile(''); - - // select 2 init - expect(element.select2).toHaveBeenCalledWith(opts); - - // callback setting - expect(element.select2).toHaveBeenCalledWith('data', [{ id: 1, text: "first - I've been formatted" },{ id: 2, text: "second - I've been formatted" }]); - - // retieve data - expect(element.select2).toHaveBeenCalledWith('data'); - }); - - }); - it('should set the model when the user selects an item', function(){ - var element = compile(''); - // TODO: programmactically select an option - // expect(scope.foo).toBe(/* selected val */) ; - }); - - it('updated the view when model changes with complex object', function(){ - scope.foo = [{'id': '0', 'text': '0'}]; - scope.options['multiple'] = true; - var element = compile(''); - scope.$digest(); - - scope.foo.push({'id': '1', 'text': '1'}); - scope.$digest(); - - expect(element.select2('data')).toEqual( - [{'id': '0', 'text': '0'}, {'id': '1', 'text': '1'}]); - }); - - - describe('simple_tags', function() { - - beforeEach(function() { - scope.options['multiple'] = true; - scope.options['simple_tags'] = true; - scope.options['tags'] = []; - }); - - it('Initialize the select2 view based on list of strings.', function() { - scope.foo = ['tag1', 'tag2']; - - var element = compile(''); - scope.$digest(); - - expect(element.select2('data')).toEqual([ - {'id': 'tag1', 'text': 'tag1'}, - {'id': 'tag2', 'text': 'tag2'} - ]); - }); - - it( - 'When list is empty select2 view model is also initialized as empty', - function() { - scope.foo = []; - - var element = compile(''); - scope.$digest(); - - expect(element.select2('data')).toEqual([]); - }); - - it( - 'Updating the model with a string will update the select2 view model.', - function() { - scope.foo = []; - var element = compile(''); - scope.$digest(); - - scope.foo.push('tag1'); - scope.$digest(); - - expect(element.select2('data')).toEqual([ - {'id': 'tag1', 'text': 'tag1'} - ]); - }); - - it( - 'Updating the select2 model will update AngularJS model with a string.', - function() { - scope.foo = []; - var element = compile(''); - scope.$digest(); - - element.select2('data', [ - {'id':'tag1', 'text': 'tag1'}, - {'id':'tag2', 'text': 'tag2'} - ]); - element.trigger('change'); - - expect(scope.foo).toEqual(['tag1', 'tag2']); - }); - - }); - - }); -}); \ No newline at end of file diff --git a/keycloak-resources/resources/resources_common/node_modules/angular/LICENSE.md b/keycloak-resources/resources/resources_common/node_modules/angular/LICENSE.md deleted file mode 100644 index 2c395eef..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular/LICENSE.md +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2016 Angular - -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/keycloak-resources/resources/resources_common/node_modules/angular/README.md b/keycloak-resources/resources/resources_common/node_modules/angular/README.md deleted file mode 100644 index d1bc0edd..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# packaged angular - -This repo is for distribution on `npm` and `bower`. The source for this module is in the -[main AngularJS repo](https://github.com/angular/angular.js). -Please file issues and pull requests against that repo. - -## Install - -You can install this package either with `npm` or with `bower`. - -### npm - -```shell -npm install angular -``` - -Then add a ` -``` - -Or `require('angular')` from your code. - -### bower - -```shell -bower install angular -``` - -Then add a ` -``` - -## Documentation - -Documentation is available on the -[AngularJS docs site](http://docs.angularjs.org/). - -## License - -The MIT License - -Copyright (c) 2010-2015 Google, Inc. http://angularjs.org - -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/keycloak-resources/resources/resources_common/node_modules/angular/angular-csp.css b/keycloak-resources/resources/resources_common/node_modules/angular/angular-csp.css deleted file mode 100644 index 5e3a079c..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular/angular-csp.css +++ /dev/null @@ -1,25 +0,0 @@ -/* Include this file in your html if you are using the CSP mode. */ - -@charset "UTF-8"; - -[ng\:cloak], -[ng-cloak], -[data-ng-cloak], -[x-ng-cloak], -.ng-cloak, -.x-ng-cloak, -.ng-hide:not(.ng-hide-animate) { - display: none !important; -} - -ng\:form { - display: block; -} - -.ng-animate-shim { - visibility:hidden; -} - -.ng-anchor { - position:absolute; -} diff --git a/keycloak-resources/resources/resources_common/node_modules/angular/angular.js b/keycloak-resources/resources/resources_common/node_modules/angular/angular.js deleted file mode 100644 index 5de56184..00000000 --- a/keycloak-resources/resources/resources_common/node_modules/angular/angular.js +++ /dev/null @@ -1,36496 +0,0 @@ -/** - * @license AngularJS v1.8.0 - * (c) 2010-2020 Google, Inc. http://angularjs.org - * License: MIT - */ -(function(window) {'use strict'; - -/* exported - minErrConfig, - errorHandlingConfig, - isValidObjectMaxDepth -*/ - -var minErrConfig = { - objectMaxDepth: 5, - urlErrorParamsEnabled: true -}; - -/** - * @ngdoc function - * @name angular.errorHandlingConfig - * @module ng - * @kind function - * - * @description - * Configure several aspects of error handling in AngularJS if used as a setter or return the - * current configuration if used as a getter. The following options are supported: - * - * - **objectMaxDepth**: The maximum depth to which objects are traversed when stringified for error messages. - * - * Omitted or undefined options will leave the corresponding configuration values unchanged. - * - * @param {Object=} config - The configuration object. May only contain the options that need to be - * updated. Supported keys: - * - * * `objectMaxDepth` **{Number}** - The max depth for stringifying objects. Setting to a - * non-positive or non-numeric value, removes the max depth limit. - * Default: 5 - * - * * `urlErrorParamsEnabled` **{Boolean}** - Specifies whether the generated error url will - * contain the parameters of the thrown error. Disabling the parameters can be useful if the - * generated error url is very long. - * - * Default: true. When used without argument, it returns the current value. - */ -function errorHandlingConfig(config) { - if (isObject(config)) { - if (isDefined(config.objectMaxDepth)) { - minErrConfig.objectMaxDepth = isValidObjectMaxDepth(config.objectMaxDepth) ? config.objectMaxDepth : NaN; - } - if (isDefined(config.urlErrorParamsEnabled) && isBoolean(config.urlErrorParamsEnabled)) { - minErrConfig.urlErrorParamsEnabled = config.urlErrorParamsEnabled; - } - } else { - return minErrConfig; - } -} - -/** - * @private - * @param {Number} maxDepth - * @return {boolean} - */ -function isValidObjectMaxDepth(maxDepth) { - return isNumber(maxDepth) && maxDepth > 0; -} - - -/** - * @description - * - * This object provides a utility for producing rich Error messages within - * AngularJS. It can be called as follows: - * - * var exampleMinErr = minErr('example'); - * throw exampleMinErr('one', 'This {0} is {1}', foo, bar); - * - * The above creates an instance of minErr in the example namespace. The - * resulting error will have a namespaced error code of example.one. The - * resulting error will replace {0} with the value of foo, and {1} with the - * value of bar. The object is not restricted in the number of arguments it can - * take. - * - * If fewer arguments are specified than necessary for interpolation, the extra - * interpolation markers will be preserved in the final string. - * - * Since data will be parsed statically during a build step, some restrictions - * are applied with respect to how minErr instances are created and called. - * Instances should have names of the form namespaceMinErr for a minErr created - * using minErr('namespace'). Error codes, namespaces and template strings - * should all be static strings, not variables or general expressions. - * - * @param {string} module The namespace to use for the new minErr instance. - * @param {function} ErrorConstructor Custom error constructor to be instantiated when returning - * error from returned function, for cases when a particular type of error is useful. - * @returns {function(code:string, template:string, ...templateArgs): Error} minErr instance - */ - -function minErr(module, ErrorConstructor) { - ErrorConstructor = ErrorConstructor || Error; - - var url = 'https://errors.angularjs.org/1.8.0/'; - var regex = url.replace('.', '\\.') + '[\\s\\S]*'; - var errRegExp = new RegExp(regex, 'g'); - - return function() { - var code = arguments[0], - template = arguments[1], - message = '[' + (module ? module + ':' : '') + code + '] ', - templateArgs = sliceArgs(arguments, 2).map(function(arg) { - return toDebugString(arg, minErrConfig.objectMaxDepth); - }), - paramPrefix, i; - - // A minErr message has two parts: the message itself and the url that contains the - // encoded message. - // The message's parameters can contain other error messages which also include error urls. - // To prevent the messages from getting too long, we strip the error urls from the parameters. - - message += template.replace(/\{\d+\}/g, function(match) { - var index = +match.slice(1, -1); - - if (index < templateArgs.length) { - return templateArgs[index].replace(errRegExp, ''); - } - - return match; - }); - - message += '\n' + url + (module ? module + '/' : '') + code; - - if (minErrConfig.urlErrorParamsEnabled) { - for (i = 0, paramPrefix = '?'; i < templateArgs.length; i++, paramPrefix = '&') { - message += paramPrefix + 'p' + i + '=' + encodeURIComponent(templateArgs[i]); - } - } - - return new ErrorConstructor(message); - }; -} - -/* We need to tell ESLint what variables are being exported */ -/* exported - angular, - msie, - jqLite, - jQuery, - slice, - splice, - push, - toString, - minErrConfig, - errorHandlingConfig, - isValidObjectMaxDepth, - ngMinErr, - angularModule, - uid, - REGEX_STRING_REGEXP, - VALIDITY_STATE_PROPERTY, - - lowercase, - uppercase, - nodeName_, - isArrayLike, - forEach, - forEachSorted, - reverseParams, - nextUid, - setHashKey, - extend, - toInt, - inherit, - merge, - noop, - identity, - valueFn, - isUndefined, - isDefined, - isObject, - isBlankObject, - isString, - isNumber, - isNumberNaN, - isDate, - isError, - isArray, - isFunction, - isRegExp, - isWindow, - isScope, - isFile, - isFormData, - isBlob, - isBoolean, - isPromiseLike, - trim, - escapeForRegexp, - isElement, - makeMap, - includes, - arrayRemove, - copy, - simpleCompare, - equals, - csp, - jq, - concat, - sliceArgs, - bind, - toJsonReplacer, - toJson, - fromJson, - convertTimezoneToLocal, - timezoneToOffset, - addDateMinutes, - startingTag, - tryDecodeURIComponent, - parseKeyValue, - toKeyValue, - encodeUriSegment, - encodeUriQuery, - angularInit, - bootstrap, - getTestability, - snake_case, - bindJQuery, - assertArg, - assertArgFn, - assertNotHasOwnProperty, - getter, - getBlockNodes, - hasOwnProperty, - createMap, - stringify, - UNSAFE_restoreLegacyJqLiteXHTMLReplacement, - - NODE_TYPE_ELEMENT, - NODE_TYPE_ATTRIBUTE, - NODE_TYPE_TEXT, - NODE_TYPE_COMMENT, - NODE_TYPE_DOCUMENT, - NODE_TYPE_DOCUMENT_FRAGMENT -*/ - -//////////////////////////////////// - -/** - * @ngdoc module - * @name ng - * @module ng - * @installation - * @description - * - * The ng module is loaded by default when an AngularJS application is started. The module itself - * contains the essential components for an AngularJS application to function. The table below - * lists a high level breakdown of each of the services/factories, filters, directives and testing - * components available within this core module. - * - */ - -var REGEX_STRING_REGEXP = /^\/(.+)\/([a-z]*)$/; - -// The name of a form control's ValidityState property. -// This is used so that it's possible for internal tests to create mock ValidityStates. -var VALIDITY_STATE_PROPERTY = 'validity'; - - -var hasOwnProperty = Object.prototype.hasOwnProperty; - -/** - * @private - * - * @description Converts the specified string to lowercase. - * @param {string} string String to be converted to lowercase. - * @returns {string} Lowercased string. - */ -var lowercase = function(string) {return isString(string) ? string.toLowerCase() : string;}; - -/** - * @private - * - * @description Converts the specified string to uppercase. - * @param {string} string String to be converted to uppercase. - * @returns {string} Uppercased string. - */ -var uppercase = function(string) {return isString(string) ? string.toUpperCase() : string;}; - - -var - msie, // holds major version number for IE, or NaN if UA is not IE. - jqLite, // delay binding since jQuery could be loaded after us. - jQuery, // delay binding - slice = [].slice, - splice = [].splice, - push = [].push, - toString = Object.prototype.toString, - getPrototypeOf = Object.getPrototypeOf, - ngMinErr = minErr('ng'), - - /** @name angular */ - angular = window.angular || (window.angular = {}), - angularModule, - uid = 0; - -// Support: IE 9-11 only -/** - * documentMode is an IE-only property - * http://msdn.microsoft.com/en-us/library/ie/cc196988(v=vs.85).aspx - */ -msie = window.document.documentMode; - - -/** - * @private - * @param {*} obj - * @return {boolean} Returns true if `obj` is an array or array-like object (NodeList, Arguments, - * String ...) - */ -function isArrayLike(obj) { - - // `null`, `undefined` and `window` are not array-like - if (obj == null || isWindow(obj)) return false; - - // arrays, strings and jQuery/jqLite objects are array like - // * jqLite is either the jQuery or jqLite constructor function - // * we have to check the existence of jqLite first as this method is called - // via the forEach method when constructing the jqLite object in the first place - if (isArray(obj) || isString(obj) || (jqLite && obj instanceof jqLite)) return true; - - // Support: iOS 8.2 (not reproducible in simulator) - // "length" in obj used to prevent JIT error (gh-11508) - var length = 'length' in Object(obj) && obj.length; - - // NodeList objects (with `item` method) and - // other objects with suitable length characteristics are array-like - return isNumber(length) && (length >= 0 && (length - 1) in obj || typeof obj.item === 'function'); - -} - -/** - * @ngdoc function - * @name angular.forEach - * @module ng - * @kind function - * - * @description - * Invokes the `iterator` function once for each item in `obj` collection, which can be either an - * object or an array. The `iterator` function is invoked with `iterator(value, key, obj)`, where `value` - * is the value of an object property or an array element, `key` is the object property key or - * array element index and obj is the `obj` itself. Specifying a `context` for the function is optional. - * - * It is worth noting that `.forEach` does not iterate over inherited properties because it filters - * using the `hasOwnProperty` method. - * - * Unlike ES262's - * [Array.prototype.forEach](http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.18), - * providing 'undefined' or 'null' values for `obj` will not throw a TypeError, but rather just - * return the value provided. - * - ```js - var values = {name: 'misko', gender: 'male'}; - var log = []; - angular.forEach(values, function(value, key) { - this.push(key + ': ' + value); - }, log); - expect(log).toEqual(['name: misko', 'gender: male']); - ``` - * - * @param {Object|Array} obj Object to iterate over. - * @param {Function} iterator Iterator function. - * @param {Object=} context Object to become context (`this`) for the iterator function. - * @returns {Object|Array} Reference to `obj`. - */ - -function forEach(obj, iterator, context) { - var key, length; - if (obj) { - if (isFunction(obj)) { - for (key in obj) { - if (key !== 'prototype' && key !== 'length' && key !== 'name' && obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (isArray(obj) || isArrayLike(obj)) { - var isPrimitive = typeof obj !== 'object'; - for (key = 0, length = obj.length; key < length; key++) { - if (isPrimitive || key in obj) { - iterator.call(context, obj[key], key, obj); - } - } - } else if (obj.forEach && obj.forEach !== forEach) { - obj.forEach(iterator, context, obj); - } else if (isBlankObject(obj)) { - // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty - for (key in obj) { - iterator.call(context, obj[key], key, obj); - } - } else if (typeof obj.hasOwnProperty === 'function') { - // Slow path for objects inheriting Object.prototype, hasOwnProperty check needed - for (key in obj) { - if (obj.hasOwnProperty(key)) { - iterator.call(context, obj[key], key, obj); - } - } - } else { - // Slow path for objects which do not have a method `hasOwnProperty` - for (key in obj) { - if (hasOwnProperty.call(obj, key)) { - iterator.call(context, obj[key], key, obj); - } - } - } - } - return obj; -} - -function forEachSorted(obj, iterator, context) { - var keys = Object.keys(obj).sort(); - for (var i = 0; i < keys.length; i++) { - iterator.call(context, obj[keys[i]], keys[i]); - } - return keys; -} - - -/** - * when using forEach the params are value, key, but it is often useful to have key, value. - * @param {function(string, *)} iteratorFn - * @returns {function(*, string)} - */ -function reverseParams(iteratorFn) { - return function(value, key) {iteratorFn(key, value);}; -} - -/** - * A consistent way of creating unique IDs in angular. - * - * Using simple numbers allows us to generate 28.6 million unique ids per second for 10 years before - * we hit number precision issues in JavaScript. - * - * Math.pow(2,53) / 60 / 60 / 24 / 365 / 10 = 28.6M - * - * @returns {number} an unique alpha-numeric string - */ -function nextUid() { - return ++uid; -} - - -/** - * Set or clear the hashkey for an object. - * @param obj object - * @param h the hashkey (!truthy to delete the hashkey) - */ -function setHashKey(obj, h) { - if (h) { - obj.$$hashKey = h; - } else { - delete obj.$$hashKey; - } -} - - -function baseExtend(dst, objs, deep) { - var h = dst.$$hashKey; - - for (var i = 0, ii = objs.length; i < ii; ++i) { - var obj = objs[i]; - if (!isObject(obj) && !isFunction(obj)) continue; - var keys = Object.keys(obj); - for (var j = 0, jj = keys.length; j < jj; j++) { - var key = keys[j]; - var src = obj[key]; - - if (deep && isObject(src)) { - if (isDate(src)) { - dst[key] = new Date(src.valueOf()); - } else if (isRegExp(src)) { - dst[key] = new RegExp(src); - } else if (src.nodeName) { - dst[key] = src.cloneNode(true); - } else if (isElement(src)) { - dst[key] = src.clone(); - } else { - if (key !== '__proto__') { - if (!isObject(dst[key])) dst[key] = isArray(src) ? [] : {}; - baseExtend(dst[key], [src], true); - } - } - } else { - dst[key] = src; - } - } - } - - setHashKey(dst, h); - return dst; -} - -/** - * @ngdoc function - * @name angular.extend - * @module ng - * @kind function - * - * @description - * Extends the destination object `dst` by copying own enumerable properties from the `src` object(s) - * to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so - * by passing an empty object as the target: `var object = angular.extend({}, object1, object2)`. - * - * **Note:** Keep in mind that `angular.extend` does not support recursive merge (deep copy). Use - * {@link angular.merge} for this. - * - * @param {Object} dst Destination object. - * @param {...Object} src Source object(s). - * @returns {Object} Reference to `dst`. - */ -function extend(dst) { - return baseExtend(dst, slice.call(arguments, 1), false); -} - - -/** -* @ngdoc function -* @name angular.merge -* @module ng -* @kind function -* -* @description -* Deeply extends the destination object `dst` by copying own enumerable properties from the `src` object(s) -* to `dst`. You can specify multiple `src` objects. If you want to preserve original objects, you can do so -* by passing an empty object as the target: `var object = angular.merge({}, object1, object2)`. -* -* Unlike {@link angular.extend extend()}, `merge()` recursively descends into object properties of source -* objects, performing a deep copy. -* -* @deprecated -* sinceVersion="1.6.5" -* This function is deprecated, but will not be removed in the 1.x lifecycle. -* There are edge cases (see {@link angular.merge#known-issues known issues}) that are not -* supported by this function. We suggest using another, similar library for all-purpose merging, -* such as [lodash's merge()](https://lodash.com/docs/4.17.4#merge). -* -* @knownIssue -* This is a list of (known) object types that are not handled correctly by this function: -* - [`Blob`](https://developer.mozilla.org/docs/Web/API/Blob) -* - [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream) -* - [`CanvasGradient`](https://developer.mozilla.org/docs/Web/API/CanvasGradient) -* - AngularJS {@link $rootScope.Scope scopes}; -* -* `angular.merge` also does not support merging objects with circular references. -* -* @param {Object} dst Destination object. -* @param {...Object} src Source object(s). -* @returns {Object} Reference to `dst`. -*/ -function merge(dst) { - return baseExtend(dst, slice.call(arguments, 1), true); -} - - - -function toInt(str) { - return parseInt(str, 10); -} - -var isNumberNaN = Number.isNaN || function isNumberNaN(num) { - // eslint-disable-next-line no-self-compare - return num !== num; -}; - - -function inherit(parent, extra) { - return extend(Object.create(parent), extra); -} - -/** - * @ngdoc function - * @name angular.noop - * @module ng - * @kind function - * - * @description - * A function that performs no operations. This function can be useful when writing code in the - * functional style. - ```js - function foo(callback) { - var result = calculateResult(); - (callback || angular.noop)(result); - } - ``` - */ -function noop() {} -noop.$inject = []; - - -/** - * @ngdoc function - * @name angular.identity - * @module ng - * @kind function - * - * @description - * A function that returns its first argument. This function is useful when writing code in the - * functional style. - * - ```js - function transformer(transformationFn, value) { - return (transformationFn || angular.identity)(value); - }; - - // E.g. - function getResult(fn, input) { - return (fn || angular.identity)(input); - }; - - getResult(function(n) { return n * 2; }, 21); // returns 42 - getResult(null, 21); // returns 21 - getResult(undefined, 21); // returns 21 - ``` - * - * @param {*} value to be returned. - * @returns {*} the value passed in. - */ -function identity($) {return $;} -identity.$inject = []; - - -function valueFn(value) {return function valueRef() {return value;};} - -function hasCustomToString(obj) { - return isFunction(obj.toString) && obj.toString !== toString; -} - - -/** - * @ngdoc function - * @name angular.isUndefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is undefined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is undefined. - */ -function isUndefined(value) {return typeof value === 'undefined';} - - -/** - * @ngdoc function - * @name angular.isDefined - * @module ng - * @kind function - * - * @description - * Determines if a reference is defined. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is defined. - */ -function isDefined(value) {return typeof value !== 'undefined';} - - -/** - * @ngdoc function - * @name angular.isObject - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Object`. Unlike `typeof` in JavaScript, `null`s are not - * considered to be objects. Note that JavaScript arrays are objects. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Object` but not `null`. - */ -function isObject(value) { - // http://jsperf.com/isobject4 - return value !== null && typeof value === 'object'; -} - - -/** - * Determine if a value is an object with a null prototype - * - * @returns {boolean} True if `value` is an `Object` with a null prototype - */ -function isBlankObject(value) { - return value !== null && typeof value === 'object' && !getPrototypeOf(value); -} - - -/** - * @ngdoc function - * @name angular.isString - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `String`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `String`. - */ -function isString(value) {return typeof value === 'string';} - - -/** - * @ngdoc function - * @name angular.isNumber - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Number`. - * - * This includes the "special" numbers `NaN`, `+Infinity` and `-Infinity`. - * - * If you wish to exclude these then you can use the native - * [`isFinite'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/isFinite) - * method. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Number`. - */ -function isNumber(value) {return typeof value === 'number';} - - -/** - * @ngdoc function - * @name angular.isDate - * @module ng - * @kind function - * - * @description - * Determines if a value is a date. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Date`. - */ -function isDate(value) { - return toString.call(value) === '[object Date]'; -} - - -/** - * @ngdoc function - * @name angular.isArray - * @module ng - * @kind function - * - * @description - * Determines if a reference is an `Array`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Array`. - */ -function isArray(arr) { - return Array.isArray(arr) || arr instanceof Array; -} - -/** - * @description - * Determines if a reference is an `Error`. - * Loosely based on https://www.npmjs.com/package/iserror - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is an `Error`. - */ -function isError(value) { - var tag = toString.call(value); - switch (tag) { - case '[object Error]': return true; - case '[object Exception]': return true; - case '[object DOMException]': return true; - default: return value instanceof Error; - } -} - -/** - * @ngdoc function - * @name angular.isFunction - * @module ng - * @kind function - * - * @description - * Determines if a reference is a `Function`. - * - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `Function`. - */ -function isFunction(value) {return typeof value === 'function';} - - -/** - * Determines if a value is a regular expression object. - * - * @private - * @param {*} value Reference to check. - * @returns {boolean} True if `value` is a `RegExp`. - */ -function isRegExp(value) { - return toString.call(value) === '[object RegExp]'; -} - - -/** - * Checks if `obj` is a window object. - * - * @private - * @param {*} obj Object to check - * @returns {boolean} True if `obj` is a window obj. - */ -function isWindow(obj) { - return obj && obj.window === obj; -} - - -function isScope(obj) { - return obj && obj.$evalAsync && obj.$watch; -} - - -function isFile(obj) { - return toString.call(obj) === '[object File]'; -} - - -function isFormData(obj) { - return toString.call(obj) === '[object FormData]'; -} - - -function isBlob(obj) { - return toString.call(obj) === '[object Blob]'; -} - - -function isBoolean(value) { - return typeof value === 'boolean'; -} - - -function isPromiseLike(obj) { - return obj && isFunction(obj.then); -} - - -var TYPED_ARRAY_REGEXP = /^\[object (?:Uint8|Uint8Clamped|Uint16|Uint32|Int8|Int16|Int32|Float32|Float64)Array]$/; -function isTypedArray(value) { - return value && isNumber(value.length) && TYPED_ARRAY_REGEXP.test(toString.call(value)); -} - -function isArrayBuffer(obj) { - return toString.call(obj) === '[object ArrayBuffer]'; -} - - -var trim = function(value) { - return isString(value) ? value.trim() : value; -}; - -// Copied from: -// http://docs.closure-library.googlecode.com/git/local_closure_goog_string_string.js.source.html#line1021 -// Prereq: s is a string. -var escapeForRegexp = function(s) { - return s - .replace(/([-()[\]{}+?*.$^|,:#= 0) { - array.splice(index, 1); - } - return index; -} - -/** - * @ngdoc function - * @name angular.copy - * @module ng - * @kind function - * - * @description - * Creates a deep copy of `source`, which should be an object or an array. This functions is used - * internally, mostly in the change-detection code. It is not intended as an all-purpose copy - * function, and has several limitations (see below). - * - * * If no destination is supplied, a copy of the object or array is created. - * * If a destination is provided, all of its elements (for arrays) or properties (for objects) - * are deleted and then all elements/properties from the source are copied to it. - * * If `source` is not an object or array (inc. `null` and `undefined`), `source` is returned. - * * If `source` is identical to `destination` an exception will be thrown. - * - *
      - * - *
      - * Only enumerable properties are taken into account. Non-enumerable properties (both on `source` - * and on `destination`) will be ignored. - *
      - * - *
      - * `angular.copy` does not check if destination and source are of the same type. It's the - * developer's responsibility to make sure they are compatible. - *
      - * - * @knownIssue - * This is a non-exhaustive list of object types / features that are not handled correctly by - * `angular.copy`. Note that since this functions is used by the change detection code, this - * means binding or watching objects of these types (or that include these types) might not work - * correctly. - * - [`File`](https://developer.mozilla.org/docs/Web/API/File) - * - [`Map`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Map) - * - [`ImageData`](https://developer.mozilla.org/docs/Web/API/ImageData) - * - [`MediaStream`](https://developer.mozilla.org/docs/Web/API/MediaStream) - * - [`Set`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Set) - * - [`WeakMap`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/WeakMap) - * - [`getter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/get)/ - * [`setter`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set) - * - * @param {*} source The source that will be used to make a copy. Can be any type, including - * primitives, `null`, and `undefined`. - * @param {(Object|Array)=} destination Destination into which the source is copied. If provided, - * must be of the same type as `source`. - * @returns {*} The copy or updated `destination`, if `destination` was specified. - * - * @example - - -
      -
      -
      -
      - Gender: -
      - - -
      -
      form = {{user | json}}
      -
      leader = {{leader | json}}
      -
      -
      - - // Module: copyExample - angular. - module('copyExample', []). - controller('ExampleController', ['$scope', function($scope) { - $scope.leader = {}; - - $scope.reset = function() { - // Example with 1 argument - $scope.user = angular.copy($scope.leader); - }; - - $scope.update = function(user) { - // Example with 2 arguments - angular.copy(user, $scope.leader); - }; - - $scope.reset(); - }]); - -
      - */ -function copy(source, destination, maxDepth) { - var stackSource = []; - var stackDest = []; - maxDepth = isValidObjectMaxDepth(maxDepth) ? maxDepth : NaN; - - if (destination) { - if (isTypedArray(destination) || isArrayBuffer(destination)) { - throw ngMinErr('cpta', 'Can\'t copy! TypedArray destination cannot be mutated.'); - } - if (source === destination) { - throw ngMinErr('cpi', 'Can\'t copy! Source and destination are identical.'); - } - - // Empty the destination object - if (isArray(destination)) { - destination.length = 0; - } else { - forEach(destination, function(value, key) { - if (key !== '$$hashKey') { - delete destination[key]; - } - }); - } - - stackSource.push(source); - stackDest.push(destination); - return copyRecurse(source, destination, maxDepth); - } - - return copyElement(source, maxDepth); - - function copyRecurse(source, destination, maxDepth) { - maxDepth--; - if (maxDepth < 0) { - return '...'; - } - var h = destination.$$hashKey; - var key; - if (isArray(source)) { - for (var i = 0, ii = source.length; i < ii; i++) { - destination.push(copyElement(source[i], maxDepth)); - } - } else if (isBlankObject(source)) { - // createMap() fast path --- Safe to avoid hasOwnProperty check because prototype chain is empty - for (key in source) { - destination[key] = copyElement(source[key], maxDepth); - } - } else if (source && typeof source.hasOwnProperty === 'function') { - // Slow path, which must rely on hasOwnProperty - for (key in source) { - if (source.hasOwnProperty(key)) { - destination[key] = copyElement(source[key], maxDepth); - } - } - } else { - // Slowest path --- hasOwnProperty can't be called as a method - for (key in source) { - if (hasOwnProperty.call(source, key)) { - destination[key] = copyElement(source[key], maxDepth); - } - } - } - setHashKey(destination, h); - return destination; - } - - function copyElement(source, maxDepth) { - // Simple values - if (!isObject(source)) { - return source; - } - - // Already copied values - var index = stackSource.indexOf(source); - if (index !== -1) { - return stackDest[index]; - } - - if (isWindow(source) || isScope(source)) { - throw ngMinErr('cpws', - 'Can\'t copy! Making copies of Window or Scope instances is not supported.'); - } - - var needsRecurse = false; - var destination = copyType(source); - - if (destination === undefined) { - destination = isArray(source) ? [] : Object.create(getPrototypeOf(source)); - needsRecurse = true; - } - - stackSource.push(source); - stackDest.push(destination); - - return needsRecurse - ? copyRecurse(source, destination, maxDepth) - : destination; - } - - function copyType(source) { - switch (toString.call(source)) { - case '[object Int8Array]': - case '[object Int16Array]': - case '[object Int32Array]': - case '[object Float32Array]': - case '[object Float64Array]': - case '[object Uint8Array]': - case '[object Uint8ClampedArray]': - case '[object Uint16Array]': - case '[object Uint32Array]': - return new source.constructor(copyElement(source.buffer), source.byteOffset, source.length); - - case '[object ArrayBuffer]': - // Support: IE10 - if (!source.slice) { - // If we're in this case we know the environment supports ArrayBuffer - /* eslint-disable no-undef */ - var copied = new ArrayBuffer(source.byteLength); - new Uint8Array(copied).set(new Uint8Array(source)); - /* eslint-enable */ - return copied; - } - return source.slice(0); - - case '[object Boolean]': - case '[object Number]': - case '[object String]': - case '[object Date]': - return new source.constructor(source.valueOf()); - - case '[object RegExp]': - var re = new RegExp(source.source, source.toString().match(/[^/]*$/)[0]); - re.lastIndex = source.lastIndex; - return re; - - case '[object Blob]': - return new source.constructor([source], {type: source.type}); - } - - if (isFunction(source.cloneNode)) { - return source.cloneNode(true); - } - } -} - - -// eslint-disable-next-line no-self-compare -function simpleCompare(a, b) { return a === b || (a !== a && b !== b); } - - -/** - * @ngdoc function - * @name angular.equals - * @module ng - * @kind function - * - * @description - * Determines if two objects or two values are equivalent. Supports value types, regular - * expressions, arrays and objects. - * - * Two objects or values are considered equivalent if at least one of the following is true: - * - * * Both objects or values pass `===` comparison. - * * Both objects or values are of the same type and all of their properties are equal by - * comparing them with `angular.equals`. - * * Both values are NaN. (In JavaScript, NaN == NaN => false. But we consider two NaN as equal) - * * Both values represent the same regular expression (In JavaScript, - * /abc/ == /abc/ => false. But we consider two regular expressions as equal when their textual - * representation matches). - * - * During a property comparison, properties of `function` type and properties with names - * that begin with `$` are ignored. - * - * Scope and DOMWindow objects are being compared only by identify (`===`). - * - * @param {*} o1 Object or value to compare. - * @param {*} o2 Object or value to compare. - * @returns {boolean} True if arguments are equal. - * - * @example - - -
      -
      -

      User 1

      - Name: - Age: - -

      User 2

      - Name: - Age: - -
      -
      - -
      - User 1:
      {{user1 | json}}
      - User 2:
      {{user2 | json}}
      - Equal:
      {{result}}
      -
      -
      -
      - - angular.module('equalsExample', []).controller('ExampleController', ['$scope', function($scope) { - $scope.user1 = {}; - $scope.user2 = {}; - $scope.compare = function() { - $scope.result = angular.equals($scope.user1, $scope.user2); - }; - }]); - -
      - */ -function equals(o1, o2) { - if (o1 === o2) return true; - if (o1 === null || o2 === null) return false; - // eslint-disable-next-line no-self-compare - if (o1 !== o1 && o2 !== o2) return true; // NaN === NaN - var t1 = typeof o1, t2 = typeof o2, length, key, keySet; - if (t1 === t2 && t1 === 'object') { - if (isArray(o1)) { - if (!isArray(o2)) return false; - if ((length = o1.length) === o2.length) { - for (key = 0; key < length; key++) { - if (!equals(o1[key], o2[key])) return false; - } - return true; - } - } else if (isDate(o1)) { - if (!isDate(o2)) return false; - return simpleCompare(o1.getTime(), o2.getTime()); - } else if (isRegExp(o1)) { - if (!isRegExp(o2)) return false; - return o1.toString() === o2.toString(); - } else { - if (isScope(o1) || isScope(o2) || isWindow(o1) || isWindow(o2) || - isArray(o2) || isDate(o2) || isRegExp(o2)) return false; - keySet = createMap(); - for (key in o1) { - if (key.charAt(0) === '$' || isFunction(o1[key])) continue; - if (!equals(o1[key], o2[key])) return false; - keySet[key] = true; - } - for (key in o2) { - if (!(key in keySet) && - key.charAt(0) !== '$' && - isDefined(o2[key]) && - !isFunction(o2[key])) return false; - } - return true; - } - } - return false; -} - -var csp = function() { - if (!isDefined(csp.rules)) { - - - var ngCspElement = (window.document.querySelector('[ng-csp]') || - window.document.querySelector('[data-ng-csp]')); - - if (ngCspElement) { - var ngCspAttribute = ngCspElement.getAttribute('ng-csp') || - ngCspElement.getAttribute('data-ng-csp'); - csp.rules = { - noUnsafeEval: !ngCspAttribute || (ngCspAttribute.indexOf('no-unsafe-eval') !== -1), - noInlineStyle: !ngCspAttribute || (ngCspAttribute.indexOf('no-inline-style') !== -1) - }; - } else { - csp.rules = { - noUnsafeEval: noUnsafeEval(), - noInlineStyle: false - }; - } - } - - return csp.rules; - - function noUnsafeEval() { - try { - // eslint-disable-next-line no-new, no-new-func - new Function(''); - return false; - } catch (e) { - return true; - } - } -}; - -/** - * @ngdoc directive - * @module ng - * @name ngJq - * - * @element ANY - * @param {string=} ngJq the name of the library available under `window` - * to be used for angular.element - * @description - * Use this directive to force the angular.element library. This should be - * used to force either jqLite by leaving ng-jq blank or setting the name of - * the jquery variable under window (eg. jQuery). - * - * Since AngularJS looks for this directive when it is loaded (doesn't wait for the - * DOMContentLoaded event), it must be placed on an element that comes before the script - * which loads angular. Also, only the first instance of `ng-jq` will be used and all - * others ignored. - * - * @example - * This example shows how to force jqLite using the `ngJq` directive to the `html` tag. - ```html - - - ... - ... - - ``` - * @example - * This example shows how to use a jQuery based library of a different name. - * The library name must be available at the top most 'window'. - ```html - - - ... - ... - - ``` - */ -var jq = function() { - if (isDefined(jq.name_)) return jq.name_; - var el; - var i, ii = ngAttrPrefixes.length, prefix, name; - for (i = 0; i < ii; ++i) { - prefix = ngAttrPrefixes[i]; - el = window.document.querySelector('[' + prefix.replace(':', '\\:') + 'jq]'); - if (el) { - name = el.getAttribute(prefix + 'jq'); - break; - } - } - - return (jq.name_ = name); -}; - -function concat(array1, array2, index) { - return array1.concat(slice.call(array2, index)); -} - -function sliceArgs(args, startIndex) { - return slice.call(args, startIndex || 0); -} - - -/** - * @ngdoc function - * @name angular.bind - * @module ng - * @kind function - * - * @description - * Returns a function which calls function `fn` bound to `self` (`self` becomes the `this` for - * `fn`). You can supply optional `args` that are prebound to the function. This feature is also - * known as [partial application](http://en.wikipedia.org/wiki/Partial_application), as - * distinguished from [function currying](http://en.wikipedia.org/wiki/Currying#Contrast_with_partial_function_application). - * - * @param {Object} self Context which `fn` should be evaluated in. - * @param {function()} fn Function to be bound. - * @param {...*} args Optional arguments to be prebound to the `fn` function call. - * @returns {function()} Function that wraps the `fn` with all the specified bindings. - */ -function bind(self, fn) { - var curryArgs = arguments.length > 2 ? sliceArgs(arguments, 2) : []; - if (isFunction(fn) && !(fn instanceof RegExp)) { - return curryArgs.length - ? function() { - return arguments.length - ? fn.apply(self, concat(curryArgs, arguments, 0)) - : fn.apply(self, curryArgs); - } - : function() { - return arguments.length - ? fn.apply(self, arguments) - : fn.call(self); - }; - } else { - // In IE, native methods are not functions so they cannot be bound (note: they don't need to be). - return fn; - } -} - - -function toJsonReplacer(key, value) { - var val = value; - - if (typeof key === 'string' && key.charAt(0) === '$' && key.charAt(1) === '$') { - val = undefined; - } else if (isWindow(value)) { - val = '$WINDOW'; - } else if (value && window.document === value) { - val = '$DOCUMENT'; - } else if (isScope(value)) { - val = '$SCOPE'; - } - - return val; -} - - -/** - * @ngdoc function - * @name angular.toJson - * @module ng - * @kind function - * - * @description - * Serializes input into a JSON-formatted string. Properties with leading $$ characters will be - * stripped since AngularJS uses this notation internally. - * - * @param {Object|Array|Date|string|number|boolean} obj Input to be serialized into JSON. - * @param {boolean|number} [pretty=2] If set to true, the JSON output will contain newlines and whitespace. - * If set to an integer, the JSON output will contain that many spaces per indentation. - * @returns {string|undefined} JSON-ified string representing `obj`. - * @knownIssue - * - * The Safari browser throws a `RangeError` instead of returning `null` when it tries to stringify a `Date` - * object with an invalid date value. The only reliable way to prevent this is to monkeypatch the - * `Date.prototype.toJSON` method as follows: - * - * ``` - * var _DatetoJSON = Date.prototype.toJSON; - * Date.prototype.toJSON = function() { - * try { - * return _DatetoJSON.call(this); - * } catch(e) { - * if (e instanceof RangeError) { - * return null; - * } - * throw e; - * } - * }; - * ``` - * - * See https://github.com/angular/angular.js/pull/14221 for more information. - */ -function toJson(obj, pretty) { - if (isUndefined(obj)) return undefined; - if (!isNumber(pretty)) { - pretty = pretty ? 2 : null; - } - return JSON.stringify(obj, toJsonReplacer, pretty); -} - - -/** - * @ngdoc function - * @name angular.fromJson - * @module ng - * @kind function - * - * @description - * Deserializes a JSON string. - * - * @param {string} json JSON string to deserialize. - * @returns {Object|Array|string|number} Deserialized JSON string. - */ -function fromJson(json) { - return isString(json) - ? JSON.parse(json) - : json; -} - - -var ALL_COLONS = /:/g; -function timezoneToOffset(timezone, fallback) { - // Support: IE 9-11 only, Edge 13-15+ - // IE/Edge do not "understand" colon (`:`) in timezone - timezone = timezone.replace(ALL_COLONS, ''); - var requestedTimezoneOffset = Date.parse('Jan 01, 1970 00:00:00 ' + timezone) / 60000; - return isNumberNaN(requestedTimezoneOffset) ? fallback : requestedTimezoneOffset; -} - - -function addDateMinutes(date, minutes) { - date = new Date(date.getTime()); - date.setMinutes(date.getMinutes() + minutes); - return date; -} - - -function convertTimezoneToLocal(date, timezone, reverse) { - reverse = reverse ? -1 : 1; - var dateTimezoneOffset = date.getTimezoneOffset(); - var timezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); - return addDateMinutes(date, reverse * (timezoneOffset - dateTimezoneOffset)); -} - - -/** - * @returns {string} Returns the string representation of the element. - */ -function startingTag(element) { - element = jqLite(element).clone().empty(); - var elemHtml = jqLite('
      ').append(element).html(); - try { - return element[0].nodeType === NODE_TYPE_TEXT ? lowercase(elemHtml) : - elemHtml. - match(/^(<[^>]+>)/)[1]. - replace(/^<([\w-]+)/, function(match, nodeName) {return '<' + lowercase(nodeName);}); - } catch (e) { - return lowercase(elemHtml); - } - -} - - -///////////////////////////////////////////////// - -/** - * Tries to decode the URI component without throwing an exception. - * - * @private - * @param str value potential URI component to check. - * @returns {boolean} True if `value` can be decoded - * with the decodeURIComponent function. - */ -function tryDecodeURIComponent(value) { - try { - return decodeURIComponent(value); - } catch (e) { - // Ignore any invalid uri component. - } -} - - -/** - * Parses an escaped url query string into key-value pairs. - * @returns {Object.} - */ -function parseKeyValue(/**string*/keyValue) { - var obj = {}; - forEach((keyValue || '').split('&'), function(keyValue) { - var splitPoint, key, val; - if (keyValue) { - key = keyValue = keyValue.replace(/\+/g,'%20'); - splitPoint = keyValue.indexOf('='); - if (splitPoint !== -1) { - key = keyValue.substring(0, splitPoint); - val = keyValue.substring(splitPoint + 1); - } - key = tryDecodeURIComponent(key); - if (isDefined(key)) { - val = isDefined(val) ? tryDecodeURIComponent(val) : true; - if (!hasOwnProperty.call(obj, key)) { - obj[key] = val; - } else if (isArray(obj[key])) { - obj[key].push(val); - } else { - obj[key] = [obj[key],val]; - } - } - } - }); - return obj; -} - -function toKeyValue(obj) { - var parts = []; - forEach(obj, function(value, key) { - if (isArray(value)) { - forEach(value, function(arrayValue) { - parts.push(encodeUriQuery(key, true) + - (arrayValue === true ? '' : '=' + encodeUriQuery(arrayValue, true))); - }); - } else { - parts.push(encodeUriQuery(key, true) + - (value === true ? '' : '=' + encodeUriQuery(value, true))); - } - }); - return parts.length ? parts.join('&') : ''; -} - - -/** - * We need our custom method because encodeURIComponent is too aggressive and doesn't follow - * http://www.ietf.org/rfc/rfc3986.txt with regards to the character set (pchar) allowed in path - * segments: - * segment = *pchar - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * pct-encoded = "%" HEXDIG HEXDIG - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriSegment(val) { - return encodeUriQuery(val, true). - replace(/%26/gi, '&'). - replace(/%3D/gi, '='). - replace(/%2B/gi, '+'); -} - - -/** - * This method is intended for encoding *key* or *value* parts of query component. We need a custom - * method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be - * encoded per http://tools.ietf.org/html/rfc3986: - * query = *( pchar / "/" / "?" ) - * pchar = unreserved / pct-encoded / sub-delims / ":" / "@" - * unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~" - * pct-encoded = "%" HEXDIG HEXDIG - * sub-delims = "!" / "$" / "&" / "'" / "(" / ")" - * / "*" / "+" / "," / ";" / "=" - */ -function encodeUriQuery(val, pctEncodeSpaces) { - return encodeURIComponent(val). - replace(/%40/gi, '@'). - replace(/%3A/gi, ':'). - replace(/%24/g, '$'). - replace(/%2C/gi, ','). - replace(/%3B/gi, ';'). - replace(/%20/g, (pctEncodeSpaces ? '%20' : '+')); -} - -var ngAttrPrefixes = ['ng-', 'data-ng-', 'ng:', 'x-ng-']; - -function getNgAttribute(element, ngAttr) { - var attr, i, ii = ngAttrPrefixes.length; - for (i = 0; i < ii; ++i) { - attr = ngAttrPrefixes[i] + ngAttr; - if (isString(attr = element.getAttribute(attr))) { - return attr; - } - } - return null; -} - -function allowAutoBootstrap(document) { - var script = document.currentScript; - - if (!script) { - // Support: IE 9-11 only - // IE does not have `document.currentScript` - return true; - } - - // If the `currentScript` property has been clobbered just return false, since this indicates a probable attack - if (!(script instanceof window.HTMLScriptElement || script instanceof window.SVGScriptElement)) { - return false; - } - - var attributes = script.attributes; - var srcs = [attributes.getNamedItem('src'), attributes.getNamedItem('href'), attributes.getNamedItem('xlink:href')]; - - return srcs.every(function(src) { - if (!src) { - return true; - } - if (!src.value) { - return false; - } - - var link = document.createElement('a'); - link.href = src.value; - - if (document.location.origin === link.origin) { - // Same-origin resources are always allowed, even for non-whitelisted schemes. - return true; - } - // Disabled bootstrapping unless angular.js was loaded from a known scheme used on the web. - // This is to prevent angular.js bundled with browser extensions from being used to bypass the - // content security policy in web pages and other browser extensions. - switch (link.protocol) { - case 'http:': - case 'https:': - case 'ftp:': - case 'blob:': - case 'file:': - case 'data:': - return true; - default: - return false; - } - }); -} - -// Cached as it has to run during loading so that document.currentScript is available. -var isAutoBootstrapAllowed = allowAutoBootstrap(window.document); - -/** - * @ngdoc directive - * @name ngApp - * @module ng - * - * @element ANY - * @param {angular.Module} ngApp an optional application - * {@link angular.module module} name to load. - * @param {boolean=} ngStrictDi if this attribute is present on the app element, the injector will be - * created in "strict-di" mode. This means that the application will fail to invoke functions which - * do not use explicit function annotation (and are thus unsuitable for minification), as described - * in {@link guide/di the Dependency Injection guide}, and useful debugging info will assist in - * tracking down the root of these bugs. - * - * @description - * - * Use this directive to **auto-bootstrap** an AngularJS application. The `ngApp` directive - * designates the **root element** of the application and is typically placed near the root element - * of the page - e.g. on the `` or `` tags. - * - * There are a few things to keep in mind when using `ngApp`: - * - only one AngularJS application can be auto-bootstrapped per HTML document. The first `ngApp` - * found in the document will be used to define the root element to auto-bootstrap as an - * application. To run multiple applications in an HTML document you must manually bootstrap them using - * {@link angular.bootstrap} instead. - * - AngularJS applications cannot be nested within each other. - * - Do not use a directive that uses {@link ng.$compile#transclusion transclusion} on the same element as `ngApp`. - * This includes directives such as {@link ng.ngIf `ngIf`}, {@link ng.ngInclude `ngInclude`} and - * {@link ngRoute.ngView `ngView`}. - * Doing this misplaces the app {@link ng.$rootElement `$rootElement`} and the app's {@link auto.$injector injector}, - * causing animations to stop working and making the injector inaccessible from outside the app. - * - * You can specify an **AngularJS module** to be used as the root module for the application. This - * module will be loaded into the {@link auto.$injector} when the application is bootstrapped. It - * should contain the application code needed or have dependencies on other modules that will - * contain the code. See {@link angular.module} for more information. - * - * In the example below if the `ngApp` directive were not placed on the `html` element then the - * document would not be compiled, the `AppController` would not be instantiated and the `{{ a+b }}` - * would not be resolved to `3`. - * - * @example - * - * ### Simple Usage - * - * `ngApp` is the easiest, and most common way to bootstrap an application. - * - - -
      - I can add: {{a}} + {{b}} = {{ a+b }} -
      -
      - - angular.module('ngAppDemo', []).controller('ngAppDemoController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }); - -
      - * - * @example - * - * ### With `ngStrictDi` - * - * Using `ngStrictDi`, you would see something like this: - * - - -
      -
      - I can add: {{a}} + {{b}} = {{ a+b }} - -

      This renders because the controller does not fail to - instantiate, by using explicit annotation style (see - script.js for details) -

      -
      - -
      - Name:
      - Hello, {{name}}! - -

      This renders because the controller does not fail to - instantiate, by using explicit annotation style - (see script.js for details) -

      -
      - -
      - I can add: {{a}} + {{b}} = {{ a+b }} - -

      The controller could not be instantiated, due to relying - on automatic function annotations (which are disabled in - strict mode). As such, the content of this section is not - interpolated, and there should be an error in your web console. -

      -
      -
      -
      - - angular.module('ngAppStrictDemo', []) - // BadController will fail to instantiate, due to relying on automatic function annotation, - // rather than an explicit annotation - .controller('BadController', function($scope) { - $scope.a = 1; - $scope.b = 2; - }) - // Unlike BadController, GoodController1 and GoodController2 will not fail to be instantiated, - // due to using explicit annotations using the array style and $inject property, respectively. - .controller('GoodController1', ['$scope', function($scope) { - $scope.a = 1; - $scope.b = 2; - }]) - .controller('GoodController2', GoodController2); - function GoodController2($scope) { - $scope.name = 'World'; - } - GoodController2.$inject = ['$scope']; - - - div[ng-controller] { - margin-bottom: 1em; - -webkit-border-radius: 4px; - border-radius: 4px; - border: 1px solid; - padding: .5em; - } - div[ng-controller^=Good] { - border-color: #d6e9c6; - background-color: #dff0d8; - color: #3c763d; - } - div[ng-controller^=Bad] { - border-color: #ebccd1; - background-color: #f2dede; - color: #a94442; - margin-bottom: 0; - } - -
      - */ -function angularInit(element, bootstrap) { - var appElement, - module, - config = {}; - - // The element `element` has priority over any other element. - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - - if (!appElement && element.hasAttribute && element.hasAttribute(name)) { - appElement = element; - module = element.getAttribute(name); - } - }); - forEach(ngAttrPrefixes, function(prefix) { - var name = prefix + 'app'; - var candidate; - - if (!appElement && (candidate = element.querySelector('[' + name.replace(':', '\\:') + ']'))) { - appElement = candidate; - module = candidate.getAttribute(name); - } - }); - if (appElement) { - if (!isAutoBootstrapAllowed) { - window.console.error('AngularJS: disabling automatic bootstrap. - * - * - * - * ``` - * - * @param {DOMElement} element DOM element which is the root of AngularJS application. - * @param {Array=} modules an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - * @param {Object=} config an object for defining configuration options for the application. The - * following keys are supported: - * - * * `strictDi` - disable automatic function annotation for the application. This is meant to - * assist in finding bugs which break minified code. Defaults to `false`. - * - * @returns {auto.$injector} Returns the newly created injector for this app. - */ -function bootstrap(element, modules, config) { - if (!isObject(config)) config = {}; - var defaultConfig = { - strictDi: false - }; - config = extend(defaultConfig, config); - var doBootstrap = function() { - element = jqLite(element); - - if (element.injector()) { - var tag = (element[0] === window.document) ? 'document' : startingTag(element); - // Encode angle brackets to prevent input from being sanitized to empty string #8683. - throw ngMinErr( - 'btstrpd', - 'App already bootstrapped with this element \'{0}\'', - tag.replace(//,'>')); - } - - modules = modules || []; - modules.unshift(['$provide', function($provide) { - $provide.value('$rootElement', element); - }]); - - if (config.debugInfoEnabled) { - // Pushing so that this overrides `debugInfoEnabled` setting defined in user's `modules`. - modules.push(['$compileProvider', function($compileProvider) { - $compileProvider.debugInfoEnabled(true); - }]); - } - - modules.unshift('ng'); - var injector = createInjector(modules, config.strictDi); - injector.invoke(['$rootScope', '$rootElement', '$compile', '$injector', - function bootstrapApply(scope, element, compile, injector) { - scope.$apply(function() { - element.data('$injector', injector); - compile(element)(scope); - }); - }] - ); - return injector; - }; - - var NG_ENABLE_DEBUG_INFO = /^NG_ENABLE_DEBUG_INFO!/; - var NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; - - if (window && NG_ENABLE_DEBUG_INFO.test(window.name)) { - config.debugInfoEnabled = true; - window.name = window.name.replace(NG_ENABLE_DEBUG_INFO, ''); - } - - if (window && !NG_DEFER_BOOTSTRAP.test(window.name)) { - return doBootstrap(); - } - - window.name = window.name.replace(NG_DEFER_BOOTSTRAP, ''); - angular.resumeBootstrap = function(extraModules) { - forEach(extraModules, function(module) { - modules.push(module); - }); - return doBootstrap(); - }; - - if (isFunction(angular.resumeDeferredBootstrap)) { - angular.resumeDeferredBootstrap(); - } -} - -/** - * @ngdoc function - * @name angular.reloadWithDebugInfo - * @module ng - * @description - * Use this function to reload the current application with debug information turned on. - * This takes precedence over a call to `$compileProvider.debugInfoEnabled(false)`. - * - * See {@link ng.$compileProvider#debugInfoEnabled} for more. - */ -function reloadWithDebugInfo() { - window.name = 'NG_ENABLE_DEBUG_INFO!' + window.name; - window.location.reload(); -} - -/** - * @name angular.getTestability - * @module ng - * @description - * Get the testability service for the instance of AngularJS on the given - * element. - * @param {DOMElement} element DOM element which is the root of AngularJS application. - */ -function getTestability(rootElement) { - var injector = angular.element(rootElement).injector(); - if (!injector) { - throw ngMinErr('test', - 'no injector found for element argument to getTestability'); - } - return injector.get('$$testability'); -} - -var SNAKE_CASE_REGEXP = /[A-Z]/g; -function snake_case(name, separator) { - separator = separator || '_'; - return name.replace(SNAKE_CASE_REGEXP, function(letter, pos) { - return (pos ? separator : '') + letter.toLowerCase(); - }); -} - -var bindJQueryFired = false; -function bindJQuery() { - var originalCleanData; - - if (bindJQueryFired) { - return; - } - - // bind to jQuery if present; - var jqName = jq(); - jQuery = isUndefined(jqName) ? window.jQuery : // use jQuery (if present) - !jqName ? undefined : // use jqLite - window[jqName]; // use jQuery specified by `ngJq` - - // Use jQuery if it exists with proper functionality, otherwise default to us. - // AngularJS 1.2+ requires jQuery 1.7+ for on()/off() support. - // AngularJS 1.3+ technically requires at least jQuery 2.1+ but it may work with older - // versions. It will not work for sure with jQuery <1.7, though. - if (jQuery && jQuery.fn.on) { - jqLite = jQuery; - extend(jQuery.fn, { - scope: JQLitePrototype.scope, - isolateScope: JQLitePrototype.isolateScope, - controller: /** @type {?} */ (JQLitePrototype).controller, - injector: JQLitePrototype.injector, - inheritedData: JQLitePrototype.inheritedData - }); - } else { - jqLite = JQLite; - } - - // All nodes removed from the DOM via various jqLite/jQuery APIs like .remove() - // are passed through jqLite/jQuery.cleanData. Monkey-patch this method to fire - // the $destroy event on all removed nodes. - originalCleanData = jqLite.cleanData; - jqLite.cleanData = function(elems) { - var events; - for (var i = 0, elem; (elem = elems[i]) != null; i++) { - events = (jqLite._data(elem) || {}).events; - if (events && events.$destroy) { - jqLite(elem).triggerHandler('$destroy'); - } - } - originalCleanData(elems); - }; - - angular.element = jqLite; - - // Prevent double-proxying. - bindJQueryFired = true; -} - -/** - * @ngdoc function - * @name angular.UNSAFE_restoreLegacyJqLiteXHTMLReplacement - * @module ng - * @kind function - * - * @description - * Restores the pre-1.8 behavior of jqLite that turns XHTML-like strings like - * `
      ` to `
      ` instead of `
      `. - * The new behavior is a security fix. Thus, if you need to call this function, please try to adjust - * your code for this change and remove your use of this function as soon as possible. - - * Note that this only patches jqLite. If you use jQuery 3.5.0 or newer, please read the - * [jQuery 3.5 upgrade guide](https://jquery.com/upgrade-guide/3.5/) for more details - * about the workarounds. - */ -function UNSAFE_restoreLegacyJqLiteXHTMLReplacement() { - JQLite.legacyXHTMLReplacement = true; -} - -/** - * throw error if the argument is falsy. - */ -function assertArg(arg, name, reason) { - if (!arg) { - throw ngMinErr('areq', 'Argument \'{0}\' is {1}', (name || '?'), (reason || 'required')); - } - return arg; -} - -function assertArgFn(arg, name, acceptArrayAnnotation) { - if (acceptArrayAnnotation && isArray(arg)) { - arg = arg[arg.length - 1]; - } - - assertArg(isFunction(arg), name, 'not a function, got ' + - (arg && typeof arg === 'object' ? arg.constructor.name || 'Object' : typeof arg)); - return arg; -} - -/** - * throw error if the name given is hasOwnProperty - * @param {String} name the name to test - * @param {String} context the context in which the name is used, such as module or directive - */ -function assertNotHasOwnProperty(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } -} - -/** - * Return the value accessible from the object by path. Any undefined traversals are ignored - * @param {Object} obj starting object - * @param {String} path path to traverse - * @param {boolean} [bindFnToScope=true] - * @returns {Object} value as accessible by path - */ -//TODO(misko): this function needs to be removed -function getter(obj, path, bindFnToScope) { - if (!path) return obj; - var keys = path.split('.'); - var key; - var lastInstance = obj; - var len = keys.length; - - for (var i = 0; i < len; i++) { - key = keys[i]; - if (obj) { - obj = (lastInstance = obj)[key]; - } - } - if (!bindFnToScope && isFunction(obj)) { - return bind(lastInstance, obj); - } - return obj; -} - -/** - * Return the DOM siblings between the first and last node in the given array. - * @param {Array} array like object - * @returns {Array} the inputted object or a jqLite collection containing the nodes - */ -function getBlockNodes(nodes) { - // TODO(perf): update `nodes` instead of creating a new object? - var node = nodes[0]; - var endNode = nodes[nodes.length - 1]; - var blockNodes; - - for (var i = 1; node !== endNode && (node = node.nextSibling); i++) { - if (blockNodes || nodes[i] !== node) { - if (!blockNodes) { - blockNodes = jqLite(slice.call(nodes, 0, i)); - } - blockNodes.push(node); - } - } - - return blockNodes || nodes; -} - - -/** - * Creates a new object without a prototype. This object is useful for lookup without having to - * guard against prototypically inherited properties via hasOwnProperty. - * - * Related micro-benchmarks: - * - http://jsperf.com/object-create2 - * - http://jsperf.com/proto-map-lookup/2 - * - http://jsperf.com/for-in-vs-object-keys2 - * - * @returns {Object} - */ -function createMap() { - return Object.create(null); -} - -function stringify(value) { - if (value == null) { // null || undefined - return ''; - } - switch (typeof value) { - case 'string': - break; - case 'number': - value = '' + value; - break; - default: - if (hasCustomToString(value) && !isArray(value) && !isDate(value)) { - value = value.toString(); - } else { - value = toJson(value); - } - } - - return value; -} - -var NODE_TYPE_ELEMENT = 1; -var NODE_TYPE_ATTRIBUTE = 2; -var NODE_TYPE_TEXT = 3; -var NODE_TYPE_COMMENT = 8; -var NODE_TYPE_DOCUMENT = 9; -var NODE_TYPE_DOCUMENT_FRAGMENT = 11; - -/** - * @ngdoc type - * @name angular.Module - * @module ng - * @description - * - * Interface for configuring AngularJS {@link angular.module modules}. - */ - -function setupModuleLoader(window) { - - var $injectorMinErr = minErr('$injector'); - var ngMinErr = minErr('ng'); - - function ensure(obj, name, factory) { - return obj[name] || (obj[name] = factory()); - } - - var angular = ensure(window, 'angular', Object); - - // We need to expose `angular.$$minErr` to modules such as `ngResource` that reference it during bootstrap - angular.$$minErr = angular.$$minErr || minErr; - - return ensure(angular, 'module', function() { - /** @type {Object.} */ - var modules = {}; - - /** - * @ngdoc function - * @name angular.module - * @module ng - * @description - * - * The `angular.module` is a global place for creating, registering and retrieving AngularJS - * modules. - * All modules (AngularJS core or 3rd party) that should be available to an application must be - * registered using this mechanism. - * - * Passing one argument retrieves an existing {@link angular.Module}, - * whereas passing more than one argument creates a new {@link angular.Module} - * - * - * # Module - * - * A module is a collection of services, directives, controllers, filters, and configuration information. - * `angular.module` is used to configure the {@link auto.$injector $injector}. - * - * ```js - * // Create a new module - * var myModule = angular.module('myModule', []); - * - * // register a new service - * myModule.value('appName', 'MyCoolApp'); - * - * // configure existing services inside initialization blocks. - * myModule.config(['$locationProvider', function($locationProvider) { - * // Configure existing providers - * $locationProvider.hashPrefix('!'); - * }]); - * ``` - * - * Then you can create an injector and load your modules like this: - * - * ```js - * var injector = angular.injector(['ng', 'myModule']) - * ``` - * - * However it's more likely that you'll just use - * {@link ng.directive:ngApp ngApp} or - * {@link angular.bootstrap} to simplify this process for you. - * - * @param {!string} name The name of the module to create or retrieve. - * @param {!Array.=} requires If specified then new module is being created. If - * unspecified then the module is being retrieved for further configuration. - * @param {Function=} configFn Optional configuration function for the module. Same as - * {@link angular.Module#config Module#config()}. - * @returns {angular.Module} new module with the {@link angular.Module} api. - */ - return function module(name, requires, configFn) { - - var info = {}; - - var assertNotHasOwnProperty = function(name, context) { - if (name === 'hasOwnProperty') { - throw ngMinErr('badname', 'hasOwnProperty is not a valid {0} name', context); - } - }; - - assertNotHasOwnProperty(name, 'module'); - if (requires && modules.hasOwnProperty(name)) { - modules[name] = null; - } - return ensure(modules, name, function() { - if (!requires) { - throw $injectorMinErr('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.', name); - } - - /** @type {!Array.>} */ - var invokeQueue = []; - - /** @type {!Array.} */ - var configBlocks = []; - - /** @type {!Array.} */ - var runBlocks = []; - - var config = invokeLater('$injector', 'invoke', 'push', configBlocks); - - /** @type {angular.Module} */ - var moduleInstance = { - // Private state - _invokeQueue: invokeQueue, - _configBlocks: configBlocks, - _runBlocks: runBlocks, - - /** - * @ngdoc method - * @name angular.Module#info - * @module ng - * - * @param {Object=} info Information about the module - * @returns {Object|Module} The current info object for this module if called as a getter, - * or `this` if called as a setter. - * - * @description - * Read and write custom information about this module. - * For example you could put the version of the module in here. - * - * ```js - * angular.module('myModule', []).info({ version: '1.0.0' }); - * ``` - * - * The version could then be read back out by accessing the module elsewhere: - * - * ``` - * var version = angular.module('myModule').info().version; - * ``` - * - * You can also retrieve this information during runtime via the - * {@link $injector#modules `$injector.modules`} property: - * - * ```js - * var version = $injector.modules['myModule'].info().version; - * ``` - */ - info: function(value) { - if (isDefined(value)) { - if (!isObject(value)) throw ngMinErr('aobj', 'Argument \'{0}\' must be an object', 'value'); - info = value; - return this; - } - return info; - }, - - /** - * @ngdoc property - * @name angular.Module#requires - * @module ng - * - * @description - * Holds the list of modules which the injector will load before the current module is - * loaded. - */ - requires: requires, - - /** - * @ngdoc property - * @name angular.Module#name - * @module ng - * - * @description - * Name of the module. - */ - name: name, - - - /** - * @ngdoc method - * @name angular.Module#provider - * @module ng - * @param {string} name service name - * @param {Function} providerType Construction function for creating new instance of the - * service. - * @description - * See {@link auto.$provide#provider $provide.provider()}. - */ - provider: invokeLaterAndSetModuleName('$provide', 'provider'), - - /** - * @ngdoc method - * @name angular.Module#factory - * @module ng - * @param {string} name service name - * @param {Function} providerFunction Function for creating new instance of the service. - * @description - * See {@link auto.$provide#factory $provide.factory()}. - */ - factory: invokeLaterAndSetModuleName('$provide', 'factory'), - - /** - * @ngdoc method - * @name angular.Module#service - * @module ng - * @param {string} name service name - * @param {Function} constructor A constructor function that will be instantiated. - * @description - * See {@link auto.$provide#service $provide.service()}. - */ - service: invokeLaterAndSetModuleName('$provide', 'service'), - - /** - * @ngdoc method - * @name angular.Module#value - * @module ng - * @param {string} name service name - * @param {*} object Service instance object. - * @description - * See {@link auto.$provide#value $provide.value()}. - */ - value: invokeLater('$provide', 'value'), - - /** - * @ngdoc method - * @name angular.Module#constant - * @module ng - * @param {string} name constant name - * @param {*} object Constant value. - * @description - * Because the constants are fixed, they get applied before other provide methods. - * See {@link auto.$provide#constant $provide.constant()}. - */ - constant: invokeLater('$provide', 'constant', 'unshift'), - - /** - * @ngdoc method - * @name angular.Module#decorator - * @module ng - * @param {string} name The name of the service to decorate. - * @param {Function} decorFn This function will be invoked when the service needs to be - * instantiated and should return the decorated service instance. - * @description - * See {@link auto.$provide#decorator $provide.decorator()}. - */ - decorator: invokeLaterAndSetModuleName('$provide', 'decorator', configBlocks), - - /** - * @ngdoc method - * @name angular.Module#animation - * @module ng - * @param {string} name animation name - * @param {Function} animationFactory Factory function for creating new instance of an - * animation. - * @description - * - * **NOTE**: animations take effect only if the **ngAnimate** module is loaded. - * - * - * Defines an animation hook that can be later used with - * {@link $animate $animate} service and directives that use this service. - * - * ```js - * module.animation('.animation-name', function($inject1, $inject2) { - * return { - * eventName : function(element, done) { - * //code to run the animation - * //once complete, then run done() - * return function cancellationFunction(element) { - * //code to cancel the animation - * } - * } - * } - * }) - * ``` - * - * See {@link ng.$animateProvider#register $animateProvider.register()} and - * {@link ngAnimate ngAnimate module} for more information. - */ - animation: invokeLaterAndSetModuleName('$animateProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#filter - * @module ng - * @param {string} name Filter name - this must be a valid AngularJS expression identifier - * @param {Function} filterFactory Factory function for creating new instance of filter. - * @description - * See {@link ng.$filterProvider#register $filterProvider.register()}. - * - *
      - * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
      - */ - filter: invokeLaterAndSetModuleName('$filterProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#controller - * @module ng - * @param {string|Object} name Controller name, or an object map of controllers where the - * keys are the names and the values are the constructors. - * @param {Function} constructor Controller constructor function. - * @description - * See {@link ng.$controllerProvider#register $controllerProvider.register()}. - */ - controller: invokeLaterAndSetModuleName('$controllerProvider', 'register'), - - /** - * @ngdoc method - * @name angular.Module#directive - * @module ng - * @param {string|Object} name Directive name, or an object map of directives where the - * keys are the names and the values are the factories. - * @param {Function} directiveFactory Factory function for creating new instance of - * directives. - * @description - * See {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - directive: invokeLaterAndSetModuleName('$compileProvider', 'directive'), - - /** - * @ngdoc method - * @name angular.Module#component - * @module ng - * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match ``), - * or an object map of components where the keys are the names and the values are the component definition objects. - * @param {Object} options Component definition object (a simplified - * {@link ng.$compile#directive-definition-object directive definition object}) - * - * @description - * See {@link ng.$compileProvider#component $compileProvider.component()}. - */ - component: invokeLaterAndSetModuleName('$compileProvider', 'component'), - - /** - * @ngdoc method - * @name angular.Module#config - * @module ng - * @param {Function} configFn Execute this function on module load. Useful for service - * configuration. - * @description - * Use this method to configure services by injecting their - * {@link angular.Module#provider `providers`}, e.g. for adding routes to the - * {@link ngRoute.$routeProvider $routeProvider}. - * - * Note that you can only inject {@link angular.Module#provider `providers`} and - * {@link angular.Module#constant `constants`} into this function. - * - * For more about how to configure services, see - * {@link providers#provider-recipe Provider Recipe}. - */ - config: config, - - /** - * @ngdoc method - * @name angular.Module#run - * @module ng - * @param {Function} initializationFn Execute this function after injector creation. - * Useful for application initialization. - * @description - * Use this method to register work which should be performed when the injector is done - * loading all modules. - */ - run: function(block) { - runBlocks.push(block); - return this; - } - }; - - if (configFn) { - config(configFn); - } - - return moduleInstance; - - /** - * @param {string} provider - * @param {string} method - * @param {String=} insertMethod - * @returns {angular.Module} - */ - function invokeLater(provider, method, insertMethod, queue) { - if (!queue) queue = invokeQueue; - return function() { - queue[insertMethod || 'push']([provider, method, arguments]); - return moduleInstance; - }; - } - - /** - * @param {string} provider - * @param {string} method - * @returns {angular.Module} - */ - function invokeLaterAndSetModuleName(provider, method, queue) { - if (!queue) queue = invokeQueue; - return function(recipeName, factoryFunction) { - if (factoryFunction && isFunction(factoryFunction)) factoryFunction.$$moduleName = name; - queue.push([provider, method, arguments]); - return moduleInstance; - }; - } - }); - }; - }); - -} - -/* global shallowCopy: true */ - -/** - * Creates a shallow copy of an object, an array or a primitive. - * - * Assumes that there are no proto properties for objects. - */ -function shallowCopy(src, dst) { - if (isArray(src)) { - dst = dst || []; - - for (var i = 0, ii = src.length; i < ii; i++) { - dst[i] = src[i]; - } - } else if (isObject(src)) { - dst = dst || {}; - - for (var key in src) { - if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) { - dst[key] = src[key]; - } - } - } - - return dst || src; -} - -/* exported toDebugString */ - -function serializeObject(obj, maxDepth) { - var seen = []; - - // There is no direct way to stringify object until reaching a specific depth - // and a very deep object can cause a performance issue, so we copy the object - // based on this specific depth and then stringify it. - if (isValidObjectMaxDepth(maxDepth)) { - // This file is also included in `angular-loader`, so `copy()` might not always be available in - // the closure. Therefore, it is lazily retrieved as `angular.copy()` when needed. - obj = angular.copy(obj, null, maxDepth); - } - return JSON.stringify(obj, function(key, val) { - val = toJsonReplacer(key, val); - if (isObject(val)) { - - if (seen.indexOf(val) >= 0) return '...'; - - seen.push(val); - } - return val; - }); -} - -function toDebugString(obj, maxDepth) { - if (typeof obj === 'function') { - return obj.toString().replace(/ \{[\s\S]*$/, ''); - } else if (isUndefined(obj)) { - return 'undefined'; - } else if (typeof obj !== 'string') { - return serializeObject(obj, maxDepth); - } - return obj; -} - -/* global angularModule: true, - version: true, - - $CompileProvider, - - htmlAnchorDirective, - inputDirective, - hiddenInputBrowserCacheDirective, - formDirective, - scriptDirective, - selectDirective, - optionDirective, - ngBindDirective, - ngBindHtmlDirective, - ngBindTemplateDirective, - ngClassDirective, - ngClassEvenDirective, - ngClassOddDirective, - ngCloakDirective, - ngControllerDirective, - ngFormDirective, - ngHideDirective, - ngIfDirective, - ngIncludeDirective, - ngIncludeFillContentDirective, - ngInitDirective, - ngNonBindableDirective, - ngPluralizeDirective, - ngRefDirective, - ngRepeatDirective, - ngShowDirective, - ngStyleDirective, - ngSwitchDirective, - ngSwitchWhenDirective, - ngSwitchDefaultDirective, - ngOptionsDirective, - ngTranscludeDirective, - ngModelDirective, - ngListDirective, - ngChangeDirective, - patternDirective, - patternDirective, - requiredDirective, - requiredDirective, - minlengthDirective, - minlengthDirective, - maxlengthDirective, - maxlengthDirective, - ngValueDirective, - ngModelOptionsDirective, - ngAttributeAliasDirectives, - ngEventDirectives, - - $AnchorScrollProvider, - $AnimateProvider, - $CoreAnimateCssProvider, - $$CoreAnimateJsProvider, - $$CoreAnimateQueueProvider, - $$AnimateRunnerFactoryProvider, - $$AnimateAsyncRunFactoryProvider, - $BrowserProvider, - $CacheFactoryProvider, - $ControllerProvider, - $DateProvider, - $DocumentProvider, - $$IsDocumentHiddenProvider, - $ExceptionHandlerProvider, - $FilterProvider, - $$ForceReflowProvider, - $InterpolateProvider, - $$IntervalFactoryProvider, - $IntervalProvider, - $HttpProvider, - $HttpParamSerializerProvider, - $HttpParamSerializerJQLikeProvider, - $HttpBackendProvider, - $xhrFactoryProvider, - $jsonpCallbacksProvider, - $LocationProvider, - $LogProvider, - $$MapProvider, - $ParseProvider, - $RootScopeProvider, - $QProvider, - $$QProvider, - $$SanitizeUriProvider, - $SceProvider, - $SceDelegateProvider, - $SnifferProvider, - $$TaskTrackerFactoryProvider, - $TemplateCacheProvider, - $TemplateRequestProvider, - $$TestabilityProvider, - $TimeoutProvider, - $$RAFProvider, - $WindowProvider, - $$jqLiteProvider, - $$CookieReaderProvider -*/ - - -/** - * @ngdoc object - * @name angular.version - * @module ng - * @description - * An object that contains information about the current AngularJS version. - * - * This object has the following properties: - * - * - `full` – `{string}` – Full version string, such as "0.9.18". - * - `major` – `{number}` – Major version number, such as "0". - * - `minor` – `{number}` – Minor version number, such as "9". - * - `dot` – `{number}` – Dot version number, such as "18". - * - `codeName` – `{string}` – Code name of the release, such as "jiggling-armfat". - */ -var version = { - // These placeholder strings will be replaced by grunt's `build` task. - // They need to be double- or single-quoted. - full: '1.8.0', - major: 1, - minor: 8, - dot: 0, - codeName: 'nested-vaccination' -}; - - -function publishExternalAPI(angular) { - extend(angular, { - 'errorHandlingConfig': errorHandlingConfig, - 'bootstrap': bootstrap, - 'copy': copy, - 'extend': extend, - 'merge': merge, - 'equals': equals, - 'element': jqLite, - 'forEach': forEach, - 'injector': createInjector, - 'noop': noop, - 'bind': bind, - 'toJson': toJson, - 'fromJson': fromJson, - 'identity': identity, - 'isUndefined': isUndefined, - 'isDefined': isDefined, - 'isString': isString, - 'isFunction': isFunction, - 'isObject': isObject, - 'isNumber': isNumber, - 'isElement': isElement, - 'isArray': isArray, - 'version': version, - 'isDate': isDate, - 'callbacks': {$$counter: 0}, - 'getTestability': getTestability, - 'reloadWithDebugInfo': reloadWithDebugInfo, - 'UNSAFE_restoreLegacyJqLiteXHTMLReplacement': UNSAFE_restoreLegacyJqLiteXHTMLReplacement, - '$$minErr': minErr, - '$$csp': csp, - '$$encodeUriSegment': encodeUriSegment, - '$$encodeUriQuery': encodeUriQuery, - '$$lowercase': lowercase, - '$$stringify': stringify, - '$$uppercase': uppercase - }); - - angularModule = setupModuleLoader(window); - - angularModule('ng', ['ngLocale'], ['$provide', - function ngModule($provide) { - // $$sanitizeUriProvider needs to be before $compileProvider as it is used by it. - $provide.provider({ - $$sanitizeUri: $$SanitizeUriProvider - }); - $provide.provider('$compile', $CompileProvider). - directive({ - a: htmlAnchorDirective, - input: inputDirective, - textarea: inputDirective, - form: formDirective, - script: scriptDirective, - select: selectDirective, - option: optionDirective, - ngBind: ngBindDirective, - ngBindHtml: ngBindHtmlDirective, - ngBindTemplate: ngBindTemplateDirective, - ngClass: ngClassDirective, - ngClassEven: ngClassEvenDirective, - ngClassOdd: ngClassOddDirective, - ngCloak: ngCloakDirective, - ngController: ngControllerDirective, - ngForm: ngFormDirective, - ngHide: ngHideDirective, - ngIf: ngIfDirective, - ngInclude: ngIncludeDirective, - ngInit: ngInitDirective, - ngNonBindable: ngNonBindableDirective, - ngPluralize: ngPluralizeDirective, - ngRef: ngRefDirective, - ngRepeat: ngRepeatDirective, - ngShow: ngShowDirective, - ngStyle: ngStyleDirective, - ngSwitch: ngSwitchDirective, - ngSwitchWhen: ngSwitchWhenDirective, - ngSwitchDefault: ngSwitchDefaultDirective, - ngOptions: ngOptionsDirective, - ngTransclude: ngTranscludeDirective, - ngModel: ngModelDirective, - ngList: ngListDirective, - ngChange: ngChangeDirective, - pattern: patternDirective, - ngPattern: patternDirective, - required: requiredDirective, - ngRequired: requiredDirective, - minlength: minlengthDirective, - ngMinlength: minlengthDirective, - maxlength: maxlengthDirective, - ngMaxlength: maxlengthDirective, - ngValue: ngValueDirective, - ngModelOptions: ngModelOptionsDirective - }). - directive({ - ngInclude: ngIncludeFillContentDirective, - input: hiddenInputBrowserCacheDirective - }). - directive(ngAttributeAliasDirectives). - directive(ngEventDirectives); - $provide.provider({ - $anchorScroll: $AnchorScrollProvider, - $animate: $AnimateProvider, - $animateCss: $CoreAnimateCssProvider, - $$animateJs: $$CoreAnimateJsProvider, - $$animateQueue: $$CoreAnimateQueueProvider, - $$AnimateRunner: $$AnimateRunnerFactoryProvider, - $$animateAsyncRun: $$AnimateAsyncRunFactoryProvider, - $browser: $BrowserProvider, - $cacheFactory: $CacheFactoryProvider, - $controller: $ControllerProvider, - $document: $DocumentProvider, - $$isDocumentHidden: $$IsDocumentHiddenProvider, - $exceptionHandler: $ExceptionHandlerProvider, - $filter: $FilterProvider, - $$forceReflow: $$ForceReflowProvider, - $interpolate: $InterpolateProvider, - $interval: $IntervalProvider, - $$intervalFactory: $$IntervalFactoryProvider, - $http: $HttpProvider, - $httpParamSerializer: $HttpParamSerializerProvider, - $httpParamSerializerJQLike: $HttpParamSerializerJQLikeProvider, - $httpBackend: $HttpBackendProvider, - $xhrFactory: $xhrFactoryProvider, - $jsonpCallbacks: $jsonpCallbacksProvider, - $location: $LocationProvider, - $log: $LogProvider, - $parse: $ParseProvider, - $rootScope: $RootScopeProvider, - $q: $QProvider, - $$q: $$QProvider, - $sce: $SceProvider, - $sceDelegate: $SceDelegateProvider, - $sniffer: $SnifferProvider, - $$taskTrackerFactory: $$TaskTrackerFactoryProvider, - $templateCache: $TemplateCacheProvider, - $templateRequest: $TemplateRequestProvider, - $$testability: $$TestabilityProvider, - $timeout: $TimeoutProvider, - $window: $WindowProvider, - $$rAF: $$RAFProvider, - $$jqLite: $$jqLiteProvider, - $$Map: $$MapProvider, - $$cookieReader: $$CookieReaderProvider - }); - } - ]) - .info({ angularVersion: '1.8.0' }); -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* global - JQLitePrototype: true, - BOOLEAN_ATTR: true, - ALIASED_ATTR: true -*/ - -////////////////////////////////// -//JQLite -////////////////////////////////// - -/** - * @ngdoc function - * @name angular.element - * @module ng - * @kind function - * - * @description - * Wraps a raw DOM element or HTML string as a [jQuery](http://jquery.com) element. - * - * If jQuery is available, `angular.element` is an alias for the - * [jQuery](http://api.jquery.com/jQuery/) function. If jQuery is not available, `angular.element` - * delegates to AngularJS's built-in subset of jQuery, called "jQuery lite" or **jqLite**. - * - * jqLite is a tiny, API-compatible subset of jQuery that allows - * AngularJS to manipulate the DOM in a cross-browser compatible way. jqLite implements only the most - * commonly needed functionality with the goal of having a very small footprint. - * - * To use `jQuery`, simply ensure it is loaded before the `angular.js` file. You can also use the - * {@link ngJq `ngJq`} directive to specify that jqlite should be used over jQuery, or to use a - * specific version of jQuery if multiple versions exist on the page. - * - *
      **Note:** All element references in AngularJS are always wrapped with jQuery or - * jqLite (such as the element argument in a directive's compile / link function). They are never raw DOM references.
      - * - *
      **Note:** Keep in mind that this function will not find elements - * by tag name / CSS selector. For lookups by tag name, try instead `angular.element(document).find(...)` - * or `$document.find()`, or use the standard DOM APIs, e.g. `document.querySelectorAll()`.
      - * - * ## AngularJS's jqLite - * jqLite provides only the following jQuery methods: - * - * - [`addClass()`](http://api.jquery.com/addClass/) - Does not support a function as first argument - * - [`after()`](http://api.jquery.com/after/) - * - [`append()`](http://api.jquery.com/append/) - Contrary to jQuery, this doesn't clone elements - * so will not work correctly when invoked on a jqLite object containing more than one DOM node - * - [`attr()`](http://api.jquery.com/attr/) - Does not support functions as parameters - * - [`bind()`](http://api.jquery.com/bind/) (_deprecated_, use [`on()`](http://api.jquery.com/on/)) - Does not support namespaces, selectors or eventData - * - [`children()`](http://api.jquery.com/children/) - Does not support selectors - * - [`clone()`](http://api.jquery.com/clone/) - * - [`contents()`](http://api.jquery.com/contents/) - * - [`css()`](http://api.jquery.com/css/) - Only retrieves inline-styles, does not call `getComputedStyle()`. - * As a setter, does not convert numbers to strings or append 'px', and also does not have automatic property prefixing. - * - [`data()`](http://api.jquery.com/data/) - * - [`detach()`](http://api.jquery.com/detach/) - * - [`empty()`](http://api.jquery.com/empty/) - * - [`eq()`](http://api.jquery.com/eq/) - * - [`find()`](http://api.jquery.com/find/) - Limited to lookups by tag name - * - [`hasClass()`](http://api.jquery.com/hasClass/) - * - [`html()`](http://api.jquery.com/html/) - * - [`next()`](http://api.jquery.com/next/) - Does not support selectors - * - [`on()`](http://api.jquery.com/on/) - Does not support namespaces, selectors or eventData - * - [`off()`](http://api.jquery.com/off/) - Does not support namespaces, selectors or event object as parameter - * - [`one()`](http://api.jquery.com/one/) - Does not support namespaces or selectors - * - [`parent()`](http://api.jquery.com/parent/) - Does not support selectors - * - [`prepend()`](http://api.jquery.com/prepend/) - * - [`prop()`](http://api.jquery.com/prop/) - * - [`ready()`](http://api.jquery.com/ready/) (_deprecated_, use `angular.element(callback)` instead of `angular.element(document).ready(callback)`) - * - [`remove()`](http://api.jquery.com/remove/) - * - [`removeAttr()`](http://api.jquery.com/removeAttr/) - Does not support multiple attributes - * - [`removeClass()`](http://api.jquery.com/removeClass/) - Does not support a function as first argument - * - [`removeData()`](http://api.jquery.com/removeData/) - * - [`replaceWith()`](http://api.jquery.com/replaceWith/) - * - [`text()`](http://api.jquery.com/text/) - * - [`toggleClass()`](http://api.jquery.com/toggleClass/) - Does not support a function as first argument - * - [`triggerHandler()`](http://api.jquery.com/triggerHandler/) - Passes a dummy event object to handlers - * - [`unbind()`](http://api.jquery.com/unbind/) (_deprecated_, use [`off()`](http://api.jquery.com/off/)) - Does not support namespaces or event object as parameter - * - [`val()`](http://api.jquery.com/val/) - * - [`wrap()`](http://api.jquery.com/wrap/) - * - * jqLite also provides a method restoring pre-1.8 insecure treatment of XHTML-like tags. - * This legacy behavior turns input like `
      ` to `
      ` - * instead of `
      ` like version 1.8 & newer do. To restore it, invoke: - * ```js - * angular.UNSAFE_restoreLegacyJqLiteXHTMLReplacement(); - * ``` - * Note that this only patches jqLite. If you use jQuery 3.5.0 or newer, please read the - * [jQuery 3.5 upgrade guide](https://jquery.com/upgrade-guide/3.5/) for more details - * about the workarounds. - * - * ## jQuery/jqLite Extras - * AngularJS also provides the following additional methods and events to both jQuery and jqLite: - * - * ### Events - * - `$destroy` - AngularJS intercepts all jqLite/jQuery's DOM destruction apis and fires this event - * on all DOM nodes being removed. This can be used to clean up any 3rd party bindings to the DOM - * element before it is removed. - * - * ### Methods - * - `controller(name)` - retrieves the controller of the current element or its parent. By default - * retrieves controller associated with the `ngController` directive. If `name` is provided as - * camelCase directive name, then the controller for this directive will be retrieved (e.g. - * `'ngModel'`). - * - `injector()` - retrieves the injector of the current element or its parent. - * - `scope()` - retrieves the {@link ng.$rootScope.Scope scope} of the current - * element or its parent. Requires {@link guide/production#disabling-debug-data Debug Data} to - * be enabled. - * - `isolateScope()` - retrieves an isolate {@link ng.$rootScope.Scope scope} if one is attached directly to the - * current element. This getter should be used only on elements that contain a directive which starts a new isolate - * scope. Calling `scope()` on this element always returns the original non-isolate scope. - * Requires {@link guide/production#disabling-debug-data Debug Data} to be enabled. - * - `inheritedData()` - same as `data()`, but walks up the DOM until a value is found or the top - * parent element is reached. - * - * @knownIssue You cannot spy on `angular.element` if you are using Jasmine version 1.x. See - * https://github.com/angular/angular.js/issues/14251 for more information. - * - * @param {string|DOMElement} element HTML string or DOMElement to be wrapped into jQuery. - * @returns {Object} jQuery object. - */ - -JQLite.expando = 'ng339'; - -var jqCache = JQLite.cache = {}, - jqId = 1; - -/* - * !!! This is an undocumented "private" function !!! - */ -JQLite._data = function(node) { - //jQuery always returns an object on cache miss - return this.cache[node[this.expando]] || {}; -}; - -function jqNextId() { return ++jqId; } - - -var DASH_LOWERCASE_REGEXP = /-([a-z])/g; -var MS_HACK_REGEXP = /^-ms-/; -var MOUSE_EVENT_MAP = { mouseleave: 'mouseout', mouseenter: 'mouseover' }; -var jqLiteMinErr = minErr('jqLite'); - -/** - * Converts kebab-case to camelCase. - * There is also a special case for the ms prefix starting with a lowercase letter. - * @param name Name to normalize - */ -function cssKebabToCamel(name) { - return kebabToCamel(name.replace(MS_HACK_REGEXP, 'ms-')); -} - -function fnCamelCaseReplace(all, letter) { - return letter.toUpperCase(); -} - -/** - * Converts kebab-case to camelCase. - * @param name Name to normalize - */ -function kebabToCamel(name) { - return name - .replace(DASH_LOWERCASE_REGEXP, fnCamelCaseReplace); -} - -var SINGLE_TAG_REGEXP = /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/; -var HTML_REGEXP = /<|&#?\w+;/; -var TAG_NAME_REGEXP = /<([\w:-]+)/; -var XHTML_TAG_REGEXP = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi; - -// Table parts need to be wrapped with `` or they're -// stripped to their contents when put in a div. -// XHTML parsers do not magically insert elements in the -// same way that tag soup parsers do, so we cannot shorten -// this by omitting or other required elements. -var wrapMap = { - thead: ['table'], - col: ['colgroup', 'table'], - tr: ['tbody', 'table'], - td: ['tr', 'tbody', 'table'] -}; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: IE <10 only -// IE 9 requires an option wrapper & it needs to have the whole table structure -// set up in advance; assigning `""` to `tr.innerHTML` doesn't work, etc. -var wrapMapIE9 = { - option: [1, ''], - _default: [0, '', ''] -}; - -for (var key in wrapMap) { - var wrapMapValueClosing = wrapMap[key]; - var wrapMapValue = wrapMapValueClosing.slice().reverse(); - wrapMapIE9[key] = [wrapMapValue.length, '<' + wrapMapValue.join('><') + '>', '']; -} - -wrapMapIE9.optgroup = wrapMapIE9.option; - -function jqLiteIsTextNode(html) { - return !HTML_REGEXP.test(html); -} - -function jqLiteAcceptsData(node) { - // The window object can accept data but has no nodeType - // Otherwise we are only interested in elements (1) and documents (9) - var nodeType = node.nodeType; - return nodeType === NODE_TYPE_ELEMENT || !nodeType || nodeType === NODE_TYPE_DOCUMENT; -} - -function jqLiteHasData(node) { - for (var key in jqCache[node.ng339]) { - return true; - } - return false; -} - -function jqLiteBuildFragment(html, context) { - var tmp, tag, wrap, finalHtml, - fragment = context.createDocumentFragment(), - nodes = [], i; - - if (jqLiteIsTextNode(html)) { - // Convert non-html into a text node - nodes.push(context.createTextNode(html)); - } else { - // Convert html into DOM nodes - tmp = fragment.appendChild(context.createElement('div')); - tag = (TAG_NAME_REGEXP.exec(html) || ['', ''])[1].toLowerCase(); - finalHtml = JQLite.legacyXHTMLReplacement ? - html.replace(XHTML_TAG_REGEXP, '<$1>') : - html; - - if (msie < 10) { - wrap = wrapMapIE9[tag] || wrapMapIE9._default; - tmp.innerHTML = wrap[1] + finalHtml + wrap[2]; - - // Descend through wrappers to the right content - i = wrap[0]; - while (i--) { - tmp = tmp.firstChild; - } - } else { - wrap = wrapMap[tag] || []; - - // Create wrappers & descend into them - i = wrap.length; - while (--i > -1) { - tmp.appendChild(window.document.createElement(wrap[i])); - tmp = tmp.firstChild; - } - - tmp.innerHTML = finalHtml; - } - - nodes = concat(nodes, tmp.childNodes); - - tmp = fragment.firstChild; - tmp.textContent = ''; - } - - // Remove wrapper from fragment - fragment.textContent = ''; - fragment.innerHTML = ''; // Clear inner HTML - forEach(nodes, function(node) { - fragment.appendChild(node); - }); - - return fragment; -} - -function jqLiteParseHTML(html, context) { - context = context || window.document; - var parsed; - - if ((parsed = SINGLE_TAG_REGEXP.exec(html))) { - return [context.createElement(parsed[1])]; - } - - if ((parsed = jqLiteBuildFragment(html, context))) { - return parsed.childNodes; - } - - return []; -} - -function jqLiteWrapNode(node, wrapper) { - var parent = node.parentNode; - - if (parent) { - parent.replaceChild(wrapper, node); - } - - wrapper.appendChild(node); -} - - -// IE9-11 has no method "contains" in SVG element and in Node.prototype. Bug #10259. -var jqLiteContains = window.Node.prototype.contains || /** @this */ function(arg) { - // eslint-disable-next-line no-bitwise - return !!(this.compareDocumentPosition(arg) & 16); -}; - -///////////////////////////////////////////// -function JQLite(element) { - if (element instanceof JQLite) { - return element; - } - - var argIsString; - - if (isString(element)) { - element = trim(element); - argIsString = true; - } - if (!(this instanceof JQLite)) { - if (argIsString && element.charAt(0) !== '<') { - throw jqLiteMinErr('nosel', 'Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element'); - } - return new JQLite(element); - } - - if (argIsString) { - jqLiteAddNodes(this, jqLiteParseHTML(element)); - } else if (isFunction(element)) { - jqLiteReady(element); - } else { - jqLiteAddNodes(this, element); - } -} - -function jqLiteClone(element) { - return element.cloneNode(true); -} - -function jqLiteDealoc(element, onlyDescendants) { - if (!onlyDescendants && jqLiteAcceptsData(element)) jqLite.cleanData([element]); - - if (element.querySelectorAll) { - jqLite.cleanData(element.querySelectorAll('*')); - } -} - -function isEmptyObject(obj) { - var name; - - for (name in obj) { - return false; - } - return true; -} - -function removeIfEmptyData(element) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - var events = expandoStore && expandoStore.events; - var data = expandoStore && expandoStore.data; - - if ((!data || isEmptyObject(data)) && (!events || isEmptyObject(events))) { - delete jqCache[expandoId]; - element.ng339 = undefined; // don't delete DOM expandos. IE and Chrome don't like it - } -} - -function jqLiteOff(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('offargs', 'jqLite#off() does not support the `selector` argument'); - - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var handle = expandoStore && expandoStore.handle; - - if (!handle) return; //no listeners registered - - if (!type) { - for (type in events) { - if (type !== '$destroy') { - element.removeEventListener(type, handle); - } - delete events[type]; - } - } else { - - var removeHandler = function(type) { - var listenerFns = events[type]; - if (isDefined(fn)) { - arrayRemove(listenerFns || [], fn); - } - if (!(isDefined(fn) && listenerFns && listenerFns.length > 0)) { - element.removeEventListener(type, handle); - delete events[type]; - } - }; - - forEach(type.split(' '), function(type) { - removeHandler(type); - if (MOUSE_EVENT_MAP[type]) { - removeHandler(MOUSE_EVENT_MAP[type]); - } - }); - } - - removeIfEmptyData(element); -} - -function jqLiteRemoveData(element, name) { - var expandoId = element.ng339; - var expandoStore = expandoId && jqCache[expandoId]; - - if (expandoStore) { - if (name) { - delete expandoStore.data[name]; - } else { - expandoStore.data = {}; - } - - removeIfEmptyData(element); - } -} - - -function jqLiteExpandoStore(element, createIfNecessary) { - var expandoId = element.ng339, - expandoStore = expandoId && jqCache[expandoId]; - - if (createIfNecessary && !expandoStore) { - element.ng339 = expandoId = jqNextId(); - expandoStore = jqCache[expandoId] = {events: {}, data: {}, handle: undefined}; - } - - return expandoStore; -} - - -function jqLiteData(element, key, value) { - if (jqLiteAcceptsData(element)) { - var prop; - - var isSimpleSetter = isDefined(value); - var isSimpleGetter = !isSimpleSetter && key && !isObject(key); - var massGetter = !key; - var expandoStore = jqLiteExpandoStore(element, !isSimpleGetter); - var data = expandoStore && expandoStore.data; - - if (isSimpleSetter) { // data('key', value) - data[kebabToCamel(key)] = value; - } else { - if (massGetter) { // data() - return data; - } else { - if (isSimpleGetter) { // data('key') - // don't force creation of expandoStore if it doesn't exist yet - return data && data[kebabToCamel(key)]; - } else { // mass-setter: data({key1: val1, key2: val2}) - for (prop in key) { - data[kebabToCamel(prop)] = key[prop]; - } - } - } - } - } -} - -function jqLiteHasClass(element, selector) { - if (!element.getAttribute) return false; - return ((' ' + (element.getAttribute('class') || '') + ' ').replace(/[\n\t]/g, ' '). - indexOf(' ' + selector + ' ') > -1); -} - -function jqLiteRemoveClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, ' '); - var newClasses = existingClasses; - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - newClasses = newClasses.replace(' ' + cssClass + ' ', ' '); - }); - - if (newClasses !== existingClasses) { - element.setAttribute('class', trim(newClasses)); - } - } -} - -function jqLiteAddClass(element, cssClasses) { - if (cssClasses && element.setAttribute) { - var existingClasses = (' ' + (element.getAttribute('class') || '') + ' ') - .replace(/[\n\t]/g, ' '); - var newClasses = existingClasses; - - forEach(cssClasses.split(' '), function(cssClass) { - cssClass = trim(cssClass); - if (newClasses.indexOf(' ' + cssClass + ' ') === -1) { - newClasses += cssClass + ' '; - } - }); - - if (newClasses !== existingClasses) { - element.setAttribute('class', trim(newClasses)); - } - } -} - - -function jqLiteAddNodes(root, elements) { - // THIS CODE IS VERY HOT. Don't make changes without benchmarking. - - if (elements) { - - // if a Node (the most common case) - if (elements.nodeType) { - root[root.length++] = elements; - } else { - var length = elements.length; - - // if an Array or NodeList and not a Window - if (typeof length === 'number' && elements.window !== elements) { - if (length) { - for (var i = 0; i < length; i++) { - root[root.length++] = elements[i]; - } - } - } else { - root[root.length++] = elements; - } - } - } -} - - -function jqLiteController(element, name) { - return jqLiteInheritedData(element, '$' + (name || 'ngController') + 'Controller'); -} - -function jqLiteInheritedData(element, name, value) { - // if element is the document object work with the html element instead - // this makes $(document).scope() possible - if (element.nodeType === NODE_TYPE_DOCUMENT) { - element = element.documentElement; - } - var names = isArray(name) ? name : [name]; - - while (element) { - for (var i = 0, ii = names.length; i < ii; i++) { - if (isDefined(value = jqLite.data(element, names[i]))) return value; - } - - // If dealing with a document fragment node with a host element, and no parent, use the host - // element as the parent. This enables directives within a Shadow DOM or polyfilled Shadow DOM - // to lookup parent controllers. - element = element.parentNode || (element.nodeType === NODE_TYPE_DOCUMENT_FRAGMENT && element.host); - } -} - -function jqLiteEmpty(element) { - jqLiteDealoc(element, true); - while (element.firstChild) { - element.removeChild(element.firstChild); - } -} - -function jqLiteRemove(element, keepData) { - if (!keepData) jqLiteDealoc(element); - var parent = element.parentNode; - if (parent) parent.removeChild(element); -} - - -function jqLiteDocumentLoaded(action, win) { - win = win || window; - if (win.document.readyState === 'complete') { - // Force the action to be run async for consistent behavior - // from the action's point of view - // i.e. it will definitely not be in a $apply - win.setTimeout(action); - } else { - // No need to unbind this handler as load is only ever called once - jqLite(win).on('load', action); - } -} - -function jqLiteReady(fn) { - function trigger() { - window.document.removeEventListener('DOMContentLoaded', trigger); - window.removeEventListener('load', trigger); - fn(); - } - - // check if document is already loaded - if (window.document.readyState === 'complete') { - window.setTimeout(fn); - } else { - // We can not use jqLite since we are not done loading and jQuery could be loaded later. - - // Works for modern browsers and IE9 - window.document.addEventListener('DOMContentLoaded', trigger); - - // Fallback to window.onload for others - window.addEventListener('load', trigger); - } -} - -////////////////////////////////////////// -// Functions which are declared directly. -////////////////////////////////////////// -var JQLitePrototype = JQLite.prototype = { - ready: jqLiteReady, - toString: function() { - var value = []; - forEach(this, function(e) { value.push('' + e);}); - return '[' + value.join(', ') + ']'; - }, - - eq: function(index) { - return (index >= 0) ? jqLite(this[index]) : jqLite(this[this.length + index]); - }, - - length: 0, - push: push, - sort: [].sort, - splice: [].splice -}; - -////////////////////////////////////////// -// Functions iterating getter/setters. -// these functions return self on setter and -// value on get. -////////////////////////////////////////// -var BOOLEAN_ATTR = {}; -forEach('multiple,selected,checked,disabled,readOnly,required,open'.split(','), function(value) { - BOOLEAN_ATTR[lowercase(value)] = value; -}); -var BOOLEAN_ELEMENTS = {}; -forEach('input,select,option,textarea,button,form,details'.split(','), function(value) { - BOOLEAN_ELEMENTS[value] = true; -}); -var ALIASED_ATTR = { - 'ngMinlength': 'minlength', - 'ngMaxlength': 'maxlength', - 'ngMin': 'min', - 'ngMax': 'max', - 'ngPattern': 'pattern', - 'ngStep': 'step' -}; - -function getBooleanAttrName(element, name) { - // check dom last since we will most likely fail on name - var booleanAttr = BOOLEAN_ATTR[name.toLowerCase()]; - - // booleanAttr is here twice to minimize DOM access - return booleanAttr && BOOLEAN_ELEMENTS[nodeName_(element)] && booleanAttr; -} - -function getAliasedAttrName(name) { - return ALIASED_ATTR[name]; -} - -forEach({ - data: jqLiteData, - removeData: jqLiteRemoveData, - hasData: jqLiteHasData, - cleanData: function jqLiteCleanData(nodes) { - for (var i = 0, ii = nodes.length; i < ii; i++) { - jqLiteRemoveData(nodes[i]); - jqLiteOff(nodes[i]); - } - } -}, function(fn, name) { - JQLite[name] = fn; -}); - -forEach({ - data: jqLiteData, - inheritedData: jqLiteInheritedData, - - scope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$scope') || jqLiteInheritedData(element.parentNode || element, ['$isolateScope', '$scope']); - }, - - isolateScope: function(element) { - // Can't use jqLiteData here directly so we stay compatible with jQuery! - return jqLite.data(element, '$isolateScope') || jqLite.data(element, '$isolateScopeNoTemplate'); - }, - - controller: jqLiteController, - - injector: function(element) { - return jqLiteInheritedData(element, '$injector'); - }, - - removeAttr: function(element, name) { - element.removeAttribute(name); - }, - - hasClass: jqLiteHasClass, - - css: function(element, name, value) { - name = cssKebabToCamel(name); - - if (isDefined(value)) { - element.style[name] = value; - } else { - return element.style[name]; - } - }, - - attr: function(element, name, value) { - var ret; - var nodeType = element.nodeType; - if (nodeType === NODE_TYPE_TEXT || nodeType === NODE_TYPE_ATTRIBUTE || nodeType === NODE_TYPE_COMMENT || - !element.getAttribute) { - return; - } - - var lowercasedName = lowercase(name); - var isBooleanAttr = BOOLEAN_ATTR[lowercasedName]; - - if (isDefined(value)) { - // setter - - if (value === null || (value === false && isBooleanAttr)) { - element.removeAttribute(name); - } else { - element.setAttribute(name, isBooleanAttr ? lowercasedName : value); - } - } else { - // getter - - ret = element.getAttribute(name); - - if (isBooleanAttr && ret !== null) { - ret = lowercasedName; - } - // Normalize non-existing attributes to undefined (as jQuery). - return ret === null ? undefined : ret; - } - }, - - prop: function(element, name, value) { - if (isDefined(value)) { - element[name] = value; - } else { - return element[name]; - } - }, - - text: (function() { - getText.$dv = ''; - return getText; - - function getText(element, value) { - if (isUndefined(value)) { - var nodeType = element.nodeType; - return (nodeType === NODE_TYPE_ELEMENT || nodeType === NODE_TYPE_TEXT) ? element.textContent : ''; - } - element.textContent = value; - } - })(), - - val: function(element, value) { - if (isUndefined(value)) { - if (element.multiple && nodeName_(element) === 'select') { - var result = []; - forEach(element.options, function(option) { - if (option.selected) { - result.push(option.value || option.text); - } - }); - return result; - } - return element.value; - } - element.value = value; - }, - - html: function(element, value) { - if (isUndefined(value)) { - return element.innerHTML; - } - jqLiteDealoc(element, true); - element.innerHTML = value; - }, - - empty: jqLiteEmpty -}, function(fn, name) { - /** - * Properties: writes return selection, reads return first value - */ - JQLite.prototype[name] = function(arg1, arg2) { - var i, key; - var nodeCount = this.length; - - // jqLiteHasClass has only two arguments, but is a getter-only fn, so we need to special-case it - // in a way that survives minification. - // jqLiteEmpty takes no arguments but is a setter. - if (fn !== jqLiteEmpty && - (isUndefined((fn.length === 2 && (fn !== jqLiteHasClass && fn !== jqLiteController)) ? arg1 : arg2))) { - if (isObject(arg1)) { - - // we are a write, but the object properties are the key/values - for (i = 0; i < nodeCount; i++) { - if (fn === jqLiteData) { - // data() takes the whole object in jQuery - fn(this[i], arg1); - } else { - for (key in arg1) { - fn(this[i], key, arg1[key]); - } - } - } - // return self for chaining - return this; - } else { - // we are a read, so read the first child. - // TODO: do we still need this? - var value = fn.$dv; - // Only if we have $dv do we iterate over all, otherwise it is just the first element. - var jj = (isUndefined(value)) ? Math.min(nodeCount, 1) : nodeCount; - for (var j = 0; j < jj; j++) { - var nodeValue = fn(this[j], arg1, arg2); - value = value ? value + nodeValue : nodeValue; - } - return value; - } - } else { - // we are a write, so apply to all children - for (i = 0; i < nodeCount; i++) { - fn(this[i], arg1, arg2); - } - // return self for chaining - return this; - } - }; -}); - -function createEventHandler(element, events) { - var eventHandler = function(event, type) { - // jQuery specific api - event.isDefaultPrevented = function() { - return event.defaultPrevented; - }; - - var eventFns = events[type || event.type]; - var eventFnsLength = eventFns ? eventFns.length : 0; - - if (!eventFnsLength) return; - - if (isUndefined(event.immediatePropagationStopped)) { - var originalStopImmediatePropagation = event.stopImmediatePropagation; - event.stopImmediatePropagation = function() { - event.immediatePropagationStopped = true; - - if (event.stopPropagation) { - event.stopPropagation(); - } - - if (originalStopImmediatePropagation) { - originalStopImmediatePropagation.call(event); - } - }; - } - - event.isImmediatePropagationStopped = function() { - return event.immediatePropagationStopped === true; - }; - - // Some events have special handlers that wrap the real handler - var handlerWrapper = eventFns.specialHandlerWrapper || defaultHandlerWrapper; - - // Copy event handlers in case event handlers array is modified during execution. - if ((eventFnsLength > 1)) { - eventFns = shallowCopy(eventFns); - } - - for (var i = 0; i < eventFnsLength; i++) { - if (!event.isImmediatePropagationStopped()) { - handlerWrapper(element, event, eventFns[i]); - } - } - }; - - // TODO: this is a hack for angularMocks/clearDataCache that makes it possible to deregister all - // events on `element` - eventHandler.elem = element; - return eventHandler; -} - -function defaultHandlerWrapper(element, event, handler) { - handler.call(element, event); -} - -function specialMouseHandlerWrapper(target, event, handler) { - // Refer to jQuery's implementation of mouseenter & mouseleave - // Read about mouseenter and mouseleave: - // http://www.quirksmode.org/js/events_mouse.html#link8 - var related = event.relatedTarget; - // For mousenter/leave call the handler if related is outside the target. - // NB: No relatedTarget if the mouse left/entered the browser window - if (!related || (related !== target && !jqLiteContains.call(target, related))) { - handler.call(target, event); - } -} - -////////////////////////////////////////// -// Functions iterating traversal. -// These functions chain results into a single -// selector. -////////////////////////////////////////// -forEach({ - removeData: jqLiteRemoveData, - - on: function jqLiteOn(element, type, fn, unsupported) { - if (isDefined(unsupported)) throw jqLiteMinErr('onargs', 'jqLite#on() does not support the `selector` or `eventData` parameters'); - - // Do not add event handlers to non-elements because they will not be cleaned up. - if (!jqLiteAcceptsData(element)) { - return; - } - - var expandoStore = jqLiteExpandoStore(element, true); - var events = expandoStore.events; - var handle = expandoStore.handle; - - if (!handle) { - handle = expandoStore.handle = createEventHandler(element, events); - } - - // http://jsperf.com/string-indexof-vs-split - var types = type.indexOf(' ') >= 0 ? type.split(' ') : [type]; - var i = types.length; - - var addHandler = function(type, specialHandlerWrapper, noEventListener) { - var eventFns = events[type]; - - if (!eventFns) { - eventFns = events[type] = []; - eventFns.specialHandlerWrapper = specialHandlerWrapper; - if (type !== '$destroy' && !noEventListener) { - element.addEventListener(type, handle); - } - } - - eventFns.push(fn); - }; - - while (i--) { - type = types[i]; - if (MOUSE_EVENT_MAP[type]) { - addHandler(MOUSE_EVENT_MAP[type], specialMouseHandlerWrapper); - addHandler(type, undefined, true); - } else { - addHandler(type); - } - } - }, - - off: jqLiteOff, - - one: function(element, type, fn) { - element = jqLite(element); - - //add the listener twice so that when it is called - //you can remove the original function and still be - //able to call element.off(ev, fn) normally - element.on(type, function onFn() { - element.off(type, fn); - element.off(type, onFn); - }); - element.on(type, fn); - }, - - replaceWith: function(element, replaceNode) { - var index, parent = element.parentNode; - jqLiteDealoc(element); - forEach(new JQLite(replaceNode), function(node) { - if (index) { - parent.insertBefore(node, index.nextSibling); - } else { - parent.replaceChild(node, element); - } - index = node; - }); - }, - - children: function(element) { - var children = []; - forEach(element.childNodes, function(element) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - children.push(element); - } - }); - return children; - }, - - contents: function(element) { - return element.contentDocument || element.childNodes || []; - }, - - append: function(element, node) { - var nodeType = element.nodeType; - if (nodeType !== NODE_TYPE_ELEMENT && nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT) return; - - node = new JQLite(node); - - for (var i = 0, ii = node.length; i < ii; i++) { - var child = node[i]; - element.appendChild(child); - } - }, - - prepend: function(element, node) { - if (element.nodeType === NODE_TYPE_ELEMENT) { - var index = element.firstChild; - forEach(new JQLite(node), function(child) { - element.insertBefore(child, index); - }); - } - }, - - wrap: function(element, wrapNode) { - jqLiteWrapNode(element, jqLite(wrapNode).eq(0).clone()[0]); - }, - - remove: jqLiteRemove, - - detach: function(element) { - jqLiteRemove(element, true); - }, - - after: function(element, newElement) { - var index = element, parent = element.parentNode; - - if (parent) { - newElement = new JQLite(newElement); - - for (var i = 0, ii = newElement.length; i < ii; i++) { - var node = newElement[i]; - parent.insertBefore(node, index.nextSibling); - index = node; - } - } - }, - - addClass: jqLiteAddClass, - removeClass: jqLiteRemoveClass, - - toggleClass: function(element, selector, condition) { - if (selector) { - forEach(selector.split(' '), function(className) { - var classCondition = condition; - if (isUndefined(classCondition)) { - classCondition = !jqLiteHasClass(element, className); - } - (classCondition ? jqLiteAddClass : jqLiteRemoveClass)(element, className); - }); - } - }, - - parent: function(element) { - var parent = element.parentNode; - return parent && parent.nodeType !== NODE_TYPE_DOCUMENT_FRAGMENT ? parent : null; - }, - - next: function(element) { - return element.nextElementSibling; - }, - - find: function(element, selector) { - if (element.getElementsByTagName) { - return element.getElementsByTagName(selector); - } else { - return []; - } - }, - - clone: jqLiteClone, - - triggerHandler: function(element, event, extraParameters) { - - var dummyEvent, eventFnsCopy, handlerArgs; - var eventName = event.type || event; - var expandoStore = jqLiteExpandoStore(element); - var events = expandoStore && expandoStore.events; - var eventFns = events && events[eventName]; - - if (eventFns) { - // Create a dummy event to pass to the handlers - dummyEvent = { - preventDefault: function() { this.defaultPrevented = true; }, - isDefaultPrevented: function() { return this.defaultPrevented === true; }, - stopImmediatePropagation: function() { this.immediatePropagationStopped = true; }, - isImmediatePropagationStopped: function() { return this.immediatePropagationStopped === true; }, - stopPropagation: noop, - type: eventName, - target: element - }; - - // If a custom event was provided then extend our dummy event with it - if (event.type) { - dummyEvent = extend(dummyEvent, event); - } - - // Copy event handlers in case event handlers array is modified during execution. - eventFnsCopy = shallowCopy(eventFns); - handlerArgs = extraParameters ? [dummyEvent].concat(extraParameters) : [dummyEvent]; - - forEach(eventFnsCopy, function(fn) { - if (!dummyEvent.isImmediatePropagationStopped()) { - fn.apply(element, handlerArgs); - } - }); - } - } -}, function(fn, name) { - /** - * chaining functions - */ - JQLite.prototype[name] = function(arg1, arg2, arg3) { - var value; - - for (var i = 0, ii = this.length; i < ii; i++) { - if (isUndefined(value)) { - value = fn(this[i], arg1, arg2, arg3); - if (isDefined(value)) { - // any function which returns a value needs to be wrapped - value = jqLite(value); - } - } else { - jqLiteAddNodes(value, fn(this[i], arg1, arg2, arg3)); - } - } - return isDefined(value) ? value : this; - }; -}); - -// bind legacy bind/unbind to on/off -JQLite.prototype.bind = JQLite.prototype.on; -JQLite.prototype.unbind = JQLite.prototype.off; - - -// Provider for private $$jqLite service -/** @this */ -function $$jqLiteProvider() { - this.$get = function $$jqLite() { - return extend(JQLite, { - hasClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteHasClass(node, classes); - }, - addClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteAddClass(node, classes); - }, - removeClass: function(node, classes) { - if (node.attr) node = node[0]; - return jqLiteRemoveClass(node, classes); - } - }); - }; -} - -/** - * Computes a hash of an 'obj'. - * Hash of a: - * string is string - * number is number as string - * object is either result of calling $$hashKey function on the object or uniquely generated id, - * that is also assigned to the $$hashKey property of the object. - * - * @param obj - * @returns {string} hash string such that the same input will have the same hash string. - * The resulting string key is in 'type:hashKey' format. - */ -function hashKey(obj, nextUidFn) { - var key = obj && obj.$$hashKey; - - if (key) { - if (typeof key === 'function') { - key = obj.$$hashKey(); - } - return key; - } - - var objType = typeof obj; - if (objType === 'function' || (objType === 'object' && obj !== null)) { - key = obj.$$hashKey = objType + ':' + (nextUidFn || nextUid)(); - } else { - key = objType + ':' + obj; - } - - return key; -} - -// A minimal ES2015 Map implementation. -// Should be bug/feature equivalent to the native implementations of supported browsers -// (for the features required in Angular). -// See https://kangax.github.io/compat-table/es6/#test-Map -var nanKey = Object.create(null); -function NgMapShim() { - this._keys = []; - this._values = []; - this._lastKey = NaN; - this._lastIndex = -1; -} -NgMapShim.prototype = { - _idx: function(key) { - if (key !== this._lastKey) { - this._lastKey = key; - this._lastIndex = this._keys.indexOf(key); - } - return this._lastIndex; - }, - _transformKey: function(key) { - return isNumberNaN(key) ? nanKey : key; - }, - get: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx !== -1) { - return this._values[idx]; - } - }, - has: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - return idx !== -1; - }, - set: function(key, value) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx === -1) { - idx = this._lastIndex = this._keys.length; - } - this._keys[idx] = key; - this._values[idx] = value; - - // Support: IE11 - // Do not `return this` to simulate the partial IE11 implementation - }, - delete: function(key) { - key = this._transformKey(key); - var idx = this._idx(key); - if (idx === -1) { - return false; - } - this._keys.splice(idx, 1); - this._values.splice(idx, 1); - this._lastKey = NaN; - this._lastIndex = -1; - return true; - } -}; - -// For now, always use `NgMapShim`, even if `window.Map` is available. Some native implementations -// are still buggy (often in subtle ways) and can cause hard-to-debug failures. When native `Map` -// implementations get more stable, we can reconsider switching to `window.Map` (when available). -var NgMap = NgMapShim; - -var $$MapProvider = [/** @this */function() { - this.$get = [function() { - return NgMap; - }]; -}]; - -/** - * @ngdoc function - * @module ng - * @name angular.injector - * @kind function - * - * @description - * Creates an injector object that can be used for retrieving services as well as for - * dependency injection (see {@link guide/di dependency injection}). - * - * @param {Array.} modules A list of module functions or their aliases. See - * {@link angular.module}. The `ng` module must be explicitly added. - * @param {boolean=} [strictDi=false] Whether the injector should be in strict mode, which - * disallows argument name annotation inference. - * @returns {injector} Injector object. See {@link auto.$injector $injector}. - * - * @example - * Typical usage - * ```js - * // create an injector - * var $injector = angular.injector(['ng']); - * - * // use the injector to kick off your application - * // use the type inference to auto inject arguments, or use implicit injection - * $injector.invoke(function($rootScope, $compile, $document) { - * $compile($document)($rootScope); - * $rootScope.$digest(); - * }); - * ``` - * - * Sometimes you want to get access to the injector of a currently running AngularJS app - * from outside AngularJS. Perhaps, you want to inject and compile some markup after the - * application has been bootstrapped. You can do this using the extra `injector()` added - * to JQuery/jqLite elements. See {@link angular.element}. - * - * *This is fairly rare but could be the case if a third party library is injecting the - * markup.* - * - * In the following example a new block of HTML containing a `ng-controller` - * directive is added to the end of the document body by JQuery. We then compile and link - * it into the current AngularJS scope. - * - * ```js - * var $div = $('
      {{content.label}}
      '); - * $(document.body).append($div); - * - * angular.element(document).injector().invoke(function($compile) { - * var scope = angular.element($div).scope(); - * $compile($div)(scope); - * }); - * ``` - */ - - -/** - * @ngdoc module - * @name auto - * @installation - * @description - * - * Implicit module which gets automatically added to each {@link auto.$injector $injector}. - */ - -var ARROW_ARG = /^([^(]+?)=>/; -var FN_ARGS = /^[^(]*\(\s*([^)]*)\)/m; -var FN_ARG_SPLIT = /,/; -var FN_ARG = /^\s*(_?)(\S+?)\1\s*$/; -var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; -var $injectorMinErr = minErr('$injector'); - -function stringifyFn(fn) { - return Function.prototype.toString.call(fn); -} - -function extractArgs(fn) { - var fnText = stringifyFn(fn).replace(STRIP_COMMENTS, ''), - args = fnText.match(ARROW_ARG) || fnText.match(FN_ARGS); - return args; -} - -function anonFn(fn) { - // For anonymous functions, showing at the very least the function signature can help in - // debugging. - var args = extractArgs(fn); - if (args) { - return 'function(' + (args[1] || '').replace(/[\s\r\n]+/, ' ') + ')'; - } - return 'fn'; -} - -function annotate(fn, strictDi, name) { - var $inject, - argDecl, - last; - - if (typeof fn === 'function') { - if (!($inject = fn.$inject)) { - $inject = []; - if (fn.length) { - if (strictDi) { - if (!isString(name) || !name) { - name = fn.name || anonFn(fn); - } - throw $injectorMinErr('strictdi', - '{0} is not using explicit annotation and cannot be invoked in strict mode', name); - } - argDecl = extractArgs(fn); - forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) { - arg.replace(FN_ARG, function(all, underscore, name) { - $inject.push(name); - }); - }); - } - fn.$inject = $inject; - } - } else if (isArray(fn)) { - last = fn.length - 1; - assertArgFn(fn[last], 'fn'); - $inject = fn.slice(0, last); - } else { - assertArgFn(fn, 'fn', true); - } - return $inject; -} - -/////////////////////////////////////// - -/** - * @ngdoc service - * @name $injector - * - * @description - * - * `$injector` is used to retrieve object instances as defined by - * {@link auto.$provide provider}, instantiate types, invoke methods, - * and load modules. - * - * The following always holds true: - * - * ```js - * var $injector = angular.injector(); - * expect($injector.get('$injector')).toBe($injector); - * expect($injector.invoke(function($injector) { - * return $injector; - * })).toBe($injector); - * ``` - * - * ## Injection Function Annotation - * - * JavaScript does not have annotations, and annotations are needed for dependency injection. The - * following are all valid ways of annotating function with injection arguments and are equivalent. - * - * ```js - * // inferred (only works if code not minified/obfuscated) - * $injector.invoke(function(serviceA){}); - * - * // annotated - * function explicit(serviceA) {}; - * explicit.$inject = ['serviceA']; - * $injector.invoke(explicit); - * - * // inline - * $injector.invoke(['serviceA', function(serviceA){}]); - * ``` - * - * ### Inference - * - * In JavaScript calling `toString()` on a function returns the function definition. The definition - * can then be parsed and the function arguments can be extracted. This method of discovering - * annotations is disallowed when the injector is in strict mode. - * *NOTE:* This does not work with minification, and obfuscation tools since these tools change the - * argument names. - * - * ### `$inject` Annotation - * By adding an `$inject` property onto a function the injection parameters can be specified. - * - * ### Inline - * As an array of injection names, where the last item in the array is the function to call. - */ - -/** - * @ngdoc property - * @name $injector#modules - * @type {Object} - * @description - * A hash containing all the modules that have been loaded into the - * $injector. - * - * You can use this property to find out information about a module via the - * {@link angular.Module#info `myModule.info(...)`} method. - * - * For example: - * - * ``` - * var info = $injector.modules['ngAnimate'].info(); - * ``` - * - * **Do not use this property to attempt to modify the modules after the application - * has been bootstrapped.** - */ - - -/** - * @ngdoc method - * @name $injector#get - * - * @description - * Return an instance of the service. - * - * @param {string} name The name of the instance to retrieve. - * @param {string=} caller An optional string to provide the origin of the function call for error messages. - * @return {*} The instance. - */ - -/** - * @ngdoc method - * @name $injector#invoke - * - * @description - * Invoke the method and supply the method arguments from the `$injector`. - * - * @param {Function|Array.} fn The injectable function to invoke. Function parameters are - * injected according to the {@link guide/di $inject Annotation} rules. - * @param {Object=} self The `this` for the invoked method. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {*} the value returned by the invoked `fn` function. - */ - -/** - * @ngdoc method - * @name $injector#has - * - * @description - * Allows the user to query if the particular service exists. - * - * @param {string} name Name of the service to query. - * @returns {boolean} `true` if injector has given service. - */ - -/** - * @ngdoc method - * @name $injector#instantiate - * @description - * Create a new instance of JS type. The method takes a constructor function, invokes the new - * operator, and supplies all of the arguments to the constructor function as specified by the - * constructor annotation. - * - * @param {Function} Type Annotated constructor function. - * @param {Object=} locals Optional object. If preset then any argument names are read from this - * object first, before the `$injector` is consulted. - * @returns {Object} new instance of `Type`. - */ - -/** - * @ngdoc method - * @name $injector#annotate - * - * @description - * Returns an array of service names which the function is requesting for injection. This API is - * used by the injector to determine which services need to be injected into the function when the - * function is invoked. There are three ways in which the function can be annotated with the needed - * dependencies. - * - * #### Argument names - * - * The simplest form is to extract the dependencies from the arguments of the function. This is done - * by converting the function into a string using `toString()` method and extracting the argument - * names. - * ```js - * // Given - * function MyController($scope, $route) { - * // ... - * } - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * You can disallow this method by using strict injection mode. - * - * This method does not work with code minification / obfuscation. For this reason the following - * annotation strategies are supported. - * - * #### The `$inject` property - * - * If a function has an `$inject` property and its value is an array of strings, then the strings - * represent names of services to be injected into the function. - * ```js - * // Given - * var MyController = function(obfuscatedScope, obfuscatedRoute) { - * // ... - * } - * // Define function dependencies - * MyController['$inject'] = ['$scope', '$route']; - * - * // Then - * expect(injector.annotate(MyController)).toEqual(['$scope', '$route']); - * ``` - * - * #### The array notation - * - * It is often desirable to inline Injected functions and that's when setting the `$inject` property - * is very inconvenient. In these situations using the array notation to specify the dependencies in - * a way that survives minification is a better choice: - * - * ```js - * // We wish to write this (not minification / obfuscation safe) - * injector.invoke(function($compile, $rootScope) { - * // ... - * }); - * - * // We are forced to write break inlining - * var tmpFn = function(obfuscatedCompile, obfuscatedRootScope) { - * // ... - * }; - * tmpFn.$inject = ['$compile', '$rootScope']; - * injector.invoke(tmpFn); - * - * // To better support inline function the inline annotation is supported - * injector.invoke(['$compile', '$rootScope', function(obfCompile, obfRootScope) { - * // ... - * }]); - * - * // Therefore - * expect(injector.annotate( - * ['$compile', '$rootScope', function(obfus_$compile, obfus_$rootScope) {}]) - * ).toEqual(['$compile', '$rootScope']); - * ``` - * - * @param {Function|Array.} fn Function for which dependent service names need to - * be retrieved as described above. - * - * @param {boolean=} [strictDi=false] Disallow argument name annotation inference. - * - * @returns {Array.} The names of the services which the function requires. - */ -/** - * @ngdoc method - * @name $injector#loadNewModules - * - * @description - * - * **This is a dangerous API, which you use at your own risk!** - * - * Add the specified modules to the current injector. - * - * This method will add each of the injectables to the injector and execute all of the config and run - * blocks for each module passed to the method. - * - * If a module has already been loaded into the injector then it will not be loaded again. - * - * * The application developer is responsible for loading the code containing the modules; and for - * ensuring that lazy scripts are not downloaded and executed more often that desired. - * * Previously compiled HTML will not be affected by newly loaded directives, filters and components. - * * Modules cannot be unloaded. - * - * You can use {@link $injector#modules `$injector.modules`} to check whether a module has been loaded - * into the injector, which may indicate whether the script has been executed already. - * - * @example - * Here is an example of loading a bundle of modules, with a utility method called `getScript`: - * - * ```javascript - * app.factory('loadModule', function($injector) { - * return function loadModule(moduleName, bundleUrl) { - * return getScript(bundleUrl).then(function() { $injector.loadNewModules([moduleName]); }); - * }; - * }) - * ``` - * - * @param {Array=} mods an array of modules to load into the application. - * Each item in the array should be the name of a predefined module or a (DI annotated) - * function that will be invoked by the injector as a `config` block. - * See: {@link angular.module modules} - */ - - -/** - * @ngdoc service - * @name $provide - * - * @description - * - * The {@link auto.$provide $provide} service has a number of methods for registering components - * with the {@link auto.$injector $injector}. Many of these functions are also exposed on - * {@link angular.Module}. - * - * An AngularJS **service** is a singleton object created by a **service factory**. These **service - * factories** are functions which, in turn, are created by a **service provider**. - * The **service providers** are constructor functions. When instantiated they must contain a - * property called `$get`, which holds the **service factory** function. - * - * When you request a service, the {@link auto.$injector $injector} is responsible for finding the - * correct **service provider**, instantiating it and then calling its `$get` **service factory** - * function to get the instance of the **service**. - * - * Often services have no configuration options and there is no need to add methods to the service - * provider. The provider will be no more than a constructor function with a `$get` property. For - * these cases the {@link auto.$provide $provide} service has additional helper methods to register - * services without specifying a provider. - * - * * {@link auto.$provide#provider provider(name, provider)} - registers a **service provider** with the - * {@link auto.$injector $injector} - * * {@link auto.$provide#constant constant(name, obj)} - registers a value/object that can be accessed by - * providers and services. - * * {@link auto.$provide#value value(name, obj)} - registers a value/object that can only be accessed by - * services, not providers. - * * {@link auto.$provide#factory factory(name, fn)} - registers a service **factory function** - * that will be wrapped in a **service provider** object, whose `$get` property will contain the - * given factory function. - * * {@link auto.$provide#service service(name, Fn)} - registers a **constructor function** - * that will be wrapped in a **service provider** object, whose `$get` property will instantiate - * a new object using the given constructor function. - * * {@link auto.$provide#decorator decorator(name, decorFn)} - registers a **decorator function** that - * will be able to modify or replace the implementation of another service. - * - * See the individual methods for more information and examples. - */ - -/** - * @ngdoc method - * @name $provide#provider - * @description - * - * Register a **provider function** with the {@link auto.$injector $injector}. Provider functions - * are constructor functions, whose instances are responsible for "providing" a factory for a - * service. - * - * Service provider names start with the name of the service they provide followed by `Provider`. - * For example, the {@link ng.$log $log} service has a provider called - * {@link ng.$logProvider $logProvider}. - * - * Service provider objects can have additional methods which allow configuration of the provider - * and its service. Importantly, you can configure what kind of service is created by the `$get` - * method, or how that service will act. For example, the {@link ng.$logProvider $logProvider} has a - * method {@link ng.$logProvider#debugEnabled debugEnabled} - * which lets you specify whether the {@link ng.$log $log} service will log debug messages to the - * console or not. - * - * It is possible to inject other providers into the provider function, - * but the injected provider must have been defined before the one that requires it. - * - * @param {string} name The name of the instance. NOTE: the provider will be available under `name + - 'Provider'` key. - * @param {(Object|function())} provider If the provider is: - * - * - `Object`: then it should have a `$get` method. The `$get` method will be invoked using - * {@link auto.$injector#invoke $injector.invoke()} when an instance needs to be created. - * - `Constructor`: a new instance of the provider will be created using - * {@link auto.$injector#instantiate $injector.instantiate()}, then treated as `object`. - * - * @returns {Object} registered provider instance - - * @example - * - * The following example shows how to create a simple event tracking service and register it using - * {@link auto.$provide#provider $provide.provider()}. - * - * ```js - * // Define the eventTracker provider - * function EventTrackerProvider() { - * var trackingUrl = '/track'; - * - * // A provider method for configuring where the tracked events should been saved - * this.setTrackingUrl = function(url) { - * trackingUrl = url; - * }; - * - * // The service factory function - * this.$get = ['$http', function($http) { - * var trackedEvents = {}; - * return { - * // Call this to track an event - * event: function(event) { - * var count = trackedEvents[event] || 0; - * count += 1; - * trackedEvents[event] = count; - * return count; - * }, - * // Call this to save the tracked events to the trackingUrl - * save: function() { - * $http.post(trackingUrl, trackedEvents); - * } - * }; - * }]; - * } - * - * describe('eventTracker', function() { - * var postSpy; - * - * beforeEach(module(function($provide) { - * // Register the eventTracker provider - * $provide.provider('eventTracker', EventTrackerProvider); - * })); - * - * beforeEach(module(function(eventTrackerProvider) { - * // Configure eventTracker provider - * eventTrackerProvider.setTrackingUrl('/custom-track'); - * })); - * - * it('tracks events', inject(function(eventTracker) { - * expect(eventTracker.event('login')).toEqual(1); - * expect(eventTracker.event('login')).toEqual(2); - * })); - * - * it('saves to the tracking url', inject(function(eventTracker, $http) { - * postSpy = spyOn($http, 'post'); - * eventTracker.event('login'); - * eventTracker.save(); - * expect(postSpy).toHaveBeenCalled(); - * expect(postSpy.mostRecentCall.args[0]).not.toEqual('/track'); - * expect(postSpy.mostRecentCall.args[0]).toEqual('/custom-track'); - * expect(postSpy.mostRecentCall.args[1]).toEqual({ 'login': 1 }); - * })); - * }); - * ``` - */ - -/** - * @ngdoc method - * @name $provide#factory - * @description - * - * Register a **service factory**, which will be called to return the service instance. - * This is short for registering a service where its provider consists of only a `$get` property, - * which is the given service factory function. - * You should use {@link auto.$provide#factory $provide.factory(getFn)} if you do not need to - * configure your service in a provider. - * - * @param {string} name The name of the instance. - * @param {Function|Array.} $getFn The injectable $getFn for the instance creation. - * Internally this is a short hand for `$provide.provider(name, {$get: $getFn})`. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service - * ```js - * $provide.factory('ping', ['$http', function($http) { - * return function ping() { - * return $http.send('/ping'); - * }; - * }]); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#service - * @description - * - * Register a **service constructor**, which will be invoked with `new` to create the service - * instance. - * This is short for registering a service where its provider's `$get` property is a factory - * function that returns an instance instantiated by the injector from the service constructor - * function. - * - * Internally it looks a bit like this: - * - * ``` - * { - * $get: function() { - * return $injector.instantiate(constructor); - * } - * } - * ``` - * - * - * You should use {@link auto.$provide#service $provide.service(class)} if you define your service - * as a type/class. - * - * @param {string} name The name of the instance. - * @param {Function|Array.} constructor An injectable class (constructor function) - * that will be instantiated. - * @returns {Object} registered provider instance - * - * @example - * Here is an example of registering a service using - * {@link auto.$provide#service $provide.service(class)}. - * ```js - * var Ping = function($http) { - * this.$http = $http; - * }; - * - * Ping.$inject = ['$http']; - * - * Ping.prototype.send = function() { - * return this.$http.get('/ping'); - * }; - * $provide.service('ping', Ping); - * ``` - * You would then inject and use this service like this: - * ```js - * someModule.controller('Ctrl', ['ping', function(ping) { - * ping.send(); - * }]); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#value - * @description - * - * Register a **value service** with the {@link auto.$injector $injector}, such as a string, a - * number, an array, an object or a function. This is short for registering a service where its - * provider's `$get` property is a factory function that takes no arguments and returns the **value - * service**. That also means it is not possible to inject other services into a value service. - * - * Value services are similar to constant services, except that they cannot be injected into a - * module configuration function (see {@link angular.Module#config}) but they can be overridden by - * an AngularJS {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the instance. - * @param {*} value The value. - * @returns {Object} registered provider instance - * - * @example - * Here are some examples of creating value services. - * ```js - * $provide.value('ADMIN_USER', 'admin'); - * - * $provide.value('RoleLookup', { admin: 0, writer: 1, reader: 2 }); - * - * $provide.value('halfOf', function(value) { - * return value / 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#constant - * @description - * - * Register a **constant service** with the {@link auto.$injector $injector}, such as a string, - * a number, an array, an object or a function. Like the {@link auto.$provide#value value}, it is not - * possible to inject other services into a constant. - * - * But unlike {@link auto.$provide#value value}, a constant can be - * injected into a module configuration function (see {@link angular.Module#config}) and it cannot - * be overridden by an AngularJS {@link auto.$provide#decorator decorator}. - * - * @param {string} name The name of the constant. - * @param {*} value The constant value. - * @returns {Object} registered instance - * - * @example - * Here a some examples of creating constants: - * ```js - * $provide.constant('SHARD_HEIGHT', 306); - * - * $provide.constant('MY_COLOURS', ['red', 'blue', 'grey']); - * - * $provide.constant('double', function(value) { - * return value * 2; - * }); - * ``` - */ - - -/** - * @ngdoc method - * @name $provide#decorator - * @description - * - * Register a **decorator function** with the {@link auto.$injector $injector}. A decorator function - * intercepts the creation of a service, allowing it to override or modify the behavior of the - * service. The return value of the decorator function may be the original service, or a new service - * that replaces (or wraps and delegates to) the original service. - * - * You can find out more about using decorators in the {@link guide/decorators} guide. - * - * @param {string} name The name of the service to decorate. - * @param {Function|Array.} decorator This function will be invoked when the service needs to be - * provided and should return the decorated service instance. The function is called using - * the {@link auto.$injector#invoke injector.invoke} method and is therefore fully injectable. - * Local injection arguments: - * - * * `$delegate` - The original service instance, which can be replaced, monkey patched, configured, - * decorated or delegated to. - * - * @example - * Here we decorate the {@link ng.$log $log} service to convert warnings to errors by intercepting - * calls to {@link ng.$log#error $log.warn()}. - * ```js - * $provide.decorator('$log', ['$delegate', function($delegate) { - * $delegate.warn = $delegate.error; - * return $delegate; - * }]); - * ``` - */ - - -function createInjector(modulesToLoad, strictDi) { - strictDi = (strictDi === true); - var INSTANTIATING = {}, - providerSuffix = 'Provider', - path = [], - loadedModules = new NgMap(), - providerCache = { - $provide: { - provider: supportObject(provider), - factory: supportObject(factory), - service: supportObject(service), - value: supportObject(value), - constant: supportObject(constant), - decorator: decorator - } - }, - providerInjector = (providerCache.$injector = - createInternalInjector(providerCache, function(serviceName, caller) { - if (angular.isString(caller)) { - path.push(caller); - } - throw $injectorMinErr('unpr', 'Unknown provider: {0}', path.join(' <- ')); - })), - instanceCache = {}, - protoInstanceInjector = - createInternalInjector(instanceCache, function(serviceName, caller) { - var provider = providerInjector.get(serviceName + providerSuffix, caller); - return instanceInjector.invoke( - provider.$get, provider, undefined, serviceName); - }), - instanceInjector = protoInstanceInjector; - - providerCache['$injector' + providerSuffix] = { $get: valueFn(protoInstanceInjector) }; - instanceInjector.modules = providerInjector.modules = createMap(); - var runBlocks = loadModules(modulesToLoad); - instanceInjector = protoInstanceInjector.get('$injector'); - instanceInjector.strictDi = strictDi; - forEach(runBlocks, function(fn) { if (fn) instanceInjector.invoke(fn); }); - - instanceInjector.loadNewModules = function(mods) { - forEach(loadModules(mods), function(fn) { if (fn) instanceInjector.invoke(fn); }); - }; - - - return instanceInjector; - - //////////////////////////////////// - // $provider - //////////////////////////////////// - - function supportObject(delegate) { - return function(key, value) { - if (isObject(key)) { - forEach(key, reverseParams(delegate)); - } else { - return delegate(key, value); - } - }; - } - - function provider(name, provider_) { - assertNotHasOwnProperty(name, 'service'); - if (isFunction(provider_) || isArray(provider_)) { - provider_ = providerInjector.instantiate(provider_); - } - if (!provider_.$get) { - throw $injectorMinErr('pget', 'Provider \'{0}\' must define $get factory method.', name); - } - return (providerCache[name + providerSuffix] = provider_); - } - - function enforceReturnValue(name, factory) { - return /** @this */ function enforcedReturnValue() { - var result = instanceInjector.invoke(factory, this); - if (isUndefined(result)) { - throw $injectorMinErr('undef', 'Provider \'{0}\' must return a value from $get factory method.', name); - } - return result; - }; - } - - function factory(name, factoryFn, enforce) { - return provider(name, { - $get: enforce !== false ? enforceReturnValue(name, factoryFn) : factoryFn - }); - } - - function service(name, constructor) { - return factory(name, ['$injector', function($injector) { - return $injector.instantiate(constructor); - }]); - } - - function value(name, val) { return factory(name, valueFn(val), false); } - - function constant(name, value) { - assertNotHasOwnProperty(name, 'constant'); - providerCache[name] = value; - instanceCache[name] = value; - } - - function decorator(serviceName, decorFn) { - var origProvider = providerInjector.get(serviceName + providerSuffix), - orig$get = origProvider.$get; - - origProvider.$get = function() { - var origInstance = instanceInjector.invoke(orig$get, origProvider); - return instanceInjector.invoke(decorFn, null, {$delegate: origInstance}); - }; - } - - //////////////////////////////////// - // Module Loading - //////////////////////////////////// - function loadModules(modulesToLoad) { - assertArg(isUndefined(modulesToLoad) || isArray(modulesToLoad), 'modulesToLoad', 'not an array'); - var runBlocks = [], moduleFn; - forEach(modulesToLoad, function(module) { - if (loadedModules.get(module)) return; - loadedModules.set(module, true); - - function runInvokeQueue(queue) { - var i, ii; - for (i = 0, ii = queue.length; i < ii; i++) { - var invokeArgs = queue[i], - provider = providerInjector.get(invokeArgs[0]); - - provider[invokeArgs[1]].apply(provider, invokeArgs[2]); - } - } - - try { - if (isString(module)) { - moduleFn = angularModule(module); - instanceInjector.modules[module] = moduleFn; - runBlocks = runBlocks.concat(loadModules(moduleFn.requires)).concat(moduleFn._runBlocks); - runInvokeQueue(moduleFn._invokeQueue); - runInvokeQueue(moduleFn._configBlocks); - } else if (isFunction(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else if (isArray(module)) { - runBlocks.push(providerInjector.invoke(module)); - } else { - assertArgFn(module, 'module'); - } - } catch (e) { - if (isArray(module)) { - module = module[module.length - 1]; - } - if (e.message && e.stack && e.stack.indexOf(e.message) === -1) { - // Safari & FF's stack traces don't contain error.message content - // unlike those of Chrome and IE - // So if stack doesn't contain message, we create a new string that contains both. - // Since error.stack is read-only in Safari, I'm overriding e and not e.stack here. - // eslint-disable-next-line no-ex-assign - e = e.message + '\n' + e.stack; - } - throw $injectorMinErr('modulerr', 'Failed to instantiate module {0} due to:\n{1}', - module, e.stack || e.message || e); - } - }); - return runBlocks; - } - - //////////////////////////////////// - // internal Injector - //////////////////////////////////// - - function createInternalInjector(cache, factory) { - - function getService(serviceName, caller) { - if (cache.hasOwnProperty(serviceName)) { - if (cache[serviceName] === INSTANTIATING) { - throw $injectorMinErr('cdep', 'Circular dependency found: {0}', - serviceName + ' <- ' + path.join(' <- ')); - } - return cache[serviceName]; - } else { - try { - path.unshift(serviceName); - cache[serviceName] = INSTANTIATING; - cache[serviceName] = factory(serviceName, caller); - return cache[serviceName]; - } catch (err) { - if (cache[serviceName] === INSTANTIATING) { - delete cache[serviceName]; - } - throw err; - } finally { - path.shift(); - } - } - } - - - function injectionArgs(fn, locals, serviceName) { - var args = [], - $inject = createInjector.$$annotate(fn, strictDi, serviceName); - - for (var i = 0, length = $inject.length; i < length; i++) { - var key = $inject[i]; - if (typeof key !== 'string') { - throw $injectorMinErr('itkn', - 'Incorrect injection token! Expected service name as string, got {0}', key); - } - args.push(locals && locals.hasOwnProperty(key) ? locals[key] : - getService(key, serviceName)); - } - return args; - } - - function isClass(func) { - // Support: IE 9-11 only - // IE 9-11 do not support classes and IE9 leaks with the code below. - if (msie || typeof func !== 'function') { - return false; - } - var result = func.$$ngIsClass; - if (!isBoolean(result)) { - result = func.$$ngIsClass = /^class\b/.test(stringifyFn(func)); - } - return result; - } - - function invoke(fn, self, locals, serviceName) { - if (typeof locals === 'string') { - serviceName = locals; - locals = null; - } - - var args = injectionArgs(fn, locals, serviceName); - if (isArray(fn)) { - fn = fn[fn.length - 1]; - } - - if (!isClass(fn)) { - // http://jsperf.com/angularjs-invoke-apply-vs-switch - // #5388 - return fn.apply(self, args); - } else { - args.unshift(null); - return new (Function.prototype.bind.apply(fn, args))(); - } - } - - - function instantiate(Type, locals, serviceName) { - // Check if Type is annotated and use just the given function at n-1 as parameter - // e.g. someModule.factory('greeter', ['$window', function(renamed$window) {}]); - var ctor = (isArray(Type) ? Type[Type.length - 1] : Type); - var args = injectionArgs(Type, locals, serviceName); - // Empty object at position 0 is ignored for invocation with `new`, but required. - args.unshift(null); - return new (Function.prototype.bind.apply(ctor, args))(); - } - - - return { - invoke: invoke, - instantiate: instantiate, - get: getService, - annotate: createInjector.$$annotate, - has: function(name) { - return providerCache.hasOwnProperty(name + providerSuffix) || cache.hasOwnProperty(name); - } - }; - } -} - -createInjector.$$annotate = annotate; - -/** - * @ngdoc provider - * @name $anchorScrollProvider - * @this - * - * @description - * Use `$anchorScrollProvider` to disable automatic scrolling whenever - * {@link ng.$location#hash $location.hash()} changes. - */ -function $AnchorScrollProvider() { - - var autoScrollingEnabled = true; - - /** - * @ngdoc method - * @name $anchorScrollProvider#disableAutoScrolling - * - * @description - * By default, {@link ng.$anchorScroll $anchorScroll()} will automatically detect changes to - * {@link ng.$location#hash $location.hash()} and scroll to the element matching the new hash.
      - * Use this method to disable automatic scrolling. - * - * If automatic scrolling is disabled, one must explicitly call - * {@link ng.$anchorScroll $anchorScroll()} in order to scroll to the element related to the - * current hash. - */ - this.disableAutoScrolling = function() { - autoScrollingEnabled = false; - }; - - /** - * @ngdoc service - * @name $anchorScroll - * @kind function - * @requires $window - * @requires $location - * @requires $rootScope - * - * @description - * When called, it scrolls to the element related to the specified `hash` or (if omitted) to the - * current value of {@link ng.$location#hash $location.hash()}, according to the rules specified - * in the - * [HTML5 spec](http://www.w3.org/html/wg/drafts/html/master/browsers.html#an-indicated-part-of-the-document). - * - * It also watches the {@link ng.$location#hash $location.hash()} and automatically scrolls to - * match any anchor whenever it changes. This can be disabled by calling - * {@link ng.$anchorScrollProvider#disableAutoScrolling $anchorScrollProvider.disableAutoScrolling()}. - * - * Additionally, you can use its {@link ng.$anchorScroll#yOffset yOffset} property to specify a - * vertical scroll-offset (either fixed or dynamic). - * - * @param {string=} hash The hash specifying the element to scroll to. If omitted, the value of - * {@link ng.$location#hash $location.hash()} will be used. - * - * @property {(number|function|jqLite)} yOffset - * If set, specifies a vertical scroll-offset. This is often useful when there are fixed - * positioned elements at the top of the page, such as navbars, headers etc. - * - * `yOffset` can be specified in various ways: - * - **number**: A fixed number of pixels to be used as offset.

      - * - **function**: A getter function called everytime `$anchorScroll()` is executed. Must return - * a number representing the offset (in pixels).

      - * - **jqLite**: A jqLite/jQuery element to be used for specifying the offset. The distance from - * the top of the page to the element's bottom will be used as offset.
      - * **Note**: The element will be taken into account only as long as its `position` is set to - * `fixed`. This option is useful, when dealing with responsive navbars/headers that adjust - * their height and/or positioning according to the viewport's size. - * - *
      - *
      - * In order for `yOffset` to work properly, scrolling should take place on the document's root and - * not some child element. - *
      - * - * @example - - -
      - Go to bottom - You're at the bottom! -
      -
      - - angular.module('anchorScrollExample', []) - .controller('ScrollController', ['$scope', '$location', '$anchorScroll', - function($scope, $location, $anchorScroll) { - $scope.gotoBottom = function() { - // set the location.hash to the id of - // the element you wish to scroll to. - $location.hash('bottom'); - - // call $anchorScroll() - $anchorScroll(); - }; - }]); - - - #scrollArea { - height: 280px; - overflow: auto; - } - - #bottom { - display: block; - margin-top: 2000px; - } - -
      - * - *
      - * The example below illustrates the use of a vertical scroll-offset (specified as a fixed value). - * See {@link ng.$anchorScroll#yOffset $anchorScroll.yOffset} for more details. - * - * @example - - - -
      - Anchor {{x}} of 5 -
      -
      - - angular.module('anchorScrollOffsetExample', []) - .run(['$anchorScroll', function($anchorScroll) { - $anchorScroll.yOffset = 50; // always scroll by 50 extra pixels - }]) - .controller('headerCtrl', ['$anchorScroll', '$location', '$scope', - function($anchorScroll, $location, $scope) { - $scope.gotoAnchor = function(x) { - var newHash = 'anchor' + x; - if ($location.hash() !== newHash) { - // set the $location.hash to `newHash` and - // $anchorScroll will automatically scroll to it - $location.hash('anchor' + x); - } else { - // call $anchorScroll() explicitly, - // since $location.hash hasn't changed - $anchorScroll(); - } - }; - } - ]); - - - body { - padding-top: 50px; - } - - .anchor { - border: 2px dashed DarkOrchid; - padding: 10px 10px 200px 10px; - } - - .fixed-header { - background-color: rgba(0, 0, 0, 0.2); - height: 50px; - position: fixed; - top: 0; left: 0; right: 0; - } - - .fixed-header > a { - display: inline-block; - margin: 5px 15px; - } - -
      - */ - this.$get = ['$window', '$location', '$rootScope', function($window, $location, $rootScope) { - var document = $window.document; - - // Helper function to get first anchor from a NodeList - // (using `Array#some()` instead of `angular#forEach()` since it's more performant - // and working in all supported browsers.) - function getFirstAnchor(list) { - var result = null; - Array.prototype.some.call(list, function(element) { - if (nodeName_(element) === 'a') { - result = element; - return true; - } - }); - return result; - } - - function getYOffset() { - - var offset = scroll.yOffset; - - if (isFunction(offset)) { - offset = offset(); - } else if (isElement(offset)) { - var elem = offset[0]; - var style = $window.getComputedStyle(elem); - if (style.position !== 'fixed') { - offset = 0; - } else { - offset = elem.getBoundingClientRect().bottom; - } - } else if (!isNumber(offset)) { - offset = 0; - } - - return offset; - } - - function scrollTo(elem) { - if (elem) { - elem.scrollIntoView(); - - var offset = getYOffset(); - - if (offset) { - // `offset` is the number of pixels we should scroll UP in order to align `elem` properly. - // This is true ONLY if the call to `elem.scrollIntoView()` initially aligns `elem` at the - // top of the viewport. - // - // IF the number of pixels from the top of `elem` to the end of the page's content is less - // than the height of the viewport, then `elem.scrollIntoView()` will align the `elem` some - // way down the page. - // - // This is often the case for elements near the bottom of the page. - // - // In such cases we do not need to scroll the whole `offset` up, just the difference between - // the top of the element and the offset, which is enough to align the top of `elem` at the - // desired position. - var elemTop = elem.getBoundingClientRect().top; - $window.scrollBy(0, elemTop - offset); - } - } else { - $window.scrollTo(0, 0); - } - } - - function scroll(hash) { - // Allow numeric hashes - hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() : $location.hash(); - var elm; - - // empty hash, scroll to the top of the page - if (!hash) scrollTo(null); - - // element with given id - else if ((elm = document.getElementById(hash))) scrollTo(elm); - - // first anchor with given name :-D - else if ((elm = getFirstAnchor(document.getElementsByName(hash)))) scrollTo(elm); - - // no element and hash === 'top', scroll to the top of the page - else if (hash === 'top') scrollTo(null); - } - - // does not scroll when user clicks on anchor link that is currently on - // (no url change, no $location.hash() change), browser native does scroll - if (autoScrollingEnabled) { - $rootScope.$watch(function autoScrollWatch() {return $location.hash();}, - function autoScrollWatchAction(newVal, oldVal) { - // skip the initial scroll if $location.hash is empty - if (newVal === oldVal && newVal === '') return; - - jqLiteDocumentLoaded(function() { - $rootScope.$evalAsync(scroll); - }); - }); - } - - return scroll; - }]; -} - -var $animateMinErr = minErr('$animate'); -var ELEMENT_NODE = 1; -var NG_ANIMATE_CLASSNAME = 'ng-animate'; - -function mergeClasses(a,b) { - if (!a && !b) return ''; - if (!a) return b; - if (!b) return a; - if (isArray(a)) a = a.join(' '); - if (isArray(b)) b = b.join(' '); - return a + ' ' + b; -} - -function extractElementNode(element) { - for (var i = 0; i < element.length; i++) { - var elm = element[i]; - if (elm.nodeType === ELEMENT_NODE) { - return elm; - } - } -} - -function splitClasses(classes) { - if (isString(classes)) { - classes = classes.split(' '); - } - - // Use createMap() to prevent class assumptions involving property names in - // Object.prototype - var obj = createMap(); - forEach(classes, function(klass) { - // sometimes the split leaves empty string values - // incase extra spaces were applied to the options - if (klass.length) { - obj[klass] = true; - } - }); - return obj; -} - -// if any other type of options value besides an Object value is -// passed into the $animate.method() animation then this helper code -// will be run which will ignore it. While this patch is not the -// greatest solution to this, a lot of existing plugins depend on -// $animate to either call the callback (< 1.2) or return a promise -// that can be changed. This helper function ensures that the options -// are wiped clean incase a callback function is provided. -function prepareAnimateOptions(options) { - return isObject(options) - ? options - : {}; -} - -var $$CoreAnimateJsProvider = /** @this */ function() { - this.$get = noop; -}; - -// this is prefixed with Core since it conflicts with -// the animateQueueProvider defined in ngAnimate/animateQueue.js -var $$CoreAnimateQueueProvider = /** @this */ function() { - var postDigestQueue = new NgMap(); - var postDigestElements = []; - - this.$get = ['$$AnimateRunner', '$rootScope', - function($$AnimateRunner, $rootScope) { - return { - enabled: noop, - on: noop, - off: noop, - pin: noop, - - push: function(element, event, options, domOperation) { - if (domOperation) { - domOperation(); - } - - options = options || {}; - if (options.from) { - element.css(options.from); - } - if (options.to) { - element.css(options.to); - } - - if (options.addClass || options.removeClass) { - addRemoveClassesPostDigest(element, options.addClass, options.removeClass); - } - - var runner = new $$AnimateRunner(); - - // since there are no animations to run the runner needs to be - // notified that the animation call is complete. - runner.complete(); - return runner; - } - }; - - - function updateData(data, classes, value) { - var changed = false; - if (classes) { - classes = isString(classes) ? classes.split(' ') : - isArray(classes) ? classes : []; - forEach(classes, function(className) { - if (className) { - changed = true; - data[className] = value; - } - }); - } - return changed; - } - - function handleCSSClassChanges() { - forEach(postDigestElements, function(element) { - var data = postDigestQueue.get(element); - if (data) { - var existing = splitClasses(element.attr('class')); - var toAdd = ''; - var toRemove = ''; - forEach(data, function(status, className) { - var hasClass = !!existing[className]; - if (status !== hasClass) { - if (status) { - toAdd += (toAdd.length ? ' ' : '') + className; - } else { - toRemove += (toRemove.length ? ' ' : '') + className; - } - } - }); - - forEach(element, function(elm) { - if (toAdd) { - jqLiteAddClass(elm, toAdd); - } - if (toRemove) { - jqLiteRemoveClass(elm, toRemove); - } - }); - postDigestQueue.delete(element); - } - }); - postDigestElements.length = 0; - } - - - function addRemoveClassesPostDigest(element, add, remove) { - var data = postDigestQueue.get(element) || {}; - - var classesAdded = updateData(data, add, true); - var classesRemoved = updateData(data, remove, false); - - if (classesAdded || classesRemoved) { - - postDigestQueue.set(element, data); - postDigestElements.push(element); - - if (postDigestElements.length === 1) { - $rootScope.$$postDigest(handleCSSClassChanges); - } - } - } - }]; -}; - -/** - * @ngdoc provider - * @name $animateProvider - * - * @description - * Default implementation of $animate that doesn't perform any animations, instead just - * synchronously performs DOM updates and resolves the returned runner promise. - * - * In order to enable animations the `ngAnimate` module has to be loaded. - * - * To see the functional implementation check out `src/ngAnimate/animate.js`. - */ -var $AnimateProvider = ['$provide', /** @this */ function($provide) { - var provider = this; - var classNameFilter = null; - var customFilter = null; - - this.$$registeredAnimations = Object.create(null); - - /** - * @ngdoc method - * @name $animateProvider#register - * - * @description - * Registers a new injectable animation factory function. The factory function produces the - * animation object which contains callback functions for each event that is expected to be - * animated. - * - * * `eventFn`: `function(element, ... , doneFunction, options)` - * The element to animate, the `doneFunction` and the options fed into the animation. Depending - * on the type of animation additional arguments will be injected into the animation function. The - * list below explains the function signatures for the different animation methods: - * - * - setClass: function(element, addedClasses, removedClasses, doneFunction, options) - * - addClass: function(element, addedClasses, doneFunction, options) - * - removeClass: function(element, removedClasses, doneFunction, options) - * - enter, leave, move: function(element, doneFunction, options) - * - animate: function(element, fromStyles, toStyles, doneFunction, options) - * - * Make sure to trigger the `doneFunction` once the animation is fully complete. - * - * ```js - * return { - * //enter, leave, move signature - * eventFn : function(element, done, options) { - * //code to run the animation - * //once complete, then run done() - * return function endFunction(wasCancelled) { - * //code to cancel the animation - * } - * } - * } - * ``` - * - * @param {string} name The name of the animation (this is what the class-based CSS value will be compared to). - * @param {Function} factory The factory function that will be executed to return the animation - * object. - */ - this.register = function(name, factory) { - if (name && name.charAt(0) !== '.') { - throw $animateMinErr('notcsel', 'Expecting class selector starting with \'.\' got \'{0}\'.', name); - } - - var key = name + '-animation'; - provider.$$registeredAnimations[name.substr(1)] = key; - $provide.factory(key, factory); - }; - - /** - * @ngdoc method - * @name $animateProvider#customFilter - * - * @description - * Sets and/or returns the custom filter function that is used to "filter" animations, i.e. - * determine if an animation is allowed or not. When no filter is specified (the default), no - * animation will be blocked. Setting the `customFilter` value will only allow animations for - * which the filter function's return value is truthy. - * - * This allows to easily create arbitrarily complex rules for filtering animations, such as - * allowing specific events only, or enabling animations on specific subtrees of the DOM, etc. - * Filtering animations can also boost performance for low-powered devices, as well as - * applications containing a lot of structural operations. - * - *
      - * **Best Practice:** - * Keep the filtering function as lean as possible, because it will be called for each DOM - * action (e.g. insertion, removal, class change) performed by "animation-aware" directives. - * See {@link guide/animations#which-directives-support-animations- here} for a list of built-in - * directives that support animations. - * Performing computationally expensive or time-consuming operations on each call of the - * filtering function can make your animations sluggish. - *
      - * - * **Note:** If present, `customFilter` will be checked before - * {@link $animateProvider#classNameFilter classNameFilter}. - * - * @param {Function=} filterFn - The filter function which will be used to filter all animations. - * If a falsy value is returned, no animation will be performed. The function will be called - * with the following arguments: - * - **node** `{DOMElement}` - The DOM element to be animated. - * - **event** `{String}` - The name of the animation event (e.g. `enter`, `leave`, `addClass` - * etc). - * - **options** `{Object}` - A collection of options/styles used for the animation. - * @return {Function} The current filter function or `null` if there is none set. - */ - this.customFilter = function(filterFn) { - if (arguments.length === 1) { - customFilter = isFunction(filterFn) ? filterFn : null; - } - - return customFilter; - }; - - /** - * @ngdoc method - * @name $animateProvider#classNameFilter - * - * @description - * Sets and/or returns the CSS class regular expression that is checked when performing - * an animation. Upon bootstrap the classNameFilter value is not set at all and will - * therefore enable $animate to attempt to perform an animation on any element that is triggered. - * When setting the `classNameFilter` value, animations will only be performed on elements - * that successfully match the filter expression. This in turn can boost performance - * for low-powered devices as well as applications containing a lot of structural operations. - * - * **Note:** If present, `classNameFilter` will be checked after - * {@link $animateProvider#customFilter customFilter}. If `customFilter` is present and returns - * false, `classNameFilter` will not be checked. - * - * @param {RegExp=} expression The className expression which will be checked against all animations - * @return {RegExp} The current CSS className expression value. If null then there is no expression value - */ - this.classNameFilter = function(expression) { - if (arguments.length === 1) { - classNameFilter = (expression instanceof RegExp) ? expression : null; - if (classNameFilter) { - var reservedRegex = new RegExp('[(\\s|\\/)]' + NG_ANIMATE_CLASSNAME + '[(\\s|\\/)]'); - if (reservedRegex.test(classNameFilter.toString())) { - classNameFilter = null; - throw $animateMinErr('nongcls', '$animateProvider.classNameFilter(regex) prohibits accepting a regex value which matches/contains the "{0}" CSS class.', NG_ANIMATE_CLASSNAME); - } - } - } - return classNameFilter; - }; - - this.$get = ['$$animateQueue', function($$animateQueue) { - function domInsert(element, parentElement, afterElement) { - // if for some reason the previous element was removed - // from the dom sometime before this code runs then let's - // just stick to using the parent element as the anchor - if (afterElement) { - var afterNode = extractElementNode(afterElement); - if (afterNode && !afterNode.parentNode && !afterNode.previousElementSibling) { - afterElement = null; - } - } - if (afterElement) { - afterElement.after(element); - } else { - parentElement.prepend(element); - } - } - - /** - * @ngdoc service - * @name $animate - * @description The $animate service exposes a series of DOM utility methods that provide support - * for animation hooks. The default behavior is the application of DOM operations, however, - * when an animation is detected (and animations are enabled), $animate will do the heavy lifting - * to ensure that animation runs with the triggered DOM operation. - * - * By default $animate doesn't trigger any animations. This is because the `ngAnimate` module isn't - * included and only when it is active then the animation hooks that `$animate` triggers will be - * functional. Once active then all structural `ng-` directives will trigger animations as they perform - * their DOM-related operations (enter, leave and move). Other directives such as `ngClass`, - * `ngShow`, `ngHide` and `ngMessages` also provide support for animations. - * - * It is recommended that the`$animate` service is always used when executing DOM-related procedures within directives. - * - * To learn more about enabling animation support, click here to visit the - * {@link ngAnimate ngAnimate module page}. - */ - return { - // we don't call it directly since non-existant arguments may - // be interpreted as null within the sub enabled function - - /** - * - * @ngdoc method - * @name $animate#on - * @kind function - * @description Sets up an event listener to fire whenever the animation event (enter, leave, move, etc...) - * has fired on the given element or among any of its children. Once the listener is fired, the provided callback - * is fired with the following params: - * - * ```js - * $animate.on('enter', container, - * function callback(element, phase) { - * // cool we detected an enter animation within the container - * } - * ); - * ``` - * - *
      - * **Note**: Generally, the events that are fired correspond 1:1 to `$animate` method names, - * e.g. {@link ng.$animate#addClass addClass()} will fire `addClass`, and {@link ng.ngClass} - * will fire `addClass` if classes are added, and `removeClass` if classes are removed. - * However, there are two exceptions: - * - *
        - *
      • if both an {@link ng.$animate#addClass addClass()} and a - * {@link ng.$animate#removeClass removeClass()} action are performed during the same - * animation, the event fired will be `setClass`. This is true even for `ngClass`.
      • - *
      • an {@link ng.$animate#animate animate()} call that adds and removes classes will fire - * the `setClass` event, but if it either removes or adds classes, - * it will fire `animate` instead.
      • - *
      - * - *
      - * - * @param {string} event the animation event that will be captured (e.g. enter, leave, move, addClass, removeClass, etc...) - * @param {DOMElement} container the container element that will capture each of the animation events that are fired on itself - * as well as among its children - * @param {Function} callback the callback function that will be fired when the listener is triggered. - * - * The arguments present in the callback function are: - * * `element` - The captured DOM element that the animation was fired on. - * * `phase` - The phase of the animation. The two possible phases are **start** (when the animation starts) and **close** (when it ends). - * * `data` - an object with these properties: - * * addClass - `{string|null}` - space-separated CSS classes to add to the element - * * removeClass - `{string|null}` - space-separated CSS classes to remove from the element - * * from - `{Object|null}` - CSS properties & values at the beginning of the animation - * * to - `{Object|null}` - CSS properties & values at the end of the animation - * - * Note that the callback does not trigger a scope digest. Wrap your call into a - * {@link $rootScope.Scope#$apply scope.$apply} to propagate changes to the scope. - */ - on: $$animateQueue.on, - - /** - * - * @ngdoc method - * @name $animate#off - * @kind function - * @description Deregisters an event listener based on the event which has been associated with the provided element. This method - * can be used in three different ways depending on the arguments: - * - * ```js - * // remove all the animation event listeners listening for `enter` - * $animate.off('enter'); - * - * // remove listeners for all animation events from the container element - * $animate.off(container); - * - * // remove all the animation event listeners listening for `enter` on the given element and its children - * $animate.off('enter', container); - * - * // remove the event listener function provided by `callback` that is set - * // to listen for `enter` on the given `container` as well as its children - * $animate.off('enter', container, callback); - * ``` - * - * @param {string|DOMElement} event|container the animation event (e.g. enter, leave, move, - * addClass, removeClass, etc...), or the container element. If it is the element, all other - * arguments are ignored. - * @param {DOMElement=} container the container element the event listener was placed on - * @param {Function=} callback the callback function that was registered as the listener - */ - off: $$animateQueue.off, - - /** - * @ngdoc method - * @name $animate#pin - * @kind function - * @description Associates the provided element with a host parent element to allow the element to be animated even if it exists - * outside of the DOM structure of the AngularJS application. By doing so, any animation triggered via `$animate` can be issued on the - * element despite being outside the realm of the application or within another application. Say for example if the application - * was bootstrapped on an element that is somewhere inside of the `` tag, but we wanted to allow for an element to be situated - * as a direct child of `document.body`, then this can be achieved by pinning the element via `$animate.pin(element)`. Keep in mind - * that calling `$animate.pin(element, parentElement)` will not actually insert into the DOM anywhere; it will just create the association. - * - * Note that this feature is only active when the `ngAnimate` module is used. - * - * @param {DOMElement} element the external element that will be pinned - * @param {DOMElement} parentElement the host parent element that will be associated with the external element - */ - pin: $$animateQueue.pin, - - /** - * - * @ngdoc method - * @name $animate#enabled - * @kind function - * @description Used to get and set whether animations are enabled or not on the entire application or on an element and its children. This - * function can be called in four ways: - * - * ```js - * // returns true or false - * $animate.enabled(); - * - * // changes the enabled state for all animations - * $animate.enabled(false); - * $animate.enabled(true); - * - * // returns true or false if animations are enabled for an element - * $animate.enabled(element); - * - * // changes the enabled state for an element and its children - * $animate.enabled(element, true); - * $animate.enabled(element, false); - * ``` - * - * @param {DOMElement=} element the element that will be considered for checking/setting the enabled state - * @param {boolean=} enabled whether or not the animations will be enabled for the element - * - * @return {boolean} whether or not animations are enabled - */ - enabled: $$animateQueue.enabled, - - /** - * @ngdoc method - * @name $animate#cancel - * @kind function - * @description Cancels the provided animation and applies the end state of the animation. - * Note that this does not cancel the underlying operation, e.g. the setting of classes or - * adding the element to the DOM. - * - * @param {animationRunner} animationRunner An animation runner returned by an $animate function. - * - * @example - - - angular.module('animationExample', ['ngAnimate']).component('cancelExample', { - templateUrl: 'template.html', - controller: function($element, $animate) { - this.runner = null; - - this.addClass = function() { - this.runner = $animate.addClass($element.find('div'), 'red'); - var ctrl = this; - this.runner.finally(function() { - ctrl.runner = null; - }); - }; - - this.removeClass = function() { - this.runner = $animate.removeClass($element.find('div'), 'red'); - var ctrl = this; - this.runner.finally(function() { - ctrl.runner = null; - }); - }; - - this.cancel = function() { - $animate.cancel(this.runner); - }; - } - }); - - -

      - - -
      - -
      -

      CSS-Animated Text
      -

      -
      - - - - - .red-add, .red-remove { - transition: all 4s cubic-bezier(0.250, 0.460, 0.450, 0.940); - } - - .red, - .red-add.red-add-active { - color: #FF0000; - font-size: 40px; - } - - .red-remove.red-remove-active { - font-size: 10px; - color: black; - } - - -
      - */ - cancel: function(runner) { - if (runner.cancel) { - runner.cancel(); - } - }, - - /** - * - * @ngdoc method - * @name $animate#enter - * @kind function - * @description Inserts the element into the DOM either after the `after` element (if provided) or - * as the first child within the `parent` element and then triggers an animation. - * A promise is returned that will be resolved during the next digest once the animation - * has completed. - * - * @param {DOMElement} element the element which will be inserted into the DOM - * @param {DOMElement} parent the parent element which will append the element as - * a child (so long as the after element is not present) - * @param {DOMElement=} after the sibling element after which the element will be appended - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - enter: function(element, parent, after, options) { - parent = parent && jqLite(parent); - after = after && jqLite(after); - parent = parent || after.parent(); - domInsert(element, parent, after); - return $$animateQueue.push(element, 'enter', prepareAnimateOptions(options)); - }, - - /** - * - * @ngdoc method - * @name $animate#move - * @kind function - * @description Inserts (moves) the element into its new position in the DOM either after - * the `after` element (if provided) or as the first child within the `parent` element - * and then triggers an animation. A promise is returned that will be resolved - * during the next digest once the animation has completed. - * - * @param {DOMElement} element the element which will be moved into the new DOM position - * @param {DOMElement} parent the parent element which will append the element as - * a child (so long as the after element is not present) - * @param {DOMElement=} after the sibling element after which the element will be appended - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - move: function(element, parent, after, options) { - parent = parent && jqLite(parent); - after = after && jqLite(after); - parent = parent || after.parent(); - domInsert(element, parent, after); - return $$animateQueue.push(element, 'move', prepareAnimateOptions(options)); - }, - - /** - * @ngdoc method - * @name $animate#leave - * @kind function - * @description Triggers an animation and then removes the element from the DOM. - * When the function is called a promise is returned that will be resolved during the next - * digest once the animation has completed. - * - * @param {DOMElement} element the element which will be removed from the DOM - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - leave: function(element, options) { - return $$animateQueue.push(element, 'leave', prepareAnimateOptions(options), function() { - element.remove(); - }); - }, - - /** - * @ngdoc method - * @name $animate#addClass - * @kind function - * - * @description Triggers an addClass animation surrounding the addition of the provided CSS class(es). Upon - * execution, the addClass operation will only be handled after the next digest and it will not trigger an - * animation if element already contains the CSS class or if the class is removed at a later step. - * Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} className the CSS class(es) that will be added (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} animationRunner the animation runner - */ - addClass: function(element, className, options) { - options = prepareAnimateOptions(options); - options.addClass = mergeClasses(options.addclass, className); - return $$animateQueue.push(element, 'addClass', options); - }, - - /** - * @ngdoc method - * @name $animate#removeClass - * @kind function - * - * @description Triggers a removeClass animation surrounding the removal of the provided CSS class(es). Upon - * execution, the removeClass operation will only be handled after the next digest and it will not trigger an - * animation if element does not contain the CSS class or if the class is added at a later step. - * Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} className the CSS class(es) that will be removed (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - removeClass: function(element, className, options) { - options = prepareAnimateOptions(options); - options.removeClass = mergeClasses(options.removeClass, className); - return $$animateQueue.push(element, 'removeClass', options); - }, - - /** - * @ngdoc method - * @name $animate#setClass - * @kind function - * - * @description Performs both the addition and removal of a CSS classes on an element and (during the process) - * triggers an animation surrounding the class addition/removal. Much like `$animate.addClass` and - * `$animate.removeClass`, `setClass` will only evaluate the classes being added/removed once a digest has - * passed. Note that class-based animations are treated differently compared to structural animations - * (like enter, move and leave) since the CSS classes may be added/removed at different points - * depending if CSS or JavaScript animations are used. - * - * @param {DOMElement} element the element which the CSS classes will be applied to - * @param {string} add the CSS class(es) that will be added (multiple classes are separated via spaces) - * @param {string} remove the CSS class(es) that will be removed (multiple classes are separated via spaces) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - setClass: function(element, add, remove, options) { - options = prepareAnimateOptions(options); - options.addClass = mergeClasses(options.addClass, add); - options.removeClass = mergeClasses(options.removeClass, remove); - return $$animateQueue.push(element, 'setClass', options); - }, - - /** - * @ngdoc method - * @name $animate#animate - * @kind function - * - * @description Performs an inline animation on the element which applies the provided to and from CSS styles to the element. - * If any detected CSS transition, keyframe or JavaScript matches the provided className value, then the animation will take - * on the provided styles. For example, if a transition animation is set for the given className, then the provided `from` and - * `to` styles will be applied alongside the given transition. If the CSS style provided in `from` does not have a corresponding - * style in `to`, the style in `from` is applied immediately, and no animation is run. - * If a JavaScript animation is detected then the provided styles will be given in as function parameters into the `animate` - * method (or as part of the `options` parameter): - * - * ```js - * ngModule.animation('.my-inline-animation', function() { - * return { - * animate : function(element, from, to, done, options) { - * //animation - * done(); - * } - * } - * }); - * ``` - * - * @param {DOMElement} element the element which the CSS styles will be applied to - * @param {object} from the from (starting) CSS styles that will be applied to the element and across the animation. - * @param {object} to the to (destination) CSS styles that will be applied to the element and across the animation. - * @param {string=} className an optional CSS class that will be applied to the element for the duration of the animation. If - * this value is left as empty then a CSS class of `ng-inline-animate` will be applied to the element. - * (Note that if no animation is detected then this value will not be applied to the element.) - * @param {object=} options an optional collection of options/styles that will be applied to the element. - * The object can have the following properties: - * - * - **addClass** - `{string}` - space-separated CSS classes to add to element - * - **from** - `{Object}` - CSS properties & values at the beginning of animation. Must have matching `to` - * - **removeClass** - `{string}` - space-separated CSS classes to remove from element - * - **to** - `{Object}` - CSS properties & values at end of animation. Must have matching `from` - * - * @return {Runner} the animation runner - */ - animate: function(element, from, to, className, options) { - options = prepareAnimateOptions(options); - options.from = options.from ? extend(options.from, from) : from; - options.to = options.to ? extend(options.to, to) : to; - - className = className || 'ng-inline-animate'; - options.tempClasses = mergeClasses(options.tempClasses, className); - return $$animateQueue.push(element, 'animate', options); - } - }; - }]; -}]; - -var $$AnimateAsyncRunFactoryProvider = /** @this */ function() { - this.$get = ['$$rAF', function($$rAF) { - var waitQueue = []; - - function waitForTick(fn) { - waitQueue.push(fn); - if (waitQueue.length > 1) return; - $$rAF(function() { - for (var i = 0; i < waitQueue.length; i++) { - waitQueue[i](); - } - waitQueue = []; - }); - } - - return function() { - var passed = false; - waitForTick(function() { - passed = true; - }); - return function(callback) { - if (passed) { - callback(); - } else { - waitForTick(callback); - } - }; - }; - }]; -}; - -var $$AnimateRunnerFactoryProvider = /** @this */ function() { - this.$get = ['$q', '$sniffer', '$$animateAsyncRun', '$$isDocumentHidden', '$timeout', - function($q, $sniffer, $$animateAsyncRun, $$isDocumentHidden, $timeout) { - - var INITIAL_STATE = 0; - var DONE_PENDING_STATE = 1; - var DONE_COMPLETE_STATE = 2; - - AnimateRunner.chain = function(chain, callback) { - var index = 0; - - next(); - function next() { - if (index === chain.length) { - callback(true); - return; - } - - chain[index](function(response) { - if (response === false) { - callback(false); - return; - } - index++; - next(); - }); - } - }; - - AnimateRunner.all = function(runners, callback) { - var count = 0; - var status = true; - forEach(runners, function(runner) { - runner.done(onProgress); - }); - - function onProgress(response) { - status = status && response; - if (++count === runners.length) { - callback(status); - } - } - }; - - function AnimateRunner(host) { - this.setHost(host); - - var rafTick = $$animateAsyncRun(); - var timeoutTick = function(fn) { - $timeout(fn, 0, false); - }; - - this._doneCallbacks = []; - this._tick = function(fn) { - if ($$isDocumentHidden()) { - timeoutTick(fn); - } else { - rafTick(fn); - } - }; - this._state = 0; - } - - AnimateRunner.prototype = { - setHost: function(host) { - this.host = host || {}; - }, - - done: function(fn) { - if (this._state === DONE_COMPLETE_STATE) { - fn(); - } else { - this._doneCallbacks.push(fn); - } - }, - - progress: noop, - - getPromise: function() { - if (!this.promise) { - var self = this; - this.promise = $q(function(resolve, reject) { - self.done(function(status) { - if (status === false) { - reject(); - } else { - resolve(); - } - }); - }); - } - return this.promise; - }, - - then: function(resolveHandler, rejectHandler) { - return this.getPromise().then(resolveHandler, rejectHandler); - }, - - 'catch': function(handler) { - return this.getPromise()['catch'](handler); - }, - - 'finally': function(handler) { - return this.getPromise()['finally'](handler); - }, - - pause: function() { - if (this.host.pause) { - this.host.pause(); - } - }, - - resume: function() { - if (this.host.resume) { - this.host.resume(); - } - }, - - end: function() { - if (this.host.end) { - this.host.end(); - } - this._resolve(true); - }, - - cancel: function() { - if (this.host.cancel) { - this.host.cancel(); - } - this._resolve(false); - }, - - complete: function(response) { - var self = this; - if (self._state === INITIAL_STATE) { - self._state = DONE_PENDING_STATE; - self._tick(function() { - self._resolve(response); - }); - } - }, - - _resolve: function(response) { - if (this._state !== DONE_COMPLETE_STATE) { - forEach(this._doneCallbacks, function(fn) { - fn(response); - }); - this._doneCallbacks.length = 0; - this._state = DONE_COMPLETE_STATE; - } - } - }; - - return AnimateRunner; - }]; -}; - -/* exported $CoreAnimateCssProvider */ - -/** - * @ngdoc service - * @name $animateCss - * @kind object - * @this - * - * @description - * This is the core version of `$animateCss`. By default, only when the `ngAnimate` is included, - * then the `$animateCss` service will actually perform animations. - * - * Click here {@link ngAnimate.$animateCss to read the documentation for $animateCss}. - */ -var $CoreAnimateCssProvider = function() { - this.$get = ['$$rAF', '$q', '$$AnimateRunner', function($$rAF, $q, $$AnimateRunner) { - - return function(element, initialOptions) { - // all of the animation functions should create - // a copy of the options data, however, if a - // parent service has already created a copy then - // we should stick to using that - var options = initialOptions || {}; - if (!options.$$prepared) { - options = copy(options); - } - - // there is no point in applying the styles since - // there is no animation that goes on at all in - // this version of $animateCss. - if (options.cleanupStyles) { - options.from = options.to = null; - } - - if (options.from) { - element.css(options.from); - options.from = null; - } - - var closed, runner = new $$AnimateRunner(); - return { - start: run, - end: run - }; - - function run() { - $$rAF(function() { - applyAnimationContents(); - if (!closed) { - runner.complete(); - } - closed = true; - }); - return runner; - } - - function applyAnimationContents() { - if (options.addClass) { - element.addClass(options.addClass); - options.addClass = null; - } - if (options.removeClass) { - element.removeClass(options.removeClass); - options.removeClass = null; - } - if (options.to) { - element.css(options.to); - options.to = null; - } - } - }; - }]; -}; - -/* global getHash: true, stripHash: false */ - -function getHash(url) { - var index = url.indexOf('#'); - return index === -1 ? '' : url.substr(index); -} - -function trimEmptyHash(url) { - return url.replace(/#$/, ''); -} - -/** - * ! This is a private undocumented service ! - * - * @name $browser - * @requires $log - * @description - * This object has two goals: - * - * - hide all the global state in the browser caused by the window object - * - abstract away all the browser specific features and inconsistencies - * - * For tests we provide {@link ngMock.$browser mock implementation} of the `$browser` - * service, which can be used for convenient testing of the application without the interaction with - * the real browser apis. - */ -/** - * @param {object} window The global window object. - * @param {object} document jQuery wrapped document. - * @param {object} $log window.console or an object with the same interface. - * @param {object} $sniffer $sniffer service - */ -function Browser(window, document, $log, $sniffer, $$taskTrackerFactory) { - var self = this, - location = window.location, - history = window.history, - setTimeout = window.setTimeout, - clearTimeout = window.clearTimeout, - pendingDeferIds = {}, - taskTracker = $$taskTrackerFactory($log); - - self.isMock = false; - - ////////////////////////////////////////////////////////////// - // Task-tracking API - ////////////////////////////////////////////////////////////// - - // TODO(vojta): remove this temporary api - self.$$completeOutstandingRequest = taskTracker.completeTask; - self.$$incOutstandingRequestCount = taskTracker.incTaskCount; - - // TODO(vojta): prefix this method with $$ ? - self.notifyWhenNoOutstandingRequests = taskTracker.notifyWhenNoPendingTasks; - - ////////////////////////////////////////////////////////////// - // URL API - ////////////////////////////////////////////////////////////// - - var cachedState, lastHistoryState, - lastBrowserUrl = location.href, - baseElement = document.find('base'), - pendingLocation = null, - getCurrentState = !$sniffer.history ? noop : function getCurrentState() { - try { - return history.state; - } catch (e) { - // MSIE can reportedly throw when there is no state (UNCONFIRMED). - } - }; - - cacheState(); - - /** - * @name $browser#url - * - * @description - * GETTER: - * Without any argument, this method just returns current value of `location.href` (with a - * trailing `#` stripped of if the hash is empty). - * - * SETTER: - * With at least one argument, this method sets url to new value. - * If html5 history api supported, `pushState`/`replaceState` is used, otherwise - * `location.href`/`location.replace` is used. - * Returns its own instance to allow chaining. - * - * NOTE: this api is intended for use only by the `$location` service. Please use the - * {@link ng.$location $location service} to change url. - * - * @param {string} url New url (when used as setter) - * @param {boolean=} replace Should new url replace current history record? - * @param {object=} state State object to use with `pushState`/`replaceState` - */ - self.url = function(url, replace, state) { - // In modern browsers `history.state` is `null` by default; treating it separately - // from `undefined` would cause `$browser.url('/foo')` to change `history.state` - // to undefined via `pushState`. Instead, let's change `undefined` to `null` here. - if (isUndefined(state)) { - state = null; - } - - // Android Browser BFCache causes location, history reference to become stale. - if (location !== window.location) location = window.location; - if (history !== window.history) history = window.history; - - // setter - if (url) { - var sameState = lastHistoryState === state; - - // Normalize the inputted URL - url = urlResolve(url).href; - - // Don't change anything if previous and current URLs and states match. This also prevents - // IE<10 from getting into redirect loop when in LocationHashbangInHtml5Url mode. - // See https://github.com/angular/angular.js/commit/ffb2701 - if (lastBrowserUrl === url && (!$sniffer.history || sameState)) { - return self; - } - var sameBase = lastBrowserUrl && stripHash(lastBrowserUrl) === stripHash(url); - lastBrowserUrl = url; - lastHistoryState = state; - // Don't use history API if only the hash changed - // due to a bug in IE10/IE11 which leads - // to not firing a `hashchange` nor `popstate` event - // in some cases (see #9143). - if ($sniffer.history && (!sameBase || !sameState)) { - history[replace ? 'replaceState' : 'pushState'](state, '', url); - cacheState(); - } else { - if (!sameBase) { - pendingLocation = url; - } - if (replace) { - location.replace(url); - } else if (!sameBase) { - location.href = url; - } else { - location.hash = getHash(url); - } - if (location.href !== url) { - pendingLocation = url; - } - } - if (pendingLocation) { - pendingLocation = url; - } - return self; - // getter - } else { - // - pendingLocation is needed as browsers don't allow to read out - // the new location.href if a reload happened or if there is a bug like in iOS 9 (see - // https://openradar.appspot.com/22186109). - return trimEmptyHash(pendingLocation || location.href); - } - }; - - /** - * @name $browser#state - * - * @description - * This method is a getter. - * - * Return history.state or null if history.state is undefined. - * - * @returns {object} state - */ - self.state = function() { - return cachedState; - }; - - var urlChangeListeners = [], - urlChangeInit = false; - - function cacheStateAndFireUrlChange() { - pendingLocation = null; - fireStateOrUrlChange(); - } - - // This variable should be used *only* inside the cacheState function. - var lastCachedState = null; - function cacheState() { - // This should be the only place in $browser where `history.state` is read. - cachedState = getCurrentState(); - cachedState = isUndefined(cachedState) ? null : cachedState; - - // Prevent callbacks fo fire twice if both hashchange & popstate were fired. - if (equals(cachedState, lastCachedState)) { - cachedState = lastCachedState; - } - - lastCachedState = cachedState; - lastHistoryState = cachedState; - } - - function fireStateOrUrlChange() { - var prevLastHistoryState = lastHistoryState; - cacheState(); - - if (lastBrowserUrl === self.url() && prevLastHistoryState === cachedState) { - return; - } - - lastBrowserUrl = self.url(); - lastHistoryState = cachedState; - forEach(urlChangeListeners, function(listener) { - listener(self.url(), cachedState); - }); - } - - /** - * @name $browser#onUrlChange - * - * @description - * Register callback function that will be called, when url changes. - * - * It's only called when the url is changed from outside of AngularJS: - * - user types different url into address bar - * - user clicks on history (forward/back) button - * - user clicks on a link - * - * It's not called when url is changed by $browser.url() method - * - * The listener gets called with new url as parameter. - * - * NOTE: this api is intended for use only by the $location service. Please use the - * {@link ng.$location $location service} to monitor url changes in AngularJS apps. - * - * @param {function(string)} listener Listener function to be called when url changes. - * @return {function(string)} Returns the registered listener fn - handy if the fn is anonymous. - */ - self.onUrlChange = function(callback) { - // TODO(vojta): refactor to use node's syntax for events - if (!urlChangeInit) { - // We listen on both (hashchange/popstate) when available, as some browsers don't - // fire popstate when user changes the address bar and don't fire hashchange when url - // changed by push/replaceState - - // html5 history api - popstate event - if ($sniffer.history) jqLite(window).on('popstate', cacheStateAndFireUrlChange); - // hashchange event - jqLite(window).on('hashchange', cacheStateAndFireUrlChange); - - urlChangeInit = true; - } - - urlChangeListeners.push(callback); - return callback; - }; - - /** - * @private - * Remove popstate and hashchange handler from window. - * - * NOTE: this api is intended for use only by $rootScope. - */ - self.$$applicationDestroyed = function() { - jqLite(window).off('hashchange popstate', cacheStateAndFireUrlChange); - }; - - /** - * Checks whether the url has changed outside of AngularJS. - * Needs to be exported to be able to check for changes that have been done in sync, - * as hashchange/popstate events fire in async. - */ - self.$$checkUrlChange = fireStateOrUrlChange; - - ////////////////////////////////////////////////////////////// - // Misc API - ////////////////////////////////////////////////////////////// - - /** - * @name $browser#baseHref - * - * @description - * Returns current - * (always relative - without domain) - * - * @returns {string} The current base href - */ - self.baseHref = function() { - var href = baseElement.attr('href'); - return href ? href.replace(/^(https?:)?\/\/[^/]*/, '') : ''; - }; - - /** - * @name $browser#defer - * @param {function()} fn A function, who's execution should be deferred. - * @param {number=} [delay=0] Number of milliseconds to defer the function execution. - * @param {string=} [taskType=DEFAULT_TASK_TYPE] The type of task that is deferred. - * @returns {*} DeferId that can be used to cancel the task via `$browser.defer.cancel()`. - * - * @description - * Executes a fn asynchronously via `setTimeout(fn, delay)`. - * - * Unlike when calling `setTimeout` directly, in test this function is mocked and instead of using - * `setTimeout` in tests, the fns are queued in an array, which can be programmatically flushed - * via `$browser.defer.flush()`. - * - */ - self.defer = function(fn, delay, taskType) { - var timeoutId; - - delay = delay || 0; - taskType = taskType || taskTracker.DEFAULT_TASK_TYPE; - - taskTracker.incTaskCount(taskType); - timeoutId = setTimeout(function() { - delete pendingDeferIds[timeoutId]; - taskTracker.completeTask(fn, taskType); - }, delay); - pendingDeferIds[timeoutId] = taskType; - - return timeoutId; - }; - - - /** - * @name $browser#defer.cancel - * - * @description - * Cancels a deferred task identified with `deferId`. - * - * @param {*} deferId Token returned by the `$browser.defer` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - self.defer.cancel = function(deferId) { - if (pendingDeferIds.hasOwnProperty(deferId)) { - var taskType = pendingDeferIds[deferId]; - delete pendingDeferIds[deferId]; - clearTimeout(deferId); - taskTracker.completeTask(noop, taskType); - return true; - } - return false; - }; - -} - -/** @this */ -function $BrowserProvider() { - this.$get = ['$window', '$log', '$sniffer', '$document', '$$taskTrackerFactory', - function($window, $log, $sniffer, $document, $$taskTrackerFactory) { - return new Browser($window, $document, $log, $sniffer, $$taskTrackerFactory); - }]; -} - -/** - * @ngdoc service - * @name $cacheFactory - * @this - * - * @description - * Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to - * them. - * - * ```js - * - * var cache = $cacheFactory('cacheId'); - * expect($cacheFactory.get('cacheId')).toBe(cache); - * expect($cacheFactory.get('noSuchCacheId')).not.toBeDefined(); - * - * cache.put("key", "value"); - * cache.put("another key", "another value"); - * - * // We've specified no options on creation - * expect(cache.info()).toEqual({id: 'cacheId', size: 2}); - * - * ``` - * - * - * @param {string} cacheId Name or id of the newly created cache. - * @param {object=} options Options object that specifies the cache behavior. Properties: - * - * - `{number=}` `capacity` — turns the cache into LRU cache. - * - * @returns {object} Newly created cache object with the following set of methods: - * - * - `{object}` `info()` — Returns id, size, and options of cache. - * - `{{*}}` `put({string} key, {*} value)` — Puts a new key-value pair into the cache and returns - * it. - * - `{{*}}` `get({string} key)` — Returns cached value for `key` or undefined for cache miss. - * - `{void}` `remove({string} key)` — Removes a key-value pair from the cache. - * - `{void}` `removeAll()` — Removes all cached values. - * - `{void}` `destroy()` — Removes references to this cache from $cacheFactory. - * - * @example - - -
      - - - - -

      Cached Values

      -
      - - : - -
      - -

      Cache Info

      -
      - - : - -
      -
      -
      - - angular.module('cacheExampleApp', []). - controller('CacheController', ['$scope', '$cacheFactory', function($scope, $cacheFactory) { - $scope.keys = []; - $scope.cache = $cacheFactory('cacheId'); - $scope.put = function(key, value) { - if (angular.isUndefined($scope.cache.get(key))) { - $scope.keys.push(key); - } - $scope.cache.put(key, angular.isUndefined(value) ? null : value); - }; - }]); - - - p { - margin: 10px 0 3px; - } - -
      - */ -function $CacheFactoryProvider() { - - this.$get = function() { - var caches = {}; - - function cacheFactory(cacheId, options) { - if (cacheId in caches) { - throw minErr('$cacheFactory')('iid', 'CacheId \'{0}\' is already taken!', cacheId); - } - - var size = 0, - stats = extend({}, options, {id: cacheId}), - data = createMap(), - capacity = (options && options.capacity) || Number.MAX_VALUE, - lruHash = createMap(), - freshEnd = null, - staleEnd = null; - - /** - * @ngdoc type - * @name $cacheFactory.Cache - * - * @description - * A cache object used to store and retrieve data, primarily used by - * {@link $templateRequest $templateRequest} and the {@link ng.directive:script script} - * directive to cache templates and other data. - * - * ```js - * angular.module('superCache') - * .factory('superCache', ['$cacheFactory', function($cacheFactory) { - * return $cacheFactory('super-cache'); - * }]); - * ``` - * - * Example test: - * - * ```js - * it('should behave like a cache', inject(function(superCache) { - * superCache.put('key', 'value'); - * superCache.put('another key', 'another value'); - * - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 2 - * }); - * - * superCache.remove('another key'); - * expect(superCache.get('another key')).toBeUndefined(); - * - * superCache.removeAll(); - * expect(superCache.info()).toEqual({ - * id: 'super-cache', - * size: 0 - * }); - * })); - * ``` - */ - return (caches[cacheId] = { - - /** - * @ngdoc method - * @name $cacheFactory.Cache#put - * @kind function - * - * @description - * Inserts a named entry into the {@link $cacheFactory.Cache Cache} object to be - * retrieved later, and incrementing the size of the cache if the key was not already - * present in the cache. If behaving like an LRU cache, it will also remove stale - * entries from the set. - * - * It will not insert undefined values into the cache. - * - * @param {string} key the key under which the cached data is stored. - * @param {*} value the value to store alongside the key. If it is undefined, the key - * will not be stored. - * @returns {*} the value stored. - */ - put: function(key, value) { - if (isUndefined(value)) return; - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key] || (lruHash[key] = {key: key}); - - refresh(lruEntry); - } - - if (!(key in data)) size++; - data[key] = value; - - if (size > capacity) { - this.remove(staleEnd.key); - } - - return value; - }, - - /** - * @ngdoc method - * @name $cacheFactory.Cache#get - * @kind function - * - * @description - * Retrieves named data stored in the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the data to be retrieved - * @returns {*} the value stored. - */ - get: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - refresh(lruEntry); - } - - return data[key]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#remove - * @kind function - * - * @description - * Removes an entry from the {@link $cacheFactory.Cache Cache} object. - * - * @param {string} key the key of the entry to be removed - */ - remove: function(key) { - if (capacity < Number.MAX_VALUE) { - var lruEntry = lruHash[key]; - - if (!lruEntry) return; - - if (lruEntry === freshEnd) freshEnd = lruEntry.p; - if (lruEntry === staleEnd) staleEnd = lruEntry.n; - link(lruEntry.n,lruEntry.p); - - delete lruHash[key]; - } - - if (!(key in data)) return; - - delete data[key]; - size--; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#removeAll - * @kind function - * - * @description - * Clears the cache object of any entries. - */ - removeAll: function() { - data = createMap(); - size = 0; - lruHash = createMap(); - freshEnd = staleEnd = null; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#destroy - * @kind function - * - * @description - * Destroys the {@link $cacheFactory.Cache Cache} object entirely, - * removing it from the {@link $cacheFactory $cacheFactory} set. - */ - destroy: function() { - data = null; - stats = null; - lruHash = null; - delete caches[cacheId]; - }, - - - /** - * @ngdoc method - * @name $cacheFactory.Cache#info - * @kind function - * - * @description - * Retrieve information regarding a particular {@link $cacheFactory.Cache Cache}. - * - * @returns {object} an object with the following properties: - *
        - *
      • **id**: the id of the cache instance
      • - *
      • **size**: the number of entries kept in the cache instance
      • - *
      • **...**: any additional properties from the options object when creating the - * cache.
      • - *
      - */ - info: function() { - return extend({}, stats, {size: size}); - } - }); - - - /** - * makes the `entry` the freshEnd of the LRU linked list - */ - function refresh(entry) { - if (entry !== freshEnd) { - if (!staleEnd) { - staleEnd = entry; - } else if (staleEnd === entry) { - staleEnd = entry.n; - } - - link(entry.n, entry.p); - link(entry, freshEnd); - freshEnd = entry; - freshEnd.n = null; - } - } - - - /** - * bidirectionally links two entries of the LRU linked list - */ - function link(nextEntry, prevEntry) { - if (nextEntry !== prevEntry) { - if (nextEntry) nextEntry.p = prevEntry; //p stands for previous, 'prev' didn't minify - if (prevEntry) prevEntry.n = nextEntry; //n stands for next, 'next' didn't minify - } - } - } - - - /** - * @ngdoc method - * @name $cacheFactory#info - * - * @description - * Get information about all the caches that have been created - * - * @returns {Object} - key-value map of `cacheId` to the result of calling `cache#info` - */ - cacheFactory.info = function() { - var info = {}; - forEach(caches, function(cache, cacheId) { - info[cacheId] = cache.info(); - }); - return info; - }; - - - /** - * @ngdoc method - * @name $cacheFactory#get - * - * @description - * Get access to a cache object by the `cacheId` used when it was created. - * - * @param {string} cacheId Name or id of a cache to access. - * @returns {object} Cache object identified by the cacheId or undefined if no such cache. - */ - cacheFactory.get = function(cacheId) { - return caches[cacheId]; - }; - - - return cacheFactory; - }; -} - -/** - * @ngdoc service - * @name $templateCache - * @this - * - * @description - * `$templateCache` is a {@link $cacheFactory.Cache Cache object} created by the - * {@link ng.$cacheFactory $cacheFactory}. - * - * The first time a template is used, it is loaded in the template cache for quick retrieval. You - * can load templates directly into the cache in a `script` tag, by using {@link $templateRequest}, - * or by consuming the `$templateCache` service directly. - * - * Adding via the `script` tag: - * - * ```html - * - * ``` - * - * **Note:** the `script` tag containing the template does not need to be included in the `head` of - * the document, but it must be a descendent of the {@link ng.$rootElement $rootElement} (e.g. - * element with {@link ngApp} attribute), otherwise the template will be ignored. - * - * Adding via the `$templateCache` service: - * - * ```js - * var myApp = angular.module('myApp', []); - * myApp.run(function($templateCache) { - * $templateCache.put('templateId.html', 'This is the content of the template'); - * }); - * ``` - * - * To retrieve the template later, simply use it in your component: - * ```js - * myApp.component('myComponent', { - * templateUrl: 'templateId.html' - * }); - * ``` - * - * or get it via the `$templateCache` service: - * ```js - * $templateCache.get('templateId.html') - * ``` - * - */ -function $TemplateCacheProvider() { - this.$get = ['$cacheFactory', function($cacheFactory) { - return $cacheFactory('templates'); - }]; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables like document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* ! VARIABLE/FUNCTION NAMING CONVENTIONS THAT APPLY TO THIS FILE! - * - * DOM-related variables: - * - * - "node" - DOM Node - * - "element" - DOM Element or Node - * - "$node" or "$element" - jqLite-wrapped node or element - * - * - * Compiler related stuff: - * - * - "linkFn" - linking fn of a single directive - * - "nodeLinkFn" - function that aggregates all linking fns for a particular node - * - "childLinkFn" - function that aggregates all linking fns for child nodes of a particular node - * - "compositeLinkFn" - function that aggregates all linking fns for a compilation root (nodeList) - */ - - -/** - * @ngdoc service - * @name $compile - * @kind function - * - * @description - * Compiles an HTML string or DOM into a template and produces a template function, which - * can then be used to link {@link ng.$rootScope.Scope `scope`} and the template together. - * - * The compilation is a process of walking the DOM tree and matching DOM elements to - * {@link ng.$compileProvider#directive directives}. - * - *
      - * **Note:** This document is an in-depth reference of all directive options. - * For a gentle introduction to directives with examples of common use cases, - * see the {@link guide/directive directive guide}. - *
      - * - * ## Comprehensive Directive API - * - * There are many different options for a directive. - * - * The difference resides in the return value of the factory function. - * You can either return a {@link $compile#directive-definition-object Directive Definition Object (see below)} - * that defines the directive properties, or just the `postLink` function (all other properties will have - * the default values). - * - *
      - * **Best Practice:** It's recommended to use the "directive definition object" form. - *
      - * - * Here's an example directive declared with a Directive Definition Object: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * {@link $compile#-priority- priority}: 0, - * {@link $compile#-template- template}: '
      ', // or // function(tElement, tAttrs) { ... }, - * // or - * // {@link $compile#-templateurl- templateUrl}: 'directive.html', // or // function(tElement, tAttrs) { ... }, - * {@link $compile#-transclude- transclude}: false, - * {@link $compile#-restrict- restrict}: 'A', - * {@link $compile#-templatenamespace- templateNamespace}: 'html', - * {@link $compile#-scope- scope}: false, - * {@link $compile#-controller- controller}: function($scope, $element, $attrs, $transclude, otherInjectables) { ... }, - * {@link $compile#-controlleras- controllerAs}: 'stringIdentifier', - * {@link $compile#-bindtocontroller- bindToController}: false, - * {@link $compile#-require- require}: 'siblingDirectiveName', // or // ['^parentDirectiveName', '?optionalDirectiveName', '?^optionalParent'], - * {@link $compile#-multielement- multiElement}: false, - * {@link $compile#-compile- compile}: function compile(tElement, tAttrs, transclude) { - * return { - * {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... }, - * {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... } - * } - * // or - * // return function postLink( ... ) { ... } - * }, - * // or - * // {@link $compile#-link- link}: { - * // {@link $compile#pre-linking-function pre}: function preLink(scope, iElement, iAttrs, controller) { ... }, - * // {@link $compile#post-linking-function post}: function postLink(scope, iElement, iAttrs, controller) { ... } - * // } - * // or - * // {@link $compile#-link- link}: function postLink( ... ) { ... } - * }; - * return directiveDefinitionObject; - * }); - * ``` - * - *
      - * **Note:** Any unspecified options will use the default value. You can see the default values below. - *
      - * - * Therefore the above can be simplified as: - * - * ```js - * var myModule = angular.module(...); - * - * myModule.directive('directiveName', function factory(injectables) { - * var directiveDefinitionObject = { - * link: function postLink(scope, iElement, iAttrs) { ... } - * }; - * return directiveDefinitionObject; - * // or - * // return function postLink(scope, iElement, iAttrs) { ... } - * }); - * ``` - * - * ### Life-cycle hooks - * Directive controllers can provide the following methods that are called by AngularJS at points in the life-cycle of the - * directive: - * * `$onInit()` - Called on each controller after all the controllers on an element have been constructed and - * had their bindings initialized (and before the pre & post linking functions for the directives on - * this element). This is a good place to put initialization code for your controller. - * * `$onChanges(changesObj)` - Called whenever one-way (`<`) or interpolation (`@`) bindings are updated. The - * `changesObj` is a hash whose keys are the names of the bound properties that have changed, and the values are an - * object of the form `{ currentValue, previousValue, isFirstChange() }`. Use this hook to trigger updates within a - * component such as cloning the bound value to prevent accidental mutation of the outer value. Note that this will - * also be called when your bindings are initialized. - * * `$doCheck()` - Called on each turn of the digest cycle. Provides an opportunity to detect and act on - * changes. Any actions that you wish to take in response to the changes that you detect must be - * invoked from this hook; implementing this has no effect on when `$onChanges` is called. For example, this hook - * could be useful if you wish to perform a deep equality check, or to check a Date object, changes to which would not - * be detected by AngularJS's change detector and thus not trigger `$onChanges`. This hook is invoked with no arguments; - * if detecting changes, you must store the previous value(s) for comparison to the current values. - * * `$onDestroy()` - Called on a controller when its containing scope is destroyed. Use this hook for releasing - * external resources, watches and event handlers. Note that components have their `$onDestroy()` hooks called in - * the same order as the `$scope.$broadcast` events are triggered, which is top down. This means that parent - * components will have their `$onDestroy()` hook called before child components. - * * `$postLink()` - Called after this controller's element and its children have been linked. Similar to the post-link - * function this hook can be used to set up DOM event handlers and do direct DOM manipulation. - * Note that child elements that contain `templateUrl` directives will not have been compiled and linked since - * they are waiting for their template to load asynchronously and their own compilation and linking has been - * suspended until that occurs. - * - * #### Comparison with life-cycle hooks in the new Angular - * The new Angular also uses life-cycle hooks for its components. While the AngularJS life-cycle hooks are similar there are - * some differences that you should be aware of, especially when it comes to moving your code from AngularJS to Angular: - * - * * AngularJS hooks are prefixed with `$`, such as `$onInit`. Angular hooks are prefixed with `ng`, such as `ngOnInit`. - * * AngularJS hooks can be defined on the controller prototype or added to the controller inside its constructor. - * In Angular you can only define hooks on the prototype of the Component class. - * * Due to the differences in change-detection, you may get many more calls to `$doCheck` in AngularJS than you would to - * `ngDoCheck` in Angular. - * * Changes to the model inside `$doCheck` will trigger new turns of the digest loop, which will cause the changes to be - * propagated throughout the application. - * Angular does not allow the `ngDoCheck` hook to trigger a change outside of the component. It will either throw an - * error or do nothing depending upon the state of `enableProdMode()`. - * - * #### Life-cycle hook examples - * - * This example shows how you can check for mutations to a Date object even though the identity of the object - * has not changed. - * - * - * - * angular.module('do-check-module', []) - * .component('app', { - * template: - * 'Month: ' + - * 'Date: {{ $ctrl.date }}' + - * '', - * controller: function() { - * this.date = new Date(); - * this.month = this.date.getMonth(); - * this.updateDate = function() { - * this.date.setMonth(this.month); - * }; - * } - * }) - * .component('test', { - * bindings: { date: '<' }, - * template: - * '
      {{ $ctrl.log | json }}
      ', - * controller: function() { - * var previousValue; - * this.log = []; - * this.$doCheck = function() { - * var currentValue = this.date && this.date.valueOf(); - * if (previousValue !== currentValue) { - * this.log.push('doCheck: date mutated: ' + this.date); - * previousValue = currentValue; - * } - * }; - * } - * }); - *
      - * - * - * - *
      - * - * This example show how you might use `$doCheck` to trigger changes in your component's inputs even if the - * actual identity of the component doesn't change. (Be aware that cloning and deep equality checks on large - * arrays or objects can have a negative impact on your application performance.) - * - * - * - *
      - * - * - *
      {{ items }}
      - * - *
      - *
      - * - * angular.module('do-check-module', []) - * .component('test', { - * bindings: { items: '<' }, - * template: - * '
      {{ $ctrl.log | json }}
      ', - * controller: function() { - * this.log = []; - * - * this.$doCheck = function() { - * if (this.items_ref !== this.items) { - * this.log.push('doCheck: items changed'); - * this.items_ref = this.items; - * } - * if (!angular.equals(this.items_clone, this.items)) { - * this.log.push('doCheck: items mutated'); - * this.items_clone = angular.copy(this.items); - * } - * }; - * } - * }); - *
      - *
      - * - * - * ### Directive Definition Object - * - * The directive definition object provides instructions to the {@link ng.$compile - * compiler}. The attributes are: - * - * #### `multiElement` - * When this property is set to true (default is `false`), the HTML compiler will collect DOM nodes between - * nodes with the attributes `directive-name-start` and `directive-name-end`, and group them - * together as the directive elements. It is recommended that this feature be used on directives - * which are not strictly behavioral (such as {@link ngClick}), and which - * do not manipulate or replace child nodes (such as {@link ngInclude}). - * - * #### `priority` - * When there are multiple directives defined on a single DOM element, sometimes it - * is necessary to specify the order in which the directives are applied. The `priority` is used - * to sort the directives before their `compile` functions get called. Priority is defined as a - * number. Directives with greater numerical `priority` are compiled first. Pre-link functions - * are also run in priority order, but post-link functions are run in reverse order. The order - * of directives with the same priority is undefined. The default priority is `0`. - * - * #### `terminal` - * If set to true then the current `priority` will be the last set of directives - * which will execute (any directives at the current priority will still execute - * as the order of execution on same `priority` is undefined). Note that expressions - * and other directives used in the directive's template will also be excluded from execution. - * - * #### `scope` - * The scope property can be `false`, `true`, or an object: - * - * * **`false` (default):** No scope will be created for the directive. The directive will use its - * parent's scope. - * - * * **`true`:** A new child scope that prototypically inherits from its parent will be created for - * the directive's element. If multiple directives on the same element request a new scope, - * only one new scope is created. - * - * * **`{...}` (an object hash):** A new "isolate" scope is created for the directive's template. - * The 'isolate' scope differs from normal scope in that it does not prototypically - * inherit from its parent scope. This is useful when creating reusable components, which should not - * accidentally read or modify data in the parent scope. Note that an isolate scope - * directive without a `template` or `templateUrl` will not apply the isolate scope - * to its children elements. - * - * The 'isolate' scope object hash defines a set of local scope properties derived from attributes on the - * directive's element. These local properties are useful for aliasing values for templates. The keys in - * the object hash map to the name of the property on the isolate scope; the values define how the property - * is bound to the parent scope, via matching attributes on the directive's element: - * - * * `@` or `@attr` - bind a local scope property to the value of DOM attribute. The result is - * always a string since DOM attributes are strings. If no `attr` name is specified then the - * attribute name is assumed to be the same as the local name. Given `` and the isolate scope definition `scope: { localName:'@myAttr' }`, - * the directive's scope property `localName` will reflect the interpolated value of `hello - * {{name}}`. As the `name` attribute changes so will the `localName` property on the directive's - * scope. The `name` is read from the parent scope (not the directive's scope). - * - * * `=` or `=attr` - set up a bidirectional binding between a local scope property and an expression - * passed via the attribute `attr`. The expression is evaluated in the context of the parent scope. - * If no `attr` name is specified then the attribute name is assumed to be the same as the local - * name. Given `` and the isolate scope definition `scope: { - * localModel: '=myAttr' }`, the property `localModel` on the directive's scope will reflect the - * value of `parentModel` on the parent scope. Changes to `parentModel` will be reflected in - * `localModel` and vice versa. If the binding expression is non-assignable, or if the attribute - * isn't optional and doesn't exist, an exception - * ({@link error/$compile/nonassign `$compile:nonassign`}) will be thrown upon discovering changes - * to the local value, since it will be impossible to sync them back to the parent scope. - * - * By default, the {@link ng.$rootScope.Scope#$watch `$watch`} - * method is used for tracking changes, and the equality check is based on object identity. - * However, if an object literal or an array literal is passed as the binding expression, the - * equality check is done by value (using the {@link angular.equals} function). It's also possible - * to watch the evaluated value shallowly with {@link ng.$rootScope.Scope#$watchCollection - * `$watchCollection`}: use `=*` or `=*attr` - * - * * `<` or `` and directive definition of - * `scope: { localModel:'` and the isolate scope definition `scope: { - * localFn:'&myAttr' }`, the isolate scope property `localFn` will point to a function wrapper for - * the `count = count + value` expression. Often it's desirable to pass data from the isolated scope - * via an expression to the parent scope. This can be done by passing a map of local variable names - * and values into the expression wrapper fn. For example, if the expression is `increment(amount)` - * then we can specify the amount value by calling the `localFn` as `localFn({amount: 22})`. - * - * All 4 kinds of bindings (`@`, `=`, `<`, and `&`) can be made optional by adding `?` to the expression. - * The marker must come after the mode and before the attribute name. - * See the {@link error/$compile/iscp Invalid Isolate Scope Definition error} for definition examples. - * This is useful to refine the interface directives provide. - * One subtle difference between optional and non-optional happens **when the binding attribute is not - * set**: - * - the binding is optional: the property will not be defined - * - the binding is not optional: the property is defined - * - * ```js - *app.directive('testDir', function() { - return { - scope: { - notoptional: '=', - optional: '=?', - }, - bindToController: true, - controller: function() { - this.$onInit = function() { - console.log(this.hasOwnProperty('notoptional')) // true - console.log(this.hasOwnProperty('optional')) // false - } - } - } - }) - *``` - * - * - * ##### Combining directives with different scope defintions - * - * In general it's possible to apply more than one directive to one element, but there might be limitations - * depending on the type of scope required by the directives. The following points will help explain these limitations. - * For simplicity only two directives are taken into account, but it is also applicable for several directives: - * - * * **no scope** + **no scope** => Two directives which don't require their own scope will use their parent's scope - * * **child scope** + **no scope** => Both directives will share one single child scope - * * **child scope** + **child scope** => Both directives will share one single child scope - * * **isolated scope** + **no scope** => The isolated directive will use it's own created isolated scope. The other directive will use - * its parent's scope - * * **isolated scope** + **child scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives cannot - * be applied to the same element. - * * **isolated scope** + **isolated scope** => **Won't work!** Only one scope can be related to one element. Therefore these directives - * cannot be applied to the same element. - * - * - * #### `bindToController` - * This property is used to bind scope properties directly to the controller. It can be either - * `true` or an object hash with the same format as the `scope` property. - * - * When an isolate scope is used for a directive (see above), `bindToController: true` will - * allow a component to have its properties bound to the controller, rather than to scope. - * - * After the controller is instantiated, the initial values of the isolate scope bindings will be bound to the controller - * properties. You can access these bindings once they have been initialized by providing a controller method called - * `$onInit`, which is called after all the controllers on an element have been constructed and had their bindings - * initialized. - * - * It is also possible to set `bindToController` to an object hash with the same format as the `scope` property. - * This will set up the scope bindings to the controller directly. Note that `scope` can still be used - * to define which kind of scope is created. By default, no scope is created. Use `scope: {}` to create an isolate - * scope (useful for component directives). - * - * If both `bindToController` and `scope` are defined and have object hashes, `bindToController` overrides `scope`. - * - * - * #### `controller` - * Controller constructor function. The controller is instantiated before the - * pre-linking phase and can be accessed by other directives (see - * `require` attribute). This allows the directives to communicate with each other and augment - * each other's behavior. The controller is injectable (and supports bracket notation) with the following locals: - * - * * `$scope` - Current scope associated with the element - * * `$element` - Current element - * * `$attrs` - Current attributes object for the element - * * `$transclude` - A transclude linking function pre-bound to the correct transclusion scope: - * `function([scope], cloneLinkingFn, futureParentElement, slotName)`: - * * `scope`: (optional) override the scope. - * * `cloneLinkingFn`: (optional) argument to create clones of the original transcluded content. - * * `futureParentElement` (optional): - * * defines the parent to which the `cloneLinkingFn` will add the cloned elements. - * * default: `$element.parent()` resp. `$element` for `transclude:'element'` resp. `transclude:true`. - * * only needed for transcludes that are allowed to contain non html elements (e.g. SVG elements) - * and when the `cloneLinkingFn` is passed, - * as those elements need to created and cloned in a special way when they are defined outside their - * usual containers (e.g. like ``). - * * See also the `directive.templateNamespace` property. - * * `slotName`: (optional) the name of the slot to transclude. If falsy (e.g. `null`, `undefined` or `''`) - * then the default transclusion is provided. - * The `$transclude` function also has a method on it, `$transclude.isSlotFilled(slotName)`, which returns - * `true` if the specified slot contains content (i.e. one or more DOM nodes). - * - * #### `require` - * Require another directive and inject its controller as the fourth argument to the linking function. The - * `require` property can be a string, an array or an object: - * * a **string** containing the name of the directive to pass to the linking function - * * an **array** containing the names of directives to pass to the linking function. The argument passed to the - * linking function will be an array of controllers in the same order as the names in the `require` property - * * an **object** whose property values are the names of the directives to pass to the linking function. The argument - * passed to the linking function will also be an object with matching keys, whose values will hold the corresponding - * controllers. - * - * If the `require` property is an object and `bindToController` is truthy, then the required controllers are - * bound to the controller using the keys of the `require` property. This binding occurs after all the controllers - * have been constructed but before `$onInit` is called. - * If the name of the required controller is the same as the local name (the key), the name can be - * omitted. For example, `{parentDir: '^^'}` is equivalent to `{parentDir: '^^parentDir'}`. - * See the {@link $compileProvider#component} helper for an example of how this can be used. - * If no such required directive(s) can be found, or if the directive does not have a controller, then an error is - * raised (unless no link function is specified and the required controllers are not being bound to the directive - * controller, in which case error checking is skipped). The name can be prefixed with: - * - * * (no prefix) - Locate the required controller on the current element. Throw an error if not found. - * * `?` - Attempt to locate the required controller or pass `null` to the `link` fn if not found. - * * `^` - Locate the required controller by searching the element and its parents. Throw an error if not found. - * * `^^` - Locate the required controller by searching the element's parents. Throw an error if not found. - * * `?^` - Attempt to locate the required controller by searching the element and its parents or pass - * `null` to the `link` fn if not found. - * * `?^^` - Attempt to locate the required controller by searching the element's parents, or pass - * `null` to the `link` fn if not found. - * - * - * #### `controllerAs` - * Identifier name for a reference to the controller in the directive's scope. - * This allows the controller to be referenced from the directive template. This is especially - * useful when a directive is used as component, i.e. with an `isolate` scope. It's also possible - * to use it in a directive without an `isolate` / `new` scope, but you need to be aware that the - * `controllerAs` reference might overwrite a property that already exists on the parent scope. - * - * - * #### `restrict` - * String of subset of `EACM` which restricts the directive to a specific directive - * declaration style. If omitted, the defaults (elements and attributes) are used. - * - * * `E` - Element name (default): `` - * * `A` - Attribute (default): `
      ` - * * `C` - Class: `
      ` - * * `M` - Comment: `` - * - * - * #### `templateNamespace` - * String representing the document type used by the markup in the template. - * AngularJS needs this information as those elements need to be created and cloned - * in a special way when they are defined outside their usual containers like `` and ``. - * - * * `html` - All root nodes in the template are HTML. Root nodes may also be - * top-level elements such as `` or ``. - * * `svg` - The root nodes in the template are SVG elements (excluding ``). - * * `math` - The root nodes in the template are MathML elements (excluding ``). - * - * If no `templateNamespace` is specified, then the namespace is considered to be `html`. - * - * #### `template` - * HTML markup that may: - * * Replace the contents of the directive's element (default). - * * Replace the directive's element itself (if `replace` is true - DEPRECATED). - * * Wrap the contents of the directive's element (if `transclude` is true). - * - * Value may be: - * - * * A string. For example `
      {{delete_str}}
      `. - * * A function which takes two arguments `tElement` and `tAttrs` (described in the `compile` - * function api below) and returns a string value. - * - * - * #### `templateUrl` - * This is similar to `template` but the template is loaded from the specified URL, asynchronously. - * - * Because template loading is asynchronous the compiler will suspend compilation of directives on that element - * for later when the template has been resolved. In the meantime it will continue to compile and link - * sibling and parent elements as though this element had not contained any directives. - * - * The compiler does not suspend the entire compilation to wait for templates to be loaded because this - * would result in the whole app "stalling" until all templates are loaded asynchronously - even in the - * case when only one deeply nested directive has `templateUrl`. - * - * Template loading is asynchronous even if the template has been preloaded into the {@link $templateCache}. - * - * You can specify `templateUrl` as a string representing the URL or as a function which takes two - * arguments `tElement` and `tAttrs` (described in the `compile` function api below) and returns - * a string value representing the url. In either case, the template URL is passed through {@link - * $sce#getTrustedResourceUrl $sce.getTrustedResourceUrl}. - * - * - * #### `replace` - *
      - * **Note:** `replace` is deprecated in AngularJS and has been removed in the new Angular (v2+). - *
      - * - * Specifies what the template should replace. Defaults to `false`. - * - * * `true` - the template will replace the directive's element. - * * `false` - the template will replace the contents of the directive's element. - * - * The replacement process migrates all of the attributes / classes from the old element to the new - * one. See the {@link guide/directive#template-expanding-directive - * Directives Guide} for an example. - * - * There are very few scenarios where element replacement is required for the application function, - * the main one being reusable custom components that are used within SVG contexts - * (because SVG doesn't work with custom elements in the DOM tree). - * - * #### `transclude` - * Extract the contents of the element where the directive appears and make it available to the directive. - * The contents are compiled and provided to the directive as a **transclusion function**. See the - * {@link $compile#transclusion Transclusion} section below. - * - * - * #### `compile` - * - * ```js - * function compile(tElement, tAttrs, transclude) { ... } - * ``` - * - * The compile function deals with transforming the template DOM. Since most directives do not do - * template transformation, it is not used often. The compile function takes the following arguments: - * - * * `tElement` - template element - The element where the directive has been declared. It is - * safe to do template transformation on the element and child elements only. - * - * * `tAttrs` - template attributes - Normalized list of attributes declared on this element shared - * between all directive compile functions. - * - * * `transclude` - [*DEPRECATED*!] A transclude linking function: `function(scope, cloneLinkingFn)` - * - *
      - * **Note:** The template instance and the link instance may be different objects if the template has - * been cloned. For this reason it is **not** safe to do anything other than DOM transformations that - * apply to all cloned DOM nodes within the compile function. Specifically, DOM listener registration - * should be done in a linking function rather than in a compile function. - *
      - - *
      - * **Note:** The compile function cannot handle directives that recursively use themselves in their - * own templates or compile functions. Compiling these directives results in an infinite loop and - * stack overflow errors. - * - * This can be avoided by manually using `$compile` in the postLink function to imperatively compile - * a directive's template instead of relying on automatic template compilation via `template` or - * `templateUrl` declaration or manual compilation inside the compile function. - *
      - * - *
      - * **Note:** The `transclude` function that is passed to the compile function is deprecated, as it - * e.g. does not know about the right outer scope. Please use the transclude function that is passed - * to the link function instead. - *
      - - * A compile function can have a return value which can be either a function or an object. - * - * * returning a (post-link) function - is equivalent to registering the linking function via the - * `link` property of the config object when the compile function is empty. - * - * * returning an object with function(s) registered via `pre` and `post` properties - allows you to - * control when a linking function should be called during the linking phase. See info about - * pre-linking and post-linking functions below. - * - * - * #### `link` - * This property is used only if the `compile` property is not defined. - * - * ```js - * function link(scope, iElement, iAttrs, controller, transcludeFn) { ... } - * ``` - * - * The link function is responsible for registering DOM listeners as well as updating the DOM. It is - * executed after the template has been cloned. This is where most of the directive logic will be - * put. - * - * * `scope` - {@link ng.$rootScope.Scope Scope} - The scope to be used by the - * directive for registering {@link ng.$rootScope.Scope#$watch watches}. - * - * * `iElement` - instance element - The element where the directive is to be used. It is safe to - * manipulate the children of the element only in `postLink` function since the children have - * already been linked. - * - * * `iAttrs` - instance attributes - Normalized list of attributes declared on this element shared - * between all directive linking functions. - * - * * `controller` - the directive's required controller instance(s) - Instances are shared - * among all directives, which allows the directives to use the controllers as a communication - * channel. The exact value depends on the directive's `require` property: - * * no controller(s) required: the directive's own controller, or `undefined` if it doesn't have one - * * `string`: the controller instance - * * `array`: array of controller instances - * - * If a required controller cannot be found, and it is optional, the instance is `null`, - * otherwise the {@link error:$compile:ctreq Missing Required Controller} error is thrown. - * - * Note that you can also require the directive's own controller - it will be made available like - * any other controller. - * - * * `transcludeFn` - A transclude linking function pre-bound to the correct transclusion scope. - * This is the same as the `$transclude` parameter of directive controllers, - * see {@link ng.$compile#-controller- the controller section for details}. - * `function([scope], cloneLinkingFn, futureParentElement)`. - * - * #### Pre-linking function - * - * Executed before the child elements are linked. Not safe to do DOM transformation since the - * compiler linking function will fail to locate the correct elements for linking. - * - * #### Post-linking function - * - * Executed after the child elements are linked. - * - * Note that child elements that contain `templateUrl` directives will not have been compiled - * and linked since they are waiting for their template to load asynchronously and their own - * compilation and linking has been suspended until that occurs. - * - * It is safe to do DOM transformation in the post-linking function on elements that are not waiting - * for their async templates to be resolved. - * - * - * ### Transclusion - * - * Transclusion is the process of extracting a collection of DOM elements from one part of the DOM and - * copying them to another part of the DOM, while maintaining their connection to the original AngularJS - * scope from where they were taken. - * - * Transclusion is used (often with {@link ngTransclude}) to insert the - * original contents of a directive's element into a specified place in the template of the directive. - * The benefit of transclusion, over simply moving the DOM elements manually, is that the transcluded - * content has access to the properties on the scope from which it was taken, even if the directive - * has isolated scope. - * See the {@link guide/directive#creating-a-directive-that-wraps-other-elements Directives Guide}. - * - * This makes it possible for the widget to have private state for its template, while the transcluded - * content has access to its originating scope. - * - *
      - * **Note:** When testing an element transclude directive you must not place the directive at the root of the - * DOM fragment that is being compiled. See {@link guide/unit-testing#testing-transclusion-directives - * Testing Transclusion Directives}. - *
      - * - * There are three kinds of transclusion depending upon whether you want to transclude just the contents of the - * directive's element, the entire element or multiple parts of the element contents: - * - * * `true` - transclude the content (i.e. the child nodes) of the directive's element. - * * `'element'` - transclude the whole of the directive's element including any directives on this - * element that are defined at a lower priority than this directive. When used, the `template` - * property is ignored. - * * **`{...}` (an object hash):** - map elements of the content onto transclusion "slots" in the template. - * - * **Multi-slot transclusion** is declared by providing an object for the `transclude` property. - * - * This object is a map where the keys are the name of the slot to fill and the value is an element selector - * used to match the HTML to the slot. The element selector should be in normalized form (e.g. `myElement`) - * and will match the standard element variants (e.g. `my-element`, `my:element`, `data-my-element`, etc). - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives}. - * - * If the element selector is prefixed with a `?` then that slot is optional. - * - * For example, the transclude object `{ slotA: '?myCustomElement' }` maps `` elements to - * the `slotA` slot, which can be accessed via the `$transclude` function or via the {@link ngTransclude} directive. - * - * Slots that are not marked as optional (`?`) will trigger a compile time error if there are no matching elements - * in the transclude content. If you wish to know if an optional slot was filled with content, then you can call - * `$transclude.isSlotFilled(slotName)` on the transclude function passed to the directive's link function and - * injectable into the directive's controller. - * - * - * #### Transclusion Functions - * - * When a directive requests transclusion, the compiler extracts its contents and provides a **transclusion - * function** to the directive's `link` function and `controller`. This transclusion function is a special - * **linking function** that will return the compiled contents linked to a new transclusion scope. - * - *
      - * If you are just using {@link ngTransclude} then you don't need to worry about this function, since - * ngTransclude will deal with it for us. - *
      - * - * If you want to manually control the insertion and removal of the transcluded content in your directive - * then you must use this transclude function. When you call a transclude function it returns a jqLite/JQuery - * object that contains the compiled DOM, which is linked to the correct transclusion scope. - * - * When you call a transclusion function you can pass in a **clone attach function**. This function accepts - * two parameters, `function(clone, scope) { ... }`, where the `clone` is a fresh compiled copy of your transcluded - * content and the `scope` is the newly created transclusion scope, which the clone will be linked to. - * - *
      - * **Best Practice**: Always provide a `cloneFn` (clone attach function) when you call a transclude function - * since you then get a fresh clone of the original DOM and also have access to the new transclusion scope. - *
      - * - * It is normal practice to attach your transcluded content (`clone`) to the DOM inside your **clone - * attach function**: - * - * ```js - * var transcludedContent, transclusionScope; - * - * $transclude(function(clone, scope) { - * element.append(clone); - * transcludedContent = clone; - * transclusionScope = scope; - * }); - * ``` - * - * Later, if you want to remove the transcluded content from your DOM then you should also destroy the - * associated transclusion scope: - * - * ```js - * transcludedContent.remove(); - * transclusionScope.$destroy(); - * ``` - * - *
      - * **Best Practice**: if you intend to add and remove transcluded content manually in your directive - * (by calling the transclude function to get the DOM and calling `element.remove()` to remove it), - * then you are also responsible for calling `$destroy` on the transclusion scope. - *
      - * - * The built-in DOM manipulation directives, such as {@link ngIf}, {@link ngSwitch} and {@link ngRepeat} - * automatically destroy their transcluded clones as necessary so you do not need to worry about this if - * you are simply using {@link ngTransclude} to inject the transclusion into your directive. - * - * - * #### Transclusion Scopes - * - * When you call a transclude function it returns a DOM fragment that is pre-bound to a **transclusion - * scope**. This scope is special, in that it is a child of the directive's scope (and so gets destroyed - * when the directive's scope gets destroyed) but it inherits the properties of the scope from which it - * was taken. - * - * For example consider a directive that uses transclusion and isolated scope. The DOM hierarchy might look - * like this: - * - * ```html - *
      - *
      - *
      - *
      - *
      - *
      - * ``` - * - * The `$parent` scope hierarchy will look like this: - * - ``` - - $rootScope - - isolate - - transclusion - ``` - * - * but the scopes will inherit prototypically from different scopes to their `$parent`. - * - ``` - - $rootScope - - transclusion - - isolate - ``` - * - * - * ### Attributes - * - * The {@link ng.$compile.directive.Attributes Attributes} object - passed as a parameter in the - * `link()` or `compile()` functions. It has a variety of uses. - * - * * *Accessing normalized attribute names:* Directives like `ngBind` can be expressed in many ways: - * `ng:bind`, `data-ng-bind`, or `x-ng-bind`. The attributes object allows for normalized access - * to the attributes. - * - * * *Directive inter-communication:* All directives share the same instance of the attributes - * object which allows the directives to use the attributes object as inter directive - * communication. - * - * * *Supports interpolation:* Interpolation attributes are assigned to the attribute object - * allowing other directives to read the interpolated value. - * - * * *Observing interpolated attributes:* Use `$observe` to observe the value changes of attributes - * that contain interpolation (e.g. `src="{{bar}}"`). Not only is this very efficient but it's also - * the only way to easily get the actual value because during the linking phase the interpolation - * hasn't been evaluated yet and so the value is at this time set to `undefined`. - * - * ```js - * function linkingFn(scope, elm, attrs, ctrl) { - * // get the attribute value - * console.log(attrs.ngModel); - * - * // change the attribute - * attrs.$set('ngModel', 'new value'); - * - * // observe changes to interpolated attribute - * attrs.$observe('ngModel', function(value) { - * console.log('ngModel has changed value to ' + value); - * }); - * } - * ``` - * - * ## Example - * - *
      - * **Note**: Typically directives are registered with `module.directive`. The example below is - * to illustrate how `$compile` works. - *
      - * - - - -
      -
      -
      -
      -
      -
      - - it('should auto compile', function() { - var textarea = $('textarea'); - var output = $('div[compile]'); - // The initial state reads 'Hello AngularJS'. - expect(output.getText()).toBe('Hello AngularJS'); - textarea.clear(); - textarea.sendKeys('{{name}}!'); - expect(output.getText()).toBe('AngularJS!'); - }); - -
      - - * - * - * @param {string|DOMElement} element Element or HTML string to compile into a template function. - * @param {function(angular.Scope, cloneAttachFn=)} transclude function available to directives - DEPRECATED. - * - *
      - * **Note:** Passing a `transclude` function to the $compile function is deprecated, as it - * e.g. will not use the right outer scope. Please pass the transclude function as a - * `parentBoundTranscludeFn` to the link function instead. - *
      - * - * @param {number} maxPriority only apply directives lower than given priority (Only effects the - * root element(s), not their children) - * @returns {function(scope, cloneAttachFn=, options=)} a link function which is used to bind template - * (a DOM element/tree) to a scope. Where: - * - * * `scope` - A {@link ng.$rootScope.Scope Scope} to bind to. - * * `cloneAttachFn` - If `cloneAttachFn` is provided, then the link function will clone the - * `template` and call the `cloneAttachFn` function allowing the caller to attach the - * cloned elements to the DOM document at the appropriate place. The `cloneAttachFn` is - * called as:
      `cloneAttachFn(clonedElement, scope)` where: - * - * * `clonedElement` - is a clone of the original `element` passed into the compiler. - * * `scope` - is the current scope with which the linking function is working with. - * - * * `options` - An optional object hash with linking options. If `options` is provided, then the following - * keys may be used to control linking behavior: - * - * * `parentBoundTranscludeFn` - the transclude function made available to - * directives; if given, it will be passed through to the link functions of - * directives found in `element` during compilation. - * * `transcludeControllers` - an object hash with keys that map controller names - * to a hash with the key `instance`, which maps to the controller instance; - * if given, it will make the controllers available to directives on the compileNode: - * ``` - * { - * parent: { - * instance: parentControllerInstance - * } - * } - * ``` - * * `futureParentElement` - defines the parent to which the `cloneAttachFn` will add - * the cloned elements; only needed for transcludes that are allowed to contain non HTML - * elements (e.g. SVG elements). See also the `directive.controller` property. - * - * Calling the linking function returns the element of the template. It is either the original - * element passed in, or the clone of the element if the `cloneAttachFn` is provided. - * - * After linking the view is not updated until after a call to `$digest`, which typically is done by - * AngularJS automatically. - * - * If you need access to the bound view, there are two ways to do it: - * - * - If you are not asking the linking function to clone the template, create the DOM element(s) - * before you send them to the compiler and keep this reference around. - * ```js - * var element = angular.element('

      {{total}}

      '); - * $compile(element)(scope); - * ``` - * - * - if on the other hand, you need the element to be cloned, the view reference from the original - * example would not point to the clone, but rather to the original template that was cloned. In - * this case, you can access the clone either via the `cloneAttachFn` or the value returned by the - * linking function: - * ```js - * var templateElement = angular.element('

      {{total}}

      '); - * var clonedElement = $compile(templateElement)(scope, function(clonedElement, scope) { - * // Attach the clone to DOM document at the right place. - * }); - * - * // Now we have reference to the cloned DOM via `clonedElement`. - * // NOTE: The `clonedElement` returned by the linking function is the same as the - * // `clonedElement` passed to `cloneAttachFn`. - * ``` - * - * - * For information on how the compiler works, see the - * {@link guide/compiler AngularJS HTML Compiler} section of the Developer Guide. - * - * @knownIssue - * - * ### Double Compilation - * - Double compilation occurs when an already compiled part of the DOM gets - compiled again. This is an undesired effect and can lead to misbehaving directives, performance issues, - and memory leaks. Refer to the Compiler Guide {@link guide/compiler#double-compilation-and-how-to-avoid-it - section on double compilation} for an in-depth explanation and ways to avoid it. - - * @knownIssue - - ### Issues with `replace: true` - * - *
      - * **Note**: {@link $compile#-replace- `replace: true`} is deprecated and not recommended to use, - * mainly due to the issues listed here. It has been completely removed in the new Angular. - *
      - * - * #### Attribute values are not merged - * - * When a `replace` directive encounters the same attribute on the original and the replace node, - * it will simply deduplicate the attribute and join the values with a space or with a `;` in case of - * the `style` attribute. - * ```html - * Original Node: - * Replace Template: - * Result: - * ``` - * - * That means attributes that contain AngularJS expressions will not be merged correctly, e.g. - * {@link ngShow} or {@link ngClass} will cause a {@link $parse} error: - * - * ```html - * Original Node: - * Replace Template: - * Result: - * ``` - * - * See issue [#5695](https://github.com/angular/angular.js/issues/5695). - * - * #### Directives are not deduplicated before compilation - * - * When the original node and the replace template declare the same directive(s), they will be - * {@link guide/compiler#double-compilation-and-how-to-avoid-it compiled twice} because the compiler - * does not deduplicate them. In many cases, this is not noticeable, but e.g. {@link ngModel} will - * attach `$formatters` and `$parsers` twice. - * - * See issue [#2573](https://github.com/angular/angular.js/issues/2573). - * - * #### `transclude: element` in the replace template root can have unexpected effects - * - * When the replace template has a directive at the root node that uses - * {@link $compile#-transclude- `transclude: element`}, e.g. - * {@link ngIf} or {@link ngRepeat}, the DOM structure or scope inheritance can be incorrect. - * See the following issues: - * - * - Incorrect scope on replaced element: - * [#9837](https://github.com/angular/angular.js/issues/9837) - * - Different DOM between `template` and `templateUrl`: - * [#10612](https://github.com/angular/angular.js/issues/14326) - * - */ - -/** - * @ngdoc directive - * @name ngProp - * @restrict A - * @element ANY - * - * @usage - * - * ```html - * - * - * ``` - * - * or with uppercase letters in property (e.g. "propName"): - * - * - * ```html - * - * - * ``` - * - * - * @description - * The `ngProp` directive binds an expression to a DOM element property. - * `ngProp` allows writing to arbitrary properties by including - * the property name in the attribute, e.g. `ng-prop-value="'my value'"` binds 'my value' to - * the `value` property. - * - * Usually, it's not necessary to write to properties in AngularJS, as the built-in directives - * handle the most common use cases (instead of the above example, you would use {@link ngValue}). - * - * However, [custom elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements) - * often use custom properties to hold data, and `ngProp` can be used to provide input to these - * custom elements. - * - * ## Binding to camelCase properties - * - * Since HTML attributes are case-insensitive, camelCase properties like `innerHTML` must be escaped. - * AngularJS uses the underscore (_) in front of a character to indicate that it is uppercase, so - * `innerHTML` must be written as `ng-prop-inner_h_t_m_l="expression"` (Note that this is just an - * example, and for binding HTML {@link ngBindHtml} should be used. - * - * ## Security - * - * Binding expressions to arbitrary properties poses a security risk, as properties like `innerHTML` - * can insert potentially dangerous HTML into the application, e.g. script tags that execute - * malicious code. - * For this reason, `ngProp` applies Strict Contextual Escaping with the {@link ng.$sce $sce service}. - * This means vulnerable properties require their content to be "trusted", based on the - * context of the property. For example, the `innerHTML` is in the `HTML` context, and the - * `iframe.src` property is in the `RESOURCE_URL` context, which requires that values written to - * this property are trusted as a `RESOURCE_URL`. - * - * This can be set explicitly by calling $sce.trustAs(type, value) on the value that is - * trusted before passing it to the `ng-prop-*` directive. There are exist shorthand methods for - * each context type in the form of {@link ng.$sce#trustAsResourceUrl $sce.trustAsResourceUrl()} et al. - * - * In some cases you can also rely upon automatic sanitization of untrusted values - see below. - * - * Based on the context, other options may exist to mark a value as trusted / configure the behavior - * of {@link ng.$sce}. For example, to restrict the `RESOURCE_URL` context to specific origins, use - * the {@link $sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist()} - * and {@link $sceDelegateProvider#resourceUrlBlacklist resourceUrlBlacklist()}. - * - * {@link ng.$sce#what-trusted-context-types-are-supported- Find out more about the different context types}. - * - * ### HTML Sanitization - * - * By default, `$sce` will throw an error if it detects untrusted HTML content, and will not bind the - * content. - * However, if you include the {@link ngSanitize ngSanitize module}, it will try to sanitize the - * potentially dangerous HTML, e.g. strip non-whitelisted tags and attributes when binding to - * `innerHTML`. - * - * @example - * ### Binding to different contexts - * - * - * - * angular.module('exampleNgProp', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function($sce) { - * this.safeContent = 'Safe content'; - * this.unsafeContent = ''; - * this.trustedUnsafeContent = $sce.trustAsHtml(this.unsafeContent); - * } - * }); - * - * - *
      - *
      - * Binding to a property without security context: - *
      - * innerText (safeContent) - *
      - * - *
      - * "Safe" content that requires a security context will throw because the contents could potentially be dangerous ... - *
      - * innerHTML (safeContent) - *
      - * - *
      - * ... so that actually dangerous content cannot be executed: - *
      - * innerHTML (unsafeContent) - *
      - * - *
      - * ... but unsafe Content that has been trusted explicitly works - only do this if you are 100% sure! - *
      - * innerHTML (trustedUnsafeContent) - *
      - *
      - *
      - * - *
      - *
      - * - * .prop-unit { - * margin-bottom: 10px; - * } - * - * .prop-binding { - * min-height: 30px; - * border: 1px solid blue; - * } - * - * .prop-note { - * font-family: Monospace; - * } - * - *
      - * - * - * @example - * ### Binding to innerHTML with ngSanitize - * - * - * - * angular.module('exampleNgProp', ['ngSanitize']) - * .component('main', { - * templateUrl: 'main.html', - * controller: function($sce) { - * this.safeContent = 'Safe content'; - * this.unsafeContent = ''; - * this.trustedUnsafeContent = $sce.trustAsHtml(this.unsafeContent); - * } - * }); - * - * - *
      - *
      - * "Safe" content will be sanitized ... - *
      - * innerHTML (safeContent) - *
      - * - *
      - * ... as will dangerous content: - *
      - * innerHTML (unsafeContent) - *
      - * - *
      - * ... and content that has been trusted explicitly works the same as without ngSanitize: - *
      - * innerHTML (trustedUnsafeContent) - *
      - *
      - *
      - * - *
      - *
      - * - * .prop-unit { - * margin-bottom: 10px; - * } - * - * .prop-binding { - * min-height: 30px; - * border: 1px solid blue; - * } - * - * .prop-note { - * font-family: Monospace; - * } - * - *
      - * - */ - -/** @ngdoc directive - * @name ngOn - * @restrict A - * @element ANY - * - * @usage - * - * ```html - * - * - * ``` - * - * or with uppercase letters in property (e.g. "eventName"): - * - * - * ```html - * - * - * ``` - * - * @description - * The `ngOn` directive adds an event listener to a DOM element via - * {@link angular.element angular.element().on()}, and evaluates an expression when the event is - * fired. - * `ngOn` allows adding listeners for arbitrary events by including - * the event name in the attribute, e.g. `ng-on-drop="onDrop()"` executes the 'onDrop()' expression - * when the `drop` event is fired. - * - * AngularJS provides specific directives for many events, such as {@link ngClick}, so in most - * cases it is not necessary to use `ngOn`. However, AngularJS does not support all events - * (e.g. the `drop` event in the example above), and new events might be introduced in later DOM - * standards. - * - * Another use-case for `ngOn` is listening to - * [custom events](https://developer.mozilla.org/docs/Web/Guide/Events/Creating_and_triggering_events) - * fired by - * [custom elements](https://developer.mozilla.org/docs/Web/Web_Components/Using_custom_elements). - * - * ## Binding to camelCase properties - * - * Since HTML attributes are case-insensitive, camelCase properties like `myEvent` must be escaped. - * AngularJS uses the underscore (_) in front of a character to indicate that it is uppercase, so - * `myEvent` must be written as `ng-on-my_event="expression"`. - * - * @example - * ### Bind to built-in DOM events - * - * - * - * angular.module('exampleNgOn', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function() { - * this.clickCount = 0; - * this.mouseoverCount = 0; - * - * this.loadingState = 0; - * } - * }); - * - * - *
      - * This is equivalent to `ngClick` and `ngMouseover`:
      - *
      - * clickCount: {{$ctrl.clickCount}}
      - * mouseover: {{$ctrl.mouseoverCount}} - * - *
      - * - * For the `error` and `load` event on images no built-in AngularJS directives exist:
      - *
      - *
      - * Image is loading - * Image load error - * Image loaded successfully - *
      - *
      - *
      - * - *
      - *
      - *
      - * - * - * @example - * ### Bind to custom DOM events - * - * - * - * angular.module('exampleNgOn', []) - * .component('main', { - * templateUrl: 'main.html', - * controller: function() { - * this.eventLog = ''; - * - * this.listener = function($event) { - * this.eventLog = 'Event with type "' + $event.type + '" fired at ' + $event.detail; - * }; - * } - * }) - * .component('childComponent', { - * templateUrl: 'child.html', - * controller: function($element) { - * this.fireEvent = function() { - * var event = new CustomEvent('customtype', { detail: new Date()}); - * - * $element[0].dispatchEvent(event); - * }; - * } - * }); - * - * - *
      - * Event log: {{$ctrl.eventLog}} - *
      - * - - * - * - *
      - *
      - *
      - */ - -var $compileMinErr = minErr('$compile'); - -function UNINITIALIZED_VALUE() {} -var _UNINITIALIZED_VALUE = new UNINITIALIZED_VALUE(); - -/** - * @ngdoc provider - * @name $compileProvider - * - * @description - */ -$CompileProvider.$inject = ['$provide', '$$sanitizeUriProvider']; -/** @this */ -function $CompileProvider($provide, $$sanitizeUriProvider) { - var hasDirectives = {}, - Suffix = 'Directive', - COMMENT_DIRECTIVE_REGEXP = /^\s*directive:\s*([\w-]+)\s+(.*)$/, - CLASS_DIRECTIVE_REGEXP = /(([\w-]+)(?::([^;]+))?;?)/, - ALL_OR_NOTHING_ATTRS = makeMap('ngSrc,ngSrcset,src,srcset'), - REQUIRE_PREFIX_REGEXP = /^(?:(\^\^?)?(\?)?(\^\^?)?)?/; - - // Ref: http://developers.whatwg.org/webappapis.html#event-handler-idl-attributes - // The assumption is that future DOM event attribute names will begin with - // 'on' and be composed of only English letters. - var EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; - var bindingCache = createMap(); - - function parseIsolateBindings(scope, directiveName, isController) { - var LOCAL_REGEXP = /^([@&]|[=<](\*?))(\??)\s*([\w$]*)$/; - - var bindings = createMap(); - - forEach(scope, function(definition, scopeName) { - definition = definition.trim(); - - if (definition in bindingCache) { - bindings[scopeName] = bindingCache[definition]; - return; - } - var match = definition.match(LOCAL_REGEXP); - - if (!match) { - throw $compileMinErr('iscp', - 'Invalid {3} for directive \'{0}\'.' + - ' Definition: {... {1}: \'{2}\' ...}', - directiveName, scopeName, definition, - (isController ? 'controller bindings definition' : - 'isolate scope definition')); - } - - bindings[scopeName] = { - mode: match[1][0], - collection: match[2] === '*', - optional: match[3] === '?', - attrName: match[4] || scopeName - }; - if (match[4]) { - bindingCache[definition] = bindings[scopeName]; - } - }); - - return bindings; - } - - function parseDirectiveBindings(directive, directiveName) { - var bindings = { - isolateScope: null, - bindToController: null - }; - if (isObject(directive.scope)) { - if (directive.bindToController === true) { - bindings.bindToController = parseIsolateBindings(directive.scope, - directiveName, true); - bindings.isolateScope = {}; - } else { - bindings.isolateScope = parseIsolateBindings(directive.scope, - directiveName, false); - } - } - if (isObject(directive.bindToController)) { - bindings.bindToController = - parseIsolateBindings(directive.bindToController, directiveName, true); - } - if (bindings.bindToController && !directive.controller) { - // There is no controller - throw $compileMinErr('noctrl', - 'Cannot bind to controller without directive \'{0}\'s controller.', - directiveName); - } - return bindings; - } - - function assertValidDirectiveName(name) { - var letter = name.charAt(0); - if (!letter || letter !== lowercase(letter)) { - throw $compileMinErr('baddir', 'Directive/Component name \'{0}\' is invalid. The first character must be a lowercase letter', name); - } - if (name !== name.trim()) { - throw $compileMinErr('baddir', - 'Directive/Component name \'{0}\' is invalid. The name should not contain leading or trailing whitespaces', - name); - } - } - - function getDirectiveRequire(directive) { - var require = directive.require || (directive.controller && directive.name); - - if (!isArray(require) && isObject(require)) { - forEach(require, function(value, key) { - var match = value.match(REQUIRE_PREFIX_REGEXP); - var name = value.substring(match[0].length); - if (!name) require[key] = match[0] + key; - }); - } - - return require; - } - - function getDirectiveRestrict(restrict, name) { - if (restrict && !(isString(restrict) && /[EACM]/.test(restrict))) { - throw $compileMinErr('badrestrict', - 'Restrict property \'{0}\' of directive \'{1}\' is invalid', - restrict, - name); - } - - return restrict || 'EA'; - } - - /** - * @ngdoc method - * @name $compileProvider#directive - * @kind function - * - * @description - * Register a new directive with the compiler. - * - * @param {string|Object} name Name of the directive in camel-case (i.e. `ngBind` which will match - * as `ng-bind`), or an object map of directives where the keys are the names and the values - * are the factories. - * @param {Function|Array} directiveFactory An injectable directive factory function. See the - * {@link guide/directive directive guide} and the {@link $compile compile API} for more info. - * @returns {ng.$compileProvider} Self for chaining. - */ - this.directive = function registerDirective(name, directiveFactory) { - assertArg(name, 'name'); - assertNotHasOwnProperty(name, 'directive'); - if (isString(name)) { - assertValidDirectiveName(name); - assertArg(directiveFactory, 'directiveFactory'); - if (!hasDirectives.hasOwnProperty(name)) { - hasDirectives[name] = []; - $provide.factory(name + Suffix, ['$injector', '$exceptionHandler', - function($injector, $exceptionHandler) { - var directives = []; - forEach(hasDirectives[name], function(directiveFactory, index) { - try { - var directive = $injector.invoke(directiveFactory); - if (isFunction(directive)) { - directive = { compile: valueFn(directive) }; - } else if (!directive.compile && directive.link) { - directive.compile = valueFn(directive.link); - } - directive.priority = directive.priority || 0; - directive.index = index; - directive.name = directive.name || name; - directive.require = getDirectiveRequire(directive); - directive.restrict = getDirectiveRestrict(directive.restrict, name); - directive.$$moduleName = directiveFactory.$$moduleName; - directives.push(directive); - } catch (e) { - $exceptionHandler(e); - } - }); - return directives; - }]); - } - hasDirectives[name].push(directiveFactory); - } else { - forEach(name, reverseParams(registerDirective)); - } - return this; - }; - - /** - * @ngdoc method - * @name $compileProvider#component - * @module ng - * @param {string|Object} name Name of the component in camelCase (i.e. `myComp` which will match ``), - * or an object map of components where the keys are the names and the values are the component definition objects. - * @param {Object} options Component definition object (a simplified - * {@link ng.$compile#directive-definition-object directive definition object}), - * with the following properties (all optional): - * - * - `controller` – `{(string|function()=}` – controller constructor function that should be - * associated with newly created scope or the name of a {@link ng.$compile#-controller- - * registered controller} if passed as a string. An empty `noop` function by default. - * - `controllerAs` – `{string=}` – identifier name for to reference the controller in the component's scope. - * If present, the controller will be published to scope under the `controllerAs` name. - * If not present, this will default to be `$ctrl`. - * - `template` – `{string=|function()=}` – html template as a string or a function that - * returns an html template as a string which should be used as the contents of this component. - * Empty string by default. - * - * If `template` is a function, then it is {@link auto.$injector#invoke injected} with - * the following locals: - * - * - `$element` - Current element - * - `$attrs` - Current attributes object for the element - * - * - `templateUrl` – `{string=|function()=}` – path or function that returns a path to an html - * template that should be used as the contents of this component. - * - * If `templateUrl` is a function, then it is {@link auto.$injector#invoke injected} with - * the following locals: - * - * - `$element` - Current element - * - `$attrs` - Current attributes object for the element - * - * - `bindings` – `{object=}` – defines bindings between DOM attributes and component properties. - * Component properties are always bound to the component controller and not to the scope. - * See {@link ng.$compile#-bindtocontroller- `bindToController`}. - * - `transclude` – `{boolean=}` – whether {@link $compile#transclusion content transclusion} is enabled. - * Disabled by default. - * - `require` - `{Object=}` - requires the controllers of other directives and binds them to - * this component's controller. The object keys specify the property names under which the required - * controllers (object values) will be bound. See {@link ng.$compile#-require- `require`}. - * - `$...` – additional properties to attach to the directive factory function and the controller - * constructor function. (This is used by the component router to annotate) - * - * @returns {ng.$compileProvider} the compile provider itself, for chaining of function calls. - * @description - * Register a **component definition** with the compiler. This is a shorthand for registering a special - * type of directive, which represents a self-contained UI component in your application. Such components - * are always isolated (i.e. `scope: {}`) and are always restricted to elements (i.e. `restrict: 'E'`). - * - * Component definitions are very simple and do not require as much configuration as defining general - * directives. Component definitions usually consist only of a template and a controller backing it. - * - * In order to make the definition easier, components enforce best practices like use of `controllerAs`, - * `bindToController`. They always have **isolate scope** and are restricted to elements. - * - * Here are a few examples of how you would usually define components: - * - * ```js - * var myMod = angular.module(...); - * myMod.component('myComp', { - * template: '
      My name is {{$ctrl.name}}
      ', - * controller: function() { - * this.name = 'shahar'; - * } - * }); - * - * myMod.component('myComp', { - * template: '
      My name is {{$ctrl.name}}
      ', - * bindings: {name: '@'} - * }); - * - * myMod.component('myComp', { - * templateUrl: 'views/my-comp.html', - * controller: 'MyCtrl', - * controllerAs: 'ctrl', - * bindings: {name: '@'} - * }); - * - * ``` - * For more examples, and an in-depth guide, see the {@link guide/component component guide}. - * - *
      - * See also {@link ng.$compileProvider#directive $compileProvider.directive()}. - */ - this.component = function registerComponent(name, options) { - if (!isString(name)) { - forEach(name, reverseParams(bind(this, registerComponent))); - return this; - } - - var controller = options.controller || function() {}; - - function factory($injector) { - function makeInjectable(fn) { - if (isFunction(fn) || isArray(fn)) { - return /** @this */ function(tElement, tAttrs) { - return $injector.invoke(fn, this, {$element: tElement, $attrs: tAttrs}); - }; - } else { - return fn; - } - } - - var template = (!options.template && !options.templateUrl ? '' : options.template); - var ddo = { - controller: controller, - controllerAs: identifierForController(options.controller) || options.controllerAs || '$ctrl', - template: makeInjectable(template), - templateUrl: makeInjectable(options.templateUrl), - transclude: options.transclude, - scope: {}, - bindToController: options.bindings || {}, - restrict: 'E', - require: options.require - }; - - // Copy annotations (starting with $) over to the DDO - forEach(options, function(val, key) { - if (key.charAt(0) === '$') ddo[key] = val; - }); - - return ddo; - } - - // TODO(pete) remove the following `forEach` before we release 1.6.0 - // The component-router@0.2.0 looks for the annotations on the controller constructor - // Nothing in AngularJS looks for annotations on the factory function but we can't remove - // it from 1.5.x yet. - - // Copy any annotation properties (starting with $) over to the factory and controller constructor functions - // These could be used by libraries such as the new component router - forEach(options, function(val, key) { - if (key.charAt(0) === '$') { - factory[key] = val; - // Don't try to copy over annotations to named controller - if (isFunction(controller)) controller[key] = val; - } - }); - - factory.$inject = ['$injector']; - - return this.directive(name, factory); - }; - - - /** - * @ngdoc method - * @name $compileProvider#aHrefSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at preventing XSS attacks via html links. - * - * Any url about to be assigned to a[href] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `aHrefSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.aHrefSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.aHrefSanitizationWhitelist(); - } - }; - - - /** - * @ngdoc method - * @name $compileProvider#imgSrcSanitizationWhitelist - * @kind function - * - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via html links. - * - * Any url about to be assigned to img[src] via data-binding is first normalized and turned into - * an absolute url. Afterwards, the url is matched against the `imgSrcSanitizationWhitelist` - * regular expression. If a match is found, the original url is written into the dom. Otherwise, - * the absolute url is prefixed with `'unsafe:'` string and only then is it written into the DOM. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - $$sanitizeUriProvider.imgSrcSanitizationWhitelist(regexp); - return this; - } else { - return $$sanitizeUriProvider.imgSrcSanitizationWhitelist(); - } - }; - - /** - * @ngdoc method - * @name $compileProvider#debugInfoEnabled - * - * @param {boolean=} enabled update the debugInfoEnabled state if provided, otherwise just return the - * current debugInfoEnabled state - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable/disable various debug runtime information in the compiler such as adding - * binding information and a reference to the current scope on to DOM elements. - * If enabled, the compiler will add the following to DOM elements that have been bound to the scope - * * `ng-binding` CSS class - * * `ng-scope` and `ng-isolated-scope` CSS classes - * * `$binding` data property containing an array of the binding expressions - * * Data properties used by the {@link angular.element#methods `scope()`/`isolateScope()` methods} to return - * the element's scope. - * * Placeholder comments will contain information about what directive and binding caused the placeholder. - * E.g. ``. - * - * You may want to disable this in production for a significant performance boost. See - * {@link guide/production#disabling-debug-data Disabling Debug Data} for more. - * - * The default value is true. - */ - var debugInfoEnabled = true; - this.debugInfoEnabled = function(enabled) { - if (isDefined(enabled)) { - debugInfoEnabled = enabled; - return this; - } - return debugInfoEnabled; - }; - - /** - * @ngdoc method - * @name $compileProvider#strictComponentBindingsEnabled - * - * @param {boolean=} enabled update the strictComponentBindingsEnabled state if provided, - * otherwise return the current strictComponentBindingsEnabled state. - * @returns {*} current value if used as getter or itself (chaining) if used as setter - * - * @kind function - * - * @description - * Call this method to enable / disable the strict component bindings check. If enabled, the - * compiler will enforce that all scope / controller bindings of a - * {@link $compileProvider#directive directive} / {@link $compileProvider#component component} - * that are not set as optional with `?`, must be provided when the directive is instantiated. - * If not provided, the compiler will throw the - * {@link error/$compile/missingattr $compile:missingattr error}. - * - * The default value is false. - */ - var strictComponentBindingsEnabled = false; - this.strictComponentBindingsEnabled = function(enabled) { - if (isDefined(enabled)) { - strictComponentBindingsEnabled = enabled; - return this; - } - return strictComponentBindingsEnabled; - }; - - var TTL = 10; - /** - * @ngdoc method - * @name $compileProvider#onChangesTtl - * @description - * - * Sets the number of times `$onChanges` hooks can trigger new changes before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that dependencies between `$onChanges` hooks and bindings will result - * in several iterations of calls to these hooks. However if an application needs more than the default 10 - * iterations to stabilize then you should investigate what is causing the model to continuously change during - * the `$onChanges` hook execution. - * - * Increasing the TTL could have performance implications, so you should not change it without proper justification. - * - * @param {number} limit The number of `$onChanges` hook iterations. - * @returns {number|object} the current limit (or `this` if called as a setter for chaining) - */ - this.onChangesTtl = function(value) { - if (arguments.length) { - TTL = value; - return this; - } - return TTL; - }; - - var commentDirectivesEnabledConfig = true; - /** - * @ngdoc method - * @name $compileProvider#commentDirectivesEnabled - * @description - * - * It indicates to the compiler - * whether or not directives on comments should be compiled. - * Defaults to `true`. - * - * Calling this function with false disables the compilation of directives - * on comments for the whole application. - * This results in a compilation performance gain, - * as the compiler doesn't have to check comments when looking for directives. - * This should however only be used if you are sure that no comment directives are used in - * the application (including any 3rd party directives). - * - * @param {boolean} enabled `false` if the compiler may ignore directives on comments - * @returns {boolean|object} the current value (or `this` if called as a setter for chaining) - */ - this.commentDirectivesEnabled = function(value) { - if (arguments.length) { - commentDirectivesEnabledConfig = value; - return this; - } - return commentDirectivesEnabledConfig; - }; - - - var cssClassDirectivesEnabledConfig = true; - /** - * @ngdoc method - * @name $compileProvider#cssClassDirectivesEnabled - * @description - * - * It indicates to the compiler - * whether or not directives on element classes should be compiled. - * Defaults to `true`. - * - * Calling this function with false disables the compilation of directives - * on element classes for the whole application. - * This results in a compilation performance gain, - * as the compiler doesn't have to check element classes when looking for directives. - * This should however only be used if you are sure that no class directives are used in - * the application (including any 3rd party directives). - * - * @param {boolean} enabled `false` if the compiler may ignore directives on element classes - * @returns {boolean|object} the current value (or `this` if called as a setter for chaining) - */ - this.cssClassDirectivesEnabled = function(value) { - if (arguments.length) { - cssClassDirectivesEnabledConfig = value; - return this; - } - return cssClassDirectivesEnabledConfig; - }; - - - /** - * The security context of DOM Properties. - * @private - */ - var PROP_CONTEXTS = createMap(); - - /** - * @ngdoc method - * @name $compileProvider#addPropertySecurityContext - * @description - * - * Defines the security context for DOM properties bound by ng-prop-*. - * - * @param {string} elementName The element name or '*' to match any element. - * @param {string} propertyName The DOM property name. - * @param {string} ctx The {@link $sce} security context in which this value is safe for use, e.g. `$sce.URL` - * @returns {object} `this` for chaining - */ - this.addPropertySecurityContext = function(elementName, propertyName, ctx) { - var key = (elementName.toLowerCase() + '|' + propertyName.toLowerCase()); - - if (key in PROP_CONTEXTS && PROP_CONTEXTS[key] !== ctx) { - throw $compileMinErr('ctxoverride', 'Property context \'{0}.{1}\' already set to \'{2}\', cannot override to \'{3}\'.', elementName, propertyName, PROP_CONTEXTS[key], ctx); - } - - PROP_CONTEXTS[key] = ctx; - return this; - }; - - /* Default property contexts. - * - * Copy of https://github.com/angular/angular/blob/6.0.6/packages/compiler/src/schema/dom_security_schema.ts#L31-L58 - * Changing: - * - SecurityContext.* => SCE_CONTEXTS/$sce.* - * - STYLE => CSS - * - various URL => MEDIA_URL - * - *|formAction, form|action URL => RESOURCE_URL (like the attribute) - */ - (function registerNativePropertyContexts() { - function registerContext(ctx, values) { - forEach(values, function(v) { PROP_CONTEXTS[v.toLowerCase()] = ctx; }); - } - - registerContext(SCE_CONTEXTS.HTML, [ - 'iframe|srcdoc', - '*|innerHTML', - '*|outerHTML' - ]); - registerContext(SCE_CONTEXTS.CSS, ['*|style']); - registerContext(SCE_CONTEXTS.URL, [ - 'area|href', 'area|ping', - 'a|href', 'a|ping', - 'blockquote|cite', - 'body|background', - 'del|cite', - 'input|src', - 'ins|cite', - 'q|cite' - ]); - registerContext(SCE_CONTEXTS.MEDIA_URL, [ - 'audio|src', - 'img|src', 'img|srcset', - 'source|src', 'source|srcset', - 'track|src', - 'video|src', 'video|poster' - ]); - registerContext(SCE_CONTEXTS.RESOURCE_URL, [ - '*|formAction', - 'applet|code', 'applet|codebase', - 'base|href', - 'embed|src', - 'frame|src', - 'form|action', - 'head|profile', - 'html|manifest', - 'iframe|src', - 'link|href', - 'media|src', - 'object|codebase', 'object|data', - 'script|src' - ]); - })(); - - - this.$get = [ - '$injector', '$interpolate', '$exceptionHandler', '$templateRequest', '$parse', - '$controller', '$rootScope', '$sce', '$animate', - function($injector, $interpolate, $exceptionHandler, $templateRequest, $parse, - $controller, $rootScope, $sce, $animate) { - - var SIMPLE_ATTR_NAME = /^\w/; - var specialAttrHolder = window.document.createElement('div'); - - - var commentDirectivesEnabled = commentDirectivesEnabledConfig; - var cssClassDirectivesEnabled = cssClassDirectivesEnabledConfig; - - - var onChangesTtl = TTL; - // The onChanges hooks should all be run together in a single digest - // When changes occur, the call to trigger their hooks will be added to this queue - var onChangesQueue; - - // This function is called in a $$postDigest to trigger all the onChanges hooks in a single digest - function flushOnChangesQueue() { - try { - if (!(--onChangesTtl)) { - // We have hit the TTL limit so reset everything - onChangesQueue = undefined; - throw $compileMinErr('infchng', '{0} $onChanges() iterations reached. Aborting!\n', TTL); - } - // We must run this hook in an apply since the $$postDigest runs outside apply - $rootScope.$apply(function() { - for (var i = 0, ii = onChangesQueue.length; i < ii; ++i) { - try { - onChangesQueue[i](); - } catch (e) { - $exceptionHandler(e); - } - } - // Reset the queue to trigger a new schedule next time there is a change - onChangesQueue = undefined; - }); - } finally { - onChangesTtl++; - } - } - - - function sanitizeSrcset(value, invokeType) { - if (!value) { - return value; - } - if (!isString(value)) { - throw $compileMinErr('srcset', 'Can\'t pass trusted values to `{0}`: "{1}"', invokeType, value.toString()); - } - - // Such values are a bit too complex to handle automatically inside $sce. - // Instead, we sanitize each of the URIs individually, which works, even dynamically. - - // It's not possible to work around this using `$sce.trustAsMediaUrl`. - // If you want to programmatically set explicitly trusted unsafe URLs, you should use - // `$sce.trustAsHtml` on the whole `img` tag and inject it into the DOM using the - // `ng-bind-html` directive. - - var result = ''; - - // first check if there are spaces because it's not the same pattern - var trimmedSrcset = trim(value); - // ( 999x ,| 999w ,| ,|, ) - var srcPattern = /(\s+\d+x\s*,|\s+\d+w\s*,|\s+,|,\s+)/; - var pattern = /\s/.test(trimmedSrcset) ? srcPattern : /(,)/; - - // split srcset into tuple of uri and descriptor except for the last item - var rawUris = trimmedSrcset.split(pattern); - - // for each tuples - var nbrUrisWith2parts = Math.floor(rawUris.length / 2); - for (var i = 0; i < nbrUrisWith2parts; i++) { - var innerIdx = i * 2; - // sanitize the uri - result += $sce.getTrustedMediaUrl(trim(rawUris[innerIdx])); - // add the descriptor - result += ' ' + trim(rawUris[innerIdx + 1]); - } - - // split the last item into uri and descriptor - var lastTuple = trim(rawUris[i * 2]).split(/\s/); - - // sanitize the last uri - result += $sce.getTrustedMediaUrl(trim(lastTuple[0])); - - // and add the last descriptor if any - if (lastTuple.length === 2) { - result += (' ' + trim(lastTuple[1])); - } - return result; - } - - - function Attributes(element, attributesToCopy) { - if (attributesToCopy) { - var keys = Object.keys(attributesToCopy); - var i, l, key; - - for (i = 0, l = keys.length; i < l; i++) { - key = keys[i]; - this[key] = attributesToCopy[key]; - } - } else { - this.$attr = {}; - } - - this.$$element = element; - } - - Attributes.prototype = { - /** - * @ngdoc method - * @name $compile.directive.Attributes#$normalize - * @kind function - * - * @description - * Converts an attribute name (e.g. dash/colon/underscore-delimited string, optionally prefixed with `x-` or - * `data-`) to its normalized, camelCase form. - * - * Also there is special case for Moz prefix starting with upper case letter. - * - * For further information check out the guide on {@link guide/directive#matching-directives Matching Directives} - * - * @param {string} name Name to normalize - */ - $normalize: directiveNormalize, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$addClass - * @kind function - * - * @description - * Adds the CSS class value specified by the classVal parameter to the element. If animations - * are enabled then an animation will be triggered for the class addition. - * - * @param {string} classVal The className value that will be added to the element - */ - $addClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.addClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$removeClass - * @kind function - * - * @description - * Removes the CSS class value specified by the classVal parameter from the element. If - * animations are enabled then an animation will be triggered for the class removal. - * - * @param {string} classVal The className value that will be removed from the element - */ - $removeClass: function(classVal) { - if (classVal && classVal.length > 0) { - $animate.removeClass(this.$$element, classVal); - } - }, - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$updateClass - * @kind function - * - * @description - * Adds and removes the appropriate CSS class values to the element based on the difference - * between the new and old CSS class values (specified as newClasses and oldClasses). - * - * @param {string} newClasses The current CSS className value - * @param {string} oldClasses The former CSS className value - */ - $updateClass: function(newClasses, oldClasses) { - var toAdd = tokenDifference(newClasses, oldClasses); - if (toAdd && toAdd.length) { - $animate.addClass(this.$$element, toAdd); - } - - var toRemove = tokenDifference(oldClasses, newClasses); - if (toRemove && toRemove.length) { - $animate.removeClass(this.$$element, toRemove); - } - }, - - /** - * Set a normalized attribute on the element in a way such that all directives - * can share the attribute. This function properly handles boolean attributes. - * @param {string} key Normalized key. (ie ngAttribute) - * @param {string|boolean} value The value to set. If `null` attribute will be deleted. - * @param {boolean=} writeAttr If false, does not write the value to DOM element attribute. - * Defaults to true. - * @param {string=} attrName Optional none normalized name. Defaults to key. - */ - $set: function(key, value, writeAttr, attrName) { - // TODO: decide whether or not to throw an error if "class" - // is set through this function since it may cause $updateClass to - // become unstable. - - var node = this.$$element[0], - booleanKey = getBooleanAttrName(node, key), - aliasedKey = getAliasedAttrName(key), - observer = key, - nodeName; - - if (booleanKey) { - this.$$element.prop(key, value); - attrName = booleanKey; - } else if (aliasedKey) { - this[aliasedKey] = value; - observer = aliasedKey; - } - - this[key] = value; - - // translate normalized key to actual key - if (attrName) { - this.$attr[key] = attrName; - } else { - attrName = this.$attr[key]; - if (!attrName) { - this.$attr[key] = attrName = snake_case(key, '-'); - } - } - - nodeName = nodeName_(this.$$element); - - // Sanitize img[srcset] values. - if (nodeName === 'img' && key === 'srcset') { - this[key] = value = sanitizeSrcset(value, '$set(\'srcset\', value)'); - } - - if (writeAttr !== false) { - if (value === null || isUndefined(value)) { - this.$$element.removeAttr(attrName); - } else { - if (SIMPLE_ATTR_NAME.test(attrName)) { - // jQuery skips special boolean attrs treatment in XML nodes for - // historical reasons and hence AngularJS cannot freely call - // `.attr(attrName, false) with such attributes. To avoid issues - // in XHTML, call `removeAttr` in such cases instead. - // See https://github.com/jquery/jquery/issues/4249 - if (booleanKey && value === false) { - this.$$element.removeAttr(attrName); - } else { - this.$$element.attr(attrName, value); - } - } else { - setSpecialAttr(this.$$element[0], attrName, value); - } - } - } - - // fire observers - var $$observers = this.$$observers; - if ($$observers) { - forEach($$observers[observer], function(fn) { - try { - fn(value); - } catch (e) { - $exceptionHandler(e); - } - }); - } - }, - - - /** - * @ngdoc method - * @name $compile.directive.Attributes#$observe - * @kind function - * - * @description - * Observes an interpolated attribute. - * - * The observer function will be invoked once during the next `$digest` following - * compilation. The observer is then invoked whenever the interpolated value - * changes. - * - * @param {string} key Normalized key. (ie ngAttribute) . - * @param {function(interpolatedValue)} fn Function that will be called whenever - the interpolated value of the attribute changes. - * See the {@link guide/interpolation#how-text-and-attribute-bindings-work Interpolation - * guide} for more info. - * @returns {function()} Returns a deregistration function for this observer. - */ - $observe: function(key, fn) { - var attrs = this, - $$observers = (attrs.$$observers || (attrs.$$observers = createMap())), - listeners = ($$observers[key] || ($$observers[key] = [])); - - listeners.push(fn); - $rootScope.$evalAsync(function() { - if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) { - // no one registered attribute interpolation function, so lets call it manually - fn(attrs[key]); - } - }); - - return function() { - arrayRemove(listeners, fn); - }; - } - }; - - function setSpecialAttr(element, attrName, value) { - // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute` - // so we have to jump through some hoops to get such an attribute - // https://github.com/angular/angular.js/pull/13318 - specialAttrHolder.innerHTML = ''; - var attributes = specialAttrHolder.firstChild.attributes; - var attribute = attributes[0]; - // We have to remove the attribute from its container element before we can add it to the destination element - attributes.removeNamedItem(attribute.name); - attribute.value = value; - element.attributes.setNamedItem(attribute); - } - - function safeAddClass($element, className) { - try { - $element.addClass(className); - } catch (e) { - // ignore, since it means that we are trying to set class on - // SVG element, where class name is read-only. - } - } - - - var startSymbol = $interpolate.startSymbol(), - endSymbol = $interpolate.endSymbol(), - denormalizeTemplate = (startSymbol === '{{' && endSymbol === '}}') - ? identity - : function denormalizeTemplate(template) { - return template.replace(/\{\{/g, startSymbol).replace(/}}/g, endSymbol); - }, - NG_PREFIX_BINDING = /^ng(Attr|Prop|On)([A-Z].*)$/; - var MULTI_ELEMENT_DIR_RE = /^(.+)Start$/; - - compile.$$addBindingInfo = debugInfoEnabled ? function $$addBindingInfo($element, binding) { - var bindings = $element.data('$binding') || []; - - if (isArray(binding)) { - bindings = bindings.concat(binding); - } else { - bindings.push(binding); - } - - $element.data('$binding', bindings); - } : noop; - - compile.$$addBindingClass = debugInfoEnabled ? function $$addBindingClass($element) { - safeAddClass($element, 'ng-binding'); - } : noop; - - compile.$$addScopeInfo = debugInfoEnabled ? function $$addScopeInfo($element, scope, isolated, noTemplate) { - var dataName = isolated ? (noTemplate ? '$isolateScopeNoTemplate' : '$isolateScope') : '$scope'; - $element.data(dataName, scope); - } : noop; - - compile.$$addScopeClass = debugInfoEnabled ? function $$addScopeClass($element, isolated) { - safeAddClass($element, isolated ? 'ng-isolate-scope' : 'ng-scope'); - } : noop; - - compile.$$createComment = function(directiveName, comment) { - var content = ''; - if (debugInfoEnabled) { - content = ' ' + (directiveName || '') + ': '; - if (comment) content += comment + ' '; - } - return window.document.createComment(content); - }; - - return compile; - - //================================ - - function compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, - previousCompileContext) { - if (!($compileNodes instanceof jqLite)) { - // jquery always rewraps, whereas we need to preserve the original selector so that we can - // modify it. - $compileNodes = jqLite($compileNodes); - } - var compositeLinkFn = - compileNodes($compileNodes, transcludeFn, $compileNodes, - maxPriority, ignoreDirective, previousCompileContext); - compile.$$addScopeClass($compileNodes); - var namespace = null; - return function publicLinkFn(scope, cloneConnectFn, options) { - if (!$compileNodes) { - throw $compileMinErr('multilink', 'This element has already been linked.'); - } - assertArg(scope, 'scope'); - - if (previousCompileContext && previousCompileContext.needsNewScope) { - // A parent directive did a replace and a directive on this element asked - // for transclusion, which caused us to lose a layer of element on which - // we could hold the new transclusion scope, so we will create it manually - // here. - scope = scope.$parent.$new(); - } - - options = options || {}; - var parentBoundTranscludeFn = options.parentBoundTranscludeFn, - transcludeControllers = options.transcludeControllers, - futureParentElement = options.futureParentElement; - - // When `parentBoundTranscludeFn` is passed, it is a - // `controllersBoundTransclude` function (it was previously passed - // as `transclude` to directive.link) so we must unwrap it to get - // its `boundTranscludeFn` - if (parentBoundTranscludeFn && parentBoundTranscludeFn.$$boundTransclude) { - parentBoundTranscludeFn = parentBoundTranscludeFn.$$boundTransclude; - } - - if (!namespace) { - namespace = detectNamespaceForChildElements(futureParentElement); - } - var $linkNode; - if (namespace !== 'html') { - // When using a directive with replace:true and templateUrl the $compileNodes - // (or a child element inside of them) - // might change, so we need to recreate the namespace adapted compileNodes - // for call to the link function. - // Note: This will already clone the nodes... - $linkNode = jqLite( - wrapTemplate(namespace, jqLite('
      ').append($compileNodes).html()) - ); - } else if (cloneConnectFn) { - // important!!: we must call our jqLite.clone() since the jQuery one is trying to be smart - // and sometimes changes the structure of the DOM. - $linkNode = JQLitePrototype.clone.call($compileNodes); - } else { - $linkNode = $compileNodes; - } - - if (transcludeControllers) { - for (var controllerName in transcludeControllers) { - $linkNode.data('$' + controllerName + 'Controller', transcludeControllers[controllerName].instance); - } - } - - compile.$$addScopeInfo($linkNode, scope); - - if (cloneConnectFn) cloneConnectFn($linkNode, scope); - if (compositeLinkFn) compositeLinkFn(scope, $linkNode, $linkNode, parentBoundTranscludeFn); - - if (!cloneConnectFn) { - $compileNodes = compositeLinkFn = null; - } - return $linkNode; - }; - } - - function detectNamespaceForChildElements(parentElement) { - // TODO: Make this detect MathML as well... - var node = parentElement && parentElement[0]; - if (!node) { - return 'html'; - } else { - return nodeName_(node) !== 'foreignobject' && toString.call(node).match(/SVG/) ? 'svg' : 'html'; - } - } - - /** - * Compile function matches each node in nodeList against the directives. Once all directives - * for a particular node are collected their compile functions are executed. The compile - * functions return values - the linking functions - are combined into a composite linking - * function, which is the a linking function for the node. - * - * @param {NodeList} nodeList an array of nodes or NodeList to compile - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new child of the transcluded parent scope. - * @param {DOMElement=} $rootElement If the nodeList is the root of the compilation tree then - * the rootElement must be set the jqLite collection of the compile root. This is - * needed so that the jqLite collection items can be replaced with widgets. - * @param {number=} maxPriority Max directive priority. - * @returns {Function} A composite linking function of all of the matched directives or null. - */ - function compileNodes(nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, - previousCompileContext) { - var linkFns = [], - // `nodeList` can be either an element's `.childNodes` (live NodeList) - // or a jqLite/jQuery collection or an array - notLiveList = isArray(nodeList) || (nodeList instanceof jqLite), - attrs, directives, nodeLinkFn, childNodes, childLinkFn, linkFnFound, nodeLinkFnFound; - - - for (var i = 0; i < nodeList.length; i++) { - attrs = new Attributes(); - - // Support: IE 11 only - // Workaround for #11781 and #14924 - if (msie === 11) { - mergeConsecutiveTextNodes(nodeList, i, notLiveList); - } - - // We must always refer to `nodeList[i]` hereafter, - // since the nodes can be replaced underneath us. - directives = collectDirectives(nodeList[i], [], attrs, i === 0 ? maxPriority : undefined, - ignoreDirective); - - nodeLinkFn = (directives.length) - ? applyDirectivesToNode(directives, nodeList[i], attrs, transcludeFn, $rootElement, - null, [], [], previousCompileContext) - : null; - - if (nodeLinkFn && nodeLinkFn.scope) { - compile.$$addScopeClass(attrs.$$element); - } - - childLinkFn = (nodeLinkFn && nodeLinkFn.terminal || - !(childNodes = nodeList[i].childNodes) || - !childNodes.length) - ? null - : compileNodes(childNodes, - nodeLinkFn ? ( - (nodeLinkFn.transcludeOnThisElement || !nodeLinkFn.templateOnThisElement) - && nodeLinkFn.transclude) : transcludeFn); - - if (nodeLinkFn || childLinkFn) { - linkFns.push(i, nodeLinkFn, childLinkFn); - linkFnFound = true; - nodeLinkFnFound = nodeLinkFnFound || nodeLinkFn; - } - - //use the previous context only for the first element in the virtual group - previousCompileContext = null; - } - - // return a linking function if we have found anything, null otherwise - return linkFnFound ? compositeLinkFn : null; - - function compositeLinkFn(scope, nodeList, $rootElement, parentBoundTranscludeFn) { - var nodeLinkFn, childLinkFn, node, childScope, i, ii, idx, childBoundTranscludeFn; - var stableNodeList; - - - if (nodeLinkFnFound) { - // copy nodeList so that if a nodeLinkFn removes or adds an element at this DOM level our - // offsets don't get screwed up - var nodeListLength = nodeList.length; - stableNodeList = new Array(nodeListLength); - - // create a sparse array by only copying the elements which have a linkFn - for (i = 0; i < linkFns.length; i += 3) { - idx = linkFns[i]; - stableNodeList[idx] = nodeList[idx]; - } - } else { - stableNodeList = nodeList; - } - - for (i = 0, ii = linkFns.length; i < ii;) { - node = stableNodeList[linkFns[i++]]; - nodeLinkFn = linkFns[i++]; - childLinkFn = linkFns[i++]; - - if (nodeLinkFn) { - if (nodeLinkFn.scope) { - childScope = scope.$new(); - compile.$$addScopeInfo(jqLite(node), childScope); - } else { - childScope = scope; - } - - if (nodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn( - scope, nodeLinkFn.transclude, parentBoundTranscludeFn); - - } else if (!nodeLinkFn.templateOnThisElement && parentBoundTranscludeFn) { - childBoundTranscludeFn = parentBoundTranscludeFn; - - } else if (!parentBoundTranscludeFn && transcludeFn) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, transcludeFn); - - } else { - childBoundTranscludeFn = null; - } - - nodeLinkFn(childLinkFn, childScope, node, $rootElement, childBoundTranscludeFn); - - } else if (childLinkFn) { - childLinkFn(scope, node.childNodes, undefined, parentBoundTranscludeFn); - } - } - } - } - - function mergeConsecutiveTextNodes(nodeList, idx, notLiveList) { - var node = nodeList[idx]; - var parent = node.parentNode; - var sibling; - - if (node.nodeType !== NODE_TYPE_TEXT) { - return; - } - - while (true) { - sibling = parent ? node.nextSibling : nodeList[idx + 1]; - if (!sibling || sibling.nodeType !== NODE_TYPE_TEXT) { - break; - } - - node.nodeValue = node.nodeValue + sibling.nodeValue; - - if (sibling.parentNode) { - sibling.parentNode.removeChild(sibling); - } - if (notLiveList && sibling === nodeList[idx + 1]) { - nodeList.splice(idx + 1, 1); - } - } - } - - function createBoundTranscludeFn(scope, transcludeFn, previousBoundTranscludeFn) { - function boundTranscludeFn(transcludedScope, cloneFn, controllers, futureParentElement, containingScope) { - - if (!transcludedScope) { - transcludedScope = scope.$new(false, containingScope); - transcludedScope.$$transcluded = true; - } - - return transcludeFn(transcludedScope, cloneFn, { - parentBoundTranscludeFn: previousBoundTranscludeFn, - transcludeControllers: controllers, - futureParentElement: futureParentElement - }); - } - - // We need to attach the transclusion slots onto the `boundTranscludeFn` - // so that they are available inside the `controllersBoundTransclude` function - var boundSlots = boundTranscludeFn.$$slots = createMap(); - for (var slotName in transcludeFn.$$slots) { - if (transcludeFn.$$slots[slotName]) { - boundSlots[slotName] = createBoundTranscludeFn(scope, transcludeFn.$$slots[slotName], previousBoundTranscludeFn); - } else { - boundSlots[slotName] = null; - } - } - - return boundTranscludeFn; - } - - /** - * Looks for directives on the given node and adds them to the directive collection which is - * sorted. - * - * @param node Node to search. - * @param directives An array to which the directives are added to. This array is sorted before - * the function returns. - * @param attrs The shared attrs object which is used to populate the normalized attributes. - * @param {number=} maxPriority Max directive priority. - */ - function collectDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - var nodeType = node.nodeType, - attrsMap = attrs.$attr, - match, - nodeName, - className; - - switch (nodeType) { - case NODE_TYPE_ELEMENT: /* Element */ - - nodeName = nodeName_(node); - - // use the node name: - addDirective(directives, - directiveNormalize(nodeName), 'E', maxPriority, ignoreDirective); - - // iterate over the attributes - for (var attr, name, nName, value, ngPrefixMatch, nAttrs = node.attributes, - j = 0, jj = nAttrs && nAttrs.length; j < jj; j++) { - var attrStartName = false; - var attrEndName = false; - - var isNgAttr = false, isNgProp = false, isNgEvent = false; - var multiElementMatch; - - attr = nAttrs[j]; - name = attr.name; - value = attr.value; - - nName = directiveNormalize(name.toLowerCase()); - - // Support ng-attr-*, ng-prop-* and ng-on-* - if ((ngPrefixMatch = nName.match(NG_PREFIX_BINDING))) { - isNgAttr = ngPrefixMatch[1] === 'Attr'; - isNgProp = ngPrefixMatch[1] === 'Prop'; - isNgEvent = ngPrefixMatch[1] === 'On'; - - // Normalize the non-prefixed name - name = name.replace(PREFIX_REGEXP, '') - .toLowerCase() - .substr(4 + ngPrefixMatch[1].length).replace(/_(.)/g, function(match, letter) { - return letter.toUpperCase(); - }); - - // Support *-start / *-end multi element directives - } else if ((multiElementMatch = nName.match(MULTI_ELEMENT_DIR_RE)) && directiveIsMultiElement(multiElementMatch[1])) { - attrStartName = name; - attrEndName = name.substr(0, name.length - 5) + 'end'; - name = name.substr(0, name.length - 6); - } - - if (isNgProp || isNgEvent) { - attrs[nName] = value; - attrsMap[nName] = attr.name; - - if (isNgProp) { - addPropertyDirective(node, directives, nName, name); - } else { - addEventDirective(directives, nName, name); - } - } else { - // Update nName for cases where a prefix was removed - // NOTE: the .toLowerCase() is unnecessary and causes https://github.com/angular/angular.js/issues/16624 for ng-attr-* - nName = directiveNormalize(name.toLowerCase()); - attrsMap[nName] = name; - - if (isNgAttr || !attrs.hasOwnProperty(nName)) { - attrs[nName] = value; - if (getBooleanAttrName(node, nName)) { - attrs[nName] = true; // presence means true - } - } - - addAttrInterpolateDirective(node, directives, value, nName, isNgAttr); - addDirective(directives, nName, 'A', maxPriority, ignoreDirective, attrStartName, - attrEndName); - } - } - - if (nodeName === 'input' && node.getAttribute('type') === 'hidden') { - // Hidden input elements can have strange behaviour when navigating back to the page - // This tells the browser not to try to cache and reinstate previous values - node.setAttribute('autocomplete', 'off'); - } - - // use class as directive - if (!cssClassDirectivesEnabled) break; - className = node.className; - if (isObject(className)) { - // Maybe SVGAnimatedString - className = className.animVal; - } - if (isString(className) && className !== '') { - while ((match = CLASS_DIRECTIVE_REGEXP.exec(className))) { - nName = directiveNormalize(match[2]); - if (addDirective(directives, nName, 'C', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[3]); - } - className = className.substr(match.index + match[0].length); - } - } - break; - case NODE_TYPE_TEXT: /* Text Node */ - addTextInterpolateDirective(directives, node.nodeValue); - break; - case NODE_TYPE_COMMENT: /* Comment */ - if (!commentDirectivesEnabled) break; - collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective); - break; - } - - directives.sort(byPriority); - return directives; - } - - function collectCommentDirectives(node, directives, attrs, maxPriority, ignoreDirective) { - // function created because of performance, try/catch disables - // the optimization of the whole function #14848 - try { - var match = COMMENT_DIRECTIVE_REGEXP.exec(node.nodeValue); - if (match) { - var nName = directiveNormalize(match[1]); - if (addDirective(directives, nName, 'M', maxPriority, ignoreDirective)) { - attrs[nName] = trim(match[2]); - } - } - } catch (e) { - // turns out that under some circumstances IE9 throws errors when one attempts to read - // comment's node value. - // Just ignore it and continue. (Can't seem to reproduce in test case.) - } - } - - /** - * Given a node with a directive-start it collects all of the siblings until it finds - * directive-end. - * @param node - * @param attrStart - * @param attrEnd - * @returns {*} - */ - function groupScan(node, attrStart, attrEnd) { - var nodes = []; - var depth = 0; - if (attrStart && node.hasAttribute && node.hasAttribute(attrStart)) { - do { - if (!node) { - throw $compileMinErr('uterdir', - 'Unterminated attribute, found \'{0}\' but no matching \'{1}\' found.', - attrStart, attrEnd); - } - if (node.nodeType === NODE_TYPE_ELEMENT) { - if (node.hasAttribute(attrStart)) depth++; - if (node.hasAttribute(attrEnd)) depth--; - } - nodes.push(node); - node = node.nextSibling; - } while (depth > 0); - } else { - nodes.push(node); - } - - return jqLite(nodes); - } - - /** - * Wrapper for linking function which converts normal linking function into a grouped - * linking function. - * @param linkFn - * @param attrStart - * @param attrEnd - * @returns {Function} - */ - function groupElementsLinkFnWrapper(linkFn, attrStart, attrEnd) { - return function groupedElementsLink(scope, element, attrs, controllers, transcludeFn) { - element = groupScan(element[0], attrStart, attrEnd); - return linkFn(scope, element, attrs, controllers, transcludeFn); - }; - } - - /** - * A function generator that is used to support both eager and lazy compilation - * linking function. - * @param eager - * @param $compileNodes - * @param transcludeFn - * @param maxPriority - * @param ignoreDirective - * @param previousCompileContext - * @returns {Function} - */ - function compilationGenerator(eager, $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext) { - var compiled; - - if (eager) { - return compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext); - } - return /** @this */ function lazyCompilation() { - if (!compiled) { - compiled = compile($compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext); - - // Null out all of these references in order to make them eligible for garbage collection - // since this is a potentially long lived closure - $compileNodes = transcludeFn = previousCompileContext = null; - } - return compiled.apply(this, arguments); - }; - } - - /** - * Once the directives have been collected, their compile functions are executed. This method - * is responsible for inlining directive templates as well as terminating the application - * of the directives if the terminal directive has been reached. - * - * @param {Array} directives Array of collected directives to execute their compile function. - * this needs to be pre-sorted by priority order. - * @param {Node} compileNode The raw DOM node to apply the compile functions to - * @param {Object} templateAttrs The shared attribute function - * @param {function(angular.Scope, cloneAttachFn=)} transcludeFn A linking function, where the - * scope argument is auto-generated to the new - * child of the transcluded parent scope. - * @param {JQLite} jqCollection If we are working on the root of the compile tree then this - * argument has the root jqLite array so that we can replace nodes - * on it. - * @param {Object=} originalReplaceDirective An optional directive that will be ignored when - * compiling the transclusion. - * @param {Array.} preLinkFns - * @param {Array.} postLinkFns - * @param {Object} previousCompileContext Context used for previous compilation of the current - * node - * @returns {Function} linkFn - */ - function applyDirectivesToNode(directives, compileNode, templateAttrs, transcludeFn, - jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, - previousCompileContext) { - previousCompileContext = previousCompileContext || {}; - - var terminalPriority = -Number.MAX_VALUE, - newScopeDirective = previousCompileContext.newScopeDirective, - controllerDirectives = previousCompileContext.controllerDirectives, - newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, - templateDirective = previousCompileContext.templateDirective, - nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, - hasTranscludeDirective = false, - hasTemplate = false, - hasElementTranscludeDirective = previousCompileContext.hasElementTranscludeDirective, - $compileNode = templateAttrs.$$element = jqLite(compileNode), - directive, - directiveName, - $template, - replaceDirective = originalReplaceDirective, - childTranscludeFn = transcludeFn, - linkFn, - didScanForMultipleTransclusion = false, - mightHaveMultipleTransclusionError = false, - directiveValue; - - // executes all directives on the current element - for (var i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - var attrStart = directive.$$start; - var attrEnd = directive.$$end; - - // collect multiblock sections - if (attrStart) { - $compileNode = groupScan(compileNode, attrStart, attrEnd); - } - $template = undefined; - - if (terminalPriority > directive.priority) { - break; // prevent further processing of directives - } - - directiveValue = directive.scope; - - if (directiveValue) { - - // skip the check for directives with async templates, we'll check the derived sync - // directive when the template arrives - if (!directive.templateUrl) { - if (isObject(directiveValue)) { - // This directive is trying to add an isolated scope. - // Check that there is no scope of any kind already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective || newScopeDirective, - directive, $compileNode); - newIsolateScopeDirective = directive; - } else { - // This directive is trying to add a child scope. - // Check that there is no isolated scope already - assertNoDuplicate('new/isolated scope', newIsolateScopeDirective, directive, - $compileNode); - } - } - - newScopeDirective = newScopeDirective || directive; - } - - directiveName = directive.name; - - // If we encounter a condition that can result in transclusion on the directive, - // then scan ahead in the remaining directives for others that may cause a multiple - // transclusion error to be thrown during the compilation process. If a matching directive - // is found, then we know that when we encounter a transcluded directive, we need to eagerly - // compile the `transclude` function rather than doing it lazily in order to throw - // exceptions at the correct time - if (!didScanForMultipleTransclusion && ((directive.replace && (directive.templateUrl || directive.template)) - || (directive.transclude && !directive.$$tlb))) { - var candidateDirective; - - for (var scanningIndex = i + 1; (candidateDirective = directives[scanningIndex++]);) { - if ((candidateDirective.transclude && !candidateDirective.$$tlb) - || (candidateDirective.replace && (candidateDirective.templateUrl || candidateDirective.template))) { - mightHaveMultipleTransclusionError = true; - break; - } - } - - didScanForMultipleTransclusion = true; - } - - if (!directive.templateUrl && directive.controller) { - controllerDirectives = controllerDirectives || createMap(); - assertNoDuplicate('\'' + directiveName + '\' controller', - controllerDirectives[directiveName], directive, $compileNode); - controllerDirectives[directiveName] = directive; - } - - directiveValue = directive.transclude; - - if (directiveValue) { - hasTranscludeDirective = true; - - // Special case ngIf and ngRepeat so that we don't complain about duplicate transclusion. - // This option should only be used by directives that know how to safely handle element transclusion, - // where the transcluded nodes are added or replaced after linking. - if (!directive.$$tlb) { - assertNoDuplicate('transclusion', nonTlbTranscludeDirective, directive, $compileNode); - nonTlbTranscludeDirective = directive; - } - - if (directiveValue === 'element') { - hasElementTranscludeDirective = true; - terminalPriority = directive.priority; - $template = $compileNode; - $compileNode = templateAttrs.$$element = - jqLite(compile.$$createComment(directiveName, templateAttrs[directiveName])); - compileNode = $compileNode[0]; - replaceWith(jqCollection, sliceArgs($template), compileNode); - - childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, terminalPriority, - replaceDirective && replaceDirective.name, { - // Don't pass in: - // - controllerDirectives - otherwise we'll create duplicates controllers - // - newIsolateScopeDirective or templateDirective - combining templates with - // element transclusion doesn't make sense. - // - // We need only nonTlbTranscludeDirective so that we prevent putting transclusion - // on the same element more than once. - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - } else { - - var slots = createMap(); - - if (!isObject(directiveValue)) { - $template = jqLite(jqLiteClone(compileNode)).contents(); - } else { - - // We have transclusion slots, - // collect them up, compile them and store their transclusion functions - $template = window.document.createDocumentFragment(); - - var slotMap = createMap(); - var filledSlots = createMap(); - - // Parse the element selectors - forEach(directiveValue, function(elementSelector, slotName) { - // If an element selector starts with a ? then it is optional - var optional = (elementSelector.charAt(0) === '?'); - elementSelector = optional ? elementSelector.substring(1) : elementSelector; - - slotMap[elementSelector] = slotName; - - // We explicitly assign `null` since this implies that a slot was defined but not filled. - // Later when calling boundTransclusion functions with a slot name we only error if the - // slot is `undefined` - slots[slotName] = null; - - // filledSlots contains `true` for all slots that are either optional or have been - // filled. This is used to check that we have not missed any required slots - filledSlots[slotName] = optional; - }); - - // Add the matching elements into their slot - forEach($compileNode.contents(), function(node) { - var slotName = slotMap[directiveNormalize(nodeName_(node))]; - if (slotName) { - filledSlots[slotName] = true; - slots[slotName] = slots[slotName] || window.document.createDocumentFragment(); - slots[slotName].appendChild(node); - } else { - $template.appendChild(node); - } - }); - - // Check for required slots that were not filled - forEach(filledSlots, function(filled, slotName) { - if (!filled) { - throw $compileMinErr('reqslot', 'Required transclusion slot `{0}` was not filled.', slotName); - } - }); - - for (var slotName in slots) { - if (slots[slotName]) { - // Only define a transclusion function if the slot was filled - var slotCompileNodes = jqLite(slots[slotName].childNodes); - slots[slotName] = compilationGenerator(mightHaveMultipleTransclusionError, slotCompileNodes, transcludeFn); - } - } - - $template = jqLite($template.childNodes); - } - - $compileNode.empty(); // clear contents - childTranscludeFn = compilationGenerator(mightHaveMultipleTransclusionError, $template, transcludeFn, undefined, - undefined, { needsNewScope: directive.$$isolateScope || directive.$$newScope}); - childTranscludeFn.$$slots = slots; - } - } - - if (directive.template) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - directiveValue = (isFunction(directive.template)) - ? directive.template($compileNode, templateAttrs) - : directive.template; - - directiveValue = denormalizeTemplate(directiveValue); - - if (directive.replace) { - replaceDirective = directive; - if (jqLiteIsTextNode(directiveValue)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(directive.templateNamespace, trim(directiveValue))); - } - compileNode = $template[0]; - - if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - 'Template for directive \'{0}\' must have exactly one root element. {1}', - directiveName, ''); - } - - replaceWith(jqCollection, $compileNode, compileNode); - - var newTemplateAttrs = {$attr: {}}; - - // combine directives from the original node and from the template: - // - take the array of directives for this element - // - split it into two parts, those that already applied (processed) and those that weren't (unprocessed) - // - collect directives from the template and sort them by priority - // - combine directives as: processed + template + unprocessed - var templateDirectives = collectDirectives(compileNode, [], newTemplateAttrs); - var unprocessedDirectives = directives.splice(i + 1, directives.length - (i + 1)); - - if (newIsolateScopeDirective || newScopeDirective) { - // The original directive caused the current element to be replaced but this element - // also needs to have a new scope, so we need to tell the template directives - // that they would need to get their scope from further up, if they require transclusion - markDirectiveScope(templateDirectives, newIsolateScopeDirective, newScopeDirective); - } - directives = directives.concat(templateDirectives).concat(unprocessedDirectives); - mergeTemplateAttributes(templateAttrs, newTemplateAttrs); - - ii = directives.length; - } else { - $compileNode.html(directiveValue); - } - } - - if (directive.templateUrl) { - hasTemplate = true; - assertNoDuplicate('template', templateDirective, directive, $compileNode); - templateDirective = directive; - - if (directive.replace) { - replaceDirective = directive; - } - - // eslint-disable-next-line no-func-assign - nodeLinkFn = compileTemplateUrl(directives.splice(i, directives.length - i), $compileNode, - templateAttrs, jqCollection, hasTranscludeDirective && childTranscludeFn, preLinkFns, postLinkFns, { - controllerDirectives: controllerDirectives, - newScopeDirective: (newScopeDirective !== directive) && newScopeDirective, - newIsolateScopeDirective: newIsolateScopeDirective, - templateDirective: templateDirective, - nonTlbTranscludeDirective: nonTlbTranscludeDirective - }); - ii = directives.length; - } else if (directive.compile) { - try { - linkFn = directive.compile($compileNode, templateAttrs, childTranscludeFn); - var context = directive.$$originalDirective || directive; - if (isFunction(linkFn)) { - addLinkFns(null, bind(context, linkFn), attrStart, attrEnd); - } else if (linkFn) { - addLinkFns(bind(context, linkFn.pre), bind(context, linkFn.post), attrStart, attrEnd); - } - } catch (e) { - $exceptionHandler(e, startingTag($compileNode)); - } - } - - if (directive.terminal) { - nodeLinkFn.terminal = true; - terminalPriority = Math.max(terminalPriority, directive.priority); - } - - } - - nodeLinkFn.scope = newScopeDirective && newScopeDirective.scope === true; - nodeLinkFn.transcludeOnThisElement = hasTranscludeDirective; - nodeLinkFn.templateOnThisElement = hasTemplate; - nodeLinkFn.transclude = childTranscludeFn; - - previousCompileContext.hasElementTranscludeDirective = hasElementTranscludeDirective; - - // might be normal or delayed nodeLinkFn depending on if templateUrl is present - return nodeLinkFn; - - //////////////////// - - function addLinkFns(pre, post, attrStart, attrEnd) { - if (pre) { - if (attrStart) pre = groupElementsLinkFnWrapper(pre, attrStart, attrEnd); - pre.require = directive.require; - pre.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - pre = cloneAndAnnotateFn(pre, {isolateScope: true}); - } - preLinkFns.push(pre); - } - if (post) { - if (attrStart) post = groupElementsLinkFnWrapper(post, attrStart, attrEnd); - post.require = directive.require; - post.directiveName = directiveName; - if (newIsolateScopeDirective === directive || directive.$$isolateScope) { - post = cloneAndAnnotateFn(post, {isolateScope: true}); - } - postLinkFns.push(post); - } - } - - function nodeLinkFn(childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn) { - var i, ii, linkFn, isolateScope, controllerScope, elementControllers, transcludeFn, $element, - attrs, scopeBindingInfo; - - if (compileNode === linkNode) { - attrs = templateAttrs; - $element = templateAttrs.$$element; - } else { - $element = jqLite(linkNode); - attrs = new Attributes($element, templateAttrs); - } - - controllerScope = scope; - if (newIsolateScopeDirective) { - isolateScope = scope.$new(true); - } else if (newScopeDirective) { - controllerScope = scope.$parent; - } - - if (boundTranscludeFn) { - // track `boundTranscludeFn` so it can be unwrapped if `transcludeFn` - // is later passed as `parentBoundTranscludeFn` to `publicLinkFn` - transcludeFn = controllersBoundTransclude; - transcludeFn.$$boundTransclude = boundTranscludeFn; - // expose the slots on the `$transclude` function - transcludeFn.isSlotFilled = function(slotName) { - return !!boundTranscludeFn.$$slots[slotName]; - }; - } - - if (controllerDirectives) { - elementControllers = setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective); - } - - if (newIsolateScopeDirective) { - // Initialize isolate scope bindings for new isolate scope directive. - compile.$$addScopeInfo($element, isolateScope, true, !(templateDirective && (templateDirective === newIsolateScopeDirective || - templateDirective === newIsolateScopeDirective.$$originalDirective))); - compile.$$addScopeClass($element, true); - isolateScope.$$isolateBindings = - newIsolateScopeDirective.$$isolateBindings; - scopeBindingInfo = initializeDirectiveBindings(scope, attrs, isolateScope, - isolateScope.$$isolateBindings, - newIsolateScopeDirective); - if (scopeBindingInfo.removeWatches) { - isolateScope.$on('$destroy', scopeBindingInfo.removeWatches); - } - } - - // Initialize bindToController bindings - for (var name in elementControllers) { - var controllerDirective = controllerDirectives[name]; - var controller = elementControllers[name]; - var bindings = controllerDirective.$$bindings.bindToController; - - controller.instance = controller(); - $element.data('$' + controllerDirective.name + 'Controller', controller.instance); - controller.bindingInfo = - initializeDirectiveBindings(controllerScope, attrs, controller.instance, bindings, controllerDirective); - } - - // Bind the required controllers to the controller, if `require` is an object and `bindToController` is truthy - forEach(controllerDirectives, function(controllerDirective, name) { - var require = controllerDirective.require; - if (controllerDirective.bindToController && !isArray(require) && isObject(require)) { - extend(elementControllers[name].instance, getControllers(name, require, $element, elementControllers)); - } - }); - - // Handle the init and destroy lifecycle hooks on all controllers that have them - forEach(elementControllers, function(controller) { - var controllerInstance = controller.instance; - if (isFunction(controllerInstance.$onChanges)) { - try { - controllerInstance.$onChanges(controller.bindingInfo.initialChanges); - } catch (e) { - $exceptionHandler(e); - } - } - if (isFunction(controllerInstance.$onInit)) { - try { - controllerInstance.$onInit(); - } catch (e) { - $exceptionHandler(e); - } - } - if (isFunction(controllerInstance.$doCheck)) { - controllerScope.$watch(function() { controllerInstance.$doCheck(); }); - controllerInstance.$doCheck(); - } - if (isFunction(controllerInstance.$onDestroy)) { - controllerScope.$on('$destroy', function callOnDestroyHook() { - controllerInstance.$onDestroy(); - }); - } - }); - - // PRELINKING - for (i = 0, ii = preLinkFns.length; i < ii; i++) { - linkFn = preLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // RECURSION - // We only pass the isolate scope, if the isolate directive has a template, - // otherwise the child elements do not belong to the isolate directive. - var scopeToChild = scope; - if (newIsolateScopeDirective && (newIsolateScopeDirective.template || newIsolateScopeDirective.templateUrl === null)) { - scopeToChild = isolateScope; - } - if (childLinkFn) { - childLinkFn(scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn); - } - - // POSTLINKING - for (i = postLinkFns.length - 1; i >= 0; i--) { - linkFn = postLinkFns[i]; - invokeLinkFn(linkFn, - linkFn.isolateScope ? isolateScope : scope, - $element, - attrs, - linkFn.require && getControllers(linkFn.directiveName, linkFn.require, $element, elementControllers), - transcludeFn - ); - } - - // Trigger $postLink lifecycle hooks - forEach(elementControllers, function(controller) { - var controllerInstance = controller.instance; - if (isFunction(controllerInstance.$postLink)) { - controllerInstance.$postLink(); - } - }); - - // This is the function that is injected as `$transclude`. - // Note: all arguments are optional! - function controllersBoundTransclude(scope, cloneAttachFn, futureParentElement, slotName) { - var transcludeControllers; - // No scope passed in: - if (!isScope(scope)) { - slotName = futureParentElement; - futureParentElement = cloneAttachFn; - cloneAttachFn = scope; - scope = undefined; - } - - if (hasElementTranscludeDirective) { - transcludeControllers = elementControllers; - } - if (!futureParentElement) { - futureParentElement = hasElementTranscludeDirective ? $element.parent() : $element; - } - if (slotName) { - // slotTranscludeFn can be one of three things: - // * a transclude function - a filled slot - // * `null` - an optional slot that was not filled - // * `undefined` - a slot that was not declared (i.e. invalid) - var slotTranscludeFn = boundTranscludeFn.$$slots[slotName]; - if (slotTranscludeFn) { - return slotTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } else if (isUndefined(slotTranscludeFn)) { - throw $compileMinErr('noslot', - 'No parent directive that requires a transclusion with slot name "{0}". ' + - 'Element: {1}', - slotName, startingTag($element)); - } - } else { - return boundTranscludeFn(scope, cloneAttachFn, transcludeControllers, futureParentElement, scopeToChild); - } - } - } - } - - function getControllers(directiveName, require, $element, elementControllers) { - var value; - - if (isString(require)) { - var match = require.match(REQUIRE_PREFIX_REGEXP); - var name = require.substring(match[0].length); - var inheritType = match[1] || match[3]; - var optional = match[2] === '?'; - - //If only parents then start at the parent element - if (inheritType === '^^') { - $element = $element.parent(); - //Otherwise attempt getting the controller from elementControllers in case - //the element is transcluded (and has no data) and to avoid .data if possible - } else { - value = elementControllers && elementControllers[name]; - value = value && value.instance; - } - - if (!value) { - var dataName = '$' + name + 'Controller'; - - if (inheritType === '^^' && $element[0] && $element[0].nodeType === NODE_TYPE_DOCUMENT) { - // inheritedData() uses the documentElement when it finds the document, so we would - // require from the element itself. - value = null; - } else { - value = inheritType ? $element.inheritedData(dataName) : $element.data(dataName); - } - } - - if (!value && !optional) { - throw $compileMinErr('ctreq', - 'Controller \'{0}\', required by directive \'{1}\', can\'t be found!', - name, directiveName); - } - } else if (isArray(require)) { - value = []; - for (var i = 0, ii = require.length; i < ii; i++) { - value[i] = getControllers(directiveName, require[i], $element, elementControllers); - } - } else if (isObject(require)) { - value = {}; - forEach(require, function(controller, property) { - value[property] = getControllers(directiveName, controller, $element, elementControllers); - }); - } - - return value || null; - } - - function setupControllers($element, attrs, transcludeFn, controllerDirectives, isolateScope, scope, newIsolateScopeDirective) { - var elementControllers = createMap(); - for (var controllerKey in controllerDirectives) { - var directive = controllerDirectives[controllerKey]; - var locals = { - $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, - $element: $element, - $attrs: attrs, - $transclude: transcludeFn - }; - - var controller = directive.controller; - if (controller === '@') { - controller = attrs[directive.name]; - } - - var controllerInstance = $controller(controller, locals, true, directive.controllerAs); - - // For directives with element transclusion the element is a comment. - // In this case .data will not attach any data. - // Instead, we save the controllers for the element in a local hash and attach to .data - // later, once we have the actual element. - elementControllers[directive.name] = controllerInstance; - $element.data('$' + directive.name + 'Controller', controllerInstance.instance); - } - return elementControllers; - } - - // Depending upon the context in which a directive finds itself it might need to have a new isolated - // or child scope created. For instance: - // * if the directive has been pulled into a template because another directive with a higher priority - // asked for element transclusion - // * if the directive itself asks for transclusion but it is at the root of a template and the original - // element was replaced. See https://github.com/angular/angular.js/issues/12936 - function markDirectiveScope(directives, isolateScope, newScope) { - for (var j = 0, jj = directives.length; j < jj; j++) { - directives[j] = inherit(directives[j], {$$isolateScope: isolateScope, $$newScope: newScope}); - } - } - - /** - * looks up the directive and decorates it with exception handling and proper parameters. We - * call this the boundDirective. - * - * @param {string} name name of the directive to look up. - * @param {string} location The directive must be found in specific format. - * String containing any of theses characters: - * - * * `E`: element name - * * `A': attribute - * * `C`: class - * * `M`: comment - * @returns {boolean} true if directive was added. - */ - function addDirective(tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, - endAttrName) { - if (name === ignoreDirective) return null; - var match = null; - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if ((isUndefined(maxPriority) || maxPriority > directive.priority) && - directive.restrict.indexOf(location) !== -1) { - if (startAttrName) { - directive = inherit(directive, {$$start: startAttrName, $$end: endAttrName}); - } - if (!directive.$$bindings) { - var bindings = directive.$$bindings = - parseDirectiveBindings(directive, directive.name); - if (isObject(bindings.isolateScope)) { - directive.$$isolateBindings = bindings.isolateScope; - } - } - tDirectives.push(directive); - match = directive; - } - } - } - return match; - } - - - /** - * looks up the directive and returns true if it is a multi-element directive, - * and therefore requires DOM nodes between -start and -end markers to be grouped - * together. - * - * @param {string} name name of the directive to look up. - * @returns true if directive was registered as multi-element. - */ - function directiveIsMultiElement(name) { - if (hasDirectives.hasOwnProperty(name)) { - for (var directive, directives = $injector.get(name + Suffix), - i = 0, ii = directives.length; i < ii; i++) { - directive = directives[i]; - if (directive.multiElement) { - return true; - } - } - } - return false; - } - - /** - * When the element is replaced with HTML template then the new attributes - * on the template need to be merged with the existing attributes in the DOM. - * The desired effect is to have both of the attributes present. - * - * @param {object} dst destination attributes (original DOM) - * @param {object} src source attributes (from the directive template) - */ - function mergeTemplateAttributes(dst, src) { - var srcAttr = src.$attr, - dstAttr = dst.$attr; - - // reapply the old attributes to the new element - forEach(dst, function(value, key) { - if (key.charAt(0) !== '$') { - if (src[key] && src[key] !== value) { - if (value.length) { - value += (key === 'style' ? ';' : ' ') + src[key]; - } else { - value = src[key]; - } - } - dst.$set(key, value, true, srcAttr[key]); - } - }); - - // copy the new attributes on the old attrs object - forEach(src, function(value, key) { - // Check if we already set this attribute in the loop above. - // `dst` will never contain hasOwnProperty as DOM parser won't let it. - // You will get an "InvalidCharacterError: DOM Exception 5" error if you - // have an attribute like "has-own-property" or "data-has-own-property", etc. - if (!dst.hasOwnProperty(key) && key.charAt(0) !== '$') { - dst[key] = value; - - if (key !== 'class' && key !== 'style') { - dstAttr[key] = srcAttr[key]; - } - } - }); - } - - - function compileTemplateUrl(directives, $compileNode, tAttrs, - $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext) { - var linkQueue = [], - afterTemplateNodeLinkFn, - afterTemplateChildLinkFn, - beforeTemplateCompileNode = $compileNode[0], - origAsyncDirective = directives.shift(), - derivedSyncDirective = inherit(origAsyncDirective, { - templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective - }), - templateUrl = (isFunction(origAsyncDirective.templateUrl)) - ? origAsyncDirective.templateUrl($compileNode, tAttrs) - : origAsyncDirective.templateUrl, - templateNamespace = origAsyncDirective.templateNamespace; - - $compileNode.empty(); - - $templateRequest(templateUrl) - .then(function(content) { - var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; - - content = denormalizeTemplate(content); - - if (origAsyncDirective.replace) { - if (jqLiteIsTextNode(content)) { - $template = []; - } else { - $template = removeComments(wrapTemplate(templateNamespace, trim(content))); - } - compileNode = $template[0]; - - if ($template.length !== 1 || compileNode.nodeType !== NODE_TYPE_ELEMENT) { - throw $compileMinErr('tplrt', - 'Template for directive \'{0}\' must have exactly one root element. {1}', - origAsyncDirective.name, templateUrl); - } - - tempTemplateAttrs = {$attr: {}}; - replaceWith($rootElement, $compileNode, compileNode); - var templateDirectives = collectDirectives(compileNode, [], tempTemplateAttrs); - - if (isObject(origAsyncDirective.scope)) { - // the original directive that caused the template to be loaded async required - // an isolate scope - markDirectiveScope(templateDirectives, true); - } - directives = templateDirectives.concat(directives); - mergeTemplateAttributes(tAttrs, tempTemplateAttrs); - } else { - compileNode = beforeTemplateCompileNode; - $compileNode.html(content); - } - - directives.unshift(derivedSyncDirective); - - afterTemplateNodeLinkFn = applyDirectivesToNode(directives, compileNode, tAttrs, - childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, - previousCompileContext); - forEach($rootElement, function(node, i) { - if (node === compileNode) { - $rootElement[i] = $compileNode[0]; - } - }); - afterTemplateChildLinkFn = compileNodes($compileNode[0].childNodes, childTranscludeFn); - - while (linkQueue.length) { - var scope = linkQueue.shift(), - beforeTemplateLinkNode = linkQueue.shift(), - linkRootElement = linkQueue.shift(), - boundTranscludeFn = linkQueue.shift(), - linkNode = $compileNode[0]; - - if (scope.$$destroyed) continue; - - if (beforeTemplateLinkNode !== beforeTemplateCompileNode) { - var oldClasses = beforeTemplateLinkNode.className; - - if (!(previousCompileContext.hasElementTranscludeDirective && - origAsyncDirective.replace)) { - // it was cloned therefore we have to clone as well. - linkNode = jqLiteClone(compileNode); - } - replaceWith(linkRootElement, jqLite(beforeTemplateLinkNode), linkNode); - - // Copy in CSS classes from original node - safeAddClass(jqLite(linkNode), oldClasses); - } - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } else { - childBoundTranscludeFn = boundTranscludeFn; - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, linkNode, $rootElement, - childBoundTranscludeFn); - } - linkQueue = null; - }).catch(function(error) { - if (isError(error)) { - $exceptionHandler(error); - } - }); - - return function delayedNodeLinkFn(ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn) { - var childBoundTranscludeFn = boundTranscludeFn; - if (scope.$$destroyed) return; - if (linkQueue) { - linkQueue.push(scope, - node, - rootElement, - childBoundTranscludeFn); - } else { - if (afterTemplateNodeLinkFn.transcludeOnThisElement) { - childBoundTranscludeFn = createBoundTranscludeFn(scope, afterTemplateNodeLinkFn.transclude, boundTranscludeFn); - } - afterTemplateNodeLinkFn(afterTemplateChildLinkFn, scope, node, rootElement, childBoundTranscludeFn); - } - }; - } - - - /** - * Sorting function for bound directives. - */ - function byPriority(a, b) { - var diff = b.priority - a.priority; - if (diff !== 0) return diff; - if (a.name !== b.name) return (a.name < b.name) ? -1 : 1; - return a.index - b.index; - } - - function assertNoDuplicate(what, previousDirective, directive, element) { - - function wrapModuleNameIfDefined(moduleName) { - return moduleName ? - (' (module: ' + moduleName + ')') : - ''; - } - - if (previousDirective) { - throw $compileMinErr('multidir', 'Multiple directives [{0}{1}, {2}{3}] asking for {4} on: {5}', - previousDirective.name, wrapModuleNameIfDefined(previousDirective.$$moduleName), - directive.name, wrapModuleNameIfDefined(directive.$$moduleName), what, startingTag(element)); - } - } - - - function addTextInterpolateDirective(directives, text) { - var interpolateFn = $interpolate(text, true); - if (interpolateFn) { - directives.push({ - priority: 0, - compile: function textInterpolateCompileFn(templateNode) { - var templateNodeParent = templateNode.parent(), - hasCompileParent = !!templateNodeParent.length; - - // When transcluding a template that has bindings in the root - // we don't have a parent and thus need to add the class during linking fn. - if (hasCompileParent) compile.$$addBindingClass(templateNodeParent); - - return function textInterpolateLinkFn(scope, node) { - var parent = node.parent(); - if (!hasCompileParent) compile.$$addBindingClass(parent); - compile.$$addBindingInfo(parent, interpolateFn.expressions); - scope.$watch(interpolateFn, function interpolateFnWatchAction(value) { - node[0].nodeValue = value; - }); - }; - } - }); - } - } - - - function wrapTemplate(type, template) { - type = lowercase(type || 'html'); - switch (type) { - case 'svg': - case 'math': - var wrapper = window.document.createElement('div'); - wrapper.innerHTML = '<' + type + '>' + template + ''; - return wrapper.childNodes[0].childNodes; - default: - return template; - } - } - - - function getTrustedAttrContext(nodeName, attrNormalizedName) { - if (attrNormalizedName === 'srcdoc') { - return $sce.HTML; - } - // All nodes with src attributes require a RESOURCE_URL value, except for - // img and various html5 media nodes, which require the MEDIA_URL context. - if (attrNormalizedName === 'src' || attrNormalizedName === 'ngSrc') { - if (['img', 'video', 'audio', 'source', 'track'].indexOf(nodeName) === -1) { - return $sce.RESOURCE_URL; - } - return $sce.MEDIA_URL; - } else if (attrNormalizedName === 'xlinkHref') { - // Some xlink:href are okay, most aren't - if (nodeName === 'image') return $sce.MEDIA_URL; - if (nodeName === 'a') return $sce.URL; - return $sce.RESOURCE_URL; - } else if ( - // Formaction - (nodeName === 'form' && attrNormalizedName === 'action') || - // If relative URLs can go where they are not expected to, then - // all sorts of trust issues can arise. - (nodeName === 'base' && attrNormalizedName === 'href') || - // links can be stylesheets or imports, which can run script in the current origin - (nodeName === 'link' && attrNormalizedName === 'href') - ) { - return $sce.RESOURCE_URL; - } else if (nodeName === 'a' && (attrNormalizedName === 'href' || - attrNormalizedName === 'ngHref')) { - return $sce.URL; - } - } - - function getTrustedPropContext(nodeName, propNormalizedName) { - var prop = propNormalizedName.toLowerCase(); - return PROP_CONTEXTS[nodeName + '|' + prop] || PROP_CONTEXTS['*|' + prop]; - } - - function sanitizeSrcsetPropertyValue(value) { - return sanitizeSrcset($sce.valueOf(value), 'ng-prop-srcset'); - } - function addPropertyDirective(node, directives, attrName, propName) { - if (EVENT_HANDLER_ATTR_REGEXP.test(propName)) { - throw $compileMinErr('nodomevents', 'Property bindings for HTML DOM event properties are disallowed'); - } - - var nodeName = nodeName_(node); - var trustedContext = getTrustedPropContext(nodeName, propName); - - var sanitizer = identity; - // Sanitize img[srcset] + source[srcset] values. - if (propName === 'srcset' && (nodeName === 'img' || nodeName === 'source')) { - sanitizer = sanitizeSrcsetPropertyValue; - } else if (trustedContext) { - sanitizer = $sce.getTrusted.bind($sce, trustedContext); - } - - directives.push({ - priority: 100, - compile: function ngPropCompileFn(_, attr) { - var ngPropGetter = $parse(attr[attrName]); - var ngPropWatch = $parse(attr[attrName], function sceValueOf(val) { - // Unwrap the value to compare the actual inner safe value, not the wrapper object. - return $sce.valueOf(val); - }); - - return { - pre: function ngPropPreLinkFn(scope, $element) { - function applyPropValue() { - var propValue = ngPropGetter(scope); - $element[0][propName] = sanitizer(propValue); - } - - applyPropValue(); - scope.$watch(ngPropWatch, applyPropValue); - } - }; - } - }); - } - - function addEventDirective(directives, attrName, eventName) { - directives.push( - createEventDirective($parse, $rootScope, $exceptionHandler, attrName, eventName, /*forceAsync=*/false) - ); - } - - function addAttrInterpolateDirective(node, directives, value, name, isNgAttr) { - var nodeName = nodeName_(node); - var trustedContext = getTrustedAttrContext(nodeName, name); - var mustHaveExpression = !isNgAttr; - var allOrNothing = ALL_OR_NOTHING_ATTRS[name] || isNgAttr; - - var interpolateFn = $interpolate(value, mustHaveExpression, trustedContext, allOrNothing); - - // no interpolation found -> ignore - if (!interpolateFn) return; - - if (name === 'multiple' && nodeName === 'select') { - throw $compileMinErr('selmulti', - 'Binding to the \'multiple\' attribute is not supported. Element: {0}', - startingTag(node)); - } - - if (EVENT_HANDLER_ATTR_REGEXP.test(name)) { - throw $compileMinErr('nodomevents', 'Interpolations for HTML DOM event attributes are disallowed'); - } - - directives.push({ - priority: 100, - compile: function() { - return { - pre: function attrInterpolatePreLinkFn(scope, element, attr) { - var $$observers = (attr.$$observers || (attr.$$observers = createMap())); - - // If the attribute has changed since last $interpolate()ed - var newValue = attr[name]; - if (newValue !== value) { - // we need to interpolate again since the attribute value has been updated - // (e.g. by another directive's compile function) - // ensure unset/empty values make interpolateFn falsy - interpolateFn = newValue && $interpolate(newValue, true, trustedContext, allOrNothing); - value = newValue; - } - - // if attribute was updated so that there is no interpolation going on we don't want to - // register any observers - if (!interpolateFn) return; - - // initialize attr object so that it's ready in case we need the value for isolate - // scope initialization, otherwise the value would not be available from isolate - // directive's linking fn during linking phase - attr[name] = interpolateFn(scope); - - ($$observers[name] || ($$observers[name] = [])).$$inter = true; - (attr.$$observers && attr.$$observers[name].$$scope || scope). - $watch(interpolateFn, function interpolateFnWatchAction(newValue, oldValue) { - //special case for class attribute addition + removal - //so that class changes can tap into the animation - //hooks provided by the $animate service. Be sure to - //skip animations when the first digest occurs (when - //both the new and the old values are the same) since - //the CSS classes are the non-interpolated values - if (name === 'class' && newValue !== oldValue) { - attr.$updateClass(newValue, oldValue); - } else { - attr.$set(name, newValue); - } - }); - } - }; - } - }); - } - - - /** - * This is a special jqLite.replaceWith, which can replace items which - * have no parents, provided that the containing jqLite collection is provided. - * - * @param {JqLite=} $rootElement The root of the compile tree. Used so that we can replace nodes - * in the root of the tree. - * @param {JqLite} elementsToRemove The jqLite element which we are going to replace. We keep - * the shell, but replace its DOM node reference. - * @param {Node} newNode The new DOM node. - */ - function replaceWith($rootElement, elementsToRemove, newNode) { - var firstElementToRemove = elementsToRemove[0], - removeCount = elementsToRemove.length, - parent = firstElementToRemove.parentNode, - i, ii; - - if ($rootElement) { - for (i = 0, ii = $rootElement.length; i < ii; i++) { - if ($rootElement[i] === firstElementToRemove) { - $rootElement[i++] = newNode; - for (var j = i, j2 = j + removeCount - 1, - jj = $rootElement.length; - j < jj; j++, j2++) { - if (j2 < jj) { - $rootElement[j] = $rootElement[j2]; - } else { - delete $rootElement[j]; - } - } - $rootElement.length -= removeCount - 1; - - // If the replaced element is also the jQuery .context then replace it - // .context is a deprecated jQuery api, so we should set it only when jQuery set it - // http://api.jquery.com/context/ - if ($rootElement.context === firstElementToRemove) { - $rootElement.context = newNode; - } - break; - } - } - } - - if (parent) { - parent.replaceChild(newNode, firstElementToRemove); - } - - // Append all the `elementsToRemove` to a fragment. This will... - // - remove them from the DOM - // - allow them to still be traversed with .nextSibling - // - allow a single fragment.qSA to fetch all elements being removed - var fragment = window.document.createDocumentFragment(); - for (i = 0; i < removeCount; i++) { - fragment.appendChild(elementsToRemove[i]); - } - - if (jqLite.hasData(firstElementToRemove)) { - // Copy over user data (that includes AngularJS's $scope etc.). Don't copy private - // data here because there's no public interface in jQuery to do that and copying over - // event listeners (which is the main use of private data) wouldn't work anyway. - jqLite.data(newNode, jqLite.data(firstElementToRemove)); - - // Remove $destroy event listeners from `firstElementToRemove` - jqLite(firstElementToRemove).off('$destroy'); - } - - // Cleanup any data/listeners on the elements and children. - // This includes invoking the $destroy event on any elements with listeners. - jqLite.cleanData(fragment.querySelectorAll('*')); - - // Update the jqLite collection to only contain the `newNode` - for (i = 1; i < removeCount; i++) { - delete elementsToRemove[i]; - } - elementsToRemove[0] = newNode; - elementsToRemove.length = 1; - } - - - function cloneAndAnnotateFn(fn, annotation) { - return extend(function() { return fn.apply(null, arguments); }, fn, annotation); - } - - - function invokeLinkFn(linkFn, scope, $element, attrs, controllers, transcludeFn) { - try { - linkFn(scope, $element, attrs, controllers, transcludeFn); - } catch (e) { - $exceptionHandler(e, startingTag($element)); - } - } - - function strictBindingsCheck(attrName, directiveName) { - if (strictComponentBindingsEnabled) { - throw $compileMinErr('missingattr', - 'Attribute \'{0}\' of \'{1}\' is non-optional and must be set!', - attrName, directiveName); - } - } - - // Set up $watches for isolate scope and controller bindings. - function initializeDirectiveBindings(scope, attrs, destination, bindings, directive) { - var removeWatchCollection = []; - var initialChanges = {}; - var changes; - - forEach(bindings, function initializeBinding(definition, scopeName) { - var attrName = definition.attrName, - optional = definition.optional, - mode = definition.mode, // @, =, <, or & - lastValue, - parentGet, parentSet, compare, removeWatch; - - switch (mode) { - - case '@': - if (!optional && !hasOwnProperty.call(attrs, attrName)) { - strictBindingsCheck(attrName, directive.name); - destination[scopeName] = attrs[attrName] = undefined; - - } - removeWatch = attrs.$observe(attrName, function(value) { - if (isString(value) || isBoolean(value)) { - var oldValue = destination[scopeName]; - recordChanges(scopeName, value, oldValue); - destination[scopeName] = value; - } - }); - attrs.$$observers[attrName].$$scope = scope; - lastValue = attrs[attrName]; - if (isString(lastValue)) { - // If the attribute has been provided then we trigger an interpolation to ensure - // the value is there for use in the link fn - destination[scopeName] = $interpolate(lastValue)(scope); - } else if (isBoolean(lastValue)) { - // If the attributes is one of the BOOLEAN_ATTR then AngularJS will have converted - // the value to boolean rather than a string, so we special case this situation - destination[scopeName] = lastValue; - } - initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]); - removeWatchCollection.push(removeWatch); - break; - - case '=': - if (!hasOwnProperty.call(attrs, attrName)) { - if (optional) break; - strictBindingsCheck(attrName, directive.name); - attrs[attrName] = undefined; - } - if (optional && !attrs[attrName]) break; - - parentGet = $parse(attrs[attrName]); - if (parentGet.literal) { - compare = equals; - } else { - compare = simpleCompare; - } - parentSet = parentGet.assign || function() { - // reset the change, or we will throw this exception on every $digest - lastValue = destination[scopeName] = parentGet(scope); - throw $compileMinErr('nonassign', - 'Expression \'{0}\' in attribute \'{1}\' used with directive \'{2}\' is non-assignable!', - attrs[attrName], attrName, directive.name); - }; - lastValue = destination[scopeName] = parentGet(scope); - var parentValueWatch = function parentValueWatch(parentValue) { - if (!compare(parentValue, destination[scopeName])) { - // we are out of sync and need to copy - if (!compare(parentValue, lastValue)) { - // parent changed and it has precedence - destination[scopeName] = parentValue; - } else { - // if the parent can be assigned then do so - parentSet(scope, parentValue = destination[scopeName]); - } - } - lastValue = parentValue; - return lastValue; - }; - parentValueWatch.$stateful = true; - if (definition.collection) { - removeWatch = scope.$watchCollection(attrs[attrName], parentValueWatch); - } else { - removeWatch = scope.$watch($parse(attrs[attrName], parentValueWatch), null, parentGet.literal); - } - removeWatchCollection.push(removeWatch); - break; - - case '<': - if (!hasOwnProperty.call(attrs, attrName)) { - if (optional) break; - strictBindingsCheck(attrName, directive.name); - attrs[attrName] = undefined; - } - if (optional && !attrs[attrName]) break; - - parentGet = $parse(attrs[attrName]); - var isLiteral = parentGet.literal; - - var initialValue = destination[scopeName] = parentGet(scope); - initialChanges[scopeName] = new SimpleChange(_UNINITIALIZED_VALUE, destination[scopeName]); - - removeWatch = scope[definition.collection ? '$watchCollection' : '$watch'](parentGet, function parentValueWatchAction(newValue, oldValue) { - if (oldValue === newValue) { - if (oldValue === initialValue || (isLiteral && equals(oldValue, initialValue))) { - return; - } - oldValue = initialValue; - } - recordChanges(scopeName, newValue, oldValue); - destination[scopeName] = newValue; - }); - - removeWatchCollection.push(removeWatch); - break; - - case '&': - if (!optional && !hasOwnProperty.call(attrs, attrName)) { - strictBindingsCheck(attrName, directive.name); - } - // Don't assign Object.prototype method to scope - parentGet = attrs.hasOwnProperty(attrName) ? $parse(attrs[attrName]) : noop; - - // Don't assign noop to destination if expression is not valid - if (parentGet === noop && optional) break; - - destination[scopeName] = function(locals) { - return parentGet(scope, locals); - }; - break; - } - }); - - function recordChanges(key, currentValue, previousValue) { - if (isFunction(destination.$onChanges) && !simpleCompare(currentValue, previousValue)) { - // If we have not already scheduled the top level onChangesQueue handler then do so now - if (!onChangesQueue) { - scope.$$postDigest(flushOnChangesQueue); - onChangesQueue = []; - } - // If we have not already queued a trigger of onChanges for this controller then do so now - if (!changes) { - changes = {}; - onChangesQueue.push(triggerOnChangesHook); - } - // If the has been a change on this property already then we need to reuse the previous value - if (changes[key]) { - previousValue = changes[key].previousValue; - } - // Store this change - changes[key] = new SimpleChange(previousValue, currentValue); - } - } - - function triggerOnChangesHook() { - destination.$onChanges(changes); - // Now clear the changes so that we schedule onChanges when more changes arrive - changes = undefined; - } - - return { - initialChanges: initialChanges, - removeWatches: removeWatchCollection.length && function removeWatches() { - for (var i = 0, ii = removeWatchCollection.length; i < ii; ++i) { - removeWatchCollection[i](); - } - } - }; - } - }]; -} - -function SimpleChange(previous, current) { - this.previousValue = previous; - this.currentValue = current; -} -SimpleChange.prototype.isFirstChange = function() { return this.previousValue === _UNINITIALIZED_VALUE; }; - - -var PREFIX_REGEXP = /^((?:x|data)[:\-_])/i; -var SPECIAL_CHARS_REGEXP = /[:\-_]+(.)/g; - -/** - * Converts all accepted directives format into proper directive name. - * @param name Name to normalize - */ -function directiveNormalize(name) { - return name - .replace(PREFIX_REGEXP, '') - .replace(SPECIAL_CHARS_REGEXP, function(_, letter, offset) { - return offset ? letter.toUpperCase() : letter; - }); -} - -/** - * @ngdoc type - * @name $compile.directive.Attributes - * - * @description - * A shared object between directive compile / linking functions which contains normalized DOM - * element attributes. The values reflect current binding state `{{ }}`. The normalization is - * needed since all of these are treated as equivalent in AngularJS: - * - * ``` - * - * ``` - */ - -/** - * @ngdoc property - * @name $compile.directive.Attributes#$attr - * - * @description - * A map of DOM element attribute names to the normalized name. This is - * needed to do reverse lookup from normalized name back to actual name. - */ - - -/** - * @ngdoc method - * @name $compile.directive.Attributes#$set - * @kind function - * - * @description - * Set DOM element attribute value. - * - * - * @param {string} name Normalized element attribute name of the property to modify. The name is - * reverse-translated using the {@link ng.$compile.directive.Attributes#$attr $attr} - * property to the original name. - * @param {string} value Value to set the attribute to. The value can be an interpolated string. - */ - - - -/** - * Closure compiler type information - */ - -function nodesetLinkingFn( - /* angular.Scope */ scope, - /* NodeList */ nodeList, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function directiveLinkingFn( - /* nodesetLinkingFn */ nodesetLinkingFn, - /* angular.Scope */ scope, - /* Node */ node, - /* Element */ rootElement, - /* function(Function) */ boundTranscludeFn -) {} - -function tokenDifference(str1, str2) { - var values = '', - tokens1 = str1.split(/\s+/), - tokens2 = str2.split(/\s+/); - - outer: - for (var i = 0; i < tokens1.length; i++) { - var token = tokens1[i]; - for (var j = 0; j < tokens2.length; j++) { - if (token === tokens2[j]) continue outer; - } - values += (values.length > 0 ? ' ' : '') + token; - } - return values; -} - -function removeComments(jqNodes) { - jqNodes = jqLite(jqNodes); - var i = jqNodes.length; - - if (i <= 1) { - return jqNodes; - } - - while (i--) { - var node = jqNodes[i]; - if (node.nodeType === NODE_TYPE_COMMENT || - (node.nodeType === NODE_TYPE_TEXT && node.nodeValue.trim() === '')) { - splice.call(jqNodes, i, 1); - } - } - return jqNodes; -} - -var $controllerMinErr = minErr('$controller'); - - -var CNTRL_REG = /^(\S+)(\s+as\s+([\w$]+))?$/; -function identifierForController(controller, ident) { - if (ident && isString(ident)) return ident; - if (isString(controller)) { - var match = CNTRL_REG.exec(controller); - if (match) return match[3]; - } -} - - -/** - * @ngdoc provider - * @name $controllerProvider - * @this - * - * @description - * The {@link ng.$controller $controller service} is used by AngularJS to create new - * controllers. - * - * This provider allows controller registration via the - * {@link ng.$controllerProvider#register register} method. - */ -function $ControllerProvider() { - var controllers = {}; - - /** - * @ngdoc method - * @name $controllerProvider#has - * @param {string} name Controller name to check. - */ - this.has = function(name) { - return controllers.hasOwnProperty(name); - }; - - /** - * @ngdoc method - * @name $controllerProvider#register - * @param {string|Object} name Controller name, or an object map of controllers where the keys are - * the names and the values are the constructors. - * @param {Function|Array} constructor Controller constructor fn (optionally decorated with DI - * annotations in the array notation). - */ - this.register = function(name, constructor) { - assertNotHasOwnProperty(name, 'controller'); - if (isObject(name)) { - extend(controllers, name); - } else { - controllers[name] = constructor; - } - }; - - this.$get = ['$injector', function($injector) { - - /** - * @ngdoc service - * @name $controller - * @requires $injector - * - * @param {Function|string} constructor If called with a function then it's considered to be the - * controller constructor function. Otherwise it's considered to be a string which is used - * to retrieve the controller constructor using the following steps: - * - * * check if a controller with given name is registered via `$controllerProvider` - * * check if evaluating the string on the current scope returns a constructor - * - * The string can use the `controller as property` syntax, where the controller instance is published - * as the specified property on the `scope`; the `scope` must be injected into `locals` param for this - * to work correctly. - * - * @param {Object} locals Injection locals for Controller. - * @return {Object} Instance of given controller. - * - * @description - * `$controller` service is responsible for instantiating controllers. - * - * It's just a simple call to {@link auto.$injector $injector}, but extracted into - * a service, so that one can override this service with [BC version](https://gist.github.com/1649788). - */ - return function $controller(expression, locals, later, ident) { - // PRIVATE API: - // param `later` --- indicates that the controller's constructor is invoked at a later time. - // If true, $controller will allocate the object with the correct - // prototype chain, but will not invoke the controller until a returned - // callback is invoked. - // param `ident` --- An optional label which overrides the label parsed from the controller - // expression, if any. - var instance, match, constructor, identifier; - later = later === true; - if (ident && isString(ident)) { - identifier = ident; - } - - if (isString(expression)) { - match = expression.match(CNTRL_REG); - if (!match) { - throw $controllerMinErr('ctrlfmt', - 'Badly formed controller string \'{0}\'. ' + - 'Must match `__name__ as __id__` or `__name__`.', expression); - } - constructor = match[1]; - identifier = identifier || match[3]; - expression = controllers.hasOwnProperty(constructor) - ? controllers[constructor] - : getter(locals.$scope, constructor, true); - - if (!expression) { - throw $controllerMinErr('ctrlreg', - 'The controller with the name \'{0}\' is not registered.', constructor); - } - - assertArgFn(expression, constructor, true); - } - - if (later) { - // Instantiate controller later: - // This machinery is used to create an instance of the object before calling the - // controller's constructor itself. - // - // This allows properties to be added to the controller before the constructor is - // invoked. Primarily, this is used for isolate scope bindings in $compile. - // - // This feature is not intended for use by applications, and is thus not documented - // publicly. - // Object creation: http://jsperf.com/create-constructor/2 - var controllerPrototype = (isArray(expression) ? - expression[expression.length - 1] : expression).prototype; - instance = Object.create(controllerPrototype || null); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return extend(function $controllerInit() { - var result = $injector.invoke(expression, instance, locals, constructor); - if (result !== instance && (isObject(result) || isFunction(result))) { - instance = result; - if (identifier) { - // If result changed, re-assign controllerAs value to scope. - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - } - return instance; - }, { - instance: instance, - identifier: identifier - }); - } - - instance = $injector.instantiate(expression, locals, constructor); - - if (identifier) { - addIdentifier(locals, identifier, instance, constructor || expression.name); - } - - return instance; - }; - - function addIdentifier(locals, identifier, instance, name) { - if (!(locals && isObject(locals.$scope))) { - throw minErr('$controller')('noscp', - 'Cannot export controller \'{0}\' as \'{1}\'! No $scope object provided via `locals`.', - name, identifier); - } - - locals.$scope[identifier] = instance; - } - }]; -} - -/** - * @ngdoc service - * @name $document - * @requires $window - * @this - * - * @description - * A {@link angular.element jQuery or jqLite} wrapper for the browser's `window.document` object. - * - * @example - - -
      -

      $document title:

      -

      window.document title:

      -
      -
      - - angular.module('documentExample', []) - .controller('ExampleController', ['$scope', '$document', function($scope, $document) { - $scope.title = $document[0].title; - $scope.windowTitle = angular.element(window.document)[0].title; - }]); - -
      - */ -function $DocumentProvider() { - this.$get = ['$window', function(window) { - return jqLite(window.document); - }]; -} - - -/** - * @private - * @this - * Listens for document visibility change and makes the current status accessible. - */ -function $$IsDocumentHiddenProvider() { - this.$get = ['$document', '$rootScope', function($document, $rootScope) { - var doc = $document[0]; - var hidden = doc && doc.hidden; - - $document.on('visibilitychange', changeListener); - - $rootScope.$on('$destroy', function() { - $document.off('visibilitychange', changeListener); - }); - - function changeListener() { - hidden = doc.hidden; - } - - return function() { - return hidden; - }; - }]; -} - -/** - * @ngdoc service - * @name $exceptionHandler - * @requires ng.$log - * @this - * - * @description - * Any uncaught exception in AngularJS expressions is delegated to this service. - * The default implementation simply delegates to `$log.error` which logs it into - * the browser console. - * - * In unit tests, if `angular-mocks.js` is loaded, this service is overridden by - * {@link ngMock.$exceptionHandler mock $exceptionHandler} which aids in testing. - * - * ## Example: - * - * The example below will overwrite the default `$exceptionHandler` in order to (a) log uncaught - * errors to the backend for later inspection by the developers and (b) to use `$log.warn()` instead - * of `$log.error()`. - * - * ```js - * angular. - * module('exceptionOverwrite', []). - * factory('$exceptionHandler', ['$log', 'logErrorsToBackend', function($log, logErrorsToBackend) { - * return function myExceptionHandler(exception, cause) { - * logErrorsToBackend(exception, cause); - * $log.warn(exception, cause); - * }; - * }]); - * ``` - * - *
      - * Note, that code executed in event-listeners (even those registered using jqLite's `on`/`bind` - * methods) does not delegate exceptions to the {@link ng.$exceptionHandler $exceptionHandler} - * (unless executed during a digest). - * - * If you wish, you can manually delegate exceptions, e.g. - * `try { ... } catch(e) { $exceptionHandler(e); }` - * - * @param {Error} exception Exception associated with the error. - * @param {string=} cause Optional information about the context in which - * the error was thrown. - * - */ -function $ExceptionHandlerProvider() { - this.$get = ['$log', function($log) { - return function(exception, cause) { - $log.error.apply($log, arguments); - }; - }]; -} - -var $$ForceReflowProvider = /** @this */ function() { - this.$get = ['$document', function($document) { - return function(domNode) { - //the line below will force the browser to perform a repaint so - //that all the animated elements within the animation frame will - //be properly updated and drawn on screen. This is required to - //ensure that the preparation animation is properly flushed so that - //the active state picks up from there. DO NOT REMOVE THIS LINE. - //DO NOT OPTIMIZE THIS LINE. THE MINIFIER WILL REMOVE IT OTHERWISE WHICH - //WILL RESULT IN AN UNPREDICTABLE BUG THAT IS VERY HARD TO TRACK DOWN AND - //WILL TAKE YEARS AWAY FROM YOUR LIFE. - if (domNode) { - if (!domNode.nodeType && domNode instanceof jqLite) { - domNode = domNode[0]; - } - } else { - domNode = $document[0].body; - } - return domNode.offsetWidth + 1; - }; - }]; -}; - -var APPLICATION_JSON = 'application/json'; -var CONTENT_TYPE_APPLICATION_JSON = {'Content-Type': APPLICATION_JSON + ';charset=utf-8'}; -var JSON_START = /^\[|^\{(?!\{)/; -var JSON_ENDS = { - '[': /]$/, - '{': /}$/ -}; -var JSON_PROTECTION_PREFIX = /^\)]\}',?\n/; -var $httpMinErr = minErr('$http'); - -function serializeValue(v) { - if (isObject(v)) { - return isDate(v) ? v.toISOString() : toJson(v); - } - return v; -} - - -/** @this */ -function $HttpParamSerializerProvider() { - /** - * @ngdoc service - * @name $httpParamSerializer - * @description - * - * Default {@link $http `$http`} params serializer that converts objects to strings - * according to the following rules: - * - * * `{'foo': 'bar'}` results in `foo=bar` - * * `{'foo': Date.now()}` results in `foo=2015-04-01T09%3A50%3A49.262Z` (`toISOString()` and encoded representation of a Date object) - * * `{'foo': ['bar', 'baz']}` results in `foo=bar&foo=baz` (repeated key for each array element) - * * `{'foo': {'bar':'baz'}}` results in `foo=%7B%22bar%22%3A%22baz%22%7D` (stringified and encoded representation of an object) - * - * Note that serializer will sort the request parameters alphabetically. - */ - - this.$get = function() { - return function ngParamSerializer(params) { - if (!params) return ''; - var parts = []; - forEachSorted(params, function(value, key) { - if (value === null || isUndefined(value) || isFunction(value)) return; - if (isArray(value)) { - forEach(value, function(v) { - parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(v))); - }); - } else { - parts.push(encodeUriQuery(key) + '=' + encodeUriQuery(serializeValue(value))); - } - }); - - return parts.join('&'); - }; - }; -} - -/** @this */ -function $HttpParamSerializerJQLikeProvider() { - /** - * @ngdoc service - * @name $httpParamSerializerJQLike - * - * @description - * - * Alternative {@link $http `$http`} params serializer that follows - * jQuery's [`param()`](http://api.jquery.com/jquery.param/) method logic. - * The serializer will also sort the params alphabetically. - * - * To use it for serializing `$http` request parameters, set it as the `paramSerializer` property: - * - * ```js - * $http({ - * url: myUrl, - * method: 'GET', - * params: myParams, - * paramSerializer: '$httpParamSerializerJQLike' - * }); - * ``` - * - * It is also possible to set it as the default `paramSerializer` in the - * {@link $httpProvider#defaults `$httpProvider`}. - * - * Additionally, you can inject the serializer and use it explicitly, for example to serialize - * form data for submission: - * - * ```js - * .controller(function($http, $httpParamSerializerJQLike) { - * //... - * - * $http({ - * url: myUrl, - * method: 'POST', - * data: $httpParamSerializerJQLike(myData), - * headers: { - * 'Content-Type': 'application/x-www-form-urlencoded' - * } - * }); - * - * }); - * ``` - * - */ - this.$get = function() { - return function jQueryLikeParamSerializer(params) { - if (!params) return ''; - var parts = []; - serialize(params, '', true); - return parts.join('&'); - - function serialize(toSerialize, prefix, topLevel) { - if (isArray(toSerialize)) { - forEach(toSerialize, function(value, index) { - serialize(value, prefix + '[' + (isObject(value) ? index : '') + ']'); - }); - } else if (isObject(toSerialize) && !isDate(toSerialize)) { - forEachSorted(toSerialize, function(value, key) { - serialize(value, prefix + - (topLevel ? '' : '[') + - key + - (topLevel ? '' : ']')); - }); - } else { - if (isFunction(toSerialize)) { - toSerialize = toSerialize(); - } - parts.push(encodeUriQuery(prefix) + '=' + - (toSerialize == null ? '' : encodeUriQuery(serializeValue(toSerialize)))); - } - } - }; - }; -} - -function defaultHttpResponseTransform(data, headers) { - if (isString(data)) { - // Strip json vulnerability protection prefix and trim whitespace - var tempData = data.replace(JSON_PROTECTION_PREFIX, '').trim(); - - if (tempData) { - var contentType = headers('Content-Type'); - var hasJsonContentType = contentType && (contentType.indexOf(APPLICATION_JSON) === 0); - - if (hasJsonContentType || isJsonLike(tempData)) { - try { - data = fromJson(tempData); - } catch (e) { - if (!hasJsonContentType) { - return data; - } - throw $httpMinErr('baddata', 'Data must be a valid JSON object. Received: "{0}". ' + - 'Parse error: "{1}"', data, e); - } - } - } - } - - return data; -} - -function isJsonLike(str) { - var jsonStart = str.match(JSON_START); - return jsonStart && JSON_ENDS[jsonStart[0]].test(str); -} - -/** - * Parse headers into key value object - * - * @param {string} headers Raw headers as a string - * @returns {Object} Parsed headers as key value object - */ -function parseHeaders(headers) { - var parsed = createMap(), i; - - function fillInParsed(key, val) { - if (key) { - parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; - } - } - - if (isString(headers)) { - forEach(headers.split('\n'), function(line) { - i = line.indexOf(':'); - fillInParsed(lowercase(trim(line.substr(0, i))), trim(line.substr(i + 1))); - }); - } else if (isObject(headers)) { - forEach(headers, function(headerVal, headerKey) { - fillInParsed(lowercase(headerKey), trim(headerVal)); - }); - } - - return parsed; -} - - -/** - * Returns a function that provides access to parsed headers. - * - * Headers are lazy parsed when first requested. - * @see parseHeaders - * - * @param {(string|Object)} headers Headers to provide access to. - * @returns {function(string=)} Returns a getter function which if called with: - * - * - if called with an argument returns a single header value or null - * - if called with no arguments returns an object containing all headers. - */ -function headersGetter(headers) { - var headersObj; - - return function(name) { - if (!headersObj) headersObj = parseHeaders(headers); - - if (name) { - var value = headersObj[lowercase(name)]; - if (value === undefined) { - value = null; - } - return value; - } - - return headersObj; - }; -} - - -/** - * Chain all given functions - * - * This function is used for both request and response transforming - * - * @param {*} data Data to transform. - * @param {function(string=)} headers HTTP headers getter fn. - * @param {number} status HTTP status code of the response. - * @param {(Function|Array.)} fns Function or an array of functions. - * @returns {*} Transformed data. - */ -function transformData(data, headers, status, fns) { - if (isFunction(fns)) { - return fns(data, headers, status); - } - - forEach(fns, function(fn) { - data = fn(data, headers, status); - }); - - return data; -} - - -function isSuccess(status) { - return 200 <= status && status < 300; -} - - -/** - * @ngdoc provider - * @name $httpProvider - * @this - * - * @description - * Use `$httpProvider` to change the default behavior of the {@link ng.$http $http} service. - */ -function $HttpProvider() { - /** - * @ngdoc property - * @name $httpProvider#defaults - * @description - * - * Object containing default values for all {@link ng.$http $http} requests. - * - * - **`defaults.cache`** - {boolean|Object} - A boolean value or object created with - * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of HTTP responses - * by default. See {@link $http#caching $http Caching} for more information. - * - * - **`defaults.headers`** - {Object} - Default headers for all $http requests. - * Refer to {@link ng.$http#setting-http-headers $http} for documentation on - * setting default headers. - * - **`defaults.headers.common`** - * - **`defaults.headers.post`** - * - **`defaults.headers.put`** - * - **`defaults.headers.patch`** - * - * - **`defaults.jsonpCallbackParam`** - `{string}` - the name of the query parameter that passes the name of the - * callback in a JSONP request. The value of this parameter will be replaced with the expression generated by the - * {@link $jsonpCallbacks} service. Defaults to `'callback'`. - * - * - **`defaults.paramSerializer`** - `{string|function(Object):string}` - A function - * used to the prepare string representation of request parameters (specified as an object). - * If specified as string, it is interpreted as a function registered with the {@link auto.$injector $injector}. - * Defaults to {@link ng.$httpParamSerializer $httpParamSerializer}. - * - * - **`defaults.transformRequest`** - - * `{Array|function(data, headersGetter)}` - - * An array of functions (or a single function) which are applied to the request data. - * By default, this is an array with one request transformation function: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * - **`defaults.transformResponse`** - - * `{Array|function(data, headersGetter, status)}` - - * An array of functions (or a single function) which are applied to the response data. By default, - * this is an array which applies one response transformation function that does two things: - * - * - If XSRF prefix is detected, strip it - * (see {@link ng.$http#security-considerations Security Considerations in the $http docs}). - * - If the `Content-Type` is `application/json` or the response looks like JSON, - * deserialize it using a JSON parser. - * - * - **`defaults.xsrfCookieName`** - {string} - Name of cookie containing the XSRF token. - * Defaults value is `'XSRF-TOKEN'`. - * - * - **`defaults.xsrfHeaderName`** - {string} - Name of HTTP header to populate with the - * XSRF token. Defaults value is `'X-XSRF-TOKEN'`. - * - */ - var defaults = this.defaults = { - // transform incoming response data - transformResponse: [defaultHttpResponseTransform], - - // transform outgoing request data - transformRequest: [function(d) { - return isObject(d) && !isFile(d) && !isBlob(d) && !isFormData(d) ? toJson(d) : d; - }], - - // default headers - headers: { - common: { - 'Accept': 'application/json, text/plain, */*' - }, - post: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - put: shallowCopy(CONTENT_TYPE_APPLICATION_JSON), - patch: shallowCopy(CONTENT_TYPE_APPLICATION_JSON) - }, - - xsrfCookieName: 'XSRF-TOKEN', - xsrfHeaderName: 'X-XSRF-TOKEN', - - paramSerializer: '$httpParamSerializer', - - jsonpCallbackParam: 'callback' - }; - - var useApplyAsync = false; - /** - * @ngdoc method - * @name $httpProvider#useApplyAsync - * @description - * - * Configure $http service to combine processing of multiple http responses received at around - * the same time via {@link ng.$rootScope.Scope#$applyAsync $rootScope.$applyAsync}. This can result in - * significant performance improvement for bigger applications that make many HTTP requests - * concurrently (common during application bootstrap). - * - * Defaults to false. If no value is specified, returns the current configured value. - * - * @param {boolean=} value If true, when requests are loaded, they will schedule a deferred - * "apply" on the next tick, giving time for subsequent requests in a roughly ~10ms window - * to load and share the same digest cycle. - * - * @returns {boolean|Object} If a value is specified, returns the $httpProvider for chaining. - * otherwise, returns the current configured value. - */ - this.useApplyAsync = function(value) { - if (isDefined(value)) { - useApplyAsync = !!value; - return this; - } - return useApplyAsync; - }; - - /** - * @ngdoc property - * @name $httpProvider#interceptors - * @description - * - * Array containing service factories for all synchronous or asynchronous {@link ng.$http $http} - * pre-processing of request or postprocessing of responses. - * - * These service factories are ordered by request, i.e. they are applied in the same order as the - * array, on request, but reverse order, on response. - * - * {@link ng.$http#interceptors Interceptors detailed info} - */ - var interceptorFactories = this.interceptors = []; - - /** - * @ngdoc property - * @name $httpProvider#xsrfWhitelistedOrigins - * @description - * - * Array containing URLs whose origins are trusted to receive the XSRF token. See the - * {@link ng.$http#security-considerations Security Considerations} sections for more details on - * XSRF. - * - * **Note:** An "origin" consists of the [URI scheme](https://en.wikipedia.org/wiki/URI_scheme), - * the [hostname](https://en.wikipedia.org/wiki/Hostname) and the - * [port number](https://en.wikipedia.org/wiki/Port_(computer_networking). For `http:` and - * `https:`, the port number can be omitted if using th default ports (80 and 443 respectively). - * Examples: `http://example.com`, `https://api.example.com:9876` - * - *
      - * It is not possible to whitelist specific URLs/paths. The `path`, `query` and `fragment` parts - * of a URL will be ignored. For example, `https://foo.com/path/bar?query=baz#fragment` will be - * treated as `https://foo.com`, meaning that **all** requests to URLs starting with - * `https://foo.com/` will include the XSRF token. - *
      - * - * @example - * - * ```js - * // App served from `https://example.com/`. - * angular. - * module('xsrfWhitelistedOriginsExample', []). - * config(['$httpProvider', function($httpProvider) { - * $httpProvider.xsrfWhitelistedOrigins.push('https://api.example.com'); - * }]). - * run(['$http', function($http) { - * // The XSRF token will be sent. - * $http.get('https://api.example.com/preferences').then(...); - * - * // The XSRF token will NOT be sent. - * $http.get('https://stats.example.com/activity').then(...); - * }]); - * ``` - */ - var xsrfWhitelistedOrigins = this.xsrfWhitelistedOrigins = []; - - this.$get = ['$browser', '$httpBackend', '$$cookieReader', '$cacheFactory', '$rootScope', '$q', '$injector', '$sce', - function($browser, $httpBackend, $$cookieReader, $cacheFactory, $rootScope, $q, $injector, $sce) { - - var defaultCache = $cacheFactory('$http'); - - /** - * Make sure that default param serializer is exposed as a function - */ - defaults.paramSerializer = isString(defaults.paramSerializer) ? - $injector.get(defaults.paramSerializer) : defaults.paramSerializer; - - /** - * Interceptors stored in reverse order. Inner interceptors before outer interceptors. - * The reversal is needed so that we can build up the interception chain around the - * server request. - */ - var reversedInterceptors = []; - - forEach(interceptorFactories, function(interceptorFactory) { - reversedInterceptors.unshift(isString(interceptorFactory) - ? $injector.get(interceptorFactory) : $injector.invoke(interceptorFactory)); - }); - - /** - * A function to check request URLs against a list of allowed origins. - */ - var urlIsAllowedOrigin = urlIsAllowedOriginFactory(xsrfWhitelistedOrigins); - - /** - * @ngdoc service - * @kind function - * @name $http - * @requires ng.$httpBackend - * @requires $cacheFactory - * @requires $rootScope - * @requires $q - * @requires $injector - * - * @description - * The `$http` service is a core AngularJS service that facilitates communication with the remote - * HTTP servers via the browser's [XMLHttpRequest](https://developer.mozilla.org/en/xmlhttprequest) - * object or via [JSONP](http://en.wikipedia.org/wiki/JSONP). - * - * For unit testing applications that use `$http` service, see - * {@link ngMock.$httpBackend $httpBackend mock}. - * - * For a higher level of abstraction, please check out the {@link ngResource.$resource - * $resource} service. - * - * The $http API is based on the {@link ng.$q deferred/promise APIs} exposed by - * the $q service. While for simple usage patterns this doesn't matter much, for advanced usage - * it is important to familiarize yourself with these APIs and the guarantees they provide. - * - * - * ## General usage - * The `$http` service is a function which takes a single argument — a {@link $http#usage configuration object} — - * that is used to generate an HTTP request and returns a {@link ng.$q promise} that is - * resolved (request success) or rejected (request failure) with a - * {@link ng.$http#$http-returns response} object. - * - * ```js - * // Simple GET request example: - * $http({ - * method: 'GET', - * url: '/someUrl' - * }).then(function successCallback(response) { - * // this callback will be called asynchronously - * // when the response is available - * }, function errorCallback(response) { - * // called asynchronously if an error occurs - * // or server returns response with an error status. - * }); - * ``` - * - * - * ## Shortcut methods - * - * Shortcut methods are also available. All shortcut methods require passing in the URL, and - * request data must be passed in for POST/PUT requests. An optional config can be passed as the - * last argument. - * - * ```js - * $http.get('/someUrl', config).then(successCallback, errorCallback); - * $http.post('/someUrl', data, config).then(successCallback, errorCallback); - * ``` - * - * Complete list of shortcut methods: - * - * - {@link ng.$http#get $http.get} - * - {@link ng.$http#head $http.head} - * - {@link ng.$http#post $http.post} - * - {@link ng.$http#put $http.put} - * - {@link ng.$http#delete $http.delete} - * - {@link ng.$http#jsonp $http.jsonp} - * - {@link ng.$http#patch $http.patch} - * - * - * ## Writing Unit Tests that use $http - * When unit testing (using {@link ngMock ngMock}), it is necessary to call - * {@link ngMock.$httpBackend#flush $httpBackend.flush()} to flush each pending - * request using trained responses. - * - * ``` - * $httpBackend.expectGET(...); - * $http.get(...); - * $httpBackend.flush(); - * ``` - * - * ## Setting HTTP Headers - * - * The $http service will automatically add certain HTTP headers to all requests. These defaults - * can be fully configured by accessing the `$httpProvider.defaults.headers` configuration - * object, which currently contains this default configuration: - * - * - `$httpProvider.defaults.headers.common` (headers that are common for all requests): - * - Accept: application/json, text/plain, \*/\* - * - `$httpProvider.defaults.headers.post`: (header defaults for POST requests) - * - `Content-Type: application/json` - * - `$httpProvider.defaults.headers.put` (header defaults for PUT requests) - * - `Content-Type: application/json` - * - * To add or overwrite these defaults, simply add or remove a property from these configuration - * objects. To add headers for an HTTP method other than POST or PUT, simply add a new object - * with the lowercased HTTP method name as the key, e.g. - * `$httpProvider.defaults.headers.get = { 'My-Header' : 'value' }`. - * - * The defaults can also be set at runtime via the `$http.defaults` object in the same - * fashion. For example: - * - * ``` - * module.run(function($http) { - * $http.defaults.headers.common.Authorization = 'Basic YmVlcDpib29w'; - * }); - * ``` - * - * In addition, you can supply a `headers` property in the config object passed when - * calling `$http(config)`, which overrides the defaults without changing them globally. - * - * To explicitly remove a header automatically added via $httpProvider.defaults.headers on a per request basis, - * Use the `headers` property, setting the desired header to `undefined`. For example: - * - * ```js - * var req = { - * method: 'POST', - * url: 'http://example.com', - * headers: { - * 'Content-Type': undefined - * }, - * data: { test: 'test' } - * } - * - * $http(req).then(function(){...}, function(){...}); - * ``` - * - * ## Transforming Requests and Responses - * - * Both requests and responses can be transformed using transformation functions: `transformRequest` - * and `transformResponse`. These properties can be a single function that returns - * the transformed value (`function(data, headersGetter, status)`) or an array of such transformation functions, - * which allows you to `push` or `unshift` a new transformation function into the transformation chain. - * - *
      - * **Note:** AngularJS does not make a copy of the `data` parameter before it is passed into the `transformRequest` pipeline. - * That means changes to the properties of `data` are not local to the transform function (since Javascript passes objects by reference). - * For example, when calling `$http.get(url, $scope.myObject)`, modifications to the object's properties in a transformRequest - * function will be reflected on the scope and in any templates where the object is data-bound. - * To prevent this, transform functions should have no side-effects. - * If you need to modify properties, it is recommended to make a copy of the data, or create new object to return. - *
      - * - * ### Default Transformations - * - * The `$httpProvider` provider and `$http` service expose `defaults.transformRequest` and - * `defaults.transformResponse` properties. If a request does not provide its own transformations - * then these will be applied. - * - * You can augment or replace the default transformations by modifying these properties by adding to or - * replacing the array. - * - * AngularJS provides the following default transformations: - * - * Request transformations (`$httpProvider.defaults.transformRequest` and `$http.defaults.transformRequest`) is - * an array with one function that does the following: - * - * - If the `data` property of the request configuration object contains an object, serialize it - * into JSON format. - * - * Response transformations (`$httpProvider.defaults.transformResponse` and `$http.defaults.transformResponse`) is - * an array with one function that does the following: - * - * - If XSRF prefix is detected, strip it (see Security Considerations section below). - * - If the `Content-Type` is `application/json` or the response looks like JSON, - * deserialize it using a JSON parser. - * - * - * ### Overriding the Default Transformations Per Request - * - * If you wish to override the request/response transformations only for a single request then provide - * `transformRequest` and/or `transformResponse` properties on the configuration object passed - * into `$http`. - * - * Note that if you provide these properties on the config object the default transformations will be - * overwritten. If you wish to augment the default transformations then you must include them in your - * local transformation array. - * - * The following code demonstrates adding a new response transformation to be run after the default response - * transformations have been run. - * - * ```js - * function appendTransform(defaults, transform) { - * - * // We can't guarantee that the default transformation is an array - * defaults = angular.isArray(defaults) ? defaults : [defaults]; - * - * // Append the new transformation to the defaults - * return defaults.concat(transform); - * } - * - * $http({ - * url: '...', - * method: 'GET', - * transformResponse: appendTransform($http.defaults.transformResponse, function(value) { - * return doTransform(value); - * }) - * }); - * ``` - * - * - * ## Caching - * - * {@link ng.$http `$http`} responses are not cached by default. To enable caching, you must - * set the config.cache value or the default cache value to TRUE or to a cache object (created - * with {@link ng.$cacheFactory `$cacheFactory`}). If defined, the value of config.cache takes - * precedence over the default cache value. - * - * In order to: - * * cache all responses - set the default cache value to TRUE or to a cache object - * * cache a specific response - set config.cache value to TRUE or to a cache object - * - * If caching is enabled, but neither the default cache nor config.cache are set to a cache object, - * then the default `$cacheFactory("$http")` object is used. - * - * The default cache value can be set by updating the - * {@link ng.$http#defaults `$http.defaults.cache`} property or the - * {@link $httpProvider#defaults `$httpProvider.defaults.cache`} property. - * - * When caching is enabled, {@link ng.$http `$http`} stores the response from the server using - * the relevant cache object. The next time the same request is made, the response is returned - * from the cache without sending a request to the server. - * - * Take note that: - * - * * Only GET and JSONP requests are cached. - * * The cache key is the request URL including search parameters; headers are not considered. - * * Cached responses are returned asynchronously, in the same way as responses from the server. - * * If multiple identical requests are made using the same cache, which is not yet populated, - * one request will be made to the server and remaining requests will return the same response. - * * A cache-control header on the response does not affect if or how responses are cached. - * - * - * ## Interceptors - * - * Before you start creating interceptors, be sure to understand the - * {@link ng.$q $q and deferred/promise APIs}. - * - * For purposes of global error handling, authentication, or any kind of synchronous or - * asynchronous pre-processing of request or postprocessing of responses, it is desirable to be - * able to intercept requests before they are handed to the server and - * responses before they are handed over to the application code that - * initiated these requests. The interceptors leverage the {@link ng.$q - * promise APIs} to fulfill this need for both synchronous and asynchronous pre-processing. - * - * The interceptors are service factories that are registered with the `$httpProvider` by - * adding them to the `$httpProvider.interceptors` array. The factory is called and - * injected with dependencies (if specified) and returns the interceptor. - * - * There are two kinds of interceptors (and two kinds of rejection interceptors): - * - * * `request`: interceptors get called with a http {@link $http#usage config} object. The function is free to - * modify the `config` object or create a new one. The function needs to return the `config` - * object directly, or a promise containing the `config` or a new `config` object. - * * `requestError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * * `response`: interceptors get called with http `response` object. The function is free to - * modify the `response` object or create a new one. The function needs to return the `response` - * object directly, or as a promise containing the `response` or a new `response` object. - * * `responseError`: interceptor gets called when a previous interceptor threw an error or - * resolved with a rejection. - * - * - * ```js - * // register the interceptor as a service - * $provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { - * return { - * // optional method - * 'request': function(config) { - * // do something on success - * return config; - * }, - * - * // optional method - * 'requestError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * }, - * - * - * - * // optional method - * 'response': function(response) { - * // do something on success - * return response; - * }, - * - * // optional method - * 'responseError': function(rejection) { - * // do something on error - * if (canRecover(rejection)) { - * return responseOrNewPromise - * } - * return $q.reject(rejection); - * } - * }; - * }); - * - * $httpProvider.interceptors.push('myHttpInterceptor'); - * - * - * // alternatively, register the interceptor via an anonymous factory - * $httpProvider.interceptors.push(function($q, dependency1, dependency2) { - * return { - * 'request': function(config) { - * // same as above - * }, - * - * 'response': function(response) { - * // same as above - * } - * }; - * }); - * ``` - * - * ## Security Considerations - * - * When designing web applications, consider security threats from: - * - * - [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * - [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) - * - * Both server and the client must cooperate in order to eliminate these threats. AngularJS comes - * pre-configured with strategies that address these issues, but for this to work backend server - * cooperation is required. - * - * ### JSON Vulnerability Protection - * - * A [JSON vulnerability](http://haacked.com/archive/2008/11/20/anatomy-of-a-subtle-json-vulnerability.aspx) - * allows third party website to turn your JSON resource URL into - * [JSONP](http://en.wikipedia.org/wiki/JSONP) request under some conditions. To - * counter this your server can prefix all JSON requests with following string `")]}',\n"`. - * AngularJS will automatically strip the prefix before processing it as JSON. - * - * For example if your server needs to return: - * ```js - * ['one','two'] - * ``` - * - * which is vulnerable to attack, your server can return: - * ```js - * )]}', - * ['one','two'] - * ``` - * - * AngularJS will strip the prefix, before processing the JSON. - * - * - * ### Cross Site Request Forgery (XSRF) Protection - * - * [XSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery) is an attack technique by - * which the attacker can trick an authenticated user into unknowingly executing actions on your - * website. AngularJS provides a mechanism to counter XSRF. When performing XHR requests, the - * $http service reads a token from a cookie (by default, `XSRF-TOKEN`) and sets it as an HTTP - * header (by default `X-XSRF-TOKEN`). Since only JavaScript that runs on your domain could read - * the cookie, your server can be assured that the XHR came from JavaScript running on your - * domain. - * - * To take advantage of this, your server needs to set a token in a JavaScript readable session - * cookie called `XSRF-TOKEN` on the first HTTP GET request. On subsequent XHR requests the - * server can verify that the cookie matches the `X-XSRF-TOKEN` HTTP header, and therefore be - * sure that only JavaScript running on your domain could have sent the request. The token must - * be unique for each user and must be verifiable by the server (to prevent the JavaScript from - * making up its own tokens). We recommend that the token is a digest of your site's - * authentication cookie with a [salt](https://en.wikipedia.org/wiki/Salt_(cryptography)) - * for added security. - * - * The header will — by default — **not** be set for cross-domain requests. This - * prevents unauthorized servers (e.g. malicious or compromised 3rd-party APIs) from gaining - * access to your users' XSRF tokens and exposing them to Cross Site Request Forgery. If you - * want to, you can whitelist additional origins to also receive the XSRF token, by adding them - * to {@link ng.$httpProvider#xsrfWhitelistedOrigins xsrfWhitelistedOrigins}. This might be - * useful, for example, if your application, served from `example.com`, needs to access your API - * at `api.example.com`. - * See {@link ng.$httpProvider#xsrfWhitelistedOrigins $httpProvider.xsrfWhitelistedOrigins} for - * more details. - * - *
      - * **Warning**
      - * Only whitelist origins that you have control over and make sure you understand the - * implications of doing so. - *
      - * - * The name of the cookie and the header can be specified using the `xsrfCookieName` and - * `xsrfHeaderName` properties of either `$httpProvider.defaults` at config-time, - * `$http.defaults` at run-time, or the per-request config object. - * - * In order to prevent collisions in environments where multiple AngularJS apps share the - * same domain or subdomain, we recommend that each application uses a unique cookie name. - * - * - * @param {object} config Object describing the request to be made and how it should be - * processed. The object has following properties: - * - * - **method** – `{string}` – HTTP method (e.g. 'GET', 'POST', etc) - * - **url** – `{string|TrustedObject}` – Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * - **params** – `{Object.}` – Map of strings or objects which will be serialized - * with the `paramSerializer` and appended as GET parameters. - * - **data** – `{string|Object}` – Data to be sent as the request message data. - * - **headers** – `{Object}` – Map of strings or functions which return strings representing - * HTTP headers to send to the server. If the return value of a function is null, the - * header will not be sent. Functions accept a config object as an argument. - * - **eventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest object. - * To bind events to the XMLHttpRequest upload object, use `uploadEventHandlers`. - * The handler will be called in the context of a `$apply` block. - * - **uploadEventHandlers** - `{Object}` - Event listeners to be bound to the XMLHttpRequest upload - * object. To bind events to the XMLHttpRequest object, use `eventHandlers`. - * The handler will be called in the context of a `$apply` block. - * - **xsrfHeaderName** – `{string}` – Name of HTTP header to populate with the XSRF token. - * - **xsrfCookieName** – `{string}` – Name of cookie containing the XSRF token. - * - **transformRequest** – - * `{function(data, headersGetter)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * request body and headers and returns its transformed (typically serialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **transformResponse** – - * `{function(data, headersGetter, status)|Array.}` – - * transform function or an array of such functions. The transform function takes the http - * response body, headers and status and returns its transformed (typically deserialized) version. - * See {@link ng.$http#overriding-the-default-transformations-per-request - * Overriding the Default Transformations} - * - **paramSerializer** - `{string|function(Object):string}` - A function used to - * prepare the string representation of request parameters (specified as an object). - * If specified as string, it is interpreted as function registered with the - * {@link $injector $injector}, which means you can create your own serializer - * by registering it as a {@link auto.$provide#service service}. - * The default serializer is the {@link $httpParamSerializer $httpParamSerializer}; - * alternatively, you can use the {@link $httpParamSerializerJQLike $httpParamSerializerJQLike} - * - **cache** – `{boolean|Object}` – A boolean value or object created with - * {@link ng.$cacheFactory `$cacheFactory`} to enable or disable caching of the HTTP response. - * See {@link $http#caching $http Caching} for more information. - * - **timeout** – `{number|Promise}` – timeout in milliseconds, or {@link ng.$q promise} - * that should abort the request when resolved. - * - * A numerical timeout or a promise returned from {@link ng.$timeout $timeout}, will set - * the `xhrStatus` in the {@link $http#$http-returns response} to "timeout", and any other - * resolved promise will set it to "abort", following standard XMLHttpRequest behavior. - * - * - **withCredentials** - `{boolean}` - whether to set the `withCredentials` flag on the - * XHR object. See [requests with credentials](https://developer.mozilla.org/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials) - * for more information. - * - **responseType** - `{string}` - see - * [XMLHttpRequest.responseType](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest#xmlhttprequest-responsetype). - * - * @returns {HttpPromise} A {@link ng.$q `Promise}` that will be resolved (request success) - * or rejected (request failure) with a response object. - * - * The response object has these properties: - * - * - **data** – `{string|Object}` – The response body transformed with - * the transform functions. - * - **status** – `{number}` – HTTP status code of the response. - * - **headers** – `{function([headerName])}` – Header getter function. - * - **config** – `{Object}` – The configuration object that was used - * to generate the request. - * - **statusText** – `{string}` – HTTP status text of the response. - * - **xhrStatus** – `{string}` – Status of the XMLHttpRequest - * (`complete`, `error`, `timeout` or `abort`). - * - * - * A response status code between 200 and 299 is considered a success status - * and will result in the success callback being called. Any response status - * code outside of that range is considered an error status and will result - * in the error callback being called. - * Also, status codes less than -1 are normalized to zero. -1 usually means - * the request was aborted, e.g. using a `config.timeout`. More information - * about the status might be available in the `xhrStatus` property. - * - * Note that if the response is a redirect, XMLHttpRequest will transparently - * follow it, meaning that the outcome (success or error) will be determined - * by the final response status code. - * - * - * @property {Array.} pendingRequests Array of config objects for currently pending - * requests. This is primarily meant to be used for debugging purposes. - * - * - * @example - - -
      - - -
      - - - -
      http status code: {{status}}
      -
      http response data: {{data}}
      -
      -
      - - angular.module('httpExample', []) - .config(['$sceDelegateProvider', function($sceDelegateProvider) { - // We must whitelist the JSONP endpoint that we are using to show that we trust it - $sceDelegateProvider.resourceUrlWhitelist([ - 'self', - 'https://angularjs.org/**' - ]); - }]) - .controller('FetchController', ['$scope', '$http', '$templateCache', - function($scope, $http, $templateCache) { - $scope.method = 'GET'; - $scope.url = 'http-hello.html'; - - $scope.fetch = function() { - $scope.code = null; - $scope.response = null; - - $http({method: $scope.method, url: $scope.url, cache: $templateCache}). - then(function(response) { - $scope.status = response.status; - $scope.data = response.data; - }, function(response) { - $scope.data = response.data || 'Request failed'; - $scope.status = response.status; - }); - }; - - $scope.updateModel = function(method, url) { - $scope.method = method; - $scope.url = url; - }; - }]); - - - Hello, $http! - - - var status = element(by.binding('status')); - var data = element(by.binding('data')); - var fetchBtn = element(by.id('fetchbtn')); - var sampleGetBtn = element(by.id('samplegetbtn')); - var invalidJsonpBtn = element(by.id('invalidjsonpbtn')); - - it('should make an xhr GET request', function() { - sampleGetBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('200'); - expect(data.getText()).toMatch(/Hello, \$http!/); - }); - -// Commented out due to flakes. See https://github.com/angular/angular.js/issues/9185 -// it('should make a JSONP request to angularjs.org', function() { -// var sampleJsonpBtn = element(by.id('samplejsonpbtn')); -// sampleJsonpBtn.click(); -// fetchBtn.click(); -// expect(status.getText()).toMatch('200'); -// expect(data.getText()).toMatch(/Super Hero!/); -// }); - - it('should make JSONP request to invalid URL and invoke the error handler', - function() { - invalidJsonpBtn.click(); - fetchBtn.click(); - expect(status.getText()).toMatch('0'); - expect(data.getText()).toMatch('Request failed'); - }); - -
      - */ - function $http(requestConfig) { - - if (!isObject(requestConfig)) { - throw minErr('$http')('badreq', 'Http request configuration must be an object. Received: {0}', requestConfig); - } - - if (!isString($sce.valueOf(requestConfig.url))) { - throw minErr('$http')('badreq', 'Http request configuration url must be a string or a $sce trusted object. Received: {0}', requestConfig.url); - } - - var config = extend({ - method: 'get', - transformRequest: defaults.transformRequest, - transformResponse: defaults.transformResponse, - paramSerializer: defaults.paramSerializer, - jsonpCallbackParam: defaults.jsonpCallbackParam - }, requestConfig); - - config.headers = mergeHeaders(requestConfig); - config.method = uppercase(config.method); - config.paramSerializer = isString(config.paramSerializer) ? - $injector.get(config.paramSerializer) : config.paramSerializer; - - $browser.$$incOutstandingRequestCount('$http'); - - var requestInterceptors = []; - var responseInterceptors = []; - var promise = $q.resolve(config); - - // apply interceptors - forEach(reversedInterceptors, function(interceptor) { - if (interceptor.request || interceptor.requestError) { - requestInterceptors.unshift(interceptor.request, interceptor.requestError); - } - if (interceptor.response || interceptor.responseError) { - responseInterceptors.push(interceptor.response, interceptor.responseError); - } - }); - - promise = chainInterceptors(promise, requestInterceptors); - promise = promise.then(serverRequest); - promise = chainInterceptors(promise, responseInterceptors); - promise = promise.finally(completeOutstandingRequest); - - return promise; - - - function chainInterceptors(promise, interceptors) { - for (var i = 0, ii = interceptors.length; i < ii;) { - var thenFn = interceptors[i++]; - var rejectFn = interceptors[i++]; - - promise = promise.then(thenFn, rejectFn); - } - - interceptors.length = 0; - - return promise; - } - - function completeOutstandingRequest() { - $browser.$$completeOutstandingRequest(noop, '$http'); - } - - function executeHeaderFns(headers, config) { - var headerContent, processedHeaders = {}; - - forEach(headers, function(headerFn, header) { - if (isFunction(headerFn)) { - headerContent = headerFn(config); - if (headerContent != null) { - processedHeaders[header] = headerContent; - } - } else { - processedHeaders[header] = headerFn; - } - }); - - return processedHeaders; - } - - function mergeHeaders(config) { - var defHeaders = defaults.headers, - reqHeaders = extend({}, config.headers), - defHeaderName, lowercaseDefHeaderName, reqHeaderName; - - defHeaders = extend({}, defHeaders.common, defHeaders[lowercase(config.method)]); - - // using for-in instead of forEach to avoid unnecessary iteration after header has been found - defaultHeadersIteration: - for (defHeaderName in defHeaders) { - lowercaseDefHeaderName = lowercase(defHeaderName); - - for (reqHeaderName in reqHeaders) { - if (lowercase(reqHeaderName) === lowercaseDefHeaderName) { - continue defaultHeadersIteration; - } - } - - reqHeaders[defHeaderName] = defHeaders[defHeaderName]; - } - - // execute if header value is a function for merged headers - return executeHeaderFns(reqHeaders, shallowCopy(config)); - } - - function serverRequest(config) { - var headers = config.headers; - var reqData = transformData(config.data, headersGetter(headers), undefined, config.transformRequest); - - // strip content-type if data is undefined - if (isUndefined(reqData)) { - forEach(headers, function(value, header) { - if (lowercase(header) === 'content-type') { - delete headers[header]; - } - }); - } - - if (isUndefined(config.withCredentials) && !isUndefined(defaults.withCredentials)) { - config.withCredentials = defaults.withCredentials; - } - - // send request - return sendReq(config, reqData).then(transformResponse, transformResponse); - } - - function transformResponse(response) { - // make a copy since the response must be cacheable - var resp = extend({}, response); - resp.data = transformData(response.data, response.headers, response.status, - config.transformResponse); - return (isSuccess(response.status)) - ? resp - : $q.reject(resp); - } - } - - $http.pendingRequests = []; - - /** - * @ngdoc method - * @name $http#get - * - * @description - * Shortcut method to perform `GET` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#delete - * - * @description - * Shortcut method to perform `DELETE` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#head - * - * @description - * Shortcut method to perform `HEAD` request. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#jsonp - * - * @description - * Shortcut method to perform `JSONP` request. - * - * Note that, since JSONP requests are sensitive because the response is given full access to the browser, - * the url must be declared, via {@link $sce} as a trusted resource URL. - * You can trust a URL by adding it to the whitelist via - * {@link $sceDelegateProvider#resourceUrlWhitelist `$sceDelegateProvider.resourceUrlWhitelist`} or - * by explicitly trusting the URL via {@link $sce#trustAsResourceUrl `$sce.trustAsResourceUrl(url)`}. - * - * You should avoid generating the URL for the JSONP request from user provided data. - * Provide additional query parameters via `params` property of the `config` parameter, rather than - * modifying the URL itself. - * - * JSONP requests must specify a callback to be used in the response from the server. This callback - * is passed as a query parameter in the request. You must specify the name of this parameter by - * setting the `jsonpCallbackParam` property on the request config object. - * - * ``` - * $http.jsonp('some/trusted/url', {jsonpCallbackParam: 'callback'}) - * ``` - * - * You can also specify a default callback parameter name in `$http.defaults.jsonpCallbackParam`. - * Initially this is set to `'callback'`. - * - *
      - * You can no longer use the `JSON_CALLBACK` string as a placeholder for specifying where the callback - * parameter value should go. - *
      - * - * If you would like to customise where and how the callbacks are stored then try overriding - * or decorating the {@link $jsonpCallbacks} service. - * - * @param {string|TrustedObject} url Absolute or relative URL of the resource that is being requested; - * or an object created by a call to `$sce.trustAsResourceUrl(url)`. - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - createShortMethods('get', 'delete', 'head', 'jsonp'); - - /** - * @ngdoc method - * @name $http#post - * - * @description - * Shortcut method to perform `POST` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#put - * - * @description - * Shortcut method to perform `PUT` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - - /** - * @ngdoc method - * @name $http#patch - * - * @description - * Shortcut method to perform `PATCH` request. - * - * @param {string} url Relative or absolute URL specifying the destination of the request - * @param {*} data Request content - * @param {Object=} config Optional configuration object. See {@link ng.$http#$http-arguments `$http()` arguments}. - * @returns {HttpPromise} A Promise that will be resolved or rejected with a response object. - * See {@link ng.$http#$http-returns `$http()` return value}. - */ - createShortMethodsWithData('post', 'put', 'patch'); - - /** - * @ngdoc property - * @name $http#defaults - * - * @description - * Runtime equivalent of the `$httpProvider.defaults` property. Allows configuration of - * default headers, withCredentials as well as request and response transformations. - * - * See "Setting HTTP Headers" and "Transforming Requests and Responses" sections above. - */ - $http.defaults = defaults; - - - return $http; - - - function createShortMethods(names) { - forEach(arguments, function(name) { - $http[name] = function(url, config) { - return $http(extend({}, config || {}, { - method: name, - url: url - })); - }; - }); - } - - - function createShortMethodsWithData(name) { - forEach(arguments, function(name) { - $http[name] = function(url, data, config) { - return $http(extend({}, config || {}, { - method: name, - url: url, - data: data - })); - }; - }); - } - - - /** - * Makes the request. - * - * !!! ACCESSES CLOSURE VARS: - * $httpBackend, defaults, $log, $rootScope, defaultCache, $http.pendingRequests - */ - function sendReq(config, reqData) { - var deferred = $q.defer(), - promise = deferred.promise, - cache, - cachedResp, - reqHeaders = config.headers, - isJsonp = lowercase(config.method) === 'jsonp', - url = config.url; - - if (isJsonp) { - // JSONP is a pretty sensitive operation where we're allowing a script to have full access to - // our DOM and JS space. So we require that the URL satisfies SCE.RESOURCE_URL. - url = $sce.getTrustedResourceUrl(url); - } else if (!isString(url)) { - // If it is not a string then the URL must be a $sce trusted object - url = $sce.valueOf(url); - } - - url = buildUrl(url, config.paramSerializer(config.params)); - - if (isJsonp) { - // Check the url and add the JSONP callback placeholder - url = sanitizeJsonpCallbackParam(url, config.jsonpCallbackParam); - } - - $http.pendingRequests.push(config); - promise.then(removePendingReq, removePendingReq); - - if ((config.cache || defaults.cache) && config.cache !== false && - (config.method === 'GET' || config.method === 'JSONP')) { - cache = isObject(config.cache) ? config.cache - : isObject(/** @type {?} */ (defaults).cache) - ? /** @type {?} */ (defaults).cache - : defaultCache; - } - - if (cache) { - cachedResp = cache.get(url); - if (isDefined(cachedResp)) { - if (isPromiseLike(cachedResp)) { - // cached request has already been sent, but there is no response yet - cachedResp.then(resolvePromiseWithResult, resolvePromiseWithResult); - } else { - // serving from cache - if (isArray(cachedResp)) { - resolvePromise(cachedResp[1], cachedResp[0], shallowCopy(cachedResp[2]), cachedResp[3], cachedResp[4]); - } else { - resolvePromise(cachedResp, 200, {}, 'OK', 'complete'); - } - } - } else { - // put the promise for the non-transformed response into cache as a placeholder - cache.put(url, promise); - } - } - - - // if we won't have the response in cache, set the xsrf headers and - // send the request to the backend - if (isUndefined(cachedResp)) { - var xsrfValue = urlIsAllowedOrigin(config.url) - ? $$cookieReader()[config.xsrfCookieName || defaults.xsrfCookieName] - : undefined; - if (xsrfValue) { - reqHeaders[(config.xsrfHeaderName || defaults.xsrfHeaderName)] = xsrfValue; - } - - $httpBackend(config.method, url, reqData, done, reqHeaders, config.timeout, - config.withCredentials, config.responseType, - createApplyHandlers(config.eventHandlers), - createApplyHandlers(config.uploadEventHandlers)); - } - - return promise; - - function createApplyHandlers(eventHandlers) { - if (eventHandlers) { - var applyHandlers = {}; - forEach(eventHandlers, function(eventHandler, key) { - applyHandlers[key] = function(event) { - if (useApplyAsync) { - $rootScope.$applyAsync(callEventHandler); - } else if ($rootScope.$$phase) { - callEventHandler(); - } else { - $rootScope.$apply(callEventHandler); - } - - function callEventHandler() { - eventHandler(event); - } - }; - }); - return applyHandlers; - } - } - - - /** - * Callback registered to $httpBackend(): - * - caches the response if desired - * - resolves the raw $http promise - * - calls $apply - */ - function done(status, response, headersString, statusText, xhrStatus) { - if (cache) { - if (isSuccess(status)) { - cache.put(url, [status, response, parseHeaders(headersString), statusText, xhrStatus]); - } else { - // remove promise from the cache - cache.remove(url); - } - } - - function resolveHttpPromise() { - resolvePromise(response, status, headersString, statusText, xhrStatus); - } - - if (useApplyAsync) { - $rootScope.$applyAsync(resolveHttpPromise); - } else { - resolveHttpPromise(); - if (!$rootScope.$$phase) $rootScope.$apply(); - } - } - - - /** - * Resolves the raw $http promise. - */ - function resolvePromise(response, status, headers, statusText, xhrStatus) { - //status: HTTP response status code, 0, -1 (aborted by timeout / promise) - status = status >= -1 ? status : 0; - - (isSuccess(status) ? deferred.resolve : deferred.reject)({ - data: response, - status: status, - headers: headersGetter(headers), - config: config, - statusText: statusText, - xhrStatus: xhrStatus - }); - } - - function resolvePromiseWithResult(result) { - resolvePromise(result.data, result.status, shallowCopy(result.headers()), result.statusText, result.xhrStatus); - } - - function removePendingReq() { - var idx = $http.pendingRequests.indexOf(config); - if (idx !== -1) $http.pendingRequests.splice(idx, 1); - } - } - - - function buildUrl(url, serializedParams) { - if (serializedParams.length > 0) { - url += ((url.indexOf('?') === -1) ? '?' : '&') + serializedParams; - } - return url; - } - - function sanitizeJsonpCallbackParam(url, cbKey) { - var parts = url.split('?'); - if (parts.length > 2) { - // Throw if the url contains more than one `?` query indicator - throw $httpMinErr('badjsonp', 'Illegal use more than one "?", in url, "{1}"', url); - } - var params = parseKeyValue(parts[1]); - forEach(params, function(value, key) { - if (value === 'JSON_CALLBACK') { - // Throw if the url already contains a reference to JSON_CALLBACK - throw $httpMinErr('badjsonp', 'Illegal use of JSON_CALLBACK in url, "{0}"', url); - } - if (key === cbKey) { - // Throw if the callback param was already provided - throw $httpMinErr('badjsonp', 'Illegal use of callback param, "{0}", in url, "{1}"', cbKey, url); - } - }); - - // Add in the JSON_CALLBACK callback param value - url += ((url.indexOf('?') === -1) ? '?' : '&') + cbKey + '=JSON_CALLBACK'; - - return url; - } - }]; -} - -/** - * @ngdoc service - * @name $xhrFactory - * @this - * - * @description - * Factory function used to create XMLHttpRequest objects. - * - * Replace or decorate this service to create your own custom XMLHttpRequest objects. - * - * ``` - * angular.module('myApp', []) - * .factory('$xhrFactory', function() { - * return function createXhr(method, url) { - * return new window.XMLHttpRequest({mozSystem: true}); - * }; - * }); - * ``` - * - * @param {string} method HTTP method of the request (GET, POST, PUT, ..) - * @param {string} url URL of the request. - */ -function $xhrFactoryProvider() { - this.$get = function() { - return function createXhr() { - return new window.XMLHttpRequest(); - }; - }; -} - -/** - * @ngdoc service - * @name $httpBackend - * @requires $jsonpCallbacks - * @requires $document - * @requires $xhrFactory - * @this - * - * @description - * HTTP backend used by the {@link ng.$http service} that delegates to - * XMLHttpRequest object or JSONP and deals with browser incompatibilities. - * - * You should never need to use this service directly, instead use the higher-level abstractions: - * {@link ng.$http $http} or {@link ngResource.$resource $resource}. - * - * During testing this implementation is swapped with {@link ngMock.$httpBackend mock - * $httpBackend} which can be trained with responses. - */ -function $HttpBackendProvider() { - this.$get = ['$browser', '$jsonpCallbacks', '$document', '$xhrFactory', function($browser, $jsonpCallbacks, $document, $xhrFactory) { - return createHttpBackend($browser, $xhrFactory, $browser.defer, $jsonpCallbacks, $document[0]); - }]; -} - -function createHttpBackend($browser, createXhr, $browserDefer, callbacks, rawDocument) { - // TODO(vojta): fix the signature - return function(method, url, post, callback, headers, timeout, withCredentials, responseType, eventHandlers, uploadEventHandlers) { - url = url || $browser.url(); - - if (lowercase(method) === 'jsonp') { - var callbackPath = callbacks.createCallback(url); - var jsonpDone = jsonpReq(url, callbackPath, function(status, text) { - // jsonpReq only ever sets status to 200 (OK), 404 (ERROR) or -1 (WAITING) - var response = (status === 200) && callbacks.getResponse(callbackPath); - completeRequest(callback, status, response, '', text, 'complete'); - callbacks.removeCallback(callbackPath); - }); - } else { - - var xhr = createXhr(method, url); - var abortedByTimeout = false; - - xhr.open(method, url, true); - forEach(headers, function(value, key) { - if (isDefined(value)) { - xhr.setRequestHeader(key, value); - } - }); - - xhr.onload = function requestLoaded() { - var statusText = xhr.statusText || ''; - - // responseText is the old-school way of retrieving response (supported by IE9) - // response/responseType properties were introduced in XHR Level2 spec (supported by IE10) - var response = ('response' in xhr) ? xhr.response : xhr.responseText; - - // normalize IE9 bug (http://bugs.jquery.com/ticket/1450) - var status = xhr.status === 1223 ? 204 : xhr.status; - - // fix status code when it is 0 (0 status is undocumented). - // Occurs when accessing file resources or on Android 4.1 stock browser - // while retrieving files from application cache. - if (status === 0) { - status = response ? 200 : urlResolve(url).protocol === 'file' ? 404 : 0; - } - - completeRequest(callback, - status, - response, - xhr.getAllResponseHeaders(), - statusText, - 'complete'); - }; - - var requestError = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, '', 'error'); - }; - - var requestAborted = function() { - completeRequest(callback, -1, null, null, '', abortedByTimeout ? 'timeout' : 'abort'); - }; - - var requestTimeout = function() { - // The response is always empty - // See https://xhr.spec.whatwg.org/#request-error-steps and https://fetch.spec.whatwg.org/#concept-network-error - completeRequest(callback, -1, null, null, '', 'timeout'); - }; - - xhr.onerror = requestError; - xhr.ontimeout = requestTimeout; - xhr.onabort = requestAborted; - - forEach(eventHandlers, function(value, key) { - xhr.addEventListener(key, value); - }); - - forEach(uploadEventHandlers, function(value, key) { - xhr.upload.addEventListener(key, value); - }); - - if (withCredentials) { - xhr.withCredentials = true; - } - - if (responseType) { - try { - xhr.responseType = responseType; - } catch (e) { - // WebKit added support for the json responseType value on 09/03/2013 - // https://bugs.webkit.org/show_bug.cgi?id=73648. Versions of Safari prior to 7 are - // known to throw when setting the value "json" as the response type. Other older - // browsers implementing the responseType - // - // The json response type can be ignored if not supported, because JSON payloads are - // parsed on the client-side regardless. - if (responseType !== 'json') { - throw e; - } - } - } - - xhr.send(isUndefined(post) ? null : post); - } - - // Since we are using xhr.abort() when a request times out, we have to set a flag that - // indicates to requestAborted if the request timed out or was aborted. - // - // http.timeout = numerical timeout timeout - // http.timeout = $timeout timeout - // http.timeout = promise abort - // xhr.abort() abort (The xhr object is normally inaccessible, but - // can be exposed with the xhrFactory) - if (timeout > 0) { - var timeoutId = $browserDefer(function() { - timeoutRequest('timeout'); - }, timeout); - } else if (isPromiseLike(timeout)) { - timeout.then(function() { - timeoutRequest(isDefined(timeout.$$timeoutId) ? 'timeout' : 'abort'); - }); - } - - function timeoutRequest(reason) { - abortedByTimeout = reason === 'timeout'; - if (jsonpDone) { - jsonpDone(); - } - if (xhr) { - xhr.abort(); - } - } - - function completeRequest(callback, status, response, headersString, statusText, xhrStatus) { - // cancel timeout and subsequent timeout promise resolution - if (isDefined(timeoutId)) { - $browserDefer.cancel(timeoutId); - } - jsonpDone = xhr = null; - - callback(status, response, headersString, statusText, xhrStatus); - } - }; - - function jsonpReq(url, callbackPath, done) { - url = url.replace('JSON_CALLBACK', callbackPath); - // we can't use jQuery/jqLite here because jQuery does crazy stuff with script elements, e.g.: - // - fetches local scripts via XHR and evals them - // - adds and immediately removes script elements from the document - var script = rawDocument.createElement('script'), callback = null; - script.type = 'text/javascript'; - script.src = url; - script.async = true; - - callback = function(event) { - script.removeEventListener('load', callback); - script.removeEventListener('error', callback); - rawDocument.body.removeChild(script); - script = null; - var status = -1; - var text = 'unknown'; - - if (event) { - if (event.type === 'load' && !callbacks.wasCalled(callbackPath)) { - event = { type: 'error' }; - } - text = event.type; - status = event.type === 'error' ? 404 : 200; - } - - if (done) { - done(status, text); - } - }; - - script.addEventListener('load', callback); - script.addEventListener('error', callback); - rawDocument.body.appendChild(script); - return callback; - } -} - -var $interpolateMinErr = angular.$interpolateMinErr = minErr('$interpolate'); -$interpolateMinErr.throwNoconcat = function(text) { - throw $interpolateMinErr('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', text); -}; - -$interpolateMinErr.interr = function(text, err) { - return $interpolateMinErr('interr', 'Can\'t interpolate: {0}\n{1}', text, err.toString()); -}; - -/** - * @ngdoc provider - * @name $interpolateProvider - * @this - * - * @description - * - * Used for configuring the interpolation markup. Defaults to `{{` and `}}`. - * - *
      - * This feature is sometimes used to mix different markup languages, e.g. to wrap an AngularJS - * template within a Python Jinja template (or any other template language). Mixing templating - * languages is **very dangerous**. The embedding template language will not safely escape AngularJS - * expressions, so any user-controlled values in the template will cause Cross Site Scripting (XSS) - * security bugs! - *
      - * - * @example - - - -
      - //demo.label// -
      -
      - - it('should interpolate binding with custom symbols', function() { - expect(element(by.binding('demo.label')).getText()).toBe('This binding is brought you by // interpolation symbols.'); - }); - -
      - */ -function $InterpolateProvider() { - var startSymbol = '{{'; - var endSymbol = '}}'; - - /** - * @ngdoc method - * @name $interpolateProvider#startSymbol - * @description - * Symbol to denote start of expression in the interpolated string. Defaults to `{{`. - * - * @param {string=} value new value to set the starting symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.startSymbol = function(value) { - if (value) { - startSymbol = value; - return this; - } - return startSymbol; - }; - - /** - * @ngdoc method - * @name $interpolateProvider#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * @param {string=} value new value to set the ending symbol to. - * @returns {string|self} Returns the symbol when used as getter and self if used as setter. - */ - this.endSymbol = function(value) { - if (value) { - endSymbol = value; - return this; - } - return endSymbol; - }; - - - this.$get = ['$parse', '$exceptionHandler', '$sce', function($parse, $exceptionHandler, $sce) { - var startSymbolLength = startSymbol.length, - endSymbolLength = endSymbol.length, - escapedStartRegexp = new RegExp(startSymbol.replace(/./g, escape), 'g'), - escapedEndRegexp = new RegExp(endSymbol.replace(/./g, escape), 'g'); - - function escape(ch) { - return '\\\\\\' + ch; - } - - function unescapeText(text) { - return text.replace(escapedStartRegexp, startSymbol). - replace(escapedEndRegexp, endSymbol); - } - - // TODO: this is the same as the constantWatchDelegate in parse.js - function constantWatchDelegate(scope, listener, objectEquality, constantInterp) { - var unwatch = scope.$watch(function constantInterpolateWatch(scope) { - unwatch(); - return constantInterp(scope); - }, listener, objectEquality); - return unwatch; - } - - /** - * @ngdoc service - * @name $interpolate - * @kind function - * - * @requires $parse - * @requires $sce - * - * @description - * - * Compiles a string with markup into an interpolation function. This service is used by the - * HTML {@link ng.$compile $compile} service for data binding. See - * {@link ng.$interpolateProvider $interpolateProvider} for configuring the - * interpolation markup. - * - * - * ```js - * var $interpolate = ...; // injected - * var exp = $interpolate('Hello {{name | uppercase}}!'); - * expect(exp({name:'AngularJS'})).toEqual('Hello ANGULARJS!'); - * ``` - * - * `$interpolate` takes an optional fourth argument, `allOrNothing`. If `allOrNothing` is - * `true`, the interpolation function will return `undefined` unless all embedded expressions - * evaluate to a value other than `undefined`. - * - * ```js - * var $interpolate = ...; // injected - * var context = {greeting: 'Hello', name: undefined }; - * - * // default "forgiving" mode - * var exp = $interpolate('{{greeting}} {{name}}!'); - * expect(exp(context)).toEqual('Hello !'); - * - * // "allOrNothing" mode - * exp = $interpolate('{{greeting}} {{name}}!', false, null, true); - * expect(exp(context)).toBeUndefined(); - * context.name = 'AngularJS'; - * expect(exp(context)).toEqual('Hello AngularJS!'); - * ``` - * - * `allOrNothing` is useful for interpolating URLs. `ngSrc` and `ngSrcset` use this behavior. - * - * #### Escaped Interpolation - * $interpolate provides a mechanism for escaping interpolation markers. Start and end markers - * can be escaped by preceding each of their characters with a REVERSE SOLIDUS U+005C (backslash). - * It will be rendered as a regular start/end marker, and will not be interpreted as an expression - * or binding. - * - * This enables web-servers to prevent script injection attacks and defacing attacks, to some - * degree, while also enabling code examples to work without relying on the - * {@link ng.directive:ngNonBindable ngNonBindable} directive. - * - * **For security purposes, it is strongly encouraged that web servers escape user-supplied data, - * replacing angle brackets (<, >) with &lt; and &gt; respectively, and replacing all - * interpolation start/end markers with their escaped counterparts.** - * - * Escaped interpolation markers are only replaced with the actual interpolation markers in rendered - * output when the $interpolate service processes the text. So, for HTML elements interpolated - * by {@link ng.$compile $compile}, or otherwise interpolated with the `mustHaveExpression` parameter - * set to `true`, the interpolated text must contain an unescaped interpolation expression. As such, - * this is typically useful only when user-data is used in rendering a template from the server, or - * when otherwise untrusted data is used by a directive. - * - * - * - *
      - *

      {{apptitle}}: \{\{ username = "defaced value"; \}\} - *

      - *

      {{username}} attempts to inject code which will deface the - * application, but fails to accomplish their task, because the server has correctly - * escaped the interpolation start/end markers with REVERSE SOLIDUS U+005C (backslash) - * characters.

      - *

      Instead, the result of the attempted script injection is visible, and can be removed - * from the database by an administrator.

      - *
      - *
      - *
      - * - * @knownIssue - * It is currently not possible for an interpolated expression to contain the interpolation end - * symbol. For example, `{{ '}}' }}` will be incorrectly interpreted as `{{ ' }}` + `' }}`, i.e. - * an interpolated expression consisting of a single-quote (`'`) and the `' }}` string. - * - * @knownIssue - * All directives and components must use the standard `{{` `}}` interpolation symbols - * in their templates. If you change the application interpolation symbols the {@link $compile} - * service will attempt to denormalize the standard symbols to the custom symbols. - * The denormalization process is not clever enough to know not to replace instances of the standard - * symbols where they would not normally be treated as interpolation symbols. For example in the following - * code snippet the closing braces of the literal object will get incorrectly denormalized: - * - * ``` - *
      - * ``` - * - * See https://github.com/angular/angular.js/pull/14610#issuecomment-219401099 for more information. - * - * @param {string} text The text with markup to interpolate. - * @param {boolean=} mustHaveExpression if set to true then the interpolation string must have - * embedded expression in order to return an interpolation function. Strings with no - * embedded expression will return null for the interpolation function. - * @param {string=} trustedContext when provided, the returned function passes the interpolated - * result through {@link ng.$sce#getTrusted $sce.getTrusted(interpolatedResult, - * trustedContext)} before returning it. Refer to the {@link ng.$sce $sce} service that - * provides Strict Contextual Escaping for details. - * @param {boolean=} allOrNothing if `true`, then the returned function returns undefined - * unless all embedded expressions evaluate to a value other than `undefined`. - * @returns {function(context)} an interpolation function which is used to compute the - * interpolated string. The function has these parameters: - * - * - `context`: evaluation context for all expressions embedded in the interpolated text - */ - function $interpolate(text, mustHaveExpression, trustedContext, allOrNothing) { - var contextAllowsConcatenation = trustedContext === $sce.URL || trustedContext === $sce.MEDIA_URL; - - // Provide a quick exit and simplified result function for text with no interpolation - if (!text.length || text.indexOf(startSymbol) === -1) { - if (mustHaveExpression) return; - - var unescapedText = unescapeText(text); - if (contextAllowsConcatenation) { - unescapedText = $sce.getTrusted(trustedContext, unescapedText); - } - var constantInterp = valueFn(unescapedText); - constantInterp.exp = text; - constantInterp.expressions = []; - constantInterp.$$watchDelegate = constantWatchDelegate; - - return constantInterp; - } - - allOrNothing = !!allOrNothing; - var startIndex, - endIndex, - index = 0, - expressions = [], - parseFns, - textLength = text.length, - exp, - concat = [], - expressionPositions = [], - singleExpression; - - - while (index < textLength) { - if (((startIndex = text.indexOf(startSymbol, index)) !== -1) && - ((endIndex = text.indexOf(endSymbol, startIndex + startSymbolLength)) !== -1)) { - if (index !== startIndex) { - concat.push(unescapeText(text.substring(index, startIndex))); - } - exp = text.substring(startIndex + startSymbolLength, endIndex); - expressions.push(exp); - index = endIndex + endSymbolLength; - expressionPositions.push(concat.length); - concat.push(''); // Placeholder that will get replaced with the evaluated expression. - } else { - // we did not find an interpolation, so we have to add the remainder to the separators array - if (index !== textLength) { - concat.push(unescapeText(text.substring(index))); - } - break; - } - } - - singleExpression = concat.length === 1 && expressionPositions.length === 1; - // Intercept expression if we need to stringify concatenated inputs, which may be SCE trusted - // objects rather than simple strings - // (we don't modify the expression if the input consists of only a single trusted input) - var interceptor = contextAllowsConcatenation && singleExpression ? undefined : parseStringifyInterceptor; - parseFns = expressions.map(function(exp) { return $parse(exp, interceptor); }); - - // Concatenating expressions makes it hard to reason about whether some combination of - // concatenated values are unsafe to use and could easily lead to XSS. By requiring that a - // single expression be used for some $sce-managed secure contexts (RESOURCE_URLs mostly), - // we ensure that the value that's used is assigned or constructed by some JS code somewhere - // that is more testable or make it obvious that you bound the value to some user controlled - // value. This helps reduce the load when auditing for XSS issues. - - // Note that URL and MEDIA_URL $sce contexts do not need this, since `$sce` can sanitize the values - // passed to it. In that case, `$sce.getTrusted` will be called on either the single expression - // or on the overall concatenated string (losing trusted types used in the mix, by design). - // Both these methods will sanitize plain strings. Also, HTML could be included, but since it's - // only used in srcdoc attributes, this would not be very useful. - - if (!mustHaveExpression || expressions.length) { - var compute = function(values) { - for (var i = 0, ii = expressions.length; i < ii; i++) { - if (allOrNothing && isUndefined(values[i])) return; - concat[expressionPositions[i]] = values[i]; - } - - if (contextAllowsConcatenation) { - // If `singleExpression` then `concat[0]` might be a "trusted" value or `null`, rather than a string - return $sce.getTrusted(trustedContext, singleExpression ? concat[0] : concat.join('')); - } else if (trustedContext && concat.length > 1) { - // This context does not allow more than one part, e.g. expr + string or exp + exp. - $interpolateMinErr.throwNoconcat(text); - } - // In an unprivileged context or only one part: just concatenate and return. - return concat.join(''); - }; - - return extend(function interpolationFn(context) { - var i = 0; - var ii = expressions.length; - var values = new Array(ii); - - try { - for (; i < ii; i++) { - values[i] = parseFns[i](context); - } - - return compute(values); - } catch (err) { - $exceptionHandler($interpolateMinErr.interr(text, err)); - } - - }, { - // all of these properties are undocumented for now - exp: text, //just for compatibility with regular watchers created via $watch - expressions: expressions, - $$watchDelegate: function(scope, listener) { - var lastValue; - return scope.$watchGroup(parseFns, /** @this */ function interpolateFnWatcher(values, oldValues) { - var currValue = compute(values); - listener.call(this, currValue, values !== oldValues ? lastValue : currValue, scope); - lastValue = currValue; - }); - } - }); - } - - function parseStringifyInterceptor(value) { - try { - // In concatenable contexts, getTrusted comes at the end, to avoid sanitizing individual - // parts of a full URL. We don't care about losing the trustedness here. - // In non-concatenable contexts, where there is only one expression, this interceptor is - // not applied to the expression. - value = (trustedContext && !contextAllowsConcatenation) ? - $sce.getTrusted(trustedContext, value) : - $sce.valueOf(value); - return allOrNothing && !isDefined(value) ? value : stringify(value); - } catch (err) { - $exceptionHandler($interpolateMinErr.interr(text, err)); - } - } - } - - - /** - * @ngdoc method - * @name $interpolate#startSymbol - * @description - * Symbol to denote the start of expression in the interpolated string. Defaults to `{{`. - * - * Use {@link ng.$interpolateProvider#startSymbol `$interpolateProvider.startSymbol`} to change - * the symbol. - * - * @returns {string} start symbol. - */ - $interpolate.startSymbol = function() { - return startSymbol; - }; - - - /** - * @ngdoc method - * @name $interpolate#endSymbol - * @description - * Symbol to denote the end of expression in the interpolated string. Defaults to `}}`. - * - * Use {@link ng.$interpolateProvider#endSymbol `$interpolateProvider.endSymbol`} to change - * the symbol. - * - * @returns {string} end symbol. - */ - $interpolate.endSymbol = function() { - return endSymbol; - }; - - return $interpolate; - }]; -} - -var $intervalMinErr = minErr('$interval'); - -/** @this */ -function $IntervalProvider() { - this.$get = ['$$intervalFactory', '$window', - function($$intervalFactory, $window) { - var intervals = {}; - var setIntervalFn = function(tick, delay, deferred) { - var id = $window.setInterval(tick, delay); - intervals[id] = deferred; - return id; - }; - var clearIntervalFn = function(id) { - $window.clearInterval(id); - delete intervals[id]; - }; - - /** - * @ngdoc service - * @name $interval - * - * @description - * AngularJS's wrapper for `window.setInterval`. The `fn` function is executed every `delay` - * milliseconds. - * - * The return value of registering an interval function is a promise. This promise will be - * notified upon each tick of the interval, and will be resolved after `count` iterations, or - * run indefinitely if `count` is not defined. The value of the notification will be the - * number of iterations that have run. - * To cancel an interval, call `$interval.cancel(promise)`. - * - * In tests you can use {@link ngMock.$interval#flush `$interval.flush(millis)`} to - * move forward by `millis` milliseconds and trigger any functions scheduled to run in that - * time. - * - *
      - * **Note**: Intervals created by this service must be explicitly destroyed when you are finished - * with them. In particular they are not automatically destroyed when a controller's scope or a - * directive's element are destroyed. - * You should take this into consideration and make sure to always cancel the interval at the - * appropriate moment. See the example below for more details on how and when to do this. - *
      - * - * @param {function()} fn A function that should be called repeatedly. If no additional arguments - * are passed (see below), the function is called with the current iteration count. - * @param {number} delay Number of milliseconds between each function call. - * @param {number=} [count=0] Number of times to repeat. If not set, or 0, will repeat - * indefinitely. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @param {...*=} Pass additional parameters to the executed function. - * @returns {promise} A promise which will be notified on each iteration. It will resolve once all iterations of the interval complete. - * - * @example - * - * - * - * - *
      - *
      - *
      - * Current time is: - *
      - * Blood 1 : {{blood_1}} - * Blood 2 : {{blood_2}} - * - * - * - *
      - *
      - * - *
      - *
      - */ - var interval = $$intervalFactory(setIntervalFn, clearIntervalFn); - - /** - * @ngdoc method - * @name $interval#cancel - * - * @description - * Cancels a task associated with the `promise`. - * - * @param {Promise=} promise returned by the `$interval` function. - * @returns {boolean} Returns `true` if the task was successfully canceled. - */ - interval.cancel = function(promise) { - if (!promise) return false; - - if (!promise.hasOwnProperty('$$intervalId')) { - throw $intervalMinErr('badprom', - '`$interval.cancel()` called with a promise that was not generated by `$interval()`.'); - } - - if (!intervals.hasOwnProperty(promise.$$intervalId)) return false; - - var id = promise.$$intervalId; - var deferred = intervals[id]; - - // Interval cancels should not report an unhandled promise. - markQExceptionHandled(deferred.promise); - deferred.reject('canceled'); - clearIntervalFn(id); - - return true; - }; - - return interval; - }]; -} - -/** @this */ -function $$IntervalFactoryProvider() { - this.$get = ['$browser', '$q', '$$q', '$rootScope', - function($browser, $q, $$q, $rootScope) { - return function intervalFactory(setIntervalFn, clearIntervalFn) { - return function intervalFn(fn, delay, count, invokeApply) { - var hasParams = arguments.length > 4, - args = hasParams ? sliceArgs(arguments, 4) : [], - iteration = 0, - skipApply = isDefined(invokeApply) && !invokeApply, - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise; - - count = isDefined(count) ? count : 0; - - function callback() { - if (!hasParams) { - fn(iteration); - } else { - fn.apply(null, args); - } - } - - function tick() { - if (skipApply) { - $browser.defer(callback); - } else { - $rootScope.$evalAsync(callback); - } - deferred.notify(iteration++); - - if (count > 0 && iteration >= count) { - deferred.resolve(iteration); - clearIntervalFn(promise.$$intervalId); - } - - if (!skipApply) $rootScope.$apply(); - } - - promise.$$intervalId = setIntervalFn(tick, delay, deferred, skipApply); - - return promise; - }; - }; - }]; -} - -/** - * @ngdoc service - * @name $jsonpCallbacks - * @requires $window - * @description - * This service handles the lifecycle of callbacks to handle JSONP requests. - * Override this service if you wish to customise where the callbacks are stored and - * how they vary compared to the requested url. - */ -var $jsonpCallbacksProvider = /** @this */ function() { - this.$get = function() { - var callbacks = angular.callbacks; - var callbackMap = {}; - - function createCallback(callbackId) { - var callback = function(data) { - callback.data = data; - callback.called = true; - }; - callback.id = callbackId; - return callback; - } - - return { - /** - * @ngdoc method - * @name $jsonpCallbacks#createCallback - * @param {string} url the url of the JSONP request - * @returns {string} the callback path to send to the server as part of the JSONP request - * @description - * {@link $httpBackend} calls this method to create a callback and get hold of the path to the callback - * to pass to the server, which will be used to call the callback with its payload in the JSONP response. - */ - createCallback: function(url) { - var callbackId = '_' + (callbacks.$$counter++).toString(36); - var callbackPath = 'angular.callbacks.' + callbackId; - var callback = createCallback(callbackId); - callbackMap[callbackPath] = callbacks[callbackId] = callback; - return callbackPath; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#wasCalled - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @returns {boolean} whether the callback has been called, as a result of the JSONP response - * @description - * {@link $httpBackend} calls this method to find out whether the JSONP response actually called the - * callback that was passed in the request. - */ - wasCalled: function(callbackPath) { - return callbackMap[callbackPath].called; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#getResponse - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @returns {*} the data received from the response via the registered callback - * @description - * {@link $httpBackend} calls this method to get hold of the data that was provided to the callback - * in the JSONP response. - */ - getResponse: function(callbackPath) { - return callbackMap[callbackPath].data; - }, - /** - * @ngdoc method - * @name $jsonpCallbacks#removeCallback - * @param {string} callbackPath the path to the callback that was sent in the JSONP request - * @description - * {@link $httpBackend} calls this method to remove the callback after the JSONP request has - * completed or timed-out. - */ - removeCallback: function(callbackPath) { - var callback = callbackMap[callbackPath]; - delete callbacks[callback.id]; - delete callbackMap[callbackPath]; - } - }; - }; -}; - -/** - * @ngdoc service - * @name $locale - * - * @description - * $locale service provides localization rules for various AngularJS components. As of right now the - * only public api is: - * - * * `id` – `{string}` – locale id formatted as `languageId-countryId` (e.g. `en-us`) - */ - -/* global stripHash: true */ - -var PATH_MATCH = /^([^?#]*)(\?([^#]*))?(#(.*))?$/, - DEFAULT_PORTS = {'http': 80, 'https': 443, 'ftp': 21}; -var $locationMinErr = minErr('$location'); - - -/** - * Encode path using encodeUriSegment, ignoring forward slashes - * - * @param {string} path Path to encode - * @returns {string} - */ -function encodePath(path) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - // decode forward slashes to prevent them from being double encoded - segments[i] = encodeUriSegment(segments[i].replace(/%2F/g, '/')); - } - - return segments.join('/'); -} - -function decodePath(path, html5Mode) { - var segments = path.split('/'), - i = segments.length; - - while (i--) { - segments[i] = decodeURIComponent(segments[i]); - if (html5Mode) { - // encode forward slashes to prevent them from being mistaken for path separators - segments[i] = segments[i].replace(/\//g, '%2F'); - } - } - - return segments.join('/'); -} - -function normalizePath(pathValue, searchValue, hashValue) { - var search = toKeyValue(searchValue), - hash = hashValue ? '#' + encodeUriSegment(hashValue) : '', - path = encodePath(pathValue); - - return path + (search ? '?' + search : '') + hash; -} - -function parseAbsoluteUrl(absoluteUrl, locationObj) { - var parsedUrl = urlResolve(absoluteUrl); - - locationObj.$$protocol = parsedUrl.protocol; - locationObj.$$host = parsedUrl.hostname; - locationObj.$$port = toInt(parsedUrl.port) || DEFAULT_PORTS[parsedUrl.protocol] || null; -} - -var DOUBLE_SLASH_REGEX = /^\s*[\\/]{2,}/; -function parseAppUrl(url, locationObj, html5Mode) { - - if (DOUBLE_SLASH_REGEX.test(url)) { - throw $locationMinErr('badpath', 'Invalid url "{0}".', url); - } - - var prefixed = (url.charAt(0) !== '/'); - if (prefixed) { - url = '/' + url; - } - var match = urlResolve(url); - var path = prefixed && match.pathname.charAt(0) === '/' ? match.pathname.substring(1) : match.pathname; - locationObj.$$path = decodePath(path, html5Mode); - locationObj.$$search = parseKeyValue(match.search); - locationObj.$$hash = decodeURIComponent(match.hash); - - // make sure path starts with '/'; - if (locationObj.$$path && locationObj.$$path.charAt(0) !== '/') { - locationObj.$$path = '/' + locationObj.$$path; - } -} - -function startsWith(str, search) { - return str.slice(0, search.length) === search; -} - -/** - * - * @param {string} base - * @param {string} url - * @returns {string} returns text from `url` after `base` or `undefined` if it does not begin with - * the expected string. - */ -function stripBaseUrl(base, url) { - if (startsWith(url, base)) { - return url.substr(base.length); - } -} - -function stripHash(url) { - var index = url.indexOf('#'); - return index === -1 ? url : url.substr(0, index); -} - -function stripFile(url) { - return url.substr(0, stripHash(url).lastIndexOf('/') + 1); -} - -/* return the server only (scheme://host:port) */ -function serverBase(url) { - return url.substring(0, url.indexOf('/', url.indexOf('//') + 2)); -} - - -/** - * LocationHtml5Url represents a URL - * This object is exposed as $location service when HTML5 mode is enabled and supported - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} basePrefix URL path prefix - */ -function LocationHtml5Url(appBase, appBaseNoFile, basePrefix) { - this.$$html5 = true; - basePrefix = basePrefix || ''; - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given HTML5 (regular) URL string into properties - * @param {string} url HTML5 URL - * @private - */ - this.$$parse = function(url) { - var pathUrl = stripBaseUrl(appBaseNoFile, url); - if (!isString(pathUrl)) { - throw $locationMinErr('ipthprfx', 'Invalid url "{0}", missing path prefix "{1}".', url, - appBaseNoFile); - } - - parseAppUrl(pathUrl, this, true); - - if (!this.$$path) { - this.$$path = '/'; - } - - this.$$compose(); - }; - - this.$$normalizeUrl = function(url) { - return appBaseNoFile + url.substr(1); // first char is always '/' - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - var appUrl, prevAppUrl; - var rewrittenUrl; - - - if (isDefined(appUrl = stripBaseUrl(appBase, url))) { - prevAppUrl = appUrl; - if (basePrefix && isDefined(appUrl = stripBaseUrl(basePrefix, appUrl))) { - rewrittenUrl = appBaseNoFile + (stripBaseUrl('/', appUrl) || appUrl); - } else { - rewrittenUrl = appBase + prevAppUrl; - } - } else if (isDefined(appUrl = stripBaseUrl(appBaseNoFile, url))) { - rewrittenUrl = appBaseNoFile + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; -} - - -/** - * LocationHashbangUrl represents URL - * This object is exposed as $location service when developer doesn't opt into html5 mode. - * It also serves as the base class for html5 mode fallback on legacy browsers. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangUrl(appBase, appBaseNoFile, hashPrefix) { - - parseAbsoluteUrl(appBase, this); - - - /** - * Parse given hashbang URL into properties - * @param {string} url Hashbang URL - * @private - */ - this.$$parse = function(url) { - var withoutBaseUrl = stripBaseUrl(appBase, url) || stripBaseUrl(appBaseNoFile, url); - var withoutHashUrl; - - if (!isUndefined(withoutBaseUrl) && withoutBaseUrl.charAt(0) === '#') { - - // The rest of the URL starts with a hash so we have - // got either a hashbang path or a plain hash fragment - withoutHashUrl = stripBaseUrl(hashPrefix, withoutBaseUrl); - if (isUndefined(withoutHashUrl)) { - // There was no hashbang prefix so we just have a hash fragment - withoutHashUrl = withoutBaseUrl; - } - - } else { - // There was no hashbang path nor hash fragment: - // If we are in HTML5 mode we use what is left as the path; - // Otherwise we ignore what is left - if (this.$$html5) { - withoutHashUrl = withoutBaseUrl; - } else { - withoutHashUrl = ''; - if (isUndefined(withoutBaseUrl)) { - appBase = url; - /** @type {?} */ (this).replace(); - } - } - } - - parseAppUrl(withoutHashUrl, this, false); - - this.$$path = removeWindowsDriveName(this.$$path, withoutHashUrl, appBase); - - this.$$compose(); - - /* - * In Windows, on an anchor node on documents loaded from - * the filesystem, the browser will return a pathname - * prefixed with the drive name ('/C:/path') when a - * pathname without a drive is set: - * * a.setAttribute('href', '/foo') - * * a.pathname === '/C:/foo' //true - * - * Inside of AngularJS, we're always using pathnames that - * do not include drive names for routing. - */ - function removeWindowsDriveName(path, url, base) { - /* - Matches paths for file protocol on windows, - such as /C:/foo/bar, and captures only /foo/bar. - */ - var windowsFilePathExp = /^\/[A-Z]:(\/.*)/; - - var firstPathSegmentMatch; - - //Get the relative path from the input URL. - if (startsWith(url, base)) { - url = url.replace(base, ''); - } - - // The input URL intentionally contains a first path segment that ends with a colon. - if (windowsFilePathExp.exec(url)) { - return path; - } - - firstPathSegmentMatch = windowsFilePathExp.exec(path); - return firstPathSegmentMatch ? firstPathSegmentMatch[1] : path; - } - }; - - this.$$normalizeUrl = function(url) { - return appBase + (url ? hashPrefix + url : ''); - }; - - this.$$parseLinkUrl = function(url, relHref) { - if (stripHash(appBase) === stripHash(url)) { - this.$$parse(url); - return true; - } - return false; - }; -} - - -/** - * LocationHashbangUrl represents URL - * This object is exposed as $location service when html5 history api is enabled but the browser - * does not support it. - * - * @constructor - * @param {string} appBase application base URL - * @param {string} appBaseNoFile application base URL stripped of any filename - * @param {string} hashPrefix hashbang prefix - */ -function LocationHashbangInHtml5Url(appBase, appBaseNoFile, hashPrefix) { - this.$$html5 = true; - LocationHashbangUrl.apply(this, arguments); - - this.$$parseLinkUrl = function(url, relHref) { - if (relHref && relHref[0] === '#') { - // special case for links to hash fragments: - // keep the old url and only replace the hash fragment - this.hash(relHref.slice(1)); - return true; - } - - var rewrittenUrl; - var appUrl; - - if (appBase === stripHash(url)) { - rewrittenUrl = url; - } else if ((appUrl = stripBaseUrl(appBaseNoFile, url))) { - rewrittenUrl = appBase + hashPrefix + appUrl; - } else if (appBaseNoFile === url + '/') { - rewrittenUrl = appBaseNoFile; - } - if (rewrittenUrl) { - this.$$parse(rewrittenUrl); - } - return !!rewrittenUrl; - }; - - this.$$normalizeUrl = function(url) { - // include hashPrefix in $$absUrl when $$url is empty so IE9 does not reload page because of removal of '#' - return appBase + hashPrefix + url; - }; -} - - -var locationPrototype = { - - /** - * Ensure absolute URL is initialized. - * @private - */ - $$absUrl:'', - - /** - * Are we in html5 mode? - * @private - */ - $$html5: false, - - /** - * Has any change been replacing? - * @private - */ - $$replace: false, - - /** - * Compose url and update `url` and `absUrl` property - * @private - */ - $$compose: function() { - this.$$url = normalizePath(this.$$path, this.$$search, this.$$hash); - this.$$absUrl = this.$$normalizeUrl(this.$$url); - this.$$urlUpdatedByLocation = true; - }, - - /** - * @ngdoc method - * @name $location#absUrl - * - * @description - * This method is getter only. - * - * Return full URL representation with all segments encoded according to rules specified in - * [RFC 3986](http://www.ietf.org/rfc/rfc3986.txt). - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var absUrl = $location.absUrl(); - * // => "http://example.com/#/some/path?foo=bar&baz=xoxo" - * ``` - * - * @return {string} full URL - */ - absUrl: locationGetter('$$absUrl'), - - /** - * @ngdoc method - * @name $location#url - * - * @description - * This method is getter / setter. - * - * Return URL (e.g. `/path?a=b#hash`) when called without any parameter. - * - * Change path, search and hash, when called with parameter and return `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var url = $location.url(); - * // => "/some/path?foo=bar&baz=xoxo" - * ``` - * - * @param {string=} url New URL without base prefix (e.g. `/path?a=b#hash`) - * @return {string} url - */ - url: function(url) { - if (isUndefined(url)) { - return this.$$url; - } - - var match = PATH_MATCH.exec(url); - if (match[1] || url === '') this.path(decodeURIComponent(match[1])); - if (match[2] || match[1] || url === '') this.search(match[3] || ''); - this.hash(match[5] || ''); - - return this; - }, - - /** - * @ngdoc method - * @name $location#protocol - * - * @description - * This method is getter only. - * - * Return protocol of current URL. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var protocol = $location.protocol(); - * // => "http" - * ``` - * - * @return {string} protocol of current URL - */ - protocol: locationGetter('$$protocol'), - - /** - * @ngdoc method - * @name $location#host - * - * @description - * This method is getter only. - * - * Return host of current URL. - * - * Note: compared to the non-AngularJS version `location.host` which returns `hostname:port`, this returns the `hostname` portion only. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var host = $location.host(); - * // => "example.com" - * - * // given URL http://user:password@example.com:8080/#/some/path?foo=bar&baz=xoxo - * host = $location.host(); - * // => "example.com" - * host = location.host; - * // => "example.com:8080" - * ``` - * - * @return {string} host of current URL. - */ - host: locationGetter('$$host'), - - /** - * @ngdoc method - * @name $location#port - * - * @description - * This method is getter only. - * - * Return port of current URL. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var port = $location.port(); - * // => 80 - * ``` - * - * @return {Number} port - */ - port: locationGetter('$$port'), - - /** - * @ngdoc method - * @name $location#path - * - * @description - * This method is getter / setter. - * - * Return path of current URL when called without any parameter. - * - * Change path when called with parameter and return `$location`. - * - * Note: Path should always begin with forward slash (/), this method will add the forward slash - * if it is missing. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var path = $location.path(); - * // => "/some/path" - * ``` - * - * @param {(string|number)=} path New path - * @return {(string|object)} path if called with no parameters, or `$location` if called with a parameter - */ - path: locationGetterSetter('$$path', function(path) { - path = path !== null ? path.toString() : ''; - return path.charAt(0) === '/' ? path : '/' + path; - }), - - /** - * @ngdoc method - * @name $location#search - * - * @description - * This method is getter / setter. - * - * Return search part (as object) of current URL when called without any parameter. - * - * Change search part when called with parameter and return `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo - * var searchObject = $location.search(); - * // => {foo: 'bar', baz: 'xoxo'} - * - * // set foo to 'yipee' - * $location.search('foo', 'yipee'); - * // $location.search() => {foo: 'yipee', baz: 'xoxo'} - * ``` - * - * @param {string|Object.|Object.>} search New search params - string or - * hash object. - * - * When called with a single argument the method acts as a setter, setting the `search` component - * of `$location` to the specified value. - * - * If the argument is a hash object containing an array of values, these values will be encoded - * as duplicate search parameters in the URL. - * - * @param {(string|Number|Array|boolean)=} paramValue If `search` is a string or number, then `paramValue` - * will override only a single search property. - * - * If `paramValue` is an array, it will override the property of the `search` component of - * `$location` specified via the first argument. - * - * If `paramValue` is `null`, the property specified via the first argument will be deleted. - * - * If `paramValue` is `true`, the property specified via the first argument will be added with no - * value nor trailing equal sign. - * - * @return {Object} If called with no arguments returns the parsed `search` object. If called with - * one or more arguments returns `$location` object itself. - */ - search: function(search, paramValue) { - switch (arguments.length) { - case 0: - return this.$$search; - case 1: - if (isString(search) || isNumber(search)) { - search = search.toString(); - this.$$search = parseKeyValue(search); - } else if (isObject(search)) { - search = copy(search, {}); - // remove object undefined or null properties - forEach(search, function(value, key) { - if (value == null) delete search[key]; - }); - - this.$$search = search; - } else { - throw $locationMinErr('isrcharg', - 'The first argument of the `$location#search()` call must be a string or an object.'); - } - break; - default: - if (isUndefined(paramValue) || paramValue === null) { - delete this.$$search[search]; - } else { - this.$$search[search] = paramValue; - } - } - - this.$$compose(); - return this; - }, - - /** - * @ngdoc method - * @name $location#hash - * - * @description - * This method is getter / setter. - * - * Returns the hash fragment when called without any parameters. - * - * Changes the hash fragment when called with a parameter and returns `$location`. - * - * - * ```js - * // given URL http://example.com/#/some/path?foo=bar&baz=xoxo#hashValue - * var hash = $location.hash(); - * // => "hashValue" - * ``` - * - * @param {(string|number)=} hash New hash fragment - * @return {string} hash - */ - hash: locationGetterSetter('$$hash', function(hash) { - return hash !== null ? hash.toString() : ''; - }), - - /** - * @ngdoc method - * @name $location#replace - * - * @description - * If called, all changes to $location during the current `$digest` will replace the current history - * record, instead of adding a new one. - */ - replace: function() { - this.$$replace = true; - return this; - } -}; - -forEach([LocationHashbangInHtml5Url, LocationHashbangUrl, LocationHtml5Url], function(Location) { - Location.prototype = Object.create(locationPrototype); - - /** - * @ngdoc method - * @name $location#state - * - * @description - * This method is getter / setter. - * - * Return the history state object when called without any parameter. - * - * Change the history state object when called with one parameter and return `$location`. - * The state object is later passed to `pushState` or `replaceState`. - * - * NOTE: This method is supported only in HTML5 mode and only in browsers supporting - * the HTML5 History API (i.e. methods `pushState` and `replaceState`). If you need to support - * older browsers (like IE9 or Android < 4.0), don't use this method. - * - * @param {object=} state State object for pushState or replaceState - * @return {object} state - */ - Location.prototype.state = function(state) { - if (!arguments.length) { - return this.$$state; - } - - if (Location !== LocationHtml5Url || !this.$$html5) { - throw $locationMinErr('nostate', 'History API state support is available only ' + - 'in HTML5 mode and only in browsers supporting HTML5 History API'); - } - // The user might modify `stateObject` after invoking `$location.state(stateObject)` - // but we're changing the $$state reference to $browser.state() during the $digest - // so the modification window is narrow. - this.$$state = isUndefined(state) ? null : state; - this.$$urlUpdatedByLocation = true; - - return this; - }; -}); - - -function locationGetter(property) { - return /** @this */ function() { - return this[property]; - }; -} - - -function locationGetterSetter(property, preprocess) { - return /** @this */ function(value) { - if (isUndefined(value)) { - return this[property]; - } - - this[property] = preprocess(value); - this.$$compose(); - - return this; - }; -} - - -/** - * @ngdoc service - * @name $location - * - * @requires $rootElement - * - * @description - * The $location service parses the URL in the browser address bar (based on the - * [window.location](https://developer.mozilla.org/en/window.location)) and makes the URL - * available to your application. Changes to the URL in the address bar are reflected into - * $location service and changes to $location are reflected into the browser address bar. - * - * **The $location service:** - * - * - Exposes the current URL in the browser address bar, so you can - * - Watch and observe the URL. - * - Change the URL. - * - Synchronizes the URL with the browser when the user - * - Changes the address bar. - * - Clicks the back or forward button (or clicks a History link). - * - Clicks on a link. - * - Represents the URL object as a set of methods (protocol, host, port, path, search, hash). - * - * For more information see {@link guide/$location Developer Guide: Using $location} - */ - -/** - * @ngdoc provider - * @name $locationProvider - * @this - * - * @description - * Use the `$locationProvider` to configure how the application deep linking paths are stored. - */ -function $LocationProvider() { - var hashPrefix = '!', - html5Mode = { - enabled: false, - requireBase: true, - rewriteLinks: true - }; - - /** - * @ngdoc method - * @name $locationProvider#hashPrefix - * @description - * The default value for the prefix is `'!'`. - * @param {string=} prefix Prefix for hash part (containing path and search) - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.hashPrefix = function(prefix) { - if (isDefined(prefix)) { - hashPrefix = prefix; - return this; - } else { - return hashPrefix; - } - }; - - /** - * @ngdoc method - * @name $locationProvider#html5Mode - * @description - * @param {(boolean|Object)=} mode If boolean, sets `html5Mode.enabled` to value. - * If object, sets `enabled`, `requireBase` and `rewriteLinks` to respective values. Supported - * properties: - * - **enabled** – `{boolean}` – (default: false) If true, will rely on `history.pushState` to - * change urls where supported. Will fall back to hash-prefixed paths in browsers that do not - * support `pushState`. - * - **requireBase** - `{boolean}` - (default: `true`) When html5Mode is enabled, specifies - * whether or not a tag is required to be present. If `enabled` and `requireBase` are - * true, and a base tag is not present, an error will be thrown when `$location` is injected. - * See the {@link guide/$location $location guide for more information} - * - **rewriteLinks** - `{boolean|string}` - (default: `true`) When html5Mode is enabled, - * enables/disables URL rewriting for relative links. If set to a string, URL rewriting will - * only happen on links with an attribute that matches the given string. For example, if set - * to `'internal-link'`, then the URL will only be rewritten for `` links. - * Note that [attribute name normalization](guide/directive#normalization) does not apply - * here, so `'internalLink'` will **not** match `'internal-link'`. - * - * @returns {Object} html5Mode object if used as getter or itself (chaining) if used as setter - */ - this.html5Mode = function(mode) { - if (isBoolean(mode)) { - html5Mode.enabled = mode; - return this; - } else if (isObject(mode)) { - - if (isBoolean(mode.enabled)) { - html5Mode.enabled = mode.enabled; - } - - if (isBoolean(mode.requireBase)) { - html5Mode.requireBase = mode.requireBase; - } - - if (isBoolean(mode.rewriteLinks) || isString(mode.rewriteLinks)) { - html5Mode.rewriteLinks = mode.rewriteLinks; - } - - return this; - } else { - return html5Mode; - } - }; - - /** - * @ngdoc event - * @name $location#$locationChangeStart - * @eventType broadcast on root scope - * @description - * Broadcasted before a URL will change. - * - * This change can be prevented by calling - * `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on} for more - * details about event object. Upon successful change - * {@link ng.$location#$locationChangeSuccess $locationChangeSuccess} is fired. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - /** - * @ngdoc event - * @name $location#$locationChangeSuccess - * @eventType broadcast on root scope - * @description - * Broadcasted after a URL was changed. - * - * The `newState` and `oldState` parameters may be defined only in HTML5 mode and when - * the browser supports the HTML5 History API. - * - * @param {Object} angularEvent Synthetic event object. - * @param {string} newUrl New URL - * @param {string=} oldUrl URL that was before it was changed. - * @param {string=} newState New history state object - * @param {string=} oldState History state object that was before it was changed. - */ - - this.$get = ['$rootScope', '$browser', '$sniffer', '$rootElement', '$window', - function($rootScope, $browser, $sniffer, $rootElement, $window) { - var $location, - LocationMode, - baseHref = $browser.baseHref(), // if base[href] is undefined, it defaults to '' - initialUrl = $browser.url(), - appBase; - - if (html5Mode.enabled) { - if (!baseHref && html5Mode.requireBase) { - throw $locationMinErr('nobase', - '$location in HTML5 mode requires a tag to be present!'); - } - appBase = serverBase(initialUrl) + (baseHref || '/'); - LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url; - } else { - appBase = stripHash(initialUrl); - LocationMode = LocationHashbangUrl; - } - var appBaseNoFile = stripFile(appBase); - - $location = new LocationMode(appBase, appBaseNoFile, '#' + hashPrefix); - $location.$$parseLinkUrl(initialUrl, initialUrl); - - $location.$$state = $browser.state(); - - var IGNORE_URI_REGEXP = /^\s*(javascript|mailto):/i; - - // Determine if two URLs are equal despite potentially having different encoding/normalizing - // such as $location.absUrl() vs $browser.url() - // See https://github.com/angular/angular.js/issues/16592 - function urlsEqual(a, b) { - return a === b || urlResolve(a).href === urlResolve(b).href; - } - - function setBrowserUrlWithFallback(url, replace, state) { - var oldUrl = $location.url(); - var oldState = $location.$$state; - try { - $browser.url(url, replace, state); - - // Make sure $location.state() returns referentially identical (not just deeply equal) - // state object; this makes possible quick checking if the state changed in the digest - // loop. Checking deep equality would be too expensive. - $location.$$state = $browser.state(); - } catch (e) { - // Restore old values if pushState fails - $location.url(oldUrl); - $location.$$state = oldState; - - throw e; - } - } - - $rootElement.on('click', function(event) { - var rewriteLinks = html5Mode.rewriteLinks; - // TODO(vojta): rewrite link when opening in new tab/window (in legacy browser) - // currently we open nice url link and redirect then - - if (!rewriteLinks || event.ctrlKey || event.metaKey || event.shiftKey || event.which === 2 || event.button === 2) return; - - var elm = jqLite(event.target); - - // traverse the DOM up to find first A tag - while (nodeName_(elm[0]) !== 'a') { - // ignore rewriting if no A tag (reached root element, or no parent - removed from document) - if (elm[0] === $rootElement[0] || !(elm = elm.parent())[0]) return; - } - - if (isString(rewriteLinks) && isUndefined(elm.attr(rewriteLinks))) return; - - var absHref = elm.prop('href'); - // get the actual href attribute - see - // http://msdn.microsoft.com/en-us/library/ie/dd347148(v=vs.85).aspx - var relHref = elm.attr('href') || elm.attr('xlink:href'); - - if (isObject(absHref) && absHref.toString() === '[object SVGAnimatedString]') { - // SVGAnimatedString.animVal should be identical to SVGAnimatedString.baseVal, unless during - // an animation. - absHref = urlResolve(absHref.animVal).href; - } - - // Ignore when url is started with javascript: or mailto: - if (IGNORE_URI_REGEXP.test(absHref)) return; - - if (absHref && !elm.attr('target') && !event.isDefaultPrevented()) { - if ($location.$$parseLinkUrl(absHref, relHref)) { - // We do a preventDefault for all urls that are part of the AngularJS application, - // in html5mode and also without, so that we are able to abort navigation without - // getting double entries in the location history. - event.preventDefault(); - // update location manually - if ($location.absUrl() !== $browser.url()) { - $rootScope.$apply(); - } - } - } - }); - - - // rewrite hashbang url <> html5 url - if ($location.absUrl() !== initialUrl) { - $browser.url($location.absUrl(), true); - } - - var initializing = true; - - // update $location when $browser url changes - $browser.onUrlChange(function(newUrl, newState) { - - if (!startsWith(newUrl, appBaseNoFile)) { - // If we are navigating outside of the app then force a reload - $window.location.href = newUrl; - return; - } - - $rootScope.$evalAsync(function() { - var oldUrl = $location.absUrl(); - var oldState = $location.$$state; - var defaultPrevented; - $location.$$parse(newUrl); - $location.$$state = newState; - - defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - newState, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - setBrowserUrlWithFallback(oldUrl, false, oldState); - } else { - initializing = false; - afterLocationChange(oldUrl, oldState); - } - }); - if (!$rootScope.$$phase) $rootScope.$digest(); - }); - - // update browser - $rootScope.$watch(function $locationWatch() { - if (initializing || $location.$$urlUpdatedByLocation) { - $location.$$urlUpdatedByLocation = false; - - var oldUrl = $browser.url(); - var newUrl = $location.absUrl(); - var oldState = $browser.state(); - var currentReplace = $location.$$replace; - var urlOrStateChanged = !urlsEqual(oldUrl, newUrl) || - ($location.$$html5 && $sniffer.history && oldState !== $location.$$state); - - if (initializing || urlOrStateChanged) { - initializing = false; - - $rootScope.$evalAsync(function() { - var newUrl = $location.absUrl(); - var defaultPrevented = $rootScope.$broadcast('$locationChangeStart', newUrl, oldUrl, - $location.$$state, oldState).defaultPrevented; - - // if the location was changed by a `$locationChangeStart` handler then stop - // processing this location change - if ($location.absUrl() !== newUrl) return; - - if (defaultPrevented) { - $location.$$parse(oldUrl); - $location.$$state = oldState; - } else { - if (urlOrStateChanged) { - setBrowserUrlWithFallback(newUrl, currentReplace, - oldState === $location.$$state ? null : $location.$$state); - } - afterLocationChange(oldUrl, oldState); - } - }); - } - } - - $location.$$replace = false; - - // we don't need to return anything because $evalAsync will make the digest loop dirty when - // there is a change - }); - - return $location; - - function afterLocationChange(oldUrl, oldState) { - $rootScope.$broadcast('$locationChangeSuccess', $location.absUrl(), oldUrl, - $location.$$state, oldState); - } -}]; -} - -/** - * @ngdoc service - * @name $log - * @requires $window - * - * @description - * Simple service for logging. Default implementation safely writes the message - * into the browser's console (if present). - * - * The main purpose of this service is to simplify debugging and troubleshooting. - * - * To reveal the location of the calls to `$log` in the JavaScript console, - * you can "blackbox" the AngularJS source in your browser: - * - * [Mozilla description of blackboxing](https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Black_box_a_source). - * [Chrome description of blackboxing](https://developer.chrome.com/devtools/docs/blackboxing). - * - * Note: Not all browsers support blackboxing. - * - * The default is to log `debug` messages. You can use - * {@link ng.$logProvider ng.$logProvider#debugEnabled} to change this. - * - * @example - - - angular.module('logExample', []) - .controller('LogController', ['$scope', '$log', function($scope, $log) { - $scope.$log = $log; - $scope.message = 'Hello World!'; - }]); - - -
      -

      Reload this page with open console, enter text and hit the log button...

      - - - - - - -
      -
      -
      - */ - -/** - * @ngdoc provider - * @name $logProvider - * @this - * - * @description - * Use the `$logProvider` to configure how the application logs messages - */ -function $LogProvider() { - var debug = true, - self = this; - - /** - * @ngdoc method - * @name $logProvider#debugEnabled - * @description - * @param {boolean=} flag enable or disable debug level messages - * @returns {*} current value if used as getter or itself (chaining) if used as setter - */ - this.debugEnabled = function(flag) { - if (isDefined(flag)) { - debug = flag; - return this; - } else { - return debug; - } - }; - - this.$get = ['$window', function($window) { - // Support: IE 9-11, Edge 12-14+ - // IE/Edge display errors in such a way that it requires the user to click in 4 places - // to see the stack trace. There is no way to feature-detect it so there's a chance - // of the user agent sniffing to go wrong but since it's only about logging, this shouldn't - // break apps. Other browsers display errors in a sensible way and some of them map stack - // traces along source maps if available so it makes sense to let browsers display it - // as they want. - var formatStackTrace = msie || /\bEdge\//.test($window.navigator && $window.navigator.userAgent); - - return { - /** - * @ngdoc method - * @name $log#log - * - * @description - * Write a log message - */ - log: consoleLog('log'), - - /** - * @ngdoc method - * @name $log#info - * - * @description - * Write an information message - */ - info: consoleLog('info'), - - /** - * @ngdoc method - * @name $log#warn - * - * @description - * Write a warning message - */ - warn: consoleLog('warn'), - - /** - * @ngdoc method - * @name $log#error - * - * @description - * Write an error message - */ - error: consoleLog('error'), - - /** - * @ngdoc method - * @name $log#debug - * - * @description - * Write a debug message - */ - debug: (function() { - var fn = consoleLog('debug'); - - return function() { - if (debug) { - fn.apply(self, arguments); - } - }; - })() - }; - - function formatError(arg) { - if (isError(arg)) { - if (arg.stack && formatStackTrace) { - arg = (arg.message && arg.stack.indexOf(arg.message) === -1) - ? 'Error: ' + arg.message + '\n' + arg.stack - : arg.stack; - } else if (arg.sourceURL) { - arg = arg.message + '\n' + arg.sourceURL + ':' + arg.line; - } - } - return arg; - } - - function consoleLog(type) { - var console = $window.console || {}, - logFn = console[type] || console.log || noop; - - return function() { - var args = []; - forEach(arguments, function(arg) { - args.push(formatError(arg)); - }); - // Support: IE 9 only - // console methods don't inherit from Function.prototype in IE 9 so we can't - // call `logFn.apply(console, args)` directly. - return Function.prototype.apply.call(logFn, console, args); - }; - } - }]; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -var $parseMinErr = minErr('$parse'); - -var objectValueOf = {}.constructor.prototype.valueOf; - -// Sandboxing AngularJS Expressions -// ------------------------------ -// AngularJS expressions are no longer sandboxed. So it is now even easier to access arbitrary JS code by -// various means such as obtaining a reference to native JS functions like the Function constructor. -// -// As an example, consider the following AngularJS expression: -// -// {}.toString.constructor('alert("evil JS code")') -// -// It is important to realize that if you create an expression from a string that contains user provided -// content then it is possible that your application contains a security vulnerability to an XSS style attack. -// -// See https://docs.angularjs.org/guide/security - - -function getStringValue(name) { - // Property names must be strings. This means that non-string objects cannot be used - // as keys in an object. Any non-string object, including a number, is typecasted - // into a string via the toString method. - // -- MDN, https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Property_accessors#Property_names - // - // So, to ensure that we are checking the same `name` that JavaScript would use, we cast it - // to a string. It's not always possible. If `name` is an object and its `toString` method is - // 'broken' (doesn't return a string, isn't a function, etc.), an error will be thrown: - // - // TypeError: Cannot convert object to primitive value - // - // For performance reasons, we don't catch this error here and allow it to propagate up the call - // stack. Note that you'll get the same error in JavaScript if you try to access a property using - // such a 'broken' object as a key. - return name + ''; -} - - -var OPERATORS = createMap(); -forEach('+ - * / % === !== == != < > <= >= && || ! = |'.split(' '), function(operator) { OPERATORS[operator] = true; }); -var ESCAPE = {'n':'\n', 'f':'\f', 'r':'\r', 't':'\t', 'v':'\v', '\'':'\'', '"':'"'}; - - -///////////////////////////////////////// - - -/** - * @constructor - */ -var Lexer = function Lexer(options) { - this.options = options; -}; - -Lexer.prototype = { - constructor: Lexer, - - lex: function(text) { - this.text = text; - this.index = 0; - this.tokens = []; - - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - if (ch === '"' || ch === '\'') { - this.readString(ch); - } else if (this.isNumber(ch) || ch === '.' && this.isNumber(this.peek())) { - this.readNumber(); - } else if (this.isIdentifierStart(this.peekMultichar())) { - this.readIdent(); - } else if (this.is(ch, '(){}[].,;:?')) { - this.tokens.push({index: this.index, text: ch}); - this.index++; - } else if (this.isWhitespace(ch)) { - this.index++; - } else { - var ch2 = ch + this.peek(); - var ch3 = ch2 + this.peek(2); - var op1 = OPERATORS[ch]; - var op2 = OPERATORS[ch2]; - var op3 = OPERATORS[ch3]; - if (op1 || op2 || op3) { - var token = op3 ? ch3 : (op2 ? ch2 : ch); - this.tokens.push({index: this.index, text: token, operator: true}); - this.index += token.length; - } else { - this.throwError('Unexpected next character ', this.index, this.index + 1); - } - } - } - return this.tokens; - }, - - is: function(ch, chars) { - return chars.indexOf(ch) !== -1; - }, - - peek: function(i) { - var num = i || 1; - return (this.index + num < this.text.length) ? this.text.charAt(this.index + num) : false; - }, - - isNumber: function(ch) { - return ('0' <= ch && ch <= '9') && typeof ch === 'string'; - }, - - isWhitespace: function(ch) { - // IE treats non-breaking space as \u00A0 - return (ch === ' ' || ch === '\r' || ch === '\t' || - ch === '\n' || ch === '\v' || ch === '\u00A0'); - }, - - isIdentifierStart: function(ch) { - return this.options.isIdentifierStart ? - this.options.isIdentifierStart(ch, this.codePointAt(ch)) : - this.isValidIdentifierStart(ch); - }, - - isValidIdentifierStart: function(ch) { - return ('a' <= ch && ch <= 'z' || - 'A' <= ch && ch <= 'Z' || - '_' === ch || ch === '$'); - }, - - isIdentifierContinue: function(ch) { - return this.options.isIdentifierContinue ? - this.options.isIdentifierContinue(ch, this.codePointAt(ch)) : - this.isValidIdentifierContinue(ch); - }, - - isValidIdentifierContinue: function(ch, cp) { - return this.isValidIdentifierStart(ch, cp) || this.isNumber(ch); - }, - - codePointAt: function(ch) { - if (ch.length === 1) return ch.charCodeAt(0); - // eslint-disable-next-line no-bitwise - return (ch.charCodeAt(0) << 10) + ch.charCodeAt(1) - 0x35FDC00; - }, - - peekMultichar: function() { - var ch = this.text.charAt(this.index); - var peek = this.peek(); - if (!peek) { - return ch; - } - var cp1 = ch.charCodeAt(0); - var cp2 = peek.charCodeAt(0); - if (cp1 >= 0xD800 && cp1 <= 0xDBFF && cp2 >= 0xDC00 && cp2 <= 0xDFFF) { - return ch + peek; - } - return ch; - }, - - isExpOperator: function(ch) { - return (ch === '-' || ch === '+' || this.isNumber(ch)); - }, - - throwError: function(error, start, end) { - end = end || this.index; - var colStr = (isDefined(start) - ? 's ' + start + '-' + this.index + ' [' + this.text.substring(start, end) + ']' - : ' ' + end); - throw $parseMinErr('lexerr', 'Lexer Error: {0} at column{1} in expression [{2}].', - error, colStr, this.text); - }, - - readNumber: function() { - var number = ''; - var start = this.index; - while (this.index < this.text.length) { - var ch = lowercase(this.text.charAt(this.index)); - if (ch === '.' || this.isNumber(ch)) { - number += ch; - } else { - var peekCh = this.peek(); - if (ch === 'e' && this.isExpOperator(peekCh)) { - number += ch; - } else if (this.isExpOperator(ch) && - peekCh && this.isNumber(peekCh) && - number.charAt(number.length - 1) === 'e') { - number += ch; - } else if (this.isExpOperator(ch) && - (!peekCh || !this.isNumber(peekCh)) && - number.charAt(number.length - 1) === 'e') { - this.throwError('Invalid exponent'); - } else { - break; - } - } - this.index++; - } - this.tokens.push({ - index: start, - text: number, - constant: true, - value: Number(number) - }); - }, - - readIdent: function() { - var start = this.index; - this.index += this.peekMultichar().length; - while (this.index < this.text.length) { - var ch = this.peekMultichar(); - if (!this.isIdentifierContinue(ch)) { - break; - } - this.index += ch.length; - } - this.tokens.push({ - index: start, - text: this.text.slice(start, this.index), - identifier: true - }); - }, - - readString: function(quote) { - var start = this.index; - this.index++; - var string = ''; - var rawString = quote; - var escape = false; - while (this.index < this.text.length) { - var ch = this.text.charAt(this.index); - rawString += ch; - if (escape) { - if (ch === 'u') { - var hex = this.text.substring(this.index + 1, this.index + 5); - if (!hex.match(/[\da-f]{4}/i)) { - this.throwError('Invalid unicode escape [\\u' + hex + ']'); - } - this.index += 4; - string += String.fromCharCode(parseInt(hex, 16)); - } else { - var rep = ESCAPE[ch]; - string = string + (rep || ch); - } - escape = false; - } else if (ch === '\\') { - escape = true; - } else if (ch === quote) { - this.index++; - this.tokens.push({ - index: start, - text: rawString, - constant: true, - value: string - }); - return; - } else { - string += ch; - } - this.index++; - } - this.throwError('Unterminated quote', start); - } -}; - -var AST = function AST(lexer, options) { - this.lexer = lexer; - this.options = options; -}; - -AST.Program = 'Program'; -AST.ExpressionStatement = 'ExpressionStatement'; -AST.AssignmentExpression = 'AssignmentExpression'; -AST.ConditionalExpression = 'ConditionalExpression'; -AST.LogicalExpression = 'LogicalExpression'; -AST.BinaryExpression = 'BinaryExpression'; -AST.UnaryExpression = 'UnaryExpression'; -AST.CallExpression = 'CallExpression'; -AST.MemberExpression = 'MemberExpression'; -AST.Identifier = 'Identifier'; -AST.Literal = 'Literal'; -AST.ArrayExpression = 'ArrayExpression'; -AST.Property = 'Property'; -AST.ObjectExpression = 'ObjectExpression'; -AST.ThisExpression = 'ThisExpression'; -AST.LocalsExpression = 'LocalsExpression'; - -// Internal use only -AST.NGValueParameter = 'NGValueParameter'; - -AST.prototype = { - ast: function(text) { - this.text = text; - this.tokens = this.lexer.lex(text); - - var value = this.program(); - - if (this.tokens.length !== 0) { - this.throwError('is an unexpected token', this.tokens[0]); - } - - return value; - }, - - program: function() { - var body = []; - while (true) { - if (this.tokens.length > 0 && !this.peek('}', ')', ';', ']')) - body.push(this.expressionStatement()); - if (!this.expect(';')) { - return { type: AST.Program, body: body}; - } - } - }, - - expressionStatement: function() { - return { type: AST.ExpressionStatement, expression: this.filterChain() }; - }, - - filterChain: function() { - var left = this.expression(); - while (this.expect('|')) { - left = this.filter(left); - } - return left; - }, - - expression: function() { - return this.assignment(); - }, - - assignment: function() { - var result = this.ternary(); - if (this.expect('=')) { - if (!isAssignable(result)) { - throw $parseMinErr('lval', 'Trying to assign a value to a non l-value'); - } - - result = { type: AST.AssignmentExpression, left: result, right: this.assignment(), operator: '='}; - } - return result; - }, - - ternary: function() { - var test = this.logicalOR(); - var alternate; - var consequent; - if (this.expect('?')) { - alternate = this.expression(); - if (this.consume(':')) { - consequent = this.expression(); - return { type: AST.ConditionalExpression, test: test, alternate: alternate, consequent: consequent}; - } - } - return test; - }, - - logicalOR: function() { - var left = this.logicalAND(); - while (this.expect('||')) { - left = { type: AST.LogicalExpression, operator: '||', left: left, right: this.logicalAND() }; - } - return left; - }, - - logicalAND: function() { - var left = this.equality(); - while (this.expect('&&')) { - left = { type: AST.LogicalExpression, operator: '&&', left: left, right: this.equality()}; - } - return left; - }, - - equality: function() { - var left = this.relational(); - var token; - while ((token = this.expect('==','!=','===','!=='))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.relational() }; - } - return left; - }, - - relational: function() { - var left = this.additive(); - var token; - while ((token = this.expect('<', '>', '<=', '>='))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.additive() }; - } - return left; - }, - - additive: function() { - var left = this.multiplicative(); - var token; - while ((token = this.expect('+','-'))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.multiplicative() }; - } - return left; - }, - - multiplicative: function() { - var left = this.unary(); - var token; - while ((token = this.expect('*','/','%'))) { - left = { type: AST.BinaryExpression, operator: token.text, left: left, right: this.unary() }; - } - return left; - }, - - unary: function() { - var token; - if ((token = this.expect('+', '-', '!'))) { - return { type: AST.UnaryExpression, operator: token.text, prefix: true, argument: this.unary() }; - } else { - return this.primary(); - } - }, - - primary: function() { - var primary; - if (this.expect('(')) { - primary = this.filterChain(); - this.consume(')'); - } else if (this.expect('[')) { - primary = this.arrayDeclaration(); - } else if (this.expect('{')) { - primary = this.object(); - } else if (this.selfReferential.hasOwnProperty(this.peek().text)) { - primary = copy(this.selfReferential[this.consume().text]); - } else if (this.options.literals.hasOwnProperty(this.peek().text)) { - primary = { type: AST.Literal, value: this.options.literals[this.consume().text]}; - } else if (this.peek().identifier) { - primary = this.identifier(); - } else if (this.peek().constant) { - primary = this.constant(); - } else { - this.throwError('not a primary expression', this.peek()); - } - - var next; - while ((next = this.expect('(', '[', '.'))) { - if (next.text === '(') { - primary = {type: AST.CallExpression, callee: primary, arguments: this.parseArguments() }; - this.consume(')'); - } else if (next.text === '[') { - primary = { type: AST.MemberExpression, object: primary, property: this.expression(), computed: true }; - this.consume(']'); - } else if (next.text === '.') { - primary = { type: AST.MemberExpression, object: primary, property: this.identifier(), computed: false }; - } else { - this.throwError('IMPOSSIBLE'); - } - } - return primary; - }, - - filter: function(baseExpression) { - var args = [baseExpression]; - var result = {type: AST.CallExpression, callee: this.identifier(), arguments: args, filter: true}; - - while (this.expect(':')) { - args.push(this.expression()); - } - - return result; - }, - - parseArguments: function() { - var args = []; - if (this.peekToken().text !== ')') { - do { - args.push(this.filterChain()); - } while (this.expect(',')); - } - return args; - }, - - identifier: function() { - var token = this.consume(); - if (!token.identifier) { - this.throwError('is not a valid identifier', token); - } - return { type: AST.Identifier, name: token.text }; - }, - - constant: function() { - // TODO check that it is a constant - return { type: AST.Literal, value: this.consume().value }; - }, - - arrayDeclaration: function() { - var elements = []; - if (this.peekToken().text !== ']') { - do { - if (this.peek(']')) { - // Support trailing commas per ES5.1. - break; - } - elements.push(this.expression()); - } while (this.expect(',')); - } - this.consume(']'); - - return { type: AST.ArrayExpression, elements: elements }; - }, - - object: function() { - var properties = [], property; - if (this.peekToken().text !== '}') { - do { - if (this.peek('}')) { - // Support trailing commas per ES5.1. - break; - } - property = {type: AST.Property, kind: 'init'}; - if (this.peek().constant) { - property.key = this.constant(); - property.computed = false; - this.consume(':'); - property.value = this.expression(); - } else if (this.peek().identifier) { - property.key = this.identifier(); - property.computed = false; - if (this.peek(':')) { - this.consume(':'); - property.value = this.expression(); - } else { - property.value = property.key; - } - } else if (this.peek('[')) { - this.consume('['); - property.key = this.expression(); - this.consume(']'); - property.computed = true; - this.consume(':'); - property.value = this.expression(); - } else { - this.throwError('invalid key', this.peek()); - } - properties.push(property); - } while (this.expect(',')); - } - this.consume('}'); - - return {type: AST.ObjectExpression, properties: properties }; - }, - - throwError: function(msg, token) { - throw $parseMinErr('syntax', - 'Syntax Error: Token \'{0}\' {1} at column {2} of the expression [{3}] starting at [{4}].', - token.text, msg, (token.index + 1), this.text, this.text.substring(token.index)); - }, - - consume: function(e1) { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - - var token = this.expect(e1); - if (!token) { - this.throwError('is unexpected, expecting [' + e1 + ']', this.peek()); - } - return token; - }, - - peekToken: function() { - if (this.tokens.length === 0) { - throw $parseMinErr('ueoe', 'Unexpected end of expression: {0}', this.text); - } - return this.tokens[0]; - }, - - peek: function(e1, e2, e3, e4) { - return this.peekAhead(0, e1, e2, e3, e4); - }, - - peekAhead: function(i, e1, e2, e3, e4) { - if (this.tokens.length > i) { - var token = this.tokens[i]; - var t = token.text; - if (t === e1 || t === e2 || t === e3 || t === e4 || - (!e1 && !e2 && !e3 && !e4)) { - return token; - } - } - return false; - }, - - expect: function(e1, e2, e3, e4) { - var token = this.peek(e1, e2, e3, e4); - if (token) { - this.tokens.shift(); - return token; - } - return false; - }, - - selfReferential: { - 'this': {type: AST.ThisExpression }, - '$locals': {type: AST.LocalsExpression } - } -}; - -function ifDefined(v, d) { - return typeof v !== 'undefined' ? v : d; -} - -function plusFn(l, r) { - if (typeof l === 'undefined') return r; - if (typeof r === 'undefined') return l; - return l + r; -} - -function isStateless($filter, filterName) { - var fn = $filter(filterName); - return !fn.$stateful; -} - -var PURITY_ABSOLUTE = 1; -var PURITY_RELATIVE = 2; - -// Detect nodes which could depend on non-shallow state of objects -function isPure(node, parentIsPure) { - switch (node.type) { - // Computed members might invoke a stateful toString() - case AST.MemberExpression: - if (node.computed) { - return false; - } - break; - - // Unary always convert to primative - case AST.UnaryExpression: - return PURITY_ABSOLUTE; - - // The binary + operator can invoke a stateful toString(). - case AST.BinaryExpression: - return node.operator !== '+' ? PURITY_ABSOLUTE : false; - - // Functions / filters probably read state from within objects - case AST.CallExpression: - return false; - } - - return (undefined === parentIsPure) ? PURITY_RELATIVE : parentIsPure; -} - -function findConstantAndWatchExpressions(ast, $filter, parentIsPure) { - var allConstants; - var argsToWatch; - var isStatelessFilter; - - var astIsPure = ast.isPure = isPure(ast, parentIsPure); - - switch (ast.type) { - case AST.Program: - allConstants = true; - forEach(ast.body, function(expr) { - findConstantAndWatchExpressions(expr.expression, $filter, astIsPure); - allConstants = allConstants && expr.expression.constant; - }); - ast.constant = allConstants; - break; - case AST.Literal: - ast.constant = true; - ast.toWatch = []; - break; - case AST.UnaryExpression: - findConstantAndWatchExpressions(ast.argument, $filter, astIsPure); - ast.constant = ast.argument.constant; - ast.toWatch = ast.argument.toWatch; - break; - case AST.BinaryExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = ast.left.toWatch.concat(ast.right.toWatch); - break; - case AST.LogicalExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.ConditionalExpression: - findConstantAndWatchExpressions(ast.test, $filter, astIsPure); - findConstantAndWatchExpressions(ast.alternate, $filter, astIsPure); - findConstantAndWatchExpressions(ast.consequent, $filter, astIsPure); - ast.constant = ast.test.constant && ast.alternate.constant && ast.consequent.constant; - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.Identifier: - ast.constant = false; - ast.toWatch = [ast]; - break; - case AST.MemberExpression: - findConstantAndWatchExpressions(ast.object, $filter, astIsPure); - if (ast.computed) { - findConstantAndWatchExpressions(ast.property, $filter, astIsPure); - } - ast.constant = ast.object.constant && (!ast.computed || ast.property.constant); - ast.toWatch = ast.constant ? [] : [ast]; - break; - case AST.CallExpression: - isStatelessFilter = ast.filter ? isStateless($filter, ast.callee.name) : false; - allConstants = isStatelessFilter; - argsToWatch = []; - forEach(ast.arguments, function(expr) { - findConstantAndWatchExpressions(expr, $filter, astIsPure); - allConstants = allConstants && expr.constant; - argsToWatch.push.apply(argsToWatch, expr.toWatch); - }); - ast.constant = allConstants; - ast.toWatch = isStatelessFilter ? argsToWatch : [ast]; - break; - case AST.AssignmentExpression: - findConstantAndWatchExpressions(ast.left, $filter, astIsPure); - findConstantAndWatchExpressions(ast.right, $filter, astIsPure); - ast.constant = ast.left.constant && ast.right.constant; - ast.toWatch = [ast]; - break; - case AST.ArrayExpression: - allConstants = true; - argsToWatch = []; - forEach(ast.elements, function(expr) { - findConstantAndWatchExpressions(expr, $filter, astIsPure); - allConstants = allConstants && expr.constant; - argsToWatch.push.apply(argsToWatch, expr.toWatch); - }); - ast.constant = allConstants; - ast.toWatch = argsToWatch; - break; - case AST.ObjectExpression: - allConstants = true; - argsToWatch = []; - forEach(ast.properties, function(property) { - findConstantAndWatchExpressions(property.value, $filter, astIsPure); - allConstants = allConstants && property.value.constant; - argsToWatch.push.apply(argsToWatch, property.value.toWatch); - if (property.computed) { - //`{[key]: value}` implicitly does `key.toString()` which may be non-pure - findConstantAndWatchExpressions(property.key, $filter, /*parentIsPure=*/false); - allConstants = allConstants && property.key.constant; - argsToWatch.push.apply(argsToWatch, property.key.toWatch); - } - }); - ast.constant = allConstants; - ast.toWatch = argsToWatch; - break; - case AST.ThisExpression: - ast.constant = false; - ast.toWatch = []; - break; - case AST.LocalsExpression: - ast.constant = false; - ast.toWatch = []; - break; - } -} - -function getInputs(body) { - if (body.length !== 1) return; - var lastExpression = body[0].expression; - var candidate = lastExpression.toWatch; - if (candidate.length !== 1) return candidate; - return candidate[0] !== lastExpression ? candidate : undefined; -} - -function isAssignable(ast) { - return ast.type === AST.Identifier || ast.type === AST.MemberExpression; -} - -function assignableAST(ast) { - if (ast.body.length === 1 && isAssignable(ast.body[0].expression)) { - return {type: AST.AssignmentExpression, left: ast.body[0].expression, right: {type: AST.NGValueParameter}, operator: '='}; - } -} - -function isLiteral(ast) { - return ast.body.length === 0 || - ast.body.length === 1 && ( - ast.body[0].expression.type === AST.Literal || - ast.body[0].expression.type === AST.ArrayExpression || - ast.body[0].expression.type === AST.ObjectExpression); -} - -function isConstant(ast) { - return ast.constant; -} - -function ASTCompiler($filter) { - this.$filter = $filter; -} - -ASTCompiler.prototype = { - compile: function(ast) { - var self = this; - this.state = { - nextId: 0, - filters: {}, - fn: {vars: [], body: [], own: {}}, - assign: {vars: [], body: [], own: {}}, - inputs: [] - }; - findConstantAndWatchExpressions(ast, self.$filter); - var extra = ''; - var assignable; - this.stage = 'assign'; - if ((assignable = assignableAST(ast))) { - this.state.computing = 'assign'; - var result = this.nextId(); - this.recurse(assignable, result); - this.return_(result); - extra = 'fn.assign=' + this.generateFunction('assign', 's,v,l'); - } - var toWatch = getInputs(ast.body); - self.stage = 'inputs'; - forEach(toWatch, function(watch, key) { - var fnKey = 'fn' + key; - self.state[fnKey] = {vars: [], body: [], own: {}}; - self.state.computing = fnKey; - var intoId = self.nextId(); - self.recurse(watch, intoId); - self.return_(intoId); - self.state.inputs.push({name: fnKey, isPure: watch.isPure}); - watch.watchId = key; - }); - this.state.computing = 'fn'; - this.stage = 'main'; - this.recurse(ast); - var fnString = - // The build and minification steps remove the string "use strict" from the code, but this is done using a regex. - // This is a workaround for this until we do a better job at only removing the prefix only when we should. - '"' + this.USE + ' ' + this.STRICT + '";\n' + - this.filterPrefix() + - 'var fn=' + this.generateFunction('fn', 's,l,a,i') + - extra + - this.watchFns() + - 'return fn;'; - - // eslint-disable-next-line no-new-func - var fn = (new Function('$filter', - 'getStringValue', - 'ifDefined', - 'plus', - fnString))( - this.$filter, - getStringValue, - ifDefined, - plusFn); - this.state = this.stage = undefined; - return fn; - }, - - USE: 'use', - - STRICT: 'strict', - - watchFns: function() { - var result = []; - var inputs = this.state.inputs; - var self = this; - forEach(inputs, function(input) { - result.push('var ' + input.name + '=' + self.generateFunction(input.name, 's')); - if (input.isPure) { - result.push(input.name, '.isPure=' + JSON.stringify(input.isPure) + ';'); - } - }); - if (inputs.length) { - result.push('fn.inputs=[' + inputs.map(function(i) { return i.name; }).join(',') + '];'); - } - return result.join(''); - }, - - generateFunction: function(name, params) { - return 'function(' + params + '){' + - this.varsPrefix(name) + - this.body(name) + - '};'; - }, - - filterPrefix: function() { - var parts = []; - var self = this; - forEach(this.state.filters, function(id, filter) { - parts.push(id + '=$filter(' + self.escape(filter) + ')'); - }); - if (parts.length) return 'var ' + parts.join(',') + ';'; - return ''; - }, - - varsPrefix: function(section) { - return this.state[section].vars.length ? 'var ' + this.state[section].vars.join(',') + ';' : ''; - }, - - body: function(section) { - return this.state[section].body.join(''); - }, - - recurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { - var left, right, self = this, args, expression, computed; - recursionFn = recursionFn || noop; - if (!skipWatchIdCheck && isDefined(ast.watchId)) { - intoId = intoId || this.nextId(); - this.if_('i', - this.lazyAssign(intoId, this.computedMember('i', ast.watchId)), - this.lazyRecurse(ast, intoId, nameId, recursionFn, create, true) - ); - return; - } - switch (ast.type) { - case AST.Program: - forEach(ast.body, function(expression, pos) { - self.recurse(expression.expression, undefined, undefined, function(expr) { right = expr; }); - if (pos !== ast.body.length - 1) { - self.current().body.push(right, ';'); - } else { - self.return_(right); - } - }); - break; - case AST.Literal: - expression = this.escape(ast.value); - this.assign(intoId, expression); - recursionFn(intoId || expression); - break; - case AST.UnaryExpression: - this.recurse(ast.argument, undefined, undefined, function(expr) { right = expr; }); - expression = ast.operator + '(' + this.ifDefined(right, 0) + ')'; - this.assign(intoId, expression); - recursionFn(expression); - break; - case AST.BinaryExpression: - this.recurse(ast.left, undefined, undefined, function(expr) { left = expr; }); - this.recurse(ast.right, undefined, undefined, function(expr) { right = expr; }); - if (ast.operator === '+') { - expression = this.plus(left, right); - } else if (ast.operator === '-') { - expression = this.ifDefined(left, 0) + ast.operator + this.ifDefined(right, 0); - } else { - expression = '(' + left + ')' + ast.operator + '(' + right + ')'; - } - this.assign(intoId, expression); - recursionFn(expression); - break; - case AST.LogicalExpression: - intoId = intoId || this.nextId(); - self.recurse(ast.left, intoId); - self.if_(ast.operator === '&&' ? intoId : self.not(intoId), self.lazyRecurse(ast.right, intoId)); - recursionFn(intoId); - break; - case AST.ConditionalExpression: - intoId = intoId || this.nextId(); - self.recurse(ast.test, intoId); - self.if_(intoId, self.lazyRecurse(ast.alternate, intoId), self.lazyRecurse(ast.consequent, intoId)); - recursionFn(intoId); - break; - case AST.Identifier: - intoId = intoId || this.nextId(); - if (nameId) { - nameId.context = self.stage === 'inputs' ? 's' : this.assign(this.nextId(), this.getHasOwnProperty('l', ast.name) + '?l:s'); - nameId.computed = false; - nameId.name = ast.name; - } - self.if_(self.stage === 'inputs' || self.not(self.getHasOwnProperty('l', ast.name)), - function() { - self.if_(self.stage === 'inputs' || 's', function() { - if (create && create !== 1) { - self.if_( - self.isNull(self.nonComputedMember('s', ast.name)), - self.lazyAssign(self.nonComputedMember('s', ast.name), '{}')); - } - self.assign(intoId, self.nonComputedMember('s', ast.name)); - }); - }, intoId && self.lazyAssign(intoId, self.nonComputedMember('l', ast.name)) - ); - recursionFn(intoId); - break; - case AST.MemberExpression: - left = nameId && (nameId.context = this.nextId()) || this.nextId(); - intoId = intoId || this.nextId(); - self.recurse(ast.object, left, undefined, function() { - self.if_(self.notNull(left), function() { - if (ast.computed) { - right = self.nextId(); - self.recurse(ast.property, right); - self.getStringValue(right); - if (create && create !== 1) { - self.if_(self.not(self.computedMember(left, right)), self.lazyAssign(self.computedMember(left, right), '{}')); - } - expression = self.computedMember(left, right); - self.assign(intoId, expression); - if (nameId) { - nameId.computed = true; - nameId.name = right; - } - } else { - if (create && create !== 1) { - self.if_(self.isNull(self.nonComputedMember(left, ast.property.name)), self.lazyAssign(self.nonComputedMember(left, ast.property.name), '{}')); - } - expression = self.nonComputedMember(left, ast.property.name); - self.assign(intoId, expression); - if (nameId) { - nameId.computed = false; - nameId.name = ast.property.name; - } - } - }, function() { - self.assign(intoId, 'undefined'); - }); - recursionFn(intoId); - }, !!create); - break; - case AST.CallExpression: - intoId = intoId || this.nextId(); - if (ast.filter) { - right = self.filter(ast.callee.name); - args = []; - forEach(ast.arguments, function(expr) { - var argument = self.nextId(); - self.recurse(expr, argument); - args.push(argument); - }); - expression = right + '(' + args.join(',') + ')'; - self.assign(intoId, expression); - recursionFn(intoId); - } else { - right = self.nextId(); - left = {}; - args = []; - self.recurse(ast.callee, right, left, function() { - self.if_(self.notNull(right), function() { - forEach(ast.arguments, function(expr) { - self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) { - args.push(argument); - }); - }); - if (left.name) { - expression = self.member(left.context, left.name, left.computed) + '(' + args.join(',') + ')'; - } else { - expression = right + '(' + args.join(',') + ')'; - } - self.assign(intoId, expression); - }, function() { - self.assign(intoId, 'undefined'); - }); - recursionFn(intoId); - }); - } - break; - case AST.AssignmentExpression: - right = this.nextId(); - left = {}; - this.recurse(ast.left, undefined, left, function() { - self.if_(self.notNull(left.context), function() { - self.recurse(ast.right, right); - expression = self.member(left.context, left.name, left.computed) + ast.operator + right; - self.assign(intoId, expression); - recursionFn(intoId || expression); - }); - }, 1); - break; - case AST.ArrayExpression: - args = []; - forEach(ast.elements, function(expr) { - self.recurse(expr, ast.constant ? undefined : self.nextId(), undefined, function(argument) { - args.push(argument); - }); - }); - expression = '[' + args.join(',') + ']'; - this.assign(intoId, expression); - recursionFn(intoId || expression); - break; - case AST.ObjectExpression: - args = []; - computed = false; - forEach(ast.properties, function(property) { - if (property.computed) { - computed = true; - } - }); - if (computed) { - intoId = intoId || this.nextId(); - this.assign(intoId, '{}'); - forEach(ast.properties, function(property) { - if (property.computed) { - left = self.nextId(); - self.recurse(property.key, left); - } else { - left = property.key.type === AST.Identifier ? - property.key.name : - ('' + property.key.value); - } - right = self.nextId(); - self.recurse(property.value, right); - self.assign(self.member(intoId, left, property.computed), right); - }); - } else { - forEach(ast.properties, function(property) { - self.recurse(property.value, ast.constant ? undefined : self.nextId(), undefined, function(expr) { - args.push(self.escape( - property.key.type === AST.Identifier ? property.key.name : - ('' + property.key.value)) + - ':' + expr); - }); - }); - expression = '{' + args.join(',') + '}'; - this.assign(intoId, expression); - } - recursionFn(intoId || expression); - break; - case AST.ThisExpression: - this.assign(intoId, 's'); - recursionFn(intoId || 's'); - break; - case AST.LocalsExpression: - this.assign(intoId, 'l'); - recursionFn(intoId || 'l'); - break; - case AST.NGValueParameter: - this.assign(intoId, 'v'); - recursionFn(intoId || 'v'); - break; - } - }, - - getHasOwnProperty: function(element, property) { - var key = element + '.' + property; - var own = this.current().own; - if (!own.hasOwnProperty(key)) { - own[key] = this.nextId(false, element + '&&(' + this.escape(property) + ' in ' + element + ')'); - } - return own[key]; - }, - - assign: function(id, value) { - if (!id) return; - this.current().body.push(id, '=', value, ';'); - return id; - }, - - filter: function(filterName) { - if (!this.state.filters.hasOwnProperty(filterName)) { - this.state.filters[filterName] = this.nextId(true); - } - return this.state.filters[filterName]; - }, - - ifDefined: function(id, defaultValue) { - return 'ifDefined(' + id + ',' + this.escape(defaultValue) + ')'; - }, - - plus: function(left, right) { - return 'plus(' + left + ',' + right + ')'; - }, - - return_: function(id) { - this.current().body.push('return ', id, ';'); - }, - - if_: function(test, alternate, consequent) { - if (test === true) { - alternate(); - } else { - var body = this.current().body; - body.push('if(', test, '){'); - alternate(); - body.push('}'); - if (consequent) { - body.push('else{'); - consequent(); - body.push('}'); - } - } - }, - - not: function(expression) { - return '!(' + expression + ')'; - }, - - isNull: function(expression) { - return expression + '==null'; - }, - - notNull: function(expression) { - return expression + '!=null'; - }, - - nonComputedMember: function(left, right) { - var SAFE_IDENTIFIER = /^[$_a-zA-Z][$_a-zA-Z0-9]*$/; - var UNSAFE_CHARACTERS = /[^$_a-zA-Z0-9]/g; - if (SAFE_IDENTIFIER.test(right)) { - return left + '.' + right; - } else { - return left + '["' + right.replace(UNSAFE_CHARACTERS, this.stringEscapeFn) + '"]'; - } - }, - - computedMember: function(left, right) { - return left + '[' + right + ']'; - }, - - member: function(left, right, computed) { - if (computed) return this.computedMember(left, right); - return this.nonComputedMember(left, right); - }, - - getStringValue: function(item) { - this.assign(item, 'getStringValue(' + item + ')'); - }, - - lazyRecurse: function(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck) { - var self = this; - return function() { - self.recurse(ast, intoId, nameId, recursionFn, create, skipWatchIdCheck); - }; - }, - - lazyAssign: function(id, value) { - var self = this; - return function() { - self.assign(id, value); - }; - }, - - stringEscapeRegex: /[^ a-zA-Z0-9]/g, - - stringEscapeFn: function(c) { - return '\\u' + ('0000' + c.charCodeAt(0).toString(16)).slice(-4); - }, - - escape: function(value) { - if (isString(value)) return '\'' + value.replace(this.stringEscapeRegex, this.stringEscapeFn) + '\''; - if (isNumber(value)) return value.toString(); - if (value === true) return 'true'; - if (value === false) return 'false'; - if (value === null) return 'null'; - if (typeof value === 'undefined') return 'undefined'; - - throw $parseMinErr('esc', 'IMPOSSIBLE'); - }, - - nextId: function(skip, init) { - var id = 'v' + (this.state.nextId++); - if (!skip) { - this.current().vars.push(id + (init ? '=' + init : '')); - } - return id; - }, - - current: function() { - return this.state[this.state.computing]; - } -}; - - -function ASTInterpreter($filter) { - this.$filter = $filter; -} - -ASTInterpreter.prototype = { - compile: function(ast) { - var self = this; - findConstantAndWatchExpressions(ast, self.$filter); - var assignable; - var assign; - if ((assignable = assignableAST(ast))) { - assign = this.recurse(assignable); - } - var toWatch = getInputs(ast.body); - var inputs; - if (toWatch) { - inputs = []; - forEach(toWatch, function(watch, key) { - var input = self.recurse(watch); - input.isPure = watch.isPure; - watch.input = input; - inputs.push(input); - watch.watchId = key; - }); - } - var expressions = []; - forEach(ast.body, function(expression) { - expressions.push(self.recurse(expression.expression)); - }); - var fn = ast.body.length === 0 ? noop : - ast.body.length === 1 ? expressions[0] : - function(scope, locals) { - var lastValue; - forEach(expressions, function(exp) { - lastValue = exp(scope, locals); - }); - return lastValue; - }; - if (assign) { - fn.assign = function(scope, value, locals) { - return assign(scope, locals, value); - }; - } - if (inputs) { - fn.inputs = inputs; - } - return fn; - }, - - recurse: function(ast, context, create) { - var left, right, self = this, args; - if (ast.input) { - return this.inputs(ast.input, ast.watchId); - } - switch (ast.type) { - case AST.Literal: - return this.value(ast.value, context); - case AST.UnaryExpression: - right = this.recurse(ast.argument); - return this['unary' + ast.operator](right, context); - case AST.BinaryExpression: - left = this.recurse(ast.left); - right = this.recurse(ast.right); - return this['binary' + ast.operator](left, right, context); - case AST.LogicalExpression: - left = this.recurse(ast.left); - right = this.recurse(ast.right); - return this['binary' + ast.operator](left, right, context); - case AST.ConditionalExpression: - return this['ternary?:']( - this.recurse(ast.test), - this.recurse(ast.alternate), - this.recurse(ast.consequent), - context - ); - case AST.Identifier: - return self.identifier(ast.name, context, create); - case AST.MemberExpression: - left = this.recurse(ast.object, false, !!create); - if (!ast.computed) { - right = ast.property.name; - } - if (ast.computed) right = this.recurse(ast.property); - return ast.computed ? - this.computedMember(left, right, context, create) : - this.nonComputedMember(left, right, context, create); - case AST.CallExpression: - args = []; - forEach(ast.arguments, function(expr) { - args.push(self.recurse(expr)); - }); - if (ast.filter) right = this.$filter(ast.callee.name); - if (!ast.filter) right = this.recurse(ast.callee, true); - return ast.filter ? - function(scope, locals, assign, inputs) { - var values = []; - for (var i = 0; i < args.length; ++i) { - values.push(args[i](scope, locals, assign, inputs)); - } - var value = right.apply(undefined, values, inputs); - return context ? {context: undefined, name: undefined, value: value} : value; - } : - function(scope, locals, assign, inputs) { - var rhs = right(scope, locals, assign, inputs); - var value; - if (rhs.value != null) { - var values = []; - for (var i = 0; i < args.length; ++i) { - values.push(args[i](scope, locals, assign, inputs)); - } - value = rhs.value.apply(rhs.context, values); - } - return context ? {value: value} : value; - }; - case AST.AssignmentExpression: - left = this.recurse(ast.left, true, 1); - right = this.recurse(ast.right); - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - lhs.context[lhs.name] = rhs; - return context ? {value: rhs} : rhs; - }; - case AST.ArrayExpression: - args = []; - forEach(ast.elements, function(expr) { - args.push(self.recurse(expr)); - }); - return function(scope, locals, assign, inputs) { - var value = []; - for (var i = 0; i < args.length; ++i) { - value.push(args[i](scope, locals, assign, inputs)); - } - return context ? {value: value} : value; - }; - case AST.ObjectExpression: - args = []; - forEach(ast.properties, function(property) { - if (property.computed) { - args.push({key: self.recurse(property.key), - computed: true, - value: self.recurse(property.value) - }); - } else { - args.push({key: property.key.type === AST.Identifier ? - property.key.name : - ('' + property.key.value), - computed: false, - value: self.recurse(property.value) - }); - } - }); - return function(scope, locals, assign, inputs) { - var value = {}; - for (var i = 0; i < args.length; ++i) { - if (args[i].computed) { - value[args[i].key(scope, locals, assign, inputs)] = args[i].value(scope, locals, assign, inputs); - } else { - value[args[i].key] = args[i].value(scope, locals, assign, inputs); - } - } - return context ? {value: value} : value; - }; - case AST.ThisExpression: - return function(scope) { - return context ? {value: scope} : scope; - }; - case AST.LocalsExpression: - return function(scope, locals) { - return context ? {value: locals} : locals; - }; - case AST.NGValueParameter: - return function(scope, locals, assign) { - return context ? {value: assign} : assign; - }; - } - }, - - 'unary+': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = argument(scope, locals, assign, inputs); - if (isDefined(arg)) { - arg = +arg; - } else { - arg = 0; - } - return context ? {value: arg} : arg; - }; - }, - 'unary-': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = argument(scope, locals, assign, inputs); - if (isDefined(arg)) { - arg = -arg; - } else { - arg = -0; - } - return context ? {value: arg} : arg; - }; - }, - 'unary!': function(argument, context) { - return function(scope, locals, assign, inputs) { - var arg = !argument(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary+': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - var arg = plusFn(lhs, rhs); - return context ? {value: arg} : arg; - }; - }, - 'binary-': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs = right(scope, locals, assign, inputs); - var arg = (isDefined(lhs) ? lhs : 0) - (isDefined(rhs) ? rhs : 0); - return context ? {value: arg} : arg; - }; - }, - 'binary*': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) * right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary/': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) / right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary%': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) % right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary===': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) === right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary!==': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) !== right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary==': function(left, right, context) { - return function(scope, locals, assign, inputs) { - // eslint-disable-next-line eqeqeq - var arg = left(scope, locals, assign, inputs) == right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary!=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - // eslint-disable-next-line eqeqeq - var arg = left(scope, locals, assign, inputs) != right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary<': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) < right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary>': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) > right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary<=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) <= right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary>=': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) >= right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary&&': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) && right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'binary||': function(left, right, context) { - return function(scope, locals, assign, inputs) { - var arg = left(scope, locals, assign, inputs) || right(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - 'ternary?:': function(test, alternate, consequent, context) { - return function(scope, locals, assign, inputs) { - var arg = test(scope, locals, assign, inputs) ? alternate(scope, locals, assign, inputs) : consequent(scope, locals, assign, inputs); - return context ? {value: arg} : arg; - }; - }, - value: function(value, context) { - return function() { return context ? {context: undefined, name: undefined, value: value} : value; }; - }, - identifier: function(name, context, create) { - return function(scope, locals, assign, inputs) { - var base = locals && (name in locals) ? locals : scope; - if (create && create !== 1 && base && base[name] == null) { - base[name] = {}; - } - var value = base ? base[name] : undefined; - if (context) { - return {context: base, name: name, value: value}; - } else { - return value; - } - }; - }, - computedMember: function(left, right, context, create) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - var rhs; - var value; - if (lhs != null) { - rhs = right(scope, locals, assign, inputs); - rhs = getStringValue(rhs); - if (create && create !== 1) { - if (lhs && !(lhs[rhs])) { - lhs[rhs] = {}; - } - } - value = lhs[rhs]; - } - if (context) { - return {context: lhs, name: rhs, value: value}; - } else { - return value; - } - }; - }, - nonComputedMember: function(left, right, context, create) { - return function(scope, locals, assign, inputs) { - var lhs = left(scope, locals, assign, inputs); - if (create && create !== 1) { - if (lhs && lhs[right] == null) { - lhs[right] = {}; - } - } - var value = lhs != null ? lhs[right] : undefined; - if (context) { - return {context: lhs, name: right, value: value}; - } else { - return value; - } - }; - }, - inputs: function(input, watchId) { - return function(scope, value, locals, inputs) { - if (inputs) return inputs[watchId]; - return input(scope, value, locals); - }; - } -}; - -/** - * @constructor - */ -function Parser(lexer, $filter, options) { - this.ast = new AST(lexer, options); - this.astCompiler = options.csp ? new ASTInterpreter($filter) : - new ASTCompiler($filter); -} - -Parser.prototype = { - constructor: Parser, - - parse: function(text) { - var ast = this.getAst(text); - var fn = this.astCompiler.compile(ast.ast); - fn.literal = isLiteral(ast.ast); - fn.constant = isConstant(ast.ast); - fn.oneTime = ast.oneTime; - return fn; - }, - - getAst: function(exp) { - var oneTime = false; - exp = exp.trim(); - - if (exp.charAt(0) === ':' && exp.charAt(1) === ':') { - oneTime = true; - exp = exp.substring(2); - } - return { - ast: this.ast.ast(exp), - oneTime: oneTime - }; - } -}; - -function getValueOf(value) { - return isFunction(value.valueOf) ? value.valueOf() : objectValueOf.call(value); -} - -/////////////////////////////////// - -/** - * @ngdoc service - * @name $parse - * @kind function - * - * @description - * - * Converts AngularJS {@link guide/expression expression} into a function. - * - * ```js - * var getter = $parse('user.name'); - * var setter = getter.assign; - * var context = {user:{name:'AngularJS'}}; - * var locals = {user:{name:'local'}}; - * - * expect(getter(context)).toEqual('AngularJS'); - * setter(context, 'newValue'); - * expect(context.user.name).toEqual('newValue'); - * expect(getter(context, locals)).toEqual('local'); - * ``` - * - * - * @param {string} expression String expression to compile. - * @returns {function(context, locals)} a function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the strings - * are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values in - * `context`. - * - * The returned function also has the following properties: - * * `literal` – `{boolean}` – whether the expression's top-level node is a JavaScript - * literal. - * * `constant` – `{boolean}` – whether the expression is made entirely of JavaScript - * constant literals. - * * `assign` – `{?function(context, value)}` – if the expression is assignable, this will be - * set to a function to change its value on the given context. - * - */ - - -/** - * @ngdoc provider - * @name $parseProvider - * @this - * - * @description - * `$parseProvider` can be used for configuring the default behavior of the {@link ng.$parse $parse} - * service. - */ -function $ParseProvider() { - var cache = createMap(); - var literals = { - 'true': true, - 'false': false, - 'null': null, - 'undefined': undefined - }; - var identStart, identContinue; - - /** - * @ngdoc method - * @name $parseProvider#addLiteral - * @description - * - * Configure $parse service to add literal values that will be present as literal at expressions. - * - * @param {string} literalName Token for the literal value. The literal name value must be a valid literal name. - * @param {*} literalValue Value for this literal. All literal values must be primitives or `undefined`. - * - **/ - this.addLiteral = function(literalName, literalValue) { - literals[literalName] = literalValue; - }; - - /** - * @ngdoc method - * @name $parseProvider#setIdentifierFns - * - * @description - * - * Allows defining the set of characters that are allowed in AngularJS expressions. The function - * `identifierStart` will get called to know if a given character is a valid character to be the - * first character for an identifier. The function `identifierContinue` will get called to know if - * a given character is a valid character to be a follow-up identifier character. The functions - * `identifierStart` and `identifierContinue` will receive as arguments the single character to be - * identifier and the character code point. These arguments will be `string` and `numeric`. Keep in - * mind that the `string` parameter can be two characters long depending on the character - * representation. It is expected for the function to return `true` or `false`, whether that - * character is allowed or not. - * - * Since this function will be called extensively, keep the implementation of these functions fast, - * as the performance of these functions have a direct impact on the expressions parsing speed. - * - * @param {function=} identifierStart The function that will decide whether the given character is - * a valid identifier start character. - * @param {function=} identifierContinue The function that will decide whether the given character is - * a valid identifier continue character. - */ - this.setIdentifierFns = function(identifierStart, identifierContinue) { - identStart = identifierStart; - identContinue = identifierContinue; - return this; - }; - - this.$get = ['$filter', function($filter) { - var noUnsafeEval = csp().noUnsafeEval; - var $parseOptions = { - csp: noUnsafeEval, - literals: copy(literals), - isIdentifierStart: isFunction(identStart) && identStart, - isIdentifierContinue: isFunction(identContinue) && identContinue - }; - $parse.$$getAst = $$getAst; - return $parse; - - function $parse(exp, interceptorFn) { - var parsedExpression, cacheKey; - - switch (typeof exp) { - case 'string': - exp = exp.trim(); - cacheKey = exp; - - parsedExpression = cache[cacheKey]; - - if (!parsedExpression) { - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - parsedExpression = parser.parse(exp); - - cache[cacheKey] = addWatchDelegate(parsedExpression); - } - return addInterceptor(parsedExpression, interceptorFn); - - case 'function': - return addInterceptor(exp, interceptorFn); - - default: - return addInterceptor(noop, interceptorFn); - } - } - - function $$getAst(exp) { - var lexer = new Lexer($parseOptions); - var parser = new Parser(lexer, $filter, $parseOptions); - return parser.getAst(exp).ast; - } - - function expressionInputDirtyCheck(newValue, oldValueOfValue, compareObjectIdentity) { - - if (newValue == null || oldValueOfValue == null) { // null/undefined - return newValue === oldValueOfValue; - } - - if (typeof newValue === 'object') { - - // attempt to convert the value to a primitive type - // TODO(docs): add a note to docs that by implementing valueOf even objects and arrays can - // be cheaply dirty-checked - newValue = getValueOf(newValue); - - if (typeof newValue === 'object' && !compareObjectIdentity) { - // objects/arrays are not supported - deep-watching them would be too expensive - return false; - } - - // fall-through to the primitive equality check - } - - //Primitive or NaN - // eslint-disable-next-line no-self-compare - return newValue === oldValueOfValue || (newValue !== newValue && oldValueOfValue !== oldValueOfValue); - } - - function inputsWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) { - var inputExpressions = parsedExpression.inputs; - var lastResult; - - if (inputExpressions.length === 1) { - var oldInputValueOf = expressionInputDirtyCheck; // init to something unique so that equals check fails - inputExpressions = inputExpressions[0]; - return scope.$watch(function expressionInputWatch(scope) { - var newInputValue = inputExpressions(scope); - if (!expressionInputDirtyCheck(newInputValue, oldInputValueOf, inputExpressions.isPure)) { - lastResult = parsedExpression(scope, undefined, undefined, [newInputValue]); - oldInputValueOf = newInputValue && getValueOf(newInputValue); - } - return lastResult; - }, listener, objectEquality, prettyPrintExpression); - } - - var oldInputValueOfValues = []; - var oldInputValues = []; - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - oldInputValueOfValues[i] = expressionInputDirtyCheck; // init to something unique so that equals check fails - oldInputValues[i] = null; - } - - return scope.$watch(function expressionInputsWatch(scope) { - var changed = false; - - for (var i = 0, ii = inputExpressions.length; i < ii; i++) { - var newInputValue = inputExpressions[i](scope); - if (changed || (changed = !expressionInputDirtyCheck(newInputValue, oldInputValueOfValues[i], inputExpressions[i].isPure))) { - oldInputValues[i] = newInputValue; - oldInputValueOfValues[i] = newInputValue && getValueOf(newInputValue); - } - } - - if (changed) { - lastResult = parsedExpression(scope, undefined, undefined, oldInputValues); - } - - return lastResult; - }, listener, objectEquality, prettyPrintExpression); - } - - function oneTimeWatchDelegate(scope, listener, objectEquality, parsedExpression, prettyPrintExpression) { - var isDone = parsedExpression.literal ? isAllDefined : isDefined; - var unwatch, lastValue; - - var exp = parsedExpression.$$intercepted || parsedExpression; - var post = parsedExpression.$$interceptor || identity; - - var useInputs = parsedExpression.inputs && !exp.inputs; - - // Propogate the literal/inputs/constant attributes - // ... but not oneTime since we are handling it - oneTimeWatch.literal = parsedExpression.literal; - oneTimeWatch.constant = parsedExpression.constant; - oneTimeWatch.inputs = parsedExpression.inputs; - - // Allow other delegates to run on this wrapped expression - addWatchDelegate(oneTimeWatch); - - unwatch = scope.$watch(oneTimeWatch, listener, objectEquality, prettyPrintExpression); - - return unwatch; - - function unwatchIfDone() { - if (isDone(lastValue)) { - unwatch(); - } - } - - function oneTimeWatch(scope, locals, assign, inputs) { - lastValue = useInputs && inputs ? inputs[0] : exp(scope, locals, assign, inputs); - if (isDone(lastValue)) { - scope.$$postDigest(unwatchIfDone); - } - return post(lastValue); - } - } - - function isAllDefined(value) { - var allDefined = true; - forEach(value, function(val) { - if (!isDefined(val)) allDefined = false; - }); - return allDefined; - } - - function constantWatchDelegate(scope, listener, objectEquality, parsedExpression) { - var unwatch = scope.$watch(function constantWatch(scope) { - unwatch(); - return parsedExpression(scope); - }, listener, objectEquality); - return unwatch; - } - - function addWatchDelegate(parsedExpression) { - if (parsedExpression.constant) { - parsedExpression.$$watchDelegate = constantWatchDelegate; - } else if (parsedExpression.oneTime) { - parsedExpression.$$watchDelegate = oneTimeWatchDelegate; - } else if (parsedExpression.inputs) { - parsedExpression.$$watchDelegate = inputsWatchDelegate; - } - - return parsedExpression; - } - - function chainInterceptors(first, second) { - function chainedInterceptor(value) { - return second(first(value)); - } - chainedInterceptor.$stateful = first.$stateful || second.$stateful; - chainedInterceptor.$$pure = first.$$pure && second.$$pure; - - return chainedInterceptor; - } - - function addInterceptor(parsedExpression, interceptorFn) { - if (!interceptorFn) return parsedExpression; - - // Extract any existing interceptors out of the parsedExpression - // to ensure the original parsedExpression is always the $$intercepted - if (parsedExpression.$$interceptor) { - interceptorFn = chainInterceptors(parsedExpression.$$interceptor, interceptorFn); - parsedExpression = parsedExpression.$$intercepted; - } - - var useInputs = false; - - var fn = function interceptedExpression(scope, locals, assign, inputs) { - var value = useInputs && inputs ? inputs[0] : parsedExpression(scope, locals, assign, inputs); - return interceptorFn(value); - }; - - // Maintain references to the interceptor/intercepted - fn.$$intercepted = parsedExpression; - fn.$$interceptor = interceptorFn; - - // Propogate the literal/oneTime/constant attributes - fn.literal = parsedExpression.literal; - fn.oneTime = parsedExpression.oneTime; - fn.constant = parsedExpression.constant; - - // Treat the interceptor like filters. - // If it is not $stateful then only watch its inputs. - // If the expression itself has no inputs then use the full expression as an input. - if (!interceptorFn.$stateful) { - useInputs = !parsedExpression.inputs; - fn.inputs = parsedExpression.inputs ? parsedExpression.inputs : [parsedExpression]; - - if (!interceptorFn.$$pure) { - fn.inputs = fn.inputs.map(function(e) { - // Remove the isPure flag of inputs when it is not absolute because they are now wrapped in a - // non-pure interceptor function. - if (e.isPure === PURITY_RELATIVE) { - return function depurifier(s) { return e(s); }; - } - return e; - }); - } - } - - return addWatchDelegate(fn); - } - }]; -} - -/** - * @ngdoc service - * @name $q - * @requires $rootScope - * - * @description - * A service that helps you run functions asynchronously, and use their return values (or exceptions) - * when they are done processing. - * - * This is a [Promises/A+](https://promisesaplus.com/)-compliant implementation of promises/deferred - * objects inspired by [Kris Kowal's Q](https://github.com/kriskowal/q). - * - * $q can be used in two fashions --- one which is more similar to Kris Kowal's Q or jQuery's Deferred - * implementations, and the other which resembles ES6 (ES2015) promises to some degree. - * - * ## $q constructor - * - * The streamlined ES6 style promise is essentially just using $q as a constructor which takes a `resolver` - * function as the first argument. This is similar to the native Promise implementation from ES6, - * see [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise). - * - * While the constructor-style use is supported, not all of the supporting methods from ES6 promises are - * available yet. - * - * It can be used like so: - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * // perform some asynchronous operation, resolve or reject the promise when appropriate. - * return $q(function(resolve, reject) { - * setTimeout(function() { - * if (okToGreet(name)) { - * resolve('Hello, ' + name + '!'); - * } else { - * reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * }); - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }); - * ``` - * - * Note: progress/notify callbacks are not currently supported via the ES6-style interface. - * - * Note: unlike ES6 behavior, an exception thrown in the constructor function will NOT implicitly reject the promise. - * - * However, the more traditional CommonJS-style usage is still available, and documented below. - * - * [The CommonJS Promise proposal](http://wiki.commonjs.org/wiki/Promises) describes a promise as an - * interface for interacting with an object that represents the result of an action that is - * performed asynchronously, and may or may not be finished at any given point in time. - * - * From the perspective of dealing with error handling, deferred and promise APIs are to - * asynchronous programming what `try`, `catch` and `throw` keywords are to synchronous programming. - * - * ```js - * // for the purpose of this example let's assume that variables `$q` and `okToGreet` - * // are available in the current lexical scope (they could have been injected or passed in). - * - * function asyncGreet(name) { - * var deferred = $q.defer(); - * - * setTimeout(function() { - * deferred.notify('About to greet ' + name + '.'); - * - * if (okToGreet(name)) { - * deferred.resolve('Hello, ' + name + '!'); - * } else { - * deferred.reject('Greeting ' + name + ' is not allowed.'); - * } - * }, 1000); - * - * return deferred.promise; - * } - * - * var promise = asyncGreet('Robin Hood'); - * promise.then(function(greeting) { - * alert('Success: ' + greeting); - * }, function(reason) { - * alert('Failed: ' + reason); - * }, function(update) { - * alert('Got notification: ' + update); - * }); - * ``` - * - * At first it might not be obvious why this extra complexity is worth the trouble. The payoff - * comes in the way of guarantees that promise and deferred APIs make, see - * https://github.com/kriskowal/uncommonjs/blob/master/promises/specification.md. - * - * Additionally the promise api allows for composition that is very hard to do with the - * traditional callback ([CPS](http://en.wikipedia.org/wiki/Continuation-passing_style)) approach. - * For more on this please see the [Q documentation](https://github.com/kriskowal/q) especially the - * section on serial or parallel joining of promises. - * - * ## The Deferred API - * - * A new instance of deferred is constructed by calling `$q.defer()`. - * - * The purpose of the deferred object is to expose the associated Promise instance as well as APIs - * that can be used for signaling the successful or unsuccessful completion, as well as the status - * of the task. - * - * **Methods** - * - * - `resolve(value)` – resolves the derived promise with the `value`. If the value is a rejection - * constructed via `$q.reject`, the promise will be rejected instead. - * - `reject(reason)` – rejects the derived promise with the `reason`. This is equivalent to - * resolving it with a rejection constructed via `$q.reject`. - * - `notify(value)` - provides updates on the status of the promise's execution. This may be called - * multiple times before the promise is either resolved or rejected. - * - * **Properties** - * - * - promise – `{Promise}` – promise object associated with this deferred. - * - * - * ## The Promise API - * - * A new promise instance is created when a deferred instance is created and can be retrieved by - * calling `deferred.promise`. - * - * The purpose of the promise object is to allow for interested parties to get access to the result - * of the deferred task when it completes. - * - * **Methods** - * - * - `then(successCallback, [errorCallback], [notifyCallback])` – regardless of when the promise was or - * will be resolved or rejected, `then` calls one of the success or error callbacks asynchronously - * as soon as the result is available. The callbacks are called with a single argument: the result - * or rejection reason. Additionally, the notify callback may be called zero or more times to - * provide a progress indication, before the promise is resolved or rejected. - * - * This method *returns a new promise* which is resolved or rejected via the return value of the - * `successCallback`, `errorCallback` (unless that value is a promise, in which case it is resolved - * with the value which is resolved in that promise using - * [promise chaining](http://www.html5rocks.com/en/tutorials/es6/promises/#toc-promises-queues)). - * It also notifies via the return value of the `notifyCallback` method. The promise cannot be - * resolved or rejected from the notifyCallback method. The errorCallback and notifyCallback - * arguments are optional. - * - * - `catch(errorCallback)` – shorthand for `promise.then(null, errorCallback)` - * - * - `finally(callback, notifyCallback)` – allows you to observe either the fulfillment or rejection of a promise, - * but to do so without modifying the final value. This is useful to release resources or do some - * clean-up that needs to be done whether the promise was rejected or resolved. See the [full - * specification](https://github.com/kriskowal/q/wiki/API-Reference#promisefinallycallback) for - * more information. - * - * ## Chaining promises - * - * Because calling the `then` method of a promise returns a new derived promise, it is easily - * possible to create a chain of promises: - * - * ```js - * promiseB = promiseA.then(function(result) { - * return result + 1; - * }); - * - * // promiseB will be resolved immediately after promiseA is resolved and its value - * // will be the result of promiseA incremented by 1 - * ``` - * - * It is possible to create chains of any length and since a promise can be resolved with another - * promise (which will defer its resolution further), it is possible to pause/defer resolution of - * the promises at any point in the chain. This makes it possible to implement powerful APIs like - * $http's response interceptors. - * - * - * ## Differences between Kris Kowal's Q and $q - * - * There are two main differences: - * - * - $q is integrated with the {@link ng.$rootScope.Scope} Scope model observation - * mechanism in AngularJS, which means faster propagation of resolution or rejection into your - * models and avoiding unnecessary browser repaints, which would result in flickering UI. - * - Q has many more features than $q, but that comes at a cost of bytes. $q is tiny, but contains - * all the important functionality needed for common async tasks. - * - * ## Testing - * - * ```js - * it('should simulate promise', inject(function($q, $rootScope) { - * var deferred = $q.defer(); - * var promise = deferred.promise; - * var resolvedValue; - * - * promise.then(function(value) { resolvedValue = value; }); - * expect(resolvedValue).toBeUndefined(); - * - * // Simulate resolving of promise - * deferred.resolve(123); - * // Note that the 'then' function does not get called synchronously. - * // This is because we want the promise API to always be async, whether or not - * // it got called synchronously or asynchronously. - * expect(resolvedValue).toBeUndefined(); - * - * // Propagate promise resolution to 'then' functions using $apply(). - * $rootScope.$apply(); - * expect(resolvedValue).toEqual(123); - * })); - * ``` - * - * @param {function(function, function)} resolver Function which is responsible for resolving or - * rejecting the newly created promise. The first parameter is a function which resolves the - * promise, the second parameter is a function which rejects the promise. - * - * @returns {Promise} The newly created promise. - */ -/** - * @ngdoc provider - * @name $qProvider - * @this - * - * @description - */ -function $QProvider() { - var errorOnUnhandledRejections = true; - this.$get = ['$rootScope', '$exceptionHandler', function($rootScope, $exceptionHandler) { - return qFactory(function(callback) { - $rootScope.$evalAsync(callback); - }, $exceptionHandler, errorOnUnhandledRejections); - }]; - - /** - * @ngdoc method - * @name $qProvider#errorOnUnhandledRejections - * @kind function - * - * @description - * Retrieves or overrides whether to generate an error when a rejected promise is not handled. - * This feature is enabled by default. - * - * @param {boolean=} value Whether to generate an error when a rejected promise is not handled. - * @returns {boolean|ng.$qProvider} Current value when called without a new value or self for - * chaining otherwise. - */ - this.errorOnUnhandledRejections = function(value) { - if (isDefined(value)) { - errorOnUnhandledRejections = value; - return this; - } else { - return errorOnUnhandledRejections; - } - }; -} - -/** @this */ -function $$QProvider() { - var errorOnUnhandledRejections = true; - this.$get = ['$browser', '$exceptionHandler', function($browser, $exceptionHandler) { - return qFactory(function(callback) { - $browser.defer(callback); - }, $exceptionHandler, errorOnUnhandledRejections); - }]; - - this.errorOnUnhandledRejections = function(value) { - if (isDefined(value)) { - errorOnUnhandledRejections = value; - return this; - } else { - return errorOnUnhandledRejections; - } - }; -} - -/** - * Constructs a promise manager. - * - * @param {function(function)} nextTick Function for executing functions in the next turn. - * @param {function(...*)} exceptionHandler Function into which unexpected exceptions are passed for - * debugging purposes. - * @param {boolean=} errorOnUnhandledRejections Whether an error should be generated on unhandled - * promises rejections. - * @returns {object} Promise manager. - */ -function qFactory(nextTick, exceptionHandler, errorOnUnhandledRejections) { - var $qMinErr = minErr('$q', TypeError); - var queueSize = 0; - var checkQueue = []; - - /** - * @ngdoc method - * @name ng.$q#defer - * @kind function - * - * @description - * Creates a `Deferred` object which represents a task which will finish in the future. - * - * @returns {Deferred} Returns a new instance of deferred. - */ - function defer() { - return new Deferred(); - } - - function Deferred() { - var promise = this.promise = new Promise(); - //Non prototype methods necessary to support unbound execution :/ - this.resolve = function(val) { resolvePromise(promise, val); }; - this.reject = function(reason) { rejectPromise(promise, reason); }; - this.notify = function(progress) { notifyPromise(promise, progress); }; - } - - - function Promise() { - this.$$state = { status: 0 }; - } - - extend(Promise.prototype, { - then: function(onFulfilled, onRejected, progressBack) { - if (isUndefined(onFulfilled) && isUndefined(onRejected) && isUndefined(progressBack)) { - return this; - } - var result = new Promise(); - - this.$$state.pending = this.$$state.pending || []; - this.$$state.pending.push([result, onFulfilled, onRejected, progressBack]); - if (this.$$state.status > 0) scheduleProcessQueue(this.$$state); - - return result; - }, - - 'catch': function(callback) { - return this.then(null, callback); - }, - - 'finally': function(callback, progressBack) { - return this.then(function(value) { - return handleCallback(value, resolve, callback); - }, function(error) { - return handleCallback(error, reject, callback); - }, progressBack); - } - }); - - function processQueue(state) { - var fn, promise, pending; - - pending = state.pending; - state.processScheduled = false; - state.pending = undefined; - try { - for (var i = 0, ii = pending.length; i < ii; ++i) { - markQStateExceptionHandled(state); - promise = pending[i][0]; - fn = pending[i][state.status]; - try { - if (isFunction(fn)) { - resolvePromise(promise, fn(state.value)); - } else if (state.status === 1) { - resolvePromise(promise, state.value); - } else { - rejectPromise(promise, state.value); - } - } catch (e) { - rejectPromise(promise, e); - // This error is explicitly marked for being passed to the $exceptionHandler - if (e && e.$$passToExceptionHandler === true) { - exceptionHandler(e); - } - } - } - } finally { - --queueSize; - if (errorOnUnhandledRejections && queueSize === 0) { - nextTick(processChecks); - } - } - } - - function processChecks() { - // eslint-disable-next-line no-unmodified-loop-condition - while (!queueSize && checkQueue.length) { - var toCheck = checkQueue.shift(); - if (!isStateExceptionHandled(toCheck)) { - markQStateExceptionHandled(toCheck); - var errorMessage = 'Possibly unhandled rejection: ' + toDebugString(toCheck.value); - if (isError(toCheck.value)) { - exceptionHandler(toCheck.value, errorMessage); - } else { - exceptionHandler(errorMessage); - } - } - } - } - - function scheduleProcessQueue(state) { - if (errorOnUnhandledRejections && !state.pending && state.status === 2 && !isStateExceptionHandled(state)) { - if (queueSize === 0 && checkQueue.length === 0) { - nextTick(processChecks); - } - checkQueue.push(state); - } - if (state.processScheduled || !state.pending) return; - state.processScheduled = true; - ++queueSize; - nextTick(function() { processQueue(state); }); - } - - function resolvePromise(promise, val) { - if (promise.$$state.status) return; - if (val === promise) { - $$reject(promise, $qMinErr( - 'qcycle', - 'Expected promise to be resolved with value other than itself \'{0}\'', - val)); - } else { - $$resolve(promise, val); - } - - } - - function $$resolve(promise, val) { - var then; - var done = false; - try { - if (isObject(val) || isFunction(val)) then = val.then; - if (isFunction(then)) { - promise.$$state.status = -1; - then.call(val, doResolve, doReject, doNotify); - } else { - promise.$$state.value = val; - promise.$$state.status = 1; - scheduleProcessQueue(promise.$$state); - } - } catch (e) { - doReject(e); - } - - function doResolve(val) { - if (done) return; - done = true; - $$resolve(promise, val); - } - function doReject(val) { - if (done) return; - done = true; - $$reject(promise, val); - } - function doNotify(progress) { - notifyPromise(promise, progress); - } - } - - function rejectPromise(promise, reason) { - if (promise.$$state.status) return; - $$reject(promise, reason); - } - - function $$reject(promise, reason) { - promise.$$state.value = reason; - promise.$$state.status = 2; - scheduleProcessQueue(promise.$$state); - } - - function notifyPromise(promise, progress) { - var callbacks = promise.$$state.pending; - - if ((promise.$$state.status <= 0) && callbacks && callbacks.length) { - nextTick(function() { - var callback, result; - for (var i = 0, ii = callbacks.length; i < ii; i++) { - result = callbacks[i][0]; - callback = callbacks[i][3]; - try { - notifyPromise(result, isFunction(callback) ? callback(progress) : progress); - } catch (e) { - exceptionHandler(e); - } - } - }); - } - } - - /** - * @ngdoc method - * @name $q#reject - * @kind function - * - * @description - * Creates a promise that is resolved as rejected with the specified `reason`. This api should be - * used to forward rejection in a chain of promises. If you are dealing with the last promise in - * a promise chain, you don't need to worry about it. - * - * When comparing deferreds/promises to the familiar behavior of try/catch/throw, think of - * `reject` as the `throw` keyword in JavaScript. This also means that if you "catch" an error via - * a promise error callback and you want to forward the error to the promise derived from the - * current promise, you have to "rethrow" the error by returning a rejection constructed via - * `reject`. - * - * ```js - * promiseB = promiseA.then(function(result) { - * // success: do something and resolve promiseB - * // with the old or a new result - * return result; - * }, function(reason) { - * // error: handle the error if possible and - * // resolve promiseB with newPromiseOrValue, - * // otherwise forward the rejection to promiseB - * if (canHandle(reason)) { - * // handle the error and recover - * return newPromiseOrValue; - * } - * return $q.reject(reason); - * }); - * ``` - * - * @param {*} reason Constant, message, exception or an object representing the rejection reason. - * @returns {Promise} Returns a promise that was already resolved as rejected with the `reason`. - */ - function reject(reason) { - var result = new Promise(); - rejectPromise(result, reason); - return result; - } - - function handleCallback(value, resolver, callback) { - var callbackOutput = null; - try { - if (isFunction(callback)) callbackOutput = callback(); - } catch (e) { - return reject(e); - } - if (isPromiseLike(callbackOutput)) { - return callbackOutput.then(function() { - return resolver(value); - }, reject); - } else { - return resolver(value); - } - } - - /** - * @ngdoc method - * @name $q#when - * @kind function - * - * @description - * Wraps an object that might be a value or a (3rd party) then-able promise into a $q promise. - * This is useful when you are dealing with an object that might or might not be a promise, or if - * the promise comes from a source that can't be trusted. - * - * @param {*} value Value or a promise - * @param {Function=} successCallback - * @param {Function=} errorCallback - * @param {Function=} progressCallback - * @returns {Promise} Returns a promise of the passed value or promise - */ - - - function when(value, callback, errback, progressBack) { - var result = new Promise(); - resolvePromise(result, value); - return result.then(callback, errback, progressBack); - } - - /** - * @ngdoc method - * @name $q#resolve - * @kind function - * - * @description - * Alias of {@link ng.$q#when when} to maintain naming consistency with ES6. - * - * @param {*} value Value or a promise - * @param {Function=} successCallback - * @param {Function=} errorCallback - * @param {Function=} progressCallback - * @returns {Promise} Returns a promise of the passed value or promise - */ - var resolve = when; - - /** - * @ngdoc method - * @name $q#all - * @kind function - * - * @description - * Combines multiple promises into a single promise that is resolved when all of the input - * promises are resolved. - * - * @param {Array.|Object.} promises An array or hash of promises. - * @returns {Promise} Returns a single promise that will be resolved with an array/hash of values, - * each value corresponding to the promise at the same index/key in the `promises` array/hash. - * If any of the promises is resolved with a rejection, this resulting promise will be rejected - * with the same rejection value. - */ - - function all(promises) { - var result = new Promise(), - counter = 0, - results = isArray(promises) ? [] : {}; - - forEach(promises, function(promise, key) { - counter++; - when(promise).then(function(value) { - results[key] = value; - if (!(--counter)) resolvePromise(result, results); - }, function(reason) { - rejectPromise(result, reason); - }); - }); - - if (counter === 0) { - resolvePromise(result, results); - } - - return result; - } - - /** - * @ngdoc method - * @name $q#race - * @kind function - * - * @description - * Returns a promise that resolves or rejects as soon as one of those promises - * resolves or rejects, with the value or reason from that promise. - * - * @param {Array.|Object.} promises An array or hash of promises. - * @returns {Promise} a promise that resolves or rejects as soon as one of the `promises` - * resolves or rejects, with the value or reason from that promise. - */ - - function race(promises) { - var deferred = defer(); - - forEach(promises, function(promise) { - when(promise).then(deferred.resolve, deferred.reject); - }); - - return deferred.promise; - } - - function $Q(resolver) { - if (!isFunction(resolver)) { - throw $qMinErr('norslvr', 'Expected resolverFn, got \'{0}\'', resolver); - } - - var promise = new Promise(); - - function resolveFn(value) { - resolvePromise(promise, value); - } - - function rejectFn(reason) { - rejectPromise(promise, reason); - } - - resolver(resolveFn, rejectFn); - - return promise; - } - - // Let's make the instanceof operator work for promises, so that - // `new $q(fn) instanceof $q` would evaluate to true. - $Q.prototype = Promise.prototype; - - $Q.defer = defer; - $Q.reject = reject; - $Q.when = when; - $Q.resolve = resolve; - $Q.all = all; - $Q.race = race; - - return $Q; -} - -function isStateExceptionHandled(state) { - return !!state.pur; -} -function markQStateExceptionHandled(state) { - state.pur = true; -} -function markQExceptionHandled(q) { - // Built-in `$q` promises will always have a `$$state` property. This check is to allow - // overwriting `$q` with a different promise library (e.g. Bluebird + angular-bluebird-promises). - // (Currently, this is the only method that might be called with a promise, even if it is not - // created by the built-in `$q`.) - if (q.$$state) { - markQStateExceptionHandled(q.$$state); - } -} - -/** @this */ -function $$RAFProvider() { //rAF - this.$get = ['$window', '$timeout', function($window, $timeout) { - var requestAnimationFrame = $window.requestAnimationFrame || - $window.webkitRequestAnimationFrame; - - var cancelAnimationFrame = $window.cancelAnimationFrame || - $window.webkitCancelAnimationFrame || - $window.webkitCancelRequestAnimationFrame; - - var rafSupported = !!requestAnimationFrame; - var raf = rafSupported - ? function(fn) { - var id = requestAnimationFrame(fn); - return function() { - cancelAnimationFrame(id); - }; - } - : function(fn) { - var timer = $timeout(fn, 16.66, false); // 1000 / 60 = 16.666 - return function() { - $timeout.cancel(timer); - }; - }; - - raf.supported = rafSupported; - - return raf; - }]; -} - -/** - * DESIGN NOTES - * - * The design decisions behind the scope are heavily favored for speed and memory consumption. - * - * The typical use of scope is to watch the expressions, which most of the time return the same - * value as last time so we optimize the operation. - * - * Closures construction is expensive in terms of speed as well as memory: - * - No closures, instead use prototypical inheritance for API - * - Internal state needs to be stored on scope directly, which means that private state is - * exposed as $$____ properties - * - * Loop operations are optimized by using while(count--) { ... } - * - This means that in order to keep the same order of execution as addition we have to add - * items to the array at the beginning (unshift) instead of at the end (push) - * - * Child scopes are created and removed often - * - Using an array would be slow since inserts in the middle are expensive; so we use linked lists - * - * There are fewer watches than observers. This is why you don't want the observer to be implemented - * in the same way as watch. Watch requires return of the initialization function which is expensive - * to construct. - */ - - -/** - * @ngdoc provider - * @name $rootScopeProvider - * @description - * - * Provider for the $rootScope service. - */ - -/** - * @ngdoc method - * @name $rootScopeProvider#digestTtl - * @description - * - * Sets the number of `$digest` iterations the scope should attempt to execute before giving up and - * assuming that the model is unstable. - * - * The current default is 10 iterations. - * - * In complex applications it's possible that the dependencies between `$watch`s will result in - * several digest iterations. However if an application needs more than the default 10 digest - * iterations for its model to stabilize then you should investigate what is causing the model to - * continuously change during the digest. - * - * Increasing the TTL could have performance implications, so you should not change it without - * proper justification. - * - * @param {number} limit The number of digest iterations. - */ - - -/** - * @ngdoc service - * @name $rootScope - * @this - * - * @description - * - * Every application has a single root {@link ng.$rootScope.Scope scope}. - * All other scopes are descendant scopes of the root scope. Scopes provide separation - * between the model and the view, via a mechanism for watching the model for changes. - * They also provide event emission/broadcast and subscription facility. See the - * {@link guide/scope developer guide on scopes}. - */ -function $RootScopeProvider() { - var TTL = 10; - var $rootScopeMinErr = minErr('$rootScope'); - var lastDirtyWatch = null; - var applyAsyncId = null; - - this.digestTtl = function(value) { - if (arguments.length) { - TTL = value; - } - return TTL; - }; - - function createChildScopeClass(parent) { - function ChildScope() { - this.$$watchers = this.$$nextSibling = - this.$$childHead = this.$$childTail = null; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$watchersCount = 0; - this.$id = nextUid(); - this.$$ChildScope = null; - this.$$suspended = false; - } - ChildScope.prototype = parent; - return ChildScope; - } - - this.$get = ['$exceptionHandler', '$parse', '$browser', - function($exceptionHandler, $parse, $browser) { - - function destroyChildScope($event) { - $event.currentScope.$$destroyed = true; - } - - function cleanUpScope($scope) { - - // Support: IE 9 only - if (msie === 9) { - // There is a memory leak in IE9 if all child scopes are not disconnected - // completely when a scope is destroyed. So this code will recurse up through - // all this scopes children - // - // See issue https://github.com/angular/angular.js/issues/10706 - if ($scope.$$childHead) { - cleanUpScope($scope.$$childHead); - } - if ($scope.$$nextSibling) { - cleanUpScope($scope.$$nextSibling); - } - } - - // The code below works around IE9 and V8's memory leaks - // - // See: - // - https://code.google.com/p/v8/issues/detail?id=2073#c26 - // - https://github.com/angular/angular.js/issues/6794#issuecomment-38648909 - // - https://github.com/angular/angular.js/issues/1313#issuecomment-10378451 - - $scope.$parent = $scope.$$nextSibling = $scope.$$prevSibling = $scope.$$childHead = - $scope.$$childTail = $scope.$root = $scope.$$watchers = null; - } - - /** - * @ngdoc type - * @name $rootScope.Scope - * - * @description - * A root scope can be retrieved using the {@link ng.$rootScope $rootScope} key from the - * {@link auto.$injector $injector}. Child scopes are created using the - * {@link ng.$rootScope.Scope#$new $new()} method. (Most scopes are created automatically when - * compiled HTML template is executed.) See also the {@link guide/scope Scopes guide} for - * an in-depth introduction and usage examples. - * - * - * ## Inheritance - * A scope can inherit from a parent scope, as in this example: - * ```js - var parent = $rootScope; - var child = parent.$new(); - - parent.salutation = "Hello"; - expect(child.salutation).toEqual('Hello'); - - child.salutation = "Welcome"; - expect(child.salutation).toEqual('Welcome'); - expect(parent.salutation).toEqual('Hello'); - * ``` - * - * When interacting with `Scope` in tests, additional helper methods are available on the - * instances of `Scope` type. See {@link ngMock.$rootScope.Scope ngMock Scope} for additional - * details. - * - * - * @param {Object.=} providers Map of service factory which need to be - * provided for the current scope. Defaults to {@link ng}. - * @param {Object.=} instanceCache Provides pre-instantiated services which should - * append/override services provided by `providers`. This is handy - * when unit-testing and having the need to override a default - * service. - * @returns {Object} Newly created scope. - * - */ - function Scope() { - this.$id = nextUid(); - this.$$phase = this.$parent = this.$$watchers = - this.$$nextSibling = this.$$prevSibling = - this.$$childHead = this.$$childTail = null; - this.$root = this; - this.$$destroyed = false; - this.$$suspended = false; - this.$$listeners = {}; - this.$$listenerCount = {}; - this.$$watchersCount = 0; - this.$$isolateBindings = null; - } - - /** - * @ngdoc property - * @name $rootScope.Scope#$id - * - * @description - * Unique scope ID (monotonically increasing) useful for debugging. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$parent - * - * @description - * Reference to the parent scope. - */ - - /** - * @ngdoc property - * @name $rootScope.Scope#$root - * - * @description - * Reference to the root scope. - */ - - Scope.prototype = { - constructor: Scope, - /** - * @ngdoc method - * @name $rootScope.Scope#$new - * @kind function - * - * @description - * Creates a new child {@link ng.$rootScope.Scope scope}. - * - * The parent scope will propagate the {@link ng.$rootScope.Scope#$digest $digest()} event. - * The scope can be removed from the scope hierarchy using {@link ng.$rootScope.Scope#$destroy $destroy()}. - * - * {@link ng.$rootScope.Scope#$destroy $destroy()} must be called on a scope when it is - * desired for the scope and its child scopes to be permanently detached from the parent and - * thus stop participating in model change detection and listener notification by invoking. - * - * @param {boolean} isolate If true, then the scope does not prototypically inherit from the - * parent scope. The scope is isolated, as it can not see parent scope properties. - * When creating widgets, it is useful for the widget to not accidentally read parent - * state. - * - * @param {Scope} [parent=this] The {@link ng.$rootScope.Scope `Scope`} that will be the `$parent` - * of the newly created scope. Defaults to `this` scope if not provided. - * This is used when creating a transclude scope to correctly place it - * in the scope hierarchy while maintaining the correct prototypical - * inheritance. - * - * @returns {Object} The newly created child scope. - * - */ - $new: function(isolate, parent) { - var child; - - parent = parent || this; - - if (isolate) { - child = new Scope(); - child.$root = this.$root; - } else { - // Only create a child scope class if somebody asks for one, - // but cache it to allow the VM to optimize lookups. - if (!this.$$ChildScope) { - this.$$ChildScope = createChildScopeClass(this); - } - child = new this.$$ChildScope(); - } - child.$parent = parent; - child.$$prevSibling = parent.$$childTail; - if (parent.$$childHead) { - parent.$$childTail.$$nextSibling = child; - parent.$$childTail = child; - } else { - parent.$$childHead = parent.$$childTail = child; - } - - // When the new scope is not isolated or we inherit from `this`, and - // the parent scope is destroyed, the property `$$destroyed` is inherited - // prototypically. In all other cases, this property needs to be set - // when the parent scope is destroyed. - // The listener needs to be added after the parent is set - if (isolate || parent !== this) child.$on('$destroy', destroyChildScope); - - return child; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watch - * @kind function - * - * @description - * Registers a `listener` callback to be executed whenever the `watchExpression` changes. - * - * - The `watchExpression` is called on every call to {@link ng.$rootScope.Scope#$digest - * $digest()} and should return the value that will be watched. (`watchExpression` should not change - * its value when executed multiple times with the same input because it may be executed multiple - * times by {@link ng.$rootScope.Scope#$digest $digest()}. That is, `watchExpression` should be - * [idempotent](http://en.wikipedia.org/wiki/Idempotence).) - * - The `listener` is called only when the value from the current `watchExpression` and the - * previous call to `watchExpression` are not equal (with the exception of the initial run, - * see below). Inequality is determined according to reference inequality, - * [strict comparison](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators) - * via the `!==` Javascript operator, unless `objectEquality == true` - * (see next point) - * - When `objectEquality == true`, inequality of the `watchExpression` is determined - * according to the {@link angular.equals} function. To save the value of the object for - * later comparison, the {@link angular.copy} function is used. This therefore means that - * watching complex objects will have adverse memory and performance implications. - * - This should not be used to watch for changes in objects that are (or contain) - * [File](https://developer.mozilla.org/docs/Web/API/File) objects due to limitations with {@link angular.copy `angular.copy`}. - * - The watch `listener` may change the model, which may trigger other `listener`s to fire. - * This is achieved by rerunning the watchers until no changes are detected. The rerun - * iteration limit is 10 to prevent an infinite loop deadlock. - * - * - * If you want to be notified whenever {@link ng.$rootScope.Scope#$digest $digest} is called, - * you can register a `watchExpression` function with no `listener`. (Be prepared for - * multiple calls to your `watchExpression` because it will execute multiple times in a - * single {@link ng.$rootScope.Scope#$digest $digest} cycle if a change is detected.) - * - * After a watcher is registered with the scope, the `listener` fn is called asynchronously - * (via {@link ng.$rootScope.Scope#$evalAsync $evalAsync}) to initialize the - * watcher. In rare cases, this is undesirable because the listener is called when the result - * of `watchExpression` didn't change. To detect this scenario within the `listener` fn, you - * can compare the `newVal` and `oldVal`. If these two values are identical (`===`) then the - * listener was called due to initialization. - * - * - * - * @example - * ```js - // let's assume that scope was dependency injected as the $rootScope - var scope = $rootScope; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - - - - // Using a function as a watchExpression - var food; - scope.foodCounter = 0; - expect(scope.foodCounter).toEqual(0); - scope.$watch( - // This function returns the value being watched. It is called for each turn of the $digest loop - function() { return food; }, - // This is the change listener, called when the value returned from the above function changes - function(newValue, oldValue) { - if ( newValue !== oldValue ) { - // Only increment the counter if the value changed - scope.foodCounter = scope.foodCounter + 1; - } - } - ); - // No digest has been run so the counter will be zero - expect(scope.foodCounter).toEqual(0); - - // Run the digest but since food has not changed count will still be zero - scope.$digest(); - expect(scope.foodCounter).toEqual(0); - - // Update food and run digest. Now the counter will increment - food = 'cheeseburger'; - scope.$digest(); - expect(scope.foodCounter).toEqual(1); - - * ``` - * - * - * - * @param {(function()|string)} watchExpression Expression that is evaluated on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. A change in the return value triggers - * a call to the `listener`. - * - * - `string`: Evaluated as {@link guide/expression expression} - * - `function(scope)`: called with current `scope` as a parameter. - * @param {function(newVal, oldVal, scope)} listener Callback called whenever the value - * of `watchExpression` changes. - * - * - `newVal` contains the current value of the `watchExpression` - * - `oldVal` contains the previous value of the `watchExpression` - * - `scope` refers to the current scope - * @param {boolean=} [objectEquality=false] Compare for object equality using {@link angular.equals} instead of - * comparing for reference equality. - * @returns {function()} Returns a deregistration function for this listener. - */ - $watch: function(watchExp, listener, objectEquality, prettyPrintExpression) { - var get = $parse(watchExp); - var fn = isFunction(listener) ? listener : noop; - - if (get.$$watchDelegate) { - return get.$$watchDelegate(this, fn, objectEquality, get, watchExp); - } - var scope = this, - array = scope.$$watchers, - watcher = { - fn: fn, - last: initWatchVal, - get: get, - exp: prettyPrintExpression || watchExp, - eq: !!objectEquality - }; - - lastDirtyWatch = null; - - if (!array) { - array = scope.$$watchers = []; - array.$$digestWatchIndex = -1; - } - // we use unshift since we use a while loop in $digest for speed. - // the while loop reads in reverse order. - array.unshift(watcher); - array.$$digestWatchIndex++; - incrementWatchersCount(this, 1); - - return function deregisterWatch() { - var index = arrayRemove(array, watcher); - if (index >= 0) { - incrementWatchersCount(scope, -1); - if (index < array.$$digestWatchIndex) { - array.$$digestWatchIndex--; - } - } - lastDirtyWatch = null; - }; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchGroup - * @kind function - * - * @description - * A variant of {@link ng.$rootScope.Scope#$watch $watch()} where it watches an array of `watchExpressions`. - * If any one expression in the collection changes the `listener` is executed. - * - * - The items in the `watchExpressions` array are observed via the standard `$watch` operation. Their return - * values are examined for changes on every call to `$digest`. - * - The `listener` is called whenever any expression in the `watchExpressions` array changes. - * - * @param {Array.} watchExpressions Array of expressions that will be individually - * watched using {@link ng.$rootScope.Scope#$watch $watch()} - * - * @param {function(newValues, oldValues, scope)} listener Callback called whenever the return value of any - * expression in `watchExpressions` changes - * The `newValues` array contains the current values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * and the `oldValues` array contains the previous values of the `watchExpressions`, with the indexes matching - * those of `watchExpression` - * The `scope` refers to the current scope. - * @returns {function()} Returns a de-registration function for all listeners. - */ - $watchGroup: function(watchExpressions, listener) { - var oldValues = new Array(watchExpressions.length); - var newValues = new Array(watchExpressions.length); - var deregisterFns = []; - var self = this; - var changeReactionScheduled = false; - var firstRun = true; - - if (!watchExpressions.length) { - // No expressions means we call the listener ASAP - var shouldCall = true; - self.$evalAsync(function() { - if (shouldCall) listener(newValues, newValues, self); - }); - return function deregisterWatchGroup() { - shouldCall = false; - }; - } - - if (watchExpressions.length === 1) { - // Special case size of one - return this.$watch(watchExpressions[0], function watchGroupAction(value, oldValue, scope) { - newValues[0] = value; - oldValues[0] = oldValue; - listener(newValues, (value === oldValue) ? newValues : oldValues, scope); - }); - } - - forEach(watchExpressions, function(expr, i) { - var unwatchFn = self.$watch(expr, function watchGroupSubAction(value) { - newValues[i] = value; - if (!changeReactionScheduled) { - changeReactionScheduled = true; - self.$evalAsync(watchGroupAction); - } - }); - deregisterFns.push(unwatchFn); - }); - - function watchGroupAction() { - changeReactionScheduled = false; - - try { - if (firstRun) { - firstRun = false; - listener(newValues, newValues, self); - } else { - listener(newValues, oldValues, self); - } - } finally { - for (var i = 0; i < watchExpressions.length; i++) { - oldValues[i] = newValues[i]; - } - } - } - - return function deregisterWatchGroup() { - while (deregisterFns.length) { - deregisterFns.shift()(); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$watchCollection - * @kind function - * - * @description - * Shallow watches the properties of an object and fires whenever any of the properties change - * (for arrays, this implies watching the array items; for object maps, this implies watching - * the properties). If a change is detected, the `listener` callback is fired. - * - * - The `obj` collection is observed via standard $watch operation and is examined on every - * call to $digest() to see if any items have been added, removed, or moved. - * - The `listener` is called whenever anything within the `obj` has changed. Examples include - * adding, removing, and moving items belonging to an object or array. - * - * - * @example - * ```js - $scope.names = ['igor', 'matias', 'misko', 'james']; - $scope.dataCount = 4; - - $scope.$watchCollection('names', function(newNames, oldNames) { - $scope.dataCount = newNames.length; - }); - - expect($scope.dataCount).toEqual(4); - $scope.$digest(); - - //still at 4 ... no changes - expect($scope.dataCount).toEqual(4); - - $scope.names.pop(); - $scope.$digest(); - - //now there's been a change - expect($scope.dataCount).toEqual(3); - * ``` - * - * - * @param {string|function(scope)} obj Evaluated as {@link guide/expression expression}. The - * expression value should evaluate to an object or an array which is observed on each - * {@link ng.$rootScope.Scope#$digest $digest} cycle. Any shallow change within the - * collection will trigger a call to the `listener`. - * - * @param {function(newCollection, oldCollection, scope)} listener a callback function called - * when a change is detected. - * - The `newCollection` object is the newly modified data obtained from the `obj` expression - * - The `oldCollection` object is a copy of the former collection data. - * Due to performance considerations, the`oldCollection` value is computed only if the - * `listener` function declares two or more arguments. - * - The `scope` argument refers to the current scope. - * - * @returns {function()} Returns a de-registration function for this listener. When the - * de-registration function is executed, the internal watch operation is terminated. - */ - $watchCollection: function(obj, listener) { - // Mark the interceptor as - // ... $$pure when literal since the instance will change when any input changes - $watchCollectionInterceptor.$$pure = $parse(obj).literal; - // ... $stateful when non-literal since we must read the state of the collection - $watchCollectionInterceptor.$stateful = !$watchCollectionInterceptor.$$pure; - - var self = this; - // the current value, updated on each dirty-check run - var newValue; - // a shallow copy of the newValue from the last dirty-check run, - // updated to match newValue during dirty-check run - var oldValue; - // a shallow copy of the newValue from when the last change happened - var veryOldValue; - // only track veryOldValue if the listener is asking for it - var trackVeryOldValue = (listener.length > 1); - var changeDetected = 0; - var changeDetector = $parse(obj, $watchCollectionInterceptor); - var internalArray = []; - var internalObject = {}; - var initRun = true; - var oldLength = 0; - - function $watchCollectionInterceptor(_value) { - newValue = _value; - var newLength, key, bothNaN, newItem, oldItem; - - // If the new value is undefined, then return undefined as the watch may be a one-time watch - if (isUndefined(newValue)) return; - - if (!isObject(newValue)) { // if primitive - if (oldValue !== newValue) { - oldValue = newValue; - changeDetected++; - } - } else if (isArrayLike(newValue)) { - if (oldValue !== internalArray) { - // we are transitioning from something which was not an array into array. - oldValue = internalArray; - oldLength = oldValue.length = 0; - changeDetected++; - } - - newLength = newValue.length; - - if (oldLength !== newLength) { - // if lengths do not match we need to trigger change notification - changeDetected++; - oldValue.length = oldLength = newLength; - } - // copy the items to oldValue and look for changes. - for (var i = 0; i < newLength; i++) { - oldItem = oldValue[i]; - newItem = newValue[i]; - - // eslint-disable-next-line no-self-compare - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[i] = newItem; - } - } - } else { - if (oldValue !== internalObject) { - // we are transitioning from something which was not an object into object. - oldValue = internalObject = {}; - oldLength = 0; - changeDetected++; - } - // copy the items to oldValue and look for changes. - newLength = 0; - for (key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - newLength++; - newItem = newValue[key]; - oldItem = oldValue[key]; - - if (key in oldValue) { - // eslint-disable-next-line no-self-compare - bothNaN = (oldItem !== oldItem) && (newItem !== newItem); - if (!bothNaN && (oldItem !== newItem)) { - changeDetected++; - oldValue[key] = newItem; - } - } else { - oldLength++; - oldValue[key] = newItem; - changeDetected++; - } - } - } - if (oldLength > newLength) { - // we used to have more keys, need to find them and destroy them. - changeDetected++; - for (key in oldValue) { - if (!hasOwnProperty.call(newValue, key)) { - oldLength--; - delete oldValue[key]; - } - } - } - } - return changeDetected; - } - - function $watchCollectionAction() { - if (initRun) { - initRun = false; - listener(newValue, newValue, self); - } else { - listener(newValue, veryOldValue, self); - } - - // make a copy for the next time a collection is changed - if (trackVeryOldValue) { - if (!isObject(newValue)) { - //primitive - veryOldValue = newValue; - } else if (isArrayLike(newValue)) { - veryOldValue = new Array(newValue.length); - for (var i = 0; i < newValue.length; i++) { - veryOldValue[i] = newValue[i]; - } - } else { // if object - veryOldValue = {}; - for (var key in newValue) { - if (hasOwnProperty.call(newValue, key)) { - veryOldValue[key] = newValue[key]; - } - } - } - } - } - - return this.$watch(changeDetector, $watchCollectionAction); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$digest - * @kind function - * - * @description - * Processes all of the {@link ng.$rootScope.Scope#$watch watchers} of the current scope and - * its children. Because a {@link ng.$rootScope.Scope#$watch watcher}'s listener can change - * the model, the `$digest()` keeps calling the {@link ng.$rootScope.Scope#$watch watchers} - * until no more listeners are firing. This means that it is possible to get into an infinite - * loop. This function will throw `'Maximum iteration limit exceeded.'` if the number of - * iterations exceeds 10. - * - * Usually, you don't call `$digest()` directly in - * {@link ng.directive:ngController controllers} or in - * {@link ng.$compileProvider#directive directives}. - * Instead, you should call {@link ng.$rootScope.Scope#$apply $apply()} (typically from within - * a {@link ng.$compileProvider#directive directive}), which will force a `$digest()`. - * - * If you want to be notified whenever `$digest()` is called, - * you can register a `watchExpression` function with - * {@link ng.$rootScope.Scope#$watch $watch()} with no `listener`. - * - * In unit tests, you may need to call `$digest()` to simulate the scope life cycle. - * - * @example - * ```js - var scope = ...; - scope.name = 'misko'; - scope.counter = 0; - - expect(scope.counter).toEqual(0); - scope.$watch('name', function(newValue, oldValue) { - scope.counter = scope.counter + 1; - }); - expect(scope.counter).toEqual(0); - - scope.$digest(); - // the listener is always called during the first $digest loop after it was registered - expect(scope.counter).toEqual(1); - - scope.$digest(); - // but now it will not be called unless the value changes - expect(scope.counter).toEqual(1); - - scope.name = 'adam'; - scope.$digest(); - expect(scope.counter).toEqual(2); - * ``` - * - */ - $digest: function() { - var watch, value, last, fn, get, - watchers, - dirty, ttl = TTL, - next, current, target = asyncQueue.length ? $rootScope : this, - watchLog = [], - logIdx, asyncTask; - - beginPhase('$digest'); - // Check for changes to browser url that happened in sync before the call to $digest - $browser.$$checkUrlChange(); - - if (this === $rootScope && applyAsyncId !== null) { - // If this is the root scope, and $applyAsync has scheduled a deferred $apply(), then - // cancel the scheduled $apply and flush the queue of expressions to be evaluated. - $browser.defer.cancel(applyAsyncId); - flushApplyAsync(); - } - - lastDirtyWatch = null; - - do { // "while dirty" loop - dirty = false; - current = target; - - // It's safe for asyncQueuePosition to be a local variable here because this loop can't - // be reentered recursively. Calling $digest from a function passed to $evalAsync would - // lead to a '$digest already in progress' error. - for (var asyncQueuePosition = 0; asyncQueuePosition < asyncQueue.length; asyncQueuePosition++) { - try { - asyncTask = asyncQueue[asyncQueuePosition]; - fn = asyncTask.fn; - fn(asyncTask.scope, asyncTask.locals); - } catch (e) { - $exceptionHandler(e); - } - lastDirtyWatch = null; - } - asyncQueue.length = 0; - - traverseScopesLoop: - do { // "traverse the scopes" loop - if ((watchers = !current.$$suspended && current.$$watchers)) { - // process our watches - watchers.$$digestWatchIndex = watchers.length; - while (watchers.$$digestWatchIndex--) { - try { - watch = watchers[watchers.$$digestWatchIndex]; - // Most common watches are on primitives, in which case we can short - // circuit it with === operator, only when === fails do we use .equals - if (watch) { - get = watch.get; - if ((value = get(current)) !== (last = watch.last) && - !(watch.eq - ? equals(value, last) - : (isNumberNaN(value) && isNumberNaN(last)))) { - dirty = true; - lastDirtyWatch = watch; - watch.last = watch.eq ? copy(value, null) : value; - fn = watch.fn; - fn(value, ((last === initWatchVal) ? value : last), current); - if (ttl < 5) { - logIdx = 4 - ttl; - if (!watchLog[logIdx]) watchLog[logIdx] = []; - watchLog[logIdx].push({ - msg: isFunction(watch.exp) ? 'fn: ' + (watch.exp.name || watch.exp.toString()) : watch.exp, - newVal: value, - oldVal: last - }); - } - } else if (watch === lastDirtyWatch) { - // If the most recently dirty watcher is now clean, short circuit since the remaining watchers - // have already been tested. - dirty = false; - break traverseScopesLoop; - } - } - } catch (e) { - $exceptionHandler(e); - } - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $broadcast - // (though it differs due to having the extra check for $$suspended and does not - // check $$listenerCount) - if (!(next = ((!current.$$suspended && current.$$watchersCount && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } while ((current = next)); - - // `break traverseScopesLoop;` takes us to here - - if ((dirty || asyncQueue.length) && !(ttl--)) { - clearPhase(); - throw $rootScopeMinErr('infdig', - '{0} $digest() iterations reached. Aborting!\n' + - 'Watchers fired in the last 5 iterations: {1}', - TTL, watchLog); - } - - } while (dirty || asyncQueue.length); - - clearPhase(); - - // postDigestQueuePosition isn't local here because this loop can be reentered recursively. - while (postDigestQueuePosition < postDigestQueue.length) { - try { - postDigestQueue[postDigestQueuePosition++](); - } catch (e) { - $exceptionHandler(e); - } - } - postDigestQueue.length = postDigestQueuePosition = 0; - - // Check for changes to browser url that happened during the $digest - // (for which no event is fired; e.g. via `history.pushState()`) - $browser.$$checkUrlChange(); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$suspend - * @kind function - * - * @description - * Suspend watchers of this scope subtree so that they will not be invoked during digest. - * - * This can be used to optimize your application when you know that running those watchers - * is redundant. - * - * **Warning** - * - * Suspending scopes from the digest cycle can have unwanted and difficult to debug results. - * Only use this approach if you are confident that you know what you are doing and have - * ample tests to ensure that bindings get updated as you expect. - * - * Some of the things to consider are: - * - * * Any external event on a directive/component will not trigger a digest while the hosting - * scope is suspended - even if the event handler calls `$apply()` or `$rootScope.$digest()`. - * * Transcluded content exists on a scope that inherits from outside a directive but exists - * as a child of the directive's containing scope. If the containing scope is suspended the - * transcluded scope will also be suspended, even if the scope from which the transcluded - * scope inherits is not suspended. - * * Multiple directives trying to manage the suspended status of a scope can confuse each other: - * * A call to `$suspend()` on an already suspended scope is a no-op. - * * A call to `$resume()` on a non-suspended scope is a no-op. - * * If two directives suspend a scope, then one of them resumes the scope, the scope will no - * longer be suspended. This could result in the other directive believing a scope to be - * suspended when it is not. - * * If a parent scope is suspended then all its descendants will be also excluded from future - * digests whether or not they have been suspended themselves. Note that this also applies to - * isolate child scopes. - * * Calling `$digest()` directly on a descendant of a suspended scope will still run the watchers - * for that scope and its descendants. When digesting we only check whether the current scope is - * locally suspended, rather than checking whether it has a suspended ancestor. - * * Calling `$resume()` on a scope that has a suspended ancestor will not cause the scope to be - * included in future digests until all its ancestors have been resumed. - * * Resolved promises, e.g. from explicit `$q` deferreds and `$http` calls, trigger `$apply()` - * against the `$rootScope` and so will still trigger a global digest even if the promise was - * initiated by a component that lives on a suspended scope. - */ - $suspend: function() { - this.$$suspended = true; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$isSuspended - * @kind function - * - * @description - * Call this method to determine if this scope has been explicitly suspended. It will not - * tell you whether an ancestor has been suspended. - * To determine if this scope will be excluded from a digest triggered at the $rootScope, - * for example, you must check all its ancestors: - * - * ``` - * function isExcludedFromDigest(scope) { - * while(scope) { - * if (scope.$isSuspended()) return true; - * scope = scope.$parent; - * } - * return false; - * ``` - * - * Be aware that a scope may not be included in digests if it has a suspended ancestor, - * even if `$isSuspended()` returns false. - * - * @returns true if the current scope has been suspended. - */ - $isSuspended: function() { - return this.$$suspended; - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$resume - * @kind function - * - * @description - * Resume watchers of this scope subtree in case it was suspended. - * - * See {@link $rootScope.Scope#$suspend} for information about the dangers of using this approach. - */ - $resume: function() { - this.$$suspended = false; - }, - - /** - * @ngdoc event - * @name $rootScope.Scope#$destroy - * @eventType broadcast on scope being destroyed - * - * @description - * Broadcasted when a scope and its children are being destroyed. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - - /** - * @ngdoc method - * @name $rootScope.Scope#$destroy - * @kind function - * - * @description - * Removes the current scope (and all of its children) from the parent scope. Removal implies - * that calls to {@link ng.$rootScope.Scope#$digest $digest()} will no longer - * propagate to the current scope and its children. Removal also implies that the current - * scope is eligible for garbage collection. - * - * The `$destroy()` is usually used by directives such as - * {@link ng.directive:ngRepeat ngRepeat} for managing the - * unrolling of the loop. - * - * Just before a scope is destroyed, a `$destroy` event is broadcasted on this scope. - * Application code can register a `$destroy` event handler that will give it a chance to - * perform any necessary cleanup. - * - * Note that, in AngularJS, there is also a `$destroy` jQuery event, which can be used to - * clean up DOM bindings before an element is removed from the DOM. - */ - $destroy: function() { - // We can't destroy a scope that has been already destroyed. - if (this.$$destroyed) return; - var parent = this.$parent; - - this.$broadcast('$destroy'); - this.$$destroyed = true; - - if (this === $rootScope) { - //Remove handlers attached to window when $rootScope is removed - $browser.$$applicationDestroyed(); - } - - incrementWatchersCount(this, -this.$$watchersCount); - for (var eventName in this.$$listenerCount) { - decrementListenerCount(this, this.$$listenerCount[eventName], eventName); - } - - // sever all the references to parent scopes (after this cleanup, the current scope should - // not be retained by any of our references and should be eligible for garbage collection) - if (parent && parent.$$childHead === this) parent.$$childHead = this.$$nextSibling; - if (parent && parent.$$childTail === this) parent.$$childTail = this.$$prevSibling; - if (this.$$prevSibling) this.$$prevSibling.$$nextSibling = this.$$nextSibling; - if (this.$$nextSibling) this.$$nextSibling.$$prevSibling = this.$$prevSibling; - - // Disable listeners, watchers and apply/digest methods - this.$destroy = this.$digest = this.$apply = this.$evalAsync = this.$applyAsync = noop; - this.$on = this.$watch = this.$watchGroup = function() { return noop; }; - this.$$listeners = {}; - - // Disconnect the next sibling to prevent `cleanUpScope` destroying those too - this.$$nextSibling = null; - cleanUpScope(this); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$eval - * @kind function - * - * @description - * Executes the `expression` on the current scope and returns the result. Any exceptions in - * the expression are propagated (uncaught). This is useful when evaluating AngularJS - * expressions. - * - * @example - * ```js - var scope = ng.$rootScope.Scope(); - scope.a = 1; - scope.b = 2; - - expect(scope.$eval('a+b')).toEqual(3); - expect(scope.$eval(function(scope){ return scope.a + scope.b; })).toEqual(3); - * ``` - * - * @param {(string|function())=} expression An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - * @returns {*} The result of evaluating the expression. - */ - $eval: function(expr, locals) { - return $parse(expr)(this, locals); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$evalAsync - * @kind function - * - * @description - * Executes the expression on the current scope at a later point in time. - * - * The `$evalAsync` makes no guarantees as to when the `expression` will be executed, only - * that: - * - * - it will execute after the function that scheduled the evaluation (preferably before DOM - * rendering). - * - at least one {@link ng.$rootScope.Scope#$digest $digest cycle} will be performed after - * `expression` execution. - * - * Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * __Note:__ if this function is called outside of a `$digest` cycle, a new `$digest` cycle - * will be scheduled. However, it is encouraged to always call code that changes the model - * from within an `$apply` call. That includes code evaluated via `$evalAsync`. - * - * @param {(string|function())=} expression An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with the current `scope` parameter. - * - * @param {(object)=} locals Local variables object, useful for overriding values in scope. - */ - $evalAsync: function(expr, locals) { - // if we are outside of an $digest loop and this is the first time we are scheduling async - // task also schedule async auto-flush - if (!$rootScope.$$phase && !asyncQueue.length) { - $browser.defer(function() { - if (asyncQueue.length) { - $rootScope.$digest(); - } - }, null, '$evalAsync'); - } - - asyncQueue.push({scope: this, fn: $parse(expr), locals: locals}); - }, - - $$postDigest: function(fn) { - postDigestQueue.push(fn); - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$apply - * @kind function - * - * @description - * `$apply()` is used to execute an expression in AngularJS from outside of the AngularJS - * framework. (For example from browser DOM events, setTimeout, XHR or third party libraries). - * Because we are calling into the AngularJS framework we need to perform proper scope life - * cycle of {@link ng.$exceptionHandler exception handling}, - * {@link ng.$rootScope.Scope#$digest executing watches}. - * - * **Life cycle: Pseudo-Code of `$apply()`** - * - * ```js - function $apply(expr) { - try { - return $eval(expr); - } catch (e) { - $exceptionHandler(e); - } finally { - $root.$digest(); - } - } - * ``` - * - * - * Scope's `$apply()` method transitions through the following stages: - * - * 1. The {@link guide/expression expression} is executed using the - * {@link ng.$rootScope.Scope#$eval $eval()} method. - * 2. Any exceptions from the execution of the expression are forwarded to the - * {@link ng.$exceptionHandler $exceptionHandler} service. - * 3. The {@link ng.$rootScope.Scope#$watch watch} listeners are fired immediately after the - * expression was executed using the {@link ng.$rootScope.Scope#$digest $digest()} method. - * - * - * @param {(string|function())=} exp An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - * - * @returns {*} The result of evaluating the expression. - */ - $apply: function(expr) { - try { - beginPhase('$apply'); - try { - return this.$eval(expr); - } finally { - clearPhase(); - } - } catch (e) { - $exceptionHandler(e); - } finally { - try { - $rootScope.$digest(); - } catch (e) { - $exceptionHandler(e); - // eslint-disable-next-line no-unsafe-finally - throw e; - } - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$applyAsync - * @kind function - * - * @description - * Schedule the invocation of $apply to occur at a later time. The actual time difference - * varies across browsers, but is typically around ~10 milliseconds. - * - * This can be used to queue up multiple expressions which need to be evaluated in the same - * digest. - * - * @param {(string|function())=} exp An AngularJS expression to be executed. - * - * - `string`: execute using the rules as defined in {@link guide/expression expression}. - * - `function(scope)`: execute the function with current `scope` parameter. - */ - $applyAsync: function(expr) { - var scope = this; - if (expr) { - applyAsyncQueue.push($applyAsyncExpression); - } - expr = $parse(expr); - scheduleApplyAsync(); - - function $applyAsyncExpression() { - scope.$eval(expr); - } - }, - - /** - * @ngdoc method - * @name $rootScope.Scope#$on - * @kind function - * - * @description - * Listens on events of a given type. See {@link ng.$rootScope.Scope#$emit $emit} for - * discussion of event life cycle. - * - * The event listener function format is: `function(event, args...)`. The `event` object - * passed into the listener has the following attributes: - * - * - `targetScope` - `{Scope}`: the scope on which the event was `$emit`-ed or - * `$broadcast`-ed. - * - `currentScope` - `{Scope}`: the scope that is currently handling the event. Once the - * event propagates through the scope hierarchy, this property is set to null. - * - `name` - `{string}`: name of the event. - * - `stopPropagation` - `{function=}`: calling `stopPropagation` function will cancel - * further event propagation (available only for events that were `$emit`-ed). - * - `preventDefault` - `{function}`: calling `preventDefault` sets `defaultPrevented` flag - * to true. - * - `defaultPrevented` - `{boolean}`: true if `preventDefault` was called. - * - * @param {string} name Event name to listen on. - * @param {function(event, ...args)} listener Function to call when the event is emitted. - * @returns {function()} Returns a deregistration function for this listener. - */ - $on: function(name, listener) { - var namedListeners = this.$$listeners[name]; - if (!namedListeners) { - this.$$listeners[name] = namedListeners = []; - } - namedListeners.push(listener); - - var current = this; - do { - if (!current.$$listenerCount[name]) { - current.$$listenerCount[name] = 0; - } - current.$$listenerCount[name]++; - } while ((current = current.$parent)); - - var self = this; - return function() { - var indexOfListener = namedListeners.indexOf(listener); - if (indexOfListener !== -1) { - // Use delete in the hope of the browser deallocating the memory for the array entry, - // while not shifting the array indexes of other listeners. - // See issue https://github.com/angular/angular.js/issues/16135 - delete namedListeners[indexOfListener]; - decrementListenerCount(self, 1, name); - } - }; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$emit - * @kind function - * - * @description - * Dispatches an event `name` upwards through the scope hierarchy notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$emit` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event traverses upwards toward the root scope and calls all - * registered listeners along the way. The event will stop propagating if one of the listeners - * cancels it. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to emit. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object (see {@link ng.$rootScope.Scope#$on}). - */ - $emit: function(name, args) { - var empty = [], - namedListeners, - scope = this, - stopPropagation = false, - event = { - name: name, - targetScope: scope, - stopPropagation: function() {stopPropagation = true;}, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }, - listenerArgs = concat([event], arguments, 1), - i, length; - - do { - namedListeners = scope.$$listeners[name] || empty; - event.currentScope = scope; - for (i = 0, length = namedListeners.length; i < length; i++) { - - // if listeners were deregistered, defragment the array - if (!namedListeners[i]) { - namedListeners.splice(i, 1); - i--; - length--; - continue; - } - try { - //allow all listeners attached to the current scope to run - namedListeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - //if any listener on the current scope stops propagation, prevent bubbling - if (stopPropagation) { - break; - } - //traverse upwards - scope = scope.$parent; - } while (scope); - - event.currentScope = null; - - return event; - }, - - - /** - * @ngdoc method - * @name $rootScope.Scope#$broadcast - * @kind function - * - * @description - * Dispatches an event `name` downwards to all child scopes (and their children) notifying the - * registered {@link ng.$rootScope.Scope#$on} listeners. - * - * The event life cycle starts at the scope on which `$broadcast` was called. All - * {@link ng.$rootScope.Scope#$on listeners} listening for `name` event on this scope get - * notified. Afterwards, the event propagates to all direct and indirect scopes of the current - * scope and calls all registered listeners along the way. The event cannot be canceled. - * - * Any exception emitted from the {@link ng.$rootScope.Scope#$on listeners} will be passed - * onto the {@link ng.$exceptionHandler $exceptionHandler} service. - * - * @param {string} name Event name to broadcast. - * @param {...*} args Optional one or more arguments which will be passed onto the event listeners. - * @return {Object} Event object, see {@link ng.$rootScope.Scope#$on} - */ - $broadcast: function(name, args) { - var target = this, - current = target, - next = target, - event = { - name: name, - targetScope: target, - preventDefault: function() { - event.defaultPrevented = true; - }, - defaultPrevented: false - }; - - if (!target.$$listenerCount[name]) return event; - - var listenerArgs = concat([event], arguments, 1), - listeners, i, length; - - //down while you can, then up and next sibling or up and next sibling until back at root - while ((current = next)) { - event.currentScope = current; - listeners = current.$$listeners[name] || []; - for (i = 0, length = listeners.length; i < length; i++) { - // if listeners were deregistered, defragment the array - if (!listeners[i]) { - listeners.splice(i, 1); - i--; - length--; - continue; - } - - try { - listeners[i].apply(null, listenerArgs); - } catch (e) { - $exceptionHandler(e); - } - } - - // Insanity Warning: scope depth-first traversal - // yes, this code is a bit crazy, but it works and we have tests to prove it! - // this piece should be kept in sync with the traversal in $digest - // (though it differs due to having the extra check for $$listenerCount and - // does not check $$suspended) - if (!(next = ((current.$$listenerCount[name] && current.$$childHead) || - (current !== target && current.$$nextSibling)))) { - while (current !== target && !(next = current.$$nextSibling)) { - current = current.$parent; - } - } - } - - event.currentScope = null; - return event; - } - }; - - var $rootScope = new Scope(); - - //The internal queues. Expose them on the $rootScope for debugging/testing purposes. - var asyncQueue = $rootScope.$$asyncQueue = []; - var postDigestQueue = $rootScope.$$postDigestQueue = []; - var applyAsyncQueue = $rootScope.$$applyAsyncQueue = []; - - var postDigestQueuePosition = 0; - - return $rootScope; - - - function beginPhase(phase) { - if ($rootScope.$$phase) { - throw $rootScopeMinErr('inprog', '{0} already in progress', $rootScope.$$phase); - } - - $rootScope.$$phase = phase; - } - - function clearPhase() { - $rootScope.$$phase = null; - } - - function incrementWatchersCount(current, count) { - do { - current.$$watchersCount += count; - } while ((current = current.$parent)); - } - - function decrementListenerCount(current, count, name) { - do { - current.$$listenerCount[name] -= count; - - if (current.$$listenerCount[name] === 0) { - delete current.$$listenerCount[name]; - } - } while ((current = current.$parent)); - } - - /** - * function used as an initial value for watchers. - * because it's unique we can easily tell it apart from other values - */ - function initWatchVal() {} - - function flushApplyAsync() { - while (applyAsyncQueue.length) { - try { - applyAsyncQueue.shift()(); - } catch (e) { - $exceptionHandler(e); - } - } - applyAsyncId = null; - } - - function scheduleApplyAsync() { - if (applyAsyncId === null) { - applyAsyncId = $browser.defer(function() { - $rootScope.$apply(flushApplyAsync); - }, null, '$applyAsync'); - } - } - }]; -} - -/** - * @ngdoc service - * @name $rootElement - * - * @description - * The root element of AngularJS application. This is either the element where {@link - * ng.directive:ngApp ngApp} was declared or the element passed into - * {@link angular.bootstrap}. The element represents the root element of application. It is also the - * location where the application's {@link auto.$injector $injector} service gets - * published, and can be retrieved using `$rootElement.injector()`. - */ - - -// the implementation is in angular.bootstrap - -/** - * @this - * @description - * Private service to sanitize uris for links and images. Used by $compile and $sanitize. - */ -function $$SanitizeUriProvider() { - - var aHrefSanitizationWhitelist = /^\s*(https?|s?ftp|mailto|tel|file):/, - imgSrcSanitizationWhitelist = /^\s*((https?|ftp|file|blob):|data:image\/)/; - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during a[href] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via HTML anchor links. - * - * Any url due to be assigned to an `a[href]` attribute via interpolation is marked as requiring - * the $sce.URL security context. When interpolation occurs a call is made to `$sce.trustAsUrl(url)` - * which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize the potentially malicious URL. - * - * If the URL matches the `aHrefSanitizationWhitelist` regular expression, it is returned unchanged. - * - * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written - * to the DOM it is inactive and potentially malicious code will not be executed. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.aHrefSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - aHrefSanitizationWhitelist = regexp; - return this; - } - return aHrefSanitizationWhitelist; - }; - - - /** - * @description - * Retrieves or overrides the default regular expression that is used for whitelisting of safe - * urls during img[src] sanitization. - * - * The sanitization is a security measure aimed at prevent XSS attacks via HTML image src links. - * - * Any URL due to be assigned to an `img[src]` attribute via interpolation is marked as requiring - * the $sce.MEDIA_URL security context. When interpolation occurs a call is made to - * `$sce.trustAsMediaUrl(url)` which in turn may call `$$sanitizeUri(url, isMedia)` to sanitize - * the potentially malicious URL. - * - * If the URL matches the `aImgSanitizationWhitelist` regular expression, it is returned unchanged. - * - * If there is no match the URL is returned prefixed with `'unsafe:'` to ensure that when it is written - * to the DOM it is inactive and potentially malicious code will not be executed. - * - * @param {RegExp=} regexp New regexp to whitelist urls with. - * @returns {RegExp|ng.$compileProvider} Current RegExp if called without value or self for - * chaining otherwise. - */ - this.imgSrcSanitizationWhitelist = function(regexp) { - if (isDefined(regexp)) { - imgSrcSanitizationWhitelist = regexp; - return this; - } - return imgSrcSanitizationWhitelist; - }; - - this.$get = function() { - return function sanitizeUri(uri, isMediaUrl) { - // if (!uri) return uri; - var regex = isMediaUrl ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; - var normalizedVal = urlResolve(uri && uri.trim()).href; - if (normalizedVal !== '' && !normalizedVal.match(regex)) { - return 'unsafe:' + normalizedVal; - } - return uri; - }; - }; -} - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - * Any commits to this file should be reviewed with security in mind. * - * Changes to this file can potentially create security vulnerabilities. * - * An approval from 2 Core members with history of modifying * - * this file is required. * - * * - * Does the change somehow allow for arbitrary javascript to be executed? * - * Or allows for someone to change the prototype of built-in objects? * - * Or gives undesired access to variables likes document or window? * - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - -/* exported $SceProvider, $SceDelegateProvider */ - -var $sceMinErr = minErr('$sce'); - -var SCE_CONTEXTS = { - // HTML is used when there's HTML rendered (e.g. ng-bind-html, iframe srcdoc binding). - HTML: 'html', - - // Style statements or stylesheets. Currently unused in AngularJS. - CSS: 'css', - - // An URL used in a context where it refers to the source of media, which are not expected to be run - // as scripts, such as an image, audio, video, etc. - MEDIA_URL: 'mediaUrl', - - // An URL used in a context where it does not refer to a resource that loads code. - // A value that can be trusted as a URL can also trusted as a MEDIA_URL. - URL: 'url', - - // RESOURCE_URL is a subtype of URL used where the referred-to resource could be interpreted as - // code. (e.g. ng-include, script src binding, templateUrl) - // A value that can be trusted as a RESOURCE_URL, can also trusted as a URL and a MEDIA_URL. - RESOURCE_URL: 'resourceUrl', - - // Script. Currently unused in AngularJS. - JS: 'js' -}; - -// Helper functions follow. - -var UNDERSCORE_LOWERCASE_REGEXP = /_([a-z])/g; - -function snakeToCamel(name) { - return name - .replace(UNDERSCORE_LOWERCASE_REGEXP, fnCamelCaseReplace); -} - -function adjustMatcher(matcher) { - if (matcher === 'self') { - return matcher; - } else if (isString(matcher)) { - // Strings match exactly except for 2 wildcards - '*' and '**'. - // '*' matches any character except those from the set ':/.?&'. - // '**' matches any character (like .* in a RegExp). - // More than 2 *'s raises an error as it's ill defined. - if (matcher.indexOf('***') > -1) { - throw $sceMinErr('iwcard', - 'Illegal sequence *** in string matcher. String: {0}', matcher); - } - matcher = escapeForRegexp(matcher). - replace(/\\\*\\\*/g, '.*'). - replace(/\\\*/g, '[^:/.?&;]*'); - return new RegExp('^' + matcher + '$'); - } else if (isRegExp(matcher)) { - // The only other type of matcher allowed is a Regexp. - // Match entire URL / disallow partial matches. - // Flags are reset (i.e. no global, ignoreCase or multiline) - return new RegExp('^' + matcher.source + '$'); - } else { - throw $sceMinErr('imatcher', - 'Matchers may only be "self", string patterns or RegExp objects'); - } -} - - -function adjustMatchers(matchers) { - var adjustedMatchers = []; - if (isDefined(matchers)) { - forEach(matchers, function(matcher) { - adjustedMatchers.push(adjustMatcher(matcher)); - }); - } - return adjustedMatchers; -} - - -/** - * @ngdoc service - * @name $sceDelegate - * @kind function - * - * @description - * - * `$sceDelegate` is a service that is used by the `$sce` service to provide {@link ng.$sce Strict - * Contextual Escaping (SCE)} services to AngularJS. - * - * For an overview of this service and the functionnality it provides in AngularJS, see the main - * page for {@link ng.$sce SCE}. The current page is targeted for developers who need to alter how - * SCE works in their application, which shouldn't be needed in most cases. - * - *
      - * AngularJS strongly relies on contextual escaping for the security of bindings: disabling or - * modifying this might cause cross site scripting (XSS) vulnerabilities. For libraries owners, - * changes to this service will also influence users, so be extra careful and document your changes. - *
      - * - * Typically, you would configure or override the {@link ng.$sceDelegate $sceDelegate} instead of - * the `$sce` service to customize the way Strict Contextual Escaping works in AngularJS. This is - * because, while the `$sce` provides numerous shorthand methods, etc., you really only need to - * override 3 core functions (`trustAs`, `getTrusted` and `valueOf`) to replace the way things - * work because `$sce` delegates to `$sceDelegate` for these operations. - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} to configure this service. - * - * The default instance of `$sceDelegate` should work out of the box with little pain. While you - * can override it completely to change the behavior of `$sce`, the common case would - * involve configuring the {@link ng.$sceDelegateProvider $sceDelegateProvider} instead by setting - * your own whitelists and blacklists for trusting URLs used for loading AngularJS resources such as - * templates. Refer {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * $sceDelegateProvider.resourceUrlWhitelist} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist} - */ - -/** - * @ngdoc provider - * @name $sceDelegateProvider - * @this - * - * @description - * - * The `$sceDelegateProvider` provider allows developers to configure the {@link ng.$sceDelegate - * $sceDelegate service}, used as a delegate for {@link ng.$sce Strict Contextual Escaping (SCE)}. - * - * The `$sceDelegateProvider` allows one to get/set the whitelists and blacklists used to ensure - * that the URLs used for sourcing AngularJS templates and other script-running URLs are safe (all - * places that use the `$sce.RESOURCE_URL` context). See - * {@link ng.$sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider.resourceUrlWhitelist} - * and - * {@link ng.$sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider.resourceUrlBlacklist}, - * - * For the general details about this service in AngularJS, read the main page for {@link ng.$sce - * Strict Contextual Escaping (SCE)}. - * - * **Example**: Consider the following case.
      - * - * - your app is hosted at url `http://myapp.example.com/` - * - but some of your templates are hosted on other domains you control such as - * `http://srv01.assets.example.com/`, `http://srv02.assets.example.com/`, etc. - * - and you have an open redirect at `http://myapp.example.com/clickThru?...`. - * - * Here is what a secure configuration for this scenario might look like: - * - * ``` - * angular.module('myApp', []).config(function($sceDelegateProvider) { - * $sceDelegateProvider.resourceUrlWhitelist([ - * // Allow same origin resource loads. - * 'self', - * // Allow loading from our assets domain. Notice the difference between * and **. - * 'http://srv*.assets.example.com/**' - * ]); - * - * // The blacklist overrides the whitelist so the open redirect here is blocked. - * $sceDelegateProvider.resourceUrlBlacklist([ - * 'http://myapp.example.com/clickThru**' - * ]); - * }); - * ``` - * Note that an empty whitelist will block every resource URL from being loaded, and will require - * you to manually mark each one as trusted with `$sce.trustAsResourceUrl`. However, templates - * requested by {@link ng.$templateRequest $templateRequest} that are present in - * {@link ng.$templateCache $templateCache} will not go through this check. If you have a mechanism - * to populate your templates in that cache at config time, then it is a good idea to remove 'self' - * from that whitelist. This helps to mitigate the security impact of certain types of issues, like - * for instance attacker-controlled `ng-includes`. - */ - -function $SceDelegateProvider() { - this.SCE_CONTEXTS = SCE_CONTEXTS; - - // Resource URLs can also be trusted by policy. - var resourceUrlWhitelist = ['self'], - resourceUrlBlacklist = []; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlWhitelist - * @kind function - * - * @param {Array=} whitelist When provided, replaces the resourceUrlWhitelist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored. - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array. - * - * @return {Array} The currently set whitelist array. - * - * @description - * Sets/Gets the whitelist of trusted resource URLs. - * - * The **default value** when no whitelist has been explicitly set is `['self']` allowing only - * same origin resource requests. - * - *
      - * **Note:** the default whitelist of 'self' is not recommended if your app shares its origin - * with other apps! It is a good idea to limit it to only your application's directory. - *
      - */ - this.resourceUrlWhitelist = function(value) { - if (arguments.length) { - resourceUrlWhitelist = adjustMatchers(value); - } - return resourceUrlWhitelist; - }; - - /** - * @ngdoc method - * @name $sceDelegateProvider#resourceUrlBlacklist - * @kind function - * - * @param {Array=} blacklist When provided, replaces the resourceUrlBlacklist with the value - * provided. This must be an array or null. A snapshot of this array is used so further - * changes to the array are ignored.

      - * Follow {@link ng.$sce#resourceUrlPatternItem this link} for a description of the items - * allowed in this array.

      - * The typical usage for the blacklist is to **block - * [open redirects](http://cwe.mitre.org/data/definitions/601.html)** served by your domain as - * these would otherwise be trusted but actually return content from the redirected domain. - *

      - * Finally, **the blacklist overrides the whitelist** and has the final say. - * - * @return {Array} The currently set blacklist array. - * - * @description - * Sets/Gets the blacklist of trusted resource URLs. - * - * The **default value** when no whitelist has been explicitly set is the empty array (i.e. there - * is no blacklist.) - */ - - this.resourceUrlBlacklist = function(value) { - if (arguments.length) { - resourceUrlBlacklist = adjustMatchers(value); - } - return resourceUrlBlacklist; - }; - - this.$get = ['$injector', '$$sanitizeUri', function($injector, $$sanitizeUri) { - - var htmlSanitizer = function htmlSanitizer(html) { - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - }; - - if ($injector.has('$sanitize')) { - htmlSanitizer = $injector.get('$sanitize'); - } - - - function matchUrl(matcher, parsedUrl) { - if (matcher === 'self') { - return urlIsSameOrigin(parsedUrl) || urlIsSameOriginAsBaseUrl(parsedUrl); - } else { - // definitely a regex. See adjustMatchers() - return !!matcher.exec(parsedUrl.href); - } - } - - function isResourceUrlAllowedByPolicy(url) { - var parsedUrl = urlResolve(url.toString()); - var i, n, allowed = false; - // Ensure that at least one item from the whitelist allows this url. - for (i = 0, n = resourceUrlWhitelist.length; i < n; i++) { - if (matchUrl(resourceUrlWhitelist[i], parsedUrl)) { - allowed = true; - break; - } - } - if (allowed) { - // Ensure that no item from the blacklist blocked this url. - for (i = 0, n = resourceUrlBlacklist.length; i < n; i++) { - if (matchUrl(resourceUrlBlacklist[i], parsedUrl)) { - allowed = false; - break; - } - } - } - return allowed; - } - - function generateHolderType(Base) { - var holderType = function TrustedValueHolderType(trustedValue) { - this.$$unwrapTrustedValue = function() { - return trustedValue; - }; - }; - if (Base) { - holderType.prototype = new Base(); - } - holderType.prototype.valueOf = function sceValueOf() { - return this.$$unwrapTrustedValue(); - }; - holderType.prototype.toString = function sceToString() { - return this.$$unwrapTrustedValue().toString(); - }; - return holderType; - } - - var trustedValueHolderBase = generateHolderType(), - byType = {}; - - byType[SCE_CONTEXTS.HTML] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.CSS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.MEDIA_URL] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.URL] = generateHolderType(byType[SCE_CONTEXTS.MEDIA_URL]); - byType[SCE_CONTEXTS.JS] = generateHolderType(trustedValueHolderBase); - byType[SCE_CONTEXTS.RESOURCE_URL] = generateHolderType(byType[SCE_CONTEXTS.URL]); - - /** - * @ngdoc method - * @name $sceDelegate#trustAs - * - * @description - * Returns a trusted representation of the parameter for the specified context. This trusted - * object will later on be used as-is, without any security check, by bindings or directives - * that require this security context. - * For instance, marking a string as trusted for the `$sce.HTML` context will entirely bypass - * the potential `$sanitize` call in corresponding `$sce.HTML` bindings or directives, such as - * `ng-bind-html`. Note that in most cases you won't need to call this function: if you have the - * sanitizer loaded, passing the value itself will render all the HTML that does not pose a - * security risk. - * - * See {@link ng.$sceDelegate#getTrusted getTrusted} for the function that will consume those - * trusted values, and {@link ng.$sce $sce} for general documentation about strict contextual - * escaping. - * - * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`, - * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`. - * - * @param {*} value The value that should be considered trusted. - * @return {*} A trusted representation of value, that can be used in the given context. - */ - function trustAs(type, trustedValue) { - var Constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - if (!Constructor) { - throw $sceMinErr('icontext', - 'Attempted to trust a value in invalid context. Context: {0}; Value: {1}', - type, trustedValue); - } - if (trustedValue === null || isUndefined(trustedValue) || trustedValue === '') { - return trustedValue; - } - // All the current contexts in SCE_CONTEXTS happen to be strings. In order to avoid trusting - // mutable objects, we ensure here that the value passed in is actually a string. - if (typeof trustedValue !== 'string') { - throw $sceMinErr('itype', - 'Attempted to trust a non-string value in a content requiring a string: Context: {0}', - type); - } - return new Constructor(trustedValue); - } - - /** - * @ngdoc method - * @name $sceDelegate#valueOf - * - * @description - * If the passed parameter had been returned by a prior call to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`}, returns the value that had been passed to {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. - * - * If the passed parameter is not a value that had been returned by {@link - * ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}, it must be returned as-is. - * - * @param {*} value The result of a prior {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`} - * call or anything else. - * @return {*} The `value` that was originally provided to {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} if `value` is the result of such a call. Otherwise, returns - * `value` unchanged. - */ - function valueOf(maybeTrusted) { - if (maybeTrusted instanceof trustedValueHolderBase) { - return maybeTrusted.$$unwrapTrustedValue(); - } else { - return maybeTrusted; - } - } - - /** - * @ngdoc method - * @name $sceDelegate#getTrusted - * - * @description - * Given an object and a security context in which to assign it, returns a value that's safe to - * use in this context, which was represented by the parameter. To do so, this function either - * unwraps the safe type it has been given (for instance, a {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} result), or it might try to sanitize the value given, depending on - * the context and sanitizer availablility. - * - * The contexts that can be sanitized are $sce.MEDIA_URL, $sce.URL and $sce.HTML. The first two are available - * by default, and the third one relies on the `$sanitize` service (which may be loaded through - * the `ngSanitize` module). Furthermore, for $sce.RESOURCE_URL context, a plain string may be - * accepted if the resource url policy defined by {@link ng.$sceDelegateProvider#resourceUrlWhitelist - * `$sceDelegateProvider.resourceUrlWhitelist`} and {@link ng.$sceDelegateProvider#resourceUrlBlacklist - * `$sceDelegateProvider.resourceUrlBlacklist`} accepts that resource. - * - * This function will throw if the safe type isn't appropriate for this context, or if the - * value given cannot be accepted in the context (which might be caused by sanitization not - * being available, or the value not being recognized as safe). - * - *

      - * Disabling auto-escaping is extremely dangerous, it usually creates a Cross Site Scripting - * (XSS) vulnerability in your application. - *
      - * - * @param {string} type The context in which this value is to be used (such as `$sce.HTML`). - * @param {*} maybeTrusted The result of a prior {@link ng.$sceDelegate#trustAs - * `$sceDelegate.trustAs`} call, or anything else (which will not be considered trusted.) - * @return {*} A version of the value that's safe to use in the given context, or throws an - * exception if this is impossible. - */ - function getTrusted(type, maybeTrusted) { - if (maybeTrusted === null || isUndefined(maybeTrusted) || maybeTrusted === '') { - return maybeTrusted; - } - var constructor = (byType.hasOwnProperty(type) ? byType[type] : null); - // If maybeTrusted is a trusted class instance or subclass instance, then unwrap and return - // as-is. - if (constructor && maybeTrusted instanceof constructor) { - return maybeTrusted.$$unwrapTrustedValue(); - } - - // If maybeTrusted is a trusted class instance but not of the correct trusted type - // then unwrap it and allow it to pass through to the rest of the checks - if (isFunction(maybeTrusted.$$unwrapTrustedValue)) { - maybeTrusted = maybeTrusted.$$unwrapTrustedValue(); - } - - // If we get here, then we will either sanitize the value or throw an exception. - if (type === SCE_CONTEXTS.MEDIA_URL || type === SCE_CONTEXTS.URL) { - // we attempt to sanitize non-resource URLs - return $$sanitizeUri(maybeTrusted.toString(), type === SCE_CONTEXTS.MEDIA_URL); - } else if (type === SCE_CONTEXTS.RESOURCE_URL) { - if (isResourceUrlAllowedByPolicy(maybeTrusted)) { - return maybeTrusted; - } else { - throw $sceMinErr('insecurl', - 'Blocked loading resource from url not allowed by $sceDelegate policy. URL: {0}', - maybeTrusted.toString()); - } - } else if (type === SCE_CONTEXTS.HTML) { - // htmlSanitizer throws its own error when no sanitizer is available. - return htmlSanitizer(maybeTrusted); - } - // Default error when the $sce service has no way to make the input safe. - throw $sceMinErr('unsafe', 'Attempting to use an unsafe value in a safe context.'); - } - - return { trustAs: trustAs, - getTrusted: getTrusted, - valueOf: valueOf }; - }]; -} - - -/** - * @ngdoc provider - * @name $sceProvider - * @this - * - * @description - * - * The $sceProvider provider allows developers to configure the {@link ng.$sce $sce} service. - * - enable/disable Strict Contextual Escaping (SCE) in a module - * - override the default implementation with a custom delegate - * - * Read more about {@link ng.$sce Strict Contextual Escaping (SCE)}. - */ - -/** - * @ngdoc service - * @name $sce - * @kind function - * - * @description - * - * `$sce` is a service that provides Strict Contextual Escaping services to AngularJS. - * - * ## Strict Contextual Escaping - * - * Strict Contextual Escaping (SCE) is a mode in which AngularJS constrains bindings to only render - * trusted values. Its goal is to assist in writing code in a way that (a) is secure by default, and - * (b) makes auditing for security vulnerabilities such as XSS, clickjacking, etc. a lot easier. - * - * ### Overview - * - * To systematically block XSS security bugs, AngularJS treats all values as untrusted by default in - * HTML or sensitive URL bindings. When binding untrusted values, AngularJS will automatically - * run security checks on them (sanitizations, whitelists, depending on context), or throw when it - * cannot guarantee the security of the result. That behavior depends strongly on contexts: HTML - * can be sanitized, but template URLs cannot, for instance. - * - * To illustrate this, consider the `ng-bind-html` directive. It renders its value directly as HTML: - * we call that the *context*. When given an untrusted input, AngularJS will attempt to sanitize it - * before rendering if a sanitizer is available, and throw otherwise. To bypass sanitization and - * render the input as-is, you will need to mark it as trusted for that context before attempting - * to bind it. - * - * As of version 1.2, AngularJS ships with SCE enabled by default. - * - * ### In practice - * - * Here's an example of a binding in a privileged context: - * - * ``` - * - *
      - * ``` - * - * Notice that `ng-bind-html` is bound to `userHtml` controlled by the user. With SCE - * disabled, this application allows the user to render arbitrary HTML into the DIV, which would - * be an XSS security bug. In a more realistic example, one may be rendering user comments, blog - * articles, etc. via bindings. (HTML is just one example of a context where rendering user - * controlled input creates security vulnerabilities.) - * - * For the case of HTML, you might use a library, either on the client side, or on the server side, - * to sanitize unsafe HTML before binding to the value and rendering it in the document. - * - * How would you ensure that every place that used these types of bindings was bound to a value that - * was sanitized by your library (or returned as safe for rendering by your server?) How can you - * ensure that you didn't accidentally delete the line that sanitized the value, or renamed some - * properties/fields and forgot to update the binding to the sanitized value? - * - * To be secure by default, AngularJS makes sure bindings go through that sanitization, or - * any similar validation process, unless there's a good reason to trust the given value in this - * context. That trust is formalized with a function call. This means that as a developer, you - * can assume all untrusted bindings are safe. Then, to audit your code for binding security issues, - * you just need to ensure the values you mark as trusted indeed are safe - because they were - * received from your server, sanitized by your library, etc. You can organize your codebase to - * help with this - perhaps allowing only the files in a specific directory to do this. - * Ensuring that the internal API exposed by that code doesn't markup arbitrary values as safe then - * becomes a more manageable task. - * - * In the case of AngularJS' SCE service, one uses {@link ng.$sce#trustAs $sce.trustAs} - * (and shorthand methods such as {@link ng.$sce#trustAsHtml $sce.trustAsHtml}, etc.) to - * build the trusted versions of your values. - * - * ### How does it work? - * - * In privileged contexts, directives and code will bind to the result of {@link ng.$sce#getTrusted - * $sce.getTrusted(context, value)} rather than to the value directly. Think of this function as - * a way to enforce the required security context in your data sink. Directives use {@link - * ng.$sce#parseAs $sce.parseAs} rather than `$parse` to watch attribute bindings, which performs - * the {@link ng.$sce#getTrusted $sce.getTrusted} behind the scenes on non-constant literals. Also, - * when binding without directives, AngularJS will understand the context of your bindings - * automatically. - * - * As an example, {@link ng.directive:ngBindHtml ngBindHtml} uses {@link - * ng.$sce#parseAsHtml $sce.parseAsHtml(binding expression)}. Here's the actual code (slightly - * simplified): - * - * ``` - * var ngBindHtmlDirective = ['$sce', function($sce) { - * return function(scope, element, attr) { - * scope.$watch($sce.parseAsHtml(attr.ngBindHtml), function(value) { - * element.html(value || ''); - * }); - * }; - * }]; - * ``` - * - * ### Impact on loading templates - * - * This applies both to the {@link ng.directive:ngInclude `ng-include`} directive as well as - * `templateUrl`'s specified by {@link guide/directive directives}. - * - * By default, AngularJS only loads templates from the same domain and protocol as the application - * document. This is done by calling {@link ng.$sce#getTrustedResourceUrl - * $sce.getTrustedResourceUrl} on the template URL. To load templates from other domains and/or - * protocols, you may either {@link ng.$sceDelegateProvider#resourceUrlWhitelist whitelist - * them} or {@link ng.$sce#trustAsResourceUrl wrap it} into a trusted value. - * - * *Please note*: - * The browser's - * [Same Origin Policy](https://code.google.com/p/browsersec/wiki/Part2#Same-origin_policy_for_XMLHttpRequest) - * and [Cross-Origin Resource Sharing (CORS)](http://www.w3.org/TR/cors/) - * policy apply in addition to this and may further restrict whether the template is successfully - * loaded. This means that without the right CORS policy, loading templates from a different domain - * won't work on all browsers. Also, loading templates from `file://` URL does not work on some - * browsers. - * - * ### This feels like too much overhead - * - * It's important to remember that SCE only applies to interpolation expressions. - * - * If your expressions are constant literals, they're automatically trusted and you don't need to - * call `$sce.trustAs` on them (e.g. - * `
      `) just works (remember to include the - * `ngSanitize` module). The `$sceDelegate` will also use the `$sanitize` service if it is available - * when binding untrusted values to `$sce.HTML` context. - * AngularJS provides an implementation in `angular-sanitize.js`, and if you - * wish to use it, you will also need to depend on the {@link ngSanitize `ngSanitize`} module in - * your application. - * - * The included {@link ng.$sceDelegate $sceDelegate} comes with sane defaults to allow you to load - * templates in `ng-include` from your application's domain without having to even know about SCE. - * It blocks loading templates from other domains or loading templates over http from an https - * served document. You can change these by setting your own custom {@link - * ng.$sceDelegateProvider#resourceUrlWhitelist whitelists} and {@link - * ng.$sceDelegateProvider#resourceUrlBlacklist blacklists} for matching such URLs. - * - * This significantly reduces the overhead. It is far easier to pay the small overhead and have an - * application that's secure and can be audited to verify that with much more ease than bolting - * security onto an application later. - * - * - * ### What trusted context types are supported? - * - * | Context | Notes | - * |---------------------|----------------| - * | `$sce.HTML` | For HTML that's safe to source into the application. The {@link ng.directive:ngBindHtml ngBindHtml} directive uses this context for bindings. If an unsafe value is encountered and the {@link ngSanitize $sanitize} module is present this will sanitize the value instead of throwing an error. | - * | `$sce.CSS` | For CSS that's safe to source into the application. Currently unused. Feel free to use it in your own directives. | - * | `$sce.MEDIA_URL` | For URLs that are safe to render as media. Is automatically converted from string by sanitizing when needed. | - * | `$sce.URL` | For URLs that are safe to follow as links. Is automatically converted from string by sanitizing when needed. Note that `$sce.URL` makes a stronger statement about the URL than `$sce.MEDIA_URL` does and therefore contexts requiring values trusted for `$sce.URL` can be used anywhere that values trusted for `$sce.MEDIA_URL` are required.| - * | `$sce.RESOURCE_URL` | For URLs that are not only safe to follow as links, but whose contents are also safe to include in your application. Examples include `ng-include`, `src` / `ngSrc` bindings for tags other than `IMG` (e.g. `IFRAME`, `OBJECT`, etc.)

      Note that `$sce.RESOURCE_URL` makes a stronger statement about the URL than `$sce.URL` or `$sce.MEDIA_URL` do and therefore contexts requiring values trusted for `$sce.RESOURCE_URL` can be used anywhere that values trusted for `$sce.URL` or `$sce.MEDIA_URL` are required.

      The {@link $sceDelegateProvider#resourceUrlWhitelist $sceDelegateProvider#resourceUrlWhitelist()} and {@link $sceDelegateProvider#resourceUrlBlacklist $sceDelegateProvider#resourceUrlBlacklist()} can be used to restrict trusted origins for `RESOURCE_URL` | - * | `$sce.JS` | For JavaScript that is safe to execute in your application's context. Currently unused. Feel free to use it in your own directives. | - * - * - *
      - * Be aware that, before AngularJS 1.7.0, `a[href]` and `img[src]` used to sanitize their - * interpolated values directly rather than rely upon {@link ng.$sce#getTrusted `$sce.getTrusted`}. - * - * **As of 1.7.0, this is no longer the case.** - * - * Now such interpolations are marked as requiring `$sce.URL` (for `a[href]`) or `$sce.MEDIA_URL` - * (for `img[src]`), so that the sanitization happens (via `$sce.getTrusted...`) when the `$interpolate` - * service evaluates the expressions. - *
      - * - * There are no CSS or JS context bindings in AngularJS currently, so their corresponding `$sce.trustAs` - * functions aren't useful yet. This might evolve. - * - * ### Format of items in {@link ng.$sceDelegateProvider#resourceUrlWhitelist resourceUrlWhitelist}/{@link ng.$sceDelegateProvider#resourceUrlBlacklist Blacklist} - * - * Each element in these arrays must be one of the following: - * - * - **'self'** - * - The special **string**, `'self'`, can be used to match against all URLs of the **same - * domain** as the application document using the **same protocol**. - * - **String** (except the special value `'self'`) - * - The string is matched against the full *normalized / absolute URL* of the resource - * being tested (substring matches are not good enough.) - * - There are exactly **two wildcard sequences** - `*` and `**`. All other characters - * match themselves. - * - `*`: matches zero or more occurrences of any character other than one of the following 6 - * characters: '`:`', '`/`', '`.`', '`?`', '`&`' and '`;`'. It's a useful wildcard for use - * in a whitelist. - * - `**`: matches zero or more occurrences of *any* character. As such, it's not - * appropriate for use in a scheme, domain, etc. as it would match too much. (e.g. - * http://**.example.com/ would match http://evil.com/?ignore=.example.com/ and that might - * not have been the intention.) Its usage at the very end of the path is ok. (e.g. - * http://foo.example.com/templates/**). - * - **RegExp** (*see caveat below*) - * - *Caveat*: While regular expressions are powerful and offer great flexibility, their syntax - * (and all the inevitable escaping) makes them *harder to maintain*. It's easy to - * accidentally introduce a bug when one updates a complex expression (imho, all regexes should - * have good test coverage). For instance, the use of `.` in the regex is correct only in a - * small number of cases. A `.` character in the regex used when matching the scheme or a - * subdomain could be matched against a `:` or literal `.` that was likely not intended. It - * is highly recommended to use the string patterns and only fall back to regular expressions - * as a last resort. - * - The regular expression must be an instance of RegExp (i.e. not a string.) It is - * matched against the **entire** *normalized / absolute URL* of the resource being tested - * (even when the RegExp did not have the `^` and `$` codes.) In addition, any flags - * present on the RegExp (such as multiline, global, ignoreCase) are ignored. - * - If you are generating your JavaScript from some other templating engine (not - * recommended, e.g. in issue [#4006](https://github.com/angular/angular.js/issues/4006)), - * remember to escape your regular expression (and be aware that you might need more than - * one level of escaping depending on your templating engine and the way you interpolated - * the value.) Do make use of your platform's escaping mechanism as it might be good - * enough before coding your own. E.g. Ruby has - * [Regexp.escape(str)](http://www.ruby-doc.org/core-2.0.0/Regexp.html#method-c-escape) - * and Python has [re.escape](http://docs.python.org/library/re.html#re.escape). - * Javascript lacks a similar built in function for escaping. Take a look at Google - * Closure library's [goog.string.regExpEscape(s)]( - * http://docs.closure-library.googlecode.com/git/closure_goog_string_string.js.source.html#line962). - * - * Refer {@link ng.$sceDelegateProvider $sceDelegateProvider} for an example. - * - * ### Show me an example using SCE. - * - * - * - *
      - *

      - * User comments
      - * By default, HTML that isn't explicitly trusted (e.g. Alice's comment) is sanitized when - * $sanitize is available. If $sanitize isn't available, this results in an error instead of an - * exploit. - *
      - *
      - * {{userComment.name}}: - * - *
      - *
      - *
      - *
      - *
      - * - * - * angular.module('mySceApp', ['ngSanitize']) - * .controller('AppController', ['$http', '$templateCache', '$sce', - * function AppController($http, $templateCache, $sce) { - * var self = this; - * $http.get('test_data.json', {cache: $templateCache}).then(function(response) { - * self.userComments = response.data; - * }); - * self.explicitlyTrustedHtml = $sce.trustAsHtml( - * 'Hover over this text.'); - * }]); - * - * - * - * [ - * { "name": "Alice", - * "htmlComment": - * "Is anyone reading this?" - * }, - * { "name": "Bob", - * "htmlComment": "Yes! Am I the only other one?" - * } - * ] - * - * - * - * describe('SCE doc demo', function() { - * it('should sanitize untrusted values', function() { - * expect(element.all(by.css('.htmlComment')).first().getAttribute('innerHTML')) - * .toBe('Is anyone reading this?'); - * }); - * - * it('should NOT sanitize explicitly trusted values', function() { - * expect(element(by.id('explicitlyTrustedHtml')).getAttribute('innerHTML')).toBe( - * 'Hover over this text.'); - * }); - * }); - * - *
      - * - * - * - * ## Can I disable SCE completely? - * - * Yes, you can. However, this is strongly discouraged. SCE gives you a lot of security benefits - * for little coding overhead. It will be much harder to take an SCE disabled application and - * either secure it on your own or enable SCE at a later stage. It might make sense to disable SCE - * for cases where you have a lot of existing code that was written before SCE was introduced and - * you're migrating them a module at a time. Also do note that this is an app-wide setting, so if - * you are writing a library, you will cause security bugs applications using it. - * - * That said, here's how you can completely disable SCE: - * - * ``` - * angular.module('myAppWithSceDisabledmyApp', []).config(function($sceProvider) { - * // Completely disable SCE. For demonstration purposes only! - * // Do not use in new projects or libraries. - * $sceProvider.enabled(false); - * }); - * ``` - * - */ - -function $SceProvider() { - var enabled = true; - - /** - * @ngdoc method - * @name $sceProvider#enabled - * @kind function - * - * @param {boolean=} value If provided, then enables/disables SCE application-wide. - * @return {boolean} True if SCE is enabled, false otherwise. - * - * @description - * Enables/disables SCE and returns the current value. - */ - this.enabled = function(value) { - if (arguments.length) { - enabled = !!value; - } - return enabled; - }; - - - /* Design notes on the default implementation for SCE. - * - * The API contract for the SCE delegate - * ------------------------------------- - * The SCE delegate object must provide the following 3 methods: - * - * - trustAs(contextEnum, value) - * This method is used to tell the SCE service that the provided value is OK to use in the - * contexts specified by contextEnum. It must return an object that will be accepted by - * getTrusted() for a compatible contextEnum and return this value. - * - * - valueOf(value) - * For values that were not produced by trustAs(), return them as is. For values that were - * produced by trustAs(), return the corresponding input value to trustAs. Basically, if - * trustAs is wrapping the given values into some type, this operation unwraps it when given - * such a value. - * - * - getTrusted(contextEnum, value) - * This function should return the value that is safe to use in the context specified by - * contextEnum or throw and exception otherwise. - * - * NOTE: This contract deliberately does NOT state that values returned by trustAs() must be - * opaque or wrapped in some holder object. That happens to be an implementation detail. For - * instance, an implementation could maintain a registry of all trusted objects by context. In - * such a case, trustAs() would return the same object that was passed in. getTrusted() would - * return the same object passed in if it was found in the registry under a compatible context or - * throw an exception otherwise. An implementation might only wrap values some of the time based - * on some criteria. getTrusted() might return a value and not throw an exception for special - * constants or objects even if not wrapped. All such implementations fulfill this contract. - * - * - * A note on the inheritance model for SCE contexts - * ------------------------------------------------ - * I've used inheritance and made RESOURCE_URL wrapped types a subtype of URL wrapped types. This - * is purely an implementation details. - * - * The contract is simply this: - * - * getTrusted($sce.RESOURCE_URL, value) succeeding implies that getTrusted($sce.URL, value) - * will also succeed. - * - * Inheritance happens to capture this in a natural way. In some future, we may not use - * inheritance anymore. That is OK because no code outside of sce.js and sceSpecs.js would need to - * be aware of this detail. - */ - - this.$get = ['$parse', '$sceDelegate', function( - $parse, $sceDelegate) { - // Support: IE 9-11 only - // Prereq: Ensure that we're not running in IE<11 quirks mode. In that mode, IE < 11 allow - // the "expression(javascript expression)" syntax which is insecure. - if (enabled && msie < 8) { - throw $sceMinErr('iequirks', - 'Strict Contextual Escaping does not support Internet Explorer version < 11 in quirks ' + - 'mode. You can fix this by adding the text to the top of your HTML ' + - 'document. See http://docs.angularjs.org/api/ng.$sce for more information.'); - } - - var sce = shallowCopy(SCE_CONTEXTS); - - /** - * @ngdoc method - * @name $sce#isEnabled - * @kind function - * - * @return {Boolean} True if SCE is enabled, false otherwise. If you want to set the value, you - * have to do it at module config time on {@link ng.$sceProvider $sceProvider}. - * - * @description - * Returns a boolean indicating if SCE is enabled. - */ - sce.isEnabled = function() { - return enabled; - }; - sce.trustAs = $sceDelegate.trustAs; - sce.getTrusted = $sceDelegate.getTrusted; - sce.valueOf = $sceDelegate.valueOf; - - if (!enabled) { - sce.trustAs = sce.getTrusted = function(type, value) { return value; }; - sce.valueOf = identity; - } - - /** - * @ngdoc method - * @name $sce#parseAs - * - * @description - * Converts AngularJS {@link guide/expression expression} into a function. This is like {@link - * ng.$parse $parse} and is identical when the expression is a literal constant. Otherwise, it - * wraps the expression in a call to {@link ng.$sce#getTrusted $sce.getTrusted(*type*, - * *result*)} - * - * @param {string} type The SCE context in which this result will be used. - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - sce.parseAs = function sceParseAs(type, expr) { - var parsed = $parse(expr); - if (parsed.literal && parsed.constant) { - return parsed; - } else { - return $parse(expr, function(value) { - return sce.getTrusted(type, value); - }); - } - }; - - /** - * @ngdoc method - * @name $sce#trustAs - * - * @description - * Delegates to {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs`}. As such, returns a - * wrapped object that represents your value, and the trust you have in its safety for the given - * context. AngularJS can then use that value as-is in bindings of the specified secure context. - * This is used in bindings for `ng-bind-html`, `ng-include`, and most `src` attribute - * interpolations. See {@link ng.$sce $sce} for strict contextual escaping. - * - * @param {string} type The context in which this value is safe for use, e.g. `$sce.URL`, - * `$sce.RESOURCE_URL`, `$sce.HTML`, `$sce.JS` or `$sce.CSS`. - * - * @param {*} value The value that that should be considered trusted. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in the context you specified. - */ - - /** - * @ngdoc method - * @name $sce#trustAsHtml - * - * @description - * Shorthand method. `$sce.trustAsHtml(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.HTML, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.HTML` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.HTML` context (like `ng-bind-html`). - */ - - /** - * @ngdoc method - * @name $sce#trustAsCss - * - * @description - * Shorthand method. `$sce.trustAsCss(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.CSS, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.CSS` context. - * @return {*} A wrapped version of value that can be used as a trusted variant - * of your `value` in `$sce.CSS` context. This context is currently unused, so there are - * almost no reasons to use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#trustAsUrl - * - * @description - * Shorthand method. `$sce.trustAsUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.URL, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.URL` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.URL` context. That context is currently unused, so there are almost no reasons - * to use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#trustAsResourceUrl - * - * @description - * Shorthand method. `$sce.trustAsResourceUrl(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.RESOURCE_URL` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.RESOURCE_URL` context (template URLs in `ng-include`, most `src` attribute - * bindings, ...) - */ - - /** - * @ngdoc method - * @name $sce#trustAsJs - * - * @description - * Shorthand method. `$sce.trustAsJs(value)` → - * {@link ng.$sceDelegate#trustAs `$sceDelegate.trustAs($sce.JS, value)`} - * - * @param {*} value The value to mark as trusted for `$sce.JS` context. - * @return {*} A wrapped version of value that can be used as a trusted variant of your `value` - * in `$sce.JS` context. That context is currently unused, so there are almost no reasons to - * use this function so far. - */ - - /** - * @ngdoc method - * @name $sce#getTrusted - * - * @description - * Delegates to {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted`}. As such, - * takes any input, and either returns a value that's safe to use in the specified context, - * or throws an exception. This function is aware of trusted values created by the `trustAs` - * function and its shorthands, and when contexts are appropriate, returns the unwrapped value - * as-is. Finally, this function can also throw when there is no way to turn `maybeTrusted` in a - * safe value (e.g., no sanitization is available or possible.) - * - * @param {string} type The context in which this value is to be used. - * @param {*} maybeTrusted The result of a prior {@link ng.$sce#trustAs - * `$sce.trustAs`} call, or anything else (which will not be considered trusted.) - * @return {*} A version of the value that's safe to use in the given context, or throws an - * exception if this is impossible. - */ - - /** - * @ngdoc method - * @name $sce#getTrustedHtml - * - * @description - * Shorthand method. `$sce.getTrustedHtml(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.HTML, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.HTML, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedCss - * - * @description - * Shorthand method. `$sce.getTrustedCss(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.CSS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.CSS, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedUrl - * - * @description - * Shorthand method. `$sce.getTrustedUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.URL, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedResourceUrl - * - * @description - * Shorthand method. `$sce.getTrustedResourceUrl(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.RESOURCE_URL, value)`} - * - * @param {*} value The value to pass to `$sceDelegate.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.RESOURCE_URL, value)` - */ - - /** - * @ngdoc method - * @name $sce#getTrustedJs - * - * @description - * Shorthand method. `$sce.getTrustedJs(value)` → - * {@link ng.$sceDelegate#getTrusted `$sceDelegate.getTrusted($sce.JS, value)`} - * - * @param {*} value The value to pass to `$sce.getTrusted`. - * @return {*} The return value of `$sce.getTrusted($sce.JS, value)` - */ - - /** - * @ngdoc method - * @name $sce#parseAsHtml - * - * @description - * Shorthand method. `$sce.parseAsHtml(expression string)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.HTML, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsCss - * - * @description - * Shorthand method. `$sce.parseAsCss(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.CSS, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsUrl - * - * @description - * Shorthand method. `$sce.parseAsUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.URL, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsResourceUrl - * - * @description - * Shorthand method. `$sce.parseAsResourceUrl(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.RESOURCE_URL, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - /** - * @ngdoc method - * @name $sce#parseAsJs - * - * @description - * Shorthand method. `$sce.parseAsJs(value)` → - * {@link ng.$sce#parseAs `$sce.parseAs($sce.JS, value)`} - * - * @param {string} expression String expression to compile. - * @return {function(context, locals)} A function which represents the compiled expression: - * - * * `context` – `{object}` – an object against which any expressions embedded in the - * strings are evaluated against (typically a scope object). - * * `locals` – `{object=}` – local variables context object, useful for overriding values - * in `context`. - */ - - // Shorthand delegations. - var parse = sce.parseAs, - getTrusted = sce.getTrusted, - trustAs = sce.trustAs; - - forEach(SCE_CONTEXTS, function(enumValue, name) { - var lName = lowercase(name); - sce[snakeToCamel('parse_as_' + lName)] = function(expr) { - return parse(enumValue, expr); - }; - sce[snakeToCamel('get_trusted_' + lName)] = function(value) { - return getTrusted(enumValue, value); - }; - sce[snakeToCamel('trust_as_' + lName)] = function(value) { - return trustAs(enumValue, value); - }; - }); - - return sce; - }]; -} - -/* exported $SnifferProvider */ - -/** - * !!! This is an undocumented "private" service !!! - * - * @name $sniffer - * @requires $window - * @requires $document - * @this - * - * @property {boolean} history Does the browser support html5 history api ? - * @property {boolean} transitions Does the browser support CSS transition events ? - * @property {boolean} animations Does the browser support CSS animation events ? - * - * @description - * This is very simple implementation of testing browser's features. - */ -function $SnifferProvider() { - this.$get = ['$window', '$document', function($window, $document) { - var eventSupport = {}, - // Chrome Packaged Apps are not allowed to access `history.pushState`. - // If not sandboxed, they can be detected by the presence of `chrome.app.runtime` - // (see https://developer.chrome.com/apps/api_index). If sandboxed, they can be detected by - // the presence of an extension runtime ID and the absence of other Chrome runtime APIs - // (see https://developer.chrome.com/apps/manifest/sandbox). - // (NW.js apps have access to Chrome APIs, but do support `history`.) - isNw = $window.nw && $window.nw.process, - isChromePackagedApp = - !isNw && - $window.chrome && - ($window.chrome.app && $window.chrome.app.runtime || - !$window.chrome.app && $window.chrome.runtime && $window.chrome.runtime.id), - hasHistoryPushState = !isChromePackagedApp && $window.history && $window.history.pushState, - android = - toInt((/android (\d+)/.exec(lowercase(($window.navigator || {}).userAgent)) || [])[1]), - boxee = /Boxee/i.test(($window.navigator || {}).userAgent), - document = $document[0] || {}, - bodyStyle = document.body && document.body.style, - transitions = false, - animations = false; - - if (bodyStyle) { - // Support: Android <5, Blackberry Browser 10, default Chrome in Android 4.4.x - // Mentioned browsers need a -webkit- prefix for transitions & animations. - transitions = !!('transition' in bodyStyle || 'webkitTransition' in bodyStyle); - animations = !!('animation' in bodyStyle || 'webkitAnimation' in bodyStyle); - } - - - return { - // Android has history.pushState, but it does not update location correctly - // so let's not use the history API at all. - // http://code.google.com/p/android/issues/detail?id=17471 - // https://github.com/angular/angular.js/issues/904 - - // older webkit browser (533.9) on Boxee box has exactly the same problem as Android has - // so let's not use the history API also - // We are purposefully using `!(android < 4)` to cover the case when `android` is undefined - history: !!(hasHistoryPushState && !(android < 4) && !boxee), - hasEvent: function(event) { - // Support: IE 9-11 only - // IE9 implements 'input' event it's so fubared that we rather pretend that it doesn't have - // it. In particular the event is not fired when backspace or delete key are pressed or - // when cut operation is performed. - // IE10+ implements 'input' event but it erroneously fires under various situations, - // e.g. when placeholder changes, or a form is focused. - if (event === 'input' && msie) return false; - - if (isUndefined(eventSupport[event])) { - var divElm = document.createElement('div'); - eventSupport[event] = 'on' + event in divElm; - } - - return eventSupport[event]; - }, - csp: csp(), - transitions: transitions, - animations: animations, - android: android - }; - }]; -} - -/** - * ! This is a private undocumented service ! - * - * @name $$taskTrackerFactory - * @description - * A function to create `TaskTracker` instances. - * - * A `TaskTracker` can keep track of pending tasks (grouped by type) and can notify interested - * parties when all pending tasks (or tasks of a specific type) have been completed. - * - * @param {$log} log - A logger instance (such as `$log`). Used to log error during callback - * execution. - * - * @this - */ -function $$TaskTrackerFactoryProvider() { - this.$get = valueFn(function(log) { return new TaskTracker(log); }); -} - -function TaskTracker(log) { - var self = this; - var taskCounts = {}; - var taskCallbacks = []; - - var ALL_TASKS_TYPE = self.ALL_TASKS_TYPE = '$$all$$'; - var DEFAULT_TASK_TYPE = self.DEFAULT_TASK_TYPE = '$$default$$'; - - /** - * Execute the specified function and decrement the appropriate `taskCounts` counter. - * If the counter reaches 0, all corresponding `taskCallbacks` are executed. - * - * @param {Function} fn - The function to execute. - * @param {string=} [taskType=DEFAULT_TASK_TYPE] - The type of task that is being completed. - */ - self.completeTask = completeTask; - - /** - * Increase the task count for the specified task type (or the default task type if non is - * specified). - * - * @param {string=} [taskType=DEFAULT_TASK_TYPE] - The type of task whose count will be increased. - */ - self.incTaskCount = incTaskCount; - - /** - * Execute the specified callback when all pending tasks have been completed. - * - * If there are no pending tasks, the callback is executed immediately. You can optionally limit - * the tasks that will be waited for to a specific type, by passing a `taskType`. - * - * @param {function} callback - The function to call when there are no pending tasks. - * @param {string=} [taskType=ALL_TASKS_TYPE] - The type of tasks that will be waited for. - */ - self.notifyWhenNoPendingTasks = notifyWhenNoPendingTasks; - - function completeTask(fn, taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - - try { - fn(); - } finally { - decTaskCount(taskType); - - var countForType = taskCounts[taskType]; - var countForAll = taskCounts[ALL_TASKS_TYPE]; - - // If at least one of the queues (`ALL_TASKS_TYPE` or `taskType`) is empty, run callbacks. - if (!countForAll || !countForType) { - var getNextCallback = !countForAll ? getLastCallback : getLastCallbackForType; - var nextCb; - - while ((nextCb = getNextCallback(taskType))) { - try { - nextCb(); - } catch (e) { - log.error(e); - } - } - } - } - } - - function decTaskCount(taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - if (taskCounts[taskType]) { - taskCounts[taskType]--; - taskCounts[ALL_TASKS_TYPE]--; - } - } - - function getLastCallback() { - var cbInfo = taskCallbacks.pop(); - return cbInfo && cbInfo.cb; - } - - function getLastCallbackForType(taskType) { - for (var i = taskCallbacks.length - 1; i >= 0; --i) { - var cbInfo = taskCallbacks[i]; - if (cbInfo.type === taskType) { - taskCallbacks.splice(i, 1); - return cbInfo.cb; - } - } - } - - function incTaskCount(taskType) { - taskType = taskType || DEFAULT_TASK_TYPE; - taskCounts[taskType] = (taskCounts[taskType] || 0) + 1; - taskCounts[ALL_TASKS_TYPE] = (taskCounts[ALL_TASKS_TYPE] || 0) + 1; - } - - function notifyWhenNoPendingTasks(callback, taskType) { - taskType = taskType || ALL_TASKS_TYPE; - if (!taskCounts[taskType]) { - callback(); - } else { - taskCallbacks.push({type: taskType, cb: callback}); - } - } -} - -var $templateRequestMinErr = minErr('$templateRequest'); - -/** - * @ngdoc provider - * @name $templateRequestProvider - * @this - * - * @description - * Used to configure the options passed to the {@link $http} service when making a template request. - * - * For example, it can be used for specifying the "Accept" header that is sent to the server, when - * requesting a template. - */ -function $TemplateRequestProvider() { - - var httpOptions; - - /** - * @ngdoc method - * @name $templateRequestProvider#httpOptions - * @description - * The options to be passed to the {@link $http} service when making the request. - * You can use this to override options such as the "Accept" header for template requests. - * - * The {@link $templateRequest} will set the `cache` and the `transformResponse` properties of the - * options if not overridden here. - * - * @param {string=} value new value for the {@link $http} options. - * @returns {string|self} Returns the {@link $http} options when used as getter and self if used as setter. - */ - this.httpOptions = function(val) { - if (val) { - httpOptions = val; - return this; - } - return httpOptions; - }; - - /** - * @ngdoc service - * @name $templateRequest - * - * @description - * The `$templateRequest` service runs security checks then downloads the provided template using - * `$http` and, upon success, stores the contents inside of `$templateCache`. If the HTTP request - * fails or the response data of the HTTP request is empty, a `$compile` error will be thrown (the - * exception can be thwarted by setting the 2nd parameter of the function to true). Note that the - * contents of `$templateCache` are trusted, so the call to `$sce.getTrustedUrl(tpl)` is omitted - * when `tpl` is of type string and `$templateCache` has the matching entry. - * - * If you want to pass custom options to the `$http` service, such as setting the Accept header you - * can configure this via {@link $templateRequestProvider#httpOptions}. - * - * `$templateRequest` is used internally by {@link $compile}, {@link ngRoute.$route}, and directives such - * as {@link ngInclude} to download and cache templates. - * - * 3rd party modules should use `$templateRequest` if their services or directives are loading - * templates. - * - * @param {string|TrustedResourceUrl} tpl The HTTP request template URL - * @param {boolean=} ignoreRequestError Whether or not to ignore the exception when the request fails or the template is empty - * - * @return {Promise} a promise for the HTTP response data of the given URL. - * - * @property {number} totalPendingRequests total amount of pending template requests being downloaded. - */ - this.$get = ['$exceptionHandler', '$templateCache', '$http', '$q', '$sce', - function($exceptionHandler, $templateCache, $http, $q, $sce) { - - function handleRequestFn(tpl, ignoreRequestError) { - handleRequestFn.totalPendingRequests++; - - // We consider the template cache holds only trusted templates, so - // there's no need to go through whitelisting again for keys that already - // are included in there. This also makes AngularJS accept any script - // directive, no matter its name. However, we still need to unwrap trusted - // types. - if (!isString(tpl) || isUndefined($templateCache.get(tpl))) { - tpl = $sce.getTrustedResourceUrl(tpl); - } - - var transformResponse = $http.defaults && $http.defaults.transformResponse; - - if (isArray(transformResponse)) { - transformResponse = transformResponse.filter(function(transformer) { - return transformer !== defaultHttpResponseTransform; - }); - } else if (transformResponse === defaultHttpResponseTransform) { - transformResponse = null; - } - - return $http.get(tpl, extend({ - cache: $templateCache, - transformResponse: transformResponse - }, httpOptions)) - .finally(function() { - handleRequestFn.totalPendingRequests--; - }) - .then(function(response) { - return $templateCache.put(tpl, response.data); - }, handleError); - - function handleError(resp) { - if (!ignoreRequestError) { - resp = $templateRequestMinErr('tpload', - 'Failed to load template: {0} (HTTP status: {1} {2})', - tpl, resp.status, resp.statusText); - - $exceptionHandler(resp); - } - - return $q.reject(resp); - } - } - - handleRequestFn.totalPendingRequests = 0; - - return handleRequestFn; - } - ]; -} - -/** @this */ -function $$TestabilityProvider() { - this.$get = ['$rootScope', '$browser', '$location', - function($rootScope, $browser, $location) { - - /** - * @name $testability - * - * @description - * The private $$testability service provides a collection of methods for use when debugging - * or by automated test and debugging tools. - */ - var testability = {}; - - /** - * @name $$testability#findBindings - * - * @description - * Returns an array of elements that are bound (via ng-bind or {{}}) - * to expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The binding expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. Filters and whitespace are ignored. - */ - testability.findBindings = function(element, expression, opt_exactMatch) { - var bindings = element.getElementsByClassName('ng-binding'); - var matches = []; - forEach(bindings, function(binding) { - var dataBinding = angular.element(binding).data('$binding'); - if (dataBinding) { - forEach(dataBinding, function(bindingName) { - if (opt_exactMatch) { - var matcher = new RegExp('(^|\\s)' + escapeForRegexp(expression) + '(\\s|\\||$)'); - if (matcher.test(bindingName)) { - matches.push(binding); - } - } else { - if (bindingName.indexOf(expression) !== -1) { - matches.push(binding); - } - } - }); - } - }); - return matches; - }; - - /** - * @name $$testability#findModels - * - * @description - * Returns an array of elements that are two-way found via ng-model to - * expressions matching the input. - * - * @param {Element} element The element root to search from. - * @param {string} expression The model expression to match. - * @param {boolean} opt_exactMatch If true, only returns exact matches - * for the expression. - */ - testability.findModels = function(element, expression, opt_exactMatch) { - var prefixes = ['ng-', 'data-ng-', 'ng\\:']; - for (var p = 0; p < prefixes.length; ++p) { - var attributeEquals = opt_exactMatch ? '=' : '*='; - var selector = '[' + prefixes[p] + 'model' + attributeEquals + '"' + expression + '"]'; - var elements = element.querySelectorAll(selector); - if (elements.length) { - return elements; - } - } - }; - - /** - * @name $$testability#getLocation - * - * @description - * Shortcut for getting the location in a browser agnostic way. Returns - * the path, search, and hash. (e.g. /path?a=b#hash) - */ - testability.getLocation = function() { - return $location.url(); - }; - - /** - * @name $$testability#setLocation - * - * @description - * Shortcut for navigating to a location without doing a full page reload. - * - * @param {string} url The location url (path, search and hash, - * e.g. /path?a=b#hash) to go to. - */ - testability.setLocation = function(url) { - if (url !== $location.url()) { - $location.url(url); - $rootScope.$digest(); - } - }; - - /** - * @name $$testability#whenStable - * - * @description - * Calls the callback when all pending tasks are completed. - * - * Types of tasks waited for include: - * - Pending timeouts (via {@link $timeout}). - * - Pending HTTP requests (via {@link $http}). - * - In-progress route transitions (via {@link $route}). - * - Pending tasks scheduled via {@link $rootScope#$applyAsync}. - * - Pending tasks scheduled via {@link $rootScope#$evalAsync}. - * These include tasks scheduled via `$evalAsync()` indirectly (such as {@link $q} promises). - * - * @param {function} callback - */ - testability.whenStable = function(callback) { - $browser.notifyWhenNoOutstandingRequests(callback); - }; - - return testability; - }]; -} - -var $timeoutMinErr = minErr('$timeout'); - -/** @this */ -function $TimeoutProvider() { - this.$get = ['$rootScope', '$browser', '$q', '$$q', '$exceptionHandler', - function($rootScope, $browser, $q, $$q, $exceptionHandler) { - - var deferreds = {}; - - - /** - * @ngdoc service - * @name $timeout - * - * @description - * AngularJS's wrapper for `window.setTimeout`. The `fn` function is wrapped into a try/catch - * block and delegates any exceptions to - * {@link ng.$exceptionHandler $exceptionHandler} service. - * - * The return value of calling `$timeout` is a promise, which will be resolved when - * the delay has passed and the timeout function, if provided, is executed. - * - * To cancel a timeout request, call `$timeout.cancel(promise)`. - * - * In tests you can use {@link ngMock.$timeout `$timeout.flush()`} to - * synchronously flush the queue of deferred functions. - * - * If you only want a promise that will be resolved after some specified delay - * then you can call `$timeout` without the `fn` function. - * - * @param {function()=} fn A function, whose execution should be delayed. - * @param {number=} [delay=0] Delay in milliseconds. - * @param {boolean=} [invokeApply=true] If set to `false` skips model dirty checking, otherwise - * will invoke `fn` within the {@link ng.$rootScope.Scope#$apply $apply} block. - * @param {...*=} Pass additional parameters to the executed function. - * @returns {Promise} Promise that will be resolved when the timeout is reached. The promise - * will be resolved with the return value of the `fn` function. - * - */ - function timeout(fn, delay, invokeApply) { - if (!isFunction(fn)) { - invokeApply = delay; - delay = fn; - fn = noop; - } - - var args = sliceArgs(arguments, 3), - skipApply = (isDefined(invokeApply) && !invokeApply), - deferred = (skipApply ? $$q : $q).defer(), - promise = deferred.promise, - timeoutId; - - timeoutId = $browser.defer(function() { - try { - deferred.resolve(fn.apply(null, args)); - } catch (e) { - deferred.reject(e); - $exceptionHandler(e); - } finally { - delete deferreds[promise.$$timeoutId]; - } - - if (!skipApply) $rootScope.$apply(); - }, delay, '$timeout'); - - promise.$$timeoutId = timeoutId; - deferreds[timeoutId] = deferred; - - return promise; - } - - - /** - * @ngdoc method - * @name $timeout#cancel - * - * @description - * Cancels a task associated with the `promise`. As a result of this, the promise will be - * resolved with a rejection. - * - * @param {Promise=} promise Promise returned by the `$timeout` function. - * @returns {boolean} Returns `true` if the task hasn't executed yet and was successfully - * canceled. - */ - timeout.cancel = function(promise) { - if (!promise) return false; - - if (!promise.hasOwnProperty('$$timeoutId')) { - throw $timeoutMinErr('badprom', - '`$timeout.cancel()` called with a promise that was not generated by `$timeout()`.'); - } - - if (!deferreds.hasOwnProperty(promise.$$timeoutId)) return false; - - var id = promise.$$timeoutId; - var deferred = deferreds[id]; - - // Timeout cancels should not report an unhandled promise. - markQExceptionHandled(deferred.promise); - deferred.reject('canceled'); - delete deferreds[id]; - - return $browser.defer.cancel(id); - }; - - return timeout; - }]; -} - -// NOTE: The usage of window and document instead of $window and $document here is -// deliberate. This service depends on the specific behavior of anchor nodes created by the -// browser (resolving and parsing URLs) that is unlikely to be provided by mock objects and -// cause us to break tests. In addition, when the browser resolves a URL for XHR, it -// doesn't know about mocked locations and resolves URLs to the real document - which is -// exactly the behavior needed here. There is little value is mocking these out for this -// service. -var urlParsingNode = window.document.createElement('a'); -var originUrl = urlResolve(window.location.href); -var baseUrlParsingNode; - -urlParsingNode.href = 'http://[::1]'; - -// Support: IE 9-11 only, Edge 16-17 only (fixed in 18 Preview) -// IE/Edge don't wrap IPv6 addresses' hostnames in square brackets -// when parsed out of an anchor element. -var ipv6InBrackets = urlParsingNode.hostname === '[::1]'; - -/** - * - * Implementation Notes for non-IE browsers - * ---------------------------------------- - * Assigning a URL to the href property of an anchor DOM node, even one attached to the DOM, - * results both in the normalizing and parsing of the URL. Normalizing means that a relative - * URL will be resolved into an absolute URL in the context of the application document. - * Parsing means that the anchor node's host, hostname, protocol, port, pathname and related - * properties are all populated to reflect the normalized URL. This approach has wide - * compatibility - Safari 1+, Mozilla 1+ etc. See - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * - * Implementation Notes for IE - * --------------------------- - * IE <= 10 normalizes the URL when assigned to the anchor node similar to the other - * browsers. However, the parsed components will not be set if the URL assigned did not specify - * them. (e.g. if you assign a.href = "foo", then a.protocol, a.host, etc. will be empty.) We - * work around that by performing the parsing in a 2nd step by taking a previously normalized - * URL (e.g. by assigning to a.href) and assigning it a.href again. This correctly populates the - * properties such as protocol, hostname, port, etc. - * - * References: - * http://developer.mozilla.org/en-US/docs/Web/API/HTMLAnchorElement - * http://www.aptana.com/reference/html/api/HTMLAnchorElement.html - * http://url.spec.whatwg.org/#urlutils - * https://github.com/angular/angular.js/pull/2902 - * http://james.padolsey.com/javascript/parsing-urls-with-the-dom/ - * - * @kind function - * @param {string|object} url The URL to be parsed. If `url` is not a string, it will be returned - * unchanged. - * @description Normalizes and parses a URL. - * @returns {object} Returns the normalized URL as a dictionary. - * - * | member name | Description | - * |---------------|------------------------------------------------------------------------| - * | href | A normalized version of the provided URL if it was not an absolute URL | - * | protocol | The protocol without the trailing colon | - * | host | The host and port (if the port is non-default) of the normalizedUrl | - * | search | The search params, minus the question mark | - * | hash | The hash string, minus the hash symbol | - * | hostname | The hostname | - * | port | The port, without ":" | - * | pathname | The pathname, beginning with "/" | - * - */ -function urlResolve(url) { - if (!isString(url)) return url; - - var href = url; - - // Support: IE 9-11 only - if (msie) { - // Normalize before parse. Refer Implementation Notes on why this is - // done in two steps on IE. - urlParsingNode.setAttribute('href', href); - href = urlParsingNode.href; - } - - urlParsingNode.setAttribute('href', href); - - var hostname = urlParsingNode.hostname; - - if (!ipv6InBrackets && hostname.indexOf(':') > -1) { - hostname = '[' + hostname + ']'; - } - - return { - href: urlParsingNode.href, - protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '', - host: urlParsingNode.host, - search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '', - hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '', - hostname: hostname, - port: urlParsingNode.port, - pathname: (urlParsingNode.pathname.charAt(0) === '/') - ? urlParsingNode.pathname - : '/' + urlParsingNode.pathname - }; -} - -/** - * Parse a request URL and determine whether this is a same-origin request as the application - * document. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the request is for the same origin as the application document. - */ -function urlIsSameOrigin(requestUrl) { - return urlsAreSameOrigin(requestUrl, originUrl); -} - -/** - * Parse a request URL and determine whether it is same-origin as the current document base URL. - * - * Note: The base URL is usually the same as the document location (`location.href`) but can - * be overriden by using the `` tag. - * - * @param {string|object} requestUrl The url of the request as a string that will be resolved - * or a parsed URL object. - * @returns {boolean} Whether the URL is same-origin as the document base URL. - */ -function urlIsSameOriginAsBaseUrl(requestUrl) { - return urlsAreSameOrigin(requestUrl, getBaseUrl()); -} - -/** - * Create a function that can check a URL's origin against a list of allowed/whitelisted origins. - * The current location's origin is implicitly trusted. - * - * @param {string[]} whitelistedOriginUrls - A list of URLs (strings), whose origins are trusted. - * - * @returns {Function} - A function that receives a URL (string or parsed URL object) and returns - * whether it is of an allowed origin. - */ -function urlIsAllowedOriginFactory(whitelistedOriginUrls) { - var parsedAllowedOriginUrls = [originUrl].concat(whitelistedOriginUrls.map(urlResolve)); - - /** - * Check whether the specified URL (string or parsed URL object) has an origin that is allowed - * based on a list of whitelisted-origin URLs. The current location's origin is implicitly - * trusted. - * - * @param {string|Object} requestUrl - The URL to be checked (provided as a string that will be - * resolved or a parsed URL object). - * - * @returns {boolean} - Whether the specified URL is of an allowed origin. - */ - return function urlIsAllowedOrigin(requestUrl) { - var parsedUrl = urlResolve(requestUrl); - return parsedAllowedOriginUrls.some(urlsAreSameOrigin.bind(null, parsedUrl)); - }; -} - -/** - * Determine if two URLs share the same origin. - * - * @param {string|Object} url1 - First URL to compare as a string or a normalized URL in the form of - * a dictionary object returned by `urlResolve()`. - * @param {string|object} url2 - Second URL to compare as a string or a normalized URL in the form - * of a dictionary object returned by `urlResolve()`. - * - * @returns {boolean} - True if both URLs have the same origin, and false otherwise. - */ -function urlsAreSameOrigin(url1, url2) { - url1 = urlResolve(url1); - url2 = urlResolve(url2); - - return (url1.protocol === url2.protocol && - url1.host === url2.host); -} - -/** - * Returns the current document base URL. - * @returns {string} - */ -function getBaseUrl() { - if (window.document.baseURI) { - return window.document.baseURI; - } - - // `document.baseURI` is available everywhere except IE - if (!baseUrlParsingNode) { - baseUrlParsingNode = window.document.createElement('a'); - baseUrlParsingNode.href = '.'; - - // Work-around for IE bug described in Implementation Notes. The fix in `urlResolve()` is not - // suitable here because we need to track changes to the base URL. - baseUrlParsingNode = baseUrlParsingNode.cloneNode(false); - } - return baseUrlParsingNode.href; -} - -/** - * @ngdoc service - * @name $window - * @this - * - * @description - * A reference to the browser's `window` object. While `window` - * is globally available in JavaScript, it causes testability problems, because - * it is a global variable. In AngularJS we always refer to it through the - * `$window` service, so it may be overridden, removed or mocked for testing. - * - * Expressions, like the one defined for the `ngClick` directive in the example - * below, are evaluated with respect to the current scope. Therefore, there is - * no risk of inadvertently coding in a dependency on a global value in such an - * expression. - * - * @example - - - -
      - - -
      -
      - - it('should display the greeting in the input box', function() { - element(by.model('greeting')).sendKeys('Hello, E2E Tests'); - // If we click the button it will block the test runner - // element(':button').click(); - }); - -
      - */ -function $WindowProvider() { - this.$get = valueFn(window); -} - -/** - * @name $$cookieReader - * @requires $document - * - * @description - * This is a private service for reading cookies used by $http and ngCookies - * - * @return {Object} a key/value map of the current cookies - */ -function $$CookieReader($document) { - var rawDocument = $document[0] || {}; - var lastCookies = {}; - var lastCookieString = ''; - - function safeGetCookie(rawDocument) { - try { - return rawDocument.cookie || ''; - } catch (e) { - return ''; - } - } - - function safeDecodeURIComponent(str) { - try { - return decodeURIComponent(str); - } catch (e) { - return str; - } - } - - return function() { - var cookieArray, cookie, i, index, name; - var currentCookieString = safeGetCookie(rawDocument); - - if (currentCookieString !== lastCookieString) { - lastCookieString = currentCookieString; - cookieArray = lastCookieString.split('; '); - lastCookies = {}; - - for (i = 0; i < cookieArray.length; i++) { - cookie = cookieArray[i]; - index = cookie.indexOf('='); - if (index > 0) { //ignore nameless cookies - name = safeDecodeURIComponent(cookie.substring(0, index)); - // the first value that is seen for a cookie is the most - // specific one. values for the same cookie name that - // follow are for less specific paths. - if (isUndefined(lastCookies[name])) { - lastCookies[name] = safeDecodeURIComponent(cookie.substring(index + 1)); - } - } - } - } - return lastCookies; - }; -} - -$$CookieReader.$inject = ['$document']; - -/** @this */ -function $$CookieReaderProvider() { - this.$get = $$CookieReader; -} - -/* global currencyFilter: true, - dateFilter: true, - filterFilter: true, - jsonFilter: true, - limitToFilter: true, - lowercaseFilter: true, - numberFilter: true, - orderByFilter: true, - uppercaseFilter: true, - */ - -/** - * @ngdoc provider - * @name $filterProvider - * @description - * - * Filters are just functions which transform input to an output. However filters need to be - * Dependency Injected. To achieve this a filter definition consists of a factory function which is - * annotated with dependencies and is responsible for creating a filter function. - * - *
      - * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
      - * - * ```js - * // Filter registration - * function MyModule($provide, $filterProvider) { - * // create a service to demonstrate injection (not always needed) - * $provide.value('greet', function(name){ - * return 'Hello ' + name + '!'; - * }); - * - * // register a filter factory which uses the - * // greet service to demonstrate DI. - * $filterProvider.register('greet', function(greet){ - * // return the filter function which uses the greet service - * // to generate salutation - * return function(text) { - * // filters need to be forgiving so check input validity - * return text && greet(text) || text; - * }; - * }); - * } - * ``` - * - * The filter function is registered with the `$injector` under the filter name suffix with - * `Filter`. - * - * ```js - * it('should be the same instance', inject( - * function($filterProvider) { - * $filterProvider.register('reverse', function(){ - * return ...; - * }); - * }, - * function($filter, reverseFilter) { - * expect($filter('reverse')).toBe(reverseFilter); - * }); - * ``` - * - * - * For more information about how AngularJS filters work, and how to create your own filters, see - * {@link guide/filter Filters} in the AngularJS Developer Guide. - */ - -/** - * @ngdoc service - * @name $filter - * @kind function - * @description - * Filters are used for formatting data displayed to the user. - * - * They can be used in view templates, controllers or services. AngularJS comes - * with a collection of [built-in filters](api/ng/filter), but it is easy to - * define your own as well. - * - * The general syntax in templates is as follows: - * - * ```html - * {{ expression [| filter_name[:parameter_value] ... ] }} - * ``` - * - * @param {String} name Name of the filter function to retrieve - * @return {Function} the filter function - * @example - - -
      -

      {{ originalText }}

      -

      {{ filteredText }}

      -
      -
      - - - angular.module('filterExample', []) - .controller('MainCtrl', function($scope, $filter) { - $scope.originalText = 'hello'; - $scope.filteredText = $filter('uppercase')($scope.originalText); - }); - -
      - */ -$FilterProvider.$inject = ['$provide']; -/** @this */ -function $FilterProvider($provide) { - var suffix = 'Filter'; - - /** - * @ngdoc method - * @name $filterProvider#register - * @param {string|Object} name Name of the filter function, or an object map of filters where - * the keys are the filter names and the values are the filter factories. - * - *
      - * **Note:** Filter names must be valid AngularJS {@link expression} identifiers, such as `uppercase` or `orderBy`. - * Names with special characters, such as hyphens and dots, are not allowed. If you wish to namespace - * your filters, then you can use capitalization (`myappSubsectionFilterx`) or underscores - * (`myapp_subsection_filterx`). - *
      - * @param {Function} factory If the first argument was a string, a factory function for the filter to be registered. - * @returns {Object} Registered filter instance, or if a map of filters was provided then a map - * of the registered filter instances. - */ - function register(name, factory) { - if (isObject(name)) { - var filters = {}; - forEach(name, function(filter, key) { - filters[key] = register(key, filter); - }); - return filters; - } else { - return $provide.factory(name + suffix, factory); - } - } - this.register = register; - - this.$get = ['$injector', function($injector) { - return function(name) { - return $injector.get(name + suffix); - }; - }]; - - //////////////////////////////////////// - - /* global - currencyFilter: false, - dateFilter: false, - filterFilter: false, - jsonFilter: false, - limitToFilter: false, - lowercaseFilter: false, - numberFilter: false, - orderByFilter: false, - uppercaseFilter: false - */ - - register('currency', currencyFilter); - register('date', dateFilter); - register('filter', filterFilter); - register('json', jsonFilter); - register('limitTo', limitToFilter); - register('lowercase', lowercaseFilter); - register('number', numberFilter); - register('orderBy', orderByFilter); - register('uppercase', uppercaseFilter); -} - -/** - * @ngdoc filter - * @name filter - * @kind function - * - * @description - * Selects a subset of items from `array` and returns it as a new array. - * - * @param {Array} array The source array. - *
      - * **Note**: If the array contains objects that reference themselves, filtering is not possible. - *
      - * @param {string|Object|function()} expression The predicate to be used for selecting items from - * `array`. - * - * Can be one of: - * - * - `string`: The string is used for matching against the contents of the `array`. All strings or - * objects with string properties in `array` that match this string will be returned. This also - * applies to nested object properties. - * The predicate can be negated by prefixing the string with `!`. - * - * - `Object`: A pattern object can be used to filter specific properties on objects contained - * by `array`. For example `{name:"M", phone:"1"}` predicate will return an array of items - * which have property `name` containing "M" and property `phone` containing "1". A special - * property name (`$` by default) can be used (e.g. as in `{$: "text"}`) to accept a match - * against any property of the object or its nested object properties. That's equivalent to the - * simple substring match with a `string` as described above. The special property name can be - * overwritten, using the `anyPropertyKey` parameter. - * The predicate can be negated by prefixing the string with `!`. - * For example `{name: "!M"}` predicate will return an array of items which have property `name` - * not containing "M". - * - * Note that a named property will match properties on the same level only, while the special - * `$` property will match properties on the same level or deeper. E.g. an array item like - * `{name: {first: 'John', last: 'Doe'}}` will **not** be matched by `{name: 'John'}`, but - * **will** be matched by `{$: 'John'}`. - * - * - `function(value, index, array)`: A predicate function can be used to write arbitrary filters. - * The function is called for each element of the array, with the element, its index, and - * the entire array itself as arguments. - * - * The final result is an array of those elements that the predicate returned true for. - * - * @param {function(actual, expected)|true|false} [comparator] Comparator which is used in - * determining if values retrieved using `expression` (when it is not a function) should be - * considered a match based on the expected value (from the filter expression) and actual - * value (from the object in the array). - * - * Can be one of: - * - * - `function(actual, expected)`: - * The function will be given the object value and the predicate value to compare and - * should return true if both values should be considered equal. - * - * - `true`: A shorthand for `function(actual, expected) { return angular.equals(actual, expected)}`. - * This is essentially strict comparison of expected and actual. - * - * - `false`: A short hand for a function which will look for a substring match in a case - * insensitive way. Primitive values are converted to strings. Objects are not compared against - * primitives, unless they have a custom `toString` method (e.g. `Date` objects). - * - * - * Defaults to `false`. - * - * @param {string} [anyPropertyKey] The special property name that matches against any property. - * By default `$`. - * - * @example - - -
      - - -
      - - - - - -
      NamePhone
      {{friend.name}}{{friend.phone}}
      -
      -
      -
      -
      -
      - - - - - - -
      NamePhone
      {{friendObj.name}}{{friendObj.phone}}
      - - - var expectFriendNames = function(expectedNames, key) { - element.all(by.repeater(key + ' in friends').column(key + '.name')).then(function(arr) { - arr.forEach(function(wd, i) { - expect(wd.getText()).toMatch(expectedNames[i]); - }); - }); - }; - - it('should search across all fields when filtering with a string', function() { - var searchText = element(by.model('searchText')); - searchText.clear(); - searchText.sendKeys('m'); - expectFriendNames(['Mary', 'Mike', 'Adam'], 'friend'); - - searchText.clear(); - searchText.sendKeys('76'); - expectFriendNames(['John', 'Julie'], 'friend'); - }); - - it('should search in specific fields when filtering with a predicate object', function() { - var searchAny = element(by.model('search.$')); - searchAny.clear(); - searchAny.sendKeys('i'); - expectFriendNames(['Mary', 'Mike', 'Julie', 'Juliette'], 'friendObj'); - }); - it('should use a equal comparison when comparator is true', function() { - var searchName = element(by.model('search.name')); - var strict = element(by.model('strict')); - searchName.clear(); - searchName.sendKeys('Julie'); - strict.click(); - expectFriendNames(['Julie'], 'friendObj'); - }); - - - */ - -function filterFilter() { - return function(array, expression, comparator, anyPropertyKey) { - if (!isArrayLike(array)) { - if (array == null) { - return array; - } else { - throw minErr('filter')('notarray', 'Expected array but received: {0}', array); - } - } - - anyPropertyKey = anyPropertyKey || '$'; - var expressionType = getTypeForFilter(expression); - var predicateFn; - var matchAgainstAnyProp; - - switch (expressionType) { - case 'function': - predicateFn = expression; - break; - case 'boolean': - case 'null': - case 'number': - case 'string': - matchAgainstAnyProp = true; - // falls through - case 'object': - predicateFn = createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp); - break; - default: - return array; - } - - return Array.prototype.filter.call(array, predicateFn); - }; -} - -// Helper functions for `filterFilter` -function createPredicateFn(expression, comparator, anyPropertyKey, matchAgainstAnyProp) { - var shouldMatchPrimitives = isObject(expression) && (anyPropertyKey in expression); - var predicateFn; - - if (comparator === true) { - comparator = equals; - } else if (!isFunction(comparator)) { - comparator = function(actual, expected) { - if (isUndefined(actual)) { - // No substring matching against `undefined` - return false; - } - if ((actual === null) || (expected === null)) { - // No substring matching against `null`; only match against `null` - return actual === expected; - } - if (isObject(expected) || (isObject(actual) && !hasCustomToString(actual))) { - // Should not compare primitives against objects, unless they have custom `toString` method - return false; - } - - actual = lowercase('' + actual); - expected = lowercase('' + expected); - return actual.indexOf(expected) !== -1; - }; - } - - predicateFn = function(item) { - if (shouldMatchPrimitives && !isObject(item)) { - return deepCompare(item, expression[anyPropertyKey], comparator, anyPropertyKey, false); - } - return deepCompare(item, expression, comparator, anyPropertyKey, matchAgainstAnyProp); - }; - - return predicateFn; -} - -function deepCompare(actual, expected, comparator, anyPropertyKey, matchAgainstAnyProp, dontMatchWholeObject) { - var actualType = getTypeForFilter(actual); - var expectedType = getTypeForFilter(expected); - - if ((expectedType === 'string') && (expected.charAt(0) === '!')) { - return !deepCompare(actual, expected.substring(1), comparator, anyPropertyKey, matchAgainstAnyProp); - } else if (isArray(actual)) { - // In case `actual` is an array, consider it a match - // if ANY of it's items matches `expected` - return actual.some(function(item) { - return deepCompare(item, expected, comparator, anyPropertyKey, matchAgainstAnyProp); - }); - } - - switch (actualType) { - case 'object': - var key; - if (matchAgainstAnyProp) { - for (key in actual) { - // Under certain, rare, circumstances, key may not be a string and `charAt` will be undefined - // See: https://github.com/angular/angular.js/issues/15644 - if (key.charAt && (key.charAt(0) !== '$') && - deepCompare(actual[key], expected, comparator, anyPropertyKey, true)) { - return true; - } - } - return dontMatchWholeObject ? false : deepCompare(actual, expected, comparator, anyPropertyKey, false); - } else if (expectedType === 'object') { - for (key in expected) { - var expectedVal = expected[key]; - if (isFunction(expectedVal) || isUndefined(expectedVal)) { - continue; - } - - var matchAnyProperty = key === anyPropertyKey; - var actualVal = matchAnyProperty ? actual : actual[key]; - if (!deepCompare(actualVal, expectedVal, comparator, anyPropertyKey, matchAnyProperty, matchAnyProperty)) { - return false; - } - } - return true; - } else { - return comparator(actual, expected); - } - case 'function': - return false; - default: - return comparator(actual, expected); - } -} - -// Used for easily differentiating between `null` and actual `object` -function getTypeForFilter(val) { - return (val === null) ? 'null' : typeof val; -} - -var MAX_DIGITS = 22; -var DECIMAL_SEP = '.'; -var ZERO_CHAR = '0'; - -/** - * @ngdoc filter - * @name currency - * @kind function - * - * @description - * Formats a number as a currency (ie $1,234.56). When no currency symbol is provided, default - * symbol for current locale is used. - * - * @param {number} amount Input to filter. - * @param {string=} symbol Currency symbol or identifier to be displayed. - * @param {number=} fractionSize Number of decimal places to round the amount to, defaults to default max fraction size for current locale - * @returns {string} Formatted number. - * - * - * @example - - - -
      -
      - default currency symbol ($): {{amount | currency}}
      - custom currency identifier (USD$): {{amount | currency:"USD$"}}
      - no fractions (0): {{amount | currency:"USD$":0}} -
      -
      - - it('should init with 1234.56', function() { - expect(element(by.id('currency-default')).getText()).toBe('$1,234.56'); - expect(element(by.id('currency-custom')).getText()).toBe('USD$1,234.56'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('USD$1,235'); - }); - it('should update', function() { - if (browser.params.browser === 'safari') { - // Safari does not understand the minus key. See - // https://github.com/angular/protractor/issues/481 - return; - } - element(by.model('amount')).clear(); - element(by.model('amount')).sendKeys('-1234'); - expect(element(by.id('currency-default')).getText()).toBe('-$1,234.00'); - expect(element(by.id('currency-custom')).getText()).toBe('-USD$1,234.00'); - expect(element(by.id('currency-no-fractions')).getText()).toBe('-USD$1,234'); - }); - -
      - */ -currencyFilter.$inject = ['$locale']; -function currencyFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(amount, currencySymbol, fractionSize) { - if (isUndefined(currencySymbol)) { - currencySymbol = formats.CURRENCY_SYM; - } - - if (isUndefined(fractionSize)) { - fractionSize = formats.PATTERNS[1].maxFrac; - } - - // If the currency symbol is empty, trim whitespace around the symbol - var currencySymbolRe = !currencySymbol ? /\s*\u00A4\s*/g : /\u00A4/g; - - // if null or undefined pass it through - return (amount == null) - ? amount - : formatNumber(amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize). - replace(currencySymbolRe, currencySymbol); - }; -} - -/** - * @ngdoc filter - * @name number - * @kind function - * - * @description - * Formats a number as text. - * - * If the input is null or undefined, it will just be returned. - * If the input is infinite (Infinity or -Infinity), the Infinity symbol '∞' or '-∞' is returned, respectively. - * If the input is not a number an empty string is returned. - * - * - * @param {number|string} number Number to format. - * @param {(number|string)=} fractionSize Number of decimal places to round the number to. - * If this is not provided then the fraction size is computed from the current locale's number - * formatting pattern. In the case of the default locale, it will be 3. - * @returns {string} Number rounded to `fractionSize` appropriately formatted based on the current - * locale (e.g., in the en_US locale it will have "." as the decimal separator and - * include "," group separators after each third digit). - * - * @example - - - -
      -
      - Default formatting: {{val | number}}
      - No fractions: {{val | number:0}}
      - Negative number: {{-val | number:4}} -
      -
      - - it('should format numbers', function() { - expect(element(by.id('number-default')).getText()).toBe('1,234.568'); - expect(element(by.binding('val | number:0')).getText()).toBe('1,235'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-1,234.5679'); - }); - - it('should update', function() { - element(by.model('val')).clear(); - element(by.model('val')).sendKeys('3374.333'); - expect(element(by.id('number-default')).getText()).toBe('3,374.333'); - expect(element(by.binding('val | number:0')).getText()).toBe('3,374'); - expect(element(by.binding('-val | number:4')).getText()).toBe('-3,374.3330'); - }); - -
      - */ -numberFilter.$inject = ['$locale']; -function numberFilter($locale) { - var formats = $locale.NUMBER_FORMATS; - return function(number, fractionSize) { - - // if null or undefined pass it through - return (number == null) - ? number - : formatNumber(number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, - fractionSize); - }; -} - -/** - * Parse a number (as a string) into three components that can be used - * for formatting the number. - * - * (Significant bits of this parse algorithm came from https://github.com/MikeMcl/big.js/) - * - * @param {string} numStr The number to parse - * @return {object} An object describing this number, containing the following keys: - * - d : an array of digits containing leading zeros as necessary - * - i : the number of the digits in `d` that are to the left of the decimal point - * - e : the exponent for numbers that would need more than `MAX_DIGITS` digits in `d` - * - */ -function parse(numStr) { - var exponent = 0, digits, numberOfIntegerDigits; - var i, j, zeros; - - // Decimal point? - if ((numberOfIntegerDigits = numStr.indexOf(DECIMAL_SEP)) > -1) { - numStr = numStr.replace(DECIMAL_SEP, ''); - } - - // Exponential form? - if ((i = numStr.search(/e/i)) > 0) { - // Work out the exponent. - if (numberOfIntegerDigits < 0) numberOfIntegerDigits = i; - numberOfIntegerDigits += +numStr.slice(i + 1); - numStr = numStr.substring(0, i); - } else if (numberOfIntegerDigits < 0) { - // There was no decimal point or exponent so it is an integer. - numberOfIntegerDigits = numStr.length; - } - - // Count the number of leading zeros. - for (i = 0; numStr.charAt(i) === ZERO_CHAR; i++) { /* empty */ } - - if (i === (zeros = numStr.length)) { - // The digits are all zero. - digits = [0]; - numberOfIntegerDigits = 1; - } else { - // Count the number of trailing zeros - zeros--; - while (numStr.charAt(zeros) === ZERO_CHAR) zeros--; - - // Trailing zeros are insignificant so ignore them - numberOfIntegerDigits -= i; - digits = []; - // Convert string to array of digits without leading/trailing zeros. - for (j = 0; i <= zeros; i++, j++) { - digits[j] = +numStr.charAt(i); - } - } - - // If the number overflows the maximum allowed digits then use an exponent. - if (numberOfIntegerDigits > MAX_DIGITS) { - digits = digits.splice(0, MAX_DIGITS - 1); - exponent = numberOfIntegerDigits - 1; - numberOfIntegerDigits = 1; - } - - return { d: digits, e: exponent, i: numberOfIntegerDigits }; -} - -/** - * Round the parsed number to the specified number of decimal places - * This function changed the parsedNumber in-place - */ -function roundNumber(parsedNumber, fractionSize, minFrac, maxFrac) { - var digits = parsedNumber.d; - var fractionLen = digits.length - parsedNumber.i; - - // determine fractionSize if it is not specified; `+fractionSize` converts it to a number - fractionSize = (isUndefined(fractionSize)) ? Math.min(Math.max(minFrac, fractionLen), maxFrac) : +fractionSize; - - // The index of the digit to where rounding is to occur - var roundAt = fractionSize + parsedNumber.i; - var digit = digits[roundAt]; - - if (roundAt > 0) { - // Drop fractional digits beyond `roundAt` - digits.splice(Math.max(parsedNumber.i, roundAt)); - - // Set non-fractional digits beyond `roundAt` to 0 - for (var j = roundAt; j < digits.length; j++) { - digits[j] = 0; - } - } else { - // We rounded to zero so reset the parsedNumber - fractionLen = Math.max(0, fractionLen); - parsedNumber.i = 1; - digits.length = Math.max(1, roundAt = fractionSize + 1); - digits[0] = 0; - for (var i = 1; i < roundAt; i++) digits[i] = 0; - } - - if (digit >= 5) { - if (roundAt - 1 < 0) { - for (var k = 0; k > roundAt; k--) { - digits.unshift(0); - parsedNumber.i++; - } - digits.unshift(1); - parsedNumber.i++; - } else { - digits[roundAt - 1]++; - } - } - - // Pad out with zeros to get the required fraction length - for (; fractionLen < Math.max(0, fractionSize); fractionLen++) digits.push(0); - - - // Do any carrying, e.g. a digit was rounded up to 10 - var carry = digits.reduceRight(function(carry, d, i, digits) { - d = d + carry; - digits[i] = d % 10; - return Math.floor(d / 10); - }, 0); - if (carry) { - digits.unshift(carry); - parsedNumber.i++; - } -} - -/** - * Format a number into a string - * @param {number} number The number to format - * @param {{ - * minFrac, // the minimum number of digits required in the fraction part of the number - * maxFrac, // the maximum number of digits required in the fraction part of the number - * gSize, // number of digits in each group of separated digits - * lgSize, // number of digits in the last group of digits before the decimal separator - * negPre, // the string to go in front of a negative number (e.g. `-` or `(`)) - * posPre, // the string to go in front of a positive number - * negSuf, // the string to go after a negative number (e.g. `)`) - * posSuf // the string to go after a positive number - * }} pattern - * @param {string} groupSep The string to separate groups of number (e.g. `,`) - * @param {string} decimalSep The string to act as the decimal separator (e.g. `.`) - * @param {[type]} fractionSize The size of the fractional part of the number - * @return {string} The number formatted as a string - */ -function formatNumber(number, pattern, groupSep, decimalSep, fractionSize) { - - if (!(isString(number) || isNumber(number)) || isNaN(number)) return ''; - - var isInfinity = !isFinite(number); - var isZero = false; - var numStr = Math.abs(number) + '', - formattedText = '', - parsedNumber; - - if (isInfinity) { - formattedText = '\u221e'; - } else { - parsedNumber = parse(numStr); - - roundNumber(parsedNumber, fractionSize, pattern.minFrac, pattern.maxFrac); - - var digits = parsedNumber.d; - var integerLen = parsedNumber.i; - var exponent = parsedNumber.e; - var decimals = []; - isZero = digits.reduce(function(isZero, d) { return isZero && !d; }, true); - - // pad zeros for small numbers - while (integerLen < 0) { - digits.unshift(0); - integerLen++; - } - - // extract decimals digits - if (integerLen > 0) { - decimals = digits.splice(integerLen, digits.length); - } else { - decimals = digits; - digits = [0]; - } - - // format the integer digits with grouping separators - var groups = []; - if (digits.length >= pattern.lgSize) { - groups.unshift(digits.splice(-pattern.lgSize, digits.length).join('')); - } - while (digits.length > pattern.gSize) { - groups.unshift(digits.splice(-pattern.gSize, digits.length).join('')); - } - if (digits.length) { - groups.unshift(digits.join('')); - } - formattedText = groups.join(groupSep); - - // append the decimal digits - if (decimals.length) { - formattedText += decimalSep + decimals.join(''); - } - - if (exponent) { - formattedText += 'e+' + exponent; - } - } - if (number < 0 && !isZero) { - return pattern.negPre + formattedText + pattern.negSuf; - } else { - return pattern.posPre + formattedText + pattern.posSuf; - } -} - -function padNumber(num, digits, trim, negWrap) { - var neg = ''; - if (num < 0 || (negWrap && num <= 0)) { - if (negWrap) { - num = -num + 1; - } else { - num = -num; - neg = '-'; - } - } - num = '' + num; - while (num.length < digits) num = ZERO_CHAR + num; - if (trim) { - num = num.substr(num.length - digits); - } - return neg + num; -} - - -function dateGetter(name, size, offset, trim, negWrap) { - offset = offset || 0; - return function(date) { - var value = date['get' + name](); - if (offset > 0 || value > -offset) { - value += offset; - } - if (value === 0 && offset === -12) value = 12; - return padNumber(value, size, trim, negWrap); - }; -} - -function dateStrGetter(name, shortForm, standAlone) { - return function(date, formats) { - var value = date['get' + name](); - var propPrefix = (standAlone ? 'STANDALONE' : '') + (shortForm ? 'SHORT' : ''); - var get = uppercase(propPrefix + name); - - return formats[get][value]; - }; -} - -function timeZoneGetter(date, formats, offset) { - var zone = -1 * offset; - var paddedZone = (zone >= 0) ? '+' : ''; - - paddedZone += padNumber(Math[zone > 0 ? 'floor' : 'ceil'](zone / 60), 2) + - padNumber(Math.abs(zone % 60), 2); - - return paddedZone; -} - -function getFirstThursdayOfYear(year) { - // 0 = index of January - var dayOfWeekOnFirst = (new Date(year, 0, 1)).getDay(); - // 4 = index of Thursday (+1 to account for 1st = 5) - // 11 = index of *next* Thursday (+1 account for 1st = 12) - return new Date(year, 0, ((dayOfWeekOnFirst <= 4) ? 5 : 12) - dayOfWeekOnFirst); -} - -function getThursdayThisWeek(datetime) { - return new Date(datetime.getFullYear(), datetime.getMonth(), - // 4 = index of Thursday - datetime.getDate() + (4 - datetime.getDay())); -} - -function weekGetter(size) { - return function(date) { - var firstThurs = getFirstThursdayOfYear(date.getFullYear()), - thisThurs = getThursdayThisWeek(date); - - var diff = +thisThurs - +firstThurs, - result = 1 + Math.round(diff / 6.048e8); // 6.048e8 ms per week - - return padNumber(result, size); - }; -} - -function ampmGetter(date, formats) { - return date.getHours() < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; -} - -function eraGetter(date, formats) { - return date.getFullYear() <= 0 ? formats.ERAS[0] : formats.ERAS[1]; -} - -function longEraGetter(date, formats) { - return date.getFullYear() <= 0 ? formats.ERANAMES[0] : formats.ERANAMES[1]; -} - -var DATE_FORMATS = { - yyyy: dateGetter('FullYear', 4, 0, false, true), - yy: dateGetter('FullYear', 2, 0, true, true), - y: dateGetter('FullYear', 1, 0, false, true), - MMMM: dateStrGetter('Month'), - MMM: dateStrGetter('Month', true), - MM: dateGetter('Month', 2, 1), - M: dateGetter('Month', 1, 1), - LLLL: dateStrGetter('Month', false, true), - dd: dateGetter('Date', 2), - d: dateGetter('Date', 1), - HH: dateGetter('Hours', 2), - H: dateGetter('Hours', 1), - hh: dateGetter('Hours', 2, -12), - h: dateGetter('Hours', 1, -12), - mm: dateGetter('Minutes', 2), - m: dateGetter('Minutes', 1), - ss: dateGetter('Seconds', 2), - s: dateGetter('Seconds', 1), - // while ISO 8601 requires fractions to be prefixed with `.` or `,` - // we can be just safely rely on using `sss` since we currently don't support single or two digit fractions - sss: dateGetter('Milliseconds', 3), - EEEE: dateStrGetter('Day'), - EEE: dateStrGetter('Day', true), - a: ampmGetter, - Z: timeZoneGetter, - ww: weekGetter(2), - w: weekGetter(1), - G: eraGetter, - GG: eraGetter, - GGG: eraGetter, - GGGG: longEraGetter -}; - -var DATE_FORMATS_SPLIT = /((?:[^yMLdHhmsaZEwG']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|L+|d+|H+|h+|m+|s+|a|Z|G+|w+))([\s\S]*)/, - NUMBER_STRING = /^-?\d+$/; - -/** - * @ngdoc filter - * @name date - * @kind function - * - * @description - * Formats `date` to a string based on the requested `format`. - * - * `format` string can be composed of the following elements: - * - * * `'yyyy'`: 4 digit representation of year (e.g. AD 1 => 0001, AD 2010 => 2010) - * * `'yy'`: 2 digit representation of year, padded (00-99). (e.g. AD 2001 => 01, AD 2010 => 10) - * * `'y'`: 1 digit representation of year, e.g. (AD 1 => 1, AD 199 => 199) - * * `'MMMM'`: Month in year (January-December) - * * `'MMM'`: Month in year (Jan-Dec) - * * `'MM'`: Month in year, padded (01-12) - * * `'M'`: Month in year (1-12) - * * `'LLLL'`: Stand-alone month in year (January-December) - * * `'dd'`: Day in month, padded (01-31) - * * `'d'`: Day in month (1-31) - * * `'EEEE'`: Day in Week,(Sunday-Saturday) - * * `'EEE'`: Day in Week, (Sun-Sat) - * * `'HH'`: Hour in day, padded (00-23) - * * `'H'`: Hour in day (0-23) - * * `'hh'`: Hour in AM/PM, padded (01-12) - * * `'h'`: Hour in AM/PM, (1-12) - * * `'mm'`: Minute in hour, padded (00-59) - * * `'m'`: Minute in hour (0-59) - * * `'ss'`: Second in minute, padded (00-59) - * * `'s'`: Second in minute (0-59) - * * `'sss'`: Millisecond in second, padded (000-999) - * * `'a'`: AM/PM marker - * * `'Z'`: 4 digit (+sign) representation of the timezone offset (-1200-+1200) - * * `'ww'`: Week of year, padded (00-53). Week 01 is the week with the first Thursday of the year - * * `'w'`: Week of year (0-53). Week 1 is the week with the first Thursday of the year - * * `'G'`, `'GG'`, `'GGG'`: The abbreviated form of the era string (e.g. 'AD') - * * `'GGGG'`: The long form of the era string (e.g. 'Anno Domini') - * - * `format` string can also be one of the following predefined - * {@link guide/i18n localizable formats}: - * - * * `'medium'`: equivalent to `'MMM d, y h:mm:ss a'` for en_US locale - * (e.g. Sep 3, 2010 12:05:08 PM) - * * `'short'`: equivalent to `'M/d/yy h:mm a'` for en_US locale (e.g. 9/3/10 12:05 PM) - * * `'fullDate'`: equivalent to `'EEEE, MMMM d, y'` for en_US locale - * (e.g. Friday, September 3, 2010) - * * `'longDate'`: equivalent to `'MMMM d, y'` for en_US locale (e.g. September 3, 2010) - * * `'mediumDate'`: equivalent to `'MMM d, y'` for en_US locale (e.g. Sep 3, 2010) - * * `'shortDate'`: equivalent to `'M/d/yy'` for en_US locale (e.g. 9/3/10) - * * `'mediumTime'`: equivalent to `'h:mm:ss a'` for en_US locale (e.g. 12:05:08 PM) - * * `'shortTime'`: equivalent to `'h:mm a'` for en_US locale (e.g. 12:05 PM) - * - * `format` string can contain literal values. These need to be escaped by surrounding with single quotes (e.g. - * `"h 'in the morning'"`). In order to output a single quote, escape it - i.e., two single quotes in a sequence - * (e.g. `"h 'o''clock'"`). - * - * Any other characters in the `format` string will be output as-is. - * - * @param {(Date|number|string)} date Date to format either as Date object, milliseconds (string or - * number) or various ISO 8601 datetime string formats (e.g. yyyy-MM-ddTHH:mm:ss.sssZ and its - * shorter versions like yyyy-MM-ddTHH:mmZ, yyyy-MM-dd or yyyyMMddTHHmmssZ). If no timezone is - * specified in the string input, the time is considered to be in the local timezone. - * @param {string=} format Formatting rules (see Description). If not specified, - * `mediumDate` is used. - * @param {string=} timezone Timezone to be used for formatting. It understands UTC/GMT and the - * continental US time zone abbreviations, but for general use, use a time zone offset, for - * example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian) - * If not specified, the timezone of the browser will be used. - * @returns {string} Formatted string or the input if input is not recognized as date/millis. - * - * @example - - - {{1288323623006 | date:'medium'}}: - {{1288323623006 | date:'medium'}}
      - {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}: - {{1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'}}
      - {{1288323623006 | date:'MM/dd/yyyy @ h:mma'}}: - {{'1288323623006' | date:'MM/dd/yyyy @ h:mma'}}
      - {{1288323623006 | date:"MM/dd/yyyy 'at' h:mma"}}: - {{'1288323623006' | date:"MM/dd/yyyy 'at' h:mma"}}
      -
      - - it('should format date', function() { - expect(element(by.binding("1288323623006 | date:'medium'")).getText()). - toMatch(/Oct 2\d, 2010 \d{1,2}:\d{2}:\d{2} (AM|PM)/); - expect(element(by.binding("1288323623006 | date:'yyyy-MM-dd HH:mm:ss Z'")).getText()). - toMatch(/2010-10-2\d \d{2}:\d{2}:\d{2} (-|\+)?\d{4}/); - expect(element(by.binding("'1288323623006' | date:'MM/dd/yyyy @ h:mma'")).getText()). - toMatch(/10\/2\d\/2010 @ \d{1,2}:\d{2}(AM|PM)/); - expect(element(by.binding("'1288323623006' | date:\"MM/dd/yyyy 'at' h:mma\"")).getText()). - toMatch(/10\/2\d\/2010 at \d{1,2}:\d{2}(AM|PM)/); - }); - -
      - */ -dateFilter.$inject = ['$locale']; -function dateFilter($locale) { - - - var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; - // 1 2 3 4 5 6 7 8 9 10 11 - function jsonStringToDate(string) { - var match; - if ((match = string.match(R_ISO8601_STR))) { - var date = new Date(0), - tzHour = 0, - tzMin = 0, - dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, - timeSetter = match[8] ? date.setUTCHours : date.setHours; - - if (match[9]) { - tzHour = toInt(match[9] + match[10]); - tzMin = toInt(match[9] + match[11]); - } - dateSetter.call(date, toInt(match[1]), toInt(match[2]) - 1, toInt(match[3])); - var h = toInt(match[4] || 0) - tzHour; - var m = toInt(match[5] || 0) - tzMin; - var s = toInt(match[6] || 0); - var ms = Math.round(parseFloat('0.' + (match[7] || 0)) * 1000); - timeSetter.call(date, h, m, s, ms); - return date; - } - return string; - } - - - return function(date, format, timezone) { - var text = '', - parts = [], - fn, match; - - format = format || 'mediumDate'; - format = $locale.DATETIME_FORMATS[format] || format; - if (isString(date)) { - date = NUMBER_STRING.test(date) ? toInt(date) : jsonStringToDate(date); - } - - if (isNumber(date)) { - date = new Date(date); - } - - if (!isDate(date) || !isFinite(date.getTime())) { - return date; - } - - while (format) { - match = DATE_FORMATS_SPLIT.exec(format); - if (match) { - parts = concat(parts, match, 1); - format = parts.pop(); - } else { - parts.push(format); - format = null; - } - } - - var dateTimezoneOffset = date.getTimezoneOffset(); - if (timezone) { - dateTimezoneOffset = timezoneToOffset(timezone, dateTimezoneOffset); - date = convertTimezoneToLocal(date, timezone, true); - } - forEach(parts, function(value) { - fn = DATE_FORMATS[value]; - text += fn ? fn(date, $locale.DATETIME_FORMATS, dateTimezoneOffset) - : value === '\'\'' ? '\'' : value.replace(/(^'|'$)/g, '').replace(/''/g, '\''); - }); - - return text; - }; -} - - -/** - * @ngdoc filter - * @name json - * @kind function - * - * @description - * Allows you to convert a JavaScript object into JSON string. - * - * This filter is mostly useful for debugging. When using the double curly {{value}} notation - * the binding is automatically converted to JSON. - * - * @param {*} object Any JavaScript object (including arrays and primitive types) to filter. - * @param {number=} spacing The number of spaces to use per indentation, defaults to 2. - * @returns {string} JSON string. - * - * - * @example - - -
      {{ {'name':'value'} | json }}
      -
      {{ {'name':'value'} | json:4 }}
      -
      - - it('should jsonify filtered objects', function() { - expect(element(by.id('default-spacing')).getText()).toMatch(/\{\n {2}"name": ?"value"\n}/); - expect(element(by.id('custom-spacing')).getText()).toMatch(/\{\n {4}"name": ?"value"\n}/); - }); - -
      - * - */ -function jsonFilter() { - return function(object, spacing) { - if (isUndefined(spacing)) { - spacing = 2; - } - return toJson(object, spacing); - }; -} - - -/** - * @ngdoc filter - * @name lowercase - * @kind function - * @description - * Converts string to lowercase. - * - * See the {@link ng.uppercase uppercase filter documentation} for a functionally identical example. - * - * @see angular.lowercase - */ -var lowercaseFilter = valueFn(lowercase); - - -/** - * @ngdoc filter - * @name uppercase - * @kind function - * @description - * Converts string to uppercase. - * @example - - - -
      - -

      {{title}}

      - -

      {{title | uppercase}}

      -
      -
      -
      - */ -var uppercaseFilter = valueFn(uppercase); - -/** - * @ngdoc filter - * @name limitTo - * @kind function - * - * @description - * Creates a new array or string containing only a specified number of elements. The elements are - * taken from either the beginning or the end of the source array, string or number, as specified by - * the value and sign (positive or negative) of `limit`. Other array-like objects are also supported - * (e.g. array subclasses, NodeLists, jqLite/jQuery collections etc). If a number is used as input, - * it is converted to a string. - * - * @param {Array|ArrayLike|string|number} input - Array/array-like, string or number to be limited. - * @param {string|number} limit - The length of the returned array or string. If the `limit` number - * is positive, `limit` number of items from the beginning of the source array/string are copied. - * If the number is negative, `limit` number of items from the end of the source array/string - * are copied. The `limit` will be trimmed if it exceeds `array.length`. If `limit` is undefined, - * the input will be returned unchanged. - * @param {(string|number)=} begin - Index at which to begin limitation. As a negative index, - * `begin` indicates an offset from the end of `input`. Defaults to `0`. - * @returns {Array|string} A new sub-array or substring of length `limit` or less if the input had - * less than `limit` elements. - * - * @example - - - -
      - -

      Output numbers: {{ numbers | limitTo:numLimit }}

      - -

      Output letters: {{ letters | limitTo:letterLimit }}

      - -

      Output long number: {{ longNumber | limitTo:longNumberLimit }}

      -
      -
      - - var numLimitInput = element(by.model('numLimit')); - var letterLimitInput = element(by.model('letterLimit')); - var longNumberLimitInput = element(by.model('longNumberLimit')); - var limitedNumbers = element(by.binding('numbers | limitTo:numLimit')); - var limitedLetters = element(by.binding('letters | limitTo:letterLimit')); - var limitedLongNumber = element(by.binding('longNumber | limitTo:longNumberLimit')); - - it('should limit the number array to first three items', function() { - expect(numLimitInput.getAttribute('value')).toBe('3'); - expect(letterLimitInput.getAttribute('value')).toBe('3'); - expect(longNumberLimitInput.getAttribute('value')).toBe('3'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3]'); - expect(limitedLetters.getText()).toEqual('Output letters: abc'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 234'); - }); - - // There is a bug in safari and protractor that doesn't like the minus key - // it('should update the output when -3 is entered', function() { - // numLimitInput.clear(); - // numLimitInput.sendKeys('-3'); - // letterLimitInput.clear(); - // letterLimitInput.sendKeys('-3'); - // longNumberLimitInput.clear(); - // longNumberLimitInput.sendKeys('-3'); - // expect(limitedNumbers.getText()).toEqual('Output numbers: [7,8,9]'); - // expect(limitedLetters.getText()).toEqual('Output letters: ghi'); - // expect(limitedLongNumber.getText()).toEqual('Output long number: 342'); - // }); - - it('should not exceed the maximum size of input array', function() { - numLimitInput.clear(); - numLimitInput.sendKeys('100'); - letterLimitInput.clear(); - letterLimitInput.sendKeys('100'); - longNumberLimitInput.clear(); - longNumberLimitInput.sendKeys('100'); - expect(limitedNumbers.getText()).toEqual('Output numbers: [1,2,3,4,5,6,7,8,9]'); - expect(limitedLetters.getText()).toEqual('Output letters: abcdefghi'); - expect(limitedLongNumber.getText()).toEqual('Output long number: 2345432342'); - }); - -
      -*/ -function limitToFilter() { - return function(input, limit, begin) { - if (Math.abs(Number(limit)) === Infinity) { - limit = Number(limit); - } else { - limit = toInt(limit); - } - if (isNumberNaN(limit)) return input; - - if (isNumber(input)) input = input.toString(); - if (!isArrayLike(input)) return input; - - begin = (!begin || isNaN(begin)) ? 0 : toInt(begin); - begin = (begin < 0) ? Math.max(0, input.length + begin) : begin; - - if (limit >= 0) { - return sliceFn(input, begin, begin + limit); - } else { - if (begin === 0) { - return sliceFn(input, limit, input.length); - } else { - return sliceFn(input, Math.max(0, begin + limit), begin); - } - } - }; -} - -function sliceFn(input, begin, end) { - if (isString(input)) return input.slice(begin, end); - - return slice.call(input, begin, end); -} - -/** - * @ngdoc filter - * @name orderBy - * @kind function - * - * @description - * Returns an array containing the items from the specified `collection`, ordered by a `comparator` - * function based on the values computed using the `expression` predicate. - * - * For example, `[{id: 'foo'}, {id: 'bar'}] | orderBy:'id'` would result in - * `[{id: 'bar'}, {id: 'foo'}]`. - * - * The `collection` can be an Array or array-like object (e.g. NodeList, jQuery object, TypedArray, - * String, etc). - * - * The `expression` can be a single predicate, or a list of predicates each serving as a tie-breaker - * for the preceding one. The `expression` is evaluated against each item and the output is used - * for comparing with other items. - * - * You can change the sorting order by setting `reverse` to `true`. By default, items are sorted in - * ascending order. - * - * The comparison is done using the `comparator` function. If none is specified, a default, built-in - * comparator is used (see below for details - in a nutshell, it compares numbers numerically and - * strings alphabetically). - * - * ### Under the hood - * - * Ordering the specified `collection` happens in two phases: - * - * 1. All items are passed through the predicate (or predicates), and the returned values are saved - * along with their type (`string`, `number` etc). For example, an item `{label: 'foo'}`, passed - * through a predicate that extracts the value of the `label` property, would be transformed to: - * ``` - * { - * value: 'foo', - * type: 'string', - * index: ... - * } - * ``` - * **Note:** `null` values use `'null'` as their type. - * 2. The comparator function is used to sort the items, based on the derived values, types and - * indices. - * - * If you use a custom comparator, it will be called with pairs of objects of the form - * `{value: ..., type: '...', index: ...}` and is expected to return `0` if the objects are equal - * (as far as the comparator is concerned), `-1` if the 1st one should be ranked higher than the - * second, or `1` otherwise. - * - * In order to ensure that the sorting will be deterministic across platforms, if none of the - * specified predicates can distinguish between two items, `orderBy` will automatically introduce a - * dummy predicate that returns the item's index as `value`. - * (If you are using a custom comparator, make sure it can handle this predicate as well.) - * - * If a custom comparator still can't distinguish between two items, then they will be sorted based - * on their index using the built-in comparator. - * - * Finally, in an attempt to simplify things, if a predicate returns an object as the extracted - * value for an item, `orderBy` will try to convert that object to a primitive value, before passing - * it to the comparator. The following rules govern the conversion: - * - * 1. If the object has a `valueOf()` method that returns a primitive, its return value will be - * used instead.
      - * (If the object has a `valueOf()` method that returns another object, then the returned object - * will be used in subsequent steps.) - * 2. If the object has a custom `toString()` method (i.e. not the one inherited from `Object`) that - * returns a primitive, its return value will be used instead.
      - * (If the object has a `toString()` method that returns another object, then the returned object - * will be used in subsequent steps.) - * 3. No conversion; the object itself is used. - * - * ### The default comparator - * - * The default, built-in comparator should be sufficient for most usecases. In short, it compares - * numbers numerically, strings alphabetically (and case-insensitively), for objects falls back to - * using their index in the original collection, sorts values of different types by type and puts - * `undefined` and `null` values at the end of the sorted list. - * - * More specifically, it follows these steps to determine the relative order of items: - * - * 1. If the compared values are of different types: - * - If one of the values is undefined, consider it "greater than" the other. - * - Else if one of the values is null, consider it "greater than" the other. - * - Else compare the types themselves alphabetically. - * 2. If both values are of type `string`, compare them alphabetically in a case- and - * locale-insensitive way. - * 3. If both values are objects, compare their indices instead. - * 4. Otherwise, return: - * - `0`, if the values are equal (by strict equality comparison, i.e. using `===`). - * - `-1`, if the 1st value is "less than" the 2nd value (compared using the `<` operator). - * - `1`, otherwise. - * - * **Note:** If you notice numbers not being sorted as expected, make sure they are actually being - * saved as numbers and not strings. - * **Note:** For the purpose of sorting, `null` and `undefined` are considered "greater than" - * any other value (with undefined "greater than" null). This effectively means that `null` - * and `undefined` values end up at the end of a list sorted in ascending order. - * **Note:** `null` values use `'null'` as their type to be able to distinguish them from objects. - * - * @param {Array|ArrayLike} collection - The collection (array or array-like object) to sort. - * @param {(Function|string|Array.)=} expression - A predicate (or list of - * predicates) to be used by the comparator to determine the order of elements. - * - * Can be one of: - * - * - `Function`: A getter function. This function will be called with each item as argument and - * the return value will be used for sorting. - * - `string`: An AngularJS expression. This expression will be evaluated against each item and the - * result will be used for sorting. For example, use `'label'` to sort by a property called - * `label` or `'label.substring(0, 3)'` to sort by the first 3 characters of the `label` - * property.
      - * (The result of a constant expression is interpreted as a property name to be used for - * comparison. For example, use `'"special name"'` (note the extra pair of quotes) to sort by a - * property called `special name`.)
      - * An expression can be optionally prefixed with `+` or `-` to control the sorting direction, - * ascending or descending. For example, `'+label'` or `'-label'`. If no property is provided, - * (e.g. `'+'` or `'-'`), the collection element itself is used in comparisons. - * - `Array`: An array of function and/or string predicates. If a predicate cannot determine the - * relative order of two items, the next predicate is used as a tie-breaker. - * - * **Note:** If the predicate is missing or empty then it defaults to `'+'`. - * - * @param {boolean=} reverse - If `true`, reverse the sorting order. - * @param {(Function)=} comparator - The comparator function used to determine the relative order of - * value pairs. If omitted, the built-in comparator will be used. - * - * @returns {Array} - The sorted array. - * - * - * @example - * ### Ordering a table with `ngRepeat` - * - * The example below demonstrates a simple {@link ngRepeat ngRepeat}, where the data is sorted by - * age in descending order (expression is set to `'-age'`). The `comparator` is not set, which means - * it defaults to the built-in comparator. - * - - -
      - - - - - - - - - - - -
      NamePhone NumberAge
      {{friend.name}}{{friend.phone}}{{friend.age}}
      -
      -
      - - angular.module('orderByExample1', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - - // Element locators - var names = element.all(by.repeater('friends').column('friend.name')); - - it('should sort friends by age in reverse order', function() { - expect(names.get(0).getText()).toBe('Adam'); - expect(names.get(1).getText()).toBe('Julie'); - expect(names.get(2).getText()).toBe('Mike'); - expect(names.get(3).getText()).toBe('Mary'); - expect(names.get(4).getText()).toBe('John'); - }); - -
      - *
      - * - * @example - * ### Changing parameters dynamically - * - * All parameters can be changed dynamically. The next example shows how you can make the columns of - * a table sortable, by binding the `expression` and `reverse` parameters to scope properties. - * - - -
      -
      Sort by = {{propertyName}}; reverse = {{reverse}}
      -
      - -
      - - - - - - - - - - - -
      - - - - - - - - -
      {{friend.name}}{{friend.phone}}{{friend.age}}
      -
      -
      - - angular.module('orderByExample2', []) - .controller('ExampleController', ['$scope', function($scope) { - var friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - - $scope.propertyName = 'age'; - $scope.reverse = true; - $scope.friends = friends; - - $scope.sortBy = function(propertyName) { - $scope.reverse = ($scope.propertyName === propertyName) ? !$scope.reverse : false; - $scope.propertyName = propertyName; - }; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - .sortorder:after { - content: '\25b2'; // BLACK UP-POINTING TRIANGLE - } - .sortorder.reverse:after { - content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE - } - - - // Element locators - var unsortButton = element(by.partialButtonText('unsorted')); - var nameHeader = element(by.partialButtonText('Name')); - var phoneHeader = element(by.partialButtonText('Phone')); - var ageHeader = element(by.partialButtonText('Age')); - var firstName = element(by.repeater('friends').column('friend.name').row(0)); - var lastName = element(by.repeater('friends').column('friend.name').row(4)); - - it('should sort friends by some property, when clicking on the column header', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - phoneHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Mary'); - - nameHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('Mike'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - }); - - it('should sort friends in reverse order, when clicking on the same column', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - - ageHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - }); - - it('should restore the original order, when clicking "Set to unsorted"', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - unsortButton.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Julie'); - }); - -
      - *
      - * - * @example - * ### Using `orderBy` inside a controller - * - * It is also possible to call the `orderBy` filter manually, by injecting `orderByFilter`, and - * calling it with the desired parameters. (Alternatively, you could inject the `$filter` factory - * and retrieve the `orderBy` filter with `$filter('orderBy')`.) - * - - -
      -
      Sort by = {{propertyName}}; reverse = {{reverse}}
      -
      - -
      - - - - - - - - - - - -
      - - - - - - - - -
      {{friend.name}}{{friend.phone}}{{friend.age}}
      -
      -
      - - angular.module('orderByExample3', []) - .controller('ExampleController', ['$scope', 'orderByFilter', function($scope, orderBy) { - var friends = [ - {name: 'John', phone: '555-1212', age: 10}, - {name: 'Mary', phone: '555-9876', age: 19}, - {name: 'Mike', phone: '555-4321', age: 21}, - {name: 'Adam', phone: '555-5678', age: 35}, - {name: 'Julie', phone: '555-8765', age: 29} - ]; - - $scope.propertyName = 'age'; - $scope.reverse = true; - $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); - - $scope.sortBy = function(propertyName) { - $scope.reverse = (propertyName !== null && $scope.propertyName === propertyName) - ? !$scope.reverse : false; - $scope.propertyName = propertyName; - $scope.friends = orderBy(friends, $scope.propertyName, $scope.reverse); - }; - }]); - - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - .sortorder:after { - content: '\25b2'; // BLACK UP-POINTING TRIANGLE - } - .sortorder.reverse:after { - content: '\25bc'; // BLACK DOWN-POINTING TRIANGLE - } - - - // Element locators - var unsortButton = element(by.partialButtonText('unsorted')); - var nameHeader = element(by.partialButtonText('Name')); - var phoneHeader = element(by.partialButtonText('Phone')); - var ageHeader = element(by.partialButtonText('Age')); - var firstName = element(by.repeater('friends').column('friend.name').row(0)); - var lastName = element(by.repeater('friends').column('friend.name').row(4)); - - it('should sort friends by some property, when clicking on the column header', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - phoneHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Mary'); - - nameHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('Mike'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - }); - - it('should sort friends in reverse order, when clicking on the same column', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - ageHeader.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Adam'); - - ageHeader.click(); - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - }); - - it('should restore the original order, when clicking "Set to unsorted"', function() { - expect(firstName.getText()).toBe('Adam'); - expect(lastName.getText()).toBe('John'); - - unsortButton.click(); - expect(firstName.getText()).toBe('John'); - expect(lastName.getText()).toBe('Julie'); - }); - -
      - *
      - * - * @example - * ### Using a custom comparator - * - * If you have very specific requirements about the way items are sorted, you can pass your own - * comparator function. For example, you might need to compare some strings in a locale-sensitive - * way. (When specifying a custom comparator, you also need to pass a value for the `reverse` - * argument - passing `false` retains the default sorting order, i.e. ascending.) - * - - -
      -
      -

      Locale-sensitive Comparator

      - - - - - - - - - -
      NameFavorite Letter
      {{friend.name}}{{friend.favoriteLetter}}
      -
      -
      -

      Default Comparator

      - - - - - - - - - -
      NameFavorite Letter
      {{friend.name}}{{friend.favoriteLetter}}
      -
      -
      -
      - - angular.module('orderByExample4', []) - .controller('ExampleController', ['$scope', function($scope) { - $scope.friends = [ - {name: 'John', favoriteLetter: 'Ä'}, - {name: 'Mary', favoriteLetter: 'Ü'}, - {name: 'Mike', favoriteLetter: 'Ö'}, - {name: 'Adam', favoriteLetter: 'H'}, - {name: 'Julie', favoriteLetter: 'Z'} - ]; - - $scope.localeSensitiveComparator = function(v1, v2) { - // If we don't get strings, just compare by index - if (v1.type !== 'string' || v2.type !== 'string') { - return (v1.index < v2.index) ? -1 : 1; - } - - // Compare strings alphabetically, taking locale into account - return v1.value.localeCompare(v2.value); - }; - }]); - - - .friends-container { - display: inline-block; - margin: 0 30px; - } - - .friends { - border-collapse: collapse; - } - - .friends th { - border-bottom: 1px solid; - } - .friends td, .friends th { - border-left: 1px solid; - padding: 5px 10px; - } - .friends td:first-child, .friends th:first-child { - border-left: none; - } - - - // Element locators - var container = element(by.css('.custom-comparator')); - var names = container.all(by.repeater('friends').column('friend.name')); - - it('should sort friends by favorite letter (in correct alphabetical order)', function() { - expect(names.get(0).getText()).toBe('John'); - expect(names.get(1).getText()).toBe('Adam'); - expect(names.get(2).getText()).toBe('Mike'); - expect(names.get(3).getText()).toBe('Mary'); - expect(names.get(4).getText()).toBe('Julie'); - }); - -
      - * - */ -orderByFilter.$inject = ['$parse']; -function orderByFilter($parse) { - return function(array, sortPredicate, reverseOrder, compareFn) { - - if (array == null) return array; - if (!isArrayLike(array)) { - throw minErr('orderBy')('notarray', 'Expected array but received: {0}', array); - } - - if (!isArray(sortPredicate)) { sortPredicate = [sortPredicate]; } - if (sortPredicate.length === 0) { sortPredicate = ['+']; } - - var predicates = processPredicates(sortPredicate); - - var descending = reverseOrder ? -1 : 1; - - // Define the `compare()` function. Use a default comparator if none is specified. - var compare = isFunction(compareFn) ? compareFn : defaultCompare; - - // The next three lines are a version of a Swartzian Transform idiom from Perl - // (sometimes called the Decorate-Sort-Undecorate idiom) - // See https://en.wikipedia.org/wiki/Schwartzian_transform - var compareValues = Array.prototype.map.call(array, getComparisonObject); - compareValues.sort(doComparison); - array = compareValues.map(function(item) { return item.value; }); - - return array; - - function getComparisonObject(value, index) { - // NOTE: We are adding an extra `tieBreaker` value based on the element's index. - // This will be used to keep the sort stable when none of the input predicates can - // distinguish between two elements. - return { - value: value, - tieBreaker: {value: index, type: 'number', index: index}, - predicateValues: predicates.map(function(predicate) { - return getPredicateValue(predicate.get(value), index); - }) - }; - } - - function doComparison(v1, v2) { - for (var i = 0, ii = predicates.length; i < ii; i++) { - var result = compare(v1.predicateValues[i], v2.predicateValues[i]); - if (result) { - return result * predicates[i].descending * descending; - } - } - - return (compare(v1.tieBreaker, v2.tieBreaker) || defaultCompare(v1.tieBreaker, v2.tieBreaker)) * descending; - } - }; - - function processPredicates(sortPredicates) { - return sortPredicates.map(function(predicate) { - var descending = 1, get = identity; - - if (isFunction(predicate)) { - get = predicate; - } else if (isString(predicate)) { - if ((predicate.charAt(0) === '+' || predicate.charAt(0) === '-')) { - descending = predicate.charAt(0) === '-' ? -1 : 1; - predicate = predicate.substring(1); - } - if (predicate !== '') { - get = $parse(predicate); - if (get.constant) { - var key = get(); - get = function(value) { return value[key]; }; - } - } - } - return {get: get, descending: descending}; - }); - } - - function isPrimitive(value) { - switch (typeof value) { - case 'number': /* falls through */ - case 'boolean': /* falls through */ - case 'string': - return true; - default: - return false; - } - } - - function objectValue(value) { - // If `valueOf` is a valid function use that - if (isFunction(value.valueOf)) { - value = value.valueOf(); - if (isPrimitive(value)) return value; - } - // If `toString` is a valid function and not the one from `Object.prototype` use that - if (hasCustomToString(value)) { - value = value.toString(); - if (isPrimitive(value)) return value; - } - - return value; - } - - function getPredicateValue(value, index) { - var type = typeof value; - if (value === null) { - type = 'null'; - } else if (type === 'object') { - value = objectValue(value); - } - return {value: value, type: type, index: index}; - } - - function defaultCompare(v1, v2) { - var result = 0; - var type1 = v1.type; - var type2 = v2.type; - - if (type1 === type2) { - var value1 = v1.value; - var value2 = v2.value; - - if (type1 === 'string') { - // Compare strings case-insensitively - value1 = value1.toLowerCase(); - value2 = value2.toLowerCase(); - } else if (type1 === 'object') { - // For basic objects, use the position of the object - // in the collection instead of the value - if (isObject(value1)) value1 = v1.index; - if (isObject(value2)) value2 = v2.index; - } - - if (value1 !== value2) { - result = value1 < value2 ? -1 : 1; - } - } else { - result = (type1 === 'undefined') ? 1 : - (type2 === 'undefined') ? -1 : - (type1 === 'null') ? 1 : - (type2 === 'null') ? -1 : - (type1 < type2) ? -1 : 1; - } - - return result; - } -} - -function ngDirective(directive) { - if (isFunction(directive)) { - directive = { - link: directive - }; - } - directive.restrict = directive.restrict || 'AC'; - return valueFn(directive); -} - -/** - * @ngdoc directive - * @name a - * @restrict E - * - * @description - * Modifies the default behavior of the html a tag so that the default action is prevented when - * the href attribute is empty. - * - * For dynamically creating `href` attributes for a tags, see the {@link ng.ngHref `ngHref`} directive. - */ -var htmlAnchorDirective = valueFn({ - restrict: 'E', - compile: function(element, attr) { - if (!attr.href && !attr.xlinkHref) { - return function(scope, element) { - // If the linked element is not an anchor tag anymore, do nothing - if (element[0].nodeName.toLowerCase() !== 'a') return; - - // SVGAElement does not use the href attribute, but rather the 'xlinkHref' attribute. - var href = toString.call(element.prop('href')) === '[object SVGAnimatedString]' ? - 'xlink:href' : 'href'; - element.on('click', function(event) { - // if we have no href url, then don't navigate anywhere. - if (!element.attr(href)) { - event.preventDefault(); - } - }); - }; - } - } -}); - -/** - * @ngdoc directive - * @name ngHref - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in an href attribute will - * make the link go to the wrong URL if the user clicks it before - * AngularJS has a chance to replace the `{{hash}}` markup with its - * value. Until AngularJS replaces the markup the link will be broken - * and will most likely return a 404 error. The `ngHref` directive - * solves this problem. - * - * The wrong way to write it: - * ```html - * link1 - * ``` - * - * The correct way to write it: - * ```html - * link1 - * ``` - * - * @element A - * @param {template} ngHref any string which can contain `{{}}` markup. - * - * @example - * This example shows various combinations of `href`, `ng-href` and `ng-click` attributes - * in links and their different behaviors: - - -
      - link 1 (link, don't reload)
      - link 2 (link, don't reload)
      - link 3 (link, reload!)
      - anchor (link, don't reload)
      - anchor (no link)
      - link (link, change location) -
      - - it('should execute ng-click but not reload when href without value', function() { - element(by.id('link-1')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('1'); - expect(element(by.id('link-1')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when href empty string', function() { - element(by.id('link-2')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('2'); - expect(element(by.id('link-2')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click and change url when ng-href specified', function() { - expect(element(by.id('link-3')).getAttribute('href')).toMatch(/\/123$/); - - element(by.id('link-3')).click(); - - // At this point, we navigate away from an AngularJS page, so we need - // to use browser.driver to get the base webdriver. - - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/123$/); - }); - }, 5000, 'page should navigate to /123'); - }); - - it('should execute ng-click but not reload when href empty string and name specified', function() { - element(by.id('link-4')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('4'); - expect(element(by.id('link-4')).getAttribute('href')).toBe(''); - }); - - it('should execute ng-click but not reload when no href but name specified', function() { - element(by.id('link-5')).click(); - expect(element(by.model('value')).getAttribute('value')).toEqual('5'); - expect(element(by.id('link-5')).getAttribute('href')).toBe(null); - }); - - it('should only change url when only ng-href', function() { - element(by.model('value')).clear(); - element(by.model('value')).sendKeys('6'); - expect(element(by.id('link-6')).getAttribute('href')).toMatch(/\/6$/); - - element(by.id('link-6')).click(); - - // At this point, we navigate away from an AngularJS page, so we need - // to use browser.driver to get the base webdriver. - browser.wait(function() { - return browser.driver.getCurrentUrl().then(function(url) { - return url.match(/\/6$/); - }); - }, 5000, 'page should navigate to /6'); - }); - -
      - */ - -/** - * @ngdoc directive - * @name ngSrc - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in a `src` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until AngularJS replaces the expression inside - * `{{hash}}`. The `ngSrc` directive solves this problem. - * - * The buggy way to write it: - * ```html - * Description - * ``` - * - * The correct way to write it: - * ```html - * Description - * ``` - * - * @element IMG - * @param {template} ngSrc any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngSrcset - * @restrict A - * @priority 99 - * - * @description - * Using AngularJS markup like `{{hash}}` in a `srcset` attribute doesn't - * work right: The browser will fetch from the URL with the literal - * text `{{hash}}` until AngularJS replaces the expression inside - * `{{hash}}`. The `ngSrcset` directive solves this problem. - * - * The buggy way to write it: - * ```html - * Description - * ``` - * - * The correct way to write it: - * ```html - * Description - * ``` - * - * @element IMG - * @param {template} ngSrcset any string which can contain `{{}}` markup. - */ - -/** - * @ngdoc directive - * @name ngDisabled - * @restrict A - * @priority 100 - * - * @description - * - * This directive sets the `disabled` attribute on the element (typically a form control, - * e.g. `input`, `button`, `select` etc.) if the - * {@link guide/expression expression} inside `ngDisabled` evaluates to truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `disabled` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
      - -
      - - it('should toggle button', function() { - expect(element(by.css('button')).getAttribute('disabled')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('button')).getAttribute('disabled')).toBeTruthy(); - }); - -
      - * - * @param {expression} ngDisabled If the {@link guide/expression expression} is truthy, - * then the `disabled` attribute will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngChecked - * @restrict A - * @priority 100 - * - * @description - * Sets the `checked` attribute on the element, if the expression inside `ngChecked` is truthy. - * - * Note that this directive should not be used together with {@link ngModel `ngModel`}, - * as this can lead to unexpected behavior. - * - * A special directive is necessary because we cannot use interpolation inside the `checked` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
      - -
      - - it('should check both checkBoxes', function() { - expect(element(by.id('checkFollower')).getAttribute('checked')).toBeFalsy(); - element(by.model('leader')).click(); - expect(element(by.id('checkFollower')).getAttribute('checked')).toBeTruthy(); - }); - -
      - * - * @element INPUT - * @param {expression} ngChecked If the {@link guide/expression expression} is truthy, - * then the `checked` attribute will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngReadonly - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `readonly` attribute on the element, if the expression inside `ngReadonly` is truthy. - * Note that `readonly` applies only to `input` elements with specific types. [See the input docs on - * MDN](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-readonly) for more information. - * - * A special directive is necessary because we cannot use interpolation inside the `readonly` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * @example - - -
      - -
      - - it('should toggle readonly attr', function() { - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeFalsy(); - element(by.model('checked')).click(); - expect(element(by.css('[type="text"]')).getAttribute('readonly')).toBeTruthy(); - }); - -
      - * - * @element INPUT - * @param {expression} ngReadonly If the {@link guide/expression expression} is truthy, - * then special attribute "readonly" will be set on the element - */ - - -/** - * @ngdoc directive - * @name ngSelected - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `selected` attribute on the element, if the expression inside `ngSelected` is truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `selected` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - *
      - * **Note:** `ngSelected` does not interact with the `select` and `ngModel` directives, it only - * sets the `selected` attribute on the element. If you are using `ngModel` on the select, you - * should not use `ngSelected` on the options, as `ngModel` will set the select value and - * selected options. - *
      - * - * @example - - -
      - -
      - - it('should select Greetings!', function() { - expect(element(by.id('greet')).getAttribute('selected')).toBeFalsy(); - element(by.model('selected')).click(); - expect(element(by.id('greet')).getAttribute('selected')).toBeTruthy(); - }); - -
      - * - * @element OPTION - * @param {expression} ngSelected If the {@link guide/expression expression} is truthy, - * then special attribute "selected" will be set on the element - */ - -/** - * @ngdoc directive - * @name ngOpen - * @restrict A - * @priority 100 - * - * @description - * - * Sets the `open` attribute on the element, if the expression inside `ngOpen` is truthy. - * - * A special directive is necessary because we cannot use interpolation inside the `open` - * attribute. See the {@link guide/interpolation interpolation guide} for more info. - * - * ## A note about browser compatibility - * - * Internet Explorer and Edge do not support the `details` element, it is - * recommended to use {@link ng.ngShow} and {@link ng.ngHide} instead. - * - * @example - - -
      -
      - List -
        -
      • Apple
      • -
      • Orange
      • -
      • Durian
      • -
      -
      -
      - - it('should toggle open', function() { - expect(element(by.id('details')).getAttribute('open')).toBeFalsy(); - element(by.model('open')).click(); - expect(element(by.id('details')).getAttribute('open')).toBeTruthy(); - }); - -
      - * - * @element DETAILS - * @param {expression} ngOpen If the {@link guide/expression expression} is truthy, - * then special attribute "open" will be set on the element - */ - -var ngAttributeAliasDirectives = {}; - -// boolean attrs are evaluated -forEach(BOOLEAN_ATTR, function(propName, attrName) { - // binding to multiple is not supported - if (propName === 'multiple') return; - - function defaultLinkFn(scope, element, attr) { - scope.$watch(attr[normalized], function ngBooleanAttrWatchAction(value) { - attr.$set(attrName, !!value); - }); - } - - var normalized = directiveNormalize('ng-' + attrName); - var linkFn = defaultLinkFn; - - if (propName === 'checked') { - linkFn = function(scope, element, attr) { - // ensuring ngChecked doesn't interfere with ngModel when both are set on the same input - if (attr.ngModel !== attr[normalized]) { - defaultLinkFn(scope, element, attr); - } - }; - } - - ngAttributeAliasDirectives[normalized] = function() { - return { - restrict: 'A', - priority: 100, - link: linkFn - }; - }; -}); - -// aliased input attrs are evaluated -forEach(ALIASED_ATTR, function(htmlAttr, ngAttr) { - ngAttributeAliasDirectives[ngAttr] = function() { - return { - priority: 100, - link: function(scope, element, attr) { - //special case ngPattern when a literal regular expression value - //is used as the expression (this way we don't have to watch anything). - if (ngAttr === 'ngPattern' && attr.ngPattern.charAt(0) === '/') { - var match = attr.ngPattern.match(REGEX_STRING_REGEXP); - if (match) { - attr.$set('ngPattern', new RegExp(match[1], match[2])); - return; - } - } - - scope.$watch(attr[ngAttr], function ngAttrAliasWatchAction(value) { - attr.$set(ngAttr, value); - }); - } - }; - }; -}); - -// ng-src, ng-srcset, ng-href are interpolated -forEach(['src', 'srcset', 'href'], function(attrName) { - var normalized = directiveNormalize('ng-' + attrName); - ngAttributeAliasDirectives[normalized] = ['$sce', function($sce) { - return { - priority: 99, // it needs to run after the attributes are interpolated - link: function(scope, element, attr) { - var propName = attrName, - name = attrName; - - if (attrName === 'href' && - toString.call(element.prop('href')) === '[object SVGAnimatedString]') { - name = 'xlinkHref'; - attr.$attr[name] = 'xlink:href'; - propName = null; - } - - // We need to sanitize the url at least once, in case it is a constant - // non-interpolated attribute. - attr.$set(normalized, $sce.getTrustedMediaUrl(attr[normalized])); - - attr.$observe(normalized, function(value) { - if (!value) { - if (attrName === 'href') { - attr.$set(name, null); - } - return; - } - - attr.$set(name, value); - - // Support: IE 9-11 only - // On IE, if "ng:src" directive declaration is used and "src" attribute doesn't exist - // then calling element.setAttribute('src', 'foo') doesn't do anything, so we need - // to set the property as well to achieve the desired effect. - // We use attr[attrName] value since $set might have sanitized the url. - if (msie && propName) element.prop(propName, attr[name]); - }); - } - }; - }]; -}); - -/* global -nullFormCtrl, -PENDING_CLASS, -SUBMITTED_CLASS - */ -var nullFormCtrl = { - $addControl: noop, - $getControls: valueFn([]), - $$renameControl: nullFormRenameControl, - $removeControl: noop, - $setValidity: noop, - $setDirty: noop, - $setPristine: noop, - $setSubmitted: noop, - $$setSubmitted: noop -}, -PENDING_CLASS = 'ng-pending', -SUBMITTED_CLASS = 'ng-submitted'; - -function nullFormRenameControl(control, name) { - control.$name = name; -} - -/** - * @ngdoc type - * @name form.FormController - * - * @property {boolean} $pristine True if user has not interacted with the form yet. - * @property {boolean} $dirty True if user has already interacted with the form. - * @property {boolean} $valid True if all of the containing forms and controls are valid. - * @property {boolean} $invalid True if at least one containing control or form is invalid. - * @property {boolean} $submitted True if user has submitted the form even if its invalid. - * - * @property {Object} $pending An object hash, containing references to controls or forms with - * pending validators, where: - * - * - keys are validations tokens (error names). - * - values are arrays of controls or forms that have a pending validator for the given error name. - * - * See {@link form.FormController#$error $error} for a list of built-in validation tokens. - * - * @property {Object} $error An object hash, containing references to controls or forms with failing - * validators, where: - * - * - keys are validation tokens (error names), - * - values are arrays of controls or forms that have a failing validator for the given error name. - * - * Built-in validation tokens: - * - `email` - * - `max` - * - `maxlength` - * - `min` - * - `minlength` - * - `number` - * - `pattern` - * - `required` - * - `url` - * - `date` - * - `datetimelocal` - * - `time` - * - `week` - * - `month` - * - * @description - * `FormController` keeps track of all its controls and nested forms as well as the state of them, - * such as being valid/invalid or dirty/pristine. - * - * Each {@link ng.directive:form form} directive creates an instance - * of `FormController`. - * - */ -//asks for $scope to fool the BC controller module -FormController.$inject = ['$element', '$attrs', '$scope', '$animate', '$interpolate']; -function FormController($element, $attrs, $scope, $animate, $interpolate) { - this.$$controls = []; - - // init state - this.$error = {}; - this.$$success = {}; - this.$pending = undefined; - this.$name = $interpolate($attrs.name || $attrs.ngForm || '')($scope); - this.$dirty = false; - this.$pristine = true; - this.$valid = true; - this.$invalid = false; - this.$submitted = false; - this.$$parentForm = nullFormCtrl; - - this.$$element = $element; - this.$$animate = $animate; - - setupValidity(this); -} - -FormController.prototype = { - /** - * @ngdoc method - * @name form.FormController#$rollbackViewValue - * - * @description - * Rollback all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is typically needed by the reset button of - * a form that uses `ng-model-options` to pend updates. - */ - $rollbackViewValue: function() { - forEach(this.$$controls, function(control) { - control.$rollbackViewValue(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$commitViewValue - * - * @description - * Commit all form controls pending updates to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. This method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - $commitViewValue: function() { - forEach(this.$$controls, function(control) { - control.$commitViewValue(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$addControl - * @param {object} control control object, either a {@link form.FormController} or an - * {@link ngModel.NgModelController} - * - * @description - * Register a control with the form. Input elements using ngModelController do this automatically - * when they are linked. - * - * Note that the current state of the control will not be reflected on the new parent form. This - * is not an issue with normal use, as freshly compiled and linked controls are in a `$pristine` - * state. - * - * However, if the method is used programmatically, for example by adding dynamically created controls, - * or controls that have been previously removed without destroying their corresponding DOM element, - * it's the developers responsibility to make sure the current state propagates to the parent form. - * - * For example, if an input control is added that is already `$dirty` and has `$error` properties, - * calling `$setDirty()` and `$validate()` afterwards will propagate the state to the parent form. - */ - $addControl: function(control) { - // Breaking change - before, inputs whose name was "hasOwnProperty" were quietly ignored - // and not added to the scope. Now we throw an error. - assertNotHasOwnProperty(control.$name, 'input'); - this.$$controls.push(control); - - if (control.$name) { - this[control.$name] = control; - } - - control.$$parentForm = this; - }, - - /** - * @ngdoc method - * @name form.FormController#$getControls - * @returns {Array} the controls that are currently part of this form - * - * @description - * This method returns a **shallow copy** of the controls that are currently part of this form. - * The controls can be instances of {@link form.FormController `FormController`} - * ({@link ngForm "child-forms"}) and of {@link ngModel.NgModelController `NgModelController`}. - * If you need access to the controls of child-forms, you have to call `$getControls()` - * recursively on them. - * This can be used for example to iterate over all controls to validate them. - * - * The controls can be accessed normally, but adding to, or removing controls from the array has - * no effect on the form. Instead, use {@link form.FormController#$addControl `$addControl()`} and - * {@link form.FormController#$removeControl `$removeControl()`} for this use-case. - * Likewise, adding a control to, or removing a control from the form is not reflected - * in the shallow copy. That means you should get a fresh copy from `$getControls()` every time - * you need access to the controls. - */ - $getControls: function() { - return shallowCopy(this.$$controls); - }, - - // Private API: rename a form control - $$renameControl: function(control, newName) { - var oldName = control.$name; - - if (this[oldName] === control) { - delete this[oldName]; - } - this[newName] = control; - control.$name = newName; - }, - - /** - * @ngdoc method - * @name form.FormController#$removeControl - * @param {object} control control object, either a {@link form.FormController} or an - * {@link ngModel.NgModelController} - * - * @description - * Deregister a control from the form. - * - * Input elements using ngModelController do this automatically when they are destroyed. - * - * Note that only the removed control's validation state (`$errors`etc.) will be removed from the - * form. `$dirty`, `$submitted` states will not be changed, because the expected behavior can be - * different from case to case. For example, removing the only `$dirty` control from a form may or - * may not mean that the form is still `$dirty`. - */ - $removeControl: function(control) { - if (control.$name && this[control.$name] === control) { - delete this[control.$name]; - } - forEach(this.$pending, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - forEach(this.$error, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - forEach(this.$$success, function(value, name) { - // eslint-disable-next-line no-invalid-this - this.$setValidity(name, null, control); - }, this); - - arrayRemove(this.$$controls, control); - control.$$parentForm = nullFormCtrl; - }, - - /** - * @ngdoc method - * @name form.FormController#$setDirty - * - * @description - * Sets the form to a dirty state. - * - * This method can be called to add the 'ng-dirty' class and set the form to a dirty - * state (ng-dirty class). This method will also propagate to parent forms. - */ - $setDirty: function() { - this.$$animate.removeClass(this.$$element, PRISTINE_CLASS); - this.$$animate.addClass(this.$$element, DIRTY_CLASS); - this.$dirty = true; - this.$pristine = false; - this.$$parentForm.$setDirty(); - }, - - /** - * @ngdoc method - * @name form.FormController#$setPristine - * - * @description - * Sets the form to its pristine state. - * - * This method sets the form's `$pristine` state to true, the `$dirty` state to false, removes - * the `ng-dirty` class and adds the `ng-pristine` class. Additionally, it sets the `$submitted` - * state to false. - * - * This method will also propagate to all the controls contained in this form. - * - * Setting a form back to a pristine state is often useful when we want to 'reuse' a form after - * saving or resetting it. - */ - $setPristine: function() { - this.$$animate.setClass(this.$$element, PRISTINE_CLASS, DIRTY_CLASS + ' ' + SUBMITTED_CLASS); - this.$dirty = false; - this.$pristine = true; - this.$submitted = false; - forEach(this.$$controls, function(control) { - control.$setPristine(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$setUntouched - * - * @description - * Sets the form to its untouched state. - * - * This method can be called to remove the 'ng-touched' class and set the form controls to their - * untouched state (ng-untouched class). - * - * Setting a form controls back to their untouched state is often useful when setting the form - * back to its pristine state. - */ - $setUntouched: function() { - forEach(this.$$controls, function(control) { - control.$setUntouched(); - }); - }, - - /** - * @ngdoc method - * @name form.FormController#$setSubmitted - * - * @description - * Sets the form to its `$submitted` state. This will also set `$submitted` on all child and - * parent forms of the form. - */ - $setSubmitted: function() { - var rootForm = this; - while (rootForm.$$parentForm && (rootForm.$$parentForm !== nullFormCtrl)) { - rootForm = rootForm.$$parentForm; - } - rootForm.$$setSubmitted(); - }, - - $$setSubmitted: function() { - this.$$animate.addClass(this.$$element, SUBMITTED_CLASS); - this.$submitted = true; - forEach(this.$$controls, function(control) { - if (control.$$setSubmitted) { - control.$$setSubmitted(); - } - }); - } -}; - -/** - * @ngdoc method - * @name form.FormController#$setValidity - * - * @description - * Change the validity state of the form, and notify the parent form (if any). - * - * Application developers will rarely need to call this method directly. It is used internally, by - * {@link ngModel.NgModelController#$setValidity NgModelController.$setValidity()}, to propagate a - * control's validity state to the parent `FormController`. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be - * assigned to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` (for - * unfulfilled `$asyncValidators`), so that it is available for data-binding. The - * `validationErrorKey` should be in camelCase and will get converted into dash-case for - * class name. Example: `myError` will result in `ng-valid-my-error` and - * `ng-invalid-my-error` classes and can be bound to as `{{ someForm.$error.myError }}`. - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending - * (undefined), or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by AngularJS when validators do not run because of parse errors and when - * `$asyncValidators` do not run because any of the `$validators` failed. - * @param {NgModelController | FormController} controller - The controller whose validity state is - * triggering the change. - */ -addSetValidityMethod({ - clazz: FormController, - set: function(object, property, controller) { - var list = object[property]; - if (!list) { - object[property] = [controller]; - } else { - var index = list.indexOf(controller); - if (index === -1) { - list.push(controller); - } - } - }, - unset: function(object, property, controller) { - var list = object[property]; - if (!list) { - return; - } - arrayRemove(list, controller); - if (list.length === 0) { - delete object[property]; - } - } -}); - -/** - * @ngdoc directive - * @name ngForm - * @restrict EAC - * - * @description - * Helper directive that makes it possible to create control groups inside a - * {@link ng.directive:form `form`} directive. - * These "child forms" can be used, for example, to determine the validity of a sub-group of - * controls. - * - *
      - * **Note**: `ngForm` cannot be used as a replacement for `
      `, because it lacks its - * [built-in HTML functionality](https://html.spec.whatwg.org/#the-form-element). - * Specifically, you cannot submit `ngForm` like a `` tag. That means, - * you cannot send data to the server with `ngForm`, or integrate it with - * {@link ng.directive:ngSubmit `ngSubmit`}. - *
      - * - * @param {string=} ngForm|name Name of the form. If specified, the form controller will - * be published into the related scope, under this name. - * - */ - - /** - * @ngdoc directive - * @name form - * @restrict E - * - * @description - * Directive that instantiates - * {@link form.FormController FormController}. - * - * If the `name` attribute is specified, the form controller is published onto the current scope under - * this name. - * - * ## Alias: {@link ng.directive:ngForm `ngForm`} - * - * In AngularJS, forms can be nested. This means that the outer form is valid when all of the child - * forms are valid as well. However, browsers do not allow nesting of `` elements, so - * AngularJS provides the {@link ng.directive:ngForm `ngForm`} directive, which behaves identically to - * `form` but can be nested. Nested forms can be useful, for example, if the validity of a sub-group - * of controls needs to be determined. - * - * ## CSS classes - * - `ng-valid` is set if the form is valid. - * - `ng-invalid` is set if the form is invalid. - * - `ng-pending` is set if the form is pending. - * - `ng-pristine` is set if the form is pristine. - * - `ng-dirty` is set if the form is dirty. - * - `ng-submitted` is set if the form was submitted. - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * - * ## Submitting a form and preventing the default action - * - * Since the role of forms in client-side AngularJS applications is different than in classical - * roundtrip apps, it is desirable for the browser not to translate the form submission into a full - * page reload that sends the data to the server. Instead some javascript logic should be triggered - * to handle the form submission in an application-specific way. - * - * For this reason, AngularJS prevents the default action (form submission to the server) unless the - * `` element has an `action` attribute specified. - * - * You can use one of the following two ways to specify what javascript method should be called when - * a form is submitted: - * - * - {@link ng.directive:ngSubmit ngSubmit} directive on the form element - * - {@link ng.directive:ngClick ngClick} directive on the first - * button or input field of type submit (input[type=submit]) - * - * To prevent double execution of the handler, use only one of the {@link ng.directive:ngSubmit ngSubmit} - * or {@link ng.directive:ngClick ngClick} directives. - * This is because of the following form submission rules in the HTML specification: - * - * - If a form has only one input field then hitting enter in this field triggers form submit - * (`ngSubmit`) - * - if a form has 2+ input fields and no buttons or input[type=submit] then hitting enter - * doesn't trigger submit - * - if a form has one or more input fields and one or more buttons or input[type=submit] then - * hitting enter in any of the input fields will trigger the click handler on the *first* button or - * input[type=submit] (`ngClick`) *and* a submit handler on the enclosing form (`ngSubmit`) - * - * Any pending `ngModelOptions` changes will take place immediately when an enclosing form is - * submitted. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * @animations - * Animations in ngForm are triggered when any of the associated CSS classes are added and removed. - * These classes are: `.ng-pristine`, `.ng-dirty`, `.ng-invalid` and `.ng-valid` as well as any - * other validations that are performed within the form. Animations in ngForm are similar to how - * they work in ngClass and animations can be hooked into using CSS transitions, keyframes as well - * as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style a form element - * that has been rendered as invalid after it has been validated: - * - *
      - * //be sure to include ngAnimate as a module to hook into more
      - * //advanced animations
      - * .my-form {
      - *   transition:0.5s linear all;
      - *   background: white;
      - * }
      - * .my-form.ng-invalid {
      - *   background: red;
      - *   color:white;
      - * }
      - * 
      - * - * @example - - - - - - userType: - Required!
      - userType = {{userType}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      - -
      - - it('should initialize to model', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - - expect(userType.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - var userType = element(by.binding('userType')); - var valid = element(by.binding('myForm.input.$valid')); - var userInput = element(by.model('userType')); - - userInput.clear(); - userInput.sendKeys(''); - - expect(userType.getText()).toEqual('userType ='); - expect(valid.getText()).toContain('false'); - }); - -
      - * - * @param {string=} name Name of the form. If specified, the form controller will be published into - * related scope, under this name. - */ -var formDirectiveFactory = function(isNgForm) { - return ['$timeout', '$parse', function($timeout, $parse) { - var formDirective = { - name: 'form', - restrict: isNgForm ? 'EAC' : 'E', - require: ['form', '^^?form'], //first is the form's own ctrl, second is an optional parent form - controller: FormController, - compile: function ngFormCompile(formElement, attr) { - // Setup initial state of the control - formElement.addClass(PRISTINE_CLASS).addClass(VALID_CLASS); - - var nameAttr = attr.name ? 'name' : (isNgForm && attr.ngForm ? 'ngForm' : false); - - return { - pre: function ngFormPreLink(scope, formElement, attr, ctrls) { - var controller = ctrls[0]; - - // if `action` attr is not present on the form, prevent the default action (submission) - if (!('action' in attr)) { - // we can't use jq events because if a form is destroyed during submission the default - // action is not prevented. see #1238 - // - // IE 9 is not affected because it doesn't fire a submit event and try to do a full - // page reload if the form was destroyed by submission of the form via a click handler - // on a button in the form. Looks like an IE9 specific bug. - var handleFormSubmission = function(event) { - scope.$apply(function() { - controller.$commitViewValue(); - controller.$setSubmitted(); - }); - - event.preventDefault(); - }; - - formElement[0].addEventListener('submit', handleFormSubmission); - - // unregister the preventDefault listener so that we don't not leak memory but in a - // way that will achieve the prevention of the default action. - formElement.on('$destroy', function() { - $timeout(function() { - formElement[0].removeEventListener('submit', handleFormSubmission); - }, 0, false); - }); - } - - var parentFormCtrl = ctrls[1] || controller.$$parentForm; - parentFormCtrl.$addControl(controller); - - var setter = nameAttr ? getSetter(controller.$name) : noop; - - if (nameAttr) { - setter(scope, controller); - attr.$observe(nameAttr, function(newValue) { - if (controller.$name === newValue) return; - setter(scope, undefined); - controller.$$parentForm.$$renameControl(controller, newValue); - setter = getSetter(controller.$name); - setter(scope, controller); - }); - } - formElement.on('$destroy', function() { - controller.$$parentForm.$removeControl(controller); - setter(scope, undefined); - extend(controller, nullFormCtrl); //stop propagating child destruction handlers upwards - }); - } - }; - } - }; - - return formDirective; - - function getSetter(expression) { - if (expression === '') { - //create an assignable expression, so forms with an empty name can be renamed later - return $parse('this[""]').assign; - } - return $parse(expression).assign || noop; - } - }]; -}; - -var formDirective = formDirectiveFactory(); -var ngFormDirective = formDirectiveFactory(true); - - - -// helper methods -function setupValidity(instance) { - instance.$$classCache = {}; - instance.$$classCache[INVALID_CLASS] = !(instance.$$classCache[VALID_CLASS] = instance.$$element.hasClass(VALID_CLASS)); -} -function addSetValidityMethod(context) { - var clazz = context.clazz, - set = context.set, - unset = context.unset; - - clazz.prototype.$setValidity = function(validationErrorKey, state, controller) { - if (isUndefined(state)) { - createAndSet(this, '$pending', validationErrorKey, controller); - } else { - unsetAndCleanup(this, '$pending', validationErrorKey, controller); - } - if (!isBoolean(state)) { - unset(this.$error, validationErrorKey, controller); - unset(this.$$success, validationErrorKey, controller); - } else { - if (state) { - unset(this.$error, validationErrorKey, controller); - set(this.$$success, validationErrorKey, controller); - } else { - set(this.$error, validationErrorKey, controller); - unset(this.$$success, validationErrorKey, controller); - } - } - if (this.$pending) { - cachedToggleClass(this, PENDING_CLASS, true); - this.$valid = this.$invalid = undefined; - toggleValidationCss(this, '', null); - } else { - cachedToggleClass(this, PENDING_CLASS, false); - this.$valid = isObjectEmpty(this.$error); - this.$invalid = !this.$valid; - toggleValidationCss(this, '', this.$valid); - } - - // re-read the state as the set/unset methods could have - // combined state in this.$error[validationError] (used for forms), - // where setting/unsetting only increments/decrements the value, - // and does not replace it. - var combinedState; - if (this.$pending && this.$pending[validationErrorKey]) { - combinedState = undefined; - } else if (this.$error[validationErrorKey]) { - combinedState = false; - } else if (this.$$success[validationErrorKey]) { - combinedState = true; - } else { - combinedState = null; - } - - toggleValidationCss(this, validationErrorKey, combinedState); - this.$$parentForm.$setValidity(validationErrorKey, combinedState, this); - }; - - function createAndSet(ctrl, name, value, controller) { - if (!ctrl[name]) { - ctrl[name] = {}; - } - set(ctrl[name], value, controller); - } - - function unsetAndCleanup(ctrl, name, value, controller) { - if (ctrl[name]) { - unset(ctrl[name], value, controller); - } - if (isObjectEmpty(ctrl[name])) { - ctrl[name] = undefined; - } - } - - function cachedToggleClass(ctrl, className, switchValue) { - if (switchValue && !ctrl.$$classCache[className]) { - ctrl.$$animate.addClass(ctrl.$$element, className); - ctrl.$$classCache[className] = true; - } else if (!switchValue && ctrl.$$classCache[className]) { - ctrl.$$animate.removeClass(ctrl.$$element, className); - ctrl.$$classCache[className] = false; - } - } - - function toggleValidationCss(ctrl, validationErrorKey, isValid) { - validationErrorKey = validationErrorKey ? '-' + snake_case(validationErrorKey, '-') : ''; - - cachedToggleClass(ctrl, VALID_CLASS + validationErrorKey, isValid === true); - cachedToggleClass(ctrl, INVALID_CLASS + validationErrorKey, isValid === false); - } -} - -function isObjectEmpty(obj) { - if (obj) { - for (var prop in obj) { - if (obj.hasOwnProperty(prop)) { - return false; - } - } - } - return true; -} - -/* global - VALID_CLASS: false, - INVALID_CLASS: false, - PRISTINE_CLASS: false, - DIRTY_CLASS: false, - ngModelMinErr: false -*/ - -// Regex code was initially obtained from SO prior to modification: https://stackoverflow.com/questions/3143070/javascript-regex-iso-datetime#answer-3143231 -var ISO_DATE_REGEXP = /^\d{4,}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+(?:[+-][0-2]\d:[0-5]\d|Z)$/; -// See valid URLs in RFC3987 (http://tools.ietf.org/html/rfc3987) -// Note: We are being more lenient, because browsers are too. -// 1. Scheme -// 2. Slashes -// 3. Username -// 4. Password -// 5. Hostname -// 6. Port -// 7. Path -// 8. Query -// 9. Fragment -// 1111111111111111 222 333333 44444 55555555555555555555555 666 77777777 8888888 999 -var URL_REGEXP = /^[a-z][a-z\d.+-]*:\/*(?:[^:@]+(?::[^@]+)?@)?(?:[^\s:/?#]+|\[[a-f\d:]+])(?::\d+)?(?:\/[^?#]*)?(?:\?[^#]*)?(?:#.*)?$/i; -// eslint-disable-next-line max-len -var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/; -var NUMBER_REGEXP = /^\s*(-|\+)?(\d+|(\d*(\.\d*)))([eE][+-]?\d+)?\s*$/; -var DATE_REGEXP = /^(\d{4,})-(\d{2})-(\d{2})$/; -var DATETIMELOCAL_REGEXP = /^(\d{4,})-(\d\d)-(\d\d)T(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; -var WEEK_REGEXP = /^(\d{4,})-W(\d\d)$/; -var MONTH_REGEXP = /^(\d{4,})-(\d\d)$/; -var TIME_REGEXP = /^(\d\d):(\d\d)(?::(\d\d)(\.\d{1,3})?)?$/; - -var PARTIAL_VALIDATION_EVENTS = 'keydown wheel mousedown'; -var PARTIAL_VALIDATION_TYPES = createMap(); -forEach('date,datetime-local,month,time,week'.split(','), function(type) { - PARTIAL_VALIDATION_TYPES[type] = true; -}); - -var inputType = { - - /** - * @ngdoc input - * @name input[text] - * - * @description - * Standard HTML text input with AngularJS data binding, inherited by most of the `input` elements. - * - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Adds `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
      - * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false AngularJS will not automatically trim the input. - * This parameter is ignored for input[type=password] controls, which will never trim the - * input. - * - * @example - - - -
      - -
      - - Required! - - Single word only! -
      - text = {{example.text}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var text = element(by.binding('example.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('guest'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if multi word', function() { - input.clear(); - input.sendKeys('hello world'); - - expect(valid.getText()).toContain('false'); - }); - -
      - */ - 'text': textInputType, - - /** - * @ngdoc input - * @name input[date] - * - * @description - * Input with date validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, text must be entered in a valid ISO-8601 - * date format (yyyy-MM-dd), for example: `2009-01-06`. Since many - * modern browsers do not yet support this input type, it is important to provide cues to users on the - * expected input format via a placeholder or label. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. This must be a - * valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute - * (e.g. `min="{{minDate | date:'yyyy-MM-dd'}}"`). Note that `min` will also add native HTML5 - * constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. This must be - * a valid ISO date string (yyyy-MM-dd). You can also use interpolation inside this attribute - * (e.g. `max="{{maxDate | date:'yyyy-MM-dd'}}"`). Note that `max` will also add native HTML5 - * constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO date string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO date string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - - -
      - - Required! - - Not a valid date! -
      - value = {{example.value | date: "yyyy-MM-dd"}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value | date: "yyyy-MM-dd"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (see https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10-22'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
      - */ - 'date': createDateInputType('date', DATE_REGEXP, - createDateParser(DATE_REGEXP, ['yyyy', 'MM', 'dd']), - 'yyyy-MM-dd'), - - /** - * @ngdoc input - * @name input[datetime-local] - * - * @description - * Input with datetime validation and transformation. In browsers that do not yet support - * the HTML5 date input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local datetime format (yyyy-MM-ddTHH:mm:ss), for example: `2010-12-28T14:57:00`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * The format of the displayed time can be adjusted with the - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions} `timeSecondsFormat` - * and `timeStripZeroSeconds`. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation - * inside this attribute (e.g. `min="{{minDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`). - * Note that `min` will also add native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO datetime format (yyyy-MM-ddTHH:mm:ss). You can also use interpolation - * inside this attribute (e.g. `max="{{maxDatetimeLocal | date:'yyyy-MM-ddTHH:mm:ss'}}"`). - * Note that `max` will also add native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation error key to the Date / ISO datetime string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation error key to the Date / ISO datetime string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - - -
      - - Required! - - Not a valid date! -
      - value = {{example.value | date: "yyyy-MM-ddTHH:mm:ss"}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value | date: "yyyy-MM-ddTHH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2010-12-28T14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01-01T23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
      - */ - 'datetime-local': createDateInputType('datetimelocal', DATETIMELOCAL_REGEXP, - createDateParser(DATETIMELOCAL_REGEXP, ['yyyy', 'MM', 'dd', 'HH', 'mm', 'ss', 'sss']), - 'yyyy-MM-ddTHH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[time] - * - * @description - * Input with time validation and transformation. In browsers that do not yet support - * the HTML5 time input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * local time format (HH:mm:ss), for example: `14:57:00`. Model must be a Date object. This binding will always output a - * Date object to the model of January 1, 1970, or local date `new Date(1970, 0, 1, HH, mm, ss)`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions}. By default, - * this is the timezone of the browser. - * - * The format of the displayed time can be adjusted with the - * {@link ng.directive:ngModelOptions#ngModelOptions-arguments ngModelOptions} `timeSecondsFormat` - * and `timeStripZeroSeconds`. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this - * attribute (e.g. `min="{{minTime | date:'HH:mm:ss'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO time format (HH:mm:ss). You can also use interpolation inside this - * attribute (e.g. `max="{{maxTime | date:'HH:mm:ss'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO time string the - * `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO time string the - * `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - - -
      - - Required! - - Not a valid date! -
      - value = {{example.value | date: "HH:mm:ss"}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value | date: "HH:mm:ss"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('14:57:00'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('23:59:00'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
      - */ - 'time': createDateInputType('time', TIME_REGEXP, - createDateParser(TIME_REGEXP, ['HH', 'mm', 'ss', 'sss']), - 'HH:mm:ss.sss'), - - /** - * @ngdoc input - * @name input[week] - * - * @description - * Input with week-of-the-year validation and transformation to Date. In browsers that do not yet support - * the HTML5 week input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * week format (yyyy-W##), for example: `2013-W02`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * - * The value of the resulting Date object will be set to Thursday at 00:00:00 of the requested week, - * due to ISO-8601 week numbering standards. Information on ISO's system for numbering the weeks of the - * year can be found at: https://en.wikipedia.org/wiki/ISO_8601#Week_dates - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this - * attribute (e.g. `min="{{minWeek | date:'yyyy-Www'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO week format (yyyy-W##). You can also use interpolation inside this - * attribute (e.g. `max="{{maxWeek | date:'yyyy-Www'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - -
      - - Required! - - Not a valid date! -
      - value = {{example.value | date: "yyyy-Www"}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value | date: "yyyy-Www"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-W01'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-W01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
      - */ - 'week': createDateInputType('week', WEEK_REGEXP, weekParser, 'yyyy-Www'), - - /** - * @ngdoc input - * @name input[month] - * - * @description - * Input with month validation and transformation. In browsers that do not yet support - * the HTML5 month input, a text element will be used. In that case, the text must be entered in a valid ISO-8601 - * month format (yyyy-MM), for example: `2009-01`. - * - * The model must always be a Date object, otherwise AngularJS will throw an error. - * Invalid `Date` objects (dates whose `getTime()` is `NaN`) will be rendered as an empty string. - * If the model is not set to the first of the month, the next view to model update will set it - * to the first of the month. - * - * The timezone to be used to read/write the `Date` instance in the model can be defined using - * {@link ng.directive:ngModelOptions ngModelOptions}. By default, this is the timezone of the browser. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this - * attribute (e.g. `min="{{minMonth | date:'yyyy-MM'}}"`). Note that `min` will also add - * native HTML5 constraint validation. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * This must be a valid ISO month format (yyyy-MM). You can also use interpolation inside this - * attribute (e.g. `max="{{maxMonth | date:'yyyy-MM'}}"`). Note that `max` will also add - * native HTML5 constraint validation. - * @param {(date|string)=} ngMin Sets the `min` validation constraint to the Date / ISO week string - * the `ngMin` expression evaluates to. Note that it does not set the `min` attribute. - * @param {(date|string)=} ngMax Sets the `max` validation constraint to the Date / ISO week string - * the `ngMax` expression evaluates to. Note that it does not set the `max` attribute. - - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - - -
      - - Required! - - Not a valid month! -
      - value = {{example.value | date: "yyyy-MM"}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value | date: "yyyy-MM"')); - var valid = element(by.binding('myForm.input.$valid')); - - // currently protractor/webdriver does not support - // sending keys to all known HTML5 input controls - // for various browsers (https://github.com/angular/protractor/issues/562). - function setInput(val) { - // set the value of the element and force validation. - var scr = "var ipt = document.getElementById('exampleInput'); " + - "ipt.value = '" + val + "';" + - "angular.element(ipt).scope().$apply(function(s) { s.myForm[ipt.name].$setViewValue('" + val + "'); });"; - browser.executeScript(scr); - } - - it('should initialize to model', function() { - expect(value.getText()).toContain('2013-10'); - expect(valid.getText()).toContain('myForm.input.$valid = true'); - }); - - it('should be invalid if empty', function() { - setInput(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - - it('should be invalid if over max', function() { - setInput('2015-01'); - expect(value.getText()).toContain(''); - expect(valid.getText()).toContain('myForm.input.$valid = false'); - }); - -
      - */ - 'month': createDateInputType('month', MONTH_REGEXP, - createDateParser(MONTH_REGEXP, ['yyyy', 'MM']), - 'yyyy-MM'), - - /** - * @ngdoc input - * @name input[number] - * - * @description - * Text input with number validation and transformation. Sets the `number` validation - * error if not a valid number. - * - *
      - * The model must always be of type `number` otherwise AngularJS will throw an error. - * Be aware that a string containing a number is not enough. See the {@link ngModel:numfmt} - * error docs for more information and an example of how to convert your model if necessary. - *
      - * - * - * - * @knownIssue - * - * ### HTML5 constraint validation and `allowInvalid` - * - * In browsers that follow the - * [HTML5 specification](https://html.spec.whatwg.org/multipage/forms.html#number-state-%28type=number%29), - * `input[number]` does not work as expected with {@link ngModelOptions `ngModelOptions.allowInvalid`}. - * If a non-number is entered in the input, the browser will report the value as an empty string, - * which means the view / model values in `ngModel` and subsequently the scope value - * will also be an empty string. - * - * @knownIssue - * - * ### Large numbers and `step` validation - * - * The `step` validation will not work correctly for very large numbers (e.g. 9999999999) due to - * Javascript's arithmetic limitations. If you need to handle large numbers, purpose-built - * libraries (e.g. https://github.com/MikeMcl/big.js/), can be included into AngularJS by - * {@link guide/forms#modifying-built-in-validators overwriting the validators} - * for `number` and / or `step`, or by {@link guide/forms#custom-validation applying custom validators} - * to an `input[text]` element. The source for `input[number]` type can be used as a starting - * point for both implementations. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation error key if the value entered is less than `min`. - * Can be interpolated. - * @param {string=} max Sets the `max` validation error key if the value entered is greater than `max`. - * Can be interpolated. - * @param {string=} ngMin Like `min`, sets the `min` validation error key if the value entered is less than `ngMin`, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} ngMax Like `max`, sets the `max` validation error key if the value entered is greater than `ngMax`, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} step Sets the `step` validation error key if the value entered does not fit the `step` constraint. - * Can be interpolated. - * @param {string=} ngStep Like `step`, sets the `step` validation error key if the value entered does not fit the `ngStep` constraint, - * but does not trigger HTML5 native validation. Takes an expression. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
      - * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - -
      - - Required! - - Not valid number! -
      - value = {{example.value}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      -
      -
      - - var value = element(by.binding('example.value')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('example.value')); - - it('should initialize to model', function() { - expect(value.getText()).toContain('12'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if over max', function() { - input.clear(); - input.sendKeys('123'); - expect(value.getText()).toEqual('value ='); - expect(valid.getText()).toContain('false'); - }); - -
      - */ - 'number': numberInputType, - - - /** - * @ngdoc input - * @name input[url] - * - * @description - * Text input with URL validation. Sets the `url` validation error key if the content is not a - * valid URL. - * - *
      - * **Note:** `input[url]` uses a regex to validate urls that is derived from the regex - * used in Chromium. If you need stricter validation, you can use `ng-pattern` or modify - * the built-in validators (see the {@link guide/forms Forms guide}) - *
      - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
      - * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      -
      - - var text = element(by.binding('url.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('url.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('http://google.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not url', function() { - input.clear(); - input.sendKeys('box'); - - expect(valid.getText()).toContain('false'); - }); - -
      - */ - 'url': urlInputType, - - - /** - * @ngdoc input - * @name input[email] - * - * @description - * Text input with email validation. Sets the `email` validation error key if not a valid email - * address. - * - *
      - * **Note:** `input[email]` uses a regex to validate email addresses that is derived from the regex - * used in Chromium, which may not fulfill your app's requirements. - * If you need stricter (e.g. requiring a top-level domain), or more relaxed validation - * (e.g. allowing IPv6 address literals) you can use `ng-pattern` or - * modify the built-in validators (see the {@link guide/forms Forms guide}). - *
      - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of - * any length. - * @param {string=} pattern Similar to `ngPattern` except that the attribute value is the actual string - * that contains the regular expression body that will be converted to a regular expression - * as in the ngPattern directive. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
      - * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      - -
      - - Required! - - Not valid email! -
      - text = {{email.text}}
      - myForm.input.$valid = {{myForm.input.$valid}}
      - myForm.input.$error = {{myForm.input.$error}}
      - myForm.$valid = {{myForm.$valid}}
      - myForm.$error.required = {{!!myForm.$error.required}}
      - myForm.$error.email = {{!!myForm.$error.email}}
      -
      -
      - - var text = element(by.binding('email.text')); - var valid = element(by.binding('myForm.input.$valid')); - var input = element(by.model('email.text')); - - it('should initialize to model', function() { - expect(text.getText()).toContain('me@example.com'); - expect(valid.getText()).toContain('true'); - }); - - it('should be invalid if empty', function() { - input.clear(); - input.sendKeys(''); - expect(text.getText()).toEqual('text ='); - expect(valid.getText()).toContain('false'); - }); - - it('should be invalid if not email', function() { - input.clear(); - input.sendKeys('xxx'); - - expect(valid.getText()).toContain('false'); - }); - -
      - */ - 'email': emailInputType, - - - /** - * @ngdoc input - * @name input[radio] - * - * @description - * HTML radio button. - * - * **Note:**
      - * All inputs controlled by {@link ngModel ngModel} (including those of type `radio`) will use the - * value of their `name` attribute to determine the property under which their - * {@link ngModel.NgModelController NgModelController} will be published on the parent - * {@link form.FormController FormController}. Thus, if you use the same `name` for multiple - * inputs of a form (e.g. a group of radio inputs), only _one_ `NgModelController` will be - * published on the parent `FormController` under that name. The rest of the controllers will - * continue to work as expected, but you won't be able to access them as properties on the parent - * `FormController`. - * - *
      - *

      - * In plain HTML forms, the `name` attribute is used to identify groups of radio inputs, so - * that the browser can manage their state (checked/unchecked) based on the state of other - * inputs in the same group. - *

      - *

      - * In AngularJS forms, this is not necessary. The input's state will be updated based on the - * value of the underlying model data. - *

      - *
      - * - *
      - * If you omit the `name` attribute on a radio input, `ngModel` will automatically assign it a - * unique name. - *
      - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string} value The value to which the `ngModel` expression should be set when selected. - * Note that `value` only supports `string` values, i.e. the scope model needs to be a string, - * too. Use `ngValue` if you need complex models (`number`, `object`, ...). - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {string} ngValue AngularJS expression to which `ngModel` will be be set when the radio - * is selected. Should be used instead of the `value` attribute if you need - * a non-string `ngModel` (`boolean`, `array`, ...). - * - * @example - - - -
      -
      -
      -
      - color = {{color.name | json}}
      -
      - Note that `ng-value="specialValue"` sets radio item's value to be the value of `$scope.specialValue`. -
      - - it('should change state', function() { - var inputs = element.all(by.model('color.name')); - var color = element(by.binding('color.name')); - - expect(color.getText()).toContain('blue'); - - inputs.get(0).click(); - expect(color.getText()).toContain('red'); - - inputs.get(1).click(); - expect(color.getText()).toContain('green'); - }); - -
      - */ - 'radio': radioInputType, - - /** - * @ngdoc input - * @name input[range] - * - * @description - * Native range input with validation and transformation. - * - * The model for the range input must always be a `Number`. - * - * IE9 and other browsers that do not support the `range` type fall back - * to a text input without any default values for `min`, `max` and `step`. Model binding, - * validation and number parsing are nevertheless supported. - * - * Browsers that support range (latest Chrome, Safari, Firefox, Edge) treat `input[range]` - * in a way that never allows the input to hold an invalid value. That means: - * - any non-numerical value is set to `(max + min) / 2`. - * - any numerical value that is less than the current min val, or greater than the current max val - * is set to the min / max val respectively. - * - additionally, the current `step` is respected, so the nearest value that satisfies a step - * is used. - * - * See the [HTML Spec on input[type=range]](https://www.w3.org/TR/html5/forms.html#range-state-(type=range)) - * for more info. - * - * This has the following consequences for AngularJS: - * - * Since the element value should always reflect the current model value, a range input - * will set the bound ngModel expression to the value that the browser has set for the - * input element. For example, in the following input ``, - * if the application sets `model.value = null`, the browser will set the input to `'50'`. - * AngularJS will then set the model to `50`, to prevent input and model value being out of sync. - * - * That means the model for range will immediately be set to `50` after `ngModel` has been - * initialized. It also means a range input can never have the required error. - * - * This does not only affect changes to the model value, but also to the values of the `min`, - * `max`, and `step` attributes. When these change in a way that will cause the browser to modify - * the input value, AngularJS will also update the model value. - * - * Automatic value adjustment also means that a range input element can never have the `required`, - * `min`, or `max` errors. - * - * However, `step` is currently only fully implemented by Firefox. Other browsers have problems - * when the step value changes dynamically - they do not adjust the element value correctly, but - * instead may set the `stepMismatch` error. If that's the case, the AngularJS will set the `step` - * error on the input, and set the model to `undefined`. - * - * Note that `input[range]` is not compatible with`ngMax`, `ngMin`, and `ngStep`, because they do - * not set the `min` and `max` attributes, which means that the browser won't automatically adjust - * the input value based on their values, and will always assume min = 0, max = 100, and step = 1. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} min Sets the `min` validation to ensure that the value entered is greater - * than `min`. Can be interpolated. - * @param {string=} max Sets the `max` validation to ensure that the value entered is less than `max`. - * Can be interpolated. - * @param {string=} step Sets the `step` validation to ensure that the value entered matches the `step` - * Can be interpolated. - * @param {expression=} ngChange AngularJS expression to be executed when the ngModel value changes due - * to user interaction with the input element. - * @param {expression=} ngChecked If the expression is truthy, then the `checked` attribute will be set on the - * element. **Note** : `ngChecked` should not be used alongside `ngModel`. - * Checkout {@link ng.directive:ngChecked ngChecked} for usage. - * - * @example - - - -
      - - Model as range: -
      - Model as number:
      - Min:
      - Max:
      - value = {{value}}
      - myForm.range.$valid = {{myForm.range.$valid}}
      - myForm.range.$error = {{myForm.range.$error}} -
      -
      -
      - - * ## Range Input with ngMin & ngMax attributes - - * @example - - - -
      - Model as range: -
      - Model as number:
      - Min:
      - Max:
      - value = {{value}}
      - myForm.range.$valid = {{myForm.range.$valid}}
      - myForm.range.$error = {{myForm.range.$error}} -
      -
      -
      - - */ - 'range': rangeInputType, - - /** - * @ngdoc input - * @name input[checkbox] - * - * @description - * HTML checkbox. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {expression=} ngTrueValue The value to which the expression should be set when selected. - * @param {expression=} ngFalseValue The value to which the expression should be set when not selected. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * - * @example - - - -
      -
      -
      - value1 = {{checkboxModel.value1}}
      - value2 = {{checkboxModel.value2}}
      -
      -
      - - it('should change state', function() { - var value1 = element(by.binding('checkboxModel.value1')); - var value2 = element(by.binding('checkboxModel.value2')); - - expect(value1.getText()).toContain('true'); - expect(value2.getText()).toContain('YES'); - - element(by.model('checkboxModel.value1')).click(); - element(by.model('checkboxModel.value2')).click(); - - expect(value1.getText()).toContain('false'); - expect(value2.getText()).toContain('NO'); - }); - -
      - */ - 'checkbox': checkboxInputType, - - 'hidden': noop, - 'button': noop, - 'submit': noop, - 'reset': noop, - 'file': noop -}; - -function stringBasedInputType(ctrl) { - ctrl.$formatters.push(function(value) { - return ctrl.$isEmpty(value) ? value : value.toString(); - }); -} - -function textInputType(scope, element, attr, ctrl, $sniffer, $browser) { - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); -} - -function baseInputType(scope, element, attr, ctrl, $sniffer, $browser) { - var type = lowercase(element[0].type); - - // In composition mode, users are still inputting intermediate text buffer, - // hold the listener until composition is done. - // More about composition events: https://developer.mozilla.org/en-US/docs/Web/API/CompositionEvent - if (!$sniffer.android) { - var composing = false; - - element.on('compositionstart', function() { - composing = true; - }); - - // Support: IE9+ - element.on('compositionupdate', function(ev) { - // End composition when ev.data is empty string on 'compositionupdate' event. - // When the input de-focusses (e.g. by clicking away), IE triggers 'compositionupdate' - // instead of 'compositionend'. - if (isUndefined(ev.data) || ev.data === '') { - composing = false; - } - }); - - element.on('compositionend', function() { - composing = false; - listener(); - }); - } - - var timeout; - - var listener = function(ev) { - if (timeout) { - $browser.defer.cancel(timeout); - timeout = null; - } - if (composing) return; - var value = element.val(), - event = ev && ev.type; - - // By default we will trim the value - // If the attribute ng-trim exists we will avoid trimming - // If input type is 'password', the value is never trimmed - if (type !== 'password' && (!attr.ngTrim || attr.ngTrim !== 'false')) { - value = trim(value); - } - - // If a control is suffering from bad input (due to native validators), browsers discard its - // value, so it may be necessary to revalidate (by calling $setViewValue again) even if the - // control's value is the same empty value twice in a row. - if (ctrl.$viewValue !== value || (value === '' && ctrl.$$hasNativeValidators)) { - ctrl.$setViewValue(value, event); - } - }; - - // if the browser does support "input" event, we are fine - except on IE9 which doesn't fire the - // input event on backspace, delete or cut - if ($sniffer.hasEvent('input')) { - element.on('input', listener); - } else { - var deferListener = function(ev, input, origValue) { - if (!timeout) { - timeout = $browser.defer(function() { - timeout = null; - if (!input || input.value !== origValue) { - listener(ev); - } - }); - } - }; - - element.on('keydown', /** @this */ function(event) { - var key = event.keyCode; - - // ignore - // command modifiers arrows - if (key === 91 || (15 < key && key < 19) || (37 <= key && key <= 40)) return; - - deferListener(event, this, this.value); - }); - - // if user modifies input value using context menu in IE, we need "paste", "cut" and "drop" events to catch it - if ($sniffer.hasEvent('paste')) { - element.on('paste cut drop', deferListener); - } - } - - // if user paste into input using mouse on older browser - // or form autocomplete on newer browser, we need "change" event to catch it - element.on('change', listener); - - // Some native input types (date-family) have the ability to change validity without - // firing any input/change events. - // For these event types, when native validators are present and the browser supports the type, - // check for validity changes on various DOM events. - if (PARTIAL_VALIDATION_TYPES[type] && ctrl.$$hasNativeValidators && type === attr.type) { - element.on(PARTIAL_VALIDATION_EVENTS, /** @this */ function(ev) { - if (!timeout) { - var validity = this[VALIDITY_STATE_PROPERTY]; - var origBadInput = validity.badInput; - var origTypeMismatch = validity.typeMismatch; - timeout = $browser.defer(function() { - timeout = null; - if (validity.badInput !== origBadInput || validity.typeMismatch !== origTypeMismatch) { - listener(ev); - } - }); - } - }); - } - - ctrl.$render = function() { - // Workaround for Firefox validation #12102. - var value = ctrl.$isEmpty(ctrl.$viewValue) ? '' : ctrl.$viewValue; - if (element.val() !== value) { - element.val(value); - } - }; -} - -function weekParser(isoWeek, existingDate) { - if (isDate(isoWeek)) { - return isoWeek; - } - - if (isString(isoWeek)) { - WEEK_REGEXP.lastIndex = 0; - var parts = WEEK_REGEXP.exec(isoWeek); - if (parts) { - var year = +parts[1], - week = +parts[2], - hours = 0, - minutes = 0, - seconds = 0, - milliseconds = 0, - firstThurs = getFirstThursdayOfYear(year), - addDays = (week - 1) * 7; - - if (existingDate) { - hours = existingDate.getHours(); - minutes = existingDate.getMinutes(); - seconds = existingDate.getSeconds(); - milliseconds = existingDate.getMilliseconds(); - } - - return new Date(year, 0, firstThurs.getDate() + addDays, hours, minutes, seconds, milliseconds); - } - } - - return NaN; -} - -function createDateParser(regexp, mapping) { - return function(iso, previousDate) { - var parts, map; - - if (isDate(iso)) { - return iso; - } - - if (isString(iso)) { - // When a date is JSON'ified to wraps itself inside of an extra - // set of double quotes. This makes the date parsing code unable - // to match the date string and parse it as a date. - if (iso.charAt(0) === '"' && iso.charAt(iso.length - 1) === '"') { - iso = iso.substring(1, iso.length - 1); - } - if (ISO_DATE_REGEXP.test(iso)) { - return new Date(iso); - } - regexp.lastIndex = 0; - parts = regexp.exec(iso); - - if (parts) { - parts.shift(); - if (previousDate) { - map = { - yyyy: previousDate.getFullYear(), - MM: previousDate.getMonth() + 1, - dd: previousDate.getDate(), - HH: previousDate.getHours(), - mm: previousDate.getMinutes(), - ss: previousDate.getSeconds(), - sss: previousDate.getMilliseconds() / 1000 - }; - } else { - map = { yyyy: 1970, MM: 1, dd: 1, HH: 0, mm: 0, ss: 0, sss: 0 }; - } - - forEach(parts, function(part, index) { - if (index < mapping.length) { - map[mapping[index]] = +part; - } - }); - - var date = new Date(map.yyyy, map.MM - 1, map.dd, map.HH, map.mm, map.ss || 0, map.sss * 1000 || 0); - if (map.yyyy < 100) { - // In the constructor, 2-digit years map to 1900-1999. - // Use `setFullYear()` to set the correct year. - date.setFullYear(map.yyyy); - } - - return date; - } - } - - return NaN; - }; -} - -function createDateInputType(type, regexp, parseDate, format) { - return function dynamicDateInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - badInputChecker(scope, element, attr, ctrl, type); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var isTimeType = type === 'time' || type === 'datetimelocal'; - var previousDate; - var previousTimezone; - - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - - if (regexp.test(value)) { - // Note: We cannot read ctrl.$modelValue, as there might be a different - // parser/formatter in the processing chain so that the model - // contains some different data format! - return parseDateAndConvertTimeZoneToLocal(value, previousDate); - } - ctrl.$$parserName = type; - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (value && !isDate(value)) { - throw ngModelMinErr('datefmt', 'Expected `{0}` to be a date', value); - } - if (isValidDate(value)) { - previousDate = value; - var timezone = ctrl.$options.getOption('timezone'); - - if (timezone) { - previousTimezone = timezone; - previousDate = convertTimezoneToLocal(previousDate, timezone, true); - } - - return formatter(value, timezone); - } else { - previousDate = null; - previousTimezone = null; - return ''; - } - }); - - if (isDefined(attr.min) || attr.ngMin) { - var minVal = attr.min || $parse(attr.ngMin)(scope); - var parsedMinVal = parseObservedDateValue(minVal); - - ctrl.$validators.min = function(value) { - return !isValidDate(value) || isUndefined(parsedMinVal) || parseDate(value) >= parsedMinVal; - }; - attr.$observe('min', function(val) { - if (val !== minVal) { - parsedMinVal = parseObservedDateValue(val); - minVal = val; - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal = attr.max || $parse(attr.ngMax)(scope); - var parsedMaxVal = parseObservedDateValue(maxVal); - - ctrl.$validators.max = function(value) { - return !isValidDate(value) || isUndefined(parsedMaxVal) || parseDate(value) <= parsedMaxVal; - }; - attr.$observe('max', function(val) { - if (val !== maxVal) { - parsedMaxVal = parseObservedDateValue(val); - maxVal = val; - ctrl.$validate(); - } - }); - } - - function isValidDate(value) { - // Invalid Date: getTime() returns NaN - return value && !(value.getTime && value.getTime() !== value.getTime()); - } - - function parseObservedDateValue(val) { - return isDefined(val) && !isDate(val) ? parseDateAndConvertTimeZoneToLocal(val) || undefined : val; - } - - function parseDateAndConvertTimeZoneToLocal(value, previousDate) { - var timezone = ctrl.$options.getOption('timezone'); - - if (previousTimezone && previousTimezone !== timezone) { - // If the timezone has changed, adjust the previousDate to the default timezone - // so that the new date is converted with the correct timezone offset - previousDate = addDateMinutes(previousDate, timezoneToOffset(previousTimezone)); - } - - var parsedDate = parseDate(value, previousDate); - - if (!isNaN(parsedDate) && timezone) { - parsedDate = convertTimezoneToLocal(parsedDate, timezone); - } - return parsedDate; - } - - function formatter(value, timezone) { - var targetFormat = format; - - if (isTimeType && isString(ctrl.$options.getOption('timeSecondsFormat'))) { - targetFormat = format - .replace('ss.sss', ctrl.$options.getOption('timeSecondsFormat')) - .replace(/:$/, ''); - } - - var formatted = $filter('date')(value, targetFormat, timezone); - - if (isTimeType && ctrl.$options.getOption('timeStripZeroSeconds')) { - formatted = formatted.replace(/(?::00)?(?:\.000)?$/, ''); - } - - return formatted; - } - }; -} - -function badInputChecker(scope, element, attr, ctrl, parserName) { - var node = element[0]; - var nativeValidation = ctrl.$$hasNativeValidators = isObject(node.validity); - if (nativeValidation) { - ctrl.$parsers.push(function(value) { - var validity = element.prop(VALIDITY_STATE_PROPERTY) || {}; - if (validity.badInput || validity.typeMismatch) { - ctrl.$$parserName = parserName; - return undefined; - } - - return value; - }); - } -} - -function numberFormatterParser(ctrl) { - ctrl.$parsers.push(function(value) { - if (ctrl.$isEmpty(value)) return null; - if (NUMBER_REGEXP.test(value)) return parseFloat(value); - - ctrl.$$parserName = 'number'; - return undefined; - }); - - ctrl.$formatters.push(function(value) { - if (!ctrl.$isEmpty(value)) { - if (!isNumber(value)) { - throw ngModelMinErr('numfmt', 'Expected `{0}` to be a number', value); - } - value = value.toString(); - } - return value; - }); -} - -function parseNumberAttrVal(val) { - if (isDefined(val) && !isNumber(val)) { - val = parseFloat(val); - } - return !isNumberNaN(val) ? val : undefined; -} - -function isNumberInteger(num) { - // See http://stackoverflow.com/questions/14636536/how-to-check-if-a-variable-is-an-integer-in-javascript#14794066 - // (minus the assumption that `num` is a number) - - // eslint-disable-next-line no-bitwise - return (num | 0) === num; -} - -function countDecimals(num) { - var numString = num.toString(); - var decimalSymbolIndex = numString.indexOf('.'); - - if (decimalSymbolIndex === -1) { - if (-1 < num && num < 1) { - // It may be in the exponential notation format (`1e-X`) - var match = /e-(\d+)$/.exec(numString); - - if (match) { - return Number(match[1]); - } - } - - return 0; - } - - return numString.length - decimalSymbolIndex - 1; -} - -function isValidForStep(viewValue, stepBase, step) { - // At this point `stepBase` and `step` are expected to be non-NaN values - // and `viewValue` is expected to be a valid stringified number. - var value = Number(viewValue); - - var isNonIntegerValue = !isNumberInteger(value); - var isNonIntegerStepBase = !isNumberInteger(stepBase); - var isNonIntegerStep = !isNumberInteger(step); - - // Due to limitations in Floating Point Arithmetic (e.g. `0.3 - 0.2 !== 0.1` or - // `0.5 % 0.1 !== 0`), we need to convert all numbers to integers. - if (isNonIntegerValue || isNonIntegerStepBase || isNonIntegerStep) { - var valueDecimals = isNonIntegerValue ? countDecimals(value) : 0; - var stepBaseDecimals = isNonIntegerStepBase ? countDecimals(stepBase) : 0; - var stepDecimals = isNonIntegerStep ? countDecimals(step) : 0; - - var decimalCount = Math.max(valueDecimals, stepBaseDecimals, stepDecimals); - var multiplier = Math.pow(10, decimalCount); - - value = value * multiplier; - stepBase = stepBase * multiplier; - step = step * multiplier; - - if (isNonIntegerValue) value = Math.round(value); - if (isNonIntegerStepBase) stepBase = Math.round(stepBase); - if (isNonIntegerStep) step = Math.round(step); - } - - return (value - stepBase) % step === 0; -} - -function numberInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - badInputChecker(scope, element, attr, ctrl, 'number'); - numberFormatterParser(ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var parsedMinVal; - - if (isDefined(attr.min) || attr.ngMin) { - var minVal = attr.min || $parse(attr.ngMin)(scope); - parsedMinVal = parseNumberAttrVal(minVal); - - ctrl.$validators.min = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedMinVal) || viewValue >= parsedMinVal; - }; - - attr.$observe('min', function(val) { - if (val !== minVal) { - parsedMinVal = parseNumberAttrVal(val); - minVal = val; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.max) || attr.ngMax) { - var maxVal = attr.max || $parse(attr.ngMax)(scope); - var parsedMaxVal = parseNumberAttrVal(maxVal); - - ctrl.$validators.max = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedMaxVal) || viewValue <= parsedMaxVal; - }; - - attr.$observe('max', function(val) { - if (val !== maxVal) { - parsedMaxVal = parseNumberAttrVal(val); - maxVal = val; - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - }); - } - - if (isDefined(attr.step) || attr.ngStep) { - var stepVal = attr.step || $parse(attr.ngStep)(scope); - var parsedStepVal = parseNumberAttrVal(stepVal); - - ctrl.$validators.step = function(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(parsedStepVal) || - isValidForStep(viewValue, parsedMinVal || 0, parsedStepVal); - }; - - attr.$observe('step', function(val) { - // TODO(matsko): implement validateLater to reduce number of validations - if (val !== stepVal) { - parsedStepVal = parseNumberAttrVal(val); - stepVal = val; - ctrl.$validate(); - } - - }); - - } -} - -function rangeInputType(scope, element, attr, ctrl, $sniffer, $browser) { - badInputChecker(scope, element, attr, ctrl, 'range'); - numberFormatterParser(ctrl); - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - - var supportsRange = ctrl.$$hasNativeValidators && element[0].type === 'range', - minVal = supportsRange ? 0 : undefined, - maxVal = supportsRange ? 100 : undefined, - stepVal = supportsRange ? 1 : undefined, - validity = element[0].validity, - hasMinAttr = isDefined(attr.min), - hasMaxAttr = isDefined(attr.max), - hasStepAttr = isDefined(attr.step); - - var originalRender = ctrl.$render; - - ctrl.$render = supportsRange && isDefined(validity.rangeUnderflow) && isDefined(validity.rangeOverflow) ? - //Browsers that implement range will set these values automatically, but reading the adjusted values after - //$render would cause the min / max validators to be applied with the wrong value - function rangeRender() { - originalRender(); - ctrl.$setViewValue(element.val()); - } : - originalRender; - - if (hasMinAttr) { - minVal = parseNumberAttrVal(attr.min); - - ctrl.$validators.min = supportsRange ? - // Since all browsers set the input to a valid value, we don't need to check validity - function noopMinValidator() { return true; } : - // non-support browsers validate the min val - function minValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(minVal) || viewValue >= minVal; - }; - - setInitialValueAndObserver('min', minChange); - } - - if (hasMaxAttr) { - maxVal = parseNumberAttrVal(attr.max); - - ctrl.$validators.max = supportsRange ? - // Since all browsers set the input to a valid value, we don't need to check validity - function noopMaxValidator() { return true; } : - // non-support browsers validate the max val - function maxValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(maxVal) || viewValue <= maxVal; - }; - - setInitialValueAndObserver('max', maxChange); - } - - if (hasStepAttr) { - stepVal = parseNumberAttrVal(attr.step); - - ctrl.$validators.step = supportsRange ? - function nativeStepValidator() { - // Currently, only FF implements the spec on step change correctly (i.e. adjusting the - // input element value to a valid value). It's possible that other browsers set the stepMismatch - // validity error instead, so we can at least report an error in that case. - return !validity.stepMismatch; - } : - // ngStep doesn't set the setp attr, so the browser doesn't adjust the input value as setting step would - function stepValidator(modelValue, viewValue) { - return ctrl.$isEmpty(viewValue) || isUndefined(stepVal) || - isValidForStep(viewValue, minVal || 0, stepVal); - }; - - setInitialValueAndObserver('step', stepChange); - } - - function setInitialValueAndObserver(htmlAttrName, changeFn) { - // interpolated attributes set the attribute value only after a digest, but we need the - // attribute value when the input is first rendered, so that the browser can adjust the - // input value based on the min/max value - element.attr(htmlAttrName, attr[htmlAttrName]); - var oldVal = attr[htmlAttrName]; - attr.$observe(htmlAttrName, function wrappedObserver(val) { - if (val !== oldVal) { - oldVal = val; - changeFn(val); - } - }); - } - - function minChange(val) { - minVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - if (supportsRange) { - var elVal = element.val(); - // IE11 doesn't set the el val correctly if the minVal is greater than the element value - if (minVal > elVal) { - elVal = minVal; - element.val(elVal); - } - ctrl.$setViewValue(elVal); - } else { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - } - - function maxChange(val) { - maxVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - if (supportsRange) { - var elVal = element.val(); - // IE11 doesn't set the el val correctly if the maxVal is less than the element value - if (maxVal < elVal) { - element.val(maxVal); - // IE11 and Chrome don't set the value to the minVal when max < min - elVal = maxVal < minVal ? minVal : maxVal; - } - ctrl.$setViewValue(elVal); - } else { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } - } - - function stepChange(val) { - stepVal = parseNumberAttrVal(val); - // ignore changes before model is initialized - if (isNumberNaN(ctrl.$modelValue)) { - return; - } - - // Some browsers don't adjust the input value correctly, but set the stepMismatch error - if (!supportsRange) { - // TODO(matsko): implement validateLater to reduce number of validations - ctrl.$validate(); - } else if (ctrl.$viewValue !== element.val()) { - ctrl.$setViewValue(element.val()); - } - } -} - -function urlInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$validators.url = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || URL_REGEXP.test(value); - }; -} - -function emailInputType(scope, element, attr, ctrl, $sniffer, $browser) { - // Note: no badInputChecker here by purpose as `url` is only a validation - // in browsers, i.e. we can always read out input.value even if it is not valid! - baseInputType(scope, element, attr, ctrl, $sniffer, $browser); - stringBasedInputType(ctrl); - - ctrl.$validators.email = function(modelValue, viewValue) { - var value = modelValue || viewValue; - return ctrl.$isEmpty(value) || EMAIL_REGEXP.test(value); - }; -} - -function radioInputType(scope, element, attr, ctrl) { - var doTrim = !attr.ngTrim || trim(attr.ngTrim) !== 'false'; - // make the name unique, if not defined - if (isUndefined(attr.name)) { - element.attr('name', nextUid()); - } - - var listener = function(ev) { - var value; - if (element[0].checked) { - value = attr.value; - if (doTrim) { - value = trim(value); - } - ctrl.$setViewValue(value, ev && ev.type); - } - }; - - element.on('change', listener); - - ctrl.$render = function() { - var value = attr.value; - if (doTrim) { - value = trim(value); - } - element[0].checked = (value === ctrl.$viewValue); - }; - - attr.$observe('value', ctrl.$render); -} - -function parseConstantExpr($parse, context, name, expression, fallback) { - var parseFn; - if (isDefined(expression)) { - parseFn = $parse(expression); - if (!parseFn.constant) { - throw ngModelMinErr('constexpr', 'Expected constant expression for `{0}`, but saw ' + - '`{1}`.', name, expression); - } - return parseFn(context); - } - return fallback; -} - -function checkboxInputType(scope, element, attr, ctrl, $sniffer, $browser, $filter, $parse) { - var trueValue = parseConstantExpr($parse, scope, 'ngTrueValue', attr.ngTrueValue, true); - var falseValue = parseConstantExpr($parse, scope, 'ngFalseValue', attr.ngFalseValue, false); - - var listener = function(ev) { - ctrl.$setViewValue(element[0].checked, ev && ev.type); - }; - - element.on('change', listener); - - ctrl.$render = function() { - element[0].checked = ctrl.$viewValue; - }; - - // Override the standard `$isEmpty` because the $viewValue of an empty checkbox is always set to `false` - // This is because of the parser below, which compares the `$modelValue` with `trueValue` to convert - // it to a boolean. - ctrl.$isEmpty = function(value) { - return value === false; - }; - - ctrl.$formatters.push(function(value) { - return equals(value, trueValue); - }); - - ctrl.$parsers.push(function(value) { - return value ? trueValue : falseValue; - }); -} - - -/** - * @ngdoc directive - * @name textarea - * @restrict E - * - * @description - * HTML textarea element control with AngularJS data-binding. The data-binding and validation - * properties of this element are exactly the same as those of the - * {@link ng.directive:input input element}. - * - * @param {string} ngModel Assignable AngularJS expression to data-bind to. - * @param {string=} name Property name of the form under which the control is published. - * @param {string=} required Sets `required` validation error key if the value is not entered. - * @param {string=} ngRequired Adds `required` attribute and `required` validation constraint to - * the element when the ngRequired expression evaluates to true. Use `ngRequired` instead of - * `required` when you want to data-bind to the `required` attribute. - * @param {number=} ngMinlength Sets `minlength` validation error key if the value is shorter than - * minlength. - * @param {number=} ngMaxlength Sets `maxlength` validation error key if the value is longer than - * maxlength. Setting the attribute to a negative or non-numeric value, allows view values of any - * length. - * @param {string=} ngPattern Sets `pattern` validation error key if the ngModel {@link ngModel.NgModelController#$viewValue $viewValue} - * does not match a RegExp found by evaluating the AngularJS expression given in the attribute value. - * If the expression evaluates to a RegExp object, then this is used directly. - * If the expression evaluates to a string, then it will be converted to a RegExp - * after wrapping it in `^` and `$` characters. For instance, `"abc"` will be converted to - * `new RegExp('^abc$')`.
      - * **Note:** Avoid using the `g` flag on the RegExp, as it will cause each successive search to - * start at the index of the last search's match, thus not taking the whole input value into - * account. - * @param {string=} ngChange AngularJS expression to be executed when input changes due to user - * interaction with the input element. - * @param {boolean=} [ngTrim=true] If set to false AngularJS will not automatically trim the input. - * - * @knownIssue - * - * When specifying the `placeholder` attribute of ` - *
      {{ list | json }}
      - * - * - * it("should split the text by newlines", function() { - * var listInput = element(by.model('list')); - * var output = element(by.binding('list | json')); - * listInput.sendKeys('abc\ndef\nghi'); - * expect(output.getText()).toContain('[\n "abc",\n "def",\n "ghi"\n]'); - * }); - * - * - * - */ -var ngListDirective = function() { - return { - restrict: 'A', - priority: 100, - require: 'ngModel', - link: function(scope, element, attr, ctrl) { - var ngList = attr.ngList || ', '; - var trimValues = attr.ngTrim !== 'false'; - var separator = trimValues ? trim(ngList) : ngList; - - var parse = function(viewValue) { - // If the viewValue is invalid (say required but empty) it will be `undefined` - if (isUndefined(viewValue)) return; - - var list = []; - - if (viewValue) { - forEach(viewValue.split(separator), function(value) { - if (value) list.push(trimValues ? trim(value) : value); - }); - } - - return list; - }; - - ctrl.$parsers.push(parse); - ctrl.$formatters.push(function(value) { - if (isArray(value)) { - return value.join(ngList); - } - - return undefined; - }); - - // Override the standard $isEmpty because an empty array means the input is empty. - ctrl.$isEmpty = function(value) { - return !value || !value.length; - }; - } - }; -}; - -/* global VALID_CLASS: true, - INVALID_CLASS: true, - PRISTINE_CLASS: true, - DIRTY_CLASS: true, - UNTOUCHED_CLASS: true, - TOUCHED_CLASS: true, - PENDING_CLASS: true, - addSetValidityMethod: true, - setupValidity: true, - defaultModelOptions: false -*/ - - -var VALID_CLASS = 'ng-valid', - INVALID_CLASS = 'ng-invalid', - PRISTINE_CLASS = 'ng-pristine', - DIRTY_CLASS = 'ng-dirty', - UNTOUCHED_CLASS = 'ng-untouched', - TOUCHED_CLASS = 'ng-touched', - EMPTY_CLASS = 'ng-empty', - NOT_EMPTY_CLASS = 'ng-not-empty'; - -var ngModelMinErr = minErr('ngModel'); - -/** - * @ngdoc type - * @name ngModel.NgModelController - * @property {*} $viewValue The actual value from the control's view. For `input` elements, this is a - * String. See {@link ngModel.NgModelController#$setViewValue} for information about when the $viewValue - * is set. - * - * @property {*} $modelValue The value in the model that the control is bound to. - * - * @property {Array.} $parsers Array of functions to execute, as a pipeline, whenever - * the control updates the ngModelController with a new {@link ngModel.NgModelController#$viewValue - `$viewValue`} from the DOM, usually via user input. - See {@link ngModel.NgModelController#$setViewValue `$setViewValue()`} for a detailed lifecycle explanation. - Note that the `$parsers` are not called when the bound ngModel expression changes programmatically. - - The functions are called in array order, each passing - its return value through to the next. The last return value is forwarded to the - {@link ngModel.NgModelController#$validators `$validators`} collection. - - Parsers are used to sanitize / convert the {@link ngModel.NgModelController#$viewValue - `$viewValue`}. - - Returning `undefined` from a parser means a parse error occurred. In that case, - no {@link ngModel.NgModelController#$validators `$validators`} will run and the `ngModel` - will be set to `undefined` unless {@link ngModelOptions `ngModelOptions.allowInvalid`} - is set to `true`. The parse error is stored in `ngModel.$error.parse`. - - This simple example shows a parser that would convert text input value to lowercase: - * ```js - * function parse(value) { - * if (value) { - * return value.toLowerCase(); - * } - * } - * ngModelController.$parsers.push(parse); - * ``` - - * - * @property {Array.} $formatters Array of functions to execute, as a pipeline, whenever - the bound ngModel expression changes programmatically. The `$formatters` are not called when the - value of the control is changed by user interaction. - - Formatters are used to format / convert the {@link ngModel.NgModelController#$modelValue - `$modelValue`} for display in the control. - - The functions are called in reverse array order, each passing the value through to the - next. The last return value is used as the actual DOM value. - - This simple example shows a formatter that would convert the model value to uppercase: - - * ```js - * function format(value) { - * if (value) { - * return value.toUpperCase(); - * } - * } - * ngModel.$formatters.push(format); - * ``` - * - * @property {Object.} $validators A collection of validators that are applied - * whenever the model value changes. The key value within the object refers to the name of the - * validator while the function refers to the validation operation. The validation operation is - * provided with the model value as an argument and must return a true or false value depending - * on the response of that validation. - * - * ```js - * ngModel.$validators.validCharacters = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * return /[0-9]+/.test(value) && - * /[a-z]+/.test(value) && - * /[A-Z]+/.test(value) && - * /\W+/.test(value); - * }; - * ``` - * - * @property {Object.} $asyncValidators A collection of validations that are expected to - * perform an asynchronous validation (e.g. a HTTP request). The validation function that is provided - * is expected to return a promise when it is run during the model validation process. Once the promise - * is delivered then the validation status will be set to true when fulfilled and false when rejected. - * When the asynchronous validators are triggered, each of the validators will run in parallel and the model - * value will only be updated once all validators have been fulfilled. As long as an asynchronous validator - * is unfulfilled, its key will be added to the controllers `$pending` property. Also, all asynchronous validators - * will only run once all synchronous validators have passed. - * - * Please note that if $http is used then it is important that the server returns a success HTTP response code - * in order to fulfill the validation and a status level of `4xx` in order to reject the validation. - * - * ```js - * ngModel.$asyncValidators.uniqueUsername = function(modelValue, viewValue) { - * var value = modelValue || viewValue; - * - * // Lookup user by username - * return $http.get('/api/users/' + value). - * then(function resolved() { - * //username exists, this means validation fails - * return $q.reject('exists'); - * }, function rejected() { - * //username does not exist, therefore this validation passes - * return true; - * }); - * }; - * ``` - * - * @property {Array.} $viewChangeListeners Array of functions to execute whenever - * a change to {@link ngModel.NgModelController#$viewValue `$viewValue`} has caused a change - * to {@link ngModel.NgModelController#$modelValue `$modelValue`}. - * It is called with no arguments, and its return value is ignored. - * This can be used in place of additional $watches against the model value. - * - * @property {Object} $error An object hash with all failing validator ids as keys. - * @property {Object} $pending An object hash with all pending validator ids as keys. - * - * @property {boolean} $untouched True if control has not lost focus yet. - * @property {boolean} $touched True if control has lost focus. - * @property {boolean} $pristine True if user has not interacted with the control yet. - * @property {boolean} $dirty True if user has already interacted with the control. - * @property {boolean} $valid True if there is no error. - * @property {boolean} $invalid True if at least one error on the control. - * @property {string} $name The name attribute of the control. - * - * @description - * - * `NgModelController` provides API for the {@link ngModel `ngModel`} directive. - * The controller contains services for data-binding, validation, CSS updates, and value formatting - * and parsing. It purposefully does not contain any logic which deals with DOM rendering or - * listening to DOM events. - * Such DOM related logic should be provided by other directives which make use of - * `NgModelController` for data-binding to control elements. - * AngularJS provides this DOM logic for most {@link input `input`} elements. - * At the end of this page you can find a {@link ngModel.NgModelController#custom-control-example - * custom control example} that uses `ngModelController` to bind to `contenteditable` elements. - * - * @example - * ### Custom Control Example - * This example shows how to use `NgModelController` with a custom control to achieve - * data-binding. Notice how different directives (`contenteditable`, `ng-model`, and `required`) - * collaborate together to achieve the desired result. - * - * `contenteditable` is an HTML5 attribute, which tells the browser to let the element - * contents be edited in place by the user. - * - * We are using the {@link ng.service:$sce $sce} service here and include the {@link ngSanitize $sanitize} - * module to automatically remove "bad" content like inline event listener (e.g. ``). - * However, as we are using `$sce` the model can still decide to provide unsafe content if it marks - * that content using the `$sce` service. - * - * - - [contenteditable] { - border: 1px solid black; - background-color: white; - min-height: 20px; - } - - .ng-invalid { - border: 1px solid red; - } - - - - angular.module('customControl', ['ngSanitize']). - directive('contenteditable', ['$sce', function($sce) { - return { - restrict: 'A', // only activate on element attribute - require: '?ngModel', // get a hold of NgModelController - link: function(scope, element, attrs, ngModel) { - if (!ngModel) return; // do nothing if no ng-model - - // Specify how UI should be updated - ngModel.$render = function() { - element.html($sce.getTrustedHtml(ngModel.$viewValue || '')); - }; - - // Listen for change events to enable binding - element.on('blur keyup change', function() { - scope.$evalAsync(read); - }); - read(); // initialize - - // Write data to the model - function read() { - var html = element.html(); - // When we clear the content editable the browser leaves a
      behind - // If strip-br attribute is provided then we strip this out - if (attrs.stripBr && html === '
      ') { - html = ''; - } - ngModel.$setViewValue(html); - } - } - }; - }]); -
      - -
      -
      Change me!
      - Required! -
      - -
      -
      - - it('should data-bind and become invalid', function() { - if (browser.params.browser === 'safari' || browser.params.browser === 'firefox') { - // SafariDriver can't handle contenteditable - // and Firefox driver can't clear contenteditables very well - return; - } - var contentEditable = element(by.css('[contenteditable]')); - var content = 'Change me!'; - - expect(contentEditable.getText()).toEqual(content); - - contentEditable.clear(); - contentEditable.sendKeys(protractor.Key.BACK_SPACE); - expect(contentEditable.getText()).toEqual(''); - expect(contentEditable.getAttribute('class')).toMatch(/ng-invalid-required/); - }); - - *
      - * - * - */ -NgModelController.$inject = ['$scope', '$exceptionHandler', '$attrs', '$element', '$parse', '$animate', '$timeout', '$q', '$interpolate']; -function NgModelController($scope, $exceptionHandler, $attr, $element, $parse, $animate, $timeout, $q, $interpolate) { - this.$viewValue = Number.NaN; - this.$modelValue = Number.NaN; - this.$$rawModelValue = undefined; // stores the parsed modelValue / model set from scope regardless of validity. - this.$validators = {}; - this.$asyncValidators = {}; - this.$parsers = []; - this.$formatters = []; - this.$viewChangeListeners = []; - this.$untouched = true; - this.$touched = false; - this.$pristine = true; - this.$dirty = false; - this.$valid = true; - this.$invalid = false; - this.$error = {}; // keep invalid keys here - this.$$success = {}; // keep valid keys here - this.$pending = undefined; // keep pending keys here - this.$name = $interpolate($attr.name || '', false)($scope); - this.$$parentForm = nullFormCtrl; - this.$options = defaultModelOptions; - this.$$updateEvents = ''; - // Attach the correct context to the event handler function for updateOn - this.$$updateEventHandler = this.$$updateEventHandler.bind(this); - - this.$$parsedNgModel = $parse($attr.ngModel); - this.$$parsedNgModelAssign = this.$$parsedNgModel.assign; - this.$$ngModelGet = this.$$parsedNgModel; - this.$$ngModelSet = this.$$parsedNgModelAssign; - this.$$pendingDebounce = null; - this.$$parserValid = undefined; - this.$$parserName = 'parse'; - - this.$$currentValidationRunId = 0; - - this.$$scope = $scope; - this.$$rootScope = $scope.$root; - this.$$attr = $attr; - this.$$element = $element; - this.$$animate = $animate; - this.$$timeout = $timeout; - this.$$parse = $parse; - this.$$q = $q; - this.$$exceptionHandler = $exceptionHandler; - - setupValidity(this); - setupModelWatcher(this); -} - -NgModelController.prototype = { - $$initGetterSetters: function() { - if (this.$options.getOption('getterSetter')) { - var invokeModelGetter = this.$$parse(this.$$attr.ngModel + '()'), - invokeModelSetter = this.$$parse(this.$$attr.ngModel + '($$$p)'); - - this.$$ngModelGet = function($scope) { - var modelValue = this.$$parsedNgModel($scope); - if (isFunction(modelValue)) { - modelValue = invokeModelGetter($scope); - } - return modelValue; - }; - this.$$ngModelSet = function($scope, newValue) { - if (isFunction(this.$$parsedNgModel($scope))) { - invokeModelSetter($scope, {$$$p: newValue}); - } else { - this.$$parsedNgModelAssign($scope, newValue); - } - }; - } else if (!this.$$parsedNgModel.assign) { - throw ngModelMinErr('nonassign', 'Expression \'{0}\' is non-assignable. Element: {1}', - this.$$attr.ngModel, startingTag(this.$$element)); - } - }, - - - /** - * @ngdoc method - * @name ngModel.NgModelController#$render - * - * @description - * Called when the view needs to be updated. It is expected that the user of the ng-model - * directive will implement this method. - * - * The `$render()` method is invoked in the following situations: - * - * * `$rollbackViewValue()` is called. If we are rolling back the view value to the last - * committed value then `$render()` is called to update the input control. - * * The value referenced by `ng-model` is changed programmatically and both the `$modelValue` and - * the `$viewValue` are different from last time. - * - * Since `ng-model` does not do a deep watch, `$render()` is only invoked if the values of - * `$modelValue` and `$viewValue` are actually different from their previous values. If `$modelValue` - * or `$viewValue` are objects (rather than a string or number) then `$render()` will not be - * invoked if you only change a property on the objects. - */ - $render: noop, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$isEmpty - * - * @description - * This is called when we need to determine if the value of an input is empty. - * - * For instance, the required directive does this to work out if the input has data or not. - * - * The default `$isEmpty` function checks whether the value is `undefined`, `''`, `null` or `NaN`. - * - * You can override this for input directives whose concept of being empty is different from the - * default. The `checkboxInputType` directive does this because in its case a value of `false` - * implies empty. - * - * @param {*} value The value of the input to check for emptiness. - * @returns {boolean} True if `value` is "empty". - */ - $isEmpty: function(value) { - // eslint-disable-next-line no-self-compare - return isUndefined(value) || value === '' || value === null || value !== value; - }, - - $$updateEmptyClasses: function(value) { - if (this.$isEmpty(value)) { - this.$$animate.removeClass(this.$$element, NOT_EMPTY_CLASS); - this.$$animate.addClass(this.$$element, EMPTY_CLASS); - } else { - this.$$animate.removeClass(this.$$element, EMPTY_CLASS); - this.$$animate.addClass(this.$$element, NOT_EMPTY_CLASS); - } - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setPristine - * - * @description - * Sets the control to its pristine state. - * - * This method can be called to remove the `ng-dirty` class and set the control to its pristine - * state (`ng-pristine` class). A model is considered to be pristine when the control - * has not been changed from when first compiled. - */ - $setPristine: function() { - this.$dirty = false; - this.$pristine = true; - this.$$animate.removeClass(this.$$element, DIRTY_CLASS); - this.$$animate.addClass(this.$$element, PRISTINE_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setDirty - * - * @description - * Sets the control to its dirty state. - * - * This method can be called to remove the `ng-pristine` class and set the control to its dirty - * state (`ng-dirty` class). A model is considered to be dirty when the control has been changed - * from when first compiled. - */ - $setDirty: function() { - this.$dirty = true; - this.$pristine = false; - this.$$animate.removeClass(this.$$element, PRISTINE_CLASS); - this.$$animate.addClass(this.$$element, DIRTY_CLASS); - this.$$parentForm.$setDirty(); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setUntouched - * - * @description - * Sets the control to its untouched state. - * - * This method can be called to remove the `ng-touched` class and set the control to its - * untouched state (`ng-untouched` class). Upon compilation, a model is set as untouched - * by default, however this function can be used to restore that state if the model has - * already been touched by the user. - */ - $setUntouched: function() { - this.$touched = false; - this.$untouched = true; - this.$$animate.setClass(this.$$element, UNTOUCHED_CLASS, TOUCHED_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setTouched - * - * @description - * Sets the control to its touched state. - * - * This method can be called to remove the `ng-untouched` class and set the control to its - * touched state (`ng-touched` class). A model is considered to be touched when the user has - * first focused the control element and then shifted focus away from the control (blur event). - */ - $setTouched: function() { - this.$touched = true; - this.$untouched = false; - this.$$animate.setClass(this.$$element, TOUCHED_CLASS, UNTOUCHED_CLASS); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$rollbackViewValue - * - * @description - * Cancel an update and reset the input element's value to prevent an update to the `$modelValue`, - * which may be caused by a pending debounced event or because the input is waiting for some - * future event. - * - * If you have an input that uses `ng-model-options` to set up debounced updates or updates that - * depend on special events such as `blur`, there can be a period when the `$viewValue` is out of - * sync with the ngModel's `$modelValue`. - * - * In this case, you can use `$rollbackViewValue()` to manually cancel the debounced / future update - * and reset the input to the last committed view value. - * - * It is also possible that you run into difficulties if you try to update the ngModel's `$modelValue` - * programmatically before these debounced/future events have resolved/occurred, because AngularJS's - * dirty checking mechanism is not able to tell whether the model has actually changed or not. - * - * The `$rollbackViewValue()` method should be called before programmatically changing the model of an - * input which may have such events pending. This is important in order to make sure that the - * input field will be updated with the new model value and any pending operations are cancelled. - * - * @example - * - * - * angular.module('cancel-update-example', []) - * - * .controller('CancelUpdateController', ['$scope', function($scope) { - * $scope.model = {value1: '', value2: ''}; - * - * $scope.setEmpty = function(e, value, rollback) { - * if (e.keyCode === 27) { - * e.preventDefault(); - * if (rollback) { - * $scope.myForm[value].$rollbackViewValue(); - * } - * $scope.model[value] = ''; - * } - * }; - * }]); - * - * - *
      - *

      Both of these inputs are only updated if they are blurred. Hitting escape should - * empty them. Follow these steps and observe the difference:

      - *
        - *
      1. Type something in the input. You will see that the model is not yet updated
      2. - *
      3. Press the Escape key. - *
          - *
        1. In the first example, nothing happens, because the model is already '', and no - * update is detected. If you blur the input, the model will be set to the current view. - *
        2. - *
        3. In the second example, the pending update is cancelled, and the input is set back - * to the last committed view value (''). Blurring the input does nothing. - *
        4. - *
        - *
      4. - *
      - * - *
      - *
      - *

      Without $rollbackViewValue():

      - * - * value1: "{{ model.value1 }}" - *
      - * - *
      - *

      With $rollbackViewValue():

      - * - * value2: "{{ model.value2 }}" - *
      - *
      - *
      - *
      - - div { - display: table-cell; - } - div:nth-child(1) { - padding-right: 30px; - } - - - *
      - */ - $rollbackViewValue: function() { - this.$$timeout.cancel(this.$$pendingDebounce); - this.$viewValue = this.$$lastCommittedViewValue; - this.$render(); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$validate - * - * @description - * Runs each of the registered validators (first synchronous validators and then - * asynchronous validators). - * If the validity changes to invalid, the model will be set to `undefined`, - * unless {@link ngModelOptions `ngModelOptions.allowInvalid`} is `true`. - * If the validity changes to valid, it will set the model to the last available valid - * `$modelValue`, i.e. either the last parsed value or the last value set from the scope. - */ - $validate: function() { - - // ignore $validate before model is initialized - if (isNumberNaN(this.$modelValue)) { - return; - } - - var viewValue = this.$$lastCommittedViewValue; - // Note: we use the $$rawModelValue as $modelValue might have been - // set to undefined during a view -> model update that found validation - // errors. We can't parse the view here, since that could change - // the model although neither viewValue nor the model on the scope changed - var modelValue = this.$$rawModelValue; - - var prevValid = this.$valid; - var prevModelValue = this.$modelValue; - - var allowInvalid = this.$options.getOption('allowInvalid'); - - var that = this; - this.$$runValidators(modelValue, viewValue, function(allValid) { - // If there was no change in validity, don't update the model - // This prevents changing an invalid modelValue to undefined - if (!allowInvalid && prevValid !== allValid) { - // Note: Don't check this.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - that.$modelValue = allValid ? modelValue : undefined; - - if (that.$modelValue !== prevModelValue) { - that.$$writeModelToScope(); - } - } - }); - }, - - $$runValidators: function(modelValue, viewValue, doneCallback) { - this.$$currentValidationRunId++; - var localValidationRunId = this.$$currentValidationRunId; - var that = this; - - // check parser error - if (!processParseErrors()) { - validationDone(false); - return; - } - if (!processSyncValidators()) { - validationDone(false); - return; - } - processAsyncValidators(); - - function processParseErrors() { - var errorKey = that.$$parserName; - - if (isUndefined(that.$$parserValid)) { - setValidity(errorKey, null); - } else { - if (!that.$$parserValid) { - forEach(that.$validators, function(v, name) { - setValidity(name, null); - }); - forEach(that.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - } - - // Set the parse error last, to prevent unsetting it, should a $validators key == parserName - setValidity(errorKey, that.$$parserValid); - return that.$$parserValid; - } - return true; - } - - function processSyncValidators() { - var syncValidatorsValid = true; - forEach(that.$validators, function(validator, name) { - var result = Boolean(validator(modelValue, viewValue)); - syncValidatorsValid = syncValidatorsValid && result; - setValidity(name, result); - }); - if (!syncValidatorsValid) { - forEach(that.$asyncValidators, function(v, name) { - setValidity(name, null); - }); - return false; - } - return true; - } - - function processAsyncValidators() { - var validatorPromises = []; - var allValid = true; - forEach(that.$asyncValidators, function(validator, name) { - var promise = validator(modelValue, viewValue); - if (!isPromiseLike(promise)) { - throw ngModelMinErr('nopromise', - 'Expected asynchronous validator to return a promise but got \'{0}\' instead.', promise); - } - setValidity(name, undefined); - validatorPromises.push(promise.then(function() { - setValidity(name, true); - }, function() { - allValid = false; - setValidity(name, false); - })); - }); - if (!validatorPromises.length) { - validationDone(true); - } else { - that.$$q.all(validatorPromises).then(function() { - validationDone(allValid); - }, noop); - } - } - - function setValidity(name, isValid) { - if (localValidationRunId === that.$$currentValidationRunId) { - that.$setValidity(name, isValid); - } - } - - function validationDone(allValid) { - if (localValidationRunId === that.$$currentValidationRunId) { - - doneCallback(allValid); - } - } - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$commitViewValue - * - * @description - * Commit a pending update to the `$modelValue`. - * - * Updates may be pending by a debounced event or because the input is waiting for a some future - * event defined in `ng-model-options`. this method is rarely needed as `NgModelController` - * usually handles calling this in response to input events. - */ - $commitViewValue: function() { - var viewValue = this.$viewValue; - - this.$$timeout.cancel(this.$$pendingDebounce); - - // If the view value has not changed then we should just exit, except in the case where there is - // a native validator on the element. In this case the validation state may have changed even though - // the viewValue has stayed empty. - if (this.$$lastCommittedViewValue === viewValue && (viewValue !== '' || !this.$$hasNativeValidators)) { - return; - } - this.$$updateEmptyClasses(viewValue); - this.$$lastCommittedViewValue = viewValue; - - // change to dirty - if (this.$pristine) { - this.$setDirty(); - } - this.$$parseAndValidate(); - }, - - $$parseAndValidate: function() { - var viewValue = this.$$lastCommittedViewValue; - var modelValue = viewValue; - var that = this; - - this.$$parserValid = isUndefined(modelValue) ? undefined : true; - - // Reset any previous parse error - this.$setValidity(this.$$parserName, null); - this.$$parserName = 'parse'; - - if (this.$$parserValid) { - for (var i = 0; i < this.$parsers.length; i++) { - modelValue = this.$parsers[i](modelValue); - if (isUndefined(modelValue)) { - this.$$parserValid = false; - break; - } - } - } - if (isNumberNaN(this.$modelValue)) { - // this.$modelValue has not been touched yet... - this.$modelValue = this.$$ngModelGet(this.$$scope); - } - var prevModelValue = this.$modelValue; - var allowInvalid = this.$options.getOption('allowInvalid'); - this.$$rawModelValue = modelValue; - - if (allowInvalid) { - this.$modelValue = modelValue; - writeToModelIfNeeded(); - } - - // Pass the $$lastCommittedViewValue here, because the cached viewValue might be out of date. - // This can happen if e.g. $setViewValue is called from inside a parser - this.$$runValidators(modelValue, this.$$lastCommittedViewValue, function(allValid) { - if (!allowInvalid) { - // Note: Don't check this.$valid here, as we could have - // external validators (e.g. calculated on the server), - // that just call $setValidity and need the model value - // to calculate their validity. - that.$modelValue = allValid ? modelValue : undefined; - writeToModelIfNeeded(); - } - }); - - function writeToModelIfNeeded() { - if (that.$modelValue !== prevModelValue) { - that.$$writeModelToScope(); - } - } - }, - - $$writeModelToScope: function() { - this.$$ngModelSet(this.$$scope, this.$modelValue); - forEach(this.$viewChangeListeners, function(listener) { - try { - listener(); - } catch (e) { - // eslint-disable-next-line no-invalid-this - this.$$exceptionHandler(e); - } - }, this); - }, - - /** - * @ngdoc method - * @name ngModel.NgModelController#$setViewValue - * - * @description - * Update the view value. - * - * This method should be called when a control wants to change the view value; typically, - * this is done from within a DOM event handler. For example, the {@link ng.directive:input input} - * directive calls it when the value of the input changes and {@link ng.directive:select select} - * calls it when an option is selected. - * - * When `$setViewValue` is called, the new `value` will be staged for committing through the `$parsers` - * and `$validators` pipelines. If there are no special {@link ngModelOptions} specified then the staged - * value is sent directly for processing through the `$parsers` pipeline. After this, the `$validators` and - * `$asyncValidators` are called and the value is applied to `$modelValue`. - * Finally, the value is set to the **expression** specified in the `ng-model` attribute and - * all the registered change listeners, in the `$viewChangeListeners` list are called. - * - * In case the {@link ng.directive:ngModelOptions ngModelOptions} directive is used with `updateOn` - * and the `default` trigger is not listed, all those actions will remain pending until one of the - * `updateOn` events is triggered on the DOM element. - * All these actions will be debounced if the {@link ng.directive:ngModelOptions ngModelOptions} - * directive is used with a custom debounce for this particular event. - * Note that a `$digest` is only triggered once the `updateOn` events are fired, or if `debounce` - * is specified, once the timer runs out. - * - * When used with standard inputs, the view value will always be a string (which is in some cases - * parsed into another type, such as a `Date` object for `input[date]`.) - * However, custom controls might also pass objects to this method. In this case, we should make - * a copy of the object before passing it to `$setViewValue`. This is because `ngModel` does not - * perform a deep watch of objects, it only looks for a change of identity. If you only change - * the property of the object then ngModel will not realize that the object has changed and - * will not invoke the `$parsers` and `$validators` pipelines. For this reason, you should - * not change properties of the copy once it has been passed to `$setViewValue`. - * Otherwise you may cause the model value on the scope to change incorrectly. - * - *
      - * In any case, the value passed to the method should always reflect the current value - * of the control. For example, if you are calling `$setViewValue` for an input element, - * you should pass the input DOM value. Otherwise, the control and the scope model become - * out of sync. It's also important to note that `$setViewValue` does not call `$render` or change - * the control's DOM value in any way. If we want to change the control's DOM value - * programmatically, we should update the `ngModel` scope expression. Its new value will be - * picked up by the model controller, which will run it through the `$formatters`, `$render` it - * to update the DOM, and finally call `$validate` on it. - *
      - * - * @param {*} value value from the view. - * @param {string} trigger Event that triggered the update. - */ - $setViewValue: function(value, trigger) { - this.$viewValue = value; - if (this.$options.getOption('updateOnDefault')) { - this.$$debounceViewValueCommit(trigger); - } - }, - - $$debounceViewValueCommit: function(trigger) { - var debounceDelay = this.$options.getOption('debounce'); - - if (isNumber(debounceDelay[trigger])) { - debounceDelay = debounceDelay[trigger]; - } else if (isNumber(debounceDelay['default']) && - this.$options.getOption('updateOn').indexOf(trigger) === -1 - ) { - debounceDelay = debounceDelay['default']; - } else if (isNumber(debounceDelay['*'])) { - debounceDelay = debounceDelay['*']; - } - - this.$$timeout.cancel(this.$$pendingDebounce); - var that = this; - if (debounceDelay > 0) { // this fails if debounceDelay is an object - this.$$pendingDebounce = this.$$timeout(function() { - that.$commitViewValue(); - }, debounceDelay); - } else if (this.$$rootScope.$$phase) { - this.$commitViewValue(); - } else { - this.$$scope.$apply(function() { - that.$commitViewValue(); - }); - } - }, - - /** - * @ngdoc method - * - * @name ngModel.NgModelController#$overrideModelOptions - * - * @description - * - * Override the current model options settings programmatically. - * - * The previous `ModelOptions` value will not be modified. Instead, a - * new `ModelOptions` object will inherit from the previous one overriding - * or inheriting settings that are defined in the given parameter. - * - * See {@link ngModelOptions} for information about what options can be specified - * and how model option inheritance works. - * - *
      - * **Note:** this function only affects the options set on the `ngModelController`, - * and not the options on the {@link ngModelOptions} directive from which they might have been - * obtained initially. - *
      - * - *
      - * **Note:** it is not possible to override the `getterSetter` option. - *
      - * - * @param {Object} options a hash of settings to override the previous options - * - */ - $overrideModelOptions: function(options) { - this.$options = this.$options.createChild(options); - this.$$setUpdateOnEvents(); - }, - - /** - * @ngdoc method - * - * @name ngModel.NgModelController#$processModelValue - - * @description - * - * Runs the model -> view pipeline on the current - * {@link ngModel.NgModelController#$modelValue $modelValue}. - * - * The following actions are performed by this method: - * - * - the `$modelValue` is run through the {@link ngModel.NgModelController#$formatters $formatters} - * and the result is set to the {@link ngModel.NgModelController#$viewValue $viewValue} - * - the `ng-empty` or `ng-not-empty` class is set on the element - * - if the `$viewValue` has changed: - * - {@link ngModel.NgModelController#$render $render} is called on the control - * - the {@link ngModel.NgModelController#$validators $validators} are run and - * the validation status is set. - * - * This method is called by ngModel internally when the bound scope value changes. - * Application developers usually do not have to call this function themselves. - * - * This function can be used when the `$viewValue` or the rendered DOM value are not correctly - * formatted and the `$modelValue` must be run through the `$formatters` again. - * - * @example - * Consider a text input with an autocomplete list (for fruit), where the items are - * objects with a name and an id. - * A user enters `ap` and then selects `Apricot` from the list. - * Based on this, the autocomplete widget will call `$setViewValue({name: 'Apricot', id: 443})`, - * but the rendered value will still be `ap`. - * The widget can then call `ctrl.$processModelValue()` to run the model -> view - * pipeline again, which formats the object to the string `Apricot`, - * then updates the `$viewValue`, and finally renders it in the DOM. - * - * - -
      -
      - Search Fruit: - -
      -
      - Model:
      -
      {{selectedFruit | json}}
      -
      -
      -
      - - angular.module('inputExample', []) - .controller('inputController', function($scope) { - $scope.items = [ - {name: 'Apricot', id: 443}, - {name: 'Clementine', id: 972}, - {name: 'Durian', id: 169}, - {name: 'Jackfruit', id: 982}, - {name: 'Strawberry', id: 863} - ]; - }) - .component('basicAutocomplete', { - bindings: { - items: '<', - onSelect: '&' - }, - templateUrl: 'autocomplete.html', - controller: function($element, $scope) { - var that = this; - var ngModel; - - that.$postLink = function() { - ngModel = $element.find('input').controller('ngModel'); - - ngModel.$formatters.push(function(value) { - return (value && value.name) || value; - }); - - ngModel.$parsers.push(function(value) { - var match = value; - for (var i = 0; i < that.items.length; i++) { - if (that.items[i].name === value) { - match = that.items[i]; - break; - } - } - - return match; - }); - }; - - that.selectItem = function(item) { - ngModel.$setViewValue(item); - ngModel.$processModelValue(); - that.onSelect({item: item}); - }; - } - }); - - -
      - -
        -
      • - -
      • -
      -
      -
      - *
      - * - */ - $processModelValue: function() { - var viewValue = this.$$format(); - - if (this.$viewValue !== viewValue) { - this.$$updateEmptyClasses(viewValue); - this.$viewValue = this.$$lastCommittedViewValue = viewValue; - this.$render(); - // It is possible that model and view value have been updated during render - this.$$runValidators(this.$modelValue, this.$viewValue, noop); - } - }, - - /** - * This method is called internally to run the $formatters on the $modelValue - */ - $$format: function() { - var formatters = this.$formatters, - idx = formatters.length; - - var viewValue = this.$modelValue; - while (idx--) { - viewValue = formatters[idx](viewValue); - } - - return viewValue; - }, - - /** - * This method is called internally when the bound scope value changes. - */ - $$setModelValue: function(modelValue) { - this.$modelValue = this.$$rawModelValue = modelValue; - this.$$parserValid = undefined; - this.$processModelValue(); - }, - - $$setUpdateOnEvents: function() { - if (this.$$updateEvents) { - this.$$element.off(this.$$updateEvents, this.$$updateEventHandler); - } - - this.$$updateEvents = this.$options.getOption('updateOn'); - if (this.$$updateEvents) { - this.$$element.on(this.$$updateEvents, this.$$updateEventHandler); - } - }, - - $$updateEventHandler: function(ev) { - this.$$debounceViewValueCommit(ev && ev.type); - } -}; - -function setupModelWatcher(ctrl) { - // model -> value - // Note: we cannot use a normal scope.$watch as we want to detect the following: - // 1. scope value is 'a' - // 2. user enters 'b' - // 3. ng-change kicks in and reverts scope value to 'a' - // -> scope value did not change since the last digest as - // ng-change executes in apply phase - // 4. view should be changed back to 'a' - ctrl.$$scope.$watch(function ngModelWatch(scope) { - var modelValue = ctrl.$$ngModelGet(scope); - - // if scope model value and ngModel value are out of sync - // This cannot be moved to the action function, because it would not catch the - // case where the model is changed in the ngChange function or the model setter - if (modelValue !== ctrl.$modelValue && - // checks for NaN is needed to allow setting the model to NaN when there's an asyncValidator - // eslint-disable-next-line no-self-compare - (ctrl.$modelValue === ctrl.$modelValue || modelValue === modelValue) - ) { - ctrl.$$setModelValue(modelValue); - } - - return modelValue; - }); -} - -/** - * @ngdoc method - * @name ngModel.NgModelController#$setValidity - * - * @description - * Change the validity state, and notify the form. - * - * This method can be called within $parsers/$formatters or a custom validation implementation. - * However, in most cases it should be sufficient to use the `ngModel.$validators` and - * `ngModel.$asyncValidators` collections which will call `$setValidity` automatically. - * - * @param {string} validationErrorKey Name of the validator. The `validationErrorKey` will be assigned - * to either `$error[validationErrorKey]` or `$pending[validationErrorKey]` - * (for unfulfilled `$asyncValidators`), so that it is available for data-binding. - * The `validationErrorKey` should be in camelCase and will get converted into dash-case - * for class name. Example: `myError` will result in `ng-valid-my-error` and `ng-invalid-my-error` - * classes and can be bound to as `{{ someForm.someControl.$error.myError }}`. - * @param {boolean} isValid Whether the current state is valid (true), invalid (false), pending (undefined), - * or skipped (null). Pending is used for unfulfilled `$asyncValidators`. - * Skipped is used by AngularJS when validators do not run because of parse errors and - * when `$asyncValidators` do not run because any of the `$validators` failed. - */ -addSetValidityMethod({ - clazz: NgModelController, - set: function(object, property) { - object[property] = true; - }, - unset: function(object, property) { - delete object[property]; - } -}); - - -/** - * @ngdoc directive - * @name ngModel - * @restrict A - * @priority 1 - * @param {expression} ngModel assignable {@link guide/expression Expression} to bind to. - * - * @description - * The `ngModel` directive binds an `input`,`select`, `textarea` (or custom form control) to a - * property on the scope using {@link ngModel.NgModelController NgModelController}, - * which is created and exposed by this directive. - * - * `ngModel` is responsible for: - * - * - Binding the view into the model, which other directives such as `input`, `textarea` or `select` - * require. - * - Providing validation behavior (i.e. required, number, email, url). - * - Keeping the state of the control (valid/invalid, dirty/pristine, touched/untouched, validation errors). - * - Setting related css classes on the element (`ng-valid`, `ng-invalid`, `ng-dirty`, `ng-pristine`, `ng-touched`, - * `ng-untouched`, `ng-empty`, `ng-not-empty`) including animations. - * - Registering the control with its parent {@link ng.directive:form form}. - * - * Note: `ngModel` will try to bind to the property given by evaluating the expression on the - * current scope. If the property doesn't already exist on this scope, it will be created - * implicitly and added to the scope. - * - * For best practices on using `ngModel`, see: - * - * - [Understanding Scopes](https://github.com/angular/angular.js/wiki/Understanding-Scopes) - * - * For basic examples, how to use `ngModel`, see: - * - * - {@link ng.directive:input input} - * - {@link input[text] text} - * - {@link input[checkbox] checkbox} - * - {@link input[radio] radio} - * - {@link input[number] number} - * - {@link input[email] email} - * - {@link input[url] url} - * - {@link input[date] date} - * - {@link input[datetime-local] datetime-local} - * - {@link input[time] time} - * - {@link input[month] month} - * - {@link input[week] week} - * - {@link ng.directive:select select} - * - {@link ng.directive:textarea textarea} - * - * ## Complex Models (objects or collections) - * - * By default, `ngModel` watches the model by reference, not value. This is important to know when - * binding inputs to models that are objects (e.g. `Date`) or collections (e.g. arrays). If only properties of the - * object or collection change, `ngModel` will not be notified and so the input will not be re-rendered. - * - * The model must be assigned an entirely new object or collection before a re-rendering will occur. - * - * Some directives have options that will cause them to use a custom `$watchCollection` on the model expression - * - for example, `ngOptions` will do so when a `track by` clause is included in the comprehension expression or - * if the select is given the `multiple` attribute. - * - * The `$watchCollection()` method only does a shallow comparison, meaning that changing properties deeper than the - * first level of the object (or only changing the properties of an item in the collection if it's an array) will still - * not trigger a re-rendering of the model. - * - * ## CSS classes - * The following CSS classes are added and removed on the associated input/select/textarea element - * depending on the validity of the model. - * - * - `ng-valid`: the model is valid - * - `ng-invalid`: the model is invalid - * - `ng-valid-[key]`: for each valid key added by `$setValidity` - * - `ng-invalid-[key]`: for each invalid key added by `$setValidity` - * - `ng-pristine`: the control hasn't been interacted with yet - * - `ng-dirty`: the control has been interacted with - * - `ng-touched`: the control has been blurred - * - `ng-untouched`: the control hasn't been blurred - * - `ng-pending`: any `$asyncValidators` are unfulfilled - * - `ng-empty`: the view does not contain a value or the value is deemed "empty", as defined - * by the {@link ngModel.NgModelController#$isEmpty} method - * - `ng-not-empty`: the view contains a non-empty value - * - * Keep in mind that ngAnimate can detect each of these classes when added and removed. - * - * @animations - * Animations within models are triggered when any of the associated CSS classes are added and removed - * on the input element which is attached to the model. These classes include: `.ng-pristine`, `.ng-dirty`, - * `.ng-invalid` and `.ng-valid` as well as any other validations that are performed on the model itself. - * The animations that are triggered within ngModel are similar to how they work in ngClass and - * animations can be hooked into using CSS transitions, keyframes as well as JS animations. - * - * The following example shows a simple way to utilize CSS transitions to style an input element - * that has been rendered as invalid after it has been validated: - * - *
      - * //be sure to include ngAnimate as a module to hook into more
      - * //advanced animations
      - * .my-input {
      - *   transition:0.5s linear all;
      - *   background: white;
      - * }
      - * .my-input.ng-invalid {
      - *   background: red;
      - *   color:white;
      - * }
      - * 
      - * - * @example - * ### Basic Usage - * - - - -

      - Update input to see transitions when valid/invalid. - Integer is a valid value. -

      -
      - -
      -
      - *
      - * - * @example - * ### Binding to a getter/setter - * - * Sometimes it's helpful to bind `ngModel` to a getter/setter function. A getter/setter is a - * function that returns a representation of the model when called with zero arguments, and sets - * the internal state of a model when called with an argument. It's sometimes useful to use this - * for models that have an internal representation that's different from what the model exposes - * to the view. - * - *
      - * **Best Practice:** It's best to keep getters fast because AngularJS is likely to call them more - * frequently than other parts of your code. - *
      - * - * You use this behavior by adding `ng-model-options="{ getterSetter: true }"` to an element that - * has `ng-model` attached to it. You can also add `ng-model-options="{ getterSetter: true }"` to - * a `
      `, which will enable this behavior for all ``s within it. See - * {@link ng.directive:ngModelOptions `ngModelOptions`} for more. - * - * The following example shows how to use `ngModel` with a getter/setter: - * - * @example - * - -
      - - - -
      user.name = 
      -
      -
      - - angular.module('getterSetterExample', []) - .controller('ExampleController', ['$scope', function($scope) { - var _name = 'Brian'; - $scope.user = { - name: function(newName) { - // Note that newName can be undefined for two reasons: - // 1. Because it is called as a getter and thus called with no arguments - // 2. Because the property should actually be set to undefined. This happens e.g. if the - // input is invalid - return arguments.length ? (_name = newName) : _name; - } - }; - }]); - - *
      - */ -var ngModelDirective = ['$rootScope', function($rootScope) { - return { - restrict: 'A', - require: ['ngModel', '^?form', '^?ngModelOptions'], - controller: NgModelController, - // Prelink needs to run before any input directive - // so that we can set the NgModelOptions in NgModelController - // before anyone else uses it. - priority: 1, - compile: function ngModelCompile(element) { - // Setup initial state of the control - element.addClass(PRISTINE_CLASS).addClass(UNTOUCHED_CLASS).addClass(VALID_CLASS); - - return { - pre: function ngModelPreLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0], - formCtrl = ctrls[1] || modelCtrl.$$parentForm, - optionsCtrl = ctrls[2]; - - if (optionsCtrl) { - modelCtrl.$options = optionsCtrl.$options; - } - - modelCtrl.$$initGetterSetters(); - - // notify others, especially parent forms - formCtrl.$addControl(modelCtrl); - - attr.$observe('name', function(newValue) { - if (modelCtrl.$name !== newValue) { - modelCtrl.$$parentForm.$$renameControl(modelCtrl, newValue); - } - }); - - scope.$on('$destroy', function() { - modelCtrl.$$parentForm.$removeControl(modelCtrl); - }); - }, - post: function ngModelPostLink(scope, element, attr, ctrls) { - var modelCtrl = ctrls[0]; - modelCtrl.$$setUpdateOnEvents(); - - function setTouched() { - modelCtrl.$setTouched(); - } - - element.on('blur', function() { - if (modelCtrl.$touched) return; - - if ($rootScope.$$phase) { - scope.$evalAsync(setTouched); - } else { - scope.$apply(setTouched); - } - }); - } - }; - } - }; -}]; - -/* exported defaultModelOptions */ -var defaultModelOptions; -var DEFAULT_REGEXP = /(\s+|^)default(\s+|$)/; - -/** - * @ngdoc type - * @name ModelOptions - * @description - * A container for the options set by the {@link ngModelOptions} directive - */ -function ModelOptions(options) { - this.$$options = options; -} - -ModelOptions.prototype = { - - /** - * @ngdoc method - * @name ModelOptions#getOption - * @param {string} name the name of the option to retrieve - * @returns {*} the value of the option - * @description - * Returns the value of the given option - */ - getOption: function(name) { - return this.$$options[name]; - }, - - /** - * @ngdoc method - * @name ModelOptions#createChild - * @param {Object} options a hash of options for the new child that will override the parent's options - * @return {ModelOptions} a new `ModelOptions` object initialized with the given options. - */ - createChild: function(options) { - var inheritAll = false; - - // make a shallow copy - options = extend({}, options); - - // Inherit options from the parent if specified by the value `"$inherit"` - forEach(options, /** @this */ function(option, key) { - if (option === '$inherit') { - if (key === '*') { - inheritAll = true; - } else { - options[key] = this.$$options[key]; - // `updateOn` is special so we must also inherit the `updateOnDefault` option - if (key === 'updateOn') { - options.updateOnDefault = this.$$options.updateOnDefault; - } - } - } else { - if (key === 'updateOn') { - // If the `updateOn` property contains the `default` event then we have to remove - // it from the event list and set the `updateOnDefault` flag. - options.updateOnDefault = false; - options[key] = trim(option.replace(DEFAULT_REGEXP, function() { - options.updateOnDefault = true; - return ' '; - })); - } - } - }, this); - - if (inheritAll) { - // We have a property of the form: `"*": "$inherit"` - delete options['*']; - defaults(options, this.$$options); - } - - // Finally add in any missing defaults - defaults(options, defaultModelOptions.$$options); - - return new ModelOptions(options); - } -}; - - -defaultModelOptions = new ModelOptions({ - updateOn: '', - updateOnDefault: true, - debounce: 0, - getterSetter: false, - allowInvalid: false, - timezone: null -}); - - -/** - * @ngdoc directive - * @name ngModelOptions - * @restrict A - * @priority 10 - * - * @description - * This directive allows you to modify the behaviour of {@link ngModel} directives within your - * application. You can specify an `ngModelOptions` directive on any element. All {@link ngModel} - * directives will use the options of their nearest `ngModelOptions` ancestor. - * - * The `ngModelOptions` settings are found by evaluating the value of the attribute directive as - * an AngularJS expression. This expression should evaluate to an object, whose properties contain - * the settings. For example: `
      - *
      - * - *
      - *
      - * ``` - * - * the `input` element will have the following settings - * - * ```js - * { allowInvalid: true, updateOn: 'default', debounce: 0 } - * ``` - * - * Notice that the `debounce` setting was not inherited and used the default value instead. - * - * You can specify that all undefined settings are automatically inherited from an ancestor by - * including a property with key of `"*"` and value of `"$inherit"`. - * - * For example given the following fragment of HTML - * - * - * ```html - *
      - *
      - * - *
      - *
      - * ``` - * - * the `input` element will have the following settings - * - * ```js - * { allowInvalid: true, updateOn: 'default', debounce: 200 } - * ``` - * - * Notice that the `debounce` setting now inherits the value from the outer `
      ` element. - * - * If you are creating a reusable component then you should be careful when using `"*": "$inherit"` - * since you may inadvertently inherit a setting in the future that changes the behavior of your component. - * - * - * ## Triggering and debouncing model updates - * - * The `updateOn` and `debounce` properties allow you to specify a custom list of events that will - * trigger a model update and/or a debouncing delay so that the actual update only takes place when - * a timer expires; this timer will be reset after another change takes place. - * - * Given the nature of `ngModelOptions`, the value displayed inside input fields in the view might - * be different from the value in the actual model. This means that if you update the model you - * should also invoke {@link ngModel.NgModelController#$rollbackViewValue} on the relevant input field in - * order to make sure it is synchronized with the model and that any debounced action is canceled. - * - * The easiest way to reference the control's {@link ngModel.NgModelController#$rollbackViewValue} - * method is by making sure the input is placed inside a form that has a `name` attribute. This is - * important because `form` controllers are published to the related scope under the name in their - * `name` attribute. - * - * Any pending changes will take place immediately when an enclosing form is submitted via the - * `submit` event. Note that `ngClick` events will occur before the model is updated. Use `ngSubmit` - * to have access to the updated model. - * - * ### Overriding immediate updates - * - * The following example shows how to override immediate updates. Changes on the inputs within the - * form will update the model only when the control loses focus (blur event). If `escape` key is - * pressed while the input field is focused, the value is reset to the value in the current model. - * - * - * - *
      - *
      - *
      - *
      - *
      - *
      user.name = 
      - *
      - *
      - * - * angular.module('optionsExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.user = { name: 'say', data: '' }; - * - * $scope.cancel = function(e) { - * if (e.keyCode === 27) { - * $scope.userForm.userName.$rollbackViewValue(); - * } - * }; - * }]); - * - * - * var model = element(by.binding('user.name')); - * var input = element(by.model('user.name')); - * var other = element(by.model('user.data')); - * - * it('should allow custom events', function() { - * input.sendKeys(' hello'); - * input.click(); - * expect(model.getText()).toEqual('say'); - * other.click(); - * expect(model.getText()).toEqual('say hello'); - * }); - * - * it('should $rollbackViewValue when model changes', function() { - * input.sendKeys(' hello'); - * expect(input.getAttribute('value')).toEqual('say hello'); - * input.sendKeys(protractor.Key.ESCAPE); - * expect(input.getAttribute('value')).toEqual('say'); - * other.click(); - * expect(model.getText()).toEqual('say'); - * }); - * - *
      - * - * ### Debouncing updates - * - * The next example shows how to debounce model changes. Model will be updated only 1 sec after last change. - * If the `Clear` button is pressed, any debounced action is canceled and the value becomes empty. - * - * - * - *
      - *
      - * Name: - * - *
      - *
      - *
      user.name = 
      - *
      - *
      - * - * angular.module('optionsExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * $scope.user = { name: 'say' }; - * }]); - * - *
      - * - * ### Default events, extra triggers, and catch-all debounce values - * - * This example shows the relationship between "default" update events and - * additional `updateOn` triggers. - * - * `default` events are those that are bound to the control, and when fired, update the `$viewValue` - * via {@link ngModel.NgModelController#$setViewValue $setViewValue}. Every event that is not listed - * in `updateOn` is considered a "default" event, since different control types have different - * default events. - * - * The control in this example updates by "default", "click", and "blur", with different `debounce` - * values. You can see that "click" doesn't have an individual `debounce` value - - * therefore it uses the `*` debounce value. - * - * There is also a button that calls {@link ngModel.NgModelController#$setViewValue $setViewValue} - * directly with a "custom" event. Since "custom" is not defined in the `updateOn` list, - * it is considered a "default" event and will update the - * control if "default" is defined in `updateOn`, and will receive the "default" debounce value. - * Note that this is just to illustrate how custom controls would possibly call `$setViewValue`. - * - * You can change the `updateOn` and `debounce` configuration to test different scenarios. This - * is done with {@link ngModel.NgModelController#$overrideModelOptions $overrideModelOptions}. - * - - - - - - angular.module('optionsExample', []) - .component('modelUpdateDemo', { - templateUrl: 'template.html', - controller: function() { - this.name = 'Chinua'; - - this.options = { - updateOn: 'default blur click', - debounce: { - default: 2000, - blur: 0, - '*': 1000 - } - }; - - this.updateEvents = function() { - var eventList = this.options.updateOn.split(' '); - eventList.push('*'); - var events = {}; - - for (var i = 0; i < eventList.length; i++) { - events[eventList[i]] = this.options.debounce[eventList[i]]; - } - - this.events = events; - }; - - this.updateOptions = function() { - var options = angular.extend(this.options, { - updateOn: Object.keys(this.events).join(' ').replace('*', ''), - debounce: this.events - }); - - this.form.input.$overrideModelOptions(options); - }; - - // Initialize the event form - this.updateEvents(); - } - }); - - -
      - Input: -
      - Model: {{$ctrl.name}} -
      - - -
      -
      - updateOn
      - - - - - - - - - - - -
      OptionDebounce value
      {{key}}
      - -
      - -
      -
      -
      - * - * - * ## Model updates and validation - * - * The default behaviour in `ngModel` is that the model value is set to `undefined` when the - * validation determines that the value is invalid. By setting the `allowInvalid` property to true, - * the model will still be updated even if the value is invalid. - * - * - * ## Connecting to the scope - * - * By setting the `getterSetter` property to true you are telling ngModel that the `ngModel` expression - * on the scope refers to a "getter/setter" function rather than the value itself. - * - * The following example shows how to bind to getter/setters: - * - * - * - *
      - *
      - * - *
      - *
      user.name = 
      - *
      - *
      - * - * angular.module('getterSetterExample', []) - * .controller('ExampleController', ['$scope', function($scope) { - * var _name = 'Brian'; - * $scope.user = { - * name: function(newName) { - * return angular.isDefined(newName) ? (_name = newName) : _name; - * } - * }; - * }]); - * - *
      - * - * - * ## Programmatically changing options - * - * The `ngModelOptions` expression is only evaluated once when the directive is linked; it is not - * watched for changes. However, it is possible to override the options on a single - * {@link ngModel.NgModelController} instance with - * {@link ngModel.NgModelController#$overrideModelOptions `NgModelController#$overrideModelOptions()`}. - * See also the example for - * {@link ngModelOptions#default-events-extra-triggers-and-catch-all-debounce-values - * Default events, extra triggers, and catch-all debounce values}. - * - * - * ## Specifying timezones - * - * You can specify the timezone that date/time input directives expect by providing its name in the - * `timezone` property. - * - * - * ## Formatting the value of `time` and `datetime-local` - * - * With the options `timeSecondsFormat` and `timeStripZeroSeconds` it is possible to adjust the value - * that is displayed in the control. Note that browsers may apply their own formatting - * in the user interface. - * - - - - - - angular.module('timeExample', []) - .component('timeExample', { - templateUrl: 'timeExample.html', - controller: function() { - this.time = new Date(1970, 0, 1, 14, 57, 0); - - this.options = { - timeSecondsFormat: 'ss', - timeStripZeroSeconds: true - }; - - this.optionChange = function() { - this.timeForm.timeFormatted.$overrideModelOptions(this.options); - this.time = new Date(this.time); - }; - } - }); - - -
      - Default: -
      - With options: - -
      - - Options:
      - timeSecondsFormat: - -
      - timeStripZeroSeconds: - -
      -
      - *
      - * - * @param {Object} ngModelOptions options to apply to {@link ngModel} directives on this element and - * and its descendents. - * - * **General options**: - * - * - `updateOn`: string specifying which event should the input be bound to. You can set several - * events using an space delimited list. There is a special event called `default` that - * matches the default events belonging to the control. These are the events that are bound to - * the control, and when fired, update the `$viewValue` via `$setViewValue`. - * - * `ngModelOptions` considers every event that is not listed in `updateOn` a "default" event, - * since different control types use different default events. - * - * See also the section {@link ngModelOptions#triggering-and-debouncing-model-updates - * Triggering and debouncing model updates}. - * - * - `debounce`: integer value which contains the debounce model update value in milliseconds. A - * value of 0 triggers an immediate update. If an object is supplied instead, you can specify a - * custom value for each event. For example: - * ``` - * ng-model-options="{ - * updateOn: 'default blur', - * debounce: { 'default': 500, 'blur': 0 } - * }" - * ``` - * You can use the `*` key to specify a debounce value that applies to all events that are not - * specifically listed. In the following example, `mouseup` would have a debounce delay of 1000: - * ``` - * ng-model-options="{ - * updateOn: 'default blur mouseup', - * debounce: { 'default': 500, 'blur': 0, '*': 1000 } - * }" - * ``` - * - `allowInvalid`: boolean value which indicates that the model can be set with values that did - * not validate correctly instead of the default behavior of setting the model to undefined. - * - `getterSetter`: boolean value which determines whether or not to treat functions bound to - * `ngModel` as getters/setters. - * - * - * **Input-type specific options**: - * - * - `timezone`: Defines the timezone to be used to read/write the `Date` instance in the model for - * ``, ``, ... . It understands UTC/GMT and the - * continental US time zone abbreviations, but for general use, use a time zone offset, for - * example, `'+0430'` (4 hours, 30 minutes east of the Greenwich meridian) - * If not specified, the timezone of the browser will be used. - * Note that changing the timezone will have no effect on the current date, and is only applied after - * the next input / model change. - * - * - `timeSecondsFormat`: Defines if the `time` and `datetime-local` types should show seconds and - * milliseconds. The option follows the format string of {@link date date filter}. - * By default, the options is `undefined` which is equal to `'ss.sss'` (seconds and milliseconds). - * The other options are `'ss'` (strips milliseconds), and `''` (empty string), which strips both - * seconds and milliseconds. - * Note that browsers that support `time` and `datetime-local` require the hour and minutes - * part of the time string, and may show the value differently in the user interface. - * {@link ngModelOptions#formatting-the-value-of-time-and-datetime-local- See the example}. - * - * - `timeStripZeroSeconds`: Defines if the `time` and `datetime-local` types should strip the - * seconds and milliseconds from the formatted value if they are zero. This option is applied - * after `timeSecondsFormat`. - * This option can be used to make the formatting consistent over different browsers, as some - * browsers with support for `time` will natively hide the milliseconds and - * seconds if they are zero, but others won't, and browsers that don't implement these input - * types will always show the full string. - * {@link ngModelOptions#formatting-the-value-of-time-and-datetime-local- See the example}. - * - */ -var ngModelOptionsDirective = function() { - NgModelOptionsController.$inject = ['$attrs', '$scope']; - function NgModelOptionsController($attrs, $scope) { - this.$$attrs = $attrs; - this.$$scope = $scope; - } - NgModelOptionsController.prototype = { - $onInit: function() { - var parentOptions = this.parentCtrl ? this.parentCtrl.$options : defaultModelOptions; - var modelOptionsDefinition = this.$$scope.$eval(this.$$attrs.ngModelOptions); - - this.$options = parentOptions.createChild(modelOptionsDefinition); - } - }; - - return { - restrict: 'A', - // ngModelOptions needs to run before ngModel and input directives - priority: 10, - require: {parentCtrl: '?^^ngModelOptions'}, - bindToController: true, - controller: NgModelOptionsController - }; -}; - - -// shallow copy over values from `src` that are not already specified on `dst` -function defaults(dst, src) { - forEach(src, function(value, key) { - if (!isDefined(dst[key])) { - dst[key] = value; - } - }); -} - -/** - * @ngdoc directive - * @name ngNonBindable - * @restrict AC - * @priority 1000 - * @element ANY - * - * @description - * The `ngNonBindable` directive tells AngularJS not to compile or bind the contents of the current - * DOM element, including directives on the element itself that have a lower priority than - * `ngNonBindable`. This is useful if the element contains what appears to be AngularJS directives - * and bindings but which should be ignored by AngularJS. This could be the case if you have a site - * that displays snippets of code, for instance. - * - * @example - * In this example there are two locations where a simple interpolation binding (`{{}}`) is present, - * but the one wrapped in `ngNonBindable` is left alone. - * - - -
      Normal: {{1 + 2}}
      -
      Ignored: {{1 + 2}}
      -
      - - it('should check ng-non-bindable', function() { - expect(element(by.binding('1 + 2')).getText()).toContain('3'); - expect(element.all(by.css('div')).last().getText()).toMatch(/1 \+ 2/); - }); - -
      - */ -var ngNonBindableDirective = ngDirective({ terminal: true, priority: 1000 }); - -/* exported ngOptionsDirective */ - -/* global jqLiteRemove */ - -var ngOptionsMinErr = minErr('ngOptions'); - -/** - * @ngdoc directive - * @name ngOptions - * @restrict A - * - * @description - * - * The `ngOptions` attribute can be used to dynamically generate a list of `` - * DOM element. - * * `disable`: The result of this expression will be used to disable the rendered `