keycloakify 10.0.0-rc.77 → 10.0.0-rc.79
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/account/Template.js +2 -2
- package/account/Template.js.map +1 -1
- package/account/i18n/i18n.d.ts +5 -5
- package/account/i18n/i18n.js +13 -35
- package/account/i18n/i18n.js.map +1 -1
- package/account/i18n/index.d.ts +1 -1
- package/account/i18n/index.js +1 -1
- package/account/i18n/index.js.map +1 -1
- package/account/i18n/useI18n.d.ts +13 -0
- package/account/i18n/useI18n.js +26 -0
- package/account/i18n/useI18n.js.map +1 -0
- package/bin/440.index.js +15 -19
- package/bin/751.index.js +0 -2
- package/bin/shared/constants.d.ts +0 -1
- package/bin/shared/constants.js +0 -1
- package/bin/shared/constants.js.map +1 -1
- package/login/KcContext/KcContext.d.ts +5 -1
- package/login/KcContext/KcContext.js +0 -1
- package/login/KcContext/KcContext.js.map +1 -1
- package/login/KcContext/kcContextMocks.js +4 -1
- package/login/KcContext/kcContextMocks.js.map +1 -1
- package/login/Template.js +2 -2
- package/login/Template.js.map +1 -1
- package/login/i18n/i18n.d.ts +8 -5
- package/login/i18n/i18n.js +24 -39
- package/login/i18n/i18n.js.map +1 -1
- package/login/i18n/index.d.ts +1 -1
- package/login/i18n/index.js +1 -1
- package/login/i18n/index.js.map +1 -1
- package/login/i18n/useI18n.d.ts +13 -0
- package/login/i18n/useI18n.js +26 -0
- package/login/i18n/useI18n.js.map +1 -0
- package/login/lib/useDownloadTerms.d.ts +5 -4
- package/login/lib/useDownloadTerms.js +26 -5
- package/login/lib/useDownloadTerms.js.map +1 -1
- package/login/pages/Register.js +7 -6
- package/login/pages/Register.js.map +1 -1
- package/login/pages/Terms.d.ts +1 -1
- package/login/pages/Terms.js +6 -4
- package/login/pages/Terms.js.map +1 -1
- package/package.json +15 -7
- package/src/account/Template.tsx +2 -2
- package/src/account/i18n/i18n.tsx +22 -56
- package/src/account/i18n/index.ts +1 -1
- package/src/account/i18n/useI18n.ts +44 -0
- package/src/bin/keycloakify/generateFtl/generateFtl.ts +1 -6
- package/src/bin/keycloakify/generateFtl/kcContextDeclarationTemplate.ftl +8 -1
- package/src/bin/keycloakify/generateResources/generateMessageProperties.ts +23 -17
- package/src/bin/shared/constants.ts +0 -2
- package/src/login/KcContext/KcContext.ts +6 -14
- package/src/login/KcContext/kcContextMocks.ts +4 -1
- package/src/login/Template.tsx +2 -2
- package/src/login/i18n/i18n.tsx +40 -61
- package/src/login/i18n/index.ts +1 -1
- package/src/login/i18n/useI18n.ts +44 -0
- package/src/login/lib/useDownloadTerms.tsx +88 -0
- package/src/login/pages/Register.tsx +12 -12
- package/src/login/pages/Terms.tsx +12 -11
- package/src/tools/react-markdown.ts +3 -0
- package/tools/react-markdown.d.ts +3 -0
- package/tools/react-markdown.js +4 -0
- package/tools/react-markdown.js.map +1 -0
- package/vite-plugin/index.js +0 -2
- package/src/login/lib/useDownloadTerms.ts +0 -57
- package/src/tools/Markdown.ts +0 -3
- package/tools/Markdown.d.ts +0 -2
- package/tools/Markdown.js +0 -3
- package/tools/Markdown.js.map +0 -1
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
/// <reference types="react" />
|
2
|
+
export type KcContextLike_useDownloadTerms = {
|
2
3
|
pageId: string;
|
3
4
|
locale?: {
|
4
5
|
currentLanguageTag: string;
|
@@ -7,7 +8,7 @@ export type KcContextLike = {
|
|
7
8
|
};
|
8
9
|
/** Allow to avoid bundling the terms and download it on demand*/
|
9
10
|
export declare function useDownloadTerms(params: {
|
10
|
-
kcContext:
|
11
|
+
kcContext: KcContextLike_useDownloadTerms;
|
11
12
|
downloadTermsMarkdown: (params: {
|
12
13
|
currentLanguageTag: string;
|
13
14
|
}) => Promise<{
|
@@ -17,10 +18,10 @@ export declare function useDownloadTerms(params: {
|
|
17
18
|
}): void;
|
18
19
|
export declare function useTermsMarkdown(): {
|
19
20
|
isDownloadComplete: false;
|
21
|
+
ReactMarkdown?: undefined;
|
20
22
|
termsMarkdown?: undefined;
|
21
|
-
termsLanguageTag?: undefined;
|
22
23
|
} | {
|
23
24
|
isDownloadComplete: boolean;
|
25
|
+
ReactMarkdown: (props: Readonly<import("react-markdown/lib").Options>) => JSX.Element;
|
24
26
|
termsMarkdown: string;
|
25
|
-
termsLanguageTag: string | undefined;
|
26
27
|
};
|
@@ -1,3 +1,5 @@
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
+
import { useState, useEffect } from "react";
|
1
3
|
import { fallbackLanguageTag } from "../../login/i18n";
|
2
4
|
import { assert } from "tsafe/assert";
|
3
5
|
import { createStatefulObservable, useRerenderOnChange } from "../../tools/StatefulObservable";
|
@@ -10,9 +12,28 @@ export function useDownloadTerms(params) {
|
|
10
12
|
useOnFistMount(async () => {
|
11
13
|
var _a, _b;
|
12
14
|
if (kcContext.pageId === "terms.ftl" || kcContext.termsAcceptanceRequired) {
|
13
|
-
|
14
|
-
|
15
|
-
|
15
|
+
const currentLanguageTag = (_b = (_a = kcContext.locale) === null || _a === void 0 ? void 0 : _a.currentLanguageTag) !== null && _b !== void 0 ? _b : fallbackLanguageTag;
|
16
|
+
const [ReactMarkdown_base, { termsMarkdown, termsLanguageTag }] = await Promise.all([
|
17
|
+
import("../../tools/react-markdown").then(_ => _.default),
|
18
|
+
downloadTermsMarkdown({ currentLanguageTag })
|
19
|
+
]);
|
20
|
+
const htmlLang = termsLanguageTag !== currentLanguageTag ? termsLanguageTag : undefined;
|
21
|
+
const ReactMarkdown = htmlLang === undefined
|
22
|
+
? ReactMarkdown_base
|
23
|
+
: props => {
|
24
|
+
const [anchor, setAnchor] = useState(null);
|
25
|
+
useEffect(() => {
|
26
|
+
if (anchor === null) {
|
27
|
+
return;
|
28
|
+
}
|
29
|
+
const parent = anchor.parentElement;
|
30
|
+
assert(parent !== null);
|
31
|
+
parent.setAttribute("lang", htmlLang);
|
32
|
+
anchor.remove();
|
33
|
+
}, [anchor]);
|
34
|
+
return (_jsxs(_Fragment, { children: [_jsx(ReactMarkdown_base, Object.assign({}, props)), _jsx("div", { ref: setAnchor, style: { display: "none" }, "aria-hidden": true })] }));
|
35
|
+
};
|
36
|
+
obs.current = { ReactMarkdown, termsMarkdown };
|
16
37
|
}
|
17
38
|
});
|
18
39
|
}
|
@@ -21,7 +42,7 @@ export function useTermsMarkdown() {
|
|
21
42
|
if (obs.current === undefined) {
|
22
43
|
return { isDownloadComplete: false };
|
23
44
|
}
|
24
|
-
const {
|
25
|
-
return { isDownloadComplete: true,
|
45
|
+
const { ReactMarkdown, termsMarkdown } = obs.current;
|
46
|
+
return { isDownloadComplete: true, ReactMarkdown, termsMarkdown };
|
26
47
|
}
|
27
48
|
//# sourceMappingURL=useDownloadTerms.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useDownloadTerms.js","sourceRoot":"","sources":["../../src/login/lib/useDownloadTerms.
|
1
|
+
{"version":3,"file":"useDownloadTerms.js","sourceRoot":"","sources":["../../src/login/lib/useDownloadTerms.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,MAAM,sCAAsC,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAInE,MAAM,GAAG,GAAG,wBAAwB,CAMlC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AAUnB,MAAM,EAAmE,CAAC;AAE1E,iEAAiE;AACjE,MAAM,UAAU,gBAAgB,CAAC,MAGhC;IACG,MAAM,EAAE,SAAS,EAAE,qBAAqB,EAAE,GAAG,MAAM,CAAC;IAEpD,cAAc,CAAC,KAAK,IAAI,EAAE;;QACtB,IAAI,SAAS,CAAC,MAAM,KAAK,WAAW,IAAI,SAAS,CAAC,uBAAuB,EAAE;YACvE,MAAM,kBAAkB,GAAG,MAAA,MAAA,SAAS,CAAC,MAAM,0CAAE,kBAAkB,mCAAI,mBAAmB,CAAC;YAEvF,MAAM,CAAC,kBAAkB,EAAE,EAAE,aAAa,EAAE,gBAAgB,EAAE,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChF,MAAM,CAAC,4BAA4B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzD,qBAAqB,CAAC,EAAE,kBAAkB,EAAE,CAAC;aACvC,CAAC,CAAC;YAEZ,MAAM,QAAQ,GAAG,gBAAgB,KAAK,kBAAkB,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,SAAS,CAAC;YAExF,MAAM,aAAa,GACf,QAAQ,KAAK,SAAS;gBAClB,CAAC,CAAC,kBAAkB;gBACpB,CAAC,CAAC,KAAK,CAAC,EAAE;oBACJ,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAwB,IAAI,CAAC,CAAC;oBAElE,SAAS,CAAC,GAAG,EAAE;wBACX,IAAI,MAAM,KAAK,IAAI,EAAE;4BACjB,OAAO;yBACV;wBAED,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC;wBAEpC,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC;wBAExB,MAAM,CAAC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;wBAEtC,MAAM,CAAC,MAAM,EAAE,CAAC;oBACpB,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;oBAEb,OAAO,CACH,8BACI,KAAC,kBAAkB,oBAAK,KAAK,EAAI,EACjC,cAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,wBAAgB,IAChE,CACN,CAAC;gBACN,CAAC,CAAC;YAEZ,GAAG,CAAC,OAAO,GAAG,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;SAClD;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC5B,mBAAmB,CAAC,GAAG,CAAC,CAAC;IAEzB,IAAI,GAAG,CAAC,OAAO,KAAK,SAAS,EAAE;QAC3B,OAAO,EAAE,kBAAkB,EAAE,KAAc,EAAE,CAAC;KACjD;IAED,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IAErD,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AACtE,CAAC"}
|
package/login/pages/Register.js
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
2
2
|
import { useState } from "react";
|
3
|
-
import { Markdown } from "../../tools/Markdown";
|
4
3
|
import { useTermsMarkdown } from "../../login/lib/useDownloadTerms";
|
5
4
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
6
5
|
export default function Register(props) {
|
@@ -16,12 +15,14 @@ export default function Register(props) {
|
|
16
15
|
}
|
17
16
|
function TermsAcceptance(props) {
|
18
17
|
const { i18n, kcClsx, messagesPerField } = props;
|
19
|
-
const { msg } = i18n;
|
20
|
-
|
21
|
-
|
22
|
-
|
18
|
+
const { msg, msgStr } = i18n;
|
19
|
+
return (_jsxs(_Fragment, { children: [_jsx("div", Object.assign({ className: "form-group" }, { children: _jsxs("div", Object.assign({ className: kcClsx("kcInputWrapperClass") }, { children: [msg("termsTitle"), _jsx("div", Object.assign({ id: "kc-registration-terms-text" }, { children: msgStr("termsText") ? msg("termsText") : _jsx(TermsMarkdown, {}) }))] })) })), _jsxs("div", Object.assign({ className: "form-group" }, { children: [_jsxs("div", Object.assign({ className: kcClsx("kcLabelWrapperClass") }, { children: [_jsx("input", { type: "checkbox", id: "termsAccepted", name: "termsAccepted", className: kcClsx("kcCheckboxInputClass"), "aria-invalid": messagesPerField.existsError("termsAccepted") }), _jsx("label", Object.assign({ htmlFor: "termsAccepted", className: kcClsx("kcLabelClass") }, { children: msg("acceptTerms") }))] })), messagesPerField.existsError("termsAccepted") && (_jsx("div", Object.assign({ className: kcClsx("kcLabelWrapperClass") }, { children: _jsx("span", Object.assign({ id: "input-error-terms-accepted", className: kcClsx("kcInputErrorMessageClass"), "aria-live": "polite" }, { children: messagesPerField.get("termsAccepted") })) })))] }))] }));
|
20
|
+
}
|
21
|
+
function TermsMarkdown() {
|
22
|
+
const { isDownloadComplete, termsMarkdown, ReactMarkdown } = useTermsMarkdown();
|
23
|
+
if (!isDownloadComplete) {
|
23
24
|
return null;
|
24
25
|
}
|
25
|
-
return
|
26
|
+
return _jsx(ReactMarkdown, { children: termsMarkdown });
|
26
27
|
}
|
27
28
|
//# sourceMappingURL=Register.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Register.js","sourceRoot":"","sources":["../../src/login/pages/Register.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
1
|
+
{"version":3,"file":"Register.js","sourceRoot":"","sources":["../../src/login/pages/Register.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEjC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAC1E,OAAO,EAAE,SAAS,EAAe,MAAM,8BAA8B,CAAC;AAWtE,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,KAAoB;IACjD,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,GAAG,KAAK,CAAC;IAExH,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,GAAG,SAAS,CAAC;IAE1G,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElE,OAAO,CACH,KAAC,QAAQ,kBACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC,EAChC,cAAc,EAAE,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,EACjD,qBAAqB,sBAErB,8BAAM,EAAE,EAAC,kBAAkB,EAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,kBAAkB,EAAE,MAAM,EAAC,MAAM,iBACvG,KAAC,qBAAqB,IAClB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,8BAA8B,EAAE,oBAAoB,EACpD,yBAAyB,EAAE,yBAAyB,GACtD,EACD,uBAAuB,IAAI,KAAC,eAAe,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,GAAI,EAC9G,iBAAiB,IAAI,CAClB,4BAAK,SAAS,EAAC,YAAY,gBACvB,4BAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,gBACzC,cAAK,SAAS,EAAC,aAAa,eAAW,SAAS,kBAAe,gBAAgB,GAAQ,IACrF,IACJ,CACT,EACD,6BAAK,SAAS,EAAE,MAAM,CAAC,kBAAkB,CAAC,iBACtC,4BAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,MAAM,CAAC,oBAAoB,CAAC,gBAC7D,4BAAK,SAAS,EAAE,MAAM,CAAC,2BAA2B,CAAC,gBAC/C,yBACI,0BAAG,IAAI,EAAE,GAAG,CAAC,QAAQ,gBAAG,GAAG,CAAC,aAAa,CAAC,IAAK,GAC5C,IACL,IACJ,EACN,4BAAK,EAAE,EAAC,iBAAiB,EAAC,SAAS,EAAE,MAAM,CAAC,oBAAoB,CAAC,gBAC7D,gBACI,QAAQ,EAAE,CAAC,iBAAiB,EAC5B,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,oBAAoB,CAAC,EACtG,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,YAAY,CAAC,GAC7B,IACA,KACJ,KACH,IACA,CACd,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,KAAmH;IACxI,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,gBAAgB,EAAE,GAAG,KAAK,CAAC;IAEjD,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,OAAO,CACH,8BACI,4BAAK,SAAS,EAAC,YAAY,gBACvB,6BAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,iBACxC,GAAG,CAAC,YAAY,CAAC,EAClB,4BAAK,EAAE,EAAC,4BAA4B,gBAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAC,aAAa,KAAG,IAAO,KACrG,IACJ,EACN,6BAAK,SAAS,EAAC,YAAY,iBACvB,6BAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,iBACzC,gBACI,IAAI,EAAC,UAAU,EACf,EAAE,EAAC,eAAe,EAClB,IAAI,EAAC,eAAe,EACpB,SAAS,EAAE,MAAM,CAAC,sBAAsB,CAAC,kBAC3B,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,GAC7D,EACF,8BAAO,OAAO,EAAC,eAAe,EAAC,SAAS,EAAE,MAAM,CAAC,cAAc,CAAC,gBAC3D,GAAG,CAAC,aAAa,CAAC,IACf,KACN,EACL,gBAAgB,CAAC,WAAW,CAAC,eAAe,CAAC,IAAI,CAC9C,4BAAK,SAAS,EAAE,MAAM,CAAC,qBAAqB,CAAC,gBACzC,6BAAM,EAAE,EAAC,4BAA4B,EAAC,SAAS,EAAE,MAAM,CAAC,0BAA0B,CAAC,eAAY,QAAQ,gBAClG,gBAAgB,CAAC,GAAG,CAAC,eAAe,CAAC,IACnC,IACL,CACT,KACC,IACP,CACN,CAAC;AACN,CAAC;AAED,SAAS,aAAa;IAClB,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEhF,IAAI,CAAC,kBAAkB,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAC,aAAa,cAAE,aAAa,GAAiB,CAAC;AAC1D,CAAC"}
|
package/login/pages/Terms.d.ts
CHANGED
package/login/pages/Terms.js
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
2
|
-
import { Markdown } from "../../tools/Markdown";
|
3
2
|
import { getKcClsx } from "../../login/lib/kcClsx";
|
4
3
|
import { useTermsMarkdown } from "../../login/lib/useDownloadTerms";
|
5
4
|
export default function Terms(props) {
|
@@ -9,11 +8,14 @@ export default function Terms(props) {
|
|
9
8
|
classes
|
10
9
|
});
|
11
10
|
const { msg, msgStr } = i18n;
|
12
|
-
const {
|
13
|
-
|
11
|
+
const { url } = kcContext;
|
12
|
+
return (_jsxs(Template, Object.assign({ kcContext: kcContext, i18n: i18n, doUseDefaultCss: doUseDefaultCss, classes: classes, displayMessage: false, headerNode: msg("termsTitle") }, { children: [_jsx("div", Object.assign({ id: "kc-terms-text" }, { children: msgStr("termsText") ? msg("termsText") : _jsx(TermsMarkdown, {}) })), _jsxs("form", Object.assign({ className: "form-actions", action: url.loginAction, method: "POST" }, { children: [_jsx("input", { className: kcClsx("kcButtonClass", "kcButtonClass", "kcButtonClass", "kcButtonPrimaryClass", "kcButtonLargeClass"), name: "accept", id: "kc-accept", type: "submit", value: msgStr("doAccept") }), _jsx("input", { className: kcClsx("kcButtonClass", "kcButtonDefaultClass", "kcButtonLargeClass"), name: "cancel", id: "kc-decline", type: "submit", value: msgStr("doDecline") })] })), _jsx("div", { className: "clearfix" })] })));
|
13
|
+
}
|
14
|
+
function TermsMarkdown() {
|
15
|
+
const { isDownloadComplete, termsMarkdown, ReactMarkdown } = useTermsMarkdown();
|
14
16
|
if (!isDownloadComplete) {
|
15
17
|
return null;
|
16
18
|
}
|
17
|
-
return
|
19
|
+
return _jsx(ReactMarkdown, { children: termsMarkdown });
|
18
20
|
}
|
19
21
|
//# sourceMappingURL=Terms.js.map
|
package/login/pages/Terms.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"Terms.js","sourceRoot":"","sources":["../../src/login/pages/Terms.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,
|
1
|
+
{"version":3,"file":"Terms.js","sourceRoot":"","sources":["../../src/login/pages/Terms.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wCAAwC,CAAC;AAK1E,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,KAAmE;IAC7F,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAEtE,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;QACzB,eAAe;QACf,OAAO;KACV,CAAC,CAAC;IAEH,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE7B,MAAM,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;IAE1B,OAAO,CACH,MAAC,QAAQ,kBACL,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,IAAI,EACV,eAAe,EAAE,eAAe,EAChC,OAAO,EAAE,OAAO,EAChB,cAAc,EAAE,KAAK,EACrB,UAAU,EAAE,GAAG,CAAC,YAAY,CAAC,iBAE7B,4BAAK,EAAE,EAAC,eAAe,gBAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAC,aAAa,KAAG,IAAO,EAC1F,8BAAM,SAAS,EAAC,cAAc,EAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,MAAM,EAAC,MAAM,iBACjE,gBACI,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,EAClH,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,WAAW,EACd,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,UAAU,CAAC,GAC3B,EACF,gBACI,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,sBAAsB,EAAE,oBAAoB,CAAC,EAChF,IAAI,EAAC,QAAQ,EACb,EAAE,EAAC,YAAY,EACf,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,GAC5B,KACC,EACP,cAAK,SAAS,EAAC,UAAU,GAAG,KACrB,CACd,CAAC;AACN,CAAC;AAED,SAAS,aAAa;IAClB,MAAM,EAAE,kBAAkB,EAAE,aAAa,EAAE,aAAa,EAAE,GAAG,gBAAgB,EAAE,CAAC;IAEhF,IAAI,CAAC,kBAAkB,EAAE;QACrB,OAAO,IAAI,CAAC;KACf;IAED,OAAO,KAAC,aAAa,cAAE,aAAa,GAAiB,CAAC;AAC1D,CAAC"}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "keycloakify",
|
3
|
-
"version": "10.0.0-rc.
|
3
|
+
"version": "10.0.0-rc.79",
|
4
4
|
"description": "Create Keycloak themes using React",
|
5
5
|
"repository": {
|
6
6
|
"type": "git",
|
@@ -136,6 +136,9 @@
|
|
136
136
|
"account/i18n/index.d.ts",
|
137
137
|
"account/i18n/index.js",
|
138
138
|
"account/i18n/index.js.map",
|
139
|
+
"account/i18n/useI18n.d.ts",
|
140
|
+
"account/i18n/useI18n.js",
|
141
|
+
"account/i18n/useI18n.js.map",
|
139
142
|
"account/index.d.ts",
|
140
143
|
"account/index.js",
|
141
144
|
"account/index.js.map",
|
@@ -289,6 +292,9 @@
|
|
289
292
|
"login/i18n/index.d.ts",
|
290
293
|
"login/i18n/index.js",
|
291
294
|
"login/i18n/index.js.map",
|
295
|
+
"login/i18n/useI18n.d.ts",
|
296
|
+
"login/i18n/useI18n.js",
|
297
|
+
"login/i18n/useI18n.js.map",
|
292
298
|
"login/index.d.ts",
|
293
299
|
"login/index.js",
|
294
300
|
"login/index.js.map",
|
@@ -444,6 +450,7 @@
|
|
444
450
|
"src/account/i18n/baseMessages/zh-CN.ts",
|
445
451
|
"src/account/i18n/i18n.tsx",
|
446
452
|
"src/account/i18n/index.ts",
|
453
|
+
"src/account/i18n/useI18n.ts",
|
447
454
|
"src/account/index.ts",
|
448
455
|
"src/account/lib/kcClsx.ts",
|
449
456
|
"src/account/pages/Account.tsx",
|
@@ -572,9 +579,10 @@
|
|
572
579
|
"src/login/i18n/baseMessages/zh-CN.ts",
|
573
580
|
"src/login/i18n/i18n.tsx",
|
574
581
|
"src/login/i18n/index.ts",
|
582
|
+
"src/login/i18n/useI18n.ts",
|
575
583
|
"src/login/index.ts",
|
576
584
|
"src/login/lib/kcClsx.ts",
|
577
|
-
"src/login/lib/useDownloadTerms.
|
585
|
+
"src/login/lib/useDownloadTerms.tsx",
|
578
586
|
"src/login/lib/useUserProfileForm.tsx",
|
579
587
|
"src/login/pages/Code.tsx",
|
580
588
|
"src/login/pages/DeleteAccountConfirm.tsx",
|
@@ -616,7 +624,6 @@
|
|
616
624
|
"src/tools/ExtractAfterStartingWith.ts",
|
617
625
|
"src/tools/HTMLElement.prototype.prepend.ts",
|
618
626
|
"src/tools/LazyOrNot.ts",
|
619
|
-
"src/tools/Markdown.ts",
|
620
627
|
"src/tools/Object.fromEntries.ts",
|
621
628
|
"src/tools/StatefulObservable/README.md",
|
622
629
|
"src/tools/StatefulObservable/StatefulObservable.ts",
|
@@ -632,6 +639,7 @@
|
|
632
639
|
"src/tools/emailRegExp.ts",
|
633
640
|
"src/tools/formatNumber.ts",
|
634
641
|
"src/tools/pathBasename.ts",
|
642
|
+
"src/tools/react-markdown.ts",
|
635
643
|
"src/tools/structuredCloneButFunctions.ts",
|
636
644
|
"src/tools/useConst.ts",
|
637
645
|
"src/tools/useConstCallback.ts",
|
@@ -699,9 +707,6 @@
|
|
699
707
|
"tools/LazyOrNot.d.ts",
|
700
708
|
"tools/LazyOrNot.js",
|
701
709
|
"tools/LazyOrNot.js.map",
|
702
|
-
"tools/Markdown.d.ts",
|
703
|
-
"tools/Markdown.js",
|
704
|
-
"tools/Markdown.js.map",
|
705
710
|
"tools/Object.fromEntries.d.ts",
|
706
711
|
"tools/Object.fromEntries.js",
|
707
712
|
"tools/Object.fromEntries.js.map",
|
@@ -744,6 +749,9 @@
|
|
744
749
|
"tools/pathBasename.d.ts",
|
745
750
|
"tools/pathBasename.js",
|
746
751
|
"tools/pathBasename.js.map",
|
752
|
+
"tools/react-markdown.d.ts",
|
753
|
+
"tools/react-markdown.js",
|
754
|
+
"tools/react-markdown.js.map",
|
747
755
|
"tools/structuredCloneButFunctions.d.ts",
|
748
756
|
"tools/structuredCloneButFunctions.js",
|
749
757
|
"tools/structuredCloneButFunctions.js.map",
|
@@ -824,7 +832,7 @@
|
|
824
832
|
"react": "*"
|
825
833
|
},
|
826
834
|
"dependencies": {
|
827
|
-
"react-markdown": "^
|
835
|
+
"react-markdown": "^9.0.1",
|
828
836
|
"tsafe": "^1.6.6"
|
829
837
|
},
|
830
838
|
"devDependencies": {
|
package/src/account/Template.tsx
CHANGED
@@ -13,7 +13,7 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
|
|
13
13
|
|
14
14
|
const { kcClsx } = getKcClsx({ doUseDefaultCss, classes });
|
15
15
|
|
16
|
-
const { msg, msgStr,
|
16
|
+
const { msg, msgStr, getChangeLocaleUrl, labelBySupportedLanguageTag, currentLanguageTag } = i18n;
|
17
17
|
|
18
18
|
const { locale, url, features, realm, message, referrer } = kcContext;
|
19
19
|
|
@@ -79,7 +79,7 @@ export default function Template(props: TemplateProps<KcContext, I18n>) {
|
|
79
79
|
<ul>
|
80
80
|
{locale.supported.map(({ languageTag }) => (
|
81
81
|
<li key={languageTag} className="kc-dropdown-item">
|
82
|
-
<a href={
|
82
|
+
<a href={getChangeLocaleUrl(languageTag)}>{labelBySupportedLanguageTag[languageTag]}</a>
|
83
83
|
</li>
|
84
84
|
))}
|
85
85
|
</ul>
|
@@ -1,10 +1,8 @@
|
|
1
1
|
import "keycloakify/tools/Object.fromEntries";
|
2
|
-
import { useEffect, useState } from "react";
|
3
2
|
import { assert } from "tsafe/assert";
|
4
3
|
import messages_fallbackLanguage from "./baseMessages/en";
|
5
4
|
import { getMessages } from "./baseMessages";
|
6
5
|
import type { KcContext } from "../KcContext";
|
7
|
-
import { Reflect } from "tsafe/Reflect";
|
8
6
|
|
9
7
|
export const fallbackLanguageTag = "en";
|
10
8
|
|
@@ -30,7 +28,7 @@ export type GenericI18n<MessageKey extends string> = {
|
|
30
28
|
* Redirect to this url to change the language.
|
31
29
|
* After reload currentLanguageTag === newLanguageTag
|
32
30
|
*/
|
33
|
-
|
31
|
+
getChangeLocaleUrl: (newLanguageTag: string) => string;
|
34
32
|
/**
|
35
33
|
* e.g. "en" => "English", "fr" => "Français", ...
|
36
34
|
*
|
@@ -88,7 +86,9 @@ export type GenericI18n<MessageKey extends string> = {
|
|
88
86
|
isFetchingTranslations: boolean;
|
89
87
|
};
|
90
88
|
|
91
|
-
function createGetI18n<ExtraMessageKey extends string = never>(
|
89
|
+
export function createGetI18n<ExtraMessageKey extends string = never>(messageBundle: {
|
90
|
+
[languageTag: string]: { [key in ExtraMessageKey]: string };
|
91
|
+
}) {
|
92
92
|
type I18n = GenericI18n<MessageKey | ExtraMessageKey>;
|
93
93
|
|
94
94
|
type Result = { i18n: I18n; prI18n_currentLanguage: Promise<I18n> | undefined };
|
@@ -108,9 +108,9 @@ function createGetI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
|
108
108
|
return cachedResult;
|
109
109
|
}
|
110
110
|
|
111
|
-
const partialI18n: Pick<I18n, "currentLanguageTag" | "
|
111
|
+
const partialI18n: Pick<I18n, "currentLanguageTag" | "getChangeLocaleUrl" | "labelBySupportedLanguageTag"> = {
|
112
112
|
currentLanguageTag: kcContext.locale?.currentLanguageTag ?? fallbackLanguageTag,
|
113
|
-
|
113
|
+
getChangeLocaleUrl: newLanguageTag => {
|
114
114
|
const { locale } = kcContext;
|
115
115
|
|
116
116
|
assert(locale !== undefined, "Internationalization not enabled");
|
@@ -126,8 +126,8 @@ function createGetI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
|
126
126
|
|
127
127
|
const { createI18nTranslationFunctions } = createI18nTranslationFunctionsFactory<MessageKey, ExtraMessageKey>({
|
128
128
|
messages_fallbackLanguage,
|
129
|
-
|
130
|
-
|
129
|
+
messageBundle_fallbackLanguage: messageBundle[fallbackLanguageTag],
|
130
|
+
messageBundle_currentLanguage: messageBundle[partialI18n.currentLanguageTag]
|
131
131
|
});
|
132
132
|
|
133
133
|
const isCurrentLanguageFallbackLanguage = partialI18n.currentLanguageTag === fallbackLanguageTag;
|
@@ -135,17 +135,19 @@ function createGetI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
|
135
135
|
const result: Result = {
|
136
136
|
i18n: {
|
137
137
|
...partialI18n,
|
138
|
-
...createI18nTranslationFunctions({
|
138
|
+
...createI18nTranslationFunctions({
|
139
|
+
messages_currentLanguage: isCurrentLanguageFallbackLanguage ? messages_fallbackLanguage : undefined
|
140
|
+
}),
|
139
141
|
isFetchingTranslations: !isCurrentLanguageFallbackLanguage
|
140
142
|
},
|
141
143
|
prI18n_currentLanguage: isCurrentLanguageFallbackLanguage
|
142
144
|
? undefined
|
143
145
|
: (async () => {
|
144
|
-
const
|
146
|
+
const messages_currentLanguage = await getMessages(partialI18n.currentLanguageTag);
|
145
147
|
|
146
148
|
const i18n_currentLanguage: I18n = {
|
147
149
|
...partialI18n,
|
148
|
-
...createI18nTranslationFunctions({
|
150
|
+
...createI18nTranslationFunctions({ messages_currentLanguage }),
|
149
151
|
isFetchingTranslations: false
|
150
152
|
};
|
151
153
|
|
@@ -168,66 +170,30 @@ function createGetI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
|
168
170
|
return { getI18n };
|
169
171
|
}
|
170
172
|
|
171
|
-
export function createUseI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
172
|
-
[languageTag: string]: { [key in ExtraMessageKey]: string };
|
173
|
-
}) {
|
174
|
-
type I18n = GenericI18n<MessageKey | ExtraMessageKey>;
|
175
|
-
|
176
|
-
const { getI18n } = createGetI18n(extraMessages);
|
177
|
-
|
178
|
-
function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } {
|
179
|
-
const { kcContext } = params;
|
180
|
-
|
181
|
-
const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
|
182
|
-
|
183
|
-
const [i18n_toReturn, setI18n_toReturn] = useState<I18n>(i18n);
|
184
|
-
|
185
|
-
useEffect(() => {
|
186
|
-
let isActive = true;
|
187
|
-
|
188
|
-
prI18n_currentLanguage?.then(i18n => {
|
189
|
-
if (!isActive) {
|
190
|
-
return;
|
191
|
-
}
|
192
|
-
|
193
|
-
setI18n_toReturn(i18n);
|
194
|
-
});
|
195
|
-
|
196
|
-
return () => {
|
197
|
-
isActive = false;
|
198
|
-
};
|
199
|
-
}, []);
|
200
|
-
|
201
|
-
return { i18n: i18n_toReturn };
|
202
|
-
}
|
203
|
-
|
204
|
-
return { useI18n, ofTypeI18n: Reflect<I18n>() };
|
205
|
-
}
|
206
|
-
|
207
173
|
function createI18nTranslationFunctionsFactory<MessageKey extends string, ExtraMessageKey extends string>(params: {
|
208
174
|
messages_fallbackLanguage: Record<MessageKey, string>;
|
209
|
-
|
210
|
-
|
175
|
+
messageBundle_fallbackLanguage: Record<ExtraMessageKey, string> | undefined;
|
176
|
+
messageBundle_currentLanguage: Partial<Record<ExtraMessageKey, string>> | undefined;
|
211
177
|
}) {
|
212
|
-
const {
|
178
|
+
const { messageBundle_currentLanguage } = params;
|
213
179
|
|
214
180
|
const messages_fallbackLanguage = {
|
215
181
|
...params.messages_fallbackLanguage,
|
216
|
-
...params.
|
182
|
+
...params.messageBundle_fallbackLanguage
|
217
183
|
};
|
218
184
|
|
219
185
|
function createI18nTranslationFunctions(params: {
|
220
|
-
|
186
|
+
messages_currentLanguage: Partial<Record<MessageKey, string>> | undefined;
|
221
187
|
}): Pick<GenericI18n<MessageKey | ExtraMessageKey>, "msg" | "msgStr" | "advancedMsg" | "advancedMsgStr"> {
|
222
|
-
const
|
223
|
-
...params.
|
224
|
-
...
|
188
|
+
const messages_currentLanguage = {
|
189
|
+
...params.messages_currentLanguage,
|
190
|
+
...messageBundle_currentLanguage
|
225
191
|
};
|
226
192
|
|
227
193
|
function resolveMsg(props: { key: string; args: (string | undefined)[]; doRenderAsHtml: boolean }): string | JSX.Element | undefined {
|
228
194
|
const { key, args, doRenderAsHtml } = props;
|
229
195
|
|
230
|
-
const messageOrUndefined: string | undefined = (
|
196
|
+
const messageOrUndefined: string | undefined = (messages_currentLanguage as any)[key] ?? (messages_fallbackLanguage as any)[key];
|
231
197
|
|
232
198
|
if (messageOrUndefined === undefined) {
|
233
199
|
return undefined;
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import type { GenericI18n, MessageKey, KcContextLike } from "./i18n";
|
2
2
|
export type { MessageKey, KcContextLike };
|
3
3
|
export type I18n = GenericI18n<MessageKey>;
|
4
|
-
export { createUseI18n } from "./
|
4
|
+
export { createUseI18n } from "./useI18n";
|
5
5
|
export { fallbackLanguageTag } from "./i18n";
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import { useEffect, useState } from "react";
|
2
|
+
import {
|
3
|
+
createGetI18n,
|
4
|
+
type GenericI18n,
|
5
|
+
type MessageKey,
|
6
|
+
type KcContextLike
|
7
|
+
} from "./i18n";
|
8
|
+
import { Reflect } from "tsafe/Reflect";
|
9
|
+
|
10
|
+
export function createUseI18n<ExtraMessageKey extends string = never>(extraMessages: {
|
11
|
+
[languageTag: string]: { [key in ExtraMessageKey]: string };
|
12
|
+
}) {
|
13
|
+
type I18n = GenericI18n<MessageKey | ExtraMessageKey>;
|
14
|
+
|
15
|
+
const { getI18n } = createGetI18n(extraMessages);
|
16
|
+
|
17
|
+
function useI18n(params: { kcContext: KcContextLike }): { i18n: I18n } {
|
18
|
+
const { kcContext } = params;
|
19
|
+
|
20
|
+
const { i18n, prI18n_currentLanguage } = getI18n({ kcContext });
|
21
|
+
|
22
|
+
const [i18n_toReturn, setI18n_toReturn] = useState<I18n>(i18n);
|
23
|
+
|
24
|
+
useEffect(() => {
|
25
|
+
let isActive = true;
|
26
|
+
|
27
|
+
prI18n_currentLanguage?.then(i18n => {
|
28
|
+
if (!isActive) {
|
29
|
+
return;
|
30
|
+
}
|
31
|
+
|
32
|
+
setI18n_toReturn(i18n);
|
33
|
+
});
|
34
|
+
|
35
|
+
return () => {
|
36
|
+
isActive = false;
|
37
|
+
};
|
38
|
+
}, []);
|
39
|
+
|
40
|
+
return { i18n: i18n_toReturn };
|
41
|
+
}
|
42
|
+
|
43
|
+
return { useI18n, ofTypeI18n: Reflect<I18n>() };
|
44
|
+
}
|
@@ -8,8 +8,7 @@ import { assert } from "tsafe/assert";
|
|
8
8
|
import {
|
9
9
|
type ThemeType,
|
10
10
|
basenameOfTheKeycloakifyResourcesDir,
|
11
|
-
resources_common
|
12
|
-
nameOfTheLocalizationRealmOverridesUserProfileProperty
|
11
|
+
resources_common
|
13
12
|
} from "../../shared/constants";
|
14
13
|
import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
|
15
14
|
|
@@ -119,10 +118,6 @@ export function generateFtlFilesCodeFactory(params: {
|
|
119
118
|
.replace("KEYCLOAKIFY_THEME_TYPE_dExKd3xEdr", themeType)
|
120
119
|
.replace("KEYCLOAKIFY_THEME_NAME_cXxKd3xEer", themeName)
|
121
120
|
.replace("RESOURCES_COMMON_cLsLsMrtDkpVv", resources_common)
|
122
|
-
.replace(
|
123
|
-
"lOCALIZATION_REALM_OVERRIDES_USER_PROFILE_PROPERTY_KEY_aaGLsPgGIdeeX",
|
124
|
-
nameOfTheLocalizationRealmOverridesUserProfileProperty
|
125
|
-
)
|
126
121
|
.replace(
|
127
122
|
"USER_DEFINED_EXCLUSIONS_eKsaY4ZsZ4eMr2",
|
128
123
|
buildContext.kcContextExclusionsFtlCode ?? ""
|
@@ -33,8 +33,9 @@ kcContext.pageId = "${pageId}";
|
|
33
33
|
if( kcContext.url && kcContext.url.resourcesPath ){
|
34
34
|
kcContext.url.resourcesCommonPath = kcContext.url.resourcesPath + "/" + "RESOURCES_COMMON_cLsLsMrtDkpVv";
|
35
35
|
}
|
36
|
+
kcContext["x-keycloakify"] = {};
|
36
37
|
<#if profile?? && profile.attributes??>
|
37
|
-
kcContext.
|
38
|
+
kcContext["x-keycloakify"].realmMessageBundleUserProfile = {
|
38
39
|
<#list profile.attributes as attribute>
|
39
40
|
<#if attribute.annotations?? && attribute.displayName??>
|
40
41
|
"${attribute.displayName}": decodeHtmlEntities("${advancedMsg(attribute.displayName)?js_string}"),
|
@@ -61,6 +62,9 @@ if( kcContext.url && kcContext.url.resourcesPath ){
|
|
61
62
|
</#list>
|
62
63
|
};
|
63
64
|
</#if>
|
65
|
+
<#if pageId == "terms.ftl" || termsAcceptanceRequired?? && termsAcceptanceRequired>
|
66
|
+
kcContext["x-keycloakify"].realmMessageBundleTermsText= decodeHtmlEntities("${msg("termsText")?js_string}");
|
67
|
+
</#if>
|
64
68
|
attributes_to_attributesByName: {
|
65
69
|
if( !kcContext.profile ){
|
66
70
|
break attributes_to_attributesByName;
|
@@ -198,6 +202,9 @@ function decodeHtmlEntities(htmlStr){
|
|
198
202
|
) || (
|
199
203
|
key == "execution" &&
|
200
204
|
are_same_path(path, [])
|
205
|
+
) || (
|
206
|
+
key == "entity" &&
|
207
|
+
are_same_path(path, ["user"])
|
201
208
|
)
|
202
209
|
>
|
203
210
|
<#-- <#local out_seq += ["/*" + path?join(".") + "." + key + " excluded*/"]> -->
|
@@ -9,6 +9,8 @@ import * as babelParser from "@babel/parser";
|
|
9
9
|
import babelGenerate from "@babel/generator";
|
10
10
|
import * as babelTypes from "@babel/types";
|
11
11
|
import { escapeStringForPropertiesFile } from "../../tools/escapeStringForPropertiesFile";
|
12
|
+
import { getThisCodebaseRootDirPath } from "../../tools/getThisCodebaseRootDirPath";
|
13
|
+
import * as fs from "fs";
|
12
14
|
|
13
15
|
export function generateMessageProperties(params: {
|
14
16
|
themeSrcDirPath: string;
|
@@ -39,10 +41,6 @@ export function generateMessageProperties(params: {
|
|
39
41
|
readFileSync(file).toString("utf8").includes("createUseI18n")
|
40
42
|
);
|
41
43
|
|
42
|
-
if (files.length === 0) {
|
43
|
-
return [];
|
44
|
-
}
|
45
|
-
|
46
44
|
const extraMessages = files
|
47
45
|
.map(file => {
|
48
46
|
const root = recast.parse(readFileSync(file).toString("utf8"), {
|
@@ -99,15 +97,28 @@ export function generateMessageProperties(params: {
|
|
99
97
|
return extraMessages;
|
100
98
|
});
|
101
99
|
|
102
|
-
const languageTags =
|
103
|
-
.map(extraMessage => Object.keys(extraMessage))
|
104
|
-
|
105
|
-
|
100
|
+
const languageTags = [
|
101
|
+
...extraMessages.map(extraMessage => Object.keys(extraMessage)).flat(),
|
102
|
+
...fs
|
103
|
+
.readdirSync(
|
104
|
+
pathJoin(
|
105
|
+
getThisCodebaseRootDirPath(),
|
106
|
+
"src",
|
107
|
+
themeType,
|
108
|
+
"i18n",
|
109
|
+
"baseMessages"
|
110
|
+
)
|
111
|
+
)
|
112
|
+
.filter(baseName => baseName !== "index.ts")
|
113
|
+
.map(baseName => baseName.replace(/\.ts$/, ""))
|
114
|
+
].reduce(...removeDuplicates<string>());
|
106
115
|
|
107
116
|
const keyValueMapByLanguageTag: Record<string, Record<string, string>> = {};
|
108
117
|
|
109
118
|
for (const languageTag of languageTags) {
|
110
|
-
const keyValueMap: Record<string, string> = {
|
119
|
+
const keyValueMap: Record<string, string> = {
|
120
|
+
termsText: ""
|
121
|
+
};
|
111
122
|
|
112
123
|
for (const extraMessage of extraMessages) {
|
113
124
|
const keyValueMap_i = extraMessage[languageTag];
|
@@ -152,14 +163,9 @@ export function generateMessageProperties(params: {
|
|
152
163
|
|
153
164
|
out.push({
|
154
165
|
languageTag,
|
155
|
-
propertiesFileSource: [
|
156
|
-
"
|
157
|
-
|
158
|
-
"parent=base",
|
159
|
-
"",
|
160
|
-
propertiesFileSource,
|
161
|
-
""
|
162
|
-
].join("\n")
|
166
|
+
propertiesFileSource: ["", "parent=base", "", propertiesFileSource, ""].join(
|
167
|
+
"\n"
|
168
|
+
)
|
163
169
|
});
|
164
170
|
}
|
165
171
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
export const nameOfTheLocalizationRealmOverridesUserProfileProperty =
|
2
|
-
"__localizationRealmOverridesUserProfile";
|
3
1
|
export const keycloak_resources = "keycloak-resources";
|
4
2
|
export const resources_common = "resources-common";
|
5
3
|
export const lastKeycloakVersionWithAccountV1 = "21.1.2";
|