@lionrapid/core 0.3.1 → 0.4.0
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/dist/browser/attribute-extractor.d.ts +54 -0
- package/dist/browser/attribute-extractor.d.ts.map +1 -0
- package/dist/browser/attribute-extractor.js +155 -0
- package/dist/browser/attribute-extractor.js.map +1 -0
- package/dist/browser/auto-init.d.ts +4 -0
- package/dist/browser/auto-init.d.ts.map +1 -1
- package/dist/browser/auto-init.js +6 -2
- package/dist/browser/auto-init.js.map +1 -1
- package/dist/browser/auto-translator.d.ts +23 -0
- package/dist/browser/auto-translator.d.ts.map +1 -1
- package/dist/browser/auto-translator.js +90 -5
- package/dist/browser/auto-translator.js.map +1 -1
- package/dist/browser/block-extractor.d.ts +8 -0
- package/dist/browser/block-extractor.d.ts.map +1 -1
- package/dist/browser/block-extractor.js +77 -0
- package/dist/browser/block-extractor.js.map +1 -1
- package/dist/browser/editor/editor-api.d.ts +22 -1
- package/dist/browser/editor/editor-api.d.ts.map +1 -1
- package/dist/browser/editor/editor-api.js +54 -19
- package/dist/browser/editor/editor-api.js.map +1 -1
- package/dist/browser/editor/editor-init.js +72 -3
- package/dist/browser/editor/editor-init.js.map +1 -1
- package/dist/browser/editor/editor-styles.d.ts +1 -1
- package/dist/browser/editor/editor-styles.d.ts.map +1 -1
- package/dist/browser/editor/editor-styles.js +38 -1
- package/dist/browser/editor/editor-styles.js.map +1 -1
- package/dist/browser/editor/inspector.d.ts +8 -0
- package/dist/browser/editor/inspector.d.ts.map +1 -1
- package/dist/browser/editor/inspector.js +14 -0
- package/dist/browser/editor/inspector.js.map +1 -1
- package/dist/browser/editor/live-preview.d.ts +1 -1
- package/dist/browser/editor/live-preview.d.ts.map +1 -1
- package/dist/browser/editor/live-preview.js +27 -16
- package/dist/browser/editor/live-preview.js.map +1 -1
- package/dist/browser/editor/locale-url.d.ts +18 -0
- package/dist/browser/editor/locale-url.d.ts.map +1 -0
- package/dist/browser/editor/locale-url.js +37 -0
- package/dist/browser/editor/locale-url.js.map +1 -0
- package/dist/browser/editor/sidebar.d.ts +6 -0
- package/dist/browser/editor/sidebar.d.ts.map +1 -1
- package/dist/browser/editor/sidebar.js +133 -4
- package/dist/browser/editor/sidebar.js.map +1 -1
- package/dist/browser/editor/toolbar.d.ts +8 -1
- package/dist/browser/editor/toolbar.d.ts.map +1 -1
- package/dist/browser/editor/toolbar.js +49 -4
- package/dist/browser/editor/toolbar.js.map +1 -1
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -0
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/lionrapid.auto.dev.js +320 -12
- package/dist/browser/lionrapid.auto.dev.js.map +4 -4
- package/dist/browser/lionrapid.auto.js +320 -12
- package/dist/browser/lionrapid.auto.js.map +4 -4
- package/dist/browser/lionrapid.auto.min.js +3 -3
- package/dist/browser/lionrapid.auto.min.js.map +4 -4
- package/dist/browser/lionrapid.editor.js +371 -36
- package/dist/browser/lionrapid.editor.js.map +3 -3
- package/dist/browser/lionrapid.editor.min.js +41 -4
- package/dist/browser/lionrapid.editor.min.js.map +4 -4
- package/dist/browser/lionrapid.esm.js +36 -2
- package/dist/browser/lionrapid.esm.js.map +2 -2
- package/dist/browser/lionrapid.esm.min.js +2 -2
- package/dist/browser/lionrapid.esm.min.js.map +3 -3
- package/dist/browser/lionrapid.iife.dev.js +36 -2
- package/dist/browser/lionrapid.iife.dev.js.map +2 -2
- package/dist/browser/lionrapid.iife.js +36 -2
- package/dist/browser/lionrapid.iife.js.map +2 -2
- package/dist/browser/lionrapid.iife.min.js +2 -2
- package/dist/browser/lionrapid.iife.min.js.map +3 -3
- package/dist/browser/lionrapid.umd.js +36 -2
- package/dist/browser/lionrapid.umd.js.map +2 -2
- package/dist/browser/lionrapid.umd.min.js +2 -2
- package/dist/browser/lionrapid.umd.min.js.map +3 -3
- package/dist/browser/md5.d.ts +3 -2
- package/dist/browser/md5.d.ts.map +1 -1
- package/dist/browser/md5.js +41 -6
- package/dist/browser/md5.js.map +1 -1
- package/dist/content/parser/MarkupParser.d.ts +0 -10
- package/dist/content/parser/MarkupParser.d.ts.map +1 -1
- package/dist/content/parser/MarkupParser.js +45 -3
- package/dist/content/parser/MarkupParser.js.map +1 -1
- package/dist/content/types.d.ts +30 -0
- package/dist/content/types.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute Extractor
|
|
3
|
+
*
|
|
4
|
+
* Finds translatable HTML attribute values in the DOM and parses each
|
|
5
|
+
* into an AttributeUnit. Pairs with BlockExtractor (text-content side)
|
|
6
|
+
* to cover everything user-visible:
|
|
7
|
+
*
|
|
8
|
+
* - <img alt>, <area alt>, <input type="image" alt>
|
|
9
|
+
* - any element [title]
|
|
10
|
+
* - <input placeholder>, <textarea placeholder>
|
|
11
|
+
* - <meta name="description" content="...">
|
|
12
|
+
* - <input type="submit|button|reset" value>
|
|
13
|
+
*
|
|
14
|
+
* Cross-stack parity: produces the same auto_ key as BlockExtractor for
|
|
15
|
+
* the same trimmed text — md5(text.trim()) prefix — so a button labelled
|
|
16
|
+
* "Submit" and a paragraph "Submit" collide on key (intentional reuse).
|
|
17
|
+
*
|
|
18
|
+
* `<input type="text" value="...">` is deliberately excluded because
|
|
19
|
+
* `value` on a plain text input is user data, not UI copy, and would
|
|
20
|
+
* corrupt form state if treated as translatable.
|
|
21
|
+
*/
|
|
22
|
+
import type { AttributeUnit } from '../content/types.js';
|
|
23
|
+
import { type ExcludePatterns } from './exclude-filter.js';
|
|
24
|
+
export interface ExtractedAttribute {
|
|
25
|
+
/** Live element carrying the attribute */
|
|
26
|
+
element: Element;
|
|
27
|
+
/** HTML attribute name (e.g. `alt`, `content`) */
|
|
28
|
+
attrName: string;
|
|
29
|
+
/** Translatable payload */
|
|
30
|
+
unit: AttributeUnit;
|
|
31
|
+
/** auto_ key or server-stamped key */
|
|
32
|
+
key: string;
|
|
33
|
+
}
|
|
34
|
+
export declare class AttributeExtractor {
|
|
35
|
+
private excludeFilter;
|
|
36
|
+
private excludeSelectors;
|
|
37
|
+
constructor(excludePatterns?: Partial<ExcludePatterns>, excludeSelectors?: string[], minTextLength?: number);
|
|
38
|
+
/**
|
|
39
|
+
* Walk the DOM under `root` and return every translatable attribute.
|
|
40
|
+
*
|
|
41
|
+
* @param root Element or Document to scan
|
|
42
|
+
* @param includeStamped When true, elements already carrying
|
|
43
|
+
* `data-lr-attr-{name}` are returned anyway —
|
|
44
|
+
* the editor uses this to surface server-handled
|
|
45
|
+
* attributes for inspection. The runtime keeps
|
|
46
|
+
* the default `false` so it doesn't re-extract
|
|
47
|
+
* what the server already keyed.
|
|
48
|
+
*/
|
|
49
|
+
extract(root: Element | Document, includeStamped?: boolean): ExtractedAttribute[];
|
|
50
|
+
private isInsideSkipTag;
|
|
51
|
+
private hasSkipAncestor;
|
|
52
|
+
private matchesExcludeSelector;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=attribute-extractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-extractor.d.ts","sourceRoot":"","sources":["../../src/browser/attribute-extractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAiB,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAyD1E,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,IAAI,EAAE,aAAa,CAAC;IACpB,sCAAsC;IACtC,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAW;gBAGjC,eAAe,GAAE,OAAO,CAAC,eAAe,CAAM,EAC9C,gBAAgB,GAAE,MAAM,EAAO,EAC/B,aAAa,SAAI;IAMnB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,cAAc,UAAQ,GAAG,kBAAkB,EAAE;IA2C/E,OAAO,CAAC,eAAe;IASvB,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,sBAAsB;CAY/B"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attribute Extractor
|
|
3
|
+
*
|
|
4
|
+
* Finds translatable HTML attribute values in the DOM and parses each
|
|
5
|
+
* into an AttributeUnit. Pairs with BlockExtractor (text-content side)
|
|
6
|
+
* to cover everything user-visible:
|
|
7
|
+
*
|
|
8
|
+
* - <img alt>, <area alt>, <input type="image" alt>
|
|
9
|
+
* - any element [title]
|
|
10
|
+
* - <input placeholder>, <textarea placeholder>
|
|
11
|
+
* - <meta name="description" content="...">
|
|
12
|
+
* - <input type="submit|button|reset" value>
|
|
13
|
+
*
|
|
14
|
+
* Cross-stack parity: produces the same auto_ key as BlockExtractor for
|
|
15
|
+
* the same trimmed text — md5(text.trim()) prefix — so a button labelled
|
|
16
|
+
* "Submit" and a paragraph "Submit" collide on key (intentional reuse).
|
|
17
|
+
*
|
|
18
|
+
* `<input type="text" value="...">` is deliberately excluded because
|
|
19
|
+
* `value` on a plain text input is user data, not UI copy, and would
|
|
20
|
+
* corrupt form state if treated as translatable.
|
|
21
|
+
*/
|
|
22
|
+
import { ExcludeFilter } from './exclude-filter.js';
|
|
23
|
+
import { generateAutoKey } from './md5.js';
|
|
24
|
+
// Each target has a unique `attr`, so a single element matching multiple
|
|
25
|
+
// targets (e.g. `<input placeholder title>`) yields one ExtractedAttribute
|
|
26
|
+
// per attribute — no cross-target dedup needed.
|
|
27
|
+
const TARGETS = [
|
|
28
|
+
{ selector: 'img[alt], area[alt], input[type="image"][alt]', attr: 'alt', type: 'alt' },
|
|
29
|
+
{ selector: '[title]', attr: 'title', type: 'title' },
|
|
30
|
+
{ selector: 'input[placeholder], textarea[placeholder]', attr: 'placeholder', type: 'placeholder' },
|
|
31
|
+
{ selector: 'meta[name="description"][content]', attr: 'content', type: 'meta-description' },
|
|
32
|
+
{
|
|
33
|
+
selector: 'input[type="submit"][value], input[type="button"][value], input[type="reset"][value]',
|
|
34
|
+
attr: 'value',
|
|
35
|
+
type: 'input-value',
|
|
36
|
+
},
|
|
37
|
+
];
|
|
38
|
+
// Skip the same containers as BlockExtractor — attribute values inside
|
|
39
|
+
// <script>, <style>, etc. are never user-visible UI text.
|
|
40
|
+
const SKIP_TAGS = new Set([
|
|
41
|
+
'SCRIPT',
|
|
42
|
+
'STYLE',
|
|
43
|
+
'CODE',
|
|
44
|
+
'PRE',
|
|
45
|
+
'NOSCRIPT',
|
|
46
|
+
'SVG',
|
|
47
|
+
]);
|
|
48
|
+
// Ancestor attributes that opt the element out of translation. Matches
|
|
49
|
+
// BlockExtractor's contract so authors get one consistent escape hatch.
|
|
50
|
+
const SKIP_ATTRIBUTES = [
|
|
51
|
+
'data-lionrapid-translated',
|
|
52
|
+
'data-lionrapid-client',
|
|
53
|
+
'data-no-translate',
|
|
54
|
+
];
|
|
55
|
+
/**
|
|
56
|
+
* Server-stamped attribute marker — when the edge or PHP layer has already
|
|
57
|
+
* keyed an attribute, the element carries `data-lr-attr-{name}="auto_xxx"`.
|
|
58
|
+
* Client extraction reads this instead of re-hashing, eliminating the same
|
|
59
|
+
* class of cross-stack parity drift `data-lr-block` solves for body text.
|
|
60
|
+
*/
|
|
61
|
+
function stampAttrName(attrName) {
|
|
62
|
+
return `data-lr-attr-${attrName.toLowerCase()}`;
|
|
63
|
+
}
|
|
64
|
+
export class AttributeExtractor {
|
|
65
|
+
excludeFilter;
|
|
66
|
+
excludeSelectors;
|
|
67
|
+
constructor(excludePatterns = {}, excludeSelectors = [], minTextLength = 2) {
|
|
68
|
+
this.excludeFilter = new ExcludeFilter(excludePatterns, minTextLength);
|
|
69
|
+
this.excludeSelectors = excludeSelectors;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Walk the DOM under `root` and return every translatable attribute.
|
|
73
|
+
*
|
|
74
|
+
* @param root Element or Document to scan
|
|
75
|
+
* @param includeStamped When true, elements already carrying
|
|
76
|
+
* `data-lr-attr-{name}` are returned anyway —
|
|
77
|
+
* the editor uses this to surface server-handled
|
|
78
|
+
* attributes for inspection. The runtime keeps
|
|
79
|
+
* the default `false` so it doesn't re-extract
|
|
80
|
+
* what the server already keyed.
|
|
81
|
+
*/
|
|
82
|
+
extract(root, includeStamped = false) {
|
|
83
|
+
const results = [];
|
|
84
|
+
for (const target of TARGETS) {
|
|
85
|
+
const candidates = root.querySelectorAll(target.selector);
|
|
86
|
+
const all = [];
|
|
87
|
+
if (root instanceof Element && root.matches(target.selector)) {
|
|
88
|
+
all.push(root);
|
|
89
|
+
}
|
|
90
|
+
for (let i = 0; i < candidates.length; i++) {
|
|
91
|
+
all.push(candidates[i]);
|
|
92
|
+
}
|
|
93
|
+
for (let i = 0; i < all.length; i++) {
|
|
94
|
+
const el = all[i];
|
|
95
|
+
if (this.isInsideSkipTag(el))
|
|
96
|
+
continue;
|
|
97
|
+
if (this.hasSkipAncestor(el))
|
|
98
|
+
continue;
|
|
99
|
+
if (this.matchesExcludeSelector(el))
|
|
100
|
+
continue;
|
|
101
|
+
if (el.getAttribute('translate') === 'no')
|
|
102
|
+
continue;
|
|
103
|
+
const rawValue = el.getAttribute(target.attr);
|
|
104
|
+
if (rawValue === null)
|
|
105
|
+
continue;
|
|
106
|
+
const trimmed = rawValue.trim();
|
|
107
|
+
if (this.excludeFilter.shouldExclude(trimmed))
|
|
108
|
+
continue;
|
|
109
|
+
const stampName = stampAttrName(target.attr);
|
|
110
|
+
const stamped = el.getAttribute(stampName);
|
|
111
|
+
if (!includeStamped && stamped) {
|
|
112
|
+
continue;
|
|
113
|
+
}
|
|
114
|
+
const unit = { text: rawValue, type: target.type };
|
|
115
|
+
const key = stamped ?? generateAutoKey(rawValue);
|
|
116
|
+
results.push({ element: el, attrName: target.attr, unit, key });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return results;
|
|
120
|
+
}
|
|
121
|
+
isInsideSkipTag(element) {
|
|
122
|
+
let current = element.parentElement;
|
|
123
|
+
while (current) {
|
|
124
|
+
if (SKIP_TAGS.has(current.tagName))
|
|
125
|
+
return true;
|
|
126
|
+
current = current.parentElement;
|
|
127
|
+
}
|
|
128
|
+
return false;
|
|
129
|
+
}
|
|
130
|
+
hasSkipAncestor(element) {
|
|
131
|
+
let current = element;
|
|
132
|
+
while (current) {
|
|
133
|
+
for (const attr of SKIP_ATTRIBUTES) {
|
|
134
|
+
if (current.hasAttribute(attr))
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
current = current.parentElement;
|
|
138
|
+
}
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
matchesExcludeSelector(element) {
|
|
142
|
+
for (const selector of this.excludeSelectors) {
|
|
143
|
+
try {
|
|
144
|
+
if (element.matches(selector) || element.closest(selector)) {
|
|
145
|
+
return true;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
// Invalid selector — skip silently, same as BlockExtractor.
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return false;
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=attribute-extractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attribute-extractor.js","sourceRoot":"","sources":["../../src/browser/attribute-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,10 @@ export interface AutoInitConfig {
|
|
|
27
27
|
switcherShowFlags?: boolean;
|
|
28
28
|
switcherShowNames?: boolean;
|
|
29
29
|
switcherCustomCss?: string;
|
|
30
|
+
/** Override for the visual editor bundle URL. Defaults to the public CDN.
|
|
31
|
+
* Self-hosted hosts (e.g. the WordPress plugin) point this at their own
|
|
32
|
+
* vendored copy so the editor is version-locked to the host, not the CDN. */
|
|
33
|
+
editorCdnUrl?: string;
|
|
30
34
|
}
|
|
31
35
|
declare global {
|
|
32
36
|
interface Window {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-init.d.ts","sourceRoot":"","sources":["../../src/browser/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-init.d.ts","sourceRoot":"","sources":["../../src/browser/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAI1D,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,cAAc,CAAC;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;kFAE8E;IAC9E,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,SAAS,EAAE,iBAAiB,GAAG,SAAS,CAAC;QACzC,iBAAiB,CAAC,EAAE,cAAc,CAAC;KACpC;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACpF,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC;IACxF,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAClD,gBAAgB,EAAE,MAAM,MAAM,CAAC;IAC/B,EAAE,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,KAAK,IAAI,CAAC;IAClE,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED;;GAEG;AACH,iBAAS,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,cAAc,CAwC9D;AAqCD;;GAEG;AACH,iBAAe,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAkOvC;AAKD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -43,6 +43,7 @@ function parseConfig(script) {
|
|
|
43
43
|
const switcherShowFlags = script.dataset.switcherShowFlags !== 'false';
|
|
44
44
|
const switcherShowNames = script.dataset.switcherShowNames === 'true';
|
|
45
45
|
const switcherCustomCss = script.dataset.switcherCustomCss || undefined;
|
|
46
|
+
const editorCdnUrl = script.dataset.editorCdn || undefined;
|
|
46
47
|
return {
|
|
47
48
|
apiKey,
|
|
48
49
|
baseUrl,
|
|
@@ -57,6 +58,7 @@ function parseConfig(script) {
|
|
|
57
58
|
switcherShowFlags,
|
|
58
59
|
switcherShowNames,
|
|
59
60
|
switcherCustomCss,
|
|
61
|
+
editorCdnUrl,
|
|
60
62
|
};
|
|
61
63
|
}
|
|
62
64
|
/**
|
|
@@ -276,9 +278,11 @@ async function autoInit() {
|
|
|
276
278
|
languageSwitcher,
|
|
277
279
|
};
|
|
278
280
|
window.LionRapid = instance;
|
|
279
|
-
// Detect editor mode (
|
|
281
|
+
// Detect editor mode (snippet case). Edge proxy and WordPress inject the
|
|
282
|
+
// editor server-side, so skip if either kind of editor script is already
|
|
283
|
+
// present to avoid double-loading.
|
|
280
284
|
const editorParam = new URLSearchParams(window.location.search).get('__lr_editor');
|
|
281
|
-
if (editorParam && !document.querySelector('script[data-grant]')) {
|
|
285
|
+
if (editorParam && !document.querySelector('script[data-grant], script[data-lr-editor]')) {
|
|
282
286
|
const editorScript = document.createElement('script');
|
|
283
287
|
editorScript.src = config.editorCdnUrl
|
|
284
288
|
|| 'https://cdn.lionrapid.com/lionrapid.editor.min.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-init.js","sourceRoot":"","sources":["../../src/browser/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-init.js","sourceRoot":"","sources":["../../src/browser/auto-init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACxE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC1E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAC9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAyC/E;;GAEG;AACH,SAAS,WAAW,CAAC,MAAyB;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;IAC3C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,2BAA2B,CAAC;IACtE,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,aAAa,IAAI,IAAI,CAAC;IAC3D,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;IACxD,MAAM,SAAS,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,aAAa,CAAC;SAC1D,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SACpD,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,MAAM,CAAC;IACxD,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAA2B,CAAC;IAC1G,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;QAClF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ;QACzB,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,gBAAgB,GAAG,MAAM,CAAC,OAAO,CAAC,gBAAgB,IAAI,SAAS,CAAC;IACtE,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,KAAK,OAAO,CAAC;IACvE,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,KAAK,MAAM,CAAC;IACtE,MAAM,iBAAiB,GAAG,MAAM,CAAC,OAAO,CAAC,iBAAiB,IAAI,SAAS,CAAC;IACxE,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,IAAI,SAAS,CAAC;IAE3D,OAAO;QACL,MAAM;QACN,OAAO;QACP,aAAa;QACb,SAAS;QACT,SAAS;QACT,gBAAgB;QAChB,UAAU;QACV,IAAI;QACJ,aAAa;QACb,gBAAgB;QAChB,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,YAAY;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,kBAA4B;IACpD,IAAI,OAAO,QAAQ,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,kBAA4B,EAAE,aAAqB;IAChF,IAAI,OAAO,SAAS,KAAK,WAAW;QAAE,OAAO,aAAa,CAAC;IAE3D,MAAM,WAAW,GAAG,SAAS,CAAC,QAAQ,IAAK,SAAmD,CAAC,YAAY,IAAI,EAAE,CAAC;IAClH,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAE5D,IAAI,kBAAkB,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7C,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAc,EAAE,aAAqB;IAC7D,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;IAC1E,MAAM,MAAM,GAAG,MAAM,KAAK,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,MAAM,CAAC;IAC5D,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,QAAQ;IACrB,sBAAsB;IACtB,MAAM,OAAO,GAAG,QAAQ,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAkC,CAAC;IAE5E,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,CAAC,iBAAiB,GAAG,MAAM,CAAC;IAElC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO;IACT,CAAC;IAED,2BAA2B;IAC3B,IAAI,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC;IACzC,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACnC,4DAA4D;QAC5D,iEAAiE;QACjE,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;QAC7E,aAAa,GAAG,QAAQ,IAAI,MAAM,CAAC,aAAa,CAAC;IACnD,CAAC;SAAM,CAAC;QACN,uCAAuC;QACvC,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACxD,IAAI,YAAY,EAAE,CAAC;YACjB,aAAa,GAAG,YAAY,CAAC;QAC/B,CAAC;aAAM,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC7B,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;IAED,wCAAwC;IACxC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC;IAE1E,0EAA0E;IAC1E,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAChD,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChD,gBAAgB,CAAC,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAEjD,mEAAmE;IACnE,MAAM,cAAc,GAAG,GAAG,EAAE;QAC1B,sEAAsE;QACtE,yEAAyE;QACzE,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,2BAA2B,CAAC,EAAE,CAAC;gBACjF,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;gBAChD,SAAS,CAAC,OAAO,CAAC,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC;gBAC3D,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;oBAC5B,SAAS,CAAC,OAAO,CAAC,yBAAyB,GAAG,MAAM,CAAC,gBAAgB,CAAC;gBACxE,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,SAAS,CAAC,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC;gBACzD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC9B,SAAS,CAAC,OAAO,CAAC,0BAA0B,GAAG,OAAO,CAAC;gBACzD,CAAC;gBACD,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAC7B,SAAS,CAAC,OAAO,CAAC,0BAA0B,GAAG,MAAM,CAAC,iBAAiB,CAAC;gBAC1E,CAAC;gBACD,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QACD,4EAA4E;QAC5E,gBAAgB,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC,CAAC;IAEF,IAAI,QAAQ,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QACtC,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,cAAc,CAAC,CAAC;IAChE,CAAC;SAAM,CAAC;QACN,cAAc,EAAE,CAAC;IACnB,CAAC;IAED,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC;YACvC,aAAa,EAAE,aAAa;YAC5B,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC;aACC,GAAG,CAAC,IAAI,gBAAgB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAC5C,GAAG,CAAC,IAAI,sBAAsB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD,GAAG,CAAC,IAAI,sBAAsB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;aAClD,GAAG,CACF,IAAI,iBAAiB,CAAC;YACpB,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,OAAO,EAAE,MAAM,CAAC,OAAO;gBACvB,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,WAAW,EAAE;oBACX,OAAO,EAAE,QAAQ,KAAK,MAAM;oBAC5B,UAAU,EAAE,GAAG;oBACf,SAAS,EAAE,EAAE;iBACd;gBACD,iBAAiB,EAAE;oBACjB;wBACE,MAAM,EAAE,aAAa;wBACrB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,KAAK,EAAE,IAAI;qBACZ;iBACF;aACF;SACF,CAAC,CACH;aACA,KAAK,EAAE,CAAC;QAEX,yBAAyB;QACzB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;YACxC,gBAAgB,EAAE,MAAM,CAAC,gBAAgB;SAC1C,CAAC,CAAC;QACH,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7B,cAAc,CAAC,IAAI,CAAC;YAClB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,MAAM,EAAE,aAAa;YACrB,YAAY,EAAE,MAAM,CAAC,aAAa;SACnC,CAAC,CAAC;QAEH,+CAA+C;QAC/C,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/B,gBAAgB,CAAC,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACpD,QAAQ,CAAC,MAAM,GAAG,oBAAoB,MAAM,0CAA0C,CAAC;YAEvF,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,2DAA2D;gBAC3D,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;gBAC/C,OAAO;YACT,CAAC;YAED,kCAAkC;YAClC,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;gBAChC,iBAAiB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;aACtC,CAAC,CAAC;YACH,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACpC,cAAc,CAAC,WAAW,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,sCAAsC;QACtC,MAAM,YAAY,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,uBAAuB;QACjE,MAAM,mBAAmB,GAAG,MAAM,CAAC,CAAC,qCAAqC;QACzE,IAAI,sBAAsB,GAAG,KAAK,CAAC;QACnC,IAAI,WAAW,GAAoC,EAAE,CAAC;QACtD,IAAI,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAEnC,MAAM,kBAAkB,GAAG,KAAK,IAAmB,EAAE;YACnD,MAAM,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC7C,cAAc,CAAC,aAAa,EAAE,CAAC;YAC/B,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACjC,CAAC,CAAC;QAEF,MAAM,aAAa,GAAG,GAAG,EAAE;YACzB,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1C,WAAW,GAAG,EAAE,CAAC;QACnB,CAAC,CAAC;QAEF,uCAAuC;QACvC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACtC,sBAAsB,GAAG,IAAI,CAAC;YAC9B,aAAa,EAAE,CAAC;YAChB,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC3B,WAAW,CAAC,IAAI,CACd,UAAU,CAAC,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAC9D,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,4EAA4E;QAC5E,oEAAoE;QACpE,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,GAAG,EAAE;YACjD,IAAI,QAAQ,CAAC,eAAe,KAAK,SAAS;gBAAE,OAAO;YAEnD,IAAI,sBAAsB,EAAE,CAAC;gBAC3B,sBAAsB,GAAG,KAAK,CAAC;gBAC/B,aAAa,EAAE,CAAC;gBAChB,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,iBAAiB,GAAG,mBAAmB,EAAE,CAAC;gBAChE,kBAAkB,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,MAAM,QAAQ,GAAsB;YAClC,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,YAAY,CAAC;YACzE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,EAAE,EAAE,YAAY,CAAC;YACjF,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;gBAC/B,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE;oBAChC,iBAAiB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC;iBACtC,CAAC,CAAC;gBACH,cAAc,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBACpC,cAAc,CAAC,WAAW,EAAE,CAAC;gBAC7B,gBAAgB,CAAC,OAAO,EAAE,CAAC;YAC7B,CAAC;YACD,gBAAgB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC/C,EAAE,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAA8B,EAAE,QAAQ,CAAC;YAC9E,WAAW,EAAE,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE;YAC/C,kBAAkB;YAClB,cAAc;YACd,gBAAgB;SACjB,CAAC;QAEF,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;QAE5B,yEAAyE;QACzE,yEAAyE;QACzE,mCAAmC;QACnC,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACnF,IAAI,WAAW,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,4CAA4C,CAAC,EAAE,CAAC;YACzF,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YACtD,YAAY,CAAC,GAAG,GAAG,MAAM,CAAC,YAAY;mBACjC,mDAAmD,CAAC;YACzD,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC;YACzC,YAAY,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtD,YAAY,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAC1C,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC;YAC1B,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;QAC1C,CAAC;QAED,gDAAgD;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,cAAc,CAAC,aAAa,EAAE,CAAC;QACjC,CAAC;QACD,cAAc,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAC;IAC7D,CAAC;AACH,CAAC;AAED,0BAA0B;AAC1B,QAAQ,EAAE,CAAC;AAEX,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC"}
|
|
@@ -17,6 +17,7 @@ export interface AutoTranslatorConfig {
|
|
|
17
17
|
export declare class AutoTranslator {
|
|
18
18
|
private core;
|
|
19
19
|
private blockExtractor;
|
|
20
|
+
private attributeExtractor;
|
|
20
21
|
private domObserver;
|
|
21
22
|
private locale;
|
|
22
23
|
private sourceLocale;
|
|
@@ -82,10 +83,32 @@ export declare class AutoTranslator {
|
|
|
82
83
|
* Translate extracted blocks using ContentUnit model
|
|
83
84
|
*/
|
|
84
85
|
private translateBlocks;
|
|
86
|
+
/**
|
|
87
|
+
* Translate extracted attribute units against the cache.
|
|
88
|
+
*
|
|
89
|
+
* Mirrors translateBlocks but for attribute values. For each hit, the
|
|
90
|
+
* original attribute value is preserved in `data-lr-orig-{name}` so
|
|
91
|
+
* retranslate() can restore source. The element accumulates a comma-
|
|
92
|
+
* separated `data-lionrapid-client-attrs` list naming every attr the
|
|
93
|
+
* client touched — so we can find them all on retranslate without
|
|
94
|
+
* iterating a fixed selector set.
|
|
95
|
+
*
|
|
96
|
+
* Cache misses emit `translation:not-found` with empty styles, so the
|
|
97
|
+
* existing MissingTranslationQueue + NetworkRepository sync queue
|
|
98
|
+
* picks them up unchanged.
|
|
99
|
+
*/
|
|
100
|
+
private translateAttributesIn;
|
|
85
101
|
/**
|
|
86
102
|
* Get translated count
|
|
87
103
|
*/
|
|
88
104
|
getTranslatedCount(): number;
|
|
105
|
+
/**
|
|
106
|
+
* Restore every client-translated attribute on `el` from its
|
|
107
|
+
* `data-lr-orig-*` backup, then strip the stamps. Mirrors the block-side
|
|
108
|
+
* restoration in retranslate() so language switch / editor reset clears
|
|
109
|
+
* attributes too.
|
|
110
|
+
*/
|
|
111
|
+
private restoreClientAttributes;
|
|
89
112
|
/**
|
|
90
113
|
* Re-translate a single element (for editor live preview reset)
|
|
91
114
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-translator.d.ts","sourceRoot":"","sources":["../../src/browser/auto-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-translator.d.ts","sourceRoot":"","sources":["../../src/browser/auto-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIrD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAOtD,MAAM,WAAW,oBAAoB;IACnC,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,IAAI,CAA8B;IAC1C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,SAAS,CAAM;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,eAAe,CAA2B;IAClD,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,eAAe,CAAK;gBAEhB,MAAM,GAAE,oBAAyB;IAc7C;;OAEG;IACH,OAAO,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;IAIlC;;OAEG;IACH,IAAI,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAM/E;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIlC;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAIrC;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAKpC;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAU1C;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,OAAO,IAAI,IAAI;IAWf;;OAEG;IACH,aAAa,IAAI,IAAI;IAOrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;IACH,OAAO,CAAC,eAAe;IA0DvB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,qBAAqB;IA6C7B;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAS1C;;OAEG;IACH,WAAW,IAAI,IAAI;CAwBpB"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
* picked up by MissingTranslationQueue, and synced through NetworkRepository.
|
|
8
8
|
*/
|
|
9
9
|
import { BlockExtractor } from './block-extractor.js';
|
|
10
|
+
import { AttributeExtractor } from './attribute-extractor.js';
|
|
10
11
|
import { DOMObserver } from './dom-observer.js';
|
|
11
12
|
import { HTMLSerializer } from '../content/serializer/HTMLSerializer.js';
|
|
12
13
|
import { generateAutoKey } from './md5.js';
|
|
@@ -14,6 +15,7 @@ const htmlSerializer = new HTMLSerializer();
|
|
|
14
15
|
export class AutoTranslator {
|
|
15
16
|
core = null;
|
|
16
17
|
blockExtractor;
|
|
18
|
+
attributeExtractor;
|
|
17
19
|
domObserver = null;
|
|
18
20
|
locale = '';
|
|
19
21
|
sourceLocale = '';
|
|
@@ -24,6 +26,7 @@ export class AutoTranslator {
|
|
|
24
26
|
translatedCount = 0;
|
|
25
27
|
constructor(config = {}) {
|
|
26
28
|
this.blockExtractor = new BlockExtractor(config.excludePatterns, config.excludeSelectors, config.minTextLength);
|
|
29
|
+
this.attributeExtractor = new AttributeExtractor(config.excludePatterns, config.excludeSelectors, config.minTextLength);
|
|
27
30
|
this.debounceMs = config.debounceMs ?? 100;
|
|
28
31
|
}
|
|
29
32
|
/**
|
|
@@ -72,8 +75,9 @@ export class AutoTranslator {
|
|
|
72
75
|
if (!this.core) {
|
|
73
76
|
return 0;
|
|
74
77
|
}
|
|
75
|
-
const
|
|
76
|
-
|
|
78
|
+
const blockCount = this.translateBlocks(this.blockExtractor.extract(element));
|
|
79
|
+
const attrCount = this.translateAttributesIn(this.attributeExtractor.extract(element));
|
|
80
|
+
return blockCount + attrCount;
|
|
77
81
|
}
|
|
78
82
|
/**
|
|
79
83
|
* Translate the entire page
|
|
@@ -188,12 +192,87 @@ export class AutoTranslator {
|
|
|
188
192
|
}
|
|
189
193
|
return count;
|
|
190
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Translate extracted attribute units against the cache.
|
|
197
|
+
*
|
|
198
|
+
* Mirrors translateBlocks but for attribute values. For each hit, the
|
|
199
|
+
* original attribute value is preserved in `data-lr-orig-{name}` so
|
|
200
|
+
* retranslate() can restore source. The element accumulates a comma-
|
|
201
|
+
* separated `data-lionrapid-client-attrs` list naming every attr the
|
|
202
|
+
* client touched — so we can find them all on retranslate without
|
|
203
|
+
* iterating a fixed selector set.
|
|
204
|
+
*
|
|
205
|
+
* Cache misses emit `translation:not-found` with empty styles, so the
|
|
206
|
+
* existing MissingTranslationQueue + NetworkRepository sync queue
|
|
207
|
+
* picks them up unchanged.
|
|
208
|
+
*/
|
|
209
|
+
translateAttributesIn(extracted) {
|
|
210
|
+
if (!this.core)
|
|
211
|
+
return 0;
|
|
212
|
+
let count = 0;
|
|
213
|
+
for (const { element, attrName, unit, key } of extracted) {
|
|
214
|
+
const fullKey = `${this.locale}:${this.namespace}:${key}`;
|
|
215
|
+
const cached = this.core.cache.get(fullKey);
|
|
216
|
+
if (cached && cached.value !== unit.text && cached.value !== key) {
|
|
217
|
+
const lower = attrName.toLowerCase();
|
|
218
|
+
const origAttr = `data-lr-orig-${lower}`;
|
|
219
|
+
// Preserve the source value the first time we touch this attr,
|
|
220
|
+
// so retranslate() can restore it even after multiple in-page
|
|
221
|
+
// language switches.
|
|
222
|
+
if (!element.hasAttribute(origAttr)) {
|
|
223
|
+
element.setAttribute(origAttr, unit.text);
|
|
224
|
+
}
|
|
225
|
+
element.setAttribute(attrName, cached.value);
|
|
226
|
+
element.setAttribute(`data-lr-attr-${lower}`, key);
|
|
227
|
+
// Append to the client-attrs list (dedup so multiple passes
|
|
228
|
+
// don't grow it without bound).
|
|
229
|
+
const existing = element.getAttribute('data-lionrapid-client-attrs') ?? '';
|
|
230
|
+
const set = new Set(existing.split(',').filter(Boolean));
|
|
231
|
+
set.add(lower);
|
|
232
|
+
element.setAttribute('data-lionrapid-client-attrs', Array.from(set).join(','));
|
|
233
|
+
count++;
|
|
234
|
+
}
|
|
235
|
+
else {
|
|
236
|
+
this.core.bus.emit('translation:not-found', {
|
|
237
|
+
payload: {
|
|
238
|
+
key,
|
|
239
|
+
fallbackValue: unit.text,
|
|
240
|
+
locale: this.sourceLocale,
|
|
241
|
+
namespace: this.namespace,
|
|
242
|
+
status: 404,
|
|
243
|
+
styles: {},
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return count;
|
|
249
|
+
}
|
|
191
250
|
/**
|
|
192
251
|
* Get translated count
|
|
193
252
|
*/
|
|
194
253
|
getTranslatedCount() {
|
|
195
254
|
return this.translatedCount;
|
|
196
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Restore every client-translated attribute on `el` from its
|
|
258
|
+
* `data-lr-orig-*` backup, then strip the stamps. Mirrors the block-side
|
|
259
|
+
* restoration in retranslate() so language switch / editor reset clears
|
|
260
|
+
* attributes too.
|
|
261
|
+
*/
|
|
262
|
+
restoreClientAttributes(el) {
|
|
263
|
+
const list = el.getAttribute('data-lionrapid-client-attrs');
|
|
264
|
+
if (list === null)
|
|
265
|
+
return;
|
|
266
|
+
for (const name of list.split(',').filter(Boolean)) {
|
|
267
|
+
const orig = el.getAttribute(`data-lr-orig-${name}`);
|
|
268
|
+
if (orig !== null) {
|
|
269
|
+
el.setAttribute(name, orig);
|
|
270
|
+
el.removeAttribute(`data-lr-orig-${name}`);
|
|
271
|
+
}
|
|
272
|
+
el.removeAttribute(`data-lr-attr-${name}`);
|
|
273
|
+
}
|
|
274
|
+
el.removeAttribute('data-lionrapid-client-attrs');
|
|
275
|
+
}
|
|
197
276
|
/**
|
|
198
277
|
* Re-translate a single element (for editor live preview reset)
|
|
199
278
|
*/
|
|
@@ -203,15 +282,16 @@ export class AutoTranslator {
|
|
|
203
282
|
element.innerHTML = original;
|
|
204
283
|
element.removeAttribute('data-lionrapid-client');
|
|
205
284
|
element.removeAttribute('data-lr-block');
|
|
285
|
+
this.restoreClientAttributes(element);
|
|
206
286
|
this.translateElement(element);
|
|
207
287
|
}
|
|
208
288
|
/**
|
|
209
289
|
* Re-translate the page (after language change)
|
|
210
290
|
*/
|
|
211
291
|
retranslate() {
|
|
212
|
-
// Restore original HTML for all previously translated
|
|
213
|
-
const
|
|
214
|
-
|
|
292
|
+
// Restore original HTML for all previously translated blocks
|
|
293
|
+
const translatedBlocks = document.querySelectorAll('[data-lionrapid-client]');
|
|
294
|
+
translatedBlocks.forEach((el) => {
|
|
215
295
|
const original = el.getAttribute('data-lr-original');
|
|
216
296
|
if (original !== null) {
|
|
217
297
|
el.innerHTML = original;
|
|
@@ -219,6 +299,11 @@ export class AutoTranslator {
|
|
|
219
299
|
el.removeAttribute('data-lionrapid-client');
|
|
220
300
|
el.removeAttribute('data-lr-block');
|
|
221
301
|
});
|
|
302
|
+
// Restore source values for client-translated attributes. Selector
|
|
303
|
+
// matches the marker the attribute pass writes; per-name lists live
|
|
304
|
+
// inside that attribute so we don't need a fixed selector per kind.
|
|
305
|
+
const translatedAttrs = document.querySelectorAll('[data-lionrapid-client-attrs]');
|
|
306
|
+
translatedAttrs.forEach((el) => this.restoreClientAttributes(el));
|
|
222
307
|
// Re-translate (blocks are now back to source text, so auto_keys will be correct)
|
|
223
308
|
this.translatedCount = 0;
|
|
224
309
|
if (this.locale !== this.sourceLocale) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-translator.js","sourceRoot":"","sources":["../../src/browser/auto-translator.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,EAAE,cAAc,EAAkB,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"auto-translator.js","sourceRoot":"","sources":["../../src/browser/auto-translator.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,6 +19,14 @@ export declare class BlockExtractor {
|
|
|
19
19
|
* @param includeTranslated - If true, include elements already marked as translated (for editor mode)
|
|
20
20
|
*/
|
|
21
21
|
extract(root: Element | Document, includeTranslated?: boolean): ExtractedBlock[];
|
|
22
|
+
/**
|
|
23
|
+
* Second pass: extract inline elements (currently <a>) that have no block
|
|
24
|
+
* ancestor. These would otherwise slip through both the block pass (not in
|
|
25
|
+
* BLOCK_SELECTOR) and the inline-style capture (no parent block to host
|
|
26
|
+
* them as `<1>...</1>`). Common shape: a `<div>` action group containing
|
|
27
|
+
* only links.
|
|
28
|
+
*/
|
|
29
|
+
private extractOrphanInline;
|
|
22
30
|
private isInsideSkipTag;
|
|
23
31
|
private hasSkipAttribute;
|
|
24
32
|
private matchesExcludeSelector;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"block-extractor.d.ts","sourceRoot":"","sources":["../../src/browser/block-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAiB,eAAe,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"block-extractor.d.ts","sourceRoot":"","sources":["../../src/browser/block-extractor.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAiB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAuCrE,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,WAAW,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,gBAAgB,CAAW;gBAGjC,eAAe,GAAE,OAAO,CAAC,eAAe,CAAM,EAC9C,gBAAgB,GAAE,MAAM,EAAO,EAC/B,aAAa,SAAI;IAMnB;;;OAGG;IACH,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,iBAAiB,UAAQ,GAAG,cAAc,EAAE;IAoF9E;;;;;;OAMG;IACH,OAAO,CAAC,mBAAmB;IAiE3B,OAAO,CAAC,eAAe;IAWvB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,sBAAsB;CAY/B"}
|